Update for database (new setting)
authorSteve Sutton <steve@gaslightmedia.com>
Tue, 11 Jun 2019 17:44:50 +0000 (13:44 -0400)
committerSteve Sutton <steve@gaslightmedia.com>
Tue, 11 Jun 2019 17:44:50 +0000 (13:44 -0400)
New setting for member types that are free.

classes/data/dataSettings.php
index.php
models/admin/ajax/billingFlagExpiredUsers.php
models/admin/billing/accounts.php
models/admin/settings/billing.php
setup/databaseScripts/create_database_V0.0.39.sql [deleted file]
setup/databaseScripts/create_database_V0.0.40.sql [new file with mode: 0644]
setup/databaseScripts/dbVersions.php
setup/databaseScripts/update_database_V0.0.40.sql [new file with mode: 0644]
views/admin/billing/accounts.html
views/admin/settings/billing.html

index c4fa253..62b8d0a 100644 (file)
@@ -328,13 +328,20 @@ class GlmDataBillingSettings extends GlmDataAbstract
                 'use'   => 'a',
             ),
 
-            // Renewal Month
+            // Member Types that require billing
             'member_types_requiring_billing' => array(
                 'field' => 'member_types_requiring_billing',
                 'type'  => 'text',
                 'use'   => 'a',
             ),
 
