X-Git-Url: http://wagnertech.de/git?a=blobdiff_plain;ds=inline;f=SL%2FForm.pm;h=04ac43c41bfa4d3b7d7ef6ffa30c32e52a8d5855;hb=103612f3c8ede917cc8f3ed560e9f23cca31de2d;hp=d7e0cdae9db0487e921a3f4e6137d15566a06836;hpb=0d1bb5102f01eb03da55bc87b52ac52cd7ae7534;p=kivitendo-erp.git
diff --git a/SL/Form.pm b/SL/Form.pm
index d7e0cdae9..04ac43c41 100644
--- a/SL/Form.pm
+++ b/SL/Form.pm
@@ -37,6 +37,7 @@
package Form;
+use Carp;
use Data::Dumper;
use CGI;
@@ -53,7 +54,10 @@ use SL::CVar;
use SL::DB;
use SL::DBConnect;
use SL::DBUtils;
+use SL::DB::Customer;
use SL::DB::Default;
+use SL::DB::PaymentTerm;
+use SL::DB::Vendor;
use SL::DO;
use SL::IC;
use SL::IS;
@@ -461,14 +465,15 @@ sub header {
# this should gradually move to the layouts that need it
$layout->use_stylesheet("$_.css") for qw(
main menu list_accounts jquery.autocomplete
- jquery.multiselect2side frame_header/header
+ 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
- common part_selection switchmenuframe
+ 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}");
$self->{favicon} ||= "favicon.ico";
@@ -614,14 +619,7 @@ sub _prepare_html_template {
map { $additional_params->{"myconfig_${_}"} = $main::myconfig{$_}; } keys %::myconfig;
}
- $additional_params->{"conf_webdav"} = $::lx_office_conf{features}->{webdav};
- $additional_params->{"conf_latex_templates"} = $::lx_office_conf{print_templates}->{latex};
- $additional_params->{"conf_opendocument_templates"} = $::lx_office_conf{print_templates}->{opendocument};
- $additional_params->{"conf_vertreter"} = $::lx_office_conf{features}->{vertreter};
- $additional_params->{"conf_parts_image_css"} = $::lx_office_conf{features}->{parts_image_css};
- $additional_params->{"conf_parts_listing_images"} = $::lx_office_conf{features}->{parts_listing_images};
- $additional_params->{"conf_parts_show_image"} = $::lx_office_conf{features}->{parts_show_image};
- $additional_params->{"INSTANCE_CONF"} = $::instance_conf;
+ $additional_params->{INSTANCE_CONF} = $::instance_conf;
if (my $debug_options = $::lx_office_conf{debug}{options}) {
map { $additional_params->{'DEBUG_' . uc($_)} = $debug_options->{$_} } keys %$debug_options;
@@ -1051,12 +1049,10 @@ sub parse_template {
close $temp_fh;
(undef, undef, $self->{template_meta}{tmpfile}) = File::Spec->splitpath( $self->{tmpfile} );
- if ($template->uses_temp_file() || $self->{media} eq 'email') {
- $out = $self->{OUT};
- $out_mode = $self->{OUT_MODE} || '>';
- $self->{OUT} = "$self->{tmpfile}";
- $self->{OUT_MODE} = '>';
- }
+ $out = $self->{OUT};
+ $out_mode = $self->{OUT_MODE} || '>';
+ $self->{OUT} = "$self->{tmpfile}";
+ $self->{OUT_MODE} = '>';
my $result;
my $command_formatter = sub {
@@ -1079,8 +1075,11 @@ sub parse_template {
close OUT if $self->{OUT};
+ my $copy_to_webdav = $::instance_conf->get_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;
+ Common::copy_file_to_webdav_folder($self) if $copy_to_webdav;
$self->cleanup;
chdir("$self->{cwd}");
@@ -1089,92 +1088,96 @@ sub parse_template {
return;
}
- if ($template->uses_temp_file() || $self->{media} eq 'email') {
-
- if ($self->{media} eq 'email') {
+ Common::copy_file_to_webdav_folder($self) if $copy_to_webdav;
- my $mail = new Mailer;
+ if ($self->{media} eq 'email') {
- map { $mail->{$_} = $self->{$_} }
- qw(cc bcc subject message version format);
- $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 $mail = new Mailer;
- # 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
";
+ map { $mail->{$_} = $self->{$_} }
+ qw(cc bcc subject message version format);
+ $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;
- open(IN, "<", $self->{tmpfile})
- or $self->error($self->cleanup . "$self->{tmpfile} : $!");
- $mail->{message} .= $_ while ;
- close(IN);
-
- } else {
+ # 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
";
- if (!$self->{"do_not_attach"}) {
- my $attachment_name = $self->{attachment_filename} || $self->{tmpfile};
- $attachment_name =~ s/\.(.+?)$/.${ext_for_format}/ if ($ext_for_format);
- $mail->{attachments} = [{ "filename" => $self->{tmpfile},
- "name" => $attachment_name }];
- }
+ open(IN, "<", $self->{tmpfile})
+ or $self->error($self->cleanup . "$self->{tmpfile} : $!");
+ $mail->{message} .= $_ while ;
+ close(IN);
- $mail->{message} =~ s/\r//g;
- $mail->{message} .= "\n-- \n$myconfig->{signature}";
+ } else {
+ if (!$self->{"do_not_attach"}) {
+ my $attachment_name = $self->{attachment_filename} || $self->{tmpfile};
+ $attachment_name =~ s/\.(.+?)$/.${ext_for_format}/ if ($ext_for_format);
+ $mail->{attachments} = [{ "filename" => $self->{tmpfile},
+ "name" => $attachment_name }];
}
- my $err = $mail->send();
- $self->error($self->cleanup . "$err") if ($err);
-
- } else {
+ $mail->{message} =~ s/\r//g;
+ $mail->{message} .= "\n-- \n$myconfig->{signature}";
- $self->{OUT} = $out;
- $self->{OUT_MODE} = $out_mode;
+ }
- my $numbytes = (-s $self->{tmpfile});
- open(IN, "<", $self->{tmpfile})
- or $self->error($self->cleanup . "$self->{tmpfile} : $!");
- binmode IN;
+ my $err = $mail->send();
+ $self->error($self->cleanup . "$err") if ($err);
- $self->{copies} = 1 unless $self->{media} eq 'printer';
+ } else {
- chdir("$self->{cwd}");
- #print(STDERR "Kopien $self->{copies}\n");
- #print(STDERR "OUT $self->{OUT}\n");
- for my $i (1 .. $self->{copies}) {
- if ($self->{OUT}) {
- $self->{OUT} = $command_formatter->($self->{OUT_MODE}, $self->{OUT});
+ $self->{OUT} = $out;
+ $self->{OUT_MODE} = $out_mode;
- open OUT, $self->{OUT_MODE}, $self->{OUT} or $self->error($self->cleanup . "$self->{OUT} : $!");
- print OUT $_ while ;
- close OUT;
- seek IN, 0, 0;
+ my $numbytes = (-s $self->{tmpfile});
+ open(IN, "<", $self->{tmpfile})
+ or $self->error($self->cleanup . "$self->{tmpfile} : $!");
+ binmode IN;
- } else {
- $self->{attachment_filename} = ($self->{attachment_filename})
- ? $self->{attachment_filename}
- : $self->generate_attachment_filename();
+ $self->{copies} = 1 unless $self->{media} eq 'printer';
- # launch application
- print qq|Content-Type: | . $template->get_mime_type() . qq|
-Content-Disposition: attachment; filename="$self->{attachment_filename}"
-Content-Length: $numbytes
+ chdir("$self->{cwd}");
+ #print(STDERR "Kopien $self->{copies}\n");
+ #print(STDERR "OUT $self->{OUT}\n");
+ for my $i (1 .. $self->{copies}) {
+ if ($self->{OUT}) {
+ $self->{OUT} = $command_formatter->($self->{OUT_MODE}, $self->{OUT});
-|;
+ open OUT, $self->{OUT_MODE}, $self->{OUT} or $self->error($self->cleanup . "$self->{OUT} : $!");
+ print OUT $_ while ;
+ close OUT;
+ seek IN, 0, 0;
- $::locale->with_raw_io(\*STDOUT, sub { print while });
+ } else {
+ 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' => '',
+ );
}
- }
- close(IN);
+ print $::request->cgi->header(%headers);
+
+ $::locale->with_raw_io(\*STDOUT, sub { print while });
+ }
}
+ close(IN);
}
$self->cleanup;
@@ -1407,11 +1410,19 @@ sub get_standard_dbh {
return $standard_dbh;
}
+sub set_standard_dbh {
+ my ($self, $dbh) = @_;
+ my $old_dbh = $standard_dbh;
+ $standard_dbh = $dbh;
+
+ return $old_dbh;
+}
+
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));
@@ -1444,7 +1455,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));
@@ -1928,22 +1939,12 @@ sub get_duedate {
my ($self, $myconfig, $reference_date) = @_;
- $reference_date = $reference_date ? conv_dateq($reference_date) . '::DATE' : 'current_date';
+ 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 $dbh = $self->get_standard_dbh($myconfig);
- my ($payment_id, $duedate);
-
- if($self->{payment_id}) {
- $payment_id = $self->{payment_id};
- } elsif($self->{vendor_id}) {
- my $query = 'SELECT payment_id FROM vendor WHERE id = ?';
- ($payment_id) = selectrow_query($self, $dbh, $query, $self->{vendor_id});
- }
-
- if ($payment_id) {
- my $query = qq|SELECT ${reference_date} + terms_netto FROM payment_terms WHERE id = ?|;
- ($duedate) = selectrow_query($self, $dbh, $query, $payment_id);
- }
+ my $duedate = $terms ? $terms->calc_date(reference_date => $reference_date)->to_kivitendo : undef;
$main::lxdebug->leave_sub();
@@ -2768,14 +2769,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|;
@@ -3428,7 +3422,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.