summaryrefslogtreecommitdiff
path: root/FS
diff options
context:
space:
mode:
authorIvan Kohler <ivan@freeside.biz>2013-12-09 23:37:20 -0800
committerIvan Kohler <ivan@freeside.biz>2013-12-09 23:37:20 -0800
commit8c39c41a00e15164ea306bfd73b2ae187dade9a5 (patch)
tree01e5f6317530d28d3e17ca5bf23319ad962e32e5 /FS
parent2083f6fb050747ad589a6e1dd15a3f513e9e6ee4 (diff)
on-the-fly alarm vendor / type / CS adding, RT#23694
Diffstat (limited to 'FS')
-rw-r--r--FS/FS/svc_Common.pm14
-rw-r--r--FS/FS/svc_alarm.pm71
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