Einkaufs- und Verkaufsrechnungen: Bei den Buchungen (sowohl für die Positionen als...
[kivitendo-erp.git] / SL / IR.pm
index c847781..5970672 100644 (file)
--- a/SL/IR.pm
+++ b/SL/IR.pm
@@ -35,6 +35,8 @@
 package IR;
 
 use SL::AM;
+use SL::Common;
+use SL::DBUtils;
 
 sub post_invoice {
   $main::lxdebug->enter_sub();
@@ -80,9 +82,6 @@ sub post_invoice {
     $sth->finish;
   }
 
-  ($null, $form->{contact_id}) = split /--/, $form->{contact};
-  $form->{contact_id} *= 1;
-
   map { $form->{$_} =~ s/\'/\'\'/g } qw(invnumber ordnumber quonumber);
 
   my ($amount, $linetotal, $lastinventoryaccno, $lastexpenseaccno);
@@ -107,8 +106,12 @@ sub post_invoice {
     if ($form->{storno}) {
       $form->{"qty_$i"} *= -1;
     }
+
+    if ($main::eur) {
+      $form->{"inventory_accno_$i"} = $form->{"expense_accno_$i"};
+    }
     
-    if ($form->{"qty_$i"} != 0) {
+    if ($form->{"id_$i"}) {
 
       # get item baseunit
       $query = qq|SELECT p.unit
@@ -368,10 +371,6 @@ sub post_invoice {
 
       }
 
-      $project_id = 'NULL';
-      if ($form->{"projectnumber_$i"}) {
-        $project_id = $form->{"projectnumber_$i"};
-      }
       $deliverydate =
         ($form->{"deliverydate_$i"})
         ? qq|'$form->{"deliverydate_$i"}'|
@@ -384,12 +383,14 @@ sub post_invoice {
                  VALUES ($form->{id}, $form->{"id_$i"},
                  '$form->{"description_$i"}', | . ($form->{"qty_$i"} * -1) . qq|,  | . ($baseqty * -1) . qq|,
                  $form->{"sellprice_$i"}, $fxsellprice, $allocated,
-                 '$form->{"unit_$i"}', $deliverydate, (SELECT id FROM project WHERE projectnumber = '$project_id'),
+                 '$form->{"unit_$i"}', $deliverydate, | . conv_i($form->{"project_id_$i"}) . qq|,
                  '$form->{"serialnumber_$i"}')|;
       $dbh->do($query) || $form->dberror($query);
     }
   }
 
+  $project_id = conv_i($form->{"globalproject_id"});
+
   $form->{datepaid} = $form->{invdate};
 
   # all amounts are in natural state, netamount includes the taxes
@@ -477,12 +478,12 @@ sub post_invoice {
           ) != 0
         ) {
         $query = qq|INSERT INTO acc_trans (trans_id, chart_id, amount,
-                   transdate, taxkey)
+                   transdate, taxkey, project_id)
                    VALUES ($trans_id, (SELECT c.id FROM chart c
                                         WHERE c.accno = '$accno'),
                    $form->{amount}{$trans_id}{$accno}, '$form->{invdate}',
-                   (SELECT taxkey_id  FROM chart WHERE accno = '$accno'))|;
-        $dbh->do($query) || $form->dberror($query);
+                   (SELECT taxkey_id  FROM chart WHERE accno = '$accno'), ?)|;
+        do_query($form, $dbh, $query, $project_id);
       }
     }
   }
@@ -519,22 +520,22 @@ sub post_invoice {
 
       if ($form->{amount}{ $form->{id} }{ $form->{AP} } != 0) {
         $query = qq|INSERT INTO acc_trans (trans_id, chart_id, amount,
-                   transdate)
+                   transdate, project_id)
                    VALUES ($form->{id}, (SELECT c.id FROM chart c
                                        WHERE c.accno = '$form->{AP}'),
-                   $amount, '$form->{"datepaid_$i"}')|;
-        $dbh->do($query) || $form->dberror($query);
+                   $amount, '$form->{"datepaid_$i"}', ?)|;
+        do_query($form, $dbh, $query, $project_id);
       }
 
       # record payment
 
       $query = qq|INSERT INTO acc_trans (trans_id, chart_id, amount, transdate,
-                  source, memo)
+                  source, memo, project_id)
                   VALUES ($form->{id}, (SELECT c.id FROM chart c
                                      WHERE c.accno = '$accno'),
                   $form->{"paid_$i"}, '$form->{"datepaid_$i"}',
-                 '$form->{"source_$i"}', '$form->{"memo_$i"}')|;
-      $dbh->do($query) || $form->dberror($query);
+                 '$form->{"source_$i"}', '$form->{"memo_$i"}', ?)|;
+      do_query($form, $dbh, $query, $project_id);
 
       $exchangerate = 0;
 
