public ActionResult Create([Bind("ixOutboundOrderLineInventoryAllocation,sOutboundOrderLineInventoryAllocation,ixOutboundOrderLine,nBaseUnitQuantityAllocated,nBaseUnitQuantityPicked,ixStatus")] OutboundOrderLinesInventoryAllocationPost outboundorderlinesinventoryallocation) { if (ModelState.IsValid) { outboundorderlinesinventoryallocation.UserName = User.Identity.Name; _outboundorderlinesinventoryallocationService.Create(outboundorderlinesinventoryallocation); return(RedirectToAction("Index")); } ViewBag.ixOutboundOrderLine = new SelectList(_outboundorderlinesinventoryallocationService.selectOutboundOrderLines().Select(x => new { x.ixOutboundOrderLine, x.sOutboundOrderLine }), "ixOutboundOrderLine", "sOutboundOrderLine"); ViewBag.ixStatus = new SelectList(_outboundorderlinesinventoryallocationService.selectStatuses().Select(x => new { x.ixStatus, x.sStatus }), "ixStatus", "sStatus"); return(View(outboundorderlinesinventoryallocation)); }
public void allocateBatch(Int64 ixPickBatch, String UserName) { //We check that the batch is not already allocated and activated - if so we do nothing var pickBatch = _pickbatchesRepository.Get(ixPickBatch); if (pickBatch.Statuses.sStatus == "Inactive") { //We get the orders associated with the batch var ordersInBatch = _outboundordersRepository.IndexDb().Where(x => x.ixPickBatch == ixPickBatch && x.Statuses.sStatus == "Active").Select(x => new { x.ixOutboundOrder, x.ixFacility, x.ixCompany }); ordersInBatch.ToList().ForEach(x => { var linesInOrders = _outboundorderlinesRepository.IndexDb().Where(l => l.ixOutboundOrder == x.ixOutboundOrder && l.Statuses.sStatus == "Active").Select(l => new { l.ixOutboundOrderLine, l.ixMaterial, l.nBaseUnitQuantityOrdered }); linesInOrders .ToList().ForEach(l => { var qtyAvailableToAllocate = getQtyAvailable(x.ixFacility, x.ixCompany, l.ixMaterial) - getQtyAllocated(x.ixFacility, x.ixCompany, l.ixMaterial); if (qtyAvailableToAllocate > 0) { OutboundOrderLinesInventoryAllocationPost outboundOrderLineInventoryAllocation = new OutboundOrderLinesInventoryAllocationPost(); outboundOrderLineInventoryAllocation.ixOutboundOrderLine = l.ixOutboundOrderLine; var orderLine = _outboundorderlinesRepository.GetPost(l.ixOutboundOrderLine); if (qtyAvailableToAllocate >= l.nBaseUnitQuantityOrdered) { outboundOrderLineInventoryAllocation.nBaseUnitQuantityAllocated = l.nBaseUnitQuantityOrdered; orderLine.ixStatus = _statusesRepository.IndexDb().Where(s => s.sStatus == "Allocated").Select(s => s.ixStatus).FirstOrDefault(); orderLine.UserName = UserName; _outboundorderlinesService.Edit(orderLine); } else { outboundOrderLineInventoryAllocation.nBaseUnitQuantityAllocated = qtyAvailableToAllocate; orderLine.ixStatus = _statusesRepository.IndexDb().Where(s => s.sStatus == "Partially Allocated").Select(s => s.ixStatus).FirstOrDefault(); orderLine.UserName = UserName; _outboundorderlinesService.Edit(orderLine); } outboundOrderLineInventoryAllocation.ixStatus = _statusesRepository.IndexDb().Where(s => s.sStatus == "Active").Select(s => s.ixStatus).FirstOrDefault(); outboundOrderLineInventoryAllocation.UserName = UserName; _outboundorderlinesinventoryallocationService.Create(outboundOrderLineInventoryAllocation); } } ); } ); } }