X-Git-Url: http://wagnertech.de/git?a=blobdiff_plain;f=SL%2FDO.pm;h=86c65ea1449d9b263236cb9c8bc53604f7cfce2c;hb=953b505f3da71b5de15e21f812f06f4d6e6f2721;hp=3dde867c24d51f53d418f137d9153215c0a66e24;hpb=d1f44c84d990f57982854c6a4716c0f233f45bca;p=kivitendo-erp.git diff --git a/SL/DO.pm b/SL/DO.pm index 3dde867c2..86c65ea14 100644 --- a/SL/DO.pm +++ b/SL/DO.pm @@ -36,7 +36,7 @@ package DO; use Carp; use List::Util qw(max); -use YAML; +use Text::ParseWords; use SL::AM; use SL::Common; @@ -51,6 +51,7 @@ use SL::IC; use SL::TransNumber; use SL::DB; use SL::Util qw(trim); +use SL::YAML; use strict; @@ -128,7 +129,7 @@ sub transactions { push @where, "dord.$item = ?"; push @values, conv_i($form->{$item}); } - if (!$main::auth->assert('sales_all_edit', 1)) { + if ( !(($vc eq 'customer' && $main::auth->assert('sales_all_edit', 1)) || ($vc eq 'vendor' && $main::auth->assert('purchase_all_edit', 1))) ) { push @where, qq|dord.employee_id = (select id from employee where login= ?)|; push @values, $::myconfig{login}; } @@ -211,6 +212,17 @@ SQL push @values, like($form->{parts_description}); } + if ($form->{all}) { + my @tokens = parse_line('\s+', 0, $form->{all}); + # ordnumber quonumber customer.name vendor.name transaction_description + push @where, <{bin_id})); $h_item_stock_id->finish(); # write back the id to the form (important if only transfer was clicked (id fk for invoice) - $form->{"stock_${in_out}_$i"} = YAML::Dump($stock_info); + $form->{"stock_${in_out}_$i"} = SL::YAML::Dump($stock_info); } @values = ($form->{"delivery_order_items_id_$i"}, $sinfo->{qty}, $sinfo->{unit}, conv_i($sinfo->{warehouse_id}), conv_i($sinfo->{bin_id}), $sinfo->{chargenumber}, conv_date($sinfo->{bestbefore}), @@ -499,9 +511,9 @@ SQL $query = qq|UPDATE delivery_orders SET donumber = ?, ordnumber = ?, cusordnumber = ?, transdate = ?, vendor_id = ?, - customer_id = ?, reqdate = ?, + customer_id = ?, reqdate = ?, tax_point = ?, shippingpoint = ?, shipvia = ?, notes = ?, intnotes = ?, closed = ?, - delivered = ?, department_id = ?, language_id = ?, shipto_id = ?, + delivered = ?, department_id = ?, language_id = ?, shipto_id = ?, billing_address_id = ?, globalproject_id = ?, employee_id = ?, salesman_id = ?, cp_id = ?, transaction_description = ?, is_sales = ?, taxzone_id = ?, taxincluded = ?, payment_id = ?, currency_id = (SELECT id FROM currencies WHERE name = ?), delivery_term_id = ? @@ -510,10 +522,10 @@ SQL @values = ($form->{donumber}, $form->{ordnumber}, $form->{cusordnumber}, conv_date($form->{transdate}), conv_i($form->{vendor_id}), conv_i($form->{customer_id}), - conv_date($form->{reqdate}), $form->{shippingpoint}, $form->{shipvia}, + conv_date($form->{reqdate}), conv_date($form->{tax_point}), $form->{shippingpoint}, $form->{shipvia}, $restricter->process($form->{notes}), $form->{intnotes}, $form->{closed} ? 't' : 'f', $form->{delivered} ? "t" : "f", - conv_i($form->{department_id}), conv_i($form->{language_id}), conv_i($form->{shipto_id}), + conv_i($form->{department_id}), conv_i($form->{language_id}), conv_i($form->{shipto_id}), conv_i($form->{billing_address_id}), conv_i($form->{globalproject_id}), conv_i($form->{employee_id}), conv_i($form->{salesman_id}), conv_i($form->{cp_id}), $form->{transaction_description}, @@ -545,10 +557,10 @@ SQL 'to_id' => $form->{id}, ); delete $form->{convert_from_oe_ids}; - - $self->mark_orders_if_delivered('do_id' => $form->{id}, - 'type' => $form->{type} eq 'sales_delivery_order' ? 'sales' : 'purchase', - 'dbh' => $dbh,); + unless ($::instance_conf->get_shipped_qty_require_stock_out) { + $self->mark_orders_if_delivered('do_id' => $form->{id}, + 'type' => $form->{type} eq 'sales_delivery_order' ? 'sales' : 'purchase'); + } $form->{saved_donumber} = $form->{donumber}; $form->{saved_ordnumber} = $form->{ordnumber}; @@ -637,6 +649,38 @@ sub delete { return $rc; } +sub delete_transfers { + $main::lxdebug->enter_sub(); + + my ($self) = @_; + + my $myconfig = \%main::myconfig; + my $form = $main::form; + + my $rc = SL::DB::Order->new->db->with_transaction(sub { + + my $do = SL::DB::DeliveryOrder->new(id => $form->{id})->load; + die "No valid delivery order found" unless ref $do eq 'SL::DB::DeliveryOrder'; + + my $dt = DateTime->today->subtract(days => $::instance_conf->get_undo_transfer_interval); + croak "Wrong call. Please check undoing interval" unless $do->itime > $dt; + + foreach my $doi (@{ $do->orderitems }) { + foreach my $dois (@{ $doi->delivery_order_stock_entries}) { + $dois->inventory->delete; + $dois->delete; + } + } + $do->update_attributes(delivered => 0); + + 1; + }); + + $main::lxdebug->leave_sub(); + + return $rc; +} + sub retrieve { $main::lxdebug->enter_sub(); @@ -681,13 +725,13 @@ sub retrieve { # so if any of these infos is important (or even different) for any item, # it will be killed out and then has to be fetched from the item scope query further down $query = - qq|SELECT dord.cp_id, dord.donumber, dord.ordnumber, dord.transdate, dord.reqdate, + qq|SELECT dord.cp_id, dord.donumber, dord.ordnumber, dord.transdate, dord.reqdate, dord.tax_point, dord.shippingpoint, dord.shipvia, dord.notes, dord.intnotes, e.name AS employee, dord.employee_id, dord.salesman_id, dord.${vc}_id, cv.name AS ${vc}, dord.closed, dord.reqdate, dord.department_id, dord.cusordnumber, d.description AS department, dord.language_id, - dord.shipto_id, + dord.shipto_id, dord.billing_address_id, dord.itime, dord.mtime, dord.globalproject_id, dord.delivered, dord.transaction_description, dord.taxzone_id, dord.taxincluded, dord.payment_id, (SELECT cu.name FROM currencies cu WHERE cu.id=dord.currency_id) AS currency, @@ -821,7 +865,7 @@ sub retrieve { push @{ $requests }, $ref; } - $doi->{"stock_${in_out}"} = YAML::Dump($requests); + $doi->{"stock_${in_out}"} = SL::YAML::Dump($requests); } $sth->finish(); @@ -1011,16 +1055,16 @@ sub order_details { push @{ $form->{TEMPLATE_ARRAYS}{si_unit}[$si_position-1] }, $si->{unit}; } - if ($form->{"assembly_$i"}) { + if ($form->{"part_type_$i"} eq 'assembly') { $sameitem = ""; # get parts and push them onto the stack my $sortorder = ""; if ($form->{groupitems}) { $sortorder = - qq|ORDER BY pg.partsgroup, a.oid|; + qq|ORDER BY pg.partsgroup, a.position|; } else { - $sortorder = qq|ORDER BY a.oid|; + $sortorder = qq|ORDER BY a.position|; } do_statement($form, $h_pg, $q_pg, conv_i($form->{"id_$i"})); @@ -1073,21 +1117,6 @@ sub order_details { $main::lxdebug->leave_sub(); } -sub project_description { - $main::lxdebug->enter_sub(); - - my ($self, $dbh, $id) = @_; - - my $form = $main::form; - - my $query = qq|SELECT description FROM project WHERE id = ?|; - my ($value) = selectrow_query($form, $dbh, $query, $id); - - $main::lxdebug->leave_sub(); - - return $value; -} - sub unpack_stock_information { $main::lxdebug->enter_sub(); @@ -1098,7 +1127,7 @@ sub unpack_stock_information { my $unpacked; - eval { $unpacked = $params{packed} ? YAML::Load($params{packed}) : []; }; + eval { $unpacked = $params{packed} ? SL::YAML::Load($params{packed}) : []; }; $unpacked = [] if (!$unpacked || ('ARRAY' ne ref $unpacked)); @@ -1234,6 +1263,11 @@ sub transfer_in_out { WH->transfer(@transfers); + if ($::instance_conf->get_shipped_qty_require_stock_out) { + $self->mark_orders_if_delivered('do_id' => $form->{id}, + 'type' => $form->{type} eq 'sales_delivery_order' ? 'sales' : 'purchase'); + } + $main::lxdebug->leave_sub(); }