X-Git-Url: http://wagnertech.de/gitweb/gitweb.cgi/mfinanz.git/blobdiff_plain/454df69edeb9bfe5a1a9c06c2788d1e1175470db..b8fd8fee6b08f3e9c3db63cda09d4ee7191ea678:/SL/DO.pm diff --git a/SL/DO.pm b/SL/DO.pm index 79dc341df..7f547f0b9 100644 --- a/SL/DO.pm +++ b/SL/DO.pm @@ -62,14 +62,12 @@ sub transactions { dord.transaction_description, pr.projectnumber AS globalprojectnumber, e.name AS employee, - sm.name AS salesman, - oe.id AS oe_id + sm.name AS salesman FROM delivery_orders dord LEFT JOIN $vc ct ON (dord.${vc}_id = ct.id) LEFT JOIN employee e ON (dord.employee_id = e.id) LEFT JOIN employee sm ON (dord.salesman_id = sm.id) - LEFT JOIN project pr ON (dord.globalproject_id = pr.id) - LEFT JOIN oe ON ((dord.ordnumber = oe.ordnumber) AND NOT COALESCE(oe.quotation, FALSE))|; + LEFT JOIN project pr ON (dord.globalproject_id = pr.id)|; push @where, ($form->{type} eq 'sales_delivery_order' ? '' : 'NOT ') . qq|COALESCE(dord.is_sales, FALSE)|; @@ -152,7 +150,24 @@ sub transactions { $form->{DO} = selectall_hashref_query($form, $dbh, $query, @values); - $main::lxdebug->dump(0, "DO", $form->{DO}); + if (scalar @{ $form->{DO} }) { + $query = + qq|SELECT id + FROM oe + WHERE NOT COALESCE(quotation, FALSE) + AND (ordnumber = ?) + AND (COALESCE(${vc}_id, 0) != 0)|; + + my $sth = prepare_query($form, $dbh, $query); + + foreach my $dord (@{ $form->{DO} }) { + next unless ($dord->{ordnumber}); + do_statement($form, $sth, $query, $dord->{ordnumber}); + ($dord->{oe_id}) = $sth->fetchrow_array(); + } + + $sth->finish(); + } $main::lxdebug->leave_sub(); } @@ -813,7 +828,7 @@ sub check_stock_availability { my $dbh = $form->get_standard_dbh($myconfig); - my $units = AM->retrieve_units($myconfig, $form, "dimension"); + my $units = AM->retrieve_units($myconfig, $form); my ($partunit) = selectrow_query($form, $dbh, qq|SELECT unit FROM parts WHERE id = ?|, conv_i($params{parts_id})); my $unit_factor = $units->{$partunit}->{factor} || 1; @@ -889,4 +904,46 @@ sub transfer_in_out { $main::lxdebug->leave_sub(); } +sub get_shipped_qty { + $main::lxdebug->enter_sub(); + + my $self = shift; + my %params = @_; + + Common::check_params(\%params, qw(type ordnumber)); + + my $myconfig = \%main::myconfig; + my $form = $main::form; + + my $dbh = $params{dbh} || $form->get_standard_dbh($myconfig); + + my $notsales = $params{type} eq 'sales' ? '' : 'NOT'; + + my $query = + qq|SELECT doi.parts_id, doi.qty, doi.unit, p.unit AS partunit + FROM delivery_order_items doi + LEFT JOIN delivery_orders o ON (doi.delivery_order_id = o.id) + LEFT JOIN parts p ON (doi.parts_id = p.id) + WHERE ($notsales o.is_sales) + AND (o.ordnumber = ?)|; + + my %ship = (); + my $entries = selectall_hashref_query($form, $dbh, $query, $params{ordnumber}); + my $all_units = AM->retrieve_all_units(); + + foreach my $entry (@{ $entries }) { + $entry->{qty} *= $all_units->{$entry->{unit}}->{factor} / $all_units->{$entry->{partunit}}->{factor}; + + if (!$ship{$entry->{parts_id}}) { + $ship{$entry->{parts_id}} = $entry; + } else { + $ship{$entry->{parts_id}}->{qty} += $entry->{qty}; + } + } + + $main::lxdebug->leave_sub(); + + return %ship; +} + 1;