[freeside-commits] branch FREESIDE_3_BRANCH updated. e5734c42c1a30f0bc0798adac0ef1a728ac17a98

Mark Wells mark at 420.am
Tue Dec 9 16:46:07 PST 2014


The branch, FREESIDE_3_BRANCH has been updated
       via  e5734c42c1a30f0bc0798adac0ef1a728ac17a98 (commit)
       via  1a7d2f896b0173c98bae48c222a88c2ea3cedb1e (commit)
      from  44f4f5987dd09783b74fef7b569aabdc5c67d8cd (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.

- Log -----------------------------------------------------------------
commit e5734c42c1a30f0bc0798adac0ef1a728ac17a98
Author: Mark Wells <mark at freeside.biz>
Date:   Tue Dec 9 18:22:39 2014 -0600

    tax report: deduct credits from taxable amount, #27698

diff --git a/FS/FS/Report/Tax.pm b/FS/FS/Report/Tax.pm
index 713be02..43337a6 100644
--- a/FS/FS/Report/Tax.pm
+++ b/FS/FS/Report/Tax.pm
@@ -95,6 +95,10 @@ sub report_internal {
   my $pkg_tax_exempt = "SELECT SUM(amount) AS exempt_charged, billpkgnum, taxnum ".
     "FROM cust_tax_exempt_pkg EXEMPT_WHERE GROUP BY billpkgnum, taxnum";
 
+  # This just calculates the sum of credit applications to a line item.
+  my $pkg_credited = "SELECT SUM(amount) AS credited, billpkgnum ".
+    "FROM cust_credit_bill_pkg GROUP BY billpkgnum";
+
   my $where = "WHERE cust_bill._date >= $beginning AND cust_bill._date <= $ending ".
               "AND COALESCE(cust_main_county.taxname,'Tax') = '$taxname' ".
               "AND cust_main_county.country = '$country'";
@@ -176,25 +180,40 @@ sub report_internal {
   $all_sql{exempt_monthly} =~ s/EXEMPT_WHERE/WHERE exempt_monthly = 'Y'/;
 
   # taxable sales
+  # (sale - exemptions - credits, except not negative)
   $sql{taxable} = "$select
-    SUM(cust_bill_pkg.setup + cust_bill_pkg.recur - COALESCE(exempt_charged, 0))
-    FROM cust_main_county
-    JOIN ($pkg_tax) AS pkg_tax USING (taxnum)
-    JOIN cust_bill_pkg USING (billpkgnum)
+    SUM(
+      cust_bill_pkg.setup + cust_bill_pkg.recur
+        - COALESCE(exempt_charged, 0)
+        - COALESCE(credited, 0)
+      )
+    FROM cust_bill_pkg
+    LEFT JOIN ($pkg_tax) AS pkg_tax
+      ON (cust_bill_pkg.billpkgnum = pkg_tax.billpkgnum)
     LEFT JOIN ($pkg_tax_exempt) AS pkg_tax_exempt
-      ON (pkg_tax_exempt.billpkgnum = cust_bill_pkg.billpkgnum 
-          AND pkg_tax_exempt.taxnum = cust_main_county.taxnum)
+      ON (cust_bill_pkg.billpkgnum = pkg_tax_exempt.billpkgnum)
+    LEFT JOIN ($pkg_credited) AS pkg_credited
+      ON (cust_bill_pkg.billpkgnum = pkg_credited.billpkgnum)
+    LEFT JOIN cust_main_county
+      ON (COALESCE(pkg_tax.taxnum, pkg_tax_exempt.taxnum) = cust_main_county.taxnum)
     $join_cust_pkg $where AND $nottax 
     $group";
 
   $all_sql{taxable} = "$select_all
-    SUM(cust_bill_pkg.setup + cust_bill_pkg.recur - COALESCE(exempt_charged, 0))
-    FROM cust_main_county
-    JOIN ($pkg_tax) AS pkg_tax USING (taxnum)
-    JOIN cust_bill_pkg USING (billpkgnum)
+    SUM(
+      cust_bill_pkg.setup + cust_bill_pkg.recur
+        - COALESCE(exempt_charged, 0)
+        - COALESCE(credited, 0)
+      )
+    FROM cust_bill_pkg
+    LEFT JOIN ($pkg_tax) AS pkg_tax
+      ON (cust_bill_pkg.billpkgnum = pkg_tax.billpkgnum)
     LEFT JOIN ($pkg_tax_exempt) AS pkg_tax_exempt
-      ON (pkg_tax_exempt.billpkgnum = cust_bill_pkg.billpkgnum 
-          AND pkg_tax_exempt.taxnum = cust_main_county.taxnum)
+      ON (cust_bill_pkg.billpkgnum = pkg_tax_exempt.billpkgnum)
+    LEFT JOIN ($pkg_credited) AS pkg_credited
+      ON (cust_bill_pkg.billpkgnum = pkg_credited.billpkgnum)
+    LEFT JOIN cust_main_county
+      ON (COALESCE(pkg_tax.taxnum, pkg_tax_exempt.taxnum) = cust_main_county.taxnum)
     $join_cust_pkg $where AND $nottax 
     $group_all";
 
@@ -204,27 +223,39 @@ sub report_internal {
   # estimated tax (taxable * rate)
   $sql{estimated} = "$select
     SUM(cust_main_county.tax / 100 * 
-      (cust_bill_pkg.setup + cust_bill_pkg.recur - COALESCE(exempt_charged, 0))
+      ( cust_bill_pkg.setup + cust_bill_pkg.recur
+        - COALESCE(exempt_charged, 0)
+        - COALESCE(credited, 0)
+      )
     )
-    FROM cust_main_county
-    JOIN ($pkg_tax) AS pkg_tax USING (taxnum)
-    JOIN cust_bill_pkg USING (billpkgnum)
+    FROM cust_bill_pkg
+    LEFT JOIN ($pkg_tax) AS pkg_tax
+      ON (cust_bill_pkg.billpkgnum = pkg_tax.billpkgnum)
     LEFT JOIN ($pkg_tax_exempt) AS pkg_tax_exempt
-      ON (pkg_tax_exempt.billpkgnum = cust_bill_pkg.billpkgnum 
-          AND pkg_tax_exempt.taxnum = cust_main_county.taxnum)
+      ON (cust_bill_pkg.billpkgnum = pkg_tax_exempt.billpkgnum)
+    LEFT JOIN ($pkg_credited) AS pkg_credited
+      ON (cust_bill_pkg.billpkgnum = pkg_credited.billpkgnum)
+    LEFT JOIN cust_main_county
+      ON (COALESCE(pkg_tax.taxnum, pkg_tax_exempt.taxnum) = cust_main_county.taxnum)
     $join_cust_pkg $where AND $nottax 
     $group";
 
   $all_sql{estimated} = "$select_all
     SUM(cust_main_county.tax / 100 * 
-      (cust_bill_pkg.setup + cust_bill_pkg.recur - COALESCE(exempt_charged, 0))
+      ( cust_bill_pkg.setup + cust_bill_pkg.recur
+        - COALESCE(exempt_charged, 0)
+        - COALESCE(credited, 0)
+      )
     )
-    FROM cust_main_county
-    JOIN ($pkg_tax) AS pkg_tax USING (taxnum)
-    JOIN cust_bill_pkg USING (billpkgnum)
+    FROM cust_bill_pkg
+    LEFT JOIN ($pkg_tax) AS pkg_tax
+      ON (cust_bill_pkg.billpkgnum = pkg_tax.billpkgnum)
     LEFT JOIN ($pkg_tax_exempt) AS pkg_tax_exempt
-      ON (pkg_tax_exempt.billpkgnum = cust_bill_pkg.billpkgnum 
-          AND pkg_tax_exempt.taxnum = cust_main_county.taxnum)
+      ON (cust_bill_pkg.billpkgnum = pkg_tax_exempt.billpkgnum)
+    LEFT JOIN ($pkg_credited) AS pkg_credited
+      ON (cust_bill_pkg.billpkgnum = pkg_credited.billpkgnum)
+    LEFT JOIN cust_main_county
+      ON (COALESCE(pkg_tax.taxnum, pkg_tax_exempt.taxnum) = cust_main_county.taxnum)
     $join_cust_pkg $where AND $nottax 
     $group_all";
 
diff --git a/httemplate/search/cust_bill_pkg.cgi b/httemplate/search/cust_bill_pkg.cgi
index 0664197..9094c4f 100644
--- a/httemplate/search/cust_bill_pkg.cgi
+++ b/httemplate/search/cust_bill_pkg.cgi
@@ -174,7 +174,8 @@ Filtering parameters:
   exempt portion (setup, recurring, or both) when calculating totals.
 
 - taxable: Limit to packages that are subject to tax, i.e. where a
-  cust_bill_pkg_tax_location record exists.
+  cust_bill_pkg_tax_location record exists, and subtract tax exemptions
+  and credits.
 
 - credit: Limit to line items that received a credit application.  The
   amount of the credit will also be shown.
@@ -423,36 +424,38 @@ if ( $cgi->param('nottax') ) {
     # everything that returns things joined to a tax definition
 
     my $exempt_sub;
-    if ( @exempt_where or @tax_where or $cgi->param('taxable') ) {
 
-      # process exemption restrictions, including @tax_where
-      my $exempt_sub = 'SELECT SUM(amount) as exempt_amount, billpkgnum 
-      FROM cust_tax_exempt_pkg JOIN cust_main_county USING (taxnum)';
+    # process exemption restrictions, including @tax_where
+    my $exempt_sub = 'SELECT SUM(amount) as exempt_amount, billpkgnum 
+    FROM cust_tax_exempt_pkg JOIN cust_main_county USING (taxnum)';
 
-      $exempt_sub .= ' WHERE '.join(' AND ', @tax_where, @exempt_where)
-        if (@tax_where or @exempt_where);
+    $exempt_sub .= ' WHERE '.join(' AND ', @tax_where, @exempt_where)
+      if (@tax_where or @exempt_where);
 
-      $exempt_sub .= ' GROUP BY billpkgnum';
+    $exempt_sub .= ' GROUP BY billpkgnum';
 
-      $join_pkg .= " LEFT JOIN ($exempt_sub) AS item_exempt
-      USING (billpkgnum)";
-    }
+    $join_pkg .= " LEFT JOIN ($exempt_sub) AS item_exempt
+    ON (cust_bill_pkg.billpkgnum = item_exempt.billpkgnum)";
+
+    my $credit_sub = 'SELECT SUM(amount) AS credit_amount, billpkgnum
+    FROM cust_credit_bill_pkg GROUP BY billpkgnum';
+
+    $join_pkg .= " LEFT JOIN ($credit_sub) AS item_credit
+    ON (cust_bill_pkg.billpkgnum = item_credit.billpkgnum)";
    
     if ( @tax_where or $cgi->param('taxable') ) {
       # process tax restrictions
       unshift @tax_where,
         'cust_main_county.tax > 0';
 
-      my $tax_sub = "SELECT invnum, cust_bill_pkg_tax_location.pkgnum
+      my $tax_sub = "SELECT taxable_billpkgnum AS billpkgnum
       FROM cust_bill_pkg_tax_location
-      JOIN cust_bill_pkg AS tax_item USING (billpkgnum)
       JOIN cust_main_county USING (taxnum)
       WHERE ". join(' AND ', @tax_where).
-      " GROUP BY invnum, cust_bill_pkg_tax_location.pkgnum";
+      " GROUP BY taxable_billpkgnum";
 
       $join_pkg .= " LEFT JOIN ($tax_sub) AS item_tax
-      ON (item_tax.invnum = cust_bill_pkg.invnum AND
-          item_tax.pkgnum = cust_bill_pkg.pkgnum)";
+      ON (cust_bill_pkg.billpkgnum = item_tax.billpkgnum)"
     }
 
     # now do something with that
@@ -465,23 +468,28 @@ if ( $cgi->param('nottax') ) {
       push @total,    'SUM(exempt_amount)';
       push @total_desc, "$money_char%.2f tax-exempt";
 
-    } elsif ( $cgi->param('taxable') ) {
+    } elsif ( @tax_where or $cgi->param('taxable') ) {
 
       my $taxable = 'cust_bill_pkg.setup + cust_bill_pkg.recur '.
-                    '- COALESCE(item_exempt.exempt_amount, 0)';
+                    '- COALESCE(item_exempt.exempt_amount, 0) '.
+                    '- COALESCE(item_credit.credit_amount, 0)';
 
-      push @where,    'item_tax.invnum IS NOT NULL';
+      push @where,    "(item_tax.billpkgnum IS NOT NULL OR item_exempt.billpkgnum IS NOT NULL)";
       push @select,   "($taxable) AS taxable_amount";
       push @peritem,  'taxable_amount';
       push @peritem_desc, 'Taxable';
-      push @total,    "SUM($taxable)";
-      push @total_desc, "$money_char%.2f taxable";
 
-    } elsif ( @tax_where ) {
-      # union of taxable + all exempt_ cases
-      push @where,
-        '(item_tax.invnum IS NOT NULL OR item_exempt.billpkgnum IS NOT NULL)';
+      if ( $cgi->param('taxable') ) {
+        push @where, "($taxable) > 0";
+      } else {
+        push @total, 'SUM('.
+                        'cust_bill_pkg.setup + cust_bill_pkg.recur '.
+                        '- COALESCE(item_credit.credit_amount, 0) )';
+        push @total_desc, "$money_char%.2f net sales";
+      }
 
+      push @total,    "SUM($taxable)";
+      push @total_desc, "$money_char%.2f taxable";
     }
 
   } # handle all joins to cust_main_county

commit 1a7d2f896b0173c98bae48c222a88c2ea3cedb1e
Author: Mark Wells <mark at freeside.biz>
Date:   Tue Dec 9 13:19:40 2014 -0800

    temp typo fix

diff --git a/FS/FS/part_event/Condition/signupdate_age.pm b/FS/FS/part_event/Condition/signupdate_age.pm
index 70b4bbd..0c78b4c 100644
--- a/FS/FS/part_event/Condition/signupdate_age.pm
+++ b/FS/FS/part_event/Condition/signupdate_age.pm
@@ -18,6 +18,7 @@ sub condition {
 
   my $age = $self->option_age_from('age', $opt{'time'} );
 
+  my $cust_main = $cust_bill->cust_main;
   ( $cust_main->signupdate - 60 ) <= $age;
 
 }

-----------------------------------------------------------------------

Summary of changes:
 FS/FS/Report/Tax.pm                          |   79 ++++++++++++++++++--------
 FS/FS/part_event/Condition/signupdate_age.pm |    1 +
 httemplate/search/cust_bill_pkg.cgi          |   58 +++++++++++--------
 3 files changed, 89 insertions(+), 49 deletions(-)




More information about the freeside-commits mailing list