X-Git-Url: http://wagnertech.de/git?a=blobdiff_plain;ds=sidebyside;f=SL%2FForm.pm;h=b9ba6942f36b0515c682f81030b56a092ad5a273;hb=7525426386204abfcc6e49b481de7389ade44dc4;hp=409bcd63b815f4546d23e553b8f51db59c83c432;hpb=b02735f55360e5a4e02dca40458b48cf057ecd7b;p=kivitendo-erp.git
diff --git a/SL/Form.pm b/SL/Form.pm
index 409bcd63b..b9ba6942f 100644
--- a/SL/Form.pm
+++ b/SL/Form.pm
@@ -251,6 +251,7 @@ sub new {
my $self = {};
+ no warnings 'once';
if ($LXDebug::watch_form) {
require SL::Watchdog;
tie %{ $self }, 'SL::Watchdog';
@@ -696,11 +697,13 @@ sub header {
push @header, "" if -f $self->{favicon};
push @header, '',
'',
- '',
+ '',
'',
'',
'',
- '';
+ '',
+ '',
+ '';
push @header, $self->{javascript} if $self->{javascript};
push @header, map { $_->show_javascript } @{ $self->{AJAX} || [] };
push @header, "" if $self->{fokus};
@@ -845,8 +848,8 @@ sub _prepare_html_template {
$additional_params->{"conf_payments_changeable"} = $::lx_office_conf{features}->{payments_changeable};
$additional_params->{"INSTANCE_CONF"} = $::instance_conf;
- if (%main::debug_options) {
- map { $additional_params->{'DEBUG_' . uc($_)} = $main::debug_options{$_} } keys %main::debug_options;
+ if (my $debug_options = $::lx_office_conf{debug}{options}) {
+ map { $additional_params->{'DEBUG_' . uc($_)} = $debug_options->{$_} } keys %$debug_options;
}
if ($main::auth && $main::auth->{RIGHTS} && $main::auth->{RIGHTS}->{$self->{login}}) {
@@ -1117,8 +1120,7 @@ sub format_amount_units {
return '';
}
- AM->retrieve_all_units();
- my $all_units = $main::all_units;
+ my $all_units = AM->retrieve_all_units;
if (('' eq ref $conv_units) && ($conv_units =~ /convertible/)) {
$conv_units = AM->convertible_units($all_units, $part_unit_name, $conv_units eq 'convertible_not_smaller');
@@ -1315,26 +1317,25 @@ sub parse_template {
if ($template->uses_temp_file() || $self->{media} eq 'email') {
$out = $self->{OUT};
- $self->{OUT} = ">$self->{tmpfile}";
+ $self->{OUT} = "$self->{tmpfile}";
}
my $result;
if ($self->{OUT}) {
- open OUT, "$self->{OUT}" or $self->error("$self->{OUT} : $!");
- $result = $template->parse(*OUT);
- close OUT;
-
+ open(OUT, ">", $self->{OUT}) or $self->error("$self->{OUT} : $!");
} else {
+ *OUT = ($::dispatcher->get_standard_filehandles)[1];
$self->header;
- $result = $template->parse(*STDOUT);
}
- if (!$result) {
+ if (!$template->parse(*OUT)) {
$self->cleanup();
$self->error("$self->{IN} : " . $template->get_error());
}
+ close OUT if $self->{OUT};
+
if ($self->{media} eq 'file') {
copy(join('/', $self->{cwd}, $userspath, $self->{tmpfile}), $out =~ m|^/| ? $out : join('/', $self->{cwd}, $out)) if $template->uses_temp_file;
$self->cleanup;
@@ -1368,7 +1369,7 @@ sub parse_template {
$myconfig->{signature} =~ s/\n/
\n/g;
$mail->{message} .= "
\n--
\n$myconfig->{signature}\n
";
- open(IN, $self->{tmpfile})
+ open(IN, "<", $self->{tmpfile})
or $self->error($self->cleanup . "$self->{tmpfile} : $!");
while () {
$mail->{message} .= $_;
@@ -1398,7 +1399,7 @@ sub parse_template {
$self->{OUT} = $out;
my $numbytes = (-s $self->{tmpfile});
- open(IN, $self->{tmpfile})
+ open(IN, "<", $self->{tmpfile})
or $self->error($self->cleanup . "$self->{tmpfile} : $!");
binmode IN;
@@ -1409,7 +1410,7 @@ sub parse_template {
#print(STDERR "OUT $self->{OUT}\n");
for my $i (1 .. $self->{copies}) {
if ($self->{OUT}) {
- open OUT, $self->{OUT} or $self->error($self->cleanup . "$self->{OUT} : $!");
+ open OUT, '>', $self->{OUT} or $self->error($self->cleanup . "$self->{OUT} : $!");
print OUT while ;
close OUT;
seek IN, 0, 0;
@@ -2756,19 +2757,11 @@ sub all_vc {
@{ $self->{all_employees} } =
sort { $a->{name} cmp $b->{name} } @{ $self->{all_employees} };
- if ($module eq 'AR') {
# prepare query for departments
- $query = qq|SELECT id, description
- FROM department
- WHERE role = 'P'
- ORDER BY description|;
-
- } else {
$query = qq|SELECT id, description
FROM department
ORDER BY description|;
- }
$self->{all_departments} = selectall_hashref_query($self, $dbh, $query);
@@ -2839,15 +2832,9 @@ sub all_departments {
my ($self, $myconfig, $table) = @_;
my $dbh = $self->get_standard_dbh($myconfig);
- my $where;
-
- if ($table eq 'customer') {
- $where = "WHERE role = 'P' ";
- }
my $query = qq|SELECT id, description
FROM department
- $where
ORDER BY description|;
$self->{all_departments} = selectall_hashref_query($self, $dbh, $query);
@@ -2887,11 +2874,28 @@ sub create_links {
}
# now get the account numbers
- $query = qq|SELECT c.accno, c.description, c.link, c.taxkey_id, tk.tax_id
- FROM chart c, taxkeys tk
- WHERE (c.link LIKE ?) AND (c.id = tk.chart_id) AND tk.id =
- (SELECT id FROM taxkeys WHERE (taxkeys.chart_id = c.id) AND (startdate <= $transdate) ORDER BY startdate DESC LIMIT 1)
- ORDER BY c.accno|;
+# $query = qq|SELECT c.accno, c.description, c.link, c.taxkey_id, tk.tax_id
+# FROM chart c, taxkeys tk
+# WHERE (c.link LIKE ?) AND (c.id = tk.chart_id) AND tk.id =
+# (SELECT id FROM taxkeys WHERE (taxkeys.chart_id = c.id) AND (startdate <= $transdate) ORDER BY startdate DESC LIMIT 1)
+# ORDER BY c.accno|;
+
+# same query as above, but without expensive subquery for each row. about 80% faster
+ $query = qq|
+ SELECT c.accno, c.description, c.link, c.taxkey_id, tk2.tax_id
+ FROM chart c
+ -- find newest entries in taxkeys
+ INNER JOIN (
+ SELECT chart_id, MAX(startdate) AS startdate
+ FROM taxkeys
+ WHERE (startdate <= $transdate)
+ GROUP BY chart_id
+ ) tk ON (c.id = tk.chart_id)
+ -- and load all of those entries
+ INNER JOIN taxkeys tk2
+ ON (tk.chart_id = tk2.chart_id AND tk.startdate = tk2.startdate)
+ WHERE (c.link LIKE ?)
+ ORDER BY c.accno|;
$sth = $dbh->prepare($query);
@@ -2950,6 +2954,9 @@ sub create_links {
$self->{$key} = $ref->{$key};
}
+ # remove any trailing whitespace
+ $self->{currency} =~ s/\s*$//;
+
my $transdate = "current_date";
if ($self->{transdate}) {
$transdate = $dbh->quote($self->{transdate});
@@ -3126,6 +3133,9 @@ sub lastname_used {
map { $self->{$_} = $ref->{$_} } values %column_map;
+ # remove any trailing whitespace
+ $self->{currency} =~ s/\s*$// if $self->{currency};
+
$main::lxdebug->leave_sub();
}