Merge branch 'master' of github.com:kivitendo/kivitendo-erp
[kivitendo-erp.git] / SL / AR.pm
index 3def759..3da550d 100644 (file)
--- a/SL/AR.pm
+++ b/SL/AR.pm
@@ -40,6 +40,7 @@ use SL::DBUtils;
 use SL::IO;
 use SL::MoreCommon;
 use SL::DB::Default;
+use SL::TransNumber;
 
 use strict;
 
@@ -134,9 +135,12 @@ sub post_transaction {
     } else {
       $query = qq|SELECT nextval('glid')|;
       ($form->{id}) = selectrow_query($form, $dbh, $query);
-      $query = qq|INSERT INTO ar (id, invnumber, employee_id, curr) VALUES (?, 'dummy', ?, (SELECT id FROM currencies WHERE curr=?))|;
+      $query = qq|INSERT INTO ar (id, invnumber, employee_id, currency_id) VALUES (?, 'dummy', ?, (SELECT id FROM currencies WHERE name=?))|;
       do_query($form, $dbh, $query, $form->{id}, $form->{employee_id}, $form->{currency});
-      $form->{invnumber} = $form->update_defaults($myconfig, "invnumber", $dbh) unless $form->{invnumber};
+      if (!$form->{invnumber}) {
+        my $trans_number   = SL::TransNumber->new(type => 'invoice', dbh => $dbh, number => $form->{partnumber}, id => $form->{id});
+        $form->{invnumber} = $trans_number->create_unique;
+      }
     }
   }
 
