using System.Collections.Generic;
using System.Diagnostics;
public static void Main()
private static void Payments()
IList<string> options = new List<string>{"[Press any end to exit!]"};
foreach (string option in options)
Console.WriteLine(option);
Console.Write("Choose your Option:");
operation = Console.ReadLine();
int totalDueAmount = int.Parse(operation), runningValue = totalDueAmount;
IList<Orders> rawOrders = new List<Orders>()
{OrderNumber = 1, DueAmount = 0, OrderAmount = 2000, OrderDate = new DateTime(2019, 12, 21, 0, 0, 0, 0)}, new Orders()
{OrderNumber = 11, DueAmount = 0, OrderAmount = 2000, OrderDate = new DateTime(2019, 12, 23, 0, 0, 0, 0)}, new Orders()
{OrderNumber = 21, DueAmount = 0, OrderAmount = 2000, OrderDate = new DateTime(2019, 12, 26, 0, 0, 0, 0)}, new Orders()
{OrderNumber = 14, DueAmount = 0, OrderAmount = 2000, OrderDate = new DateTime(2019, 12, 4, 0, 0, 0, 0)}, new Orders()
{OrderNumber = 51, DueAmount = 0, OrderAmount = 1100, OrderDate = new DateTime(2019, 12, 28, 0, 0, 0, 0)}, new Orders()
{OrderNumber = 16, DueAmount = 0, OrderAmount = 2500, OrderDate = new DateTime(2019, 12, 6, 0, 0, 0, 0)}, new Orders()
{OrderNumber = 71, DueAmount = 0, OrderAmount = 3000, OrderDate = new DateTime(2019, 12, 7, 0, 0, 0, 0)}, new Orders()
{OrderNumber = 13, DueAmount = 0, OrderAmount = 2000, OrderDate = new DateTime(2019, 12, 8, 0, 0, 0, 0)}, new Orders()
{OrderNumber = 9, DueAmount = 0, OrderAmount = 2000, OrderDate = new DateTime(2019, 12, 9, 0, 0, 0, 0)}};
List<Orders> mappedOrders = rawOrders.Select(item => new Orders{DueAmount = item.DueAmount, Changed = false, OrderNumber = item.OrderNumber, UpdatedDueAmount = item.DueAmount, OrderAmount = item.OrderAmount, OrderDate = item.OrderDate}).OrderByDescending(a => a.OrderDate).ToList();
foreach (Orders item in mappedOrders)
if (item.OrderAmount <= runningValue)
runningValue = runningValue - item.OrderAmount;
item.UpdatedDueAmount = item.OrderAmount;
item.UpdatedDueAmount = runningValue;
var filteredOrders = mappedOrders.Where(a => a.Changed == true);
var testAllocatedAmount = 0;
foreach (var item in filteredOrders)
testAllocatedAmount = testAllocatedAmount + item.UpdatedDueAmount;
Console.WriteLine(item.ToString());
Console.WriteLine(String.Format("Entered Total Amount : {0}, Total Allocated Amount: {1}", totalDueAmount, testAllocatedAmount));
public int UpdatedDueAmount
public DateTime OrderDate
public override string ToString()
return string.Format("Order Number : {0}, Due Amount : {1}, Update Due Amount : {2}", OrderNumber, DueAmount, UpdatedDueAmount);