public async Task <FilterExDecDto> GetExDecsByFilterSoldAndExdecList(FilterExDecDto filterExDecDto)
        {
            var asQueryable = _exDeclarationRepository
                              .GetEntities()
                              .AsQueryable();

            if (filterExDecDto.SearchText != null || !(string.IsNullOrWhiteSpace(filterExDecDto.SearchText)))
            {
                asQueryable = asQueryable.Where(x => x.ExchangeDeclarationCode.Contains(filterExDecDto.SearchText.Trim()));
            }
            asQueryable = asQueryable.OrderByDescending(x => x.ExprireDate);
            var count  = (int)Math.Ceiling(asQueryable.Count() / (double)filterExDecDto.TakeEntity);
            var pager  = Pager.Builder(count, filterExDecDto.PageId, filterExDecDto.TakeEntity);
            var exdecs = await asQueryable.Paging(pager).ToListAsync();

            filterExDecDto.ExDecRemaind = new List <ExDecRemaindDto>();
            foreach (var item in exdecs)
            {
                var soldExCode = await _saleDetailRepository.GetSumExCodeUsedById(item.Id);

                filterExDecDto.ExDecRemaind.Add(new ExDecRemaindDto()
                {
                    ExCode       = item.ExchangeDeclarationCode,
                    ExpireDate   = item.ExprireDate,
                    Price        = item.Price,
                    Qty          = item.Qty,
                    SoldPrice    = soldExCode,
                    RemaindPrice = item.Price - soldExCode,
                    Id           = item.Id,
                    Description  = item.Description
                });
            }

            return(filterExDecDto.SetExDec(filterExDecDto.ExDecRemaind).SetPaging(pager));
        }
Пример #2
0
        public async Task <FilterPiDetailDto> GetPiesByFiltersList(FilterPiDetailDto filterPiDetailDto)
        {
            var asQueryable = piDetailRepository
                              .GetEntities()
                              .Where(x => x.PeroformaInvoiceId == filterPiDetailDto.PiId)
                              .AsQueryable();
            //if (filterPiDetailDto.SearchText != null || !(string.IsNullOrWhiteSpace(filterPiDetailDto.SearchText)))
            //{
            //    asQueryable = asQueryable.Where(x => x.PiCode.Contains(filterPiDto.SearchText.Trim()));
            //}

            var count = (int)Math.Ceiling(asQueryable.Count() / (double)filterPiDetailDto.TakeEntity);
            var pager = Pager.Builder(count, filterPiDetailDto.PageId, filterPiDetailDto.TakeEntity);
            var list  = asQueryable.Paging(pager).ToList();

            filterPiDetailDto.PiDetailDtos = new List <PiDetailDto>();
            foreach (var item in list)
            {
                filterPiDetailDto.PiDetailDtos.Add(new PiDetailDto()
                {
                    BrokerId     = item.BrokerId,
                    PiId         = item.PeroformaInvoiceId,
                    DepositDate  = item.DepositDate,
                    DepositPrice = item.DepositPrice,
                    Id           = item.Id,
                    IsSold       = item.IsSold
                });
            }
            return(filterPiDetailDto.SetPiDetails(filterPiDetailDto.PiDetailDtos).SetPaging(pager));
        }
