multiple payment options, RT#23741
[freeside.git] / FS / FS / o2m_Common.pm
index 0e03b52..4f6d2e7 100644 (file)
@@ -87,7 +87,7 @@ sub process_o2m {
 
   foreach my $del_obj (
     grep { ! $edits{$_->$table_pkey()} }
-         qsearch( $table, $hashref )
+         $self->process_o2m_qsearch( $table, $hashref )
   ) {
     my $error = $del_obj->delete;
     if ( $error ) {
@@ -97,12 +97,13 @@ sub process_o2m {
   }
 
   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 } );
@@ -117,6 +118,7 @@ sub process_o2m {
 
     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 } );
@@ -131,6 +133,9 @@ sub process_o2m {
   '';
 }
 
+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";