X-Git-Url: http://git.freeside.biz/gitweb/?a=blobdiff_plain;f=FS%2FFS%2Fsvc_Common.pm;h=73658f67af979c642f66aeb10f52f57541b345c3;hb=62e6a2b1c99086f3a9097f2d9d29fd8c414564b8;hp=b1f9d146f3415524c53c8ca58f011521cc627654;hpb=4fda726fa9f8e709c68ec823edc5ae702723281c;p=freeside.git diff --git a/FS/FS/svc_Common.pm b/FS/FS/svc_Common.pm index b1f9d146f..73658f67a 100644 --- a/FS/FS/svc_Common.pm +++ b/FS/FS/svc_Common.pm @@ -167,28 +167,30 @@ sub check { 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'}; + if ($tinfo->{'manual_require'}) { + 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" + # 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 (length($self->get($field)) > 0) { + my $name = $labels->{$field} || $field; + return "$name is required\n" + } } } @@ -280,7 +282,7 @@ sub insert { $self->svcpart($cust_svc->svcpart); } - my $error = $self->preinsert_hook_first + my $error = $self->preinsert_hook_first(%options) || $self->set_auto_inventory || $self->check || $self->_check_duplicate @@ -395,7 +397,8 @@ sub delete { local $FS::UID::AutoCommit = 0; my $dbh = dbh; - my $error = $self->predelete_hook_first + my $error = $self->cust_svc->check_part_svc_link_unprovision + || $self->predelete_hook_first || $self->SUPER::delete || $self->export('delete', @$export_args) || $self->return_inventory @@ -1151,7 +1154,9 @@ Runs the provided export hook (i.e. "suspend", "unsuspend") for this service. sub export { my( $self, $method ) = ( shift, shift ); + # $method must start with export_, $action must be the part after that $method = "export_$method" unless $method =~ /^export_/; + my ($action) = $method =~ /^export_(\w+)/; local $SIG{HUP} = 'IGNORE'; local $SIG{INT} = 'IGNORE'; @@ -1168,6 +1173,7 @@ sub export { unless ( $noexport_hack ) { foreach my $part_export ( $self->cust_svc->part_svc->part_export ) { next unless $part_export->can($method); + next if $part_export->get("no_$action"); # currently only 'no_suspend' my $error = $part_export->$method($self, @_); if ( $error ) { $dbh->rollback if $oldAutoCommit; @@ -1346,6 +1352,9 @@ sub search_sql { #my( $class, $string ) = @_; '1 = 0'; #false } +sub search_sql_addl_from { + ''; +} =item search HASHREF