X-Git-Url: http://git.freeside.biz/gitweb/?p=freeside.git;a=blobdiff_plain;f=FS%2FFS%2Fsvc_Common.pm;h=b1f9d146f3415524c53c8ca58f011521cc627654;hp=56567e8ced9a056d0c126d51a58f7faaa301f0cc;hb=ad3bcb39580173f0ac1b6357cb49515d48af7ddf;hpb=8c39c41a00e15164ea306bfd73b2ae187dade9a5 diff --git a/FS/FS/svc_Common.pm b/FS/FS/svc_Common.pm index 56567e8ce..b1f9d146f 100644 --- a/FS/FS/svc_Common.pm +++ b/FS/FS/svc_Common.pm @@ -1,14 +1,14 @@ package FS::svc_Common; +use base qw( FS::cust_main_Mixin FS::Record ); use strict; -use vars qw( @ISA $noexport_hack $DEBUG $me +use vars qw( $noexport_hack $DEBUG $me $overlimit_missing_cust_svc_nonfatal_kludge ); use Carp qw( cluck carp croak confess ); #specify cluck have to specify them all use Scalar::Util qw( blessed ); use Lingua::EN::Inflect qw( PL_N ); use FS::Conf; use FS::Record qw( qsearch qsearchs fields dbh ); -use FS::cust_main_Mixin; use FS::cust_svc; use FS::part_svc; use FS::queue; @@ -17,8 +17,6 @@ use FS::inventory_item; use FS::inventory_class; use FS::NetworkMonitoringSystem; -@ISA = qw( FS::cust_main_Mixin FS::Record ); - $me = '[FS::svc_Common]'; $DEBUG = 0; @@ -30,9 +28,8 @@ FS::svc_Common - Object method for all svc_ records =head1 SYNOPSIS -use FS::svc_Common; - -@ISA = qw( FS::svc_Common ); +package svc_myservice; +use base qw( FS::svc_Common ); =head1 DESCRIPTION @@ -155,13 +152,46 @@ sub cust_linked { Checks the validity of fields in this record. -At present, this does nothing but call FS::Record::check (which, in turn, -does nothing but run virtual field checks). +Only checks fields marked as required in table_info or +part_svc_column definition. Should be invoked by service-specific +check using SUPER. Invokes FS::Record::check using SUPER. =cut sub check { my $self = shift; + + ## Checking required fields + + # get fields marked as required in table_info + my $required = {}; + my $labels = {}; + my $tinfo = $self->can('table_info') ? $self->table_info : {}; + my $fields = $tinfo->{'fields'} || {}; + foreach my $field (keys %$fields) { + if (ref($fields->{$field}) && $fields->{$field}->{'required'}) { + $required->{$field} = 1; + $labels->{$field} = $fields->{$field}->{'label'}; + } + } + # add fields marked as required in database + foreach my $column ( + qsearch('part_svc_column',{ + 'svcpart' => $self->svcpart, + 'required' => 'Y' + }) + ) { + $required->{$column->columnname} = 1; + $labels->{$column->columnname} = $column->columnlabel; + } + # do the actual checking + foreach my $field (keys %$required) { + unless ($self->$field) { + my $name = $labels->{$field} || $field; + return "Field $name is required\n" + } + } + $self->SUPER::check; } @@ -336,6 +366,7 @@ sub _check_duplcate { ''; } sub preinsert_hook { ''; } sub table_dupcheck_fields { (); } sub prereplace_hook { ''; } +sub prereplace_hook_first { ''; } sub predelete_hook { ''; } sub predelete_hook_first { ''; } @@ -806,6 +837,9 @@ If there is an error, returns the error, otherwise returns false. =cut sub set_auto_inventory { + # don't try to do this during an upgrade + return '' if $FS::CurrentUser::upgrade_hack; + my $self = shift; my $old = @_ ? shift : ''; @@ -1009,13 +1043,6 @@ sub release_router { Returns the cust_svc record associated with this svc_ record, as a FS::cust_svc object (see L). -=cut - -sub cust_svc { - my $self = shift; - qsearchs('cust_svc', { 'svcnum' => $self->svcnum } ); -} - =item suspend Runs export_suspend callbacks. @@ -1390,7 +1417,7 @@ sub search { #custnum if ( $params->{'custnum'} =~ /^(\d+)$/ && $1 ) { - push @where, "custnum = $1"; + push @where, "cust_pkg.custnum = $1"; } #customer status