Merge branch 'clients'
[kivitendo-erp.git] / bin / mozilla / gl.pl
index ce1d1a9..c508ff1 100644 (file)
@@ -220,13 +220,8 @@ sub search {
   );
   $::form->{ALL_EMPLOYEES} = SL::DB::Manager::Employee->get_all(query => [ deleted => 0 ]);
 
-  my $onload = "focus()"
-             . qq|;setupDateFormat('|. $::myconfig{dateformat} . qq|', '| . $::locale->text("Falsches Datumsformat!") . qq|')|
-             . qq|;setupPoints('|. $::myconfig{numberformat} .   qq|', '| . $::locale->text("wrongformat") . qq|')|;
-
   $::form->header;
   print $::form->parse_html_template('gl/search', {
-    onload => $onload,
     department_label => sub { ("$_[0]{description}--$_[0]{id}")x2 },
     employee_label => sub { "$_[0]{id}--$_[0]{name}" },
   });
@@ -309,19 +304,21 @@ sub generate_report {
   );
 
   # add employee here, so that variable is still known and passed in url when choosing a different sort order in resulting table
-  my @hidden_variables = qw(accno source reference department description notes project_id datefrom dateto employee datesort category l_subtotal);
+  my @hidden_variables = qw(accno source reference department description notes project_id datefrom dateto employee_id datesort category l_subtotal);
   push @hidden_variables, map { "l_${_}" } @columns;
   foreach ( @hidden_variables ) {
       print URL "$_\n";
   };
 
+  my $employee = $form->{employee_id} ? SL::DB::Employee->new(id => $form->{employee_id})->load->name : '';
+
   my (@options, @date_options);
   push @options,      $locale->text('Account')     . " : $form->{accno} $form->{account_description}" if ($form->{accno});
   push @options,      $locale->text('Source')      . " : $form->{source}"                             if ($form->{source});
   push @options,      $locale->text('Reference')   . " : $form->{reference}"                          if ($form->{reference});
   push @options,      $locale->text('Description') . " : $form->{description}"                        if ($form->{description});
   push @options,      $locale->text('Notes')       . " : $form->{notes}"                              if ($form->{notes});
-  push @options,      $locale->text('Employee')       . " : $form->{employee_name}"                              if ($form->{employee_name});
+  push @options,      $locale->text('Employee')    . " : $employee"                                   if $employee;
   my $datesorttext = $form->{datesort} eq 'transdate' ? $locale->text('Invoice Date') :  $locale->text('Booking Date');
   push @date_options,      "$datesorttext"                              if ($form->{datesort} and ($form->{datefrom} or $form->{dateto}));
   push @date_options, $locale->text('From'), $locale->date(\%myconfig, $form->{datefrom}, 1)          if ($form->{datefrom});
