public async Task <IActionResult> OnGetAsync(int?diaryId, string sortOrder, string searchString, string datePeriodFilter , int?pageIndexKartela, int?pageSizeKartela, int?transactorTypeFilter, int?companyFilter, int?parentPageIndex , int?parentPageSize) { if (diaryId == null) { return(NotFound()); } var diaryDef = await _context.DiaryDefs.FindAsync(diaryId); if (diaryDef == null) { return(NotFound()); } LoadFilters(); DiaryId = (int)(diaryId ?? 0); CompanyFilter = (int)(companyFilter ?? 0); ParentPageSize = (int)(parentPageSize ?? 0); ParentPageIndex = (int)(parentPageIndex ?? 0); PageSizeKartela = (int)((pageSizeKartela == null || pageSizeKartela == 0) ? 20 : pageSizeKartela); TransactorTypeFilter = (int)(transactorTypeFilter ?? 0); CurrentSort = sortOrder; NameSort = sortOrder == "Name" ? "name_desc" : "Name"; DateSort = sortOrder == "Date" ? "date_desc" : "Date"; if (searchString != null) { pageIndexKartela = 1; } else { searchString = CurrentFilter; } CurrentFilter = searchString; CurrentDatePeriod = datePeriodFilter; IQueryable <TransactorTransaction> fullListIq = _context.TransactorTransactions; if (diaryDef.SelectedTransTypes != null) { var transTypes = Array.ConvertAll(diaryDef.SelectedTransTypes.Split(","), int.Parse); fullListIq = fullListIq.Where(p => transTypes.Contains(p.Transactor.TransactorTypeId)); } if (diaryDef.SelectedDocTypes != null) { var docTypes = Array.ConvertAll(diaryDef.SelectedDocTypes.Split(","), int.Parse); fullListIq = fullListIq.Where(p => docTypes.Contains(p.TransTransactorDocTypeId)); } DateFilterDates dfDates = DateFilter.GetDateFilterDates(datePeriodFilter); DateTime fromDate = dfDates.FromDate; DateTime toDate = dfDates.ToDate; CurrentDatePeriod = dfDates.FilterName; fullListIq = fullListIq.Where(p => p.TransDate >= fromDate && p.TransDate <= toDate); if (companyFilter > 0) { fullListIq = fullListIq.Where(p => p.CompanyId == companyFilter); } if (!String.IsNullOrEmpty(searchString)) { fullListIq = fullListIq.Where(s => s.Transactor.Name.Contains(searchString)); } switch (sortOrder) { case "Date": fullListIq = fullListIq.OrderBy(p => p.TransDate); DateSortIcon = "fas fa-sort-numeric-up "; NameSortIcon = "invisible"; break; case "date_desc": fullListIq = fullListIq.OrderByDescending(p => p.TransDate); DateSortIcon = "fas fa-sort-numeric-down "; NameSortIcon = "invisible"; break; case "Name": fullListIq = fullListIq.OrderBy(p => p.Transactor.Name); NameSortIcon = "fas fa-sort-alpha-up "; DateSortIcon = "invisible"; break; case "name_desc": fullListIq = fullListIq.OrderByDescending(p => p.Transactor.Name); NameSortIcon = "fas fa-sort-alpha-down "; DateSortIcon = "invisible"; break; default: fullListIq = fullListIq.OrderBy(p => p.Id); break; } var t = fullListIq.ProjectTo <TransactorTransListDto>(_mapper.ConfigurationProvider); ListItems = await PagedList <TransactorTransListDto> .CreateAsync( t, pageIndexKartela ?? 1, PageSizeKartela); sumCredit = ListItems.Sum(p => p.CreditAmount); sumDebit = ListItems.Sum(p => p.DebitAmount); return(Page()); }
public async Task <IActionResult> GetTransactorTransactions([FromQuery] IndexDataTableRequest request) { if (request.TransactorId <= 0) { return(BadRequest(new { Error = "No valid transactor id specified" })); } var transactor = await _context.Transactors.FirstOrDefaultAsync(x => x.Id == request.TransactorId); if (transactor == null) { return(NotFound(new { Error = "Transactor not found" })); } var transactorType = await _context.TransactorTypes.Where(c => c.Id == transactor.TransactorTypeId) .FirstOrDefaultAsync(); IQueryable <TransactorTransaction> transactionsList = _context.TransactorTransactions .Where(p => p.TransactorId == request.TransactorId); IQueryable <TransactorTransaction> transListBeforePeriod = _context.TransactorTransactions .Where(p => p.TransactorId == request.TransactorId); IQueryable <TransactorTransaction> transListAll = _context.TransactorTransactions .Where(p => p.TransactorId == request.TransactorId); //default order transactionsList = transactionsList.OrderByDescending(p => p.TransDate); if (!string.IsNullOrEmpty(request.SortData)) { switch (request.SortData.ToLower()) { case "datesort:asc": transactionsList = transactionsList.OrderBy(p => p.TransDate); break; case "datesort:desc": transactionsList = transactionsList.OrderByDescending(p => p.TransDate); break; case "transactornamesort:asc": transactionsList = transactionsList.OrderBy(p => p.Transactor.Name); break; case "transactornamesort:desc": transactionsList = transactionsList.OrderByDescending(p => p.Transactor.Name); break; case "seriescodesort:asc": transactionsList = transactionsList.OrderBy(p => p.TransTransactorDocSeries.Code); break; case "seriescodesort:desc": transactionsList = transactionsList.OrderByDescending(p => p.TransTransactorDocSeries.Code); break; case "companycodesort:asc": transactionsList = transactionsList.OrderBy(p => p.Company.Code); break; case "companycodesort:desc": transactionsList = transactionsList.OrderByDescending(p => p.Company.Code); break; } } DateTime beforePeriodDate = DateTime.Today; if (!string.IsNullOrEmpty(request.DateRange)) { var datePeriodFilter = request.DateRange; DateFilterDates dfDates = DateFilter.GetDateFilterDates(datePeriodFilter); DateTime fromDate = dfDates.FromDate; beforePeriodDate = fromDate.AddDays(-1); DateTime toDate = dfDates.ToDate; transactionsList = transactionsList.Where(p => p.TransDate >= fromDate && p.TransDate <= toDate); transListBeforePeriod = transListBeforePeriod.Where(p => p.TransDate < fromDate); } if (!string.IsNullOrEmpty(request.CompanyFilter)) { if (int.TryParse(request.CompanyFilter, out var companyId)) { if (companyId > 0) { transactionsList = transactionsList.Where(p => p.CompanyId == companyId); transListBeforePeriod = transListBeforePeriod.Where(p => p.CompanyId == companyId); transListAll = transListAll.Where(p => p.CompanyId == companyId); } } } if (!string.IsNullOrEmpty(request.SearchFilter)) { transactionsList = transactionsList.Where(p => p.TransTransactorDocSeries.Name.Contains(request.SearchFilter) || p.TransTransactorDocSeries.Code.Contains(request.SearchFilter) || p.TransRefCode.Contains(request.SearchFilter) ); transListBeforePeriod = transListBeforePeriod.Where(p => p.TransTransactorDocSeries.Name.Contains(request.SearchFilter) || p.TransTransactorDocSeries.Code.Contains(request.SearchFilter) || p.TransRefCode.Contains(request.SearchFilter) ); transListAll = transListAll.Where(p => p.TransTransactorDocSeries.Name.Contains(request.SearchFilter) || p.TransTransactorDocSeries.Code.Contains(request.SearchFilter) || p.TransRefCode.Contains(request.SearchFilter) ); } var dbTrans = transactionsList.ProjectTo <TransactorTransListDto>(_mapper.ConfigurationProvider); var currencyRates = await _context.ExchangeRates.OrderByDescending(p => p.ClosingDate) .Take(10) .ToListAsync(); var t = transListAll.ProjectTo <TransactorTransListDto>(_mapper.ConfigurationProvider); var t1 = await t.Select(p => new TransactorTransListDto { Id = p.Id, TransDate = p.TransDate, TransTransactorDocSeriesId = p.TransTransactorDocSeriesId, TransTransactorDocSeriesName = p.TransTransactorDocSeriesName, TransTransactorDocSeriesCode = p.TransTransactorDocSeriesCode, TransTransactorDocTypeId = p.TransTransactorDocTypeId, TransRefCode = p.TransRefCode, TransactorId = p.TransactorId, TransactorName = p.TransactorName, SectionId = p.SectionId, SectionCode = p.SectionCode, CreatorId = p.CreatorId, FiscalPeriodId = p.FiscalPeriodId, FinancialAction = p.FinancialAction, FpaRate = p.FpaRate, DiscountRate = p.DiscountRate, AmountFpa = ConvertAmount(p.CompanyCurrencyId, request.DisplayCurrencyId, currencyRates, p.AmountFpa), AmountNet = ConvertAmount(p.CompanyCurrencyId, request.DisplayCurrencyId, currencyRates, p.AmountNet), AmountDiscount = ConvertAmount(p.CompanyCurrencyId, request.DisplayCurrencyId, currencyRates, p.AmountDiscount), TransFpaAmount = ConvertAmount(p.CompanyCurrencyId, request.DisplayCurrencyId, currencyRates, p.TransFpaAmount), TransNetAmount = ConvertAmount(p.CompanyCurrencyId, request.DisplayCurrencyId, currencyRates, p.TransNetAmount), TransDiscountAmount = ConvertAmount(p.CompanyCurrencyId, request.DisplayCurrencyId, currencyRates, p.TransDiscountAmount), CompanyCode = p.CompanyCode, CompanyCurrencyId = p.CompanyCurrencyId }).ToListAsync(); var grandSumOfAmount = t1.Sum(p => p.TotalAmount); var grandSumOfDebit = t1.Sum(p => p.DebitAmount); var grandSumOfCredit = t1.Sum(p => p.CreditAmount); var dbTransactions = await dbTrans.ToListAsync(); foreach (var listItem in dbTransactions) { if (listItem.CompanyCurrencyId != 1) { var r = currencyRates.Where(p => p.CurrencyId == listItem.CompanyCurrencyId) .OrderByDescending(p => p.ClosingDate).FirstOrDefault(); if (r != null) { listItem.AmountFpa = listItem.AmountFpa / r.Rate; listItem.AmountNet = listItem.AmountNet / r.Rate; listItem.AmountDiscount = listItem.AmountDiscount / r.Rate; listItem.TransFpaAmount = listItem.TransFpaAmount / r.Rate; listItem.TransNetAmount = listItem.TransNetAmount / r.Rate; listItem.TransDiscountAmount = listItem.TransDiscountAmount / r.Rate; } } if (request.DisplayCurrencyId != 1) { var r = currencyRates.Where(p => p.CurrencyId == request.DisplayCurrencyId) .OrderByDescending(p => p.ClosingDate).FirstOrDefault(); if (r != null) { listItem.AmountFpa = listItem.AmountFpa * r.Rate; listItem.AmountNet = listItem.AmountNet * r.Rate; listItem.AmountDiscount = listItem.AmountDiscount * r.Rate; listItem.TransFpaAmount = listItem.TransFpaAmount * r.Rate; listItem.TransNetAmount = listItem.TransNetAmount * r.Rate; listItem.TransDiscountAmount = listItem.TransDiscountAmount * r.Rate; } } } //----------------------------------------------- var dbTransBeforePeriod = transListBeforePeriod.ProjectTo <TransactorTransListDto>(_mapper.ConfigurationProvider); var transBeforePeriodList = await dbTransBeforePeriod.ToListAsync(); foreach (var item in transBeforePeriodList) { if (item.CompanyCurrencyId != 1) { var r = currencyRates.Where(p => p.CurrencyId == item.CompanyCurrencyId) .OrderByDescending(p => p.ClosingDate).FirstOrDefault(); if (r != null) { item.AmountFpa = item.AmountFpa / r.Rate; item.AmountNet = item.AmountNet / r.Rate; item.AmountDiscount = item.AmountDiscount / r.Rate; item.TransFpaAmount = item.TransFpaAmount / r.Rate; item.TransNetAmount = item.TransNetAmount / r.Rate; item.TransDiscountAmount = item.TransDiscountAmount / r.Rate; } } if (request.DisplayCurrencyId != 1) { var r = currencyRates.Where(p => p.CurrencyId == request.DisplayCurrencyId) .OrderByDescending(p => p.ClosingDate).FirstOrDefault(); if (r != null) { item.AmountFpa = item.AmountFpa * r.Rate; item.AmountNet = item.AmountNet * r.Rate; item.AmountDiscount = item.AmountDiscount * r.Rate; item.TransFpaAmount = item.TransFpaAmount * r.Rate; item.TransNetAmount = item.TransNetAmount * r.Rate; item.TransDiscountAmount = item.TransDiscountAmount * r.Rate; } } } //Create before period line var bl1 = new { Debit = transBeforePeriodList.Sum(x => x.DebitAmount), Credit = transBeforePeriodList.Sum(x => x.CreditAmount), }; var beforePeriod = new KartelaLine(); beforePeriod.Credit = bl1.Credit; beforePeriod.Debit = bl1.Debit; switch (transactorType.Code) { case "SYS.DTRANSACTOR": break; case "SYS.CUSTOMER": beforePeriod.RunningTotal = bl1.Debit - bl1.Credit; break; case "SYS.SUPPLIER": beforePeriod.RunningTotal = bl1.Credit - bl1.Debit; break; default: beforePeriod.RunningTotal = bl1.Credit - bl1.Debit; break; } beforePeriod.TransDate = beforePeriodDate; beforePeriod.DocSeriesCode = "Εκ.Μεταφ."; beforePeriod.CreatorId = -1; beforePeriod.TransactorName = ""; var listWithTotal = new List <KartelaLine>(); listWithTotal.Add(beforePeriod); //---------------------------------------------------- decimal runningTotal = beforePeriod.RunningTotal; foreach (var dbTransaction in dbTransactions) { switch (transactorType.Code) { case "SYS.DTRANSACTOR": break; case "SYS.CUSTOMER": runningTotal = dbTransaction.DebitAmount - dbTransaction.CreditAmount + runningTotal; break; case "SYS.SUPPLIER": runningTotal = dbTransaction.CreditAmount - dbTransaction.DebitAmount + runningTotal; break; default: runningTotal = dbTransaction.CreditAmount - dbTransaction.DebitAmount + runningTotal; break; } listWithTotal.Add(new KartelaLine { TransDate = dbTransaction.TransDate, DocSeriesCode = dbTransaction.TransTransactorDocSeriesCode, RefCode = dbTransaction.TransRefCode, CompanyCode = dbTransaction.CompanyCode, SectionCode = dbTransaction.SectionCode, CreatorId = dbTransaction.SectionCode == "SCNTRANSACTORTRANS" ? dbTransaction.Id : dbTransaction.CreatorId, RunningTotal = runningTotal, TransactorName = dbTransaction.TransactorName, Debit = dbTransaction.DebitAmount, Credit = dbTransaction.CreditAmount }); } var outList = listWithTotal.AsQueryable(); var pageIndex = request.PageIndex; var pageSize = request.PageSize; decimal sumCredit = 0; decimal sumDebit = 0; decimal sumDifference = 0; IQueryable <KartelaLine> fullListIq = from s in outList select s; var listItems = fullListIq.ToList(); foreach (var item in listItems) { sumCredit += item.Credit; sumDebit += item.Debit; } switch (transactorType.Code) { case "SYS.DTRANSACTOR": break; case "SYS.CUSTOMER": sumDifference = sumDebit - sumCredit; break; case "SYS.SUPPLIER": sumDifference = sumCredit - sumDebit; break; default: sumDifference = sumCredit - sumDebit; break; } var response = new JsonResult(listItems); return(Ok(response)); }
public async Task <IActionResult> GetMainDashboardInfo([FromQuery] IndexDataTableRequest request) { if (request.CodeToCompute == "SumOfIncomeSalesDf") { Debug.WriteLine(""); } var codeToComputeDefinition = await _context.AppSettings.FirstOrDefaultAsync(p => p.Code == request.CodeToCompute); if (codeToComputeDefinition == null) { return(BadRequest(new { Message = "Code to compute not exist" })); } if (string.IsNullOrEmpty(codeToComputeDefinition.Value)) { return(BadRequest(new { Message = "No definition found for code to compute" })); } decimal r = 0; var currencyRates = await _context.ExchangeRates.OrderByDescending(p => p.ClosingDate) .Take(10) .ToListAsync(); var def = codeToComputeDefinition.Value; var defObj = JsonConvert.DeserializeObject <CodeToComputeDefinition>(def); if (defObj.MatNatures == null && defObj.TransTypes == null && defObj.DocTypesSelected == null) { return(Ok(new MainDashboardInfoResponse { RequestedCodeToCompute = request.CodeToCompute, RequestedCodeSum = 0 })); } if (defObj.SrcType == MainInfoSourceTypeEnum.SourceTypeBuys) { IQueryable <BuyDocument> fullListIq = _context.BuyDocuments .Include(p => p.Transactor); if (!string.IsNullOrEmpty(request.CompanyFilter)) { if (int.TryParse(request.CompanyFilter, out var companyId)) { if (companyId > 0) { fullListIq = fullListIq.Where(p => p.CompanyId == companyId); } } } DateTime beforePeriodDate = DateTime.Today; if (!string.IsNullOrEmpty(request.DateRange)) { var datePeriodFilter = request.DateRange; DateFilterDates dfDates = DateFilter.GetDateFilterDates(datePeriodFilter); DateTime fromDate = dfDates.FromDate; beforePeriodDate = fromDate.AddDays(-1); DateTime toDate = dfDates.ToDate; fullListIq = fullListIq.Where(p => p.TransDate >= fromDate && p.TransDate <= toDate); //transactionsList = transactionsList.Where(p => p.TransDate >= fromDate && p.TransDate <= toDate); //transListBeforePeriod = transListBeforePeriod.Where(p => p.TransDate < fromDate); } if (defObj.TransTypes != null) { if (defObj.TransTypes.Length > 0) { fullListIq = fullListIq.Where(p => defObj.TransTypes.Contains(p.Transactor.TransactorTypeId)); } } if (defObj.DocTypesSelected != null) { if (defObj.DocTypesSelected.Length > 0) { fullListIq = fullListIq.Where(p => defObj.DocTypesSelected.Contains(p.BuyDocTypeId)); } } var t = fullListIq.ProjectTo <BuyDocListDto>(_mapper.ConfigurationProvider); var t1 = await t.Select(p => new BuyDocListDto { AmountFpa = ConvertAmount(p.CompanyCurrencyId, request.DisplayCurrencyId, currencyRates, p.AmountFpa), AmountNet = ConvertAmount(p.CompanyCurrencyId, request.DisplayCurrencyId, currencyRates, p.AmountNet), AmountDiscount = ConvertAmount(p.CompanyCurrencyId, request.DisplayCurrencyId, currencyRates, p.AmountDiscount), CompanyCurrencyId = p.CompanyCurrencyId }).ToListAsync(); //var grandSumOfAmount = t1.Sum(p => p.TotalAmount); r = t1.Sum(p => p.TotalNetAmount); } if (defObj.SrcType == MainInfoSourceTypeEnum.SourceTypeSales) { IQueryable <SellDocument> fullListIq = _context.SellDocuments .Include(p => p.Transactor); if (!string.IsNullOrEmpty(request.CompanyFilter)) { if (int.TryParse(request.CompanyFilter, out var companyId)) { if (companyId > 0) { fullListIq = fullListIq.Where(p => p.CompanyId == companyId); } } } DateTime beforePeriodDate = DateTime.Today; if (!string.IsNullOrEmpty(request.DateRange)) { var datePeriodFilter = request.DateRange; DateFilterDates dfDates = DateFilter.GetDateFilterDates(datePeriodFilter); DateTime fromDate = dfDates.FromDate; beforePeriodDate = fromDate.AddDays(-1); DateTime toDate = dfDates.ToDate; fullListIq = fullListIq.Where(p => p.TransDate >= fromDate && p.TransDate <= toDate); //transactionsList = transactionsList.Where(p => p.TransDate >= fromDate && p.TransDate <= toDate); //transListBeforePeriod = transListBeforePeriod.Where(p => p.TransDate < fromDate); } if (defObj.TransTypes != null) { if (defObj.TransTypes.Length > 0) { fullListIq = fullListIq.Where(p => defObj.TransTypes.Contains(p.Transactor.TransactorTypeId)); } } if (defObj.DocTypesSelected != null) { if (defObj.DocTypesSelected.Length > 0) { fullListIq = fullListIq.Where(p => defObj.DocTypesSelected.Contains(p.SellDocTypeId)); } } var t = fullListIq.ProjectTo <SellDocListDto>(_mapper.ConfigurationProvider); var t1 = await t.Select(p => new SellDocListDto { AmountFpa = ConvertAmount(p.CompanyCurrencyId, request.DisplayCurrencyId, currencyRates, p.AmountFpa), AmountNet = ConvertAmount(p.CompanyCurrencyId, request.DisplayCurrencyId, currencyRates, p.AmountNet), AmountDiscount = ConvertAmount(p.CompanyCurrencyId, request.DisplayCurrencyId, currencyRates, p.AmountDiscount), CompanyCurrencyId = p.CompanyCurrencyId }).ToListAsync(); //var grandSumOfAmount = t1.Sum(p => p.TotalAmount); r = t1.Sum(p => p.TotalNetAmount); // if (request.CodeToCompute=="SumOfIncomeSalesDf") // { // Debug.WriteLine($"Code was SumOfincomeSalesDf doc count was {t1.Count} and value is {r}"); // } } var response = new MainDashboardInfoResponse { RequestedCodeToCompute = request.CodeToCompute, RequestedCodeSum = r }; return(Ok(response)); }
public async Task <IActionResult> GetTrTransTest([FromBody] ExtendedDataManagerRequest request) { if (request.TransactorId == null) { return(BadRequest(new { Error = "No valid transactor id specified" })); } if (request.DisplayCurrencyId == 0) { return(BadRequest(new { Error = "No valid Currency specified" })); } if (request.DateRange == null) { return(BadRequest(new { Error = "No valid date range specified" })); } var transactor = await _context.Transactors.FirstOrDefaultAsync(x => x.Id == request.TransactorId); if (transactor == null) { return(NotFound(new { Error = "Transactor not found" })); } var transactorType = await _context.TransactorTypes.Where(c => c.Id == transactor.TransactorTypeId) .FirstOrDefaultAsync(); IQueryable <TransactorTransaction> transactionsList = _context.TransactorTransactions .Where(p => p.TransactorId == request.TransactorId); IQueryable <TransactorTransaction> transListBeforePeriod = _context.TransactorTransactions .Where(p => p.TransactorId == request.TransactorId); IQueryable <TransactorTransaction> transListAll = _context.TransactorTransactions .Where(p => p.TransactorId == request.TransactorId); //DateTime beforePeriodDate = DateTime.Today; if (!string.IsNullOrEmpty(request.DateRange)) { var datePeriodFilter = request.DateRange; DateFilterDates dfDates = DateFilter.GetDateFilterDates(datePeriodFilter); DateTime fromDate = dfDates.FromDate; //beforePeriodDate = fromDate.AddDays(-1); DateTime toDate = dfDates.ToDate; transactionsList = transactionsList.Where(p => p.TransDate >= fromDate && p.TransDate <= toDate); transListBeforePeriod = transListBeforePeriod.Where(p => p.TransDate < fromDate); } if (!string.IsNullOrEmpty(request.CompanyFilter)) { if (int.TryParse(request.CompanyFilter, out var companyId)) { if (companyId > 0) { transactionsList = transactionsList.Where(p => p.CompanyId == companyId); transListBeforePeriod = transListBeforePeriod.Where(p => p.CompanyId == companyId); transListAll = transListAll.Where(p => p.CompanyId == companyId); } } } var dbTrans = transactionsList.ProjectTo <TransactorTransListDto>(_mapper.ConfigurationProvider); var currencyRates = await _context.ExchangeRates.OrderByDescending(p => p.ClosingDate) .Take(10) .ToListAsync(); //IEnumerable<TransactorTransListDto> dbTransactions = await dbTrans.ToListAsync(); //-------------------------- IEnumerable <KartelaLine> dbTransactions = await dbTrans.Select(p => new KartelaLine { TransDate = p.TransDate, DocSeriesCode = p.TransTransactorDocSeriesCode, RefCode = p.TransRefCode, CompanyCode = p.CompanyCode, SectionCode = p.SectionCode, CreatorId = p.SectionCode == "SCNTRANSACTORTRANS" ? p.Id : p.CreatorId, RunningTotal = 0, TransactorName = p.TransactorName, Debit = ConvertAmount(p.CompanyCurrencyId, request.DisplayCurrencyId, currencyRates, p.DebitAmount), Credit = ConvertAmount(p.CompanyCurrencyId, request.DisplayCurrencyId, currencyRates, p.CreditAmount), }).ToListAsync(); //-------------------------- DataOperations operation = new DataOperations(); if (request.Search != null && request.Search.Count > 0) { dbTransactions = operation.PerformSearching(dbTransactions, request.Search); //Search } if (request.Where != null && request.Where.Count > 0) //Filtering { dbTransactions = operation.PerformFiltering(dbTransactions, request.Where, request.Where[0].Operator); } if (request.Sorted != null && request.Sorted.Count > 0) //Sorting { dbTransactions = operation.PerformSorting(dbTransactions, request.Sorted); decimal runningTotal = 0; foreach (var dbTransaction in dbTransactions) { switch (transactorType.Code) { case "SYS.DTRANSACTOR": break; case "SYS.CUSTOMER": runningTotal = dbTransaction.Debit - dbTransaction.Credit + runningTotal; break; case "SYS.SUPPLIER": runningTotal = dbTransaction.Credit - dbTransaction.Debit + runningTotal; break; default: runningTotal = dbTransaction.Credit - dbTransaction.Debit + runningTotal; break; } dbTransaction.RunningTotal = runningTotal; } } var resultCount = dbTransactions.Count(); if (request.Skip != 0) { dbTransactions = operation.PerformSkip(dbTransactions, request.Skip); //Paging } if (request.Take != 0) { dbTransactions = operation.PerformTake(dbTransactions, request.Take); } return(request.RequiresCounts ? Ok(new { result = dbTransactions, count = resultCount }) : Ok(new{ result = dbTransactions })); }