);
%db_encoding_to_charset = map { $_->{dbencoding}, $_->{charset} } @db_encodings;
+%charset_to_db_encoding = map { $_->{charset}, $_->{dbencoding} } @db_encodings;
use constant DEFAULT_CHARSET => 'ISO-8859-15';
my $dbh = $form->dbconnect($myconfig);
my (@filter_values, $filter);
- if ($form->{"partnumber"}) {
- $filter .= qq| AND (partnumber ILIKE ?)|;
- push(@filter_values, '%' . $form->{"partnumber"} . '%');
+
+ foreach (qw(partnumber description)) {
+ next unless $form->{$_};
+
+ $filter .= qq| AND ($_ ILIKE ?)|;
+ push @filter_values, '%' . $form->{$_} . '%';
}
- if ($form->{"description"}) {
- $filter .= qq| AND (description ILIKE ?)|;
- push(@filter_values, '%' . $form->{"description"} . '%');
+
+ if ($form->{no_assemblies}) {
+ $filter .= qq| AND (NOT COALESCE(assembly, 'f'))|;
+ }
+
+ if ($form->{no_services}) {
+ $filter .= qq| AND (COALESCE(inventory_accno_id, 0) > 0)|;
}
+
substr($filter, 1, 3) = "WHERE" if ($filter);
$order_by =~ s/[^a-zA-Z_]//g;
return $employees;
}
+sub retrieve_customers_or_vendors {
+ $main::lxdebug->enter_sub();
+
+ my ($self, $myconfig, $form, $order_by, $order_dir, $is_vendor, $allow_both) = @_;
+
+ my $dbh = $form->dbconnect($myconfig);
+
+ my (@filter_values, $filter);
+ if ($form->{"name"}) {
+ $filter .= " AND (TABLE.name ILIKE ?)";
+ push(@filter_values, '%' . $form->{"name"} . '%');
+ }
+ if (!$form->{"obsolete"}) {
+ $filter .= " AND NOT TABLE.obsolete";
+ }
+ substr($filter, 1, 3) = "WHERE" if ($filter);
+
+ $order_by =~ s/[^a-zA-Z_]//g;
+ $order_dir = $order_dir ? "ASC" : "DESC";
+
+ my (@queries, @query_parameters);
+
+ if ($allow_both || !$is_vendor) {
+ my $c_filter = $filter;
+ $c_filter =~ s/TABLE/c/g;
+ push(@queries, qq|SELECT
+ c.id, c.name, 0 AS customer_is_vendor,
+ c.street, c.zipcode, c.city,
+ ct.cp_greeting, ct.cp_title, ct.cp_givenname, ct.cp_name
+ FROM customer c
+ LEFT JOIN contacts ct ON (c.id = ct.cp_cv_id)
+ $c_filter|);
+ push(@query_parameters, @filter_values);
+ }
+
+ if ($allow_both || $is_vendor) {
+ my $v_filter = $filter;
+ $v_filter =~ s/TABLE/v/g;
+ push(@queries, qq|SELECT
+ v.id, v.name, 1 AS customer_is_vendor,
+ v.street, v.zipcode, v.city,
+ ct.cp_greeting, ct.cp_title, ct.cp_givenname, ct.cp_name
+ FROM vendor v
+ LEFT JOIN contacts ct ON (v.id = ct.cp_cv_id)
+ $v_filter|);
+ push(@query_parameters, @filter_values);
+ }
+
+ my $query = join(" UNION ", @queries) . " ORDER BY $order_by $order_dir";
+ my $sth = $dbh->prepare($query);
+ $sth->execute(@query_parameters) || $form->dberror($query . " (" . join(", ", @query_parameters) . ")");
+ my $customers = [];
+ while (my $ref = $sth->fetchrow_hashref()) {
+ push(@{$customers}, $ref);
+ }
+ $sth->finish();
+ $dbh->disconnect();
+
+ $main::lxdebug->leave_sub();
+
+ return $customers;
+}
+
sub retrieve_delivery_customer {
$main::lxdebug->enter_sub();
my ($path, $number);
- $form->{WEBDAV} = {};
+ $form->{WEBDAV} = [];
if ($form->{type} eq "sales_quotation") {
($path, $number) = ("angebote", $form->{quonumber});
return $main::lxdebug->leave_sub() unless ($path && $number);
+ $number =~ s|[/\\]|_|g;
+
$path = "webdav/${path}/${number}";
if (!-d $path) {
} else {
my $base_path = substr($ENV{'SCRIPT_NAME'}, 1);
$base_path =~ s|[^/]+$||;
+ $base_path =~ s|/$||;
- foreach my $file (<$path/*>) {
- my $fname = $file;
- $fname =~ s|.*/||;
- $form->{WEBDAV}{$fname} =
- ($ENV{"HTTPS"} ? "https://" : "http://") .
- $ENV{'SERVER_NAME'} . "/" . $base_path . $file;
+ if (opendir $dir, $path) {
+ foreach my $file (sort { lc $a cmp lc $b } readdir $dir) {
+ next if (($file eq '.') || ($file eq '..'));
+
+ my $fname = $file;
+ $fname =~ s|.*/||;
+
+ my $is_directory = -d "$path/$file";
+
+ $file = join('/', map { $form->escape($_) } grep { $_ } split m|/+|, "$path/$file");
+ $file .= '/' if ($is_directory);
+
+ push @{ $form->{WEBDAV} }, {
+ 'name' => $fname,
+ 'link' => ($ENV{"HTTPS"} ? "https://" : "http://") . $ENV{'SERVER_NAME'} . "/$base_path/$file",
+ 'type' => $is_directory ? $main::locale->text('Directory') : $main::locale->text('File'),
+ };
+ }
+
+ closedir $dir;
}
}
$main::lxdebug->leave_sub();
}
+sub save_email_status {
+ $main::lxdebug->enter_sub();
+
+ my ($self, $myconfig, $form) = @_;
+
+ my ($table, $query, $dbh);
+
+ if ($form->{script} eq 'oe.pl') {
+ $table = 'oe';
+
+ } elsif ($form->{script} eq 'is.pl') {
+ $table = 'ar';
+
+ } elsif ($form->{script} eq 'ir.pl') {
+ $table = 'ap';
+
+ }
+
+ return $main::lxdebug->leave_sub() if (!$form->{id} || !$table || !$form->{formname});
+
+ $dbh = $form->get_standard_dbh($myconfig);
+
+ my ($intnotes) = selectrow_query($form, $dbh, qq|SELECT intnotes FROM $table WHERE id = ?|, $form->{id});
+
+ $intnotes =~ s|\r||g;
+ $intnotes =~ s|\n$||;
+
+ $intnotes .= "\n\n" if ($intnotes);
+
+ my $cc = $main::locale->text('Cc') . ": $form->{cc}\n" if $form->{cc};
+ my $bcc = $main::locale->text('Bcc') . ": $form->{bcc}\n" if $form->{bcc};
+ my $now = scalar localtime;
+
+ $intnotes .= $main::locale->text('[email]') . "\n"
+ . $main::locale->text('Date') . ": $now\n"
+ . $main::locale->text('To (email)') . ": $form->{email}\n"
+ . "${cc}${bcc}"
+ . $main::locale->text('Subject') . ": $form->{subject}\n\n"
+ . $main::locale->text('Message') . ": $form->{message}";
+
+ $intnotes =~ s|\r||g;
+
+ do_query($form, $dbh, qq|UPDATE $table SET intnotes = ? WHERE id = ?|, $intnotes, $form->{id});
+
+ $form->save_status($dbh);
+
+ $dbh->commit();
+
+ $main::lxdebug->leave_sub();
+}
+
+sub check_params {
+ my $params = shift;
+
+ foreach my $key (@_) {
+ if (!defined $params->{$key}) {
+ my $subroutine = (caller(1))[3];
+ $main::form->error($main::locale->text("Missing parameter #1 in call to sub #2.", $key, $subroutine));
+ }
+ }
+}
+
+sub check_params_x {
+ my $params = shift;
+
+ foreach my $key (@_) {
+ if (!exists $params->{$key}) {
+ my $subroutine = (caller(1))[3];
+ $main::form->error($main::locale->text("Missing parameter #1 in call to sub #2.", $key, $subroutine));
+ }
+ }
+}
+
1;