wrap up the discount line item
authorSteve Sutton <steve@gaslightmedia.com>
Thu, 11 Apr 2019 17:32:36 +0000 (13:32 -0400)
committerSteve Sutton <steve@gaslightmedia.com>
Thu, 11 Apr 2019 17:32:36 +0000 (13:32 -0400)
Adding field for line item discount.

index.php
models/admin/billing/invoices.php
setup/databaseScripts/create_database_V0.0.36.sql [deleted file]
setup/databaseScripts/create_database_V0.0.37.sql [new file with mode: 0644]
setup/databaseScripts/dbVersions.php
setup/databaseScripts/update_database_V0.0.36.sql
setup/databaseScripts/update_database_V0.0.37.sql [new file with mode: 0644]
views/admin/billing/editInvoice.html
views/front/billing/paymentForm.html

index a3950da..27f39d0 100644 (file)
--- a/index.php
+++ b/index.php
@@ -38,7 +38,7 @@
  *  version from this plugin.
  */
 define('GLM_MEMBERS_BILLING_PLUGIN_VERSION', '1.0.26');
-define('GLM_MEMBERS_BILLING_PLUGIN_DB_VERSION', '0.0.36');
+define('GLM_MEMBERS_BILLING_PLUGIN_DB_VERSION', '0.0.37');
 
 // 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 31a003f..f478d10 100644 (file)
@@ -194,6 +194,7 @@ class GlmMembersAdmin_billing_invoices extends GlmDataInvoices
                 $lineItems       = $BillingSupport->getLineItemsForInvoice( $this->invoice_id );
                 // Sort the types by parent child
                 $invoiceTypes    = $InvoiceTypesObj->sortParentChild($invoiceTypes);
+                // echo '<pre>$invoiceTypes: ' . print_r( $invoiceTypes, true ) . '</pre>';
                 if ( isset( $invoiceTypes ) ) {
                     foreach ( $invoiceTypes as $invoiceType ) {
                         $invTypes[$invoiceType['id']] = array(
@@ -204,6 +205,17 @@ class GlmMembersAdmin_billing_invoices extends GlmDataInvoices
                     }
                     $invoiceTypeJSON = json_encode( $invTypes, JSON_NUMERIC_CHECK );
                 }
+                if ( isset( $lineItems ) ) {
+                    foreach ( $lineItems as $lineItem ) {
+                        $lineItemJson[$lineItem['line_item_type']] = array(
+                            'id'       => $lineItem['line_item_type'],
+                            'name'     => $lineItem['name'],
+                            'amount'   => $lineItem['amount'],
+                            'discount' => $lineItem['discount'],
+                        );
+                    }
+                    $lineItemJSON    = json_encode( $lineItemJson, JSON_NUMERIC_CHECK );
+                }
 
             }  // show error?
             break;
@@ -275,19 +287,21 @@ class GlmMembersAdmin_billing_invoices extends GlmDataInvoices
                                 'line_item_type' => $line_item,
                                 'name'           => $_REQUEST['line_item_name'][$line_item],
                                 'amount'         => $_REQUEST['line_item_amount'][$line_item],
+                                'discount'       => $_REQUEST['line_item_discount'][$line_item],
                                 'quantity'       => $_REQUEST['line_item_qty'][$line_item],
                                 'total'          => (float)$_REQUEST['line_item_qty'][$line_item] * (float)$_REQUEST['line_item_amount'][$line_item],
                                 'created'        => date('Y-m-d'),
                                 'first_due_date' => $_REQUEST['due_date'],
                                 'next_due_date'  => $_REQUEST['due_date'],
                                 'recurring'      => $invoiceType['recurring']['value'],
