예제 #1
0
        public async Task <Models.FpRegradingResultDocs> CustomCodeGenerator(Models.FpRegradingResultDocs Model)
        {
            var unit     = string.Equals(Model.UnitName.ToUpper(), "PRINTING") ? "PR" : "FS";
            var lastData = await this.DbSet.Where(w => w.UnitName == Model.UnitName).OrderByDescending(o => o._CreatedUtc).FirstOrDefaultAsync();

            DateTime Now  = DateTime.Now;
            string   Year = Now.ToString("yy");

            //string Month = Now.ToString("MM");

            if (lastData == null)
            {
                Model.AutoIncrementNumber = 1;
                string Number = Model.AutoIncrementNumber.ToString().PadLeft(4, '0');
                Model.Code = $"KB{unit}{Year}{Number}";
            }
            else
            {
                if (lastData._CreatedUtc.Year < Now.Year)
                {
                    Model.AutoIncrementNumber = 1;
                    string Number = Model.AutoIncrementNumber.ToString().PadLeft(4, '0');
                    Model.Code = $"KB{unit}{Year}{Number}";
                }
                else
                {
                    Model.AutoIncrementNumber = lastData.AutoIncrementNumber + 1;
                    string Number = Model.AutoIncrementNumber.ToString().PadLeft(4, '0');
                    Model.Code = $"KB{unit}{Year}{Number}";
                }
            }

            return(Model);
        }
예제 #2
0
        public async Task <int> CreateInventoryDocumentAsync(Models.FpRegradingResultDocs Model, string Type)
        {
            string       storageURI = "master/storages";
            string       uomURI     = "master/uoms";
            IHttpService httpClient = (IHttpService)this.ServiceProvider.GetService(typeof(IHttpService));

            /* Get UOM */
            Dictionary <string, object> filterUOM = new Dictionary <string, object> {
                { "unit", "MTR" }
            };
            var responseUOM = httpClient.GetAsync($@"{APIEndpoint.Core}{uomURI}?filter=" + JsonConvert.SerializeObject(filterUOM)).Result.Content.ReadAsStringAsync();
            Dictionary <string, object> resultUOM = JsonConvert.DeserializeObject <Dictionary <string, object> >(responseUOM.Result);
            var jsonUOM = resultUOM.Single(p => p.Key.Equals("data")).Value;
            Dictionary <string, object> uom = JsonConvert.DeserializeObject <List <Dictionary <string, object> > >(jsonUOM.ToString())[0];

            /* Get Storage */
            var storageName = Model.UnitName.Equals("PRINTING") ? "Gudang Greige Printing" : "Gudang Greige Finishing";
            Dictionary <string, object> filterStorage = new Dictionary <string, object> {
                { "name", storageName }
            };
            var responseStorage = httpClient.GetAsync($@"{APIEndpoint.Core}{storageURI}?filter=" + JsonConvert.SerializeObject(filterStorage)).Result.Content.ReadAsStringAsync();
            Dictionary <string, object> resultStorage = JsonConvert.DeserializeObject <Dictionary <string, object> >(responseStorage.Result);
            var jsonStorage = resultStorage.Single(p => p.Key.Equals("data")).Value;
            Dictionary <string, object> storage = JsonConvert.DeserializeObject <List <Dictionary <string, object> > >(jsonStorage.ToString())[0];

            /* Create Inventory Document */
            List <InventoryDocumentItem> inventoryDocumentItems = new List <InventoryDocumentItem>();
            InventoryDocumentItem        inventoryDocumentItem  = new InventoryDocumentItem();
            double TotalLength = 0;

            foreach (FpRegradingResultDocsDetails o in Model.Details)
            {
                TotalLength += o.Length;
            }

            inventoryDocumentItem.ProductId   = int.Parse(Model.ProductId);
            inventoryDocumentItem.ProductCode = Model.ProductCode;
            inventoryDocumentItem.ProductName = Model.ProductName;
            inventoryDocumentItem.Quantity    = TotalLength;
            inventoryDocumentItem.UomId       = int.Parse(uom["Id"].ToString());
            inventoryDocumentItem.UomUnit     = uom["Unit"].ToString();

            inventoryDocumentItems.Add(inventoryDocumentItem);

            InventoryDocument inventoryDocument = new InventoryDocument
            {
                Date          = DateTimeOffset.UtcNow,
                ReferenceNo   = Model.Code,
                ReferenceType = "Bon Hasil Re-grading",
                Type          = Type,
                StorageId     = int.Parse(storage["_id"].ToString()),
                StorageCode   = storage["code"].ToString(),
                StorageName   = storage["name"].ToString(),
                Items         = inventoryDocumentItems
            };

            var inventoryDocumentFacade = ServiceProvider.GetService <IInventoryDocumentService>();

            return(await inventoryDocumentFacade.Create(inventoryDocument));
        }
