public async Task <IActionResult> GetFilterCurrencySale([FromQuery] FilterCurrSaleDto filterPiDto) { if (ModelState.IsValid) { var piDetail = await _saleService.GetListSales(filterPiDto, User.GeFinancialPeriodId()); return(JsonResponseStatus.Success(piDetail)); } return(JsonResponseStatus.Error()); }
public async Task <FilterCurrSaleDto> GetListSales(FilterCurrSaleDto filterDto, long financialPeriodId) { var financial = await _financialPeriodRepository.GetEntityById(financialPeriodId); var currencyAsQueryable = _saleRepository .GetEntities() .Where(x => x.SaleDate >= financial.FromDate && x.SaleDate < financial.ToDate) .AsQueryable(); #region Set Filters #region Filter - SearchText if (filterDto.SearchText != null || !(string.IsNullOrEmpty(filterDto.SearchText))) { currencyAsQueryable = currencyAsQueryable .Include(x => x.Customer) .Include(c => c.Broker) .Where(x => x.Customer.Name.Contains(filterDto.SearchText.Trim()) || x.Customer.Title.Contains(filterDto.SearchText.Trim()) || x.Broker.Name.Contains(filterDto.SearchText.Trim()) ); } #endregion #region Filter - Transfer Type(s) if (filterDto.IsAccount) { currencyAsQueryable = currencyAsQueryable.Where(x => x.TransferType == CurrencyTransferType.Accounting); } if (filterDto.IsCashed) { currencyAsQueryable = currencyAsQueryable.Where(x => x.TransferType == CurrencyTransferType.Cash); } #endregion #region Filter - Currency Type(s) var currencyTypeList = new List <CurrencyType>(); if (filterDto.IsCurrencyTypeCurrency) { currencyTypeList.Add(CurrencyType.CarrencySales); } if (filterDto.IsCurrencyTypeBroker) { currencyTypeList.Add(CurrencyType.CurrencyTransferFromTheBroker); } if (filterDto.IsCurrencyTypeMissCustomer) { currencyTypeList.Add(CurrencyType.CurrencyTransferFromTheMiscellaneousCustomer); } if (filterDto.IsCurrencyTypeCommCustomer) { currencyTypeList.Add(CurrencyType.CurrencyTransferFromTheCommodityCustomer); } if (currencyTypeList.Count > 0) { currencyAsQueryable = currencyAsQueryable.Where(x => currencyTypeList.Contains(x.CurrencyType)); } #endregion #region Filter - From To Sale Date if (!string.IsNullOrWhiteSpace(filterDto.FromDateSale) && !string.IsNullOrWhiteSpace(filterDto.ToDateSale)) { var from = Convert.ToDateTime(filterDto.FromDateSale); var to = Convert.ToDateTime(filterDto.ToDateSale); currencyAsQueryable = currencyAsQueryable.Where(x => x.SaleDate >= from && x.SaleDate < to); //currencyAsQueryable = currencyAsQueryable.Where(x => x.SaleDate < DateTime.Today); } #endregion #region Filter - From To Price if (filterDto.FromSaleBasePrice != 0) { currencyAsQueryable = currencyAsQueryable.Where(s => s.SalePricePerUnit >= filterDto.FromSaleBasePrice); } if (filterDto.ToSaleBasePrice != 0) { currencyAsQueryable = currencyAsQueryable.Where(s => s.SalePricePerUnit <= filterDto.ToSaleBasePrice); } #endregion #region Filter - Broker if (filterDto.BrokerId > 0) { currencyAsQueryable = currencyAsQueryable.Where(s => s.BrokerId == filterDto.BrokerId); } #endregion #region Filter - Customer if (filterDto.CustomerId > 0) { currencyAsQueryable = currencyAsQueryable.Where(s => s.CustomerId == filterDto.CustomerId); } #endregion #endregion currencyAsQueryable = currencyAsQueryable.OrderByDescending(x => x.SaleDate); var count = (int)Math.Ceiling(currencyAsQueryable.Count() / (double)filterDto.TakeEntity); var pager = Pager.Builder(count, filterDto.PageId, filterDto.TakeEntity); var list = currencyAsQueryable.Paging(pager).ToList(); filterDto.Entities = new List <CurrencySaleDto>(); foreach (var item in list) { var context = new ContextCurrencyType(); #region Sterategy Pattern switch ((CurrencyType)item.CurrencyType) { case CurrencyType.CarrencySales: filterDto.Entities.Add(await context.SetCurrency(new MoveToCustomerCurrencyType(), _saleRepository, _salePiDetailRepository, item)); // code block break; case CurrencyType.CurrencyTransferFromTheBroker: filterDto.Entities.Add(await context.SetCurrency(new MoveToBrokerCurrencyType(_brokerRepository), _saleRepository, _salePiDetailRepository, item)); // code block break; case CurrencyType.CurrencyTransferFromTheMiscellaneousCustomer: filterDto.Entities.Add(await context.SetCurrency(new MoveToMissCustomerCurrencyType(_miscellaneousCustomerRepository), _saleRepository, _salePiDetailRepository, item)); break; case CurrencyType.CurrencyTransferFromTheCommodityCustomer: filterDto.Entities.Add(await context.SetCurrency(new MoveToCommCustomerCurrencyType(_commodityCustomerRepository), _saleRepository, _salePiDetailRepository, item)); break; } #endregion } return((FilterCurrSaleDto)filterDto.SetEntitiesDto(filterDto.Entities).SetPaging(pager)); }