private static string generateInvoiceNumberFromInvoice(InvoiceModel invoice)
 {
     string[] time = invoice.time.Split(':');
     string[] date = invoice.date.Split('-'); // YYYY-mm-dd
     return (date[0].Substring(2))+ date[1]+ date[2] + time[0] + time[1];
     //            return DateTime.Now.ToString("MMddssffff");
 }
 private static void addBillingInfoToInvoiceFromCells(InvoiceModel invoice, string[] cells)
 {
     invoice.city = cells[6];
     invoice.street = cells[4];
     //invoice.vat_number = cells[16];
     invoice.postal_code = cells[8];
 }
        public static Dictionary<string, InvoiceModel> CreateRecurlyInvoices(List<string> contentOfFiles)
        {
            RatesHistoryModel ratesHistory = new RatesHistoryModel();
            Dictionary<String, InvoiceModel> invoices = new Dictionary<string, InvoiceModel>();

            String invoicesRecurly = getBasicInvoicesFromFiles(contentOfFiles);
            String accountsRecurly = getAccountsFromFiles(contentOfFiles);
            String billingsRecurly = getBillingsFromFiles(contentOfFiles);

            if (invoicesRecurly == null) { CSVtoXMLExporter.WarningMessage += "Nepodarilo sa najst invoices subor! "; return null; };
            if (accountsRecurly == null) { CSVtoXMLExporter.WarningMessage += "Nepodarilo sa najst accounts subor! "; return null; };
            if (billingsRecurly == null) { CSVtoXMLExporter.WarningMessage += "Nepodarilo sa najst billings subor! "; return null; };

            string[] lines = CSVSplitter.SplitCsvToLines(invoicesRecurly);
            for (int i = 1; i < lines.Length; ++i)
            {
                var cells = CSVSplitter.SplitCsvLineToCells(lines[i]);
                InvoiceModel invoice = new InvoiceModel();
                invoice = recurlyBasicInvoiceFromCells(invoice, cells);

                if ((invoice != null) && (invoice.line_item_total >= 0))
                {
                    invoice.rate = ratesHistory.getRateForDate(invoice.date, invoice.currency);
                    if (!invoices.ContainsKey(invoice.id) && (!invoice.status.Equals("open")))
                    {
                        invoices.Add(invoice.id, invoice);
                    }
                }
            }

            lines = CSVSplitter.SplitCsvToLines(accountsRecurly);
            for (int i = 1; i < lines.Length; ++i)
            {
                var cells = CSVSplitter.SplitCsvLineToCells(lines[i]);
                var acc_id = cells[0];

                InvoiceModel invoiceWithSameAccID = getInvoiceFromInvoicesByAccountId(invoices, acc_id);

                if (invoiceWithSameAccID != null)
                {
                    addAccountInfoToInvoiceFromCells(invoiceWithSameAccID, cells);
                }
            }

            lines = CSVSplitter.SplitCsvToLines(billingsRecurly);
            for (int i = 1; i < lines.Length; ++i)
            {
                var cells = CSVSplitter.SplitCsvLineToCells(lines[i]);
                var acc_id = cells[0];

                InvoiceModel invoiceWithSameAccID = getInvoiceFromInvoicesByAccountId(invoices, acc_id);

                if (invoiceWithSameAccID != null)
                {
                    addBillingInfoToInvoiceFromCells(invoiceWithSameAccID, cells);
                }
            }
            return invoices;
        }
 private static void addPayPalAccountInfoToInvoiceFromCells(InvoiceModel invoice, string[] cells)
 {
     invoice.plan_code = cells[1];
     invoice.line_item_start_date = cells[3].Substring(0, 10);
     invoice.line_item_end_date = cells[4].Substring(0, 10);
     if(cells[5].Length > 1 && cells[6].Length > 1) invoice.account_name = cells[5] + " " + cells[6];
     invoice.company = cells[7].Replace("&", "&amp;");
     invoice.street = cells[9].Replace("&", "&amp;");
     invoice.city = cells[10].Replace("&", "&amp;");
     invoice.postal_code = cells[11];
     invoice.purchase_country = cells[12];
 }
 private static void addAccountInfoToInvoiceFromCells(InvoiceModel invoice, string[] cells)
 {
     invoice.company = cells[3].Replace("&", "&amp;"); ;
 }
        private static InvoiceModel recurlyBasicInvoiceFromCells(InvoiceModel invoice, string[] cells)
        {
            if (invoice == null)
            {
                invoice = new InvoiceModel();
            }
            invoice.id = cells[0];
            invoice.account_code = cells[1];
            invoice.account_name = cells[2];
            invoice.invoice_number = cells[3];
            invoice.subscription_id = cells[4];
            invoice.plan_code = cells[5];
            invoice.coupon_code = cells[6];
            invoice.total = Convert.ToDecimal(cells[7].Replace('.', ','));
            invoice.subtotal = Convert.ToDecimal(cells[8].Replace('.', ','));
            invoice.vat_amount = cells[9];
            invoice.currency = cells[10];
            invoice.date = cells[11].Substring(0, 10);
            invoice.status = cells[12];

            if (invoice.status.Equals("open"))
            {
                return null;
            }

            invoice.closed_at = cells[13].Length > 10 ? cells[13].Substring(0, 10) : invoice.date;
            invoice.purchase_country = cells[14];
            invoice.vat_number = cells[15];
            invoice.line_item_total = Convert.ToDecimal(cells[16].Replace('.', ','));
            invoice.line_item_description = cells[17];
            invoice.line_item_origin = cells[18];
            invoice.line_item_product_code = cells[19];
            invoice.line_item_accounting_code = cells[20];
            invoice.line_item_start_date = cells[21].Substring(0, 10);
            invoice.line_item_end_date = cells[21].Substring(0, 10);
            invoice.net_terms = cells[23];
            invoice.po_number = cells[24];
            invoice.collection_method = cells[25];
            invoice.line_item_uuid = cells[26];

            return invoice;
        }
        private static InvoiceModel paypalInvoiceFromCells(string[] cells)
        {
            if (!isItemIDInPayPalCellAllowed(cells[20])) return null; //itemId identifikator

            InvoiceModel invoice = new InvoiceModel();
            string[] date = cells[0].Split('/');
            if (date[0].Length == 1) date[0] = "0"+date[0];
            if (date[1].Length == 1) date[1] = "0" + date[1];
            invoice.date = date[2] + '-' + date[0] + '-' + date[1];//date
            invoice.account_name = cells[3];
            invoice.closed_at = invoice.date;
            invoice.time = cells[1]; // time
            invoice.account_name = cells[3]; //name
            invoice.currency = cells[7]; //currency
            invoice.total = Convert.ToDecimal(cells[8]); //gross
            invoice.subtotal = Convert.ToDecimal(cells[10]); // Net
            invoice.email = cells[12]; // from email
            invoice.email_to = cells[13]; // to email
            invoice.transactionId = cells[14]; //Transaction ID
            invoice.line_item_description = cells[19]; //item title

            invoice.invoice_number = invoice.transactionId;
            return invoice;
        }