/// <summary>
        /// Assigns the Sales Order type.
        /// </summary>
        /// <param name="form">The Sales Order details form.</param>
        /// <param name="args">The <see cref="System.EventArgs"/> instance containing the event data.</param>
        public static void btnSaveSalesOrder_OnClickStep(ISalesOrderDetails form, EventArgs args)
        {
            ISalesOrder salesOrder = form.CurrentEntity as ISalesOrder;

            if (salesOrder != null && !form.rdgSOType.IsReadOnly)
            {
                salesOrder.IsQuote = !String.IsNullOrEmpty(form.rdgSOType.SelectedValue) && Convert.ToBoolean(form.rdgSOType.SelectedValue);
                salesOrder.Save();
            }
        }
示例#2
0
    protected void cmdOK_Click(object sender, EventArgs e)
    {
        if (BindingSource != null)
        {
            ISalesOrder salesOrder = BindingSource.Current as ISalesOrder;

            if (salesOrder != null)
            {
                if ((salesOrder.PersistentState & Sage.Platform.Orm.Interfaces.PersistentState.New) <= 0)
                {
                    salesOrder.Save();
                }
            }
        }
        DialogService.CloseEventHappened(sender, e);
        Refresh();
    }
示例#3
0
        /// <summary>
        /// Assigns the Sales Order type.
        /// </summary>
        /// <param name="form">The Insert Sales Order form.</param>
        /// <param name="args">The <see cref="System.EventArgs"/> instance containing the event data.</param>
        public static void btnSaveNew_OnClickStep(IInsertSalesOrder form, EventArgs args)
        {
            ISalesOrder salesOrder = form.CurrentEntity as ISalesOrder;

            if (salesOrder != null)
            {
                string selectedValue = form.rdgSOType.SelectedValue;
                if (selectedValue.Equals("SalesOrder"))
                {
                    salesOrder.IsQuote = false;
                }
                else if (selectedValue.Equals("Quote"))
                {
                    salesOrder.IsQuote = true;
                }
                salesOrder.Save();
                HttpContext.Current.Response.Redirect(string.Format("SalesOrder.aspx?entityId={0}", salesOrder.Id.ToString()), false);
            }
        }
        private static void SubmitTransferOrder(ISalesOrder salesOrder)
        {
            try {
                //submit order to mas
                //header
                Sage.Entity.Interfaces.IStgTrnsfrOrder_TAC toHeader =
                Sage.Platform.EntityFactory.Create(typeof(Sage.Entity.Interfaces.IStgTrnsfrOrder_TAC),
                Sage.Platform.EntityCreationOption.DoNotExecuteBusinessRules) as Sage.Entity.Interfaces.IStgTrnsfrOrder_TAC;

                toHeader.SalesOrderID = salesOrder.Id.ToString();
                toHeader.TrnsfrOrderID = 0; //set this to unique int number (global) during integration
                toHeader.CloseDate = DateTime.Now;

                //get the accountfinancial data
                if (salesOrder.Account != null) {
                    if (salesOrder.Account.AccountFinancial != null) {
                        if (salesOrder.Account.AccountFinancial.Companycode.Length > 3) {
                            toHeader.CompanyID = salesOrder.Account.AccountFinancial.Companycode.Substring(0, 3); //get from mas
                        } else {
                            toHeader.CompanyID = salesOrder.Account.AccountFinancial.Companycode;
                        }
                    }
                }
                if (salesOrder.SourceSLXSite == null) {
                    throw new Exception("Order (" + salesOrder.SalesOrderNumber + "): Error: Destination Warehouse not specified.");
                } else {
                    if (salesOrder.SourceSLXSite.Sitereference != null) {
                        toHeader.RcvgWhseID = salesOrder.SourceSLXSite.Sitereference.Siterefdisplayname; //get this from mas
                    }
                }
                if (salesOrder.UserWareHouse == null) {
                    throw new Exception("Order (" + salesOrder.SalesOrderNumber + "): Error: Source Warehouse not specified.");
                } else {
                    if (salesOrder.UserWareHouse.Sitereference != null) {
                        toHeader.ShipWhseID = salesOrder.UserWareHouse.Sitereference.Siterefdisplayname; //get this from mas
                    }
                }

                toHeader.ReqDelvDate = DateTime.Now.AddDays(10);
                toHeader.SchdShipDate = DateTime.Now.AddDays(2);
                toHeader.ShipMethID = null;
                toHeader.TranCmnt = salesOrder.SalesOrderNumber;
                toHeader.TranDate = DateTime.Now;
                toHeader.TranNo = "0";
                toHeader.TransitWhseID = null;
                toHeader.ProcessStatus = 0;
                toHeader.ProcessStatusMessage = null;
                toHeader.SessionKey = 0;

                toHeader.Save();

                foreach (Sage.Entity.Interfaces.ISalesOrderItem item in salesOrder.SalesOrderItems) {
                    //only create item if quantity > 0
                    if (item.Quantity > 0) {
                        //Transfer order line items
                        Sage.Entity.Interfaces.IStgTrnsfrOrderLine_TAC toLine =
                                Sage.Platform.EntityFactory.Create(typeof(Sage.Entity.Interfaces.IStgTrnsfrOrderLine_TAC),
                                Sage.Platform.EntityCreationOption.DoNotExecuteBusinessRules) as Sage.Entity.Interfaces.IStgTrnsfrOrderLine_TAC;

                        toLine.Stgtrnsfrorder_tacId = toHeader.Id.ToString();
                        toLine.SalesOrderID = salesOrder.Id.ToString();
                        toLine.SalesOrderItemID = item.Id.ToString();
                        //toLine.TranCmnt = salesOrder.SalesOrderNumber;

                        toLine.TrnsfrOrderID = 0; //set this to unique int number (global) during integration - same as header value
                        toLine.TrnsfrOrderLineID = 0; //Set this to unique number (for this order) during integration.
                        toLine.TrnsfrLineNo = (short)item.LineNumber; //sequence number

                        if (item.Product != null) {
                            toLine.ItemID = item.Product.MasItemID; //set to itemid from mas
                            toLine.UoM = item.Product.Unit; //set to unit of measure from mas
                        }
                        toLine.QtyOrd = item.Quantity;
                        toLine.SurchargeFixedAmt = 0;
                        toLine.SurchargePct = 0;
                        toLine.TranCmnt = null;
                        toLine.ProcessStatus = 0;
                        toLine.ProcessStatusMessage = null;
                        toLine.SessionKey = 0;

                        toLine.Save();
                    }
                }

                //Update the salesorder
                salesOrder.Status = "Transmitted to Accounting";
                salesOrder.Save();

            } catch (Exception e) {
                throw new Exception("Order (" + salesOrder.SalesOrderNumber + "): " + e.Message, e);
            }
        }
        private static void SubmitSalesOrder(ISalesOrder salesOrder)
        {
            try {
                //submit order to mas

                //Salesorder header
                Sage.Entity.Interfaces.IStgSalesOrder_TAC soHeader =
                Sage.Platform.EntityFactory.Create(typeof(Sage.Entity.Interfaces.IStgSalesOrder_TAC),
                Sage.Platform.EntityCreationOption.DoNotExecuteBusinessRules) as Sage.Entity.Interfaces.IStgSalesOrder_TAC;

                soHeader.SalesOrderID = salesOrder.Id.ToString();
                soHeader.UserFld1 = salesOrder.SalesOrderNumber;
                soHeader.TranNo = "0";
                soHeader.TranDate = DateTime.Now;
                soHeader.STaxAmt = null;
                soHeader.Status = "Open";
                soHeader.SessionKey = 0;
                soHeader.RowKey = null;
                soHeader.RequireSOAck = "No";
                soHeader.RecurSOTranNo = null;
                soHeader.ProcessStatus = 0;
                //soHeader.OpenAmt = Math.Round((Double)salesOrder.OrderTotal, 2, MidpointRounding.AwayFromZero); //invoice total
                soHeader.OpenAmt = (Double)TruncateDecimal((Decimal)salesOrder.OrderTotal, 2);
                soHeader.Hold = "0";
                //soHeader.FreightAmt = salesOrder.Freight;
                soHeader.FreightAmt = 0;
                soHeader.CustPONO = salesOrder.CustomerPurchaseOrderNumber;
                soHeader.PrimarySperID = Sage.SalesLogix.API.MySlx.Security.CurrentSalesLogixUser.UserInfo.AccountingUserId;

                //Set the discount amount from discount percentage
                //if (salesOrder.Discount == null || salesOrder.Discount == 0) {
                soHeader.TradeDiscAmt = null;
                //} else {
                //    soHeader.TradeDiscAmt = (Double)TruncateDecimal((Decimal)salesOrder.Discount * (Decimal)soHeader.OpenAmt, 2);
                //}

                //get the accountfinancial data
                if (salesOrder.Account != null) {
                    if (salesOrder.Account.AccountFinancial != null) {
                        soHeader.CustID = salesOrder.Account.AccountFinancial.CustomerId; //get from mas
                        if (salesOrder.Account.AccountFinancial.Customer_Type == null) {
                            throw new ArgumentNullException("Customer_Type");
                        } else {
                            soHeader.CustClassID = salesOrder.Account.AccountFinancial.Customer_Type.Substring(0, 4).ToUpper(); //get from mas
                        }

                        //soHeader.DfltShipToCustAddrID = salesOrder.ShippingAddress.Address.MASAddrKey.ToString(); //change this to mas id
                        soHeader.DfltShipToCustAddrID = salesOrder.Account.AccountFinancial.CustomerId;
                        //soHeader.BillToCustAddrID = salesOrder.BillingAddress.Address.MASAddrKey.ToString(); //change to mas id
                        soHeader.BillToCustAddrID = salesOrder.Account.AccountFinancial.CustomerId;
                        soHeader.CompanyID = salesOrder.Account.AccountFinancial.Companycode;
                    }
                }

                soHeader.CurrID = salesOrder.CurrencyCode;
                soHeader.CurrExchRate = salesOrder.ExchangeRate;
                //soHeader.ContactName = salesOrder.BillingContact.FullName;
                soHeader.ContactName = "";
                soHeader.DfltShipPriority = 3;
                soHeader.PmtTermsID = "120";

                soHeader.Save();

                foreach (Sage.Entity.Interfaces.ISalesOrderItem item in salesOrder.SalesOrderItems) {
                    //only create item if quantity != 0
                    if (item.Quantity != 0) {
                        //Sales order line items
                        Sage.Entity.Interfaces.IStgSOLine_TAC soLine =
                                Sage.Platform.EntityFactory.Create(typeof(Sage.Entity.Interfaces.IStgSOLine_TAC),
                                Sage.Platform.EntityCreationOption.DoNotExecuteBusinessRules) as Sage.Entity.Interfaces.IStgSOLine_TAC;

                        soLine.Stgsalesorder_tacId = soHeader.Id.ToString();
                        soLine.SalesOrderID = salesOrder.Id.ToString();
                        soLine.SalesOrderItemID = item.Id.ToString();
                        ////Get the so line number - slx does this already
                        //Sage.Platform.RepositoryHelper<Sage.Entity.Interfaces.IStgSOLine_TAC> rep =
                        //    Sage.Platform.EntityFactory.GetRepositoryHelper<Sage.Entity.Interfaces.IStgSOLine_TAC>();
                        //Sage.Platform.Repository.ICriteria criteria = rep.CreateCriteria();
                        //criteria.Add(rep.EF.Eq("Stgsalesorder_tacId", soHeader.Id.ToString()));
                        //criteria.SetProjection(rep.PF.Max("SOLineNo"));
                        //criteria.SetMaxResults(1);

                        //int lastLineNo = (int)criteria.UniqueResult();
                        //soLine.SOLineNo = lastLineNo + 1;
                        soLine.SOLineNo = item.LineNumber;

                        soLine.AcctRefCode = null;
                        soLine.RowAction = 0; //find out values for this
                        soLine.AmtInvcd = 0;
                        soLine.CloseDate = null;
                        soLine.CmntOnly = "No";
                        soLine.CommClassID = null;
                        soLine.CommPlanID = null;
                        soLine.DeliveryMeth = "1";

                        if (item.Description.Length > 40) {
                            soLine.Description = item.Description.Substring(0, 40);
                        } else {
                            soLine.Description = item.Description;
                        }

                        //don't rely on slx calculation
                        //soLine.ExtAmt = Math.Round((Double)item.ExtendedPrice, 2);
                        double extendedAmount = (Double)item.CalculatedPrice * (Double)item.Quantity;
                        soLine.ExtAmt = Math.Round(extendedAmount, 2, MidpointRounding.AwayFromZero);

                        soLine.TradeDiscAmt = (Double)Math.Round((Decimal)salesOrder.Discount * (Decimal)soLine.ExtAmt, 2, MidpointRounding.ToEven);
                        soLine.TradeDiscPct = null;

                        soLine.ExtCmnt = null;
                        soLine.FOBID = salesOrder.Fob;
                        //soLine.FreightAmt = salesOrder.Freight; //do not use
                        soLine.FreightAmt = 0;
                        soLine.Hold = "0";
                        soLine.HoldReason = null;
                        soLine.ItemAliasID = null;
                        soLine.KitComponent = null;
                        soLine.MAS90LineIndex = null;
                        soLine.OrigOrdered = item.Quantity;
                        //soLine.OrigPromiseDate = salesOrder.DatePromised;
                        soLine.OrigPromiseDate = salesOrder.OrderDate.Value.AddDays(10);
                        soLine.PONumber = salesOrder.CustomerPurchaseOrderNumber;
                        soLine.ProcessStatus = 0;
                        //soLine.PromiseDate = salesOrder.DatePromised;
                        soLine.PromiseDate = salesOrder.OrderDate.Value.AddDays(10);
                        soLine.QtyInvcd = item.Quantity;
                        soLine.QtyOnBO = 0;
                        soLine.QtyOrd = item.Quantity;
                        soLine.QtyRtrnCredit = 0;
                        soLine.QtyRtrnReplacement = 0;
                        soLine.QtyShip = 0;
                        soLine.ReqCert = "No";
                        soLine.RequestDate = salesOrder.OrderDate;
                        soLine.RowKey = null;
                        soLine.SessionKey = 0;
                        soLine.ShipDate = salesOrder.OrderDate.Value.AddDays(2);
                        soLine.ShipMethID = null;
                        soLine.ShipPriority = 3;
                        if (salesOrder.ShippingAddress != null) {
                            if (salesOrder.ShippingAddress.Address != null) {
                                soLine.ShipToAddrName = salesOrder.ShippingAddress.Address.MASAddrKey.ToString();//get from MAS
                            }
                            soLine.ShipToAddrLine1 = salesOrder.ShippingAddress.Address1;
                            soLine.ShipToAddrLine2 = salesOrder.ShippingAddress.Address2;
                            soLine.ShipToAddrLine3 = salesOrder.ShippingAddress.Address3;
                            soLine.ShipToAddrLine4 = salesOrder.ShippingAddress.Address4;
                            soLine.ShipToAddrLine5 = "";
                            soLine.ShipToCity = salesOrder.ShippingAddress.City;
                            if (salesOrder.ShippingAddress.Country.Length > 3) {
                                if (salesOrder.ShippingAddress.Country.ToUpper().Substring(0, 1) == "U") {
                                    soLine.ShipToCountryID = "USA";
                                } else {
                                    soLine.ShipToCountryID = "CAN";
                                }
                            } else {
                                soLine.ShipToCountryID = salesOrder.ShippingAddress.Country;
                            }
                            soLine.ShipToPostalCode = salesOrder.ShippingAddress.PostalCode;
                            soLine.ShipToStateID = salesOrder.ShippingAddress.State;
                        }
                        soLine.Status = "Open";
                        soLine.STaxClassID = null;
                        soLine.TranNo = "0";

                        if (item.Product != null) {
                            soLine.GLAcctNo = item.Product.GlAccountNumber; //get this from mas
                            soLine.ItemID = item.Product.MasItemID; //item key from mas
                            soLine.UnitMeasID = item.Product.Unit; //get this from mas
                        }
                        //soLine.UnitPrice = Math.Round((Double)item.Price, 2); //wrong price, use price * margin
                        soLine.UnitPrice = Math.Round((Double)item.CalculatedPrice, 2, MidpointRounding.AwayFromZero);
                        soLine.UserFld1 = null;
                        soLine.UserFld2 = null;
                        soLine.VendorID = soHeader.CustID;
                        soLine.WillCall = null;
                        if (salesOrder.UserWareHouse != null) {
                            if (salesOrder.UserWareHouse.Sitereference != null) {
                                soLine.WarehouseID = salesOrder.UserWareHouse.Sitereference.Siterefdisplayname; //get this from mas
                            }
                        }

                        soLine.Save();

                    }
                }

                //Update the salesorder
                salesOrder.Status = "Transmitted to Accounting";
                salesOrder.Save();
            } catch (Exception e) {
                throw new Exception("Order (" + salesOrder.SalesOrderNumber + "): " + e.Message, e);
            }
        }
        private static void SubmitPurchaseOrder(ISalesOrder salesOrder)
        {
            try {
                //submit order to mas
                Sage.Entity.Interfaces.IStgPurchaseOrder_TAC soHeader =
                Sage.Platform.EntityFactory.Create(typeof(Sage.Entity.Interfaces.IStgPurchaseOrder_TAC),
                Sage.Platform.EntityCreationOption.DoNotExecuteBusinessRules) as Sage.Entity.Interfaces.IStgPurchaseOrder_TAC;

                soHeader.SalesOrderID = salesOrder.Id.ToString();
                soHeader.ClosedForInvc = "No";
                soHeader.ClosedForRcvg = "No";
                soHeader.CurrExchRate = 1.0;
                soHeader.CurrID = "CAD";
                soHeader.FreightAmt = 0;
                soHeader.Hold = "No";
                soHeader.IssueDate = DateTime.Now;
                soHeader.OriginationDate = DateTime.Now;
                soHeader.RequirePOIssue = "No";
                soHeader.Status = "Open";
                soHeader.STaxAmt = null;
                soHeader.TranCmnt = null;
                soHeader.TranNo = "0";
                soHeader.TranDate = DateTime.Now;
                soHeader.UserFld1 = salesOrder.SalesOrderNumber;
                soHeader.VendClassID = null;

                //get the accountfinancial data
                if (salesOrder.Account != null) {
                    if (salesOrder.Account.AccountFinancial != null) {
                        soHeader.CompanyID = salesOrder.Account.AccountFinancial.Companycode;
                        soHeader.VendorID = salesOrder.Account.AccountFinancial.CustomerId; //get from mas
                    }
                }
                //exit if wareouse not specified
                if (salesOrder.UserWareHouse == null) {
                    throw new Exception("Order (" + salesOrder.SalesOrderNumber + "): Error: Source Warehouse not specified.");
                }

                soHeader.Save();

                foreach (Sage.Entity.Interfaces.ISalesOrderItem item in salesOrder.SalesOrderItems) {
                    //only create item if quantity > 0
                    if (item.Quantity > 0) {
                        //Sales order line items
                        Sage.Entity.Interfaces.IStgPOLine_TAC soLine =
                                Sage.Platform.EntityFactory.Create(typeof(Sage.Entity.Interfaces.IStgPOLine_TAC),
                                Sage.Platform.EntityCreationOption.DoNotExecuteBusinessRules) as Sage.Entity.Interfaces.IStgPOLine_TAC;

                        soLine.Stgpurchaseorder_tacId = soHeader.Id.ToString();
                        soLine.SalesOrderID = salesOrder.Id.ToString();
                        soLine.SalesOrderItemID = item.Id.ToString();

                        soLine.POLineNo = item.LineNumber;

                        soLine.AmtInvcd = 0;
                        soLine.ClosedForInvc = "No";
                        soLine.ClosedForRcvg = "No";
                        soLine.CmntOnly = "No";

                        if (item.Description.Length > 40) {
                            soLine.Description = item.Description.Substring(0, 40);
                        } else {
                            soLine.Description = item.Description;
                        }

                        soLine.DropShip = "No";
                        soLine.ExclLastCost = "No";
                        soLine.Expedite = "No";
                        soLine.ExtCmnt = null;
                        //soLine.FreightAmt = salesOrder.Freight; //do not use
                        soLine.FreightAmt = 0;

                        if (item.Product != null) {
                            if (String.IsNullOrEmpty(item.Product.GlAccountNumber)) { throw new Exception("Order (" + salesOrder.SalesOrderNumber + "): GL Account Number is required"); }
                            soLine.GLAcctNo = item.Product.GlAccountNumber; //get this from mas
                            soLine.ItemID = item.Product.MasItemID; //item key from mas
                            soLine.UnitMeasID = item.Product.Unit; //get this from mas
                        }
                        soLine.OrigOrdered = item.Quantity;
                        //soLine.OrigPromiseDate = salesOrder.DatePromised;
                        soLine.OrigPromiseDate = salesOrder.OrderDate.Value.AddDays(10);
                        //soLine.PromiseDate = salesOrder.DatePromised;
                        soLine.PromiseDate = salesOrder.OrderDate.Value.AddDays(10);
                        soLine.QtyInvcd = 0;
                        soLine.QtyOnBO = 0;
                        soLine.QtyOpenToRcv = item.Quantity;
                        soLine.QtyOrd = item.Quantity;
                        soLine.QtyRcvd = 0;
                        soLine.QtyRtrnCredit = 0;
                        soLine.QtyRtrnReplacement = 0;
                        soLine.RequestDate = salesOrder.OrderDate;
                        soLine.Status = "Open";
                        soLine.TranNo = "0";

                        //get the accountfinancial data
                        if (salesOrder.Account != null) {
                            if (salesOrder.Account.AccountFinancial != null) {
                                if (salesOrder.Account.AccountFinancial.Companycode.Length > 3) {
                                    soLine.TargetCompanyID = salesOrder.Account.AccountFinancial.Companycode.Substring(0, 3); //get from mas
                                } else {
                                    soLine.TargetCompanyID = salesOrder.Account.AccountFinancial.Companycode;
                                }
                            }
                        }

                        if (item.CalculatedPrice == null) {
                            soLine.UnitCost = 0;
                            soLine.ExtAmt = 0;
                        } else {
                            soLine.UnitCost = Math.Round((Double)item.CalculatedPrice, 2, MidpointRounding.AwayFromZero);
                            soLine.ExtAmt = Math.Round((Double)item.CalculatedPrice * (Double)item.Quantity, 2, MidpointRounding.AwayFromZero);
                        }

                        soLine.UserFld1 = null;
                        soLine.STaxClassID = "Taxable";

                        if (salesOrder.UserWareHouse == null) {
                            throw new Exception("Order (" + salesOrder.SalesOrderNumber + "): Error: Source Warehouse not specified.");
                        } else {
                            if (salesOrder.UserWareHouse.Sitereference != null) {
                                soLine.ShipToWhseID = salesOrder.UserWareHouse.Sitereference.Siterefdisplayname; //get this from mas
                            }
                        }

                        soLine.Save();

                    }
                }
                //Update the salesorder
                salesOrder.Status = "Transmitted to Accounting";
                salesOrder.Save();

            } catch (Exception e) {
                throw new Exception("Order (" + salesOrder.SalesOrderNumber + "): " + e.Message, e);
            }
        }
        private static void SubmitInventoryAdjustment(ISalesOrder salesOrder)
        {
            //submit order to mas
            //Adjusts Inventory on hand
            try {
                Sage.Entity.Interfaces.IStgInvtTranBatch_TAC tranHeader =
                        Sage.Platform.EntityFactory.Create(typeof(Sage.Entity.Interfaces.IStgInvtTranBatch_TAC),
                        Sage.Platform.EntityCreationOption.DoNotExecuteBusinessRules) as Sage.Entity.Interfaces.IStgInvtTranBatch_TAC;

                tranHeader.SalesOrderID = salesOrder.Id.ToString();
                tranHeader.BatchID = 0;
                tranHeader.BComment = salesOrder.SalesOrderNumber;
                tranHeader.BDate = DateTime.Now;

                if (salesOrder.UserWareHouse != null) {
                    if (salesOrder.UserWareHouse.Sitereference != null) {
                        tranHeader.WhseID = salesOrder.UserWareHouse.Sitereference.Siterefdisplayname;
                    }
                }

                //get the accountfinancial data
                if (salesOrder.Account != null) {
                    if (salesOrder.Account.AccountFinancial != null) {
                        tranHeader.CompanyID = salesOrder.Account.AccountFinancial.Companycode;
                    }
                }
                tranHeader.Save();

                foreach (Sage.Entity.Interfaces.ISalesOrderItem item in salesOrder.SalesOrderItems) {
                    //only create item if quantity > 0
                    if (item.Quantity > 0) {
                        Sage.Entity.Interfaces.IStgInvtTran_TAC transaction =
                                Sage.Platform.EntityFactory.Create(typeof(Sage.Entity.Interfaces.IStgInvtTran_TAC),
                                Sage.Platform.EntityCreationOption.DoNotExecuteBusinessRules) as Sage.Entity.Interfaces.IStgInvtTran_TAC;

                        transaction.Stginvttranbatch_tacId = tranHeader.Id.ToString();
                        transaction.SalesOrderID = salesOrder.Id.ToString();
                        transaction.SalesOrderItemID = item.Id.ToString();
                        transaction.TranCmnt = salesOrder.SalesOrderNumber;

                        //Determine Transaction Type
                        int transactionType = 0;
                        double quantity = 0;
                        if (item.Quantity > 0) {
                            transactionType = 703;
                            quantity = (Double)item.Quantity;
                        } else { //if (Double.Parse(txtAdjustment.Text) < 0)
                            transactionType = 701;
                            quantity = Math.Abs((Double)item.Quantity);
                        }
                        transaction.Qty = quantity;
                        transaction.TranID = tranHeader.BatchID;
                        transaction.BatchID = tranHeader.BatchID;
                        transaction.TranType = transactionType;
                        transaction.TranDate = DateTime.Now;

                        //product info
                        if (item.Product != null) {
                            transaction.ItemID = item.Product.MasItemID;
                            transaction.UoM = item.Product.Unit;

                            //msrp price
                            if (item.Product.Vlueproductmsrp != null) {
                                transaction.UnitCost = Math.Round((Double)item.Product.Vlueproductmsrp.Listprice, 2, MidpointRounding.AwayFromZero);
                            } else {
                                transaction.UnitCost = 0;
                            }

                            transaction.TranAmt = transaction.UnitCost * transaction.Qty;
                            transaction.GLAcctNo = item.Product.GlAccountNumber;
                            if (transaction.GLAcctNo == null) {
                                transaction.GLAcctNo = "";
                            }
                        }

                        transaction.CompanyID = tranHeader.CompanyID;
                        transaction.ProcessStatus = 0;

                        transaction.Save();
                    }
                }
                //Update the salesorder
                salesOrder.Status = "Transmitted to Accounting";
                salesOrder.Save();

            } catch (Exception e) {
                //DialogService.ShowMessage("Error Creating Transaction: " + transactionID + " " + ex.Message);
                //Sage.Platform.Application.Exceptions.EventLogExceptionHandler eh = new Sage.Platform.Application.Exceptions.EventLogExceptionHandler();
                //eh.HandleException(ex, false);
                throw new Exception("Order (" + salesOrder.SalesOrderNumber + "): " + e.Message, e);
            }
        }
        public static void AddStockcardProducts(ISalesOrder salesorder)
        {
            try {
                //Only add products if the account is specified
                if (salesorder.Account != null) {

                    //save the salesorder
                    salesorder.Save();

                    //get the user's warehouseid, the id may not match the object reference, use the id as correct
                    String userWarehouseID = "";
                    if (String.IsNullOrEmpty(salesorder.UserWHSEID) && salesorder.UserWareHouse != null) {
                        userWarehouseID = salesorder.UserWareHouse.SiteCodeId;
                    } else if (salesorder.UserWHSEID == salesorder.UserWareHouse.Id.ToString()) {
                        userWarehouseID = salesorder.UserWareHouse.SiteCodeId;
                    } else {
                        //lookup id from site
                        Sage.Entity.Interfaces.ISLXSite _UserWareHouse =
                            Sage.Platform.EntityFactory.GetById<Sage.Entity.Interfaces.ISLXSite>(salesorder.UserWHSEID);
                        if (_UserWareHouse != null) {
                            userWarehouseID = _UserWareHouse.SiteCodeId;
                        }
                    }

                    //List the stock card items
                    Sage.Platform.RepositoryHelper<Sage.Entity.Interfaces.IStockCardItems> f =
                        Sage.Platform.EntityFactory.GetRepositoryHelper<Sage.Entity.Interfaces.IStockCardItems>();
                    Sage.Platform.Repository.ICriteria crit = f.CreateCriteria();

                    crit.Add(f.EF.Eq("Accountid", salesorder.Account.Id.ToString()));
                    crit.CreateAlias("Product", "p");
                    crit.Add(f.EF.Eq("p.WarehouseID", userWarehouseID));
                    crit.Add(f.EF.Ne("p.Status", "Deleted"));

                    //result = crit.List<Sage.Entity.Interfaces.IPickingList>();
                    foreach (IStockCardItems scitem in crit.List<IStockCardItems>()) {
                        if (scitem.Product != null) {

                            ////Only add products in the selected warehouse
                            //if (!String.IsNullOrEmpty(userWarehouseID) && userWarehouseID == scitem.Product.WarehouseID) {
                            try {
                                //add the products to the salesorder
                                Sage.Entity.Interfaces.ISalesOrderItem item =
                                Sage.Platform.EntityFactory.Create(typeof(Sage.Entity.Interfaces.ISalesOrderItem),
                                Sage.Platform.EntityCreationOption.DoNotExecuteBusinessRules) as Sage.Entity.Interfaces.ISalesOrderItem;

                                //use common function to add salesorderitem
                                item.SalesOrder = salesorder;
                                item.Product = scitem.Product;
                                item.MaxStockLevel = scitem.MaxStockLevel; //ssommerfeldt Nov 2 2012
                                item.SaveProductToSalesOrderItem();
                                item.Save();

                                salesorder.SalesOrderItems.Add(item);

                            } catch (Exception ex) {
                                //handle errors to allow other items to process
                                Sage.Platform.Application.Exceptions.EventLogExceptionHandler eh = new Sage.Platform.Application.Exceptions.EventLogExceptionHandler();
                                eh.HandleException(new Exception("Order (" + salesorder.SalesOrderNumber + "): " + ex.Message, ex), false);
                            }

                            ////get msrp price
                            //double listPrice = 0;
                            //try {
                            //    if (scitem.Product.Vproductpricesheet != null) {
                            //        listPrice = (double)scitem.Product.Vproductpricesheet.Listprice;
                            //    } else {
                            //        //price not found
                            //    }
                            //} catch (Exception ex) {
                            //    //vproductpricesheet record not found
                            //    Sage.Platform.Application.Exceptions.EventLogExceptionHandler eh = new Sage.Platform.Application.Exceptions.EventLogExceptionHandler();
                            //    eh.HandleException(new Exception("Order (" + item.SalesOrder.SalesOrderNumber + "): " + ex.Message, ex), false);
                            //}
                            ////item.Price = Math.Round((Double)scitem.Product.Price, 2, MidpointRounding.AwayFromZero);
                            //item.Price = listPrice;

                            ////get the margin
                            //item.Discount = scitem.Margin;

                            //item.ExtendedPrice = 0; //due to quantity 0
                            //item.Quantity = 0; //set to 0 initially

                            //item.ActualID = scitem.Product.ActualId;
                            //item.UPC = scitem.Product.UPC;
                            //item.Description = scitem.ProductDescription;
                            //item.Family = scitem.Product.Family;

                            //item.ProductName = scitem.Product.Name;
                            //item.Program = scitem.Product.Program;
                            //item.Case = scitem.Product.Unit;
                            //item.Product = scitem.Product;
                            //item.UnitOfMeasureId = scitem.Product.UnitOfMeasureId.Trim();
                            //item.MaxStockLevel = scitem.MaxStockLevel; //ssommerfeldt Nov 2 2012

                            //salesorder.SalesOrderItems.Add(item);
                            //item.Save();
                        }
                    }
                }
            } catch (Exception e) {
                throw new Exception("Order (" + salesorder.SalesOrderNumber + "): " + e.Message, e);
            }
        }