Verkaufsbericht filtert und sortiert jetzt nach Artikelbeschreibung laut Stammdaten
authorG. Richardson <information@kivitendo-premium.de>
Mon, 6 May 2013 14:12:32 +0000 (16:12 +0200)
committerG. Richardson <information@kivitendo-premium.de>
Tue, 7 May 2013 11:33:51 +0000 (13:33 +0200)
... wenn Haupt- oder Nebensortierung Artikelbeschreibung ist.

Kurzzusammenfassung:
* Überschriften und Summenzeilen zeigen parts.description
* Einzelzeilen im Artikelmodus zeigen invoice.description

Man hat in den Belegen bei Artikeln die Möglichkeit die
Artikelbeschreibungen zu ändern. Auch wenn man Artikelbeschreibungen in
mehreren Sprachen pflegt kann die Artikelbeschreibung von der
Artikelbeschreibung in den Stammdaten abweichen. Da der Verkaufsbericht
bisher nach der dynamischen Artikelbeschreibung gruppiert hat, konnte man
diese Artikel nicht alle zusammen gruppieren und deren Summen und
Durchschnittswerte zusammen sehen.
Im Artikelmodus wird aber weiterhin die dynamische Artikelbeschreibung
für jeden Artikel angezeigt, in dem diese jeweils überschrieben wird.

Schlecht ist die Änderungen für Benutzer, die generische Artikel anlegen
und immer nur die Artikelbeschreibung ändern, und diese im
Verkaufsbericht anhand der dynamischen Artikelbeschreibung unterscheiden
wollen, dies geht nun so nicht mehr. Für diesen Fall müßte man einen
Schalter einbauen.

SL/VK.pm
bin/mozilla/vk.pl

index c373a19..2c0ce67 100644 (file)
--- a/SL/VK.pm
+++ b/SL/VK.pm
@@ -50,8 +50,12 @@ sub invoice_transactions {
 
   my @values;
 
+  # default usage: always use parts.description for (sub-)totalling and in header and subheader lines
+  # but use invoice.description in article mode
+  # so we extract both versions in our query and later overwrite the description in article mode
+
   my $query =
-    qq|SELECT ct.id as customerid, ct.name as customername,ct.customernumber,ct.country,ar.invnumber,ar.id,ar.transdate,p.partnumber,pg.partsgroup,i.parts_id,i.qty,i.price_factor,i.discount,i.description as description,i.lastcost,i.sellprice,i.fxsellprice,i.marge_total,i.marge_percent,i.unit,b.description as business,e.name as employee,e2.name as salesman, to_char(ar.transdate,'Month') as month, to_char(ar.transdate, 'YYYYMM') as nummonth, p.unit as parts_unit, p.weight | .
+    qq|SELECT ct.id as customerid, ct.name as customername,ct.customernumber,ct.country,ar.invnumber,ar.id,ar.transdate,p.partnumber,p.description as description, pg.partsgroup,i.parts_id,i.qty,i.price_factor,i.discount,i.description as invoice_description,i.lastcost,i.sellprice,i.fxsellprice,i.marge_total,i.marge_percent,i.unit,b.description as business,e.name as employee,e2.name as salesman, to_char(ar.transdate,'Month') as month, to_char(ar.transdate, 'YYYYMM') as nummonth, p.unit as parts_unit, p.weight | .
     qq|FROM invoice i | .
     qq|JOIN ar on (i.trans_id = ar.id) | .
     qq|JOIN parts p on (i.parts_id = p.id) | .
@@ -122,9 +126,12 @@ sub invoice_transactions {
     $where .= qq| AND (ct.country ILIKE ?)|;
     push(@values, '%' . $form->{country} . '%');
   }
-  # nimmt man description am Besten aus invoice oder parts?
+
+  # when filtering for parts by description we probably want to filter by the description of the part as per the master data
+  # invoice.description may differ due to manually changing the description in the invoice or because of translations of the description
+  # at least in the translation case we probably want the report to also include translated articles, so we have to filter via parts.description
   if ($form->{description}) {
-    $where .= qq| AND (i.description ILIKE ?)|;
+    $where .= qq| AND (p.description ILIKE ?)|;
     push(@values, '%' . $form->{description} . '%');
   }
   if ($form->{transdatefrom}) {
index 87805f3..a60d430 100644 (file)
@@ -407,6 +407,9 @@ sub invoice_transactions {
 
       $row{invnumber}->{link} = build_std_url("script=is.pl", 'action=edit') . "&id=" . E($ar->{id}) . "&callback=${callback}";
 
+      # use partdescription according to invoice in article mode
+      $row{description}->{data} = $ar->{invoice_description};
+
       $report->add_data(\%row);
     }