public async Task <GarmentSewingOut> Handle(PlaceGarmentSewingOutCommand request, CancellationToken cancellationToken) { request.Items = request.Items.Where(item => item.IsSave == true).ToList(); Guid sewingOutId = Guid.NewGuid(); string sewingOutNo = GenerateSewOutNo(request); GarmentSewingOut garmentSewingOut = new GarmentSewingOut( sewingOutId, sewingOutNo, new BuyerId(request.Buyer.Id), request.Buyer.Code, request.Buyer.Name, new UnitDepartmentId(request.UnitTo.Id), request.UnitTo.Code, request.UnitTo.Name, request.SewingTo, request.SewingOutDate.GetValueOrDefault(), request.RONo, request.Article, new UnitDepartmentId(request.Unit.Id), request.Unit.Code, request.Unit.Name, new GarmentComodityId(request.Comodity.Id), request.Comodity.Code, request.Comodity.Name, request.IsDifferentSize ); Dictionary <Guid, double> sewingInItemToBeUpdated = new Dictionary <Guid, double>(); foreach (var item in request.Items) { if (item.IsSave) { GarmentSewingOutItem garmentSewingOutItem = new GarmentSewingOutItem( Guid.NewGuid(), garmentSewingOut.Identity, item.SewingInId, item.SewingInItemId, new ProductId(item.Product.Id), item.Product.Code, item.Product.Name, item.DesignColor, new SizeId(item.Size.Id), item.Size.Size, request.IsDifferentSize? item.TotalQuantity : item.Quantity, new UomId(item.Uom.Id), item.Uom.Unit, item.Color, request.IsDifferentSize ? item.TotalQuantity : item.Quantity, item.BasicPrice, item.Price ); item.Id = garmentSewingOutItem.Identity; if (request.IsDifferentSize) { foreach (var detail in item.Details) { GarmentSewingOutDetail garmentSewingOutDetail = new GarmentSewingOutDetail( Guid.NewGuid(), garmentSewingOutItem.Identity, new SizeId(detail.Size.Id), detail.Size.Size, detail.Quantity, new UomId(detail.Uom.Id), detail.Uom.Unit ); detail.Id = garmentSewingOutDetail.Identity; if (sewingInItemToBeUpdated.ContainsKey(item.SewingInItemId)) { sewingInItemToBeUpdated[item.SewingInItemId] += detail.Quantity; } else { sewingInItemToBeUpdated.Add(item.SewingInItemId, detail.Quantity); } await _garmentSewingOutDetailRepository.Update(garmentSewingOutDetail); } } else { if (sewingInItemToBeUpdated.ContainsKey(item.SewingInItemId)) { sewingInItemToBeUpdated[item.SewingInItemId] += item.Quantity; } else { sewingInItemToBeUpdated.Add(item.SewingInItemId, item.Quantity); } } await _garmentSewingOutItemRepository.Update(garmentSewingOutItem); } } foreach (var sewInItem in sewingInItemToBeUpdated) { var garmentSewingInItem = _garmentSewingInItemRepository.Query.Where(x => x.Identity == sewInItem.Key).Select(s => new GarmentSewingInItem(s)).Single(); garmentSewingInItem.SetRemainingQuantity(garmentSewingInItem.RemainingQuantity - sewInItem.Value); garmentSewingInItem.Modify(); await _garmentSewingInItemRepository.Update(garmentSewingInItem); } await _garmentSewingOutRepository.Update(garmentSewingOut); #region CreateCuttingIn if (request.SewingTo == "CUTTING") { GarmentComodityPrice garmentComodityPrice = _garmentComodityPriceRepository.Query.Where(a => a.IsValid == true && a.UnitId == request.Unit.Id && a.ComodityId == request.Comodity.Id).Select(s => new GarmentComodityPrice(s)).Single(); var now = DateTime.Now; var year = now.ToString("yy"); var month = now.ToString("MM"); var prefix = $"DC{request.UnitTo.Code.Trim()}{year}{month}"; var lastCutInNo = _garmentCuttingInRepository.Query.Where(w => w.CutInNo.StartsWith(prefix)) .OrderByDescending(o => o.CutInNo) .Select(s => int.Parse(s.CutInNo.Replace(prefix, ""))) .FirstOrDefault(); var CutInNo = $"{prefix}{(lastCutInNo + 1).ToString("D4")}"; GarmentCuttingIn garmentCuttingIn = new GarmentCuttingIn( Guid.NewGuid(), CutInNo, null, "SEWING", request.RONo, request.Article, new UnitDepartmentId(request.UnitTo.Id), request.UnitTo.Code, request.UnitTo.Name, request.SewingOutDate.GetValueOrDefault(), 0 ); foreach (var item in request.Items) { if (item.IsSave) { GarmentCuttingInItem garmentCuttingInItem = new GarmentCuttingInItem( Guid.NewGuid(), garmentCuttingIn.Identity, Guid.Empty, 0, null, sewingOutId, sewingOutNo ); if (request.IsDifferentSize) { foreach (var detail in item.Details) { GarmentCuttingInDetail garmentCuttingInDetail = new GarmentCuttingInDetail( Guid.NewGuid(), garmentCuttingInItem.Identity, Guid.Empty, item.Id, detail.Id, new ProductId(item.Product.Id), item.Product.Code, item.Product.Name, item.DesignColor, null, 0, new UomId(0), null, Convert.ToInt32(detail.Quantity), new UomId(detail.Uom.Id), detail.Uom.Unit, detail.Quantity, item.BasicPrice, (item.BasicPrice + ((double)garmentComodityPrice.Price * 25 / 100)) * detail.Quantity, 0, item.Color ); await _garmentCuttingInDetailRepository.Update(garmentCuttingInDetail); } } else { GarmentCuttingInDetail garmentCuttingInDetail = new GarmentCuttingInDetail( Guid.NewGuid(), garmentCuttingInItem.Identity, Guid.Empty, item.Id, Guid.Empty, new ProductId(item.Product.Id), item.Product.Code, item.Product.Name, item.DesignColor, null, 0, new UomId(0), null, Convert.ToInt32(item.Quantity), new UomId(item.Uom.Id), item.Uom.Unit, item.Quantity, item.BasicPrice, (item.BasicPrice + ((double)garmentComodityPrice.Price * 25 / 100)) * item.Quantity, 0, item.Color ); await _garmentCuttingInDetailRepository.Update(garmentCuttingInDetail); } await _garmentCuttingInItemRepository.Update(garmentCuttingInItem); } } await _garmentCuttingInRepository.Update(garmentCuttingIn); } #endregion _storage.Save(); return(garmentSewingOut); }
public async Task <GarmentSewingOut> Handle(UpdateGarmentSewingOutCommand request, CancellationToken cancellationToken) { var sewOut = _garmentSewingOutRepository.Query.Where(o => o.Identity == request.Identity).Select(o => new GarmentSewingOut(o)).Single(); GarmentComodityPrice garmentComodityPrice = _garmentComodityPriceRepository.Query.Where(a => a.IsValid == true && a.UnitId == request.Unit.Id && a.ComodityId == request.Comodity.Id).Select(s => new GarmentComodityPrice(s)).Single(); if (sewOut.SewingTo == "CUTTING") { Guid cutInId = _garmentCuttingInItemRepository.Query.Where(a => a.SewingOutId == sewOut.Identity).First().CutInId; var cutIn = _garmentCuttingInRepository.Query.Where(a => a.Identity == cutInId).Select(a => new GarmentCuttingIn(a)).Single(); _garmentCuttingInItemRepository.Find(o => o.CutInId == cutIn.Identity).ForEach(async cutInItem => { cutInItem.Modify(); await _garmentCuttingInItemRepository.Update(cutInItem); }); cutIn.SetDate(request.SewingOutDate.GetValueOrDefault()); cutIn.Modify(); await _garmentCuttingInRepository.Update(cutIn); } Dictionary <Guid, double> sewInItemToBeUpdated = new Dictionary <Guid, double>(); _garmentSewingOutItemRepository.Find(o => o.SewingOutId == sewOut.Identity).ForEach(async sewOutItem => { var item = request.Items.Where(o => o.Id == sewOutItem.Identity).Single(); var diffSewInQuantity = item.IsSave ? (sewOutItem.Quantity - (request.IsDifferentSize ? item.TotalQuantity : item.Quantity)): sewOutItem.Quantity; if (sewInItemToBeUpdated.ContainsKey(sewOutItem.SewingInItemId)) { sewInItemToBeUpdated[sewOutItem.SewingInItemId] += diffSewInQuantity; } else { sewInItemToBeUpdated.Add(sewOutItem.SewingInItemId, diffSewInQuantity); } if (!item.IsSave) { item.Quantity = 0; if (request.IsDifferentSize) { _garmentSewingOutDetailRepository.Find(o => o.SewingOutItemId == sewOutItem.Identity).ForEach(async sewOutDetail => { if (sewOut.SewingTo == "CUTTING") { GarmentCuttingInDetail cuttingInDetail = _garmentCuttingInDetailRepository.Query.Where(a => a.SewingOutDetailId == sewOutDetail.Identity).Select(a => new GarmentCuttingInDetail(a)).Single(); cuttingInDetail.Remove(); await _garmentCuttingInDetailRepository.Update(cuttingInDetail); } sewOutDetail.Remove(); await _garmentSewingOutDetailRepository.Update(sewOutDetail); }); if (sewOut.SewingTo == "CUTTING") { Guid cuttingInItemId = _garmentCuttingInDetailRepository.Query.Where(a => a.SewingOutDetailId == item.Details.First().Id).Select(a => new GarmentCuttingInDetail(a)).First().CutInItemId; GarmentCuttingInItem cuttingInItem = _garmentCuttingInItemRepository.Query.Where(a => a.Identity == cuttingInItemId).Select(a => new GarmentCuttingInItem(a)).Single(); cuttingInItem.Remove(); await _garmentCuttingInItemRepository.Update(cuttingInItem); } } else { if (sewOut.SewingTo == "CUTTING") { GarmentCuttingInDetail cuttingInDetail = _garmentCuttingInDetailRepository.Query.Where(a => a.SewingOutItemId == sewOutItem.Identity).Select(a => new GarmentCuttingInDetail(a)).Single(); GarmentCuttingInItem cuttingInItem = _garmentCuttingInItemRepository.Query.Where(a => a.Identity == cuttingInDetail.CutInItemId).Select(a => new GarmentCuttingInItem(a)).Single(); cuttingInDetail.Remove(); await _garmentCuttingInDetailRepository.Update(cuttingInDetail); cuttingInItem.Remove(); await _garmentCuttingInItemRepository.Update(cuttingInItem); } } sewOutItem.Remove(); } else { if (request.IsDifferentSize) { _garmentSewingOutDetailRepository.Find(o => o.SewingOutItemId == sewOutItem.Identity).ForEach(async sewOutDetail => { if (sewOutDetail.Identity != Guid.Empty) { var detail = item.Details.Where(o => o.Id == sewOutDetail.Identity).SingleOrDefault(); if (detail != null) { if (sewOut.SewingTo == "CUTTING") { GarmentCuttingInDetail cuttingInDetail = _garmentCuttingInDetailRepository.Query.Where(a => a.SewingOutDetailId == sewOutDetail.Identity).Select(a => new GarmentCuttingInDetail(a)).Single(); cuttingInDetail.SetCuttingInQuantity(Convert.ToInt32(detail.Quantity)); cuttingInDetail.SetPrice((item.BasicPrice + ((double)garmentComodityPrice.Price * 25 / 100)) * detail.Quantity); cuttingInDetail.SetRemainingQuantity(Convert.ToInt32(detail.Quantity)); cuttingInDetail.Modify(); await _garmentCuttingInDetailRepository.Update(cuttingInDetail); } sewOutDetail.SetQuantity(detail.Quantity); sewOutDetail.SetSizeId(new SizeId(detail.Size.Id)); sewOutDetail.SetSizeName(detail.Size.Size); sewOutDetail.Modify(); } else { if (sewOut.SewingTo == "CUTTING") { GarmentCuttingInDetail cuttingInDetail = _garmentCuttingInDetailRepository.Query.Where(a => a.SewingOutDetailId == sewOutDetail.Identity).Select(a => new GarmentCuttingInDetail(a)).Single(); cuttingInDetail.Remove(); await _garmentCuttingInDetailRepository.Update(cuttingInDetail); } sewOutDetail.Remove(); } await _garmentSewingOutDetailRepository.Update(sewOutDetail); } else { GarmentSewingOutDetail garmentSewingOutDetail = new GarmentSewingOutDetail( Guid.NewGuid(), sewOutItem.Identity, sewOutDetail.SizeId, sewOutDetail.SizeName, sewOutDetail.Quantity, sewOutDetail.UomId, sewOutDetail.UomUnit ); await _garmentSewingOutDetailRepository.Update(garmentSewingOutDetail); if (sewOut.SewingTo == "CUTTING") { Guid cuttingInItemId = _garmentCuttingInDetailRepository.Query.Where(a => a.SewingOutItemId == sewOutItem.Identity).Select(a => new GarmentCuttingInDetail(a)).First().CutInItemId; GarmentCuttingInDetail garmentCuttingInDetail = new GarmentCuttingInDetail( Guid.NewGuid(), cuttingInItemId, Guid.Empty, sewOutItem.Identity, garmentSewingOutDetail.Identity, new ProductId(item.Product.Id), item.Product.Code, item.Product.Name, item.DesignColor, null, 0, new UomId(0), null, Convert.ToInt32(garmentSewingOutDetail.Quantity), garmentSewingOutDetail.UomId, garmentSewingOutDetail.UomUnit, garmentSewingOutDetail.Quantity, item.BasicPrice, (item.BasicPrice + ((double)garmentComodityPrice.Price * 25 / 100)) * garmentSewingOutDetail.Quantity, 0, item.Color ); await _garmentCuttingInDetailRepository.Update(garmentCuttingInDetail); } } }); foreach (var detail in item.Details) { if (detail.Id == Guid.Empty) { GarmentSewingOutDetail garmentSewingOutDetail = new GarmentSewingOutDetail( Guid.NewGuid(), sewOutItem.Identity, new SizeId(detail.Size.Id), detail.Size.Size, detail.Quantity, new UomId(detail.Uom.Id), detail.Uom.Unit ); await _garmentSewingOutDetailRepository.Update(garmentSewingOutDetail); if (sewOut.SewingTo == "CUTTING") { Guid cuttingInItemId = _garmentCuttingInDetailRepository.Query.Where(a => a.SewingOutItemId == sewOutItem.Identity).Select(a => new GarmentCuttingInDetail(a)).First().CutInItemId; GarmentCuttingInDetail garmentCuttingInDetail = new GarmentCuttingInDetail( Guid.NewGuid(), cuttingInItemId, Guid.Empty, sewOutItem.Identity, garmentSewingOutDetail.Identity, new ProductId(item.Product.Id), item.Product.Code, item.Product.Name, item.DesignColor, null, 0, new UomId(0), null, Convert.ToInt32(garmentSewingOutDetail.Quantity), garmentSewingOutDetail.UomId, garmentSewingOutDetail.UomUnit, garmentSewingOutDetail.Quantity, item.BasicPrice, (item.BasicPrice + ((double)garmentComodityPrice.Price * 25 / 100)) * garmentSewingOutDetail.Quantity, 0, item.Color ); await _garmentCuttingInDetailRepository.Update(garmentCuttingInDetail); } } } sewOutItem.SetQuantity(item.TotalQuantity); sewOutItem.SetRemainingQuantity(item.TotalQuantity); } else { sewOutItem.SetQuantity(item.Quantity); sewOutItem.SetRemainingQuantity(item.Quantity); if (sewOut.SewingTo == "CUTTING") { GarmentCuttingInDetail cuttingInDetail = _garmentCuttingInDetailRepository.Query.Where(a => a.SewingOutItemId == sewOutItem.Identity).Select(a => new GarmentCuttingInDetail(a)).Single(); cuttingInDetail.SetCuttingInQuantity(Convert.ToInt32(sewOutItem.Quantity)); cuttingInDetail.SetPrice((item.BasicPrice + ((double)garmentComodityPrice.Price * 25 / 100)) * sewOutItem.Quantity); cuttingInDetail.SetRemainingQuantity(Convert.ToInt32(sewOutItem.Quantity)); cuttingInDetail.Modify(); await _garmentCuttingInDetailRepository.Update(cuttingInDetail); } } sewOutItem.SetPrice(item.Price); sewOutItem.Modify(); } await _garmentSewingOutItemRepository.Update(sewOutItem); }); foreach (var sewingInItem in sewInItemToBeUpdated) { var garmentSewInItem = _garmentSewingInItemRepository.Query.Where(x => x.Identity == sewingInItem.Key).Select(s => new GarmentSewingInItem(s)).Single(); garmentSewInItem.SetRemainingQuantity(garmentSewInItem.RemainingQuantity + sewingInItem.Value); garmentSewInItem.Modify(); await _garmentSewingInItemRepository.Update(garmentSewInItem); } sewOut.SetDate(request.SewingOutDate.GetValueOrDefault()); sewOut.Modify(); await _garmentSewingOutRepository.Update(sewOut); _storage.Save(); return(sewOut); }
public async Task <GarmentSewingOut> Handle(RemoveGarmentSewingOutCommand request, CancellationToken cancellationToken) { var sewOut = _garmentSewingOutRepository.Query.Where(o => o.Identity == request.Identity).Select(o => new GarmentSewingOut(o)).Single(); if (sewOut.SewingTo == "CUTTING") { Guid cutInId = _garmentCuttingInItemRepository.Query.Where(a => a.SewingOutId == sewOut.Identity).First().CutInId; var cutIn = _garmentCuttingInRepository.Query.Where(a => a.Identity == cutInId).Select(a => new GarmentCuttingIn(a)).Single(); _garmentCuttingInItemRepository.Find(o => o.CutInId == cutIn.Identity).ForEach(async cutInItem => { _garmentCuttingInDetailRepository.Find(o => o.CutInItemId == cutInItem.Identity).ForEach(async cutInDetail => { cutInDetail.Remove(); await _garmentCuttingInDetailRepository.Update(cutInDetail); }); cutInItem.Remove(); await _garmentCuttingInItemRepository.Update(cutInItem); }); cutIn.Remove(); await _garmentCuttingInRepository.Update(cutIn); } Dictionary <Guid, double> sewInItemToBeUpdated = new Dictionary <Guid, double>(); _garmentSewingOutItemRepository.Find(o => o.SewingOutId == sewOut.Identity).ForEach(async sewOutItem => { if (sewOut.IsDifferentSize) { _garmentSewingOutDetailRepository.Find(o => o.SewingOutItemId == sewOutItem.Identity).ForEach(async sewOutDetail => { if (sewInItemToBeUpdated.ContainsKey(sewOutItem.SewingInItemId)) { sewInItemToBeUpdated[sewOutItem.SewingInItemId] += sewOutDetail.Quantity; } else { sewInItemToBeUpdated.Add(sewOutItem.SewingInItemId, sewOutDetail.Quantity); } sewOutDetail.Remove(); await _garmentSewingOutDetailRepository.Update(sewOutDetail); }); } else { if (sewInItemToBeUpdated.ContainsKey(sewOutItem.SewingInItemId)) { sewInItemToBeUpdated[sewOutItem.SewingInItemId] += sewOutItem.Quantity; } else { sewInItemToBeUpdated.Add(sewOutItem.SewingInItemId, sewOutItem.Quantity); } } sewOutItem.Remove(); await _garmentSewingOutItemRepository.Update(sewOutItem); }); foreach (var sewingInItem in sewInItemToBeUpdated) { var garmentSewInItem = _garmentSewingInItemRepository.Query.Where(x => x.Identity == sewingInItem.Key).Select(s => new GarmentSewingInItem(s)).Single(); garmentSewInItem.SetRemainingQuantity(garmentSewInItem.RemainingQuantity + sewingInItem.Value); garmentSewInItem.Modify(); await _garmentSewingInItemRepository.Update(garmentSewInItem); } sewOut.Remove(); await _garmentSewingOutRepository.Update(sewOut); _storage.Save(); return(sewOut); }