public static string CreateBillingString(PaypalRecord record, int ID)
        {
            StringBuilder shipping = new StringBuilder();

            shipping.Append(@"""a:25:{s:9:""""parent_id"""";s:{idlength}:""""{id}"""";s:19:""""customer_address_id"""";N;s:16:""""quote_address_id"""";N;s:9:""""region_id"""";s:1:""""1"""";s:11:""""customer_id"""";N;s:3:""""fax"""";N;s:6:""""region"""";s:{regionlength}:""""{region}"""";s:8:""""postcode"""";s:{postcodelength}:""""{postcode}"""";s:8:""""lastname"""";s:{lastnamelength}:""""{lastname}"""";s:6:""""street"""";s:{streetlength}:""""{street}"""";s:4:""""city"""";s:{citylength}:""""{city}"""";s:5:""""email"""";s:{emaillength}:""""{email}"""";s:9:""""telephone"""";N;s:10:""""country_id"""";s:2:""""{countryID}"""";s:9:""""firstname"""";s:{firstnamelength}:""""{firstname}"""";s:12:""""address_type"""";s:7:""""billing"""";s:6:""""prefix"""";N;s:10:""""middlename"""";N;s:6:""""suffix"""";N;s:7:""""company"""";N;s:6:""""vat_id"""";N;s:12:""""vat_is_valid"""";N;s:14:""""vat_request_id"""";N;s:16:""""vat_request_date"""";N;s:19:""""vat_request_success"""";N;}""");
            shipping.Replace("{id}", ID.ToString());
            shipping.Replace("{idlength}", ID.ToString().Length.ToString());
            shipping.Replace("{postcode}", record.Postcode);
            shipping.Replace("{postcodelength}", record.Postcode.Length.ToString());
            var name = StringFunctions.ParseName(record.FullName);

            shipping.Replace("{firstname}", name.FirstName);
            shipping.Replace("{firstnamelength}", name.FirstName.Length.ToString());
            shipping.Replace("{lastname}", name.LastName);
            shipping.Replace("{lastnamelength}", name.LastName.Length.ToString());
            shipping.Replace("{street}", record.AddressLine1);
            shipping.Replace("{streetlength}", record.AddressLine1.Length.ToString());
            shipping.Replace("{region}", record.StateorCounty);
            shipping.Replace("{regionlength}", record.StateorCounty.Length.ToString());
            shipping.Replace("{city}", record.TownorCity);
            shipping.Replace("{citylength}", record.TownorCity.Length.ToString());
            shipping.Replace("{email}", record.FromEmailAddress);
            shipping.Replace("{emaillength}", record.FromEmailAddress.Length.ToString());
            var regions = CultureInfo.GetCultures(CultureTypes.SpecificCultures);//.Select(x => new RegionInfo(x.LCID));

            foreach (CultureInfo cultureinfo in regions)
            {
                if (cultureinfo.EnglishName.Contains(record.Country))
                {
                    var regionInfo = new RegionInfo(cultureinfo.LCID);
                    shipping.Replace("{countryID}", regionInfo.TwoLetterISORegionName);
                    break;
                }
            }
            return(shipping.ToString());
        }
        public static string CreateInvoicesString(MasterDetails masterDetail, int startNumber, int billingAddressID, int shippingAddressID)
        {
            StringBuilder invoicestring = new StringBuilder();
            var           record        = (PaypalRecord)masterDetail.Master;
            var           recordDetails = (object[])masterDetail.Details;

            invoicestring.Append(@"""a:1:{i:0;a:44:{s:8:""""store_id"""";s:1:""""1"""";s:16:""""base_grand_total"""";s:{grandtotallength}:""""{grandtotal}"""";s:19:""""shipping_tax_amount"""";s:6:""""0.0000"""";s:10:""""tax_amount"""";s:{vatlength}:""""{vat}"""";s:15:""""base_tax_amount"""";s:{vatlength}:""""{vat}"""";s:19:""""store_to_order_rate"""";s:6:""""1.0000"""";s:24:""""base_shipping_tax_amount"""";s:6:""""0.0000"""";s:20:""""base_discount_amount"""";s:6:""""0.0000"""";s:18:""""base_to_order_rate"""";s:6:""""1.0000"""";s:11:""""grand_total"""";s:{grandtotallength}:""""{grandtotal}"""";s:15:""""shipping_amount"""";s:{shippingcostlength}:""""{shippingcost}"""";s:17:""""subtotal_incl_tax"""";s:{subtotalincvatlength}:""""{subtotalincvat}"""";s:22:""""base_subtotal_incl_tax"""";s:{subtotalincvatlength}:""""{subtotalincvat}"""";s:18:""""store_to_base_rate"""";s:6:""""1.0000"""";s:20:""""base_shipping_amount"""";s:{shippingcostlength}:""""{shippingcost}"""";s:9:""""total_qty"""";s:6:""""1.0000"""";s:19:""""base_to_global_rate"""";s:6:""""1.0000"""";s:8:""""subtotal"""";s:{subtotalexvatlength}:""""{subtotalexvat}"""";s:13:""""base_subtotal"""";s:{subtotalexvatlength}:""""{subtotalexvat}"""";s:15:""""discount_amount"""";s:6:""""0.0000"""";s:18:""""billing_address_id"""";s:{billingaddressidlength}:""""{billingaddressid}"""";s:18:""""is_used_for_refund"""";N;s:8:""""order_id"""";s:{orderidlength}:""""{orderid}"""";s:10:""""email_sent"""";N;s:13:""""can_void_flag"""";s:1:""""0"""";s:5:""""state"""";s:1:""""2"""";s:19:""""shipping_address_id"""";s:{shippingaddressidlength}:""""{shippingaddressid}"""";s:19:""""store_currency_code"""";s:3:""""GBP"""";s:14:""""transaction_id"""";N;s:19:""""order_currency_code"""";s:3:""""GBP"""";s:18:""""base_currency_code"""";s:3:""""GBP"""";s:20:""""global_currency_code"""";s:3:""""GBP"""";s:12:""""increment_id"""";s:{incrementidlength}:""""{incrementid}"""";s:10:""""created_at"""";s:{orderdatetimelength}:""""{orderdatetime}"""";s:10:""""updated_at"""";s:19:""""2014-02-27 18:00:45"""";s:17:""""hidden_tax_amount"""";s:6:""""0.0000"""";s:22:""""base_hidden_tax_amount"""";s:6:""""0.0000"""";s:26:""""shipping_hidden_tax_amount"""";s:6:""""0.0000"""";s:29:""""base_shipping_hidden_tax_amnt"""";N;s:17:""""shipping_incl_tax"""";s:{postagecostincvatlength}:""""{postagecostincvat}"""";s:22:""""base_shipping_incl_tax"""";s:{postagecostincvatlength}:""""{postagecostincvat}"""";s:19:""""base_total_refunded"""";N;s:20:""""discount_description"""";N;s:5:""""items"""";a:{totalnumberofitems}:");
            invoicestring.Replace("{grandtotal}", record.Gross.ToString("N4"));
            invoicestring.Replace("{grandtotallength}", record.Gross.ToString("N4").Length.ToString());
            invoicestring.Replace("{vat}", "0.0000");
            invoicestring.Replace("{vatlength}", "6");
            invoicestring.Replace("{shippingcost}", record.PostageandPackagingAmount.ToString("N4"));
            invoicestring.Replace("{shippingcostlength}", record.PostageandPackagingAmount.ToString("N4").Length.ToString());
            invoicestring.Replace("{subtotalincvat}", (record.Gross - record.PostageandPackagingAmount).ToString("N4"));
            invoicestring.Replace("{subtotalincvatlength}", (record.Gross - record.PostageandPackagingAmount).ToString("N4").Length.ToString());
            invoicestring.Replace("{subtotalexvat}", (record.Gross - record.PostageandPackagingAmount).ToString("N4"));
            invoicestring.Replace("{subtotalexvatlength}", (record.Gross - record.PostageandPackagingAmount).ToString("N4").Length.ToString());
            //goes up in increments of 2, starting at 1
            invoicestring.Replace("{billingaddressid}", billingAddressID.ToString());
            invoicestring.Replace("{billingaddressidlength}", billingAddressID.ToString().Length.ToString());
            invoicestring.Replace("{orderid}", startNumber.ToString());
            invoicestring.Replace("{orderidlength}", startNumber.ToString().Length.ToString());
            //goes up in increments of 2, starting at 2
            invoicestring.Replace("{shippingaddressid}", shippingAddressID.ToString());
            invoicestring.Replace("{shippingaddressidlength}", shippingAddressID.ToString().Length.ToString());
            invoicestring.Replace("{incrementid}", (startNumber + 100000000).ToString());
            invoicestring.Replace("{incrementidlength}", (startNumber + 100000000).ToString().Length.ToString());
            var datetimestring = record.OrderDate.ToString("yyyy-MM-dd") + " " + record.OrderTime.ToLongTimeString();

            invoicestring.Replace("{orderdatetime}", datetimestring);
            invoicestring.Replace("{orderdatetimelength}", datetimestring.Length.ToString());
            invoicestring.Replace("{postagecostincvat}", record.PostageandPackagingAmount.ToString("N4"));
            invoicestring.Replace("{postagecostincvatlength}", record.PostageandPackagingAmount.ToString("N4").Length.ToString());
            invoicestring.Replace("{totalnumberofitems}", recordDetails.Length.ToString());
            invoicestring.Append("{");
            const string itemstring = @"i:{itemnumber};a:34:{s:9:""""entity_id"""";s:{entityIDlength}:""""{entityID}"""";s:9:""""parent_id"""";s:{parentidlength}:""""{parentid}"""";s:10:""""base_price"""";s:{itemcostlength}:""""{itemcost}"""";s:10:""""tax_amount"""";s:6:""""0.0000"""";s:14:""""base_row_total"""";s:{itemcostlength}:""""{itemcost}"""";s:15:""""discount_amount"""";N;s:9:""""row_total"""";s:{itemcostlength}:""""{itemcost}"""";s:20:""""base_discount_amount"""";N;s:14:""""price_incl_tax"""";s:{itemcostlength}:""""{itemcost}"""";s:15:""""base_tax_amount"""";s:6:""""0.0000"""";s:19:""""base_price_incl_tax"""";s:{itemcostlength}:""""{itemcost}"""";s:3:""""qty"""";s:6:""""1.0000"""";s:9:""""base_cost"""";N;s:5:""""price"""";s:{itemcostlength}:""""{itemcost}"""";s:23:""""base_row_total_incl_tax"""";s:{itemcostlength}:""""{itemcost}"""";s:18:""""row_total_incl_tax"""";s:{itemcostlength}:""""{itemcost}"""";s:10:""""product_id"""";s:{productIDlength}:""""{productID}"""";s:13:""""order_item_id"""";s:{orderitemIDlength}:""""{orderitemID}"""";s:15:""""additional_data"""";N;s:11:""""description"""";N;s:3:""""sku"""";s:10:""""{SKU}"""";s:4:""""name"""";s:{itemdescriptionlength}:""""{itemdescription}"""";s:17:""""hidden_tax_amount"""";s:6:""""0.0000"""";s:22:""""base_hidden_tax_amount"""";s:6:""""0.0000"""";s:28:""""base_weee_tax_applied_amount"""";s:6:""""0.0000"""";s:30:""""base_weee_tax_applied_row_amnt"""";s:6:""""0.0000"""";s:32:""""base_weee_tax_applied_row_amount"""";s:6:""""0.0000"""";s:23:""""weee_tax_applied_amount"""";s:6:""""0.0000"""";s:27:""""weee_tax_applied_row_amount"""";s:6:""""0.0000"""";s:16:""""weee_tax_applied"""";s:6:""""a:0:{}"""";s:20:""""weee_tax_disposition"""";s:6:""""0.0000"""";s:24:""""weee_tax_row_disposition"""";s:6:""""0.0000"""";s:25:""""base_weee_tax_disposition"""";s:6:""""0.0000"""";s:29:""""base_weee_tax_row_disposition"""";s:6:""""0.0000"""";}";

            for (int x = 0; x < recordDetails.Length; x++)
            {
                var recorddetail = (PaypalRecord)recordDetails[x];
                invoicestring.Append(itemstring);
                invoicestring.Replace("{entityID}", totalItemCount.ToString()); //this goes up once per product
                invoicestring.Replace("{entityIDlength}", totalItemCount.ToString().Length.ToString());
                invoicestring.Replace("{orderitemID}", totalItemCount.ToString());
                invoicestring.Replace("{orderitemIDlength}", totalItemCount.ToString().Length.ToString());
                invoicestring.Replace("{itemnumber}", x.ToString());
                invoicestring.Replace("{parentid}", startNumber.ToString());
                invoicestring.Replace("{parentidlength}", startNumber.ToString().Length.ToString());
                invoicestring.Replace("{itemcost}", recorddetail.Gross.ToString("N4"));
                invoicestring.Replace("{itemcostlength}", recorddetail.Gross.ToString("N4").Length.ToString());
                var ebayItem = StringFunctions.ParseEbayItem(recorddetail.ItemTitle);
                //invoicestring.Replace("{SKU}", StringFunctions.GetSKUFromItem(ebayItem));
                invoicestring.Replace("{SKU}", "MHZA006OOL");
                invoicestring.Replace("{itemdescription}", recorddetail.ItemTitle);
                invoicestring.Replace("{itemdescriptionlength}", recorddetail.ItemTitle.Length.ToString());
                //this is the Magento ITEM ID from products
                invoicestring.Replace("{productID}", "27");
                invoicestring.Replace("{productIDlength}", "2");
                totalItemCount++;
            }
            invoicestring.Append(@"}}}""");
            return(invoicestring.ToString());
        }
        public static string CreateShipmentString(MasterDetails masterDetail, int startNumber)
        {
            StringBuilder shipments     = new StringBuilder();
            var           record        = (PaypalRecord)masterDetail.Master;
            var           recordDetails = (object[])masterDetail.Details;

            shipments.Append(@"""a:1:{i:0;a:15:{s:8:""""store_id"""";s:1:""""1"""";s:12:""""total_weight"""";N;s:9:""""total_qty"""";s:{totalnumberofitemscount}:""""{totalnumberofitems}"""";s:10:""""email_sent"""";N;s:8:""""order_id"""";s:{orderidlength}:""""{orderid}"""";s:11:""""customer_id"""";N;s:19:""""shipping_address_id"""";s:{shippingaddressidlength}:""""{shippingaddressid}"""";s:18:""""billing_address_id"""";s:{billingaddressidlength}:""""{billingaddressid}"""";s:15:""""shipment_status"""";N;s:12:""""increment_id"""";s:{incrementidlength}:""""{incrementid}"""";s:10:""""created_at"""";s:{orderdatetimelength}:""""{orderdatetime}"""";s:10:""""updated_at"""";s:19:""""2014-02-27 18:01:35"""";s:8:""""packages"""";N;s:14:""""shipping_label"""";N;s:5:""""items"""";a:{totalitems}:{");
            shipments.Replace("{totalnumberofitems}", recordDetails.Length.ToString("N4"));
            shipments.Replace("{totalnumberofitemscount}", recordDetails.Length.ToString("N4").Length.ToString());
            shipments.Replace("{totalitems}", recordDetails.Length.ToString());
            shipments.Replace("{orderid}", startNumber.ToString());
            shipments.Replace("{orderidlength}", startNumber.ToString().Length.ToString());
            //goes up in increments of 2, starting at 1
            shipments.Replace("{billingaddressid}", startNumber.ToString());
            shipments.Replace("{billingaddressidlength}", startNumber.ToString().Length.ToString());
            //goes up in increments of 2, starting at 2
            shipments.Replace("{shippingaddressid}", (startNumber + 1).ToString());
            shipments.Replace("{shippingaddressidlength}", (startNumber + 1).ToString().Length.ToString());
            var incrementid = startNumber + 100000000;

            shipments.Replace("{incrementid}", incrementid.ToString());
            shipments.Replace("{incrementidlength}", incrementid.ToString().Length.ToString());
            var datetimestring = record.OrderDate.ToString("yyyy-MM-dd") + " " + record.OrderTime.ToString("HH:mm:ss");

            shipments.Replace("{orderdatetime}", datetimestring);
            shipments.Replace("{orderdatetimelength}", datetimestring.Length.ToString());
            shipments.Replace("{grandtotal}", record.Gross.ToString("N4"));
            shipments.Replace("{grandtotallength}", record.Gross.ToString("N4").Length.ToString());
            shipments.Replace("{vat}", "0.0000");
            shipments.Replace("{vatlength}", "6");
            shipments.Replace("{shippingcost}", record.PostageandPackagingAmount.ToString("N4"));
            shipments.Replace("{shippingcostlength}", record.PostageandPackagingAmount.ToString("N4").Length.ToString());
            shipments.Replace("{subtotalincvat}", (record.Gross - record.PostageandPackagingAmount).ToString("N4"));
            shipments.Replace("{subtotalincvatlength}", (record.Gross - record.PostageandPackagingAmount).ToString("N4").Length.ToString());
            shipments.Replace("{subtotalexvat}", (record.Gross - record.PostageandPackagingAmount).ToString("N4"));
            shipments.Replace("{subtotalexvatlength}", (record.Gross - record.PostageandPackagingAmount).ToString("N4").Length.ToString());
            shipments.Replace("{postagecostincvat}", record.PostageandPackagingAmount.ToString("N4"));
            shipments.Replace("{postagecostincvatlength}", record.PostageandPackagingAmount.ToString("N4").Length.ToString());
            const string itemstring = @"i:{itemnumber};a:12:{s:9:""""entity_id"""";s:{totalitemcountlength}:""""{totalitemcount}"""";s:9:""""parent_id"""";s:{parentidlength}:""""{parentid}"""";s:9:""""row_total"""";N;s:5:""""price"""";s:{itemcostlength}:""""{itemcost}"""";s:6:""""weight"""";N;s:3:""""qty"""";s:6:""""1.0000"""";s:10:""""product_id"""";N;s:13:""""order_item_id"""";s:{totalitemcountlength}:""""{totalitemcount}"""";s:15:""""additional_data"""";N;s:11:""""description"""";N;s:4:""""name"""";s:{itemdescriptionlength}:""""{itemdescription}"""";s:3:""""sku"""";s:{SKUlength}:""""{SKU}"""";}";

            for (int x = 0; x < recordDetails.Length; ++x)
            {
                totalShipmentsCount++;
                var recorddetail = (PaypalRecord)recordDetails[x];
                shipments.Append(itemstring);
                shipments.Replace("{itemnumber}", x.ToString());
                shipments.Replace("{totalitemcount}", (totalShipmentsCount).ToString());
                shipments.Replace("{totalitemcountlength}", (totalShipmentsCount).ToString().Length.ToString());
                shipments.Replace("{parentid}", startNumber.ToString());
                shipments.Replace("{parentidlength}", startNumber.ToString().Length.ToString());
                shipments.Replace("{itemcost}", recorddetail.Gross.ToString("N4"));
                shipments.Replace("{itemcostlength}", recorddetail.Gross.ToString("N4").Length.ToString());
                var ebayItem = StringFunctions.ParseEbayItem(recorddetail.ItemTitle);
                shipments.Replace("{SKU}", StringFunctions.GetSKUFromItem(ebayItem));
                shipments.Replace("{SKUlength}", StringFunctions.GetSKUFromItem(ebayItem).ToString().Length.ToString());
                shipments.Replace("{itemdescription}", recorddetail.ItemTitle);
                shipments.Replace("{itemdescriptionlength}", recorddetail.ItemTitle.Length.ToString());
            }
            shipments.Append(@"}}}""");
            totalShipmentsCount = 0; //reset for the unit tests
            return(shipments.ToString());
        }