[freeside-commits] branch master updated. e3a53cf6d4915941327a316927310586c0126d77

Christopher Burger burgerc at freeside.biz
Thu Mar 1 11:44:32 PST 2018


The branch, master has been updated
       via  e3a53cf6d4915941327a316927310586c0126d77 (commit)
      from  faf4866cd552cc40045fd048ac77ea8f2bece2d3 (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 e3a53cf6d4915941327a316927310586c0126d77
Author: Christopher Burger <burgerc at freeside.biz>
Date:   Thu Mar 1 14:38:54 2018 -0500

    RT# 79239 - added option to prorate first month to synchronize with customers other packages with sql_export plan

diff --git a/FS/FS/part_pkg/prorate_Mixin.pm b/FS/FS/part_pkg/prorate_Mixin.pm
index 9e97cc593..9252143b9 100644
--- a/FS/FS/part_pkg/prorate_Mixin.pm
+++ b/FS/FS/part_pkg/prorate_Mixin.pm
@@ -30,7 +30,7 @@ tie our %prorate_round_day_opts, 'Tie::IxHash',
     },
     'prorate_defer_bill' => {
                 'name' => 'When prorating, defer the first bill until the '.
-                          'billing day',
+                          'billing day or customers next bill date if synchronizing.',
                 'type' => 'checkbox',
     },
     'prorate_verbose' => {
diff --git a/FS/FS/part_pkg/sql_external.pm b/FS/FS/part_pkg/sql_external.pm
index 9bf107b7d..77b5e4983 100644
--- a/FS/FS/part_pkg/sql_external.pm
+++ b/FS/FS/part_pkg/sql_external.pm
@@ -19,6 +19,10 @@ our @detail_cols = ( qw(amount format duration phonenum accountcode
   'shortname' => 'External SQL query',
   'inherit_fields' => [ 'prorate_Mixin', 'global_Mixin' ],
   'fields' => {
+    'sync_bill_date' => { 'name' => 'Prorate first month to synchronize '.
+                                    'with the customer\'s other packages',
+                          'type' => 'checkbox',
+                        },
     'cutoff_day'    => { 'name' => 'Billing Day (1 - 28) for prorating or '.
                                    'subscription',
                          'default' => '1',
@@ -50,7 +54,7 @@ our @detail_cols = ( qw(amount format duration phonenum accountcode
     },
 
   },
-  'fieldorder' => [qw( recur_method cutoff_day ),
+  'fieldorder' => [qw( recur_method cutoff_day sync_bill_date),
                    FS::part_pkg::prorate_Mixin::fieldorder,
                    qw( datasrc db_username db_password query query_style
                   )],
@@ -140,6 +144,44 @@ sub calc_recur {
   ($cust_pkg->quantity || 1) * $self->calc_recur_Common($cust_pkg,$sdate,$details,$param);
 }
 
+sub cutoff_day {
+  my $self = shift;
+  my $cust_pkg = shift;
+  my $cust_main = $cust_pkg->cust_main;
+  # force it to act like a prorate package, is what this means
+  # because we made a distinction once between prorate and flat packages
+  if ( $cust_main->force_prorate_day  and $cust_main->prorate_day ) {
+     return ( $cust_main->prorate_day );
+  }
+  if ( $self->option('sync_bill_date',1) ) {
+    my $next_bill = $cust_pkg->cust_main->next_bill_date;
+    if ( $next_bill ) {
+      return (localtime($next_bill))[3];
+    } else {
+      # This is the customer's only active package and hasn't been billed
+      # yet, so set the cutoff day to either today or tomorrow, whichever
+      # would result in a full period after rounding.
+      my $setup = $cust_pkg->setup; # because it's "now"
+      my $rounding_mode = $self->option('prorate_round_day',1);
+      return () if !$setup or !$rounding_mode;
+      my ($sec, $min, $hour, $mday, $mon, $year) = localtime($setup);
+
+      if (   ( $rounding_mode == 1 and $hour >= 12 )
+          or ( $rounding_mode == 3 and ( $sec > 0 or $min > 0 or $hour > 0 ))
+      ) {
+        # then the prorate period will be rounded down to start from
+        # midnight tomorrow, so the cutoff day should be the current day +
+        # 1.
+        $setup = timelocal(59,59,23,$mday,$mon,$year) + 1;
+        $mday = (localtime($setup))[3];
+      }
+      # otherwise, it will be rounded up, so leave the cutoff day at today.
+      return $mday;
+    }
+  }
+  return ();
+}
+
 sub can_discount { 1; }
 
 sub is_free { 0; }

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

Summary of changes:
 FS/FS/part_pkg/prorate_Mixin.pm |  2 +-
 FS/FS/part_pkg/sql_external.pm  | 44 ++++++++++++++++++++++++++++++++++++++++-
 2 files changed, 44 insertions(+), 2 deletions(-)




More information about the freeside-commits mailing list