protected int SaveCustomerDistribution(string referenceID)
    {
        //This method inserts the data into pnd_CustomerDistribution and returns the new ID.


        Taradel.Customer custObj = Taradel.CustomerDataSource.GetCustomer(User.Identity.Name);

        int    distributionID = 0;
        int    customerID     = custObj.CustomerID;
        int    totalMatches   = Convert.ToInt32(txtCount.Text);
        string listName       = txtListName.Text;

        using (SqlConnection oConn = new SqlConnection(ConfigurationManager.ConnectionStrings["TaradelWLConnectionString"].ConnectionString))
        {
            oConn.Open();

            using (SqlCommand oCmd = new SqlCommand("usp_InsertCustomerDistribution", oConn))
            {
                oCmd.Parameters.AddWithValue("@CustomerId", customerID);
                oCmd.Parameters.AddWithValue("@DistName", listName);
                oCmd.Parameters.AddWithValue("@DistRefId", referenceID);
                oCmd.Parameters.AddWithValue("@TotalDeliveries", totalMatches);
                oCmd.Parameters.AddWithValue("@USelectId", uSelectTypeID);
                oCmd.Parameters.Add("@OutputID", SqlDbType.Int).Direction = ParameterDirection.Output;
                oCmd.CommandType = CommandType.StoredProcedure;
                oCmd.ExecuteScalar();
                distributionID = Convert.ToInt32(oCmd.Parameters["@OutputID"].Value);
            }

            oConn.Close();
        }

        return(distributionID);
    }
Example #2
0
    protected void btnGoToStep3_Click(object sender, EventArgs e)
    {
        //Convert querystring variables AND label values to session variables and go to Step3.
        //labels (<span> tags) do not hold state.  We use hiddenfields to pass the data
        //to the session variables before going to the next page.
        string sesDistID      = HttpContext.Current.Request.QueryString.Get("d");
        string sesFranchise   = HttpContext.Current.Request.QueryString.Get("t");
        string sesLocation    = HttpContext.Current.Request.QueryString.Get("l");
        string sesImpressions = HttpContext.Current.Request.QueryString.Get("i");
        string sesCampaign    = HttpContext.Current.Request.QueryString.Get("c");
        //commenting out here because it is set below here 2/26/2016 -- >string sesQTY = HttpContext.Current.Request.QueryString.Get("q");
        string sesBudget        = HttpContext.Current.Request.QueryString.Get("b");
        string sesFrequency     = HttpContext.Current.Request.QueryString.Get("f");
        string sesStartDate     = HttpContext.Current.Request.QueryString.Get("s");
        string sesProductID     = HttpContext.Current.Request.QueryString.Get("p");
        string sesBaseProductID = HttpContext.Current.Request.QueryString.Get("bp");
        string sesMapName       = txtNameOfMap.Text;

        bool sesRevisedMap = false;

        //r=revised.
        //If the revised parameter in querystring is true...
        if (HttpContext.Current.Request.QueryString.Get("r") == "true")
        {
            sesRevisedMap = true;
        }

        //new 2/24/2015 - use the distributions counts
        int    mapCount = RetrieveDistributionResidentialTotal(Int32.Parse(sesDistID));
        string sesQTY   = mapCount.ToString();

        CreateSessions(sesDistID, sesFranchise, sesLocation, sesImpressions, sesCampaign, sesQTY, sesBudget, sesRevisedMap, sesFrequency, sesStartDate, sesBaseProductID, sesProductID, sesMapName);


        Taradel.Customer oCust      = Taradel.CustomerDataSource.GetCustomer(User.Identity.Name);
        string           CustomerId = oCust.CustomerID.ToString(); //"12345"; //TODO: get real CustomerID


        if (mapDistributionID == null)
        {
            mapDistributionID = GetReferenceID(Int32.Parse(sesDistID));
        }


        //new 2/27/2015 rename the map
        using (SqlConnection oConn = new SqlConnection(ConfigurationManager.ConnectionStrings["TaradelWLConnectionString"].ConnectionString))
        {
            oConn.Open();
            using (SqlCommand oCmd = new SqlCommand("usp_UpdateCustomerDistribution", oConn))
            {
                oCmd.Parameters.AddWithValue("@CustomerId", CustomerId);
                oCmd.Parameters.AddWithValue("@DistName", txtNameOfMap.Text);
                oCmd.Parameters.AddWithValue("@DistRefId", mapDistributionID);
                oCmd.CommandType = CommandType.StoredProcedure;
                oCmd.ExecuteScalar();
            }
            oConn.Close();
        }

        //string q = RebuildQuerystring()

        Response.Redirect("TargetDataMap3.aspx");
    }
