Merge branch 'rb-wiederkehrende-rechnungen' into 263
[kivitendo-erp.git] / bin / mozilla / gl.pl
index f5f8460..518e430 100644 (file)
@@ -31,6 +31,9 @@
 #
 #======================================================================
 
+use utf8;
+use strict;
+
 use POSIX qw(strftime);
 use List::Util qw(sum);
 
@@ -44,8 +47,6 @@ require "bin/mozilla/common.pl";
 require "bin/mozilla/drafts.pl";
 require "bin/mozilla/reportgenerator.pl";
 
-use strict;
-
 # this is for our long dates
 # $locale->text('January')
 # $locale->text('February')
@@ -74,10 +75,6 @@ use strict;
 # $locale->text('Nov')
 # $locale->text('Dec')
 
-my $tax;
-my $debitlock  = 0;
-my $creditlock = 0;
-
 sub add {
   $main::lxdebug->enter_sub();
 
@@ -96,12 +93,6 @@ sub add {
   # yep. aber er holt hier auch schon ALL_CHARTS. Aufwand / Nutzen? jb
   GL->transaction(\%myconfig, \%$form);
 
-  map {
-    $tax .=
-      qq|<option value="$_->{id}--$_->{rate}">$_->{taxdescription}  |
-      . ($_->{rate} * 100) . qq| %|
-  } @{ $form->{TAX} };
-
   $form->{rowcount}  = 2;
 
   $form->{debit}  = 0;
@@ -136,12 +127,6 @@ sub prepare_transaction {
 
   GL->transaction(\%myconfig, \%$form);
 
-  map {
-    $tax .=
-      qq|<option value="$_->{id}--$_->{rate}">$_->{taxdescription}  |
-      . ($_->{rate} * 100) . qq| %|
-  } @{ $form->{TAX} };
-
   $form->{amount} = $form->format_amount(\%myconfig, $form->{amount}, 2);
 
   # departments
@@ -330,7 +315,9 @@ sub search {
         $department
         <tr>
           <th align=right>| . $locale->text('Description') . qq|</th>
-          <td colspan=3><input name=description size=40></td>
+          <td><input name=description size=40></td>
+          <th align=right>| . $locale->text('Account Number') . qq|</th>
+          <td><input name=accno size=20></td>
         </tr>
         <tr>
           <th align=right>| . $locale->text('Notes') . qq|</th>
@@ -555,6 +542,7 @@ sub generate_report {
                        'attachment_basename'  => $locale->text('general_ledger_list') . strftime('_%Y%m%d', localtime time),
     );
   $report->set_options_from_form();
+  $locale->set_numberformat_wo_thousands_separator(\%myconfig) if lc($report->{options}->{output_format}) eq 'csv';
 
   # add sort to callback
   $form->{callback} = "$callback&sort=" . E($form->{sort}) . "&sortdir=" . E($form->{sortdir});
@@ -715,19 +703,19 @@ sub update {
         $form->{"credit_$i"} = 0;
         $form->{"tax_$i"}    = 0;
         $creditcount--;
-        $creditlock = 1;
+        $form->{creditlock} = 1;
       }
       if (($creditcount >= 2) && ($debitcount == 2)) {
         $form->{"debit_$i"} = 0;
         $form->{"tax_$i"}   = 0;
         $debitcount--;
-        $debitlock = 1;
+        $form->{debitlock} = 1;
       }
       if (($creditcount == 1) && ($debitcount == 2)) {
-        $creditlock = 1;
+        $form->{creditlock} = 1;
       }
       if (($creditcount == 2) && ($debitcount == 1)) {
-        $debitlock = 1;
+        $form->{debitlock} = 1;
       }
       if ($debitcredit && $credittax) {
         $form->{"taxchart_$i"} = "0--0.00";
@@ -830,8 +818,8 @@ sub display_rows {
   my %charts = ();
   my $taxchart_init;
   foreach my $item (@{ $form->{ALL_CHARTS} }) {
-    if ($item->{charttype} eq 'H'){ #falls überschrift
-      next;                         #überspringen (Bug 1150)
+    if ($item->{charttype} eq 'H'){ #falls überschrift
+      next;                         #überspringen (Bug 1150)
     }
     my $key = $item->{accno} . "--" . $item->{tax_id};
     $taxchart_init = $item->{tax_id} unless (@chart_values);
@@ -895,7 +883,7 @@ sub display_rows {
       . $cgi->hidden('-name' => "previous_accno_$i",
                      '-default' => $selected_accno_full)
       . qq|</td>|;
-    $tax = qq|<td>| .
+    my $tax_ddbox = qq|<td>| .
       NTI($cgi->popup_menu('-name' => "taxchart_$i",
                            '-id' => "taxchart_$i",
                            '-style' => 'width:200px',
@@ -953,9 +941,9 @@ sub display_rows {
     my $debitreadonly  = "";
     my $creditreadonly = "";
     if ($i == $form->{rowcount}) {
-      if ($debitlock) {
+      if ($form->{debitlock}) {
         $debitreadonly = "readonly";
-      } elsif ($creditlock) {
+      } elsif ($form->{creditlock}) {
         $creditreadonly = "readonly";
       }
     }
@@ -965,6 +953,8 @@ sub display_rows {
                            '-values' => \@project_values,
                            '-labels' => \%project_labels,
                            '-default' => $form->{"project_id_$i"} ));
+    my $projectnumber_hidden = qq|
+    <input type="hidden" name="project_id_$i" value="$form->{"project_id_$i"}">|;
 
     my $copy2credit = 'onkeyup="copy_debit_to_credit()"' if $i == 1;
 
@@ -975,7 +965,7 @@ sub display_rows {
     <td><input name="debit_$i" size="8" value="$form->{"debit_$i"}" accesskey=$i $copy2credit $debitreadonly></td>
     <td><input name="credit_$i" size=8 value="$form->{"credit_$i"}" $creditreadonly></td>
     <td><input type="hidden" name="tax_$i" value="$form->{"tax_$i"}">$form->{"tax_$i"}</td>
-    $tax|;
+    $tax_ddbox|;
 
     if ($form->{show_details}) {
       print qq|
@@ -983,10 +973,14 @@ sub display_rows {
     $memo
     <td>$projectnumber</td>
 |;
-    }
+    } else {
     print qq|
     $source_hidden
     $memo_hidden
+    $projectnumber_hidden
+    |;
+    }
+    print qq|
   </tr>
 |;
   }
@@ -1148,7 +1142,14 @@ sub form_header {
 <table width=100%>
   <tr>
     <th class=listtop>$form->{title}</th>
-  </tr>
+  </tr>| .
+
+  ($form->{saved_message} ? qq|
+  <tr>
+    <td>$form->{saved_message}</th>
+  </tr>| : '') .
+
+qq|
   <tr height="5"></tr>
   <tr>
     <td>
@@ -1333,7 +1334,7 @@ $follow_ups_block
       print qq|<input class=submit type=submit name=action value="| . $locale->text('Storno') . qq|">|;
     }
 
-    # Löschen und Ändern von Buchungen nicht mehr möglich (GoB) nur am selben Tag möglich
+    # Löschen und Ändern von Buchungen nicht mehr möglich (GoB) nur am selben Tag möglich
     if (!$form->{locked} && $radieren) {
       print qq|
         <input class=submit type=submit name=action value="| . $locale->text('Post') . qq|" accesskey="b">
@@ -1423,7 +1424,7 @@ sub yes {
       if(!exists $form->{addition} && $form->{id} ne "") {
         $form->{snumbers} = qq|ordnumber_| . $form->{ordnumber};
         $form->{addition} = "DELETED";
-        $form->save_history($form->dbconnect(\%myconfig));
+        $form->save_history;
       }
     # /saving the history
     $form->redirect($locale->text('Transaction deleted!'))
@@ -1478,19 +1479,19 @@ sub post_transaction {
       $form->{"credit_$i"} = 0;
       $form->{"tax_$i"}    = 0;
       $creditcount--;
-      $creditlock = 1;
+      $form->{creditlock} = 1;
     }
     if (($creditcount >= 2) && ($debitcount == 2)) {
       $form->{"debit_$i"} = 0;
       $form->{"tax_$i"}   = 0;
       $debitcount--;
-      $debitlock = 1;
+      $form->{debitlock} = 1;
     }
     if (($creditcount == 1) && ($debitcount == 2)) {
-      $creditlock = 1;
+      $form->{creditlock} = 1;
     }
     if (($creditcount == 2) && ($debitcount == 1)) {
-      $debitlock = 1;
+      $form->{debitlock} = 1;
     }
     if ($debitcredit && $credittax) {
       $form->{"taxchart_$i"} = "0--0.00";
@@ -1544,7 +1545,7 @@ sub post_transaction {
   for my $i (1 .. $form->{rowcount}) {
     my $dr  = $form->{"debit_$i"};
     my $cr  = $form->{"credit_$i"};
-    $tax = $form->{"tax_$i"};
+    my $tax = $form->{"tax_$i"};
     if ($dr && $cr) {
       $form->error($locale->text('Cannot post transaction with a debit and credit entry for the same account!'));
     }
@@ -1581,7 +1582,7 @@ sub post_transaction {
     $form->{snumbers} = qq|ordnumber_| . $form->{ordnumber};
     $form->{addition} = "SAVED";
     $form->{what_done} = $locale->text("Buchungsnummer") . " = " . $form->{id};
-    $form->save_history($form->dbconnect(\%myconfig));
+    $form->save_history;
   }
   # /saving the history
 
@@ -1596,6 +1597,12 @@ sub post {
   my $form     = $main::form;
   my $locale   = $main::locale;
 
+  if ($::myconfig{mandatory_departments} && !$form->{department}) {
+    $form->{saved_message} = $::locale->text('You have to specify a department.');
+    update();
+    exit;
+  }
+
   $form->{title}  = $locale->text("$form->{title} General Ledger Transaction");
   $form->{storno} = 0;
 
@@ -1603,7 +1610,7 @@ sub post {
 
   remove_draft() if $form->{remove_draft};
 
-  $form->{callback} = build_std_url("action=add", "show_details");
+  $form->{callback} = build_std_url("action=add&DONT_LOAD_DRAFT=1", "show_details");
   $form->redirect($form->{callback});
 
   $main::lxdebug->leave_sub();
@@ -1643,7 +1650,7 @@ sub storno {
   if(!exists $form->{addition} && $form->{id} ne "") {
     $form->{snumbers} = "ordnumber_$form->{ordnumber}";
     $form->{addition} = "STORNO";
-    $form->save_history($form->dbconnect(\%myconfig));
+    $form->save_history;
   }
   # /saving the history