Пример #3
0
        public async Task <FilterCustomerDto> GetCustomersByFiltersList(FilterCustomerDto filterCustomerDto)
        {
            var cuastomerList = customerRepository.GetEntities().AsQueryable();

            if (filterCustomerDto.SearchText != null || !(string.IsNullOrEmpty(filterCustomerDto.SearchText)))
            {
                cuastomerList = cuastomerList.Where(x => x.Title.Contains(filterCustomerDto.SearchText.Trim()) ||
                                                    x.Name.Contains(filterCustomerDto.SearchText.Trim()));
            }

            var count     = (int)Math.Ceiling(cuastomerList.Count() / (double)filterCustomerDto.TakeEntity);
            var pager     = Pager.Builder(count, filterCustomerDto.PageId, filterCustomerDto.TakeEntity);
            var customers = await cuastomerList.Paging(pager).ToListAsync();

            filterCustomerDto.CustomerDtos = new List <CustomerDto>();
            foreach (var item in customers)
            {
                filterCustomerDto.CustomerDtos.Add(new CustomerDto
                {
                    Title       = item.Title.SanitizeText(),
                    Name        = item.Name.SanitizeText(),
                    Phone       = item.Phone.SanitizeText(),
                    Address     = item.Address.SanitizeText(),
                    Description = item.Description.SanitizeText(),
                    Id          = item.Id
                });
            }

            return(filterCustomerDto.SetCustomer(filterCustomerDto.CustomerDtos).SetPaging(pager));
        }
        public async Task <FilterCurrSaleExDecDto> GetListExDecSalesByExdecId(FilterCurrSaleExDecDto filterDto)
        {
            var asQueryable = _currencySaleExDecRepository
                              .GetEntities()
                              .Where(x => x.ExDeclarationId == filterDto.Id)
                              .AsQueryable();
            var count = (int)Math.Ceiling(asQueryable.Count() / (double)filterDto.TakeEntity);
            var pager = Pager.Builder(count, filterDto.PageId, filterDto.TakeEntity);
            var list  = await asQueryable.Paging(pager).ToListAsync();

            filterDto.CurrencySaleExDecs = new List <CurrencySaleExDecDto>();
            foreach (var item in list)
            {
                var currencySaleItem = await _currencySaleRepository.GetCurrencyByIdIncludesCustomerAndBroker(item.CurrencySaleId);

                var exDec = await _exdeclarationRepository.GetEntityById(item.ExDeclarationId);

                filterDto.CurrencySaleExDecs.Add(new CurrencySaleExDecDto()
                {
                    Id           = item.Id,
                    CurrSaleDate = currencySaleItem.SaleDate,
                    BrokerName   = currencySaleItem.Broker.Name + " (" + currencySaleItem.Broker.Title + ") ",
                    CustomerName = currencySaleItem.Customer.Name,
                    ExDecCode    = exDec.ExchangeDeclarationCode,
                    Price        = item.Price
                });
            }
            return(filterDto.SetCurrencySaleExDec(filterDto.CurrencySaleExDecs).SetPaging(pager));
        }
Пример #5
0
        public async Task <FilterBrokerDto> GetBrokersByFiltersList(FilterBrokerDto filterBrokerDto)
        {
            var cuastomerList = brokerRepository.GetEntities().AsQueryable();

            if (filterBrokerDto.SearchText != null || !(string.IsNullOrEmpty(filterBrokerDto.SearchText)))
            {
                cuastomerList = cuastomerList.Where(x => x.Title.Contains(filterBrokerDto.SearchText.Trim()) ||
                                                    x.Name.Contains(filterBrokerDto.SearchText.Trim()));
            }

            var count   = (int)Math.Ceiling(cuastomerList.Count() / (double)filterBrokerDto.TakeEntity);
            var pager   = Pager.Builder(count, filterBrokerDto.PageId, filterBrokerDto.TakeEntity);
            var brokers = await cuastomerList.Paging(pager).ToListAsync();

            filterBrokerDto.BrokerDtos = new List <BrokerDto>();
            foreach (var item in brokers)
            {
                filterBrokerDto.BrokerDtos.Add(new BrokerDto
                {
                    Title                = item.Title,
                    Name                 = item.Name,
                    Tel                  = item.Tel,
                    Address              = item.Address,
                    Description          = item.Description,
                    ServiceChargeAccount = item.ServiceChargeAccount,
                    ServiceChargeCash    = item.ServiceChargeCash,
                    Id = item.Id
                });
            }

            return(filterBrokerDto.SetBroker(filterBrokerDto.BrokerDtos).SetPaging(pager));
        }
