Nach Buchen von Dialog-/Debitoren-/Kreditorenbuchungen Entwürfe nicht anzeigen
[kivitendo-erp.git] / bin / mozilla / gl.pl
index 4b34a50..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
@@ -250,10 +235,10 @@ sub search {
   }
 
   my $department = qq|
-       <tr>
-         <th align=right nowrap>| . $locale->text('Department') . qq|</th>
-         <td colspan=3><select name=department>$form->{selectdepartment}</select></td>
-       </tr>
+        <tr>
+          <th align=right nowrap>| . $locale->text('Department') . qq|</th>
+          <td colspan=3><select name=department>$form->{selectdepartment}</select></td>
+        </tr>
 | if $form->{selectdepartment};
 
   $form->get_lists("projects" => { "key" => "ALL_PROJECTS",
@@ -321,83 +306,85 @@ sub search {
   <tr>
     <td>
       <table>
-       <tr>
-         <th align=right>| . $locale->text('Reference') . qq|</th>
-         <td><input name=reference size=20></td>
-         <th align=right>| . $locale->text('Source') . qq|</th>
-         <td><input name=source size=20></td>
-       </tr>
-       $department
-       <tr>
-         <th align=right>| . $locale->text('Description') . qq|</th>
-         <td colspan=3><input name=description size=40></td>
-       </tr>
-       <tr>
-         <th align=right>| . $locale->text('Notes') . qq|</th>
-         <td colspan=3><input name=notes size=40></td>
-       </tr>
-       <tr>
-         <th align=right>| . $locale->text('Project Number') . qq|</th>
-         <td colspan=3>$projectnumber</td>
-       </tr>
-       <tr>
-         <th align=right>| . $locale->text('From') . qq|</th>
+        <tr>
+          <th align=right>| . $locale->text('Reference') . qq|</th>
+          <td><input name=reference size=20></td>
+          <th align=right>| . $locale->text('Source') . qq|</th>
+          <td><input name=source size=20></td>
+        </tr>
+        $department
+        <tr>
+          <th align=right>| . $locale->text('Description') . qq|</th>
+          <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>
+          <td colspan=3><input name=notes size=40></td>
+        </tr>
+        <tr>
+          <th align=right>| . $locale->text('Project Number') . qq|</th>
+          <td colspan=3>$projectnumber</td>
+        </tr>
+        <tr>
+          <th align=right>| . $locale->text('From') . qq|</th>
           $button1
-         <th align=right>| . $locale->text('To (time)') . qq|</th>
+          <th align=right>| . $locale->text('To (time)') . qq|</th>
           $button2
-       </tr>
-       <tr>
-         <th align=right>| . $locale->text('Include in Report') . qq|</th>
-         <td colspan=3>
-           <table>
-             <tr>
-               <td>
-                 <input name="category" class=radio type=radio value=X checked>&nbsp;|
+        </tr>
+        <tr>
+          <th align=right>| . $locale->text('Include in Report') . qq|</th>
+          <td colspan=3>
+            <table>
+              <tr>
+                <td>
+                  <input name="category" class=radio type=radio value=X checked>&nbsp;|
     . $locale->text('All') . qq|
-                 <input name="category" class=radio type=radio value=A>&nbsp;|
+                  <input name="category" class=radio type=radio value=A>&nbsp;|
     . $locale->text('Asset') . qq|
-                 <input name="category" class=radio type=radio value=L>&nbsp;|
+                  <input name="category" class=radio type=radio value=L>&nbsp;|
     . $locale->text('Liability') . qq|
-                 <input name="category" class=radio type=radio value=I>&nbsp;|
+                  <input name="category" class=radio type=radio value=I>&nbsp;|
     . $locale->text('Revenue') . qq|
-                 <input name="category" class=radio type=radio value=E>&nbsp;|
+                  <input name="category" class=radio type=radio value=E>&nbsp;|
     . $locale->text('Expense') . qq|
-               </td>
-             </tr>
-             <tr>
-               <table>
-                 <tr>
-                   <td align=right><input name="l_id" class=checkbox type=checkbox value=Y></td>
-                   <td>| . $locale->text('ID') . qq|</td>
-                   <td align=right><input name="l_transdate" class=checkbox type=checkbox value=Y checked></td>
-                   <td>| . $locale->text('Date') . qq|</td>
-                   <td align=right><input name="l_reference" class=checkbox type=checkbox value=Y checked></td>
-                   <td>| . $locale->text('Reference') . qq|</td>
-                   <td align=right><input name="l_description" class=checkbox type=checkbox value=Y checked></td>
-                   <td>| . $locale->text('Description') . qq|</td>
-                   <td align=right><input name="l_notes" class=checkbox type=checkbox value=Y></td>
-                   <td>| . $locale->text('Notes') . qq|</td>
-                 </tr>
-                 <tr>
-                   <td align=right><input name="l_debit" class=checkbox type=checkbox value=Y checked></td>
-                   <td>| . $locale->text('Debit') . qq|</td>
-                   <td align=right><input name="l_credit" class=checkbox type=checkbox value=Y checked></td>
-                   <td>| . $locale->text('Credit') . qq|</td>
-                   <td align=right><input name="l_source" class=checkbox type=checkbox value=Y checked></td>
-                   <td>| . $locale->text('Source') . qq|</td>
-                   <td align=right><input name="l_accno" class=checkbox type=checkbox value=Y checked></td>
-                   <td>| . $locale->text('Account') . qq|</td>
-                 </tr>
-                 <tr>
-                   <td align=right><input name="l_subtotal" class=checkbox type=checkbox value=Y></td>
-                   <td>| . $locale->text('Subtotal') . qq|</td>
-                   <td align=right><input name="l_projectnumbers" class=checkbox type=checkbox value=Y></td>
-                   <td>| . $locale->text('Project Number') . qq|</td>
-                 </tr>
-               </table>
-             </tr>
-           </table>
-       </tr>
+                </td>
+              </tr>
+              <tr>
+                <table>
+                  <tr>
+                    <td align=right><input name="l_id" class=checkbox type=checkbox value=Y></td>
+                    <td>| . $locale->text('ID') . qq|</td>
+                    <td align=right><input name="l_transdate" class=checkbox type=checkbox value=Y checked></td>
+                    <td>| . $locale->text('Date') . qq|</td>
+                    <td align=right><input name="l_reference" class=checkbox type=checkbox value=Y checked></td>
+                    <td>| . $locale->text('Reference') . qq|</td>
+                    <td align=right><input name="l_description" class=checkbox type=checkbox value=Y checked></td>
+                    <td>| . $locale->text('Description') . qq|</td>
+                    <td align=right><input name="l_notes" class=checkbox type=checkbox value=Y></td>
+                    <td>| . $locale->text('Notes') . qq|</td>
+                  </tr>
+                  <tr>
+                    <td align=right><input name="l_debit" class=checkbox type=checkbox value=Y checked></td>
+                    <td>| . $locale->text('Debit') . qq|</td>
+                    <td align=right><input name="l_credit" class=checkbox type=checkbox value=Y checked></td>
+                    <td>| . $locale->text('Credit') . qq|</td>
+                    <td align=right><input name="l_source" class=checkbox type=checkbox value=Y checked></td>
+                    <td>| . $locale->text('Source') . qq|</td>
+                    <td align=right><input name="l_accno" class=checkbox type=checkbox value=Y checked></td>
+                    <td>| . $locale->text('Account') . qq|</td>
+                  </tr>
+                  <tr>
+                    <td align=right><input name="l_subtotal" class=checkbox type=checkbox value=Y></td>
+                    <td>| . $locale->text('Subtotal') . qq|</td>
+                    <td align=right><input name="l_projectnumbers" class=checkbox type=checkbox value=Y></td>
+                    <td>| . $locale->text('Project Number') . qq|</td>
+                  </tr>
+                </table>
+              </tr>
+            </table>
+        </tr>
       </table>
     </td>
   </tr>
@@ -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>
 |;
   }
@@ -1085,11 +1079,11 @@ sub form_header {
 
   my $department;
   $department = qq|
-       <tr>
-         <th align=right nowrap>| . $locale->text('Department') . qq|</th>
-         <td colspan=3><select name=department>$form->{selectdepartment}</select></td>
-         <input type=hidden name=selectdepartment value="$form->{selectdepartment}">
-       </tr>
+        <tr>
+          <th align=right nowrap>| . $locale->text('Department') . qq|</th>
+          <td colspan=3><select name=department>$form->{selectdepartment}</select></td>
+          <input type=hidden name=selectdepartment value="$form->{selectdepartment}">
+        </tr>
 | if $form->{selectdepartment};
   if ($init) {
     $form->{fokus} = "gl.reference";
@@ -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>
@@ -1161,71 +1162,71 @@ sub form_header {
     . " $form->{previous_gldate}"
     . qq|</td>
         </tr>
-       <tr>
-         <th align=right>| . $locale->text('Reference') . qq|</th>
-         <td><input name=reference size=20 value="$form->{reference}" $readonly></td>
-         <td align=left>
-           <table>
-             <tr>
-               <th align=right nowrap>| . $locale->text('Date') . qq|</th>
+        <tr>
+          <th align=right>| . $locale->text('Reference') . qq|</th>
+          <td><input name=reference size=20 value="$form->{reference}" $readonly></td>
+          <td align=left>
+            <table>
+              <tr>
+                <th align=right nowrap>| . $locale->text('Date') . qq|</th>
                 $button1
-             </tr>
-           </table>
-         </td>
-       </tr>|;
+              </tr>
+            </table>
+          </td>
+        </tr>|;
   if ($form->{id}) {
     print qq|
-       <tr>
-         <th align=right>| . $locale->text('Belegnummer') . qq|</th>
-         <td><input name=id size=20 value="$form->{id}" $readonly></td>
-         <td align=left>
-         <table>
-             <tr>
-               <th align=right width=50%>| . $locale->text('Buchungsdatum') . qq|</th>
-               <td align=left><input name=gldate size=11 title="$myconfig{dateformat}" value=$form->{gldate} $readonly onBlur=\"check_right_date_format(this)\"></td>
-             </tr>
-           </table>
-         </td>
-       </tr>|;
+        <tr>
+          <th align=right>| . $locale->text('Belegnummer') . qq|</th>
+          <td><input name=id size=20 value="$form->{id}" $readonly></td>
+          <td align=left>
+          <table>
+              <tr>
+                <th align=right width=50%>| . $locale->text('Buchungsdatum') . qq|</th>
+                <td align=left><input name=gldate size=11 title="$myconfig{dateformat}" value=$form->{gldate} $readonly onBlur=\"check_right_date_format(this)\"></td>
+              </tr>
+            </table>
+          </td>
+        </tr>|;
   }
   print qq|
-       $department|;
+        $department|;
   if ($form->{id}) {
     print qq|
-       <tr>
-         <th align=right width=1%>| . $locale->text('Description') . qq|</th>
-         <td width=1%>$description</td>
+        <tr>
+          <th align=right width=1%>| . $locale->text('Description') . qq|</th>
+          <td width=1%>$description</td>
           <td>
-           <table>
-             <tr>
-               <th align=left>| . $locale->text('MwSt. inkl.') . qq|</th>
-               <td><input type=checkbox name=taxincluded value=1 $taxincluded></td>
-             </tr>
-           </table>
-        </td>
-         <td align=left>
-           <table width=100%>
-             <tr>
-               <th align=right width=50%>| . $locale->text('Mitarbeiter') . qq|</th>
-               <td align=left><input name=employee size=20  value="| . H($form->{employee}) . qq|" readonly></td>
-             </tr>
-           </table>
-         </td>
-       </tr>|;
+            <table>
+              <tr>
+                <th align=left>| . $locale->text('MwSt. inkl.') . qq|</th>
+                <td><input type=checkbox name=taxincluded value=1 $taxincluded></td>
+              </tr>
+            </table>
+         </td>
+          <td align=left>
+            <table width=100%>
+              <tr>
+                <th align=right width=50%>| . $locale->text('Mitarbeiter') . qq|</th>
+                <td align=left><input name=employee size=20  value="| . H($form->{employee}) . qq|" readonly></td>
+              </tr>
+            </table>
+          </td>
+        </tr>|;
   } else {
     print qq|
-       <tr>
-         <th align=left width=1%>| . $locale->text('Description') . qq|</th>
-         <td width=1%>$description</td>
-         <td>
-           <table>
-             <tr>
-               <th align=left>| . $locale->text('MwSt. inkl.') . qq|</th>
-               <td><input type=checkbox name=taxincluded value=1 $taxincluded></td>
-             </tr>
-           </table>
-        </td>
-       </tr>|;
+        <tr>
+          <th align=left width=1%>| . $locale->text('Description') . qq|</th>
+          <td width=1%>$description</td>
+          <td>
+            <table>
+              <tr>
+                <th align=left>| . $locale->text('MwSt. inkl.') . qq|</th>
+                <td><input type=checkbox name=taxincluded value=1 $taxincluded></td>
+              </tr>
+            </table>
+         </td>
+        </tr>|;
   }
 
   print qq|
@@ -1247,13 +1248,13 @@ sub form_header {
       <tr>
       <td colspan=4>
           <table width=100%>
-          <tr class=listheading>
-         <th class=listheading style="width:15%">|
+           <tr class=listheading>
+          <th class=listheading style="width:15%">|
     . $locale->text('Account') . qq|</th>
-         <th class=listheading style="width:10%">| . $locale->text('Chart balance') . qq|</th>
-         <th class=listheading style="width:10%">|
+          <th class=listheading style="width:10%">| . $locale->text('Chart balance') . qq|</th>
+          <th class=listheading style="width:10%">|
     . $locale->text('Debit') . qq|</th>
-         <th class=listheading style="width:10%">|
+          <th class=listheading style="width:10%">|
     . $locale->text('Credit') . qq|</th>
           <th class=listheading style="width:10%">|
     . $locale->text('Tax') . qq|</th>
@@ -1262,14 +1263,14 @@ sub form_header {
 
   if ($form->{show_details}) {
     print qq|
-         <th class=listheading style="width:20%">| . $locale->text('Source') . qq|</th>
-         <th class=listheading style="width:20%">| . $locale->text('Memo') . qq|</th>
-         <th class=listheading style="width:20%">| . $locale->text('Project Number') . qq|</th>
+          <th class=listheading style="width:20%">| . $locale->text('Source') . qq|</th>
+          <th class=listheading style="width:20%">| . $locale->text('Memo') . qq|</th>
+          <th class=listheading style="width:20%">| . $locale->text('Project Number') . qq|</th>
 |;
   }
 
   print qq|
-       </tr>
+        </tr>
 
 $jsscript
 |;
@@ -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">
@@ -1422,8 +1423,8 @@ sub yes {
     # saving the history
       if(!exists $form->{addition} && $form->{id} ne "") {
         $form->{snumbers} = qq|ordnumber_| . $form->{ordnumber};
-           $form->{addition} = "DELETED";
-           $form->save_history($form->dbconnect(\%myconfig));
+        $form->{addition} = "DELETED";
+        $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