9 |
9 |
use SL::Controller::Helper::GetModels;
|
10 |
10 |
use SL::Controller::Helper::ReportGenerator;
|
11 |
11 |
use SL::Locale::String;
|
|
12 |
use SL::Helper::ShippedQty;
|
12 |
13 |
use SL::AM;
|
13 |
14 |
use SL::DBUtils ();
|
14 |
15 |
use Carp;
|
... | ... | |
37 |
38 |
netto_shipped_qty => t8('Net Value in delivery orders'),
|
38 |
39 |
delivered_qty => t8('transferred in / out'),
|
39 |
40 |
netto_delivered_qty => t8('Net value transferred in / out'),
|
40 |
|
do_closed_qty => t8('Qty in closed delivery orders'),
|
41 |
|
netto_do_closed_qty => t8('Net value in closed delivery orders')
|
42 |
41 |
);
|
43 |
42 |
|
44 |
43 |
|
... | ... | |
69 |
68 |
|
70 |
69 |
my @columns = qw(reqdate customer vendor ordnumber partnumber description unit qty netto_qty
|
71 |
70 |
not_shipped_qty netto_not_shipped_qty shipped_qty netto_shipped_qty delivered_qty
|
72 |
|
netto_delivered_qty do_closed_qty netto_do_closed_qty);
|
|
71 |
netto_delivered_qty);
|
73 |
72 |
|
74 |
73 |
|
75 |
74 |
my @sortable = qw(reqdate customer vendor ordnumber partnumber description);
|
... | ... | |
103 |
102 |
$_[0]{shipped_qty} - $_[0]{delivered_qty} - $_[0]{do_closed_qty})
|
104 |
103 |
* ($_[0]->sellprice * (1 - $_[0]->discount) /
|
105 |
104 |
($_[0]->price_factor || 1)), 2)) },},
|
106 |
|
do_closed_qty => { sub => sub { $::form->format_amount(\%::myconfig, $_[0]{do_closed_qty}, 2) .
|
107 |
|
($rp_csv_mod ? '' : ' ' . $_[0]->unit) },},
|
108 |
|
netto_do_closed_qty => { sub => sub { $::form->format_amount(\%::myconfig, $_[0]{netto_do_closed_qty}, 2) },},
|
109 |
105 |
ordnumber => { sub => sub { $_[0]->order->ordnumber },
|
110 |
106 |
obj_link => sub { $self->link_to($_[0]->order) } },
|
111 |
107 |
vendor => { sub => sub { $_[0]->order->vendor->name },
|
... | ... | |
255 |
251 |
|
256 |
252 |
sub calc_qtys_price {
|
257 |
253 |
my ($self, $orderitems) = @_;
|
258 |
|
# using $orderitem->shipped_qty 40 times is far too slow. need to do it manually
|
259 |
|
# also for calc net values
|
260 |
254 |
|
261 |
255 |
return unless scalar @$orderitems;
|
262 |
256 |
|
263 |
|
my %orderitems_by_id = map { $_->id => $_ } @$orderitems;
|
|
257 |
SL::Helper::ShippedQty
|
|
258 |
->new(require_stock_out => 1)
|
|
259 |
->calculate($orderitems)
|
|
260 |
->write_to_objects;
|
264 |
261 |
|
265 |
|
my $query = <<SQL;
|
266 |
|
SELECT oi.id, doi.qty, doi.unit, doe.delivered, doe.closed,
|
267 |
|
oi.sellprice, oi.discount, oi.price_factor
|
268 |
|
FROM record_links rl
|
269 |
|
INNER JOIN delivery_order_items doi ON (doi.id = rl.to_id)
|
270 |
|
INNER JOIN orderitems oi ON (oi.id = rl.from_id)
|
271 |
|
INNER JOIN delivery_orders doe ON (doe.id = doi.delivery_order_id)
|
272 |
|
WHERE rl.from_table = 'orderitems'
|
273 |
|
AND rl.to_table = 'delivery_order_items'
|
274 |
|
AND oi.id IN (@{[ join ', ', ("?")x @$orderitems ]})
|
275 |
|
SQL
|
276 |
|
|
277 |
|
my $result = SL::DBUtils::selectall_hashref_query($::form, $::form->get_standard_dbh, $query, map { $_->id } @$orderitems);
|
278 |
|
|
279 |
|
for my $row (@$result) {
|
280 |
|
my $item = $orderitems_by_id{ $row->{id} };
|
281 |
|
$item->{shipped_qty} ||= 0;
|
282 |
|
$item->{delivered_qty} ||= 0;
|
283 |
|
$item->{do_closed_qty} ||= 0;
|
284 |
|
$item->{shipped_qty} += AM->convert_unit($row->{unit} => $item->unit) * $row->{qty} unless ($row->{delivered} || $row->{closed});
|
285 |
|
$item->{delivered_qty} += AM->convert_unit($row->{unit} => $item->unit) * $row->{qty} if ($row->{delivered} && !$row->{closed});
|
286 |
|
$item->{do_closed_qty} += AM->convert_unit($row->{unit} => $item->unit) * $row->{qty} if ($row->{closed});
|
287 |
|
$item->{not_shipped_qty} += AM->convert_unit($row->{unit} => $item->unit) * $row->{qty} unless ($row->{delivered});
|
288 |
|
|
289 |
|
my $price_factor = $row->{price_factor} || 1;
|
290 |
|
$item->{netto_shipped_qty} = $item->{shipped_qty} * $row->{sellprice} * (1 - $row->{discount} ) / $price_factor;
|
291 |
|
$item->{netto_delivered_qty} = $item->{delivered_qty} * $row->{sellprice} * (1 - $row->{discount} ) / $price_factor;
|
292 |
|
$item->{netto_do_closed_qty} = $item->{do_closed_qty} * $row->{sellprice} * (1 - $row->{discount} ) / $price_factor;
|
|
262 |
$_->{delivered_qty} = delete $_->{shipped_qty} for @$orderitems;
|
|
263 |
|
|
264 |
SL::Helper::ShippedQty
|
|
265 |
->new(require_stock_out => 0)
|
|
266 |
->calculate($orderitems)
|
|
267 |
->write_to_objects;
|
|
268 |
|
|
269 |
for my $item (@$orderitems) {
|
|
270 |
$item->{not_shipped_qty} = $item->qty - $item->{shipped_qty};
|
293 |
271 |
|
|
272 |
my $price_factor = $item->price_factor || 1;
|
|
273 |
$item->{netto_shipped_qty} = $item->{shipped_qty} * $item->sellprice * (1 - $item->discount) / $price_factor;
|
|
274 |
$item->{netto_delivered_qty} = $item->{delivered_qty} * $item->sellprice * (1 - $item->discount) / $price_factor;
|
294 |
275 |
}
|
295 |
276 |
}
|
296 |
277 |
|
DeliveryValueReport: Auf ShppedQty Helper umgestellt.
Leider fällt geht dabei die Information verloren, wieviel davon in
geschlossenen Lieferscheinen ist. Wenn benötigt, muss das nachgebaut
werden.