-                                'recurrence'     => $invoiceType['recurrence']
+                                'recurrence'     => $invoiceType['recurrence'],
                             ),
                             array(
                                 '%d', // invoice
                                 '%d', // line_item_type
                                 '%s', // name
                                 '%s', // amount
+                                '%d', // discount
                                 '%d', // quantity
                                 '%d', // total
                                 '%s', // created
@@ -371,9 +385,9 @@ class GlmMembersAdmin_billing_invoices extends GlmDataInvoices
             if ( isset( $invoiceTypes ) ) {
                 foreach ( $invoiceTypes as $invoiceType ) {
                     $invTypes[$invoiceType['id']] = array(
-                        'id'     => $invoiceType['id'],
-                        'name'   => $invoiceType['name'],
-                        'amount' => $invoiceType['amount'],
+                        'id'       => $invoiceType['id'],
+                        'name'     => $invoiceType['name'],
+                        'amount'   => $invoiceType['amount'],
                     );
                 }
                 $invoiceTypeJSON = json_encode( $invTypes, true );
@@ -423,6 +437,7 @@ class GlmMembersAdmin_billing_invoices extends GlmDataInvoices
                                         'line_item_type' => $line_item,
                                         'name'           => $_REQUEST['line_item_name'][$line_item],
                                         'amount'         => $_REQUEST['line_item_amount'][$line_item],
+                                        'discount'       => $_REQUEST['line_item_discount'][$line_item],
                                         'quantity'       => $_REQUEST['line_item_qty'][$line_item],
                                         'total'          => (float)$_REQUEST['line_item_qty'][$line_item] * (float)$_REQUEST['line_item_amount'][$line_item],
                                         'created'        => date('Y-m-d'),
@@ -437,6 +452,7 @@ class GlmMembersAdmin_billing_invoices extends GlmDataInvoices
                                         '%d', // line_item_type
                                         '%s', // name
                                         '%s', // amount
+                                        '%d', // discount
                                         '%d', // quantity
                                         '%d', // total
                                         '%s', // created
@@ -481,6 +497,17 @@ class GlmMembersAdmin_billing_invoices extends GlmDataInvoices
                         }
                         $invoiceTypeJSON = json_encode( $invTypes, JSON_NUMERIC_CHECK );
                     }
