USTVA: Taxbird und Winston werden nun beide unterstuetzt. Sie koennen ueber
[kivitendo-erp.git] / SL / IS.pm
index 6656434..7df695e 100644 (file)
--- a/SL/IS.pm
+++ b/SL/IS.pm
@@ -1472,7 +1472,7 @@ sub retrieve_invoice {
 
     # retrieve invoice
     $query = qq|SELECT a.invnumber, a.ordnumber, a.quonumber, a.cusordnumber,
-                a.transdate AS invdate, a.deliverydate, a.paid, a.storno,
+                a.transdate AS invdate, a.deliverydate, a.paid, a.storno, a.gldate,
                 a.shippingpoint, a.shipvia, a.terms, a.notes, a.intnotes, a.taxzone_id,
                a.duedate, a.taxincluded, a.curr AS currency, a.shipto_id, a.cp_id,
                a.employee_id, e.name AS employee, a.payment_id, a.language_id, a.delivery_customer_id, a.delivery_vendor_id, a.type
@@ -1532,12 +1532,12 @@ sub retrieve_invoice {
     $sth->finish;
     map { $form->{$_} =~ s/ +$//g } qw(printed emailed queued);
 
-    my $transdate = "current_date";
-    if($form->{invdate}) {
-     $transdate = "'$form->{invdate}'";
-    }
+    my $transdate =
+      $form->{deliverydate} ? $dbh->quote($form->{deliverydate}) :
+      $form->{invdate} ? $dbh->quote($form->{invdate}) :
+      "current_date";
 
-    if(!$form->{taxzone_id}) {
+    if (!$form->{taxzone_id}) {
       $form->{taxzone_id} = 0;
     }
     # retrieve individual items
@@ -1550,7 +1550,7 @@ sub retrieve_invoice {
                i.project_id, pr.projectnumber, i.serialnumber,
                p.partnumber, p.assembly, p.bin, p.notes AS partnotes, p.inventory_accno_id AS part_inventory_accno_id, i.id AS invoice_pos,
                pg.partsgroup, i.pricegroup_id, (SELECT pricegroup FROM pricegroup WHERE id=i.pricegroup_id) as pricegroup,
-               i.ordnumber, i.transdate, i.cusordnumber, p.alu, p.formel, i.subtotal
+               i.ordnumber, i.transdate, i.cusordnumber, p.formel, i.subtotal
                FROM invoice i
                JOIN parts p ON (i.parts_id = p.id)
                LEFT JOIN project pr ON (i.project_id = pr.id)
@@ -1570,9 +1570,6 @@ sub retrieve_invoice {
       }
       delete($ref->{"part_inventory_accno_id"});
 
-      #set expense_accno=inventory_accno if they are different => bilanz
-
-
     while ($ref->{inventory_new_chart} && ($ref->{inventory_valid} >=0)) {
       my $query = qq| SELECT accno AS inventory_accno, new_chart_id AS inventory_new_chart, date($transdate) - valid_from AS inventory_valid FROM chart WHERE id = $ref->{inventory_new_chart}|;
       my $stw = $dbh->prepare($query);
@@ -1597,18 +1594,13 @@ sub retrieve_invoice {
       $stw->finish;
     }
 
-      $vendor_accno =
-        ($ref->{expense_accno} != $ref->{inventory_accno})
-        ? $ref->{inventory_accno}
-        : $ref->{expense_accno};
-
       # get tax rates and description
       $accno_id =
-        ($form->{vc} eq "customer") ? $ref->{income_accno} : $vendor_accno;
-      $query = qq|SELECT c.accno, t.taxdescription, t.rate, t.taxnumber
-                FROM tax t LEFT join chart c ON (c.id=t.chart_id)
-                WHERE t.taxkey in (SELECT taxkey_id from chart where accno = '$accno_id')
-                ORDER BY accno|;
+        ($form->{vc} eq "customer") ? $ref->{income_accno} : $ref->{expense_accno};
+    $query = qq|SELECT c.accno, t.taxdescription, t.rate, t.taxnumber
+             FROM tax t LEFT JOIN chart c on (c.id=t.chart_id)
+             WHERE t.id in (SELECT tk.tax_id from taxkeys tk where tk.chart_id = (SELECT id from chart WHERE accno='$accno_id') AND startdate<=$transdate ORDER BY startdate desc LIMIT 1)
+             ORDER BY c.accno|;
       $stw = $dbh->prepare($query);
       $stw->execute || $form->dberror($query);
       $ref->{taxaccounts} = "";
@@ -1806,7 +1798,7 @@ sub get_customer {
   $sth->finish;
 
   # get shipping addresses
-  $query = qq|SELECT s.id,s.shiptoname
+  $query = qq|SELECT s.shipto_id,s.shiptoname,s.shiptodepartment_1
               FROM shipto s
              WHERE s.trans_id = $form->{customer_id}|;
   $sth = $dbh->prepare($query);
@@ -1856,6 +1848,9 @@ sub retrieve_item {
 
   my ($self, $myconfig, $form) = @_;
 
+  # connect to database
+  my $dbh = $form->dbconnect($myconfig);
+
   my $i = $form->{rowcount};
 
   my $where = "NOT p.obsolete = '1'";
@@ -1880,35 +1875,30 @@ sub retrieve_item {
     $where .= " ORDER BY p.partnumber";
   }
 
-  my $transdate = "";
+  my $transdate;
   if ($form->{type} eq "invoice") {
-    $transdate = "'$form->{invdate}'";
-  } elsif ($form->{type} eq "sales_order") {
-    $transdate = "'$form->{transdate}'";
-  } elsif ($form->{type} eq "sales_quotation") {
-    $transdate = "'$form->{transdate}'";
-  }
-
-  if ($transdate eq "") {
-    $transdate = "current_date";
+    $transdate =
+      $form->{deliverydate} ? $dbh->quote($form->{deliverydate}) :
+      $form->{invdate} ? $dbh->quote($form->{invdate}) :
+      "current_date";
+  } else {
+    $transdate =
+      $form->{transdate} ? $dbh->quote($form->{transdate}) :
+      "current_date";
   }
 
-  # connect to database
-  my $dbh = $form->dbconnect($myconfig);
-
   my $query = qq|SELECT p.id, p.partnumber, p.description, p.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,
                        c3.accno AS expense_accno, c3.new_chart_id AS expense_new_chart, date($transdate) - c3.valid_from as expense_valid,
                 p.unit, p.assembly, p.bin, p.onhand, p.notes AS partnotes, p.notes AS longdescription, p.not_discountable,
-                pg.partsgroup, p.formel, p.alu, p.payment_id AS part_payment_id, adr.adr_description
+                pg.partsgroup, p.formel, p.payment_id AS part_payment_id
                  FROM parts p
                 LEFT JOIN chart c1 ON ((select inventory_accno_id from buchungsgruppen where id=p.buchungsgruppen_id) = c1.id)
                 LEFT JOIN chart c2 ON ((select income_accno_id_$form->{taxzone_id} from buchungsgruppen where id=p.buchungsgruppen_id) = c2.id)
                 LEFT JOIN chart c3 ON ((select expense_accno_id_$form->{taxzone_id} from buchungsgruppen where id=p.buchungsgruppen_id) = c3.id)
                 LEFT JOIN partsgroup pg ON (pg.id = p.partsgroup_id)
-                 LEFT JOIN adr adr ON (adr.id = p.adr_id)
                 WHERE $where|;
   my $sth = $dbh->prepare($query);
   $sth->execute || $form->dberror($query);
@@ -1962,18 +1952,12 @@ sub retrieve_item {
       }
     }
 
-
-    $vendor_accno =
-      ($ref->{expense_accno} != $ref->{inventory_accno})
-      ? $ref->{inventory_accno}
-      : $ref->{expense_accno};
-
     # get tax rates and description
     $accno_id =
-      ($form->{vc} eq "customer") ? $ref->{income_accno} : $vendor_accno;
+      ($form->{vc} eq "customer") ? $ref->{income_accno} : $ref->{expense_accno};
     $query = qq|SELECT c.accno, t.taxdescription, t.rate, t.taxnumber
              FROM tax t LEFT JOIN chart c on (c.id=t.chart_id)
-             WHERE t.taxkey in (SELECT c2.taxkey_id from chart c2 where c2.accno = '$accno_id')
+             WHERE t.id in (SELECT tk.tax_id from taxkeys tk where tk.chart_id = (SELECT id from chart WHERE accno='$accno_id') AND startdate<=$transdate ORDER BY startdate desc LIMIT 1)
              ORDER BY c.accno|;
     $stw = $dbh->prepare($query);
     $stw->execute || $form->dberror($query);