From: Steve Sutton Date: Wed, 26 Dec 2018 21:52:48 +0000 (-0500) Subject: Working on import of uptra billing invoices and payments X-Git-Url: http://cvs2.gaslightmedia.com/gitweb/?a=commitdiff_plain;h=6898f68402cf3e2209f52d220d98f9efd29893ea;p=WP-Plugins%2Fglm-member-db-billing.git Working on import of uptra billing invoices and payments Adding new field for invoices for the old_invoice_id. --- diff --git a/classes/billingSupport.php b/classes/billingSupport.php index c618275..319c1ee 100644 --- a/classes/billingSupport.php +++ b/classes/billingSupport.php @@ -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; + } } } } diff --git a/index.php b/index.php index 27fb5cf..2d2ad0c 100644 --- 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'); diff --git a/models/admin/ajax/exportQIF.php b/models/admin/ajax/exportQIF.php index b1d707e..bbb8c7c 100644 --- a/models/admin/ajax/exportQIF.php +++ b/models/admin/ajax/exportQIF.php @@ -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 '
$paymentTypes: ' . print_r( $paymentTypes, true ) . '
'; + // echo '
$transactions: ' . print_r( $transactions, true ) . '
'; + // exit; // Generate the QIF format data $fileData[] = "!Type:Bank\n"; foreach ( $transactions as $record ) { + // echo '
$record: ' . print_r( $record, true ) . '
'; 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 '
$paymentType: ' . print_r( $paymentType, true ) . '
'; + 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 '
$fileData: ' . print_r( $fileData, true ) . '
'; + // exit; + + $buf = implode( '', $fileData ); $len = strlen( $buf ); diff --git a/models/admin/billing/invoicing.php b/models/admin/billing/invoicing.php index 8feea0f..4ea6c2d 100644 --- a/models/admin/billing/invoicing.php +++ b/models/admin/billing/invoicing.php @@ -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 ); diff --git a/models/admin/management/billing.php b/models/admin/management/billing.php index 03452ee..2d5407a 100644 --- a/models/admin/management/billing.php +++ b/models/admin/management/billing.php @@ -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 index 0000000..6b095fc --- /dev/null +++ b/models/admin/management/importBillingData.php @@ -0,0 +1,211 @@ +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 .= '
$billingRecords: ' . print_r( $billingRecords, true ) . '
'; + +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 .= '
$accountId: ' . print_r( $accountId, true ) . '
'; + if ( $accountId ) { + // Get the invoice Type + $invoiceType = $BillingSupport->getInvoiceTypeById( $accountId['invoice_type'] ); + // $importResults .= '
$invoiceType: ' . print_r( $invoiceType, true ) . '
'; + 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 .= '
$newInvoiceId: ' . print_r( $newInvoiceId, true ) . '
'; + 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 index 7bbcb25..0000000 --- a/setup/databaseScripts/create_database_V0.0.31.sql +++ /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 index 0000000..102d3b5 --- /dev/null +++ b/setup/databaseScripts/create_database_V0.0.32.sql @@ -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) +); diff --git a/setup/databaseScripts/dbVersions.php b/setup/databaseScripts/dbVersions.php index 7bb16c2..6d5a9c0 100644 --- a/setup/databaseScripts/dbVersions.php +++ b/setup/databaseScripts/dbVersions.php @@ -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 index 0000000..a56906a --- /dev/null +++ b/setup/databaseScripts/update_database_V0.0.32.sql @@ -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; diff --git a/views/admin/management/importAccounts.html b/views/admin/management/importAccounts.html index 2f584b1..d2c67b4 100644 --- a/views/admin/management/importAccounts.html +++ b/views/admin/management/importAccounts.html @@ -19,6 +19,20 @@ +
+ + + + + + + + + + + +
+
{/if} Number processed: {$numberProcessed}