public async Task <int> DeleteTransitArea(DyeingPrintingAreaInputModel model)
        {
            int result = 0;

            result += await _outputSPPRepository.UpdateFromInputAsync(model.DyeingPrintingAreaInputProductionOrders.Select(s => s.DyeingPrintingAreaOutputProductionOrderId).ToList(), false, null);

            foreach (var item in model.DyeingPrintingAreaInputProductionOrders.Where(s => !s.HasOutputDocument))
            {
                item.FlagForDelete(_identityProvider.Username, UserAgent);
                var previousOutputData = await _outputSPPRepository.ReadByIdAsync(item.DyeingPrintingAreaOutputProductionOrderId);

                if (previousOutputData.Area == DyeingPrintingArea.PACKING)
                {
                    //var outputData = await _outputProductionOrderRepository.ReadByIdAsync(item.Id);
                    var packingData = JsonConvert.DeserializeObject <List <PackingData> >(previousOutputData.PrevSppInJson);
                    foreach (var pack in packingData)
                    {
                        pack.Balance *= -1;
                    }
                    result += await _SPPRepository.UpdateFromNextAreaInputPackingAsync(packingData);
                }
                else
                {
                    result += await _SPPRepository.UpdateFromNextAreaInputAsync(previousOutputData.DyeingPrintingAreaInputProductionOrderId, item.Balance * -1, item.PackagingQty * -1);
                }
                //result += await _SPPRepository.UpdateFromNextAreaInputAsync(previousOutputData.DyeingPrintingAreaInputProductionOrderId, item.Balance * -1, item.PackagingQty * -1);
            }

            //model.FlagForDelete(_identityProvider.Username, UserAgent);
            _dbSet.Update(model);

            result += await _dbContext.SaveChangesAsync();

            return(result);
        }
        public async Task <int> DeleteShippingArea(DyeingPrintingAreaInputModel model)
        {
            int result = 0;

            if (model.ShippingType == DyeingPrintingArea.ZONAGUDANG)
            {
                result += await _outputSPPRepository.UpdateFromInputAsync(model.DyeingPrintingAreaInputProductionOrders.Select(s => s.DyeingPrintingAreaOutputProductionOrderId).ToList(), false, null);
            }

            foreach (var item in model.DyeingPrintingAreaInputProductionOrders.Where(s => !s.HasOutputDocument))
            {
                item.FlagForDelete(_identityProvider.Username, UserAgent);
                if (model.ShippingType == DyeingPrintingArea.ZONAGUDANG)
                {
                    var previousOutputData = await _outputSPPRepository.ReadByIdAsync(item.DyeingPrintingAreaOutputProductionOrderId);

                    result += await _SPPRepository.UpdateFromNextAreaInputAsync(previousOutputData.DyeingPrintingAreaInputProductionOrderId, item.Balance * -1, item.PackagingQty * -1);
                }
            }

            _dbSet.Update(model);

            result += await _dbContext.SaveChangesAsync();

            return(result);
        }
        public async Task <int> Update(int id, InputAvalTransformationViewModel viewModel)
        {
            int result  = 0;
            var dbModel = await _repository.ReadByIdAsync(id);

            var model = new DyeingPrintingAreaInputModel(viewModel.Date, viewModel.Area, viewModel.Shift, viewModel.BonNo, viewModel.Group, viewModel.AvalType, viewModel.IsTransformedAval,
                                                         viewModel.TotalQuantity, viewModel.TotalWeight,
                                                         viewModel.AvalTransformationProductionOrders.Select(d => new DyeingPrintingAreaInputProductionOrderModel(viewModel.Area, d.BonNo, d.ProductionOrder.Id, d.ProductionOrder.No,
                                                                                                                                                                  d.ProductionOrder.Type, d.ProductionOrder.OrderQuantity, d.CartNo, d.Construction, d.Unit, d.Buyer, d.BuyerId, d.Color, d.Motif, d.AvalType, d.UomUnit, d.InputQuantity,
                                                                                                                                                                  d.HasOutputDocument, d.DyeingPrintingAreaInputProductionOrderId, d.Material.Id, d.Material.Name, d.MaterialConstruction.Id, d.MaterialConstruction.Name, d.MaterialWidth,
                                                                                                                                                                  d.Machine, d.ProcessType.Id, d.ProcessType.Name, d.YarnMaterial.Id, d.YarnMaterial.Name, d.ProductSKUId, d.FabricSKUId, d.ProductSKUCode, d.HasPrintingProductSKU, d.ProductPackingId, d.FabricPackingId, d.ProductPackingCode, d.HasPrintingProductPacking, d.InputQuantity, d.FinishWidth)
            {
                Id = d.Id
            }).ToList());

            result = await _repository.UpdateAvalTransformationArea(id, model, dbModel);

            var diffAvalQuantity = dbModel.TotalAvalQuantity - model.TotalAvalQuantity;
            var diffAvalWeight   = dbModel.TotalAvalWeight - model.TotalAvalWeight;
            var movementModel    = new DyeingPrintingAreaMovementModel(viewModel.Date, viewModel.Area, DyeingPrintingArea.TRANSFORM, model.Id, model.BonNo, diffAvalQuantity * -1, diffAvalWeight * -1, model.AvalType);

            result += await _movementRepository.InsertAsync(movementModel);

            return(result);
        }
        public async Task <int> UpdateAvalTransformationArea(int id, DyeingPrintingAreaInputModel model, DyeingPrintingAreaInputModel dbModel)
        {
            int result = 0;

            dbModel.SetDate(model.Date, _identityProvider.Username, UserAgent);
            dbModel.SetShift(model.Shift, _identityProvider.Username, UserAgent);
            dbModel.SetGroup(model.Group, _identityProvider.Username, UserAgent);
            dbModel.SetIsTransformedAval(model.IsTransformedAval, _identityProvider.Username, UserAgent);
            dbModel.SetTotalAvalQuantity(model.TotalAvalQuantity, _identityProvider.Username, UserAgent);
            dbModel.SetTotalAvalWeight(model.TotalAvalWeight, _identityProvider.Username, UserAgent);

            foreach (var item in dbModel.DyeingPrintingAreaInputProductionOrders.Where(s => !s.HasOutputDocument))
            {
                var localItem = model.DyeingPrintingAreaInputProductionOrders.FirstOrDefault(s => s.Id == item.Id);

                if (localItem == null)
                {
                    item.FlagForDelete(_identityProvider.Username, UserAgent);
                    result += await _SPPRepository.UpdateFromOutputAsync(item.DyeingPrintingAreaOutputProductionOrderId, false);
                }
            }

            result += await _dbContext.SaveChangesAsync();

            return(result);
        }
