X-Git-Url: http://wagnertech.de/git?a=blobdiff_plain;f=SL%2FIC.pm;h=09b9bdbca9f0ef3f28fdd003a227a19c878a3cf3;hb=daaac66a83e3dbdcc910731a1695e7e59b9cbbc6;hp=e25e13e266ef6cec5bf66dd9f8e118a3f46ab4d7;hpb=a87694dc525b4eabff11029f1e5401621e2bd3bc;p=kivitendo-erp.git diff --git a/SL/IC.pm b/SL/IC.pm index e25e13e26..09b9bdbca 100644 --- a/SL/IC.pm +++ b/SL/IC.pm @@ -42,6 +42,7 @@ use SL::CVar; use SL::DBUtils; use SL::HTML::Restrict; use SL::TransNumber; +use SL::Util qw(trim); use strict; @@ -72,6 +73,8 @@ sub get_part { # copy to $form variables map { $form->{$_} = $ref->{$_} } (keys %{$ref}); + $form->{mtime} = $form->{itime} if !$form->{mtime}; + $form->{lastmtime} = $form->{mtime}; $form->{onhand} *= 1; # part or service item @@ -190,8 +193,7 @@ sub get_pricegroups { my $i = 1; foreach my $pg (@{ $pricegroups }) { - $form->{"klass_$i"} = "$pg->{id}"; - $form->{"price_$i"} = $form->format_amount($myconfig, $form->{"price_$i"}, -2); + $form->{"price_$i"} = $form->format_amount($myconfig, $form->{"price_$i"}, -2); $form->{"pricegroup_id_$i"} = "$pg->{id}"; $form->{"pricegroup_$i"} = "$pg->{pricegroup}"; $i++; @@ -259,16 +261,8 @@ sub save { } # get old price - $query = qq|SELECT sellprice, weight FROM parts WHERE id = ?|; - my ($sellprice, $weight) = selectrow_query($form, $dbh, $query, conv_i($form->{id})); - - # if item is part of an assembly adjust all assemblies - $query = qq|SELECT id, qty FROM assembly WHERE parts_id = ?|; - $sth = prepare_execute_query($form, $dbh, $query, conv_i($form->{id})); - while (my ($id, $qty) = $sth->fetchrow_array) { - &update_assembly($dbh, $form, $id, $qty, $sellprice * 1, $weight * 1); - } - $sth->finish; + $query = qq|SELECT sellprice FROM parts WHERE id = ?|; + my ($sellprice) = selectrow_query($form, $dbh, $query, conv_i($form->{id})); # delete makemodel records do_query($form, $dbh, qq|DELETE FROM makemodel WHERE parts_id = ?|, conv_i($form->{id})); @@ -333,7 +327,6 @@ sub save { partnumber = ?, description = ?, makemodel = ?, - alternate = 'f', assembly = ?, listprice = ?, sellprice = ?, @@ -397,6 +390,8 @@ sub save { ); do_query($form, $dbh, $query, @values); + $form->new_lastmtime('parts'); + # delete translation records do_query($form, $dbh, qq|DELETE FROM translation WHERE parts_id = ?|, conv_i($form->{id})); @@ -548,29 +543,6 @@ SQL return $rc; } -sub update_assembly { - $main::lxdebug->enter_sub(); - - my ($dbh, $form, $id, $qty, $sellprice, $weight) = @_; - - my $query = qq|SELECT id, qty FROM assembly WHERE parts_id = ?|; - my $sth = prepare_execute_query($form, $dbh, $query, conv_i($id)); - - while (my ($pid, $aqty) = $sth->fetchrow_array) { - &update_assembly($dbh, $form, $pid, $aqty * $qty, $sellprice, $weight); - } - $sth->finish; - - $query = - qq|UPDATE parts SET sellprice = sellprice + ?, weight = weight + ? - WHERE id = ?|; - my @values = ($qty * ($form->{sellprice} - $sellprice), - $qty * ($form->{weight} - $weight), conv_i($id)); - do_query($form, $dbh, $query, @values); - - $main::lxdebug->leave_sub(); -} - sub retrieve_assemblies { $main::lxdebug->enter_sub(); @@ -584,12 +556,12 @@ sub retrieve_assemblies { if ($form->{partnumber}) { $where .= qq| AND (p.partnumber ILIKE ?)|; - push(@values, '%' . $form->{partnumber} . '%'); + push(@values, like($form->{partnumber})); } if ($form->{description}) { $where .= qq| AND (p.description ILIKE ?)|; - push(@values, '%' . $form->{description} . '%'); + push(@values, like($form->{description})); } # retrieve assembly items @@ -645,7 +617,7 @@ sub assembly_item { while (my ($column, $table) = each(%columns)) { next unless ($form->{"${column}_$i"}); $where .= qq| AND ${table}.${column} ILIKE ?|; - push(@values, '%' . $form->{"${column}_$i"} . '%'); + push(@values, like($form->{"${column}_$i"})); } if ($form->{id}) { @@ -671,7 +643,7 @@ sub assembly_item { my $query = qq|SELECT p.id, p.partnumber, p.description, p.sellprice, p.weight, p.onhand, p.unit, pg.partsgroup, p.lastcost, - p.price_factor_id, pfac.factor AS price_factor + p.price_factor_id, pfac.factor AS price_factor, p.notes as longdescription FROM parts p LEFT JOIN partsgroup pg ON (p.partsgroup_id = pg.id) LEFT JOIN price_factors pfac ON pfac.id = p.price_factor_id @@ -856,18 +828,26 @@ sub all_parts { #===== switches and simple filters ========# # special case transdate - if (grep { $form->{$_} } qw(transdatefrom transdateto)) { + if (grep { trim($form->{$_}) } qw(transdatefrom transdateto)) { $form->{"l_transdate"} = 1; push @select_tokens, 'transdate'; for (qw(transdatefrom transdateto)) { - next unless $form->{$_}; + my $value = trim($form->{$_}); + next unless $value; push @where_tokens, sprintf "transdate %s ?", /from$/ ? '>=' : '<='; - push @bind_vars, $form->{$_}; + push @bind_vars, $value; } } + # special case smart search + if ($form->{all}) { + $form->{"l_$_"} = 1 for qw(partnumber description unit sellprice lastcost cvar_packaging linetotal); + push @where_tokens, "p.partnumber ILIKE ? OR p.description ILIKE ?"; + push @bind_vars, (like($form->{all})) x 2; + } + # special case insertdate - if (grep { $form->{$_} } qw(insertdatefrom insertdateto)) { + if (grep { trim($form->{$_}) } qw(insertdatefrom insertdateto)) { $form->{"l_insertdate"} = 1; push @select_tokens, 'insertdate'; @@ -875,9 +855,10 @@ sub all_parts { my $token = $token_builder->('insertdate'); for (qw(insertdatefrom insertdateto)) { - next unless $form->{$_}; + my $value = trim($form->{$_}); + next unless $value; push @where_tokens, sprintf "$token %s ?", /from$/ ? '>=' : '<='; - push @bind_vars, $form->{$_}; + push @bind_vars, $value; } } @@ -901,7 +882,7 @@ sub all_parts { next unless $form->{$_}; $form->{"l_$_"} = '1'; # show the column push @where_tokens, "$table_prefix{$_}$_ ILIKE ?"; - push @bind_vars, "%$form->{$_}%"; + push @bind_vars, like($form->{$_}); } foreach (@simple_l_switches) { @@ -942,11 +923,11 @@ sub all_parts { # fortunately makemodel doesn't need to be displayed later, so adding a special clause to where_token is sufficient. if ($form->{make}) { push @where_tokens, 'mv.name ILIKE ?'; - push @bind_vars, "%$form->{make}%"; + push @bind_vars, like($form->{make}); } if ($form->{model}) { push @where_tokens, 'mm.model ILIKE ?'; - push @bind_vars, "%$form->{model}%"; + push @bind_vars, like($form->{model}); } # special case: sorting by partnumber @@ -1140,14 +1121,14 @@ sub _create_filter_for_priceupdate { next unless ($form->{$column}); $where .= qq| AND $item ILIKE ?|; - push(@where_values, '%' . $form->{$column} . '%'); + push(@where_values, like($form->{$column})); } foreach my $item (qw(description serialnumber)) { next unless ($form->{$item}); $where .= qq| AND (${item} ILIKE ?)|; - push(@where_values, '%' . $form->{$item} . '%'); + push(@where_values, like($form->{$item})); } @@ -1181,7 +1162,7 @@ sub _create_filter_for_priceupdate { foreach my $column (qw(make model)) { next unless ($form->{$column}); $where .= qq| AND p.id IN (SELECT DISTINCT parts_id FROM makemodel WHERE $column ILIKE ?|; - push(@where_values, '%' . $form->{$column} . '%'); + push(@where_values, like($form->{$column})); } $main::lxdebug->leave_sub(); @@ -1326,7 +1307,7 @@ sub create_links { # connect to database my $dbh = $form->get_standard_dbh; - my @values = ('%' . $module . '%'); + my @values = like($module); my $query; if ($form->{id}) { @@ -1395,15 +1376,15 @@ sub get_parts { if ($sortorder eq "all") { $where .= qq| AND (partnumber ILIKE ?) AND (description ILIKE ?)|; - push(@values, '%' . $form->{partnumber} . '%', '%' . $form->{description} . '%'); + push(@values, like($form->{partnumber}), like($form->{description})); } elsif ($sortorder eq "partnumber") { $where .= qq| AND (partnumber ILIKE ?)|; - push(@values, '%' . $form->{partnumber} . '%'); + push(@values, like($form->{partnumber})); } elsif ($sortorder eq "description") { $where .= qq| AND (description ILIKE ?)|; - push(@values, '%' . $form->{description} . '%'); + push(@values, like($form->{description})); $order = "description"; } @@ -1713,7 +1694,7 @@ sub prepare_parts_for_printing { $sth->finish(); - my @columns = qw(ean image microfiche drawing weight); + my @columns = qw(ean image microfiche drawing); $query = qq|SELECT id, | . join(', ', @columns) . qq| FROM parts @@ -1721,7 +1702,8 @@ sub prepare_parts_for_printing { my %data = selectall_as_map($form, $dbh, $query, 'id', \@columns, @part_ids); - map { $form->{TEMPLATE_ARRAYS}{$_} = [] } (qw(make model), @columns); + my %template_arrays; + map { $template_arrays{$_} = [] } (qw(make model), @columns); foreach my $i (1 .. $rowcount) { my $id = $form->{"${prefix}${i}"}; @@ -1729,16 +1711,16 @@ sub prepare_parts_for_printing { next if (!$id); foreach (@columns) { - push @{ $form->{TEMPLATE_ARRAYS}{$_} }, $data{$id}->{$_}; + push @{ $template_arrays{$_} }, $data{$id}->{$_}; } - push @{ $form->{TEMPLATE_ARRAYS}{make} }, []; - push @{ $form->{TEMPLATE_ARRAYS}{model} }, []; + push @{ $template_arrays{make} }, []; + push @{ $template_arrays{model} }, []; next if (!$makemodel{$id}); foreach my $ref (@{ $makemodel{$id} }) { - map { push @{ $form->{TEMPLATE_ARRAYS}{$_}->[-1] }, $ref->{$_} } qw(make model); + map { push @{ $template_arrays{$_}->[-1] }, $ref->{$_} } qw(make model); } } @@ -1749,9 +1731,10 @@ sub prepare_parts_for_printing { my $id = $form->{"${prefix}${i}"}; next unless $id; - push @{ $form->{TEMPLATE_ARRAYS}{part_type} }, $parts_by_id{$id}->type; + push @{ $template_arrays{part_type} }, $parts_by_id{$id}->type; } + return %template_arrays; $main::lxdebug->leave_sub(); }