Revision c0b5a026
Von Werner Hahn vor mehr als 6 Jahren hinzugefügt
SL/DB/ShopOrder.pm | ||
---|---|---|
111 | 111 |
|
112 | 112 |
sub check_for_existing_customers { |
113 | 113 |
my ($self, %params) = @_; |
114 |
|
|
115 |
my $name = $self->billing_lastname ne '' ? $self->billing_firstname . " " . $self->billing_lastname : ''; |
|
116 |
my $lastname = $self->billing_lastname ne '' ? "%" . $self->billing_lastname . "%" : ''; |
|
117 |
my $company = $self->billing_company ne '' ? "%" . $self->billing_company . "%" : ''; |
|
118 |
my $street = $self->billing_street ne '' ? $self->billing_street : ''; |
|
119 |
|
|
120 |
# Fuzzysearch for street to find e.g. "Dorfstrasse - Dorfstr. - Dorfstraße" |
|
121 |
my $fs_query = <<SQL; |
|
114 |
my $customers; |
|
115 |
|
|
116 |
my $name = $self->billing_lastname ne '' ? $self->billing_firstname . " " . $self->billing_lastname : ''; |
|
117 |
my $lastname = $self->billing_lastname ne '' ? "%" . $self->billing_lastname . "%" : ''; |
|
118 |
my $company = $self->billing_company ne '' ? "%" . $self->billing_company . "%" : ''; |
|
119 |
my $street = $self->billing_street ne '' ? $self->billing_street : ''; |
|
120 |
my $street_not_fuzzy = $self->billing_street ne '' ? "%" . $self->billing_street . "%" : ''; |
|
121 |
my $zipcode = $self->billing_street ne '' ? $self->billing_zipcode : ''; |
|
122 |
my $email = $self->billing_street ne '' ? $self->billing_email : ''; |
|
123 |
|
|
124 |
if($self->check_trgm) { |
|
125 |
# Fuzzysearch for street to find e.g. "Dorfstrasse - Dorfstr. - Dorfstraße" |
|
126 |
my $fs_query = <<SQL; |
|
122 | 127 |
SELECT * |
123 | 128 |
FROM customer |
124 | 129 |
WHERE ( |
... | ... | |
134 | 139 |
) AND obsolete = 'F' |
135 | 140 |
SQL |
136 | 141 |
|
137 |
my @values = ($lastname, $company, $self->billing_zipcode, $street, $self->billing_zipcode, $self->billing_email); |
|
142 |
my @values = ($lastname, $company, $self->billing_zipcode, $street, $self->billing_zipcode, $self->billing_email);
|
|
138 | 143 |
|
139 |
my $customers = SL::DB::Manager::Customer->get_objects_from_sql( |
|
140 |
sql => $fs_query, |
|
141 |
args => \@values, |
|
142 |
); |
|
144 |
$customers = SL::DB::Manager::Customer->get_objects_from_sql( |
|
145 |
sql => $fs_query, |
|
146 |
args => \@values, |
|
147 |
); |
|
148 |
}else{ |
|
149 |
# If trgm extension is not installed |
|
150 |
$customers = SL::DB::Manager::Customer->get_all( |
|
151 |
where => [ |
|
152 |
or => [ |
|
153 |
and => [ |
|
154 |
or => [ 'name' => { ilike => $lastname }, |
|
155 |
'name' => { ilike => $company }, |
|
156 |
], |
|
157 |
'zipcode' => { ilike => $zipcode }, |
|
158 |
], |
|
159 |
and => [ |
|
160 |
and => [ 'street' => { ilike => $street_not_fuzzy }, |
|
161 |
'zipcode' => { ilike => $zipcode }, |
|
162 |
], |
|
163 |
], |
|
164 |
or => [ 'email' => { ilike => $email } ], |
|
165 |
], |
|
166 |
], |
|
167 |
); |
|
168 |
} |
|
143 | 169 |
|
144 | 170 |
return $customers; |
145 | 171 |
} |
... | ... | |
208 | 234 |
return $result || ($self->id <=> $other->id); |
209 | 235 |
} |
210 | 236 |
|
237 |
sub check_trgm { |
|
238 |
my ( $self ) = @_; |
|
239 |
|
|
240 |
my $dbh = $::form->get_standard_dbh(); |
|
241 |
my $sql = "SELECT installed_version FROM pg_available_extensions WHERE name = 'pg_trgm'"; |
|
242 |
my @version = selectall_hashref_query($::form, $dbh, $sql); |
|
243 |
|
|
244 |
return 1 if($version[0]->{installed_version}); |
|
245 |
return 0; |
|
246 |
} |
|
247 |
|
|
211 | 248 |
1; |
212 | 249 |
|
213 | 250 |
__END__ |
... | ... | |
244 | 281 |
|
245 | 282 |
=item C<compare_to> |
246 | 283 |
|
284 |
=item C<check_trgm> |
|
285 |
|
|
286 |
Checks if the postgresextension pg_trgm is installed and return 0 or 1. |
|
287 |
|
|
247 | 288 |
=back |
248 | 289 |
|
249 | 290 |
=head1 TODO |
Auch abrufbar als: Unified diff
WebshopApi: Trigram Abhängigkeit aufgelöst.
Wird nur genutzt, wenn auch installiert
Tests dementsprechend angepasst und erweitert