public RedirectToRouteResult DisburseItems() { using (SSISdbEntities m = new SSISdbEntities()) { m.Configuration.ProxyCreationEnabled = false; string id = (string)Session["RetrievalId"]; StockRetrievalHeader srh = m.StockRetrievalHeaders.Where(x => x.ID == id).First(); srh.Disbursed = 1; List <StockRetrievalDetail> itemsRetrieved = m.StockRetrievalDetails.Where(x => x.Id == id).ToList(); bool stockAdjustmentHeaderCreated = false; foreach (StockRetrievalDetail srd in itemsRetrieved) { DateTime localDate = DateTime.Now; if (srd.QuantityAdjusted > 0) { //To check whether there is stock adjustment header for the item if (!stockAdjustmentHeaderCreated) { //To Create Stock Adjustment Header stockAdjustmentHeaderCreated = true; StockAdjustmentHeader sah = new StockAdjustmentHeader(); int stockAdjustmentHeaderId = m.StockAdjustmentHeaders.Count() + 1; sah.RequestId = CommonLogic.SerialNo(stockAdjustmentHeaderId, "SA"); sah.DateRequested = localDate; sah.Requestor = (string)Session["LoginEmployeeID"]; sah.TransactionType = "Stock Adjustment"; m.StockAdjustmentHeaders.Add(sah); m.SaveChanges(); } //To Create Stock Adjustment Details int stockAdjustmentDetailId = m.StockAdjustmentHeaders.Count(); StockAdjustmentDetail sad = new StockAdjustmentDetail(); sad.RequestId = CommonLogic.SerialNo(stockAdjustmentDetailId, "SA"); sad.ItemCode = srd.ItemCode; sad.ItemQuantity = srd.QuantityAdjusted; float itemUnitCost = m.Items.Where(x => x.ItemCode == sad.ItemCode).Select(x => x.AvgUnitCost).FirstOrDefault(); sad.Amount = itemUnitCost * sad.ItemQuantity; sad.Remarks = srd.Remarks; sad.Status = "Pending"; m.StockAdjustmentDetails.Add(sad); //To add the item transactions ItemTransaction itemTransaction = new ItemTransaction(); itemTransaction.TransDateTime = localDate; itemTransaction.DocumentRefNo = sad.RequestId; itemTransaction.ItemCode = sad.ItemCode; itemTransaction.TransactionType = "Stock Adjustment"; itemTransaction.Quantity = sad.ItemQuantity; itemTransaction.UnitCost = itemUnitCost; itemTransaction.Amount = sad.Amount; m.ItemTransactions.Add(itemTransaction); //To update the quantity of the item table Item itemAdjusted = m.Items.Where(x => x.ItemCode == itemTransaction.ItemCode).FirstOrDefault(); itemAdjusted.Quantity -= itemTransaction.Quantity; m.SaveChanges(); } } //Creating list of new disbursements //To order by id so the earlier id will mean that the req form was submitted earlier List <String> reqFormIDList = m.StockRetrievalReqForms.OrderBy(x => x.Id).Where(x => x.StockRetrievalID == id).Select(x => x.ReqFormID).ToList <String>(); //Create distinct disbursement headers List <String> disbHeaderDeptCodes = new List <String>(); //Take from stock retrieval details List <StockRetrievalDetail> stockRetrievalDetails = m.StockRetrievalDetails.Where(x => x.Id == id).ToList <StockRetrievalDetail>(); foreach (StockRetrievalDetail srd in stockRetrievalDetails) { //To take care that in case stock adjustment makes the quantity retrieved to be 0 if (srd.QuantityRetrieved > 0) { String deptCode = m.DepartmentDetails.Where(x => x.CollectionPointID == srd.CollectionPointID).FirstOrDefault().DepartmentCode; disbHeaderDeptCodes.Add(deptCode); } } //Make it distinct so that only one disbursement header is created disbHeaderDeptCodes = disbHeaderDeptCodes.Distinct().ToList(); foreach (String deptCode in disbHeaderDeptCodes) { DisbursementHeader newDH = new DisbursementHeader(); int count = m.DisbursementHeaders.Count() + 1; string disId = CommonLogic.SerialNo(count, "DH"); newDH.Id = disId; newDH.Status = "Open"; newDH.Date = DateTime.Now; newDH.Amount = 0; //Put 0 first and then to be calculated after all the disbursement details is done newDH.StockRetrievalId = id; newDH.DepartmentCode = deptCode; newDH.CollectionPointID = m.DepartmentDetails.Where(x => x.DepartmentCode == deptCode).FirstOrDefault().CollectionPointID; newDH.RepresentativeID = m.DepartmentDetails.Where(x => x.DepartmentCode == newDH.DepartmentCode).FirstOrDefault().RepresentativeID; float totalAmount = 0f; //Create disbursement details, since one collection point is for one dept, then the entire stock retrieved would be assigned to that dept foreach (StockRetrievalDetail srd in stockRetrievalDetails) { String deptCodeDH = m.DepartmentDetails.Where(x => x.CollectionPointID == srd.CollectionPointID).Select(x => x.DepartmentCode).FirstOrDefault(); //Only disbursed if quantity retrieved is more than 0 if (srd.QuantityRetrieved > 0 && deptCodeDH.Equals(newDH.DepartmentCode)) { DisbursementDetail newDD = new DisbursementDetail(); newDD.Id = disId; newDD.ItemCode = srd.ItemCode; int quantityOrdered = 0; foreach (String reqF in reqFormIDList) { StaffRequisitionDetail staffReqDet = m.StaffRequisitionDetails.Where(x => x.FormID == reqF && x.ItemCode == newDD.ItemCode).FirstOrDefault(); StaffRequisitionHeader staffReqHeader = m.StaffRequisitionHeaders.Where(x => x.FormID == reqF).FirstOrDefault(); int reqQtyOrdered = 0; if (staffReqDet != null && staffReqHeader != null) { if (staffReqHeader.DepartmentCode.Equals(newDH.DepartmentCode)) { reqQtyOrdered = staffReqDet.QuantityOrdered; } } quantityOrdered = quantityOrdered + reqQtyOrdered; } newDD.QuantityOrdered = quantityOrdered; newDD.QuantityReceived = srd.QuantityRetrieved; float itemUnitCost = m.Items.Where(x => x.ItemCode == newDD.ItemCode).Select(x => x.AvgUnitCost).FirstOrDefault(); newDD.UnitCost = itemUnitCost; newDD.UoM = m.Items.Where(x => x.ItemCode == newDD.ItemCode).Select(x => x.UoM).FirstOrDefault(); newDD.QuantityAdjusted = 0; newDD.TransactionType = "Disbursement"; float amount = itemUnitCost * newDD.QuantityReceived; totalAmount += amount; m.DisbursementDetails.Add(newDD); //To add the item transactions DateTime localDate = DateTime.Now; ItemTransaction itemTransaction = new ItemTransaction(); itemTransaction.TransDateTime = localDate; itemTransaction.DocumentRefNo = newDD.Id; itemTransaction.ItemCode = newDD.ItemCode; itemTransaction.TransactionType = "Disbursement"; itemTransaction.Quantity = newDD.QuantityReceived; itemTransaction.UnitCost = itemUnitCost; itemTransaction.Amount = newDD.QuantityReceived * itemUnitCost; m.ItemTransactions.Add(itemTransaction); //To update the quantity of the item table Item itemDisbursed = m.Items.Where(x => x.ItemCode == itemTransaction.ItemCode).FirstOrDefault(); itemDisbursed.Quantity -= itemTransaction.Quantity; } } newDH.Amount = totalAmount; m.DisbursementHeaders.Add(newDH); m.SaveChanges(); } } return(RedirectToAction("Disbursements", "Store")); }
public void DeleteDisbursementHeader(string id) { DisbursementHeader disbursementHeader = context.DisbursementHeaders.Find(id); context.DisbursementHeaders.Remove(disbursementHeader); }
public void UpdateDisbursementHeader(DisbursementHeader disbursementHeader) { context.Entry(disbursementHeader).State = EntityState.Modified; }
public void InsertDisbursementHeader(DisbursementHeader disbursementHeader) { context.DisbursementHeaders.Add(disbursementHeader); }