X-Git-Url: http://wagnertech.de/git?a=blobdiff_plain;ds=sidebyside;f=SL%2FController%2FOrder.pm;h=46e31c336ee977e0a1df4ca8fa797e6b23cfaeb2;hb=44ed4e99507c6de660029eabad6b3ccdc7ab5fd6;hp=f6afed9a807d80e0c3af46326dffd34adcfb4710;hpb=822f5cf7db806f963758849e1e944340a9233a0d;p=kivitendo-erp.git diff --git a/SL/Controller/Order.pm b/SL/Controller/Order.pm index f6afed9a8..46e31c336 100644 --- a/SL/Controller/Order.pm +++ b/SL/Controller/Order.pm @@ -11,6 +11,7 @@ use SL::PriceSource; use SL::Webdav; use SL::File; use SL::Util qw(trim); +use SL::YAML; use SL::DB::Order; use SL::DB::Default; use SL::DB::Unit; @@ -32,6 +33,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 ( @@ -250,8 +252,7 @@ sub action_print { return $self->js->render(); } - $self->js->val('#id', $self->order->id) - ->val('#order_' . $self->nr_key(), $self->order->number); + $self->js_reset_order_and_item_ids_after_save; my $format = $::form->{print_options}->{format}; my $media = $::form->{print_options}->{media}; @@ -421,8 +422,7 @@ sub action_send_email { return $self->js->render(); } - $self->js->val('#id', $self->order->id) - ->val('#order_' . $self->nr_key(), $self->order->number); + $self->js_reset_order_and_item_ids_after_save; my $email_form = delete $::form->{email_form}; my %field_names = (to => 'email'); @@ -551,7 +551,7 @@ sub action_assign_periodic_invoices_config { email_body => $::form->{email_body}, }; - my $periodic_invoices_config = YAML::Dump($config); + my $periodic_invoices_config = SL::YAML::Dump($config); my $status = $self->get_periodic_invoices_status($config); @@ -909,9 +909,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) @@ -1045,6 +1053,27 @@ sub js_redisplay_amounts_and_taxes { ->insertBefore($self->build_tax_rows, '#amount_row_id'); } +sub js_reset_order_and_item_ids_after_save { + my ($self) = @_; + + $self->js + ->val('#id', $self->order->id) + ->val('#converted_from_oe_id', '') + ->val('#order_' . $self->nr_key(), $self->order->number); + + my $idx = 0; + foreach my $form_item_id (@{ $::form->{orderitem_ids} }) { + next if !$self->order->items_sorted->[$idx]->id; + next if $form_item_id !~ m{^new}; + $self->js + ->val ('[name="orderitem_ids[+]"][value="' . $form_item_id . '"]', $self->order->items_sorted->[$idx]->id) + ->val ('#item_' . $form_item_id, $self->order->items_sorted->[$idx]->id) + ->attr('#item_' . $form_item_id, "id", 'item_' . $self->order->items_sorted->[$idx]->id); + $idx++; + } + $self->js->val('[name="converted_from_orderitems_ids[+]"]', ''); +} + # # helpers # @@ -1223,7 +1252,7 @@ sub make_order { $order->assign_attributes(%{$::form->{order}}); - if (my $periodic_invoices_config_attrs = $form_periodic_invoices_config ? YAML::Load($form_periodic_invoices_config) : undef) { + if (my $periodic_invoices_config_attrs = $form_periodic_invoices_config ? SL::YAML::Load($form_periodic_invoices_config) : undef) { my $periodic_invoices_config = $order->periodic_invoices_config || $order->periodic_invoices_config(SL::DB::PeriodicInvoicesConfig->new); $periodic_invoices_config->assign_attributes(%$periodic_invoices_config_attrs); } @@ -1467,6 +1496,7 @@ sub save { sub workflow_sales_or_purchase_order { my ($self) = @_; + # always save my $errors = $self->save(); @@ -1475,7 +1505,6 @@ sub workflow_sales_or_purchase_order { 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() : $::form->{type} eq purchase_order_type() ? sales_order_type() @@ -1714,7 +1743,7 @@ sub generate_pdf { }, ); 1; - } || push @errors, ref($EVAL_ERROR) eq 'SL::X::FormError' ? $EVAL_ERROR->getMessage : $EVAL_ERROR; + } || push @errors, ref($EVAL_ERROR) eq 'SL::X::FormError' ? $EVAL_ERROR->error : $EVAL_ERROR; }); return @errors; @@ -1756,7 +1785,7 @@ sub make_periodic_invoices_config_from_yaml { my ($yaml_config) = @_; return if !$yaml_config; - my $attr = YAML::Load($yaml_config); + my $attr = SL::YAML::Load($yaml_config); return if 'HASH' ne ref $attr; return SL::DB::PeriodicInvoicesConfig->new(%$attr); }