CRM-18259 call pledge & pledgePayment specific functions for geting status options.
authoreileenmcnaugton <eileen@fuzion.co.nz>
Mon, 1 Aug 2016 00:56:44 +0000 (12:56 +1200)
committereileenmcnaugton <eileen@fuzion.co.nz>
Mon, 1 Aug 2016 01:12:26 +0000 (13:12 +1200)
The current config is to have a long list of contributions statuses which are shared as an option group
with pledge & pledge_payment. The irrelevant ones are then hacked out.

I believe that the correct way to do this is to split out the option groups into 3 separate ones.

However, there is quite a lot of work in re-pointing the various places that get the statuses from contributions.

So, I decided to limit this step to fixing the code to call the correct buildOptions function to get
the list & moving the hacks into there.

This does fix the original issue as the  status was being hacked out for pledge payment
when it should have been kept for pledge

CRM/Pledge/BAO/Pledge.php
CRM/Pledge/BAO/PledgePayment.php
CRM/Pledge/BAO/Query.php
CRM/Pledge/Form/Payment.php
CRM/Pledge/Form/Pledge.php
CRM/Pledge/Form/PledgeView.php
CRM/Pledge/Form/Search.php
CRM/Pledge/Selector/Search.php

index 7ca42de78e9557d86c4d63ee59899e457f763cc4..ecc923aa92cbbac1ef8442a7040269a154a797e7 100644 (file)
@@ -159,14 +159,11 @@ class CRM_Pledge_BAO_Pledge extends CRM_Pledge_DAO_Pledge {
       $params['amount'] = $params['installment_amount'] * $params['installments'];
     }
 
-    // get All Payments status types.
-    $paymentStatusTypes = CRM_Contribute_PseudoConstant::contributionStatus(NULL, 'name');
-
     // update the pledge status only if it does NOT come from form
     if (!isset($params['pledge_status_id'])) {
       if (isset($params['contribution_id'])) {
         if ($params['installments'] > 1) {
-          $params['status_id'] = array_search('In Progress', $paymentStatusTypes);
+          $params['status_id'] = CRM_Core_PseudoConstant::getKey('CRM_Pledge_BAO_Pledge', 'status_id', 'In Progress');
         }
       }
       else {
@@ -174,7 +171,7 @@ class CRM_Pledge_BAO_Pledge extends CRM_Pledge_DAO_Pledge {
           $params['status_id'] = CRM_Pledge_BAO_PledgePayment::calculatePledgeStatus($params['id']);
         }
         else {
-          $params['status_id'] = array_search('Pending', $paymentStatusTypes);
+          $params['status_id'] = CRM_Core_PseudoConstant::getKey('CRM_Pledge_BAO_Pledge', 'status_id', 'Pending');
         }
       }
     }
@@ -352,28 +349,16 @@ class CRM_Pledge_BAO_Pledge extends CRM_Pledge_DAO_Pledge {
   public static function getTotalAmountAndCount($status = NULL, $startDate = NULL, $endDate = NULL) {
     $where = array();
     $select = $from = $queryDate = NULL;
-    // get all status
-    $allStatus = CRM_Contribute_PseudoConstant::contributionStatus(NULL, 'name');
-    $statusId = array_search($status, $allStatus);
+    $statusId = CRM_Core_PseudoConstant::getKey('CRM_Pledge_BAO_Pledge', 'status_id', $status);
 
     switch ($status) {
       case 'Completed':
-        $statusId = array_search('Cancelled', $allStatus);
-        $where[] = 'status_id != ' . $statusId;
+        $where[] = 'status_id != ' . CRM_Core_PseudoConstant::getKey('CRM_Pledge_BAO_Pledge', 'status_id', 'Cancelled');
         break;
 
       case 'Cancelled':
-        $where[] = 'status_id = ' . $statusId;
-        break;
-
       case 'In Progress':
-        $where[] = 'status_id = ' . $statusId;
-        break;
-
       case 'Pending':
-        $where[] = 'status_id = ' . $statusId;
-        break;
-
       case 'Overdue':
         $where[] = 'status_id = ' . $statusId;
         break;
@@ -413,7 +398,6 @@ GROUP BY  currency
     );
 
     $where = array();
-    $statusId = array_search($status, $allStatus);
     switch ($status) {
       case 'Completed':
         $select = 'sum( total_amount ) as received_pledge , count( cd.id ) as received_count';
@@ -1290,4 +1274,23 @@ SELECT  pledge.contact_id              as contact_id,
     return $date;
   }
 
+  /**
+   * Override buildOptions to hack out some statuses.
+   *
+   * @todo instead of using & hacking the shared optionGroup contribution_status use a separate one.
+   *
+   * @param string $fieldName
+   * @param string $context
+   * @param array $props
+   *
+   * @return array|bool
+   */
+  public static function buildOptions($fieldName, $context = NULL, $props = array()) {
+    $result = parent::buildOptions($fieldName, $context, $props);
+    if ($fieldName == 'status_id') {
+      $result = array_diff($result, array('Failed'));
+    }
+    return $result;
+  }
+
 }
index 08752df6966c57e6b72e55f8dbda8bfc10fd8316..6c9e037f172d90a02adb76b09d762719018eca3e 100644 (file)
@@ -870,4 +870,23 @@ WHERE civicrm_pledge_payment.contribution_id = {$paymentContributionId}
     }
   }
 
