X-Git-Url: http://wagnertech.de/gitweb/gitweb.cgi/mfinanz.git/blobdiff_plain/1d2420386a937076a17d23fb42810d56fabc83a4..cdd2f4c8b75ed28be4e48e99ddc5e49bdc139fe6:/SL/Controller/Order.pm diff --git a/SL/Controller/Order.pm b/SL/Controller/Order.pm index 9ba587e05..ff0ec7f51 100644 --- a/SL/Controller/Order.pm +++ b/SL/Controller/Order.pm @@ -15,12 +15,14 @@ use SL::DB::Order; 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; @@ -42,10 +44,10 @@ use Rose::Object::MakeMethods::Generic __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 @@ -71,7 +73,23 @@ sub action_add { 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( @@ -236,7 +254,7 @@ sub action_print { $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) @@ -294,7 +312,7 @@ sub action_download_pdf { 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', @@ -729,7 +747,6 @@ sub action_add_item { # 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); } @@ -1450,6 +1467,11 @@ sub pre_render { $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,