public List<Order> GetStandardRRFOrders() { var client = new ServiceRRFLookupClient(); var orders = new List<Order>(); var ginfo = new GeneralInfo(); ginfo.LoadAll(); var dataView = gridItemChoiceView.DataSource as DataView; if (dataView != null) { dataView.RowFilter = gridItemChoiceView.ActiveFilterString; tblRRF = dataView.ToTable(); } var periods = client.GetCurrentReportingPeriod(ginfo.FacilityID, ginfo.ScmsWSUserName, ginfo.ScmsWSPassword); var form = client.GetForms(ginfo.FacilityID, ginfo.ScmsWSUserName, ginfo.ScmsWSPassword); var rrfs = client.GetFacilityRRForm(ginfo.FacilityID, form[0].Id, periods[0].Id, 1, ginfo.ScmsWSUserName, ginfo.ScmsWSPassword); var formCategories = rrfs.First().FormCategories; var chosenCategoryBody = formCategories.First(x => x.Id == 1); //TODO:Hard coding to be removed. var items = chosenCategoryBody.Pharmaceuticals; var user = new User(); user.LoadByPrimaryKey(MainWindow.LoggedinId); var order = new Order { RequestCompletedDate = DateTime.Now, OrderCompletedBy = user.FullName, RequestVerifiedDate = DateTime.Now, OrderTypeId = STANDARD_ORDER, SubmittedBy = user.FullName, SubmittedDate = DateTime.Now, SupplyChainUnitId = ginfo.FacilityID, OrderStatus = 1, //TODO: hardcoding FormId = form[0].Id, //TODO: hardcoding ReportingPeriodId = periods[0].Id //TODO: hardcoding }; var details = new List<RRFTransactionService.OrderDetail>(); foreach (DataRow rrfLine in tblRRF.Rows) { var detail = new RRFTransactionService.OrderDetail(); var hcmisItemID = Convert.ToInt32(rrfLine["DSItemID"]); var rrFormPharmaceutical = items.SingleOrDefault(x => x.PharmaceuticalId == hcmisItemID); if (rrFormPharmaceutical != null && Convert.ToString(rrfLine["Status"]) != "Below EOP") { detail.BeginningBalance = Convert.ToInt32(rrfLine["BeginingBalance"]); detail.EndingBalance = Convert.ToInt32(rrfLine["SOH"]); detail.QuantityReceived = Convert.ToInt32(rrfLine["Received"]); detail.QuantityOrdered = Convert.ToInt32(rrfLine["Quantity"]); detail.LossAdjustment = Convert.ToInt32(rrfLine["LossAdj"]); detail.ItemId = rrFormPharmaceutical.ItemId; var rdDoc = new ReceiveDoc(); var disposal = new Disposal(); rdDoc.GetAllWithQuantityLeft(hcmisItemID, _storeID); disposal.GetLossAdjustmentsForLastRrfPeriod(hcmisItemID, _storeID, periods[0].StartDate, periods[0].EndDate); int receiveDocEntries = rdDoc.RowCount; int disposalEntries = disposal.RowCount; if (rdDoc.RowCount == 0 && detail.EndingBalance == 0) detail.Expiries = null; detail.Expiries = new Expiry[receiveDocEntries]; detail.Adjustments = new Adjustment[disposalEntries]; rdDoc.Rewind(); int expiryAmountTotal = 0; for (int j = 0; j < receiveDocEntries; j++) { var exp = new Expiry { Amount = Convert.ToInt32(rdDoc.QuantityLeft) }; expiryAmountTotal += exp.Amount; exp.BatchNo = rdDoc.BatchNo; exp.ExpiryDate = rdDoc.ExpDate; if(exp.ExpiryDate > periods[0].EndDate.AddDays(ExpiryTreshHold)) exp.Amount = Convert.ToInt32(rdDoc.QuantityLeft); exp.ExpiryDate = periods[0].EndDate; detail.Expiries[j] = exp; rdDoc.MoveNext(); } disposal.Rewind(); int lossadjamt = 0; for (int j = 0; j < disposalEntries; j++) { var adj = new Adjustment { Amount = Convert.ToInt32(disposal.Quantity), TypeId = 1, ReasonId = 1 }; lossadjamt += adj.Amount; if (lossadjamt >= detail.LossAdjustment) detail.LossAdjustment = lossadjamt; detail.Adjustments[j] = adj; disposal.MoveNext(); } var stockoutIndexedLists = StockoutIndexBuilder.Builder.GetStockOutHistory(hcmisItemID, _storeID); var DOSPerStockOut = stockoutIndexedLists.Count(); detail.DaysOutOfStocks = new DaysOutOfStock[stockoutIndexedLists.Count()]; for (int j = 0; j < stockoutIndexedLists.Count(); j++) { var dos = new DaysOutOfStock { NumberOfDaysOutOfStock = 5, StockOutReasonId = 5 }; detail.DaysOutOfStocks[j] = dos; } } else if(rrFormPharmaceutical != null && Convert.ToString(rrfLine["Status"]) == "Below EOP") { detail.BeginningBalance = null; detail.EndingBalance = null; detail.QuantityReceived = null; detail.QuantityOrdered = null; detail.LossAdjustment = null; detail.ItemId = rrFormPharmaceutical.ItemId; var rdDoc = new ReceiveDoc(); var disposal = new Disposal(); rdDoc.GetAllWithQuantityLeft(hcmisItemID, _storeID); disposal.GetLossAdjustmentsForLastRrfPeriod(hcmisItemID, _storeID, periods[0].StartDate,periods[0].EndDate); int receiveDocEntries = rdDoc.RowCount; int disposalEntries = disposal.RowCount; if (rdDoc.RowCount == 0 && detail.EndingBalance == 0) detail.Expiries = null; detail.Expiries = new Expiry[receiveDocEntries]; detail.Adjustments = new Adjustment[disposalEntries]; rdDoc.Rewind(); int expiryAmountTotal = 0; for (int j = 0; j < receiveDocEntries; j++) { var exp = new Expiry {Amount = Convert.ToInt32(rdDoc.QuantityLeft)}; expiryAmountTotal += exp.Amount; exp.BatchNo = rdDoc.BatchNo; exp.ExpiryDate = rdDoc.ExpDate; if (expiryAmountTotal >= detail.EndingBalance) if (detail.EndingBalance != null) exp.Amount = exp.Amount - (expiryAmountTotal - detail.EndingBalance.Value); detail.Expiries[j] = null; rdDoc.MoveNext(); } disposal.Rewind(); int lossadjamt = 0; for (int j = 0; j < disposalEntries; j++) { var adj = new Adjustment { Amount = Convert.ToInt32(disposal.Quantity), TypeId = 11, ReasonId = 39 }; lossadjamt += adj.Amount; if (lossadjamt >= detail.LossAdjustment) detail.LossAdjustment = lossadjamt; detail.Adjustments[j] = null; disposal.MoveNext(); } var stockoutIndexedLists = StockoutIndexBuilder.Builder.GetStockOutHistory(hcmisItemID, _storeID); var DOSPerStockOut = stockoutIndexedLists.Count(); detail.DaysOutOfStocks = new DaysOutOfStock[stockoutIndexedLists.Count()]; for (int j = 0; j < stockoutIndexedLists.Count(); j++) { var dos = new DaysOutOfStock(); dos.NumberOfDaysOutOfStock = 5; dos.StockOutReasonId = 5; detail.DaysOutOfStocks[j] = null; } } details.Add(detail); } order.OrderDetails = details.ToArray(); orders.Add(order); // loop through each record and create order & order details objects return orders; }
public Collection<Order> GetOrders() { var orders = new Collection<Order>(); _tblRrf = (DataTable)gridItemsChoice.DataSource; tblRRF = (DataTable)gridItemsChoice.DataSource; var info = new GeneralInfo(); info.LoadAll(); var client1 = new ServiceRRFLookupClient(); var req = new GetCurrentReportingPeriodRequest { Password = RRFServiceIntegration.PlitsPassword, UserName = RRFServiceIntegration.PlitsUserName, Supplychainunitid = RRFServiceIntegration.GetBranchID() }; var branchReq = new GetBranchRRFormRequest { UserName = RRFServiceIntegration.PlitsUserName, Password = RRFServiceIntegration.PlitsPassword, Supplychainunitid = RRFServiceIntegration.GetBranchID() }; var formReq = new GetFormsRequest { Password = RRFServiceIntegration.PlitsPassword, UserName = RRFServiceIntegration.PlitsUserName, Supplychainunitid = RRFServiceIntegration.GetBranchID() }; var forms = client1.GetForms(formReq).GetFormsResult; var formid = forms[0].Id; var periods = client1.GetCurrentReportingPeriod(req).GetCurrentReportingPeriodResult; var period = periods[0].Id; branchReq.Formid = formid; branchReq.Reportingperiodid = period; var chosenCatId = 91;//RRFHelper.GetRrfCategoryId(cboStores.Text); var rrfs = client1.GetBranchRRForm(branchReq).GetBranchRRFormResult; var formCategories = rrfs.First().FormCategories; var chosenCategoryBody = formCategories.First(x => x.Id == chosenCatId); //Hard coding to be removed. var items = chosenCategoryBody.Pharmaceuticals; //Let's just store the items here (May not be required) var user = new User(); user.LoadByPrimaryKey(CurrentContext.LoggedInUser.ID); var order = new HCMIS.Desktop.PLITSTransactionalService.Order { //Id = (int)rrf["Id"], RequestCompletedDate = BLL.DateTimeHelper.ServerDateTime,//Convert.ToDateTime(rrf["DateOfSubmissionEth"]), OrderCompletedBy = user.FullName, RequestVerifiedDate = BLL.DateTimeHelper.ServerDateTime, OrderTypeId = 1, //This needs to be changed to constant class or something. 1 - Regular, 2 - Emergency' SubmittedBy = user.FullName, SubmittedDate = BLL.DateTimeHelper.ServerDateTime, SupplyChainUnitId = Helpers.RRFServiceIntegration.GetBranchID(), OrderStatus = 1,//TODO: hardcoding FormId = formid,//TODO: hardcoding ReportingPeriodId = period //TODO: hardcoding }; // order.OrderTypeId = (int)tblrrf.Rows[i]["RRfTpyeId"]; // Set order properties //order.FormId = rrfForm.Id; //Form.ID? or RRFForm.ID? - doesn't make sense // order.ReportingPeriodId = periods[0].Id; //Asked again here? Because RRFForm already contains this. var details = new Collection<OrderDetail>(); int i = 0; var xx = tblRRF.Rows.Count; foreach (DataRow rrfLine in tblRRF.Rows) { var detail = new PLITSTransactionalService.OrderDetail(); var hcmisItemID = Convert.ToInt32(rrfLine["ID"]); var rrFormPharmaceutical = items.FirstOrDefault(x => x.PharmaceuticalId == Convert.ToInt32(rrfLine["ID"])); if (rrfLine != null && rrFormPharmaceutical!=null) { detail.BeginningBalance = Convert.ToInt32(rrfLine["BeginingBalance"]); //DaysOutOfStock daysOfStockOut = new DaysOutOfStock() { NumberOfDaysOutOfStock = 1 }; //detail.DaysOutOfStocks.Add(daysOfStockOut);//Convert.ToInt32(rrfLine["DaysOutOfStock"]); int eBalance = Convert.ToInt32(rrfLine["SOH"]); detail.EndingBalance = eBalance == 0 ? 1 : eBalance; //To make sure ending balance is not zero. //detail.ItemId = Convert.ToInt32(rrfLine["ID"]); //Needs to come from the Code column of Items table. detail.QuantityReceived = Convert.ToInt32(rrfLine["Received"]); detail.QuantityOrdered = Convert.ToInt32(rrfLine["Quantity"]); detail.LossAdjustment = Convert.ToInt32(rrfLine["LossAdj"]); if (rrFormPharmaceutical != null) detail.ItemId = rrFormPharmaceutical.ItemId; else throw new Exception("Item ID Mismatch"); var rdDoc = new ReceiveDoc(); var lossAndAdjustment = new LossAndAdjustment(); rdDoc.GetAllWithQuantityLeft(hcmisItemID, _storeID); lossAndAdjustment.GetLossAdjustmentsForLastRRFPeriod(hcmisItemID, _storeID, periods[0].StartDate, periods[0].EndDate); int receiveDocEntries = rdDoc.RowCount; int disposalEntries = lossAndAdjustment.RowCount; rdDoc.Rewind(); for (var j = 0; j < receiveDocEntries; j++) { var exp = new Expiry { Amount = Convert.ToInt32(rdDoc.QuantityLeft), BatchNo = rdDoc.BatchNo, ExpiryDate = rdDoc.ExpDate }; detail.Expiries.Add(exp); rdDoc.MoveNext(); } lossAndAdjustment.Rewind(); for (var j = 0; j < disposalEntries; j++) { var adj = new Adjustment {Amount = Convert.ToInt32(lossAndAdjustment.Quantity), TypeId = 11, ReasonId = 39}; detail.Adjustments.Add(adj); lossAndAdjustment.MoveNext(); } var stockoutIndexedLists = StockoutIndexBuilder.Builder.GetStockOutHistory(hcmisItemID, _storeID); for (int j = 0; j < stockoutIndexedLists.Count; j++) { var dos = new DaysOutOfStock { NumberOfDaysOutOfStock = stockoutIndexedLists[j].NumberOfDays, StockOutReasonId = 5 }; detail.DaysOutOfStocks.Add(dos); } details.Add(detail); } } order.OrderDetails = details; orders.Add(order); // loop through each record and create order & order details objects return orders; //var user = new User(); //user.LoadByPrimaryKey(NewMainWindow.LoggedInUser.ID); //foreach (DataRow rrf in tblRRF.Rows) //{ // var order = new HCMIS.Desktop.PLITSTransactionalService.Order // { // Id = (int)rrf["Id"], // RequestCompletedDate = DateTime.Now,//Convert.ToDateTime(rrf["DateOfSubmissionEth"]), // OrderCompletedBy = user.FullName, // RequestVerifiedDate = DateTime.Now, // OrderTypeId = 1, //This needs to be changed to constant class or something. 1 - Regular, 2 - Emergency' // SubmittedBy = user.FullName, // SubmittedDate = DateTime.Now, // SupplyChainUnitId = RRFServiceIntegration.BranchID, // OrderStatus = 1, // FormId = formid // }; // // order.OrderTypeId = (int)tblrrf.Rows[i]["RRfTpyeId"]; // // Set order properties // //order.FormId = rrfForm.Id; //Form.ID? or RRFForm.ID? - doesn't make sense // // order.ReportingPeriodId = periods[0].Id; //Asked again here? Because RRFForm already contains this. // var details = new Collection<OrderDetail>(); // foreach (DataRow rrfLine in tblRRF.Rows) // { // var detail = new PLITSTransactionalService.OrderDetail(); // var rrFormPharmaceutical = items.FirstOrDefault(x => x.ItemId == Convert.ToInt32(rrfLine["ID"])); // if (rrfLine != null && rrFormPharmaceutical != null) // //detail.Adjustments[0].Amount = (int)rrfLine["Adjustments"]; // { // detail.BeginningBalance = Convert.ToInt32(rrfLine["BeginingBalance"]); // //detail.DaysOutOfStocks = Convert.ToInt32(rrfLine["DaysOutOfStock"]); // detail.EndingBalance = Convert.ToInt32(rrfLine["SOH"]); // //detail.ItemId = Convert.ToInt32(rrfLine["ID"]); //Needs to come from the Code column of Items table. // detail.QuantityReceived = Convert.ToInt32(rrfLine["Received"]); // detail.QuantityOrdered = Convert.ToInt32(rrfLine["Quantity"]); // detail.LossAdjustment = Convert.ToInt32(rrfLine["LossAdj"]); // if (rrFormPharmaceutical != null) // detail.PharmaceuticalId = rrFormPharmaceutical.PharmaceuticalId; // // detail.PharmaceuticalId = Convert.ToInt32(rrfLine["ItemID"]); // // detail.PharmaceuticalId = pharId; // } // details.Add(detail); // } // order.OrderDetails = details; // orders.Add(order); //} //// loop through each record and create order & order details objects //return orders; }