[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

SF.net SVN: ledger-smb: [1384] branches/1.2/LedgerSMB/IS.pm



Revision: 1384
          http://svn.sourceforge.net/ledger-smb/?rev=1384&view=rev
Author:   einhverfr
Date:     2007-07-11 21:39:46 -0700 (Wed, 11 Jul 2007)

Log Message:
-----------
Applying Victor's patches for reversed customer invoices and COGS

Modified Paths:
--------------
    branches/1.2/LedgerSMB/IS.pm

Modified: branches/1.2/LedgerSMB/IS.pm
===================================================================
--- branches/1.2/LedgerSMB/IS.pm	2007-07-12 04:35:23 UTC (rev 1383)
+++ branches/1.2/LedgerSMB/IS.pm	2007-07-12 04:39:46 UTC (rev 1384)
@@ -1051,10 +1051,45 @@
                         qq|id = $form->{"id_$i"}|,
                         $form->{"qty_$i"} * -1
                     ) unless $form->{shipped};
+                    
+		    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);
 
-                    $allocated =
-                      &cogs( $dbh, $form, $form->{"id_$i"}, $form->{"qty_$i"},
-                        $project_id );
+			$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);
+		    }
                 }
             }
 


This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.