X-Git-Url: http://git.freeside.biz/gitweb/?p=freeside.git;a=blobdiff_plain;f=FS%2FFS%2Fpart_pkg.pm;h=df1f02e46b84ef37a9418db7e6e778fbbde6cd15;hp=6571c529b5f9b1df51bae3177f758fe84da1b9a8;hb=6c420cf8a5f93e425840c0cb8ba841affa081f76;hpb=035d0767d78b76853a8804a67325de10165df220 diff --git a/FS/FS/part_pkg.pm b/FS/FS/part_pkg.pm index 6571c529b..df1f02e46 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 dbh ); +use FS::Record qw( qsearch dbh dbdef ); use FS::pkg_svc; use FS::agent_type; use FS::type_pkgs; @@ -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') @@ -241,6 +249,7 @@ sub check { || $self->ut_enum('recurtax', [ '', 'Y' ] ) || $self->ut_textn('taxclass') || $self->ut_enum('disabled', [ '', 'Y' ] ) + || $self->SUPER::check ; } @@ -253,28 +262,33 @@ definition (with non-zero quantity). sub pkg_svc { my $self = shift; - grep { $_->quantity } qsearch( 'pkg_svc', { 'pkgpart' => $self->pkgpart } ); + #sort { $b->primary cmp $a->primary } + grep { $_->quantity } + qsearch( 'pkg_svc', { 'pkgpart' => $self->pkgpart } ); } =item svcpart [ SVCDB ] -Returns the svcpart of a single service definition (see L) +Returns the svcpart of the primary service definition (see L) 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, +false if there not a primary service definition or exactly one service +definition with quantity 1, or if SVCDB is specified and does not match the +svcdb of the service definition, =cut sub svcpart { my $self = shift; my $svcdb = scalar(@_) ? shift : ''; - my @pkg_svc = grep { - $_->quantity == 1 - && ( $svcdb eq $_->part_svc->svcdb || !$svcdb ) - } $self->pkg_svc; + my @svcdb_pkg_svc = + grep { ( $svcdb eq $_->part_svc->svcdb || !$svcdb ) } $self->pkg_svc; + my @pkg_svc = (); + @pkg_svc = grep { $_->primary_svc =~ /^Y/i } @svcdb_pkg_svc + if dbdef->table('pkg_svc')->column('primary_svc'); + @pkg_svc = grep {$_->quantity == 1 } @svcdb_pkg_svc + unless @pkg_svc; return '' if scalar(@pkg_svc) != 1; $pkg_svc[0]->svcpart; - } =item payby