Exemplo n.º 1
0
        public async Task <MaterialDistributionNote> CustomCodeGenerator(MaterialDistributionNote model)
        {
            var type     = string.Equals(model.UnitName.ToUpper(), "PRINTING") ? "PR" : "FS";
            var lastData = await this._dbSet.Where(w => w.UnitCode == model.UnitCode).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 = $"P{type}{Year}{Number}";
            }
            else
            {
                if (lastData.CreatedUtc.Year < Now.Year)
                {
                    model.AutoIncrementNumber = 1;
                    string Number = model.AutoIncrementNumber.ToString().PadLeft(4, '0');
                    model.No = $"P{type}{Year}{Number}";
                }
                else
                {
                    model.AutoIncrementNumber = lastData.AutoIncrementNumber + 1;
                    string Number = model.AutoIncrementNumber.ToString().PadLeft(4, '0');
                    model.No = $"P{type}{Year}{Number}";
                }
            }

            return(model);
        }
Exemplo n.º 2
0
        public async Task <int> DeleteAsync(int id)
        {
            int count = 0;

            using (var trans = _inventoryDbContext.Database.BeginTransaction())
            {
                try
                {
                    MaterialDistributionNote materialDistributionNote = await ReadByIdAsync(id);

                    materialDistributionNote.FlagForDelete(_identityInterface.Username, UserAgent);
                    foreach (var item in materialDistributionNote.MaterialDistributionNoteItems)
                    {
                        item.FlagForDelete(_identityInterface.Username, UserAgent);

                        foreach (var detail in item.MaterialDistributionNoteDetails)
                        {
                            detail.FlagForDelete(_identityInterface.Username, UserAgent);
                        }
                    }

                    count = await _inventoryDbContext.SaveChangesAsync();

                    IMaterialRequestNoteRepository materialsRequestNoteService = _serviceProvider.GetService <IMaterialRequestNoteRepository>();

                    foreach (MaterialDistributionNoteItem materialDistributionNoteItem in materialDistributionNote.MaterialDistributionNoteItems)
                    {
                        MaterialsRequestNote materialsRequestNote = await materialsRequestNoteService.ReadByIdAsync(materialDistributionNoteItem.MaterialRequestNoteId);

                        materialsRequestNote.IsDistributed = true;

                        if (materialDistributionNote.Type.ToUpper().Equals("PRODUCTION"))
                        {
                            foreach (MaterialDistributionNoteDetail materialDistributionNoteDetail in materialDistributionNoteItem.MaterialDistributionNoteDetails)
                            {
                                materialsRequestNote.MaterialsRequestNoteItems
                                .Where(w => w.ProductionOrderId
                                       .Equals(materialDistributionNoteDetail.ProductionOrderId))
                                .Select(s => { s.DistributedLength -= materialDistributionNoteDetail.ReceivedLength; return(s); }).ToList();
                            }
                            materialsRequestNoteService.UpdateDistributedQuantity(materialsRequestNote.Id, materialsRequestNote);
                        }
                        await materialsRequestNoteService.UpdateAsync(materialsRequestNote.Id, materialsRequestNote);
                    }

                    await CreateInventoryDocument(materialDistributionNote, "IN");

                    trans.Commit();
                }
                catch (Exception ex)
                {
                    trans.Rollback();
                    throw ex;
                }
            }

            return(count);
        }