Пример #6
0
        public async Task <FilterPiDto> GetPiesByFiltersList(FilterPiDto filterPiDto)
        {
            IQueryable <PeroformaInvoice> asQueryable;

            if (filterPiDto.IsRemaindPriceZero == "1")
            {
                asQueryable = piRepository
                              .GetEntities()
                              .Where(x => x.TotalPrice !=
                                     (piDetailRepository.GetEntities()
                                      .Where(d => d.PeroformaInvoiceId == x.Id && !d.IsDelete)
                                      .Sum(x => x.DepositPrice)))
                              .AsQueryable();
            }
            else
            {
                asQueryable = piRepository
                              .GetEntities()
                              .AsQueryable();
            }

            asQueryable = asQueryable.OrderByDescending(x => x.PiDate);
            var count             = (int)Math.Ceiling(asQueryable.Count() / (double)filterPiDto.TakeEntity);
            var pager             = Pager.Builder(count, filterPiDto.PageId, filterPiDto.TakeEntity);
            var peroformaInvoices = await asQueryable.Paging(pager).ToListAsync();

            filterPiDto.PiRemaind = new List <PiRemaindDto>();
            foreach (var item in peroformaInvoices)
            {
                var payDetails = await piDetailService.GetTotalAamountReceivedFromTheCustomer(item.Id);

                var customer = item.CommodityCustomerId != null ?  await customerRepository.GetEntityById((long)item.CommodityCustomerId) : null;

                var customerName = customer == null ? null : customer.Name;
                //if (PayDetails < item.TotalPrice)
                //{
                filterPiDto.PiRemaind.Add(new PiRemaindDto()
                {
                    BasePrice    = item.BasePrice,
                    PiCode       = item.PiCode,
                    TotalPrice   = item.TotalPrice,
                    PiDate       = item.PiDate,
                    RemaindPrice = item.TotalPrice - payDetails,
                    SoldPrice    = payDetails,
                    Id           = item.Id,
                    CustomerName = customerName
                });
                //}
            }
            if (filterPiDto.SearchText != null || !(string.IsNullOrWhiteSpace(filterPiDto.SearchText)))
            {
                filterPiDto.PiRemaind = filterPiDto.PiRemaind.Where(x => x.PiCode.Contains(filterPiDto.SearchText.Trim()) ||
                                                                    x.TotalPrice.ToString().Contains(filterPiDto.SearchText.Trim()) ||
                                                                    x.RemaindPrice.ToString().Contains(filterPiDto.SearchText.Trim())).ToList();
            }

            return(filterPiDto.SetPies(filterPiDto.PiRemaind).SetPaging(pager));
        }