+                    if ( isset( $lineItems ) ) {
+                        foreach ( $lineItems as $lineItem ) {
+                            $lineItemJson[$lineItem['line_item_type']] = array(
+                                'id'       => $lineItem['line_item_type'],
+                                'name'     => $lineItem['name'],
+                                'amount'   => $lineItem['amount'],
+                                'discount' => $lineItem['discount'],
+                            );
+                        }
+                        $lineItemJSON    = json_encode( $lineItemJson, JSON_NUMERIC_CHECK );
+                    }
 
                 } else {
                     $invoiceUpdateError = true;
@@ -695,6 +722,7 @@ class GlmMembersAdmin_billing_invoices extends GlmDataInvoices
             'start'               => $start = 1,
             'limit'               => $limit,
             'invoiceTypeJSON'     => $invoiceTypeJSON,
+            'lineItemJSON'        => $lineItemJSON,
             'invoiceTypes'        => $invoiceTypes,
             'accounts'            => $accounts,
             'billingAccount'      => $billingAccount,
diff --git a/setup/databaseScripts/create_database_V0.0.36.sql b/setup/databaseScripts/create_database_V0.0.36.sql
deleted file mode 100644 (file)
index 63233a6..0000000
+++ /dev/null
@@ -1,384 +0,0 @@
--- Gaslight Media Billing Module
--- File Created: 02/19/2019
--- Database Version: 0.0.36
--- Database Creation Script
---
--- To permit each query below to be executed separately,
--- all queries must be separated by a line with four dashes
---
--- **** BE SURE TO ALSO UPDATE drop_database_Vxxx.sql FILE WHEN CHANGING TABLES ****
---
-
--- Billing Accounts
-CREATE TABLE {prefix}accounts (
-    id INT NOT NULL AUTO_INCREMENT,
-    archived BOOLEAN DEFAULT '0',                          -- Marks account as archived
-    ref_dest INT NOT NULL,                                 -- reference to member id
-    ref_name TINYTEXT NOT NULL,                            -- Name of reference member
-    invoice_type INT NOT NULL DEFAULT '0',                 -- Ref to Invoice Type id
-    billing_contact_name TINYTEXT NULL,                    -- Billing Contact Name
-    billing_fname TINYTEXT NULL,                           -- Billing First Name
-    billing_lname TINYTEXT NULL,                           -- Billing Last Name
-    billing_company TINYTEXT NULL,                         -- Billing Company Name
-    billing_position TINYTEXT NULL,                        -- Billing Title/Position
-    billing_addr1 TINYTEXT NULL,                           -- Billing Address 1
-    billing_addr2 TINYTEXT NULL,                           -- Billing Address 2
-    billing_city TINYTEXT NULL,                            -- Billing City
-    billing_county INT NULL,                               -- Billing County
-    billing_state TINYTEXT NULL,                           -- Billing State
-    billing_zip TINYTEXT NULL,                             -- Billing Zip
-    billing_country TINYTEXT NULL,                         -- Billing Country
-    billing_phone TINYTEXT NULL,                           -- Billing Phone
-    billing_fax TINYTEXT NULL,                             -- Billing Fax
-    anniversary_date DATE NULL,                            -- anniversary date
-    renewal_date DATE NULL,                                -- renewal date of account
-    payment_data TEXT NULL,                                -- stored payment data
-    customer_profile_id TINYTEXT NULL,                     -- Customer Profile Id (Authorize.net)
-    payment_profile_id TINYTEXT NULL,                      -- Payment Profile Id (Authorize.net)
-    payment_profile_card TINYTEXT NULL,                    -- Payment Profile Card (Authorize.net)
-    email TINYTEXT NULL,                                   -- billing email
-    boss BOOLEAN DEFAULT '0',                              -- Boss flag
-    account_number TINYTEXT NULL,                          -- Account Number
-    email_invoice BOOLEAN DEFAULT '0',                     -- Invoice by email
-    usmail_invoice BOOLEAN DEFAULT '0',                    -- Invoice by US Mail
-    fax_invoice BOOLEAN DEFAULT '0',                       -- Invoice by Fax
-    PRIMARY KEY (id),
-    INDEX(ref_dest),
-    INDEX(ref_name(20)),
-    INDEX(email(20)),
-    INDEX(invoice_type),
-    INDEX(renewal_date),
-    INDEX(billing_county)
-);
-
-----
-
--- transactions
-CREATE TABLE {prefix}transactions (
-    id INT NOT NULL AUTO_INCREMENT,
-    type INT NOT NULL,                                     -- type of transaction (payment,invoice,etc)
-    type_id INT NOT NULL,                                  -- reference to type id
-    account INT NOT NULL,                                  -- reference to account id
-    transaction_time DATETIME NOT NULL,                    -- datetime for the transaction
-    current_invoice_total DECIMAL(8, 2) NOT NULL,          -- invoice total
-    current_payment_total DECIMAL(8, 2) NOT NULL,          -- payment total
-    PRIMARY KEY (id),
-    INDEX(account),
-    INDEX(type_id),
-    INDEX(transaction_time)
-);
-
-----
-
--- Invoices
-CREATE TABLE {prefix}invoices (
-    id INT NOT NULL AUTO_INCREMENT,
-    old_invoice_id INT NULL,                               -- old invoice id from uptra
-    transaction_time DATETIME NOT NULL,                    -- datetime for the invoice
-    account INT NOT NULL,                                  -- ref to account id
-    amount_total DECIMAL(8, 2) NOT NULL,                   -- total amount for invoice
-    balance DECIMAL(8, 2) NOT NULL,                        -- balance for this invoice
-    due_date DATE NOT NULL,                                -- Due date for this invoice
-    paid BOOLEAN DEFAULT '0',                              -- true/false if invoice is paid
-    notes TINYTEXT,                                        -- notes for this invoice
-    renewal BOOLEAN DEFAULT '0',                           -- true/false if a renewal
-    recurring BOOLEAN DEFAULT '0',                         -- true/false if recurring
-    recurrence INT NULL DEFAULT 0,                         -- recurrence type
-    PRIMARY KEY (id),
-    INDEX(account),
-    INDEX(transaction_time),
-    INDEX(due_date)
-);
-
-----
-
--- Line Item Types
-CREATE TABLE {prefix}invoice_types (
-    id INT NOT NULL AUTO_INCREMENT,
-    name TINYTEXT NOT NULL,                                -- name
-    parent INT NOT NULL DEFAULT 0,                         -- 0 if top level otherwise ref to another line_item_type as it's parent
-    member_type INT NOT NULL DEFAULT 0,                    -- Member Type assigned Default 0
-    amount DECIMAL(8,2) NOT NULL DEFAULT '0.00',           -- amount
-    recurring BOOLEAN DEFAULT '0',                         -- true/false if recurring
-    recurrence INT NULL DEFAULT 0,                         -- recurrence type
-    dynamic_amount BOOLEAN DEFAULT '0',                    -- true/false if amount is dynamic
-    qcode TINYTEXT NULL,                                   -- qcode for quickbooks
-    category TINYTEXT NULL,                                -- quickbooks category
-    PRIMARY KEY (id)
-);
-
-----
-
--- Line Items
-CREATE TABLE {prefix}line_items (
-    id INT NOT NULL AUTO_INCREMENT,
-    invoice INT NOT NULL,                                  -- reference to invoice
-    line_item_type INT NOT NULL,                           -- reference to line item type
-    account INT NULL DEFAULT 0,                            -- ref to account id (renewal or employee)
-    name TEXT NOT NULL,                                    -- line item name
-    amount DECIMAL(8,2) DEFAULT '0.00',                    -- line item amount per item
-    quantity INT DEFAULT 1,                                -- quantity
-    total DECIMAL(8,2) DEFAULT '0.00',                     -- line item total
-    recurring BOOLEAN DEFAULT '0',                         -- true/false if recurring
-    recurrence INT NULL DEFAULT 0,                         -- recurrence type
-    created DATE NULL,                                     -- Date this line item was first created
-    first_due_date DATE NULL,                              -- The first due date for this item
-    next_due_date DATE NULL,                               -- Next Due Date for this item
-    PRIMARY KEY (id),
-    INDEX(account),
-    INDEX(created),
-    INDEX(first_due_date),
-    INDEX(next_due_date)
-);
-
-----
-
--- payments
-CREATE TABLE {prefix}payments (
-    id INT NOT NULL AUTO_INCREMENT,
-    transaction_time DATETIME NOT NULL,                    -- datetime of payment
-    account INT NOT NULL,                                  -- ref to account table
-    amount DECIMAL(8, 2) NOT NULL,                         -- payment amount
-    payment_method TINYTEXT NOT NULL,                      -- payment method
-    payment_data TINYTEXT NULL,                            -- additional payment info
-    notes TEXT NULL,                                       -- Notes/Comments on the payment
-    PRIMARY KEY (id)
-);
-
-----
-
--- pdfs
-CREATE TABLE {prefix}pdfs (
-    id INT NOT NULL AUTO_INCREMENT,
-    ref_type INT NOT NULL,                                 -- reference type
-    ref_dest INT NOT NULL,                                 -- reference types id
-    pdf MEDIUMTEXT NOT NULL,                               -- saved pdf
-    PRIMARY KEY (id)
-);
-
-----
-
--- Notification Types
-CREATE TABLE {prefix}notification_types (
-    id INT NOT NULL AUTO_INCREMENT,
-    name TINYTEXT NOT NULL,                                -- name
-    to_email TINYTEXT NULL,                                -- To email
-    from_header TINYTEXT NOT NULL,                         -- from headers
-    replyto TINYTEXT NULL,                                 -- reply-to headers
-    subject TINYTEXT NOT NULL,                             -- Subject
-    message TEXT NOT NULL,                                 -- Message
-    send_by_date BOOLEAN NULL DEFAULT '0',                 -- true/false send by date based on due date
-    send_by_action BOOLEAN NULL DEFAULT '0',               -- send notice based on an action
-    send_action INT NULL DEFAULT 0,                        -- (create invoice or receive payment)
-    send_date_number INT NULL DEFAULT 0,                   -- number to apply to send by date
-    send_date_period INT NULL DEFAULT 0,                   -- (days,weeks,months,years)
-    send_date_when INT NULL DEFAULT 0,                     -- (before or after)
-    PRIMARY KEY (id)
-);
-
-----
-
--- Notifications
-CREATE TABLE {prefix}notifications (
-    id INT NOT NULL AUTO_INCREMENT,
-    notification_type INT NOT NULL,                        -- ref to notification type
-    account INT NOT NULL,                                  -- ref to account
-    from_replyto TINYTEXT NOT NULL,                        -- from reply-to header
-    subject TEXT NOT NULL,                                 -- subject
-    message TEXT NOT NULL,                                 -- message
-    date_sent DATETIME NOT NULL,                           -- Date the notice was sent
-    email_sent TINYTEXT NOT NULL,                          -- email used
-    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
-    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.
-    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.37.sql b/setup/databaseScripts/create_database_V0.0.37.sql
new file mode 100644 (file)
index 0000000..1ccb218
--- /dev/null
@@ -0,0 +1,385 @@
+-- Gaslight Media Billing Module
+-- File Created: 02/19/2019
+-- Database Version: 0.0.37
+-- 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
+    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.
+    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 fdff678..7d7a871 100644 (file)
@@ -50,5 +50,6 @@ $glmMembersBillingDbVersions = array(
     '0.0.34' => array('version' => '0.0.34', 'tables' => 16, 'date' => '03/19/2019'),
     '0.0.35' => array('version' => '0.0.35', 'tables' => 16, 'date' => '03/20/2019'),
     '0.0.36' => array('version' => '0.0.36', 'tables' => 16, 'date' => '04/02/2019'),
+    '0.0.37' => array('version' => '0.0.37', 'tables' => 16, 'date' => '04/11/2019'),
 );
 
index ef5f64d..7317f0d 100644 (file)
@@ -1,6 +1,6 @@
 -- Gaslight Media Billing Database
--- File Created: 12/26/2018
--- Database Version: 0.0.32
+-- File Created: 04/02/2019
+-- Database Version: 0.0.36
 --
 -- To permit each query below to be executed separately,
 -- all queries must be separated by a line with four dashes
diff --git a/setup/databaseScripts/update_database_V0.0.37.sql b/setup/databaseScripts/update_database_V0.0.37.sql
new file mode 100644 (file)
index 0000000..9a50cf6
--- /dev/null
@@ -0,0 +1,9 @@
+-- Gaslight Media Billing Database
+-- File Created: 04/11/2019
+-- Database Version: 0.0.37
+--
+-- To permit each query below to be executed separately,
+-- all queries must be separated by a line with four dashes
+
+-- Update the line_items table
+ALTER TABLE {prefix}line_items ADD discount INT DEFAULT 0;  -- Discount Percentage
index 58e2e46..b568826 100644 (file)
@@ -59,7 +59,6 @@
             <div class="glm-columns glm-small-12 glm-large-2">
                 <a id="newLineItemButton" class="glm-billing-add-line-item">Add Line Item</a><br>
                 <a id="newCustomLineItemButton" class="glm-billing-add-line-item">Create New Line Item</a>
-                <a id="newDiscountLineItemButton" class="glm-billing-add-line-item">Add Discount</a>
             </div>
             <div class="glm-columns glm-small-12 glm-large-10" id="invoice-line-items">
             </div>
                     <p id="line_item_price"></p>
                 </td>
             </tr>
+            <tr>
+                <th>Discount</th>
+                <td><input type="number" min="0" max"100" name="discount_amount" style="width: 50px;" value="0" />% </td>
+            </tr>
         </table>
     </form>
 </div>
         </tr>
     </table>
 </div>
-{* Add Discount Form *}
-<div id="newDiscountLineItemDialog" class="glm-dialog-box" title="Add Discount">
-    <p class="validateCustomTips glm-required">* Required!</p>
-    <table>
-        <tr>
-            <th class="glm-required" align="right">Discount Amount <br> Numbers only (999.99)</th>
-            <td><input name="discount_amount" /></td>
-        </tr>
-    </table>
-</div>
 
 <script>
 jQuery(document).ready(function($){
@@ -327,10 +320,10 @@ jQuery(document).ready(function($){
     var dialog,                                                // Dialog for the add line_item form
         newAccountDialog,                                      // Dialog for the add new account
         customLineItemDialog,                                  // Dialog for the custom line item
-        discountLineItemDialog,                                // Dialog for Discount line item
         form,                                                  // The add line_item form
         newAccountForm,                                        // New Account Form
         line_item_type    = $( 'select[name="line_item_type"]' ), // Line item type in the add line_item form
+        discount_amount   = $( 'input[name="discount_amount"]' ), // Discount amount
         line_items        = [],                                   // Array holding line_items json objects
         allFields         = $( [] ).add( line_item_type ),        // Array holding the form fields - add line_item form
         ref_name          = $( 'input[name="ref_name"' ),
@@ -352,7 +345,6 @@ jQuery(document).ready(function($){
         billing_zip       = $( 'input[name="billing_zip"' ),
         billing_phone     = $( 'input[name="billing_phone"' ),
         customFieldName   = $( 'input[name="cf_name"]' ),
-        discountAmount    = $( 'input[name="discount_amount"]' ),
         customFieldAmount = $( 'input[name="cf_amount"]' ),
         customFieldParent = $( 'select[name="cf_parent"]' ),
         lineTips          = $( '.validateTips' ),
@@ -365,6 +357,7 @@ jQuery(document).ready(function($){
             .add( billing_phone ) ,        // Array holding the form fields - add line_item form
         allCustomFields   = $([]).add( customFieldName ).add( customFieldAmount ).add( customFieldParent ),
         invoiceTypeJSON   = $.parseJSON( '{$invoiceTypeJSON}' ); // Json object with all of the invoices types
+        lineItemJSON      = $.parseJSON( '{$lineItemJSON}' );    // Json object with all of the line items
 
         // From http://www.whatwg.org/specs/web-apps/current-work/multipage/states-of-the-type-attribute.html#e-mail-state-%28type=email%29
        {literal}
@@ -428,11 +421,18 @@ jQuery(document).ready(function($){
             var selectedLineItem = invoiceTypeJSON[line_item_type.val()];
             // If selectedLineItem is undefined then we must be adding new line item
             if ( selectedLineItem == undefined ) {
-                // Check that nameand amount are not empty
+                // Check that name and amount are not empty
                 // valid = valid && checkRequired(
             } else {
                 // Check first to see if this line_item_type is already in line_items.
                 if ( !isLineItem( selectedLineItem ) ) {
+                    // See if there's a discount
+                    if ( discount_amount ) {
+                        selectedLineItem.discount = parseInt( discount_amount.val() );
+                        selectedLineItem.original_amount = selectedLineItem.amount;
+                        // Apply discount percentage to amount
+                        selectedLineItem.amount -= selectedLineItem.amount * ( selectedLineItem.discount / 100 );
+                    }
                     addLineItemToInvoice( selectedLineItem );
                 } else {
                     // Code here to add to quantity.
@@ -454,31 +454,29 @@ jQuery(document).ready(function($){
     {
         lineItem.qty = parseInt(1);
         line_items.push( lineItem );
-        $( '#invoice-line-items' ). append( '<div class="glm-row" id="line-item-type-' + lineItem.id + '">' +
-            '<div class="glm-columns glm-small-1 line-item-delete dashicons dashicons-trash" data-id="' + lineItem.id + '"></div>' +
-            '<div class="glm-columns glm-small-6">' + lineItem.name + '</div>' +
-            '<div class="glm-columns glm-small-1">' +
-            '<input type="number" min="1" data-id="' + lineItem.id + '" name="line_item_qty[' + lineItem.id + ']" value="1">' +
-            '</div><div class="glm-columns glm-small-4">' +
-            '<input type="hidden" name="line_items[]" value="' + lineItem.id + '">' +
-            '<input type="hidden" name="line_item_amount[' + lineItem.id + ']" value="' + lineItem.amount + '">' +
-            '<input type="hidden" name="line_item_name[' + lineItem.id + ']" value="' + lineItem.name + '">' +
-            '$' + lineItem.amount + '</div>' +
-        '</div>');
-    }
-
-    /**
-     * Add discount line item to invoice
-     */
-    function addDiscountToInvoice( discount )
-    {
-        lineItem.qty = parseInt(1);
+        $( '#invoice-line-items' ). append(
+            '<div class="glm-row" id="line-item-type-' + lineItem.id + '">' +
+                '<div class="glm-columns glm-small-1 line-item-delete dashicons dashicons-trash" data-id="' + lineItem.id + '"></div>' +
+                '<div class="glm-columns glm-small-6">' + lineItem.name + '</div>' +
+                '<div class="glm-columns glm-small-2">' +
+                    'Discount ' + lineItem.discount + '%' +
+                '</div>' +
+                '<div class="glm-columns glm-small-1">' +
+                    '<input type="number" min="1" data-id="' + lineItem.id + '" name="line_item_qty[' + lineItem.id + ']" value="1">' +
+                '</div>' +
+                '<div class="glm-columns glm-small-2">' +
+                    '<input type="hidden" name="line_items[]" value="' + lineItem.id + '">' +
+                    '<input type="hidden" name="line_item_amount[' + lineItem.id + ']" value="' + lineItem.amount + '">' +
+                    '<input type="hidden" name="line_item_name[' + lineItem.id + ']" value="' + lineItem.name + '">' +
+                    '<input type="hidden" name="line_item_discount[' + lineItem.id + ']" value="' + lineItem.discount + '">' + '$' + lineItem.amount +
+                '</div>' +
+            '</div>');
     }
 
     // Setup if doing edit
     {if $invoice_id && isset($lineItems)}
         {foreach $lineItems as $item}
-            addLineItemToInvoice( invoiceTypeJSON[{$item.line_item_type}] );
+            addLineItemToInvoice( lineItemJSON[{$item.line_item_type}] );
         {/foreach}
         totalInvoice();
     {/if}
@@ -501,6 +499,10 @@ jQuery(document).ready(function($){
     // Here we delete a line_item from the form.
     $('body').on( 'click', '.line-item-delete', function(){
         $('#line-item-type-' + $(this).data( 'id' ) ).remove();
+        // Reset the discount for this item
+        var selectedLineItem = invoiceTypeJSON[$(this).data( 'id' )];
+        selectedLineItem.amount = selectedLineItem.original_amount;
+
         // Need to remove from line_items also.
         // Loop through the line_items and remove the one with matching id.
         for ( i = 0; i < line_items.length; i++ ) {
@@ -742,27 +744,6 @@ jQuery(document).ready(function($){
         },
     });
 
-    /**
-     * dialog for discount line item
-     */
-    discountLineItemDialog = $('#newDiscountLineItemDialog').dialog({
-        autoOpen: false,
-        minWidth: 550,
-        dialogClass: 'glm-dialog-no-close',
-        modal: true,
-        buttons: {
-            "Add Discount Line Item": addDiscountLineItem,
-            Cancel: function(){
-                discountLineItemDialog.dialog( 'close' );
-            },
-        },
-        close: function(){
-            discountAmount.val('');
-            allCustomFields.removeClass( 'ui-state-error' );
-            updateTips( customTips, '* required!' );
-        },
-    });
-
     /**
      * Custom Line Item form callback.
      *
@@ -813,25 +794,6 @@ jQuery(document).ready(function($){
         return valid;
     }
 
-    function addDiscountLineItem()
-    {
-        // Need to validate the form
-        var valid = true;
-
-        // Clear allCustomFields
-        allCustomFields.removeClass( 'ui-state-error' );
-
-        // Check fields for a value.
-        valid = valid && checkRequired( discountAmount, customTips, 'Amount is required!' );
-
-        if ( valid ) {
-            addDiscountToInvoice();
-            dialog.dialog( 'close' );
-        }
-
-        return valid;
-    }
-
     /**
      * form
      *
@@ -878,11 +840,6 @@ jQuery(document).ready(function($){
         return false;
     });
 
-    $('#newDiscountLineItemButton').click( function(){
-        $('#newDiscountLineItemDialog').dialog( 'open' );
-        return false;
-    });
-
     /**
      * dialog for the New Account Form
      */
index d61426f..5c9f1fb 100644 (file)
@@ -19,6 +19,8 @@
         <input type="hidden" id="account_id" name="account_id" value="{$accountId}" />
         <input type="hidden" id="total_renew_amount" name="total_renew_amount" value="" />
 
+        <input type="hidden" id="member_renewing" name="member_renewing" data-amount="" value="" />
+
         <div><p id="billing-msg-center">Start by entering your invoice number. We will look up your account.</p></div>
 
         <div class="glm-billing-field">
                 <input id="invoice_number" name="invoice_number" value="" required />
             </div>
         </div>
-        <div id="billing-membership-class" class="glm-billing-field glm-hidden">
-            <div class="glm-billing-label glm-required">
-                Membership Class
-            </div>
-            <div class="glm-billing-input">
-                {if $settings.allow_membership_choice}
-                    {foreach $payable_types as $type}
-                        <label>
-                            <input type="radio" name="member_renewing" data-amount="{$type.amount}" value="{$type.id}" id="invoice_type_id_{$type.id}" />
-                            {$type.name} {$type.amount}
-                        </label>
-                    {/foreach}
-                {else}
-                    <input type="hidden" id="member_renewing" name="member_renewing" data-amount="" value="" />
-                {/if}
-            </div>
-        </div>
 
         <div id="billing-member-name" class="glm-hidden">
             Found invoice for:
@@ -132,18 +117,14 @@ jQuery(document).ready(function($){
                 }
                 if ( msg.invoice_type ) {
                     console.log( 'invoice_type', msg.invoice_type );
-                    {if $settings.allow_membership_choice}
+                        $('#member_renewing').data( 'amount', msg.invoice.amount_total );
+                        $('#member_renewing').val( msg.invoice_type );
                         $('#invoice_type_id_' + msg.invoice_type ).attr('checked', true);
                         $('#billing-msg-center').hide();
                         $('#membername').html(msg.invoice.member_name);
                         $('#billing-total-due').show();
                         $('#billing-member-name').show();
                         getPageTotal();
-                    {else}
-                        $('#member_renewing').data( 'amount', msg.invoice.amount_total );
-                        $('#member_renewing').val( msg.invoice_type );
-                        getPageTotal();
-                    {/if}
                 }
             }
         });