package FS::svc_alarm;
+use base qw( FS::svc_Common );
use strict;
-use base qw( FS::svc_Common );
-use FS::Record; # qw( qsearch qsearchs );
+use Tie::IxHash;
+use FS::alarm_system;
+use FS::alarm_type;
+use FS::alarm_station;
=head1 NAME
=item svcnum - Primary key
-=item alarm_system - Alarm System
+=item alarmsystemnum - Alarm System Vendor (see L<FS::alarm_system>)
-=item alarm_type = Alarm Type
+=item alarmtypenum - Alarm System Type (inputs/outputs) (see L<FS::alarm_type>)
+
+=item alarmstationnum - Alarm central station (see L<FS::alarm_station>)
=item acctnum - Account number
#'disable_select' => 1,
'disable_inventory' => 1,
);
+
+ tie my %fields, 'Tie::IxHash',
+ 'svcnum' => { label => 'Service' },
+ 'acctnum' => { label => 'Account #', %opts },
+ '_password' => { label => 'Password' , %opts },
+ 'location' => { label => 'Location', %opts },
+ 'cs_receiver' => { label => 'CS Receiver #'},
+ 'cs_phonenum' => { label => 'CS Phone #' },
+ 'serialnum' => { label => 'Alarm Serial #' },
+ 'alarmsystemnum' => { label => 'Alarm System Vendor',
+ type => 'select-alarm_system',
+ disable_inventory => 1,
+ value_callback => sub {
+ shift->alarm_system->systemname
+ },
+ },
+ 'alarmtypenum' => { label => 'Alarm System Type',
+ type => 'select-alarm_type',
+ disable_inventory => 1,
+ value_callback => sub {
+ shift->alarm_type->typename
+ },
+ },
+ 'alarmstationnum' => { label => 'Alarm Central Station',
+ type => 'select-alarm_station',
+ disable_inventory => 1,
+ value_callback => sub {
+ shift->alarm_station->stationname
+ },
+ },
+ ;
+
{
- 'name' => 'Alarm service',
- 'sorts' => 'acctnum',
- 'display_weight' => 80,
- 'cancel_weight' => 85,
- 'fields' => {
- 'svcnum' => { label => 'Service' },
- 'alarm_system' => { label => 'Alarm System', %opts },
- 'alarm_type' => { label => 'Alarm Type', %opts },
- 'acctnum' => { label => 'Account #', %opts },
- '_password' => { label => 'Password', %opts },
- 'location' => { label => 'Location', %opts },
- },
+ '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
+ )],
};
}
sub label {
my $self = shift;
- $self->acctnum;
+ $self->acctnum . '@'. $self->alarm_station->stationname. #?
+ ' ('. $self->alarm_system->systemname. ' '. $self->alarm_type->typename. ')'
+ ;
}
sub search_sql {
Replaces the OLD_RECORD with this one in the database. If there is an error,
returns the error, otherwise returns false.
-# the replace method can be inherited from FS::Record
+=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
my $x = $self->setfixed;
return $x unless ref $x;
- my $error =
+ my $iso3166 = $self->cust_main->ship_location->country();
+
+ my $error =
$self->ut_numbern('svcnum')
|| $self->ut_text('acctnum')
- || $self->ut_numbern('installdate')
- || $self->ut_anything('note')
+ || $self->ut_alphan('_password')
+ || $self->ut_textn('location')
+ || $self->ut_numbern('cs_receiver')
+ || $self->ut_phonen('cs_phonenum', $iso3166)
+ || $self->ut_alphan('serialnum')
+ || $self->ut_foreign_key('alarmsystemnum', 'alarm_system', 'systemnum')
+ || $self->ut_foreign_key('alarmtypenum', 'alarm_type', 'typenum')
+ || $self->ut_foreign_key('alarmstationnum', 'alarm_station', 'stationnum')
;
return $error if $error;
+ #really just an signed int, but to discourage storing other data (e.g. phone)
+ return 'CS Receiver must be 9 digits or less'
+ if $self->cs_receiver =~ /\d{10}/;
+
$self->SUPER::check;
}