diff options
author | Ivan Kohler <ivan@freeside.biz> | 2013-12-09 23:37:20 -0800 |
---|---|---|
committer | Ivan Kohler <ivan@freeside.biz> | 2013-12-09 23:37:20 -0800 |
commit | 8c39c41a00e15164ea306bfd73b2ae187dade9a5 (patch) | |
tree | 01e5f6317530d28d3e17ca5bf23319ad962e32e5 /FS | |
parent | 2083f6fb050747ad589a6e1dd15a3f513e9e6ee4 (diff) |
on-the-fly alarm vendor / type / CS adding, RT#23694
Diffstat (limited to 'FS')
-rw-r--r-- | FS/FS/svc_Common.pm | 14 | ||||
-rw-r--r-- | FS/FS/svc_alarm.pm | 71 |
2 files changed, 67 insertions, 18 deletions
diff --git a/FS/FS/svc_Common.pm b/FS/FS/svc_Common.pm index 3993d3d..56567e8 100644 --- a/FS/FS/svc_Common.pm +++ b/FS/FS/svc_Common.pm @@ -335,6 +335,7 @@ sub preinsert_hook_first { ''; } sub _check_duplcate { ''; } sub preinsert_hook { ''; } sub table_dupcheck_fields { (); } +sub prereplace_hook { ''; } sub predelete_hook { ''; } sub predelete_hook_first { ''; } @@ -472,15 +473,10 @@ sub replace { local $FS::UID::AutoCommit = 0; my $dbh = dbh; - my $error = $new->set_auto_inventory($old); - if ( $error ) { - $dbh->rollback if $oldAutoCommit; - return $error; - } - - #redundant, but so any duplicate fields are maniuplated as appropriate - # (svc_phone.phonenum) - $error = $new->check; + my $error = $new->prereplace_hook_first($old) + || $new->set_auto_inventory($old) + || $new->check; #redundant, but so any duplicate fields are + #maniuplated as appropriate (svc_phone.phonenum) if ( $error ) { $dbh->rollback if $oldAutoCommit; return $error; diff --git a/FS/FS/svc_alarm.pm b/FS/FS/svc_alarm.pm index 3e910f0..4a355c7 100644 --- a/FS/FS/svc_alarm.pm +++ b/FS/FS/svc_alarm.pm @@ -99,12 +99,15 @@ sub table_info { ; { - 'name' => 'Alarm service', - 'sorts' => 'acctnum', - 'display_weight' => 80, - 'cancel_weight' => 85, - 'fields' => \%fields, - + 'name' => 'Alarm service', + 'sorts' => 'acctnum', + 'display_weight' => 80, + 'cancel_weight' => 85, + 'fields' => \%fields, + 'addl_process_fields' => [qw( alarmsystemnum_systemname + alarmtypenum_inputs alarmtypenum_outputs + alarmstationnum_stationname + )], }; } @@ -134,6 +137,50 @@ Delete this record from the database. Replaces the OLD_RECORD with this one in the database. If there is an error, returns the error, otherwise returns false. +=cut + +sub preinsert_hook_first { shift->_inline_add(@_); } +sub prereplace_hook_first { shift->_inline_add(@_); } + +sub _inline_add { + my $self = shift; + + my $agentnum = $self->cust_svc->cust_pkg->cust_main->agentnum; + + if ( $self->alarmsystemnum == -1 ) { + my $alarm_system = new FS::alarm_system { + 'agentnum' => $agentnum, + 'systemname' => $self->alarmsystemnum_systemname, + }; + my $error = $alarm_system->insert; + return $error if $error; + $self->alarmsystemnum($alarm_system->alarmsystemnum); + } + + if ( $self->alarmtypenum == -1 ) { + my $alarm_type = new FS::alarm_type { + 'agentnum' => $agentnum, + 'inputs' => $self->alarmtypenum_inputs, + 'outputs' => $self->alarmtypenum_outputs, + }; + my $error = $alarm_type->insert; + return $error if $error; + $self->alarmtypenum($alarm_type->alarmtypenum); + } + + if ( $self->alarmstationnum == -1 ) { + my $alarm_station = new FS::alarm_station { + 'agentnum' => $agentnum, + 'stationname' => $self->alarmstationnum_stationname, + }; + my $error = $alarm_station->insert; + return $error if $error; + $self->alarmstationnum($alarm_station->alarmstationnum) + } + + ''; +} + =item check Checks all fields to make sure this is a valid service. If there is @@ -162,9 +209,15 @@ sub check { $self->SUPER::check; } -sub alarm_system { qsearchs('alarm_system', {systemnum =>shift->systemnum } ) } -sub alarm_type { qsearchs('alarm_type', {typenum =>shift->systemnum } ) } -sub alarm_station { qsearchs('alarm_station',{stationnum=>shift->stationnum} ) } +sub alarm_system { + qsearchs('alarm_system', { alarmsystemnum => shift->alarmsystemnum } ); +} +sub alarm_type { + qsearchs('alarm_type', { alarmtypenum => shift->alarmtypenum } ); +} +sub alarm_station { + qsearchs('alarm_station', { alarmstationnum => shift->alarmstationnum } ); +} =back |