Working on import of uptra billing invoices and payments
authorSteve Sutton <steve@gaslightmedia.com>
Wed, 26 Dec 2018 21:52:48 +0000 (16:52 -0500)
committerSteve Sutton <steve@gaslightmedia.com>
Wed, 26 Dec 2018 21:52:48 +0000 (16:52 -0500)
Adding new field for invoices for the old_invoice_id.

classes/billingSupport.php
index.php
models/admin/ajax/exportQIF.php
models/admin/billing/invoicing.php
models/admin/management/billing.php
models/admin/management/importBillingData.php [new file with mode: 0644]
setup/databaseScripts/create_database_V0.0.31.sql [deleted file]
setup/databaseScripts/create_database_V0.0.32.sql [new file with mode: 0644]
setup/databaseScripts/dbVersions.php
setup/databaseScripts/update_database_V0.0.32.sql [new file with mode: 0644]
views/admin/management/importAccounts.html

index c618275..319c1ee 100644 (file)
@@ -145,35 +145,37 @@ class GlmBillingSupport
 
             // Get the unpaid invoices
             $oldInvoices = $this->getUnPaidInvoicesByAccount( $account );
-            foreach ( $oldInvoices as $key => $inv ) {
-                if ( in_array( $inv['id'], $invoices ) ) {
-                    unset( $oldInvoices[$key] );
+            if ( $oldInvoices ) {
+                foreach ( $oldInvoices as $key => $inv ) {
+                    if ( in_array( $inv['id'], $invoices ) ) {
+                        unset( $oldInvoices[$key] );
+                    }
                 }
-            }
-            // Need to exclude any invoices already done ($invoices)
-            if ( $oldInvoices && is_array( $oldInvoices ) && count( $oldInvoices ) > 0 ) {
-                foreach ( $oldInvoices as $invoice ) {
-                    $balance = (float)$invoice['balance'];
-                    if ( $payment == $invoice['balance'] ) {
-                        // Mark this as paid then
-                        $this->updateInvoiceBalance( $invoice['id'], (float)0.00 );
-                        // Record the payment to the invoice_payments table
-                        $this->recordInvoicePayment( $invoice['id'], $payment_id, $balance );
-                        // $payment is used up so break from the foreach loop
-                        break;
-                    } else if ( $payment > $invoice['balance'] ) {
-                        $this->updateInvoiceBalance( $invoice['id'], (float)0.00 );
-                        $payment -= $invoice['balance'];
-                        // Record the payment to the invoice_payments table
-                        $this->recordInvoicePayment( $invoice['id'], $payment_id, $balance );
-                    } else if ( $invoice['balance'] > $payment ) {
-                        // Update the balance of the invoice
-                        $balance = (float)$balance - (float)$payment;
-                        $this->updateInvoiceBalance( $invoice['id'], (float)$balance );
-                        // Record the payment to the invoice_payments table
-                        $this->recordInvoicePayment( $invoice['id'], $payment_id, (float)$payment );
-                        // $payment is used up so break from the foreach loop
-                        break;
+                // Need to exclude any invoices already done ($invoices)
+                if ( $oldInvoices && is_array( $oldInvoices ) && count( $oldInvoices ) > 0 ) {
+                    foreach ( $oldInvoices as $invoice ) {
+                        $balance = (float)$invoice['balance'];
+                        if ( $payment == $invoice['balance'] ) {
+                            // Mark this as paid then
+                            $this->updateInvoiceBalance( $invoice['id'], (float)0.00 );
+                            // Record the payment to the invoice_payments table
+                            $this->recordInvoicePayment( $invoice['id'], $payment_id, $balance );
+                            // $payment is used up so break from the foreach loop
+                            break;
+                        } else if ( $payment > $invoice['balance'] ) {
+                            $this->updateInvoiceBalance( $invoice['id'], (float)0.00 );
+                            $payment -= $invoice['balance'];
+                            // Record the payment to the invoice_payments table
+                            $this->recordInvoicePayment( $invoice['id'], $payment_id, $balance );
+                        } else if ( $invoice['balance'] > $payment ) {
+                            // Update the balance of the invoice
+                            $balance = (float)$balance - (float)$payment;
+                            $this->updateInvoiceBalance( $invoice['id'], (float)$balance );
+                            // Record the payment to the invoice_payments table
+                            $this->recordInvoicePayment( $invoice['id'], $payment_id, (float)$payment );
+                            // $payment is used up so break from the foreach loop
+                            break;
+                        }
                     }
                 }
             }
index 27fb5cf..2d2ad0c 100644 (file)
--- a/index.php
+++ b/index.php
@@ -38,7 +38,7 @@
  *  version from this plugin.
  */
 define('GLM_MEMBERS_BILLING_PLUGIN_VERSION', '1.0.16');
-define('GLM_MEMBERS_BILLING_PLUGIN_DB_VERSION', '0.0.31');
+define('GLM_MEMBERS_BILLING_PLUGIN_DB_VERSION', '0.0.32');
 
 // This is the minimum version of the GLM Members DB plugin require for this plugin.
 define('GLM_MEMBERS_BILLING_PLUGIN_MIN_MEMBERS_REQUIRED_VERSION', '2.8.0');
index b1d707e..bbb8c7c 100644 (file)
@@ -81,7 +81,8 @@ class GlmMembersAdmin_ajax_exportQIF extends GlmDataTransactions
 
     public function modelAction( $actionData = false )
     {
-        $fileData = array();
+        $fileData     = array();
+        $paymentTypes = array();
 
         $BillingSupport = new GlmBillingSupport( $this->wpdb, $this->config );
 
@@ -141,35 +142,56 @@ class GlmMembersAdmin_ajax_exportQIF extends GlmDataTransactions
         $this->member_data = false;
         $this->notes       = false;
 
+
         // Open file pointer to php://output (Direct to browser)
         $fp = fopen( 'php://output', 'w' );
 
-        $paymentTypes = $BillingSupport->getAllInvoiceTypes();
 
+        $paymentTypeData = $BillingSupport->getAllInvoiceTypes();
+
+        if ( $paymentTypeData ) {
+            foreach ( $paymentTypeData as $payType ) {
+                $paymentTypes[$payType['id']] = $payType;
+            }
+        }
+
+        // echo '<pre>$paymentTypes: ' . print_r( $paymentTypes, true ) . '</pre>';
+        // echo '<pre>$transactions: ' . print_r( $transactions, true ) . '</pre>';
+        // exit;
         // Generate the QIF format data
         $fileData[] = "!Type:Bank\n";
         foreach ( $transactions as $record ) {
+            // echo '<pre>$record: ' . print_r( $record, true ) . '</pre>';
             switch ( $record['type'] ) {
             case $this->config['transaction_numb']['Payment']:
-                $paymentType = $paymentTypes[$record['type_id']];
-                if ( $paymentType ) {
-                    $fileData[] = sprintf(
-                        self::PAYMENTFORMAT,
-                        date( 'm/d/Y', strtotime( $record['transaction_time']['datetime'] ) ), // D
-                        '-' . $record['current_payment_total'], // T
-                        $record['member_name'], // P
-                        preg_replace(
-                            '[0-9]',
-                            '',
-                            $record['notes']
-                        ), // N
-                        $paymentType['category'], // M
-                        $paymentType['qcode'] // L
-                    );
+                $account     = $BillingSupport->getAccountById( $record['type_id'] );
+                if ( $account ) {
+                    $paymentType = $paymentTypes[$account['invoice_type']];
+                    // echo '<pre>$paymentType: ' . print_r( $paymentType, true ) . '</pre>';
+                    if ( $paymentType ) {
+                        $fileData[] = sprintf(
+                            self::PAYMENTFORMAT,
+                            date( 'm/d/Y', strtotime( $record['transaction_time']['datetime'] ) ), // D
+                            '-' . $record['current_payment_total'], // T
+                            $record['member_name'], // P
+                            preg_replace(
+                                '[0-9]',
+                                '',
+                                $record['notes']
+                            ), // N
+                            $paymentType['category'], // M
+                            $paymentType['qcode'] // L
+                        );
+                    }
                 }
                 break;
             }
         }
+
+        // echo '<pre>$fileData: ' . print_r( $fileData, true ) . '</pre>';
+        // exit;
+
+
         $buf = implode( '', $fileData );
         $len = strlen( $buf );
 
index 8feea0f..4ea6c2d 100644 (file)
@@ -115,23 +115,17 @@ class GlmMembersAdmin_billing_invoicing //extends GlmDataAccounts
         $Accounts       = new GlmDataAccounts( $this->wpdb, $this->config );
 
         if ( isset( $_REQUEST['invoice_types'] ) ) {
-
             $invoiceTypes = $_REQUEST['invoice_types'];
             $wParts[] = " T.invoice_type IN (" . implode(',', $invoiceTypes) . ") ";
-
         }
 
         if ( isset( $_REQUEST['counties'] ) ) {
-
             $countiesSelected = $_REQUEST['counties'];
             $wParts[] = "T.billing_county IN (" . implode(',', $countiesSelected ) . ")";
-
         }
 
         if ( isset( $_REQUEST['submitType'] ) ) {
-
             $option2 = filter_var( $_REQUEST['submitType'], FILTER_SANITIZE_STRING );
-
         }
 
         // Do selected option
@@ -163,7 +157,6 @@ class GlmMembersAdmin_billing_invoicing //extends GlmDataAccounts
             $view = 'invoicing';
 
             if ( $option2 ) {
-
                 // $where used in all places.
                 $where    = implode( ' AND ', $wParts );
                 $accounts = $Accounts->getSimpleAccountList( $where );
index 03452ee..2d5407a 100644 (file)
@@ -164,6 +164,23 @@ class GlmMembersAdmin_management_billing extends GlmDataBillingManagement
 
                 break;
 
+            case 'importBillingData':
+                $view = 'importAccounts';
+                if ( isset( $_REQUEST['option2'] ) ) {
+                    $option2 = $_REQUEST['option2'];
+                }
+                if ( !isset( $option2 ) ) {
+                    $option2 = '';
+                }
+                switch ( $option2 ) {
+                case 'import':
+                    require_once GLM_MEMBERS_BILLING_PLUGIN_PATH.'/models/admin/management/importBillingData.php';
+                    break;
+                default:
+                    break;
+                }
+                break;
+
             case 'importAccounts':
                 $view = 'importAccounts';
                 if ( isset( $_REQUEST['option2'] ) ) {
diff --git a/models/admin/management/importBillingData.php b/models/admin/management/importBillingData.php
new file mode 100644 (file)
index 0000000..6b095fc
--- /dev/null
@@ -0,0 +1,211 @@
+<?php
+/**
+ * Import Billing Data (UPTRA)
+ */
+// For billing support functions
+require_once GLM_MEMBERS_BILLING_PLUGIN_CLASS_PATH . '/billingSupport.php';
+$BillingSupport = new GlmBillingSupport( $this->wpdb, $this->config );
+
+// Connect to their live database.
+$dbh = new PDO(
+    'pgsql: host=ds4.gaslightmedia.com dbname=uptravel user=nobody',
+    null,
+    null,
+    array(
+        PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC
+    )
+);
+
+$dbh->setAttribute(
+    PDO::ATTR_ERRMODE,
+    PDO::ERRMODE_EXCEPTION
+);
+
+if ( isset( $_REQUEST['start'] ) && $start = filter_var( $_REQUEST['start'], FILTER_VALIDATE_INT ) ) {
+} else {
+    $start = 0;
+}
+
+$importResults = '';
+
+// Get total number of records.
+$sql = "
+SELECT *
+  FROM members.billing
+ WHERE invoice_id IN (
+       SELECT invoice_id
+         FROM members.billing
+        WHERE transaction_date >= '2018-01-01'
+          AND billing_type = 1
+        ORDER BY transaction_date,transaction_time
+        LIMIT 10 OFFSET 0)
+   AND billing_type IN (1, 2)
+ ORDER BY transaction_date,transaction_time
+ LIMIT 20
+OFFSET 0";
+
+//LIMIT 10
+//OFFSET $start";
+$stmt           = $dbh->query( $sql );
+$billingRecords = $stmt->fetchAll();
+
+$importResults .= '<pre>$billingRecords: ' . print_r( $billingRecords, true ) . '</pre>';
+
+if ( $start === 0 ) {
+    // Clear the invoices,line_items and transactions
+    $this->wpdb->query( "DELETE FROM " . GLM_MEMBERS_BILLING_PLUGIN_DB_PREFIX . "invoices" );
+    $this->wpdb->query( "DELETE FROM " . GLM_MEMBERS_BILLING_PLUGIN_DB_PREFIX . "line_items" );
+    $this->wpdb->query( "DELETE FROM " . GLM_MEMBERS_BILLING_PLUGIN_DB_PREFIX . "transactions" );
+    $this->wpdb->query( "DELETE FROM " . GLM_MEMBERS_BILLING_PLUGIN_DB_PREFIX . "payments" );
+    $this->wpdb->query( "DELETE FROM " . GLM_MEMBERS_BILLING_PLUGIN_DB_PREFIX . "invoice_payments" );
+}
+
+if ( $billingRecords ) {
+    foreach ( $billingRecords as $billingRecord ) {
+        // Have to get the member id and then get it's new account id
+        $refDest = $this->wpdb->get_var(
+            $this->wpdb->prepare(
+                "SELECT id
+                   FROM " . GLM_MEMBERS_PLUGIN_DB_PREFIX . "members
+                  WHERE old_member_id = %d",
+                $billingRecord['member_id']
+            )
+        );
+        if ( $refDest ) {
+            $accountId = $BillingSupport->getAccountByRefDest( $refDest );
+            // $importResults .= '<pre>$accountId: ' . print_r( $accountId, true ) . '</pre>';
+            if ( $accountId ) {
+                // Get the invoice Type
+                $invoiceType = $BillingSupport->getInvoiceTypeById( $accountId['invoice_type'] );
+                // $importResults .= '<pre>$invoiceType: ' . print_r( $invoiceType, true ) . '</pre>';
+                if ( $invoiceType ) {
+                    // Check the type (1 = invoice, 2 = payment, 3 = Adjustment, 4 = Comment)
+                    switch ( $billingRecord['billing_type']) {
+                    case "1": // Invoices
+                        // Store the invoice
+                        $this->wpdb->insert(
+                            GLM_MEMBERS_BILLING_PLUGIN_DB_PREFIX . 'invoices',
+                            array(
+                                'transaction_time' => $billingRecord['transaction_time'],
+                                'account'          => $accountId['id'],
+                                'old_invoice_id'   => $billingRecord['invoice_id'],
+                                'amount_total'     => $billingRecord['amount'],
+                                'balance'          => $billingRecord['balance'],
+                                'due_date'         => $billingRecord['transaction_date'],
+                                'paid'             => $billingRecord['paid'],
+                                'notes'            => $billingRecord['notes'],
+                                'renewal'          => true,
+                                'recurring'        => true,
+                                'recurrence'       => 20
+                            ),
+                            array(
+                                '%s', // transaction_time
+                                '%d', // account
+                                '%d', // old_invoice_id
+                                '%s', // amount
+                                '%s', // balance
+                                '%s', // due_date
+                                '%s', // paid
+                                '%s', // notes
+                                '%s', // renewal
+                                '%s', // recurring
+                                '%s', // recurrence
+                            )
+                        );
+                        $newInvoiceId = $this->wpdb->insert_id;
+                        if ( $newInvoiceId ) {
+                            $BillingSupport->createLineItemForInvoice(
+                                array(
+                                    'invoice_id'     => $newInvoiceId,
+                                    'line_item_type' => $invoiceType['id'],
+                                    'account'        => $accountId['id'],
+                                    'name'           => $invoiceType['name'],
+                                    'amount'         => $billingRecord['amount'],
+                                    'due_date'       => $billingRecord['transaction_date'],
+                                    'recurring'      => $invoiceType['recurring'],
+                                    'recurrence'     => $invoiceType['recurrence'],
+                                )
+                            );
+                            $BillingSupport->recordInvoice( $newInvoiceId, $accountId['id'], $billingRecord['amount'] );
+                        }
+                        break;
+
+                    case "2": // Payments
+                        // Convert the payment method
+                        $paymentMethod = false;
+                        switch ( $billingRecord['payment_method'] ) {
+                        case "1": // Check 10
+                            $paymentMethod = 'Check';
+                            break;
+                        case "2": // not being used?
+                            $paymentMethod = 'Credit Card';
+                            break;
+                        case "3": // Cash 30
+                            $paymentMethod = 'Cash';
+                            break;
+                        case "4": // Other 40
+                            $paymentMethod = 'Other';
+                            break;
+                        case "5": // Adjustment 50
+                            $paymentMethod = 'Adjustment';
+                            break;
+                        }
+                        // Find the new invoice id
+                        $newInvoiceId = $this->wpdb->get_var(
+                            $this->wpdb->prepare(
+                                "SELECT id
+                                   FROM " . GLM_MEMBERS_BILLING_PLUGIN_DB_PREFIX . "invoices
+                                  WHERE old_invoice_id = %d",
+                                $billingRecord['invoice_id']
+                            )
+                        );
+                        $importResults .= '<pre>$newInvoiceId: ' . print_r( $newInvoiceId, true ) . '</pre>';
+                        if ( $newInvoiceId ) {
+                            $this->wpdb->insert(
+                                GLM_MEMBERS_BILLING_PLUGIN_DB_PREFIX . 'payments',
+                                array(
+                                    'transaction_time' => $billingRecord['transaction_time'],
+                                    'account'          => $accountId['id'],
+                                    'amount'           => $billingRecord['amount'],
+                                    'payment_method'   => $paymentMethod,
+                                    'payment_data'     => $billingRecord['payment_data'],
+                                ),
+                                array(
+                                    '%s', // transaction_time
+                                    '%d', // account
+                                    '%s', // amount
+                                    '%s', // payment_method
+                                    '%s', // payment_data
+                                )
+                            );
+                            $paymentId = $this->wpdb->insert_id;
+                            if ( $paymentId ) {
+                                $BillingSupport->recordPayment(
+                                    $paymentId,
+                                    $accountId['id'],
+                                    $billingRecord['amount'],
+                                    array( $newInvoiceId ),
+                                    $this->config['transaction_numb']['Payment']
+                                );
+                            }
+                        }
+
+                        break;
+
+                    case "3": // Adjustments
+                        break;
+
+                    case "4": // Comments
+                        break;
+
+                    default:
+                        die('billing type not correct');
+                        break;
+                    }
+                }
+            }
+        }
+    }
+}
+
+$numberProcessed = $start + 10;
diff --git a/setup/databaseScripts/create_database_V0.0.31.sql b/setup/databaseScripts/create_database_V0.0.31.sql
deleted file mode 100644 (file)
index 7bbcb25..0000000
+++ /dev/null
@@ -1,317 +0,0 @@
--- Gaslight Media Billing Module
--- File Created: 11/19/2018
--- Database Version: 0.0.27
--- Database Creation Script
---
--- To permit each query below to be executed separately,
--- all queries must be separated by a line with four dashes
---
--- **** BE SURE TO ALSO UPDATE drop_database_Vxxx.sql FILE WHEN CHANGING TABLES ****
---
-
--- Billing Accounts
-CREATE TABLE {prefix}accounts (
-    id INT NOT NULL AUTO_INCREMENT,
-    archived BOOLEAN DEFAULT '0',                          -- Marks account as archived
-    ref_dest INT NOT NULL,                                 -- reference to member id
-    ref_name TINYTEXT NOT NULL,                            -- Name of reference member
-    invoice_type INT NOT NULL DEFAULT '0',                 -- Ref to Invoice Type id
-    billing_contact_name TINYTEXT NULL,                    -- Billing Contact Name
-    billing_fname TINYTEXT NULL,                           -- Billing First Name
-    billing_lname TINYTEXT NULL,                           -- Billing Last Name
-    billing_company TINYTEXT NULL,                         -- Billing Company Name
-    billing_position TINYTEXT NULL,                        -- Billing Title/Position
-    billing_addr1 TINYTEXT NULL,                           -- Billing Address 1
-    billing_addr2 TINYTEXT NULL,                           -- Billing Address 2
-    billing_city TINYTEXT NULL,                            -- Billing City
-    billing_county INT NULL,                               -- Billing County
-    billing_state TINYTEXT NULL,                           -- Billing State
-    billing_zip TINYTEXT NULL,                             -- Billing Zip
-    billing_country TINYTEXT NULL,                         -- Billing Country
-    billing_phone TINYTEXT NULL,                           -- Billing Phone
-    billing_fax TINYTEXT NULL,                             -- Billing Fax
-    anniversary_date DATE NULL,                            -- anniversary date
-    renewal_date DATE NULL,                                -- renewal date of account
-    payment_data TEXT NULL,                                -- stored payment data
-    customer_profile_id TINYTEXT NULL,                     -- Customer Profile Id (Authorize.net)
-    payment_profile_id TINYTEXT NULL,                      -- Payment Profile Id (Authorize.net)
-    payment_profile_card TINYTEXT NULL,                    -- Payment Profile Card (Authorize.net)
-    email TINYTEXT NULL,                                   -- billing email
-    boss BOOLEAN DEFAULT '0',                              -- Boss flag
-    account_number TINYTEXT NULL,                          -- Account Number
-    email_invoice BOOLEAN DEFAULT '0',                     -- Invoice by email
-    usmail_invoice BOOLEAN DEFAULT '0',                    -- Invoice by US Mail
-    fax_invoice BOOLEAN DEFAULT '0',                       -- Invoice by Fax
-    PRIMARY KEY (id),
-    INDEX(ref_dest),
-    INDEX(ref_name(20)),
-    INDEX(email(20)),
-    INDEX(invoice_type),
-    INDEX(renewal_date),
-    INDEX(billing_county)
-);
-
-----
-
--- transactions
-CREATE TABLE {prefix}transactions (
-    id INT NOT NULL AUTO_INCREMENT,
-    type INT NOT NULL,                                     -- type of transaction (payment,invoice,etc)
-    type_id INT NOT NULL,                                  -- reference to type id
-    account INT NOT NULL,                                  -- reference to account id
-    transaction_time DATETIME NOT NULL,                    -- datetime for the transaction
-    current_invoice_total DECIMAL(8, 2) NOT NULL,          -- invoice total
-    current_payment_total DECIMAL(8, 2) NOT NULL,          -- payment total
-    PRIMARY KEY (id),
-    INDEX(account),
-    INDEX(type_id),
-    INDEX(transaction_time)
-);
-
-----
-
--- Invoices
-CREATE TABLE {prefix}invoices (
-    id INT NOT NULL AUTO_INCREMENT,
-    transaction_time DATETIME NOT NULL,                    -- datetime for the invoice
-    account INT NOT NULL,                                  -- ref to account id
-    amount_total DECIMAL(8, 2) NOT NULL,                   -- total amount for invoice
-    balance DECIMAL(8, 2) NOT NULL,                        -- balance for this invoice
-    due_date DATE NOT NULL,                                -- Due date for this invoice
-    paid BOOLEAN DEFAULT '0',                              -- true/false if invoice is paid
-    notes TINYTEXT,                                        -- notes for this invoice
-    renewal BOOLEAN DEFAULT '0',                           -- true/false if a renewal
-    recurring BOOLEAN DEFAULT '0',                         -- true/false if recurring
-    recurrence INT NULL DEFAULT 0,                         -- recurrence type
-    PRIMARY KEY (id),
-    INDEX(account),
-    INDEX(transaction_time),
-    INDEX(due_date)
-);
-
-----
-
--- Line Item Types
-CREATE TABLE {prefix}invoice_types (
-    id INT NOT NULL AUTO_INCREMENT,
-    name TINYTEXT NOT NULL,                                -- name
-    parent INT NOT NULL DEFAULT 0,                         -- 0 if top level otherwise ref to another line_item_type as it's parent
-    member_type INT NOT NULL DEFAULT 0,                    -- Member Type assigned Default 0
-    amount DECIMAL(8,2) NOT NULL DEFAULT '0.00',           -- amount
-    recurring BOOLEAN DEFAULT '0',                         -- true/false if recurring
-    recurrence INT NULL DEFAULT 0,                         -- recurrence type
-    dynamic_amount BOOLEAN DEFAULT '0',                    -- true/false if amount is dynamic
-    qcode TINYTEXT NULL,                                   -- qcode for quickbooks
-    category TINYTEXT NULL,                                -- quickbooks category
-    PRIMARY KEY (id)
-);
-
-----
-
--- Line Items
-CREATE TABLE {prefix}line_items (
-    id INT NOT NULL AUTO_INCREMENT,
-    invoice INT NOT NULL,                                  -- reference to invoice
-    line_item_type INT NOT NULL,                           -- reference to line item type
-    account INT NULL DEFAULT 0,                            -- ref to account id (renewal or employee)
-    name TEXT NOT NULL,                                    -- line item name
-    amount DECIMAL(8,2) DEFAULT '0.00',                    -- line item amount per item
-    quantity INT DEFAULT 1,                                -- quantity
-    total DECIMAL(8,2) DEFAULT '0.00',                     -- line item total
-    recurring BOOLEAN DEFAULT '0',                         -- true/false if recurring
-    recurrence INT NULL DEFAULT 0,                         -- recurrence type
-    created DATE NULL,                                     -- Date this line item was first created
-    first_due_date DATE NULL,                              -- The first due date for this item
-    next_due_date DATE NULL,                               -- Next Due Date for this item
-    PRIMARY KEY (id),
-    INDEX(account),
-    INDEX(created),
-    INDEX(first_due_date),
-    INDEX(next_due_date)
-);
-
-----
-
--- payments
-CREATE TABLE {prefix}payments (
-    id INT NOT NULL AUTO_INCREMENT,
-    transaction_time DATETIME NOT NULL,                    -- datetime of payment
-    account INT NOT NULL,                                  -- ref to account table
-    amount DECIMAL(8, 2) NOT NULL,                         -- payment amount
-    payment_method TINYTEXT NOT NULL,                      -- payment method
-    payment_data TINYTEXT NULL,                            -- additional payment info
-    notes TEXT NULL,                                       -- Notes/Comments on the payment
-    PRIMARY KEY (id)
-);
-
-----
-
--- pdfs
-CREATE TABLE {prefix}pdfs (
-    id INT NOT NULL AUTO_INCREMENT,
-    ref_type INT NOT NULL,                                 -- reference type
-    ref_dest INT NOT NULL,                                 -- reference types id
-    pdf MEDIUMTEXT NOT NULL,                               -- saved pdf
-    PRIMARY KEY (id)
-);
-
-----
-
--- Notification Types
-CREATE TABLE {prefix}notification_types (
-    id INT NOT NULL AUTO_INCREMENT,
-    name TINYTEXT NOT NULL,                                -- name
-    to_email TINYTEXT NULL,                                -- To email
-    from_header TINYTEXT NOT NULL,                         -- from headers
-    replyto TINYTEXT NULL,                                 -- reply-to headers
-    subject TINYTEXT NOT NULL,                             -- Subject
-    message TEXT NOT NULL,                                 -- Message
-    send_by_date BOOLEAN NULL DEFAULT '0',                 -- true/false send by date based on due date
-    send_by_action BOOLEAN NULL DEFAULT '0',               -- send notice based on an action
-    send_action INT NULL DEFAULT 0,                        -- (create invoice or receive payment)
-    send_date_number INT NULL DEFAULT 0,                   -- number to apply to send by date
-    send_date_period INT NULL DEFAULT 0,                   -- (days,weeks,months,years)
-    send_date_when INT NULL DEFAULT 0,                     -- (before or after)
-    PRIMARY KEY (id)
-);
-
-----
-
--- Notifications
-CREATE TABLE {prefix}notifications (
-    id INT NOT NULL AUTO_INCREMENT,
-    notification_type INT NOT NULL,                        -- ref to notification type
-    account INT NOT NULL,                                  -- ref to account
-    from_replyto TINYTEXT NOT NULL,                        -- from reply-to header
-    subject TEXT NOT NULL,                                 -- subject
-    message TEXT NOT NULL,                                 -- message
-    date_sent DATETIME NOT NULL,                           -- Date the notice was sent
-    email_sent TINYTEXT NOT NULL,                          -- email used
-    PRIMARY KEY (id)
-);
-
-----
-
--- Notification Queue
-CREATE TABLE {prefix}notification_queue (
-    id INT NOT NULL AUTO_INCREMENT,
-    notification_type INT NOT NULL,                        -- ref to notification type
-    account INT NOT NULL,                                  -- ref to account
-    queued_time DATETIME NOT NULL,                         -- Creation time
-    processed_time DATETIME NULL,                          -- The time this queue was processed. (sent out)
-    PRIMARY KEY (id),
-    INDEX (notification_type),
-    INDEX (account),
-    INDEX (queued_time),
-    INDEX (processed_time)
-);
-
-----
-
--- Gateway Settings
-CREATE TABLE {prefix}gateway_settings (
-    id INT NOT NULL AUTO_INCREMENT,
-    name TEXT NOT NULL,
-    login_id TINYTEXT NOT NULL,
-    transaction_key TINYTEXT NOT NULL,
-    PRIMARY KEY (id)
-);
-
-----
-
--- Invoice Payments
-CREATE TABLE {prefix}invoice_payments (
-    id INT NOT NULL AUTO_INCREMENT,
-    invoice INT NOT NULL,                                  -- reference to invoice id
-    payment INT NOT NULL,                                  -- reference to payment id
-    amount DECIMAL(8, 2) NOT NULL,                         -- payment amount
-    PRIMARY KEY (id),
-    INDEX(invoice)
-);
-
-----
-
--- Settings
-CREATE TABLE {prefix}settings (
-    id INT NOT NULL AUTO_INCREMENT,
-    company_logo TINYTEXT NULL,                            -- Image logo
-    company_logo_height INT NULL,                          -- Logo Height (only used if creating pdf)
-    company_name TINYTEXT NULL,                            -- Company Name
-    company_name2 TINYTEXT NULL,                           -- Company Name 2
-    company_addr1 TINYTEXT NULL,                           -- Company Address 1
-    company_addr2 TINYTEXT NULL,                           -- Company Address 2
-    company_city TINYTEXT NULL,                            -- Company City
-    company_state TINYTEXT NULL,                           -- Company State
-    company_zip TINYTEXT NULL,                             -- Company Zip
-    company_phone TINYTEXT NULL,                           -- Company Phone
-    company_email TINYTEXT NULL,                           -- Company Email
-    company_url TINYTEXT NULL,                             -- Company URL
-    payment_terms TEXT NULL,                               -- Payment Terms
-    days_before_renewal INT NULL,                          -- Number of days before renewal date to allow renewals
-    days_after_expired INT NULL,                           -- Number of days after renewal date expired
-    allow_membership_choice BOOLEAN DEFAULT '0',           -- If memberships can choose their membership levels when they renew
-    allow_employees BOOLEAN DEFAULT '0',                   -- If memberships have employees
-    member_types_enabled BOOLEAN DEFAULT '1',              -- member types determine invoice types
-    quickbooks_enabled BOOLEAN DEFAULT '0',                -- QuickBooks enabled
-    member_billing_enabled BOOLEAN DEFAULT '1',            -- Member have access to billing info tab
-    billing_fields_required BOOLEAN DEFAULT '1',           -- Require Billing Fields
-    invoice_methods_enabled BOOLEAN DEFAULT '1',           -- Enable Uptra invoice methods
-    renewal_day_static BOOLEAN DEFAULT '0',                -- Renewal dates are same day every year
-    renewal_day INT NULL,                                  -- Day of the month for renewals
-    renewal_month INT NULL,                                -- Month of year for renewals
-    billing_county_enabled BOOLEAN DEFAULT '0',            -- Billing uses county field
-    invoice_pdf_enabled BOOLEAN DEFAULT '0',               -- Create PDF invoices
-    billing_contact_name_enabled BOOLEAN DEFAULT '0',      -- Use billing_contact_name instead of fname lname
-    PRIMARY KEY (id)
-);
-
-----
-
--- Set default billing Settings entry
-INSERT INTO {prefix}settings
-    ( id, days_before_renewal ,days_after_expired, member_types_enabled, quickbooks_enabled, member_billing_enabled )
-    VALUES
-    ( 1, 90, 30, true, false, true );
-
-----
-
--- Management
-CREATE TABLE {prefix}management (
-    id INT NOT NULL AUTO_INCREMENT,
-    payment_methods SMALLINT NULL,                              -- Payment methods available for all registrations - Bitmap - see payment_method in plugin.ini
-    proc_methods SMALLINT NULL,                                 -- Credit Cart payment processing methods available - Bitmap - see proc_method in plugin.ini
-    cc_accepts SMALLINT NULL,                                   -- Credit Cards Accepted - Bitmap - See credit_card in plugin.ini
-    -- Authorize.net Credentials
-    authorize_net_login TINYTEXT NULL,
-    authorize_net_key TINYTEXT NULL,
-    authorize_net_test TINYINT NULL,                            -- Authorize.net test mode - List - see proc_test_mode in plugin.ini
-    authorize_net_conf BOOLEAN NULL,                            -- Flag to send payment confirmation Email from Authorize.net
-    authorize_net_merchant_email TINYTEXT NULL,                 -- E-Mail Authorize.net will send copy of confirmation E-Mail
-    -- Merchant Solutions Credentials
-    merchant_solutions_acctid TINYTEXT NULL,                    -- Merchant Solutions credentials
-    merchant_solutions_merchantpin TINYTEXT NULL,
-    merchant_solutions_test TINYINT NULL,                       -- Merchant Solutions test mode - List - see proc_test_mode in plugin.ini
-    merchant_solutions_conf BOOLEAN NULL,                       -- Flag to send payment confirmation Email
-    merchant_solutions_merchant_email TINYTEXT NULL,            -- Merchant Solutions will send copy of confirmation E-Mail
-    uptravel_invoice_template BOOLEAN DEFAULT '0',              -- Use uptravel template for invoices.
-    uptravel_payment_form BOOLEAN DEFAULT '0',                  -- Use uptravel payment form style.
-    PRIMARY KEY (id)
-);
-
-----
-
--- Set default billing Management entry
-INSERT INTO {prefix}management
-    ( id )
-    VALUES
-    ( 1 );
-
-----
-
--- Employees table
-CREATE TABLE {prefix}employees (
-    id INT NOT NULL AUTO_INCREMENT,
-    account INT NOT NULL,                                      -- Account Id
-    employee INT NOT NULL,                                     -- Employee Account Id
-    PRIMARY KEY (id)
-);
diff --git a/setup/databaseScripts/create_database_V0.0.32.sql b/setup/databaseScripts/create_database_V0.0.32.sql
new file mode 100644 (file)
index 0000000..102d3b5
--- /dev/null
@@ -0,0 +1,318 @@
+-- Gaslight Media Billing Module
+-- File Created: 11/19/2018
+-- Database Version: 0.0.27
+-- Database Creation Script
+--
+-- To permit each query below to be executed separately,
+-- all queries must be separated by a line with four dashes
+--
+-- **** BE SURE TO ALSO UPDATE drop_database_Vxxx.sql FILE WHEN CHANGING TABLES ****
+--
+
+-- Billing Accounts
+CREATE TABLE {prefix}accounts (
+    id INT NOT NULL AUTO_INCREMENT,
+    archived BOOLEAN DEFAULT '0',                          -- Marks account as archived
+    ref_dest INT NOT NULL,                                 -- reference to member id
+    ref_name TINYTEXT NOT NULL,                            -- Name of reference member
+    invoice_type INT NOT NULL DEFAULT '0',                 -- Ref to Invoice Type id
+    billing_contact_name TINYTEXT NULL,                    -- Billing Contact Name
+    billing_fname TINYTEXT NULL,                           -- Billing First Name
+    billing_lname TINYTEXT NULL,                           -- Billing Last Name
+    billing_company TINYTEXT NULL,                         -- Billing Company Name
+    billing_position TINYTEXT NULL,                        -- Billing Title/Position
+    billing_addr1 TINYTEXT NULL,                           -- Billing Address 1
+    billing_addr2 TINYTEXT NULL,                           -- Billing Address 2
+    billing_city TINYTEXT NULL,                            -- Billing City
+    billing_county INT NULL,                               -- Billing County
+    billing_state TINYTEXT NULL,                           -- Billing State
+    billing_zip TINYTEXT NULL,                             -- Billing Zip
+    billing_country TINYTEXT NULL,                         -- Billing Country
+    billing_phone TINYTEXT NULL,                           -- Billing Phone
+    billing_fax TINYTEXT NULL,                             -- Billing Fax
+    anniversary_date DATE NULL,                            -- anniversary date
+    renewal_date DATE NULL,                                -- renewal date of account
+    payment_data TEXT NULL,                                -- stored payment data
+    customer_profile_id TINYTEXT NULL,                     -- Customer Profile Id (Authorize.net)
+    payment_profile_id TINYTEXT NULL,                      -- Payment Profile Id (Authorize.net)
+    payment_profile_card TINYTEXT NULL,                    -- Payment Profile Card (Authorize.net)
+    email TINYTEXT NULL,                                   -- billing email
+    boss BOOLEAN DEFAULT '0',                              -- Boss flag
+    account_number TINYTEXT NULL,                          -- Account Number
+    email_invoice BOOLEAN DEFAULT '0',                     -- Invoice by email
+    usmail_invoice BOOLEAN DEFAULT '0',                    -- Invoice by US Mail
+    fax_invoice BOOLEAN DEFAULT '0',                       -- Invoice by Fax
+    PRIMARY KEY (id),
+    INDEX(ref_dest),
+    INDEX(ref_name(20)),
+    INDEX(email(20)),
+    INDEX(invoice_type),
+    INDEX(renewal_date),
+    INDEX(billing_county)
+);
+
+----
+
+-- transactions
+CREATE TABLE {prefix}transactions (
+    id INT NOT NULL AUTO_INCREMENT,
+    type INT NOT NULL,                                     -- type of transaction (payment,invoice,etc)
+    type_id INT NOT NULL,                                  -- reference to type id
+    account INT NOT NULL,                                  -- reference to account id
+    transaction_time DATETIME NOT NULL,                    -- datetime for the transaction
+    current_invoice_total DECIMAL(8, 2) NOT NULL,          -- invoice total
+    current_payment_total DECIMAL(8, 2) NOT NULL,          -- payment total
+    PRIMARY KEY (id),
+    INDEX(account),
+    INDEX(type_id),
+    INDEX(transaction_time)
+);
+
+----
+
+-- Invoices
+CREATE TABLE {prefix}invoices (
+    id INT NOT NULL AUTO_INCREMENT,
+    old_invoice_id INT NULL,                               -- old invoice id from uptra
+    transaction_time DATETIME NOT NULL,                    -- datetime for the invoice
+    account INT NOT NULL,                                  -- ref to account id
+    amount_total DECIMAL(8, 2) NOT NULL,                   -- total amount for invoice
+    balance DECIMAL(8, 2) NOT NULL,                        -- balance for this invoice
+    due_date DATE NOT NULL,                                -- Due date for this invoice
+    paid BOOLEAN DEFAULT '0',                              -- true/false if invoice is paid
+    notes TINYTEXT,                                        -- notes for this invoice
+    renewal BOOLEAN DEFAULT '0',                           -- true/false if a renewal
+    recurring BOOLEAN DEFAULT '0',                         -- true/false if recurring
+    recurrence INT NULL DEFAULT 0,                         -- recurrence type
+    PRIMARY KEY (id),
+    INDEX(account),
+    INDEX(transaction_time),
+    INDEX(due_date)
+);
+
+----
+
+-- Line Item Types
+CREATE TABLE {prefix}invoice_types (
+    id INT NOT NULL AUTO_INCREMENT,
+    name TINYTEXT NOT NULL,                                -- name
+    parent INT NOT NULL DEFAULT 0,                         -- 0 if top level otherwise ref to another line_item_type as it's parent
+    member_type INT NOT NULL DEFAULT 0,                    -- Member Type assigned Default 0
+    amount DECIMAL(8,2) NOT NULL DEFAULT '0.00',           -- amount
+    recurring BOOLEAN DEFAULT '0',                         -- true/false if recurring
+    recurrence INT NULL DEFAULT 0,                         -- recurrence type
+    dynamic_amount BOOLEAN DEFAULT '0',                    -- true/false if amount is dynamic
+    qcode TINYTEXT NULL,                                   -- qcode for quickbooks
+    category TINYTEXT NULL,                                -- quickbooks category
+    PRIMARY KEY (id)
+);
+
+----
+
+-- Line Items
+CREATE TABLE {prefix}line_items (
+    id INT NOT NULL AUTO_INCREMENT,
+    invoice INT NOT NULL,                                  -- reference to invoice
+    line_item_type INT NOT NULL,                           -- reference to line item type
+    account INT NULL DEFAULT 0,                            -- ref to account id (renewal or employee)
+    name TEXT NOT NULL,                                    -- line item name
+    amount DECIMAL(8,2) DEFAULT '0.00',                    -- line item amount per item
+    quantity INT DEFAULT 1,                                -- quantity
+    total DECIMAL(8,2) DEFAULT '0.00',                     -- line item total
+    recurring BOOLEAN DEFAULT '0',                         -- true/false if recurring
+    recurrence INT NULL DEFAULT 0,                         -- recurrence type
+    created DATE NULL,                                     -- Date this line item was first created
+    first_due_date DATE NULL,                              -- The first due date for this item
+    next_due_date DATE NULL,                               -- Next Due Date for this item
+    PRIMARY KEY (id),
+    INDEX(account),
+    INDEX(created),
+    INDEX(first_due_date),
+    INDEX(next_due_date)
+);
+
+----
+
+-- payments
+CREATE TABLE {prefix}payments (
+    id INT NOT NULL AUTO_INCREMENT,
+    transaction_time DATETIME NOT NULL,                    -- datetime of payment
+    account INT NOT NULL,                                  -- ref to account table
+    amount DECIMAL(8, 2) NOT NULL,                         -- payment amount
+    payment_method TINYTEXT NOT NULL,                      -- payment method
+    payment_data TINYTEXT NULL,                            -- additional payment info
+    notes TEXT NULL,                                       -- Notes/Comments on the payment
+    PRIMARY KEY (id)
+);
+
+----
+
+-- pdfs
+CREATE TABLE {prefix}pdfs (
+    id INT NOT NULL AUTO_INCREMENT,
+    ref_type INT NOT NULL,                                 -- reference type
+    ref_dest INT NOT NULL,                                 -- reference types id
+    pdf MEDIUMTEXT NOT NULL,                               -- saved pdf
+    PRIMARY KEY (id)
+);
+
+----
+
+-- Notification Types
+CREATE TABLE {prefix}notification_types (
+    id INT NOT NULL AUTO_INCREMENT,
+    name TINYTEXT NOT NULL,                                -- name
+    to_email TINYTEXT NULL,                                -- To email
+    from_header TINYTEXT NOT NULL,                         -- from headers
+    replyto TINYTEXT NULL,                                 -- reply-to headers
+    subject TINYTEXT NOT NULL,                             -- Subject
+    message TEXT NOT NULL,                                 -- Message
+    send_by_date BOOLEAN NULL DEFAULT '0',                 -- true/false send by date based on due date
+    send_by_action BOOLEAN NULL DEFAULT '0',               -- send notice based on an action
+    send_action INT NULL DEFAULT 0,                        -- (create invoice or receive payment)
+    send_date_number INT NULL DEFAULT 0,                   -- number to apply to send by date
+    send_date_period INT NULL DEFAULT 0,                   -- (days,weeks,months,years)
+    send_date_when INT NULL DEFAULT 0,                     -- (before or after)
+    PRIMARY KEY (id)
+);
+
+----
+
+-- Notifications
+CREATE TABLE {prefix}notifications (
+    id INT NOT NULL AUTO_INCREMENT,
+    notification_type INT NOT NULL,                        -- ref to notification type
+    account INT NOT NULL,                                  -- ref to account
+    from_replyto TINYTEXT NOT NULL,                        -- from reply-to header
+    subject TEXT NOT NULL,                                 -- subject
+    message TEXT NOT NULL,                                 -- message
+    date_sent DATETIME NOT NULL,                           -- Date the notice was sent
+    email_sent TINYTEXT NOT NULL,                          -- email used
+    PRIMARY KEY (id)
+);
+
+----
+
+-- Notification Queue
+CREATE TABLE {prefix}notification_queue (
+    id INT NOT NULL AUTO_INCREMENT,
+    notification_type INT NOT NULL,                        -- ref to notification type
+    account INT NOT NULL,                                  -- ref to account
+    queued_time DATETIME NOT NULL,                         -- Creation time
+    processed_time DATETIME NULL,                          -- The time this queue was processed. (sent out)
+    PRIMARY KEY (id),
+    INDEX (notification_type),
+    INDEX (account),
+    INDEX (queued_time),
+    INDEX (processed_time)
+);
+
+----
+
+-- Gateway Settings
+CREATE TABLE {prefix}gateway_settings (
+    id INT NOT NULL AUTO_INCREMENT,
+    name TEXT NOT NULL,
+    login_id TINYTEXT NOT NULL,
+    transaction_key TINYTEXT NOT NULL,
+    PRIMARY KEY (id)
+);
+
+----
+
+-- Invoice Payments
+CREATE TABLE {prefix}invoice_payments (
+    id INT NOT NULL AUTO_INCREMENT,
+    invoice INT NOT NULL,                                  -- reference to invoice id
+    payment INT NOT NULL,                                  -- reference to payment id
+    amount DECIMAL(8, 2) NOT NULL,                         -- payment amount
+    PRIMARY KEY (id),
+    INDEX(invoice)
+);
+
+----
+
+-- Settings
+CREATE TABLE {prefix}settings (
+    id INT NOT NULL AUTO_INCREMENT,
+    company_logo TINYTEXT NULL,                            -- Image logo
+    company_logo_height INT NULL,                          -- Logo Height (only used if creating pdf)
+    company_name TINYTEXT NULL,                            -- Company Name
+    company_name2 TINYTEXT NULL,                           -- Company Name 2
+    company_addr1 TINYTEXT NULL,                           -- Company Address 1
+    company_addr2 TINYTEXT NULL,                           -- Company Address 2
+    company_city TINYTEXT NULL,                            -- Company City
+    company_state TINYTEXT NULL,                           -- Company State
+    company_zip TINYTEXT NULL,                             -- Company Zip
+    company_phone TINYTEXT NULL,                           -- Company Phone
+    company_email TINYTEXT NULL,                           -- Company Email
+    company_url TINYTEXT NULL,                             -- Company URL
+    payment_terms TEXT NULL,                               -- Payment Terms
+    days_before_renewal INT NULL,                          -- Number of days before renewal date to allow renewals
+    days_after_expired INT NULL,                           -- Number of days after renewal date expired
+    allow_membership_choice BOOLEAN DEFAULT '0',           -- If memberships can choose their membership levels when they renew
+    allow_employees BOOLEAN DEFAULT '0',                   -- If memberships have employees
+    member_types_enabled BOOLEAN DEFAULT '1',              -- member types determine invoice types
+    quickbooks_enabled BOOLEAN DEFAULT '0',                -- QuickBooks enabled
+    member_billing_enabled BOOLEAN DEFAULT '1',            -- Member have access to billing info tab
+    billing_fields_required BOOLEAN DEFAULT '1',           -- Require Billing Fields
+    invoice_methods_enabled BOOLEAN DEFAULT '1',           -- Enable Uptra invoice methods
+    renewal_day_static BOOLEAN DEFAULT '0',                -- Renewal dates are same day every year
+    renewal_day INT NULL,                                  -- Day of the month for renewals
+    renewal_month INT NULL,                                -- Month of year for renewals
+    billing_county_enabled BOOLEAN DEFAULT '0',            -- Billing uses county field
+    invoice_pdf_enabled BOOLEAN DEFAULT '0',               -- Create PDF invoices
+    billing_contact_name_enabled BOOLEAN DEFAULT '0',      -- Use billing_contact_name instead of fname lname
+    PRIMARY KEY (id)
+);
+
+----
+
+-- Set default billing Settings entry
+INSERT INTO {prefix}settings
+    ( id, days_before_renewal ,days_after_expired, member_types_enabled, quickbooks_enabled, member_billing_enabled )
+    VALUES
+    ( 1, 90, 30, true, false, true );
+
+----
+
+-- Management
+CREATE TABLE {prefix}management (
+    id INT NOT NULL AUTO_INCREMENT,
+    payment_methods SMALLINT NULL,                              -- Payment methods available for all registrations - Bitmap - see payment_method in plugin.ini
+    proc_methods SMALLINT NULL,                                 -- Credit Cart payment processing methods available - Bitmap - see proc_method in plugin.ini
+    cc_accepts SMALLINT NULL,                                   -- Credit Cards Accepted - Bitmap - See credit_card in plugin.ini
+    -- Authorize.net Credentials
+    authorize_net_login TINYTEXT NULL,
+    authorize_net_key TINYTEXT NULL,
+    authorize_net_test TINYINT NULL,                            -- Authorize.net test mode - List - see proc_test_mode in plugin.ini
+    authorize_net_conf BOOLEAN NULL,                            -- Flag to send payment confirmation Email from Authorize.net
+    authorize_net_merchant_email TINYTEXT NULL,                 -- E-Mail Authorize.net will send copy of confirmation E-Mail
+    -- Merchant Solutions Credentials
+    merchant_solutions_acctid TINYTEXT NULL,                    -- Merchant Solutions credentials
+    merchant_solutions_merchantpin TINYTEXT NULL,
+    merchant_solutions_test TINYINT NULL,                       -- Merchant Solutions test mode - List - see proc_test_mode in plugin.ini
+    merchant_solutions_conf BOOLEAN NULL,                       -- Flag to send payment confirmation Email
+    merchant_solutions_merchant_email TINYTEXT NULL,            -- Merchant Solutions will send copy of confirmation E-Mail
+    uptravel_invoice_template BOOLEAN DEFAULT '0',              -- Use uptravel template for invoices.
+    uptravel_payment_form BOOLEAN DEFAULT '0',                  -- Use uptravel payment form style.
+    PRIMARY KEY (id)
+);
+
+----
+
+-- Set default billing Management entry
+INSERT INTO {prefix}management
+    ( id )
+    VALUES
+    ( 1 );
+
+----
+
+-- Employees table
+CREATE TABLE {prefix}employees (
+    id INT NOT NULL AUTO_INCREMENT,
+    account INT NOT NULL,                                      -- Account Id
+    employee INT NOT NULL,                                     -- Employee Account Id
+    PRIMARY KEY (id)
+);
index 7bb16c2..6d5a9c0 100644 (file)
@@ -45,5 +45,6 @@ $glmMembersBillingDbVersions = array(
     '0.0.29' => array('version' => '0.0.29', 'tables' => 15, 'date' => '11/29/2018'),
     '0.0.30' => array('version' => '0.0.30', 'tables' => 15, 'date' => '12/04/2018'),
     '0.0.31' => array('version' => '0.0.31', 'tables' => 15, 'date' => '12/17/2018'),
+    '0.0.32' => array('version' => '0.0.32', 'tables' => 15, 'date' => '12/26/2018'),
 );
 
diff --git a/setup/databaseScripts/update_database_V0.0.32.sql b/setup/databaseScripts/update_database_V0.0.32.sql
new file mode 100644 (file)
index 0000000..a56906a
--- /dev/null
@@ -0,0 +1,9 @@
+-- Gaslight Media Billing Database
+-- File Created: 12/26/2018
+-- Database Version: 0.0.32
+--
+-- To permit each query below to be executed separately,
+-- all queries must be separated by a line with four dashes
+
+-- Update the accounts table
+ALTER TABLE {prefix}invoicies ADD old_invoice_id INT NULL;
index 2f584b1..d2c67b4 100644 (file)
 
         </table>
     </form>
+    <form action="{$thisUrl}?page={$thisPage}" method="post">
+
+        <input type="hidden" name="glm_action" value="billing" />
+        <input type="hidden" name="option" value="importBillingData" />
+        <input type="hidden" name="option2" value="import" />
+
+        <table class="glm-admin-table glm-settings-table">
+
+            <tr>
+                <td><input type="submit" value="Import Billing Data" /></td>
+            </tr>
+
+        </table>
+    </form>
 {/if}
 
 Number processed: {$numberProcessed}