X-Git-Url: http://wagnertech.de/gitweb/gitweb.cgi/mfinanz.git/blobdiff_plain/b6185e747246ee3fc630435123ae25a0d68de24c..639066d179464ead41625a9a901b165ce9a5eb06:/SL/Controller/Order.pm diff --git a/SL/Controller/Order.pm b/SL/Controller/Order.pm index f3063f9f7..92ef60c8c 100644 --- a/SL/Controller/Order.pm +++ b/SL/Controller/Order.pm @@ -10,7 +10,7 @@ use SL::SessionFile::Random; use SL::PriceSource; use SL::Webdav; use SL::File; - +use SL::Util qw(trim); use SL::DB::Order; use SL::DB::Default; use SL::DB::Unit; @@ -42,10 +42,10 @@ use Rose::Object::MakeMethods::Generic __PACKAGE__->run_before('_check_auth'); __PACKAGE__->run_before('_recalc', - only => [ qw(save 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 create_pdf send_email) ]); __PACKAGE__->run_before('_get_unalterable_data', - only => [ qw(save 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 create_pdf send_email) ]); # # actions @@ -56,7 +56,8 @@ sub action_add { my ($self) = @_; $self->order->transdate(DateTime->now_local()); - $self->order->reqdate(DateTime->today_local->next_workday) if !$self->order->reqdate; + my $extra_days = $self->type eq _sales_quotation_type() ? $::instance_conf->get_reqdate_interval : 1; + $self->order->reqdate(DateTime->today_local->next_workday(extra_days => $extra_days)) if !$self->order->reqdate; $self->_pre_render(); $self->render( @@ -133,6 +134,53 @@ sub action_save { $self->redirect_to(@redirect_params); } +# save the order as new document an open it for edit +sub action_save_as_new { + my ($self) = @_; + + my $order = $self->order; + + if (!$order->id) { + $self->js->flash('error', t8('This object has not been saved yet.')); + return $self->js->render(); + } + + # load order from db to check if values changed + my $saved_order = SL::DB::Order->new(id => $order->id)->load; + + my %new_attrs; + # Lets assign a new number if the user hasn't changed the previous one. + # If it has been changed manually then use it as-is. + $new_attrs{number} = (trim($order->number) eq $saved_order->number) + ? '' + : trim($order->number); + + # Clear transdate unless changed + $new_attrs{transdate} = ($order->transdate == $saved_order->transdate) + ? DateTime->today_local + : $order->transdate; + + # 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; + $new_attrs{reqdate} = DateTime->today_local->next_workday(extra_days => $extra_days); + } else { + $new_attrs{reqdate} = $order->reqdate; + } + + # Update employee + $new_attrs{employee} = SL::DB::Manager::Employee->current; + + # Create new record from current one + $self->order(SL::DB::Order->new_from($order, destination_type => $order->type, attributes => \%new_attrs)); + + # no linked records on save as new + delete $::form->{$_} for qw(converted_from_oe_id converted_from_orderitems_ids); + + # save + $self->action_save(); +} + # print the order # # This is called if "print" is pressed in the print dialog. @@ -559,6 +607,7 @@ sub action_customer_vendor_changed { $self->js ->replaceWith('#order_cp_id', $self->build_contact_select) ->replaceWith('#order_shipto_id', $self->build_shipto_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_payment_id', $self->order->payment_id) @@ -981,6 +1030,14 @@ sub build_shipto_select { ); } +# render the info line for business +# +# Needed, if customer/vendor changed. +sub build_business_info_row +{ + $_[0]->p->render('order/tabs/_business_info_row', SELF => $_[0]); +} + # build the rows for displaying taxes # # Called if amounts where recalculated and redisplayed. @@ -1360,18 +1417,24 @@ sub _setup_edit_action_bar { combobox => [ action => [ t8('Save'), - call => [ 'kivi.Order.save', $::instance_conf->get_order_warn_duplicate_parts ], + call => [ 'kivi.Order.save', 'save', $::instance_conf->get_order_warn_duplicate_parts ], checks => [ 'kivi.Order.check_save_active_periodic_invoices' ], ], + 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' ], + disabled => !$self->order->id ? t8('This object has not been saved yet.') : undef, + ], action => [ t8('Save and Delivery Order'), - call => [ 'kivi.Order.save_and_delivery_order', $::instance_conf->get_order_warn_duplicate_parts ], + call => [ 'kivi.Order.save', 'save_and_delivery_order', $::instance_conf->get_order_warn_duplicate_parts ], checks => [ 'kivi.Order.check_save_active_periodic_invoices' ], only_if => (any { $self->type eq $_ } (_sales_order_type(), _purchase_order_type())) ], action => [ t8('Save and Invoice'), - call => [ 'kivi.Order.save_and_invoice', $::instance_conf->get_order_warn_duplicate_parts ], + call => [ 'kivi.Order.save', 'save_and_invoice', $::instance_conf->get_order_warn_duplicate_parts ], checks => [ 'kivi.Order.check_save_active_periodic_invoices' ], ], ], # end of combobox "Save" @@ -1382,13 +1445,15 @@ sub _setup_edit_action_bar { ], action => [ t8('Sales Order'), - submit => [ '#order_form', { action => "Order/sales_order" } ], - only_if => (any { $self->type eq $_ } (_sales_quotation_type())), + submit => [ '#order_form', { action => "Order/sales_order" } ], + only_if => (any { $self->type eq $_ } (_sales_quotation_type())), + disabled => !$self->order->id ? t8('This object has not been saved yet.') : undef, ], action => [ t8('Purchase Order'), - submit => [ '#order_form', { action => "Order/purchase_order" } ], - only_if => (any { $self->type eq $_ } (_request_quotation_type())), + submit => [ '#order_form', { action => "Order/purchase_order" } ], + only_if => (any { $self->type eq $_ } (_request_quotation_type())), + disabled => !$self->order->id ? t8('This object has not been saved yet.') : undef, ], ], # end of combobox "Workflow" @@ -1652,6 +1717,10 @@ reused from generic code. =over 4 +=item * C