X-Git-Url: http://wagnertech.de/git?a=blobdiff_plain;ds=sidebyside;f=SL%2FController%2FOrder.pm;h=5a7d58eb8ba55bc0ad9b52106ef9a4d74fc4922c;hb=85693e13660f80e5116e571ccac7199a680817c9;hp=0fb8dc2ee1358b86d43909d8a62a15ca199b947d;hpb=db7ddbbe88d50488f5d1f5a09ab2d3455f614e7f;p=kivitendo-erp.git diff --git a/SL/Controller/Order.pm b/SL/Controller/Order.pm index 0fb8dc2ee..5a7d58eb8 100644 --- a/SL/Controller/Order.pm +++ b/SL/Controller/Order.pm @@ -69,9 +69,14 @@ sub action_add { my ($self) = @_; $self->order->transdate(DateTime->now_local()); - my $extra_days = $self->{type} eq 'sales_quotation' ? $::instance_conf->get_reqdate_interval : - $self->{type} eq 'sales_order' ? $::instance_conf->get_delivery_date_interval : 1; - $self->order->reqdate(DateTime->today_local->next_workday(extra_days => $extra_days)) if !$self->order->reqdate; + my $extra_days = $self->type eq sales_quotation_type() ? $::instance_conf->get_reqdate_interval : + $self->type eq sales_order_type() ? $::instance_conf->get_delivery_date_interval : 1; + + if ( ($self->type eq sales_order_type() && $::instance_conf->get_deliverydate_on) + || ($self->type eq sales_quotation_type() && $::instance_conf->get_reqdate_on) + && (!$self->order->reqdate)) { + $self->order->reqdate(DateTime->today_local->next_workday(extra_days => $extra_days)); + } $self->pre_render(); @@ -220,11 +225,17 @@ sub action_save_as_new { ? DateTime->today_local : $order->transdate; - # Set new reqdate unless changed + # Set new reqdate unless changed if it is enabled in client config if ($order->reqdate == $saved_order->reqdate) { - my $extra_days = $self->{type} eq 'sales_quotation' ? $::instance_conf->get_reqdate_interval : - $self->{type} eq 'sales_order' ? $::instance_conf->get_delivery_date_interval : 1; - $new_attrs{reqdate} = DateTime->today_local->next_workday(extra_days => $extra_days); + my $extra_days = $self->type eq sales_quotation_type() ? $::instance_conf->get_reqdate_interval : + $self->type eq sales_order_type() ? $::instance_conf->get_delivery_date_interval : 1; + + if ( ($self->type eq sales_order_type() && !$::instance_conf->get_deliverydate_on) + || ($self->type eq sales_quotation_type() && !$::instance_conf->get_reqdate_on)) { + $new_attrs{reqdate} = ''; + } else { + $new_attrs{reqdate} = DateTime->today_local->next_workday(extra_days => $extra_days); + } } else { $new_attrs{reqdate} = $order->reqdate; } @@ -316,41 +327,59 @@ sub action_print { $self->js->flash('info', t8('The PDF has been printed')); } - # copy file to webdav folder - if ($self->order->number && $::instance_conf->get_webdav_documents) { - my $webdav = SL::Webdav->new( - type => $self->type, - number => $self->order->number, - ); - my $webdav_file = SL::Webdav::File->new( - webdav => $webdav, - filename => $pdf_filename, - ); - eval { - $webdav_file->store(data => \$pdf); - 1; - } or do { - $self->js->flash('error', t8('Storing PDF to webdav folder failed: #1', $@)); - } - } - if ($self->order->number && $::instance_conf->get_doc_storage) { - eval { - SL::File->save(object_id => $self->order->id, - object_type => $self->type, - mime_type => 'application/pdf', - source => 'created', - file_type => 'document', - file_name => $pdf_filename, - file_contents => $pdf); - 1; - } or do { - $self->js->flash('error', t8('Storing PDF in storage backend failed: #1', $@)); - } + my @warnings = store_pdf_to_webdav_and_filemanagement($self->order, $pdf, $pdf_filename); + if (scalar @warnings) { + $self->js->flash('warning', $_) for @warnings; } $self->save_history('PRINTED'); - $self->js->render; + $self->js + ->run('kivi.ActionBar.setEnabled', '#save_and_email_action') + ->render; +} +sub action_preview_pdf { + my ($self) = @_; + + my $errors = $self->save(); + if (scalar @{ $errors }) { + $self->js->flash('error', $_) foreach @{ $errors }; + return $self->js->render(); + } + + $self->js_reset_order_and_item_ids_after_save; + + my $format = 'pdf'; + my $media = 'screen'; + my $formname = $self->type; + + # only pdf + # create a form for generate_attachment_filename + my $form = Form->new; + $form->{$self->nr_key()} = $self->order->number; + $form->{type} = $self->type; + $form->{format} = $format; + $form->{formname} = $formname; + $form->{language} = '_' . $self->order->language->template_code if $self->order->language; + my $pdf_filename = $form->generate_attachment_filename(); + + my $pdf; + my @errors = generate_pdf($self->order, \$pdf, { format => $format, + formname => $formname, + language => $self->order->language, + }); + if (scalar @errors) { + return $self->js->flash('error', t8('Conversion to PDF failed: #1', $errors[0]))->render; + } + $self->save_history('PREVIEWED'); + $self->js->flash('info', t8('The PDF has been previewed')); + # screen/download + $self->send_file( + \$pdf, + type => SL::MIME->mime_type_from_ext($pdf_filename), + name => $pdf_filename, + js_no_render => 0, + ); } # open the email dialog @@ -386,6 +415,7 @@ sub action_save_and_show_email_dialog { $form->{language} = '_' . $self->order->language->template_code if $self->order->language; $form->{language_id} = $self->order->language->id if $self->order->language; $form->{format} = 'pdf'; + $form->{cp_id} = $self->order->contact->cp_id if $self->order->contact; $email_form->{subject} = $form->generate_email_subject(); $email_form->{attachment_filename} = $form->generate_attachment_filename(); @@ -446,6 +476,11 @@ sub action_send_email { return $self->js->flash('error', t8('Conversion to PDF failed: #1', $errors[0]))->render($self); } + my @warnings = store_pdf_to_webdav_and_filemanagement($self->order, $pdf, $::form->{attachment_filename}); + if (scalar @warnings) { + flash_later('warning', $_) for @warnings; + } + my $sfile = SL::SessionFile::Random->new(mode => "w"); $sfile->fh->print($pdf); $sfile->fh->close; @@ -1855,13 +1890,24 @@ sub setup_edit_action_bar { action => [ t8('Export'), ], + action => [ + t8('Save and preview PDF'), + call => [ 'kivi.Order.save', 'preview_pdf', $::instance_conf->get_order_warn_duplicate_parts, + $::instance_conf->get_order_warn_no_deliverydate, + ], + ], action => [ t8('Save and print'), - call => [ 'kivi.Order.show_print_options', $::instance_conf->get_order_warn_duplicate_parts ], + call => [ 'kivi.Order.show_print_options', $::instance_conf->get_order_warn_duplicate_parts, + $::instance_conf->get_order_warn_no_deliverydate, + ], ], action => [ t8('Save and E-mail'), - call => [ 'kivi.Order.save', 'save_and_show_email_dialog', $::instance_conf->get_order_warn_duplicate_parts ], + id => 'save_and_email_action', + call => [ 'kivi.Order.save', 'save_and_show_email_dialog', $::instance_conf->get_order_warn_duplicate_parts, + $::instance_conf->get_order_warn_no_deliverydate, + ], disabled => !$self->order->id ? t8('This object has not been saved yet.') : undef, ], action => [ @@ -1972,6 +2018,7 @@ sub get_files_for_email_dialog { $files{versions} = [ SL::File->get_all_versions(object_id => $self->order->id, object_type => $self->order->type, file_type => 'document') ]; $files{files} = [ SL::File->get_all( object_id => $self->order->id, object_type => $self->order->type, file_type => 'attachment') ]; $files{vc_files} = [ SL::File->get_all( object_id => $self->order->{$self->cv}->id, object_type => $self->cv, file_type => 'attachment') ]; + $files{project_files} = [ SL::File->get_all( object_id => $self->order->globalproject_id, object_type => 'project', file_type => 'attachment') ]; } my @parts = @@ -2137,6 +2184,46 @@ sub save_history { )->save; } +sub store_pdf_to_webdav_and_filemanagement { + my($order, $content, $filename) = @_; + + my @errors; + + # copy file to webdav folder + if ($order->number && $::instance_conf->get_webdav_documents) { + my $webdav = SL::Webdav->new( + type => $order->type, + number => $order->number, + ); + my $webdav_file = SL::Webdav::File->new( + webdav => $webdav, + filename => $filename, + ); + eval { + $webdav_file->store(data => \$content); + 1; + } or do { + push @errors, t8('Storing PDF to webdav folder failed: #1', $@); + }; + } + if ($order->id && $::instance_conf->get_doc_storage) { + eval { + SL::File->save(object_id => $order->id, + object_type => $order->type, + mime_type => 'application/pdf', + source => 'created', + file_type => 'document', + file_name => $filename, + file_contents => $content); + 1; + } or do { + push @errors, t8('Storing PDF in storage backend failed: #1', $@); + }; + } + + return @errors; +} + 1; __END__