-sub adj_onhand {
- $main::lxdebug->enter_sub();
-
- my ($dbh, $form, $ml) = @_;
-
- my $all_units = $form->{all_units};
-
- my $query =
- qq|SELECT oi.parts_id, oi.ship, oi.unit, p.inventory_accno_id, p.assembly | .
- qq| FROM orderitems oi | .
- qq| JOIN parts p ON (p.id = oi.parts_id) | .
- qq| WHERE oi.trans_id = ?|;
- my @values = ($form->{id});
- my $sth = $dbh->prepare($query);
- $sth->execute(@values) || $form->dberror($query);
-
- $query =
- qq|SELECT sum(p.inventory_accno_id) | .
- qq|FROM parts p | .
- qq|JOIN assembly a ON (a.parts_id = p.id) | .
- qq|WHERE a.id = ?|;
- my $ath = $dbh->prepare($query) || $form->dberror($query);
-
- my $ispa;
-
- while (my $ref = $sth->fetchrow_hashref(NAME_lc)) {
- if ($ref->{inventory_accno_id} || $ref->{assembly}) {
-
- # do not update if assembly consists of all services
- if ($ref->{assembly}) {
- $ath->execute($ref->{parts_id}) || $form->dberror($query);
-
- ($ispa) = $sth->fetchrow_array;
- $ath->finish;
-
- next unless $ispa;
-
- }
-
- # get item baseunit
- $query = qq|SELECT unit FROM parts WHERE id = ?|;
- my ($item_unit) = selectrow_query($form, $dbh, $query, $ref->{parts_id});
-
- my $basefactor = 1;
- if (defined($all_units->{$item_unit}->{factor}) && (($all_units->{$item_unit}->{factor} * 1) != 0)) {
- $basefactor = $all_units->{$ref->{unit}}->{factor} / $all_units->{$item_unit}->{factor};
- }
- my $baseqty = $ref->{ship} * $basefactor;
-
- # adjust onhand in parts table
- $form->update_balance($dbh, "parts", "onhand", qq|id = $ref->{parts_id}|, $baseqty * $ml);
- }
- }
-
- $sth->finish;
-
- $main::lxdebug->leave_sub();
-}
-