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

SF.net SVN: ledger-smb: [1423] trunk/LedgerSMB



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

Log Message:
-----------
Applying Victor's patch for invoice reversals

Modified Paths:
--------------
    trunk/LedgerSMB/IR.pm
    trunk/LedgerSMB/IS.pm

Modified: trunk/LedgerSMB/IR.pm
===================================================================
--- trunk/LedgerSMB/IR.pm	2007-07-18 03:57:57 UTC (rev 1422)
+++ trunk/LedgerSMB/IR.pm	2007-07-18 19:46:07 UTC (rev 1423)
@@ -318,6 +318,7 @@
             }
 
             if ( $form->{"inventory_accno_id_$i"} ) {
+                my $totalqty = $form->{"qty_$i"};
 		if($form->{"qty_$i"}<0) {
                     # check for unallocated entries at the same price to match our entry
                     $query = qq|
@@ -340,7 +341,29 @@
                         $allocated += $qty;
                         last if ( ( $totalqty -= $qty ) >= 0 );
             	    }
-		}
+		} else {
+		    # start patch bug 1755355 ###############################################################################
+		    # check for unallocated entries atthe same price to match our entry
+		    $query = qq|
+		                SELECT i.id, i.qty, i.allocated, a.transdate
+		                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.qty + i.allocated) > 0 AND i.sellprice = ?
+		                ORDER BY transdate|;
+                    $sth = $dbh->prepare($query);
+		    $sth->execute( $form->{"id_$i"}, $form->{"sellprice_$i"}) || $form->dberror($query);
+		    while ( my $ref = $sth->fetchrow_hashref(NAME_lc) ) {
+			$form->db_parse_numeric(sth=>$sth, hashref => $ref);
+		        my $qty = $ref->{qty} + $ref->{allocated};
+		        if ( ( $qty - $totalqty ) > 0 ) { $qty = $totalqty; }
+		        # update allocated for sold item
+			$form->update_balance( $dbh, "invoice", "allocated", qq|id = $ref->{id}|, $qty * -1 );
+		        $allocated += $qty;
+		        last if ( ( $totalqty -= $qty ) <= 0 );
+		    }
+                    # stop  patch bug 1755355 ###############################################################################
+                  }
 
                 # add purchase to inventory
                 push @{ $form->{acc_trans}{lineitems} },
@@ -378,8 +401,6 @@
                 $sth->execute( $form->{"id_$i"} )
                   || $form->dberror($query);
 
-                my $totalqty = $form->{"qty_$i"};
-
                 while ( my $ref = $sth->fetchrow_hashref(NAME_lc) ) {
                     $form->db_parse_numeric(sth=>$sth, hashref => $ref);
 

Modified: trunk/LedgerSMB/IS.pm
===================================================================
--- trunk/LedgerSMB/IS.pm	2007-07-18 03:57:57 UTC (rev 1422)
+++ trunk/LedgerSMB/IS.pm	2007-07-18 19:46:07 UTC (rev 1423)
@@ -1053,9 +1053,29 @@
                         $form->{"qty_$i"} * -1
                     ) unless $form->{shipped};
                     if($form->{"qty_$i"} > 0){
-                      $allocated =
-                        &cogs( $dbh, $form, $form->{"id_$i"}, $form->{"qty_$i"},
-                        $project_id );
+                        #start patch bug 1755355
+                        # check for unallocated entries at the same price to match our entry
+                        $query = qq|
+                              SELECT i.id, i.qty, i.allocated, a.transdate
+                              FROM invoice i
+                              JOIN parts p ON (p.id = i.parts_id)
+                              JOIN ar a ON (a.id = i.trans_id)
+                              WHERE i.parts_id = ? AND (i.qty + i.allocated) < 0 AND i.sellprice = ?
+                              ORDER BY transdate|;
+                        $sth = $dbh->prepare($query);
+                        $sth->execute( $form->{"id_$i"}, $form->{"sellprice_$i"}) || $form->dberror($query);
+                        my $totalqty = $form->{"qty_$i"};
+                        while ( my $ref = $sth->fetchrow_hashref(NAME_lc) ) {
+                    	    $form->db_parse_numeric(sth=>$sth, hashref => $ref);
+                    	    my $qty = $ref->{qty} + $ref->{allocated};
+                    	    if ( ( $qty + $totalqty ) < 0 ) { $qty = -$totalqty; }
+                    	    # update allocated for sold item
+                    	    $form->update_balance( $dbh, "invoice", "allocated", qq|id = $ref->{id}|, (-1)*$qty);
+                    	    $allocated += $qty;
+                    	    last if ( ( $totalqty += $qty ) <= 0 );
+                        }
+                	$allocated +=  &cogs( $dbh, $form, $form->{"id_$i"}, $totalqty, $project_id );
+                        #stop  patch bug 1755355
                     }
 		    else {
  			$query = qq|


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