diff --git a/CRM/Contribute/Form/Contribution.php b/CRM/Contribute/Form/Contribution.php index d020ea985b22..dc89c47f074d 100644 --- a/CRM/Contribute/Form/Contribution.php +++ b/CRM/Contribute/Form/Contribution.php @@ -311,7 +311,7 @@ public function preProcess() { $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) { @@ -442,6 +442,12 @@ public function setDefaultValues() { $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'); } @@ -695,8 +701,10 @@ public function buildQuickForm() { } } + // 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); @@ -884,6 +892,7 @@ public static function formRule($fields, $files, $self) { 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); } @@ -943,6 +952,12 @@ public function postProcess() { } // 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);