示例#1
0
        }     //AddItem

        //----------------------------------------------------------------------------------------------//

        private void DestroyAllObjects()
        {
            if (conData != null)
            {
                Marshal.FinalReleaseComObject(conData);
                conData = null;
            }//If
            if (currData != null)
            {
                Marshal.FinalReleaseComObject(currData);
                currData = null;
            }//If
            if (sopPost != null)
            {
                Marshal.FinalReleaseComObject(sopPost);
                sopPost = null;
            }//If
            if (sopItem != null)
            {
                Marshal.FinalReleaseComObject(sopItem);
                sopItem = null;
            }//If
            if (stockRecord != null)
            {
                Marshal.FinalReleaseComObject(stockRecord);
                stockRecord = null;
            }//If

            if (ws != null)
            {
                ws.Disconnect();
                Marshal.FinalReleaseComObject(ws);
                ws = null;
            }//If

            if (sdo != null)
            {
                Marshal.FinalReleaseComObject(sdo);
                sdo = null;
            } //If
        }     //DestroyAllObjects
示例#2
0
        }//CTOR

        //----------------------------------------------------------------------------------------------//

        public bool Post()
        {
            try
            {
                //Connect and create.
                sdo = new SDOEngine();
                ws  = sdo.Workspaces.Add("App Server");
                ws.Connect(setUsr.sageDBDir, setUsr.sageUsername, setUsr.sagePassword, "Unique");

                salesRecord = (SalesRecord)ws.CreateObject("SalesRecord");
                conData     = (ControlData)ws.CreateObject("ControlData");
                currData    = (CurrencyData)ws.CreateObject("CurrencyData");
                sopPost     = (SopPost)ws.CreateObject("SOPPost");

                //Unwrap order.
                string                cusCode     = order.Customer.Code;
                OrderType             type        = order.type;
                List <Models.Product> productList = order.ProductList;


                //Create a saleRecord with comboAccRef.Text and look for it in database.
                SDOHelper.Write(salesRecord, "ACCOUNT_REF", cusCode);

                if (salesRecord.Find(false))
                {
                    //Check Account Status here.
                    short accStatus = (short)SDOHelper.Read(salesRecord, "ACCOUNT_STATUS");
                    if (accStatus != 0)
                    {
                        throw new MyException("Customer " + order.Customer.Code + "'s account is on hold.");
                    }

                    short  defTaxCode   = (short)SDOHelper.Read(salesRecord, "DEF_TAX_CODE");
                    string taxRateField = "T" + defTaxCode + "_Rate";
                    defTaxRate = (double)SDOHelper.Read(conData, taxRateField);

                    currencyCode = (sbyte)SDOHelper.Read(salesRecord, "CURRENCY") + 1;


                    //If customer exists add details to sopPostHeader.
                    SDOHelper.Write(sopPost.Header, "ACCOUNT_REF", SDOHelper.Read(salesRecord, "ACCOUNT_REF"));
                    SDOHelper.Write(sopPost.Header, "NAME", SDOHelper.Read(salesRecord, "NAME"));


                    //Add each address line to header
                    for (int i = 1; i <= 5; i++)
                    {
                        SDOHelper.Write(sopPost.Header, "ADDRESS_" + i, SDOHelper.Read(salesRecord, "ADDRESS_" + i));
                    }//For



                    if (order.DeliveryAddress != null)
                    {
                        var deliveryAddress = order.DeliveryAddress;

                        SDOHelper.Write(sopPost.Header, "DEL_ADDRESS_1", RestrictLength(deliveryAddress.Line1));
                        SDOHelper.Write(sopPost.Header, "DEL_ADDRESS_2", RestrictLength(deliveryAddress.Line2));
                        SDOHelper.Write(sopPost.Header, "DEL_ADDRESS_3", RestrictLength(deliveryAddress.Line3));
                        SDOHelper.Write(sopPost.Header, "DEL_ADDRESS_4", RestrictLength(deliveryAddress.Line4));
                        SDOHelper.Write(sopPost.Header, "DEL_ADDRESS_5", RestrictLength(deliveryAddress.Line5));
                    }//If



                    //Add date and customer O/N to header
                    SDOHelper.Write(sopPost.Header, "ORDER_DATE", DateTime.Now);
                    SDOHelper.Write(sopPost.Header, "CUST_ORDER_NUMBER", order.CustomerOrderNumber);
                    SDOHelper.Write(sopPost.Header, "CARR_NOM_CODE", ((int)setUsr.carrNomCode).ToString());
                    SDOHelper.Write(sopPost.Header, "CARR_NET", order.Carriage);

                    //Check if we are entering an order for a foreign customer.
                    if (currencyCode != baseCurrencyCode)
                    {
                        taxCode = (short)setUsr.taxCodeForeign;
                        SDOHelper.Write(sopPost.Header, "CARR_TAX_CODE", (short)taxCode);

                        currData.Read(currencyCode);
                        //Populate Foreign Currency Fields
                        SDOHelper.Write(sopPost.Header, "FOREIGN_RATE", SDOHelper.Read(currData, "EXCHANGE_RATE"));
                        SDOHelper.Write(sopPost.Header, "CURRENCY", SDOHelper.Read(salesRecord, "CURRENCY"));
                        SDOHelper.Write(sopPost.Header, "CURRENCY_USED", SDOHelper.Read(salesRecord, "CURRENCY"));
                    }
                    else
                    {
                        taxCode = (short)setUsr.taxCode;
                        SDOHelper.Write(sopPost.Header, "CARR_TAX_CODE", (short)taxCode);
                    }//Else


                    //Check if its a quote or not
                    if (type == OrderType.QUOTE)
                    {
                        // Populate details to generate quote
                        SDOHelper.Write(sopPost.Header, "ORDER_TYPE", (byte)InvoiceType.sdoSopQuote);
                        SDOHelper.Write(sopPost.Header, "QUOTE_STATUS", (byte)QuoteStatus.sdoOpen);
                    }//If

                    //Any notes
                    var notes = order.Notes;
                    if (!string.IsNullOrWhiteSpace(notes))
                    {
                        var len = notes.Length;
                        //Split the note up if it's too long
                        SDOHelper.Write(sopPost.Header, "NOTES_1", RestrictLength(order.Notes.Substring(0, Math.Min(len, MAX_LENGTH_NOTE))));

                        if (len > MAX_LENGTH_NOTE)
                        {
                            SDOHelper.Write(sopPost.Header, "NOTES_2", RestrictLength(order.Notes.Substring(MAX_LENGTH_NOTE, Math.Min(len, 2 * MAX_LENGTH_NOTE))));
                        }

                        if (len > 2 * MAX_LENGTH_NOTE)
                        {
                            SDOHelper.Write(sopPost.Header, "NOTES_3", RestrictLength(order.Notes.Substring(2 * MAX_LENGTH_NOTE, Math.Min(len, 3 * MAX_LENGTH_NOTE))));
                        }
                    }//If

                    //Add discount rate (usually 0).
                    cusDiscountRate = (double)SDOHelper.Read(salesRecord, "DISCOUNT_RATE");


                    //Add each product to sopPost items section.
                    foreach (Models.Product product in productList)
                    {
                        AddItem(product, ws);
                    }//ForEach

                    //Add username
                    SDOHelper.Write(sopPost.Header, "TAKEN_BY", GetTakenBy());

                    //Update: will fail if not set up properly
                    if (!sopPost.Update())
                    {
                        return(false);
                    }
                    else
                    {
                        return(true);
                    }
                }
                else
                {
                    throw new MyException("Customer " + order.Customer.Code + " does not seem to exist.");
                }//Else
            }
            catch (MyException mE)
            {
                throw new MyException(mE.Message);
            }
            catch (Exception e)
            {
                throw new MyException("Problem posting order to database " + e.GetType().Name + ":" + e.Message);
            }
            finally
            {
                DestroyAllObjects();
            } //Finally
        }     //Post