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; }