Example #3
0
    private void CreateCart()
    {
        //========================================================================================================================================
        //   USelectID type 1.

        //   Cart Build Steps:
        //   1) EDDM Product
        //       a) Build the Xml Document.  Load <cart /> parent node.
        //       b) Begin building Product Node components
        //	        1) Build Options SortedList (Int, Int)
        //	        2) Build OptionCategories List (of ProductOptionCategory)
        //	        3) Build PriceMatrix
        //       c) Get PrintMethodID
        //       d) Loop through OptionCategories, add to Options as needed.
        //       e) Get the product options from the Selected Product.  Get the OptCatID.
        //       f) Build the Quote object
        //       g) Set variables returned from Quote Object.
        //       h) Finally, insert the Product Node into the Cart
        //   2) EDDM Attribute Nodes
        //   3) EDDM OrderCalc Node
        //   4) EDDM Drops Node
        //   5) EDDM Indiv Drop Nodes w/ nested Area Nodes
        //   6) EDDM Design Node
        //   7) EDDM SHIPMENTS Node and w/ nested Shipment node(s)
        //========================================================================================================================================



        //DEFINE ALL THE VARIABLES
        TaradelReceiptUtility.OrderCalculator eddmObjCalc = new TaradelReceiptUtility.OrderCalculator();
        StringBuilder methodVars = new StringBuilder();


        //Customer data.  Needed below in multiple nodes.
        Taradel.Customer oCust = Taradel.CustomerDataSource.GetCustomer(User.Identity.Name);



        string   eddmGUID            = System.Guid.NewGuid().ToString();
        string   jobName             = "OLB Campaign for " + RetrieveFromSession(TaradelSession.Location) + "-" + DateTime.Today.ToShortDateString();
        string   sCustomField1       = appxCMS.Util.CMSSettings.GetSetting("Job", "JobDescription1");
        string   sCustomField2       = appxCMS.Util.CMSSettings.GetSetting("Job", "JobDescription2");
        string   sCustomField3       = appxCMS.Util.CMSSettings.GetSetting("Job", "JobDescription3");
        string   designType          = "template";                                                     //'possible choices: 'my', 'template', 'pro'
        string   deliveryAddressID   = "0";                                                            //Ship To Address ID
        string   comments            = "";                                                             //also comes from JobComments.Text on normal pages
        string   mailAllPiecesAtOnce = "yes";                                                          //Normally comes from ddlDrops.SelectedValue. Yes/No, True/False
        DateTime startingDate        = DateTime.Parse(RetrieveFromSession(TaradelSession.StartDate));  //Normally comes from (txtLaunchWeek.Text). User selected start of 'Launch Week'
        string   zip = "23060";                                                                        //Normally ZipCode.Text. User Ship To Zip Code.

        //Prices
        decimal price         = 0;                                                                      //Stores calculated total price from Quote Obj.  (total mailed x price per piece)
        decimal taxablePrice  = 0;                                                                      //Currently same as eddmPrice / eddmQuoteObj.Price
        decimal pricePerPiece = 0;                                                                      //Stores EDDM Price Per Piece from Quote Obj.

        //Fees / Rates
        decimal postageFee  = 0;                                                                        //Fee for postage. (totalMailQty * postageRate)
        double  dropFee     = 0;                                                                        //Fee for extra drop. Ex $99
        double  dropPrice   = 0;                                                                        //Fee for additional drops. Ex $99 x number of drops.
        decimal postageRate = 0;                                                                        //Postage Rate

        //Product attributes
        decimal weight        = 0;                                                                       //Comes from Base Product Obj
        decimal WeightPerPage = 0;                                                                       //Used for Shipments Node. (Weight * PageCount) / EDDMSelected

        //various quantities
        int holdQTY     = 0;                                                                            //Obsolete concept. In place just to be safe. AKA 'iHoldQty' Does not apply to OLB.
        int extraCopies = 00;                                                                           //AKA 'iShipQty'. Comes from user. Does not apply to OLB.
        int printQTY    = 0;                                                                            //AKA 'iPrintQty'. (totalSelected + holdQTY + extraCopies)

        //Campaign variables
        int numDrops = 1;                                                                               //Num of drops. AKA iDrops. Default to 1 for OLB.
        int sendThisNumberOfDrops = 0;                                                                  //Adjusted # of Drops to send to oPriceQuote. Work Around.
        //int iFrequency = 0;                                                                           //Every X of weeks - selected in DropDownList. Now stored as Page Property

        //Distribution variables
        bool useBusinesses       = true;                                                                //Flag to use Businesses in distribution.
        bool usePOBoxes          = true;                                                                //Flag to use PO Boxes in distribution.
        bool useResidential      = true;                                                                //Flag to use Residentials in distribution.
        int  daysToAdd           = 1;                                                                   //Used to logically find next drop date. AKA 'weekInterval'
        int  totalDropSelections = 0;                                                                   //Used as a running total to store total 'matches' in the EDDM DataTable
        int  totalAreaSelections = 0;

        //Quote params
        bool    isFlatRateShipping = false;                                                             //Set by Quote Obj.
        decimal flatRateFee        = 0;                                                                 //Comes from QuoteObj.ShipPrice.
        int     flatRateShipQTY    = 1000;                                                              //Hard coded to 1000.



        //Get Design Type.  Set flags
        bool bProDesign = false;

        if (designType == "pro")
        {
            bProDesign = true;
        }

        //In OLB Environment, Template will ALWAYS be the design type.  Normally, designType is set by DropDownList on page.
        bool bTemplateDesign = false;

        if (designType == "template")
        {
            bTemplateDesign = true;
        }



        //Postage Rate
        postageRate = appxCMS.Util.AppSettings.GetDecimal("USPSPostageRate");
        if (postageRate <= 0)
        {
            postageRate = 0.16M;
        }



        //Calculate Stuff / Assign more stuff
        printQTY = CalculatePrintQTY(totalSelected, holdQTY, extraCopies);
        //daysToAdd = (7 * frequency);



        //Multiple Impressions Logic
        //If is Multiple Impressions, change the number of drops to match the number of impressions
        if (numImpressions == 1)
        {
            eddmObjCalc.IsThisAMultiple = false;
            eddmObjCalc.NumOfDrops      = numDrops;
            eddmObjCalc.MailPieces      = totalSelected;

            //Should always be Yes for OLB
            if (mailAllPiecesAtOnce.ToLower() == "yes")
            {
                eddmObjCalc.NumOfDrops = 1;
                numDrops = 1;
            }
        }

        else
        {
            eddmObjCalc.IsThisAMultiple = true;
            eddmObjCalc.NumOfDrops      = numImpressions;
            eddmObjCalc.MailPieces      = (totalSelected * numImpressions);
        }



        //The PriceQuote Obj ADDS on the drop fees based on the number of drops since we are NOT charging for Multiple
        //Impressions on SOME sites set the number of drops to 1 for these sites.
        sendThisNumberOfDrops = eddmObjCalc.NumOfDrops;

        if (multipleImpressionsNoFee)
        {
            sendThisNumberOfDrops = 1;
        }

        if (numDrops == 0)
        {
            numDrops = 1;
        }



        //1) PRODUCT NODE


        //a) Build the Xml Document.  Load <cart /> parent node.
        XmlDocument oXML = new XmlDocument();

        oXML.LoadXml("<cart />");



        //Find and define 'the cart'. Doesn't yet exist in Profile.
        XmlNode oCart = oXML.SelectSingleNode("/cart");



        //b) Begin building Product Node components
        //1) Build Options SortedList (Int, Int)
        SortedList <int, int> productOptions;

        productOptions = new SortedList <int, int>();

        //2) Build OptionCategories List (of ProductOptionCategory)
        List <Taradel.ProductOptionCategory> oOptCats = Taradel.ProductDataSource.GetProductOptionCategories(baseProductID);


        //oPriceMatrix
        //3) Build PriceMatrix
        Taradel.PriceMatrix oPriceMatrix = Taradel.ProductDataSource.GetPriceRange(baseProductID, totalSelected);

        if (oPriceMatrix != null)
        {
            //c) Get PrintMethodID
            printMethodID = oPriceMatrix.PrintMethod.PrintMethodId;

            //d) Loop through OptionCategories, add to Options as needed.
            foreach (Taradel.ProductOptionCategory oOptCat in oOptCats)
            {
                IEnumerable <Taradel.ProductOption> oOpts = default(IEnumerable <Taradel.ProductOption>);
                oOpts = oOptCat.Options.Where((Taradel.ProductOption po) => po.ProductPrintMethodOptions.Any((ppmo => ppmo.PrintMethodReference.ForeignKey() == printMethodID)));
                if (oOpts.Count() > 0)
                {
                    productOptions.Add(oOptCat.OptCatID, 0);
                }
            }
        }

        else
        {
            pnlNormal.Visible    = false;
            pnlError.Visible     = true;
            litErrorMessage.Text = "Uh Oh!  Don't worry but something went wrong. Our IT Staff has been notified and you will be contacted very shortly about this error.";
            EmailUtility.SendAdminEmail("oPriceMatrix IS Null. (TargetDataMap3.aspx)");
        }



        //e) Get the product options from the Selected Product.  Get the OptCatID. ???? Already done??
        Taradel.ProductPriceQuote oPriceQuote = new Taradel.ProductPriceQuote(siteID, baseProductID, totalMailed, holdQTY, extraCopies, distributionID, sendThisNumberOfDrops, productOptions, oCust.ZipCode, bProDesign, bTemplateDesign, 0, "percent");



        //f) Build the Quote object
        //For Each oOpt As Taradel.PMOptionInfo In oPriceQuote.SelectedOptions
        foreach (Taradel.PMOptionInfo oOpt in oPriceQuote.SelectedOptions)
        {
            double  dOptMarkup = 0;
            Boolean bPercent   = false;

            if (oOpt.PriceMatrixOptionMarkup != null)
            {
                dOptMarkup = oOpt.BasePrice;
                bPercent   = oOpt.BaseMarkupPercent;
            }
        }



        //g) Set variables returned from Quote Object.
        //Set Proper Weight, Price, Taxable Price, etc. These values and variables are needed/used later in the code.
        pricePerPiece      = oPriceQuote.PricePerPiece;
        weight             = oPriceQuote.Weight;
        price              = oPriceQuote.Price;
        taxablePrice       = CalculateTaxPrice(price, postageRate, totalMailed);
        isFlatRateShipping = oPriceQuote.IsFlatRateShipping;
        flatRateFee        = oPriceQuote.ShipPrice;
        postageFee         = (totalMailed * postageRate);
        dropFee            = CalculateMultipleImpressionDropFee(eddmObjCalc.NumOfDrops, dropPrice);


        //Set Design Fee Attribute. Store 0 unless Pro was selected.
        if (designType.ToLower() != "pro")
        {
            designFee = 0;
        }



        //h) Finally, insert the Product Node into the Cart
        //ADD THE EDDM PRODUCT NODE

        oCart = (CartUtility.AddProduct(oCart, DateTime.Now.ToString(), baseProductID.ToString(), designFee.ToString(), distributionID.ToString(), flatRateFee.ToString(),
                                        flatRateShipQTY.ToString(), eddmGUID, isFlatRateShipping.ToString(), comments, jobName, productName, paperHeight.ToString(), paperWidth.ToString(),
                                        postageFee.ToString(), price.ToString(), pricePerPiece.ToString(), productID.ToString(), totalMailed.ToString(), siteID.ToString(),
                                        productSKU.ToString(), taxablePrice.ToString(), "EDDM", weight.ToString()));



        //2) EDDM Attribute Nodes
        foreach (Taradel.PMOptionInfo oOpt in oPriceQuote.SelectedOptions)
        {
            double  dOptMarkup = 0;
            Boolean bPercent   = false;

            if (oOpt.PriceMatrixOptionMarkup != null)
            {
                dOptMarkup = oOpt.BasePrice;
                bPercent   = oOpt.BaseMarkupPercent;
            }

            oCart = (CartUtility.AddAttribute(oCart, "EDDM", oOpt.OptCatName, oOpt.OptCatId.ToString(), oOpt.OptionId.ToString(), oOpt.OptName, dOptMarkup.ToString(), bPercent.ToString(), oOpt.Weight.Value.ToString()));
        }



        //Professional Service Attribute
        if (designType == "pro")
        {
            oCart = (CartUtility.AddAttribute(oCart, "EDDM", "Professional Design Services", "0", "1", paperWidth + "x" + paperHeight + " (" + designFee.ToString("C") + ")", designFee.ToString(), "False", "0"));
        }


        //Postage Fee Attribute
        oCart = (CartUtility.AddAttribute(oCart, "EDDM", "Postage Fee", "0", postageFee.ToString(), eddmObjCalc.MailPieces.ToString("N0") + " pieces (" + postageFee.ToString("C") + ")", postageFee.ToString(), "False", "0"));



        //Number of Drops Attribute
        string dropLabel = "";

        if (numImpressions == 1)
        {
            dropLabel = " drop";
        }

        else
        {
            dropLabel = " drops";
        }

        oCart = (CartUtility.AddAttribute(oCart, "EDDM", "Number of Drops", "0", eddmObjCalc.NumOfDrops.ToString(), (numImpressions.ToString() + dropLabel + " (" + extraDropFee.ToString("C") + ")"), dropFee.ToString(), "False", "0"));



        //Drop Schedule Attribute
        oCart = (CartUtility.AddAttribute(oCart, "EDDM", "Drop Schedule", "0", "every " + frequency.ToString() + " weeks", frequency.ToString() + " weeks", "0", "False", "0"));



        //3) EDDM ORDER CALC NODE
        oCart = (CartUtility.AddOrderCalc(oCart, "EDDM", "0", "0", oCust.State, "", "0", "0", "0", "0", "0"));



        //4) EDDM DROPS NODE

        //oDist
        Taradel.CustomerDistribution oDist = Taradel.CustomerDistributions.GetDistribution(distributionID);

        //oUselect
        Taradel.USelectProductConfiguration oUSelect = Taradel.Helper.USelect.GetProduct(oDist.USelectMethodReference.ForeignKey(), baseProductID);

        //oSummary obj
        Taradel.MapServer.UserData.SelectionSummary oSummary = Taradel.CustomerDistributions.GetSelectionSummary(oDist.ReferenceId);


        //oSelects
        List <Taradel.MapServer.UserData.AreaSelection> oSelects = Taradel.CustomerDistributions.GetSelections(oDist.ReferenceId);


        if (oSummary != null)
        {
            useBusinesses = oSummary.UseBusiness;
            usePOBoxes    = oSummary.UsePOBox;
        }

        oCart = (CartUtility.AddDrops(oCart, "EDDM", oCust.Company, oCust.Address1, oCust.Address2, oCust.City, oCust.State, oCust.ZipCode, "", "", useResidential.ToString(), useBusinesses.ToString(), usePOBoxes.ToString()));



        //5) EDDM INDIV DROPS w/ Area Nodes
        int      dropBreak = totalSelected / numImpressions;
        bool     bOnePer   = false;
        DateTime dropDate  = startingDate;


        //Multiple impressions
        if (numImpressions > 1)
        {
            //this is a muliple - so divide back out the tempObjCalc.MailPieces for each drop
            eddmObjCalc.MailPieces = eddmObjCalc.MailPieces / eddmObjCalc.NumOfDrops;
            dropBreak = eddmObjCalc.MailPieces;
            bOnePer   = false;


            //Loop through the drops
            for (int dropNumber = 1; dropNumber <= numImpressions; dropNumber++)
            {
                daysToAdd = ((dropNumber - 1) * (frequency * 7));
                dropDate  = startingDate.AddDays(daysToAdd);

                //Find Prev Friday
                DateTime prevFridayDropDate = dropDate;
                while (prevFridayDropDate.DayOfWeek != DayOfWeek.Friday)
                {
                    prevFridayDropDate = prevFridayDropDate.AddDays(-1);
                }

                //added 2/19/2016
                dropDate = prevFridayDropDate;
                //end added 2/19/2016

                //Add the Drop Nodes

                oCart = CartUtility.AddIndividualDrop(oCart, "EDDM", dropNumber.ToString(), totalMailed.ToString(), dropDate.ToShortDateString(), true, eddmObjCalc.NumOfDrops.ToString());

                Response.Write("totalMailed" + totalMailed.ToString() + "<br />");
                Response.Write("totalSelected" + totalSelected.ToString() + "<br />");


                //new --> rs 1/14/2016
                //CartUtility.AddIndividualDrop(oCart, "EDDM", dropNumber.ToString(), eddmObjCalc.MailPieces.ToString(), dropDate.ToShortDateString(), true, eddmObjCalc.NumOfDrops.ToString());
                //end the new

                //Loop Thru Areas
                foreach (Taradel.MapServer.UserData.AreaSelection oSelect in oSelects)
                {
                    try
                    {
                        totalAreaSelections = oSelect.Residential;

                        if (useBusinesses)
                        {
                            totalAreaSelections = totalAreaSelections + oSelect.Business;
                        }

                        if (usePOBoxes)
                        {
                            totalAreaSelections = totalAreaSelections + oSelect.POBoxes;
                        }


                        //Add each Area Node
                        oCart = CartUtility.AddIndividualArea(oCart, "EDDM", dropNumber.ToString(), oSelect.Name, oSelect.FriendlyName, totalAreaSelections.ToString());

                        totalDropSelections = totalDropSelections + totalAreaSelections;
                    }

                    catch (Exception ex)
                    { }
                }


                //Update total attribute with new value
                oCart = CartUtility.UpdateDropCount(oCart, "EDDM", dropNumber.ToString(), totalDropSelections.ToString());

                //reset
                totalDropSelections = 0;
            }
        }


        //single impression
        else
        {
            dropBreak = totalSelected / numImpressions;

            //oSelects.Count = # of Routes
            //If number of drops is the same as number as the number of routes AND is more than one.
            if (numImpressions == oSelects.Count && numImpressions > 1)
            {
                bOnePer = true;
            }


            for (int dropNumber = 1; dropNumber == numImpressions; dropNumber++)
            {
                DateTime prevFridayDropDate = startingDate;

                //Find the previous Friday
                while (prevFridayDropDate.DayOfWeek != DayOfWeek.Friday)
                {
                    prevFridayDropDate = prevFridayDropDate.AddDays(-1);
                }



                //Add the Drop Nodes
                oCart = CartUtility.AddIndividualDrop(oCart, "EDDM", dropNumber.ToString(), totalMailed.ToString(), dropDate.ToShortDateString(), false, eddmObjCalc.NumOfDrops.ToString());


                //Loop Thru Areas
                foreach (Taradel.MapServer.UserData.AreaSelection oSelect in oSelects)
                {
                    try
                    {
                        totalAreaSelections = oSelect.Residential;

                        if (useBusinesses)
                        {
                            totalAreaSelections = totalAreaSelections + oSelect.Business;
                        }

                        if (usePOBoxes)
                        {
                            totalAreaSelections = totalAreaSelections + oSelect.POBoxes;
                        }


                        //Add each Area Node
                        oCart = CartUtility.AddIndividualArea(oCart, "EDDM", dropNumber.ToString(), oSelect.Name, oSelect.FriendlyName, totalAreaSelections.ToString());

                        totalDropSelections = totalDropSelections + totalAreaSelections;
                    }
                    catch (Exception ex)
                    { }
                }


                //Update total attribute with new value
                oCart = CartUtility.UpdateDropCount(oCart, "EDDM", dropNumber.ToString(), totalDropSelections.ToString());

                //reset
                totalDropSelections = 0;
            }
        }



        //6) EDDM DESIGN NODE
        //Upload and Save the file first and then ...update the cart.
        string sClientBase       = Taradel.WLUtil.GetRelativeSiteImagesPath() + "/UserImages";
        string frontAction       = "";
        string frontFileName     = "";
        string frontFileExt      = "";
        long   frontFileSize     = 0;
        string frontTmpName      = "";
        string frontRealFileName = "";
        string backAction        = "";
        string backFileName      = "";
        string backFileExt       = "";
        long   backFileSize      = 0;
        string backTmpName       = "";
        string backRealFileName  = "";
        bool   hasBackDesign     = false;
        string artKey            = "";
        string requiresProof     = "";



        if (!Directory.Exists(Server.MapPath(sClientBase)))
        {
            Directory.CreateDirectory(Server.MapPath(sClientBase));
        }


        string sClientFolder = sClientBase + "/" + Profile.UserName.Replace("@", "_");
        string sClientPath   = Server.MapPath(sClientFolder);


        DirectoryInfo oDir = new DirectoryInfo(sClientPath);

        if (!oDir.Exists)
        {
            oDir.Create();
        }


        switch (designType.ToLower())
        {
        case "my":
            //logic ommitted because OLB always uses a Template
            break;

        case "template":
            artKey = hidSelectedTemplateID.Value;
            break;
        }


        //Add Design Node
        oCart = (CartUtility.AddDesign(oCart, "EDDM", designType, frontFileExt, frontFileName, frontRealFileName, frontAction, hasBackDesign, backFileExt, backFileName, backRealFileName, backAction, artKey, requiresProof));



        //7) EDDM SHIPMENTS NODE
        WeightPerPage = ((weight * pageCount) / totalSelected);

        if (extraCopies > 0)
        {
            if (deliveryAddressID == "0")
            {
                //Create a new address and get the ID
                string sMsg  = "";
                int    iAddr = Taradel.CustomerAddressDataSource.NewAddress(oCust.CustomerID, "", "", "", "", oCust.Address1.ToString(), oCust.Address2.ToString(), oCust.City.ToString(), oCust.State.ToString(), oCust.ZipCode.ToString(), ref sMsg);

                if (iAddr > 0)
                {
                    deliveryAddressID = iAddr.ToString();
                }
            }
        }

        oCart = (CartUtility.AddShipments(oCart, "EDDM", deliveryAddressID.ToString(), extraCopies.ToString(), weight.ToString(), pageCount.ToString(), paperWidth.ToString(), paperHeight.ToString(), flatRateFee.ToString("N2"), oCust.ZipCode, totalMailed));



        Profile.Cart = oXML;
        Profile.Save();
    }