예제 #3
0
        public async Task <int> CreateAsync(Models.FpRegradingResultDocs model)
        {
            int Created = 0;

            using (var transaction = this.DbContext.Database.BeginTransaction())
            {
                try
                {
                    model = await this.CustomCodeGenerator(model);

                    model.FlagForCreate(IdentityService.Username, UserAgent);
                    model.FlagForUpdate(IdentityService.Username, UserAgent);
                    foreach (var item in model.Details)
                    {
                        item.FlagForCreate(IdentityService.Username, UserAgent);
                        item.FlagForUpdate(IdentityService.Username, UserAgent);
                    }

                    DbSet.Add(model);

                    Created = await DbContext.SaveChangesAsync();

                    await CreateInventoryDocumentAsync(model, "IN");

                    transaction.Commit();
                }
                catch (Exception e)
                {
                    transaction.Rollback();
                    throw new Exception(e.Message);
                }
            }
            return(Created);
        }
예제 #4
0
        public Models.FpRegradingResultDocs MapToModel(FpRegradingResultDocsViewModel viewModel)
        {
            Models.FpRegradingResultDocs model = new Models.FpRegradingResultDocs();
            PropertyCopier <FpRegradingResultDocsViewModel, Models.FpRegradingResultDocs> .Copy(viewModel, model);

            model.NoBon        = viewModel.Bon.no;
            model.NoBonId      = viewModel.Bon._id;
            model.UnitName     = viewModel.Bon.unitName;
            model.SupplierId   = viewModel.Supplier._id;
            model.SupplierName = viewModel.Supplier.name;
            model.SupplierCode = viewModel.Supplier.code;
            model.ProductId    = viewModel.Product.Id;
            model.ProductCode  = viewModel.Product.Code;
            model.ProductName  = viewModel.Product.Name;
            model.Shift        = viewModel.Shift;
            model.MachineName  = viewModel.Machine.name;
            model.MachineId    = viewModel.Machine._id;
            model.MachineCode  = viewModel.Machine.code;
            model.Operator     = viewModel.Operator;
            model.Remark       = viewModel.Remark;

            model.Details = new List <FpRegradingResultDocsDetails>();

            foreach (FpRegradingResultDetailsDocsViewModel data in viewModel.Details)
            {
                FpRegradingResultDocsDetails detail = new FpRegradingResultDocsDetails
                {
                    //detail.SupplierId = viewModel.Supplier._id;
                    ProductId   = viewModel.Product.Id,
                    ProductCode = viewModel.Product.Code,
                    ProductName = viewModel.Product.Name,
                    Quantity    = data.Quantity,
                    Length      = data.Length,
                    Remark      = data.Remark,
                    Grade       = data.Grade,
                    //detail.GradeBefore = data.GradeBefore;
                    Retur = data.Retur,
                    Id    = data.Id
                };
                //detail.LengthBeforeReGrade = data.LengthBeforeReGrade;
                model.Details.Add(detail);
            }

            return(model);
        }
예제 #5
0
        public async Task <int> DeleteAsync(int id)
        {
            int Count = 0;

            using (var Transaction = this.DbContext.Database.BeginTransaction())
            {
                try
                {
                    Models.FpRegradingResultDocs fpReturProInvDocs = await ReadByIdAsync(id);

                    fpReturProInvDocs.FlagForDelete(IdentityService.Username, UserAgent);
                    foreach (var item in fpReturProInvDocs.Details)
                    {
                        item.FlagForDelete(IdentityService.Username, UserAgent);
                    }
                    Count = await DbContext.SaveChangesAsync();

                    //FpRegradingResultDetailsDocsService fpReturProInvDocsDetailsService = ServiceProvider.GetService<FpRegradingResultDetailsDocsService>();
                    //fpReturProInvDocsDetailsService.Username = this.Username;


                    //HashSet<int> fpReturProInvDocsDetails = new HashSet<int>(this.DbContext.fpRegradingResultDocsDetails.Where(p => p.FpReturProInvDocsId.Equals(Id)).Select(p => p.Id));

                    //foreach (int detail in fpReturProInvDocsDetails)
                    //{
                    //    await fpReturProInvDocsDetailsService.DeleteAsync(detail);
                    //}

                    await CreateInventoryDocumentAsync(fpReturProInvDocs, "OUT");

                    Transaction.Commit();
                }
                catch (Exception e)
                {
                    Transaction.Rollback();
                    throw e;
                }
            }

            return(Count);
        }
