X-Git-Url: http://wagnertech.de/git?a=blobdiff_plain;f=SL%2FIC.pm;h=0256e3d9c546256bc6e8fd3d6e6a0a8e8d85c10f;hb=2508bbb1ab2056ec40635f4dda1c7023a5f3254f;hp=9cd3ed740c1ca5b89293db0a7473a2354494733e;hpb=4ee4b7ff5eac745c87b85004a1f63ff13e09f6c9;p=kivitendo-erp.git diff --git a/SL/IC.pm b/SL/IC.pm index 9cd3ed740..0256e3d9c 100644 --- a/SL/IC.pm +++ b/SL/IC.pm @@ -35,7 +35,7 @@ package IC; use Data::Dumper; -use List::MoreUtils qw(all any); +use List::MoreUtils qw(all any uniq); use YAML; use SL::CVar; @@ -497,8 +497,8 @@ sub save { if (($form->{"make_$i"}) || ($form->{"model_$i"})) { $query = qq|INSERT INTO makemodel (parts_id, make, model) | . - qq|VALUES (?, ?, ?)|; - @values = (conv_i($form->{id}), conv_i($form->{"make_$i"}), $form->{"model_$i"}); + qq|VALUES (?, ?, ?)|; + @values = (conv_i($form->{id}), conv_i($form->{"make_$i"}), $form->{"model_$i"}); do_query($form, $dbh, $query, @values); } @@ -511,7 +511,7 @@ sub save { $query = qq|INSERT INTO partstax (parts_id, chart_id) VALUES (?, (SELECT id FROM chart WHERE accno = ?))|; - @values = (conv_i($form->{id}), $item); + @values = (conv_i($form->{id}), $item); do_query($form, $dbh, $query, @values); } } @@ -525,8 +525,8 @@ sub save { if ($form->{"qty_$i"} != 0) { $form->{"bom_$i"} *= 1; $query = qq|INSERT INTO assembly (id, parts_id, qty, bom) | . - qq|VALUES (?, ?, ?, ?)|; - @values = (conv_i($form->{id}), conv_i($form->{"id_$i"}), conv_i($form->{"qty_$i"}), $form->{"bom_$i"} ? 't' : 'f'); + qq|VALUES (?, ?, ?, ?)|; + @values = (conv_i($form->{id}), conv_i($form->{"id_$i"}), conv_i($form->{"qty_$i"}), $form->{"bom_$i"} ? 't' : 'f'); do_query($form, $dbh, $query, @values); } } @@ -799,9 +799,9 @@ sub all_parts { ) AS ioi ON ioi.parts_id = p.id|, apoe => q|LEFT JOIN ( - SELECT id, transdate, 'ir' AS module, ordnumber, quonumber, invnumber, FALSE AS quotation, NULL AS customer_id, vendor_id, NULL AS deliverydate, 'invoice' AS ioi FROM ap UNION - SELECT id, transdate, 'is' AS module, ordnumber, quonumber, invnumber, FALSE AS quotation, customer_id, NULL AS vendor_id, deliverydate, 'invoice' AS ioi FROM ar UNION - SELECT id, transdate, 'oe' AS module, ordnumber, quonumber, NULL AS invnumber, quotation, customer_id, vendor_id, NULL AS deliverydate, 'orderitems' AS ioi FROM oe + SELECT id, transdate, 'ir' AS module, ordnumber, quonumber, invnumber, FALSE AS quotation, NULL AS customer_id, vendor_id, NULL AS deliverydate, 'invoice' AS ioi FROM ap UNION + SELECT id, transdate, 'is' AS module, ordnumber, quonumber, invnumber, FALSE AS quotation, customer_id, NULL AS vendor_id, deliverydate, 'invoice' AS ioi FROM ar UNION + SELECT id, transdate, 'oe' AS module, ordnumber, quonumber, NULL AS invnumber, quotation, customer_id, vendor_id, reqdate AS deliverydate, 'orderitems' AS ioi FROM oe ) AS apoe ON ((ioi.trans_id = apoe.id) AND (ioi.ioi = apoe.ioi))|, cv => q|LEFT JOIN ( @@ -818,7 +818,7 @@ sub all_parts { ordnumber => 'apoe.', make => 'mm.', quonumber => 'apoe.', model => 'mm.', invnumber => 'apoe.', partsgroup => 'pg.', - lastcost => ' ', + lastcost => ' ', , soldtotal => ' ', factor => 'pfac.', 'SUM(ioi.qty)' => ' ', description => 'p.', @@ -937,7 +937,9 @@ sub all_parts { #my $order_clause = " ORDER BY $form->{sort} $sort_order"; - my $limit_clause = " LIMIT 100" if $form->{top100}; + my $limit_clause; + $limit_clause = " LIMIT 100" if $form->{top100}; + $limit_clause = " LIMIT " . $form->{limit} * 1 if $form->{limit} * 1; #=== joins and complicated filters ========# @@ -983,7 +985,7 @@ sub all_parts { # now the master trick: soldtotal. if ($form->{l_soldtotal}) { - push @where_tokens, 'ioi.qty >= 0'; + push @where_tokens, 'NOT ioi.qty = 0'; push @group_tokens, @select_tokens; map { s/.*\sAS\s+//si } @group_tokens; push @select_tokens, 'SUM(ioi.qty)'; @@ -1003,9 +1005,21 @@ sub all_parts { my $where_clause = join ' AND ', map { "($_)" } @where_tokens; my $group_clause = ' GROUP BY ' . join ', ', map { $token_builder->($_) } @group_tokens if scalar @group_tokens; - my ($cvar_where, @cvar_values) = CVar->build_filter_query('module' => 'IC', - 'trans_id_field' => 'p.id', - 'filter' => $form); + my %oe_flag_to_cvar = ( + bought => 'invoice', + sold => 'invoice', + onorder => 'orderitems', + ordered => 'orderitems', + rfq => 'orderitems', + quoted => 'orderitems', + ); + + my ($cvar_where, @cvar_values) = CVar->build_filter_query( + module => 'IC', + trans_id_field => $bsooqr ? 'ioi.id': 'p.id', + filter => $form, + sub_module => $bsooqr ? [ uniq grep { $oe_flag_to_cvar{$form->{$_}} } @oe_flags ] : undef, + ); if ($cvar_where) { $where_clause .= qq| AND ($cvar_where)|; @@ -1060,6 +1074,8 @@ sub all_parts { } $main::lxdebug->leave_sub(); + + return wantarray ? @{ $form->{parts} } : $form->{parts}; } sub _create_filter_for_priceupdate {