Exemplo n.º 3
0
        public MaterialDistributionNote MapToModel(MaterialDistributionNoteViewModel viewModel)
        {
            MaterialDistributionNote model = new MaterialDistributionNote();

            PropertyCopier <MaterialDistributionNoteViewModel, MaterialDistributionNote> .Copy(viewModel, model);

            model.UnitId   = viewModel.Unit.Id.ToString();
            model.UnitCode = viewModel.Unit.Code;
            model.UnitName = viewModel.Unit.Name;

            model.MaterialDistributionNoteItems = new List <MaterialDistributionNoteItem>();
            foreach (MaterialDistributionNoteItemViewModel mdni in viewModel.MaterialDistributionNoteItems)
            {
                MaterialDistributionNoteItem materialDistributionNoteItem = new MaterialDistributionNoteItem();
                PropertyCopier <MaterialDistributionNoteItemViewModel, MaterialDistributionNoteItem> .Copy(mdni, materialDistributionNoteItem);

                materialDistributionNoteItem.MaterialDistributionNoteDetails = new List <MaterialDistributionNoteDetail>();
                foreach (MaterialDistributionNoteDetailViewModel mdnd in mdni.MaterialDistributionNoteDetails)
                {
                    MaterialDistributionNoteDetail materialDistributionNoteDetail = new MaterialDistributionNoteDetail();
                    PropertyCopier <MaterialDistributionNoteDetailViewModel, MaterialDistributionNoteDetail> .Copy(mdnd, materialDistributionNoteDetail);

                    materialDistributionNoteDetail.ProductionOrderId          = mdnd.ProductionOrder.Id;
                    materialDistributionNoteDetail.ProductionOrderNo          = mdnd.ProductionOrder.OrderNo;
                    materialDistributionNoteDetail.ProductionOrderIsCompleted = mdnd.ProductionOrder.IsCompleted;
                    materialDistributionNoteDetail.DistributedLength          = mdnd.DistributedLength.GetValueOrDefault();

                    materialDistributionNoteDetail.ProductId   = mdnd.Product.Id;
                    materialDistributionNoteDetail.ProductCode = mdnd.Product.Code;
                    materialDistributionNoteDetail.ProductName = mdnd.Product.Name;

                    materialDistributionNoteDetail.SupplierId   = mdnd.Supplier.Id;
                    materialDistributionNoteDetail.SupplierCode = mdnd.Supplier.Code;
                    materialDistributionNoteDetail.SupplierName = mdnd.Supplier.Name;

                    materialDistributionNoteItem.MaterialDistributionNoteDetails.Add(materialDistributionNoteDetail);
                }

                model.MaterialDistributionNoteItems.Add(materialDistributionNoteItem);
            }

            return(model);
        }
        public MaterialDistributionNote GetNewData()
        {
            MaterialDistributionNote TestData = new MaterialDistributionNote
            {
                UnitId        = "1",
                UnitCode      = "Code",
                UnitName      = "Name",
                Type          = "PRODUKSI",
                IsApproved    = false,
                IsDisposition = false,
                MaterialDistributionNoteItems = new List <MaterialDistributionNoteItem> {
                    new MaterialDistributionNoteItem()
                    {
                        MaterialRequestNoteCode           = "Code",
                        MaterialRequestNoteCreatedDateUtc = DateTime.UtcNow,
                        MaterialDistributionNoteDetails   = new List <MaterialDistributionNoteDetail>()
                        {
                            new MaterialDistributionNoteDetail()
                            {
                                DistributedLength             = 1,
                                Grade                         = "a",
                                ProductCode                   = "Code",
                                ProductId                     = "1",
                                MaterialsRequestNoteItemId    = 1,
                                MaterialRequestNoteItemLength = 1,
                                ProductionOrderId             = "1",
                                ProductionOrderNo             = "No",
                                ProductName                   = "Name",
                                SupplierCode                  = "Code",
                                SupplierId                    = "1",
                                SupplierName                  = "Name",
                                ReceivedLength                = 1,
                                Quantity                      = 1
                            }
                        }
                    }
                }
            };

            return(TestData);
        }
        public async Task <MaterialDistributionNote> GetTestData()
        {
            MaterialRequestNoteSampleData materialRequestNoteDataUtil = new MaterialRequestNoteSampleData(_materialRequestNoteRepository);
            var mrn = await materialRequestNoteDataUtil.GetTestData();

            MaterialDistributionNote Data = GetNewData();

            foreach (var item in Data.MaterialDistributionNoteItems)
            {
                item.MaterialRequestNoteId             = mrn.Id;
                item.MaterialRequestNoteCreatedDateUtc = mrn.CreatedUtc;
                item.MaterialRequestNoteCode           = mrn.Code;
                foreach (var detail in item.MaterialDistributionNoteDetails)
                {
                    detail.MaterialsRequestNoteItemId = mrn.Id;
                }
            }
            await _repository.CreateAsync(Data);

            return(Data);
        }
Exemplo n.º 6
0
        public async Task <MaterialDistributionNote> GetTestData()
        {
            MaterialRequestNoteDataUtil.MaterialRequestNoteDataUtil materialRequestNoteDataUtil = new MaterialRequestNoteDataUtil.MaterialRequestNoteDataUtil(mrnService);
            var mrn = await materialRequestNoteDataUtil.GetTestData();

            MaterialDistributionNote Data = GetNewData();

            foreach (var item in Data.MaterialDistributionNoteItems)
            {
                item.MaterialRequestNoteId             = mrn.Id;
                item.MaterialRequestNoteCreatedDateUtc = mrn._CreatedUtc;
                item.MaterialRequestNoteCode           = mrn.Code;
                foreach (var detail in item.MaterialDistributionNoteDetails)
                {
                    detail.MaterialsRequestNoteItemId = mrn.Id;
                }
            }
            await this.Service.CreateAsync(Data);

            return(Data);
        }
