X-Git-Url: http://wagnertech.de/git?a=blobdiff_plain;f=SL%2FController%2FOrder.pm;h=c37dc1c94817282f023d6fd2e3691fc73f7490d5;hb=d1d70f4ad540f4d57d1b577b337b6db38074e223;hp=b57d772c03e6549b0159f754db1fe994d35ed8f4;hpb=452e195fa7d3ecf6cb625938d8016dd04bcc33ce;p=kivitendo-erp.git diff --git a/SL/Controller/Order.pm b/SL/Controller/Order.pm index b57d772c0..c37dc1c94 100644 --- a/SL/Controller/Order.pm +++ b/SL/Controller/Order.pm @@ -32,6 +32,7 @@ use List::MoreUtils qw(any none pairwise first_index); use English qw(-no_match_vars); use File::Spec; use Cwd; +use Sort::Naturally; use Rose::Object::MakeMethods::Generic ( @@ -58,9 +59,11 @@ sub action_add { my ($self) = @_; $self->order->transdate(DateTime->now_local()); - my $extra_days = $self->type eq sales_quotation_type() ? $::instance_conf->get_reqdate_interval : 1; + 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; + $self->pre_render(); $self->render( 'order/form', @@ -210,7 +213,8 @@ sub action_save_as_new { # Set new reqdate unless changed if ($order->reqdate == $saved_order->reqdate) { - my $extra_days = $self->type eq sales_quotation_type() ? $::instance_conf->get_reqdate_interval : 1; + 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); } else { $new_attrs{reqdate} = $order->reqdate; @@ -509,6 +513,7 @@ sub action_show_periodic_invoices_config_dialog { if ($::form->{customer_id}) { $::form->{ALL_CONTACTS} = SL::DB::Manager::Contact->get_all_sorted(where => [ cp_cv_id => $::form->{customer_id} ]); + $::form->{email_recipient_invoice_address} = SL::DB::Manager::Customer->find_by(id => $::form->{customer_id})->invoice_mail; } $self->render('oe/edit_periodic_invoices_config', { layout => 0 }, @@ -905,9 +910,17 @@ sub action_reorder_items { my $method = $sort_keys{$::form->{order_by}}; my @to_sort = map { { old_pos => $_->position, order_by => $method->($_) } } @{ $self->order->items_sorted }; if ($::form->{sort_dir}) { - @to_sort = sort { $a->{order_by} cmp $b->{order_by} } @to_sort; + if ( $::form->{order_by} =~ m/qty|sellprice|discount/ ){ + @to_sort = sort { $a->{order_by} <=> $b->{order_by} } @to_sort; + } else { + @to_sort = sort { $a->{order_by} cmp $b->{order_by} } @to_sort; + } } else { - @to_sort = sort { $b->{order_by} cmp $a->{order_by} } @to_sort; + if ( $::form->{order_by} =~ m/qty|sellprice|discount/ ){ + @to_sort = sort { $b->{order_by} <=> $a->{order_by} } @to_sort; + } else { + @to_sort = sort { $b->{order_by} cmp $a->{order_by} } @to_sort; + } } $self->js ->run('kivi.Order.redisplay_items', \@to_sort) @@ -977,8 +990,8 @@ sub js_load_second_row { my $row_as_html = $self->p->render('order/tabs/_second_row', ITEM => $item, TYPE => $self->type); $self->js - ->html('.row_entry:has(#item_' . $item_id . ') [name = "second_row"]', $row_as_html) - ->data('.row_entry:has(#item_' . $item_id . ') [name = "second_row"]', 'loaded', 1); + ->html('#second_row_' . $item_id, $row_as_html) + ->data('#second_row_' . $item_id, 'loaded', 1); } sub js_redisplay_line_values { @@ -1204,7 +1217,7 @@ sub make_order { # be retrieved via items until the order is saved. Adding empty items to new # order here solves this problem. my $order; - $order = SL::DB::Manager::Order->find_by(id => $::form->{id}) if $::form->{id}; + $order = SL::DB::Order->new(id => $::form->{id})->load(with => [ 'orderitems', 'orderitems.part' ]) if $::form->{id}; $order ||= SL::DB::Order->new(orderitems => [], quotation => (any { $self->type eq $_ } (sales_quotation_type(), request_quotation_type()))); @@ -1379,7 +1392,7 @@ sub recalc { tax => $tax }); } - pairwise { $a->{linetotal} = $b->{linetotal} } @{$self->order->items}, @{$pat{items}}; + pairwise { $a->{linetotal} = $b->{linetotal} } @{$self->order->items_sorted}, @{$pat{items}}; } # get data for saving, printing, ..., that is not changed in the form @@ -1463,6 +1476,14 @@ sub save { sub workflow_sales_or_purchase_order { my ($self) = @_; + # always save + my $errors = $self->save(); + + if (scalar @{ $errors }) { + $self->js->flash('error', $_) foreach @{ $errors }; + return $self->js->render(); + } + my $destination_type = $::form->{type} eq sales_quotation_type() ? sales_order_type() : $::form->{type} eq request_quotation_type() ? purchase_order_type() @@ -1591,13 +1612,13 @@ sub setup_edit_action_bar { t8('Workflow'), ], action => [ - t8('Sales Order'), + t8('Save and Sales Order'), submit => [ '#order_form', { action => "Order/sales_order" } ], only_if => (any { $self->type eq $_ } (sales_quotation_type(), purchase_order_type())), disabled => !$self->order->id ? t8('This object has not been saved yet.') : undef, ], action => [ - t8('Purchase Order'), + t8('Save and Purchase Order'), submit => [ '#order_form', { action => "Order/purchase_order" } ], only_if => (any { $self->type eq $_ } (sales_order_type(), request_quotation_type())), disabled => !$self->order->id ? t8('This object has not been saved yet.') : undef,