예제 #6
0
        public async Task <int> UpdateAsync(int id, Models.FpRegradingResultDocs model)
        {
            int updated = 0;

            using (var transaction = DbContext.Database.BeginTransaction())
            {
                try
                {
                    if (id != model.Id)
                    {
                        throw new Exception("data not found");
                    }

                    var dbModel = await ReadByIdAsync(id);

                    dbModel.Date     = model.Date;
                    dbModel.IsReturn = model.IsReturn;
                    dbModel.IsReturnedToPurchasing = model.IsReturnedToPurchasing;
                    dbModel.MachineCode            = model.MachineCode;
                    dbModel.MachineId     = model.MachineId;
                    dbModel.MachineName   = model.MachineName;
                    dbModel.NoBon         = model.NoBon;
                    dbModel.NoBonId       = model.NoBonId;
                    dbModel.Operator      = model.Operator;
                    dbModel.OriginalGrade = model.OriginalGrade;
                    dbModel.ProductCode   = model.ProductCode;
                    dbModel.ProductId     = model.ProductId;
                    dbModel.ProductName   = model.ProductName;
                    dbModel.Remark        = model.Remark;
                    dbModel.Shift         = model.Shift;
                    dbModel.SupplierCode  = model.SupplierCode;
                    dbModel.SupplierName  = model.SupplierName;
                    dbModel.SupplierId    = model.SupplierId;
                    dbModel.TotalLength   = model.TotalLength;
                    dbModel.UnitName      = model.UnitName;

                    dbModel.FlagForUpdate(IdentityService.Username, UserAgent);
                    //DbSet.Update(dbModel);

                    var deletedItems = dbModel.Details.Where(x => !model.Details.Any(y => x.Id == y.Id));
                    var updatedItems = dbModel.Details.Where(x => model.Details.Any(y => x.Id == y.Id));
                    var addedItems   = model.Details.Where(x => !dbModel.Details.Any(y => y.Id == x.Id));

                    foreach (var item in deletedItems)
                    {
                        item.FlagForDelete(IdentityService.Username, UserAgent);
                    }

                    foreach (var item in updatedItems)
                    {
                        var selectedItem = model.Details.FirstOrDefault(x => x.Id == item.Id);

                        item.Grade       = selectedItem.Grade;
                        item.Length      = selectedItem.Length;
                        item.ProductCode = selectedItem.ProductCode;
                        item.ProductId   = selectedItem.ProductId;
                        item.ProductName = selectedItem.ProductName;
                        item.Quantity    = selectedItem.Quantity;
                        item.Remark      = selectedItem.Remark;
                        item.Retur       = selectedItem.Retur;
                        item.FlagForUpdate(IdentityService.Username, UserAgent);
                    }

                    foreach (var item in addedItems)
                    {
                        item.FpReturProInvDocsId = id;
                        item.FlagForCreate(IdentityService.Username, UserAgent);
                        item.FlagForUpdate(IdentityService.Username, UserAgent);
                    }
                    updated = await DbContext.SaveChangesAsync();

                    transaction.Commit();
                }
                catch (Exception ex)
                {
                    transaction.Rollback();
                    throw ex;
                }
            }
            return(updated);
        }
예제 #7
0
        public FpRegradingResultDocsViewModel MapToViewModel(Models.FpRegradingResultDocs model)
        {
            FpRegradingResultDocsViewModel viewModel = new FpRegradingResultDocsViewModel();

            PropertyCopier <Models.FpRegradingResultDocs, FpRegradingResultDocsViewModel> .Copy(model, viewModel);

            viewModel.Details = new List <FpRegradingResultDetailsDocsViewModel>();
            viewModel.Bon     = new FpRegradingResultDocsViewModel.noBon
            {
                _id      = model.NoBonId,
                no       = model.NoBon,
                unitName = model.UnitName
            };

            viewModel.Supplier = new FpRegradingResultDocsViewModel.supplier
            {
                name = model.SupplierName,
                _id  = model.SupplierId,
                code = model.SupplierCode
            };
            viewModel._CreatedUtc = model._CreatedUtc;

            viewModel.Product = new FpRegradingResultDocsViewModel.product
            {
                Name = model.ProductName,
                Id   = model.ProductId,
                Code = model.SupplierCode
            };

            viewModel.Shift    = model.Shift;
            viewModel.Remark   = model.Remark;
            viewModel.Operator = model.Operator;

            viewModel.Machine = new FpRegradingResultDocsViewModel.machine
            {
                name = model.MachineName,
                code = model.MachineCode,
                _id  = model.MachineId
            };

            foreach (FpRegradingResultDocsDetails data in model.Details)
            {
                FpRegradingResultDetailsDocsViewModel detail = new FpRegradingResultDetailsDocsViewModel
                {
                    Product = new FpRegradingResultDetailsDocsViewModel.product()
                };
                detail.Product.Id     = data.ProductId;
                detail.Product.Name   = data.ProductName;
                detail.Product.Length = data.Length;
                //detail.Product.Quantity = data.Quantity;
                //detail.Quantity = data.Quantity;
                detail.Remark   = data.Remark;
                detail.Quantity = data.Quantity;
                detail.Length   = data.Length;
                //detail.GradeBefore = data.GradeBefore;
                detail.Grade = data.Grade;
                detail.Retur = data.Retur;
                detail.Id    = data.Id;
                //detail.LengthBeforeReGrade = data.LengthBeforeReGrade;
                viewModel.Details.Add(detail);
            }
            return(viewModel);
        }