i was not providing explicit sort to cstore call, so limit/offset was not guaranteed...
authorerickson <erickson@dcc99617-32d9-48b4-a31d-7c20da2025e4>
Wed, 27 Aug 2008 15:58:21 +0000 (15:58 +0000)
committererickson <erickson@dcc99617-32d9-48b4-a31d-7c20da2025e4>
Wed, 27 Aug 2008 15:58:21 +0000 (15:58 +0000)
git-svn-id: svn://svn.open-ils.org/ILS/branches/acq-experiment@10462 dcc99617-32d9-48b4-a31d-7c20da2025e4

Open-ILS/src/perlmods/OpenILS/Application/Acq/Financials.pm

index 66948a9..de8acf8 100644 (file)
@@ -617,13 +617,18 @@ sub create_purchase_order_debits {
     my $po = $e->retrieve_acq_purchase_order($po_id) or return $e->die_event;
     # XXX which perms?
 
-    my $o = 0;
-    while(my $li = $e->search_acq_lineitem([
-        {   purchase_order => $po_id}, 
-        {   offset => $o++, 
-            limit => 1,
-            flesh => 1,
-            flesh_fields => {jub => ['attributes']}}])->[0]) {
+    my $li_ids = $e->search_acq_lineitem(
+        {purchase_order => $po_id},
+        {idlist => 1}
+    );
+
+    for my $li_id (@$li_ids) {
+        my $li = $e->retrieve_acq_lineitem([
+            $li_id,
+            {   flesh => 1,
+                flesh_fields => {jub => ['attributes']},
+            }
+        ]);
 
         my ($price, $ptype) = get_li_price($li);
         unless($price) {
@@ -636,17 +641,23 @@ sub create_purchase_order_debits {
             return OpenILS::Event->new('ACQ_LINEITEM_NO_PROVIDER', payload => $li->id);
         }
 
-        my $oo = 0;
-        while(my $lid = $e->search_acq_lineitem_detail([
-                {  lineitem => $li->id}, 
-                {   offset => $oo++, 
-                    limit => 1,
-                    flesh => 1, 
-                    flesh_fields => {acqlid => ['fund']}}])->[0]) {
+        my $lid_ids = $e->search_acq_lineitem_detail(
+            {lineitem => $li->id}, 
+            {idlist=>1}
+        );
+
+        for my $lid_id (@$lid_ids) {
+            my $lid = $e->retrieve_acq_lineitem_detail([
+                $lid_id,
+                {   flesh => 1, 
+                    flesh_fields => {acqlid => ['fund']}
+                }
+            ]);
 
             my $debit = Fieldmapper::acq::fund_debit->new;
             $debit->fund($lid->fund->id);
             $debit->origin_amount($price);
+
             if($ptype == 2) { # price from vendor
                 $debit->origin_currency_type($li->provider->currency_type);
                 $debit->amount(currency_conversion_impl(