Exemplo n.º 7
0
        public async Task <int> CreateInventoryDocument(MaterialDistributionNote model, string type)
        {
            string storageURI = "master/storages";
            string uomURI     = "master/uoms";

            IHttpServiceRepository httpClient = (IHttpServiceRepository)_serviceProvider.GetService(typeof(IHttpServiceRepository));
            /* 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") ? "Warehouse Here Printing" : "Warehouse Here 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>();
            List <MaterialDistributionNoteDetail> mdnds = new List <MaterialDistributionNoteDetail>();

            foreach (MaterialDistributionNoteItem mdni in model.MaterialDistributionNoteItems)
            {
                mdnds.AddRange(mdni.MaterialDistributionNoteDetails);
            }

            foreach (MaterialDistributionNoteDetail mdnd in mdnds)
            {
                InventoryDocumentItem inventoryDocumentItem = new InventoryDocumentItem
                {
                    ProductId     = int.Parse(mdnd.ProductId),
                    ProductCode   = mdnd.ProductCode,
                    ProductName   = mdnd.ProductName,
                    Quantity      = mdnd.ReceivedLength,
                    StockPlanning = model.Type != "RE-GRADING" ? (mdnd.DistributedLength == 0 ? mdnd.MaterialRequestNoteItemLength - mdnd.ReceivedLength : mdnd.ReceivedLength * -1) : mdnd.ReceivedLength * -1,
                    UomId         = int.Parse(Uom["Id"].ToString()),
                    UomUnit       = Uom["Unit"].ToString()
                };

                inventoryDocumentItems.Add(inventoryDocumentItem);
            }

            List <InventoryDocumentItem> list = inventoryDocumentItems
                                                .GroupBy(m => new { m.ProductId, m.ProductCode, m.ProductName })
                                                .Select(s => new InventoryDocumentItem
            {
                ProductId     = s.First().ProductId,
                ProductCode   = s.First().ProductCode,
                ProductName   = s.First().ProductName,
                Quantity      = s.Sum(d => d.Quantity),
                StockPlanning = s.Sum(d => d.StockPlanning),
                UomUnit       = s.First().UomUnit,
                UomId         = s.First().UomId
            }).ToList();

            InventoryDocument inventoryDocument = new InventoryDocument
            {
                Date          = DateTimeOffset.UtcNow,
                ReferenceNo   = model.No,
                ReferenceType = "Bon introduction to Here",
                Type          = type,
                StorageId     = int.Parse(storage["Id"].ToString()),
                StorageCode   = storage["Code"].ToString(),
                StorageName   = storage["Name"].ToString(),
                Items         = list
            };

            var inventoryDocumentFacade = _serviceProvider.GetService <IInventoryDocumentRepository>();

            return(await inventoryDocumentFacade.Create(inventoryDocument));
        }
Exemplo n.º 8
0
        public async Task <int> UpdateAsync(int id, MaterialDistributionNote model)
        {
            int updated = 0;

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

                    var dbModel = await ReadByIdAsync(id);

                    dbModel.IsApproved          = model.IsApproved;
                    dbModel.IsDisposition       = model.IsDisposition;
                    dbModel.AutoIncrementNumber = model.AutoIncrementNumber;
                    dbModel.No       = model.No;
                    dbModel.Type     = model.Type;
                    dbModel.UnitCode = model.UnitCode;
                    dbModel.UnitId   = model.UnitId;
                    dbModel.UnitName = model.UnitName;
                    dbModel.FlagForUpdate(_identityInterface.Username, UserAgent);

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

                    foreach (var item in deletedItems)
                    {
                        item.FlagForDelete(_identityInterface.Username, UserAgent);
                        foreach (var detail in item.MaterialDistributionNoteDetails)
                        {
                            detail.FlagForDelete(_identityInterface.Username, UserAgent);
                        }
                    }

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

                        item.MaterialRequestNoteCode           = selectedItem.MaterialRequestNoteCode;
                        item.MaterialRequestNoteCreatedDateUtc = selectedItem.MaterialRequestNoteCreatedDateUtc;
                        item.MaterialRequestNoteId             = selectedItem.MaterialRequestNoteId;
                        item.FlagForUpdate(_identityInterface.Username, UserAgent);

                        var deletedDetails = item.MaterialDistributionNoteDetails.Where(x => !selectedItem.MaterialDistributionNoteDetails.Any(y => x.Id == y.Id));
                        var updatedDetails = item.MaterialDistributionNoteDetails.Where(x => selectedItem.MaterialDistributionNoteDetails.Any(y => x.Id == y.Id));
                        var addedDetails   = selectedItem.MaterialDistributionNoteDetails.Where(x => !item.MaterialDistributionNoteDetails.Any(y => y.Id == x.Id));

                        foreach (var detail in deletedDetails)
                        {
                            item.FlagForDelete(_identityInterface.Username, UserAgent);
                        }

                        foreach (var detail in updatedDetails)
                        {
                            var selectedDetail = selectedItem.MaterialDistributionNoteDetails.FirstOrDefault(x => x.Id == detail.Id);

                            detail.DistributedLength             = selectedDetail.DistributedLength;
                            detail.Grade                         = selectedDetail.Grade;
                            detail.IsCompleted                   = selectedDetail.IsCompleted;
                            detail.IsDisposition                 = selectedDetail.IsDisposition;
                            detail.MaterialRequestNoteItemLength = selectedDetail.MaterialRequestNoteItemLength;
                            detail.MaterialsRequestNoteItemId    = selectedDetail.MaterialsRequestNoteItemId;
                            detail.ProductCode                   = selectedDetail.ProductCode;
                            detail.ProductId                     = selectedDetail.ProductId;
                            detail.ProductionOrderId             = selectedDetail.ProductionOrderId;
                            detail.ProductionOrderIsCompleted    = selectedDetail.ProductionOrderIsCompleted;
                            detail.ProductionOrderNo             = selectedDetail.ProductionOrderNo;
                            detail.ProductName                   = selectedDetail.ProductName;
                            detail.Quantity                      = selectedDetail.Quantity;
                            detail.ReceivedLength                = selectedDetail.ReceivedLength;
                            detail.SupplierCode                  = selectedDetail.SupplierCode;
                            detail.SupplierId                    = selectedDetail.SupplierId;
                            detail.SupplierName                  = selectedDetail.SupplierName;
                            detail.FlagForUpdate(_identityInterface.Username, UserAgent);
                        }

                        foreach (var detail in addedDetails)
                        {
                            detail.MaterialDistributionNoteItemId = id;
                            detail.FlagForCreate(_identityInterface.Username, UserAgent);
                            detail.FlagForUpdate(_identityInterface.Username, UserAgent);
                        }
                    }

                    foreach (var item in addedItems)
                    {
                        item.MaterialDistributionNoteId = id;
                        item.FlagForCreate(_identityInterface.Username, UserAgent);
                        item.FlagForUpdate(_identityInterface.Username, UserAgent);
                        foreach (var detail in item.MaterialDistributionNoteDetails)
                        {
                            detail.FlagForCreate(_identityInterface.Username, UserAgent);
                            detail.FlagForUpdate(_identityInterface.Username, UserAgent);
                        }
                    }
                    updated = await _inventoryDbContext.SaveChangesAsync();

                    transaction.Commit();
                }
                catch (Exception ex)
                {
                    transaction.Rollback();
                    throw ex;
                }
            }
            return(updated);
        }
Exemplo n.º 9
0
        public async Task <int> CreateAsync(MaterialDistributionNote model)
        {
            int created = 0;

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

                    model.FlagForCreate(_identityInterface.Username, UserAgent);
                    model.FlagForUpdate(_identityInterface.Username, UserAgent);
                    foreach (var item in model.MaterialDistributionNoteItems)
                    {
                        item.FlagForCreate(_identityInterface.Username, UserAgent);
                        item.FlagForUpdate(_identityInterface.Username, UserAgent);
                        foreach (var detail in item.MaterialDistributionNoteDetails)
                        {
                            detail.FlagForCreate(_identityInterface.Username, UserAgent);
                            detail.FlagForUpdate(_identityInterface.Username, UserAgent);
                        }
                    }

                    _dbSet.Add(model);

                    created = await _inventoryDbContext.SaveChangesAsync();

                    IMaterialRequestNoteRepository materialsRequestNoteService = _serviceProvider.GetService <IMaterialRequestNoteRepository>();

                    List <ViewModels.InventoryViewModel.InventorySummaryViewModel> data = new List <ViewModels.InventoryViewModel.InventorySummaryViewModel>();


                    foreach (MaterialDistributionNoteItem materialDistributionNoteItem in model.MaterialDistributionNoteItems)
                    {
                        MaterialsRequestNote materialsRequestNote = await materialsRequestNoteService.ReadByIdAsync(materialDistributionNoteItem.MaterialRequestNoteId);

                        materialsRequestNote.IsDistributed = true;

                        if (model.Type.ToUpper().Equals("PRODUCTION"))
                        {
                            foreach (MaterialDistributionNoteDetail materialDistributionNoteDetail in materialDistributionNoteItem.MaterialDistributionNoteDetails)
                            {
                                materialsRequestNote.MaterialsRequestNoteItems.Where(w => w.ProductionOrderId.Equals(materialDistributionNoteDetail.ProductionOrderId)).Select(s => { s.DistributedLength += materialDistributionNoteDetail.ReceivedLength; return(s); }).ToList();
                            }
                            materialsRequestNoteService.UpdateDistributedQuantity(materialsRequestNote.Id, materialsRequestNote);
                        }
                        await materialsRequestNoteService.UpdateAsync(materialsRequestNote.Id, materialsRequestNote);
                    }

                    _inventoryDbContext.SaveChanges();

                    await CreateInventoryDocument(model, "OUT");

                    transaction.Commit();
                }
                catch (Exception e)
                {
                    transaction.Rollback();
                    throw e;
                }
            }
            return(created);
        }
Exemplo n.º 10
0
        public MaterialDistributionNoteViewModel MapToViewModel(MaterialDistributionNote model)
        {
            MaterialDistributionNoteViewModel viewModel = new MaterialDistributionNoteViewModel();

            PropertyCopier <MaterialDistributionNote, MaterialDistributionNoteViewModel> .Copy(model, viewModel);

            CodeNameViewModel Unit = new CodeNameViewModel()
            {
                Id   = model.UnitId,
                Code = model.UnitCode,
                Name = model.UnitName
            };

            viewModel.Unit = Unit;

            viewModel.MaterialDistributionNoteItems = new List <MaterialDistributionNoteItemViewModel>();
            if (model.MaterialDistributionNoteItems != null)
            {
                foreach (MaterialDistributionNoteItem mdni in model.MaterialDistributionNoteItems)
                {
                    MaterialDistributionNoteItemViewModel materialDistributionNoteItemViewModel = new MaterialDistributionNoteItemViewModel();
                    PropertyCopier <MaterialDistributionNoteItem, MaterialDistributionNoteItemViewModel> .Copy(mdni, materialDistributionNoteItemViewModel);

                    materialDistributionNoteItemViewModel.MaterialDistributionNoteDetails = new List <MaterialDistributionNoteDetailViewModel>();
                    foreach (MaterialDistributionNoteDetail mdnd in mdni.MaterialDistributionNoteDetails)
                    {
                        MaterialDistributionNoteDetailViewModel materialDistributionNoteDetailViewModel = new MaterialDistributionNoteDetailViewModel();
                        PropertyCopier <MaterialDistributionNoteDetail, MaterialDistributionNoteDetailViewModel> .Copy(mdnd, materialDistributionNoteDetailViewModel);

                        ProductionOrderViewModel productionOrder = new ProductionOrderViewModel
                        {
                            Id          = mdnd.ProductionOrderId,
                            OrderNo     = mdnd.ProductionOrderNo,
                            IsCompleted = mdnd.ProductionOrderIsCompleted,
                        };

                        CodeNameViewModel product = new CodeNameViewModel
                        {
                            Id   = mdnd.ProductId,
                            Code = mdnd.ProductCode,
                            Name = mdnd.ProductName
                        };

                        CodeNameViewModel supplier = new CodeNameViewModel
                        {
                            Id   = mdnd.SupplierId,
                            Code = mdnd.SupplierCode,
                            Name = mdnd.SupplierName
                        };

                        materialDistributionNoteDetailViewModel.ProductionOrder = productionOrder;
                        materialDistributionNoteDetailViewModel.Product         = product;
                        materialDistributionNoteDetailViewModel.Supplier        = supplier;

                        materialDistributionNoteItemViewModel.MaterialDistributionNoteDetails.Add(materialDistributionNoteDetailViewModel);
                    }

                    viewModel.MaterialDistributionNoteItems.Add(materialDistributionNoteItemViewModel);
                }
            }

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

            using (var Transaction = this.DbContext.Database.BeginTransaction())
            {
                try
                {
                    MaterialDistributionNote materialDistributionNote = await ReadByIdAsync(id);

                    materialDistributionNote.FlagForDelete(IdentityService.Username, UserAgent);
                    foreach (var item in materialDistributionNote.MaterialDistributionNoteItems)
                    {
                        item.FlagForDelete(IdentityService.Username, UserAgent);

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

                    Count = await DbContext.SaveChangesAsync();

                    //MaterialDistributionNoteItemService materialDistributionNoteItemService = ServiceProvider.GetService<MaterialDistributionNoteItemService>();
                    //MaterialDistributionNoteDetailService materialDistributionNoteDetailService = ServiceProvider.GetService<MaterialDistributionNoteDetailService>();
                    //materialDistributionNoteItemService.Username = this.Username;
                    //materialDistributionNoteDetailService.Username = this.Username;

                    //HashSet<int> MaterialDistributionNoteItems = new HashSet<int>(this.DbContext.MaterialDistributionNoteItems.Where(p => p.MaterialDistributionNoteId.Equals(Id)).Select(p => p.Id));

                    //List<InventorySummaryViewModel> data = new List<InventorySummaryViewModel>();

                    //foreach (int item in MaterialDistributionNoteItems)
                    //{
                    //    HashSet<int> MaterialDistributionNoteDetails = new HashSet<int>(this.DbContext.MaterialDistributionNoteDetails.Where(p => p.MaterialDistributionNoteItemId.Equals(item)).Select(p => p.Id));

                    //    foreach (int detail in MaterialDistributionNoteDetails)
                    //    {
                    //        await materialDistributionNoteDetailService.DeleteAsync(detail);
                    //    }

                    //    await materialDistributionNoteItemService.DeleteAsync(item);
                    //}

                    IMaterialRequestNoteService materialsRequestNoteService = ServiceProvider.GetService <IMaterialRequestNoteService>();
                    //MaterialsRequestNote_ItemService materialsRequestNote_ItemService = ServiceProvider.GetService<MaterialsRequestNote_ItemService>();
                    //materialsRequestNoteService.Username = Username;
                    //materialsRequestNoteService.Token = Token;
                    //materialsRequestNote_ItemService.Username = Username;

                    foreach (MaterialDistributionNoteItem materialDistributionNoteItem in materialDistributionNote.MaterialDistributionNoteItems)
                    {
                        MaterialsRequestNote materialsRequestNote = await materialsRequestNoteService.ReadByIdAsync(materialDistributionNoteItem.MaterialRequestNoteId);

                        materialsRequestNote.IsDistributed = true;

                        //inventory summary data

                        if (materialDistributionNote.Type.ToUpper().Equals("PRODUKSI"))
                        {
                            foreach (MaterialDistributionNoteDetail materialDistributionNoteDetail in materialDistributionNoteItem.MaterialDistributionNoteDetails)
                            {
                                materialsRequestNote.MaterialsRequestNote_Items.Where(w => w.ProductionOrderId.Equals(materialDistributionNoteDetail.ProductionOrderId)).Select(s => { s.DistributedLength -= materialDistributionNoteDetail.ReceivedLength; return(s); }).ToList();
                            }
                            materialsRequestNoteService.UpdateDistributedQuantity(materialsRequestNote.Id, materialsRequestNote);

                            //foreach (MaterialsRequestNote_Item materialRequestNoteItem in materialsRequestNote.MaterialsRequestNote_Items)
                            //{
                            //    materialsRequestNote_ItemService.OnUpdating(materialRequestNoteItem.Id, materialRequestNoteItem);
                            //    materialsRequestNote_ItemService.DbSet.Update(materialRequestNoteItem);
                            //}
                        }
                        await materialsRequestNoteService.UpdateAsync(materialsRequestNote.Id, materialsRequestNote);

                        //materialsRequestNoteService.OnUpdating(materialsRequestNote.Id, materialsRequestNote);
                        //materialsRequestNoteService.DbSet.Update(materialsRequestNote);
                    }


                    await CreateInventoryDocument(materialDistributionNote, "IN");

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

            return(Count);
        }