table (required) - Table into which the records are inserted.
-num_col (optional) - Column in table which links to the primary key of the base table. If not specified, it is assumed this has the same name.
+fields (required) - Arrayref of the field names in the "many" table.
-params (required) - Hashref of keys and values, often passed as C<scalar($cgi->Vars)> from a form.
+params (required) - Hashref of keys and values, often passed as
+C<scalar($cgi->Vars)> from a form. This will be scanned for keys of the form
+"pkeyNN" (where pkey is the primary key column name, and NN is an integer).
+Each of these designates one record in the "many" table. The contents of
+that record will be taken from other parameters with the names
+"pkeyNN_myfield" (where myfield is one of the fields in the 'fields'
+array).
-fields (required) - Arrayref of field names for each record in table. Pulled from params as "pkeyNN_field" where pkey is table's primary key and NN is the entry's numeric identifier.
+num_col (optional) - Name of the foreign key column in the "many" table, which
+links to the primary key of the base table. If not specified, it is assumed
+this has the same name as in the base table.
=cut
foreach my $del_obj (
grep { ! $edits{$_->$table_pkey()} }
- qsearch( $table, $hashref )
+ $self->process_o2m_qsearch( $table, $hashref )
) {
my $error = $del_obj->delete;
if ( $error ) {
}
foreach my $pkey_value ( keys %edits ) {
- my $old_obj = qsearchs( $table, { %$hashref, $table_pkey => $pkey_value } ),
+ my $old_obj = $self->process_o2m_qsearchs( $table, { %$hashref, $table_pkey => $pkey_value } );
my $add_param = $edits{$pkey_value};
my %hash = ( $table_pkey => $pkey_value,
map { $_ => $opt{'params'}->{$add_param."_$_"} }
@{ $opt{'fields'} }
);
+ &{ $opt{'hash_callback'} }( \%hash ) if $opt{'hash_callback'};
#next unless grep { $_ =~ /\S/ } values %hash;
my $new_obj = "FS::$table"->new( { %$hashref, %hash } );
my %hash = map { $_ => $opt{'params'}->{$add_param."_$_"} }
@{ $opt{'fields'} };
+ &{ $opt{'hash_callback'} }( \%hash ) if $opt{'hash_callback'};
next unless grep { $_ =~ /\S/ } values %hash;
my $add_obj = "FS::$table"->new( { %$hashref, %hash } );
'';
}
+sub process_o2m_qsearch { my $self = shift; qsearch( @_ ); }
+sub process_o2m_qsearchs { my $self = shift; qsearchs( @_ ); }
+
sub _load_table {
my( $self, $table ) = @_;
eval "use FS::$table";