From 7fe7b63d1088d595e81aa2bda9ae6a099d641324 Mon Sep 17 00:00:00 2001 From: "deb.monish" Date: Fri, 21 Jul 2017 17:30:16 +0530 Subject: [PATCH] CRM-20936: Hide statuses on backoffice contribution form --- CRM/Contribute/BAO/Contribution/Utils.php | 107 ++++++++++++++++++++++ CRM/Contribute/Form/Contribution.php | 88 +++--------------- CRM/Event/Form/EventFees.php | 17 +--- CRM/Member/Form/Membership.php | 20 +--- CRM/Member/Form/MembershipRenewal.php | 2 +- 5 files changed, 124 insertions(+), 110 deletions(-) diff --git a/CRM/Contribute/BAO/Contribution/Utils.php b/CRM/Contribute/BAO/Contribution/Utils.php index 6633d2fe43..79446af9d8 100644 --- a/CRM/Contribute/BAO/Contribution/Utils.php +++ b/CRM/Contribute/BAO/Contribution/Utils.php @@ -497,4 +497,111 @@ LIMIT 1 return number_format((float) round($amount, (int) $decimals), (int) $decimals, '.', ''); } + /** + * Get contribution statuses by entity e.g. contribution, membership or 'participant' + * + * @param string $usedFor + * @param int $id + * Contribution ID + * + * @return array + * Array of contribution statuses in array('status id' => 'label') format + */ + public static function getContributionStatuses($usedFor = 'contribution', $id = NULL) { + if ($usedFor == 'pledge') { + $statusNames = CRM_Core_OptionGroup::values('pledge_status', FALSE, FALSE, FALSE, NULL, 'name'); + } + else { + $statusNames = CRM_Contribute_PseudoConstant::contributionStatus(NULL, 'name'); + } + + $statusNamesToUnset = array(); + + // on create fetch statuses on basis of component + if (!$id) { + $statusNamesToUnset = array( + 'Refunded', + 'Chargeback', + 'Pending refund', + ); + // Event registration and New Membership backoffice form support partially paid payment, + // so exclude this status only for 'New Contribution' form + if ($usedFor == 'contribution') { + $statusNamesToUnset = array_merge($statusNamesToUnset, array( + 'In Progress', + 'Overdue', + 'Partially paid', + )); + } + elseif ($usedFor == 'participant') { + $statusNamesToUnset = array_merge($statusNamesToUnset, array( + 'Cancelled', + 'Failed', + )); + } + } + else { + $contributionStatus = CRM_Core_DAO::getFieldValue('CRM_Contribute_DAO_Contribution', $id, 'contribution_status_id'); + $name = CRM_Utils_Array::value($contributionStatus, $statusNames); + switch ($name) { + case 'Completed': + // [CRM-17498] Removing unsupported status change options. + $statusNamesToUnset = array_merge($statusNamesToUnset, array( + 'Pending', + 'Failed', + 'Partially paid', + 'Pending refund', + )); + break; + + case 'Cancelled': + case 'Chargeback': + case 'Refunded': + $statusNamesToUnset = array_merge($statusNamesToUnset, array( + 'Pending', + 'Failed', + )); + break; + + case 'Pending': + case 'In Progress': + $statusNamesToUnset = array_merge($statusNamesToUnset, array( + 'Refunded', + 'Chargeback', + )); + break; + + case 'Failed': + $statusNamesToUnset = array_merge($statusNamesToUnset, array( + 'Pending', + 'Refunded', + 'Chargeback', + 'Completed', + 'In Progress', + 'Cancelled', + )); + break; + } + } + + foreach ($statusNamesToUnset as $name) { + unset($statusNames[CRM_Utils_Array::key($name, $statusNames)]); + } + + // based on filtered statuse names fetch the final list of statuses in array('id' => 'label') format + if ($usedFor == 'pledge') { + $statuses = CRM_Core_OptionGroup::values('pledge_status'); + } + else { + $statuses = CRM_Contribute_PseudoConstant::contributionStatus(); + } + foreach ($statuses as $statusID => $label) { + if (!array_key_exists($statusID, $statusNames)) { + unset($statuses[$statusID]); + } + } + + return $statuses; + } + } diff --git a/CRM/Contribute/Form/Contribution.php b/CRM/Contribute/Form/Contribution.php index 247f64b61b..8de90098d1 100644 --- a/CRM/Contribute/Form/Contribution.php +++ b/CRM/Contribute/Form/Contribution.php @@ -651,92 +651,32 @@ class CRM_Contribute_Form_Contribution extends CRM_Contribute_Form_AbstractEditP $this->add('select', 'from_email_address', ts('Receipt From'), $this->_fromEmails); - $status = CRM_Contribute_PseudoConstant::contributionStatus(); - - // suppressing contribution statuses that are NOT relevant to pledges (CRM-5169) - $statusName = CRM_Contribute_PseudoConstant::contributionStatus(NULL, 'name'); - if ($this->_ppID) { - foreach (array( - 'Cancelled', - 'Failed', - 'In Progress', - ) as $suppress) { - unset($status[CRM_Utils_Array::key($suppress, $statusName)]); - } - } - elseif ((!$this->_ppID && $this->_id) || !$this->_id) { - $suppressFlag = FALSE; - if ($this->_id) { - $componentDetails = CRM_Contribute_BAO_Contribution::getComponentDetails($this->_id); - if (CRM_Utils_Array::value('membership', $componentDetails) || CRM_Utils_Array::value('participant', $componentDetails)) { - $suppressFlag = TRUE; - } + $isUpdate = FALSE; + $component = 'contribution'; + if ($this->_id) { + $isUpdate = TRUE; + $componentDetails = CRM_Contribute_BAO_Contribution::getComponentDetails($this->_id); + if (CRM_Utils_Array::value('membership', $componentDetails)) { + $component = 'membership'; } - if (!$suppressFlag) { - foreach (array( - 'Overdue', - 'In Progress', - ) as $suppress) { - unset($status[CRM_Utils_Array::key($suppress, $statusName)]); - } - } - else { - unset($status[CRM_Utils_Array::key('Overdue', $statusName)]); + elseif (CRM_Utils_Array::value('participant', $componentDetails)) { + $component = 'participant'; } } + elseif ($this->_ppID) { + $component = 'pledge'; + } + $status = CRM_Contribute_BAO_Contribution_Utils::getContributionStatuses($component, $this->_id); // define the status IDs that show the cancellation info, see CRM-17589 $cancelInfo_show_ids = array(); - foreach (array_keys($statusName) as $status_id) { + foreach (array_keys($status) as $status_id) { if (CRM_Contribute_BAO_Contribution::isContributionStatusNegative($status_id)) { $cancelInfo_show_ids[] = "'$status_id'"; } } $this->assign('cancelInfo_show_ids', implode(',', $cancelInfo_show_ids)); - if ($this->_id) { - $contributionStatus = CRM_Core_DAO::getFieldValue('CRM_Contribute_DAO_Contribution', $this->_id, 'contribution_status_id'); - $name = CRM_Utils_Array::value($contributionStatus, $statusName); - switch ($name) { - case 'Completed': - // [CRM-17498] Removing unsupported status change options. - unset($status[CRM_Utils_Array::key('Pending', $statusName)]); - unset($status[CRM_Utils_Array::key('Failed', $statusName)]); - unset($status[CRM_Utils_Array::key('Partially paid', $statusName)]); - unset($status[CRM_Utils_Array::key('Pending refund', $statusName)]); - case 'Cancelled': - case 'Chargeback': - case 'Refunded': - unset($status[CRM_Utils_Array::key('In Progress', $statusName)]); - unset($status[CRM_Utils_Array::key('Pending', $statusName)]); - unset($status[CRM_Utils_Array::key('Failed', $statusName)]); - break; - - case 'Pending': - case 'In Progress': - unset($status[CRM_Utils_Array::key('Refunded', $statusName)]); - unset($status[CRM_Utils_Array::key('Chargeback', $statusName)]); - break; - - case 'Failed': - foreach (array( - 'Pending', - 'Refunded', - 'Chargeback', - 'Completed', - 'In Progress', - 'Cancelled', - ) as $suppress) { - unset($status[CRM_Utils_Array::key($suppress, $statusName)]); - } - break; - } - } - else { - unset($status[CRM_Utils_Array::key('Refunded', $statusName)]); - unset($status[CRM_Utils_Array::key('Chargeback', $statusName)]); - } - $statusElement = $this->add('select', 'contribution_status_id', ts('Contribution Status'), $status, diff --git a/CRM/Event/Form/EventFees.php b/CRM/Event/Form/EventFees.php index 3a4dffb629..216f97ce25 100644 --- a/CRM/Event/Form/EventFees.php +++ b/CRM/Event/Form/EventFees.php @@ -448,23 +448,8 @@ SELECT id, html_type $form->assign('showTransactionId', TRUE); } - $status = CRM_Contribute_PseudoConstant::contributionStatus(); - - // CRM-14417 suppressing contribution statuses that are NOT relevant to new participant registrations - $statusName = CRM_Contribute_PseudoConstant::contributionStatus(NULL, 'name'); - foreach (array( - 'Cancelled', - 'Failed', - 'In Progress', - 'Overdue', - 'Refunded', - 'Pending refund', - ) as $suppress) { - unset($status[CRM_Utils_Array::key($suppress, $statusName)]); - } - $form->add('select', 'contribution_status_id', - ts('Payment Status'), $status + ts('Payment Status'), CRM_Contribute_BAO_Contribution_Utils::getContributionStatuses('participant') ); $form->add('text', 'check_number', ts('Check Number'), diff --git a/CRM/Member/Form/Membership.php b/CRM/Member/Form/Membership.php index 163147f228..5e640c7260 100644 --- a/CRM/Member/Form/Membership.php +++ b/CRM/Member/Form/Membership.php @@ -638,26 +638,8 @@ class CRM_Member_Form_Membership extends CRM_Member_Form { ) ); - $allowStatuses = array(); - $statuses = CRM_Contribute_PseudoConstant::contributionStatus(); - if ($this->_onlinePendingContributionId) { - $statusNames = CRM_Contribute_PseudoConstant::contributionStatus(NULL, 'name'); - foreach ($statusNames as $val => $name) { - if (in_array($name, array( - 'In Progress', - 'Overdue', - )) - ) { - continue; - } - $allowStatuses[$val] = $statuses[$val]; - } - } - else { - $allowStatuses = $statuses; - } $this->add('select', 'contribution_status_id', - ts('Payment Status'), $allowStatuses + ts('Payment Status'), CRM_Contribute_BAO_Contribution_Utils::getContributionStatuses('membership') ); $this->add('text', 'check_number', ts('Check Number'), CRM_Core_DAO::getAttribute('CRM_Contribute_DAO_Contribution', 'check_number') diff --git a/CRM/Member/Form/MembershipRenewal.php b/CRM/Member/Form/MembershipRenewal.php index 21853f4106..eeb0166e1a 100644 --- a/CRM/Member/Form/MembershipRenewal.php +++ b/CRM/Member/Form/MembershipRenewal.php @@ -367,7 +367,7 @@ class CRM_Member_Form_MembershipRenewal extends CRM_Member_Form { ); $this->add('select', 'contribution_status_id', ts('Payment Status'), - CRM_Contribute_PseudoConstant::contributionStatus() + CRM_Contribute_BAO_Contribution_Utils::getContributionStatuses('membership') ); $this->add('text', 'check_number', ts('Check Number'), -- 2.25.1