public ProductRemainsViewModel GetRemainProduct(Guid productId, Guid orderId, Guid customerId) { ProductRemainsViewModel remain = new ProductRemainsViewModel() { RemainQuantity = 0, RemainWeight = 0 }; List <InputDetail> inputDetails = UnitOfWork.InputDetailsRepository .Get(current => current.Order.CustomerId == customerId && current.OrderId == orderId && current.ProductId == productId && current.OrderId != null).ToList(); foreach (var inputDetail in inputDetails) { remain.RemainQuantity = remain.RemainQuantity + inputDetail.RemainQuantity; remain.RemainWeight = remain.RemainWeight + inputDetail.RemainDestinationWeight; } return(remain); }
public ActionResult Details(CutOrderViewModel cutOrderViewModel) { try { if (ModelState.IsValid) { cutOrderViewModel.InputDetail = UnitOfWork.InputDetailsRepository.GetById(cutOrderViewModel.InputDetail.Id); Order inputDetailOrder = UnitOfWork.OrderRepository.Get(current => current.Id == cutOrderViewModel.InputDetail.OrderId).FirstOrDefault(); cutOrderViewModel.InputDetail.Order = inputDetailOrder; ProductRemainsViewModel remain = GetRemainProduct(cutOrderViewModel.InputDetail.ProductId, cutOrderViewModel.InputDetail.OrderId.Value, cutOrderViewModel.InputDetail.Order.CustomerId); string cutId = string.Empty; if (cutOrderViewModel.CutOrderId != null) { cutId = cutOrderViewModel.CutOrderId.ToString(); Guid cutGuid = new Guid(cutId); cutOrderViewModel.CutOrderDetails = UnitOfWork.CutOrderDetailRepository.Include(current => current.CutOrder.InputDetail.Product.ProductGroup).Where(current => current.CutOrderId == cutGuid).ToList(); } if (remain.RemainWeight < cutOrderViewModel.Weight) { ModelState.AddModelError("Weight", "وزن وارد شده بیش از وزن باقی مانده می باشد"); } else if (remain.RemainQuantity < cutOrderViewModel.Quantity) { ModelState.AddModelError("Weight", "تعداد برگ وارد شده بیش از تعداد باقی مانده می باشد"); } else if (remain.RemainWeight == 0) { ModelState.AddModelError("Weight", "کالا موجود نمی باشد"); } else if (remain.RemainWeight == cutOrderViewModel.Weight) { if (cutOrderViewModel.CutOrderId == null) { CutOrder cut = new CutOrder() { CreationDate = DateTime.Now, InputDetailId = cutOrderViewModel.InputDetail.Id, IsActive = true, IsDeleted = false }; UnitOfWork.CutOrderRepository.Insert(cut); UnitOfWork.Save(); cutId = cut.Id.ToString(); } Guid cutGuid = new Guid(cutId); cutOrderViewModel.CutOrderId = cutGuid; CutOrderDetail cutOrderDetail = new CutOrderDetail() { Weight = cutOrderViewModel.Weight, Length = cutOrderViewModel.Length, Quantity = Convert.ToInt32(cutOrderViewModel.Quantity), CutOrderId = cutGuid, CustomActionId = cutOrderViewModel.CustomActionId, CreationDate = DateTime.Now, IsActive = true, IsDeleted = false }; UnitOfWork.CutOrderDetailRepository.Insert(cutOrderDetail); UnitOfWork.Save(); cutOrderViewModel.CutOrderDetails = UnitOfWork.CutOrderDetailRepository.Include(current => current.CutOrder.InputDetail.Product.ProductGroup).Where(current => current.CutOrderId == cutOrderViewModel.CutOrderId).ToList(); InputDetail inputDetailUpdate = UnitOfWork.InputDetailsRepository.GetById(cutOrderViewModel.InputDetail.Id); inputDetailUpdate.RemainDestinationWeight = 0; inputDetailUpdate.RemainQuantity = 0; UnitOfWork.InputDetailsRepository.Update(inputDetailUpdate); UnitOfWork.Save(); cutOrderViewModel.RemainWeight = inputDetailUpdate.RemainDestinationWeight; } else { if (cutOrderViewModel.CutOrderId != null) { Order order = new Order() { Customer = cutOrderViewModel.InputDetail.Order.Customer, Parent = cutOrderViewModel.InputDetail.Order, Code = GenerateCode.GetChildOrderCode(cutOrderViewModel.InputDetail.OrderId.Value), IsActive = true, IsDeleted = false, IsLatest = true }; UnitOfWork.OrderRepository.Insert(order); UnitOfWork.Save(); CutOrderDetail cutOrderDetail = new CutOrderDetail() { Weight = cutOrderViewModel.Weight, Length = cutOrderViewModel.Length, Quantity = Convert.ToInt32(cutOrderViewModel.Quantity), CutOrderId = cutOrderViewModel.CutOrderId.Value, CustomActionId = cutOrderViewModel.CustomActionId, CreationDate = DateTime.Now, IsActive = true, IsDeleted = false }; UnitOfWork.CutOrderDetailRepository.Insert(cutOrderDetail); UnitOfWork.Save(); } else { Order order = new Order() { Customer = cutOrderViewModel.InputDetail.Order.Customer, Parent = cutOrderViewModel.InputDetail.Order, Code = GenerateCode.GetChildOrderCode(cutOrderViewModel.InputDetail.OrderId.Value), IsActive = true, IsDeleted = false, IsLatest = true }; UnitOfWork.OrderRepository.Insert(order); UnitOfWork.Save(); CutOrder cut = new CutOrder() { CreationDate = DateTime.Now, InputDetailId = cutOrderViewModel.InputDetail.Id, IsActive = true, IsDeleted = false }; UnitOfWork.CutOrderRepository.Insert(cut); UnitOfWork.Save(); cutOrderViewModel.CutOrderId = cut.Id; CutOrderDetail cutOrderDetail = new CutOrderDetail() { Weight = cutOrderViewModel.Weight, Length = cutOrderViewModel.Length, Quantity = Convert.ToInt32(cutOrderViewModel.Quantity), CutOrderId = cut.Id, CustomActionId = cutOrderViewModel.CustomActionId, CreationDate = DateTime.Now, IsActive = true, IsDeleted = false }; UnitOfWork.CutOrderDetailRepository.Insert(cutOrderDetail); UnitOfWork.Save(); } cutOrderViewModel.CutOrderDetails = UnitOfWork.CutOrderDetailRepository.Include(current => current.CutOrder.InputDetail.Product.ProductGroup).Where(current => current.CutOrderId == cutOrderViewModel.CutOrderId).ToList(); decimal unit = remain.RemainWeight / remain.RemainQuantity; InputDetail inputDetailUpdate = UnitOfWork.InputDetailsRepository.GetById(cutOrderViewModel.InputDetail.Id); inputDetailUpdate.RemainDestinationWeight = remain.RemainWeight - cutOrderViewModel.Weight; inputDetailUpdate.RemainQuantity = remain.RemainQuantity - (cutOrderViewModel.Weight / unit); UnitOfWork.InputDetailsRepository.Update(inputDetailUpdate); UnitOfWork.Save(); cutOrderViewModel.RemainWeight = inputDetailUpdate.RemainDestinationWeight; } } ViewBag.CustomActionId = new SelectList(UnitOfWork.ProductGroupCustomActionRepository.Get(x => x.ProductGroupId == cutOrderViewModel.InputDetail.Product.ProductGroupId).Select(x => x.CustomAction), "Id", "Title"); ViewBag.CustomerName = cutOrderViewModel.InputDetail.Order.Customer.FullName; return(View(cutOrderViewModel)); } catch (Exception exp) { return(Json(exp.Message, JsonRequestBehavior.AllowGet)); } }
public ActionResult PostTransfer(string orderId, string productId, string weight, string qty, string customerId) { try { decimal weightDecimal = 0; int qtyInt = 0; string message = "message-"; Guid orderIdGuid = new Guid(orderId); Guid productIdGuid = new Guid(productId); if (!string.IsNullOrEmpty(weight)) { weightDecimal = Convert.ToDecimal(weight); } if (!string.IsNullOrEmpty(qty)) { qtyInt = Convert.ToInt32(qty); } Guid customerIdGuid = new Guid(customerId); Order order = UnitOfWork.OrderRepository.GetById(orderIdGuid); // Product product = UnitOfWork.ProductRepository.GetById(productIdGuid); ProductRemainsViewModel remain = GetRemainProduct(productIdGuid, orderIdGuid, order.CustomerId); if (!string.IsNullOrEmpty(qty) && remain.RemainQuantity < qtyInt) { return(Json(message + "تعداد وارد شده بیش از تعداد باقی مانده می باشد", JsonRequestBehavior.AllowGet)); } if (!string.IsNullOrEmpty(weight) && remain.RemainWeight < weightDecimal) { return(Json(message + "وزن وارد شده بیش از وزن باقی مانده می باشد", JsonRequestBehavior.AllowGet)); } if (customerIdGuid == order.CustomerId) { return(Json(message + "امکان انتقال حواله به مالک قبلی آن وجود ندارد", JsonRequestBehavior.AllowGet)); } Guid childOrderId = new Guid(); List <InputDetail> inputDetails = UnitOfWork.InputDetailsRepository .Get(c => c.OrderId == order.Id).ToList(); if (inputDetails.Count() == 1)//حواله فقط یک کالا دارد { decimal initialQty = 0; decimal initialWeight = 0; initialQty += inputDetails.FirstOrDefault().Quantity; initialWeight += inputDetails.FirstOrDefault().DestinationWeight; if (initialQty == qtyInt || initialWeight == weightDecimal) { childOrderId = CreateChildOrder(orderIdGuid, customerIdGuid, false); } else { childOrderId = CreateChildOrder(orderIdGuid, customerIdGuid, true); } } //Guid childOrderId = CreateChildOrder(orderIdGuid, customerIdGuid); decimal unit = remain.RemainWeight / remain.RemainQuantity; SeprateInputDetail(productIdGuid, orderIdGuid, order.CustomerId, qtyInt, weightDecimal, childOrderId, unit); UnitOfWork.Save(); return(Json("true", JsonRequestBehavior.AllowGet)); } catch (Exception e) { return(Json("false", JsonRequestBehavior.AllowGet)); } }