Fehlendes Zeichen.
[kivitendo-erp.git] / bin / mozilla / ar.pl
index e7b36ef..eb34436 100644 (file)
@@ -471,7 +471,7 @@ selectcustomer}</select>|
   $form->{fokus} = "arledger.customer";
 
   # use JavaScript Calendar or not
-  $form->{jsscript} = $jscalendar;
+  $form->{jsscript} = 1;
   $jsscript = "";
   if ($form->{jsscript}) {
 
@@ -500,6 +500,10 @@ selectcustomer}</select>|
       qq|<td><input name=duedate id=duedate size=11 title="$myconfig{dateformat}" value="$form->{duedate}" onBlur=\"check_right_date_format(this)\"></td>|;
   }
 
+  $form->{javascript} .=
+    qq|<script type="text/javascript" src="js/common.js"></script>| .
+    qq|<script type="text/javascript" src="js/show_vc_details.js"></script>|;
+
   $form->header;
   $onload = qq|focus()|;
   $onload .= qq|;setupDateFormat('|. $myconfig{dateformat} .qq|', '|. $locale->text("Falsches Datumsformat!") .qq|')|;
@@ -530,7 +534,7 @@ selectcustomer}</select>|
            <table>
              <tr>
                <th align="right" nowrap>| . $locale->text('Customer') . qq|</th>
-               <td colspan=3>$customer</td>
+               <td colspan=3>$customer <input type="button" value="?" onclick="show_vc_details('customer')"></td>
                <input type=hidden name=selectcustomer value="$form->{selectcustomer}">
                <input type=hidden name=oldcustomer value="$form->{oldcustomer}">
                <input type=hidden name=customer_id value="$form->{customer_id}">
@@ -865,35 +869,28 @@ sub form_footer {
   $transdate = $form->datetonum($form->{transdate}, \%myconfig);
   $closedto  = $form->datetonum($form->{closedto},  \%myconfig);
 
-  print qq|<input class="submit" type="submit" name="action" id="update_button" value="|
-    . $locale->text('Update') . qq|">
-|;
+  # ToDO: - insert a global check for stornos, so that a storno is only possible a limited time after saving it
+  print qq|<input class=submit type=submit name=action value="| . $locale->text('Storno') . qq|">|
+    if ($form->{id} && !IS->has_storno(\%myconfig, $form, 'ar') && !IS->is_storno(\%myconfig, $form, 'ar') && !$form->{paid_1});
+
+  print qq|<input class="submit" type="submit" name="action" id="update_button" value="| . $locale->text('Update') . qq|">\n|;
   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|">
-  |;
+        <input class=submit type=submit name=action value="| . $locale->text('Post') .            qq|">
+        <input class=submit type=submit name=action value="| . $locale->text('Delete') .          qq|"> |;
     }
     if ($transdate > $closedto) {
       print qq|
-  <input class=submit type=submit name=action value="|
-          . $locale->text('Use As Template') . qq|">
-  |;
+        <input class=submit type=submit name=action value="| . $locale->text('Use As Template') . qq|"> |;
     }
     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('Post Payment') .    qq|"> |;
 
   } else {
     if ($transdate > $closedto) {
-      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'));
+      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'));
     }
   }
 
