X-Git-Url: http://git.freeside.biz/gitweb/?a=blobdiff_plain;f=FS%2FFS%2Fpart_pkg.pm;h=695d48ceb35bbff67787f8040997642e3ae19474;hb=57be672860c23f6c856328941fb37f2a9038620a;hp=420ffcb3d9276cefad984c500844ceba821fc319;hpb=0e8861ca6b3b04b99ea9477e8c1555561b21c929;p=freeside.git diff --git a/FS/FS/part_pkg.pm b/FS/FS/part_pkg.pm index 420ffcb3d..695d48ceb 100644 --- a/FS/FS/part_pkg.pm +++ b/FS/FS/part_pkg.pm @@ -2,7 +2,7 @@ package FS::part_pkg; use strict; use vars qw( @ISA ); -use FS::Record qw( qsearch qsearchs dbh ); +use FS::Record qw( qsearch dbh ); use FS::pkg_svc; use FS::agent_type; use FS::type_pkgs; @@ -180,6 +180,8 @@ insert and replace methods. sub check { my $self = shift; + for (qw(setup recur)) { $self->set($_=>0) if $self->get($_) =~ /^\s*$/; } + my $conf = new FS::Conf; if ( $conf->exists('safe-part_pkg') ) { @@ -218,6 +220,8 @@ sub check { or $r =~ /^my \$min = \$cust_pkg\->seconds_since\(\$cust_pkg\->bill \|\| 0\) \/ 60 \- \s*\d*\.?\d*\s*; \$min = 0 if \$min < 0; \s*\d*\.?\d*\s* \+ \s*\d*\.?\d*\s* \* \$min;\s*$/ + or $r =~ /^my \$last_bill = \$cust_pkg\->last_bill; my \$hours = \$cust_pkg\->seconds_since_sqlradacct\(\$last_bill, \$sdate \) \/ 3600 - \s*\d\.?\d*\s*; \$hours = 0 if \$hours < 0; my \$input = \$cust_pkg\->attribute_since_sqlradacct\(\$last_bill, \$sdate, "AcctInputOctets" \) \/ 1048576; my \$output = \$cust_pkg\->attribute_since_sqlradacct\(\$last_bill, \$sdate, "AcctOutputOctets" \) \/ 1048576; my \$total = \$input \+ \$output \- \s*\d\.?\d*\s*; \$total = 0 if \$total < 0; my \$input = \$input - \s*\d\.?\d*\s*; \$input = 0 if \$input < 0; my \$output = \$output - \s*\d\.?\d*\s*; \$output = 0 if \$output < 0; \s*\d\.?\d*\s* \+ \s*\d\.?\d*\s* \* \$hours \+ \s*\d\.?\d*\s* \* \$input \+ \s*\d\.?\d*\s* \* \$output \+ \s*\d\.?\d*\s* \* \$total *;\s*$/ + or do { #log! return "illegal recur: $r"; @@ -225,17 +229,19 @@ sub check { } - if ($self->def_svcpart and my @pkg_svc = $self->pkg_svc) { - unless (grep { $_->svcpart == $self->def_svcpart } @pkg_svc) { - return "no svcparts for this package match def_svcpart ".$self->def_svcpart; - } + 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') @@ -243,6 +249,7 @@ sub check { || $self->ut_enum('recurtax', [ '', 'Y' ] ) || $self->ut_textn('taxclass') || $self->ut_enum('disabled', [ '', 'Y' ] ) + || $self->SUPER::check ; } @@ -265,27 +272,16 @@ associated with this billing item definition (see L). Returns false if there not exactly one service definition with quantity 1, or if SVCDB is specified and does not match the svcdb of the service definition, -If the part_pkg has a nonzero def_svcpart, it takes precedence, even if it has -quantity > 1 and/or there are other service definitions, UNLESS SVCDB is specified -and doesn't match the svcdb of the def_svcpart. - =cut sub svcpart { my $self = shift; - my $svcdb = shift; - - if ($self->def_svcpart) { - if ((not $svcdb) or qsearchs('part_svc', { svcpart => $self->def_svcpart, - svcdb => $svcdb })) { - return $self->def_svcpart; - } - } - - my @pkg_svc = $self->pkg_svc; - return '' if scalar(@pkg_svc) != 1 - || $pkg_svc[0]->quantity != 1 - || ( $svcdb && $pkg_svc[0]->part_svc->svcdb ne $svcdb ); + my $svcdb = scalar(@_) ? shift : ''; + my @pkg_svc = grep { + $_->quantity == 1 + && ( $svcdb eq $_->part_svc->svcdb || !$svcdb ) + } $self->pkg_svc; + return '' if scalar(@pkg_svc) != 1; $pkg_svc[0]->svcpart; } @@ -298,6 +294,8 @@ following logic instead; If the package has B<0> setup and B<0> recur, the single item B is returned, otherwise, the single item B is returned. +(CHEK? LEC? Probably shouldn't accept those by default, prone to abuse) + =cut sub payby { @@ -313,10 +311,6 @@ sub payby { =back -=head1 VERSION - -$Id: part_pkg.pm,v 1.15 2002-06-08 07:48:36 khoff Exp $ - =head1 BUGS The delete method is unimplemented.