From: Steve Sutton Date: Fri, 6 Apr 2018 19:57:04 +0000 (-0400) Subject: Updating db with payment fields for Authorize.net CIM X-Git-Tag: v1.0.0^2~70 X-Git-Url: http://cvs2.gaslightmedia.com/gitweb/?a=commitdiff_plain;h=eadcc84d4a315fa995e0b37df06f7bcdb9a8ed57;p=WP-Plugins%2Fglm-member-db-billing.git Updating db with payment fields for Authorize.net CIM CIM Authorize.net to save the credit card on authorize.net. --- diff --git a/classes/billingSupport.php b/classes/billingSupport.php index c98e70b..445211e 100644 --- a/classes/billingSupport.php +++ b/classes/billingSupport.php @@ -1057,12 +1057,20 @@ class GlmBillingSupport ); } - public function processPayment() + public function processPayment( $account_id, $payment_id ) { $errors = array(); // Get the selected credit card processor type $ccProcessor = $this->config['billing_settings']['proc_methods']; + // Other data fields that might be supplied + $transOpt = 0; + $customerProfileId = false; + $paymentProfileId = false; + $profileStatus = false; + $profileStatusText = false; + $checkCC = true; + // Setup the required account information for the selected payment processor switch ( $ccProcessor ) { @@ -1130,52 +1138,83 @@ class GlmBillingSupport // Add billing information to billing array $billing = array( + 'id' => false, 'fname' => $paymentData['billing_fname'], 'lname' => $paymentData['billing_lname'], 'addr1' => $paymentData['billing_addr1'], 'addr2' => $paymentData['billing_addr2'], 'city' => $paymentData['billing_city'], 'state' => $paymentData['billing_state'], + 'country' => '', 'zip' => $paymentData['billing_zip'], 'phone' => $paymentData['billing_phone'], 'email' => $paymentData['email'] ); $cardMatch = $this->config['credit_card_match']; - // Check all credit card input - if ( $cardData['cc_type'] && $cardData['cc_type'] > 0 - && $cardData['cc_name'] && $cardData['cc_name'] != '' - && $cardData['cc_numb'] && $cardData['cc_numb'] > 0 - && $cardData['cc_exp'] && $cardData['cc_exp'] != '' - && $cardData['cc_cvv'] && $cardData['cc_cvv'] > 0 - ) { - if ( !isset( $this->config['credit_card_match'][$cardData['cc_type']] ) || - !preg_match( $this->config['credit_card_match'][$cardData['cc_type']], $cardData['cc_numb'] ) + switch ( $ccProcessor ) { + case $this->config['proc_method_numb']['Authorize.net']: + // Add payment fields for Payment Profiles + if ( isset( $_REQUEST['use_saved_cc_profile'] ) + && trim($_REQUEST['use_saved_cc_profile'] ) != '' ) { - $errors[] = 'The credit card number you entered does not match the selected type of credit card.'; + $transOpt = 2; + $checkCC = false; + $customerProfileId = $regAccount['fieldData']['customer_profile_id']; + $paymentProfileId = $regAccount['fieldData']['payment_profile_id']; + + } elseif ( isset( $_REQUEST['cc_save'] ) + && trim( $_REQUEST['cc_save'] ) != '' + ) { + $transOpt = 1; } - } else { - $errors[] = 'You did not supply all required credit card information correctly.'; + // Convert card expiration date to required format + if ($transOpt < 2) { + $cardExp = explode('/', $cardData['cc_exp']); + $cardData['cc_exp'] = '20'.$cardExp[1].'-'.$cardExp[0]; + } + break; + } + + // If we need to check for proper credit card data + if ($checkCC) { + // Check all credit card input + if ( $cardData['cc_type'] && $cardData['cc_type'] > 0 + && $cardData['cc_name'] && $cardData['cc_name'] != '' + && $cardData['cc_numb'] && $cardData['cc_numb'] > 0 + && $cardData['cc_exp'] && $cardData['cc_exp'] != '' + && $cardData['cc_cvv'] && $cardData['cc_cvv'] > 0 + ) { + if ( !isset( $this->config['credit_card_match'][$cardData['cc_type']] ) || + !preg_match( $this->config['credit_card_match'][$cardData['cc_type']], $cardData['cc_numb'] ) + ) { + $errors[] = 'The credit card number you entered does not match the selected type of credit card.'; + } + + } else { + $errors[] = 'You did not supply all required credit card information correctly.'; + } } - if (count($errors) == 0) { + if ( count( $errors ) == 0 ) { // Determine the directory of the payment processor to load and instantiate it. if ( $ccProcessor && isset( $this->config['proc_dir'][$ccProcessor] ) ) { - require_once GLM_MEMBERS_BILLING_PLUGIN_LIB_PATH . '/paymentProcessors/' . $this->config['proc_dir'][$ccProcessor] . '/paymentGateway.php'; + require_once GLM_MEMBERS_PLUGIN_LIB_PATH . '/paymentProcessors/' . $this->config['proc_dir'][$ccProcessor] . '/paymentGateway.php'; $CcProcessor = new PaymentGateway( $account ); } // TODO: Need to update the $invoice_id to something better for billing. $payment = array( - 'name' => $this->config['settings']['company_name'], // Company Name - 'charge' => $amount, // Total charges - 'cctype' => $cardData['cc_type'], // Card Type - 'ccname' => $cardData['cc_name'], // Name on Card - 'ccnumb' => $cardData['cc_numb'], // Card Number - 'ccexp' => $cardData['cc_exp'], // Expiration Date - 'cccode' => $cardData['cc_cvv'], // CCV - security code - 'invoice' => 'billing-'//.$invoice_id // Invoice # is "reg-" plus cart ID + 'transOpt' => $transOpt, // 0 = charge card, 1 = charge and store, 2 = charge stored card + 'name' => $this->config['settings']['company_name'], // Company Name + 'charge' => $amount, // Total charges + 'cctype' => $cardData['cc_type'], // Card Type + 'ccname' => $cardData['cc_name'], // Name on Card + 'ccnumb' => $cardData['cc_numb'], // Card Number + 'ccexp' => $cardData['cc_exp'], // Expiration Date + 'cccode' => $cardData['cc_cvv'], // CCV - security code + 'invoice' => 'billing-' . $payment_id // Invoice # is "reg-" plus cart ID ); // Now try to run the card processor @@ -1183,6 +1222,39 @@ class GlmBillingSupport // If successful submission - say we're complete if ( is_array( $ccResult ) && isset( $ccResult['status'] ) && $ccResult['status'] == 1 ) { + + // Check if we need to store new card profile data + if ( $transOpt == 1 ) { + $customerProfileId = filter_var( $ccResult['customerProfileId'], FILTER_SANITIZE_NUMBER_INT ); + $paymentProfileId = filter_var( $ccResult['paymentProfileId'], FILTER_SANITIZE_NUMBER_INT ); + $profileStatus = filter_var( $ccResult['profileStatus'], FILTER_SANITIZE_NUMBER_INT ); + $profileStatusText = filter_var( $ccResult['profileStatusText'], FILTER_SANITIZE_STRING ); + + // If saving the credit card was successful + if ( $profileStatus ) { + + // Save the profile information in the submitting account + $updated = $this->wpdb->update( + GLM_MEMBERS_BILLING_PLUGIN_DB_PREFIX.'accounts', + array( + 'customer_profile_id' => $customerProfileId, + 'payment_profile_id' => $paymentProfileId, + 'payment_profile_card' => $cc_numb_store + ), + array( 'id' => $account_id ), + array( + '%s', + '%s', + '%s' + ) + ); + + } else { + $messages[] = "Sorry, we were unable to store your credit card data for future use, but we did try."; + } + + } + $result = array( 'status' => 1, 'errors' => array(), @@ -1213,7 +1285,7 @@ class GlmBillingSupport */ public function processMemberRenewal( $account_id, $invoice_id, $amount, $employees = array() ) { - $result = $this->processPayment(); + $result = $this->processPayment( $account_id, $invoice_id ); if ( $result['status'] === 1 ) { @@ -1264,7 +1336,8 @@ class GlmBillingSupport public function makePayment( $account_id, $invoices, $amount ) { - $result = $this->processPayment(); + $payment_id = implode( '-', $invoices ); + $result = $this->processPayment( $account_id, $payment_id ); if ( $result['status'] === 1 ) { // Need to record the payment. diff --git a/classes/data/dataAccounts.php b/classes/data/dataAccounts.php index e269f12..7d86f73 100644 --- a/classes/data/dataAccounts.php +++ b/classes/data/dataAccounts.php @@ -240,6 +240,25 @@ class GlmDataAccounts extends GlmDataAbstract 'required' => false, ), + // Customer Profile Id + 'customer_profile_id' => array( + 'field' => 'customer_profile_id', + 'type' => 'text', + 'use' => 'a', + ), + // Payment Profile Id + 'payment_profile_id' => array( + 'field' => 'payment_profile_id', + 'type' => 'text', + 'use' => 'a', + ), + // Payment Profile Card + 'payment_profile_card' => array( + 'field' => 'payment_profile_card', + 'type' => 'text', + 'use' => 'a', + ), + ); diff --git a/index.php b/index.php index 3cb10ea..83475b4 100644 --- a/index.php +++ b/index.php @@ -38,7 +38,7 @@ * version from this plugin. */ define('GLM_MEMBERS_BILLING_PLUGIN_VERSION', '0.0.1'); -define('GLM_MEMBERS_BILLING_PLUGIN_DB_VERSION', '0.0.18'); +define('GLM_MEMBERS_BILLING_PLUGIN_DB_VERSION', '0.0.19'); // 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/setup/databaseScripts/create_database_V0.0.18.sql b/setup/databaseScripts/create_database_V0.0.18.sql deleted file mode 100644 index 15c38ee..0000000 --- a/setup/databaseScripts/create_database_V0.0.18.sql +++ /dev/null @@ -1,264 +0,0 @@ --- Gaslight Media Billing Module --- File Created: 11/08/2017 --- Database Version: 0.0.15 --- 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 - billing_fname TINYTEXT NULL, -- Billing First Name - billing_lname TINYTEXT NULL, -- Billing Last Name - billing_addr1 TINYTEXT NULL, -- Billing Address 1 - billing_addr2 TINYTEXT NULL, -- Billing Address 2 - billing_city TINYTEXT NULL, -- Billing City - billing_state TINYTEXT NULL, -- Billing State - billing_zip TINYTEXT NULL, -- Billing Zip - billing_phone TINYTEXT NULL, -- Billing Phone - anniversary_date DATE NOT NULL, -- anniversary date - used for main invoice generation - renewal_date DATE NULL, -- renewal date of account - payment_data TEXT NULL, -- stored payment data - email TINYTEXT NULL, -- billing email - PRIMARY KEY (id), - INDEX(ref_dest), - INDEX(ref_name(20)), - INDEX(email(20)) -); - ----- - --- 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 - 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 - 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 - 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 - 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 - PRIMARY KEY (id) -); - ----- - --- 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 - PRIMARY KEY (id) -); - ----- - --- Set default billing Settings entry -INSERT INTO {prefix}settings - ( id, days_before_renewal ,days_after_expired ) - VALUES - ( 1, 90, 30 ); - ----- - --- 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 - PRIMARY KEY (id) -); - ----- - --- Set default billing Management entry -INSERT INTO {prefix}management - ( id ) - VALUES - ( 1 ); diff --git a/setup/databaseScripts/create_database_V0.0.19.sql b/setup/databaseScripts/create_database_V0.0.19.sql new file mode 100644 index 0000000..ba08d4d --- /dev/null +++ b/setup/databaseScripts/create_database_V0.0.19.sql @@ -0,0 +1,267 @@ +-- Gaslight Media Billing Module +-- File Created: 11/08/2017 +-- Database Version: 0.0.19 +-- 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 + billing_fname TINYTEXT NULL, -- Billing First Name + billing_lname TINYTEXT NULL, -- Billing Last Name + billing_addr1 TINYTEXT NULL, -- Billing Address 1 + billing_addr2 TINYTEXT NULL, -- Billing Address 2 + billing_city TINYTEXT NULL, -- Billing City + billing_state TINYTEXT NULL, -- Billing State + billing_zip TINYTEXT NULL, -- Billing Zip + billing_phone TINYTEXT NULL, -- Billing Phone + anniversary_date DATE NOT NULL, -- anniversary date - used for main invoice generation + 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 + PRIMARY KEY (id), + INDEX(ref_dest), + INDEX(ref_name(20)), + INDEX(email(20)) +); + +---- + +-- 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 + 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 + 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 + 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 + 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 + PRIMARY KEY (id) +); + +---- + +-- 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 + PRIMARY KEY (id) +); + +---- + +-- Set default billing Settings entry +INSERT INTO {prefix}settings + ( id, days_before_renewal ,days_after_expired ) + VALUES + ( 1, 90, 30 ); + +---- + +-- 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 + PRIMARY KEY (id) +); + +---- + +-- Set default billing Management entry +INSERT INTO {prefix}management + ( id ) + VALUES + ( 1 ); diff --git a/setup/databaseScripts/dbVersions.php b/setup/databaseScripts/dbVersions.php index 729b630..c12c896 100644 --- a/setup/databaseScripts/dbVersions.php +++ b/setup/databaseScripts/dbVersions.php @@ -32,5 +32,6 @@ $glmMembersBillingDbVersions = array( '0.0.16' => array('version' => '0.0.16', 'tables' => 14), '0.0.17' => array('version' => '0.0.17', 'tables' => 14), '0.0.18' => array('version' => '0.0.18', 'tables' => 14), + '0.0.19' => array('version' => '0.0.19', 'tables' => 14), ); diff --git a/setup/databaseScripts/update_database_V0.0.19.sql b/setup/databaseScripts/update_database_V0.0.19.sql new file mode 100644 index 0000000..4079815 --- /dev/null +++ b/setup/databaseScripts/update_database_V0.0.19.sql @@ -0,0 +1,19 @@ +-- Gaslight Media Billing Database +-- File Created: 04/06/2018 +-- Database Version: 0.0.19 +-- +-- To permit each query below to be executed separately, +-- all queries must be separated by a line with four dashes + +-- Add customer profile id +ALTER TABLE {prefix}accounts ADD customer_profile_id TINYTEXT NULL; -- Customer Profile Id (Authorize.net) + +---- + +-- Add payment profile id +ALTER TABLE {prefix}accounts ADD payment_profile_id TINYTEXT NULL; -- Payment Profile Id (Authorize.net) + +---- + +-- Add payment profile id +ALTER TABLE {prefix}accounts ADD payment_profile_card TINYTEXT NULL; -- Payment Profile Card (Authorize.net)