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;
+ }
+
}
$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,
$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'),
)
);
- $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')
);
$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'),