public static OrderShipmentModel GetShipment(long warehouseId, long customerId, long customerSiteId, long orderId) { OrderShipmentModel newShipment = new OrderShipmentModel { CustomerId = customerId, CustomerSiteId = customerSiteId, DeliveryDate = DateTime.Now, Id = 0, OrderId = orderId, OrderShipments = new List <OrderShipmentLine>(), WarehouseId = warehouseId }; List <OrderModel> orders = OrderHelper.GetOrders(orderId, customerId, customerSiteId); if (orders.Count() > 0) { foreach (var order in orders) { List <OrderDetailModel> orderDetail = OrderHelper.GetOrderDetail(order.Id.ToString()).ToList(); if (orderDetail != null && orderDetail.Count() > 0) { orderDetail = orderDetail.Where(rec => rec.WarehouseId == warehouseId).ToList(); if (orderDetail != null && orderDetail.Count() > 0) { foreach (var detailItem in orderDetail) { List <ShipmentModel> shipments = GetShipments(detailItem.Id); if (shipments != null && shipments.Count() > 0) { if (shipments.Sum(rec => rec.Quantity) < detailItem.Quantity) { OrderShipmentLine current = fromOrderDetailtoShipment(detailItem, shipments); current.CustomerName = order.CustomerName; current.CustomerSiteName = order.CustomerSiteName; current.OrderNo = order.OrderNo; if (!SessionHelper.Shipment.OrderShipments.Any(rec => rec.LineId == detailItem.Id)) { newShipment.OrderShipments.Add(current); } } } else { OrderShipmentLine current = fromOrderDetailtoShipment(detailItem, shipments); current.CustomerName = order.CustomerName; current.CustomerSiteName = order.CustomerSiteName; current.OrderNo = order.OrderNo; newShipment.OrderShipments.Add(current); } } } } } } return(newShipment); }
public ActionResult UpdatePartial(OrderShipmentLine model) { if (ModelState.IsValid) { try { //Temporary, because unable to pass Grid column as a parameter to fill combo in grid model.ItemId = SessionHelper.ItemId; model.Id = currentId; string result = ShipmentHelper.Update(model); if (!string.IsNullOrEmpty(result)) { ViewData["EditError"] = result; } } catch (Exception ex) { ViewData["EditError"] = ex.Message; } } else { ViewData["EditError"] = "Please correct all errors!"; } return(PartialView("_Detail", SessionHelper.Shipment.OrderShipments)); }
public ActionResult AddNewPartial(OrderShipmentLine model) { //Never be in this case.. if (ModelState.IsValid) { try { if (SessionHelper.Order.OrderDetail != null && SessionHelper.Order.OrderDetail.Count() > 0) { model.Id = SessionHelper.Invoice.InvoiceDetail.LastOrDefault().Id + 1; } else { model.Id = 1; } string result = ShipmentHelper.Insert(model); if (!string.IsNullOrEmpty(result)) { ViewData["EditError"] = result; } } catch (Exception ex) { ViewData["EditError"] = ex.Message; } } else { ViewData["EditError"] = "Please correct all errors!"; } return(PartialView("_Detail", SessionHelper.Shipment.OrderShipments)); }
public static string Delete(OrderShipmentLine model) { OrderShipmentModel orderShipment = SessionHelper.Shipment; OrderShipmentLine shipment = orderShipment.OrderShipments.FirstOrDefault(x => x.LineId == model.LineId); SessionHelper.Shipment.OrderShipments.Remove(shipment); return(""); }
public ActionResult DeletePartial(OrderShipmentLine model) { try { model.Id = currentId; string result = ShipmentHelper.Delete(model); if (!string.IsNullOrEmpty(result)) { ViewData["EditError"] = result; } } catch (Exception ex) { ViewData["EditError"] = ex.Message; } return(PartialView("_Detail", SessionHelper.Shipment.OrderShipments)); }
public static OrderShipmentModel GetShipmentEdit(string deliveryNo, DateTime date) { List <ShipmentModel> shipmentDetail = service.GetDelivery(AuthenticationHelper.CompanyId.Value, SessionHelper.SOBId, deliveryNo, date).Select(x => new ShipmentModel(x)).ToList(); OrderModel order = OrderHelper.GetOrder(shipmentDetail.First().OrderId.ToString()); //Can be multiple, showing the first one on the header.. OrderShipmentModel orderShipment = new OrderShipmentModel(shipmentDetail.First()); orderShipment.CreateBy = shipmentDetail.First().CreateBy; orderShipment.CreateDate = shipmentDetail.First().CreateDate; orderShipment.CustomerId = order.CustomerId; orderShipment.CustomerSiteId = order.CustomerSiteId; orderShipment.UpdateBy = shipmentDetail.First().UpdateBy; orderShipment.UpdateDate = shipmentDetail.First().UpdateDate; orderShipment.OrderShipments = new List <OrderShipmentLine>(); foreach (var item in shipmentDetail) { OrderDetailModel orderDetail = OrderHelper.GetSingleOrderDetail(item.LineId); OrderShipmentLine shipmentLine = new OrderShipmentLine(item); decimal shippedQty = GetShipments(item.LineId).Where(rec => rec.Id < item.Id).Sum(x => x.Quantity); shipmentLine.BalanceQuantity = orderDetail.Quantity - (shippedQty + item.Quantity); shipmentLine.OrderQuantity = orderDetail.Quantity; shipmentLine.ShipedQuantity = shippedQty; shipmentLine.ThisShipQuantity = item.Quantity; shipmentLine.ItemName = ItemHelper.GetItem(orderDetail.ItemId.ToString()).ItemName; shipmentLine.CustomerId = OrderHelper.GetSingleOrder(item.OrderId.ToString()).CustomerId; shipmentLine.CustomerName = OrderHelper.GetSingleOrder(item.OrderId.ToString()).CustomerName; shipmentLine.CustomerSiteId = OrderHelper.GetSingleOrder(item.OrderId.ToString()).CustomerSiteId; shipmentLine.CustomerSiteName = OrderHelper.GetSingleOrder(item.OrderId.ToString()).CustomerSiteName; orderShipment.OrderShipments.Add(shipmentLine); } return(orderShipment); }
private static string validateShipment(OrderShipmentLine model) { decimal totalQty = model.ThisShipQuantity; OrderDetailModel orderDetail = OrderHelper.GetSingleOrderDetail(model.LineId); List <Shipment> shiped = new List <Shipment>(); if (model.Id > 0) { shiped = service.GetAllByLineId(AuthenticationHelper.CompanyId.Value, SessionHelper.SOBId, model.LineId) .Where(rec => rec.Id < model.Id).ToList(); } else { shiped = service.GetAllByLineId(AuthenticationHelper.CompanyId.Value, SessionHelper.SOBId, model.LineId).ToList(); } if (shiped != null && shiped.Count() > 0) { totalQty += shiped.Sum(rec => rec.Quantity); } if (totalQty > orderDetail.Quantity) { return("Quantity is exceeding than order!"); } string lotAndSerialValidation = checkLotandSerials(model); if (!string.IsNullOrEmpty(lotAndSerialValidation)) { return(lotAndSerialValidation); } //Other validations if any.. OrderShipmentModel orderShipment = SessionHelper.Shipment; if (model.Id > 0) { orderShipment.OrderShipments.First(x => x.LineId == model.LineId).BalanceQuantity = orderDetail.Quantity - (shiped.Sum(rec => rec.Quantity) + model.ThisShipQuantity); orderShipment.OrderShipments.First(x => x.LineId == model.LineId).Id = model.Id; orderShipment.OrderShipments.First(x => x.LineId == model.LineId).LocatorId = model.LocatorId; orderShipment.OrderShipments.First(x => x.LineId == model.LineId).LotNoId = model.LotNoId; orderShipment.OrderShipments.First(x => x.LineId == model.LineId).OrderQuantity = orderDetail.Quantity; orderShipment.OrderShipments.First(x => x.LineId == model.LineId).SerialNo = model.SerialNo; orderShipment.OrderShipments.First(x => x.LineId == model.LineId).ShipedQuantity = shiped.Sum(rec => rec.Quantity); orderShipment.OrderShipments.First(x => x.LineId == model.LineId).ThisShipQuantity = model.ThisShipQuantity; } else { if (orderShipment.OrderShipments.Any(x => x.LineId == model.LineId)) { orderShipment.OrderShipments.First(x => x.LineId == model.LineId).BalanceQuantity = orderDetail.Quantity - (shiped.Sum(rec => rec.Quantity) + model.ThisShipQuantity); orderShipment.OrderShipments.First(x => x.LineId == model.LineId).Id = model.Id; orderShipment.OrderShipments.First(x => x.LineId == model.LineId).LocatorId = model.LocatorId; orderShipment.OrderShipments.First(x => x.LineId == model.LineId).LotNoId = model.LotNoId; orderShipment.OrderShipments.First(x => x.LineId == model.LineId).OrderQuantity = orderDetail.Quantity; orderShipment.OrderShipments.First(x => x.LineId == model.LineId).SerialNo = model.SerialNo; orderShipment.OrderShipments.First(x => x.LineId == model.LineId).ShipedQuantity = shiped.Sum(rec => rec.Quantity); orderShipment.OrderShipments.First(x => x.LineId == model.LineId).ThisShipQuantity = model.ThisShipQuantity; } else { //Never be in this case.. orderShipment.OrderShipments.Add(new OrderShipmentLine { BalanceQuantity = orderDetail.Quantity - (shiped.Sum(rec => rec.Quantity) + model.ThisShipQuantity), Id = model.Id, ItemName = model.ItemName, LineId = model.LineId, LocatorId = model.LocatorId, LotNoId = model.LotNoId, OrderQuantity = orderDetail.Quantity, SerialNo = model.SerialNo, ShipedQuantity = shiped.Sum(rec => rec.Quantity), ThisShipQuantity = model.ThisShipQuantity }); } } return(""); }
public static string Update(OrderShipmentLine model) { return(validateShipment(model)); }
private static string checkLotandSerials(OrderShipmentLine model) { //Selection check.. if (model.LotNoId == null || model.LotNoId == 0) { ItemModel item = ItemHelper.GetItem(model.ItemId.ToString()); if (item.LotControl) { return("Please provide item lot!"); } if (!string.IsNullOrEmpty(model.SerialNo)) { return("Serial no. can not be defined without its lot!"); } else { return(""); } } else { List <SerialNumber> serialExist = LotNumberHelper.GetSerialsbyLotNo(model.LotNoId.Value).ToList(); List <SerialNumber> availableSerials = LotNumberHelper.GetAvailableSerials(model.LotNoId.Value); List <string> serialonGrid = SessionHelper.Shipment.OrderShipments.Where(rec => rec.LotNoId == model.LotNoId && rec.LineId != model.LineId).Select(x => x.SerialNo).ToList(); if (!string.IsNullOrEmpty(model.SerialNo)) { List <string> serials = model.SerialNo.Split(new char[] { ',' }).ToList(); //Check duplication within the same record.. if (serials.GroupBy(rec => rec).Any(d => d.Count() > 1)) { return("Serial can not be duplicate!"); } //Quantity check.. if (serials.Count() < model.ThisShipQuantity || serials.Count() > model.ThisShipQuantity) { return("Serials are not matching with the quantity!"); } //Serial availablity within shipment.. if (serialonGrid != null && serialonGrid.Count() > 0) { foreach (var unsaved in serialonGrid) { if (!string.IsNullOrEmpty(unsaved)) { //Check by another entries on grid.. List <string> unsavedSerial = unsaved.Split(new char[] { ',' }).ToList(); if (serials.Any(rec => rec == unsavedSerial.FirstOrDefault(x => x == rec))) { return("One of your serial no is already defined!"); } } } } //Lot serial existence check.. if (serialExist != null && serialExist.Count() > 0) { if (serials.Count() > availableSerials.Count()) { return("Lot is exceeding the available qty!"); } } else { return("This lot does not support serial."); } //Serial availablity within db.. foreach (var serial in serials) { bool isAvailable = LotNumberHelper.CheckSerialNumAvailability(model.LotNoId.Value, serial); if (isAvailable) { continue; } else { if (model.Id > 0) { LotNumber savedLot = LotNumberHelper.GetLotNumber(LotNumberHelper.GetSerialNo(serial, model.LotNoId.Value).LotNoId); if (savedLot.SourceId == model.Id) { continue; } else { return("Serial No. " + serial + " does not exist or may have been already shipped"); } } else { return("Serial No. " + serial + " does not exist or may have been already shipped"); } } } } else { //Lot serial existence check.. if (serialExist != null && serialExist.Count() > 0) { //Serial Generation if (model.ThisShipQuantity > availableSerials.Count() - serialonGrid.Count()) { return("Quantity is exceeding!"); } else { //Generate from available serials.. //Qty can not be decimal.. List <SerialNumber> useAvailable = new List <SerialNumber>(); if (serialonGrid != null && serialonGrid.Count() > 0) { List <string> gridSerial = new List <string>(); foreach (var serial in serialonGrid) { List <string> currentLine = serial.Split(new char[] { ',' }).ToList(); gridSerial.AddRange(currentLine); } useAvailable = availableSerials.Where(rec => rec.SerialNo != gridSerial.FirstOrDefault(x => x == rec.SerialNo)).Take(Convert.ToInt32(model.ThisShipQuantity)).ToList(); } else { useAvailable = availableSerials.Take(Convert.ToInt32(model.ThisShipQuantity)).ToList(); } List <string> autoGeneratedSerial = useAvailable.Select(rec => rec.SerialNo).ToList(); string newSerial = string.Join(",", autoGeneratedSerial.ToArray()); SessionHelper.Shipment.OrderShipments.FirstOrDefault(x => x.LineId == model.LineId && x.Id == model.Id).SerialNo = newSerial; } } else { //Lot can be used only one time.. if (SessionHelper.Shipment.OrderShipments.Any(re => re.LotNoId == model.LotNoId && re.LineId != model.LineId)) { return("Lot is in use in the current shipment"); } } } } return(""); }