projects
/
freeside.git
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
|
inline
| side by side (from parent 1:
c5a2d36
)
per-customer option to force anniversary packages to prorate, #38191
author
Mark Wells
<mark@freeside.biz>
Thu, 13 Oct 2016 22:35:26 +0000
(15:35 -0700)
committer
Mark Wells
<mark@freeside.biz>
Fri, 14 Oct 2016 02:21:32 +0000
(19:21 -0700)
FS/FS/Schema.pm
patch
|
blob
|
history
FS/FS/cust_main.pm
patch
|
blob
|
history
FS/FS/part_pkg/flat.pm
patch
|
blob
|
history
FS/FS/part_pkg/prorate_calendar.pm
patch
|
blob
|
history
FS/FS/part_pkg/recur_Common.pm
patch
|
blob
|
history
FS/FS/part_pkg/subscription.pm
patch
|
blob
|
history
httemplate/edit/cust_main/billing.html
patch
|
blob
|
history
httemplate/elements/freeside.css
patch
|
blob
|
history
diff --git
a/FS/FS/Schema.pm
b/FS/FS/Schema.pm
index
a1615b7
..
f8b82f4
100644
(file)
--- a/
FS/FS/Schema.pm
+++ b/
FS/FS/Schema.pm
@@
-1641,6
+1641,7
@@
sub tables_hashref {
'accountcode_cdr', 'char', 'NULL', 1, '', '',
'billday', 'int', 'NULL', '', '', '',
'prorate_day', 'int', 'NULL', '', '', '',
'accountcode_cdr', 'char', 'NULL', 1, '', '',
'billday', 'int', 'NULL', '', '', '',
'prorate_day', 'int', 'NULL', '', '', '',
+ 'force_prorate_day', 'char', 'NULL', 1, '', '',
'edit_subject', 'char', 'NULL', 1, '', '',
'locale', 'varchar', 'NULL', 16, '', '',
'calling_list_exempt', 'char', 'NULL', 1, '', '',
'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
11d7763
..
9c8e374
100644
(file)
--- a/
FS/FS/cust_main.pm
+++ b/
FS/FS/cust_main.pm
@@
-1775,6
+1775,7
@@
sub check {
|| $self->ut_floatn('credit_limit')
|| $self->ut_numbern('billday')
|| $self->ut_numbern('prorate_day')
|| $self->ut_floatn('credit_limit')
|| $self->ut_numbern('billday')
|| $self->ut_numbern('prorate_day')
+ || $self->ut_flag('force_prorate_day')
|| $self->ut_flag('edit_subject')
|| $self->ut_flag('calling_list_exempt')
|| $self->ut_flag('invoice_noemail')
|| $self->ut_flag('edit_subject')
|| $self->ut_flag('calling_list_exempt')
|| $self->ut_flag('invoice_noemail')
diff --git
a/FS/FS/part_pkg/flat.pm
b/FS/FS/part_pkg/flat.pm
index
97d4363
..
504def0
100644
(file)
--- a/
FS/FS/part_pkg/flat.pm
+++ b/
FS/FS/part_pkg/flat.pm
@@
-173,6
+173,12
@@
sub calc_recur {
sub cutoff_day {
my $self = shift;
my $cust_pkg = shift;
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 ) {
if ( $self->option('sync_bill_date',1) ) {
my $next_bill = $cust_pkg->cust_main->next_bill_date;
if ( $next_bill ) {
diff --git
a/FS/FS/part_pkg/prorate_calendar.pm
b/FS/FS/part_pkg/prorate_calendar.pm
index
c50cae0
..
a8ed8f9
100644
(file)
--- a/
FS/FS/part_pkg/prorate_calendar.pm
+++ b/
FS/FS/part_pkg/prorate_calendar.pm
@@
-72,7
+72,11
@@
sub check {
sub cutoff_day {
my( $self, $cust_pkg ) = @_;
my @periods = @{ $freq_cutoff_days{$self->freq} };
sub cutoff_day {
my( $self, $cust_pkg ) = @_;
my @periods = @{ $freq_cutoff_days{$self->freq} };
- my @cutoffs = ($self->option('cutoff_day') || 1); # Jan 1 = 1
+ my $prorate_day = $cust_pkg->cust_main->prorate_day
+ || $self->option('cutoff_day')
+ || 1;
+
+ my @cutoffs = ($prorate_day);
pop @periods; # we don't care about the last one
foreach (@periods) {
push @cutoffs, $cutoffs[-1] + $_;
pop @periods; # we don't care about the last one
foreach (@periods) {
push @cutoffs, $cutoffs[-1] + $_;
diff --git
a/FS/FS/part_pkg/recur_Common.pm
b/FS/FS/part_pkg/recur_Common.pm
index
b73c62c
..
4ed83a4
100644
(file)
--- a/
FS/FS/part_pkg/recur_Common.pm
+++ b/
FS/FS/part_pkg/recur_Common.pm
@@
-41,13
+41,14
@@
sub cutoff_day {
# prorate/subscription only; we don't support sync_bill_date here
my( $self, $cust_pkg ) = @_;
my $recur_method = $self->option('recur_method',1) || 'anniversary';
# prorate/subscription only; we don't support sync_bill_date here
my( $self, $cust_pkg ) = @_;
my $recur_method = $self->option('recur_method',1) || 'anniversary';
- return () unless $recur_method eq 'prorate'
- || $recur_method eq 'subscription';
+ my $cust_main = $cust_pkg->cust_main;
- #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');
+ if ( $cust_main->force_prorate_day and $cust_main->prorate_day ) {
+ return ( $cust_main->prorate_day );
+ } elsif ($recur_method eq 'prorate' || $recur_method eq 'subscription') {
+
+ return split(/\s*,\s*/, $self->option('cutoff_day', 1) || '1');
+ }
}
sub calc_recur_Common {
}
sub calc_recur_Common {
diff --git
a/FS/FS/part_pkg/subscription.pm
b/FS/FS/part_pkg/subscription.pm
index
0dfe049
..
bf644d4
100644
(file)
--- a/
FS/FS/part_pkg/subscription.pm
+++ b/
FS/FS/part_pkg/subscription.pm
@@
-88,6
+88,11
@@
use FS::part_pkg::flat;
sub calc_recur {
my($self, $cust_pkg, $sdate, $details, $param ) = @_;
my $cutoff_day = $self->option('cutoff_day', 1) || 1;
sub calc_recur {
my($self, $cust_pkg, $sdate, $details, $param ) = @_;
my $cutoff_day = $self->option('cutoff_day', 1) || 1;
+ my $cust_main = $cust_pkg->cust_main;
+ if ( $cust_main->force_prorate_day and $cust_main->prorate_day ) {
+ $cutoff_day = $cust_main->prorate_day;
+ }
+
my $mnow = $$sdate;
my ($sec,$min,$hour,$mday,$mon,$year) = (localtime($mnow) )[0,1,2,3,4,5];
my $mnow = $$sdate;
my ($sec,$min,$hour,$mday,$mon,$year) = (localtime($mnow) )[0,1,2,3,4,5];
diff --git
a/httemplate/edit/cust_main/billing.html
b/httemplate/edit/cust_main/billing.html
index
50262e8
..
649c4c9
100644
(file)
--- a/
httemplate/edit/cust_main/billing.html
+++ b/
httemplate/edit/cust_main/billing.html
@@
-124,6
+124,12
@@
<SELECT NAME="prorate_day">
<% prorate_day_options($cust_main->prorate_day) %>
</SELECT>
<SELECT NAME="prorate_day">
<% prorate_day_options($cust_main->prorate_day) %>
</SELECT>
+ <& /elements/checkbox.html,
+ field => 'force_prorate_day',
+ value => 'Y',
+ curr_value => $cust_main->force_prorate_day
+ &>
+ <label><% emt('Force all packages to this day') %></label>
</TD>
</TR>
</TD>
</TR>
diff --git
a/httemplate/elements/freeside.css
b/httemplate/elements/freeside.css
index
8545ee5
..
c98fdcb
100644
(file)
--- a/
httemplate/elements/freeside.css
+++ b/
httemplate/elements/freeside.css
@@
-232,7
+232,8
@@
div.fstabcontainer {
border-radius: .25em;
}
border-radius: .25em;
}
-.fsinnerbox th {
+.fsinnerbox th,
+.fsinnerbox label {
font-weight:normal;
font-size:80%;
vertical-align: top;
font-weight:normal;
font-size:80%;
vertical-align: top;