Adding contact name to billing account.
WIP for the labels.
/**
* viewInvoice
*
- * Need to get everything here for creating the invoice.
- * Need billing settings.
- * Invoice data.
- * All line items for that invoice.
+ * Return the HTML for the invoice
*
* @param mixed $invoice_id
*
*/
public function viewInvoice( $invoice_id )
{
- $invoice = $this->getInvoiceById( $invoice_id );
- $line_items = $this->getLineItemsForInvoice( $invoice_id );
- $account = $this->getAccountById( $invoice['account'] );
- $payments = $this->getInvoicePaymentsByInvoiceId( $invoice_id );
+ $fullInvoice = $this->getFullInvoiceData( $invoice_id );
$templateData = array(
'settings' => $this->config['settings'],
- 'invoice' => $invoice,
- 'line_items' => $line_items,
- 'account' => $account,
- 'payments' => $payments,
+ 'invoice' => $fullInvoice['invoice'],
+ 'line_items' => $fullInvoice['line_items'],
+ 'account' => $fullInvoice['account'],
+ 'payments' => $fullInvoice['payments'],
);
- // echo '<pre>$templateData: ' . print_r( $templateData, true ) . '</pre>';
-
$invoiceHtml = $this->generateInvoiceHtml( $templateData, 'admin/billing/invoiceStore.html' );
return $invoiceHtml;
}
-
+ /**
+ * getFullInvoiceData
+ *
+ * Need to get everything here for creating the invoice.
+ * Need billing settings.
+ * Invoice data.
+ * All line items for that invoice.
+ *
+ * @param mixed $invoice_id
+ *
+ * @access public
+ * @return void
+ */
+ public function getFullInvoiceData( $invoice_id )
+ {
+ $invoice = $this->getInvoiceById( $invoice_id );
+ return array(
+ 'invoice' => $invoice,
+ 'line_items' => $this->getLineItemsForInvoice( $invoice_id ),
+ 'account' => $this->getAccountById( $invoice['account'] ),
+ 'payments' => $this->getInvoicePaymentsByInvoiceId( $invoice_id ),
+ );
+ }
/**
* getLineItemsForInvoice
*
'use' => 'a',
),
+ // Use billing_contact_name instead of fname lname
+ 'billing_contact_name_enabled' => array(
+ 'field' => 'billing_contact_name_enabled',
+ 'type' => 'checkbox',
+ 'use' => 'a',
+ ),
+
);
}
* version from this plugin.
*/
define('GLM_MEMBERS_BILLING_PLUGIN_VERSION', '1.0.16');
-define('GLM_MEMBERS_BILLING_PLUGIN_DB_VERSION', '0.0.29');
+define('GLM_MEMBERS_BILLING_PLUGIN_DB_VERSION', '0.0.30');
// 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');
public function modelAction( $actionData = false ) {
- trigger_error( print_r( $_REQUEST, true ), E_USER_NOTICE );
- trigger_error( print_r( $actionData, true ), E_USER_NOTICE );
-
if ( isset( $_REQUEST['id'] ) ) {
$id = filter_var( $_REQUEST['id'], FILTER_VALIDATE_INT );
}
if ( $id ) {
// Create Billing Support Object.
$BillingSupport = new GlmBillingSupport( $this->wpdb, $this->config );
+ $fullInvoice = $BillingSupport->getFullInvoiceData( $id );
+
// Get the Invoice.
- $invoice = $BillingSupport->getInvoiceById( $id );
+ $invoice = $fullInvoice['invoice'];
if ( !$invoice ) {
echo 'failed to get invoice';
return false;
}
// Get the account information.
- $account = $BillingSupport->getAccountById( $invoice['account'] );
+ $account = $fullInvoice['account'];
// PDF settings
- $this->pdf_top_y = 725;
- $this->pdf_width = 570;
- $this->line_height = 10;
- $this->pdf_lft_col_x = 20;
- $this->pdf_rgt_col_x = 380;
- $this->pdf_bottom_y = 130;
- $this->pdf_font_size = 12;
- $this->pdf_header_font_1 = 24;
- $this->pdf_header_font_2 = 20;
- $this->color_white = array( 1, 1, 1 );
- $this->color_red = array( 1, 0, 0 );
- $this->color_black = array( 0, 0, 0 );
+ $this->pdf_top_y = 725;
+ $this->pdf_width = 570;
+ $this->line_height = 10;
+ $this->pdf_lft_col_x = 20;
+ $this->pdf_rgt_col_x = 380;
+ $this->pdf_bottom_y = 130;
+ $this->pdf_font_size = 12;
+ $this->pdf_header_font_1 = 24;
+ $this->pdf_header_font_2 = 20;
+ $this->color_white = array( 1, 1, 1 );
+ $this->color_red = array( 1, 0, 0 );
+ $this->color_black = array( 0, 0, 0 );
// Create pdf object
$pdf = new GlmPDFInvoice( 'a4', 'portrait' );
$pdf->allowedTags .= '|rect:.*?';
$pdf->setLineStyle( 1 );
- $pdf->ezSetMargins( 20, 20, 20, 20);
+ $pdf->ezSetMargins( 20, 20, 20, 20 );
$pdf->selectFont( 'Helvetica' );
// Set header/footer of all pages
if ( $this->config['settings']['company_logo'] ) {
$pdf->ezImage(
GLM_MEMBERS_PLUGIN_MEDIA_PATH . '/images/large/' . $this->config['settings']['company_logo'], // image
- 0, // padding
- 260, // width
+ 0, // padding
+ 260, // width
'none', // resize
'left', // justification
- '', // angle
- '' // array border
+ '', // angle
+ '' // array border
);
}
$pdf->restoreState();
$this->pdf_font_size
);
- // Line Items.
- $lineItems = $BillingSupport->getLineItemsForInvoice( $id );
+ $invoiceLineItems = array();
+ // Line Items (charges).
+ $lineItems = $fullInvoice['line_items'];
+ $item = false;
foreach ( $lineItems as &$item ) {
- $item['created'] = date( 'm/d/Y', strtotime( $item['created'] ) );
+ $invoiceLineItems[] = array(
+ 'created' => date( 'm/d/Y', strtotime( $item['created'] ) ),
+ 'name' => $item['name'],
+ 'amount' => $item['amount'],
+ );
+ }
+ // Payments.
+ $payments = $fullInvoice['payments'];
+ $item = false;
+ foreach ( $payments as &$item ) {
+ $invoiceLineItems[] = array(
+ 'created' => date( 'm/d/Y', strtotime( $item['transaction_time'] ) ),
+ 'name' => 'Payment',
+ 'amount' => '-'.$item['amount'],
+ );
}
- $lineItemData = array();
$pdf->ezText( '', $this->pdf_font_size );
$pdf->ezText( '', $this->pdf_font_size );
$pdf->ezTable(
- $lineItems,
- array( 'created' => '<b>Date</b>', 'name' => '<b>Description</b>', 'amount' => '<b>Amount</b>', 'total' => '<b>Balance</b>' ),
+ $invoiceLineItems,
+ array( 'created' => '<b>Date</b>', 'name' => '<b>Description</b>', 'amount' => '<b>Rate</b>' ),
'',
array(
'showHeadings' => 1,
'xOrientation' => 'right',
'cols' => array(
'created' => array( 'width' => 100 ),
- 'name' => array( 'width' => 330 ),
+ 'name' => array( 'width' => 380 ),
+ 'amount' => array( 'width' => 50, 'justification' => 'right' ),
+ ),
+ )
+ );
+ $invoiceTotal = array(
+ array(
+ 'created' => '',
+ 'name' => 'Total Amount Due',
+ 'amount' => $invoice['balance']
+ )
+ );
+ $pdf->ezTable(
+ $invoiceTotal,
+ array( 'created' => '<b>Date</b>', 'name' => '<b>Description</b>', 'amount' => '<b>Rate</b>' ),
+ '',
+ array(
+ 'showHeadings' => 0,
+ 'showLines' => 4,
+ 'width' => 560,
+ 'xPos' => 0,
+ 'xOrientation' => 'right',
+ 'cols' => array(
+ 'created' => array( 'width' => 100 ),
+ 'name' => array( 'width' => 380, 'justification' => 'right' ),
'amount' => array( 'width' => 50, 'justification' => 'right' ),
- 'total' => array( 'width' => 50, 'justification' => 'right' ),
),
)
);
)
);
$pdf->ezText( '', $this->pdf_font_size );
- $paymentForm = array(
+ $paymentForm1 = array(
array( 'header' => '<b>Please Pay:</b>', 'value' => $invoice['balance'] ),
+ );
+ $newY = $pdf->ezTable(
+ $paymentForm1,
+ array( 'header' => 'Header', 'value' => 'Value' ),
+ '',
array(
- 'header' => '<b>Payment Amount:</b>',
- 'value' => '___________',
- 'headerFill' => $this->color_white,
- 'valueFill' => $this->color_white,
-
- ),
+ 'fontSize' => 12,
+ 'showHeadings' => 0,
+ 'showLines' => 0,
+ 'width' => 230,
+ 'xPos' => 320,
+ 'xOrientation' => 'right',
+ 'cols' => array( 'header' => array( 'width' => 120,'justification' => 'right' ), 'value' => array( 'justification' => 'right' ) ),
+ )
+ );
+ if ( $invoice['balance'] != '0.00' ) {
+ $paymentForm2 = array(
+ array(
+ 'header' => '<b>Payment Amount:</b>',
+ 'value' => '___________',
+ 'headerFill' => $this->color_white,
+ 'valueFill' => $this->color_white,
+ )
+ );
+ $newY = $pdf->ezTable(
+ $paymentForm2,
+ array( 'header' => 'Header', 'value' => 'Value' ),
+ '',
+ array(
+ 'fontSize' => 12,
+ 'showHeadings' => 0,
+ 'showLines' => 0,
+ 'width' => 230,
+ 'xPos' => 320,
+ 'xOrientation' => 'right',
+ 'cols' => array( 'header' => array( 'width' => 120,'justification' => 'right' ), 'value' => array( 'justification' => 'right' ) ),
+ )
+ );
+ } else {
+ $newY = $pdf->ezText( '', $this->pdf_font_size );
+ $newY = $pdf->addText( 375, $newY, 14, '<b>NO PAYMENT REQUIRED</b>' );
+ }
+ $paymentForm3 = array(
array( 'header' => '<b>Member Billing #:</b>', 'value' => $account['account_number'] ),
);
$pdf->ezTable(
- $paymentForm,
+ $paymentForm3,
array( 'header' => 'Header', 'value' => 'Value' ),
'',
array(
'width' => 230,
'xPos' => 320,
'xOrientation' => 'right',
- 'cols' => array( 'header' => array( 'justification' => 'right' ), 'value' => array( 'justification' => 'right' ) ),
+ 'cols' => array( 'header' => array( 'width' => 120, 'justification' => 'right' ), 'value' => array( 'justification' => 'right' ) ),
)
);
--- /dev/null
+<?php
+
+/**
+ * Gaslight Media Members Database
+ * PDF Output by admin-ajax
+ *
+ * PHP version 5.5
+ *
+ * @category glmWordPressPlugin
+ * @package glmMembersDatabase
+ * @author Chuck Scott <cscott@gaslightmedia.com>
+ * @license http://www.gaslightmedia.com Gaslightmedia
+ * @version 0.1
+ */
+
+require_once GLM_MEMBERS_BILLING_PLUGIN_CLASS_PATH . '/billingSupport.php';
+require_once GLM_MEMBERS_BILLING_PLUGIN_PATH . '/lib/GlmPDFInvoice.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=runQueue
+ *
+ * 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.
+ *
+ */
+
+/**
+ * This class handles the work of creating new invoices based on.
+ * 1) Member Type of member matching a paid invoiceType
+ * 2) Member renewal date past
+ * 3) Member has Billing Account
+ * 4) Member has no active Invoice
+ * 5) Renewal date is within the next 30 Days
+ *
+ */
+class GlmMembersAdmin_ajax_createPDFLabels
+{
+
+ /**
+ * 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 ) {
+
+ $BillingSupport = new GlmBillingSupport( $this->wpdb, $this->config );
+
+ // Expect an array of member data with addresses.
+
+ // PDF settings
+ $this->pdf_top_y = 725;
+ $this->pdf_width = 570;
+ $this->line_height = 10;
+ $this->pdf_lft_col_x = 20;
+ $this->pdf_rgt_col_x = 380;
+ $this->pdf_bottom_y = 130;
+ $this->pdf_font_size = 12;
+ $this->pdf_header_font_1 = 24;
+ $this->pdf_header_font_2 = 20;
+ $this->color_white = array( 1, 1, 1 );
+ $this->color_red = array( 1, 0, 0 );
+ $this->color_black = array( 0, 0, 0 );
+
+ // Create pdf object
+ $pdf = new GlmPDFInvoice( 'a4', 'portrait' );
+ $pdf->allowedTags .= '|rect:.*?';
+ $pdf->setLineStyle( 1 );
+ $pdf->ezSetMargins( 20, 20, 20, 20 );
+ $pdf->selectFont( 'Helvetica' );
+
+ $Invoice = new GlmDataInvoices( $this->wpdb, $this->config );
+ $invoices = $Invoice->getList();
+
+ // echo '<pre>$invoices: ' . print_r( $invoices, true ) . '</pre>';
+
+ $y = 830;
+ $pdf->ezSetY( $y );
+
+ $counter = 0;
+ foreach ( $invoices as $invoice ) {
+ $counter++;
+ if ( $counter % 2 == 0 ) {
+ $y = $y += 40;
+ $pdf->ezSetY( $y );
+ $option = array(
+ 'aleft' => 330,
+ );
+ } else {
+ $y = $y -= 30;
+ $pdf->ezSetY( $y );
+ $option = '';
+ }
+
+ // echo '<pre>$invoice: ' . print_r( $invoice['account']['value'], true ) . '</pre>';
+ // Get account
+ $account = $BillingSupport->getAccountById( $invoice['account']['value'] );
+ // echo '<pre>$account: ' . print_r( $account, true ) . '</pre>';
+ $y = $pdf->ezText(
+ sprintf(
+ "<b>%s</b>\n%s\n%s, %s %s",
+ $account['ref_name'],
+ $account['billing_addr1'],
+ $account['billing_city'],
+ $account['billing_state'],
+ $account['billing_zip']
+ ),
+ 12,
+ $option
+ );
+ if ( $y <= 80 && $counter % 2 == 0 ) {
+ $pdf->ezNewPage();
+ $y = 830;
+ $pdf->ezSetY( $y );
+ }
+ }
+
+ $pdf->ezStream();
+
+ wp_die();
+ }
+
+}
+++ /dev/null
--- 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_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(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
- 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
- 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
- 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.
- 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)
-);
--- /dev/null
+-- 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(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
+ 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
+ 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.
+ 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)
+);
'0.0.27' => array('version' => '0.0.27', 'tables' => 15, 'date' => '11/19/2018'),
'0.0.28' => array('version' => '0.0.28', 'tables' => 15, 'date' => '11/27/2018'),
'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'),
);
--- /dev/null
+-- Gaslight Media Billing Database
+-- File Created: 12/04/2018
+-- Database Version: 0.0.30
+--
+-- 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}accounts ADD billing_contact_name TINYTEXT NULL;
+
+----
+
+ALTER TABLE {prefix}settings ADD billing_contact_name_enabled BOOLEAN DEFAULT '0';
'invoiceTypes' => GLM_MEMBERS_BILLING_PLUGIN_SLUG,
'createNewInvoices' => GLM_MEMBERS_BILLING_PLUGIN_SLUG,
'createPDFInvoice' => GLM_MEMBERS_BILLING_PLUGIN_SLUG,
+ 'createPDFLabels' => GLM_MEMBERS_BILLING_PLUGIN_SLUG,
'accountsListExport' => GLM_MEMBERS_BILLING_PLUGIN_SLUG,
'paymentsListExport' => GLM_MEMBERS_BILLING_PLUGIN_SLUG,
'billingFlagExpiredUsers' => GLM_MEMBERS_BILLING_PLUGIN_SLUG,
</td>
</tr>
+ <tr>
+ <th style="text-align: right;" {if $billingSettings.fieldRequired.billing_contact_name_enabled} class="glm-required"}{/if}>
+ </th>
+ <td>
+ <input type="checkbox" name="billing_contact_name_enabled"{if $billingSettings.fieldData.billing_contact_name_enabled.value} checked="checked"{/if}>
+ Enable Billing Contact Name
+ </td>
+ </tr>
+
<tr>
<th style="text-align: right;" {if $billingSettings.fieldRequired.renewal_day_static} class="glm-required"}{/if}>
</th>