my $is_sales = ref($self) eq 'SL::DB::Invoice';
my $mult = $is_sales ? 1 : -1; # multiplier for getting the right sign depending on ar/ap
my $is_sales = ref($self) eq 'SL::DB::Invoice';
my $mult = $is_sales ? 1 : -1; # multiplier for getting the right sign depending on ar/ap
my $paid_amount = 0; # the amount that will be later added to $self->paid, should be in default currency
# default values if not set
my $paid_amount = 0; # the amount that will be later added to $self->paid, should be in default currency
# default values if not set
sub get_payment_select_options_for_bank_transaction {
my ($self, $bt_id, %params) = @_;
sub get_payment_select_options_for_bank_transaction {
my ($self, $bt_id, %params) = @_;
- my $bt = SL::DB::Manager::BankTransaction->find_by( id => $bt_id );
- croak ("Need bt_id to get a valid bank transaction") unless $bt;
+ # no skonto date -> no select option
+ return { payment_type => 'without_skonto', display => t8('without skonto') , selected => 1 } unless $self->skonto_date;
- # user may overpay invoices and if not, this case should better be handled elsewhere
- #my $open_amount = $self->open_amount;
- #croak ("Need an open invoice") unless $open_amount;
+ my $bt = SL::DB::BankTransaction->new(id => $bt_id)->load;
- 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')});
- }
+ 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')});
If neither currency or currency_id are given as params, the currency of the
invoice is assumed to be the payment currency.
If neither currency or currency_id are given as params, the currency of the
invoice is assumed to be the payment currency.
=item C<reference_account>
Returns a chart object which is the chart of the invoice with link AR or AP.
=item C<reference_account>
Returns a chart object which is the chart of the invoice with link AR or AP.
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.
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.
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.