@@ -191,12 +195,12 @@ sub post_transaction {
     # add recievables
     $query = qq|INSERT INTO acc_trans (trans_id, chart_id, amount, transdate, taxkey, tax_id, chart_link)
                  VALUES (?, (SELECT id FROM chart WHERE accno = ?), ?, ?, (SELECT taxkey_id FROM chart WHERE accno = ?),
-                 (SELECT tax_id 
-                  FROM taxkeys 
-                  WHERE chart_id= (SELECT id  
-                                   FROM chart 
-                                   WHERE accno = ?) 
-                  AND startdate <= ? 
+                 (SELECT tax_id
+                  FROM taxkeys
+                  WHERE chart_id= (SELECT id
+                                   FROM chart
+                                   WHERE accno = ?)
+                  AND startdate <= ?
                   ORDER BY startdate DESC LIMIT 1),
                  (SELECT c.link FROM chart c WHERE c.accno = ?))|;
     @values = (conv_i($form->{id}), $form->{AR_amounts}{receivables}, conv_i($form->{receivables}), conv_date($form->{transdate}),
@@ -239,12 +243,12 @@ sub post_transaction {
         # add receivable
         $query = qq|INSERT INTO acc_trans (trans_id, chart_id, amount, transdate, project_id, taxkey, tax_id, chart_link)
                      VALUES (?, (SELECT id FROM chart WHERE accno = ?), ?, ?, ?, (SELECT taxkey_id FROM chart WHERE accno = ?),
-                     (SELECT tax_id 
-                      FROM taxkeys 
-                      WHERE chart_id= (SELECT id 
-                                       FROM chart 
-                                       WHERE accno = ?) 
-                      AND startdate <= ? 
+                     (SELECT tax_id
+                      FROM taxkeys
+                      WHERE chart_id= (SELECT id
+                                       FROM chart
+                                       WHERE accno = ?)
+                      AND startdate <= ?
                       ORDER BY startdate DESC LIMIT 1),
                      (SELECT c.link FROM chart c WHERE c.accno = ?))|;
         @values = (conv_i($form->{id}), $form->{AR}{receivables}, $amount, conv_date($form->{"datepaid_$i"}), $project_id, $form->{AR}{receivables}, $form->{AR}{receivables}, conv_date($form->{"datepaid_$i"}),
@@ -260,12 +264,12 @@ sub post_transaction {
         $amount = $form->{"paid_$i"} * -1;
         $query  = qq|INSERT INTO acc_trans (trans_id, chart_id, amount, transdate, gldate, source, memo, project_id, taxkey, tax_id, chart_link)
                      VALUES (?, (SELECT id FROM chart WHERE accno = ?), ?, ?, ?, ?, ?, ?, (SELECT taxkey_id FROM chart WHERE accno = ?),
-                     (SELECT tax_id 
-                      FROM taxkeys 
-                      WHERE chart_id= (SELECT id 
-                                       FROM chart 
-                                       WHERE accno = ?) 
-                      AND startdate <= ? 
+                     (SELECT tax_id
+                      FROM taxkeys
+                      WHERE chart_id= (SELECT id
+                                       FROM chart
+                                       WHERE accno = ?)
+                      AND startdate <= ?
                       ORDER BY startdate DESC LIMIT 1),
                      (SELECT c.link FROM chart c WHERE c.accno = ?))|;
         @values = (conv_i($form->{id}), $form->{AR}{"paid_$i"}, $amount, conv_date($form->{"datepaid_$i"}), $gldate, $form->{"source_$i"}, $form->{"memo_$i"}, $project_id, $form->{AR}{"paid_$i"},
@@ -278,12 +282,12 @@ sub post_transaction {
         if ($amount != 0) {
           $query = qq|INSERT INTO acc_trans (trans_id, chart_id, amount, transdate, fx_transaction, cleared, project_id, taxkey, tax_id, chart_link)
                        VALUES (?, (SELECT id FROM chart WHERE accno = ?), ?, ?, 't', 'f', ?, (SELECT taxkey_id FROM chart WHERE accno = ?),
-                       (SELECT tax_id 
-                        FROM taxkeys 
-                        WHERE chart_id= (SELECT id  
-                                         FROM chart 
-                                         WHERE accno = ?) 
-                        AND startdate <= ? 
+                       (SELECT tax_id
+                        FROM taxkeys
+                        WHERE chart_id= (SELECT id
+                                         FROM chart
+                                         WHERE accno = ?)
+                        AND startdate <= ?
                         ORDER BY startdate DESC LIMIT 1),
                        (SELECT c.link FROM chart c WHERE c.accno = ?))|;
           @values = (conv_i($form->{id}), $form->{AR}{"paid_$i"}, $amount, conv_date($form->{"datepaid_$i"}), $project_id, $form->{AR}{"paid_$i"},
@@ -298,12 +302,12 @@ sub post_transaction {
           my $accno = ($amount > 0) ? $form->{fxgain_accno} : $form->{fxloss_accno};
           $query = qq|INSERT INTO acc_trans (trans_id, chart_id, amount, transdate, fx_transaction, cleared, project_id, taxkey, tax_id, chart_link)
                        VALUES (?, (SELECT id FROM chart WHERE accno = ?), ?, ?, 't', 'f', ?, (SELECT taxkey_id FROM chart WHERE accno = ?),
-                       (SELECT tax_id 
-                        FROM taxkeys 
-                        WHERE chart_id= (SELECT id  
-                                         FROM chart 
-                                         WHERE accno = ?) 
-                        AND startdate <= ? 
+                       (SELECT tax_id
+                        FROM taxkeys
+                        WHERE chart_id= (SELECT id
+                                         FROM chart
+                                         WHERE accno = ?)
+                        AND startdate <= ?
                         ORDER BY startdate DESC LIMIT 1),
                        (SELECT c.link FROM chart c WHERE c.accno = ?))|;
           @values = (conv_i($form->{id}), $accno, $amount, conv_date($form->{"datepaid_$i"}), $project_id, $accno, $accno, conv_date($form->{"datepaid_$i"}), $accno);
@@ -330,6 +334,7 @@ sub post_transaction {
       dbh        => $dbh,
       from       => $transdate,
       to         => $transdate,
+      trans_id   => $form->{id},
     );
 
     $datev->export;
@@ -508,12 +513,17 @@ sub ar_transactions {
     qq|LEFT JOIN employee e ON (a.employee_id = e.id) | .
     qq|LEFT JOIN employee e2 ON (a.salesman_id = e2.id) | .
     qq|LEFT JOIN project pr ON (a.globalproject_id = pr.id)| .
-    qq|LEFT JOIN tax_zones tz ON (tz.id = c.taxzone_id)| .
-    qq|LEFT JOIN payment_terms pt ON (pt.id = c.payment_id)| .
+    qq|LEFT JOIN tax_zones tz ON (tz.id = a.taxzone_id)| .
+    qq|LEFT JOIN payment_terms pt ON (pt.id = a.payment_id)| .
     qq|LEFT JOIN business b ON (b.id = c.business_id)| .
     qq|LEFT JOIN department d ON (d.id = a.department_id)|;
 
   my $where = "1 = 1";
+
+  unless ( $::auth->assert('show_ar_transactions', 1) ) {
+    $where .= " AND NOT invoice = 'f' ";  # remove ar transactions from Sales -> Reports -> Invoices
+  };
+
   if ($form->{customernumber}) {
     $where .= " AND c.customernumber = ?";
     push(@values, $form->{customernumber});
@@ -632,7 +642,7 @@ sub setup_form {
   my ($self, $form, $for_post_payments) = @_;
 
   my ($exchangerate, $akey, $j, $k, $index, $taxamount, $totaltax, $taxrate, $diff, $totalwithholding, $withholdingrate,
-      $totalamount, $taxincluded, $tax);
+      $totalamount, $tax);
 
   # forex
   $form->{forex} = $form->{exchangerate};
@@ -716,7 +726,6 @@ sub setup_form {
     }
   }
 
-  $form->{taxincluded}  = $taxincluded if ($form->{id});
   $form->{paidaccounts} = 1            if not defined $form->{paidaccounts};
 
   if ($form->{taxincluded} && $form->{taxrate} && $totalamount) {
@@ -795,4 +804,3 @@ sub storno {
 
 
 1;
-