Пример #7
0
        public async Task <FilterPiDetailCompleteDto> GetPiPayList(FilterPiDetailCompleteDto filterPiDetailDto)
        {
            var asQueryable = piDetailRepository
                              .GetEntities()
                              .AsQueryable();

            #region Filter - From To Sale Date

            if (!string.IsNullOrWhiteSpace(filterPiDetailDto.FromDateSale) && !string.IsNullOrWhiteSpace(filterPiDetailDto.ToDateSale))
            {
                var from = Convert.ToDateTime(filterPiDetailDto.FromDateSale);
                var to   = Convert.ToDateTime(filterPiDetailDto.ToDateSale);
                asQueryable = asQueryable.Where(x => x.DepositDate >= from && x.DepositDate < to);
                //currencyAsQueryable = currencyAsQueryable.Where(x => x.SaleDate < DateTime.Today);
            }


            #endregion
            asQueryable = asQueryable.OrderByDescending(x => x.DepositDate);
            var count = (int)Math.Ceiling(asQueryable.Count() / (double)filterPiDetailDto.TakeEntity);
            var pager = Pager.Builder(count, filterPiDetailDto.PageId, filterPiDetailDto.TakeEntity);
            var list  = asQueryable.Paging(pager).ToList();
            filterPiDetailDto.PiDetailDtos = new List <PiDetailCompleteDto>();
            foreach (var item in list)
            {
                var broker = await _brokerRepository.GetEntityById(item.BrokerId);

                var pi = await piRepository.GetEntityById(item.PeroformaInvoiceId);

                var customer = pi.CommodityCustomerId != null ? await customerRepository.GetEntityById((long)pi.CommodityCustomerId) : null;

                var customerName = customer == null ? null : customer.Name;
                filterPiDetailDto.PiDetailDtos.Add(new PiDetailCompleteDto()
                {
                    BrokerId     = item.BrokerId,
                    PiId         = item.PeroformaInvoiceId,
                    DepositDate  = item.DepositDate,
                    DepositPrice = item.DepositPrice,
                    Id           = item.Id,
                    IsSold       = item.IsSold,
                    BrokerName   = broker.Name + "(" + broker.Title + ")",
                    PiCode       = pi.PiCode,
                    TotalPrice   = pi.TotalPrice,
                    CustomerName = customerName
                });
            }
            if (filterPiDetailDto.SearchText != null || !(string.IsNullOrWhiteSpace(filterPiDetailDto.SearchText)))
            {
                filterPiDetailDto.PiDetailDtos = filterPiDetailDto.PiDetailDtos.Where(x => x.PiCode.Contains(filterPiDetailDto.SearchText.Trim()) ||
                                                                                      x.BrokerName.Contains(filterPiDetailDto.SearchText.Trim()) ||
                                                                                      x.DepositPrice.ToString().Contains(filterPiDetailDto.SearchText.Trim()) ||
                                                                                      x.TotalPrice.ToString().Contains(filterPiDetailDto.SearchText))
                                                 //|| x.CustomerName.Contains(filterPiDetailDto.SearchText.Trim())
                                                 .ToList();
            }
            return(filterPiDetailDto.SetPiDetails(filterPiDetailDto.PiDetailDtos).SetPaging(pager));
        }
        public async Task <FilterCurrSalePiDto> GetListPiSalesByCurrencyId(FilterCurrSalePiDto filterDto)
        {
            var asQueryable = _currPiDetailRepository
                              .GetEntities()
                              .Include(X => X.CurrencySale)
                              .Where(x => x.CurrencySaleId == filterDto.Id)
                              .AsQueryable();

            if (filterDto.SearchText != null || !(string.IsNullOrEmpty(filterDto.SearchText)))
            {
                asQueryable = asQueryable.Include(x => x.PeroformaInvoiceDetails)
                              .Include(c => c.PeroformaInvoiceDetails.PeroformaInvoice)
                              .Where(d =>
                                     d.PeroformaInvoiceDetails.PeroformaInvoice.PiCode.Contains(filterDto.SearchText.Trim()));
            }

            var count = (int)Math.Ceiling(asQueryable.Count() / (double)filterDto.TakeEntity);
            var pager = Pager.Builder(count, filterDto.PageId, filterDto.TakeEntity);
            var list  = await asQueryable.Paging(pager).ToListAsync();

            filterDto.CurrencySaleDetailPi = new List <CurrencySaleDetailPiDto>();
            foreach (var item in list)
            {
                var currencySaleItem = await _currencySaleRepository.GetCurrencyByIdIncludesCustomerAndBroker(item.CurrencySaleId);

                var piDetail = await _piDetailRepository.GetEntityById(item.PeroformaInvoiceDetailId ?? 1);

                var pi = await _piRepository.GetEntityById(piDetail.PeroformaInvoiceId);

                filterDto.CurrencySaleDetailPi.Add(new CurrencySaleDetailPiDto()
                {
                    Id                 = item.Id,
                    BrokerName         = currencySaleItem.Broker.Name + " (" + currencySaleItem.Broker.Title + ") ",
                    CurrSaleDate       = currencySaleItem.SaleDate,
                    CustomerName       = currencySaleItem.Customer.Name,
                    Price              = item.Price,
                    ProfitLossAmount   = item.ProfitLossAmount,
                    PiCode             = pi.PiCode,
                    PiDetailPrice      = piDetail.DepositPrice,
                    SellPriceCurrency  = item.CurrencySale.SalePricePerUnit,
                    SellPriceCommodity = pi.BasePrice
                });
            }
            return(filterDto.SetCurrencySaleExDec(filterDto.CurrencySaleDetailPi).SetPaging(pager));
        }
        public async Task <FilterCurrSaleExDecDto> GetListExDecSalesByCurrencyId(FilterCurrSaleExDecDto filterDto)
        {
            var currencyExdecAsQueryable = _currencySaleExDecRepository
                                           .GetEntities()
                                           .Where(x => x.CurrencySaleId == filterDto.Id)
                                           .AsQueryable();

            if (filterDto.SearchText != null || !(string.IsNullOrEmpty(filterDto.SearchText)))
            {
                currencyExdecAsQueryable = currencyExdecAsQueryable
                                           .Include(s => s.CurrencySale)
                                           .Include(x => x.CurrencySale.Customer)
                                           .Include(c => c.CurrencySale.Broker)
                                           .Include(c => c.ExDeclaration)
                                           .Where(x => x.CurrencySale.Customer.Name.Contains(filterDto.SearchText.Trim()) ||
                                                  x.CurrencySale.Customer.Title.Contains(filterDto.SearchText.Trim()) ||
                                                  x.CurrencySale.Broker.Name.Contains(filterDto.SearchText.Trim()) ||
                                                  x.ExDeclaration.ExchangeDeclarationCode.Contains(filterDto.SearchText.Trim())
                                                  );
            }
            var count = (int)Math.Ceiling(currencyExdecAsQueryable.Count() / (double)filterDto.TakeEntity);
            var pager = Pager.Builder(count, filterDto.PageId, filterDto.TakeEntity);
            var list  = await currencyExdecAsQueryable.Paging(pager).ToListAsync();

            filterDto.CurrencySaleExDecs = new List <CurrencySaleExDecDto>();
            foreach (var item in list)
            {
                var currencySaleItem = await _currencySaleRepository.GetCurrencyByIdIncludesCustomerAndBroker(item.CurrencySaleId);

                var exDec = await _exdeclarationRepository.GetEntityById(item.ExDeclarationId);

                filterDto.CurrencySaleExDecs.Add(new CurrencySaleExDecDto()
                {
                    Id           = item.Id,
                    CurrSaleDate = currencySaleItem.SaleDate,
                    BrokerName   = currencySaleItem.Broker.Name + " (" + currencySaleItem.Broker.Title + ") ",
                    CustomerName = currencySaleItem.Customer.Name,
                    ExDecCode    = exDec.ExchangeDeclarationCode,
                    ExDecPrice   = exDec.Price,
                    Price        = item.Price
                });
            }
            return(filterDto.SetCurrencySaleExDec(filterDto.CurrencySaleExDecs).SetPaging(pager));
        }
        public async Task <FilterCurrSalePiDto> GetListExDecSalesByPiDetailId(FilterCurrSalePiDto filterDto)
        {
            var piDetailIdList = _piDetailRepository
                                 .GetEntities()
                                 .Where(x => x.PeroformaInvoiceId == filterDto.Id)
                                 .Select(x => x.Id);
            var asQueryable = _currPiDetailRepository
                              .GetEntities()
                              .Include(X => X.CurrencySale)
                              .Where(x => piDetailIdList.Contains((long)x.PeroformaInvoiceDetailId))
                              .AsQueryable();

            //var listOfRoleId = user.Roles.Select(r => r.RoleId);
            //var roles = db.Roles.Where(r => listOfRoleId.Contains(r.RoleId));
            var count = (int)Math.Ceiling(asQueryable.Count() / (double)filterDto.TakeEntity);
            var pager = Pager.Builder(count, filterDto.PageId, filterDto.TakeEntity);
            var list  = await asQueryable.Paging(pager).ToListAsync();

            filterDto.CurrencySaleDetailPi = new List <CurrencySaleDetailPiDto>();
            foreach (var item in list)
            {
                var currencySaleItem = await _currencySaleRepository.GetCurrencyByIdIncludesCustomerAndBroker(item.CurrencySaleId);

                var peroformaInvoice = await _piRepository.GetEntityById(filterDto.Id);

                filterDto.CurrencySaleDetailPi.Add(new CurrencySaleDetailPiDto()
                {
                    Id                 = item.Id,
                    BrokerName         = currencySaleItem.Broker.Name + " (" + currencySaleItem.Broker.Title + ") ",
                    CurrSaleDate       = currencySaleItem.SaleDate,
                    CustomerName       = currencySaleItem.Customer.Name,
                    Price              = item.Price,
                    ProfitLossAmount   = item.ProfitLossAmount,
                    PiCode             = peroformaInvoice.PiCode,
                    SellPriceCurrency  = item.CurrencySale.SalePricePerUnit,
                    SellPriceCommodity = peroformaInvoice.BasePrice
                });
            }
            return(filterDto.SetCurrencySaleExDec(filterDto.CurrencySaleDetailPi).SetPaging(pager));
        }
