diff options
Diffstat (limited to 'FS')
-rw-r--r-- | FS/FS/Mason.pm | 1 | ||||
-rw-r--r-- | FS/FS/Schema.pm | 3 | ||||
-rw-r--r-- | FS/FS/svc_Common.pm | 54 | ||||
-rw-r--r-- | FS/FS/svc_export_machine.pm | 19 |
4 files changed, 66 insertions, 11 deletions
diff --git a/FS/FS/Mason.pm b/FS/FS/Mason.pm index 39c7dfd..11af25e 100644 --- a/FS/FS/Mason.pm +++ b/FS/FS/Mason.pm @@ -325,6 +325,7 @@ if ( -e $addl_handler_use_file ) { use FS::cust_tax_exempt_pkg_void; use FS::cust_bill_pkg_discount_void; use FS::agent_pkg_class; + use FS::svc_export_machine; # Sammath Naur if ( $FS::Mason::addl_handler_use ) { diff --git a/FS/FS/Schema.pm b/FS/FS/Schema.pm index 6e3956a..7be8c66 100644 --- a/FS/FS/Schema.pm +++ b/FS/FS/Schema.pm @@ -1894,10 +1894,11 @@ sub tables_hashref { 'columns' => [ 'svcexportmachinenum', 'serial', '', '', '', '', 'svcnum', 'int', '', '', '', '', + 'exportnum', 'int', '', '', '', '', 'machinenum', 'int', '', '', '', '', ], 'primary_key' => 'svcexportmachinenum', - 'unique' => [], + 'unique' => [ ['svcnum', 'exportnum'] ], 'index' => [], }, diff --git a/FS/FS/svc_Common.pm b/FS/FS/svc_Common.pm index a6daf44..7aede54 100644 --- a/FS/FS/svc_Common.pm +++ b/FS/FS/svc_Common.pm @@ -200,12 +200,13 @@ I<depend_jobnum>. If I<jobnum> is set to an array reference, the jobnums of any export jobs will be added to the referenced array. -If I<child_objects> is set to an array reference of FS::tablename objects (for -example, FS::acct_snarf objects), they will have their svcnum field set and -will be inserted after this record, but before any exports are run. Each -element of the array can also optionally be a two-element array reference -containing the child object and the name of an alternate field to be filled in -with the newly-inserted svcnum, for example C<[ $svc_forward, 'srcsvc' ]> +If I<child_objects> is set to an array reference of FS::tablename objects +(for example, FS::svc_export_machine or FS::acct_snarf objects), they +will have their svcnum field set and will be inserted after this record, +but before any exports are run. Each element of the array can also +optionally be a two-element array reference containing the child object +and the name of an alternate field to be filled in with the newly-inserted +svcnum, for example C<[ $svc_forward, 'srcsvc' ]> If I<depend_jobnum> is set (to a scalar jobnum or an array reference of jobnums), all provisioning jobs will have a dependancy on the supplied @@ -439,7 +440,16 @@ sub expire { Replaces OLD_RECORD with this one. If there is an error, returns the error, otherwise returns false. -Currently available options are: I<export_args> and I<depend_jobnum>. +Currently available options are: I<child_objects>, I<export_args> and +I<depend_jobnum>. + +If I<child_objects> is set to an array reference of FS::tablename objects +(for example, FS::svc_export_machine or FS::acct_snarf objects), they +will have their svcnum field set and will be inserted or replaced after +this record, but before any exports are run. Each element of the array +can also optionally be a two-element array reference containing the +child object and the name of an alternate field to be filled in with +the newly-inserted svcnum, for example C<[ $svc_forward, 'srcsvc' ]> If I<depend_jobnum> is set (to a scalar jobnum or an array reference of jobnums), all provisioning jobs will have a dependancy on the supplied @@ -462,6 +472,8 @@ sub replace { ? shift : { @_ }; + my $objects = $options->{'child_objects'} || []; + my @jobnums = (); local $FS::queue::jobnums = \@jobnums; warn "[$me] replace: set \$FS::queue::jobnums to $FS::queue::jobnums\n" @@ -511,6 +523,34 @@ sub replace { return $error; } + foreach my $object ( @$objects ) { + my($field, $obj); + if ( ref($object) eq 'ARRAY' ) { + ($obj, $field) = @$object; + } else { + $obj = $object; + $field = 'svcnum'; + } + $obj->$field($new->svcnum); + + my $oldobj = qsearchs( $obj->table, { + $field => $new->svcnum, + map { $_ => $obj->$_ } $obj->_svc_child_partfields, + }); + + if ( $oldobj ) { + my $pkey = $oldobj->primary_key; + $obj->$pkey($oldobj->$pkey); + $obj->replace($oldobj); + } else { + $error = $obj->insert; + } + if ( $error ) { + $dbh->rollback if $oldAutoCommit; + return $error; + } + } + #new-style exports! unless ( $noexport_hack ) { diff --git a/FS/FS/svc_export_machine.pm b/FS/FS/svc_export_machine.pm index 39629d8..10f7b68 100644 --- a/FS/FS/svc_export_machine.pm +++ b/FS/FS/svc_export_machine.pm @@ -2,10 +2,13 @@ package FS::svc_export_machine; use strict; use base qw( FS::Record ); -use FS::Record; # qw( qsearch qsearchs ); +use FS::Record qw( qsearchs ); #qsearch ); use FS::cust_svc; +use FS::part_export; use FS::part_export_machine; +sub _svc_child_partfields { ('exportnum') }; + =head1 NAME FS::svc_export_machine - Object methods for svc_export_machine records @@ -89,14 +92,24 @@ sub check { my $error = $self->ut_numbern('svcexportmachinenum') - || $self->ut_foreign_key('svcnum', 'cust_svc', 'svcnum') - || $self->ut_foreign_key('machinenum', 'part_export_machine', 'machinenum' ) + || $self->ut_foreign_key('svcnum', 'cust_svc', 'svcnum' ) + || $self->ut_foreign_key('exportnum', 'part_export', 'exportnum' ) + || $self->ut_foreign_key('machinenum', 'part_export_machine', 'machinenum') ; return $error if $error; $self->SUPER::check; } +=item part_export_machine + +=cut + +sub part_export_machine { + my $self = shift; + qsearchs('part_export_machine', { 'machinenum' => $self->machinenum } ); +} + =back =head1 BUGS |