X-Git-Url: http://wagnertech.de/git?a=blobdiff_plain;f=SL%2FController%2FOrder.pm;h=37ba87cfa13fce29353403741b005aac6abf0f75;hb=844a541e0d8f59644540413f675e8f07cd154cf6;hp=ae8c8dea66364b29fdff87f5249a06e244d3c79b;hpb=e5610b456a641e6bf3c8c9a5ae8c8ad52b7d5765;p=kivitendo-erp.git diff --git a/SL/Controller/Order.pm b/SL/Controller/Order.pm index ae8c8dea6..37ba87cfa 100644 --- a/SL/Controller/Order.pm +++ b/SL/Controller/Order.pm @@ -13,6 +13,7 @@ use SL::File; use SL::MIME; use SL::Util qw(trim); use SL::YAML; +use SL::DB::AdditionalBillingAddress; use SL::DB::History; use SL::DB::Order; use SL::DB::Default; @@ -23,6 +24,7 @@ use SL::DB::PartsGroup; use SL::DB::Printer; use SL::DB::Language; use SL::DB::RecordLink; +use SL::DB::RequirementSpec; use SL::DB::Shipto; use SL::DB::Translation; @@ -698,20 +700,26 @@ sub action_customer_vendor_changed { $self->js->hide('#shipto_selection'); } + if ($cv_method eq 'customer') { + my $show_hide = scalar @{ $self->order->customer->additional_billing_addresses } > 0 ? 'show' : 'hide'; + $self->js->$show_hide('#billing_address_row'); + } + $self->js->val( '#order_salesman_id', $self->order->salesman_id) if $self->order->is_sales; $self->js - ->replaceWith('#order_cp_id', $self->build_contact_select) - ->replaceWith('#order_shipto_id', $self->build_shipto_select) - ->replaceWith('#shipto_inputs ', $self->build_shipto_inputs) - ->replaceWith('#business_info_row', $self->build_business_info_row) - ->val( '#order_taxzone_id', $self->order->taxzone_id) - ->val( '#order_taxincluded', $self->order->taxincluded) - ->val( '#order_currency_id', $self->order->currency_id) - ->val( '#order_payment_id', $self->order->payment_id) - ->val( '#order_delivery_term_id', $self->order->delivery_term_id) - ->val( '#order_intnotes', $self->order->intnotes) - ->val( '#order_language_id', $self->order->$cv_method->language_id) + ->replaceWith('#order_cp_id', $self->build_contact_select) + ->replaceWith('#order_shipto_id', $self->build_shipto_select) + ->replaceWith('#shipto_inputs ', $self->build_shipto_inputs) + ->replaceWith('#order_billing_address_id', $self->build_billing_address_select) + ->replaceWith('#business_info_row', $self->build_business_info_row) + ->val( '#order_taxzone_id', $self->order->taxzone_id) + ->val( '#order_taxincluded', $self->order->taxincluded) + ->val( '#order_currency_id', $self->order->currency_id) + ->val( '#order_payment_id', $self->order->payment_id) + ->val( '#order_delivery_term_id', $self->order->delivery_term_id) + ->val( '#order_intnotes', $self->order->intnotes) + ->val( '#order_language_id', $self->order->$cv_method->language_id) ->focus( '#order_' . $self->cv . '_id') ->run('kivi.Order.update_exchangerate'); @@ -741,6 +749,9 @@ sub action_show_customer_vendor_details_dialog { $details{payment_terms} = $cv->payment->description if $cv->payment; $details{pricegroup} = $cv->pricegroup->pricegroup if $is_customer && $cv->pricegroup; + foreach my $entry (@{ $cv->additional_billing_addresses }) { + push @{ $details{ADDITIONAL_BILLING_ADDRESSES} }, { map { $_ => $entry->$_ } @{$entry->meta->columns} }; + } foreach my $entry (@{ $cv->shipto }) { push @{ $details{SHIPTO} }, { map { $_ => $entry->$_ } @{$entry->meta->columns} }; } @@ -1307,6 +1318,22 @@ sub build_contact_select { ); } +# build the selection box for the additional billing address +# +# Needed, if customer/vendor changed. +sub build_billing_address_select { + my ($self) = @_; + + select_tag('order.billing_address_id', + [ {displayable_id => '', id => ''}, $self->order->{$self->cv}->additional_billing_addresses ], + value_key => 'id', + title_key => 'displayable_id', + default => $self->order->billing_address_id, + with_empty => 0, + style => 'width: 300px', + ); +} + # build the selection box for shiptos # # Needed, if customer/vendor changed. @@ -1564,13 +1591,15 @@ sub setup_order_from_cv { $order->intnotes($order->customervendor->notes); - if ($order->is_sales) { - $order->salesman_id($order->customer->salesman_id || SL::DB::Manager::Employee->current->id); - $order->taxincluded(defined($order->customer->taxincluded_checked) - ? $order->customer->taxincluded_checked - : $::myconfig{taxincluded_checked}); - } + return if !$order->is_sales; + + $order->salesman_id($order->customer->salesman_id || SL::DB::Manager::Employee->current->id); + $order->taxincluded(defined($order->customer->taxincluded_checked) + ? $order->customer->taxincluded_checked + : $::myconfig{taxincluded_checked}); + my $address = $order->customer->default_billing_address;; + $order->billing_address_id($address ? $address->id : undef); } # setup custom shipto from form @@ -1678,6 +1707,7 @@ sub save { # link records if ($::form->{converted_from_oe_id}) { my @converted_from_oe_ids = split ' ', $::form->{converted_from_oe_id}; + foreach my $converted_from_oe_id (@converted_from_oe_ids) { my $src = SL::DB::Order->new(id => $converted_from_oe_id)->load; $src->update_attributes(closed => 1) if $src->type =~ /_quotation$/; @@ -1696,8 +1726,12 @@ sub save { $idx++; } } + + $self->link_requirement_specs_linking_to_created_from_objects(@converted_from_oe_ids); } + $self->set_project_in_linked_requirement_specs if $self->order->globalproject_id; + $self->save_history('SAVED'); 1; @@ -1873,6 +1907,11 @@ sub pre_render { } } @all_objects; } + if ( (any { $self->type eq $_ } (sales_quotation_type(), sales_order_type())) + && $::instance_conf->get_transport_cost_reminder_article_number_id ) { + $self->{template_args}->{transport_cost_reminder_article} = SL::DB::Part->new(id => $::instance_conf->get_transport_cost_reminder_article_number_id)->load; + } + $self->get_item_cvpartnumber($_) for @{$self->order->items_sorted}; $::request->{layout}->use_javascript("${_}.js") for qw(kivi.SalesPurchase kivi.Order kivi.File ckeditor/ckeditor ckeditor/adapters/jquery @@ -1887,6 +1926,9 @@ sub setup_edit_action_bar { || (($self->type eq sales_order_type()) && $::instance_conf->get_sales_order_show_delete) || (($self->type eq purchase_order_type()) && $::instance_conf->get_purchase_order_show_delete); + my @req_trans_cost_art = qw(kivi.Order.check_transport_cost_article_presence) x!!$::instance_conf->get_transport_cost_reminder_article_number_id; + my @req_cusordnumber = qw(kivi.Order.check_cusordnumber_presence) x($self->type eq sales_order_type() && $::instance_conf->get_order_warn_no_cusordnumber); + for my $bar ($::request->layout->get('actionbar')) { $bar->add( combobox => [ @@ -1894,13 +1936,17 @@ sub setup_edit_action_bar { t8('Save'), call => [ 'kivi.Order.save', 'save', $::instance_conf->get_order_warn_duplicate_parts, $::instance_conf->get_order_warn_no_deliverydate, - ], - checks => [ 'kivi.Order.check_save_active_periodic_invoices', ['kivi.validate_form','#order_form'] ], + ], + checks => [ 'kivi.Order.check_save_active_periodic_invoices', ['kivi.validate_form','#order_form'], + @req_trans_cost_art, @req_cusordnumber, + ], ], action => [ t8('Save as new'), call => [ 'kivi.Order.save', 'save_as_new', $::instance_conf->get_order_warn_duplicate_parts ], - checks => [ 'kivi.Order.check_save_active_periodic_invoices' ], + checks => [ 'kivi.Order.check_save_active_periodic_invoices', + @req_trans_cost_art, @req_cusordnumber, + ], disabled => !$self->order->id ? t8('This object has not been saved yet.') : undef, ], ], # end of combobox "Save" @@ -1912,6 +1958,7 @@ sub setup_edit_action_bar { action => [ t8('Save and Quotation'), submit => [ '#order_form', { action => "Order/sales_quotation" } ], + checks => [ @req_trans_cost_art, @req_cusordnumber ], only_if => (any { $self->type eq $_ } (sales_order_type())), ], action => [ @@ -1922,11 +1969,13 @@ sub setup_edit_action_bar { action => [ t8('Save and Sales Order'), submit => [ '#order_form', { action => "Order/sales_order" } ], + checks => [ @req_trans_cost_art ], only_if => (any { $self->type eq $_ } (sales_quotation_type(), purchase_order_type())), ], action => [ t8('Save and Purchase Order'), call => [ 'kivi.Order.purchase_order_check_for_direct_delivery' ], + checks => [ @req_trans_cost_art, @req_cusordnumber ], only_if => (any { $self->type eq $_ } (sales_order_type(), request_quotation_type())), ], action => [ @@ -1934,13 +1983,17 @@ sub setup_edit_action_bar { call => [ 'kivi.Order.save', 'save_and_delivery_order', $::instance_conf->get_order_warn_duplicate_parts, $::instance_conf->get_order_warn_no_deliverydate, ], - checks => [ 'kivi.Order.check_save_active_periodic_invoices' ], + checks => [ 'kivi.Order.check_save_active_periodic_invoices', + @req_trans_cost_art, @req_cusordnumber, + ], only_if => (any { $self->type eq $_ } (sales_order_type(), purchase_order_type())) ], action => [ t8('Save and Invoice'), call => [ 'kivi.Order.save', 'save_and_invoice', $::instance_conf->get_order_warn_duplicate_parts ], - checks => [ 'kivi.Order.check_save_active_periodic_invoices' ], + checks => [ 'kivi.Order.check_save_active_periodic_invoices', + @req_trans_cost_art, @req_cusordnumber, + ], ], action => [ t8('Save and AP Transaction'), @@ -1956,15 +2009,17 @@ sub setup_edit_action_bar { ], action => [ t8('Save and preview PDF'), - call => [ 'kivi.Order.save', 'preview_pdf', $::instance_conf->get_order_warn_duplicate_parts, - $::instance_conf->get_order_warn_no_deliverydate, - ], + call => [ 'kivi.Order.save', 'preview_pdf', $::instance_conf->get_order_warn_duplicate_parts, + $::instance_conf->get_order_warn_no_deliverydate, + ], + checks => [ @req_trans_cost_art, @req_cusordnumber ], ], action => [ t8('Save and print'), - call => [ 'kivi.Order.show_print_options', $::instance_conf->get_order_warn_duplicate_parts, - $::instance_conf->get_order_warn_no_deliverydate, - ], + call => [ 'kivi.Order.show_print_options', $::instance_conf->get_order_warn_duplicate_parts, + $::instance_conf->get_order_warn_no_deliverydate, + ], + checks => [ @req_trans_cost_art, @req_cusordnumber ], ], action => [ t8('Save and E-mail'), @@ -2288,6 +2343,32 @@ sub store_pdf_to_webdav_and_filemanagement { return @errors; } +sub link_requirement_specs_linking_to_created_from_objects { + my ($self, @converted_from_oe_ids) = @_; + + return unless @converted_from_oe_ids; + + my $rs_orders = SL::DB::Manager::RequirementSpecOrder->get_all(where => [ order_id => \@converted_from_oe_ids ]); + foreach my $rs_order (@{ $rs_orders }) { + SL::DB::RequirementSpecOrder->new( + order_id => $self->order->id, + requirement_spec_id => $rs_order->requirement_spec_id, + version_id => $rs_order->version_id, + )->save; + } +} + +sub set_project_in_linked_requirement_specs { + my ($self) = @_; + + my $rs_orders = SL::DB::Manager::RequirementSpecOrder->get_all(where => [ order_id => $self->order->id ]); + foreach my $rs_order (@{ $rs_orders }) { + next if $rs_order->requirement_spec->project_id == $self->order->globalproject_id; + + $rs_order->requirement_spec->update_attributes(project_id => $self->order->globalproject_id); + } +} + 1; __END__ @@ -2416,7 +2497,7 @@ java script functions =item * optional client/user behaviour (transactions has to be set - department has to be set - - force project if enabled in client config - transport cost reminder) + force project if enabled in client config) =back