/// <summary>
        /// Generates a product string for one of the columns in the output file which can be imported into Magento
        /// </summary>
        /// <param name="record">a PaypalRecord</param>
        /// <param name="startNumber"></param>
        /// <returns></returns>
        public static string CreateProductsString(MasterDetails recordMS, int startNumber)
        {
            //generate m.products
            var           record   = (PaypalRecord)recordMS.Master;
            StringBuilder products = new StringBuilder();

            products.Append("\"a:{num}:{");
            var replaceditemTitles = record.ItemTitle.Replace("],", "];");
            var itemTitles         = replaceditemTitles.Split(';');
            var itemIDs            = record.ItemID.Split(',');
            var itemCount          = itemIDs.Length;

            for (int x = 0; x < itemCount; ++x)
            {
                var           itemcountlength       = x.ToString().Length.ToString();
                var           itemdescription       = itemTitles[x];
                var           itemdescriptionlength = itemdescription.Length.ToString();
                var           itemID  = System.Convert.ToDouble(itemIDs[x]);
                StringBuilder product = new StringBuilder();
                product.Append(@"i:{x};a:43:{s:9:""""entity_id"""";s:{itemcountlength}:""""{itemcount}"""";s:14:""""parent_item_id"""";N;s:3:""""sku"""";s:10:""""{SKU}"""";s:15:""""product_options"""";a:1:{s:15:""""info_buyRequest"""";a:1:{s:3:""""qty"""";i:1;}}s:6:""""weight"""";N;s:10:""""is_virtual"""";s:1:""""0"""";s:4:""""name"""";s:{itemdescriptionlength}:""""{itemdescription}"""";s:11:""""description"""";N;s:15:""""additional_data"""";s:141:""""a:1:{s:16:""""m2epro_extension"""";a:1:{s:5:""""items"""";a:1:{i:0;a:2:{s:7:""""item_id"""";s:12:""""{itemID}"""";s:14:""""transaction_id"""";s:13:""""1166311965018"""";}}}}"""";s:13:""""free_shipping"""";s:1:""""0"""";s:14:""""is_qty_decimal"""";N;s:11:""""no_discount"""";s:1:""""0"""";s:15:""""qty_backordered"""";N;s:12:""""qty_canceled"""";s:6:""""0.0000"""";s:12:""""qty_invoiced"""";s:6:""""1.0000"""";s:11:""""qty_ordered"""";s:6:""""1.0000"""";s:12:""""qty_refunded"""";s:6:""""0.0000"""";s:11:""""qty_shipped"""";s:6:""""1.0000"""";s:4:""""cost"""";N;s:6:""""status"""";s:7:""""Shipped"""";s:14:""""original_price"""";s:7:""""{price}"""";s:5:""""price"""";s:7:""""{price}"""";s:10:""""base_price"""";s:7:""""{price}"""";s:3:""""qty"""";N;s:19:""""base_original_price"""";s:7:""""{price}"""";s:11:""""tax_percent"""";s:6:""""0.0000"""";s:10:""""tax_amount"""";s:6:""""0.0000"""";s:15:""""base_tax_amount"""";s:6:""""0.0000"""";s:12:""""tax_invoiced"""";s:6:""""0.0000"""";s:17:""""base_tax_invoiced"""";s:6:""""0.0000"""";s:16:""""discount_percent"""";s:6:""""0.0000"""";s:15:""""discount_amount"""";s:6:""""0.0000"""";s:20:""""base_discount_amount"""";s:6:""""0.0000"""";s:22:""""base_discount_invoiced"""";s:6:""""0.0000"""";s:15:""""amount_refunded"""";s:6:""""0.0000"""";s:20:""""base_amount_refunded"""";s:6:""""0.0000"""";s:9:""""row_total"""";s:7:""""{price}"""";s:14:""""base_row_total"""";s:7:""""{price}"""";s:12:""""row_invoiced"""";s:7:""""{price}"""";s:17:""""base_row_invoiced"""";s:7:""""{price}"""";s:10:""""row_weight"""";s:6:""""0.0000"""";s:24:""""base_tax_before_discount"""";N;s:19:""""tax_before_discount"""";N;}");
                product.Replace("{x}", x.ToString());
                product.Replace("{itemcountlength}", itemcountlength);
                product.Replace("{itemcount}", (x + startNumber).ToString());
                var ebayItem = StringFunctions.ParseEbayItem(itemdescription);
                product.Replace("{SKU}", StringFunctions.GetSKUFromItem(ebayItem));
                product.Replace("{itemdescriptionlength}", itemdescriptionlength);
                product.Replace("{itemdescription}", itemdescription);
                product.Replace("{itemID}", itemID.ToString());
                product.Replace("{price}", record.Gross.ToString("N4"));
                products.Append(product);
            }
            products.Replace("{num}", itemCount.ToString());
            products.Append("}\"");
            return(products.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());
        }