Belegvorlagen: Laden bei Debitorenbuchungen
authorMoritz Bunkus <m.bunkus@linet-services.de>
Fri, 20 Jan 2017 10:53:18 +0000 (11:53 +0100)
committerMoritz Bunkus <m.bunkus@linet-services.de>
Tue, 24 Jan 2017 16:41:17 +0000 (17:41 +0100)
bin/mozilla/ar.pl

index 969d73d..865936a 100644 (file)
@@ -41,10 +41,14 @@ use SL::FU;
 use SL::GL;
 use SL::IS;
 use SL::DB::Business;
+use SL::DB::Chart;
 use SL::DB::Currency;
 use SL::DB::Default;
 use SL::DB::Employee;
 use SL::DB::Invoice;
+use SL::DB::RecordTemplate;
+use SL::DB::Tax;
+use SL::Helper::Flash qw(flash);
 use SL::ReportGenerator;
 
 require "bin/mozilla/common.pl";
@@ -81,6 +85,71 @@ use strict;
 # $locale->text('Nov')
 # $locale->text('Dec')
 
+sub load_record_template {
+  $::auth->assert('ar_transactions');
+
+  # Load existing template and verify that its one for this module.
+  my $template = SL::DB::RecordTemplate
+    ->new(id => $::form->{id})
+    ->load(
+      with_object => [ qw(customer payment currency record_items record_items.chart) ],
+    );
+
+  die "invalid template type" unless $template->template_type eq 'ar_transaction';
+
+  # Clean the current $::form before rebuilding it from the template.
+  delete @{ $::form }{ grep { !m{^(?:script|login)$}i } keys %{ $::form } };
+
+  # Fill $::form from the template.
+  my $today                   = DateTime->today_local;
+  $::form->{title}            = "Add";
+  $::form->{currency}         = $template->currency->name;
+  $::form->{direct_debit}     = $template->direct_debit;
+  $::form->{globalproject_id} = $template->project_id;
+  $::form->{AR_chart_id}      = $template->ar_ap_chart_id;
+  $::form->{transdate}        = $today->to_kivitendo;
+  $::form->{duedate}          = $today->to_kivitendo;
+  $::form->{rowcount}         = @{ $template->items } + 1;
+  $::form->{paidaccounts}     = 1;
+  $::form->{$_}               = $template->$_ for qw(department_id ordnumber taxincluded employee_id notes);
+
+  if ($template->customer) {
+    $::form->{customer_id} = $template->customer_id;
+    $::form->{customer}    = $template->customer->name;
+    $::form->{duedate}     = $template->customer->payment->calc_date(reference_date => $today)->to_kivitendo if $template->customer->payment;
+  }
+
+  my $row = 0;
+  foreach my $item (@{ $template->items }) {
+    $row++;
+
+    my $active_taxkey = $item->chart->get_active_taxkey;
+    my $taxes         = SL::DB::Manager::Tax->get_all(
+      where   => [ chart_categories => { like => '%' . $item->chart->category . '%' }],
+      sort_by => 'taxkey, rate',
+    );
+
+    my $tax   = first { $item->tax_id          == $_->id } @{ $taxes };
+    $tax    //= first { $active_taxkey->tax_id == $_->id } @{ $taxes };
+    $tax    //= $taxes->[0];
+
+    if (!$tax) {
+      $row--;
+      next;
+    }
+
+    $::form->{"AR_amount_chart_id_${row}"}          = $item->chart_id;
+    $::form->{"previous_AR_amount_chart_id_${row}"} = $item->chart_id;
+    $::form->{"amount_${row}"}                      = $::form->format_amount(\%::myconfig, $item->amount1, 2);
+    $::form->{"taxchart_${row}"}                    = $item->tax_id . '--' . $tax->rate;
+    $::form->{"project_id_${row}"}                  = $item->project_id;
+  }
+
+  flash('info', $::locale->text("The record template '#1' has been loaded.", $template->template_name));
+
+  update();
+}
+
 sub add {
   $main::lxdebug->enter_sub();