Lagerbestandswert zum Lagerbericht ergänzt.
authorMoritz Bunkus <m.bunkus@linet-services.de>
Fri, 12 Dec 2008 15:43:41 +0000 (15:43 +0000)
committerMoritz Bunkus <m.bunkus@linet-services.de>
Fri, 12 Dec 2008 15:43:41 +0000 (15:43 +0000)
SL/WH.pm
bin/mozilla/wh.pl
locale/de/all
locale/de/wh
templates/webpages/wh/report_filter_de.html
templates/webpages/wh/report_filter_master.html

index 70f1037..3428b91 100644 (file)
--- a/SL/WH.pm
+++ b/SL/WH.pm
@@ -433,6 +433,7 @@ sub get_warehouse_report {
      "chargeid"             => "c.id",
      "warehousedescription" => "w.description",
      "partunit"             => "p.unit",
+     "stock_value"          => "p.lastcost / COALESCE(pfac.factor, 1)",
   );
   my $select_clause = join ', ', map { +/^l_/; "$select_tokens{$'} AS $'" }
         ( grep( { !/qty/ and /^l_/ and $form->{$_} eq 'Y' } keys %$form),
@@ -442,6 +443,14 @@ sub get_warehouse_report {
         ( grep( { !/qty/ and /^l_/ and $form->{$_} eq 'Y' } keys %$form),
           qw(l_parts_id l_partunit) );
 
+  my %join_tokens = (
+    "stock_value" => "LEFT JOIN price_factors pfac ON (p.price_factor_id = pfac.id)",
+    );
+
+  my $joins = join ' ', grep { $_ } map { +/^l_/; $join_tokens{"$'"} }
+        ( grep( { !/qty/ and /^l_/ and $form->{$_} eq 'Y' } keys %$form),
+          qw(l_parts_id l_qty l_partunit) );
+
   my $query =
     qq|SELECT $select_clause
       $columns
@@ -449,6 +458,7 @@ sub get_warehouse_report {
       LEFT JOIN parts     p ON i.parts_id     = p.id
       LEFT JOIN bin       b ON i.bin_id       = b.id
       LEFT JOIN warehouse w ON i.warehouse_id = w.id
+      $joins
       WHERE $where_clause
       GROUP BY $group_clause $group_by
       ORDER BY $form->{sort}|;
@@ -477,6 +487,8 @@ sub get_warehouse_report {
       @all_fields                    = keys %{ $ref } unless (@all_fields);
     }
 
+    $ref->{stock_value} *= $ref->{qty};
+
     push @contents, $ref;
   }
 
index 5326cfb..415ed39 100644 (file)
@@ -625,7 +625,7 @@ sub generate_report {
   my $sort_col     = $form->{sort};
 
   my %filter;
-  my @columns = qw(warehousedescription bindescription partnumber partdescription chargenumber qty);
+  my @columns = qw(warehousedescription bindescription partnumber partdescription chargenumber qty stock_value);
 
   # filter stuff
   map { $filter{$_} = $form->{$_} if ($form->{$_}) } qw(warehouse_id bin_id partnumber description chargenumber);
@@ -655,12 +655,13 @@ sub generate_report {
     'partdescription'      => { 'text' => $locale->text('Description'), },
     'chargenumber'         => { 'text' => $locale->text('Charge Number'), },
     'qty'                  => { 'text' => $locale->text('Qty'), },
+    'stock_value'          => { 'text' => $locale->text('Stock value'), },
   );
 
   my $href = build_std_url('action=generate_report', grep { $form->{$_} } @hidden_variables);
   map { $column_defs{$_}->{link} = $href . "&sort=${_}&order=" . Q($_ eq $sort_col ? 1 - $form->{order} : $form->{order}) } @columns;
 
-  my %column_alignment = map { $_ => 'right' } qw(qty);
+  my %column_alignment = map { $_ => 'right' } qw(qty stock_value);
 
   map { $column_defs{$_}->{visible} = $form->{"l_${_}"} ? 1 : 0 } @columns;
 
@@ -679,14 +680,21 @@ sub generate_report {
   my $all_units = AM->retrieve_units(\%myconfig, $form);
   my @contents  = WH->get_warehouse_report(%filter);
 
-  my $subtotal  = 0;
   my $idx       = 0;
 
+  my @subtotals_columns = qw(qty stock_value);
+  my %subtotals         = map { $_ => 0 } @subtotals_columns;
+
+  my $total_stock_value = 0;
+
   foreach $entry (@contents) {
-    $subtotal     += $entry->{qty};
-    $entry->{qty}  = $form->format_amount_units('amount'     => $entry->{qty},
-                                                'part_unit'  => $entry->{partunit},
-                                                'conv_units' => 'convertible');
+    map { $subtotals{$_} += $entry->{$_} } @subtotals_columns;
+    $total_stock_value   += $entry->{stock_value} * 1;
+
+    $entry->{qty}         = $form->format_amount_units('amount'     => $entry->{qty},
+                                                       'part_unit'  => $entry->{partunit},
+                                                       'conv_units' => 'convertible');
+    $entry->{stock_value} = $form->format_amount(\%myconfig, $entry->{stock_value} * 1, 2);
 
     $row_set = [ { map { $_ => { 'data' => $entry->{$_}, 'align' => $column_alignment{$_} } } @columns } ];
 
@@ -695,10 +703,12 @@ sub generate_report {
             || ($entry->{$sort_col} ne $contents[$idx + 1]->{$sort_col}))) {
 
       my $row = { map { $_ => { 'data' => '', 'class' => 'listsubtotal', 'align' => $column_alignment{$_}, } } @columns };
-      $row->{qty}->{data} = $form->format_amount_units('amount'     => $subtotal,
-                                                       'part_unit'  => $entry->{partunit},
-                                                       'conv_units' => 'convertible');
-      $subtotal = 0;
+      $row->{qty}->{data}         = $form->format_amount_units('amount'     => $subtotals{qty} * 1,
+                                                               'part_unit'  => $entry->{partunit},
+                                                               'conv_units' => 'convertible');
+      $row->{stock_value}->{data} = $form->format_amount(\%myconfig, $subtotals{stock_value} * 1, 2);
+
+      %subtotals                  = map { $_ => 0 } @subtotals_columns;
 
       push @{ $row_set }, $row;
     }
@@ -708,6 +718,20 @@ sub generate_report {
     $idx++;
   }
 
+  if ($column_defs{stock_value}->{visible}) {
+    $report->add_separator();
+
+    my $row                      = { map { $_ => { 'data' => '', 'class' => 'listsubtotal', } } @columns };
+
+    my $left_col                 = first { $column_defs{$_}->{visible} } @columns;
+
+    $row->{$left_col}->{data}    = $locale->text('Total stock value');
+    $row->{stock_value}->{data}  = $form->format_amount(\%myconfig, $total_stock_value, 2);
+    $row->{stock_value}->{align} = 'right';
+
+    $report->add_data($row);
+  }
+
   $report->generate_with_headers();
 
   $lxdebug->leave_sub();
index b246280..e1a346d 100644 (file)
@@ -1299,6 +1299,7 @@ $self->{texts} = {
   'Step 3 of 3: Default units'  => 'Schritt 3 von 3: Standardeinheiten',
   'Steuersatz'                  => 'Steuersatz',
   'Stock'                       => 'Einlagern',
+  'Stock value'                 => 'Bestandswert',
   'Storno'                      => 'Storno',
   'Storno (one letter abbreviation)' => 'S',
   'Storno Invoice'              => 'Stornorechnung',
@@ -1498,6 +1499,7 @@ $self->{texts} = {
   'Top Level'                   => 'Hauptartikelbezeichnung',
   'Total'                       => 'Summe',
   'Total Fees'                  => 'Kumulierte Gebühren',
+  'Total stock value'           => 'Gesamter Bestandswert',
   'Trade Discount'              => 'Rabatt',
   'Trans Id'                    => 'Trans-ID',
   'Trans Type'                  => 'Transfertyp',
index 05cb260..3692845 100644 (file)
@@ -124,6 +124,7 @@ $self->{texts} = {
   'Select a part'               => 'Artikel ausw&auml;hlen',
   'Select a vendor'             => 'Einen Lieferanten ausw&auml;hlen',
   'Stock'                       => 'Einlagern',
+  'Stock value'                 => 'Bestandswert',
   'Storno Invoice'              => 'Stornorechnung',
   'Storno Packing List'         => 'Stornolieferschein',
   'Subject'                     => 'Betreff',
@@ -147,6 +148,7 @@ $self->{texts} = {
   'The warehouse or the bin is missing.' => 'Das Lager oder der Lagerplatz fehlen.',
   'There is not enough left of \'#1\' in bin \'#2\' for the removal of #3.' => 'In Lagerplatz \'#2\' ist nicht genug von \'#1\' vorhanden, um #3 zu entnehmen.',
   'To (email)'                  => 'An',
+  'Total stock value'           => 'Gesamter Bestandswert',
   'Trans Id'                    => 'Trans-ID',
   'Trans Type'                  => 'Transfertyp',
   'Transactions, AR transactions, AP transactions' => 'Dialogbuchen, Debitorenrechnungen, Kreditorenrechnungen',
index c59a874..c399e6c 100644 (file)
         <td align="right"><input name="include_empty_bins" id="include_empty_bins" class="checkbox" type="checkbox" value="Y"></td>
         <td nowrap><label for="include_empty_bins">Leere Lagerpl&auml;tze anzeigen</label></td>
        </tr>
+
+       <tr>
+        <td align="right"><input name="l_stock_value" id="l_stock_value" class="checkbox" type="checkbox" value="Y"></td>
+        <td nowrap><label for="l_stock_value">Bestandswert</label></td>
+       </tr>
+
       </table>
      </td>
     </tr>
index 860b4e1..30a9e52 100644 (file)
         <td align="right"><input name="include_empty_bins" id="include_empty_bins" class="checkbox" type="checkbox" value="Y"></td>
         <td nowrap><label for="include_empty_bins"><translate>Include empty bins</translate></label></td>
        </tr>
+
+       <tr>
+        <td align="right"><input name="l_stock_value" id="l_stock_value" class="checkbox" type="checkbox" value="Y"></td>
+        <td nowrap><label for="l_stock_value"><translate>Stock value</translate></label></td>
+       </tr>
+
       </table>
      </td>
     </tr>