X-Git-Url: http://wagnertech.de/git?a=blobdiff_plain;ds=sidebyside;f=SL%2FForm.pm;h=a3990f9cb19db768b559cd0929cbc7552beedd84;hb=85c4af4a97e002a6ec7804c7fb28d3c4c0972398;hp=39bd9a578f54d49dede6e6f4cbcd75b21e7bbc0d;hpb=f64f0648b333346294a8ed7e44dd7b7b98099f0c;p=kivitendo-erp.git
diff --git a/SL/Form.pm b/SL/Form.pm
index 39bd9a578..a3990f9cb 100644
--- a/SL/Form.pm
+++ b/SL/Form.pm
@@ -467,11 +467,12 @@ sub header {
main menu list_accounts jquery.autocomplete
jquery.multiselect2side
ui-lightness/jquery-ui
- jquery-ui.custom jqModal
+ jquery-ui.custom
);
$layout->use_javascript("$_.js") for (qw(
- jquery jquery-ui jquery.cookie jqModal jquery.checkall jquery.download
+ jquery jquery-ui jquery.cookie jquery.checkall jquery.download
+ jquery/jquery.form client_js
common part_selection switchmenuframe autocomplete_part
), "jquery/ui/i18n/jquery.ui.datepicker-$::myconfig{countrycode}");
@@ -672,6 +673,7 @@ sub init_template {
'COMPILE_EXT' => '.tcc',
'COMPILE_DIR' => $::lx_office_conf{paths}->{userspath} . '/templates-cache',
'ERROR' => 'templates/webpages/generic/exception.html',
+ 'ENCODING' => 'utf8',
})) || die;
}
@@ -693,7 +695,6 @@ sub show_generic_error {
}
if ($::request->is_ajax) {
- $::lxdebug->message(0, "trying to render AJAX response...");
SL::ClientJS->new
->error($error)
->render(SL::Controller::Base->new);
@@ -1031,6 +1032,12 @@ sub parse_template {
$self->{"myconfig_${_}"} = $myconfig->{$_} for grep { $_ ne 'dbpasswd' } keys %{ $myconfig };
$self->{$_} = $defaults->$_ for qw(co_ustid);
$self->{"myconfig_${_}"} = $defaults->$_ for qw(address businessnumber co_ustid company duns sepa_creditor_id taxnumber);
+ $self->{AUTH} = $::auth;
+ $self->{INSTANCE_CONF} = $::instance_conf;
+ $self->{LOCALE} = $::locale;
+ $self->{LXCONFIG} = $::lx_office_conf;
+ $self->{LXDEBUG} = $::lxdebug;
+ $self->{MYCONFIG} = \%::myconfig;
$self->{copies} = 1 if (($self->{copies} *= 1) <= 0);
@@ -1073,8 +1080,9 @@ sub parse_template {
}
close OUT if $self->{OUT};
-
- my $copy_to_webdav = $::instance_conf->get_webdav && $::instance_conf->get_webdav_documents && !$self->{preview};
+ # check only one flag (webdav_documents)
+ # therefore copy to webdav, even if we do not have the webdav feature enabled (just archive)
+ my $copy_to_webdav = $::instance_conf->get_webdav_documents && !$self->{preview} && $self->{tmpdir} && $self->{tmpfile} && $self->{type};
if ($self->{media} eq 'file') {
copy(join('/', $self->{cwd}, $userspath, $self->{tmpfile}), $out =~ m|^/| ? $out : join('/', $self->{cwd}, $out)) if $template->uses_temp_file;
@@ -1098,15 +1106,16 @@ sub parse_template {
$mail->{to} = $self->{EMAIL_RECIPIENT} ? $self->{EMAIL_RECIPIENT} : $self->{email};
$mail->{from} = qq|"$myconfig->{name}" <$myconfig->{email}>|;
$mail->{fileid} = time() . '.' . $$ . '.';
- $myconfig->{signature} =~ s/\r//g;
+ my $full_signature = $self->create_email_signature();
+ $full_signature =~ s/\r//g;
# if we send html or plain text inline
if (($self->{format} eq 'html') && ($self->{sendmode} eq 'inline')) {
$mail->{contenttype} = "text/html";
$mail->{message} =~ s/\r//g;
$mail->{message} =~ s/\n/
\n/g;
- $myconfig->{signature} =~ s/\n/
\n/g;
- $mail->{message} .= "
\n--
\n$myconfig->{signature}\n
";
+ $full_signature =~ s/\n/
\n/g;
+ $mail->{message} .= $full_signature;
open(IN, "<", $self->{tmpfile})
or $self->error($self->cleanup . "$self->{tmpfile} : $!");
@@ -1122,9 +1131,7 @@ sub parse_template {
"name" => $attachment_name }];
}
- $mail->{message} =~ s/\r//g;
- $mail->{message} .= "\n-- \n$myconfig->{signature}";
-
+ $mail->{message} .= $full_signature;
}
my $err = $mail->send();
@@ -1155,16 +1162,22 @@ sub parse_template {
seek IN, 0, 0;
} else {
- $self->{attachment_filename} = ($self->{attachment_filename})
- ? $self->{attachment_filename}
- : $self->generate_attachment_filename();
-
- # launch application
- print qq|Content-Type: | . $template->get_mime_type() . qq|
-Content-Disposition: attachment; filename="$self->{attachment_filename}"
-Content-Length: $numbytes
+ my %headers = ('-type' => $template->get_mime_type,
+ '-connection' => 'close',
+ '-charset' => 'UTF-8');
+
+ $self->{attachment_filename} ||= $self->generate_attachment_filename;
+
+ if ($self->{attachment_filename}) {
+ %headers = (
+ %headers,
+ '-attachment' => $self->{attachment_filename},
+ '-content-length' => $numbytes,
+ '-charset' => '',
+ );
+ }
-|;
+ print $::request->cgi->header(%headers);
$::locale->with_raw_io(\*STDOUT, sub { print while });
}
@@ -1415,7 +1428,7 @@ sub date_closed {
$main::lxdebug->enter_sub();
my ($self, $date, $myconfig) = @_;
- my $dbh = $self->dbconnect($myconfig);
+ my $dbh = $self->get_standard_dbh;
my $query = "SELECT 1 FROM defaults WHERE ? < closedto";
my $sth = prepare_execute_query($self, $dbh, $query, conv_date($date));
@@ -1448,7 +1461,7 @@ sub date_max_future {
$main::lxdebug->enter_sub();
my ($self, $date, $myconfig) = @_;
- my $dbh = $self->dbconnect($myconfig);
+ my $dbh = $self->get_standard_dbh;
my $query = "SELECT 1 FROM defaults WHERE ? - current_date > max_future_booking_interval";
my $sth = prepare_execute_query($self, $dbh, $query, conv_date($date));
@@ -1913,17 +1926,24 @@ sub get_employee_data {
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 = ?|, conv_i($params{id}));
+ my ($login, $deleted) = selectrow_query($self, $dbh, qq|SELECT login,deleted FROM employee WHERE id = ?|, conv_i($params{id}));
if ($login) {
- my $user = User->new(login => $login);
- $self->{$params{prefix} . "_${_}"} = $user->{$_} for qw(email fax name signature tel);
- $self->{$params{prefix} . "_${_}"} = $defaults->$_ for qw(address businessnumber co_ustid company duns taxnumber);
-
+ # login already fetched and still the same client (mandant) | same for both cases (delete|!delete)
$self->{$params{prefix} . '_login'} = $login;
- $self->{$params{prefix} . '_name'} ||= $login;
- }
+ $self->{$params{prefix} . "_${_}"} = $defaults->$_ for qw(address businessnumber co_ustid company duns taxnumber);
+ if (!$deleted) {
+ # get employee data from auth.user_config
+ my $user = User->new(login => $login);
+ $self->{$params{prefix} . "_${_}"} = $user->{$_} for qw(email fax name signature tel);
+ } else {
+ # get saved employee data from employee
+ my $employee = SL::DB::Manager::Employee->find_by(id => conv_i($params{id}));
+ $self->{$params{prefix} . "_${_}"} = $employee->{"deleted_$_"} for qw(email fax signature tel);
+ $self->{$params{prefix} . "_name"} = $employee->name;
+ }
+ }
$main::lxdebug->leave_sub();
}
@@ -1935,9 +1955,9 @@ sub get_duedate {
my $terms = $self->{payment_id} ? SL::DB::PaymentTerm->new(id => $self->{payment_id}) ->load
: $self->{customer_id} ? SL::DB::Customer ->new(id => $self->{customer_id})->load->payment
: $self->{vendor_id} ? SL::DB::Vendor ->new(id => $self->{vendor_id}) ->load->payment
- : croak("Missing field in \$::form: payment_id, customer_id or vendor_id");
-
- my $duedate = $terms->calc_date(reference_date => $reference_date)->to_kivitendo;
+ : $self->{invdate} ? undef # no payment terms, therefore invdate == duedate
+ : croak("Missing field in \$::form: payment_id, customer_id, vendor_id or invdate");
+ my $duedate = $terms ? $terms->calc_date(reference_date => $reference_date)->to_kivitendo : undef;
$main::lxdebug->leave_sub();
@@ -2088,10 +2108,10 @@ sub _get_taxcharts {
if (ref $params eq 'HASH') {
$key = $params->{key} if ($params->{key});
if ($params->{module} eq 'AR') {
- push @where, 'taxkey NOT IN (8, 9, 18, 19)';
+ push @where, 'chart_categories ~ \'[ACILQ]\'';
} elsif ($params->{module} eq 'AP') {
- push @where, 'taxkey NOT IN (1, 2, 3, 12, 13)';
+ push @where, 'chart_categories ~ \'[ACELQ]\'';
}
} elsif ($params) {
@@ -2124,10 +2144,22 @@ sub _get_taxzones {
sub _get_employees {
$main::lxdebug->enter_sub();
- my ($self, $dbh, $default_key, $key) = @_;
+ my ($self, $dbh, $params) = @_;
+
+ my $deleted = 0;
- $key = $default_key unless ($key);
- $self->{$key} = selectall_hashref_query($self, $dbh, qq|SELECT * FROM employee ORDER BY lower(name)|);
+ my $key;
+ if (ref $params eq 'HASH') {
+ $key = $params->{key};
+ $deleted = $params->{deleted};
+
+ } else {
+ $key = $params;
+ }
+
+ $key ||= "all_employees";
+ my $filter = $deleted ? '' : 'WHERE NOT COALESCE(deleted, FALSE)';
+ $self->{$key} = selectall_hashref_query($self, $dbh, qq|SELECT * FROM employee $filter ORDER BY lower(name)|);
$main::lxdebug->leave_sub();
}
@@ -2367,7 +2399,7 @@ sub get_lists {
}
if ($params{"employees"}) {
- $self->_get_employees($dbh, "all_employees", $params{"employees"});
+ $self->_get_employees($dbh, $params{"employees"});
}
if ($params{"salesmen"}) {
@@ -2762,14 +2794,7 @@ sub create_links {
FROM acc_trans a
LEFT JOIN chart c ON (c.id = a.chart_id)
LEFT JOIN project p ON (p.id = a.project_id)
- LEFT JOIN tax t ON (t.id= (SELECT tk.tax_id FROM taxkeys tk
- WHERE (tk.taxkey_id=a.taxkey) AND
- ((CASE WHEN a.chart_id IN (SELECT chart_id FROM taxkeys WHERE taxkey_id = a.taxkey)
- THEN tk.chart_id = a.chart_id
- ELSE 1 = 1
- END)
- OR (c.link='%tax%')) AND
- (startdate <= a.transdate) ORDER BY startdate DESC LIMIT 1))
+ LEFT JOIN tax t ON (t.id= a.tax_id)
WHERE a.trans_id = ?
AND a.fx_transaction = '0'
ORDER BY a.acc_trans_id, a.transdate|;
@@ -3155,81 +3180,6 @@ sub get_history {
return 0;
}
-sub update_defaults {
- $main::lxdebug->enter_sub();
-
- my ($self, $myconfig, $fld, $provided_dbh) = @_;
-
- my $dbh;
- if ($provided_dbh) {
- $dbh = $provided_dbh;
- } else {
- $dbh = $self->dbconnect_noauto($myconfig);
- }
- my $query = qq|SELECT $fld FROM defaults FOR UPDATE|;
- my $sth = $dbh->prepare($query);
-
- $sth->execute || $self->dberror($query);
- my ($var) = $sth->fetchrow_array;
- $sth->finish;
-
- $var = 0 if !defined($var) || ($var eq '');
- $var = SL::PrefixedNumber->new(number => $var)->get_next;
- $query = qq|UPDATE defaults SET $fld = ?|;
- do_query($self, $dbh, $query, $var);
-
- if (!$provided_dbh) {
- $dbh->commit;
- $dbh->disconnect;
- }
-
- $main::lxdebug->leave_sub();
-
- return $var;
-}
-
-sub update_business {
- $main::lxdebug->enter_sub();
-
- my ($self, $myconfig, $business_id, $provided_dbh) = @_;
-
- my $dbh;
- if ($provided_dbh) {
- $dbh = $provided_dbh;
- } else {
- $dbh = $self->dbconnect_noauto($myconfig);
- }
- my $query =
- qq|SELECT customernumberinit FROM business
- WHERE id = ? FOR UPDATE|;
- my ($var) = selectrow_query($self, $dbh, $query, $business_id);
-
- return undef unless $var;
-
- if ($var =~ m/\d+$/) {
- my $new_var = (substr $var, $-[0]) * 1 + 1;
- my $len_diff = length($var) - $-[0] - length($new_var);
- $var = substr($var, 0, $-[0]) . ($len_diff > 0 ? '0' x $len_diff : '') . $new_var;
-
- } else {
- $var = $var . '1';
- }
-
- $query = qq|UPDATE business
- SET customernumberinit = ?
- WHERE id = ?|;
- do_query($self, $dbh, $query, $var, $business_id);
-
- if (!$provided_dbh) {
- $dbh->commit;
- $dbh->disconnect;
- }
-
- $main::lxdebug->leave_sub();
-
- return $var;
-}
-
sub get_partsgroup {
$main::lxdebug->enter_sub();
@@ -3376,6 +3326,13 @@ sub prepare_for_printing {
# compatibility.
$self->{$_} = $defaults->$_ for qw(company address taxnumber co_ustid duns sepa_creditor_id);
+ $self->{"myconfig_${_}"} = $::myconfig{$_} for grep { $_ ne 'dbpasswd' } keys %::myconfig;
+
+ if (!$self->{employee_id}) {
+ $self->{"employee_${_}"} = $::myconfig{$_} for qw(email tel fax name signature);
+ $self->{"employee_${_}"} = $defaults->$_ for qw(address businessnumber co_ustid company duns sepa_creditor_id taxnumber);
+ }
+
# set shipto from billto unless set
my $has_shipto = any { $self->{"shipto$_"} } qw(name street zipcode city country contact);
if (!$has_shipto && ($self->{type} =~ m/^(?:purchase_order|request_quotation)$/)) {
@@ -3394,6 +3351,10 @@ sub prepare_for_printing {
$output_longdates = 1;
}
+ $self->{myconfig_output_dateformat} = $output_dateformat;
+ $self->{myconfig_output_longdates} = $output_longdates;
+ $self->{myconfig_output_numberformat} = $output_numberformat;
+
# Retrieve accounts for tax calculation.
IC->retrieve_accounts(\%::myconfig, $self, map { $_ => $self->{"id_$_"} } 1 .. $self->{rowcount});
@@ -3422,7 +3383,7 @@ sub prepare_for_printing {
}
my $printer_code = $self->{printer_code} ? '_' . $self->{printer_code} : '';
- my $email_extension = -f ($defaults->templates . "/$self->{formname}_email${language}.${extension}") ? '_email' : '';
+ my $email_extension = $self->{media} eq 'email' && -f ($defaults->templates . "/$self->{formname}_email${language}.${extension}") ? '_email' : '';
$self->{IN} = "$self->{formname}${email_extension}${language}${printer_code}.${extension}";
# Format dates.
@@ -3447,6 +3408,16 @@ sub prepare_for_printing {
$self->reformat_numbers($output_numberformat, $precision, @{ $field_list });
}
+ $self->{template_meta} = {
+ formname => $self->{formname},
+ language => SL::DB::Manager::Language->find_by_or_create(id => $self->{language_id} || undef),
+ format => $self->{format},
+ media => $self->{media},
+ extension => $extension,
+ printer => SL::DB::Manager::Printer->find_by_or_create(id => $self->{printer_id} || undef),
+ today => DateTime->today,
+ };
+
return $self;
}
@@ -3524,6 +3495,21 @@ sub reformat_numbers {
$::myconfig{numberformat} = $saved_numberformat;
}
+sub create_email_signature {
+
+ my $client_signature = $::instance_conf->get_signature;
+ my $user_signature = $::myconfig{signature};
+
+ my $signature = '';
+ if ( $client_signature or $user_signature ) {
+ $signature = "\n\n-- \n";
+ $signature .= $user_signature . "\n" if $user_signature;
+ $signature .= $client_signature . "\n" if $client_signature;
+ };
+ return $signature;
+
+};
+
sub layout {
my ($self) = @_;
$::lxdebug->enter_sub;
@@ -3566,18 +3552,6 @@ Points of interest for a beginner are:
=head1 SPECIAL FUNCTIONS
-=head2 C PARAMS
-
-PARAMS (not named):
- \%config, - config hashref
- $business_id, - business id
- $dbh - optional database handle
-
-handles business (thats customer/vendor types) sequences.
-
-special behaviour for empty strings in customerinitnumber field:
-will in this case not increase the value, and return undef.
-
=head2 C $url
Generates a HTTP redirection header for the new C<$url>. Constructs an