use SL::DB::Currency;
use SL::DB::Default;
use SL::DB::Order;
+use SL::DB::PaymentTerm;
use SL::DB::PurchaseInvoice;
use SL::DB::RecordTemplate;
use SL::DB::Tax;
$form->{transdate} = $form->{initial_transdate};
if ($form->{vendor_id}) {
- my $last_used_ap_chart = SL::DB::Vendor->load_cached($form->{vendor_id})->last_used_ap_chart;
+ my $vendor = SL::DB::Vendor->load_cached($form->{vendor_id});
+
+ # set initial payment terms
+ $form->{payment_id} = $vendor->payment_id;
+
+ my $last_used_ap_chart = $vendor->last_used_ap_chart;
$form->{"AP_amount_chart_id_1"} = $last_used_ap_chart->id if $last_used_ap_chart;
}
$form->{creditremaining_plus} = ($form->{creditremaining} =~ /-/) ? "0" : "1";
- my @old_project_ids = ();
- map(
- {
- if ($form->{"project_id_$_"}) {
- push(@old_project_ids, $form->{"project_id_$_"});
- }
- }
- (1..$form->{"rowcount"})
- );
-
- $form->get_lists("projects" => { "key" => "ALL_PROJECTS",
- "all" => 0,
- "old_id" => \@old_project_ids },
- "charts" => { "key" => "ALL_CHARTS",
+ $form->get_lists("charts" => { "key" => "ALL_CHARTS",
"transdate" => $form->{transdate} },
- "taxcharts" => { "key" => "ALL_TAXCHARTS",
- "module" => "AP" },);
+ );
map(
{ $_->{link_split} = [ split(/:/, $_->{link}) ]; }
$form->{ALL_DEPARTMENTS} = SL::DB::Manager::Department->get_all_sorted;
- my %project_labels = ();
- foreach my $item (@{ $form->{"ALL_PROJECTS"} }) {
- $project_labels{$item->{id}} = $item->{projectnumber};
- }
+ my %project_labels = map { $_->id => $_->projectnumber } @{ SL::DB::Manager::Project->get_all };
my %charts;
my $default_ap_amount_chart_id;
my $follow_up_vc = $form->{vendor_id} ? SL::DB::Vendor->load_cached($form->{vendor_id})->name : '';
my $follow_up_trans_info = "$form->{invnumber} ($follow_up_vc)";
- $::request->layout->add_javascripts("autocomplete_chart.js", "show_vc_details.js", "show_history.js", "follow_up.js", "kivi.Draft.js", "kivi.GL.js", "kivi.RecordTemplate.js", "kivi.File.js", "kivi.AP.js", "kivi.CustomerVendor.js", "kivi.Validator.js");
- my $transdate = $::form->{transdate} ? DateTime->from_kivitendo($::form->{transdate}) : DateTime->today_local;
- my $first_taxchart;
-
+ $::request->layout->add_javascripts("autocomplete_chart.js", "show_vc_details.js", "show_history.js", "follow_up.js", "kivi.Draft.js", "kivi.GL.js", "kivi.RecordTemplate.js", "kivi.File.js", "kivi.AP.js", "kivi.CustomerVendor.js", "kivi.Validator.js", "autocomplete_project.js");
# $form->{totalpaid} is used by the action bar setup to determine
# whether or not canceling is allowed. Therefore it must be
# calculated prior to the action bar setup.
setup_ap_display_form_action_bar();
$form->header();
+ # get the correct date for tax
+ my $transdate = $::form->{transdate} ? DateTime->from_kivitendo($::form->{transdate}) : DateTime->today_local;
+ my $deliverydate = $::form->{deliverydate} ? DateTime->from_kivitendo($::form->{deliverydate}) : undef;
+ my $taxdate = $deliverydate ? $deliverydate : $transdate;
+ # helper for loop
+ my $first_taxchart;
for my $i (1 .. $form->{rowcount}) {
$form->{"tax_$i"} = $form->format_amount(\%myconfig, $form->{"tax_$i"}, 2);
my ($default_taxchart, $taxchart_to_use);
+ my $used_tax_id;
+ if ( $form->{"taxchart_$i"} ) {
+ ($used_tax_id) = split(/--/, $form->{"taxchart_$i"});
+ }
my $amount_chart_id = $form->{"AP_amount_chart_id_$i"} || $default_ap_amount_chart_id;
- my @taxcharts = GL->get_active_taxes_for_chart($amount_chart_id, $transdate);
+ my @taxcharts = GL->get_active_taxes_for_chart($amount_chart_id, $taxdate, $used_tax_id);
foreach my $item (@taxcharts) {
my $key = $item->id . "--" . $item->rate;
$first_taxchart //= $item;
my $item = shift;
return [
$item->{id} .'--'. $item->{rate},
- $item->{taxdescription} .' '. ($item->{rate} * 100) .' %',
+ $item->{taxkey} . ' - ' . $item->{taxdescription} .' '. ($item->{rate} * 100) .' %',
];
};
print $form->parse_html_template('ap/form_header', {
today => DateTime->today,
currencies => SL::DB::Manager::Currency->get_all_sorted,
+ payment_terms => SL::DB::Manager::PaymentTerm->get_all_sorted(query => [ or => [ obsolete => 0, id => $::form->{payment_id}*1 ]]),
});
$main::lxdebug->leave_sub();
map { $form->{$_} = $form->parse_amount(\%myconfig, $form->{$_}) }
qw(exchangerate creditlimit creditremaining);
- my @flds = qw(amount AP_amount projectnumber oldprojectnumber project_id taxchart);
+ my @flds = qw(amount AP_amount_chart_id projectnumber oldprojectnumber project_id taxchart tax);
my $count = 0;
my (@a, $j, $totaltax);
for my $i (1 .. $form->{rowcount}) {
if (($form->{previous_vendor_id} || $form->{vendor_id}) != $form->{vendor_id}) {
IR->get_vendor(\%::myconfig, $form);
+
+ my $vendor = SL::DB::Vendor->load_cached($form->{vendor_id});
+
+ # reset payment to new vendor
+ $form->{payment_id} = $vendor->payment_id;
+
if (($form->{rowcount} == 1) && ($form->{amount_1} == 0)) {
- my $last_used_ap_chart = SL::DB::Vendor->load_cached($form->{vendor_id})->last_used_ap_chart;
+ my $last_used_ap_chart = $vendor->last_used_ap_chart;
$form->{"AP_amount_chart_id_1"} = $last_used_ap_chart->id if $last_used_ap_chart;
}
}
$form->{title} = $locale->text('Vendor Invoices & AP Transactions');
- $form->get_lists(projects => { "key" => "ALL_PROJECTS", "all" => 1 });
-
$::form->{ALL_DEPARTMENTS} = SL::DB::Manager::Department->get_all_sorted;
# constants and subs for template
$form->{vc_keys} = sub { "$_[0]->{name}--$_[0]->{id}" };
my @columns =
qw(transdate id type invnumber ordnumber name netamount tax amount paid datepaid
- due duedate transaction_description notes employee globalprojectnumber
+ due duedate transaction_description notes employee globalprojectnumber department
vendornumber country ustid taxzone payment_terms charts direct_debit);
my @hidden_variables = map { "l_${_}" } @columns;
'notes' => { 'text' => $locale->text('Notes'), },
'employee' => { 'text' => $locale->text('Employee'), },
'globalprojectnumber' => { 'text' => $locale->text('Document Project Number'), },
+ 'department' => { 'text' => $locale->text('Department'), },
'vendornumber' => { 'text' => $locale->text('Vendor Number'), },
'country' => { 'text' => $locale->text('Country'), },
'ustid' => { 'text' => $locale->text('USt-IdNr.'), },
'direct_debit' => { 'text' => $locale->text('direct debit'), },
);
- foreach my $name (qw(id transdate duedate invnumber ordnumber name datepaid employee shippingpoint shipvia transaction_description direct_debit)) {
+ foreach my $name (qw(id transdate duedate invnumber ordnumber name datepaid employee shippingpoint shipvia transaction_description direct_debit department)) {
my $sortdir = $form->{sort} eq $name ? 1 - $form->{sortdir} : $form->{sortdir};
$column_defs{$name}->{link} = $href . "&sort=$name&sortdir=$sortdir";
}
$::form->{transdate} = $today->to_kivitendo;
$::form->{duedate} = $today->to_kivitendo;
$::form->{duedate} = $order->payment_terms->calc_date(reference_date => $today)->to_kivitendo if $order->payment_terms;
+ $::form->{deliverydate} = $order->reqdate->to_kivitendo if $order->reqdate;
create_links();
my $config_po_ap_workflow_chart_id = $::instance_conf->get_workflow_po_ap_chart_id;