@@ -588,11 +589,11 @@ sub post_invoice {
         ) {
 
         $query = qq|INSERT INTO acc_trans (trans_id, chart_id, amount,
-                   transdate, cleared, fx_transaction)
+                   transdate, cleared, fx_transaction, project_id)
                    VALUES ($form->{id}, (SELECT c.id FROM chart c
                                        WHERE c.accno = '$accno'),
-                    $form->{fx}{$accno}{$transdate}, '$transdate', '0', '1')|;
-        $dbh->do($query) || $form->dberror($query);
+                    $form->{fx}{$accno}{$transdate}, '$transdate', '0', '1', ?)|;
+        do_query($form, $dbh, $query, $project_id);
       }
     }
   }
@@ -620,6 +621,8 @@ sub post_invoice {
              ordnumber = '$form->{ordnumber}',
              quonumber = '$form->{quonumber}',
               transdate = '$form->{invdate}',
+              orddate = | . conv_dateq($form->{"orddate"}) . qq|,
+              quodate = | . conv_dateq($form->{"quodate"}) . qq|,
               vendor_id = $form->{vendor_id},
               amount = $amount,
               netamount = $netamount,
@@ -634,7 +637,8 @@ sub post_invoice {
              curr = '$form->{currency}',
              department_id = $form->{department_id},
               storno = '$form->{storno}',
-              cp_id = $form->{contact_id}
+              globalproject_id = | . conv_i($form->{"globalproject_id"}, 'NULL') . qq|,
+              cp_id = | . conv_i($form->{cp_id}, 'NULL') . qq|
               WHERE id = $form->{id}|;
   $dbh->do($query) || $form->dberror($query);
 
@@ -661,9 +665,7 @@ sub post_invoice {
               WHERE amount = 0|;
   $dbh->do($query) || $form->dberror($query);
 
-  if ($form->{webdav}) {
-    &webdav_folder($myconfig, $form);
-  }
+  Common::webdav_folder($form) if ($main::webdav);
 
   my $rc = $dbh->commit;
   $dbh->disconnect;
@@ -841,7 +843,8 @@ sub retrieve_invoice {
 
     # retrieve invoice
     $query = qq|SELECT a.cp_id, a.invnumber, a.transdate AS invdate, a.duedate,
-                a.ordnumber, a.quonumber, a.paid, a.taxincluded, a.notes, a.taxzone_id, a.storno,
+                a.orddate, a.quodate, a.globalproject_id,
+                a.ordnumber, a.quonumber, a.paid, a.taxincluded, a.notes, a.taxzone_id, a.storno, a.gldate,
                a.intnotes, a.curr AS currency
                FROM ap a
                WHERE a.id = $form->{id}|;
@@ -958,10 +961,7 @@ sub retrieve_invoice {
     }
     $sth->finish;
 
-    if ($form->{webdav}) {
-      &webdav_folder($myconfig, $form);
-    }
-
+    Common::webdav_folder($form) if ($main::webdav);
   }
 
   my $rc = $dbh->commit;
@@ -994,8 +994,10 @@ sub get_vendor {
   my $query = qq|SELECT v.name AS vendor, v.creditlimit, v.terms,
                  v.email, v.cc, v.bcc, v.language_id, v.payment_id,
                 v.street, v.zipcode, v.city, v.country, v.taxzone_id,
-                 $duedate + v.terms AS duedate
+                 $duedate + v.terms AS duedate,
+                 b.description AS business
                  FROM vendor v
+                 LEFT JOIN business b ON b.id = v.business_id
                 WHERE v.id = $form->{vendor_id}|;
   my $sth = $dbh->prepare($query);
   $sth->execute || $form->dberror($query);
@@ -1032,15 +1034,6 @@ sub get_vendor {
   }
   $sth->finish;
 
-  $form->get_contacts($dbh, $form->{vendor_id});
-
-  ($null, $form->{cp_id}) = split /--/, $form->{contact};
-
-  # get contact if selected
-  if ($form->{contact} ne "--" && $form->{contact} ne "") {
-    $form->get_contact($dbh, $form->{cp_id});
-  }
-
   # get shipto if we do not convert an order or invoice
   if (!$form->{shipto}) {
     map { delete $form->{$_} }
@@ -1147,7 +1140,7 @@ sub retrieve_item {
       $form->{transdate} ? $dbh->quote($form->{transdate}) : "current_date";
   }
 
-  my $query = qq|SELECT p.id, p.partnumber, p.description, p.sellprice,
+  my $query = qq|SELECT p.id, p.partnumber, p.description, p.lastcost AS sellprice,
                         p.listprice, p.inventory_accno_id,
                         c1.accno AS inventory_accno, c1.new_chart_id AS inventory_new_chart, date($transdate) - c1.valid_from as inventory_valid,
                        c2.accno AS income_accno, c2.new_chart_id AS income_new_chart, date($transdate)  - c2.valid_from as income_valid,
@@ -1218,7 +1211,7 @@ sub retrieve_item {
 sub vendor_details {
   $main::lxdebug->enter_sub();
 
-  my ($self, $myconfig, $form) = @_;
+  my ($self, $myconfig, $form, @wanted_vars) = @_;
 
   # connect to database
   my $dbh = $form->dbconnect($myconfig);
@@ -1245,6 +1238,14 @@ sub vendor_details {
 
   # remove id and taxincluded before copy back
   delete @$ref{qw(id taxincluded)};
+
+  @wanted_vars = grep({ $_ } @wanted_vars);
+  if (scalar(@wanted_vars) > 0) {
+    my %h_wanted_vars;
+    map({ $h_wanted_vars{$_} = 1; } @wanted_vars);
+    map({ delete($ref->{$_}) unless ($h_wanted_vars{$_}); } keys(%{$ref}));
+  }
+
   map { $form->{$_} = $ref->{$_} } keys %$ref;
 
   $sth->finish;
@@ -1282,38 +1283,6 @@ sub item_links {
   $main::lxdebug->leave_sub();
 }
 
-sub webdav_folder {
-  $main::lxdebug->enter_sub();
-
-  my ($myconfig, $form) = @_;
-
-SWITCH: {
-    $path = "webdav/rechnungen/" . $form->{invnumber}, last SWITCH
-      if ($form->{vc} eq "customer");
-    $path = "webdav/einkaufsrechnungen/" . $form->{invnumber}, last SWITCH
-      if ($form->{vc} eq "vendor");
-  }
-
-  if (!-d $path) {
-    mkdir($path, 0770) or die "can't make directory $!\n";
-  } else {
-    if ($form->{id}) {
-      @files = <$path/*>;
-      foreach $file (@files) {
-
-        $file =~ /\/([^\/]*)$/;
-        $fname = $1;
-        $ENV{'SCRIPT_NAME'} =~ /\/([^\/]*)\//;
-        $lxerp = $1;
-        $link  = "http://" . $ENV{'SERVER_NAME'} . "/" . $lxerp . "/" . $file;
-        $form->{WEBDAV}{$fname} = $link;
-      }
-    }
-  }
-
-  $main::lxdebug->leave_sub();
-}
-
 sub post_payment {
   $main::lxdebug->enter_sub();
 
@@ -1335,6 +1304,8 @@ sub post_payment {
       $form->get_exchangerate($dbh, $form->{currency}, $form->{invdate},
                               "buy");
 
+  my $project_id = conv_i($form->{"globalproject_id"});
+
   # record payments and offsetting AP
   for my $i (1 .. $form->{paidaccounts}) {
 
@@ -1369,11 +1340,11 @@ sub post_payment {
       $dbh->do($query) || $form->dberror($query);
 
       $query = qq|INSERT INTO acc_trans (trans_id, chart_id, amount,
-                  transdate)
+                  transdate, project_id)
                   VALUES ($form->{id}, (SELECT c.id FROM chart c
                                       WHERE c.accno = '$form->{AP}'),
-                  $amount, '$form->{"datepaid_$i"}')|;
-      $dbh->do($query) || $form->dberror($query);
+                  $amount, '$form->{"datepaid_$i"}', ?)|;
+      do_query($form, $dbh, $query, $project_id);
 
 
 
@@ -1382,12 +1353,12 @@ sub post_payment {
       $dbh->do($query) || $form->dberror($query);
 
       $query = qq|INSERT INTO acc_trans (trans_id, chart_id, amount, transdate,
-                  source, memo)
+                  source, memo, project_id)
                   VALUES ($form->{id}, (SELECT c.id FROM chart c
                                      WHERE c.accno = '$accno'),
                  $form->{"paid_$i"}, '$form->{"datepaid_$i"}',
-                 '$form->{"source_$i"}', '$form->{"memo_$i"}')|;
-      $dbh->do($query) || $form->dberror($query);
+                 '$form->{"source_$i"}', '$form->{"memo_$i"}', ?)|;
+      do_query($form, $dbh, $query, $project_id);
 
 
       # gain/loss
@@ -1425,12 +1396,12 @@ sub post_payment {
                                         WHERE c.accno = '$accno') AND amount=$form->{fx}{$accno}{$transdate} AND transdate='$transdate' AND cleared='0' AND fx_transaction='1'|;
         $dbh->do($query) || $form->dberror($query);
         $query = qq|INSERT INTO acc_trans (trans_id, chart_id, amount,
-                   transdate, cleared, fx_transaction)
+                   transdate, cleared, fx_transaction, project_id)
                    VALUES ($form->{id},
                           (SELECT c.id FROM chart c
                            WHERE c.accno = '$accno'),
-                   $form->{fx}{$accno}{$transdate}, '$transdate', '0', '1')|;
-        $dbh->do($query) || $form->dberror($query);
+                   $form->{fx}{$accno}{$transdate}, '$transdate', '0', '1', ?)|;
+        do_query($form, $dbh, $query, $project_id);
       }
     }
   }