summaryrefslogtreecommitdiff
path: root/FS
diff options
context:
space:
mode:
authorivan <ivan>2003-10-20 04:25:18 +0000
committerivan <ivan>2003-10-20 04:25:18 +0000
commitea1d9968a9439272b58593e6b2ccbb3869002b20 (patch)
tree292913f56d4bc8fe753f5a142cb6617faf090295 /FS
parent56c3927f50ecd1ee957a52d76871557bd8813670 (diff)
daily/weekly billing
Diffstat (limited to 'FS')
-rw-r--r--FS/FS/cust_main.pm22
-rw-r--r--FS/FS/part_pkg.pm10
-rwxr-xr-xFS/bin/freeside-setup2
3 files changed, 29 insertions, 5 deletions
diff --git a/FS/FS/cust_main.pm b/FS/FS/cust_main.pm
index 58cfc0c76..0283e3d04 100644
--- a/FS/FS/cust_main.pm
+++ b/FS/FS/cust_main.pm
@@ -1089,7 +1089,7 @@ sub bill {
#bill recurring fee
my $recur = 0;
my $sdate;
- if ( $part_pkg->getfield('freq') > 0 &&
+ if ( $part_pkg->getfield('freq') ne '0' &&
! $cust_pkg->getfield('susp') &&
( $cust_pkg->getfield('bill') || 0 ) <= $time
) {
@@ -1127,8 +1127,19 @@ sub bill {
$cust_pkg->last_bill($sdate)
if $cust_pkg->dbdef_table->column('last_bill');
- $mon += $part_pkg->freq;
- until ( $mon < 12 ) { $mon -= 12; $year++; }
+ if ( $part_pkg->freq =~ /^\d+$/ ) {
+ $mon += $part_pkg->freq;
+ until ( $mon < 12 ) { $mon -= 12; $year++; }
+ } elsif ( $part_pkg->freq =~ /^(\d+)w$/ ) {
+ my $weeks = $1;
+ $mday += $weeks * 7;
+ } elsif ( $part_pkg->freq =~ /^(\d+)d$/ ) {
+ my $days = $1;
+ $mday += $days;
+ } else {
+ $dbh->rollback if $oldAutoCommit;
+ return "unparsable frequency: ". $part_pkg->freq;
+ }
$cust_pkg->setfield('bill',
timelocal_nocheck($sec,$min,$hour,$mday,$mon,$year));
$cust_pkg_mod_flag = 1;
@@ -1208,6 +1219,11 @@ sub bill {
my ($mon,$year) = (localtime($sdate) )[4,5];
$mon++;
my $freq = $part_pkg->freq || 1;
+ if ( $freq !~ /(\d+)$/ ) {
+ $dbh->rollback if $oldAutoCommit;
+ return "daily/weekly package definitions not (yet?)".
+ " compatible with monthly tax exemptions";
+ }
my $taxable_per_month = sprintf("%.2f", $taxable_charged / $freq );
foreach my $which_month ( 1 .. $freq ) {
my %hash = (
diff --git a/FS/FS/part_pkg.pm b/FS/FS/part_pkg.pm
index 12ee804ff..695d48ceb 100644
--- a/FS/FS/part_pkg.pm
+++ b/FS/FS/part_pkg.pm
@@ -229,11 +229,19 @@ sub check {
}
+ if ( $self->dbdef_table->column('freq')->type =~ /(int)/i ) {
+ my $error = $self->ut_number('freq');
+ return $error if $error;
+ } else {
+ $self->freq =~ /^(\d+[dw]?)$/
+ or return "Illegal or empty freq: ". $self->freq;
+ $self->freq($1);
+ }
+
$self->ut_numbern('pkgpart')
|| $self->ut_text('pkg')
|| $self->ut_text('comment')
|| $self->ut_anything('setup')
- || $self->ut_number('freq')
|| $self->ut_anything('recur')
|| $self->ut_alphan('plan')
|| $self->ut_anything('plandata')
diff --git a/FS/bin/freeside-setup b/FS/bin/freeside-setup
index b7b45dc63..375a63c2f 100755
--- a/FS/bin/freeside-setup
+++ b/FS/bin/freeside-setup
@@ -678,7 +678,7 @@ sub tables_hash_hack {
'pkg', 'varchar', '', $char_d,
'comment', 'varchar', '', $char_d,
'setup', @perl_type,
- 'freq', 'int', '', '', #billing frequency (months)
+ 'freq', 'varchar', '', $char_d, #billing frequency
'recur', @perl_type,
'setuptax', 'char', 'NULL', 1,
'recurtax', 'char', 'NULL', 1,