The Parts Requirements report does not appear to work properly in my 
case.  I am using SQL-Ledger 2.6.22 and I see the same problem exists in 
Ledger-SMB 1.1.8.  Parts that are known to be on both open Sales Orders 
and open Purchase orders show up as having SO quantities or PO 
quantities but not both.  The re-order quantity is then incorrect.

I have identified the cause of this problem in IC.pm.  The first query 
in the requirements sub gets all parts from the invoice table with an 
inventory_accoun_id > 0.  The subsequent 2 queries gets SO qty and PO 
qty all parts on open orders and accumulate qtys.  The logic for adding 
the qtys assumes all parts were identified in the first query and exist 
in the %parts hash.  This is an incorrect assumption in my case.  I'm 
not sure if the assumption is invalid due to an error in our data entry 
or invalid in general.  I have corrected the problem as shown in the 
patch below:

#--- patch 
begins--------------------------------------------------------------
--- IC.pm.0     2007-02-16 16:42:09.000000000 -0500
+++ IC.pm       2007-02-16 16:42:09.000000000 -0500
@@ -1503,9 +1503,9 @@
   my %ofld = ( customer => so,
                vendor => po );

-  for (qw(customer vendor)) {
+# for (qw(customer vendor)) {
     $query = qq|SELECT p.id, p.partnumber, p.description,
-               sum(qty) - sum(ship) AS $ofld{$_}, p.onhand,
+               sum(qty) - sum(ship) AS so, '0' AS po, p.onhand,
                0 AS month
                FROM orderitems i
                JOIN parts p ON (p.id = i.parts_id)
@@ -1514,21 +1514,48 @@
                AND p.inventory_accno_id > 0
                AND p.assembly = '0'
                AND a.closed = '0'
-               AND a.${_}_id > 0
+               AND a.customer_id > 0
                GROUP BY p.id, p.partnumber, p.description, p.onhand,
                month|;
     $sth = $dbh->prepare($query);
     $sth->execute || $form->dberror($query);

     while ($ref = $sth->fetchrow_hashref(NAME_lc)) {
-      if (exists $parts{$ref->{id}}->{$ofld{$_}}) {
-       $parts{$ref->{id}}->{$ofld{$_}} += $ref->{$ofld{$_}};
+      if (exists $parts{$ref->{id}}->{so}) {
+       $parts{$ref->{id}}->{so} += $ref->{so};
       } else {
        $parts{$ref->{id}} = $ref;
       }
     }
     $sth->finish;
-  }
+#  }
+
+#  for (qw(customer vendor)) {
+    $query = qq|SELECT p.id, p.partnumber, p.description,
+               sum(qty) - sum(ship) AS po, '0' AS so, p.onhand,
+               0 AS month
+               FROM orderitems i
+               JOIN parts p ON (p.id = i.parts_id)
+               JOIN oe a ON (a.id = i.trans_id)
+               WHERE $where
+               AND p.inventory_accno_id > 0
+               AND p.assembly = '0'
+               AND a.closed = '0'
+               AND a.vendor_id > 0
+               GROUP BY p.id, p.partnumber, p.description, p.onhand,
+               month|;
+    $sth = $dbh->prepare($query);
+    $sth->execute || $form->dberror($query);
+
+    while ($ref = $sth->fetchrow_hashref(NAME_lc)) {
+      if (exists $parts{$ref->{id}}->{po}) {
+       $parts{$ref->{id}}->{po} += $ref->{po};
+      } else {
+       $parts{$ref->{id}} = $ref;
+      }
+    }
+    $sth->finish;
+#  }

   # add assemblies from open sales orders
   $query = qq|SELECT DISTINCT a.id AS orderid, b.id, i.qty - i.ship AS qty
@@ -1561,7 +1588,7 @@

   # assemblies
   my $query = qq|SELECT p.id, p.partnumber, p.description,
-                 a.qty * $qty AS so, p.onhand, p.assembly,
+                 a.qty * $qty AS so, '0' AS po, p.onhand, p.assembly,
                 p.partsgroup_id
                 FROM assembly a
                 JOIN parts p ON (p.id = a.parts_id)
@@ -1572,7 +1599,7 @@
                 UNION

                 SELECT p.id, p.partnumber, p.description,
-                 a.qty * $qty AS so, p.onhand, p.assembly,
+                 a.qty * $qty AS so, '0' AS po, p.onhand, p.assembly,
                 p.partsgroup_id
                 FROM assembly a
                 JOIN parts p ON (p.id = a.parts_id)


#--- patch ends 
---------------------------------------------------------------

Regards,
Wm


-------------------------------------------------------------------------
Take Surveys. Earn Cash. Influence the Future of IT
Join SourceForge.net's Techsay panel and you'll get the chance to share your
opinions on IT & business topics through brief surveys-and earn cash
http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV
_______________________________________________
Ledger-smb-users mailing list
Ledger-smb-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/ledger-smb-users

Reply via email to