From: Steve Sutton Date: Mon, 15 Jan 2018 20:42:42 +0000 (-0500) Subject: Setup 2 cron task style ajax models. X-Git-Tag: v1.0.0^2~179 X-Git-Url: http://cvs2.gaslightmedia.com/gitweb/?a=commitdiff_plain;h=8664a2c320459c98184f5c3f1ec514dfa5f0b329;p=WP-Plugins%2Fglm-member-db-billing.git Setup 2 cron task style ajax models. 1 for storing id's into the queue. 2 for sending the queues. --- diff --git a/classes/notifications.php b/classes/notifications.php index eb3051b..90b8f83 100644 --- a/classes/notifications.php +++ b/classes/notifications.php @@ -81,6 +81,7 @@ class GlmNotifications // echo '
$account: ' . print_r( $account, true ) . '
'; // exit; $to_email = $account['email']; + // echo '
$to_email: ' . print_r( $to_email, true ) . '
'; if ( !$to_email ) { // If there's no email then return false. return false; @@ -89,7 +90,7 @@ class GlmNotifications // get the Notification type var_dump( $notification_id ); $notification_type = $this->getNotificationTypeById( $notification_id ); - // echo '
$notification_type: ' . print_r( $notification_type, true ) . '
'; + echo '
$notification_type: ' . print_r( $notification_type, true ) . '
'; if ( !$notification_type ) { // If there's no notification type then return false. return false; @@ -171,6 +172,17 @@ class GlmNotifications $this->recordNotification( $notice_data ); } + /** + * parseSmartyTemplateString + * + * + * + * @param mixed $data + * @param mixed $template_string + * + * @access public + * @return void + */ public function parseSmartyTemplateString( $data, $template_string ) { // Load Smarty Template support @@ -328,4 +340,79 @@ class GlmNotifications { return "text/html"; } + + /** + * queueNotice + * + * Queue the noticifation. + * + * @param mixed $notification_type Id for the notification type + * @param mixed $account Id for the account + * + * @access public + * @return void + */ + public function queueNotice( $notification_type, $account ) + { + // First check to see if there's already one in the queue. + $queue_id = $this->wpdb->get_var( + $this->wpdb->prepare( + "SELECT id + FROM " . GLM_MEMBERS_BILLING_PLUGIN_DB_PREFIX . "notification_queue + WHERE notification_type = %d + AND account = %d", + $notification_type, + $account + ) + ); + if ( !$queue_id ) { + $this->wpdb->insert( + GLM_MEMBERS_BILLING_PLUGIN_DB_PREFIX . 'notification_queue', + array( + 'notification_type' => $notification_type, + 'account' => $account + ), + array( + '%d', + '%d' + ) + ); + } + } + + /** + * getQueuedNotifications + * + * Grab all queued notifications. + * + * @access public + * @return array + */ + public function getQueuedNotifications() + { + return $this->wpdb->get_results( + "SELECT * + FROM " . GLM_MEMBERS_BILLING_PLUGIN_DB_PREFIX . "notification_queue", + ARRAY_A + ); + } + + /** + * deleteQueue + * + * Remove notice from the queue. + * + * @param mixed $queue_id Queue id to delete. + * + * @access public + * @return void + */ + public function deleteQueue( $queue_id ) + { + $this->wpdb->delete( + GLM_MEMBERS_BILLING_PLUGIN_DB_PREFIX . 'notification_queue', + array( 'id' => $queue_id ), + array( '%d' ) + ); + } } diff --git a/index.php b/index.php index bbf9b32..dd0bbab 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.7'); +define('GLM_MEMBERS_BILLING_PLUGIN_DB_VERSION', '0.0.8'); // 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/runCron.php b/models/admin/ajax/runCron.php deleted file mode 100644 index a721efd..0000000 --- a/models/admin/ajax/runCron.php +++ /dev/null @@ -1,113 +0,0 @@ - - * @license http://www.gaslightmedia.com Gaslightmedia - * @version 0.1 - */ - -require_once GLM_MEMBERS_BILLING_PLUGIN_CLASS_PATH . '/notifications.php'; -require_once GLM_MEMBERS_BILLING_PLUGIN_CLASS_PATH . '/billingSupport.php'; -/** - * Steve Note... - * - * You can get to this using the following URL. - * - * {host}/wp-admin/admin-ajax.php?action=glm_members_admin_ajax&glm_action=pdfOutput&mystuff=THIS - * - * You should be able to do this as POST or GET and should be able to add and read additional parameters. - * I added a "mystuff" parameter to the URL above and it does output from the code in the - * modelAction() function below. - * - * To add another model under models/admin/ajax all you need to do is create it and add it to the - * setup/validActions.php file. - * - */ - -// Load Members data abstract -// require_once GLM_MEMBERS_PLUGIN_CLASS_PATH.'/data/dataImages.php'; - -/** - * This class performs the work of handling images passed to it via - * an AJAX call that goes through the WorPress AJAX Handler. - * - */ -class GlmMembersAdmin_ajax_runCron -{ - - /** - * WordPress Database Object - * - * @var $wpdb - * @access public - */ - public $wpdb; - /** - * Plugin Configuration Data - * - * @var $config - * @access public - */ - public $config; - - public function __construct ($wpdb, $config) - { - - // Save WordPress Database object - $this->wpdb = $wpdb; - - // Save plugin configuration object - $this->config = $config; - - } - - public function modelAction( $actionData = false ) { - // Get all notifications that are done by date. - $Notifications = new GlmNotifications( $this->wpdb, $this->config ); - $notifications = $Notifications->getNotificationsWithSendByDate(); - echo '
$notifications: ' . print_r( $notifications, true ) . '
'; - - // Get all invoices that are unpaid. - $billingSupport = new GlmBillingSupport( $this->wpdb, $this->config ); - $unpaid_invoices = $billingSupport->getUnPaidInvoices(); - echo '
$unpaid_invoices: ' . print_r( $unpaid_invoices, true ) . '
'; - - // Loop through the invoices and for each one see if any notices are to be sent out. - foreach ( $unpaid_invoices as $invoice ) { - $due_date = $invoice['due_date']; - $dueDate = new DateTime( $due_date ); - echo '
$dueDate 1: ' . print_r( $dueDate, true ) . '
'; - - // Loop through the notifications and see if this unpaid one is due. - foreach ( $notifications as $notice ) { - // Is this before or after - switch ( $notice['send_date_when'] ) { - case $this->config['send_date_when_numb']['Before']: - echo '

Before

'; - $dueDate->modify( - '-' . $notice['send_date_number'] . ' '. - $this->config['send_date_period'][$notice['send_date_period']] . - (($notice['send_date_number'] > 1) ? 's': '') - - ); - echo '
$dueDate 2: ' . print_r( $dueDate, true ) . '
'; - break; - case $this->config['send_date_when_numb']['After']: - echo '

After

'; - break; - default: - break; - } - } - } - - wp_die(); - } -} diff --git a/models/admin/ajax/runQueue.php b/models/admin/ajax/runQueue.php new file mode 100644 index 0000000..2e4c5d4 --- /dev/null +++ b/models/admin/ajax/runQueue.php @@ -0,0 +1,84 @@ + + * @license http://www.gaslightmedia.com Gaslightmedia + * @version 0.1 + */ + +require_once GLM_MEMBERS_BILLING_PLUGIN_CLASS_PATH . '/notifications.php'; +require_once GLM_MEMBERS_BILLING_PLUGIN_CLASS_PATH . '/billingSupport.php'; +/** + * Steve Note... + * + * You can get to this using the following URL. + * + * {host}/wp-admin/admin-ajax.php?action=glm_members_admin_ajax&glm_action=runCron + * + * You should be able to do this as POST or GET and should be able to add and read additional parameters. + * I added a "mystuff" parameter to the URL above and it does output from the code in the + * modelAction() function below. + * + * To add another model under models/admin/ajax all you need to do is create it and add it to the + * setup/validActions.php file. + * + */ + +// Load Members data abstract +// require_once GLM_MEMBERS_PLUGIN_CLASS_PATH.'/data/dataImages.php'; + +/** + * This class performs the work of handling images passed to it via + * an AJAX call that goes through the WorPress AJAX Handler. + * + */ +class GlmMembersAdmin_ajax_runQueue +{ + + /** + * WordPress Database Object + * + * @var $wpdb + * @access public + */ + public $wpdb; + /** + * Plugin Configuration Data + * + * @var $config + * @access public + */ + public $config; + + public function __construct ($wpdb, $config) + { + + // Save WordPress Database object + $this->wpdb = $wpdb; + + // Save plugin configuration object + $this->config = $config; + + } + + public function modelAction( $actionData = false ) { + $Notifications = new GlmNotifications( $this->wpdb, $this->config ); + // Get the queue and send notices. + $queued = $Notifications->getQueuedNotifications(); + echo '
$queued: ' . print_r( $queued, true ) . '
'; + if ( isset( $queued ) && !empty( $queued ) ) { + foreach ( $queued as $queue ) { + $Notifications->sendEmailNotification( $queue['notification_type'], $queue['account'] ); + $Notifications->deleteQueue( $queue['id'] ); + } + } + wp_die(); + } +} diff --git a/models/admin/ajax/setupQueue.php b/models/admin/ajax/setupQueue.php new file mode 100644 index 0000000..5e495ea --- /dev/null +++ b/models/admin/ajax/setupQueue.php @@ -0,0 +1,139 @@ + + * @license http://www.gaslightmedia.com Gaslightmedia + * @version 0.1 + */ + +require_once GLM_MEMBERS_BILLING_PLUGIN_CLASS_PATH . '/notifications.php'; +require_once GLM_MEMBERS_BILLING_PLUGIN_CLASS_PATH . '/billingSupport.php'; +/** + * Steve Note... + * + * You can get to this using the following URL. + * + * {host}/wp-admin/admin-ajax.php?action=glm_members_admin_ajax&glm_action=runCron + * + * You should be able to do this as POST or GET and should be able to add and read additional parameters. + * I added a "mystuff" parameter to the URL above and it does output from the code in the + * modelAction() function below. + * + * To add another model under models/admin/ajax all you need to do is create it and add it to the + * setup/validActions.php file. + * + */ + +// Load Members data abstract +// require_once GLM_MEMBERS_PLUGIN_CLASS_PATH.'/data/dataImages.php'; + +/** + * This class performs the work of handling images passed to it via + * an AJAX call that goes through the WorPress AJAX Handler. + * + */ +class GlmMembersAdmin_ajax_setupQueue +{ + + /** + * WordPress Database Object + * + * @var $wpdb + * @access public + */ + public $wpdb; + /** + * Plugin Configuration Data + * + * @var $config + * @access public + */ + public $config; + + public function __construct ($wpdb, $config) + { + + // Save WordPress Database object + $this->wpdb = $wpdb; + + // Save plugin configuration object + $this->config = $config; + + } + + public function modelAction( $actionData = false ) { + // Get all notifications that are done by date. + $Notifications = new GlmNotifications( $this->wpdb, $this->config ); + $notifications = $Notifications->getNotificationsWithSendByDate(); + echo '
$notifications: ' . print_r( $notifications, true ) . '
'; + + // Get all invoices that are unpaid. + $billingSupport = new GlmBillingSupport( $this->wpdb, $this->config ); + $unpaid_invoices = $billingSupport->getUnPaidInvoices(); + echo '
$unpaid_invoices: ' . print_r( $unpaid_invoices, true ) . '
'; + + // Loop through the invoices and for each one see if any notices are to be sent out. + $currentDate = new DateTime(); + echo '
$currentDate: ' . print_r( $currentDate, true ) . '
'; + foreach ( $unpaid_invoices as $invoice ) { + $due_date = $invoice['due_date']; + + // Loop through the notifications and see if this unpaid one is due. + foreach ( $notifications as $notice ) { + // Need due date set in this loop each time. + $dueDate = new DateTime( $due_date ); + // Is this before or after + switch ( $notice['send_date_when'] ) { + case $this->config['send_date_when_numb']['Before']: + echo '

Before

'; + $dueDate->modify( + '-' . $notice['send_date_number'] . ' '. + $this->config['send_date_period'][$notice['send_date_period']] . + (($notice['send_date_number'] > 1) ? 's': '') + ); + echo '
$dueDate: ' . print_r( $dueDate, true ) . '
'; + $diff = $dueDate->diff( $currentDate ); + // When the diff is 0 days then the notice needs to go out. + + $days_from = $diff->format( '%a' ); + echo '
$days_from: ' . print_r( $days_from, true ) . '
'; + // Check to see if this date occurs today. + if ( $days_from === '0' ) { + // Add the notice id and account id to the queue + $Notifications->queueNotice( $notice['id'], $invoice['account'] ); + } + + break; + case $this->config['send_date_when_numb']['After']: + echo '

After

'; + $dueDate->modify( + '+' . $notice['send_date_number'] . ' '. + $this->config['send_date_period'][$notice['send_date_period']] . + (($notice['send_date_number'] > 1) ? 's': '') + ); + echo '
$dueDate: ' . print_r( $dueDate, true ) . '
'; + $diff = $dueDate->diff( $currentDate ); + $days_from = $diff->format( '%a' ); + echo '
$days_from: ' . print_r( $days_from, true ) . '
'; + // Check to see if this date occurs today. + if ( $days_from === '0' ) { + // Create the notice email + $Notifications->queueNotice( $notice['id'], $invoice['account'] ); + } + break; + default: + break; + } + } + } + + wp_die(); + } +} diff --git a/setup/databaseScripts/create_database_V0.0.7.sql b/setup/databaseScripts/create_database_V0.0.7.sql deleted file mode 100644 index 3ea2308..0000000 --- a/setup/databaseScripts/create_database_V0.0.7.sql +++ /dev/null @@ -1,227 +0,0 @@ --- Gaslight Media Billing Module --- File Created: 11/08/2017 --- Database Version: 0.0.3 --- 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, - ref_dest INT NOT NULL, -- reference to member id - ref_name TINYTEXT NOT NULL, -- Name of reference member - 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 - payment_data TEXT NULL, -- stored payment data - email TINYTEXT NULL, -- billing email - PRIMARY KEY (id) -); - ----- - --- 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) -); - ----- - --- 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) -); - ----- - --- 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 - 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 - 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 - PRIMARY KEY (id) -); - ----- - --- 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) -); - ----- - --- 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) -); - ----- - --- Settings -CREATE TABLE {prefix}settings ( - id INT NOT NULL AUTO_INCREMENT, - company_logo TINYTEXT NULL, - company_logo_height INT NULL, - company_name TINYTEXT NULL, - company_name2 TINYTEXT NULL, - company_addr1 TINYTEXT NULL, - company_addr2 TINYTEXT NULL, - company_city TINYTEXT NULL, - company_state TINYTEXT NULL, - company_zip TINYTEXT NULL, - company_phone TINYTEXT NULL, - company_email TINYTEXT NULL, - company_url TINYTEXT NULL, - payment_terms TEXT NULL, - PRIMARY KEY (id) -); - ----- - --- Set default billing Settings entry -INSERT INTO {prefix}settings - ( id ) - VALUES - ( 1 ); - ----- - --- 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, -- Creadit 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.8.sql b/setup/databaseScripts/create_database_V0.0.8.sql new file mode 100644 index 0000000..988d265 --- /dev/null +++ b/setup/databaseScripts/create_database_V0.0.8.sql @@ -0,0 +1,237 @@ +-- Gaslight Media Billing Module +-- File Created: 11/08/2017 +-- Database Version: 0.0.3 +-- 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, + ref_dest INT NOT NULL, -- reference to member id + ref_name TINYTEXT NOT NULL, -- Name of reference member + 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 + payment_data TEXT NULL, -- stored payment data + email TINYTEXT NULL, -- billing email + PRIMARY KEY (id) +); + +---- + +-- 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) +); + +---- + +-- 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) +); + +---- + +-- 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 + 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 + 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 + PRIMARY KEY (id) +); + +---- + +-- 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) +); + +---- + +-- Settings +CREATE TABLE {prefix}settings ( + id INT NOT NULL AUTO_INCREMENT, + company_logo TINYTEXT NULL, + company_logo_height INT NULL, + company_name TINYTEXT NULL, + company_name2 TINYTEXT NULL, + company_addr1 TINYTEXT NULL, + company_addr2 TINYTEXT NULL, + company_city TINYTEXT NULL, + company_state TINYTEXT NULL, + company_zip TINYTEXT NULL, + company_phone TINYTEXT NULL, + company_email TINYTEXT NULL, + company_url TINYTEXT NULL, + payment_terms TEXT NULL, + PRIMARY KEY (id) +); + +---- + +-- Set default billing Settings entry +INSERT INTO {prefix}settings + ( id ) + VALUES + ( 1 ); + +---- + +-- 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, -- Creadit 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 a96dcda..ad073e6 100644 --- a/setup/databaseScripts/dbVersions.php +++ b/setup/databaseScripts/dbVersions.php @@ -21,5 +21,6 @@ $glmMembersBillingDbVersions = array( '0.0.5' => array('version' => '0.0.5', 'tables' => 12), '0.0.6' => array('version' => '0.0.6', 'tables' => 13), '0.0.7' => array('version' => '0.0.7', 'tables' => 13), + '0.0.8' => array('version' => '0.0.8', 'tables' => 14), ); diff --git a/setup/databaseScripts/update_database_V0.0.8.sql b/setup/databaseScripts/update_database_V0.0.8.sql new file mode 100644 index 0000000..2590a71 --- /dev/null +++ b/setup/databaseScripts/update_database_V0.0.8.sql @@ -0,0 +1,14 @@ +-- Gaslight Media Billing Database +-- File Created: 1/15/2018 +-- Database Version: 0.0.8 +-- +-- To permit each query below to be executed separately, +-- all queries must be separated by a line with four dashes + +-- 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) +); diff --git a/setup/validActions.php b/setup/validActions.php index 3ec0ea8..c63fd14 100644 --- a/setup/validActions.php +++ b/setup/validActions.php @@ -60,7 +60,8 @@ $glmMembersBillingAddOnValidActions = array( 'adminActions' => array( 'ajax' => array( - 'runCron' => GLM_MEMBERS_BILLING_PLUGIN_SLUG, + 'setupQueue' => GLM_MEMBERS_BILLING_PLUGIN_SLUG, + 'runQueue' => GLM_MEMBERS_BILLING_PLUGIN_SLUG, ), 'management' => array( 'billing' => GLM_MEMBERS_BILLING_PLUGIN_SLUG,