X-Git-Url: http://wagnertech.de/gitweb/gitweb.cgi/mfinanz.git/blobdiff_plain/bc89ebf428c7bde2205b31c5c9abb66879e673e4..refs/heads/b-3.5.4:/SL/Controller/Order.pm diff --git a/SL/Controller/Order.pm b/SL/Controller/Order.pm index c37dc1c94..f6f6986a1 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; @@ -23,6 +24,7 @@ use SL::DB::RecordLink; use SL::Helper::CreatePDF qw(:all); use SL::Helper::PrintOptions; use SL::Helper::ShippedQty; +use SL::Helper::UserPreferences::PositionsScrollbar; use SL::Controller::Helper::GetModels; @@ -251,8 +253,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}; @@ -422,8 +423,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'); @@ -552,7 +552,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); @@ -1054,6 +1054,28 @@ 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); + } continue { + $idx++; + } + $self->js->val('[name="converted_from_orderitems_ids[+]"]', ''); +} + # # helpers # @@ -1232,7 +1254,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); } @@ -1476,6 +1498,7 @@ sub save { sub workflow_sales_or_purchase_order { my ($self) = @_; + # always save my $errors = $self->save(); @@ -1484,7 +1507,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() @@ -1526,20 +1548,21 @@ sub workflow_sales_or_purchase_order { sub pre_render { my ($self) = @_; - $self->{all_taxzones} = SL::DB::Manager::TaxZone->get_all_sorted(); - $self->{all_departments} = SL::DB::Manager::Department->get_all_sorted(); - $self->{all_employees} = SL::DB::Manager::Employee->get_all(where => [ or => [ id => $self->order->employee_id, - deleted => 0 ] ], - sort_by => 'name'); - $self->{all_salesmen} = SL::DB::Manager::Employee->get_all(where => [ or => [ id => $self->order->salesman_id, - deleted => 0 ] ], - sort_by => 'name'); - $self->{all_payment_terms} = SL::DB::Manager::PaymentTerm->get_all_sorted(where => [ or => [ id => $self->order->payment_id, - obsolete => 0 ] ]); - $self->{all_delivery_terms} = SL::DB::Manager::DeliveryTerm->get_all_sorted(); - $self->{current_employee_id} = SL::DB::Manager::Employee->current->id; - $self->{periodic_invoices_status} = $self->get_periodic_invoices_status($self->order->periodic_invoices_config); - $self->{order_probabilities} = [ map { { title => ($_ * 10) . '%', id => $_ * 10 } } (0..10) ]; + $self->{all_taxzones} = SL::DB::Manager::TaxZone->get_all_sorted(); + $self->{all_departments} = SL::DB::Manager::Department->get_all_sorted(); + $self->{all_employees} = SL::DB::Manager::Employee->get_all(where => [ or => [ id => $self->order->employee_id, + deleted => 0 ] ], + sort_by => 'name'); + $self->{all_salesmen} = SL::DB::Manager::Employee->get_all(where => [ or => [ id => $self->order->salesman_id, + deleted => 0 ] ], + sort_by => 'name'); + $self->{all_payment_terms} = SL::DB::Manager::PaymentTerm->get_all_sorted(where => [ or => [ id => $self->order->payment_id, + obsolete => 0 ] ]); + $self->{all_delivery_terms} = SL::DB::Manager::DeliveryTerm->get_all_sorted(); + $self->{current_employee_id} = SL::DB::Manager::Employee->current->id; + $self->{periodic_invoices_status} = $self->get_periodic_invoices_status($self->order->periodic_invoices_config); + $self->{order_probabilities} = [ map { { title => ($_ * 10) . '%', id => $_ * 10 } } (0..10) ]; + $self->{positions_scrollbar_height} = SL::Helper::UserPreferences::PositionsScrollbar->new()->get_height(); my $print_form = Form->new(''); $print_form->{type} = $self->type; @@ -1723,7 +1746,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; @@ -1765,7 +1788,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); }