X-Git-Url: http://wagnertech.de/gitweb/gitweb.cgi/mfinanz.git/blobdiff_plain/ccbd0240ff944d1fd484c8744349e052df1613fe..b92bc20759a4ef39eb106fc80fa6aaedde4df02d:/SL/Controller/Order.pm diff --git a/SL/Controller/Order.pm b/SL/Controller/Order.pm index b87049a0a..864cc674f 100644 --- a/SL/Controller/Order.pm +++ b/SL/Controller/Order.pm @@ -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( @@ -137,32 +138,44 @@ sub action_save { sub action_save_as_new { my ($self) = @_; - if (!$self->order->id) { + my $order = $self->order; + + if (!$order->id) { $self->js->flash('error', t8('This object has not been saved yet.')); return $self->js->render(); } - delete $::form->{$_} for qw(closed delivered converted_from_oe_id converted_from_orderitems_ids); - - my $src_order = SL::DB::Order->new(id => $self->order->id)->load; + # 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. - if (trim($self->order->number) eq $src_order->number) { - $self->order->number(''); - } + $new_attrs{number} = (trim($order->number) eq $saved_order->number) + ? '' + : trim($order->number); - # Clear reqdate and transdate unless changed - if ($self->order->transdate == $src_order->transdate) { - $self->order->transdate(DateTime->today_local) - } - if ($self->order->reqdate == $src_order->reqdate) { + # 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; - $self->order->reqdate(DateTime->today_local->next_workday(extra_days => $extra_days)); + $new_attrs{reqdate} = DateTime->today_local->next_workday(extra_days => $extra_days); + } else { + $new_attrs{reqdate} = $order->reqdate; } # Update employee - $self->order->employee(SL::DB::Manager::Employee->current); + $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(); @@ -594,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) @@ -605,6 +619,40 @@ sub action_customer_vendor_changed { $self->js->render(); } +# open the dialog for customer/vendor details +sub action_show_customer_vendor_details_dialog { + my ($self) = @_; + + my $is_customer = 'customer' eq $::form->{vc}; + my $cv; + if ($is_customer) { + $cv = SL::DB::Customer->new(id => $::form->{vc_id})->load; + } else { + $cv = SL::DB::Vendor->new(id => $::form->{vc_id})->load; + } + + my %details = map { $_ => $cv->$_ } @{$cv->meta->columns}; + $details{discount_as_percent} = $cv->discount_as_percent; + $details{creditlimt} = $cv->creditlimit_as_number; + $details{business} = $cv->business->description if $cv->business; + $details{language} = $cv->language_obj->description if $cv->language_obj; + $details{delivery_terms} = $cv->delivery_term->description if $cv->delivery_term; + $details{payment_terms} = $cv->payment->description if $cv->payment; + $details{pricegroup} = $cv->pricegroup->pricegroup if $cv->pricegroup; + + foreach my $entry (@{ $cv->shipto }) { + push @{ $details{SHIPTO} }, { map { $_ => $entry->$_ } @{$entry->meta->columns} }; + } + foreach my $entry (@{ $cv->contacts }) { + push @{ $details{CONTACTS} }, { map { $_ => $entry->$_ } @{$entry->meta->columns} }; + } + + $_[0]->render('common/show_vc_details', { layout => 0 }, + is_customer => $is_customer, + %details); + +} + # called if a unit in an existing item row is changed sub action_unit_changed { my ($self) = @_; @@ -1016,6 +1064,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. @@ -1695,6 +1751,10 @@ reused from generic code. =over 4 +=item * C