Unterstützung #359
get_payment_select_options_for_bank_transaction vereinfachen
0%
Beschreibung
Diese Abfrage sorgt dafür, dass leere Options übergeben werden können:
- if ( $open_amount && # invoice amount not 0 - $self->skonto_date && # check whether skonto applies - ( abs(abs($self->amount_less_skonto) - abs($bt->amount)) < 0.01 || - ( abs($self->amount_less_skonto) < abs($bt->amount) )) && - $self->check_skonto_configuration) {
Der POD hierzu ist ziemlich klar definiert:
Make suggestion for a skonto payment type by returning an HTML blob of the options
of a HTML drop-down select with the most likely option preselected.
If skonto is possible (skonto_date exists), add two possibilities:
without_skonto and with_skonto_pt if payment date is within skonto_date,
preselect with_skonto_pt, otherwise preselect without skonto.
Das gar kein HTML blob zurückgegeben wird ist nicht vorgesehen und diesen Fall hab ich gerade analysiert.
Entweder die Bedingungen stimmen, dass wir Skonto ziehen oder eben nicht.
Einen Blob brauchen wir auf jeden Fall.
Hier mein diff zum Vereinfachen und stabilisieren dieser Funktion:
diff --git a/SL/DB/Helper/Payment.pm b/SL/DB/Helper/Payment.pm index d2900dd..5412403 100644 --- a/SL/DB/Helper/Payment.pm +++ b/SL/DB/Helper/Payment.pm @@ -635,28 +635,21 @@ sub get_payment_select_options_for_bank_transaction { my ($self, $bt_id, %params) = @_; my $bt = SL::DB::Manager::BankTransaction->find_by( id => $bt_id ); - die unless $bt; + croak ("Need bt_id to get a valid bank transaction") unless $bt; my $open_amount = $self->open_amount; - #$main::lxdebug->message(LXDebug->DEBUG2(),"skonto_date=".$self->skonto_date." open amount=".$open_amount); - my @options; - if ( $open_amount && # invoice amount not 0 - $self->skonto_date && # check whether skonto applies - ( abs(abs($self->amount_less_skonto) - abs($bt->amount)) < 0.01 || - ( abs($self->amount_less_skonto) < abs($bt->amount) )) && - $self->check_skonto_configuration) { - if ( $self->within_skonto_period($bt->transdate) ) { - push(@options, { payment_type => 'without_skonto', display => t8('without skonto') }); - push(@options, { payment_type => 'with_skonto_pt', display => t8('with skonto acc. to pt'), selected => 1 }); - } else { - push(@options, { payment_type => 'without_skonto', display => t8('without skonto') , selected => 1 }); - push(@options, { payment_type => 'with_skonto_pt', display => t8('with skonto acc. to pt')}); - }; - }; + croak ("Need an open invoice") unless $open_amount; + my @options; + if ( $self->skonto_date && $self->within_skonto_period($bt->transdate) ) { + push(@options, { payment_type => 'without_skonto', display => t8('without skonto') }); + push(@options, { payment_type => 'with_skonto_pt', display => t8('with skonto acc. to pt'), selected => 1 }); + } else { + push(@options, { payment_type => 'without_skonto', display => t8('without skonto') , selected => 1 }); + push(@options, { payment_type => 'with_skonto_pt', display => t8('with skonto acc. to pt')}); + } return @options; - -}; +}
Historie
Von Jan Büren vor mehr als 6 Jahren aktualisiert
- Status wurde von Neu zu Gelöst geändert
Nochmal drüber nachgedacht.
Meiner Meinung macht es nicht viel Sinn an dieser Stelle Logik-Zustände des Datenmodells zu prüfen, sodass deswegen das Drop-Down nicht angezeigt wird.
Mit #0d5b91f1 und #4650c028 behoben.