Пример #11
0
        //public async Task<FilterGenericDto<PiRemaindDto>> GetPiesByFiltersList(FilterGenericDto<PiRemaindDto> filterPiDto)
        //{
        //    var asQueryable = piRepository
        //        .GetEntities()
        //        .Where(x => !x.IsSold)
        //        .AsQueryable();

        //    if (filterPiDto.SearchText != null || !(string.IsNullOrWhiteSpace(filterPiDto.SearchText)))
        //    {
        //        asQueryable = asQueryable.Where(x => x.PiCode.Contains(filterPiDto.SearchText.Trim()));
        //    }

        //    var count = (int)Math.Ceiling(asQueryable.Count() / (double)filterPiDto.TakeEntity);
        //    var pager = Pager.Builder(count, filterPiDto.PageId, filterPiDto.TakeEntity);
        //    var peroformaInvoices = await asQueryable.Paging(pager).ToListAsync();
        //    filterPiDto.Entities = new List<PiRemaindDto>();
        //    foreach (var item in peroformaInvoices)
        //    {
        //        var payDetails = await piDetailService.GetTotalAamountReceivedFromTheCustomer(item.Id);
        //        //if (PayDetails < item.TotalPrice)
        //        //{
        //        filterPiDto.Entities.Add(new PiRemaindDto()
        //        {
        //            BasePrice = item.BasePrice,
        //            PiCode = item.PiCode,
        //            TotalPrice = item.TotalPrice,
        //            PiDate = item.PiDate,
        //            RemaindPrice = item.TotalPrice - payDetails,
        //            SoldPrice = payDetails,
        //            Id = item.Id
        //        });
        //        //}

        //    }

        //    return filterPiDto.SetEntitiesDto(filterPiDto.Entities).SetPaging(pager);
        //}

        #region GetAll
        public async Task <FilterPiDto> GetPiesByFiltersIsSold(FilterPiDto filterPiDto)
        {
            var asQueryable = piRepository
                              .GetEntities()
                              .AsQueryable();

            if (filterPiDto.SearchText != null || !(string.IsNullOrWhiteSpace(filterPiDto.SearchText)))
            {
                asQueryable = asQueryable.Where(x => x.PiCode.Contains(filterPiDto.SearchText.Trim()));
            }
            asQueryable = asQueryable.OrderByDescending(x => x.PiDate);
            var count             = (int)Math.Ceiling(asQueryable.Count() / (double)filterPiDto.TakeEntity);
            var pager             = Pager.Builder(count, filterPiDto.PageId, filterPiDto.TakeEntity);
            var peroformaInvoices = await asQueryable.Paging(pager).ToListAsync();

            filterPiDto.PiRemaind = new List <PiRemaindDto>();
            foreach (var item in peroformaInvoices)
            {
                var payDetails = await piDetailService.GetTotalAamountReceivedFromTheCustomer(item.Id);

                //if (PayDetails < item.TotalPrice)
                //{
                filterPiDto.PiRemaind.Add(new PiRemaindDto()
                {
                    BasePrice    = item.BasePrice,
                    PiCode       = item.PiCode,
                    TotalPrice   = item.TotalPrice,
                    PiDate       = item.PiDate,
                    RemaindPrice = item.TotalPrice - payDetails,
                    SoldPrice    = payDetails,
                    Id           = item.Id
                });
                //}
            }

            return(filterPiDto.SetPies(filterPiDto.PiRemaind).SetPaging(pager));
        }
        public async Task <FilterCurrencyCustomerDto> GetSoldPerCustomers(FilterCurrencyCustomerDto filterDto, long financialPeriodId)
        {
            var asQueryableEntity = _customerRepository
                                    .GetEntities()
                                    .Include(x => x.CurrencySale)
                                    .Where(c => c.CurrencySale.Any(x => x.CustomerId == c.Id))
                                    .AsQueryable();

            if (filterDto.SearchText != null || !(string.IsNullOrEmpty(filterDto.SearchText)))
            {
                asQueryableEntity = asQueryableEntity.Where(x => x.Title.Contains(filterDto.SearchText.Trim()) ||
                                                            x.Name.Contains(filterDto.SearchText.Trim()));
            }
            var count = (int)Math.Ceiling(asQueryableEntity.Count() / (double)filterDto.TakeEntity);
            var pager = Pager.Builder(count, filterDto.PageId, filterDto.TakeEntity);
            var list  = await asQueryableEntity.Paging(pager).ToListAsync();

            filterDto.Entities = new List <CurrencyCustomerDto>();
            foreach (var item in list)
            {
                var totalBuy = await _saleRepository.GetTotalCurrencyByCustomerId(item.Id, financialPeriodId);

                if (totalBuy > 0)
                {
                    filterDto.Entities.Add(new CurrencyCustomerDto()
                    {
                        Title      = item.Title.SanitizeText(),
                        Name       = item.Name.SanitizeText(),
                        Phone      = item.Phone.SanitizeText(),
                        Address    = item.Address.SanitizeText(),
                        Id         = item.Id,
                        SoldAmount = totalBuy
                    });
                }
            }
            return((FilterCurrencyCustomerDto)filterDto.SetEntitiesDto(filterDto.Entities).SetPaging(pager));
        }
        public async Task <FilterCurrSaleCustomerListDto> GetListSalesByCustomerId(long customerId, long financialPeriodId)
        {
            var financial = await _financialPeriodRepository.GetEntityById(financialPeriodId);

            var filterOutput        = new FilterCurrSaleCustomerListDto();
            var currencyAsQueryable = _saleRepository
                                      .GetEntities()
                                      .Where(x => x.CustomerId == customerId &&
                                             (x.SaleDate >= financial.FromDate && x.SaleDate < financial.ToDate))
                                      .AsQueryable();

            currencyAsQueryable = currencyAsQueryable.OrderByDescending(x => x.SaleDate);
            var count = (int)Math.Ceiling(currencyAsQueryable.Count() / (double)filterOutput.TakeEntity);
            var pager = Pager.Builder(count, filterOutput.PageId, filterOutput.TakeEntity);
            var list  = await currencyAsQueryable.Paging(pager).ToListAsync();

            filterOutput.Entities = new List <CurrencySaleDto>();
            foreach (var item in list)
            {
                var currencySaleItem = await _saleRepository.GetCurrencyByIdIncludesCustomerAndBroker(item.Id);

                var sumProfit = await _salePiDetailRepository.GetSumProfitLost(item.Id);

                filterOutput.Entities.Add(new CurrencySaleDto
                {
                    Id               = item.Id,
                    BrokerName       = currencySaleItem.Broker.Name + " (" + currencySaleItem.Broker.Title + ") ",
                    CurrSaleDate     = currencySaleItem.SaleDate,
                    CustomerName     = currencySaleItem.Customer.Name,
                    Price            = item.SalePrice,
                    ProfitLossAmount = sumProfit,
                    SalePricePerUnit = item.SalePricePerUnit,
                    TransferPrice    = item.TransferPrice,
                });
            }
            return((FilterCurrSaleCustomerListDto)filterOutput.SetEntitiesDto(filterOutput.Entities).SetPaging(pager));
        }
        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));
        }