use SL::DB::RecordTemplate;
use SL::DB::SepaExportItem;
use SL::DBUtils qw(like);
-use SL::Presenter;
use List::MoreUtils qw(any);
use List::Util qw(max);
@where
],
);
- $::lxdebug->log_time('asdf');
# credit notes have a negative amount, treat differently
my $all_open_ar_invoices = SL::DB::Manager::Invoice ->get_all(where => [ or => [ amount => { gt => \'paid' },
and => [ type => 'credit_note',
my $all_open_sepa_export_items = SL::DB::Manager::SepaExportItem->get_all(where => [chart_id => $bank_account->chart_id ,
'sepa_export.executed' => 0, 'sepa_export.closed' => 0 ], with_objects => ['sepa_export']);
- $::lxdebug->log_time('asdf 2');
my @all_open_invoices;
# filter out invoices with less than 1 cent outstanding
push @all_open_invoices, map { $_->{is_ar}=1 ; $_ } grep { abs($_->amount - $_->paid) >= 0.01 } @{ $all_open_ar_invoices };
}
}
- $::lxdebug->log_time('asdf 4');
# try to match each bank_transaction with each of the possible open invoices
# by awarding points
my @proposals;
$bt->{remote_name} .= $bt->{remote_name_1} if $bt->{remote_name_1};
if ( $bt->is_batch_transaction ) {
+ my $found=0;
foreach ( keys %sepa_exports) {
if ( abs(($sepa_exports{$_}->{amount} * 1) - ($bt->amount * 1)) < 0.01 ) {
## jupp
$bt->{sepa_export_ok} = 1;
$sepa_exports{$_}->{proposed}=1;
push(@proposals, $bt);
- next;
+ $found=1;
+ last;
}
}
+ next if $found;
# batch transaction has no remotename !!
} else {
next unless $bt->{remote_name}; # bank has no name, usually fees, use create invoice to assign
push(@{$bt->{rule_matches}}, $_->{rule_matches});
};
};
- $::lxdebug->log_time('asdf 5');
} # finished one bt
# finished all bt
'bank_transactions/create_invoice',
{ layout => 0 },
title => t8('Create invoice'),
- TEMPLATES_GL => $use_vendor_filter ? undef : $templates_gl,
+ TEMPLATES_GL => $use_vendor_filter && @{ $templates_ap } ? undef : $templates_gl,
TEMPLATES_AP => $templates_ap,
- vendor_name => $use_vendor_filter ? $vendor_of_transaction->name : undef,
+ vendor_name => $use_vendor_filter && @{ $templates_ap } ? $vendor_of_transaction->name : undef,
);
}
$self->{transaction} = SL::DB::Manager::BankTransaction->find_by(id => $::form->{bt_id});
- my @filter;
- push @filter, ('vendor.name' => { ilike => '%' . $::form->{vendor} . '%' }) if $::form->{vendor};
- push @filter, ('template_name' => { ilike => '%' . $::form->{template} . '%' }) if $::form->{template};
- push @filter, ('reference' => { ilike => '%' . $::form->{reference} . '%' }) if $::form->{reference};
+ my (@filter, @filter_ap);
- my $templates_ap = SL::DB::Manager::RecordTemplate->get_all(
- where => [ template_type => 'ap_transaction', (and => \@filter) x !!@filter ],
- with_objects => [ qw(employee vendor) ],
- );
+ # filter => gl and ap | filter_ap = ap (i.e. vendorname)
+ push @filter, ('template_name' => { ilike => '%' . $::form->{template} . '%' }) if $::form->{template};
+ push @filter, ('reference' => { ilike => '%' . $::form->{reference} . '%' }) if $::form->{reference};
+ push @filter_ap, ('vendor.name' => { ilike => '%' . $::form->{vendor} . '%' }) if $::form->{vendor};
+ push @filter_ap, @filter;
my $templates_gl = SL::DB::Manager::RecordTemplate->get_all(
query => [ template_type => 'gl_transaction',
chart_id => SL::DB::Manager::BankAccount->find_by(id => $self->transaction->local_bank_account_id)->chart_id,
with_objects => [ qw(employee record_template_items) ],
);
+ my $templates_ap = SL::DB::Manager::RecordTemplate->get_all(
+ where => [ template_type => 'ap_transaction', (and => \@filter_ap) x !!@filter_ap ],
+ with_objects => [ qw(employee vendor) ],
+ );
$::form->{filter} //= {};
$self->callback($self->url_for(