Example #1
0
        private async Task <int> CreateStockOpname(StockOpnameWarehouseViewModel viewModel)
        {
            int result = 0;
            var model  = _stockOpnameRepository.GetDbSet().AsNoTracking().FirstOrDefault(s => s.Area == DyeingPrintingArea.GUDANGJADI &&
                                                                                         s.Date.Date == viewModel.Date.Date &&
                                                                                         s.Type == DyeingPrintingArea.STOCK_OPNAME);

            //viewModel.WarehousesProductionOrders = viewModel.WarehousesProductionOrders.Where(s => s.IsSave).ToList();
            viewModel.WarehousesProductionOrders = viewModel.WarehousesProductionOrders.ToList();
            if (model == null)
            {
                int totalCurrentYearData = _stockOpnameRepository.ReadAllIgnoreQueryFilter()
                                           .Count(s => s.Area == DyeingPrintingArea.GUDANGJADI &&
                                                  s.CreatedUtc.Year == viewModel.Date.Year && s.Type == DyeingPrintingArea.STOCK_OPNAME);

                string bonNo = GenerateBonNo(totalCurrentYearData + 1, viewModel.Date, viewModel.Area);

                model = new DyeingPrintingStockOpnameModel(viewModel.Area, bonNo, viewModel.Date, viewModel.Type,
                                                           viewModel.WarehousesProductionOrders.Select(s =>
                                                                                                       new DyeingPrintingStockOpnameProductionOrderModel(
                                                                                                           s.Balance,
                                                                                                           s.BuyerId,
                                                                                                           s.Buyer,
                                                                                                           s.Color,
                                                                                                           s.Construction,
                                                                                                           s.DocumentNo,
                                                                                                           s.Grade,
                                                                                                           s.MaterialConstruction.Id,
                                                                                                           s.MaterialConstruction.Name,
                                                                                                           s.Material.Id,
                                                                                                           s.Material.Name,
                                                                                                           s.MaterialWidth,
                                                                                                           s.Motif,
                                                                                                           s.PackingInstruction,
                                                                                                           s.PackagingQty,
                                                                                                           s.Quantity,
                                                                                                           s.PackagingType,
                                                                                                           s.PackagingUnit,
                                                                                                           s.ProductionOrder.Id,
                                                                                                           s.ProductionOrder.No,
                                                                                                           s.ProductionOrder.Type,
                                                                                                           s.ProductionOrder.OrderQuantity,
                                                                                                           s.ProcessType.Id,
                                                                                                           s.ProcessType.Name,
                                                                                                           s.YarnMaterial.Id,
                                                                                                           s.YarnMaterial.Name,
                                                                                                           s.Remark,
                                                                                                           s.Status,
                                                                                                           s.Unit,
                                                                                                           s.UomUnit
                                                                                                           )).ToList());


                result = await _stockOpnameRepository.InsertAsync(model);

                //viewModel.WarehousesProductionOrders = viewModel.WarehousesProductionOrders
            }
            else
            {
                foreach (var item in viewModel.WarehousesProductionOrders)
                {
                    var modelItem = new DyeingPrintingStockOpnameProductionOrderModel(
                        item.Balance,
                        item.BuyerId,
                        item.Buyer,
                        item.Color,
                        item.Construction,
                        item.DocumentNo,
                        item.Grade,
                        item.MaterialConstruction.Id,
                        item.MaterialConstruction.Name,
                        item.Material.Id,
                        item.Material.Name,
                        item.MaterialWidth,
                        item.Motif,
                        item.PackingInstruction,
                        item.PackagingQty,
                        item.Quantity,
                        item.PackagingType,
                        item.PackagingUnit,
                        item.ProductionOrder.Id,
                        item.ProductionOrder.No,
                        item.ProductionOrder.Type,
                        item.ProductionOrder.OrderQuantity,
                        item.ProcessType.Id,
                        item.ProcessType.Name,
                        item.YarnMaterial.Id,
                        item.YarnMaterial.Name,
                        item.Remark,
                        item.Status,
                        item.Unit,
                        item.UomUnit
                        );

                    modelItem.DyeingPrintingStockOpnameId = model.Id;

                    result += await _stockOpnameProductionOrderRepository.InsertAsync(modelItem);
                }
            }

            return(result);
        }