From: Bernd Bleßmann Date: Fri, 25 May 2018 13:21:39 +0000 (+0200) Subject: Auftrags-Controller: Workflow Auftrag VK <-> EK X-Git-Tag: release-3.5.4~403 X-Git-Url: http://wagnertech.de/git?a=commitdiff_plain;h=69966b4c3df791edabe5e7265010293efbba18ed;p=kivitendo-erp.git Auftrags-Controller: Workflow Auftrag VK <-> EK --- diff --git a/SL/Controller/Order.pm b/SL/Controller/Order.pm index 1309f141e..4e095769c 100644 --- a/SL/Controller/Order.pm +++ b/SL/Controller/Order.pm @@ -1367,6 +1367,8 @@ sub _workflow_sales_or_purchase_order { 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() + : $::form->{type} eq _sales_order_type() ? _purchase_order_type() : ''; $self->order(SL::DB::Order->new_from($self->order, destination_type => $destination_type)); @@ -1379,7 +1381,8 @@ sub _workflow_sales_or_purchase_order { # change form type $::form->{type} = $destination_type; - $self->init_type; + $self->type($self->init_type); + $self->cv ($self->init_cv); $self->_check_auth; $self->_recalc(); @@ -1498,13 +1501,13 @@ 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())), + only_if => (any { $self->type eq $_ } (_sales_quotation_type(), _purchase_order_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())), + only_if => (any { $self->type eq $_ } (_sales_order_type(), _request_quotation_type())), disabled => !$self->order->id ? t8('This object has not been saved yet.') : undef, ], ], # end of combobox "Workflow" @@ -1823,6 +1826,8 @@ java script functions =item * custom shipto address +=item * check for direct delivery (workflow sales order -> purchase order) + =item * language / part translations =item * access rights diff --git a/SL/DB/Order.pm b/SL/DB/Order.pm index bc7d87f6b..978d128bb 100644 --- a/SL/DB/Order.pm +++ b/SL/DB/Order.pm @@ -214,10 +214,19 @@ sub new_from { { from => 'sales_order', to => 'sales_order', abbr => 'soso' }, { from => 'request_quotation', to => 'request_quotation', abbr => 'rqrq' }, { from => 'purchase_order', to => 'purchase_order', abbr => 'popo' }, + { from => 'sales_order', to => 'purchase_order', abbr => 'sopo' }, + { from => 'purchase_order', to => 'sales_order', abbr => 'poso' }, ); my $from_to = (grep { $_->{from} eq $source->type && $_->{to} eq $destination_type} @from_tos)[0]; croak("Cannot convert from '" . $source->type . "' to '" . $destination_type . "'") if !$from_to; + my $is_abbr_any = sub { + # foreach my $abbr (@_) { + # croak "no such abbreviation: '$abbr'" if !grep { $_->{abbr} eq $abbr } @from_tos; + # } + any { $from_to->{abbr} eq $_ } @_; + }; + my ($item_parent_id_column, $item_parent_column); if (ref($source) eq 'SL::DB::Order') { @@ -236,6 +245,21 @@ sub new_from { transdate => DateTime->today_local, ); + if ( $is_abbr_any->(qw(sopo poso)) ) { + $args{ordnumber} = undef; + $args{reqdate} = DateTime->today_local->next_workday(); + $args{employee} = SL::DB::Manager::Employee->current; + } + if ( $is_abbr_any->(qw(sopo)) ) { + $args{customer_id} = undef; + $args{salesman_id} = undef; + $args{payment_id} = undef; + $args{delivery_term_id} = undef; + } + if ( $is_abbr_any->(qw(poso)) ) { + $args{vendor_id} = undef; + } + # Custom shipto addresses (the ones specific to the sales/purchase # record and not to the customer/vendor) are only linked from # shipto → order. Meaning order.shipto_id @@ -269,6 +293,13 @@ sub new_from { )), custom_variables => \@custom_variables, ); + if ( $is_abbr_any->(qw(sopo)) ) { + $current_oe_item->sellprice($source_item->lastcost); + $current_oe_item->discount(0); + } + if ( $is_abbr_any->(qw(poso)) ) { + $current_oe_item->lastcost($source_item->sellprice); + } $current_oe_item->{"converted_from_orderitems_id"} = $_->{id} if ref($item_parent) eq 'SL::DB::Order'; $current_oe_item; } @{ $items }; diff --git a/js/kivi.Order.js b/js/kivi.Order.js index f60b5ffcd..21d29ca12 100644 --- a/js/kivi.Order.js +++ b/js/kivi.Order.js @@ -450,6 +450,7 @@ namespace('kivi.Order', function(ns) { }; ns.price_chooser_item_row = function(clicked) { + if (!ns.check_cv()) return; var row = $(clicked).parents("tbody").first(); var item_id_dom = $(row).find('[name="orderitem_ids[+]"]');