3 +--------------------------------------------------------------------+
4 | Copyright CiviCRM LLC. All rights reserved. |
6 | This work is published under the GNU AGPLv3 license with some |
7 | permitted exceptions and without any warranty. For full license |
8 | and copyright information, see https://civicrm.org/licensing |
9 +--------------------------------------------------------------------+
15 * @copyright CiviCRM LLC https://civicrm.org/licensing
19 * This class generates form components for Financial Type
21 class CRM_Financial_Form_FinancialType
extends CRM_Contribute_Form
{
23 use CRM_Core_Form_EntityFormTrait
;
26 * Fields for the entity to be assigned to the template.
30 protected $entityFields = [];
33 * Deletion message to be assigned to the form.
37 protected $deleteMessage;
40 * Set variables up before form is built.
42 * @throws \CRM_Core_Exception
44 public function preProcess() {
45 // Check permission for Financial Type when ACL-FT is enabled
46 if (CRM_Financial_BAO_FinancialType
::isACLFinancialTypeStatus()
47 && !CRM_Core_Permission
::check('administer CiviCRM Financial Types')
49 CRM_Core_Error
::statusBounce(ts('You do not have permission to access this page.'));
51 $this->_id
= CRM_Utils_Request
::retrieve('id', 'Positive', $this);
53 $this->setPageTitle(ts('Financial Type'));
55 $this->_title
= CRM_Core_PseudoConstant
::getLabel(
56 'CRM_Financial_BAO_FinancialType',
60 $this->assign('aid', $this->_id
);
65 * Set entity fields to be assigned to the form.
67 protected function setEntityFields() {
68 $this->entityFields
= [
73 'description' => ['name' => 'description'],
75 'name' => 'is_deductible',
76 'description' => ts('Are contributions of this type tax-deductible?'),
78 'is_reserved' => ['name' => 'is_reserved'],
79 'is_active' => ['name' => 'is_active'],
84 * Explicitly declare the entity api name.
86 public function getDefaultEntity() {
87 return 'FinancialType';
91 * Set the delete message.
93 * We do this from the constructor in order to do a translation.
95 public function setDeleteMessage() {
96 $this->deleteMessage
= ts('WARNING: You cannot delete a financial type if it is currently used by any Contributions, Contribution Pages or Membership Types. Consider disabling this option instead.') . ts('Deleting a financial type cannot be undone.') . ts('Do you want to continue?');
100 * Build the form object.
102 public function buildQuickForm() {
103 self
::buildQuickEntityForm();
104 if ($this->_action
& CRM_Core_Action
::DELETE
) {
107 if ($this->_action
== CRM_Core_Action
::UPDATE
&& CRM_Core_DAO
::getFieldValue('CRM_Financial_DAO_FinancialType', $this->_id
, 'is_reserved')) {
108 $this->freeze(['is_active']);
110 $this->addRule('name', ts('A financial type with this name already exists. Please select another name.'), 'objectExists',
111 ['CRM_Financial_DAO_FinancialType', $this->_id
]
116 * Process the form submission.
118 public function postProcess() {
119 if ($this->_action
& CRM_Core_Action
::DELETE
) {
120 $errors = CRM_Financial_BAO_FinancialType
::del($this->_id
);
121 if (is_array($errors) && !empty($errors)) {
122 CRM_Core_Error
::statusBounce($errors['error_message'], CRM_Utils_System
::url('civicrm/admin/financial/financialType', "reset=1&action=browse"), ts('Cannot Delete'));
124 CRM_Core_Session
::setStatus(ts('Selected financial type has been deleted.'), ts('Record Deleted'), 'success');
127 // store the submitted values in an array
128 $params = $this->exportValues();
130 $params['id'] = $this->_id
;
137 $params[$field] = CRM_Utils_Array
::value($field, $params, FALSE);
139 $financialType = civicrm_api3('FinancialType', 'create', $params);
140 if ($this->_action
& CRM_Core_Action
::UPDATE
) {
141 $url = CRM_Utils_System
::url('civicrm/admin/financial/financialType', 'reset=1&action=browse');
142 CRM_Core_Session
::setStatus(ts('The financial type "%1" has been updated.', [1 => $params['name']]), ts('Saved'), 'success');
145 $url = CRM_Utils_System
::url('civicrm/admin/financial/financialType/accounts', 'reset=1&action=browse&aid=' . $financialType['id']);
148 1 => $params['name'],
150 $financialAccounts = civicrm_api3('EntityFinancialAccount', 'get', [
151 'return' => ["financial_account_id.name"],
152 'entity_table' => "civicrm_financial_type",
153 'entity_id' => $financialType['id'],
154 'options' => ['sort' => "id"],
155 'account_relationship' => ['!=' => "Income Account is"],
157 if (!empty($financialAccounts['values'])) {
158 foreach ($financialAccounts['values'] as $financialAccount) {
159 $statusArray[] = $financialAccount['financial_account_id.name'];
161 $text = ts('Your Financial "%1" Type has been created, along with a corresponding income account "%1". That income account, along with standard financial accounts "%2", "%3" and "%4" have been linked to the financial type. You may edit or replace those relationships here.', $statusArray);
164 $text = ts('Your Financial "%1" Type has been created and assigned to an existing financial account with the same title. You should review the assigned account and determine whether additional account relationships are needed.', $statusArray);
166 CRM_Core_Session
::setStatus($text, ts('Saved'), 'success', ['expires' => 0]);
169 $session = CRM_Core_Session
::singleton();
170 $session->replaceUserContext($url);