private async Task <List <TransactionDayGroup> > ListTransactionDayGroup(TransactionDayGroupFilter filter) { // Khoi tao List chua ket qua List <TransactionDayGroup> result = new List <TransactionDayGroup>(); // Lay het ngay trong thang filter ra List <DateTime> dates = GetDates(filter.Year, filter.Month); // Trong moi ngay ma co Transaction thi tao 1 TransactionDayGroup foreach (DateTime date in dates) { // Tao filter theo tung ngay trong thang TransactionFilter transactionFilter = new TransactionFilter { Date = new DateTimeFilter { Equal = date }, WalletName = new StringFilter { Equal = filter.WalletName }, UserId = new GuidFilter { Equal = filter.UserId } }; // List transactions trong ngay hom do List <Transaction> transactions = await List(transactionFilter); // Neu ngay hom do co transactions thi tao 1 TransactionDayGroup moi if (transactions != null) { if (transactions.Count > 0) { decimal inflow = 0; decimal outflow = 0; transactions.ForEach(t => { if (t.Amount < 0) { outflow += t.Amount; } else { inflow += t.Amount; } }); result.Add(new TransactionDayGroup { Date = date, Transactions = transactions, Inflow = inflow, Outflow = outflow }); } } } // Tra ket qua return(result); }
public async Task <TransactionMonthGroup> GetTransactionMonthGroup(TransactionMonthGroupFilter filter) { // Filter theo thang va nam de list transaction day group theo thang do TransactionDayGroupFilter transactionDayGroupFilter = new TransactionDayGroupFilter { Month = filter.Month, Year = filter.Year, WalletName = filter.WalletName, UserId = filter.UserId }; List <TransactionDayGroup> transactionDayGroups = await ListTransactionDayGroup(transactionDayGroupFilter); // Tinh toan voi outflow < 0 va inflow > 0 decimal inflow = 0; decimal outflow = 0; transactionDayGroups.ForEach(tdg => { inflow += tdg.Inflow; outflow += tdg.Outflow; }); // Tra ve transaction month group return(new TransactionMonthGroup { Outflow = outflow, Inflow = inflow, InOutRate = inflow + outflow, Month = filter.Month, Year = filter.Year, TransactionDayGroups = transactionDayGroups }); }