public async Task <GarmentExpenditureGood> Handle(RemoveGarmentExpenditureGoodCommand request, CancellationToken cancellationToken) { var ExpenditureGood = _garmentExpenditureGoodRepository.Query.Where(o => o.Identity == request.Identity).Select(o => new GarmentExpenditureGood(o)).Single(); GarmentComodityPrice garmentComodityPrice = _garmentComodityPriceRepository.Query.Where(a => a.IsValid == true && new UnitDepartmentId(a.UnitId) == ExpenditureGood.UnitId && new GarmentComodityId(a.ComodityId) == ExpenditureGood.ComodityId).Select(s => new GarmentComodityPrice(s)).Single(); Dictionary <Guid, double> finStockToBeUpdated = new Dictionary <Guid, double>(); _garmentExpenditureGoodItemRepository.Find(o => o.ExpenditureGoodId == ExpenditureGood.Identity).ForEach(async expenditureItem => { if (finStockToBeUpdated.ContainsKey(expenditureItem.FinishedGoodStockId)) { finStockToBeUpdated[expenditureItem.FinishedGoodStockId] += expenditureItem.Quantity; } else { finStockToBeUpdated.Add(expenditureItem.FinishedGoodStockId, expenditureItem.Quantity); } GarmentFinishedGoodStockHistory garmentFinishedGoodStockHistory = _garmentFinishedGoodStockHistoryRepository.Query.Where(a => a.ExpenditureGoodItemId == expenditureItem.Identity).Select(a => new GarmentFinishedGoodStockHistory(a)).Single(); garmentFinishedGoodStockHistory.Remove(); await _garmentFinishedGoodStockHistoryRepository.Update(garmentFinishedGoodStockHistory); expenditureItem.Remove(); await _garmentExpenditureGoodItemRepository.Update(expenditureItem); }); foreach (var finStock in finStockToBeUpdated) { var garmentFinishingGoodStockItem = _garmentFinishedGoodStockRepository.Query.Where(x => x.Identity == finStock.Key).Select(s => new GarmentFinishedGoodStock(s)).Single(); var qty = garmentFinishingGoodStockItem.Quantity + finStock.Value; garmentFinishingGoodStockItem.SetQuantity(qty); garmentFinishingGoodStockItem.SetPrice((garmentFinishingGoodStockItem.BasicPrice + (double)garmentComodityPrice.Price) * (qty)); garmentFinishingGoodStockItem.Modify(); await _garmentFinishedGoodStockRepository.Update(garmentFinishingGoodStockItem); } ExpenditureGood.Remove(); await _garmentExpenditureGoodRepository.Update(ExpenditureGood); _storage.Save(); return(ExpenditureGood); }
public async Task <GarmentFinishingOut> Handle(RemoveGarmentFinishingOutCommand request, CancellationToken cancellationToken) { var finishOut = _garmentFinishingOutRepository.Query.Where(o => o.Identity == request.Identity).Select(o => new GarmentFinishingOut(o)).Single(); Dictionary <Guid, double> finishingInItemToBeUpdated = new Dictionary <Guid, double>(); Dictionary <GarmentFinishedGoodStock, double> finGood = new Dictionary <GarmentFinishedGoodStock, double>(); GarmentComodityPrice garmentComodityPrice = _garmentComodityPriceRepository.Query.Where(a => a.IsValid == true && new UnitDepartmentId(a.UnitId) == finishOut.UnitToId && new GarmentComodityId(a.ComodityId) == finishOut.ComodityId).Select(s => new GarmentComodityPrice(s)).Single(); _garmentFinishingOutItemRepository.Find(o => o.FinishingOutId == finishOut.Identity).ForEach(async finishOutItem => { if (finishOut.IsDifferentSize) { _garmentFinishingOutDetailRepository.Find(o => o.FinishingOutItemId == finishOutItem.Identity).ForEach(async finishOutDetail => { if (finishingInItemToBeUpdated.ContainsKey(finishOutItem.FinishingInItemId)) { finishingInItemToBeUpdated[finishOutItem.FinishingInItemId] += finishOutDetail.Quantity; } else { finishingInItemToBeUpdated.Add(finishOutItem.FinishingInItemId, finishOutDetail.Quantity); } if (finishOut.FinishingTo == "GUDANG JADI") { var garmentFinishedGoodExist = _garmentFinishedGoodStockRepository.Query.Where( a => a.RONo == finishOut.RONo && a.Article == finishOut.Article && a.BasicPrice == finishOutItem.BasicPrice && new UnitDepartmentId(a.UnitId) == finishOut.UnitToId && new SizeId(a.SizeId) == finishOutDetail.SizeId && new GarmentComodityId(a.ComodityId) == finishOut.ComodityId && new UomId(a.UomId) == finishOutDetail.UomId ).Select(s => new GarmentFinishedGoodStock(s)).Single(); if (finGood.ContainsKey(garmentFinishedGoodExist)) { finGood[garmentFinishedGoodExist] += finishOutDetail.Quantity; } else { finGood.Add(garmentFinishedGoodExist, finishOutDetail.Quantity); } GarmentFinishedGoodStockHistory garmentFinishedGoodStockHistory = _garmentFinishedGoodStockHistoryRepository.Query.Where(a => a.FinishingOutDetailId == finishOutDetail.Identity).Select(a => new GarmentFinishedGoodStockHistory(a)).Single(); garmentFinishedGoodStockHistory.Remove(); await _garmentFinishedGoodStockHistoryRepository.Update(garmentFinishedGoodStockHistory); } finishOutDetail.Remove(); await _garmentFinishingOutDetailRepository.Update(finishOutDetail); }); } else { if (finishingInItemToBeUpdated.ContainsKey(finishOutItem.FinishingInItemId)) { finishingInItemToBeUpdated[finishOutItem.FinishingInItemId] += finishOutItem.Quantity; } else { finishingInItemToBeUpdated.Add(finishOutItem.FinishingInItemId, finishOutItem.Quantity); } if (finishOut.FinishingTo == "GUDANG JADI") { var garmentFinishedGoodExist = _garmentFinishedGoodStockRepository.Query.Where( a => a.RONo == finishOut.RONo && a.Article == finishOut.Article && a.BasicPrice == finishOutItem.BasicPrice && new UnitDepartmentId(a.UnitId) == finishOut.UnitToId && new SizeId(a.SizeId) == finishOutItem.SizeId && new GarmentComodityId(a.ComodityId) == finishOut.ComodityId && new UomId(a.UomId) == finishOutItem.UomId ).Select(s => new GarmentFinishedGoodStock(s)).Single(); if (finGood.ContainsKey(garmentFinishedGoodExist)) { finGood[garmentFinishedGoodExist] += finishOutItem.Quantity; } else { finGood.Add(garmentFinishedGoodExist, finishOutItem.Quantity); } GarmentFinishedGoodStockHistory garmentFinishedGoodStockHistory = _garmentFinishedGoodStockHistoryRepository.Query.Where(a => a.FinishingOutItemId == finishOutItem.Identity).Select(a => new GarmentFinishedGoodStockHistory(a)).Single(); garmentFinishedGoodStockHistory.Remove(); await _garmentFinishedGoodStockHistoryRepository.Update(garmentFinishedGoodStockHistory); } } finishOutItem.Remove(); await _garmentFinishingOutItemRepository.Update(finishOutItem); }); foreach (var finInItem in finishingInItemToBeUpdated) { var garmentSewInItem = _garmentFinishingInItemRepository.Query.Where(x => x.Identity == finInItem.Key).Select(s => new GarmentFinishingInItem(s)).Single(); garmentSewInItem.SetRemainingQuantity(garmentSewInItem.RemainingQuantity + finInItem.Value); garmentSewInItem.Modify(); await _garmentFinishingInItemRepository.Update(garmentSewInItem); } if (finishOut.FinishingTo == "GUDANG JADI") { foreach (var finGoodStock in finGood) { var garmentFinishedGoodExist = _garmentFinishedGoodStockRepository.Query.Where( a => a.Identity == finGoodStock.Key.Identity ).Select(s => new GarmentFinishedGoodStock(s)).Single(); var qty = garmentFinishedGoodExist.Quantity - finGoodStock.Value; garmentFinishedGoodExist.SetQuantity(qty); garmentFinishedGoodExist.SetPrice((garmentFinishedGoodExist.BasicPrice + (double)garmentComodityPrice.Price) * (qty)); garmentFinishedGoodExist.Modify(); await _garmentFinishedGoodStockRepository.Update(garmentFinishedGoodExist); } } finishOut.Remove(); await _garmentFinishingOutRepository.Update(finishOut); _storage.Save(); return(finishOut); }