[freeside-commits] branch FREESIDE_2_3_BRANCH updated. 6ff7ce17de5eb02aa12b1688e7626c7a942e650c

Ivan ivan at 420.am
Thu Aug 2 19:39:23 PDT 2012


The branch, FREESIDE_2_3_BRANCH has been updated
       via  6ff7ce17de5eb02aa12b1688e7626c7a942e650c (commit)
      from  188a434202af3a84a9ea0bcdb45a8cfb4cc60be3 (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 6ff7ce17de5eb02aa12b1688e7626c7a942e650c
Author: Ivan Kohler <ivan at freeside.biz>
Date:   Thu Aug 2 19:39:22 2012 -0700

    per-customer prorate day, RT#17891

diff --git a/FS/FS/Conf.pm b/FS/FS/Conf.pm
index da29a05..b19cd08 100644
--- a/FS/FS/Conf.pm
+++ b/FS/FS/Conf.pm
@@ -809,6 +809,13 @@ my %payment_gateway_options = (
   },
 
   {
+    'key'         => 'cust_main-select-prorate_day',
+    'section'     => 'billing',
+    'description' => 'When used with prorate or anniversary packages, allows the selection of the prorate day of month, on a per-customer basis',
+    'type'        => 'checkbox',
+  },
+
+  {
     'key'         => 'encryption',
     'section'     => 'billing',
     'description' => 'Enable encryption of credit cards and echeck numbers',
diff --git a/FS/FS/Schema.pm b/FS/FS/Schema.pm
index c38c52c..2f60462 100644
--- a/FS/FS/Schema.pm
+++ b/FS/FS/Schema.pm
@@ -914,6 +914,7 @@ sub tables_hashref {
         'email_csv_cdr', 'char', 'NULL', 1, '', '',
         'accountcode_cdr', 'char', 'NULL', 1, '', '',
         'billday',   'int', 'NULL', '', '', '',
+        'prorate_day',   'int', 'NULL', '', '', '',
         'edit_subject', 'char', 'NULL', 1, '', '',
         'locale', 'varchar', 'NULL', 16, '', '', 
         'calling_list_exempt', 'char', 'NULL', 1, '', '',
diff --git a/FS/FS/cust_main.pm b/FS/FS/cust_main.pm
index 10f8268..b00cd92 100644
--- a/FS/FS/cust_main.pm
+++ b/FS/FS/cust_main.pm
@@ -1800,6 +1800,7 @@ sub check {
     || $self->ut_floatn('cdr_termination_percentage')
     || $self->ut_floatn('credit_limit')
     || $self->ut_numbern('billday')
+    || $self->ut_numbern('prorate_day')
     || $self->ut_enum('edit_subject', [ '', 'Y' ] )
     || $self->ut_enum('calling_list_exempt', [ '', 'Y' ] )
     || $self->ut_enum('invoice_noemail', [ '', 'Y' ] )
diff --git a/FS/FS/part_pkg/prorate.pm b/FS/FS/part_pkg/prorate.pm
index f8d03dc..ac86f39 100644
--- a/FS/FS/part_pkg/prorate.pm
+++ b/FS/FS/part_pkg/prorate.pm
@@ -44,12 +44,16 @@ use FS::part_pkg::flat;
 
 sub calc_recur {
   my $self = shift;
-  return $self->calc_prorate(@_, $self->cutoff_day) - $self->calc_discount(@_);
+  my $cust_pkg = $_[0];
+  $self->calc_prorate(@_, $self->cutoff_day($cust_pkg))
+    - $self->calc_discount(@_);
 }
 
 sub cutoff_day {
-  my $self = shift;
-  split(/\s*,\s*/, $self->option('cutoff_day', 1) || '1');
+  my( $self, $cust_pkg ) = @_;
+  my $prorate_day = $cust_pkg->cust_main->prorate_day;
+  $prorate_day ? ( $prorate_day )
+               : split(/\s*,\s*/, $self->option('cutoff_day', 1) || '1');
 }
 
 1;
diff --git a/FS/FS/part_pkg/recur_Common.pm b/FS/FS/part_pkg/recur_Common.pm
index 9d7341b..03d5c2c 100644
--- a/FS/FS/part_pkg/recur_Common.pm
+++ b/FS/FS/part_pkg/recur_Common.pm
@@ -39,14 +39,15 @@ sub calc_setup {
 
 sub cutoff_day {
   # prorate/subscription only; we don't support sync_bill_date here
-  my $self = shift;
-  my $cust_pkg = shift;
+  my( $self, $cust_pkg ) = @_;
   my $recur_method = $self->option('recur_method',1) || 'anniversary';
-  if ( $recur_method eq 'prorate' or $recur_method eq 'subscription' ) {
-    return $self->option('cutoff_day',1) || 1;
-  } else {
-    return ();
-  }
+  return () unless $recur_method eq 'prorate'
+                || $recur_method eq 'subscription';
+
+  #false laziness w/prorate.pm::cutoff_day
+  my $prorate_day = $cust_pkg->cust_main->prorate_day;
+  $prorate_day ? ( $prorate_day )
+               : split(/\s*,\s*/, $self->option('cutoff_day', 1) || '1');
 }
 
 sub calc_recur_Common {
diff --git a/httemplate/edit/cust_main/billing.html b/httemplate/edit/cust_main/billing.html
index 258530e..4363f2c 100644
--- a/httemplate/edit/cust_main/billing.html
+++ b/httemplate/edit/cust_main/billing.html
@@ -519,6 +519,17 @@
     </TR>
 % }
 
+% if ( $conf->exists('cust_main-select-prorate_day') ) {
+    <TR>
+      <TD ALIGN="right" WIDTH="200"><% mt('Prorate day (1-28)') |h %> </TD>
+      <TD>
+        <INPUT TYPE="text" NAME="prorate_day" VALUE="<% $cust_main->prorate_day %>" SIZE=3 MAXLENGTH=2>
+      </TD>
+    </TR>
+% } else {
+    <INPUT TYPE="hidden" NAME="prorate_day" VALUE="<% $cust_main->prorate_day %>">
+% }
+
     <TR>
       <TD ALIGN="right" WIDTH="200"><% mt('Invoice terms') |h %> </TD>
       <TD WIDTH="408">
diff --git a/httemplate/view/cust_main/billing.html b/httemplate/view/cust_main/billing.html
index 4146f26..6199090 100644
--- a/httemplate/view/cust_main/billing.html
+++ b/httemplate/view/cust_main/billing.html
@@ -23,6 +23,14 @@
   <TD BGCOLOR="#ffffff"><B><% $balance %></B></TD>
 </TR>
 
+% if ( $conf->exists('cust_main-select-prorate_day') ) {
+<TR>
+  <TD ALIGN="right"><% mt('Prorate day of month') |h %></TD>
+  <TD BGCOLOR="#ffffff"><% $cust_main->prorate_day %>
+  </TD>
+</TR>
+% }
+
 % if ( $conf->exists('cust_main-select-billday') 
 %    && ($cust_main->payby eq 'CARD' || $cust_main->payby eq 'CHEK') ) {
 <TR>

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

Summary of changes:
 FS/FS/Conf.pm                          |    7 +++++++
 FS/FS/Schema.pm                        |    1 +
 FS/FS/cust_main.pm                     |    1 +
 FS/FS/part_pkg/prorate.pm              |   10 +++++++---
 FS/FS/part_pkg/recur_Common.pm         |   15 ++++++++-------
 httemplate/edit/cust_main/billing.html |   11 +++++++++++
 httemplate/view/cust_main/billing.html |    8 ++++++++
 7 files changed, 43 insertions(+), 10 deletions(-)




More information about the freeside-commits mailing list