@@ -466,7 +463,7 @@ sub generate_report {
 
     my $row_set = [ $row ];
 
-    if (($form->{l_subtotal} eq 'Y')
+    if ( ($form->{l_subtotal} eq 'Y' && !$form->{report_generator_csv_options_for_import} )
         && (($idx == (scalar @{ $form->{GL} } - 1))
             || ($ref->{ $form->{sort} } ne $form->{GL}->[$idx + 1]->{ $form->{sort} }))) {
       push @{ $row_set }, create_subtotal_row(\%subtotals, \@columns, \%column_alignment, [ qw(debit credit) ], 'listsubtotal');
@@ -477,8 +474,6 @@ sub generate_report {
     $idx++;
   }
 
-  $report->add_separator();
-
   # = 0 for balanced ledger
   my $balanced_ledger = $totals{debit} + $totals{debit_tax} - $totals{credit} - $totals{credit_tax};
 
@@ -497,7 +492,10 @@ sub generate_report {
 
   $row->{balance}->{data}        = $data;
 
-  $report->add_data($row);
+  if ( !$form->{report_generator_csv_options_for_import} ) {
+    $report->add_separator();
+    $report->add_data($row);
+  }
 
   my $raw_bottom_info_text;
 
@@ -688,7 +686,7 @@ sub display_rows {
   my %taxchart_labels = ();
   my @taxchart_values = ();
   my %taxcharts = ();
-  foreach my $item (@{ $form->{ALL_TAXCHARTS} }) {
+  foreach my $item (@{ $form->{TAX_ACCOUNTS} }) {
     my $key = $item->{id} . "--" . $item->{rate};
     $taxchart_init = $key if ($taxchart_init == $item->{id});
     push(@taxchart_values, $key);
@@ -732,7 +730,7 @@ sub display_rows {
     my $accno = qq|<td>| .
       NTI($cgi->popup_menu('-name' => "accno_$i",
                            '-id' => "accno_$i",
-                           '-onChange' => "setTaxkey($i)",
+                           '-onChange' => "updateTaxes($i);",
                            '-style' => 'width:200px',
                            '-values' => \@chart_values,
                            '-labels' => \%chart_labels,
@@ -848,6 +846,10 @@ sub display_rows {
 
 }
 
+sub _get_radieren {
+  return ($::instance_conf->get_gl_changeable == 2) ? ($::form->current_date(\%::myconfig) eq $::form->{gldate}) : ($::instance_conf->get_gl_changeable == 1);
+}
+
 sub form_header {
   $::lxdebug->enter_sub;
   $::auth->assert('general_ledger');
@@ -860,8 +862,10 @@ sub form_header {
                                     "all"       => 0,
                                     "old_id"    => \@old_project_ids },
                    "charts"    => { "key"       => "ALL_CHARTS",
-                                    "transdate" => $::form->{transdate} },
-                   "taxcharts" => "ALL_TAXCHARTS");
+                                    "transdate" => $::form->{transdate} });
+
+  $::form->{accno} = $::form->{ALL_CHARTS}[0]->{accno};
+  GL->get_tax_dropdown();
 
   GL->get_chart_balances('charts' => $::form->{ALL_CHARTS});
 
@@ -878,10 +882,10 @@ sub form_header {
     s/option>\Q$::form->{department}\E/option selected>$::form->{department}/;
 
   if ($init) {
-    $::form->{fokus} = "gl.reference";
+    $::request->{layout}->focus("#reference");
     $::form->{taxincluded} = "1";
   } else {
-    $::form->{fokus} = qq|gl.accno_$::form->{rowcount}|;
+    $::request->{layout}->focus("#accno_$::form->{rowcount}");
   }
 
   $::form->{previous_id}     ||= "--";
@@ -890,6 +894,7 @@ sub form_header {
   $::form->header;
   print $::form->parse_html_template('gl/form_header', {
     hide_title => $title,
+    readonly   => $::form->{id} && ($::form->{locked} || !_get_radieren()),
   });
 
   $::lxdebug->leave_sub;
@@ -907,10 +912,8 @@ sub form_footer {
     $follow_ups_due = sum map { $_->{due} * 1 } @{ $follow_ups || [] };
   }
 
-  my $radieren = $::form->current_date(\%::myconfig) eq $::form->{gldate};
-
   print $::form->parse_html_template('gl/form_footer', {
-    radieren       => $radieren,
+    radieren       => _get_radieren(),
     follow_ups     => $follow_ups,
     follow_ups_due => $follow_ups_due,
   });
@@ -927,8 +930,6 @@ sub delete {
   $form->header;
 
   print qq|
-<body>
-
 <form method=post action=gl.pl>
 |;
 
@@ -1002,6 +1003,10 @@ sub post_transaction {
   my $debitcredit;
   my %split_safety = ();
 
+  my $dbh = $form->dbconnect_noauto(\%myconfig);
+  my ($notax_id) = selectrow_query($form, $dbh, "SELECT id FROM tax WHERE taxkey = 0 LIMIT 1", );
+  $dbh->disconnect;
+
   my @flds = qw(accno debit credit projectnumber fx_transaction source memo tax taxchart);
 
   for my $i (1 .. $form->{rowcount}) {
@@ -1042,17 +1047,17 @@ sub post_transaction {
       $form->{debitlock} = 1;
     }
     if ($debitcredit && $credittax) {
-      $form->{"taxchart_$i"} = "0--0.00";
+      $form->{"taxchart_$i"} = "$notax_id--0.00";
     }
     if (!$debitcredit && $debittax) {
-      $form->{"taxchart_$i"} = "0--0.00";
+      $form->{"taxchart_$i"} = "$notax_id--0.00";
     }
     my $amount = ($form->{"debit_$i"} == 0)
             ? $form->{"credit_$i"}
             : $form->{"debit_$i"};
     my $j = $#a;
     if (($debitcredit && $credittax) || (!$debitcredit && $debittax)) {
-      $form->{"taxchart_$i"} = "0--0.00";
+      $form->{"taxchart_$i"} = "$notax_id--0.00";
       $form->{"tax_$i"}      = 0;
     }
     my ($taxkey, $rate) = split(/--/, $form->{"taxchart_$i"});
@@ -1081,7 +1086,8 @@ sub post_transaction {
   }
 
   if ($split_safety{-1} > 1 && $split_safety{1} > 1) {
-    $::form->error($::locale->text("Split entry detected. The values you have entered will result in an entry with more than one position on both debit and credit. Due to known problems involving accounting software Lx-Office does not allow these."));
+    $::form->error($::locale->text("Split entry detected. The values you have entered will result in an entry with more than one position on both debit and credit. " .
+                                   "Due to known problems involving accounting software kivitendo does not allow these."));
   }
 
   for my $i (1 .. $count) {
@@ -1109,6 +1115,9 @@ sub post_transaction {
   $form->{taxincluded} = 0 if !$taxtotal;
 
   # this is just for the wise guys
+
+  $form->error($locale->text('Cannot post transaction above the maximum future booking date!'))
+    if ($form->date_max_future($form->{"transdate"}, \%myconfig));
   $form->error($locale->text('Cannot post transaction for a closed period!'))
     if ($form->date_closed($form->{"transdate"}, \%myconfig));
   if ($form->round_amount($debit, 2) != $form->round_amount($credit, 2)) {
@@ -1215,4 +1224,21 @@ sub continue {
   call_sub($main::form->{nextsub});
 }
 
+sub get_tax_dropdown {
+
+  my $form = $main::form;
+  $main::lxdebug->enter_sub();
+  GL->get_tax_dropdown();
+
+  foreach my $item (@{ $form->{TAX_ACCOUNTS} }) {
+    $item->{taxdescription} = $::locale->{iconv_utf8}->convert($item->{taxdescription});
+    $item->{taxdescription} .= ' ' . $form->round_amount($item->{rate} * 100);
+  }
+
+  print $form->ajax_response_header, $form->parse_html_template("gl/update_tax_accounts");
+
+  $main::lxdebug->leave_sub();
+
+}
+
 1;