@@ -903,12 +900,7 @@ sub form_footer {
   }
   # button for saving history
   if($form->{id} ne "") {
-    print qq|
-         <input type=button class=submit onclick=set_history_window(|
-         . $form->{id} 
-         . qq|); name=history id=history value=|
-         . $locale->text('history') 
-         . qq|>|;
+    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
   print "
@@ -1015,7 +1007,7 @@ sub update {
 sub post_payment {
   $lxdebug->enter_sub();
   for $i (1 .. $form->{paidaccounts}) {
-    if ($form->{"paid_$i"}) {
+    if ($form->parse_amount(\%myconfig, $form->{"paid_$i"})) {
       $datepaid = $form->datetonum($form->{"datepaid_$i"}, \%myconfig);
 
       $form->isblank("datepaid_$i", $locale->text('Payment date missing!'));
@@ -1052,9 +1044,10 @@ sub post {
 
   $closedto  = $form->datetonum($form->{closedto},  \%myconfig);
   $transdate = $form->datetonum($form->{transdate}, \%myconfig);
+  $form->error($locale->text('Cannot post transaction for a closed period!')) if ($transdate <= $closedto);
 
-  $form->error($locale->text('Cannot post transaction for a closed period!'))
-    if ($transdate <= $closedto);
+  $form->error($locale->text('Zero amount posting!')) 
+    unless grep $_*1, map $form->parse_amount(\%myconfig, $form->{"amount_$_"}), 1..$form->{rowcount};
 
   $form->isblank("exchangerate", $locale->text('Exchangerate missing!'))
     if ($form->{currency} ne $form->{defaultcurrency});
@@ -1071,10 +1064,8 @@ sub post {
         if ($datepaid <= $closedto);
 
       if ($form->{currency} ne $form->{defaultcurrency}) {
-        $form->{"exchangerate_$i"} = $form->{exchangerate}
-          if ($transdate == $datepaid);
-        $form->isblank("exchangerate_$i",
-                       $locale->text('Exchangerate for payment missing!'));
+        $form->{"exchangerate_$i"} = $form->{exchangerate} if ($transdate == $datepaid);
+        $form->isblank("exchangerate_$i", $locale->text('Exchangerate for payment missing!'));
       }
     }
   }
@@ -1092,9 +1083,9 @@ sub post {
   if (AR->post_transaction(\%myconfig, \%$form)) {
     # saving the history
     if(!exists $form->{addition} && $form->{id} ne "") {
-      $form->{snumbers} = qq|invnumber_| . $form->{invnumber};
-         $form->{addition} = "POSTED";
-         $form->save_history($form->dbconnect(\%myconfig));
+      $form->{snumbers} = "invnumber_$form->{invnumber}";
+      $form->{addition} = "POSTED";
+      $form->save_history($form->dbconnect(\%myconfig));
     }
     # /saving the history 
     remove_draft() if $form->{remove_draft};
@@ -1224,7 +1215,7 @@ sub search {
   $form->{javascript} .= qq|<script type="text/javascript" src="js/common.js"></script>|;
   
   # use JavaScript Calendar or not
-  $form->{jsscript} = $jscalendar;
+  $form->{jsscript} = 1;
   $jsscript = "";
   if ($form->{jsscript}) {
 
@@ -1295,6 +1286,10 @@ sub search {
          <th align=right nowrap>| . $locale->text('Order Number') . qq|</th>
          <td colspan=3><input name=ordnumber size=20></td>
        </tr>
+       <tr>
+         <th align=right nowrap>| . $locale->text('Transaction description') . qq|</th>
+         <td colspan=3><input name=transaction_description size=40></td>
+       </tr>
        <tr>
          <th align=right nowrap>| . $locale->text('Notes') . qq|</th>
          <td colspan=3><input name=notes size=40></td>
@@ -1371,6 +1366,8 @@ sub search {
                <td nowrap>| . $locale->text('Subtotal') . qq|</td>
                <td align=right><input name="l_globalprojectnumber" class=checkbox type=checkbox value=Y></td>
                <td nowrap>| . $locale->text('Project Number') . qq|</td>
+               <td align=right><input name="l_transaction_description" class=checkbox type=checkbox value=Y></td>
+               <td nowrap>| . $locale->text('Transaction description') . qq|</td>
              </tr>
            </table>
          </td>
@@ -1446,6 +1443,12 @@ sub ar_transactions {
     $option .= "\n<br>" if $option;
     $option .= $locale->text('Notes') . " : $form->{notes}";
   }
+  if ($form->{transaction_description}) {
+    $callback .= "&transaction_description=" . $form->escape($form->{transaction_description}, 1);
+    $href .= "&transaction_description=" . $form->escape($form->{transaction_description});
+    $option .= "\n<br>" if $option;
+    $option .= $locale->text('Transaction description') . " : $form->{transaction_description}";
+  }
 
   if ($form->{transdatefrom}) {
     $callback .= "&transdatefrom=$form->{transdatefrom}";
@@ -1482,7 +1485,7 @@ sub ar_transactions {
 
   @columns =
     qw(transdate id type invnumber ordnumber name netamount tax amount paid
-       datepaid due duedate notes employee shippingpoint shipvia
+       datepaid due duedate transaction_description notes employee shippingpoint shipvia
        globalprojectnumber);
 
   $form->{"l_type"} = "Y";
@@ -1558,6 +1561,8 @@ sub ar_transactions {
     . "</a></th>";
   $column_header{globalprojectnumber} =
     qq|<th class="listheading">| . $locale->text('Project Number') . qq|</th>|;
+  $column_header{transaction_description} =
+    "<th class=listheading>" . $locale->text('Transaction description') . "</th>";
 
   $form->{title} = $locale->text('AR Transactions');
 
@@ -1645,7 +1650,7 @@ sub ar_transactions {
     $column_data{invnumber} =
       "<td><a href=$module?action=edit&id=$ar->{id}&login=$form->{login}&password=$form->{password}&callback=$callback>$ar->{invnumber}</a></td>";
 
-    my $is_storno  = $ar->{storno} && ($ar->{invnumber} =~ /^Storno zu/);
+    my $is_storno  = $ar->{storno} && IS->is_storno(\%myconfig, $form, 'ar');
     my $has_storno = $ar->{storno} && !$is_storno;
 
     $column_data{type} = "<td>" .
@@ -1664,6 +1669,8 @@ sub ar_transactions {
     $column_data{employee}      = "<td>$ar->{employee}&nbsp;</td>";
     $column_data{globalprojectnumber}  =
       "<td>" . H($ar->{globalprojectnumber}) . "</td>";
+    $column_data{transaction_description}  =
+      "<td>" . H($ar->{transaction_description}) . "</td>";
 
     $i++;
     $i %= 2;
@@ -1777,3 +1784,44 @@ sub ar_subtotal {
 
   $lxdebug->leave_sub();
 }
+
+
+sub storno {
+  $lxdebug->enter_sub();
+
+  if (IS->has_storno(\%myconfig, $form, 'ar')) {
+    $form->{title} = $locale->text("Cancel Accounts Receivables Transaction");
+    $form->error($locale->text("Transaction has already been cancelled!"));
+  }
+
+  # negate amount/taxes
+  for my $i (1 .. $form->{rowcount}) {
+    $form->{"amount_$i"} *= -1;
+    $form->{"tax_$i"}    *= -1; 
+  }
+
+  # format things
+  for my $i (1 .. $form->{rowcount}) {
+    for (qw(amount tax)) {
+      $form->{"${_}_$i"} = $form->format_amount(\%myconfig, $form->{"${_}_$i"}, 2) if $form->{"${_}_$i"};
+    }
+  }
+
+  $form->{storno}      = 1;
+  $form->{storno_id}   = $form->{id};
+  $form->{id}          = 0;
+
+  $form->{invnumber}   = "Storno-" . $form->{invnumber};
+
+  post();
+
+  # saving the history
+  if(!exists $form->{addition} && $form->{id} ne "") {
+    $form->{snumbers} = "ordnumber_$form->{ordnumber}";
+    $form->{addition} = "STORNO";
+    $form->save_history($form->dbconnect(\%myconfig));
+  }
+  # /saving the history 
+
+  $lxdebug->leave_sub();
+}