public async Task <ActionResult <DisbursementList> > processRetrieval( [FromBody] List <fakeRequisitionDetails> fakeRequisitions, int id, int year, int month, int day) { Console.WriteLine(year); Console.WriteLine(month); Console.WriteLine(day); string time = year + "-" + month + "-" + day + " 23:59:59"; Console.WriteLine(time); #region data fetching for processing Console.WriteLine("post"); var allRD = await _clkService.findAllRequsitionDetailsAsync(); var nonDeliveredRD = allRD.Where(x => x.status != "Delivered"); var nonAppliedRD = nonDeliveredRD.Where(x => x.status != "Applied"); var requisitiondetails = nonAppliedRD.Where(x => x.status != "Declined"); var requisitions = await _clkService.findAllRequsitionAsync(); var stationeries = await _clkService.findAllStationeriesAsync(); var departments = await _clkService.findAllDepartmentAsync(); var collectionpoints = await _clkService.findAllCollectionPointAsync(); Console.WriteLine("fetching done and starting processing"); #endregion #region create new Stock Adjustment StockAdjustment newSA = new StockAdjustment(); newSA.date = DateTime.Now; newSA.EmployeeId = id; newSA.type = "stock retrieval"; _clkService.saveStockAdjustment(newSA); Console.WriteLine("created stock adjustment"); #endregion #region creating necessary Disbursement List HashSet <Department> deptlist = new HashSet <Department>(); foreach (fakeRequisitionDetails i in fakeRequisitions) { foreach (RequisitionDetail rd in requisitiondetails) { if ((i.reqQty != 0) && (i.id == rd.Id)) { var rul = await _clkService.findEmployeeByIdAsync(requisitions.Where(y => y.Id == rd.RequisitionId).FirstOrDefault().EmployeeId); deptlist.Add(departments.Where(x => x.Id == rul.departmentId).FirstOrDefault()); } } } List <DisbursementList> disbursementList = new List <DisbursementList>(); foreach (Department d in deptlist) { DisbursementList newDL = new DisbursementList(); newDL.DepartmentId = d.Id; newDL.date = DateTime.Parse(time); newDL.deliveryPoint = collectionpoints.Where(x => x.Id == d.CollectionId).FirstOrDefault().collectionPoint; //d.Collection.collectionPoint; disbursementList.Add(newDL); _clkService.saveDisbursementList(newDL); } #endregion foreach (DisbursementList dl in disbursementList) { foreach (fakeRequisitionDetails i in fakeRequisitions) { foreach (RequisitionDetail rd in requisitiondetails) { if ((i.reqQty != 0) && (i.id == rd.Id)) { var currEmp = await _clkService.findEmployeeByIdAsync(requisitions.Where(y => y.Id == rd.RequisitionId).FirstOrDefault().EmployeeId); if (currEmp.departmentId == dl.DepartmentId) { #region saving stockadjustments StockAdjustmentDetail SAD = new StockAdjustmentDetail(); SAD.stockAdjustmentId = newSA.Id; SAD.StationeryId = rd.StationeryId; SAD.discpQty = -(i.reqQty); SAD.comment = "sent to " + departments.Where(x => x.Id == currEmp.departmentId).FirstOrDefault().deptName; SAD.Status = "Approved"; _clkService.saveStockAdjustmentDetail(SAD); #endregion #region updating stationeries item foreach (Stationery s in stationeries) { if (s.Id == rd.StationeryId) { s.inventoryQty -= i.reqQty; _clkService.updateStationery(s); } } #endregion #region updating requisition detail rd.rcvQty += i.reqQty; Console.WriteLine($"{rd.Id},{rd.reqQty},{rd.rcvQty},{rd.StationeryId}, for the incoming {i.reqQty}"); _clkService.udpateRequisitionDetail(rd); #endregion #region creating disbursements DisbursementDetail currDB = new DisbursementDetail(); currDB.DisbursementListId = dl.id; currDB.qty = i.reqQty; currDB.RequisitionDetailId = rd.Id; _clkService.saveDisbursementDetail(currDB); #endregion Console.WriteLine("id:" + i.id + ", reqID:" + rd.RequisitionId + ", qty:" + i.reqQty); } } } } } Console.WriteLine("done"); return(Ok(disbursementList)); }