use SL::DB::Default;
use SL::DB::Unit;
use SL::DB::Part;
+use SL::DB::PartsGroup;
use SL::DB::Printer;
use SL::DB::Language;
use SL::DB::RecordLink;
use SL::Helper::CreatePDF qw(:all);
use SL::Helper::PrintOptions;
+use SL::Helper::ShippedQty;
use SL::Controller::Helper::GetModels;
__PACKAGE__->run_before('check_auth');
__PACKAGE__->run_before('recalc',
- only => [ qw(save save_as_new save_and_delivery_order save_and_invoice print create_pdf send_email) ]);
+ only => [ qw(save save_as_new save_and_delivery_order save_and_invoice print send_email) ]);
__PACKAGE__->run_before('get_unalterable_data',
- only => [ qw(save save_as_new save_and_delivery_order save_and_invoice print create_pdf send_email) ]);
+ only => [ qw(save save_as_new save_and_delivery_order save_and_invoice print send_email) ]);
#
# actions
sub action_edit {
my ($self) = @_;
- $self->load_order;
+ if ($::form->{id}) {
+ $self->load_order;
+
+ } else {
+ # this is to edit an order from an unsaved order object
+
+ # set item ids to new fake id, to identify them as new items
+ foreach my $item (@{$self->order->items_sorted}) {
+ $item->{new_fake_id} = join('_', 'new', Time::HiRes::gettimeofday(), int rand 1000000000000);
+ }
+ # trigger rendering values for second row/longdescription as hidden,
+ # because they are loaded only on demand. So we need to keep the values
+ # from the source.
+ $_->{render_second_row} = 1 for @{ $self->order->items_sorted };
+ $_->{render_longdescription} = 1 for @{ $self->order->items_sorted };
+ }
+
$self->recalc();
$self->pre_render();
$self->render(
my $copies = $::form->{print_options}->{copies};
my $groupitems = $::form->{print_options}->{groupitems};
- # only pdf by now
- if (none { $format eq $_ } qw(pdf)) {
+ # only pdf and opendocument by now
+ if (none { $format eq $_ } qw(pdf opendocument opendocument_pdf)) {
return $self->js->flash('error', t8('Format \'#1\' is not supported yet/anymore.', $format))->render;
}
$sfile->fh->close;
my $key = join('_', Time::HiRes::gettimeofday(), int rand 1000000000000);
- $::auth->set_session_value("Order::create_pdf-${key}" => $sfile->file_name);
+ $::auth->set_session_value("Order::print-${key}" => $sfile->file_name);
$self->js
->run('kivi.Order.download_pdf', $pdf_filename, $key)
my ($self) = @_;
my $key = $::form->{key};
- my $tmp_filename = $::auth->get_session_value("Order::create_pdf-${key}");
+ my $tmp_filename = $::auth->get_session_value("Order::print-${key}");
return $self->send_file(
$tmp_filename,
type => 'application/pdf',
$language = SL::DB::Language->new(id => $::form->{print_options}->{language_id})->load if $::form->{print_options}->{language_id};
my $pdf;
- my @errors = genereate_pdf($self->order, \$pdf, {media => $::form->{media},
- format => $::form->{print_options}->{format},
- formname => $::form->{print_options}->{formname},
- language => $language,
- groupitems => $::form->{print_options}->{groupitems}});
+ my @errors = generate_pdf($self->order, \$pdf, {media => $::form->{media},
+ format => $::form->{print_options}->{format},
+ formname => $::form->{print_options}->{formname},
+ language => $language,
+ groupitems => $::form->{print_options}->{groupitems}});
if (scalar @errors) {
return $self->js->flash('error', t8('Conversion to PDF failed: #1', $errors[0]))->render($self);
}
# open the dialog for entering multiple items at once
sub action_show_multi_items_dialog {
- require SL::DB::PartsGroup;
$_[0]->render('order/tabs/_multi_items_dialog', { layout => 0 },
all_partsgroups => SL::DB::Manager::PartsGroup->get_all);
}
show_headers => 1,
no_queue => 1,
no_postscript => 1,
- no_opendocument => 1,
+ no_opendocument => 0,
no_html => 1},
);
$item->active_discount_source($price_source->discount_from_source($item->active_discount_source));
}
+ if (any { $self->type eq $_ } (sales_order_type(), purchase_order_type())) {
+ # calculate shipped qtys here to prevent calling calculate for every item via the items method
+ SL::Helper::ShippedQty->new->calculate($self->order)->write_to_objects;
+ }
+
if ($self->order->number && $::instance_conf->get_webdav) {
my $webdav = SL::Webdav->new(
type => $self->type,
$order->language($params->{language});
$order->flatten_to_form($print_form, format_amounts => 1);
+ my $template_ext;
+ my $template_type;
+ if ($print_form->{format} =~ /(opendocument|oasis)/i) {
+ $template_ext = 'odt';
+ $template_type = 'OpenDocument';
+ }
+
# search for the template
my ($template_file, @template_files) = SL::Helper::CreatePDF->find_template(
name => $print_form->{formname},
+ extension => $template_ext,
email => $print_form->{media} eq 'email',
language => $params->{language},
printer_id => $print_form->{printer_id}, # todo
$print_form->prepare_for_printing;
$$pdf_ref = SL::Helper::CreatePDF->create_pdf(
- template => $template_file,
- variables => $print_form,
+ format => $print_form->{format},
+ template_type => $template_type,
+ template => $template_file,
+ variables => $print_form,
variable_content_types => {
longdescription => 'html',
partnotes => 'html',