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));
        }
        public async Task <ExDecDto> GetExDecById(long id)
        {
            var exDeclaration = await _exDeclarationRepository.GetEntityById(id);

            if (exDeclaration == null)
            {
                return(null);
            }
            return(new ExDecDto()
            {
                Id = exDeclaration.Id,
                ExCode = exDeclaration.ExchangeDeclarationCode,
                ExpireDate = exDeclaration.ExprireDate,
                Price = exDeclaration.Price,
                Qty = exDeclaration.Qty,
                Description = exDeclaration.Description
            });
        }
        private async Task <SalesResult> InserSaleCurrExDecAutomatic(List <ExDecExport> exDecList, CreateSaleDto saleDto, CurrencySale currencySales)
        {
            long totalInserted = 0;

            foreach (var exdec in exDecList)
            {
                #region Validation - ExDec Price Is Ok

                var exdecEntity = await _declarationRepository.GetEntityById(exdec.Id);

                var usedPriceOfExdecCode = await _saleExDecRepository.GetSumExCodeUsedById(exdec.Id);

                var remaindPriceOfExdecCode = exdec.Price - (usedPriceOfExdecCode);
                //if (exdecEntity.Price < exdec.Price)
                //{
                //    return SalesResult.ExDecAccountBalanceIsLowerThanPrice;
                //}

                //if (exdec.Price < remaindPriceOfExdecCode)
                //{
                //    return SalesResult.ExDecAccountBalanceIsLowerThanPrice;
                //}

                long price;
                if (exdec.Price >= remaindPriceOfExdecCode)
                {
                    price = remaindPriceOfExdecCode;
                }
                else
                {
                    price = exdec.Price;
                }

                if (price + totalInserted > saleDto.SalePrice)
                {
                    price = saleDto.SalePrice - totalInserted;
                }
                #endregion

                #region Insert Into CurrencySaleDetailExDec

                var currencySaleDetailEx = new CurrencySaleDetailExDec
                {
                    CurrencySale    = currencySales,
                    Price           = price,
                    ExDeclarationId = exdec.Id
                };
                await _saleExDecRepository.AddEntity(currencySaleDetailEx);

                //await _saleExDecRepository.SaveChanges();

                #endregion



                #region Update Sold In ExDeclaration
                if (price + usedPriceOfExdecCode >= exdecEntity.Price)
                {
                    var updateSoldExdec = await _declarationRepository.SoldedDeclaration(exdecEntity.Id);

                    if (!updateSoldExdec)
                    {
                        return(SalesResult.CanNotUpdateSoldExDecInDataBase);
                    }
                }

                #endregion

                totalInserted += price;
                if (totalInserted == saleDto.SalePrice)
                {
                    return(SalesResult.Success);
                }
            }

            return(SalesResult.Success);
        }