public override void UpdateAsync(long id, CostCalculationGarment model)
        {
            GeneratePONumbers(model);
            if (model.CostCalculationGarment_Materials != null)
            {
                HashSet <long> detailIds = costCalculationGarmentMaterialLogic.GetCostCalculationIds(id);
                foreach (var itemId in detailIds)
                {
                    CostCalculationGarment_Material data = model.CostCalculationGarment_Materials.FirstOrDefault(prop => prop.Id.Equals(itemId));
                    if (data == null)
                    {
                        CostCalculationGarment_Material dataItem = DbContext.CostCalculationGarment_Materials.FirstOrDefault(prop => prop.Id.Equals(itemId));
                        EntityExtension.FlagForDelete(dataItem, IdentityService.Username, "sales-service");
                        //await costCalculationGarmentMaterialLogic.DeleteAsync(itemId);
                    }
                    else
                    {
                        costCalculationGarmentMaterialLogic.UpdateAsync(itemId, data);
                    }

                    foreach (CostCalculationGarment_Material item in model.CostCalculationGarment_Materials)
                    {
                        if (item.Id <= 0)
                        {
                            costCalculationGarmentMaterialLogic.Create(item);
                        }
                    }
                }
            }

            EntityExtension.FlagForUpdate(model, IdentityService.Username, "sales-service");
            DbSet.Update(model);
        }
        public void Read_With_EmptyKeyword_Return_Success()
        {
            string           testName        = GetCurrentMethod();
            var              dbContext       = _dbContext(testName);
            IIdentityService identityService = new IdentityService {
                Username = "******"
            };
            var model = new CostCalculationGarment_Material()
            {
                Code = "Code",
                AutoIncrementNumber = 1,
                BudgetQuantity      = 1,
                CategoryCode        = "CategoryCode",
                Information         = "Information"
            };

            dbContext.CostCalculationGarment_Materials.Add(model);
            dbContext.SaveChanges();
            CostCalculationGarmentMaterialLogic unitUnderTest = new CostCalculationGarmentMaterialLogic(GetServiceProvider(testName).Object, identityService, dbContext);

            dbContext.SaveChanges();
            int    page    = 1;
            int    size    = 1;
            string order   = "{}";
            string keyword = null;

            var result = unitUnderTest.Read(page, size, order, new List <string>()
            {
                ""
            }, keyword, "{}");

            Assert.True(0 < result.Data.Count);
            Assert.NotEmpty(result.Data);
        }
        public async Task GeneratePO(int Id)
        {
            HashSet <int> CostCalculationGarment_Materials = new HashSet <int>(this.CostCalculationGarment_MaterialService.DbSet
                                                                               .Where(p => p.CostCalculationGarmentId.Equals(Id))
                                                                               .Select(p => p.Id));

            foreach (int id in CostCalculationGarment_Materials)
            {
                CostCalculationGarment_Material model = await CostCalculationGarment_MaterialService.ReadModelById(id);

                if (model.PO_SerialNumber == null || model.PO_SerialNumber == 0)
                {
                    await CostCalculationGarment_MaterialService.GeneratePO(model);
                }
            }
        }
        public override async Task <int> UpdateModel(int Id, CostCalculationGarment Model)
        {
            Model.ImagePath = await this.AzureImageService.UploadImage(Model.GetType().Name, Model.Id, Model._CreatedUtc, Model.ImageFile);

            GeneratePONumbers(Model);
            int updated = await this.UpdateAsync(Id, Model);

            if (Model.CostCalculationGarment_Materials != null)
            {
                HashSet <int> CostCalculationGarment_Materials = new HashSet <int>(this.CostCalculationGarment_MaterialService.DbSet
                                                                                   .Where(p => p.CostCalculationGarmentId.Equals(Id))
                                                                                   .Select(p => p.Id));
                foreach (int CostCalculationGarment_Material in CostCalculationGarment_Materials)
                {
                    CostCalculationGarment_Material model = Model.CostCalculationGarment_Materials.FirstOrDefault(prop => prop.Id.Equals(CostCalculationGarment_Material));

                    if (model == null)
                    {
                        await this.CostCalculationGarment_MaterialService.DeleteModel(CostCalculationGarment_Material);
                    }
                    else
                    {
                        await this.CostCalculationGarment_MaterialService.UpdateModel(CostCalculationGarment_Material, model);
                    }
                }

                foreach (CostCalculationGarment_Material CostCalculationGarment_Material in Model.CostCalculationGarment_Materials)
                {
                    if (CostCalculationGarment_Material.Id.Equals(0))
                    {
                        await this.CostCalculationGarment_MaterialService.CreateModel(CostCalculationGarment_Material);
                    }
                }
            }

            return(updated);
        }
        public CostCalculationGarment MapToModel(CostCalculationGarmentViewModel viewModel)
        {
            CostCalculationGarment model = new CostCalculationGarment();

            PropertyCopier <CostCalculationGarmentViewModel, CostCalculationGarment> .Copy(viewModel, model);

            model.Convection = viewModel.Convection;

            model.FabricAllowance      = Percentage.ToFraction(viewModel.FabricAllowance);
            model.AccessoriesAllowance = Percentage.ToFraction(viewModel.AccessoriesAllowance);

            model.SizeRange = viewModel.SizeRange;

            model.BuyerId   = viewModel.Buyer._id;
            model.BuyerName = viewModel.Buyer.name;

            model.EfficiencyId    = viewModel.Efficiency.Id;
            model.EfficiencyValue = Percentage.ToFraction(viewModel.Efficiency.Value);

            model.UOMID   = viewModel.UOM._id;
            model.UOMCode = viewModel.UOM.code;
            model.UOMUnit = viewModel.UOM.unit;

            model.WageId   = viewModel.Wage.Id;
            model.WageRate = viewModel.Wage.Value != null ? (double)viewModel.Wage.Value : 0;

            model.ComodityID           = viewModel.Commodity._id;
            model.Commodity            = viewModel.Commodity.name;
            model.CommodityDescription = viewModel.CommodityDescription;

            model.THRId   = viewModel.THR.Id;
            model.THRRate = viewModel.THR.Value != null ? (double)viewModel.THR.Value : 0;

            model.RateId    = viewModel.Rate.Id;
            model.RateValue = viewModel.Rate.Value != null ? (double)viewModel.Rate.Value : 0;

            model.CostCalculationGarment_Materials = new List <CostCalculationGarment_Material>();

            foreach (CostCalculationGarment_MaterialViewModel CostCalculationGarment_MaterialVM in viewModel.CostCalculationGarment_Materials)
            {
                CostCalculationGarment_Material CostCalculationGarment_Material = new CostCalculationGarment_Material();
                PropertyCopier <CostCalculationGarment_MaterialViewModel, CostCalculationGarment_Material> .Copy(CostCalculationGarment_MaterialVM, CostCalculationGarment_Material);

                CostCalculationGarment_Material.Convection         = model.Convection;
                CostCalculationGarment_Material.ProductId          = CostCalculationGarment_MaterialVM.Product._id;
                CostCalculationGarment_Material.ProductCode        = CostCalculationGarment_MaterialVM.Product.code;
                CostCalculationGarment_Material.Construction       = CostCalculationGarment_MaterialVM.Product.construction;
                CostCalculationGarment_Material.Yarn               = CostCalculationGarment_MaterialVM.Product.yarn;
                CostCalculationGarment_Material.Width              = CostCalculationGarment_MaterialVM.Product.width;
                CostCalculationGarment_Material.Composition        = CostCalculationGarment_MaterialVM.Product.composition;
                CostCalculationGarment_Material.CategoryId         = CostCalculationGarment_MaterialVM.Category._id;
                CostCalculationGarment_Material.CategoryName       = CostCalculationGarment_MaterialVM.Category.SubCategory != null ? CostCalculationGarment_MaterialVM.Category.name + " - " + CostCalculationGarment_MaterialVM.Category.SubCategory : CostCalculationGarment_MaterialVM.Category.name;
                CostCalculationGarment_Material.UOMQuantityId      = CostCalculationGarment_MaterialVM.UOMQuantity._id;
                CostCalculationGarment_Material.UOMQuantityName    = CostCalculationGarment_MaterialVM.UOMQuantity.unit;
                CostCalculationGarment_Material.UOMPriceId         = CostCalculationGarment_MaterialVM.UOMPrice._id;
                CostCalculationGarment_Material.UOMPriceName       = CostCalculationGarment_MaterialVM.UOMPrice.unit;
                CostCalculationGarment_Material.ShippingFeePortion = Percentage.ToFraction(CostCalculationGarment_MaterialVM.ShippingFeePortion);

                model.CostCalculationGarment_Materials.Add(CostCalculationGarment_Material);
            }

            model.CommissionPortion = Percentage.ToFraction(viewModel.CommissionPortion);
            model.Risk = Percentage.ToFraction(viewModel.Risk);

            model.OTL1Id             = viewModel.OTL1.Id;
            model.OTL1Rate           = viewModel.OTL1.Value != null ? (double)viewModel.OTL1.Value : 0;
            model.OTL1CalculatedRate = viewModel.OTL1.CalculatedValue != null ? (double)viewModel.OTL1.CalculatedValue : 0;

            model.OTL2Id             = viewModel.OTL2.Id;
            model.OTL2Rate           = viewModel.OTL2.Value != null ? (double)viewModel.OTL2.Value : 0;
            model.OTL2CalculatedRate = viewModel.OTL2.CalculatedValue != null ? (double)viewModel.OTL2.CalculatedValue : 0;

            model.NETFOBP = Percentage.ToFraction(viewModel.NETFOBP);

            return(model);
        }
        private int GetLastMaterialFabricNumberByCategoryName(string convection)
        {
            CostCalculationGarment_Material result = DbContext.CostCalculationGarment_Materials.AsNoTracking().Where(w => w.CategoryName.ToUpper().Equals("FABRIC") && w.Convection.Equals(convection)).OrderByDescending(o => o._CreatedUtc.Year).ThenByDescending(m => m.AutoIncrementNumber).FirstOrDefault();

            return(result == null ? 0 : result.AutoIncrementNumber);
        }
        public CostCalculationGarment MapToModel(CostCalculationGarmentViewModel viewModel)
        {
            CostCalculationGarment model = new CostCalculationGarment();

            PropertyCopier <CostCalculationGarmentViewModel, CostCalculationGarment> .Copy(viewModel, model);

            model.LineId   = viewModel.Line.Id;
            model.LineCode = viewModel.Line.Code;
            model.LineName = viewModel.Line.Name;

            model.FabricAllowance      = Percentage.ToFraction(viewModel.FabricAllowance);
            model.AccessoriesAllowance = Percentage.ToFraction(viewModel.AccessoriesAllowance);

            model.SizeRangeId   = viewModel.SizeRange.Id;
            model.SizeRangeName = viewModel.SizeRange.Name;

            model.BuyerId   = viewModel.Buyer.Id;
            model.BuyerName = viewModel.Buyer.Name;

            model.EfficiencyId    = viewModel.Efficiency.Id;
            model.EfficiencyValue = Percentage.ToFraction(viewModel.Efficiency.Value);

            model.WageId   = viewModel.Wage.Id;
            model.WageRate = viewModel.Wage.Value != null ? (double)viewModel.Wage.Value : 0;

            model.THRId   = viewModel.THR.Id;
            model.THRRate = viewModel.THR.Value != null ? (double)viewModel.THR.Value : 0;

            model.RateId    = viewModel.Rate.Id;
            model.RateValue = viewModel.Rate.Value != null ? (double)viewModel.Rate.Value : 0;

            model.CostCalculationGarment_Materials = new List <CostCalculationGarment_Material>();

            foreach (CostCalculationGarment_MaterialViewModel CostCalculationGarment_MaterialVM in viewModel.CostCalculationGarment_Materials)
            {
                CostCalculationGarment_Material CostCalculationGarment_Material = new CostCalculationGarment_Material();
                PropertyCopier <CostCalculationGarment_MaterialViewModel, CostCalculationGarment_Material> .Copy(CostCalculationGarment_MaterialVM, CostCalculationGarment_Material);

                CostCalculationGarment_Material.CategoryId         = CostCalculationGarment_MaterialVM.Category.Id;
                CostCalculationGarment_Material.CategoryName       = CostCalculationGarment_MaterialVM.Category.SubCategory != null ? CostCalculationGarment_MaterialVM.Category.Name + " - " + CostCalculationGarment_MaterialVM.Category.SubCategory : CostCalculationGarment_MaterialVM.Category.Name;
                CostCalculationGarment_Material.MaterialId         = CostCalculationGarment_MaterialVM.Material.Id;
                CostCalculationGarment_Material.MaterialName       = CostCalculationGarment_MaterialVM.Material.Name;
                CostCalculationGarment_Material.UOMQuantityId      = CostCalculationGarment_MaterialVM.UOMQuantity.Id;
                CostCalculationGarment_Material.UOMQuantityName    = CostCalculationGarment_MaterialVM.UOMQuantity.Name;
                CostCalculationGarment_Material.UOMPriceId         = CostCalculationGarment_MaterialVM.UOMPrice.Id;
                CostCalculationGarment_Material.UOMPriceName       = CostCalculationGarment_MaterialVM.UOMPrice.Name;
                CostCalculationGarment_Material.ShippingFeePortion = Percentage.ToFraction(CostCalculationGarment_MaterialVM.ShippingFeePortion);

                model.CostCalculationGarment_Materials.Add(CostCalculationGarment_Material);
            }

            model.CommissionPortion = Percentage.ToFraction(viewModel.CommissionPortion);
            model.Risk = Percentage.ToFraction(viewModel.Risk);

            model.OTL1Id             = viewModel.OTL1.Id;
            model.OTL1Rate           = viewModel.OTL1.Value != null ? (double)viewModel.OTL1.Value : 0;
            model.OTL1CalculatedRate = viewModel.OTL1.CalculatedValue != null ? (double)viewModel.OTL1.CalculatedValue : 0;

            model.OTL2Id             = viewModel.OTL2.Id;
            model.OTL2Rate           = viewModel.OTL2.Value != null ? (double)viewModel.OTL2.Value : 0;
            model.OTL2CalculatedRate = viewModel.OTL2.CalculatedValue != null ? (double)viewModel.OTL2.CalculatedValue : 0;

            model.NETFOBP = Percentage.ToFraction(viewModel.NETFOBP);

            return(model);
        }