use Data::Dumper;
use CGI;
-use CGI::Ajax;
use Cwd;
use Encode;
use File::Copy;
my $self = {};
+ no warnings 'once';
if ($LXDebug::watch_form) {
require SL::Watchdog;
tie %{ $self }, 'SL::Watchdog';
my $self = shift;
if (@_) {
- map({ print($main::cgi->hidden("-name" => $_, "-default" => $self->{$_}) . "\n"); } @_);
+ map({ print($::request->{cgi}->hidden("-name" => $_, "-default" => $self->{$_}) . "\n"); } @_);
} else {
for (sort keys %$self) {
next if (($_ eq "header") || (ref($self->{$_}) ne ""));
- print($main::cgi->hidden("-name" => $_, "-default" => $self->{$_}) . "\n");
+ print($::request->{cgi}->hidden("-name" => $_, "-default" => $self->{$_}) . "\n");
}
}
$main::lxdebug->leave_sub();
my $self = shift;
my %params = @_;
- my $cgi = $main::cgi;
- $cgi ||= CGI->new('');
+ my $cgi = $::request->{cgi};
my $session_cookie;
if (defined $main::auth) {
# extra code is currently only used by menuv3 and menuv4 to set their css.
# it is strongly deprecated, and will be changed in a future version.
- my ($self, $extra_code) = @_;
+ my ($self, %params) = @_;
my $db_charset = $::lx_office_conf{system}->{dbcharset} || Common::DEFAULT_CHARSET;
my @header;
push @header, "<link rel='shortcut icon' href='$self->{favicon}' type='image/x-icon'>" if -f $self->{favicon};
push @header, '<script type="text/javascript" src="js/jquery.js"></script>',
'<script type="text/javascript" src="js/common.js"></script>',
- '<style type="text/css">@import url(js/jscalendar/calendar-win2k-1.css);</style>',
+ '<link rel="stylesheet" type="text/css" href="js/jscalendar/calendar-win2k-1.css">',
'<script type="text/javascript" src="js/jscalendar/calendar.js"></script>',
'<script type="text/javascript" src="js/jscalendar/lang/calendar-de.js"></script>',
'<script type="text/javascript" src="js/jscalendar/calendar-setup.js"></script>',
- '<script type="text/javascript" src="js/part_selection.js"></script>';
+ '<script type="text/javascript" src="js/part_selection.js"></script>',
+ '<script type="text/javascript" src="js/jquery-ui.js"></script>',
+ '<link rel="stylesheet" type="text/css" href="css/ui-lightness/jquery-ui-1.8.12.custom.css">';
push @header, $self->{javascript} if $self->{javascript};
push @header, map { $_->show_javascript } @{ $self->{AJAX} || [] };
push @header, "<script type='text/javascript'>function fokus(){ document.$self->{fokus}.focus(); }</script>" if $self->{fokus};
</script>|;
}
+ my %doctypes = (
+ strict => qq|<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">|,
+ transitional => qq|<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">|,
+ frameset => qq|<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN" "http://www.w3.org/TR/html4/frameset.dtd">|,
+ );
+
# output
print $self->create_http_response(content_type => 'text/html', charset => $db_charset);
- print "<!DOCTYPE HTML PUBLIC '-//W3C//DTD HTML 4.01//EN' 'http://www.w3.org/TR/html4/strict.dtd'>\n"
- if $ENV{'HTTP_USER_AGENT'} =~ m/MSIE\s+\d/; # Other browsers may choke on menu scripts with DOCTYPE.
+ print $doctypes{$params{doctype} || 'transitional'}, $/;
print <<EOT;
<html>
<head>
EOT
print " $_\n" for @header;
print <<EOT;
- <link rel="stylesheet" href="css/jquery.autocomplete.css" type="text/css" />
- <meta name="robots" content="noindex,nofollow" />
- <link rel="stylesheet" type="text/css" href="css/tabcontent.css" />
+ <link rel="stylesheet" href="css/jquery.autocomplete.css" type="text/css">
+ <meta name="robots" content="noindex,nofollow">
+ <link rel="stylesheet" type="text/css" href="css/tabcontent.css">
<script type="text/javascript" src="js/tabcontent.js">
/***********************************************
***********************************************/
</script>
- $extra_code
+ $params{extra_code}
$title_hack
</head>
my ($self) = @_;
my $db_charset = $::lx_office_conf{system}->{dbcharset} || Common::DEFAULT_CHARSET;
- my $cgi = $main::cgi || CGI->new('');
- my $output = $cgi->header('-charset' => $db_charset);
+ my $output = $::request->{cgi}->header('-charset' => $db_charset);
$main::lxdebug->leave_sub();
die "Headers already sent" if $self->{header};
$self->{header} = 1;
- my $cgi = $main::cgi || CGI->new('');
- return $cgi->redirect($new_uri);
+ return $::request->{cgi}->redirect($new_uri);
}
sub set_standard_title {
$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}}) {
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');
if ($self->{OUT}) {
open(OUT, ">", $self->{OUT}) or $self->error("$self->{OUT} : $!");
} else {
- open(OUT, ">&", \*STDOUT) or $self->error("STDOUT : $!");
+ *OUT = ($::dispatcher->get_standard_filehandles)[1];
$self->header;
}
$self->error("$self->{IN} : " . $template->get_error());
}
- close OUT;
+ 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;
for my $i (1 .. $self->{copies}) {
if ($self->{OUT}) {
open OUT, '>', $self->{OUT} or $self->error($self->cleanup . "$self->{OUT} : $!");
- print OUT while <IN>;
+ print OUT $_ while <IN>;
+ close OUT;
seek IN, 0, 0;
} else {
|;
- open(OUT, ">&", \*STDOUT) or $self->error($self->cleanup . "$!: STDOUT");
- $::locale->with_raw_io(*OUT, sub { print while <IN> });
+ $::locale->with_raw_io(\*STDOUT, sub { print while <IN> });
}
- close OUT;
}
close(IN);
$key = $params;
}
- my $where = ' WHERE ' . join(' AND ', map { "($_)" } @where) if (@where);
+ my $where = @where ? ' WHERE ' . join(' AND ', map { "($_)" } @where) : '';
my $query = qq|SELECT * FROM tax $where ORDER BY taxkey|;
my $options = ref $key eq 'HASH' ? $key : { key => $key };
$options->{key} ||= "all_customers";
- my $limit_clause = "LIMIT $options->{limit}" if $options->{limit};
+ my $limit_clause = $options->{limit} ? "LIMIT $options->{limit}" : '';
my @where;
push @where, qq|business_id IN (SELECT id FROM business WHERE salesman)| if $options->{business_is_salesman};
@{ $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);
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);
}
# 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);
$self->{$key} = $ref->{$key};
}
+ # remove any trailing whitespace
+ $self->{currency} =~ s/\s*$//;
+
my $transdate = "current_date";
if ($self->{transdate}) {
$transdate = $dbh->quote($self->{transdate});
map { $self->{$_} = $ref->{$_} } values %column_map;
+ # remove any trailing whitespace
+ $self->{currency} =~ s/\s*$// if $self->{currency};
+
$main::lxdebug->leave_sub();
}
$extension = 'xls';
}
- my $printer_code = '_' . $self->{printer_code} if $self->{printer_code};
- my $email_extension = '_email' if -f "$self->{templates}/$self->{formname}_email${language}${printer_code}.${extension}";
+ my $printer_code = $self->{printer_code} ? '_' . $self->{printer_code} : '';
+ my $email_extension = -f "$::myconfig{templates}/$self->{formname}_email${language}.${extension}" ? '_email' : '';
$self->{IN} = "$self->{formname}${email_extension}${language}${printer_code}.${extension}";
# Format dates.