projects
/
freeside.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
prorate_round_day options to round up / down only, #42108
[freeside.git]
/
FS
/
FS
/
part_pkg
/
prorate.pm
diff --git
a/FS/FS/part_pkg/prorate.pm
b/FS/FS/part_pkg/prorate.pm
index
f6f2abd
..
44f2f25
100644
(file)
--- a/
FS/FS/part_pkg/prorate.pm
+++ b/
FS/FS/part_pkg/prorate.pm
@@
-24,28
+24,40
@@
use FS::part_pkg::flat;
'type' => 'checkbox',
},
'prorate_round_day'=> {
'type' => 'checkbox',
},
'prorate_round_day'=> {
- 'name' => '
When prorating first month, round to '.
-
'the nearest full day
',
- '
type' => 'checkbox'
,
+ 'name' => '
Round the prorated period',
+
'type' => 'select
',
+ '
select_options' => \%FS::part_pkg::prorate_Mixin::prorate_round_day_opts
,
},
'prorate_defer_bill'=> {
'name' => 'Defer the first bill until the billing day',
'type' => 'checkbox',
},
},
'prorate_defer_bill'=> {
'name' => 'Defer the first bill until the billing day',
'type' => 'checkbox',
},
+ 'prorate_verbose' => {
+ 'name' => 'Show prorate details on the invoice',
+ 'type' => 'checkbox',
+ },
},
},
- 'fieldorder' => [ 'cutoff_day', 'prorate_defer_bill', 'add_full_period', 'prorate_round_day' ],
+ 'fieldorder' => [ 'cutoff_day', 'prorate_defer_bill', 'add_full_period', 'prorate_round_day'
, 'prorate_verbose'
],
'freq' => 'm',
'weight' => 20,
);
'freq' => 'm',
'weight' => 20,
);
-sub c
utoff_day
{
+sub c
alc_recur
{
my $self = shift;
my $self = shift;
- $self->option('cutoff_day', 1) || 1;
+ my $cust_pkg = $_[0];
+
+ my $charge = $self->calc_prorate(@_, $self->cutoff_day($cust_pkg));
+ my $discount = $self->calc_discount(@_);
+
+ sprintf( '%.2f', ($cust_pkg->quantity || 1) * ($charge - $discount) );
+
}
}
-sub calc_recur {
- my $self = shift;
- return $self->calc_prorate(@_) - $self->calc_discount(@_);
+sub cutoff_day {
+ 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;
}
1;