X-Git-Url: http://wagnertech.de/gitweb/gitweb.cgi/mfinanz.git/blobdiff_plain/2b32359da2778b424667ab9e2c27438bf1ccd980..9f66626118ec0cdcee8082b3d81f288bbfa23648:/SL/DO.pm diff --git a/SL/DO.pm b/SL/DO.pm index 2e05f1d29..80b1ae352 100644 --- a/SL/DO.pm +++ b/SL/DO.pm @@ -119,7 +119,7 @@ sub transactions { } if (!$main::auth->assert('sales_all_edit', 1)) { push @where, qq|dord.employee_id = (select id from employee where login= ?)|; - push @values, $form->{login}; + push @values, $::myconfig{login}; } foreach my $item (qw(donumber ordnumber cusordnumber transaction_description)) { @@ -274,7 +274,7 @@ sub save { } my $q_item = <{rowcount}) { next if (!$form->{"id_$i"}); + CVar->get_non_editable_ic_cvars(form => $form, + dbh => $dbh, + row => $i, + sub_module => 'delivery_order_items', + may_converted_from => ['orderitems', 'delivery_order_items']); + + my $position = $i; + if (!$form->{"delivery_order_items_id_$i"}) { # there is no persistent id, therefore create one with all necessary constraints my $q_item_id = qq|SELECT nextval('delivery_order_items_id')|; my $h_item_id = prepare_query($form, $dbh, $q_item_id); do_statement($form, $h_item_id, $q_item_id); $form->{"delivery_order_items_id_$i"} = $h_item_id->fetchrow_array(); - $query = qq|INSERT INTO delivery_order_items (id, delivery_order_id, parts_id) VALUES (?, ?, ?)|; + $query = qq|INSERT INTO delivery_order_items (id, delivery_order_id, position, parts_id) VALUES (?, ?, ?, ?)|; do_query($form, $dbh, $query, conv_i($form->{"delivery_order_items_id_$i"}), - conv_i($form->{"id"}), conv_i($form->{"id_$i"})); + conv_i($form->{"id"}), conv_i($position), conv_i($form->{"id_$i"})); $h_item_id->finish(); } + $form->{"qty_$i"} = $form->parse_amount($myconfig, $form->{"qty_$i"}); my $item_unit = $part_unit_map{$form->{"id_$i"}}; @@ -336,7 +345,7 @@ SQL $pricegroup_id = undef if !$pricegroup_id; # save detail record in delivery_order_items table - @values = (conv_i($form->{id}), conv_i($form->{"id_$i"}), + @values = (conv_i($form->{id}), conv_i($position), conv_i($form->{"id_$i"}), $form->{"description_$i"}, $restricter->process($form->{"longdescription_$i"}), $form->{"qty_$i"}, $baseqty, $form->{"sellprice_$i"}, $form->{"discount_$i"} / 100, @@ -368,6 +377,8 @@ SQL conv_i($form->{"delivery_order_items_id_$i"}), $sinfo->{qty}, $sinfo->{unit}, conv_i($sinfo->{warehouse_id}), conv_i($sinfo->{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); } @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}), @@ -384,20 +395,24 @@ SQL name_prefix => 'ic_', name_postfix => "_$i", dbh => $dbh); - } - # search for orphaned doi - $query = sprintf 'SELECT id FROM delivery_order_items WHERE delivery_order_id = ? AND NOT id IN (%s)', join ', ', ("?") x scalar @processed_doi; - @values = (conv_i($form->{id}), map { conv_i($_) } @processed_doi); - my @orphaned_ids = map { $_->{id} } selectall_hashref_query($form, $dbh, $query, @values); - if (scalar @orphaned_ids) { - # clean up delivery_order_items - $query = sprintf 'DELETE FROM delivery_order_items WHERE id IN (%s)', join ', ', ("?") x scalar @orphaned_ids; - do_query($form, $dbh, $query, @orphaned_ids); + # link order items with doi, for future extension look at foreach IS.pm + if (!$form->{saveasnew} && $form->{"converted_from_orderitems_id_$i"}) { + RecordLinks->create_links('dbh' => $dbh, + 'mode' => 'ids', + 'from_table' => 'orderitems', + 'from_ids' => $form->{"converted_from_orderitems_id_$i"}, + 'to_table' => 'delivery_order_items', + 'to_id' => $form->{"delivery_order_items_id_$i"}, + ); + } + delete $form->{"converted_from_orderitems_id_$i"}; } - # search for orphaned dois + + # 1. search for orphaned dois; processed_dois may be empty (no transfer) TODO: be supersafe and alter same statement for doi and oi $query = sprintf 'SELECT id FROM delivery_order_items_stock WHERE delivery_order_item_id in - (select id from delivery_order_items where delivery_order_id = ?) AND NOT id IN (%s)', join ', ', ("?") x scalar @processed_dois; + (select id from delivery_order_items where delivery_order_id = ?)'; + $query .= sprintf ' AND NOT id IN (%s)', join ', ', ("?") x scalar @processed_dois if (scalar @processed_dois); @values = (conv_i($form->{id}), map { conv_i($_) } @processed_dois); my @orphaned_dois_ids = map { $_->{id} } selectall_hashref_query($form, $dbh, $query, @values); if (scalar @orphaned_dois_ids) { @@ -405,6 +420,15 @@ SQL $query = sprintf 'DELETE FROM delivery_order_items_stock WHERE id IN (%s)', join ', ', ("?") x scalar @orphaned_dois_ids; do_query($form, $dbh, $query, @orphaned_dois_ids); } + # 2. search for orphaned doi + $query = sprintf 'SELECT id FROM delivery_order_items WHERE delivery_order_id = ? AND NOT id IN (%s)', join ', ', ("?") x scalar @processed_doi; + @values = (conv_i($form->{id}), map { conv_i($_) } @processed_doi); + my @orphaned_ids = map { $_->{id} } selectall_hashref_query($form, $dbh, $query, @values); + if (scalar @orphaned_ids) { + # clean up delivery_order_items + $query = sprintf 'DELETE FROM delivery_order_items WHERE id IN (%s)', join ', ', ("?") x scalar @orphaned_ids; + do_query($form, $dbh, $query, @orphaned_ids); + } $h_item->finish(); $h_item_stock->finish(); @@ -427,7 +451,7 @@ SQL $form->{cusordnumber}, conv_date($form->{transdate}), conv_i($form->{vendor_id}), conv_i($form->{customer_id}), conv_date($form->{reqdate}), $form->{shippingpoint}, $form->{shipvia}, - $form->{notes}, $form->{intnotes}, + $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->{globalproject_id}), conv_i($form->{employee_id}), @@ -739,7 +763,7 @@ sub retrieve { LEFT JOIN project pr ON (doi.project_id = pr.id) LEFT JOIN partsgroup pg ON (p.partsgroup_id = pg.id) WHERE doi.delivery_order_id IN ($do_ids_placeholders) - ORDER BY doi.oid|; + ORDER BY doi.delivery_order_id, doi.position|; $form->{form_details} = selectall_hashref_query($form, $dbh, $query, @do_ids); @@ -878,10 +902,12 @@ sub order_details { next if (!$form->{"id_$i"}); if ($item->[1] ne $sameitem) { - push(@{ $form->{description} }, qq|$item->[1]|); + push(@{ $form->{TEMPLATE_ARRAYS}->{description} }, qq|$item->[1]|); $sameitem = $item->[1]; - map({ push(@{ $form->{$_} }, "") } grep({ $_ ne "description" } @arrays)); + map({ push(@{ $form->{TEMPLATE_ARRAYS}->{$_} }, "") } grep({ $_ ne "description" && $_ !~ /^si_/} @arrays)); + map({ push(@{ $form->{TEMPLATE_ARRAYS}->{$_} }, []) } grep({ $_ =~ /^si_/} @arrays)); + $si_position++; } $form->{"qty_$i"} = $form->parse_amount($myconfig, $form->{"qty_$i"}); @@ -980,6 +1006,12 @@ sub order_details { } } + CVar->get_non_editable_ic_cvars(form => $form, + dbh => $dbh, + row => $i, + sub_module => 'delivery_order_items', + may_converted_from => ['orderitems', 'delivery_order_items']); + push @{ $form->{TEMPLATE_ARRAYS}->{"ic_cvar_$_->{name}"} }, CVar->format_to_template(CVar->parse($form->{"ic_cvar_$_->{name}_$i"}, $_), $_) for @{ $ic_cvar_configs }; @@ -1146,17 +1178,19 @@ sub transfer_in_out { foreach my $request (@{ $params{requests} }) { push @transfers, { - 'parts_id' => $request->{parts_id}, - "${prefix}_warehouse_id" => $request->{warehouse_id}, - "${prefix}_bin_id" => $request->{bin_id}, - 'chargenumber' => $request->{chargenumber}, - 'bestbefore' => $request->{bestbefore}, - 'qty' => $request->{qty}, - 'unit' => $request->{unit}, - 'oe_id' => $form->{id}, - 'shippingdate' => 'current_date', - 'transfer_type' => $params{direction} eq 'in' ? 'stock' : 'shipped', - 'project_id' => $request->{project_id}, + 'parts_id' => $request->{parts_id}, + "${prefix}_warehouse_id" => $request->{warehouse_id}, + "${prefix}_bin_id" => $request->{bin_id}, + 'chargenumber' => $request->{chargenumber}, + 'bestbefore' => $request->{bestbefore}, + 'qty' => $request->{qty}, + 'unit' => $request->{unit}, + 'oe_id' => $form->{id}, + 'shippingdate' => 'current_date', + 'transfer_type' => $params{direction} eq 'in' ? 'stock' : 'shipped', + 'project_id' => $request->{project_id}, + 'delivery_order_items_stock_id' => $request->{delivery_order_items_stock_id}, + 'comment' => $request->{comment}, }; } @@ -1235,5 +1269,4 @@ sub is_marked_as_delivered { return $delivered ? 1 : 0; } - 1;