my @values;
my %allowed_sort_columns = (
- "id" => "id",
- "customernumber" => "customernumber",
- "vendornumber" => "vendornumber",
- "name" => "ct.name",
- "contact" => "contact",
- "phone" => "phone",
- "fax" => "fax",
- "email" => "email",
- "street" => "street",
- "taxnumber" => "taxnumber",
- "business" => "business",
- "invnumber" => "invnumber",
- "ordnumber" => "ordnumber",
- "quonumber" => "quonumber",
- "zipcode" => "zipcode",
- "city" => "city",
- "country" => "country",
- "salesman" => "e.name"
+ "id" => "ct.id",
+ "customernumber" => "ct.customernumber",
+ "vendornumber" => "ct.vendornumber",
+ "name" => "ct.name",
+ "contact" => "ct.contact",
+ "phone" => "ct.phone",
+ "fax" => "ct.fax",
+ "email" => "ct.email",
+ "street" => "ct.street",
+ "taxnumber" => "ct.taxnumber",
+ "business" => "ct.business",
+ "invnumber" => "ct.invnumber",
+ "ordnumber" => "ct.ordnumber",
+ "quonumber" => "ct.quonumber",
+ "zipcode" => "ct.zipcode",
+ "city" => "ct.city",
+ "country" => "ct.country",
+ "salesman" => "e.name"
);
$form->{sort} ||= "name";
$where .= " AND ((lower(ct.city) LIKE lower(?))
OR
(ct.id IN (
- SELECT trans_id
- FROM shipto
- WHERE (module = 'CT')
- AND (lower(shiptocity) LIKE lower(?))
+ SELECT sc.trans_id
+ FROM shipto sc
+ WHERE (sc.module = 'CT')
+ AND (lower(sc.shiptocity) LIKE lower(?))
))
)";
push @values, ('%' . $form->{addr_city} . '%') x 2;
$where .= " AND ((lower(ct.country) LIKE lower(?))
OR
(ct.id IN (
- SELECT trans_id
- FROM shipto
- WHERE (module = 'CT')
- AND (lower(shiptocountry) LIKE lower(?))
+ SELECT so.trans_id
+ FROM shipto so
+ WHERE (so.module = 'CT')
+ AND (lower(so.shiptocountry) LIKE lower(?))
))
)";
push @values, ('%' . $form->{addr_country} . '%') x 2;
}
if ($form->{obsolete} eq "Y") {
- $where .= qq| AND obsolete|;
+ $where .= qq| AND ct.obsolete|;
} elsif ($form->{obsolete} eq "N") {
- $where .= qq| AND NOT obsolete|;
+ $where .= qq| AND NOT ct.obsolete|;
}
if ($form->{business_id}) {
- $where .= qq| AND (business_id = ?)|;
+ $where .= qq| AND (ct.business_id = ?)|;
push(@values, conv_i($form->{business_id}));
}
# 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)) {
- $where .= qq| AND ct.salesman_id = (select id from employee where login= ?)|;
+ $where .= qq| AND ct.salesman_id = (select em.id from employee em where em.login = ?)|;
push(@values, $form->{login});
}
}
if ($form->{addr_street}) {
- $where .= qq| AND (street ILIKE ?)|;
+ $where .= qq| AND (ct.street ILIKE ?)|;
push @values, '%' . $form->{addr_street} . '%';
}
if ($form->{addr_zipcode}) {
- $where .= qq| AND (zipcode ILIKE ?)|;
+ $where .= qq| AND (ct.zipcode ILIKE ?)|;
push @values, $form->{addr_zipcode} . '%';
}
return DBIx::Log4perl->connect(@_);
}
+sub get_options {
+ my $self = shift;
+ my $options = {
+ pg_enable_utf8 => $::locale->is_utf8,
+ @_
+ };
+
+ return $options;
+}
+
1;
# Database routines used throughout
-sub _dbconnect_options {
- my $self = shift;
- my $options = { pg_enable_utf8 => $::locale->is_utf8,
- @_ };
-
- return $options;
-}
-
sub dbconnect {
$main::lxdebug->enter_sub(2);
my ($self, $myconfig) = @_;
# connect to database
- my $dbh = SL::DBConnect->connect($myconfig->{dbconnect}, $myconfig->{dbuser}, $myconfig->{dbpasswd}, $self->_dbconnect_options)
+ my $dbh = SL::DBConnect->connect($myconfig->{dbconnect}, $myconfig->{dbuser}, $myconfig->{dbpasswd}, SL::DBConnect->get_options)
or $self->dberror;
# set db options
my ($self, $myconfig) = @_;
# connect to database
- my $dbh = SL::DBConnect->connect($myconfig->{dbconnect}, $myconfig->{dbuser}, $myconfig->{dbpasswd}, $self->_dbconnect_options(AutoCommit => 0))
+ my $dbh = SL::DBConnect->connect($myconfig->{dbconnect}, $myconfig->{dbuser}, $myconfig->{dbpasswd}, SL::DBConnect->get_options(AutoCommit => 0))
or $self->dberror;
# set db options
my %myconfig = $main::auth->read_user(login => $self->{login});
# check if database is down
- my $dbh = SL::DBConnect->connect($myconfig{dbconnect}, $myconfig{dbuser}, $myconfig{dbpasswd})
+ my $dbh = SL::DBConnect->connect($myconfig{dbconnect}, $myconfig{dbuser}, $myconfig{dbpasswd}, SL::DBConnect->get_options)
or $self->error($DBI::errstr);
# we got a connection, check the version
$form->{sid} = $form->{dbdefault};
&dbconnect_vars($form, $form->{dbdefault});
- my $dbh = SL::DBConnect->connect($form->{dbconnect}, $form->{dbuser}, $form->{dbpasswd})
+ my $dbh = SL::DBConnect->connect($form->{dbconnect}, $form->{dbuser}, $form->{dbpasswd}, SL::DBConnect->get_options)
or $form->dberror;
if ($form->{dbdriver} eq 'Pg') {
next if ($db =~ /^template/);
&dbconnect_vars($form, $db);
- my $dbh = SL::DBConnect->connect($form->{dbconnect}, $form->{dbuser}, $form->{dbpasswd})
+ my $dbh = SL::DBConnect->connect($form->{dbconnect}, $form->{dbuser}, $form->{dbpasswd}, SL::DBConnect->get_options)
or $form->dberror;
$query =
dbconnect_vars($form, $form->{dbdefault});
- my $dbh = SL::DBConnect->connect($form->{dbconnect}, $form->{dbuser}, $form->{dbpasswd}) || $form->dberror();
+ my $dbh = SL::DBConnect->connect($form->{dbconnect}, $form->{dbuser}, $form->{dbpasswd}, SL::DBConnect->get_options) || $form->dberror();
my $query = qq|SELECT pg_encoding_to_char(encoding) FROM pg_database WHERE datname = 'template0'|;
my ($cluster_encoding) = $dbh->selectrow_array($query);
$dbh->disconnect();
$form->{sid} = $form->{dbdefault};
&dbconnect_vars($form, $form->{dbdefault});
my $dbh =
- SL::DBConnect->connect($form->{dbconnect}, $form->{dbuser}, $form->{dbpasswd})
+ SL::DBConnect->connect($form->{dbconnect}, $form->{dbuser}, $form->{dbpasswd}, SL::DBConnect->get_options)
or $form->dberror;
$form->{db} =~ s/\"//g;
my %dbcreate = (
&dbconnect_vars($form, $form->{db});
- $dbh = SL::DBConnect->connect($form->{dbconnect}, $form->{dbuser}, $form->{dbpasswd})
+ $dbh = SL::DBConnect->connect($form->{dbconnect}, $form->{dbuser}, $form->{dbpasswd}, SL::DBConnect->get_options)
or $form->dberror;
my $db_charset = $Common::db_encoding_to_charset{$form->{encoding}};
$form->{sid} = $form->{dbdefault};
&dbconnect_vars($form, $form->{dbdefault});
- my $dbh = SL::DBConnect->connect($form->{dbconnect}, $form->{dbuser}, $form->{dbpasswd})
+ my $dbh = SL::DBConnect->connect($form->{dbconnect}, $form->{dbuser}, $form->{dbpasswd}, SL::DBConnect->get_options)
or $form->dberror;
my $query = $dbdelete{$form->{dbdriver}};
do_query($form, $dbh, $query);
map { $form->{$_} = $member->{$_} } qw(dbname dbuser dbpasswd dbhost dbport);
dbconnect_vars($form, $form->{dbname});
- my $dbh = SL::DBConnect->connect($form->{dbconnect}, $form->{dbuser}, $form->{dbpasswd});
+ my $dbh = SL::DBConnect->connect($form->{dbconnect}, $form->{dbuser}, $form->{dbpasswd}, SL::DBConnect->get_options);
next unless $dbh;
$db =~ s/^db//;
&dbconnect_vars($form, $db);
- my $dbh = SL::DBConnect->connect($form->{dbconnect}, $form->{dbuser}, $form->{dbpasswd})
+ my $dbh = SL::DBConnect->connect($form->{dbconnect}, $form->{dbuser}, $form->{dbpasswd}, SL::DBConnect->get_options)
or $form->dberror;
$dbh->do($form->{dboptions}) if ($form->{dboptions});
$db =~ s/^db//;
&dbconnect_vars($form, $db);
- my $dbh = SL::DBConnect->connect($form->{dbconnect}, $form->{dbuser}, $form->{dbpasswd}) or $form->dberror;
+ my $dbh = SL::DBConnect->connect($form->{dbconnect}, $form->{dbuser}, $form->{dbpasswd}, SL::DBConnect->get_options) or $form->dberror;
$dbh->do($form->{dboptions}) if ($form->{dboptions});
$main::auth->save_user($self->{login}, map { $_, $self->{$_} } config_vars());
- my $dbh = SL::DBConnect->connect($self->{dbconnect}, $self->{dbuser}, $self->{dbpasswd});
+ my $dbh = SL::DBConnect->connect($self->{dbconnect}, $self->{dbuser}, $self->{dbpasswd}, SL::DBConnect->get_options);
if ($dbh) {
$self->create_employee_entry($::form, $dbh, $self, 1);
$dbh->disconnect();
'Batch Printing' => 'Druck',
'Bcc' => 'Bcc',
'Bcc E-mail' => 'BCC (E-Mail)',
- 'Because the useability gets worse if one partnumber is used for several parts (for example if you are searching a position for an invoice), partnumbers should be unique.' => 'translation',
+ 'Because the useability gets worse if one partnumber is used for several parts (for example if you are searching a position for an invoice), partnumbers should be unique.' => 'Da die Benutzerfreundlichkeit durch doppelte Artikelnummern erheblich verschlechtert wird (zum Beispiel, wenn man einen Artikel für eine Rechnung sucht), sollten Artikelnummern eindeutig vergeben sein.',
'Belegnummer' => 'Buchungsnummer',
'Beratername' => 'Beratername',
'Beraternummer' => 'Beraternummer',
sub convert_to_date {
my ($self, $str) = @_;
- return '' if !$str;
+ return '' if !$str || ($str =~ m/00.*00.*00.*00/); # 0000-00-00 may be present in old databases.
my $sth = $self->dbh->prepare('SELECT ?::date AS date') or return undef;
- $sth->execute($str) or return undef;
+ $sth->execute($str) or return undef;
return $sth->fetchrow_hashref->{date};
}
use parent qw(SL::DBUpgrade2::Base);
+use SL::DBUtils;
+
sub run {
my ($self) = @_;
$self->dbh->commit();
}
- my $query = qq|SELECT id, partnumber, description, unit, notes, assembly, ean, inventory_accno_id
+ my $query = qq|SELECT id, partnumber, description, unit, notes, assembly, ean, inventory_accno_id, obsolete
FROM parts pa
WHERE (SELECT COUNT(*)
FROM parts p
> 1
ORDER BY partnumber;|;
- my $sth = $self->dbh->prepare($query);
- $sth->execute || $::form->dberror($query);
-
- $::form->{PARTS} = [];
- while (my $ref = $sth->fetchrow_hashref("NAME_lc")) {
- map {$ref->{$_} = $::locale->{iconv_utf8}->convert($ref->{$_})} keys %$ref;
- push @{ $::form->{PARTS} }, $ref;
- }
+ $::form->{PARTS} = [ selectall_hashref_query($::form, $self->dbh, $query) ];
if ( scalar @{ $::form->{PARTS} } > 0 ) {
&print_error_message;
# @tag: steuerfilterung
# @description: Steuern in Dialogbuchungen filtern.
-# @depends: release_3_0_0
+# @depends: release_3_0_0 tax_constraints
package SL::DBUpgrade2::steuerfilterung;
use strict;
#####
$csv = SL::Helper::Csv->new(
- file => \"\x{FEFF}description\nKaffee",
+ file => \"\x{EF}\x{BB}\x{BF}description\nKaffee",
class => 'SL::DB::Part',
encoding => 'utf8',
);
[%- USE T8 %]
-[% USE HTML %]<div class="listtop">[% 'Double partnumbers' | $T8 %]</div>
+[% USE HTML %][%- USE LxERP -%]<div class="listtop">[% 'Double partnumbers' | $T8 %]</div>
<form name="Form" method="post" action="login.pl">
<input type="hidden" name="action" value="login">
<th class="listheading">[% 'Notes' | $T8 %]</th>
<th class="listheading">[% 'EAN' | $T8 %]</th>
<th class="listheading">[% 'Service, assembly or part' | $T8 %]</th>
+ <th class="listheading">[% 'Obsolete' | $T8 %]</th>
</tr>
[% SET row_odd = '1' %][% FOREACH row = PARTS %]
<td align="right">[% HTML.escape(row.notes) %]</td>
<td align="right">[% HTML.escape(row.ean) %]</td>
<td align="right">[% IF row.assembly %] [% 'assembly' | $T8 %] [% ELSE %] [% IF row.inventory_accno_id %] [% 'part' | $T8 %] [% ELSE %] [% 'service' | $T8 %] [% END %] [% END %]</td>
+ <td>[% IF row.obsolete %][%- LxERP.t8("Obsolete") %][%- ELSE %][%- LxERP.t8("Not obsolete") %][%- END %]</td>
</tr>
[% SET rowcount = loop.count %]
[% END %]
function show_chart_balance(obj) {
var row = $(obj).attr('name').replace(/.*_/, '');
- var idx = $('#accno_' + row).attr('selectedIndex');
+ var idx = $('#accno_' + row).prop('selectedIndex');
$('#chart_balance_' + row).html(chart_balances[idx]);
}