X-Git-Url: http://wagnertech.de/git?a=blobdiff_plain;ds=inline;f=bin%2Fmozilla%2Fcp.pl;h=1f061ad8e6c44bad3a660e10471c9882fa0176bc;hb=02cb7e02771247f3106001076366d119277a7d30;hp=ea7e4308414717ff1ee72c20cb6bf9c9e82f2a29;hpb=07ccbf8dde5208f1615447aece57a76dc049d8d0;p=kivitendo-erp.git
diff --git a/bin/mozilla/cp.pl b/bin/mozilla/cp.pl
index ea7e43084..1f061ad8e 100644
--- a/bin/mozilla/cp.pl
+++ b/bin/mozilla/cp.pl
@@ -66,13 +66,15 @@ sub payment {
} else {
CP->get_openvc(\%myconfig, \%$form);
}
-
+ # Auswahlliste für vc zusammenbauen
+ # Erweiterung für schliessende option und erweiterung um value
+ # für bugfix 1771 (doppelte Leerzeichen werden nicht 'gepostet')
$form->{"select$form->{vc}"} = "";
if ($form->{"all_$form->{vc}"}) {
# s.o. jb 12.10.2010
$form->{"$form->{vc}_id"} = $form->{"all_$form->{vc}"}->[0]->{id};
- map { $form->{"select$form->{vc}"} .= "\n" }
@{ $form->{"all_$form->{vc}"} };
}
@@ -80,11 +82,14 @@ sub payment {
# Standard Konto für Umlaufvermögen
my $accno_arap = IS->get_standard_accno_current_assets(\%myconfig, \%$form);
-
+ # Entsprechend präventiv die Auswahlliste für Kontonummer
+ # auch mit value= zusammenbauen (s.a. oben bugfix 1771)
+ # Wichtig: Auch das Template anpassen, damit hidden input korrekt die "
+ # escaped.
$form->{selectaccount} = "";
$form->{"select$form->{ARAP}"} = "";
- map { $form->{selectaccount} .= "\n";
$form->{account} = "$_->{accno}--$_->{description}" if ($_->{accno} eq $accno_arap) } @{ $form->{PR}{"$form->{ARAP}_paid"} };
# Braucht man das hier überhaupt? Erstmal auskommentieren .. jan 18.12.2010
@@ -107,8 +112,10 @@ sub payment {
$form->{defaultcurrency} = $form->{currency} = $form->{oldcurrency} =
$curr[0];
+ # Entsprechend präventiv die Auswahlliste für Währungen
+ # auch mit value= zusammenbauen (s.a. oben bugfix 1771)
$form->{selectcurrency} = "";
- map { $form->{selectcurrency} .= "\n" } @curr;
&form_header;
@@ -128,10 +135,14 @@ sub form_header {
if ($form->{ $form->{vc} } eq "") {
map { $form->{"addr$_"} = "" } (1 .. 4);
}
-
+ # bugfix 1771
+ # geändert von
+ # offen: $form->{ARAP} kann raus?
for my $item ($form->{vc}, "account", "currency", $form->{ARAP}) {
$form->{"select$item"} =~ s/ selected//;
- $form->{"select$item"} =~ s/option>\Q$form->{$item}\E/option selected>$form->{$item}/;
+ $form->{"select$item"} =~ s/option value="\Q$form->{$item}\E">\Q$form->{$item}\E/option selected value="$form->{$item}">$form->{$item}/;
}
$vc =
@@ -240,23 +251,63 @@ sub update {
}
}
}
- # Falls Suche über Rechnungsnummer und kein Kundenname vorhanden
- if ($form->{invnumber} && !($form->{$form->{vc}})){
- $form->{open} ='Y'; # nur die offenen rechnungen
- if ($form->{ARAP} eq 'AR'){
- AR->ar_transactions(\%myconfig, \%$form);
- # den ersten treffen nehmen und mit dem namen überschreiben
- $form->{$form->{vc}} = $form->{AR}[0]{name};
- } else {
- # s.o. nur für zahlungsausgang
- AP->ap_transactions(\%myconfig, \%$form);
- $form->{$form->{vc}} = $form->{AP}[0]{name};
+
+ # search by invoicenumber,
+ if ($form->{invnumber}) {
+ $form->{open} ='Y'; # nur die offenen rechnungen
+ 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
+ # when we have a dropdown field rather than an input field, 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};
}
}
- # get customer and invoices
- $updated = &check_name($form->{vc});
+
+ # determine customer/vendor
+ if ( $form->{customer_id} and $form->{invnumber} ) {
+ # 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});
+ };
if ($new_name_selected || $updated) {
+ # get open invoices from ar/ap using $form->{vc} and a.${vc}_id, i.e. customer_id
CP->get_openinvoices(\%myconfig, \%$form);
($newvc) = split /--/, $form->{ $form->{vc} };
$form->{"old$form->{vc}"} = qq|$newvc--$form->{"$form->{vc}_id"}|;
@@ -415,10 +466,10 @@ sub check_form {
if ($form->parse_amount(\%myconfig, $form->{"paid_$i"})) {
$amount -= $form->parse_amount(\%myconfig, $form->{"paid_$i"});
- push(@{ $form->{paid} }, $form->{"paid_$i"});
- push(@{ $form->{due} }, $form->{"due_$i"});
- push(@{ $form->{invnumber} }, $form->{"invnumber_$i"});
- push(@{ $form->{invdate} }, $form->{"transdate_$i"});
+ push(@{ $form->{paid} ||= [] }, $form->{"paid_$i"});
+ push(@{ $form->{due} ||= [] }, $form->{"due_$i"});
+ push(@{ $form->{invnumber} ||= [] }, $form->{"invnumber_$i"});
+ push(@{ $form->{invdate} ||= [] }, $form->{"transdate_$i"});
}
}