Stornomoeglichkeit fuer Debitorenrechnungen
authorSven Schöling <s.schoeling@linet-services.de>
Thu, 24 May 2007 15:49:58 +0000 (15:49 +0000)
committerSven Schöling <s.schoeling@linet-services.de>
Thu, 24 May 2007 15:49:58 +0000 (15:49 +0000)
(plus die ueblichen Codekosmetika)

bin/mozilla/ar.pl
locale/de/all
locale/de/ar
locale/de/gl

index d218ff6..97eef05 100644 (file)
@@ -869,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');
+
+  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'));
     }
   }
 
@@ -907,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 "
@@ -1058,15 +1046,8 @@ sub post {
   $transdate = $form->datetonum($form->{transdate}, \%myconfig);
   $form->error($locale->text('Cannot post transaction for a closed period!')) if ($transdate <= $closedto);
 
-  my $zero_amount_posting = 1;
-  for $i (1 .. $form->{rowcount}) {
-    if ($form->parse_amount(\%myconfig, $form->{"amount_$i"})) {
-      $zero_amount_posting = 0;
-      last;
-    }
-  }
-
-  $form->error($locale->text('Zero amount posting!')) if $zero_amount_posting;
+  $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});
@@ -1083,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!'));
       }
     }
   }
@@ -1104,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};
@@ -1671,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'); #($ar->{invnumber} =~ /^Storno zu/); # ToDO: fix this
     my $has_storno = $ar->{storno} && !$is_storno;
 
     $column_data{type} = "<td>" .
@@ -1805,3 +1784,55 @@ 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!"));
+  }
+
+  # ToDO: 
+  #       - nicht anzeigen wenn neue rechnung
+  #       - nicht anzeigen wenn schons toniert
+  #       - nicht anziegen wenn zahlungen da
+
+
+#  my %keep_keys = map { $_, 1 } qw(login password id stylesheet);
+#  map { delete $form->{$_} unless $keep_keys{$_} } keys %{ $form };
+#  prepare_transaction();
+
+  # 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();
+
+}
index d06a9a8..3fba12e 100644 (file)
@@ -210,6 +210,7 @@ aktualisieren wollen?',
   'C'                           => 'G',
   'CANCELED'                    => 'Storniert',
   'Calculate'                   => 'Berechnen',
+  'Cancel Accounts Receivables Transaction' => 'Debitorenbuchung stornieren',
   'Cancel General Ledger Transaction' => 'Buchung stornieren',
   'Cannot create Lock!'         => 'System kann nicht gesperrt werden!',
   'Cannot delete account!'      => 'Konto kann nicht gelöscht werden!',
@@ -823,7 +824,6 @@ gestartet',
   'Port'                        => 'Port',
   'Post'                        => 'Buchen',
   'Post Payment'                => 'Zahlung buchen',
-  'Post as new'                 => 'Neu buchen',
   'Postscript'                  => 'Postscript',
   'Posustva_coa'                => 'USTVA Kennz.',
   'Preferences'                 => 'Benutzereinstellungen',
index 0b069e4..c502979 100644 (file)
@@ -19,6 +19,7 @@ $self->{texts} = {
   'Bin List'                    => 'Lagerliste',
   'Bis'                         => 'bis',
   'CANCELED'                    => 'Storniert',
+  'Cancel Accounts Receivables Transaction' => 'Debitorenbuchung stornieren',
   'Cannot delete transaction!'  => 'Buchung kann nicht gelöscht werden!',
   'Cannot post payment for a closed period!' => 'Es können keine Zahlungen für abgeschlossene Bücher gebucht werden!',
   'Cannot post payment!'        => 'Zahlung kann nicht gebucht werden!',
@@ -149,6 +150,7 @@ $self->{texts} = {
   'Shipping Point'              => 'Versandort',
   'Skip'                        => 'Überspringen',
   'Source'                      => 'Beleg',
+  'Storno'                      => 'Storno',
   'Storno (one letter abbreviation)' => 'S',
   'Storno Invoice'              => 'Stornorechnung',
   'Storno Packing List'         => 'Stornolieferschein',
@@ -160,6 +162,7 @@ $self->{texts} = {
   'Total'                       => 'Summe',
   'Transaction deleted!'        => 'Buchung gelöscht!',
   'Transaction description'     => 'Vorgangsbezeichnung',
+  'Transaction has already been cancelled!' => 'Diese Buchung wurde bereits storniert.',
   'Transaction posted!'         => 'Buchung verbucht!',
   'Trying to call a sub without a name' => 'Es wurde versucht, eine Unterfunktion ohne Namen aufzurufen.',
   'Type'                        => 'Typ',
@@ -244,6 +247,7 @@ $self->{subs} = {
   'set_longdescription'         => 'set_longdescription',
   'show_history'                => 'show_history',
   'show_vc_details'             => 'show_vc_details',
+  'storno'                      => 'storno',
   'update'                      => 'update',
   'use_as_template'             => 'use_as_template',
   'vendor_invoice'              => 'vendor_invoice',
@@ -258,6 +262,7 @@ $self->{subs} = {
   'rechnung'                    => 'sales_invoice',
   'entwurf_speichern'           => 'save_draft',
   'Überspringen'                => 'skip',
+  'storno'                      => 'storno',
   'erneuern'                    => 'update',
   'als_vorlage_verwenden'       => 'use_as_template',
   'ja'                          => 'yes',
index f9d95c6..9fb59ea 100644 (file)
@@ -118,7 +118,6 @@ $self->{texts} = {
   'Pick List'                   => 'Sammelliste',
   'Please enter values'         => 'Bitte Werte eingeben',
   'Post'                        => 'Buchen',
-  'Post as new'                 => 'Neu buchen',
   'Previous transdate text'     => 'wurde gespeichert am',
   'Previous transnumber text'   => 'Letzte Buchung mit der Buchungsnummer',
   'Proforma Invoice'            => 'Proformarechnung',
@@ -239,7 +238,6 @@ $self->{subs} = {
   'löschen'                     => 'delete',
   'dialogbuchung'               => 'gl_transaction',
   'buchen'                      => 'post',
-  'neu_buchen'                  => 'post_as_new',
   'rechnung'                    => 'sales_invoice',
   'storno'                      => 'storno',
   'erneuern'                    => 'update',