X-Git-Url: http://wagnertech.de/git?a=blobdiff_plain;f=SL%2FCT.pm;h=416ed6871001282cfcab38cec01ec2ad83f3012f;hb=44fb4fe8d98ced50689764dab64b4633016c9fe0;hp=cdf274b712dce558b15523c9e37ff2eeb8d9a0e8;hpb=59ab5cb4a0a8a650f74c43a23002e3f9f3028c67;p=kivitendo-erp.git diff --git a/SL/CT.pm b/SL/CT.pm index cdf274b71..416ed6871 100644 --- a/SL/CT.pm +++ b/SL/CT.pm @@ -40,6 +40,7 @@ package CT; use SL::Common; use SL::CVar; use SL::DBUtils; +use Text::ParseWords; use strict; @@ -75,6 +76,7 @@ sub search { "zipcode" => "ct.zipcode", "city" => "ct.city", "country" => "ct.country", + "gln" => "ct.gln", "discount" => "ct.discount", "insertdate" => "ct.itime", "salesman" => "e.name", @@ -102,19 +104,41 @@ sub search { if ($form->{"${cv}number"}) { $where .= " AND ct.${cv}number ILIKE ?"; - push(@values, '%' . $form->{"${cv}number"} . '%'); + push(@values, like($form->{"${cv}number"})); } foreach my $key (qw(name contact email)) { if ($form->{$key}) { $where .= " AND ct.$key ILIKE ?"; - push(@values, '%' . $form->{$key} . '%'); + push(@values, like($form->{$key})); } } if ($form->{cp_name}) { $where .= " AND ct.id IN (SELECT cp_cv_id FROM contacts WHERE lower(cp_name) LIKE lower(?))"; - push @values, '%' . $form->{cp_name} . '%'; + push @values, like($form->{cp_name}); + } + + if ($form->{addr_street}) { + $where .= qq| AND ((ct.street ILIKE ?) | . + qq| OR | . + qq| (ct.id IN ( | . + qq| SELECT sc.trans_id FROM shipto sc | . + qq| WHERE (sc.module = 'CT') | . + qq| AND (sc.shiptostreet ILIKE ?) | . + qq| ))) |; + push @values, (like($form->{addr_street})) x 2; + } + + if ($form->{addr_zipcode}) { + $where .= qq| AND ((ct.zipcode ILIKE ?) | . + qq| OR | . + qq| (ct.id IN ( | . + qq| SELECT sc.trans_id FROM shipto sc | . + qq| WHERE (sc.module = 'CT') | . + qq| AND (sc.shiptozipcode ILIKE ?) | . + qq| ))) |; + push @values, (like($form->{addr_zipcode})) x 2; } if ($form->{addr_city}) { @@ -127,7 +151,7 @@ sub search { AND (lower(sc.shiptocity) LIKE lower(?)) )) )"; - push @values, ('%' . $form->{addr_city} . '%') x 2; + push @values, (like($form->{addr_city})) x 2; } if ($form->{addr_country}) { @@ -140,7 +164,20 @@ sub search { AND (lower(so.shiptocountry) LIKE lower(?)) )) )"; - push @values, ('%' . $form->{addr_country} . '%') x 2; + push @values, (like($form->{addr_country})) x 2; + } + + if ($form->{addr_gln}) { + $where .= " AND ((lower(ct.gln) LIKE lower(?)) + OR + (ct.id IN ( + SELECT so.trans_id + FROM shipto so + WHERE (so.module = 'CT') + AND (lower(so.shiptogln) LIKE lower(?)) + )) + )"; + push @values, (like($form->{addr_gln})) x 2; } if ( $form->{status} eq 'orphaned' ) { @@ -188,6 +225,15 @@ sub search { push @values, conv_date($form->{insertdateto}); } + if ($form->{all}) { + my @tokens = parse_line('\s+', 0, $form->{all}); + $where .= qq| AND ( + ct.${cv}number ILIKE ? OR + ct.name ILIKE ? + )| for @tokens; + push @values, ("%$_%")x2 for @tokens; + } + # Nur Kunden finden, bei denen ich selber der Verkäufer bin # Gilt nicht für Lieferanten if ($cv eq 'customer' && !$main::auth->assert('customer_vendor_all_edit', 1)) { @@ -204,16 +250,6 @@ sub search { push @values, @cvar_values; } - if ($form->{addr_street}) { - $where .= qq| AND (ct.street ILIKE ?)|; - push @values, '%' . $form->{addr_street} . '%'; - } - - if ($form->{addr_zipcode}) { - $where .= qq| AND (ct.zipcode ILIKE ?)|; - push @values, $form->{addr_zipcode} . '%'; - } - my $pg_select = $form->{l_pricegroup} ? qq|, pg.pricegroup as pricegroup | : ''; my $pg_join = $form->{l_pricegroup} ? qq|LEFT JOIN pricegroup pg ON (ct.klass = pg.id) | : ''; my $query = @@ -395,7 +431,7 @@ sub search_contacts { 'cp.cp_name ILIKE ?', 'cp.cp_givenname ILIKE ?', 'cp.cp_email ILIKE ?'; - push @values, ('%' . $params{search_term} . '%') x 3; + push @values, (like($params{search_term})) x 3; if (($params{search_term} =~ m/\d/) && ($params{search_term} !~ m/[^\d \(\)+\-]/)) { my $number = $params{search_term};