public async Task <int> CreateAsync(FPReturnInvToPurchasing model)
        {
            int Created = 0;

            using (var transaction = DbContext.Database.BeginTransaction())
            {
                try
                {
                    IFpRegradingResultDocsService fpRegradingResultDocsService = ServiceProvider.GetService <IFpRegradingResultDocsService>();
                    foreach (FPReturnInvToPurchasingDetail detail in model.FPReturnInvToPurchasingDetails)
                    {
                        fpRegradingResultDocsService.UpdateIsReturnedToPurchasing(detail.FPRegradingResultDocsId, true);
                        detail.FlagForCreate(IdentityService.Username, UserAgent);
                        detail.FlagForUpdate(IdentityService.Username, UserAgent);
                    }

                    model = await this.NoGenerator(model);

                    DbSet.Add(model);
                    Created = await DbContext.SaveChangesAsync();
                    await CreateInventoryDocumentAsync(model, "OUT");

                    transaction.Commit();
                }
                catch (Exception e)
                {
                    transaction.Rollback();
                    throw new Exception("Insert Error : " + e.Message);
                }
            }

            return(Created);
        }
        public async Task <int> DeleteAsync(int id)
        {
            int Count = 0;


            using (var Transaction = this.DbContext.Database.BeginTransaction())
            {
                try
                {
                    IFpRegradingResultDocsService fpRegradingResultDocsService = ServiceProvider.GetService <IFpRegradingResultDocsService>();
                    FPReturnInvToPurchasing       fpReturnInvToPurchasing      = await ReadByIdAsync(id);

                    fpReturnInvToPurchasing.FlagForDelete(IdentityService.Username, UserAgent);
                    foreach (var item in fpReturnInvToPurchasing.FPReturnInvToPurchasingDetails)
                    {
                        fpRegradingResultDocsService.UpdateIsReturnedToPurchasing(item.FPRegradingResultDocsId, false);
                        item.FlagForDelete(IdentityService.Username, UserAgent);
                    }
                    Count = await DbContext.SaveChangesAsync();


                    await CreateInventoryDocumentAsync(fpReturnInvToPurchasing, "IN");

                    Transaction.Commit();
                }
                catch (Exception e)
                {
                    Transaction.Rollback();
                    throw new Exception("Delete Error : " + e.Message);
                }
            }

            return(Count);
        }
        public async Task <FPReturnInvToPurchasing> NoGenerator(FPReturnInvToPurchasing 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");

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

            return(Model);
        }
Example #4
0
        public FPReturnInvToPurchasing GetNewData()
        {
            FPReturnInvToPurchasing TestData = new FPReturnInvToPurchasing
            {
                UnitName     = "unit",
                SupplierId   = "1",
                SupplierName = "name",
                SupplierCode = "code",
                FPReturnInvToPurchasingDetails = new List <FPReturnInvToPurchasingDetail>()
                {
                    new FPReturnInvToPurchasingDetail()
                    {
                        FPRegradingResultDocsId   = 1,
                        FPRegradingResultDocsCode = "code",
                        ProductId       = "1",
                        ProductCode     = "coode",
                        ProductName     = "name",
                        Quantity        = 1,
                        NecessaryLength = 1,
                        Length          = 1,
                        Description     = ""
                    }
                }
            };

            return(TestData);
        }
