Revision 82498fb7
Von Moritz Bunkus vor etwa 16 Jahren hinzugefügt
SL/WH.pm | ||
---|---|---|
"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),
|
||
... | ... | |
( 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
|
||
... | ... | |
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}|;
|
||
... | ... | |
@all_fields = keys %{ $ref } unless (@all_fields);
|
||
}
|
||
|
||
$ref->{stock_value} *= $ref->{qty};
|
||
|
||
push @contents, $ref;
|
||
}
|
||
|
bin/mozilla/wh.pl | ||
---|---|---|
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);
|
||
... | ... | |
'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;
|
||
|
||
... | ... | |
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 } ];
|
||
|
||
... | ... | |
|| ($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;
|
||
}
|
||
... | ... | |
$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();
|
locale/de/all | ||
---|---|---|
'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',
|
||
... | ... | |
'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',
|
locale/de/wh | ||
---|---|---|
'Select a part' => 'Artikel auswählen',
|
||
'Select a vendor' => 'Einen Lieferanten auswählen',
|
||
'Stock' => 'Einlagern',
|
||
'Stock value' => 'Bestandswert',
|
||
'Storno Invoice' => 'Stornorechnung',
|
||
'Storno Packing List' => 'Stornolieferschein',
|
||
'Subject' => 'Betreff',
|
||
... | ... | |
'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',
|
templates/webpages/wh/report_filter_de.html | ||
---|---|---|
<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ä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>
|
templates/webpages/wh/report_filter_master.html | ||
---|---|---|
<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>
|
Auch abrufbar als: Unified diff
Lagerbestandswert zum Lagerbericht ergänzt.