$this->assign('payNow', $this->_payNow);
$this->setTitle(ts('Pay with Credit Card'));
}
- elseif (!empty($this->_values['is_template'])) {
+ elseif ($this->_values['is_template']) {
$this->setPageTitle(ts('Template Contribution'));
}
elseif ($this->_mode) {
$defaults['refund_trxn_id'] = $defaults['trxn_id'] ?? NULL;
}
+ if (!empty($defaults['contribution_status_id'])
+ && ('Template' === CRM_Contribute_PseudoConstant::contributionStatus($defaults['contribution_status_id'], 'name'))
+ ) {
+ $this->getElement('contribution_status_id')->freeze();
+ }
+
if (!$this->_id && empty($defaults['receive_date'])) {
$defaults['receive_date'] = date('Y-m-d H:i:s');
}
}
}
+ // If contribution is a template receive date is not required
+ $receiveDateRequired = !$this->_values['is_template'];
// add various dates
- $this->addField('receive_date', ['entity' => 'contribution'], !$this->_mode, FALSE);
+ $this->addField('receive_date', ['entity' => 'contribution'], $receiveDateRequired, FALSE);
$this->addField('receipt_date', ['entity' => 'contribution'], FALSE, FALSE);
$this->addField('cancel_date', ['entity' => 'contribution', 'label' => ts('Cancelled / Refunded Date')], FALSE, FALSE);
if (($self->_action & CRM_Core_Action::UPDATE)
&& $self->_id
&& $self->_values['contribution_status_id'] != $fields['contribution_status_id']
+ && $self->_values['is_template'] != 1
) {
CRM_Contribute_BAO_Contribution::checkStatusValidation($self->_values, $fields, $errors);
}
}
// Get the submitted form values.
$submittedValues = $this->controller->exportValues($this->_name);
+ if ($this->_values['is_template']) {
+ // If we are a template contribution we don't allow the contribution_status_id to be set
+ // on the form but we need it for the submit function.
+ $submittedValues['is_template'] = $this->_values['is_template'];
+ $submittedValues['contribution_status_id'] = $this->_values['contribution_status_id'];
+ }
try {
$contribution = $this->submit($submittedValues, $this->_action, $this->_ppID);
return CRM_Contribute_BAO_Contribution_Utils::getPendingCompleteFailedAndCancelledStatuses();
}
$statusNames = CRM_Contribute_BAO_Contribution::buildOptions('contribution_status_id', 'validate');
- $statusNamesToUnset = [
+ $statusNamesToUnset = array_diff([
// For records which represent a data template for a recurring
// contribution that may not yet have a payment. This status should not
// be available from forms. 'Template' contributions should only be created
// is_template field set to 1. This status excludes them from reports
// that are still ignorant of the is_template field.
'Template',
- ];
+ 'Partially paid',
+ 'Pending refund',
+ ], [$this->getPreviousContributionStatus()]);
switch ($this->getPreviousContributionStatus()) {
case 'Completed':
// [CRM-17498] Removing unsupported status change options.
$statusNamesToUnset = array_merge($statusNamesToUnset, [
'Pending',
'Failed',
- 'Partially paid',
- 'Pending refund',
]);
break;