From d03b28772dce973bf100e338e0d09112f06eb328 Mon Sep 17 00:00:00 2001 From: Moritz Bunkus Date: Mon, 9 Nov 2009 15:18:44 +0100 Subject: [PATCH] =?utf8?q?Zum=20Vergleich=20des=20Buchabschlusses=20das=20?= =?utf8?q?h=C3=B6chste=20Zahlungsdatum=20heranziehen.?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit Fix für Bug 1229. Hintergrund: $form->{"datepaid_" . $form->{rowcount}} muss nicht zwangsläufig gesetzt sein, je nachdem, ob vor dem "Buchen" erneurt wird oder nicht. Deshalb gab es den SQL-Fehler. Zusätzlich ist auch die Überprüfung streng genommen nicht korrekt gewesen, weil niemand den Benutzer zwingt, die Zahlung mit dem maximalen Datum auch als letzte in der Liste zu haben. --- bin/mozilla/ir.pl | 23 ++++++++++++++++++----- 1 file changed, 18 insertions(+), 5 deletions(-) diff --git a/bin/mozilla/ir.pl b/bin/mozilla/ir.pl index c599c8325..bbf8340ea 100644 --- a/bin/mozilla/ir.pl +++ b/bin/mozilla/ir.pl @@ -1136,6 +1136,19 @@ sub post_payment { $main::lxdebug->leave_sub(); } +sub _max_datepaid { + my $form = $main::form; + + my @dates = sort { $b->[1] cmp $a->[1] } + map { [ $_, $main::locale->reformat_date(\%main::myconfig, $_, 'yyyy-mm-dd') ] } + grep { $_ } + map { $form->{"datepaid_${_}"} } + (1..$form->{rowcount}); + + return @dates ? $dates[0]->[0] : undef; +} + + sub post { $main::lxdebug->enter_sub(); @@ -1162,16 +1175,16 @@ sub post { &validate_items; - my $closedto = $form->datetonum($form->{closedto}, \%myconfig); - my $invdate = $form->datetonum($form->{invdate}, \%myconfig); - my $i = $form->{rowcount}; + my $closedto = $form->datetonum($form->{closedto}, \%myconfig); + my $invdate = $form->datetonum($form->{invdate}, \%myconfig); + my $max_datepaid = _max_datepaid(); - $form->error($locale->text('Cannot post invoice for a closed period!')) - if ($form->date_closed($form->{"datepaid_$i"}, \%myconfig)); + $form->error($locale->text('Cannot post invoice for a closed period!')) if $max_datepaid && $form->date_closed($max_datepaid, \%myconfig); $form->isblank("exchangerate", $locale->text('Exchangerate missing!')) if ($form->{currency} ne $form->{defaultcurrency}); + my $i; for $i (1 .. $form->{paidaccounts}) { if ($form->parse_amount(\%myconfig, $form->{"paid_$i"})) { my $datepaid = $form->datetonum($form->{"datepaid_$i"}, \%myconfig); -- 2.20.1