public async Task <bool> Delete(CustomerSalesOrderContent CustomerSalesOrderContent)
 {
     if (await ValidateId(CustomerSalesOrderContent))
     {
     }
     return(CustomerSalesOrderContent.IsValidated);
 }
 public Customer_CustomerSalesOrderContentDTO(CustomerSalesOrderContent CustomerSalesOrderContent)
 {
     this.Id = CustomerSalesOrderContent.Id;
     this.CustomerSalesOrderId = CustomerSalesOrderContent.CustomerSalesOrderId;
     this.ItemId                    = CustomerSalesOrderContent.ItemId;
     this.UnitOfMeasureId           = CustomerSalesOrderContent.UnitOfMeasureId;
     this.Quantity                  = CustomerSalesOrderContent.Quantity;
     this.RequestedQuantity         = CustomerSalesOrderContent.RequestedQuantity;
     this.PrimaryUnitOfMeasureId    = CustomerSalesOrderContent.PrimaryUnitOfMeasureId;
     this.SalePrice                 = CustomerSalesOrderContent.SalePrice;
     this.PrimaryPrice              = CustomerSalesOrderContent.PrimaryPrice;
     this.DiscountPercentage        = CustomerSalesOrderContent.DiscountPercentage;
     this.DiscountAmount            = CustomerSalesOrderContent.DiscountAmount;
     this.GeneralDiscountPercentage = CustomerSalesOrderContent.GeneralDiscountPercentage;
     this.GeneralDiscountAmount     = CustomerSalesOrderContent.GeneralDiscountAmount;
     this.TaxPercentage             = CustomerSalesOrderContent.TaxPercentage;
     this.TaxAmount                 = CustomerSalesOrderContent.TaxAmount;
     this.TaxPercentageOther        = CustomerSalesOrderContent.TaxPercentageOther;
     this.TaxAmountOther            = CustomerSalesOrderContent.TaxAmountOther;
     this.Amount                    = CustomerSalesOrderContent.Amount;
     this.Factor                    = CustomerSalesOrderContent.Factor;
     this.EditedPriceStatusId       = CustomerSalesOrderContent.EditedPriceStatusId;
     this.TaxTypeId                 = CustomerSalesOrderContent.TaxTypeId;
     this.EditedPriceStatus         = CustomerSalesOrderContent.EditedPriceStatus == null ? null : new Customer_EditedPriceStatusDTO(CustomerSalesOrderContent.EditedPriceStatus);
     this.Item = CustomerSalesOrderContent.Item == null ? null : new Customer_ItemDTO(CustomerSalesOrderContent.Item);
     this.PrimaryUnitOfMeasure = CustomerSalesOrderContent.PrimaryUnitOfMeasure == null ? null : new Customer_UnitOfMeasureDTO(CustomerSalesOrderContent.PrimaryUnitOfMeasure);
     this.UnitOfMeasure        = CustomerSalesOrderContent.UnitOfMeasure == null ? null : new Customer_UnitOfMeasureDTO(CustomerSalesOrderContent.UnitOfMeasure);
     this.TaxType = CustomerSalesOrderContent.TaxType == null ? null : new Customer_TaxTypeDTO(CustomerSalesOrderContent.TaxType);
     this.Errors  = CustomerSalesOrderContent.Errors;
 }
        public async Task <CustomerSalesOrderContent> Get(long Id)
        {
            CustomerSalesOrderContent CustomerSalesOrderContent = await UOW.CustomerSalesOrderContentRepository.Get(Id);

            if (CustomerSalesOrderContent == null)
            {
                return(null);
            }
            return(CustomerSalesOrderContent);
        }
        public async Task <bool> ValidateId(CustomerSalesOrderContent CustomerSalesOrderContent)
        {
            CustomerSalesOrderContentFilter CustomerSalesOrderContentFilter = new CustomerSalesOrderContentFilter
            {
                Skip = 0,
                Take = 10,
                Id   = new IdFilter {
                    Equal = CustomerSalesOrderContent.Id
                },
                Selects = CustomerSalesOrderContentSelect.Id
            };

            int count = await UOW.CustomerSalesOrderContentRepository.Count(CustomerSalesOrderContentFilter);

            if (count == 0)
            {
                CustomerSalesOrderContent.AddError(nameof(CustomerSalesOrderContentValidator), nameof(CustomerSalesOrderContent.Id), ErrorCode.IdNotExisted);
            }
            return(count == 1);
        }
        public async Task <CustomerSalesOrderContent> Delete(CustomerSalesOrderContent CustomerSalesOrderContent)
        {
            if (!await CustomerSalesOrderContentValidator.Delete(CustomerSalesOrderContent))
            {
                return(CustomerSalesOrderContent);
            }

            try
            {
                await UOW.CustomerSalesOrderContentRepository.Delete(CustomerSalesOrderContent);

                await Logging.CreateAuditLog(new { }, CustomerSalesOrderContent, nameof(CustomerSalesOrderContentService));

                return(CustomerSalesOrderContent);
            }
            catch (Exception ex)
            {
                await Logging.CreateSystemLog(ex, nameof(CustomerSalesOrderContentService));
            }
            return(null);
        }
        public async Task <CustomerSalesOrderContent> Update(CustomerSalesOrderContent CustomerSalesOrderContent)
        {
            if (!await CustomerSalesOrderContentValidator.Update(CustomerSalesOrderContent))
            {
                return(CustomerSalesOrderContent);
            }
            try
            {
                var oldData = await UOW.CustomerSalesOrderContentRepository.Get(CustomerSalesOrderContent.Id);

                await UOW.CustomerSalesOrderContentRepository.Update(CustomerSalesOrderContent);

                CustomerSalesOrderContent = await UOW.CustomerSalesOrderContentRepository.Get(CustomerSalesOrderContent.Id);

                await Logging.CreateAuditLog(CustomerSalesOrderContent, oldData, nameof(CustomerSalesOrderContentService));

                return(CustomerSalesOrderContent);
            }
            catch (Exception ex)
            {
                await Logging.CreateSystemLog(ex, nameof(CustomerSalesOrderContentService));
            }
            return(null);
        }
 public async Task <bool> Create(CustomerSalesOrderContent CustomerSalesOrderContent)
 {
     return(CustomerSalesOrderContent.IsValidated);
 }
        private async Task <bool> ValidateContent(CustomerSalesOrder CustomerSalesOrder)
        {
            if (CustomerSalesOrder.CustomerSalesOrderContents != null && CustomerSalesOrder.CustomerSalesOrderContents.Any())
            {
                var         ItemIds    = CustomerSalesOrder.CustomerSalesOrderContents.Select(x => x.ItemId).ToList();
                var         ProductIds = CustomerSalesOrder.CustomerSalesOrderContents.Select(x => x.Item.ProductId).ToList();
                List <Item> Items      = await UOW.ItemRepository.List(new ItemFilter
                {
                    Skip = 0,
                    Take = int.MaxValue,
                    Id   = new IdFilter {
                        In = ItemIds
                    },
                    Selects = ItemSelect.Id | ItemSelect.SalePrice | ItemSelect.ProductId
                });

                var Products = await UOW.ProductRepository.List(new ProductFilter
                {
                    Id = new IdFilter {
                        In = ProductIds
                    },
                    Skip    = 0,
                    Take    = int.MaxValue,
                    Selects = ProductSelect.UnitOfMeasure | ProductSelect.UnitOfMeasureGrouping | ProductSelect.Id | ProductSelect.TaxType
                });

                var UOMGs = await UOW.UnitOfMeasureGroupingRepository.List(new UnitOfMeasureGroupingFilter
                {
                    Skip    = 0,
                    Take    = int.MaxValue,
                    Selects = UnitOfMeasureGroupingSelect.Id | UnitOfMeasureGroupingSelect.UnitOfMeasure | UnitOfMeasureGroupingSelect.UnitOfMeasureGroupingContents
                });

                foreach (var CustomerSalesOrderContent in CustomerSalesOrder.CustomerSalesOrderContents)
                {
                    if (CustomerSalesOrderContent.UnitOfMeasureId == 0)
                    {
                        CustomerSalesOrderContent.AddError(nameof(CustomerSalesOrderValidator), nameof(CustomerSalesOrderContent.UnitOfMeasure), ErrorCode.UnitOfMeasureEmpty);
                    }
                    else
                    {
                        var Item = Items.Where(x => x.Id == CustomerSalesOrderContent.ItemId).FirstOrDefault();
                        if (Item == null)
                        {
                            CustomerSalesOrderContent.AddError(nameof(CustomerSalesOrderValidator), nameof(CustomerSalesOrderContent.Item), ErrorCode.ItemNotExisted);
                        }
                        else
                        {
                            var Product = Products.Where(x => Item.ProductId == x.Id).FirstOrDefault();
                            List <UnitOfMeasure> UnitOfMeasures = new List <UnitOfMeasure>();
                            if (Product.UnitOfMeasureGroupingId.HasValue)
                            {
                                var UOMG = UOMGs.Where(x => x.Id == Product.UnitOfMeasureGroupingId).FirstOrDefault();
                                UnitOfMeasures = UOMG.UnitOfMeasureGroupingContents.Select(x => new UnitOfMeasure
                                {
                                    Id          = x.UnitOfMeasure.Id,
                                    Code        = x.UnitOfMeasure.Code,
                                    Name        = x.UnitOfMeasure.Name,
                                    Description = x.UnitOfMeasure.Description,
                                    StatusId    = x.UnitOfMeasure.StatusId,
                                    Factor      = x.Factor
                                }).ToList();
                            }

                            UnitOfMeasures.Add(new UnitOfMeasure
                            {
                                Id          = Product.UnitOfMeasure.Id,
                                Code        = Product.UnitOfMeasure.Code,
                                Name        = Product.UnitOfMeasure.Name,
                                Description = Product.UnitOfMeasure.Description,
                                StatusId    = Product.UnitOfMeasure.StatusId,
                                Factor      = 1
                            });

                            var UOM = UnitOfMeasures.Where(x => CustomerSalesOrderContent.UnitOfMeasureId == x.Id).FirstOrDefault();
                            if (UOM == null)
                            {
                                CustomerSalesOrderContent.AddError(nameof(CustomerSalesOrderValidator), nameof(CustomerSalesOrderContent.UnitOfMeasure), ErrorCode.UnitOfMeasureNotExisted);
                            }
                            //else
                            //{
                            //    if(CustomerSalesOrder.EditedPriceStatusId == EditedPriceStatusEnum.ACTIVE.Id)
                            //    {
                            //        if(CustomerSalesOrderContent.SalePrice < (Item.SalePrice * UOM.Factor.Value) * 0.9m
                            //            || CustomerSalesOrderContent.SalePrice > (Item.SalePrice * UOM.Factor.Value) * 1.1m)
                            //            CustomerSalesOrderContent.AddError(nameof(CustomerSalesOrderValidator), nameof(CustomerSalesOrderContent.SalePrice), ErrorCode.PriceOutOfRange);
                            //    }
                            //}
                        }

                        if (CustomerSalesOrderContent.Quantity <= 0)
                        {
                            CustomerSalesOrderContent.AddError(nameof(CustomerSalesOrderValidator), nameof(CustomerSalesOrderContent.Quantity), ErrorCode.QuantityEmpty);
                        }
                    }
                }
            }
            else
            {
                if (CustomerSalesOrder.CustomerSalesOrderPromotions == null || !CustomerSalesOrder.CustomerSalesOrderPromotions.Any())
                {
                    CustomerSalesOrder.AddError(nameof(CustomerSalesOrderValidator), nameof(CustomerSalesOrder.Id), ErrorCode.ContentEmpty);
                }
            }

            return(CustomerSalesOrder.IsValidated);
        }