Example #5
0
        public async Task <FPReturnInvToPurchasing> GetTestData()
        {
            FpRegradingResultDataUtil.FpRegradingResultDataUtil fprsDataUtil = new FpRegradingResultDataUtil.FpRegradingResultDataUtil(FPRService);
            var regradDocs = await fprsDataUtil.GetTestData();

            FPReturnInvToPurchasing Data = GetNewData();

            foreach (var item in Data.FPReturnInvToPurchasingDetails)
            {
                item.FPRegradingResultDocsId   = regradDocs.Id;
                item.FPRegradingResultDocsCode = regradDocs.Code;
            }
            await this.Service.CreateAsync(Data);

            return(Data);
        }
        public FPReturnInvToPurchasingViewModel MapToViewModel(FPReturnInvToPurchasing model)
        {
            FPReturnInvToPurchasingViewModel viewModel = new FPReturnInvToPurchasingViewModel();

            PropertyCopier <FPReturnInvToPurchasing, FPReturnInvToPurchasingViewModel> .Copy(model, viewModel);

            #region Unit

            viewModel.Unit      = new UnitViewModel();
            viewModel.Unit.Name = model.UnitName;

            #endregion Unit

            #region Supplier

            viewModel.Supplier      = new SupplierViewModel();
            viewModel.Supplier._id  = model.SupplierId;
            viewModel.Supplier.code = model.SupplierCode;
            viewModel.Supplier.name = model.SupplierName;

            #endregion Supplier

            viewModel.FPReturnInvToPurchasingDetails = new List <FPReturnInvToPurchasingDetailViewModel>();
            foreach (FPReturnInvToPurchasingDetail detail in model.FPReturnInvToPurchasingDetails)
            {
                FPReturnInvToPurchasingDetailViewModel detailVM = new FPReturnInvToPurchasingDetailViewModel();
                PropertyCopier <FPReturnInvToPurchasingDetail, FPReturnInvToPurchasingDetailViewModel> .Copy(detail, detailVM);

                #region Product

                detailVM.Product      = new ProductViewModel();
                detailVM.Product.Id   = detail.ProductId;
                detailVM.Product.Code = detail.ProductCode;
                detailVM.Product.Name = detail.ProductName;

                #endregion Product
                viewModel.FPReturnInvToPurchasingDetails.Add(detailVM);
            }
            return(viewModel);
        }
        public FPReturnInvToPurchasing MapToModel(FPReturnInvToPurchasingViewModel viewModel)
        {
            FPReturnInvToPurchasing model = new FPReturnInvToPurchasing();

            PropertyCopier <FPReturnInvToPurchasingViewModel, FPReturnInvToPurchasing> .Copy(viewModel, model);

            #region Unit

            model.UnitName = viewModel.Unit.Name;

            #endregion Unit

            #region Supplier

            model.SupplierId   = viewModel.Supplier._id;
            model.SupplierCode = viewModel.Supplier.code;
            model.SupplierName = viewModel.Supplier.name;

            #endregion Supplier

            model.FPReturnInvToPurchasingDetails = new List <FPReturnInvToPurchasingDetail>();
            foreach (FPReturnInvToPurchasingDetailViewModel detailVM in viewModel.FPReturnInvToPurchasingDetails)
            {
                FPReturnInvToPurchasingDetail detail = new FPReturnInvToPurchasingDetail();
                PropertyCopier <FPReturnInvToPurchasingDetailViewModel, FPReturnInvToPurchasingDetail> .Copy(detailVM, detail);

                #region Product

                detail.ProductId   = detailVM.Product.Id;
                detail.ProductCode = detailVM.Product.Code;
                detail.ProductName = detailVM.Product.Name;

                #endregion Product

                model.FPReturnInvToPurchasingDetails.Add(detail);
            }

            return(model);
        }
        public async Task <int> CreateInventoryDocumentAsync(FPReturnInvToPurchasing model, string Type)
        {
            string storageURI = "master/storages";
            string uomURI     = "master/uoms";

            IHttpService httpClient = (IHttpService)this.ServiceProvider.GetService(typeof(IHttpService));

            #region 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];

            #endregion UOM

            #region 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];

            #endregion Storage

            #region Inventory Document

            List <InventoryDocumentItem> inventoryDocumentItems = new List <InventoryDocumentItem>();

            foreach (FPReturnInvToPurchasingDetail detail in model.FPReturnInvToPurchasingDetails)
            {
                InventoryDocumentItem inventoryDocumentItem = new InventoryDocumentItem
                {
                    ProductId   = int.Parse(detail.ProductId),
                    ProductCode = detail.ProductCode,
                    ProductName = detail.ProductName,
                    Quantity    = detail.Length,
                    UomId       = int.Parse(uom["Id"].ToString()),
                    UomUnit     = uom["Unit"].ToString()
                };

                inventoryDocumentItems.Add(inventoryDocumentItem);
            }

            InventoryDocument inventoryDocument = new InventoryDocument
            {
                Date          = DateTimeOffset.UtcNow,
                ReferenceNo   = model.No,
                ReferenceType = "Bon Retur Barang - Pembelian",
                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));

            #endregion Inventory Document
        }
        public async Task <int> UpdateAsync(int id, FPReturnInvToPurchasing 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.SupplierCode = model.SupplierCode;
                    dbModel.SupplierName = model.SupplierName;
                    dbModel.SupplierId   = model.SupplierId;
                    dbModel.UnitName     = model.UnitName;

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

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

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

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

                        item.Length      = selectedItem.Length;
                        item.ProductCode = selectedItem.ProductCode;
                        item.ProductId   = selectedItem.ProductId;
                        item.ProductName = selectedItem.ProductName;
                        item.Quantity    = selectedItem.Quantity;
                        item.Description = selectedItem.Description;
                        item.FPRegradingResultDocsCode = selectedItem.FPRegradingResultDocsCode;
                        item.FPRegradingResultDocsId   = selectedItem.FPRegradingResultDocsId;
                        item.NecessaryLength           = selectedItem.NecessaryLength;

                        item.FlagForUpdate(IdentityService.Username, UserAgent);
                    }

                    foreach (var item in addedItems)
                    {
                        item.FPReturnInvToPurchasingId = 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);
        }