コード例 #5
0
        public async Task <int> Update(int id, InputInspectionMaterialViewModel viewModel)
        {
            int result  = 0;
            var dbModel = await _repository.ReadByIdAsync(id);

            var model = new DyeingPrintingAreaInputModel(viewModel.Date, viewModel.Area, viewModel.Shift, viewModel.BonNo, viewModel.Group, viewModel.InspectionMaterialProductionOrders.Select(s =>
                                                                                                                                                                                                new DyeingPrintingAreaInputProductionOrderModel(viewModel.Area, s.ProductionOrder.Id, s.ProductionOrder.No, s.ProductionOrder.Type, s.ProductionOrder.OrderQuantity,
                                                                                                                                                                                                                                                s.PackingInstruction, s.CartNo, s.Buyer, s.Construction, s.Unit, s.Color, s.Motif, s.UomUnit, s.InputQuantity, s.InputQuantity, s.HasOutputDocument, s.BuyerId, 0, s.Material.Id,
                                                                                                                                                                                                                                                s.Material.Name, s.MaterialConstruction.Id, s.MaterialConstruction.Name, s.MaterialWidth, s.ProcessType.Id, s.ProcessType.Name, s.YarnMaterial.Id, s.YarnMaterial.Name, s.InputQuantity, s.FinishWidth, viewModel.Date, s.MaterialOrigin)
                                                                                                                                                                                                //  s.Material.Name, s.MaterialConstruction.Id, s.MaterialConstruction.Name, s.MaterialWidth, s.ProcessType.Id, s.ProcessType.Name, s.YarnMaterial.Id, s.YarnMaterial.Name, s.InputQuantity, viewModel.Date)
            {
                Id = s.Id
            }).ToList());
            Dictionary <int, double> dictBalance = new Dictionary <int, double>();

            foreach (var item in dbModel.DyeingPrintingAreaInputProductionOrders)
            {
                var lclModel = model.DyeingPrintingAreaInputProductionOrders.FirstOrDefault(s => s.Id == item.Id);
                if (lclModel != null)
                {
                    var diffBalance = lclModel.InputQuantity - item.InputQuantity;

                    dictBalance.Add(lclModel.Id, diffBalance);
                }
            }
            var deletedData = dbModel.DyeingPrintingAreaInputProductionOrders.Where(s => !s.HasOutputDocument && !viewModel.InspectionMaterialProductionOrders.Any(d => d.Id == s.Id)).ToList();

            if (deletedData.Any(item => !item.HasOutputDocument && item.BalanceRemains != item.Balance))
            {
                throw new Exception("Ada SPP yang Sudah Dibuat di Pengeluaran Inspection Material!");
            }

            result = await _repository.UpdateIMArea(id, model, dbModel);

            foreach (var item in dbModel.DyeingPrintingAreaInputProductionOrders.Where(d => !d.HasOutputDocument && !d.IsDeleted))
            {
                double newBalance = 0;
                if (!dictBalance.TryGetValue(item.Id, out newBalance))
                {
                    newBalance = item.InputQuantity;
                }

                if (newBalance != 0)
                {
                    var movementModel = new DyeingPrintingAreaMovementModel(dbModel.Date, item.MaterialOrigin, dbModel.Area, DyeingPrintingArea.IN, dbModel.Id, dbModel.BonNo, item.ProductionOrderId, item.ProductionOrderNo,
                                                                            item.CartNo, item.Buyer, item.Construction, item.Unit, item.Color, item.Motif, item.UomUnit, newBalance, item.Id, item.ProductionOrderType);

                    result += await _movementRepository.InsertAsync(movementModel);
                }
            }
            foreach (var item in deletedData)
            {
                var movementModel = new DyeingPrintingAreaMovementModel(dbModel.Date, item.MaterialOrigin, dbModel.Area, DyeingPrintingArea.IN, dbModel.Id, dbModel.BonNo, item.ProductionOrderId, item.ProductionOrderNo,
                                                                        item.CartNo, item.Buyer, item.Construction, item.Unit, item.Color, item.Motif, item.UomUnit, item.Balance * -1, item.Id, item.ProductionOrderType);

                result += await _movementRepository.InsertAsync(movementModel);
            }

            return(result);
        }
        public async Task <int> Create(InputAvalTransformationViewModel viewModel)
        {
            int result = 0;

            var model = _repository.GetDbSet().AsNoTracking()
                        .FirstOrDefault(s => s.Area == DyeingPrintingArea.GUDANGAVAL && s.Date.Date == viewModel.Date.Date & s.Shift == viewModel.Shift && s.AvalType == viewModel.AvalType && s.IsTransformedAval);

            viewModel.AvalTransformationProductionOrders = viewModel.AvalTransformationProductionOrders.Where(s => s.IsSave).ToList();
            if (model == null)
            {
                int    totalCurrentYearData = _repository.ReadAllIgnoreQueryFilter().Count(s => s.IsTransformedAval && s.Area == DyeingPrintingArea.GUDANGAVAL && s.CreatedUtc.Year == viewModel.Date.Year);
                string bonNo = GenerateBonNo(totalCurrentYearData + 1, viewModel.Date);
                model = new DyeingPrintingAreaInputModel(viewModel.Date, viewModel.Area, viewModel.Shift, bonNo, viewModel.Group, viewModel.AvalType, true,
                                                         viewModel.TotalQuantity, viewModel.TotalWeight,
                                                         viewModel.AvalTransformationProductionOrders.Select(d => new DyeingPrintingAreaInputProductionOrderModel(viewModel.Area, d.BonNo, d.ProductionOrder.Id, d.ProductionOrder.No,
                                                                                                                                                                  d.ProductionOrder.Type, d.ProductionOrder.OrderQuantity, d.CartNo, d.Construction, d.Unit, d.Buyer, d.BuyerId, d.Color, d.Motif, d.AvalType, d.UomUnit, d.InputQuantity,
                                                                                                                                                                  false, d.Id, d.Material.Id, d.Material.Name, d.MaterialConstruction.Id, d.MaterialConstruction.Name, d.MaterialWidth, d.Machine, d.ProcessType.Id, d.ProcessType.Name,
                                                                                                                                                                  d.YarnMaterial.Id, d.YarnMaterial.Name, d.ProductSKUId, d.FabricSKUId, d.ProductSKUCode, d.HasPrintingProductSKU, d.ProductPackingId, d.FabricPackingId, d.ProductPackingCode, d.HasPrintingProductPacking, d.InputQuantity, d.FinishWidth)).ToList());

                result = await _repository.InsertAsync(model);

                var movementModel = new DyeingPrintingAreaMovementModel(viewModel.Date, viewModel.Area, DyeingPrintingArea.TRANSFORM, model.Id, model.BonNo, model.TotalAvalQuantity, model.TotalAvalWeight, model.AvalType);

                result += await _movementRepository.InsertAsync(movementModel);

                foreach (var item in model.DyeingPrintingAreaInputProductionOrders)
                {
                    var itemVM = viewModel.AvalTransformationProductionOrders.FirstOrDefault(s => s.Id == item.DyeingPrintingAreaOutputProductionOrderId);
                    result += await _inputProductionOrderRepository.UpdateFromOutputAsync(item.DyeingPrintingAreaOutputProductionOrderId, true);
                }
            }
            else
            {
                foreach (var item in viewModel.AvalTransformationProductionOrders)
                {
                    var modelItem = new DyeingPrintingAreaInputProductionOrderModel(viewModel.Area, item.BonNo, item.ProductionOrder.Id, item.ProductionOrder.No, item.ProductionOrder.Type,
                                                                                    item.ProductionOrder.OrderQuantity, item.CartNo, item.Construction, item.Unit, item.Buyer, item.BuyerId, item.Color, item.Motif, item.AvalType, item.UomUnit,
                                                                                    item.InputQuantity, false, item.Id, item.Material.Id, item.Material.Name, item.MaterialConstruction.Id, item.MaterialConstruction.Name,
                                                                                    item.MaterialWidth, item.Machine, item.ProcessType.Id, item.ProcessType.Name, item.YarnMaterial.Id, item.YarnMaterial.Name, item.ProductSKUId, item.FabricSKUId, item.ProductSKUCode, item.HasPrintingProductSKU, item.ProductPackingId, item.FabricPackingId, item.ProductPackingCode, item.HasPrintingProductPacking, item.InputQuantity, item.FinishWidth);

                    modelItem.DyeingPrintingAreaInputId = model.Id;

                    result += await _inputProductionOrderRepository.InsertAsync(modelItem);

                    result += await _inputProductionOrderRepository.UpdateFromOutputAsync(item.Id, true);
                }
                var movementModel = new DyeingPrintingAreaMovementModel(viewModel.Date, viewModel.Area, DyeingPrintingArea.TRANSFORM, model.Id, model.BonNo, viewModel.TotalQuantity, viewModel.TotalWeight, viewModel.AvalType);

                result += await _movementRepository.InsertAsync(movementModel);

                result += await _repository.UpdateHeaderAvalTransform(model, viewModel.TotalQuantity, viewModel.TotalWeight);
            }



            return(result);
        }
        public Task <int> UpdateAsync(int id, DyeingPrintingAreaInputModel model)
        {
            var modelToUpdate = _dbSet.Include(s => s.DyeingPrintingAreaInputProductionOrders).FirstOrDefault(s => s.Id == id);

            modelToUpdate.SetArea(model.Area, _identityProvider.Username, UserAgent);
            modelToUpdate.SetBonNo(model.BonNo, _identityProvider.Username, UserAgent);
            modelToUpdate.SetDate(model.Date, _identityProvider.Username, UserAgent);
            modelToUpdate.SetShift(model.Shift, _identityProvider.Username, UserAgent);
            modelToUpdate.SetGroup(model.Group, _identityProvider.Username, UserAgent);
            modelToUpdate.SetTotalAvalQuantity(model.TotalAvalQuantity, _identityProvider.Username, UserAgent);
            modelToUpdate.SetTotalAvalWeight(model.TotalAvalWeight, _identityProvider.Username, UserAgent);

            foreach (var item in modelToUpdate.DyeingPrintingAreaInputProductionOrders)
            {
                var localItem = model.DyeingPrintingAreaInputProductionOrders.FirstOrDefault(s => s.Id == item.Id);

                if (localItem == null)
                {
                    item.FlagForDelete(_identityProvider.Username, UserAgent);
                }
                else
                {
                    item.SetArea(localItem.Area, _identityProvider.Username, UserAgent);
                    item.SetBalance(localItem.Balance, _identityProvider.Username, UserAgent);
                    item.SetBuyer(localItem.BuyerId, localItem.Buyer, _identityProvider.Username, UserAgent);
                    item.SetCartNo(localItem.CartNo, _identityProvider.Username, UserAgent);
                    item.SetColor(localItem.Color, _identityProvider.Username, UserAgent);
                    item.SetConstruction(localItem.Construction, _identityProvider.Username, UserAgent);
                    item.SetGrade(localItem.Grade, _identityProvider.Username, UserAgent);
                    item.SetHasOutputDocument(localItem.HasOutputDocument, _identityProvider.Username, UserAgent);
                    item.SetMotif(localItem.Motif, _identityProvider.Username, UserAgent);
                    item.SetProductionOrder(localItem.ProductionOrderId, localItem.ProductionOrderNo, localItem.ProductionOrderType, localItem.ProductionOrderOrderQuantity, _identityProvider.Username, UserAgent);
                    item.SetRemark(localItem.Remark, _identityProvider.Username, UserAgent);
                    item.SetStatus(localItem.Status, _identityProvider.Username, UserAgent);
                    item.SetUnit(localItem.Unit, _identityProvider.Username, UserAgent);
                    item.SetUomUnit(localItem.UomUnit, _identityProvider.Username, UserAgent);
                    item.SetIsChecked(localItem.IsChecked, _identityProvider.Username, UserAgent);
                    item.SetPackingInstruction(localItem.PackingInstruction, _identityProvider.Username, UserAgent);
                    item.SetDeliveryOrderSales(localItem.DeliveryOrderSalesId, localItem.DeliveryOrderSalesNo, _identityProvider.Username, UserAgent);
                    item.SetMaterial(localItem.MaterialId, localItem.MaterialName, _identityProvider.Username, UserAgent);
                    item.SetMaterialConstruction(localItem.MaterialConstructionId, localItem.MaterialConstructionName, _identityProvider.Username, UserAgent);
                    item.SetMaterialWidth(localItem.MaterialWidth, _identityProvider.Username, UserAgent);
                    item.SetMachine(localItem.Machine, _identityProvider.Username, UserAgent);
                    item.SetPackagingLength(localItem.PackagingLength, _identityProvider.Username, UserAgent);
                }
            }

            foreach (var item in model.DyeingPrintingAreaInputProductionOrders.Where(s => s.Id == 0))
            {
                item.FlagForCreate(_identityProvider.Username, UserAgent);
                modelToUpdate.DyeingPrintingAreaInputProductionOrders.Add(item);
            }

            return(_dbContext.SaveChangesAsync());
        }
        public Task <int> DeleteIMArea(DyeingPrintingAreaInputModel model)
        {
            foreach (var item in model.DyeingPrintingAreaInputProductionOrders.Where(s => !s.HasOutputDocument))
            {
                item.FlagForDelete(_identityProvider.Username, UserAgent);
            }

            //model.FlagForDelete(_identityProvider.Username, UserAgent);
            _dbSet.Update(model);
            return(_dbContext.SaveChangesAsync());
        }
        public Task <int> InsertAsync(DyeingPrintingAreaInputModel model)
        {
            model.FlagForCreate(_identityProvider.Username, UserAgent);
            foreach (var item in model.DyeingPrintingAreaInputProductionOrders)
            {
                item.FlagForCreate(_identityProvider.Username, UserAgent);
            }

            _dbSet.Add(model);

            return(_dbContext.SaveChangesAsync());
        }
        public Task <int> UpdateHeaderAvalTransform(DyeingPrintingAreaInputModel model, double avalQuantity, double weightQuantity)
        {
            var newAvalQuantity   = model.TotalAvalQuantity + avalQuantity;
            var newWeightQuantity = model.TotalAvalWeight + weightQuantity;

            model.SetTotalAvalQuantity(newAvalQuantity, _identityProvider.Username, UserAgent);
            model.SetTotalAvalWeight(newWeightQuantity, _identityProvider.Username, UserAgent);

            _dbSet.Update(model);

            return(_dbContext.SaveChangesAsync());
        }
        public async Task <int> UpdateTransitArea(int id, DyeingPrintingAreaInputModel model, DyeingPrintingAreaInputModel dbModel)
        {
            int result = 0;

            dbModel.SetDate(model.Date, _identityProvider.Username, UserAgent);
            dbModel.SetShift(model.Shift, _identityProvider.Username, UserAgent);
            dbModel.SetGroup(model.Group, _identityProvider.Username, UserAgent);

            foreach (var item in dbModel.DyeingPrintingAreaInputProductionOrders.Where(s => !s.HasOutputDocument))
            {
                var localItem = model.DyeingPrintingAreaInputProductionOrders.FirstOrDefault(s => s.Id == item.Id);

                if (localItem == null)
                {
                    item.FlagForDelete(_identityProvider.Username, UserAgent);
                    result += await _outputSPPRepository.UpdateFromInputNextAreaFlagAsync(item.DyeingPrintingAreaOutputProductionOrderId, false, null);

                    var previousOutputData = await _outputSPPRepository.ReadByIdAsync(item.DyeingPrintingAreaOutputProductionOrderId);

                    if (previousOutputData.Area == DyeingPrintingArea.PACKING)
                    {
                        //var outputData = await _outputProductionOrderRepository.ReadByIdAsync(item.Id);
                        var packingData = JsonConvert.DeserializeObject <List <PackingData> >(previousOutputData.PrevSppInJson);
                        foreach (var pack in packingData)
                        {
                            pack.Balance *= -1;
                        }
                        result += await _SPPRepository.UpdateFromNextAreaInputPackingAsync(packingData);
                    }
                    else
                    {
                        result += await _SPPRepository.UpdateFromNextAreaInputAsync(previousOutputData.DyeingPrintingAreaInputProductionOrderId, item.Balance * -1, item.PackagingQty * -1);
                    }
                    //result += await _SPPRepository.UpdateFromNextAreaInputAsync(previousOutputData.DyeingPrintingAreaInputProductionOrderId, item.Balance * -1, item.PackagingQty * -1);
                }
            }

            //foreach (var item in model.DyeingPrintingAreaInputProductionOrders.Where(s => s.Id == 0))
            //{
            //    item.FlagForCreate(_identityProvider.Username, UserAgent);
            //    dbModel.DyeingPrintingAreaInputProductionOrders.Add(item);
            //    result += await _outputSPPRepository.UpdateFromInputNextAreaFlagAsync(item.DyeingPrintingAreaOutputProductionOrderId, true);
            //    var previousOutputData = await _outputSPPRepository.ReadByIdAsync(item.DyeingPrintingAreaOutputProductionOrderId);
            //    result += await _SPPRepository.UpdateFromNextAreaInputAsync(previousOutputData.DyeingPrintingAreaInputProductionOrderId, item.Balance);
            //}

            result += await _dbContext.SaveChangesAsync();

            return(result);
        }
