Fix updatePledgeStatus execution to use pledge_status og values
[civicrm-core.git] / CRM / Pledge / BAO / Pledge.php
index ead46a0a0705b5b493ff61d5d02aa9a74f0d2ccb..4cde98bb6738b76cc7be4e05cfdcc93e50934f53 100644 (file)
@@ -853,20 +853,15 @@ GROUP BY  currency
 
     $sendReminders = CRM_Utils_Array::value('send_reminders', $params, FALSE);
 
-    $allStatus = CRM_Contribute_PseudoConstant::contributionStatus(NULL, 'name');
-
-    // unset statues that we never use for pledges
-    foreach (array(
-               'Completed',
-               'Cancelled',
-               'Failed',
-             ) as $statusKey) {
-      if ($key = CRM_Utils_Array::key($statusKey, $allStatus)) {
-        unset($allStatus[$key]);
-      }
-    }
+    $allStatus = array_flip(CRM_Contribute_PseudoConstant::contributionStatus(NULL, 'name'));
+    $allPledgeStatus = CRM_Core_OptionGroup::values('pledge_status',
+      TRUE, FALSE, FALSE, NULL, 'name', TRUE
+    );
+    unset($allPledgeStatus['Completed'], $allPledgeStatus['Cancelled']);
+    unset($allStatus['Completed'], $allStatus['Cancelled'], $allStatus['Failed']);
 
-    $statusIds = implode(',', array_keys($allStatus));
+    $statusIds = implode(',', $allStatus);
+    $pledgeStatusIds = implode(',', $allPledgeStatus);
     $updateCnt = 0;
 
     $query = "
@@ -895,7 +890,7 @@ SELECT  pledge.contact_id              as contact_id,
         ) as amount_paid
         FROM      civicrm_pledge pledge, civicrm_pledge_payment payment
         WHERE     pledge.id = payment.pledge_id
-        AND     payment.status_id IN ( {$statusIds} ) AND pledge.status_id IN ( {$statusIds} )
+        AND     payment.status_id IN ( {$statusIds} ) AND pledge.status_id IN ( {$pledgeStatusIds} )
         GROUP By  payment.id
         ";
 
@@ -933,23 +928,23 @@ SELECT  pledge.contact_id              as contact_id,
 
       if (CRM_Utils_Date::overdue(CRM_Utils_Date::customFormat($dao->scheduled_date, '%Y%m%d'),
           $now
-        ) && $dao->payment_status != array_search('Overdue', $allStatus)
+        ) && $dao->payment_status != $allStatus['Overdue']
       ) {
         $pledgePayments[$dao->pledge_id][$dao->payment_id] = $dao->payment_id;
       }
     }
+    $allPledgeStatus = array_flip($allPledgeStatus);
 
     // process the updating script...
-
     foreach ($pledgePayments as $pledgeId => $paymentIds) {
       // 1. update the pledge /pledge payment status. returns new status when an update happens
-      $returnMessages[] = "Checking if status update is needed for Pledge Id: {$pledgeId} (current status is {$allStatus[$pledgeStatus[$pledgeId]]})";
+      $returnMessages[] = "Checking if status update is needed for Pledge Id: {$pledgeId} (current status is {$allPledgeStatus[$pledgeStatus[$pledgeId]]})";
 
       $newStatus = CRM_Pledge_BAO_PledgePayment::updatePledgePaymentStatus($pledgeId, $paymentIds,
-        array_search('Overdue', $allStatus), NULL, 0, FALSE, TRUE
+        $allStatus['Overdue'], NULL, 0, FALSE, TRUE
       );
       if ($newStatus != $pledgeStatus[$pledgeId]) {
-        $returnMessages[] = "- status updated to: {$allStatus[$newStatus]}";
+        $returnMessages[] = "- status updated to: {$allPledgeStatus[$newStatus]}";
         $updateCnt += 1;
       }
     }