+  /**
+   * Override buildOptions to hack out some statuses.
+   *
+   * @todo instead of using & hacking the shared optionGroup contribution_status use a separate one.
+   *
+   * @param string $fieldName
+   * @param string $context
+   * @param array $props
+   *
+   * @return array|bool
+   */
+  public static function buildOptions($fieldName, $context = NULL, $props = array()) {
+    $result = parent::buildOptions($fieldName, $context, $props);
+    if ($fieldName == 'status_id') {
+      $result = array_diff($result, array('Failed', 'In Progress'));
+    }
+    return $result;
+  }
+
 }
index cd04c49b65b3b4304c34c5b82b64be98cd4543f7..f2aec40dfd0251f010f34f1d7c6b0970651fc46f 100644 (file)
@@ -534,13 +534,8 @@ class CRM_Pledge_BAO_Query {
     $form->add('text', 'pledge_amount_high', ts('To'), array('size' => 8, 'maxlength' => 8));
     $form->addRule('pledge_amount_high', ts('Please enter a valid money value (e.g. %1).', array(1 => CRM_Utils_Money::format('99.99', ' '))), 'money');
 
-    $statusValues = CRM_Contribute_PseudoConstant::contributionStatus();
-    // Remove status values that are only used for recurring contributions for now (Failed and In Progress).
-    unset($statusValues['4']);
-    // unset in progress for payment
-    unset($statusValues['5']);
     $form->add('select', 'pledge_status_id',
-      ts('Pledge Status'), $statusValues,
+      ts('Pledge Status'), CRM_Pledge_BAO_Pledge::buildOptions('status_id'),
       FALSE, array('class' => 'crm-select2', 'multiple' => 'multiple')
     );
 
@@ -553,7 +548,7 @@ class CRM_Pledge_BAO_Query {
     $form->addRule('pledge_installments_high', ts('Please enter number.'), 'integer');
 
     $form->add('select', 'pledge_payment_status_id',
-      ts('Pledge Payment Status'), $statusValues,
+      ts('Pledge Payment Status'), CRM_Pledge_BAO_PledgePayment::buildOptions('status_id'),
       FALSE, array('class' => 'crm-select2', 'multiple' => 'multiple')
     );
 
index 2d774ee5c4bdbdffe47b622889369baba1d0e14d..72bb5cab44bcfe230ebf1ef1e0b885bde699604d 100644 (file)
@@ -70,7 +70,7 @@ class CRM_Pledge_Form_Payment extends CRM_Core_Form {
       if (isset($defaults['contribution_id'])) {
         $this->assign('pledgePayment', TRUE);
       }
-      $status = CRM_Contribute_PseudoConstant::contributionStatus($defaults['status_id']);
+      $status = CRM_Core_PseudoConstant::getName('CRM_Pledge_BAO_Pledge', 'status_id', $defaults['status_id']);
       $this->assign('status', $status);
     }
     $defaults['option_type'] = 1;
@@ -129,13 +129,12 @@ class CRM_Pledge_Form_Payment extends CRM_Core_Form {
     $params['scheduled_date'] = CRM_Utils_Date::format($formValues['scheduled_date']);
     $params['currency'] = CRM_Utils_Array::value('currency', $formValues);
     $now = date('Ymd');
-    $contributionStatus = CRM_Contribute_PseudoConstant::contributionStatus(NULL, 'name');
 
     if (CRM_Utils_Date::overdue(CRM_Utils_Date::customFormat($params['scheduled_date'], '%Y%m%d'), $now)) {
-      $params['status_id'] = array_search('Overdue', $contributionStatus);
+      $params['status_id'] = CRM_Core_PseudoConstant::getKey('CRM_Pledge_BAO_Pledge', 'status_id', 'Overdue');
     }
     else {
-      $params['status_id'] = array_search('Pending', $contributionStatus);
+      $params['status_id'] = CRM_Core_PseudoConstant::getKey('CRM_Pledge_BAO_Pledge', 'status_id', 'Pending');
     }
 
     $params['id'] = $this->_id;
index 764f98d2c7995e1aac0e120dba84beb5684fe7b6..b8ffbdab41dffeca21caaa8bf306976b4eee5ee6 100644 (file)
@@ -178,7 +178,7 @@ class CRM_Pledge_Form_Pledge extends CRM_Core_Form {
       $defaults['financial_type_id'] = array_search('Donation', CRM_Contribute_PseudoConstant::financialType());
     }
 
-    $pledgeStatus = CRM_Contribute_PseudoConstant::contributionStatus();
+    $pledgeStatus = CRM_Pledge_BAO_Pledge::buildOptions('status_id');
     $pledgeStatusNames = CRM_Core_OptionGroup::values('contribution_status',
       FALSE, FALSE, FALSE, NULL, 'name', TRUE
     );
@@ -362,7 +362,7 @@ class CRM_Pledge_Form_Pledge extends CRM_Core_Form {
     }
 
     if (CRM_Utils_Array::value('status_id', $this->_values) !=
-      array_search('Cancelled', CRM_Contribute_PseudoConstant::contributionStatus(NULL, 'name'))
+      CRM_Core_PseudoConstant::getKey('CRM_Pledge_BAO_Pledge', 'status_id', 'Cancelled')
     ) {
 
       $this->addElement('checkbox', 'is_acknowledge', ts('Send Acknowledgment?'), NULL,
@@ -486,9 +486,6 @@ class CRM_Pledge_Form_Pledge extends CRM_Core_Form {
 
     $session = CRM_Core_Session::singleton();
 
-    // get All Payments status types.
-    $paymentStatusTypes = CRM_Contribute_PseudoConstant::contributionStatus(NULL, 'name');
-
     $fields = array(
       'frequency_unit',
       'frequency_interval',
@@ -511,7 +508,7 @@ class CRM_Pledge_Form_Pledge extends CRM_Core_Form {
       $params['pledge_status_id'] = $params['status_id'] = $this->_values['status_id'];
     }
     else {
-      $params['pledge_status_id'] = $params['status_id'] = array_search('Pending', $paymentStatusTypes);
+      $params['pledge_status_id'] = $params['status_id'] = CRM_Core_PseudoConstant::getKey('CRM_Pledge_BAO_Pledge', 'status_id', 'Pending');
     }
     // format amount
     $params['amount'] = CRM_Utils_Rule::cleanMoney(CRM_Utils_Array::value('amount', $formValues));
index 85d2df588e2ad513c4c23ef360937364c5af0f83..fd1f15e9239cbfc35648673a628bc8622b83eb3d 100644 (file)
@@ -73,7 +73,7 @@ class CRM_Pledge_Form_PledgeView extends CRM_Core_Form {
     $values['financial_type'] = CRM_Utils_Array::value($values['financial_type_id'], CRM_Contribute_PseudoConstant::financialType());
 
     if ($values['status_id']) {
-      $values['pledge_status'] = CRM_Utils_Array::value($values['status_id'], CRM_Contribute_PseudoConstant::contributionStatus());
+      $values['pledge_status'] = CRM_Core_PseudoConstant::getKey('CRM_Pledge_BAO_Pledge', 'status_id', $values['status_id']);
     }
 
     $url = CRM_Utils_System::url('civicrm/contact/view/pledge',
index be47cfdc084b3ebfff3f88685b060b8366c576ca..8f48b5901e5502affde00f36288ad984136c95a0 100644 (file)
@@ -353,11 +353,9 @@ class CRM_Pledge_Form_Search extends CRM_Core_Form_Search {
 
     // set pledge related fields
     $pledgeStatus = CRM_Utils_Request::retrieve('pstatus', 'String');
-    if ($pledgeStatus) {
-      $statusValues = CRM_Contribute_PseudoConstant::contributionStatus();
 
-      // Remove status values that are only used for recurring contributions for now (Failed).
-      unset($statusValues['4']);
+    if ($pledgeStatus) {
+      $statusValues = CRM_Pledge_BAO_Pledge::buildOptions('status_id');
 
       // we need set all statuses except Cancelled
       unset($statusValues[$pledgeStatus]);
index 5882970c04288a325efdf854ca82bc695f415454..5588fb19f56a2d555d5a089ab709031773d1e58d 100644 (file)
@@ -290,9 +290,7 @@ class CRM_Pledge_Selector_Search extends CRM_Core_Selector_Base {
     $rows = array();
 
     // get all pledge status
-    $pledgeStatuses = CRM_Core_OptionGroup::values('contribution_status',
-      FALSE, FALSE, FALSE, NULL, 'name', FALSE
-    );
+    $pledgeStatuses = CRM_Pledge_BAO_Pledge::buildOptions('status_id');
 
     // get all campaigns.
     $allCampaigns = CRM_Campaign_BAO_Campaign::getCampaigns(NULL, NULL, FALSE, FALSE, FALSE, TRUE);