コード例 #12
0
        public async Task <int> Create(InputInspectionMaterialViewModel viewModel)
        {
            int result = 0;
            var model  = _repository.GetDbSet().AsNoTracking()
                         .FirstOrDefault(s => s.Area == DyeingPrintingArea.INSPECTIONMATERIAL && s.Date.Date == viewModel.Date.Date & s.Shift == viewModel.Shift);

            if (model == null)
            {
                int    totalCurrentYearData = _repository.ReadAllIgnoreQueryFilter().Count(s => s.Area == DyeingPrintingArea.INSPECTIONMATERIAL && s.CreatedUtc.Year == viewModel.Date.Year);
                string bonNo = GenerateBonNo(totalCurrentYearData + 1, viewModel.Date);
                model = new DyeingPrintingAreaInputModel(viewModel.Date, viewModel.Area, viewModel.Shift, bonNo, viewModel.Group, viewModel.InspectionMaterialProductionOrders.Select(s =>
                                                                                                                                                                                      new DyeingPrintingAreaInputProductionOrderModel(viewModel.Area, s.ProductionOrder.Id, s.ProductionOrder.No, s.ProductionOrder.Type, s.ProductionOrder.OrderQuantity,
                                                                                                                                                                                                                                      s.PackingInstruction, s.CartNo, s.Buyer, s.Construction, s.Unit, s.Color, s.Motif, s.UomUnit, s.InputQuantity, s.InputQuantity, false, s.BuyerId, 0, s.Material.Id, s.Material.Name,
                                                                                                                                                                                                                                      s.MaterialConstruction.Id, s.MaterialConstruction.Name, s.MaterialWidth, s.ProcessType.Id, s.ProcessType.Name, s.YarnMaterial.Id, s.YarnMaterial.Name, s.InputQuantity, s.FinishWidth, viewModel.Date, s.MaterialOrigin)).ToList());


                result = await _repository.InsertAsync(model);

                foreach (var item in model.DyeingPrintingAreaInputProductionOrders)
                {
                    var movementModel = new DyeingPrintingAreaMovementModel(model.Date, item.MaterialOrigin, model.Area, DyeingPrintingArea.IN, model.Id, model.BonNo, item.ProductionOrderId, item.ProductionOrderNo,
                                                                            item.CartNo, item.Buyer, item.Construction, item.Unit, item.Color, item.Motif, item.UomUnit, item.InputQuantity, item.Id, item.ProductionOrderType);

                    result += await _movementRepository.InsertAsync(movementModel);
                }
            }
            else
            {
                foreach (var item in viewModel.InspectionMaterialProductionOrders)
                {
                    var modelItem = new DyeingPrintingAreaInputProductionOrderModel(viewModel.Area, item.ProductionOrder.Id, item.ProductionOrder.No,
                                                                                    item.ProductionOrder.Type, item.ProductionOrder.OrderQuantity, item.PackingInstruction, item.CartNo, item.Buyer, item.Construction, item.Unit, item.Color,
                                                                                    item.Motif, item.UomUnit, item.InputQuantity, item.InputQuantity, false, item.BuyerId, 0, item.Material.Id, item.Material.Name,
                                                                                    item.MaterialConstruction.Id, item.MaterialConstruction.Name, item.MaterialWidth, item.ProcessType.Id, item.ProcessType.Name, item.YarnMaterial.Id, item.YarnMaterial.Name,
                                                                                    item.InputQuantity, item.FinishWidth, viewModel.Date, item.MaterialOrigin);

                    modelItem.DyeingPrintingAreaInputId = model.Id;

                    result += await _productionOrderRepository.InsertAsync(modelItem);

                    var movementModel = new DyeingPrintingAreaMovementModel(viewModel.Date, item.MaterialOrigin, viewModel.Area, DyeingPrintingArea.IN, model.Id, model.BonNo, item.ProductionOrder.Id, item.ProductionOrder.No,
                                                                            item.CartNo, item.Buyer, item.Construction, item.Unit, item.Color, item.Motif, item.UomUnit, item.InputQuantity, modelItem.Id, item.ProductionOrder.Type);

                    result += await _movementRepository.InsertAsync(movementModel);
                }
            }

            return(result);
        }
        public async Task <int> DeleteAvalTransformationArea(DyeingPrintingAreaInputModel model)
        {
            int result = 0;

            foreach (var item in model.DyeingPrintingAreaInputProductionOrders.Where(s => !s.HasOutputDocument))
            {
                item.FlagForDelete(_identityProvider.Username, UserAgent);
                result += await _SPPRepository.UpdateFromOutputAsync(item.DyeingPrintingAreaOutputProductionOrderId, false);
            }
            model.FlagForDelete(_identityProvider.Username, UserAgent);
            _dbSet.Update(model);

            result += await _dbContext.SaveChangesAsync();

            return(result);
        }
        public Task <int> UpdateIMArea(int id, DyeingPrintingAreaInputModel model, DyeingPrintingAreaInputModel modelToUpdate)
        {
            modelToUpdate.SetDate(model.Date, _identityProvider.Username, UserAgent);
            modelToUpdate.SetShift(model.Shift, _identityProvider.Username, UserAgent);
            modelToUpdate.SetGroup(model.Group, _identityProvider.Username, UserAgent);

            foreach (var item in modelToUpdate.DyeingPrintingAreaInputProductionOrders.Where(s => !s.HasOutputDocument))
            {
                var localItem = model.DyeingPrintingAreaInputProductionOrders.FirstOrDefault(s => s.Id == item.Id);

                if (localItem == null)
                {
                    item.FlagForDelete(_identityProvider.Username, UserAgent);
                }
                else
                {
                    item.SetCartNo(localItem.CartNo, _identityProvider.Username, UserAgent);
                    var diffBalance = localItem.InputQuantity - item.InputQuantity;

                    var newBalanceRemains = item.BalanceRemains + diffBalance;
                    var newBalance        = item.Balance + diffBalance;

                    if (newBalanceRemains <= 0)
                    {
                        item.SetHasOutputDocument(true, _identityProvider.Username, UserAgent);
                    }
                    else
                    {
                        item.SetHasOutputDocument(false, _identityProvider.Username, UserAgent);
                    }
                    item.SetBalanceRemains(newBalanceRemains, _identityProvider.Username, UserAgent);
                    item.SetBalance(newBalance, _identityProvider.Username, UserAgent);
                    item.SetInputQuantity(localItem.InputQuantity, _identityProvider.Username, UserAgent);
                }
            }

            foreach (var item in model.DyeingPrintingAreaInputProductionOrders.Where(s => s.Id == 0))
            {
                item.FlagForCreate(_identityProvider.Username, UserAgent);
                modelToUpdate.DyeingPrintingAreaInputProductionOrders.Add(item);
            }

            return(_dbContext.SaveChangesAsync());
        }
        public async Task <int> Update(int id, InputShippingViewModel viewModel)
        {
            int result  = 0;
            var dbModel = await _repository.ReadByIdAsync(id);


            var model = new DyeingPrintingAreaInputModel(viewModel.Date, viewModel.Area, viewModel.Shift, viewModel.BonNo, viewModel.Group, viewModel.ShippingType, viewModel.ShippingProductionOrders.Select(s =>
                                                                                                                                                                                                              new DyeingPrintingAreaInputProductionOrderModel(viewModel.Area, s.DeliveryOrder.Id, s.DeliveryOrder.No, s.ProductionOrder.Id, s.ProductionOrder.No, s.ProductionOrder.Type,
                                                                                                                                                                                                                                                              s.ProductionOrder.OrderQuantity, s.Buyer, s.Construction, s.PackingType, s.Color, s.Motif, s.Grade, s.InputQtyPacking, s.Packing, s.InputQuantity, s.UomUnit, s.HasOutputDocument,
                                                                                                                                                                                                                                                              s.InputQuantity, s.Unit, s.BuyerId, s.DyeingPrintingAreaInputProductionOrderId, s.Material.Id, s.Material.Name, s.MaterialConstruction.Id, s.MaterialConstruction.Name, s.MaterialWidth, s.CartNo, s.Remark,
                                                                                                                                                                                                                                                              s.ProcessType.Id, s.ProcessType.Name, s.YarnMaterial.Id, s.YarnMaterial.Name, s.ProductSKUId, s.FabricSKUId, s.ProductSKUCode, s.HasPrintingProductSKU,
                                                                                                                                                                                                                                                              s.ProductPackingId, s.FabricPackingId, s.ProductPackingCode, s.HasPrintingProductPacking, s.PackingLength, s.InputQuantity, s.InputQtyPacking, s.DeliveryOrderRetur.Id, s.DeliveryOrderRetur.No, s.FinishWidth, s.DateIn)

            {
                Id = s.Id
            }).ToList());

            var deletedData = dbModel.DyeingPrintingAreaInputProductionOrders.Where(s => !s.HasOutputDocument && !viewModel.ShippingProductionOrders.Any(d => d.Id == s.Id)).ToList();

            if (deletedData.Any(item => !item.HasOutputDocument && item.BalanceRemains != item.Balance))
            {
                throw new Exception("Ada SPP yang Sudah Dibuat di Pengeluaran Shipping!");
            }

            result = await _repository.UpdateShippingArea(id, model, dbModel);

            foreach (var item in deletedData)
            {
                var movementModel = new DyeingPrintingAreaMovementModel(dbModel.Date, dbModel.Area, DyeingPrintingArea.IN, dbModel.Id, dbModel.BonNo, item.ProductionOrderId, item.ProductionOrderNo,
                                                                        item.CartNo, item.Buyer, item.Construction, item.Unit, item.Color, item.Motif, item.UomUnit, item.Balance * -1, item.Id, item.ProductionOrderType,
                                                                        item.Grade, null, item.PackagingType, item.InputPackagingQty * -1, item.PackagingUnit, item.PackagingLength);

                result += await _movementRepository.InsertAsync(movementModel);
            }

            return(result);
        }
        private InputAvalTransformationViewModel MapToViewModel(DyeingPrintingAreaInputModel model)
        {
            var vm = new InputAvalTransformationViewModel()
            {
                Active            = model.Active,
                TotalWeight       = model.TotalAvalWeight,
                TotalQuantity     = model.TotalAvalQuantity,
                AvalType          = model.AvalType,
                Area              = model.Area,
                BonNo             = model.BonNo,
                CreatedAgent      = model.CreatedAgent,
                CreatedBy         = model.CreatedBy,
                CreatedUtc        = model.CreatedUtc,
                Date              = model.Date,
                DeletedAgent      = model.DeletedAgent,
                DeletedBy         = model.DeletedBy,
                DeletedUtc        = model.DeletedUtc,
                Group             = model.Group,
                Id                = model.Id,
                IsDeleted         = model.IsDeleted,
                LastModifiedAgent = model.LastModifiedAgent,
                LastModifiedBy    = model.LastModifiedBy,
                LastModifiedUtc   = model.LastModifiedUtc,
                IsTransformedAval = model.IsTransformedAval,
                Shift             = model.Shift,
                AvalTransformationProductionOrders = model.DyeingPrintingAreaInputProductionOrders.Select(d => new InputAvalTransformationProductionOrderViewModel()
                {
                    Active       = d.Active,
                    AvalType     = d.AvalType,
                    BonNo        = d.InputAvalBonNo,
                    Machine      = d.Machine,
                    Buyer        = d.Buyer,
                    BuyerId      = d.BuyerId,
                    CartNo       = d.CartNo,
                    Color        = d.Color,
                    Construction = d.Construction,
                    CreatedAgent = d.CreatedAgent,
                    CreatedBy    = d.CreatedBy,
                    CreatedUtc   = d.CreatedUtc,
                    DeletedAgent = d.DeletedAgent,
                    DeletedBy    = d.DeletedBy,
                    DeletedUtc   = d.DeletedUtc,
                    DyeingPrintingAreaInputProductionOrderId = d.DyeingPrintingAreaOutputProductionOrderId,
                    Id                = d.Id,
                    IsDeleted         = d.IsDeleted,
                    LastModifiedAgent = d.LastModifiedAgent,
                    LastModifiedBy    = d.LastModifiedBy,
                    LastModifiedUtc   = d.LastModifiedUtc,
                    Motif             = d.Motif,
                    MaterialWidth     = d.MaterialWidth,
                    FinishWidth       = d.FinishWidth,
                    Material          = new Material()
                    {
                        Id   = d.MaterialId,
                        Name = d.MaterialName
                    },
                    MaterialConstruction = new MaterialConstruction()
                    {
                        Name = d.MaterialConstructionName,
                        Id   = d.MaterialConstructionId
                    },
                    ProcessType = new CommonViewModelObjectProperties.ProcessType()
                    {
                        Id   = d.ProcessTypeId,
                        Name = d.ProcessTypeName
                    },
                    YarnMaterial = new CommonViewModelObjectProperties.YarnMaterial()
                    {
                        Id   = d.YarnMaterialId,
                        Name = d.YarnMaterialName
                    },
                    ProductionOrder = new ProductionOrder()
                    {
                        Id            = d.ProductionOrderId,
                        No            = d.ProductionOrderNo,
                        OrderQuantity = d.ProductionOrderOrderQuantity,
                        Type          = d.ProductionOrderType
                    },
                    Quantity                  = d.Balance,
                    InputQuantity             = d.InputQuantity,
                    Unit                      = d.Unit,
                    UomUnit                   = d.UomUnit,
                    HasOutputDocument         = d.HasOutputDocument,
                    ProductSKUId              = d.ProductSKUId,
                    FabricSKUId               = d.FabricSKUId,
                    ProductSKUCode            = d.ProductSKUCode,
                    HasPrintingProductSKU     = d.HasPrintingProductSKU,
                    ProductPackingId          = d.ProductPackingId,
                    FabricPackingId           = d.FabricPackingId,
                    ProductPackingCode        = d.ProductPackingCode,
                    HasPrintingProductPacking = d.HasPrintingProductPacking
                }).ToList()
            };

            return(vm);
        }
        private InputShippingViewModel MapToViewModel(DyeingPrintingAreaInputModel model)
        {
            var vm = new InputShippingViewModel()
            {
                Active                   = model.Active,
                Id                       = model.Id,
                Area                     = model.Area,
                BonNo                    = model.BonNo,
                CreatedAgent             = model.CreatedAgent,
                CreatedBy                = model.CreatedBy,
                CreatedUtc               = model.CreatedUtc,
                Date                     = model.Date,
                DeletedAgent             = model.DeletedAgent,
                DeletedBy                = model.DeletedBy,
                Group                    = model.Group,
                DeletedUtc               = model.DeletedUtc,
                IsDeleted                = model.IsDeleted,
                LastModifiedAgent        = model.LastModifiedAgent,
                LastModifiedBy           = model.LastModifiedBy,
                LastModifiedUtc          = model.LastModifiedUtc,
                Shift                    = model.Shift,
                ShippingType             = model.ShippingType,
                ShippingProductionOrders = model.DyeingPrintingAreaInputProductionOrders.Select(s => new InputShippingProductionOrderViewModel()
                {
                    Active             = s.Active,
                    LastModifiedUtc    = s.LastModifiedUtc,
                    Buyer              = s.Buyer,
                    BuyerId            = s.BuyerId,
                    CartNo             = s.CartNo,
                    Color              = s.Color,
                    Construction       = s.Construction,
                    CreatedAgent       = s.CreatedAgent,
                    CreatedBy          = s.CreatedBy,
                    CreatedUtc         = s.CreatedUtc,
                    DeletedAgent       = s.DeletedAgent,
                    DeletedBy          = s.DeletedBy,
                    DeletedUtc         = s.DeletedUtc,
                    Remark             = s.Remark,
                    PackingInstruction = s.PackingInstruction,
                    Area = s.Area,
                    HasOutputDocument = s.HasOutputDocument,
                    Id                = s.Id,
                    IsDeleted         = s.IsDeleted,
                    LastModifiedAgent = s.LastModifiedAgent,
                    LastModifiedBy    = s.LastModifiedBy,
                    Packing           = s.PackagingUnit,
                    Motif             = s.Motif,
                    Grade             = s.Grade,
                    DeliveryOrder     = new DeliveryOrderSales()
                    {
                        Id = s.DeliveryOrderSalesId,
                        No = s.DeliveryOrderSalesNo
                    },
                    QtyPacking      = s.PackagingQty,
                    InputQtyPacking = s.InputPackagingQty,
                    PackingType     = s.PackagingType,
                    Qty             = s.Balance,
                    InputQuantity   = s.InputQuantity,
                    ProductionOrder = new ProductionOrder()
                    {
                        Id            = s.ProductionOrderId,
                        No            = s.ProductionOrderNo,
                        OrderQuantity = s.ProductionOrderOrderQuantity,
                        Type          = s.ProductionOrderType
                    },
                    DeliveryOrderRetur = new DeliveryOrderRetur()
                    {
                        Id = s.DeliveryOrderReturId,
                        No = s.DeliveryOrderReturNo
                    },
                    MaterialWidth = s.MaterialWidth,
                    FinishWidth   = s.FinishWidth,
                    Material      = new Material()
                    {
                        Id   = s.MaterialId,
                        Name = s.MaterialName
                    },
                    MaterialConstruction = new MaterialConstruction()
                    {
                        Name = s.MaterialConstructionName,
                        Id   = s.MaterialConstructionId
                    },
                    PackingLength = s.PackagingLength,
                    ProcessType   = new CommonViewModelObjectProperties.ProcessType()
                    {
                        Id   = s.ProcessTypeId,
                        Name = s.ProcessTypeName
                    },
                    YarnMaterial = new CommonViewModelObjectProperties.YarnMaterial()
                    {
                        Id   = s.YarnMaterialId,
                        Name = s.YarnMaterialName
                    },
                    Unit                      = s.Unit,
                    UomUnit                   = s.UomUnit,
                    ProductSKUId              = s.ProductSKUId,
                    FabricSKUId               = s.FabricSKUId,
                    ProductSKUCode            = s.ProductSKUCode,
                    HasPrintingProductSKU     = s.HasPrintingProductSKU,
                    ProductPackingId          = s.ProductPackingId,
                    FabricPackingId           = s.FabricPackingId,
                    ProductPackingCode        = s.ProductPackingCode,
                    HasPrintingProductPacking = s.HasPrintingProductPacking,
                    DateIn                    = s.DateIn,
                    DateOut                   = s.DateOut,
                }).ToList()
            };


            return(vm);
        }
        public async Task <int> UpdateShippingArea(int id, DyeingPrintingAreaInputModel model, DyeingPrintingAreaInputModel dbModel)
        {
            int result = 0;

            dbModel.SetDate(model.Date, _identityProvider.Username, UserAgent);
            dbModel.SetShift(model.Shift, _identityProvider.Username, UserAgent);
            dbModel.SetGroup(model.Group, _identityProvider.Username, UserAgent);

            foreach (var item in dbModel.DyeingPrintingAreaInputProductionOrders.Where(s => !s.HasOutputDocument))
            {
                var localItem = model.DyeingPrintingAreaInputProductionOrders.FirstOrDefault(s => s.Id == item.Id);

                if (localItem == null)
                {
                    item.FlagForDelete(_identityProvider.Username, UserAgent);

                    if (model.ShippingType == DyeingPrintingArea.ZONAGUDANG)
                    {
                        result += await _outputSPPRepository.UpdateFromInputNextAreaFlagAsync(item.DyeingPrintingAreaOutputProductionOrderId, false, null);

                        var previousOutputData = await _outputSPPRepository.ReadByIdAsync(item.DyeingPrintingAreaOutputProductionOrderId);

                        result += await _SPPRepository.UpdateFromNextAreaInputAsync(previousOutputData.DyeingPrintingAreaInputProductionOrderId, item.Balance * -1, item.PackagingQty * -1);
                    }
                }
                else
                {
                    var diffBalance    = localItem.InputQuantity - item.InputQuantity;
                    var diffQtyPacking = localItem.InputPackagingQty - item.InputPackagingQty;

                    var newBalanceRemains = item.BalanceRemains + diffBalance;
                    var newBalance        = item.Balance + diffBalance;

                    var newPackagingQty = item.PackagingQty + diffQtyPacking;

                    item.SetGrade(localItem.Grade, _identityProvider.Username, UserAgent);
                    item.SetPackagingType(localItem.PackagingType, _identityProvider.Username, UserAgent);
                    item.SetPackagingQty(newPackagingQty, _identityProvider.Username, UserAgent);
                    item.SetPackagingUnit(localItem.PackagingUnit, _identityProvider.Username, UserAgent);
                    item.SetPackagingLength(localItem.PackagingLength, _identityProvider.Username, UserAgent);
                    item.SetInputPackagingQty(localItem.InputPackagingQty, _identityProvider.Username, UserAgent);
                    item.SetBalance(newBalance, _identityProvider.Username, UserAgent);
                    item.SetInputQuantity(localItem.InputQuantity, _identityProvider.Username, UserAgent);
                    item.SetBalanceRemains(newBalanceRemains, _identityProvider.Username, UserAgent);
                }
            }

            if (model.ShippingType == DyeingPrintingArea.RETURBARANG)
            {
                foreach (var item in model.DyeingPrintingAreaInputProductionOrders.Where(s => s.Id == 0))
                {
                    item.FlagForCreate(_identityProvider.Username, UserAgent);
                    dbModel.DyeingPrintingAreaInputProductionOrders.Add(item);
                }
            }


            //foreach (var item in model.DyeingPrintingAreaInputProductionOrders.Where(s => s.Id == 0))
            //{
            //    item.FlagForCreate(_identityProvider.Username, UserAgent);
            //    dbModel.DyeingPrintingAreaInputProductionOrders.Add(item);
            //    result += await _outputSPPRepository.UpdateFromInputNextAreaFlagAsync(item.DyeingPrintingAreaOutputProductionOrderId, true);
            //    var previousOutputData = await _outputSPPRepository.ReadByIdAsync(item.DyeingPrintingAreaOutputProductionOrderId);
            //    result += await _SPPRepository.UpdateFromNextAreaInputAsync(previousOutputData.DyeingPrintingAreaInputProductionOrderId, item.Balance);
            //}

            result += await _dbContext.SaveChangesAsync();

            return(result);
        }
        public async Task <int> Reject(InputShippingViewModel viewModel)
        {
            int result = 0;
            var groupedProductionOrders = viewModel.ShippingProductionOrders.GroupBy(s => s.Area);

            if (viewModel.ShippingType != DyeingPrintingArea.ZONAGUDANG)
            {
                return(result);
            }

            foreach (var item in groupedProductionOrders)
            {
                var model = _repository.GetDbSet().AsNoTracking()
                            .FirstOrDefault(s => s.Area == item.Key && s.Date.Date == viewModel.Date.Date & s.Shift == viewModel.Shift);

                if (model == null)
                {
                    int    totalCurrentYearData = _repository.ReadAllIgnoreQueryFilter().Count(s => s.Area == item.Key && s.CreatedUtc.Year == viewModel.Date.Year);
                    string bonNo = GenerateBonNo(totalCurrentYearData + 1, viewModel.Date, item.Key);
                    model = new DyeingPrintingAreaInputModel(viewModel.Date, item.Key, viewModel.Shift, bonNo, viewModel.Group,
                                                             item.Select(s => new DyeingPrintingAreaInputProductionOrderModel(item.Key, s.ProductionOrder.Id,
                                                                                                                              s.ProductionOrder.No, s.ProductionOrder.Type, s.PackingInstruction, s.CartNo, s.Buyer, s.Construction, s.Unit, s.Color, s.Motif, s.UomUnit,
                                                                                                                              s.InputQuantity, false, s.Packing, s.PackingType, s.InputQtyPacking, s.Grade, s.ProductionOrder.OrderQuantity, s.BuyerId, s.Id, s.Remark, s.InputQuantity,
                                                                                                                              s.Material.Id, s.Material.Name, s.MaterialConstruction.Id, s.MaterialConstruction.Name, s.MaterialWidth, s.ProcessType.Id, s.ProcessType.Name, s.YarnMaterial.Id, s.YarnMaterial.Name, s.ProductSKUId, s.FabricSKUId, s.ProductSKUCode,
                                                                                                                              s.HasPrintingProductSKU, s.ProductPackingId, s.FabricPackingId, s.ProductPackingCode, s.HasPrintingProductPacking, s.PackingLength, s.InputQuantity, s.InputQtyPacking, s.FinishWidth, s.DateIn)).ToList());


                    result = await _repository.InsertAsync(model);

                    result += await _outputSPPRepository.UpdateFromInputAsync(item.Select(s => s.Id).ToList(), true, DyeingPrintingArea.TOLAK);

                    foreach (var detail in item)
                    {
                        var itemModel = model.DyeingPrintingAreaInputProductionOrders.FirstOrDefault(s => s.DyeingPrintingAreaOutputProductionOrderId == detail.Id);
                        result += await _productionOrderRepository.UpdateFromNextAreaInputAsync(detail.DyeingPrintingAreaInputProductionOrderId, detail.InputQuantity, detail.InputQtyPacking);

                        var movementModel = new DyeingPrintingAreaMovementModel(viewModel.Date, item.Key, DyeingPrintingArea.IN, model.Id, model.BonNo, detail.ProductionOrder.Id, detail.ProductionOrder.No,
                                                                                detail.CartNo, detail.Buyer, detail.Construction, detail.Unit, detail.Color, detail.Motif, detail.UomUnit, detail.InputQuantity, itemModel.Id, detail.ProductionOrder.Type,
                                                                                detail.Grade, null, detail.PackingType, detail.InputQtyPacking, detail.Packing, detail.PackingLength);

                        result += await _movementRepository.InsertAsync(movementModel);
                    }
                }
                else
                {
                    foreach (var detail in item)
                    {
                        var modelItem = new DyeingPrintingAreaInputProductionOrderModel(item.Key, detail.ProductionOrder.Id, detail.ProductionOrder.No, detail.ProductionOrder.Type,
                                                                                        detail.PackingInstruction, detail.CartNo, detail.Buyer, detail.Construction, detail.Unit, detail.Color, detail.Motif, detail.UomUnit,
                                                                                        detail.InputQuantity, false, detail.Packing, detail.PackingType, detail.InputQtyPacking, detail.Grade, detail.ProductionOrder.OrderQuantity, detail.BuyerId,
                                                                                        detail.Id, detail.Remark, detail.InputQuantity,
                                                                                        detail.Material.Id, detail.Material.Name, detail.MaterialConstruction.Id, detail.MaterialConstruction.Name, detail.MaterialWidth, detail.ProcessType.Id, detail.ProcessType.Name, detail.YarnMaterial.Id, detail.YarnMaterial.Name, detail.ProductSKUId, detail.FabricSKUId, detail.ProductSKUCode,
                                                                                        detail.HasPrintingProductSKU, detail.ProductPackingId, detail.FabricPackingId, detail.ProductPackingCode, detail.HasPrintingProductPacking, detail.PackingLength,
                                                                                        detail.InputQuantity, detail.InputQtyPacking, detail.FinishWidth, detail.DateIn);

                        modelItem.DyeingPrintingAreaInputId = model.Id;

                        result += await _productionOrderRepository.InsertAsync(modelItem);

                        result += await _productionOrderRepository.UpdateFromNextAreaInputAsync(detail.DyeingPrintingAreaInputProductionOrderId, detail.InputQuantity, detail.InputQtyPacking);

                        var movementModel = new DyeingPrintingAreaMovementModel(viewModel.Date, item.Key, DyeingPrintingArea.IN, model.Id, model.BonNo, detail.ProductionOrder.Id, detail.ProductionOrder.No,
                                                                                detail.CartNo, detail.Buyer, detail.Construction, detail.Unit, detail.Color, detail.Motif, detail.UomUnit, detail.InputQuantity, modelItem.Id, detail.ProductionOrder.Type,
                                                                                detail.Grade, null, detail.PackingType, detail.InputQtyPacking, detail.Packing, detail.PackingLength);

                        result += await _movementRepository.InsertAsync(movementModel);
                    }
                    result += await _outputSPPRepository.UpdateFromInputAsync(item.Select(s => s.Id).ToList(), true, DyeingPrintingArea.TOLAK);
                }
            }

            return(result);
        }
        public async Task <int> Create(InputShippingViewModel viewModel)
        {
            int result = 0;

            var model = _repository.GetDbSet().AsNoTracking()
                        .FirstOrDefault(s => s.Area == DyeingPrintingArea.SHIPPING && s.Date.Date == viewModel.Date.Date & s.Shift == viewModel.Shift && s.ShippingType == viewModel.ShippingType);

            if (model == null)
            {
                int    totalCurrentYearData = _repository.ReadAllIgnoreQueryFilter().Count(s => s.Area == DyeingPrintingArea.SHIPPING && s.CreatedUtc.Year == viewModel.Date.Year);
                string bonNo = GenerateBonNo(totalCurrentYearData + 1, viewModel.Date, viewModel.Area);
                model = new DyeingPrintingAreaInputModel(viewModel.Date, viewModel.Area, viewModel.Shift, bonNo, viewModel.Group, viewModel.ShippingType, viewModel.ShippingProductionOrders.Select(s =>
                                                                                                                                                                                                    new DyeingPrintingAreaInputProductionOrderModel(viewModel.Area, s.DeliveryOrder.Id, s.DeliveryOrder.No, s.ProductionOrder.Id, s.ProductionOrder.No, s.ProductionOrder.Type,
                                                                                                                                                                                                                                                    s.ProductionOrder.OrderQuantity, s.Buyer, s.Construction, s.PackingType, s.Color, s.Motif, s.Grade, s.InputQtyPacking, s.Packing, s.InputQuantity, s.UomUnit, false, s.InputQuantity, s.Unit,
                                                                                                                                                                                                                                                    s.BuyerId, s.Id, s.Material.Id, s.Material.Name, s.MaterialConstruction.Id, s.MaterialConstruction.Name, s.MaterialWidth, s.CartNo, s.Remark, s.ProcessType.Id, s.ProcessType.Name,
                                                                                                                                                                                                                                                    s.YarnMaterial.Id, s.YarnMaterial.Name, s.ProductSKUId, s.FabricSKUId, s.ProductSKUCode, s.HasPrintingProductSKU, s.ProductPackingId, s.FabricPackingId,
                                                                                                                                                                                                                                                    s.ProductPackingCode, s.HasPrintingProductPacking, s.PackingLength, s.InputQuantity, s.InputQtyPacking, s.DeliveryOrderRetur.Id, s.DeliveryOrderRetur.No, s.FinishWidth, viewModel.Date)).ToList());


                result = await _repository.InsertAsync(model);

                //result += await _outputRepository.UpdateFromInputAsync(viewModel.OutputId, true);
                if (viewModel.ShippingType == DyeingPrintingArea.ZONAGUDANG)
                {
                    result += await _outputSPPRepository.UpdateFromInputAsync(viewModel.ShippingProductionOrders.Select(s => s.Id).ToList(), true, DyeingPrintingArea.TERIMA);
                }

                foreach (var item in model.DyeingPrintingAreaInputProductionOrders)
                {
                    var itemVM = viewModel.ShippingProductionOrders.FirstOrDefault(s => s.Id == item.DyeingPrintingAreaOutputProductionOrderId);
                    if (viewModel.ShippingType == DyeingPrintingArea.ZONAGUDANG)
                    {
                        result += await _productionOrderRepository.UpdateFromNextAreaInputAsync(itemVM.DyeingPrintingAreaInputProductionOrderId, item.InputQuantity, item.InputPackagingQty);
                    }

                    var movementModel = new DyeingPrintingAreaMovementModel(viewModel.Date, viewModel.Area, DyeingPrintingArea.IN, model.Id, model.BonNo, item.ProductionOrderId, item.ProductionOrderNo,
                                                                            item.CartNo, item.Buyer, item.Construction, item.Unit, item.Color, item.Motif, item.UomUnit, item.InputQuantity, item.Id, item.ProductionOrderType, item.Grade,
                                                                            null, item.PackagingType, item.InputPackagingQty, item.PackagingUnit, item.PackagingLength);

                    result += await _movementRepository.InsertAsync(movementModel);
                }
            }
            else
            {
                foreach (var item in viewModel.ShippingProductionOrders)
                {
                    var modelItem = new DyeingPrintingAreaInputProductionOrderModel(viewModel.Area, item.DeliveryOrder.Id, item.DeliveryOrder.No, item.ProductionOrder.Id,
                                                                                    item.ProductionOrder.No, item.ProductionOrder.Type, item.ProductionOrder.OrderQuantity, item.Buyer, item.Construction, item.PackingType, item.Color, item.Motif,
                                                                                    item.Grade, item.InputQtyPacking, item.Packing, item.InputQuantity, item.UomUnit, false, item.InputQuantity, item.Unit, item.BuyerId, item.Id,
                                                                                    item.Material.Id, item.Material.Name, item.MaterialConstruction.Id, item.MaterialConstruction.Name, item.MaterialWidth, item.CartNo, item.Remark,
                                                                                    item.ProcessType.Id, item.ProcessType.Name, item.YarnMaterial.Id, item.YarnMaterial.Name, item.ProductSKUId, item.FabricSKUId, item.ProductSKUCode,
                                                                                    item.HasPrintingProductSKU, item.ProductPackingId, item.FabricPackingId, item.ProductPackingCode, item.HasPrintingProductPacking, item.PackingLength, item.InputQuantity,
                                                                                    item.InputQtyPacking, item.DeliveryOrderRetur.Id, item.DeliveryOrderRetur.No, item.FinishWidth, viewModel.Date);

                    modelItem.DyeingPrintingAreaInputId = model.Id;

                    result += await _productionOrderRepository.InsertAsync(modelItem);

                    if (viewModel.ShippingType == DyeingPrintingArea.ZONAGUDANG)
                    {
                        result += await _productionOrderRepository.UpdateFromNextAreaInputAsync(item.DyeingPrintingAreaInputProductionOrderId, item.InputQuantity, item.InputQtyPacking);
                    }

                    var movementModel = new DyeingPrintingAreaMovementModel(viewModel.Date, viewModel.Area, DyeingPrintingArea.IN, model.Id, model.BonNo, item.ProductionOrder.Id, item.ProductionOrder.No,
                                                                            item.CartNo, item.Buyer, item.Construction, item.Unit, item.Color, item.Motif, item.UomUnit, item.InputQuantity, modelItem.Id, item.ProductionOrder.Type,
                                                                            item.Grade, null, item.PackingType, item.InputQtyPacking, item.Packing, item.PackingLength);

                    result += await _movementRepository.InsertAsync(movementModel);
                }
                if (viewModel.ShippingType == DyeingPrintingArea.ZONAGUDANG)
                {
                    result += await _outputSPPRepository.UpdateFromInputAsync(viewModel.ShippingProductionOrders.Select(s => s.Id).ToList(), true, DyeingPrintingArea.TERIMA);
                }
            }



            return(result);
        }
