Esempio n. 1
0
        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));
        }