summaryrefslogtreecommitdiff
path: root/LedgerSMB
diff options
context:
space:
mode:
authoreinhverfr <einhverfr@4979c152-3d1c-0410-bac9-87ea11338e46>2007-07-12 04:39:46 +0000
committereinhverfr <einhverfr@4979c152-3d1c-0410-bac9-87ea11338e46>2007-07-12 04:39:46 +0000
commit7bac078da5248a506dbc35fdcfa6008dc4514a9d (patch)
treee02a790fa21f08a58e17d4da0e14072d1091203b /LedgerSMB
parent5a74a0b7d4c37f05822ddde5336a76d5d1cc4765 (diff)
Applying Victor's patches for reversed customer invoices and COGS
git-svn-id: https://ledger-smb.svn.sourceforge.net/svnroot/ledger-smb/branches/1.2@1384 4979c152-3d1c-0410-bac9-87ea11338e46
Diffstat (limited to 'LedgerSMB')
-rwxr-xr-xLedgerSMB/IS.pm43
1 files changed, 39 insertions, 4 deletions
diff --git a/LedgerSMB/IS.pm b/LedgerSMB/IS.pm
index 820024b9..e534c66c 100755
--- a/LedgerSMB/IS.pm
+++ b/LedgerSMB/IS.pm
@@ -1051,10 +1051,45 @@ sub post_invoice {
qq|id = $form->{"id_$i"}|,
$form->{"qty_$i"} * -1
) unless $form->{shipped};
-
- $allocated =
- &cogs( $dbh, $form, $form->{"id_$i"}, $form->{"qty_$i"},
- $project_id );
+
+ if($form->{"qty_$i"}>0) {
+ $allocated =
+ &cogs( $dbh, $form, $form->{"id_$i"},
+ $form->{"qty_$i"}, $project_id );
+ } else {
+ #search for entries on ap invoices, that have been allocated already for that product.
+ $query = qq|
+ SELECT i.id, i.qty, i.allocated, a.transdate, i.sellprice
+ FROM invoice i
+ JOIN parts p ON (p.id = i.parts_id)
+ JOIN ap a ON (a.id = i.trans_id)
+ WHERE i.parts_id = ? AND i.allocated > 0
+ ORDER BY transdate,id DESC
+ |;
+ $sth = $dbh->prepare($query);
+ $sth->execute( $form->{"id_$i"}) || $form->dberror($query);
+ my $totalqty = $form->{"qty_$i"};
+ my $total_inventory = 0;
+ while ( my $ref = $sth->fetchrow_hashref(NAME_lc) ) {
+ #deallocate the necessary entries
+ $form->db_parse_numeric(sth=>$sth, hashref => $ref);
+ my $qty = $ref->{allocated};
+ if($totalqty + $qty > 0) { $qty = -$totalqty; }
+ $allocated+=$qty;
+ $form->update_balance( $dbh, "invoice", "allocated", qq|id = $ref->{id}|, $qty * -1 );
+ $total_inventory += $qty*$ref->{sellprice};
+ last if ( ( $totalqty += $qty ) >= 0 );
+ }
+ # increase the inventory account for that product
+ $query = qq|INSERT INTO acc_trans (trans_id, chart_id, amount, transdate, project_id) VALUES (?, ?, ?, ?, ?)|;
+ $sth = $dbh->prepare($query);
+ $sth->execute($form->{id}, $form->{"expense_accno_id_$i"}, $total_inventory, $form->{transdate}, $form->{"project_id_$i"}) || $form->dberror($query);
+
+ $total_inventory = (-1)*$total_inventory;
+ $query = qq|INSERT INTO acc_trans (trans_id, chart_id, amount, transdate, project_id) VALUES (?, ?, ?, ?, ?)|;
+ $sth = $dbh->prepare($query);
+ $sth->execute($form->{id}, $form->{"inventory_accno_id_$i"}, $total_inventory, $form->{transdate}, $form->{"project_id_$i"} ) || $form->dberror($query);
+ }
}
}