use CGI;
use CGI::Ajax;
use Cwd;
-use List::Util qw(min max);
+use IO::File;
use SL::Auth;
use SL::Auth::DB;
use SL::Auth::LDAP;
my $standard_dbh;
-sub DESTROY {
+END {
if ($standard_dbh) {
$standard_dbh->disconnect();
undef $standard_dbh;
$self->{action} = lc $self->{action};
$self->{action} =~ s/( |-|,|\#)/_/g;
- $self->{version} = "2.4.3";
+ $self->{version} = "2.6.0 beta 1";
$main::lxdebug->leave_sub();
my ($self, $name, $msg) = @_;
my $curr = $self;
- foreach my $part (split /\./, $name) {
+ foreach my $part (split m/\./, $name) {
if (!$curr->{$part} || ($curr->{$part} =~ /^\s*$/)) {
$self->error($msg);
}
}
my %cgi_params = ('-type' => $params{content_type});
- $cgi_params{'-charset'} = $params{charset} if ($parmas{charset});
+ $cgi_params{'-charset'} = $params{charset} if ($params{charset});
my $output = $cgi->header('-cookie' => $session_cookie,
%cgi_params);
'charset' => $db_charset,);
print qq|${doctype}<html>
<head>
+ <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=${db_charset}">
<title>$self->{titlebar}</title>
$stylesheet
$pagelayout
$favicon
- <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=${db_charset}">
$jsscript
$ajax
<meta name="robots" content="noindex,nofollow" />
<script type="text/javascript" src="js/highlight_input.js"></script>
- <link rel="stylesheet" type="text/css" href="css/tabcontent.css" />
+ <link rel="stylesheet" type="text/css" href="css/tabcontent.css" />
<script type="text/javascript" src="js/tabcontent.js">
/***********************************************
- * Tab Content script- Dynamic Drive DHTML code library (www.dynamicdrive.com)
- * This notice MUST stay intact for legal use
- * Visit Dynamic Drive at http://www.dynamicdrive.com/ for full source code
- ***********************************************/
+ * Tab Content script v2.2- © Dynamic Drive DHTML code library (www.dynamicdrive.com)
+ * This notice MUST stay intact for legal use
+ * Visit Dynamic Drive at http://www.dynamicdrive.com/ for full source code
+ ***********************************************/
</script>
$main::lxdebug->leave_sub();
}
+sub ajax_response_header {
+ $main::lxdebug->enter_sub();
+
+ my ($self) = @_;
+
+ my $db_charset = $main::dbcharset ? $main::dbcharset : Common::DEFAULT_CHARSET;
+ my $cgi = $main::cgi || CGI->new('');
+ my $output = $cgi->header('-charset' => $db_charset);
+
+ $main::lxdebug->leave_sub();
+
+ return $output;
+}
+
sub _prepare_html_template {
$main::lxdebug->enter_sub();
$additional_params->{"myconfig_jsc_dateformat"} = $jsc_dateformat;
}
+ $additional_params->{"conf_dbcharset"} = $main::dbcharset;
$additional_params->{"conf_webdav"} = $main::webdav;
$additional_params->{"conf_lizenzen"} = $main::lizenzen;
$additional_params->{"conf_latex_templates"} = $main::latex;
map { $additional_params->{$_} ||= $self->{$_} } keys %{ $self };
+ my $in = IO::File->new($file, 'r');
+
+ if (!$in) {
+ print STDERR "Error opening template file: $!";
+ $main::lxdebug->leave_sub();
+ return '';
+ }
+
+ my $input = join('', <$in>);
+ $in->close();
+
+ if ($main::locale) {
+ $input = $main::locale->{iconv}->convert($input);
+ }
+
my $output;
- if (!$template->process($file, $additional_params, \$output)) {
+ if (!$template->process(\$input, $additional_params, \$output)) {
print STDERR $template->error();
}
- $output = $main::locale->{iconv}->convert($output) if ($main::locale);
-
$main::lxdebug->leave_sub();
return $output;
}
sub show_generic_error {
+ $main::lxdebug->enter_sub();
+
my ($self, $error, %params) = @_;
my $add_params = {
$self->header();
print $self->parse_html_template("generic/error", $add_params);
+ $main::lxdebug->leave_sub();
+
die("Error: $error\n");
}
sub show_generic_information {
+ $main::lxdebug->enter_sub();
+
my ($self, $text, $title) = @_;
my $add_params = {
$self->header();
print $self->parse_html_template("generic/information", $add_params);
+ $main::lxdebug->leave_sub();
+
die("Information: $error\n");
}
my $self = shift;
my %params = @_;
- Common::check_params(\%params, qw(amount part_unit));
-
my $myconfig = \%main::myconfig;
- my $amount = $params{amount};
+ my $amount = $params{amount} * 1;
my $places = $params{places};
my $part_unit_name = $params{part_unit};
my $amount_unit_name = $params{amount_unit};
my $conv_units = $params{conv_units};
my $max_places = $params{max_places};
+ if (!$part_unit_name) {
+ $main::lxdebug->leave_sub();
+ return '';
+ }
+
AM->retrieve_all_units();
my $all_units = $main::all_units;
# Copy the notes from the invoice/sales order etc. back to the variable "notes" because that is where most templates expect it to be.
$self->{"notes"} = $self->{ $self->{"formname"} . "notes" };
- map({ $self->{"employee_${_}"} = $myconfig->{$_}; }
- qw(email tel fax name signature company address businessnumber
- co_ustid taxnumber duns));
+ if (!$self->{employee_id}) {
+ map { $self->{"employee_${_}"} = $myconfig->{$_}; } qw(email tel fax name signature company address businessnumber co_ustid taxnumber duns);
+ }
- map({ $self->{"${_}"} = $myconfig->{$_}; }
- qw(co_ustid));
-
+ map { $self->{"${_}"} = $myconfig->{$_}; } qw(co_ustid);
$self->{copies} = 1 if (($self->{copies} *= 1) <= 0);
my $attachment_filename = $main::locale->unquote_special_chars('HTML', $self->get_formname_translation());
my $prefix = $self->get_number_prefix_for_type();
- if ($attachment_filename && $self->{"${prefix}number"}) {
+ if ($self->{preview} && (first { $self->{type} eq $_ } qw(invoice credit_note))) {
+ $attachment_filename .= ' (' . $main::locale->text('Preview') . ')' . $self->get_extension_for_format();
+
+ } elsif ($attachment_filename && $self->{"${prefix}number"}) {
$attachment_filename .= "_" . $self->{"${prefix}number"} . $self->get_extension_for_format();
- $attachment_filename = $main::locale->quote_special_chars('filenames', $attachment_filename);
- $attachment_filename =~ s|[\s/\\]+|_|g;
+
} else {
$attachment_filename = "";
}
+ $attachment_filename = $main::locale->quote_special_chars('filenames', $attachment_filename);
+ $attachment_filename =~ s|[\s/\\]+|_|g;
+
return $attachment_filename;
}
my ($self, $myconfig) = @_;
+ if ($standard_dbh && !$standard_dbh->{Active}) {
+ $main::lxdebug->message(LXDebug::INFO, "get_standard_dbh: \$standard_dbh is defined but not Active anymore");
+ undef $standard_dbh;
+ }
+
$standard_dbh ||= $self->dbconnect_noauto($myconfig);
$main::lxdebug->leave_sub(2);
$main::lxdebug->leave_sub();
}
-sub get_salesman {
+sub get_employee_data {
$main::lxdebug->enter_sub();
- my ($self, $myconfig, $salesman_id) = @_;
+ my $self = shift;
+ my %params = @_;
+
+ Common::check_params(\%params, qw(prefix));
+ Common::check_params_x(\%params, qw(id));
- $main::lxdebug->leave_sub() and return unless $salesman_id;
+ if (!$params{id}) {
+ $main::lxdebug->leave_sub();
+ return;
+ }
- my $dbh = $self->get_standard_dbh($myconfig);
+ my $myconfig = \%main::myconfig;
+ my $dbh = $params{dbh} || $self->get_standard_dbh($myconfig);
- my ($login) =
- selectrow_query($self, $dbh, qq|SELECT login FROM employee WHERE id = ?|,
- $salesman_id);
+ my ($login) = selectrow_query($self, $dbh, qq|SELECT login FROM employee WHERE id = ?|, conv_i($params{id}));
if ($login) {
- my $user = new User($main::memberfile, $login);
- map({ $self->{"salesman_$_"} = $user->{$_}; }
- qw(address businessnumber co_ustid company duns email fax name
- taxnumber tel));
- $self->{salesman_login} = $login;
+ my $user = User->new($login);
+ map { $self->{$params{prefix} . "_${_}"} = $user->{$_}; } qw(address businessnumber co_ustid company duns email fax name signature taxnumber tel);
- $self->{salesman_name} = $login
- if ($self->{salesman_name} eq "");
+ $self->{$params{prefix} . '_login'} = $login;
+ $self->{$params{prefix} . '_name'} ||= $login;
}
$main::lxdebug->leave_sub();
$key = "all_contacts" unless ($key);
+ if (!$id) {
+ $self->{$key} = [];
+ $main::lxdebug->leave_sub();
+ return;
+ }
+
my $query =
qq|SELECT cp_id, cp_cv_id, cp_name, cp_givenname, cp_abteilung | .
qq|FROM contacts | .
$key = "all_shipto" unless ($key);
- # get shipping addresses
- my $query = qq|SELECT * FROM shipto WHERE trans_id = ?|;
+ if ($vc_id) {
+ # get shipping addresses
+ my $query = qq|SELECT * FROM shipto WHERE trans_id = ?|;
- $self->{$key} = selectall_hashref_query($self, $dbh, $query, $vc_id);
+ $self->{$key} = selectall_hashref_query($self, $dbh, $query, $vc_id);
+
+ } else {
+ $self->{$key} = [];
+ }
$main::lxdebug->leave_sub();
}
my ($self, $dbh, $param) = @_;
- my ($key, $bins_key, $q_access, @values);
+ my ($key, $bins_key);
if ('' eq ref $param) {
$key = $param;
+
} else {
$key = $param->{key};
$bins_key = $param->{bins};
-
- if ($param->{access}) {
- $q_access =
- qq| AND EXISTS (
- SELECT wa.employee_id
- FROM warehouse_access wa
- WHERE (wa.employee_id = (SELECT id FROM employee WHERE login = ?))
- AND (wa.warehouse_id = w.id)
- AND (wa.access IN ('ro', 'rw')))|;
- push @values, $param->{access};
- }
-
- if ($param->{no_personal}) {
- $q_access .= qq| AND (w.personal_warehouse_of IS NULL)|;
-
- } elsif ($param->{personal}) {
- $q_access .= qq| AND (w.personal_warehouse_of = ?)|;
- push @values, conv_i($param->{personal});
- }
}
my $query = qq|SELECT w.* FROM warehouse w
WHERE (NOT w.invalid) AND
((SELECT COUNT(b.*) FROM bin b WHERE b.warehouse_id = w.id) > 0)
- $q_access
ORDER BY w.sortkey|;
- $self->{$key} = selectall_hashref_query($self, $dbh, $query, @values);
+ $self->{$key} = selectall_hashref_query($self, $dbh, $query);
if ($bins_key) {
$query = qq|SELECT id, description FROM bin WHERE warehouse_id = ?|;
my ($self, $dbh, $myconfig, $table, $module) = @_;
- my $arap = ($table eq 'customer') ? "ar" : "ap";
- $table = $table eq "customer" ? "customer" : "vendor";
- my $where = "1 = 1";
+ my ($arap, $where);
+
+ $table = $table eq "customer" ? "customer" : "vendor";
+ my %column_map = ("a.curr" => "currency",
+ "a.${table}_id" => "${table}_id",
+ "a.department_id" => "department_id",
+ "d.description" => "department",
+ "ct.name" => $table,
+ "current_date + ct.terms" => "duedate",
+ );
- if ($self->{type} =~ /_order/) {
+ if ($self->{type} =~ /delivery_order/) {
+ $arap = 'delivery_orders';
+ delete $column_map{"a.curr"};
+
+ } elsif ($self->{type} =~ /_order/) {
$arap = 'oe';
$where = "quotation = '0'";
- }
- if ($self->{type} =~ /_quotation/) {
+
+ } elsif ($self->{type} =~ /_quotation/) {
$arap = 'oe';
$where = "quotation = '1'";
+
+ } elsif ($table eq 'customer') {
+ $arap = 'ar';
+
+ } else {
+ $arap = 'ap';
+
}
- my $query = qq|SELECT MAX(id) FROM $arap
- WHERE $where AND ${table}_id > 0|;
- my ($trans_id) = selectrow_query($self, $dbh, $query);
+ $where = "($where) AND" if ($where);
+ my $query = qq|SELECT MAX(id) FROM $arap
+ WHERE $where ${table}_id > 0|;
+ my ($trans_id) = selectrow_query($self, $dbh, $query);
+ $trans_id *= 1;
- $trans_id *= 1;
- $query =
- qq|SELECT
- a.curr, a.${table}_id, a.department_id,
- d.description AS department,
- ct.name, current_date + ct.terms AS duedate
- FROM $arap a
- LEFT JOIN $table ct ON (a.${table}_id = ct.id)
- LEFT JOIN department d ON (a.department_id = d.id)
- WHERE a.id = ?|;
- ($self->{currency}, $self->{"${table}_id"}, $self->{department_id},
- $self->{department}, $self->{$table}, $self->{duedate})
- = selectrow_query($self, $dbh, $query, $trans_id);
+ my $column_spec = join(', ', map { "${_} AS $column_map{$_}" } keys %column_map);
+ $query = qq|SELECT $column_spec
+ FROM $arap a
+ LEFT JOIN $table ct ON (a.${table}_id = ct.id)
+ LEFT JOIN department d ON (a.department_id = d.id)
+ WHERE a.id = ?|;
+ my $ref = selectfirst_hashref_query($self, $dbh, $query, $trans_id);
+
+ map { $self->{$_} = $ref->{$_} } values %column_map;
$main::lxdebug->leave_sub();
}