/// <summary> /// Needs to be the first function to be called when saving a new receive doc entry. /// </summary> /// <param name="rec"></param> /// <param name="receiptID"></param> /// <param name="dr"></param> private void FillInReceiveDocInformation(ReceiveDoc rec, int receiptID, DataRowView dr) { try { rec.GetColumn("GUID"); } catch { rec.AddColumn("GUID", typeof(string)); //rec.AddColumn("IsDamaged", typeof(bool)); //This is only used if the Check box is used to receive damaged receives (For SRM only) } rec.StoreID = Convert.ToInt32(lkAccounts.EditValue); rec.RefNo = txtRefNo.Text; rec.Remark = txtRemark.Text; rec.ReceivedBy = CurrentContext.LoggedInUserName; DateTime xx = dtRecDate.Value; dtRecDate.CustomFormat = "MM/dd/yyyy"; DateTime dtRec = new DateTime(); rec.Date = ConvertDate.DateConverter(dtRecDate.Text); dtRec = ConvertDate.DateConverter(dtRecDate.Text); rec.EurDate = BLL.DateTimeHelper.ServerDateTime; rec.ItemID = Convert.ToInt32(dr["ID"]); rec.NoOfPack = Convert.ToDecimal(dr["Pack Qty"]); rec.SetColumn("GUID", dr["GUID"].ToString()); rec.IsDamaged = Convert.ToBoolean(dr["IsDamaged"]); if (standardRecType == StandardReceiptType.iGRVOnline) { rec.SetColumn("PricePerPack", dr["Price/Pack"]); rec.SetColumn("Margin", dr["Margin"]); rec.SetColumn("UnitCost", dr["Price/Pack"]); } //TODO: This if is a garbage. Remove if (dr["InvoicedQty"] == DBNull.Value) { rec.InvoicedNoOfPack = rec.NoOfPack; } rec.InvoicedNoOfPack = srm ? Convert.ToDecimal(dr["IssuedQty"]) : Convert.ToDecimal(dr["OriginalInvoicedQty"]); rec.ManufacturerId = Convert.ToInt32(dr["Manufacturer"]); BLL.ItemManufacturer im = new BLL.ItemManufacturer(); im.LoadIMbyLevel(rec.ItemID, rec.ManufacturerId, 0); if (dr["UnitID"] != DBNull.Value) { // if unit has been set, pick the qty per pack from the unit rec.UnitID = Convert.ToInt32(dr["UnitID"]); ItemUnit itemUnit = new ItemUnit(); itemUnit.LoadByPrimaryKey(rec.UnitID); rec.QtyPerPack = itemUnit.QtyPerUnit; } else { rec.QtyPerPack = im.QuantityInBasicUnit; } rec.Quantity = rec.QuantityLeft = rec.NoOfPack * rec.QtyPerPack; try { if ((deliveryNoteType == DeliveryNoteType.NotSet)) { if (!BLL.Settings.HandleGRV && !srm) { rec.PricePerPack = Convert.ToDouble(dr["Price/Pack"]); double pre = (Convert.ToDouble(dr["Price/Pack"]) / 1); //rec.QtyPerPack); rec.Cost = pre; } rec.DeliveryNote = false; } else { rec.DeliveryNote = true; if (deliveryNoteType == DeliveryNoteType.Automatic) { rec.SetColumn("PricePerPack", dr["Price/Pack"]); rec.SetColumn("Margin", dr["Margin"]); rec.SetColumn("UnitCost", dr["Price/Pack"]); } } } catch { // catch the error if the recieve doesn't have cost information // NOTE: this shall never happen. } if (dr["Batch No"] != DBNull.Value) { rec.BatchNo = dr["Batch No"].ToString(); // receivingGrid.Rows[i].Cells[8].Value.ToString(); } if (dr["Expiry Date"] != DBNull.Value) { rec.ExpDate = Convert.ToDateTime(dr["Expiry Date"]); //receivingGrid.Rows[i].Cells[9].Value); } if (!srm) { rec.SupplierID = _supplierID; } else { rec.SupplierID = BLL.Supplier.CONSTANTS.RETURNED_FROM_FACILITY; //TODO: Returned From Supplier: To be removed. This is an unacceptable hack. rec.RefNo = lkSTVInvoiceNo.Text; if (string.IsNullOrEmpty(txtRemark.Text)) { XtraMessageBox.Show( "Please enter the reason for the SRM.", "Error", MessageBoxButtons.OK, MessageBoxIcon.Exclamation); throw new Exception("Reason not entered for SRM"); } else { rec.Remark = txtRemark.Text; } } rec.ReturnedStock = srm; if (srm && !chkSRMForOldSystemIssues.Checked) { rec.ReturnedFromIssueDocID = int.Parse(dr["IssueDocID"].ToString()); int issueDocID = int.Parse(dr["IssueDocID"].ToString()); BLL.IssueDoc iss = new IssueDoc(); iss.LoadByPrimaryKey(issueDocID); BLL.ReceiveDoc rd = new ReceiveDoc(); rd.LoadByPrimaryKey(iss.RecievDocID); //If it was a delivery note, then the return will not have price information associated with it. // HW-2189 decimal? UnitCost, SellingPrice, Margin; UnitCost = SellingPrice = Margin = null; if (!BLL.Settings.HandleGRV) { if (!iss.IsColumnNull("UnitCost") && iss.IsColumnNull("SellingPrice")) { UnitCost = iss.UnitCost; SellingPrice = iss.SellingPrice; Margin = !iss.IsColumnNull("Margin") ? iss.Margin : 0; } else if (!iss.IsColumnNull("Cost")) { Margin = !rd.IsColumnNull("Margin") ? Convert.ToDecimal(rd.Margin) : 0; SellingPrice = Convert.ToDecimal(iss.Cost / Convert.ToDouble(iss.NoOfPack)); UnitCost = BLL.Settings.IsCenter ? SellingPrice : SellingPrice / Convert.ToDecimal(Margin + 1); } } else { if (!iss.IsColumnNull("UnitCost") && iss.IsColumnNull("SellingPrice") && iss.UnitCost != 0 && iss.SellingPrice != 0) { UnitCost = iss.UnitCost; SellingPrice = iss.SellingPrice; Margin = !iss.IsColumnNull("Margin") ? iss.Margin : 0; } else if (!iss.IsColumnNull("Cost") && iss.Cost != 0) { Margin = !rd.IsColumnNull("Margin") ? Convert.ToDecimal(rd.Margin) : 0; SellingPrice = Convert.ToDecimal(iss.Cost / Convert.ToDouble(iss.NoOfPack)); UnitCost = BLL.Settings.IsCenter ? SellingPrice : SellingPrice / Convert.ToDecimal(Margin + 1); } } if (UnitCost.HasValue) { rec.PricePerPack = Convert.ToDouble(UnitCost); rec.Cost = Convert.ToDouble(UnitCost); rec.UnitCost = UnitCost.Value; } if (SellingPrice.HasValue) { rec.SellingPrice = Convert.ToDouble(SellingPrice); } if (Margin.HasValue) { rec.Margin = Convert.ToDouble(Margin); } if (!rd.IsColumnNull("SupplierID")) rec.SupplierID = rd.SupplierID; } rec.ReceiptID = receiptID; if (BLL.Settings.HandleGRV && !beginningBalance) { rec.RefNo = receiptID.ToString(); } else if (beginningBalance) { rec.RefNo = "BeginningBalance"; } //Needs to be fixed! Garbage string batch = DateTimeHelper.ServerDateTime.Day.ToString() + DateTimeHelper.ServerDateTime.Hour.ToString() + DateTimeHelper.ServerDateTime.Minute.ToString() + rec.ItemID.ToString(); rec.LocalBatchNo = batch; rec.Out = false; rec.IsApproved = false; if (dr["ShortageReasonID"] != DBNull.Value) { rec.ShortageReasonID = Convert.ToInt32(dr["ShortageReasonID"]); } var item = new Item(); item.LoadByPrimaryKey(Convert.ToInt32(dr["id"])); if (dr["ShortageReasonID"] == DBNull.Value && (item.NeedExpiryBatch || rec.ExpDate <= DateTimeHelper.ServerDateTime)) { rec.ShortageReasonID = ShortageReasons.Constants.DAMAGED; } dtRecDate.Value = xx; _receiptID = receiptID; //Assign it to the global variable so it can be used later on. }
/// <summary> /// Computes the stock calculations for an order detail. /// </summary> /// <param name="currentMonth">The current month.</param> /// <param name="currentYear">The current year.</param> /// <param name="userID">The user ID.</param> /// <param name="orderDetail">The order detail.</param> /// <returns></returns> public DataRow ComputeStockCalculationsForAnOrderDetail(int currentMonth, int currentYear, int userID, OrderDetail orderDetail) { if (!IsOrderDetailTableReady(orderDetail)) { PrepareOrderDetailTable(orderDetail); } int? preferredManufacturer; int? preferredPhysicalStoreID; decimal usableStock; decimal approved; decimal availableQuantity; Balance bal = new Balance(); ItemManufacturer imf = new ItemManufacturer(); int? unitid = null; PriceSettings priceSettings = BLL.Settings.HandleDeliveryNotes ? PriceSettings.BOTH : PriceSettings.PRICED_ONLY; BLL.Order parentOrder = new Order(); parentOrder.LoadByPrimaryKey(orderDetail.OrderID); unitid = orderDetail.UnitID; preferredManufacturer = orderDetail.IsColumnNull("PreferredManufacturerID") ? null : new int?(orderDetail.PreferredManufacturerID); preferredPhysicalStoreID = orderDetail.IsColumnNull("PreferredPhysicalStoreID") ? null : new int?(orderDetail.PreferredPhysicalStoreID); if (orderDetail.IsColumnNull("StoreID")) { orderDetail.StoreID = BLL.Activity.GetActivityUsingFEFO(this.FromStore, orderDetail.ItemID, orderDetail.UnitID); orderDetail.Save(); } Activity storeObject = new Activity(); availableQuantity = storeObject.LoadOptionsForOrderDetail(userID, orderDetail.ID, priceSettings, bal, false, out usableStock, out approved); orderDetail.SetColumn("AvailableStores", storeObject.DefaultView); if (storeObject.RowCount == 1) { orderDetail.StoreID = storeObject.ID; // Avoid error if the column IsDeliveryNote doesn't exsit at all. orderDetail.DeliveryNote = storeObject.DefaultView.Table.Columns.IndexOf("IsDeliveryNote") >= 0 && !storeObject.IsColumnNull("IsDeliveryNote") && Convert.ToBoolean(storeObject.GetColumn("IsDeliveryNote")); availableQuantity = Convert.ToDecimal(storeObject.GetColumn("AvailableSKU")); } else if (storeObject.RowCount > 1) { //TOCLEAN: Lord have mercy. // // check if the default activity is selected // if it has been selected, then do a good job and select it. storeObject.Rewind(); while ( !storeObject.EOF && ( ( storeObject.ID == orderDetail.StoreID && !orderDetail.IsColumnNull("DeliveryNote") && orderDetail.DeliveryNote && !Convert.ToBoolean(storeObject.GetColumn("IsDeliveryNote")) ) || storeObject.ID != orderDetail.StoreID ) ) { storeObject.MoveNext(); } // the selected store is found, don't worry. if (!storeObject.EOF) { availableQuantity = Convert.ToDecimal(storeObject.GetColumn("AvailableSKU")); } else { // the selected store is not found, please do select the first store. storeObject.Rewind(); orderDetail.StoreID = storeObject.ID; orderDetail.DeliveryNote = (storeObject.DefaultView.Table.Columns.IndexOf("IsDeliveryNote") >= 0 && !storeObject.IsColumnNull("IsDeliveryNote") && Convert.ToBoolean(storeObject.GetColumn("IsDeliveryNote"))); availableQuantity = Convert.ToDecimal(storeObject.GetColumn("AvailableSKU")); } } orderDetail.SetColumn("HasStores", (storeObject.RowCount > 1) ? "*" : ""); // Precaution ... to hide -ve available quantity. if (availableQuantity < 0) { availableQuantity = 0; } orderDetail.StockedOut = availableQuantity <= 0; orderDetail.Save(); int qinBu = 1; if (unitid.HasValue) { ItemUnit itemUnit = new ItemUnit(); itemUnit.LoadByPrimaryKey(unitid.Value); qinBu = itemUnit.QtyPerUnit; //Checking if the columns from the vwGetAllItems have been filled in. var fullItemName = orderDetail.GetColumn("FullItemName").ToString(); if (string.IsNullOrEmpty(fullItemName)) { BLL.Order temp = new Order(); temp.LoadFromRawSql(HCMIS.Repository.Queries.Order.SelectItemDetail(orderDetail.ItemID)); orderDetail.SetColumn("Unit", itemUnit.Text); orderDetail.SetColumn("FullItemName", temp.GetColumn("FullItemName")); orderDetail.SetColumn("StockCode", temp.GetColumn("StockCode")); orderDetail.SetColumn("CategoryType", temp.GetColumn("CategoryType")); } } orderDetail.SetColumn("AvailableQuantity", availableQuantity); orderDetail.SetColumn("PricedQuantity", usableStock); if (orderDetail.IsColumnNull("ApprovedQuantity")) { if ((orderDetail.Quantity / ((long)qinBu)) < availableQuantity) { orderDetail.ApprovedQuantity = orderDetail.Quantity; } else { orderDetail.ApprovedQuantity = availableQuantity * qinBu; } } if (BLL.Settings.AllowPreferredManufacturers) { Manufacturer manuf = new Manufacturer(); manuf.LoadForItem(orderDetail.ItemID, orderDetail.StoreID, orderDetail.UnitID, true); manuf.AddNew(); manuf.ID = -1; manuf.Name = "Remove Preference"; orderDetail.SetColumn("AvailableManufacturer", manuf.DefaultView); orderDetail.SetColumn("HasManufacturers", (manuf.RowCount > 2) ? "*" : ""); if (manuf.RowCount == 2) { manuf.Rewind(); orderDetail.PreferredManufacturerID = manuf.ID; } } if (BLL.Settings.AllowPreferredPhysicalStore) { PhysicalStore phyStore = new PhysicalStore(); phyStore.LoadForItem(userID, orderDetail.ItemID, orderDetail.StoreID, orderDetail.UnitID); phyStore.AddNew(); phyStore.Name = "Remove Preference"; phyStore.ID = -1; orderDetail.SetColumn("AvailablePhysicalStore", phyStore.DefaultView); orderDetail.SetColumn("HasPhysicalStoreChoice", (phyStore.RowCount > 2) ? "*" : ""); if (phyStore.RowCount == 2) { phyStore.Rewind(); orderDetail.PreferredPhysicalStoreID = phyStore.ID; } } if (BLL.Settings.AllowPreferredExpiry) { ReceiveDoc rd = new ReceiveDoc(); rd.LoadExpiryDatesForItem(orderDetail.ItemID, orderDetail.StoreID, orderDetail.UnitID, true, preferredManufacturer, preferredPhysicalStoreID); rd.AddNew(); rd.SetColumn("ExpiryDateString", "Remove Preference"); orderDetail.SetColumn("AvailableExpiry", rd.DefaultView); orderDetail.SetColumn("HasExpiryChoice", (rd.RowCount > 2) ? "*" : ""); if (!orderDetail.IsColumnNull("PreferredExpiryDate")) { DateTime expDate = orderDetail.PreferredExpiryDate; string expDateStr = string.Format("{0}-{1:00}-{2:00}", expDate.Year, expDate.Month, expDate.Day, ""); orderDetail.SetColumn("ExpiryDateString", expDateStr); } } // do some reseting if the approved quanitty is greater than if (orderDetail.ApprovedQuantity / qinBu > availableQuantity) { orderDetail.ApprovedQuantity = availableQuantity * qinBu; } orderDetail.SetColumn("UsableStock", usableStock); orderDetail.SetColumn("PApprovedStock", approved); orderDetail.SetColumn("SKUBU", qinBu); orderDetail.SetColumn("AvailableSKU", availableQuantity); string TextID = ((orderDetail.IsColumnNull("DeliveryNote") || !orderDetail.DeliveryNote) ? "N" : "D") + orderDetail.StoreID.ToString(); orderDetail.SetColumn("TextID", TextID); orderDetail.SetColumn("ApprovedSKU", orderDetail.ApprovedQuantity / Convert.ToDecimal(qinBu)); orderDetail.SetColumn("RequestedSKU", orderDetail.Quantity / Convert.ToDecimal(qinBu)); if (availableQuantity == 0) { orderDetail.SetColumnNull("TextID"); orderDetail.SetColumnNull("StoreID"); } Item itm = new Item(); string warning = (itm.GetItemAllowStatus(orderDetail.ItemID, this.RequestedBy) == 0) ? "Warning" : ""; orderDetail.SetColumn("Warning", warning); //if (!orderDetail.IsColumnNull("StoreID")) //{ // var balance = new Balance(); //balance.LoadQuantityNotReceive(orderDetail.ItemID, orderDetail.UnitID, parentOrder.FromStore); //var totalrequested =balance.GetTotalApprovedQuantityByItem(parentOrder.ID, orderDetail.ItemID, orderDetail.UnitID,parentOrder.FromStore); orderDetail.SetColumn("GIT", 0); orderDetail.SetColumn("CRequested",0); orderDetail.SetColumn("CApproved",0); //orderDetail.SetColumn("DOS", balance.DOS); //orderDetail.SetColumn("TotalIssued", balance.TotalIssued); //orderDetail.SetColumn("FiscalYearDays", balance.FiscalYearDays); //decimal amc = 0; //decimal mos = 0; //var totalissued = balance.TotalIssued; //var totaldatediff = balance.FiscalYearDays - balance.DOS; //if (totalissued != 0) //{ // amc = Convert.ToDecimal(totalissued / totaldatediff) * 30; //} //else if (amc == 0) //{ // mos = Convert.ToDecimal(balance.FiscalYearDays / 30.0); //} //else if (amc != 0 && availableQuantity != 0) //{ // mos = Convert.ToDecimal(availableQuantity / amc); //} //else if (availableQuantity == 0 && amc != 0) //{ // mos = 0; //} //else //{ // amc = 0; // mos = 0; //} orderDetail.SetColumn("TotalRequested", 0); orderDetail.SetColumn("AMC", 0); orderDetail.SetColumn("MOS", 0); //} return orderDetail.DefaultView.ToTable().Rows[0]; }
private void LoadSTVDetails() { int documentID = Convert.ToInt32(grdViewReceivedSTVs.GetFocusedDataRow()["DocumentID"]); BLL.Document document = new Document(); document.LoadByPrimaryKey(documentID); DocumentExchange.Documents.XmlMappings.STV stv = DocumentExchange.Documents.XmlMappings.STV.Load(document.DocumentContent); //Clean up the receivedoc entry receiveDoc.FlushData(); STVNo = Convert.ToInt32(stv.DocumentNumber); lblDaysAgo.Text = string.Format("Printed: {0}", Helpers.DateTimeFunctions.GetDateSpan(stv.PrintedDate)); for (int i = 0; i < stv.DocumentDetails.Count; i++) { STVDetail detail = stv.DocumentDetails[i]; receiveDoc.AddNew(); //Add columns for display purposes and for storing temporary information if (!receiveDoc.DefaultView.ToTable().Columns.Contains("FullItemName")) { receiveDoc.AddColumn("FullItemName", typeof(string)); receiveDoc.AddColumn("UnitName", typeof(string)); receiveDoc.AddColumn("ManufacturerName", typeof(string)); receiveDoc.AddColumn("ActivityName", typeof(string)); receiveDoc.AddColumn("StockCode", typeof(string)); receiveDoc.AddColumn("PalletLocationID", typeof(int)); receiveDoc.AddColumn("GUID", typeof(string)); } //Fill in the data receiveDoc.ItemID = detail.ItemID; receiveDoc.UnitID = detail.UnitID; receiveDoc.StoreID = detail.ActivityID; receiveDoc.ManufacturerId = detail.ManufacturerID; receiveDoc.SetColumn("BatchNo", detail.BatchNumber); receiveDoc.SetColumn("ExpDate", detail.ExpiryDate); receiveDoc.SetColumn("GUID", Guid.NewGuid()); BLL.Item item = new Item(); item.LoadByPrimaryKey(detail.ItemID); receiveDoc.SetColumn("FullItemName", item.FullItemName); BLL.ItemUnit unit = new ItemUnit(); unit.LoadByPrimaryKey(detail.UnitID); receiveDoc.SetColumn("UnitName", unit.Text); receiveDoc.QtyPerPack = unit.QtyPerUnit; BLL.Manufacturer manufacturer = new Manufacturer(); manufacturer.LoadByPrimaryKey(detail.ManufacturerID); receiveDoc.SetColumn("ManufacturerName", manufacturer.Name); var activity = new Activity(); activity.LoadByPrimaryKey(detail.ActivityID); receiveDoc.SetColumn("ActivityName", activity.FullActivityName); receiveDoc.SetColumn("StockCode", item.StockCode); //Financial Info receiveDoc.InvoicedNoOfPack = detail.Quantity; receiveDoc.Margin = detail.Margin; receiveDoc.PricePerPack = detail.UnitPrice; } grdSTVDetails.DataSource = receiveDoc.DefaultView; }