Merge branch 'master' of git.freeside.biz:/home/git/freeside
[freeside.git] / FS / FS / part_export / phone_shellcommands.pm
index 5c1ae01..71445bf 100644 (file)
@@ -13,16 +13,18 @@ use FS::part_export;
 #- suspension/unsuspension
 
 tie my %options, 'Tie::IxHash',
-  'user'      => { label=>'Remote username', default=>'root', },
-  'useradd'   => { label=>'Insert command', }, 
-  'userdel'   => { label=>'Delete command', }, 
-  'usermod'   => { label=>'Modify command', }, 
-  'suspend'   => { label=>'Suspension command', }, 
-  'unsuspend' => { label=>'Unsuspension command', }, 
+  'user'       => { label=>'Remote username', default=>'root', },
+  'useradd'    => { label=>'Insert command', }, 
+  'userdel'    => { label=>'Delete command', }, 
+  'usermod'    => { label=>'Modify command', }, 
+  'suspend'    => { label=>'Suspension command', }, 
+  'unsuspend'  => { label=>'Unsuspension command', }, 
+  'mac_insert' => { label=>'Device MAC address insert command', },
+  'mac_delete' => { label=>'Device MAC address delete command', },
 ;
 
 %info = (
-  'svc'     => 'svc_phone',
+  'svc'     => [qw( svc_phone part_device )],
   'desc'    => 'Run remote commands via SSH, for phone numbers',
   'options' => \%options,
   'notes'   => <<'END'
@@ -49,6 +51,11 @@ old_ for replace operations):
   <LI><code>$sip_password</code> - SIP secret (quoted for the shell)
   <LI><code>$pin</code> - Personal identification number
   <LI><code>$cust_name</code> - Customer name (quoted for the shell)
+  <LI><code>$pkgnum</code> - Internal package number
+  <LI><code>$custnum</code> - Internal customer number
+  <LI><code>$phone_name</code> - Phone name (quoted for the shell)
+  <LI><code>$mac_addr</code> - MAC address (Device MAC address insert and delete commands only)
+  <LI><code>$devicename</code> - Device type (Device type insert and delete commands only)
 </UL>
 END
 );
@@ -56,27 +63,43 @@ END
 sub rebless { shift; }
 
 sub _export_insert {
-  my($self) = shift;
+  my $self = shift;
   $self->_export_command('useradd', @_);
 }
 
 sub _export_delete {
-  my($self) = shift;
+  my $self = shift;
   $self->_export_command('userdel', @_);
 }
 
 sub _export_suspend {
-  my($self) = shift;
+  my $self = shift;
   $self->_export_command('suspend', @_);
 }
 
 sub _export_unsuspend {
-  my($self) = shift;
+  my $self = shift;
   $self->_export_command('unsuspend', @_);
 }
 
+sub export_device_insert {
+  my( $self, $svc_phone, $phone_device ) = @_;
+  $self->_export_command('mac_insert', $svc_phone,
+                           mac_addr   => $phone_device->mac_addr,
+                           devicename => $phone_device->part_device->devicename,
+                        );
+}
+
+sub export_device_delete {
+  my( $self, $svc_phone, $phone_device ) = @_;
+  $self->_export_command('mac_delete', $svc_phone,
+                           mac_addr   => $phone_device->mac_addr,
+                           devicename => $phone_device->part_device->devicename,
+                        );
+}
+
 sub _export_command {
-  my ( $self, $action, $svc_phone) = (shift, shift, shift);
+  my ( $self, $action, $svc_phone, %addl_vars) = @_;
   my $command = $self->option($action);
   return '' if $command =~ /^\s*$/;
 
@@ -85,11 +108,15 @@ sub _export_command {
   {
     no strict 'refs';
     ${$_} = $svc_phone->getfield($_) foreach $svc_phone->fields;
+    ${$_} = $addl_vars{$_} foreach keys %addl_vars;
   }
   my $cust_pkg = $svc_phone->cust_svc->cust_pkg;
+  my $pkgnum = $cust_pkg ? $cust_pkg->pkgnum : '';
+  my $custnum = $cust_pkg ? $cust_pkg->custnum : '';
   my $cust_name = $cust_pkg ? $cust_pkg->cust_main->name : '';
   $cust_name = shell_quote $cust_name;
   my $sip_password = shell_quote $svc_phone->sip_password;
+  my $phone_name = shell_quote $svc_phone->phone_name;
   #done setting variables for the command
 
   $self->shellcommands_queue( $svc_phone->svcnum,
@@ -111,7 +138,12 @@ sub _export_replace {
     ${"new_$_"} = $new->getfield($_) foreach $new->fields;
   }
 
+  my $old_cust_pkg = $old->cust_svc->cust_pkg;
+  my $old_pkgnum = $old_cust_pkg ? $old_cust_pkg->pkgnum : '';
+  my $old_custnum = $old_cust_pkg ? $old_cust_pkg->custnum : '';
   my $cust_pkg = $new->cust_svc->cust_pkg;
+  my $new_pkgnum = $cust_pkg ? $cust_pkg->pkgnum : '';
+  my $new_custnum = $new_cust_pkg ? $new_cust_pkg->custnum : '';
   my $new_cust_name = $cust_pkg ? $cust_pkg->cust_main->name : '';
   $new_cust_name = shell_quote $new_cust_name;
   #done setting variables for the command