X-Git-Url: http://wagnertech.de/git?a=blobdiff_plain;f=SL%2FWH.pm;h=2899aaf300bcc9dd7b9c999eba5e6352845e0013;hb=0bd2b1386aa46b03e553610808d244572d7ac03f;hp=6d7a61393e584cdeff57528cd7bdb87b81b95325;hpb=639c7f18be07979acb6e83d2b452cb6ecd091f9a;p=kivitendo-erp.git diff --git a/SL/WH.pm b/SL/WH.pm index 6d7a61393..2899aaf30 100644 --- a/SL/WH.pm +++ b/SL/WH.pm @@ -233,9 +233,6 @@ sub transfer_assembly { my $sth_part_qty_assembly = prepare_execute_query($form, $dbh, $query, $params{assembly_id}); my @trans_ids; - my $query_trans_id = qq|SELECT nextval('inventory_id_seq')|; - my $query_trans_ids = qq|INSERT INTO assembly_inventory_part (inventory_assembly_id, inventory_part_id) VALUES (?, ?)|; - my $sth_query_trans_ids = prepare_query($form, $dbh, $query_trans_ids); # Hier wird das prepared Statement für die Schleife über alle Lagerplätze vorbereitet my $transferPartSQL = qq|INSERT INTO inventory (parts_id, warehouse_id, bin_id, chargenumber, bestbefore, comment, employee_id, qty, @@ -283,8 +280,6 @@ sub transfer_assembly { my $temppart_qty = $partsQTY * -1; ($trans_id) = selectrow_query($form, $dbh, qq|SELECT nextval('id')| ) unless $trans_id; - my ($trans_id) = selectrow_query($form, $dbh, $query_trans_id); - push @trans_ids, $trans_id; do_statement($form, $sthTransferPartSQL, $transferPartSQL, $currentPart_ID, $currentPart_WH_ID, $temppart_bin_id, $temppart_chargenumber, $temppart_bestbefore, 'Verbraucht für ' . $self->get_part_description(parts_id => $params{assembly_id}), $params{login}, $temppart_qty, $trans_id); @@ -333,7 +328,6 @@ sub transfer_assembly { # wenn * -1 als berechnung in der parameter-übergabe angegeben wird. # Dieser Wert IST und BLEIBT positiv!! Hilfe. # Liegt das daran, dass dieser Wert aus einem SQL-Statement stammt? - my ($trans_id) = selectrow_query($form, $dbh, $query_trans_id); push @trans_ids, $trans_id; do_statement($form, $sthTransferPartSQL, $transferPartSQL, $currentPart_ID, $currentPart_WH_ID, $temppart_bin_id, $temppart_chargenumber, $temppart_bestbefore, 'Verbraucht für ' . @@ -345,8 +339,6 @@ sub transfer_assembly { # auf jeden fall war der internal-server-error nach aktivierung von strict und warnings plus ein paar my-definitionen weg } else { # okay, wir haben weniger oder gleich Waren die wir wegbuchen müssen, wir können also aufhören $tmpPartsQTY *=-1; - my ($trans_id) = selectrow_query($form, $dbh, $query_trans_id); - push @trans_ids, $trans_id; do_statement($form, $sthTransferPartSQL, $transferPartSQL, $currentPart_ID, $currentPart_WH_ID, $temppart_bin_id, $temppart_chargenumber, $temppart_bestbefore, 'Verbraucht für ' . $self->get_part_description(parts_id => $params{assembly_id}), $params{login}, $tmpPartsQTY, $trans_id); @@ -375,10 +367,6 @@ sub transfer_assembly { do_statement($form, $sthTransferAssemblySQL, $transferAssemblySQL, $params{assembly_id}, $params{dst_warehouse_id}, $params{dst_bin_id}, $params{chargenumber}, conv_date($params{bestbefore}), $params{comment}, $params{login}, $params{qty}, $trans_id); - # save inventory transactions for this assembly - for my $part_id (@trans_ids) { - do_statement($form, $sth_query_trans_ids, $query_trans_ids, $trans_id, $part_id); - } 1; }) or do { return $kannNichtFertigen }; @@ -542,7 +530,7 @@ sub get_warehouse_journal { }; $form->{l_classification_id} = 'Y'; - $form->{l_id} = 'Y'; + $form->{l_trans_id} = 'Y'; $form->{l_part_type} = 'Y'; $form->{l_itime} = 'Y'; $form->{l_invoice_id} = $form->{l_oe_id} if $form->{l_oe_id}; @@ -560,26 +548,10 @@ sub get_warehouse_journal { $where_clause = defined($where_clause) ? $where_clause : ''; my $query = - qq|SELECT * FROM (SELECT DISTINCT $select{trans} - FROM inventory i1 - LEFT JOIN inventory i2 ON i1.trans_id = i2.trans_id - LEFT JOIN parts p ON i1.parts_id = p.id - LEFT JOIN bin b1 ON i1.bin_id = b1.id - LEFT JOIN bin b2 ON i2.bin_id = b2.id - LEFT JOIN warehouse w1 ON i1.warehouse_id = w1.id - LEFT JOIN warehouse w2 ON i2.warehouse_id = w2.id - LEFT JOIN transfer_type tt ON i1.trans_type_id = tt.id - LEFT JOIN project pr ON i1.project_id = pr.id - LEFT JOIN employee e ON i1.employee_id = e.id - WHERE $where_clause i2.qty = -i1.qty AND i2.qty > 0 AND - i1.trans_id IN ( SELECT i.trans_id FROM inventory i GROUP BY i.trans_id HAVING COUNT(i.trans_id) = 2 ) - GROUP BY $group_clause - - UNION - + qq|SELECT * FROM ( SELECT DISTINCT $select{out} FROM inventory i1 - LEFT JOIN inventory i2 ON i1.trans_id = i2.trans_id + LEFT JOIN inventory i2 ON i1.trans_id = i2.trans_id AND i1.id = i2.id LEFT JOIN parts p ON i1.parts_id = p.id LEFT JOIN bin b1 ON i1.bin_id = b1.id LEFT JOIN bin b2 ON i2.bin_id = b2.id @@ -588,7 +560,7 @@ sub get_warehouse_journal { LEFT JOIN transfer_type tt ON i1.trans_type_id = tt.id LEFT JOIN project pr ON i1.project_id = pr.id LEFT JOIN employee e ON i1.employee_id = e.id - WHERE $where_clause i1.qty < 0 AND + WHERE $where_clause i1.qty != 0 AND tt.direction = 'out' AND i1.trans_id IN ( SELECT i.trans_id FROM inventory i GROUP BY i.trans_id HAVING COUNT(i.trans_id) >= 1 ) GROUP BY $group_clause @@ -596,7 +568,7 @@ sub get_warehouse_journal { SELECT DISTINCT $select{in} FROM inventory i1 - LEFT JOIN inventory i2 ON i1.trans_id = i2.trans_id + LEFT JOIN inventory i2 ON i1.trans_id = i2.trans_id AND i1.id = i2.id LEFT JOIN parts p ON i1.parts_id = p.id LEFT JOIN bin b1 ON i1.bin_id = b1.id LEFT JOIN bin b2 ON i2.bin_id = b2.id @@ -605,12 +577,12 @@ sub get_warehouse_journal { LEFT JOIN transfer_type tt ON i1.trans_type_id = tt.id LEFT JOIN project pr ON i1.project_id = pr.id LEFT JOIN employee e ON i1.employee_id = e.id - WHERE $where_clause i1.qty > 0 AND + WHERE $where_clause i1.qty != 0 AND tt.direction = 'in' AND i1.trans_id IN ( SELECT i.trans_id FROM inventory i GROUP BY i.trans_id HAVING COUNT(i.trans_id) >= 1 ) GROUP BY $group_clause - ORDER BY r_${sort_spec}) AS lines WHERE r_qty>0|; + ORDER BY r_${sort_spec}) AS lines WHERE r_qty != 0|; - my @all_vars = (@filter_vars,@filter_vars,@filter_vars); + my @all_vars = (@filter_vars,@filter_vars); if ($filter{limit}) { $query .= " LIMIT ?"; @@ -1358,10 +1330,13 @@ unsuccessfully with a return value of undef. There has to be at least one data set in the table assembly referenced to this assembly_id. -=item Assembly cannot be destroyed or disassembled +=item Assembly can be disassembled Assemblies are like cakes. You cannot disassemble it. NEVER. - No negative nor zero qty's are valid inputs. + But if your assembly is a mechanical cake you may unscrew it. + Assemblies are created in one transaction therefore you can + safely rely on the trans_id in inventory to disassemble the + created assemblies (see action disassemble_assembly in wh.pl). =item The assembly item(s) have to be in the same warehouse