Typos beim entfernen von setupPoints/setupDateFormat
[kivitendo-erp.git] / bin / mozilla / ap.pl
index 1262b49..2bf8017 100644 (file)
@@ -92,7 +92,7 @@ sub add {
 
   $form->{title} = "Add";
 
-  $form->{callback} = "ap.pl?action=add" unless $form->{callback};
+  $form->{callback} = "ap.pl?action=add&DONT_LOAD_DRAFT=1" unless $form->{callback};
 
   AP->get_transdate(\%myconfig, $form);
   $form->{initial_transdate} = $form->{transdate};
@@ -195,7 +195,7 @@ sub form_header {
   my $form     = $main::form;
   my %myconfig = %main::myconfig;
   my $locale   = $main::locale;
-  my $cgi      = $main::cgi;
+  my $cgi      = $::request->{cgi};
 
   $main::auth->assert('general_ledger');
 
@@ -244,17 +244,10 @@ sub form_header {
   $form->{forex}        = $form->check_exchangerate( \%myconfig, $form->{currency}, $form->{transdate}, 'sell');
   $form->{exchangerate} = $form->{forex} if $form->{forex};
 
-
   # format amounts
-  $form->{exchangerate} =
-    $form->format_amount(\%myconfig, $form->{exchangerate});
-  if ($form->{exchangerate} == 0) {
-    $form->{exchangerate} = "";
-  }
-  $form->{creditlimit} =
-    $form->format_amount(\%myconfig, $form->{creditlimit}, 0, "0");
-  $form->{creditremaining} =
-    $form->format_amount(\%myconfig, $form->{creditremaining}, 0, "0");
+  $form->{exchangerate}    = $form->{exchangerate} ? $form->format_amount(\%myconfig, $form->{exchangerate}) : '';
+  $form->{creditlimit}     = $form->format_amount(\%myconfig, $form->{creditlimit}, 0, "0");
+  $form->{creditremaining} = $form->format_amount(\%myconfig, $form->{creditremaining}, 0, "0");
 
   my $exchangerate = qq|
 <input type=hidden name=forex value=$form->{forex}>
@@ -292,7 +285,8 @@ sub form_header {
   my $notes =
     qq|<textarea name=notes rows=$rows cols=50 wrap=soft $readonly>$form->{notes}</textarea>|;
 
-  my $department = qq|
+  my $department;
+  $department = qq|
               <tr>
                 <th align="right" nowrap>| . $locale->text('Department') . qq|</th>
                 <td colspan=3><select name=department>$form->{selectdepartment}</select>
@@ -377,7 +371,7 @@ sub form_header {
 
     # with JavaScript Calendar
     $button1 = qq|
-       <td><input name=transdate id=transdate size=11 title="$myconfig{dateformat}" value="$form->{transdate}" onBlur=\"check_right_date_format(this)\" $readonly></td>
+       <td><input name=transdate onchange="set_duedate()" id=transdate size=11 title="$myconfig{dateformat}" value="$form->{transdate}" onBlur=\"check_right_date_format(this)\" $readonly></td>
        <td><input type=button name=transdate id="trigger1" value=|
       . $locale->text('button') . qq|></td>
        |;
@@ -395,7 +389,7 @@ sub form_header {
 
     # without JavaScript Calendar
     $button1 =
-      qq|<td><input name=transdate id=transdate size=11 title="$myconfig{dateformat}" value="$form->{transdate}" onBlur=\"check_right_date_format(this)\" $readonly></td>|;
+      qq|<td><input name=transdate onchange="set_duedate()" id=transdate size=11 title="$myconfig{dateformat}" value="$form->{transdate}" onBlur=\"check_right_date_format(this)\" $readonly></td>|;
     $button2 =
       qq|<td><input name=duedate id=duedate size=11 title="$myconfig{dateformat}" value="$form->{duedate}" onBlur=\"check_right_date_format(this)\" $readonly></td>|;
   }
@@ -408,11 +402,15 @@ sub form_header {
   $form->{javascript} .= qq|<script type="text/javascript" src="js/show_vc_details.js"></script>|;
   $form->{javascript} .= qq|<script type="text/javascript" src="js/follow_up.js"></script>|;
 
+  my $globalprojectnumber =
+    NTI($cgi->popup_menu('-name' => "globalproject_id",
+                         '-values' => \@project_values,
+                         '-labels' => \%project_labels,
+                         '-default' => $form->{"globalproject_id"} ));
+
   $form->header;
-  my $onload = qq|;setupDateFormat('|. $myconfig{dateformat} .qq|', '|. $locale->text("Falsches Datumsformat!") .qq|')|;
-  $onload .= qq|;setupPoints('|. $myconfig{numberformat} .qq|', '|. $locale->text("wrongformat") .qq|')|;
   print qq|
-<body onLoad="$onload">
+<body>
 
 <form method=post action=$form->{script}>
 
@@ -493,6 +491,10 @@ sub form_header {
                 <th align=right nowrap>| . $locale->text('Due Date') . qq|</th>
                 $button2
               </tr>
+              <tr>
+                <th align=right nowrap>| . $locale->text('Project Number') . qq|</th>
+                <td>$globalprojectnumber</td>
+              </tr>
             </table>
           </td>
         </tr>
@@ -661,7 +663,7 @@ $jsscript
 ";
 
   my @triggers  = ();
-  my $totalpaid = 0;
+  $form->{totalpaid} = 0;
 
   $form->{paidaccounts}++ if ($form->{"paid_$form->{paidaccounts}"});
   for my $i (1 .. $form->{paidaccounts}) {
@@ -676,17 +678,30 @@ $jsscript
                            '-labels' => \%AP_paid_labels,
                            '-default' => $form->{"AP_paid_$i"}));
 
-    $totalpaid += $form->{"paid_$i"};
+    $form->{totalpaid} += $form->{"paid_$i"};
 
     # format amounts
     if ($form->{"paid_$i"}) {
       $form->{"paid_$i"} =
-      $form->format_amount(\%myconfig, $form->{"paid_$i"}, 2);
+        $form->format_amount(\%myconfig, $form->{"paid_$i"}, 2);
     }
-    $form->{"exchangerate_$i"} =
-      $form->format_amount(\%myconfig, $form->{"exchangerate_$i"});
     if ($form->{"exchangerate_$i"} == 0) {
       $form->{"exchangerate_$i"} = "";
+    } else {
+      $form->{"exchangerate_$i"} =
+        $form->format_amount(\%myconfig, $form->{"exchangerate_$i"});
+    }
+
+    print qq|<input type=hidden name="acc_trans_id_$i" value=$form->{"acc_trans_id_$i"}>\n|;
+    print qq|<input type=hidden name="gldate_$i" value=$form->{"gldate_$i"}>\n|;
+    my $changeable = 1;
+    if ($::lx_office_conf{features}->{payments_changeable} == 0) {
+      # never
+      $changeable = ($form->{"acc_trans_id_$i"})? 0 : 1;
+    }
+    if ($::lx_office_conf{features}->{payments_changeable} == 2) {
+      # on the same day
+      $changeable = (($form->{"gldate_$i"} eq '') || $form->current_date(\%myconfig) eq $form->{"gldate_$i"});
     }
 
     $exchangerate = qq|&nbsp;|;
@@ -695,8 +710,13 @@ $jsscript
         $exchangerate =
           qq|<input type=hidden name="exchangerate_$i" value=$form->{"exchangerate_$i"}>$form->{"exchangerate_$i"}|;
       } else {
-        $exchangerate =
-          qq|<input name="exchangerate_$i" size=10 value=$form->{"exchangerate_$i"}>|;
+        if ($changeable) {
+          $exchangerate =
+            qq|<input name="exchangerate_$i" size=10 value=$form->{"exchangerate_$i"}>|;
+        } else {
+          $exchangerate =
+            qq|<input type=hidden name="exchangerate_$i" value=$form->{"exchangerate_$i"}>$form->{"exchangerate_$i"}|;
+        }
       }
     }
 
@@ -704,42 +724,88 @@ $jsscript
 <input type=hidden name="forex_$i" value=$form->{"forex_$i"}>
 |;
 
-    $column_data{"paid_$i"} =
-      qq|<td align=center><input name="paid_$i" size=11 value="$form->{"paid_$i"}" onBlur=\"check_right_number_format(this)\"></td>|;
-    $column_data{"AP_paid_$i"} =
-      qq|<td align=center>${selectAP_paid}</td>|;
-    $column_data{"exchangerate_$i"} = qq|<td align=center>$exchangerate</td>|;
-    $column_data{"datepaid_$i"}     =
-      qq|<td align=center><input name="datepaid_$i" id="datepaid_$i" size=11 title="($myconfig{'dateformat'})" value="$form->{"datepaid_$i"}" onBlur=\"check_right_date_format(this)\">
+    my $datepaid;
+    if ($changeable) {
+      $datepaid = qq|<td align=center><input name="datepaid_$i" id="datepaid_$i" size=11 title="($myconfig{'dateformat'})" value="$form->{"datepaid_$i"}" onBlur=\"check_right_date_format(this)\">
          <input type="button" name="datepaid_$i" id="trigger_datepaid_$i" value="| . $locale->text('Details (one letter abbreviation)') . qq|"></td>|;
-    $column_data{"source_$i"} =
-      qq|<td align=center><input name="source_$i" size=11 value="$form->{"source_$i"}"></td>|;
-    $column_data{"memo_$i"} =
-      qq|<td align=center><input name="memo_$i" size=11 value="$form->{"memo_$i"}"></td>|;
-    $column_data{"paid_project_id_$i"} =
+    } else {
+      $datepaid = qq|<td align=center>$form->{"datepaid_$i"}</td>|.
+        qq|<input type=hidden name="datepaid_$i" value=$form->{"datepaid_$i"}>|;
+    }
+
+    my $paid;
+    if ($changeable) {
+      $paid = qq|<td align=center><input name="paid_$i" size=11 value="$form->{"paid_$i"}" onBlur=\"check_right_number_format(this)\"></td>|;
+    } else {
+      $paid = qq|<td align=center>$form->{"paid_$i"}</td>|.
+        qq|<input type=hidden name="paid_$i" value=$form->{"paid_$i"}>|;
+    }
+
+    my $source;
+    if ($changeable) {
+      $source = qq|<td align=center><input name="source_$i" size=11 value="$form->{"source_$i"}"></td>|;
+    } else {
+      $source = qq|<td align=center>$form->{"source_$i"}</td>|.
+        qq|<input type=hidden name="source_$i" value=$form->{"source_$i"}>|;
+    }
+
+    my $memo;
+    if ($changeable) {
+      $memo = qq|<td align=center><input name="memo_$i" size=11 value="$form->{"memo_$i"}"></td>|;
+    } else {
+      $memo = qq|<td align=center>$form->{"memo_$i"}</td>|.
+        qq|<input type=hidden name="memo_$i" value=$form->{"memo_$i"}>|;
+    }
+
+    my $AP_paid;
+    if ($changeable) {
+      $AP_paid = qq|<td align=center>${selectAP_paid}</td>|;
+    } else {
+      $AP_paid = qq|<td align=center>$form->{"AP_paid_$i"}</td>|.
+        qq|<input type=hidden name="AP_paid_$i" value=$form->{"AP_paid_$i"}>|;
+    }
+
+    my $paid_project_id;
+    if ($changeable) {
+      $paid_project_id =
       qq|<td>|
       . NTI($cgi->popup_menu('-name' => "paid_project_id_$i",
                              '-values' => \@project_values,
                              '-labels' => \%project_labels,
                              '-default' => $form->{"paid_project_id_$i"} ))
       . qq|</td>|;
+    } else {
+      my $projectnumber = $project_labels{$form->{"paid_project_id_$i"}};
+      $paid_project_id = qq|<td>$projectnumber</td>|.
+        qq|<input type=hidden name="paid_project_id_$i" value=$form->{"paid_project_id_$i"}>|;
+    }
+
+    $column_data{"paid_$i"}            = $paid;
+    $column_data{"AP_paid_$i"}         = $AP_paid;
+    $column_data{"exchangerate_$i"}    = qq|<td align=center>$exchangerate</td>|;
+    $column_data{"datepaid_$i"}        = $datepaid;
+    $column_data{"source_$i"}          = $source;
+    $column_data{"memo_$i"}            = $memo;
+    $column_data{"paid_project_id_$i"} = $paid_project_id;
 
     map { print qq|$column_data{"${_}_$i"}\n| } @column_index;
 
     print "
         </tr>
 ";
-    push(@triggers, "datepaid_$i", "BL", "trigger_datepaid_$i");
+    if ($changeable) {
+      push(@triggers, "datepaid_$i", "BL", "trigger_datepaid_$i");
+    }
   }
 
-  my $paid_missing = $form->{invtotal_unformatted} - $totalpaid;
+  my $paid_missing = $form->{invtotal_unformatted} - $form->{totalpaid};
 
   print qq|
         <tr>
           <td></td>
           <td></td>
           <td align="center">| . $locale->text('Total') . qq|</td>
-          <td align="center">| . H($form->format_amount(\%myconfig, $totalpaid, 2)) . qq|</td>
+          <td align="center">| . H($form->format_amount(\%myconfig, $form->{totalpaid}, 2)) . qq|</td>
         </tr>
         <tr>
           <td></td>
@@ -764,91 +830,37 @@ $jsscript
 }
 
 sub form_footer {
-  $main::lxdebug->enter_sub();
-
-  my $form     = $main::form;
-  my %myconfig = %main::myconfig;
-  my $locale   = $main::locale;
-  my $cgi      = $main::cgi;
-
-  $main::auth->assert('general_ledger');
+  $::lxdebug->enter_sub;
+  $::auth->assert('general_ledger');
 
-  my $follow_ups_block;
-  if ($form->{id}) {
-    my $follow_ups = FU->follow_ups('trans_id' => $form->{id});
+  my $num_due;
+  my $num_follow_ups;
+  if ($::form->{id}) {
+    my $follow_ups = FU->follow_ups('trans_id' => $::form->{id});
 
-    if (@{ $follow_ups) {
-      my $num_due       = sum map { $_->{due} * 1 } @{ $follow_ups };
-      $follow_ups_block = qq|<p>| . $locale->text("There are #1 unfinished follow-ups of which #2 are due.", scalar @{ $follow_ups }, $num_due) . qq|</p>|;
+    if (@{ $follow_ups }) {
+      $num_due        = sum map { $_->{due} * 1 } @{ $follow_ups };
+      $num_follow_ups = scalar @{ $follow_ups }
     }
   }
 
-  print qq|
-
-$follow_ups_block
+  my $transdate = $::form->datetonum($::form->{transdate}, \%::myconfig);
+  my $closedto  = $::form->datetonum($::form->{closedto},  \%::myconfig);
 
-<input name=callback type=hidden value="$form->{callback}">
-<input name="gldate" type="hidden" value="| . Q($form->{gldate}) . qq|">
-|
-. $cgi->hidden('-name' => 'draft_id', '-default' => [$form->{draft_id}])
-. $cgi->hidden('-name' => 'draft_description', '-default' => [$form->{draft_description}])
-. qq|
-
-<br>
-|;
-
-  if (!$form->{id} && $form->{draft_id}) {
-    print(NTI($cgi->checkbox('-name' => 'remove_draft', '-id' => 'remove_draft',
-                             '-value' => 1, '-checked' => $form->{remove_draft},
-                             '-label' => '')) .
-          qq|&nbsp;<label for="remove_draft">| .
-          $locale->text("Remove draft when posting") .
-          qq|</label><br>|);
-  }
-
-  my $transdate = $form->datetonum($form->{transdate}, \%myconfig);
-  my $closedto  = $form->datetonum($form->{closedto},  \%myconfig);
-
-  print qq|<input class="submit" type="submit" name="action" id="update_button" value="| . $locale->text('Update') . qq|">|;
-
-  if ($form->{id}) {
-    if ($form->{radier}) {
-      print qq| <input class=submit type=submit name=action value="| . $locale->text('Post') . qq|">
-                <input class=submit type=submit name=action value="| . $locale->text('Delete') . qq|">
-|;
-    }
-    # ToDO: - insert a global check for stornos, so that a storno is only possible a limited time after saving it
-    our $total_paid;
-    print qq| <input class=submit type=submit name=action value="| . $locale->text('Storno') . qq|"> |
-      if ($form->{id} && !IS->has_storno(\%myconfig, $form, 'ap') && !IS->is_storno(\%myconfig, $form, 'ap', $form->{id}) && (($total_paid == 0) || ($total_paid eq "")));
-
-    print qq| <input class=submit type=submit name=action value="| . $locale->text('Post Payment') . qq|">
-              <input class=submit type=submit name=action value="| . $locale->text('Use As Template') . qq|">
-              <input type="button" class="submit" onclick="follow_up_window()" value="| . $locale->text('Follow-Up') . qq|">
-|;
-  } elsif (($transdate > $closedto) && !$form->{id}) {
-    print qq|
-      <input class=submit type=submit name=action value="| . $locale->text('Post') . qq|"> | .
-      NTI($cgi->submit('-name' => 'action', '-value' => $locale->text('Save draft'), '-class' => 'submit'));
-  }
-  # button for saving history
-  if($form->{id} ne "") {
-    print qq| <input type="button" class="submit" onclick="set_history_window($form->{id});" name="history" id="history" value="| . $locale->text('history') . qq|"> |;
-  }
-  # /button for saving history
-  # mark_as_paid button
-  if($form->{id} ne "") {
-    print qq| <input type="submit" class="submit" name="action" value="| . $locale->text('mark as paid') . qq|"> |;
-  }
-  # /mark_as_paid button
-  print "
-</form>
+  my $storno = $::form->{id}
+            && !IS->has_storno(\%::myconfig, $::form, 'ap')
+            && !IS->is_storno( \%::myconfig, $::form, 'ap', $::form->{id})
+            && ($::form->{totalpaid} == 0 || $::form->{totalpaid} eq '');
 
-</body>
-</html>
-";
+  $::form->header;
+  print $::form->parse_html_template('ap/form_footer', {
+    num_due         => $num_due,
+    num_follow_ups  => $num_follow_ups,
+    show_post_draft => ($transdate > $closedto) && !$::form->{id},
+    show_storno     => $storno,
+  });
 
-  $main::lxdebug->leave_sub();
+  $::lxdebug->leave_sub;
 }
 
 sub mark_as_paid {
@@ -973,7 +985,8 @@ sub post_payment {
 
   $form->{defaultcurrency} = $form->get_default_currency(\%myconfig);
 
-  our $invdate;
+  my $invdate = $form->datetonum($form->{transdate}, \%myconfig);
+
   for my $i (1 .. $form->{paidaccounts}) {
     if ($form->parse_amount(\%myconfig, $form->{"paid_$i"})) {
       my $datepaid = $form->datetonum($form->{"datepaid_$i"}, \%myconfig);
@@ -1012,6 +1025,8 @@ sub post {
 
   $main::auth->assert('general_ledger');
 
+  my ($inline) = @_;
+
   # check if there is a vendor, invoice and due date
   $form->isblank("transdate", $locale->text("Invoice Date missing!"));
   $form->isblank("duedate",   $locale->text("Due Date missing!"));
@@ -1081,12 +1096,12 @@ sub post {
     if(!exists $form->{addition} && $form->{id} ne "") {
       $form->{snumbers} = qq|invnumber_| . $form->{invnumber};
       $form->{addition} = "POSTED";
-      $form->save_history($form->dbconnect(\%myconfig));
+      $form->save_history;
     }
     # /saving the history
     remove_draft() if $form->{remove_draft};
     # Dieser Text wird niemals ausgegeben: Probleme beim redirect?
-    $form->redirect($locale->text('Transaction posted!'));
+    $form->redirect($locale->text('Transaction posted!')) unless $inline;
   } else {
     $form->error($locale->text('Cannot post transaction!'));
   }
@@ -1107,7 +1122,7 @@ sub post_as_new {
   if(!exists $form->{addition} && $form->{id} ne "") {
     $form->{snumbers} = qq|invnumber_| . $form->{invnumber};
     $form->{addition} = "POSTED AS NEW";
-    $form->save_history($form->dbconnect(\%myconfig));
+    $form->save_history;
   }
   # /saving the history
   &post;
@@ -1123,7 +1138,7 @@ sub use_as_template {
 
   $main::auth->assert('general_ledger');
 
-  map { delete $form->{$_} } qw(printed emailed queued invnumber invdate deliverydate id datepaid_1 source_1 memo_1 paid_1 exchangerate_1 AP_paid_1 storno);
+  map { delete $form->{$_} } qw(printed emailed queued invnumber invdate deliverydate id datepaid_1 gldate_1 acc_trans_id_1 source_1 memo_1 paid_1 exchangerate_1 AP_paid_1 storno);
   $form->{paidaccounts} = 1;
   $form->{rowcount}--;
   $form->{invdate} = $form->current_date(\%myconfig);
@@ -1147,8 +1162,6 @@ sub delete {
   delete $form->{header};
 
   print qq|
-<body>
-
 <form method=post action=$form->{script}>
 |;
 
@@ -1168,9 +1181,6 @@ sub delete {
 <input name=action class=submit type=submit value="|
     . $locale->text('Yes') . qq|">
 </form>
-
-</body>
-</html>
 |;
 
   $main::lxdebug->leave_sub();
@@ -1185,12 +1195,12 @@ sub yes {
 
   $main::auth->assert('general_ledger');
 
-  if (AP->delete_transaction(\%myconfig, \%$form, $main::spool)) {
+  if (AP->delete_transaction(\%myconfig, \%$form)) {
     # saving the history
     if(!exists $form->{addition}) {
       $form->{snumbers} = qq|invnumber_| . $form->{invnumber};
       $form->{addition} = "DELETED";
-      $form->save_history($form->dbconnect(\%myconfig));
+      $form->save_history;
     }
     # /saving the history
     $form->redirect($locale->text('Transaction deleted!'));
@@ -1203,7 +1213,7 @@ sub yes {
 sub search {
   $main::lxdebug->enter_sub();
 
-  $main::auth->assert('general_ledger | invoice_edit');
+  $main::auth->assert('general_ledger | vendor_invoice_edit');
 
   my $form     = $main::form;
   my %myconfig = %main::myconfig;
@@ -1276,7 +1286,7 @@ sub ap_transactions {
        vendornumber country ustid taxzone payment_terms charts);
 
   my @hidden_variables = map { "l_${_}" } @columns;
-  push @hidden_variables, "l_subtotal", qw(open closed vendor invnumber ordnumber transaction_description notes project_id transdatefrom transdateto);
+  push @hidden_variables, "l_subtotal", qw(open closed vendor invnumber ordnumber transaction_description notes project_id transdatefrom transdateto department);
 
   my $href = build_std_url('action=ap_transactions', grep { $form->{$_} } @hidden_variables);
 
@@ -1297,7 +1307,7 @@ sub ap_transactions {
     'transaction_description' => { 'text' => $locale->text('Transaction description'), },
     'notes'                   => { 'text' => $locale->text('Notes'), },
     'employee'                => { 'text' => $locale->text('Employee'), },
-    'globalprojectnumber'     => { 'text' => $locale->text('Project Number'), },
+    'globalprojectnumber'     => { 'text' => $locale->text('Document Project Number'), },
     'vendornumber'            => { 'text' => $locale->text('Vendor Number'), },
     'country'                 => { 'text' => $locale->text('Country'), },
     'ustid'                   => { 'text' => $locale->text('USt-IdNr.'), },
@@ -1342,6 +1352,7 @@ sub ap_transactions {
                        'attachment_basename'  => $locale->text('vendor_invoice_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 and escape callback, this one we use for the add sub
   $form->{callback} = $href .= "&sort=$form->{sort}";
@@ -1427,13 +1438,16 @@ sub storno {
     $form->error($locale->text("Transaction has already been cancelled!"));
   }
 
+  $form->error($locale->text('Cannot post storno for a closed period!'))
+    if ( $form->date_closed($form->{transdate}, \%myconfig));
+
   AP->storno($form, \%myconfig, $form->{id});
 
   # saving the history
   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