+            // Member Types that are free
+            'member_types_free' => array(
+                'field' => 'member_types_free',
+                'type'  => 'text',
+                'use'   => 'a',
+            ),
+
             // Show account number in invoice
             'invoice_show_account_number' => array(
                 'field' => 'invoice_show_account_number',
index bec571e..e6eb456 100644 (file)
--- a/index.php
+++ b/index.php
@@ -40,7 +40,7 @@
 define('GLM_MEMBERS_BILLING_PLUGIN_VERSION', '1.0.31');
 
 // Database Version
-define('GLM_MEMBERS_BILLING_PLUGIN_DB_VERSION', '0.0.39');
+define('GLM_MEMBERS_BILLING_PLUGIN_DB_VERSION', '0.0.40');
 
 // This is the minimum version of the GLM Members DB plugin require for this plugin.
 define('GLM_MEMBERS_BILLING_PLUGIN_MIN_MEMBERS_REQUIRED_VERSION', '2.8.0');
index 65701d1..f12ec16 100644 (file)
@@ -70,28 +70,32 @@ class GlmMembersAdmin_ajax_billingFlagExpiredUsers
     public function modelAction( $actionData = false )
     {
 
-        // echo '<pre>$actionData: ' . print_r( $actionData, true ) . '</pre>';
         $days_after_expired = $this->config['settings']['days_after_expired'];
         $current_date       = date( 'Y-m-d' );
         $restrictedRole     = $this->config['contact_role_numb']['LogInContact'];
-        // echo '<pre>$restrictedRole: ' . print_r( $restrictedRole, true ) . '</pre>';
 
         // Update All expired accounts so they can only be in members only not admin.
         // Find all member contacts (by ref_dest) with accounts that are expired.
         // With those set their contact_role to 30 (login only)
         if ( $days_after_expired = filter_var( $days_after_expired, FILTER_VALIDATE_INT ) ) {
-            // Fix Free members
-            // These would be memberships that are free so they don't pay.
-            // They just get updated renewal dates.
-            $this->wpdb->query(
-                "UPDATE " . GLM_MEMBERS_BILLING_PLUGIN_DB_PREFIX . "accounts
-                    SET invoice_type = 0
-                  WHERE invoice_type != 0
-                    AND ref_dest IN (
-                        SELECT id
-                          FROM " . GLM_MEMBERS_PLUGIN_DB_PREFIX . "members
-                         WHERE member_type in ( 5, 7, 9, 13))"
-            );
+            $member_types_enabled = $this->config['settings']['member_types_enabled'];
+            if ( $member_types_enabled ) {
+                $member_types_free = $this->config['settings']['member_types_free'];
+                if ( $member_types_free && !empty( $member_types_free = unserialize( $member_types_free ) ) ) {
+                    // Fix Free members
+                    // These would be memberships that are free so they don't pay.
+                    // They just get updated renewal dates.
+                    $this->wpdb->query(
+                        "UPDATE " . GLM_MEMBERS_BILLING_PLUGIN_DB_PREFIX . "accounts
+                            SET invoice_type = 0
+                          WHERE invoice_type != 0
+                            AND ref_dest IN (
+                                SELECT id
+                                  FROM " . GLM_MEMBERS_PLUGIN_DB_PREFIX . "members
+                                 WHERE member_type in ( " . implode( ',', $member_types_free ) . "))"
+                    );
+                }
+            }
             // Update any account that has invoice_type set to 0 and have an expired renewal_date
             $this->wpdb->query(
                 "UPDATE " . GLM_MEMBERS_BILLING_PLUGIN_DB_PREFIX . "accounts
@@ -111,7 +115,6 @@ class GlmMembersAdmin_ajax_billingFlagExpiredUsers
             );
             if ( isset( $members ) && $members ) {
                 foreach ( $members as $member ) {
-                    // echo '<pre>$member: ' . print_r( $member, true ) . '</pre>';
                     apply_filters(
                         'glm_contact_update_user_role_by_ref_dest',
                         '',
index 31bd15e..1c78262 100644 (file)
@@ -134,6 +134,12 @@ class GlmMembersAdmin_billing_accounts extends GlmDataAccounts
             $option = $_REQUEST['option'];
         }
 
+        // Enqueue GLMA Foundation
+        // wp_enqueue_style( 'glmaFoundation', GLM_MEMBERS_PLUGIN_URL . '/css/glma-foundation.min.css' );
+        // wp_enqueue_style( 'Foundation6', GLM_MEMBERS_BILLING_PLUGIN_URL . '/js/foundation/css/foundation.min.css' );
+        // wp_enqueue_script( 'Foundation6', GLM_MEMBERS_BILLING_PLUGIN_URL . '/js/foundation/vendor/foundation.min.js' );
+        // wp_enqueue_script( 'FoundationReveal', GLM_MEMBERS_BILLING_PLUGIN_URL . '/js/foundation.reveal.js' );
+
         // Do selected option
         switch ($option) {
 
index c14fc42..1c3d1b6 100644 (file)
@@ -151,6 +151,11 @@ class GlmMembersAdmin_settings_billing extends GlmDataBillingSettings
                         if ( isset( $_REQUEST['member_types_requiring_billing_option'] ) ) {
                             $_REQUEST['member_types_requiring_billing'] = serialize( $_REQUEST['member_types_requiring_billing_option'] );
                         }
+                        // Combine the member types that are free
+                        $_REQUEST['member_types_free'] = '';
+                        if ( isset( $_REQUEST['member_types_free_option'] ) ) {
+                            $_REQUEST['member_types_free'] = serialize( $_REQUEST['member_types_free_option'] );
+                        }
 
                         // Update the billing settings settings
                         $billing_settings = $this->updateEntry(1);
@@ -190,6 +195,12 @@ class GlmMembersAdmin_settings_billing extends GlmDataBillingSettings
         } else {
             $member_types_requring_billing_selected = array();
         }
+        $member_types_free_selected = $billing_settings['fieldData']['member_types_free'];
+        if ( $member_types_free_selected ) {
+            $member_types_free_selected = unserialize( $member_types_free_selected );
+        } else {
+            $member_types_free_selected = array();
+        }
 
         // Compile template data
         $template_data = array(
@@ -203,6 +214,7 @@ class GlmMembersAdmin_settings_billing extends GlmDataBillingSettings
             'renewal_day_opts'    => range( 0, 31, 1 ),
             'member_types'        => $memberTypes,
             'selectedMTRB'        => $member_types_requring_billing_selected,
+            'selectedMTFREE'      => $member_types_free_selected,
         );
 
         // Return status, suggested view, and data to controller
diff --git a/setup/databaseScripts/create_database_V0.0.39.sql b/setup/databaseScripts/create_database_V0.0.39.sql
deleted file mode 100644 (file)
index fbbacd9..0000000
+++ /dev/null
@@ -1,390 +0,0 @@
--- Gaslight Media Billing Module
--- File Created: 02/19/2019
--- Database Version: 0.0.39
--- Database Creation Script
---
--- To permit each query below to be executed separately,
--- all queries must be separated by a line with four dashes
---
--- **** BE SURE TO ALSO UPDATE drop_database_Vxxx.sql FILE WHEN CHANGING TABLES ****
---
-
--- Billing Accounts
-CREATE TABLE {prefix}accounts (
-    id INT NOT NULL AUTO_INCREMENT,
-    archived BOOLEAN DEFAULT '0',                          -- Marks account as archived
-    ref_dest INT NOT NULL,                                 -- reference to member id
-    ref_name TINYTEXT NOT NULL,                            -- Name of reference member
-    invoice_type INT NOT NULL DEFAULT '0',                 -- Ref to Invoice Type id
-    billing_contact_name TINYTEXT NULL,                    -- Billing Contact Name
-    billing_fname TINYTEXT NULL,                           -- Billing First Name
-    billing_lname TINYTEXT NULL,                           -- Billing Last Name
-    billing_company TINYTEXT NULL,                         -- Billing Company Name
-    billing_position TINYTEXT NULL,                        -- Billing Title/Position
-    billing_addr1 TINYTEXT NULL,                           -- Billing Address 1
-    billing_addr2 TINYTEXT NULL,                           -- Billing Address 2
-    billing_city TINYTEXT NULL,                            -- Billing City
-    billing_county INT NULL,                               -- Billing County
-    billing_state TINYTEXT NULL,                           -- Billing State
-    billing_zip TINYTEXT NULL,                             -- Billing Zip
-    billing_country TINYTEXT NULL,                         -- Billing Country
-    billing_phone TINYTEXT NULL,                           -- Billing Phone
-    billing_fax TINYTEXT NULL,                             -- Billing Fax
-    anniversary_date DATE NULL,                            -- anniversary date
-    renewal_date DATE NULL,                                -- renewal date of account
-    payment_data TEXT NULL,                                -- stored payment data
-    customer_profile_id TINYTEXT NULL,                     -- Customer Profile Id (Authorize.net)
-    payment_profile_id TINYTEXT NULL,                      -- Payment Profile Id (Authorize.net)
-    payment_profile_card TINYTEXT NULL,                    -- Payment Profile Card (Authorize.net)
-    email TINYTEXT NULL,                                   -- billing email
-    boss BOOLEAN DEFAULT '0',                              -- Boss flag
-    account_number TINYTEXT NULL,                          -- Account Number
-    email_invoice BOOLEAN DEFAULT '0',                     -- Invoice by email
-    usmail_invoice BOOLEAN DEFAULT '0',                    -- Invoice by US Mail
-    fax_invoice BOOLEAN DEFAULT '0',                       -- Invoice by Fax
-    PRIMARY KEY (id),
-    INDEX(ref_dest),
-    INDEX(ref_name(20)),
-    INDEX(email(20)),
-    INDEX(invoice_type),
-    INDEX(renewal_date),
-    INDEX(billing_county)
-);
-
-----
-
--- transactions
-CREATE TABLE {prefix}transactions (
-    id INT NOT NULL AUTO_INCREMENT,
-    type INT NOT NULL,                                     -- type of transaction (payment,invoice,etc)
-    type_id INT NOT NULL,                                  -- reference to type id
-    account INT NOT NULL,                                  -- reference to account id
-    transaction_time DATETIME NOT NULL,                    -- datetime for the transaction
-    current_invoice_total DECIMAL(8, 2) NOT NULL,          -- invoice total
-    current_payment_total DECIMAL(8, 2) NOT NULL,          -- payment total
-    PRIMARY KEY (id),
-    INDEX(account),
-    INDEX(type_id),
-    INDEX(transaction_time)
-);
-
-----
-
--- Invoices
-CREATE TABLE {prefix}invoices (
-    id INT NOT NULL AUTO_INCREMENT,
-    old_invoice_id INT NULL,                               -- old invoice id from uptra
-    transaction_time DATETIME NOT NULL,                    -- datetime for the invoice
-    account INT NOT NULL,                                  -- ref to account id
-    amount_total DECIMAL(8, 2) NOT NULL,                   -- total amount for invoice
-    balance DECIMAL(8, 2) NOT NULL,                        -- balance for this invoice
-    due_date DATE NOT NULL,                                -- Due date for this invoice
-    paid BOOLEAN DEFAULT '0',                              -- true/false if invoice is paid
-    notes TINYTEXT,                                        -- notes for this invoice
-    renewal BOOLEAN DEFAULT '0',                           -- true/false if a renewal
-    recurring BOOLEAN DEFAULT '0',                         -- true/false if recurring
-    recurrence INT NULL DEFAULT 0,                         -- recurrence type
-    PRIMARY KEY (id),
-    INDEX(account),
-    INDEX(transaction_time),
-    INDEX(due_date)
-);
-
-----
-
--- Line Item Types
-CREATE TABLE {prefix}invoice_types (
-    id INT NOT NULL AUTO_INCREMENT,
-    name TINYTEXT NOT NULL,                                -- name
-    parent INT NOT NULL DEFAULT 0,                         -- 0 if top level otherwise ref to another line_item_type as it's parent
-    member_type INT NOT NULL DEFAULT 0,                    -- Member Type assigned Default 0
-    amount DECIMAL(8,2) NOT NULL DEFAULT '0.00',           -- amount
-    recurring BOOLEAN DEFAULT '0',                         -- true/false if recurring
-    recurrence INT NULL DEFAULT 0,                         -- recurrence type
-    dynamic_amount BOOLEAN DEFAULT '0',                    -- true/false if amount is dynamic
-    qcode TINYTEXT NULL,                                   -- qcode for quickbooks
-    category TINYTEXT NULL,                                -- quickbooks category
-    PRIMARY KEY (id)
-);
-
-----
-
--- Line Items
-CREATE TABLE {prefix}line_items (
-    id INT NOT NULL AUTO_INCREMENT,
-    invoice INT NOT NULL,                                  -- reference to invoice
-    line_item_type INT NOT NULL,                           -- reference to line item type
-    account INT NULL DEFAULT 0,                            -- ref to account id (renewal or employee)
-    name TEXT NOT NULL,                                    -- line item name
-    amount DECIMAL(8,2) DEFAULT '0.00',                    -- line item amount per item
-    quantity INT DEFAULT 1,                                -- quantity
-    discount INT DEFAULT 0,                                -- Discount Percentage
-    total DECIMAL(8,2) DEFAULT '0.00',                     -- line item total
-    recurring BOOLEAN DEFAULT '0',                         -- true/false if recurring
-    recurrence INT NULL DEFAULT 0,                         -- recurrence type
-    created DATE NULL,                                     -- Date this line item was first created
-    first_due_date DATE NULL,                              -- The first due date for this item
-    next_due_date DATE NULL,                               -- Next Due Date for this item
-    PRIMARY KEY (id),
-    INDEX(account),
-    INDEX(created),
-    INDEX(first_due_date),
-    INDEX(next_due_date)
-);
-
-----
-
--- payments
-CREATE TABLE {prefix}payments (
-    id INT NOT NULL AUTO_INCREMENT,
-    transaction_time DATETIME NOT NULL,                    -- datetime of payment
-    account INT NOT NULL,                                  -- ref to account table
-    amount DECIMAL(8, 2) NOT NULL,                         -- payment amount
-    payment_method TINYTEXT NOT NULL,                      -- payment method
-    payment_data TINYTEXT NULL,                            -- additional payment info
-    notes TEXT NULL,                                       -- Notes/Comments on the payment
-    PRIMARY KEY (id)
-);
-
-----
-
--- pdfs
-CREATE TABLE {prefix}pdfs (
-    id INT NOT NULL AUTO_INCREMENT,
-    ref_type INT NOT NULL,                                 -- reference type
-    ref_dest INT NOT NULL,                                 -- reference types id
-    pdf MEDIUMTEXT NOT NULL,                               -- saved pdf
-    PRIMARY KEY (id)
-);
-
-----
-
--- Notification Types
-CREATE TABLE {prefix}notification_types (
-    id INT NOT NULL AUTO_INCREMENT,
-    name TINYTEXT NOT NULL,                                -- name
-    to_email TINYTEXT NULL,                                -- To email
-    from_header TINYTEXT NOT NULL,                         -- from headers
-    replyto TINYTEXT NULL,                                 -- reply-to headers
-    subject TINYTEXT NOT NULL,                             -- Subject
-    message TEXT NOT NULL,                                 -- Message
-    send_by_date BOOLEAN NULL DEFAULT '0',                 -- true/false send by date based on due date
-    send_by_action BOOLEAN NULL DEFAULT '0',               -- send notice based on an action
-    send_action INT NULL DEFAULT 0,                        -- (create invoice or receive payment)
-    send_date_number INT NULL DEFAULT 0,                   -- number to apply to send by date
-    send_date_period INT NULL DEFAULT 0,                   -- (days,weeks,months,years)
-    send_date_when INT NULL DEFAULT 0,                     -- (before or after)
-    PRIMARY KEY (id)
-);
-
-----
-
--- Notifications
-CREATE TABLE {prefix}notifications (
-    id INT NOT NULL AUTO_INCREMENT,
-    notification_type INT NOT NULL,                        -- ref to notification type
-    account INT NOT NULL,                                  -- ref to account
-    from_replyto TINYTEXT NOT NULL,                        -- from reply-to header
-    subject TEXT NOT NULL,                                 -- subject
-    message TEXT NOT NULL,                                 -- message
-    date_sent DATETIME NOT NULL,                           -- Date the notice was sent
-    email_sent TINYTEXT NOT NULL,                          -- email used
-    type INT NULL,                                         -- Invoice Type
-    type_id INT NULL,                                      -- type id (invoice or payment)
-    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,
-    -- Invoice Options
-    company_logo TINYTEXT NULL,                            -- Image logo
-    company_logo_width INT NULL,                           -- Logo Width (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
-    receipt_text TEXT NULL,                                -- Receipt Text
-    invoice_show_account_number BOOLEAN DEFAULT '0',       -- Show Billing Account number on invoices
-    invoice_show_invoice_number BOOLEAN DEFAULT '1',       -- Show Invoice Number on invoices
-    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
-    -- Renewal Options
-    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 '0',           -- 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
-    member_types_requiring_billing TEXT NULL,              -- List of member type id's that require billing
-    -- Account Number
-    account_number_enabled BOOLEAN DEFAULT '0',            -- Enable Disable account_number
-    account_number_required BOOLEAN DEFAULT '0',           -- Require account_number
-    account_number_unique BOOLEAN DEFAULT '0',             -- account_number must be unique
-    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
-    -- Square Credentials
-    square_prod_access_token TINYTEXT NULL,                     -- Square production access token
-    square_prod_app_id TINYTEXT NULL,                           -- Square production application id
-    square_prod_location_id TINYTEXT NULL,                      -- Square production location id
-    square_sandbox_access_token TINYTEXT NULL,                  -- Square sandbox access token
-    square_sandbox_app_id TINYTEXT NULL,                        -- Square sandbox application id
-    square_sandbox_location_id TINYTEXT NULL,                   -- Square sandbox location id
-    square_use_prod BOOLEAN DEFAULT '0',                        -- If true use Production creds
-    -- Uptravel options
-    uptravel_invoice_template BOOLEAN DEFAULT '0',              -- Use uptravel template for invoices.
-    uptravel_payment_form BOOLEAN DEFAULT '0',                  -- Use uptravel payment form style.
-    -- Dashboard options
-    dashboard_pending_renewals BOOLEAN DEFAULT '1',             -- Show pending renewals
-    dashboard_overdue_renewals BOOLEAN DEFAULT '1',             -- Show overdue renewals
-    dashboard_overdue_invoices BOOLEAN DEFAULT '1',             -- Show overdue 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)
-);
-
-----
-
--- Terms
-CREATE TABLE {prefix}settings_terms (
-    id INT NOT NULL AUTO_INCREMENT,
-    invoice_name TINYTEXT NOT NULL,
-    invoice_name_plur TINYTEXT NOT NULL,
-    invoice_name_cap TINYTEXT NOT NULL,
-    invoice_name_plur_cap TINYTEXT NOT NULL,
-    invoice_type TINYTEXT NOT NULL,
-    invoice_type_plur TINYTEXT NOT NULL,
-    invoice_type_cap TINYTEXT NOT NULL,
-    invoice_type_plur_cap TINYTEXT NOT NULL,
-    account_number TINYTEXT NOT NULL,
-    PRIMARY KEY (id)
-);
-
-----
-
-INSERT INTO {prefix}settings_terms
-    (
-    id,
-    invoice_name,
-    invoice_name_plur,
-    invoice_name_cap,
-    invoice_name_plur_cap,
-    invoice_type,
-    invoice_type_plur,
-    invoice_type_cap,
-    invoice_type_plur_cap,
-    account_number
-    )
-    VALUES
-    (
-    1,
-    'invoice',
-    'invoices',
-    'Invoice',
-    'Invoices',
-    'invoice type',
-    'invoice types',
-    'Invoice Type',
-    'Invoice Types',
-    'Account Number'
-    );
diff --git a/setup/databaseScripts/create_database_V0.0.40.sql b/setup/databaseScripts/create_database_V0.0.40.sql
new file mode 100644 (file)
index 0000000..ff3b52e
--- /dev/null
@@ -0,0 +1,391 @@
+-- Gaslight Media Billing Module
+-- File Created: 02/19/2019
+-- Database Version: 0.0.40
+-- Database Creation Script
+--
+-- To permit each query below to be executed separately,
+-- all queries must be separated by a line with four dashes
+--
+-- **** BE SURE TO ALSO UPDATE drop_database_Vxxx.sql FILE WHEN CHANGING TABLES ****
+--
+
+-- Billing Accounts
+CREATE TABLE {prefix}accounts (
+    id INT NOT NULL AUTO_INCREMENT,
+    archived BOOLEAN DEFAULT '0',                          -- Marks account as archived
+    ref_dest INT NOT NULL,                                 -- reference to member id
+    ref_name TINYTEXT NOT NULL,                            -- Name of reference member
+    invoice_type INT NOT NULL DEFAULT '0',                 -- Ref to Invoice Type id
+    billing_contact_name TINYTEXT NULL,                    -- Billing Contact Name
+    billing_fname TINYTEXT NULL,                           -- Billing First Name
+    billing_lname TINYTEXT NULL,                           -- Billing Last Name
+    billing_company TINYTEXT NULL,                         -- Billing Company Name
+    billing_position TINYTEXT NULL,                        -- Billing Title/Position
+    billing_addr1 TINYTEXT NULL,                           -- Billing Address 1
+    billing_addr2 TINYTEXT NULL,                           -- Billing Address 2
+    billing_city TINYTEXT NULL,                            -- Billing City
+    billing_county INT NULL,                               -- Billing County
+    billing_state TINYTEXT NULL,                           -- Billing State
+    billing_zip TINYTEXT NULL,                             -- Billing Zip
+    billing_country TINYTEXT NULL,                         -- Billing Country
+    billing_phone TINYTEXT NULL,                           -- Billing Phone
+    billing_fax TINYTEXT NULL,                             -- Billing Fax
+    anniversary_date DATE NULL,                            -- anniversary date
+    renewal_date DATE NULL,                                -- renewal date of account
+    payment_data TEXT NULL,                                -- stored payment data
+    customer_profile_id TINYTEXT NULL,                     -- Customer Profile Id (Authorize.net)
+    payment_profile_id TINYTEXT NULL,                      -- Payment Profile Id (Authorize.net)
+    payment_profile_card TINYTEXT NULL,                    -- Payment Profile Card (Authorize.net)
+    email TINYTEXT NULL,                                   -- billing email
+    boss BOOLEAN DEFAULT '0',                              -- Boss flag
+    account_number TINYTEXT NULL,                          -- Account Number
+    email_invoice BOOLEAN DEFAULT '0',                     -- Invoice by email
+    usmail_invoice BOOLEAN DEFAULT '0',                    -- Invoice by US Mail
+    fax_invoice BOOLEAN DEFAULT '0',                       -- Invoice by Fax
+    PRIMARY KEY (id),
+    INDEX(ref_dest),
+    INDEX(ref_name(20)),
+    INDEX(email(20)),
+    INDEX(invoice_type),
+    INDEX(renewal_date),
+    INDEX(billing_county)
+);
+
+----
+
+-- transactions
+CREATE TABLE {prefix}transactions (
+    id INT NOT NULL AUTO_INCREMENT,
+    type INT NOT NULL,                                     -- type of transaction (payment,invoice,etc)
+    type_id INT NOT NULL,                                  -- reference to type id
+    account INT NOT NULL,                                  -- reference to account id
+    transaction_time DATETIME NOT NULL,                    -- datetime for the transaction
+    current_invoice_total DECIMAL(8, 2) NOT NULL,          -- invoice total
+    current_payment_total DECIMAL(8, 2) NOT NULL,          -- payment total
+    PRIMARY KEY (id),
+    INDEX(account),
+    INDEX(type_id),
+    INDEX(transaction_time)
+);
+
+----
+
+-- Invoices
+CREATE TABLE {prefix}invoices (
+    id INT NOT NULL AUTO_INCREMENT,
+    old_invoice_id INT NULL,                               -- old invoice id from uptra
+    transaction_time DATETIME NOT NULL,                    -- datetime for the invoice
+    account INT NOT NULL,                                  -- ref to account id
+    amount_total DECIMAL(8, 2) NOT NULL,                   -- total amount for invoice
+    balance DECIMAL(8, 2) NOT NULL,                        -- balance for this invoice
+    due_date DATE NOT NULL,                                -- Due date for this invoice
+    paid BOOLEAN DEFAULT '0',                              -- true/false if invoice is paid
+    notes TINYTEXT,                                        -- notes for this invoice
+    renewal BOOLEAN DEFAULT '0',                           -- true/false if a renewal
+    recurring BOOLEAN DEFAULT '0',                         -- true/false if recurring
+    recurrence INT NULL DEFAULT 0,                         -- recurrence type
+    PRIMARY KEY (id),
+    INDEX(account),
+    INDEX(transaction_time),
+    INDEX(due_date)
+);
+
+----
+
+-- Line Item Types
+CREATE TABLE {prefix}invoice_types (
+    id INT NOT NULL AUTO_INCREMENT,
+    name TINYTEXT NOT NULL,                                -- name
+    parent INT NOT NULL DEFAULT 0,                         -- 0 if top level otherwise ref to another line_item_type as it's parent
+    member_type INT NOT NULL DEFAULT 0,                    -- Member Type assigned Default 0
+    amount DECIMAL(8,2) NOT NULL DEFAULT '0.00',           -- amount
+    recurring BOOLEAN DEFAULT '0',                         -- true/false if recurring
+    recurrence INT NULL DEFAULT 0,                         -- recurrence type
+    dynamic_amount BOOLEAN DEFAULT '0',                    -- true/false if amount is dynamic
+    qcode TINYTEXT NULL,                                   -- qcode for quickbooks
+    category TINYTEXT NULL,                                -- quickbooks category
+    PRIMARY KEY (id)
+);
+
+----
+
+-- Line Items
+CREATE TABLE {prefix}line_items (
+    id INT NOT NULL AUTO_INCREMENT,
+    invoice INT NOT NULL,                                  -- reference to invoice
+    line_item_type INT NOT NULL,                           -- reference to line item type
+    account INT NULL DEFAULT 0,                            -- ref to account id (renewal or employee)
+    name TEXT NOT NULL,                                    -- line item name
+    amount DECIMAL(8,2) DEFAULT '0.00',                    -- line item amount per item
+    quantity INT DEFAULT 1,                                -- quantity
+    discount INT DEFAULT 0,                                -- Discount Percentage
+    total DECIMAL(8,2) DEFAULT '0.00',                     -- line item total
+    recurring BOOLEAN DEFAULT '0',                         -- true/false if recurring
+    recurrence INT NULL DEFAULT 0,                         -- recurrence type
+    created DATE NULL,                                     -- Date this line item was first created
+    first_due_date DATE NULL,                              -- The first due date for this item
+    next_due_date DATE NULL,                               -- Next Due Date for this item
+    PRIMARY KEY (id),
+    INDEX(account),
+    INDEX(created),
+    INDEX(first_due_date),
+    INDEX(next_due_date)
+);
+
+----
+
+-- payments
+CREATE TABLE {prefix}payments (
+    id INT NOT NULL AUTO_INCREMENT,
+    transaction_time DATETIME NOT NULL,                    -- datetime of payment
+    account INT NOT NULL,                                  -- ref to account table
+    amount DECIMAL(8, 2) NOT NULL,                         -- payment amount
+    payment_method TINYTEXT NOT NULL,                      -- payment method
+    payment_data TINYTEXT NULL,                            -- additional payment info
+    notes TEXT NULL,                                       -- Notes/Comments on the payment
+    PRIMARY KEY (id)
+);
+
+----
+
+-- pdfs
+CREATE TABLE {prefix}pdfs (
+    id INT NOT NULL AUTO_INCREMENT,
+    ref_type INT NOT NULL,                                 -- reference type
+    ref_dest INT NOT NULL,                                 -- reference types id
+    pdf MEDIUMTEXT NOT NULL,                               -- saved pdf
+    PRIMARY KEY (id)
+);
+
+----
+
+-- Notification Types
+CREATE TABLE {prefix}notification_types (
+    id INT NOT NULL AUTO_INCREMENT,
+    name TINYTEXT NOT NULL,                                -- name
+    to_email TINYTEXT NULL,                                -- To email
+    from_header TINYTEXT NOT NULL,                         -- from headers
+    replyto TINYTEXT NULL,                                 -- reply-to headers
+    subject TINYTEXT NOT NULL,                             -- Subject
+    message TEXT NOT NULL,                                 -- Message
+    send_by_date BOOLEAN NULL DEFAULT '0',                 -- true/false send by date based on due date
+    send_by_action BOOLEAN NULL DEFAULT '0',               -- send notice based on an action
+    send_action INT NULL DEFAULT 0,                        -- (create invoice or receive payment)
+    send_date_number INT NULL DEFAULT 0,                   -- number to apply to send by date
+    send_date_period INT NULL DEFAULT 0,                   -- (days,weeks,months,years)
+    send_date_when INT NULL DEFAULT 0,                     -- (before or after)
+    PRIMARY KEY (id)
+);
+
+----
+
+-- Notifications
+CREATE TABLE {prefix}notifications (
+    id INT NOT NULL AUTO_INCREMENT,
+    notification_type INT NOT NULL,                        -- ref to notification type
+    account INT NOT NULL,                                  -- ref to account
+    from_replyto TINYTEXT NOT NULL,                        -- from reply-to header
+    subject TEXT NOT NULL,                                 -- subject
+    message TEXT NOT NULL,                                 -- message
+    date_sent DATETIME NOT NULL,                           -- Date the notice was sent
+    email_sent TINYTEXT NOT NULL,                          -- email used
+    type INT NULL,                                         -- Invoice Type
+    type_id INT NULL,                                      -- type id (invoice or payment)
+    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,
+    -- Invoice Options
+    company_logo TINYTEXT NULL,                            -- Image logo
+    company_logo_width INT NULL,                           -- Logo Width (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
+    receipt_text TEXT NULL,                                -- Receipt Text
+    invoice_show_account_number BOOLEAN DEFAULT '0',       -- Show Billing Account number on invoices
+    invoice_show_invoice_number BOOLEAN DEFAULT '1',       -- Show Invoice Number on invoices
+    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
+    -- Renewal Options
+    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
+    member_types_free TEXT NULL,                           -- List of member type id's that are free
+    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 '0',           -- 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
+    member_types_requiring_billing TEXT NULL,              -- List of member type id's that require billing
+    -- Account Number
+    account_number_enabled BOOLEAN DEFAULT '0',            -- Enable Disable account_number
+    account_number_required BOOLEAN DEFAULT '0',           -- Require account_number
+    account_number_unique BOOLEAN DEFAULT '0',             -- account_number must be unique
+    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
+    -- Square Credentials
+    square_prod_access_token TINYTEXT NULL,                     -- Square production access token
+    square_prod_app_id TINYTEXT NULL,                           -- Square production application id
+    square_prod_location_id TINYTEXT NULL,                      -- Square production location id
+    square_sandbox_access_token TINYTEXT NULL,                  -- Square sandbox access token
+    square_sandbox_app_id TINYTEXT NULL,                        -- Square sandbox application id
+    square_sandbox_location_id TINYTEXT NULL,                   -- Square sandbox location id
+    square_use_prod BOOLEAN DEFAULT '0',                        -- If true use Production creds
+    -- Uptravel options
+    uptravel_invoice_template BOOLEAN DEFAULT '0',              -- Use uptravel template for invoices.
+    uptravel_payment_form BOOLEAN DEFAULT '0',                  -- Use uptravel payment form style.
+    -- Dashboard options
+    dashboard_pending_renewals BOOLEAN DEFAULT '1',             -- Show pending renewals
+    dashboard_overdue_renewals BOOLEAN DEFAULT '1',             -- Show overdue renewals
+    dashboard_overdue_invoices BOOLEAN DEFAULT '1',             -- Show overdue 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)
+);
+
+----
+
+-- Terms
+CREATE TABLE {prefix}settings_terms (
+    id INT NOT NULL AUTO_INCREMENT,
+    invoice_name TINYTEXT NOT NULL,
+    invoice_name_plur TINYTEXT NOT NULL,
+    invoice_name_cap TINYTEXT NOT NULL,
+    invoice_name_plur_cap TINYTEXT NOT NULL,
+    invoice_type TINYTEXT NOT NULL,
+    invoice_type_plur TINYTEXT NOT NULL,
+    invoice_type_cap TINYTEXT NOT NULL,
+    invoice_type_plur_cap TINYTEXT NOT NULL,
+    account_number TINYTEXT NOT NULL,
+    PRIMARY KEY (id)
+);
+
+----
+
+INSERT INTO {prefix}settings_terms
+    (
+    id,
+    invoice_name,
+    invoice_name_plur,
+    invoice_name_cap,
+    invoice_name_plur_cap,
+    invoice_type,
+    invoice_type_plur,
+    invoice_type_cap,
+    invoice_type_plur_cap,
+    account_number
+    )
+    VALUES
+    (
+    1,
+    'invoice',
+    'invoices',
+    'Invoice',
+    'Invoices',
+    'invoice type',
+    'invoice types',
+    'Invoice Type',
+    'Invoice Types',
+    'Account Number'
+    );
index 90f6965..699743f 100644 (file)
@@ -53,5 +53,6 @@ $glmMembersBillingDbVersions = array(
     '0.0.37' => array('version' => '0.0.37', 'tables' => 16, 'date' => '04/11/2019'),
     '0.0.38' => array('version' => '0.0.38', 'tables' => 16, 'date' => '04/16/2019'),
     '0.0.39' => array('version' => '0.0.39', 'tables' => 16, 'date' => '04/17/2019'),
+    '0.0.40' => array('version' => '0.0.40', 'tables' => 16, 'date' => '06/11/2019'),
 );
 
diff --git a/setup/databaseScripts/update_database_V0.0.40.sql b/setup/databaseScripts/update_database_V0.0.40.sql
new file mode 100644 (file)
index 0000000..3207d5b
--- /dev/null
@@ -0,0 +1,9 @@
+-- Gaslight Media Billing Database
+-- File Created: 06/11/2019
+-- Database Version: 0.0.40
+--
+-- 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}settings ADD member_types_free TEXT NULL;   -- List of member type id's that are free
index 443f145..262e8cf 100644 (file)
@@ -51,7 +51,7 @@
                                 <a class="account-member-statements" data-member="{$t.ref_dest}" href="{$adminUrl}?page=glm-members-admin-menu-member&glm_action=billing&member={$t.ref_dest}">View Statements</a> |
                             </span>
                             <span class="account-dashboard-link">
-                                <a class="account-billing" href="{$adminUrl}?page=glm-members-admin-menu-member&glm_action=billing&option=account&member={$t.ref_dest}">Billing Info</a>
+                                <a class="account-billing" href="{$adminUrl}?page=glm-members-admin-menu-member&glm_action=billing&option=account&member={$t.ref_dest}" data-member="{$t.ref_dest}">Billing Info</a>
                             </span>
                             {if $t.boss.value}
                             <span class="account-dashboard-link">
@@ -97,6 +97,7 @@
 {include file='admin/billing/exportBillingModal.html'}
 
 <script>
+
     jQuery(document).ready(function($){
 
         var accountHoverId  = false;
             accountHoverId = false;
             accountEmployee = false;
         }
+
+        $('.account-billing').on('click', function(e){
+            e.preventDefault();
+            var member = $(this).data('member');
+            console.log( 'member: ', member );
+            return false;
+        });
+
+        // $(document).foundation();
     });
+
 </script>
 
+<div id="glmBillingInfo" class="reveal-modal" data-reveal arial-labelledby="glmBillingInfo" aria-hidden="true" role="dialog">
+    <h2>Billing Info</h2>
+    Billing form here!
+    <a class="close-reveal-modal" arial-label="close">&#215;</a>
+</div>
+
 {include file='admin/footer.html'}
index bca0c61..374c040 100644 (file)
                                 </select>
                             </td>
                         </tr>
+                        <tr>
+                            <th style="text-alighn: right;">
+                                Member Types that are Free
+                            </th>
+                            <td>
+                                <select name="member_types_free_option[]" multiple size="5">
+                                    {foreach $member_types as $type}
+                                    <option value="{$type.id}"{if in_array($type.id, $selectedMTFREE)} selected{/if}>{$type.name}</option>
+                                    {/foreach}
+                                </select>
+                            </td>
+                        </tr>
 
                         <tr>
                             <th style="text-align: right;" {if $billingSettings.fieldRequired.days_before_renewal} class="glm-required"}{/if}>