+ # search by customernumber
+ # the customernumber has to be correct otherwise nothing is found
+ if ($form->{vc} eq 'customer' and $form->{customernumber} and $form->{ARAP} eq 'AR') {
+ $form->{open} ='Y'; # only open invoices
+ # ar_transactions automatically searches by $form->{customer_id} or else
+ # $form->{customer} if available, and these variables will always be set
+ # so we have to empty these values first
+ $form->{customer_id} = '';
+ $form->{customer} = '';
+ AR->ar_transactions(\%myconfig, \%$form);
+
+ # Here we just take the first returned value even if the custumernumber
+ # may not be unique
+ $form->{customer} = $form->{AR}[0]{name};
+ $form->{customer_id} = $form->{AR}[0]{customer_id};
+ }
+
+ # search by invoicenumber,
+ if ($form->{invnumber}) {
+ $form->{open} ='Y'; # only open invoices
+ if ($form->{ARAP} eq 'AR'){
+ # ar_transactions automatically searches by $form->{customer_id} or else
+ # $form->{customer} if available, and these variables will always be set
+ # so we have to empty these values first
+ $form->{customer_id} = '';
+ $form->{customer} = '';
+ AR->ar_transactions(\%myconfig, \%$form);
+
+ # if you search for invoice '11' ar_transactions will also match invoices
+ # 112, 211, ... due to the LIKE
+
+ # so there is now an extra loop that tries to match the invoice number
+ # exactly among all returned results, and then passes the customer_id instead of the name
+ # because the name may not be unique
+
+ my $found_exact_invnumber_match = 0;
+ foreach my $i ( @{ $form->{AR} } ) {
+ next unless $i->{invnumber} eq $form->{invnumber};
+ # found exactly matching invnumber
+ $form->{$form->{vc}} = $i->{name};
+ $form->{customer_id} = $i->{customer_id};
+ #$form->{"old${form->{vc}"} = $i->{customer_id};
+ $found_exact_invnumber_match = 1;
+ };
+
+ unless ( $found_exact_invnumber_match ) {
+ # use first returned entry, may not be the correct one if invnumber doesn't
+ # match uniquely
+ $form->{$form->{vc}} = $form->{AR}[0]{name};
+ $form->{customer_id} = $form->{AR}[0]{customer_id};
+ };
+ } else {
+ # s.o. nur für zahlungsausgang
+ AP->ap_transactions(\%myconfig, \%$form);
+ $form->{$form->{vc}} = $form->{AP}[0]{name};
+ }
+ }
+
+ # determine customer/vendor
+ if ( $form->{customer_id} and ($form->{invnumber} or $form->{customernumber}) ) {
+ # we already know the exact customer_id, so fill $form with customer data
+ IS->get_customer(\%myconfig, \%$form);
+ $updated = 1;
+ } else {
+ # check_name is called with "customer" or "vendor" and otherwise uses contents of $form
+ # check_name also runs get_customer/get_vendor
+ $updated = &check_name($form->{vc});
+ };