コード例 #21
0
        private InputInspectionMaterialViewModel MapToViewModel(DyeingPrintingAreaInputModel model)
        {
            var vm = new InputInspectionMaterialViewModel()
            {
                Active            = model.Active,
                Id                = model.Id,
                Area              = model.Area,
                Group             = model.Group,
                BonNo             = model.BonNo,
                CreatedAgent      = model.CreatedAgent,
                CreatedBy         = model.CreatedBy,
                CreatedUtc        = model.CreatedUtc,
                Date              = model.Date,
                DeletedAgent      = model.DeletedAgent,
                DeletedBy         = model.DeletedBy,
                DeletedUtc        = model.DeletedUtc,
                IsDeleted         = model.IsDeleted,
                LastModifiedAgent = model.LastModifiedAgent,
                LastModifiedBy    = model.LastModifiedBy,
                LastModifiedUtc   = model.LastModifiedUtc,
                Shift             = model.Shift,
                InspectionMaterialProductionOrders = model.DyeingPrintingAreaInputProductionOrders.Select(s => new InputInspectionMaterialProductionOrderViewModel()
                {
                    Active          = s.Active,
                    LastModifiedUtc = s.LastModifiedUtc,
                    Balance         = s.Balance,
                    Buyer           = s.Buyer,
                    BuyerId         = s.BuyerId,
                    BalanceRemains  = s.BalanceRemains,
                    CartNo          = s.CartNo,
                    Color           = s.Color,
                    Construction    = s.Construction,
                    CreatedAgent    = s.CreatedAgent,
                    CreatedBy       = s.CreatedBy,
                    CreatedUtc      = s.CreatedUtc,
                    DeletedAgent    = s.DeletedAgent,
                    DeletedBy       = s.DeletedBy,
                    DeletedUtc      = s.DeletedUtc,
                    Grade           = s.Grade,
                    InitLength      = s.InitLength,
                    InputQuantity   = s.InputQuantity,
                    MaterialWidth   = s.MaterialWidth,
                    MaterialOrigin  = s.MaterialOrigin,
                    FinishWidth     = s.FinishWidth,
                    YarnMaterial    = new CommonViewModelObjectProperties.YarnMaterial()
                    {
                        Id   = s.YarnMaterialId,
                        Name = s.YarnMaterialName
                    },
                    ProcessType = new CommonViewModelObjectProperties.ProcessType()
                    {
                        Id   = s.ProcessTypeId,
                        Name = s.ProcessTypeName
                    },
                    Material = new Material()
                    {
                        Id   = s.MaterialId,
                        Name = s.MaterialName
                    },
                    MaterialConstruction = new MaterialConstruction()
                    {
                        Name = s.MaterialConstructionName,
                        Id   = s.MaterialConstructionId
                    },
                    IsChecked          = s.IsChecked,
                    PackingInstruction = s.PackingInstruction,
                    HasOutputDocument  = s.HasOutputDocument,
                    Id                = s.Id,
                    IsDeleted         = s.IsDeleted,
                    LastModifiedAgent = s.LastModifiedAgent,
                    LastModifiedBy    = s.LastModifiedBy,
                    Motif             = s.Motif,
                    ProductionOrder   = new ProductionOrder()
                    {
                        Id            = s.ProductionOrderId,
                        No            = s.ProductionOrderNo,
                        OrderQuantity = s.ProductionOrderOrderQuantity,
                        Type          = s.ProductionOrderType
                    },
                    Unit    = s.Unit,
                    UomUnit = s.UomUnit
                }).ToList()
            };


            return(vm);
        }