From 251808cb1440e53b2942c8534024283f533a2d68 Mon Sep 17 00:00:00 2001 From: Pradeep Nayak Date: Mon, 23 Jul 2018 14:25:43 +0100 Subject: [PATCH] Added code to support custom field for Financial Type --- CRM/Financial/DAO/FinancialType.php | 22 ++- CRM/Financial/Form/FinancialType.php | 136 ++++++++++++------ .../CRM/Financial/Form/FinancialType.tpl | 49 +------ xml/schema/Financial/FinancialType.xml | 22 +++ 4 files changed, 144 insertions(+), 85 deletions(-) diff --git a/CRM/Financial/DAO/FinancialType.php b/CRM/Financial/DAO/FinancialType.php index 70bd24234a..8f805cb8c3 100644 --- a/CRM/Financial/DAO/FinancialType.php +++ b/CRM/Financial/DAO/FinancialType.php @@ -6,7 +6,7 @@ * * Generated from xml/schema/CRM/Financial/FinancialType.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen - * (GenCodeChecksum:237f3a0cb50c930dd33a9f957677245b) + * (GenCodeChecksum:6d85bc0675253407de19ac9226ba4478) */ /** @@ -114,6 +114,10 @@ class CRM_Financial_DAO_FinancialType extends CRM_Core_DAO { 'entity' => 'FinancialType', 'bao' => 'CRM_Financial_BAO_FinancialType', 'localizable' => 0, + 'html' => [ + 'type' => 'Text', + 'label' => ts("Name"), + ], 'pseudoconstant' => [ 'table' => 'civicrm_financial_type', 'keyColumn' => 'id', @@ -131,6 +135,10 @@ class CRM_Financial_DAO_FinancialType extends CRM_Core_DAO { 'entity' => 'FinancialType', 'bao' => 'CRM_Financial_BAO_FinancialType', 'localizable' => 0, + 'html' => [ + 'type' => 'TextArea', + 'label' => ts("Description"), + ], ], 'is_deductible' => [ 'name' => 'is_deductible', @@ -142,6 +150,10 @@ class CRM_Financial_DAO_FinancialType extends CRM_Core_DAO { 'entity' => 'FinancialType', 'bao' => 'CRM_Financial_BAO_FinancialType', 'localizable' => 0, + 'html' => [ + 'type' => 'CheckBox', + 'label' => ts("Tax-Deductible?"), + ], ], 'is_reserved' => [ 'name' => 'is_reserved', @@ -152,6 +164,10 @@ class CRM_Financial_DAO_FinancialType extends CRM_Core_DAO { 'entity' => 'FinancialType', 'bao' => 'CRM_Financial_BAO_FinancialType', 'localizable' => 0, + 'html' => [ + 'type' => 'CheckBox', + 'label' => ts("Reserved?"), + ], ], 'is_active' => [ 'name' => 'is_active', @@ -162,6 +178,10 @@ class CRM_Financial_DAO_FinancialType extends CRM_Core_DAO { 'entity' => 'FinancialType', 'bao' => 'CRM_Financial_BAO_FinancialType', 'localizable' => 0, + 'html' => [ + 'type' => 'CheckBox', + 'label' => ts("Enabled?"), + ], ], ]; CRM_Core_DAO_AllCoreTables::invoke(__CLASS__, 'fields_callback', Civi::$statics[__CLASS__]['fields']); diff --git a/CRM/Financial/Form/FinancialType.php b/CRM/Financial/Form/FinancialType.php index 10a30c7f24..3600ef6547 100644 --- a/CRM/Financial/Form/FinancialType.php +++ b/CRM/Financial/Form/FinancialType.php @@ -36,6 +36,22 @@ */ class CRM_Financial_Form_FinancialType extends CRM_Contribute_Form { + use CRM_Core_Form_EntityFormTrait; + + /** + * Fields for the entity to be assigned to the template. + * + * @var array + */ + protected $entityFields = []; + + /** + * Deletion message to be assigned to the form. + * + * @var string + */ + protected $deleteMessage; + /** * Set variables up before form is built. */ @@ -46,40 +62,67 @@ class CRM_Financial_Form_FinancialType extends CRM_Contribute_Form { ) { CRM_Core_Error::fatal(ts('You do not have permission to access this page.')); } + $this->_id = CRM_Utils_Request::retrieve('id', 'Positive', $this); parent::preProcess(); + $this->setPageTitle(ts('Financial Type')); + if ($this->_id) { + $this->_title = CRM_Core_PseudoConstant::getLabel( + 'CRM_Financial_BAO_FinancialType', + 'financial_type', + $this->_id + ); + $this->assign('aid', $this->_id); + } + } + + /** + * Set entity fields to be assigned to the form. + */ + protected function setEntityFields() { + $this->entityFields = [ + 'name' => [ + 'name' => 'name', + 'required' => TRUE, + ], + 'description' => ['name' => 'description'], + 'is_deductible' => [ + 'name' => 'is_deductible', + 'description' => ts('Are contributions of this type tax-deductible?'), + ], + 'is_reserved' => ['name' => 'is_reserved'], + 'is_active' => ['name' => 'is_active'], + ]; + } + + /** + * Explicitly declare the entity api name. + */ + public function getDefaultEntity() { + return 'FinancialType'; + } + + /** + * Set the delete message. + * + * We do this from the constructor in order to do a translation. + */ + public function setDeleteMessage() { + $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?'); } /** * Build the form object. */ public function buildQuickForm() { - parent::buildQuickForm(); - $this->setPageTitle(ts('Financial Type')); - - $this->_id = CRM_Utils_Request::retrieve('id', 'Positive', $this); - if ($this->_id) { - $this->_title = CRM_Core_DAO::getFieldValue('CRM_Financial_DAO_FinancialType', $this->_id, 'name'); - } + self::buildQuickEntityForm(); if ($this->_action & CRM_Core_Action::DELETE) { return; } - $this->applyFilter('__ALL__', 'trim'); - $this->add('text', 'name', ts('Name'), CRM_Core_DAO::getAttribute('CRM_Financial_DAO_FinancialType', 'name'), TRUE); - - $this->add('text', 'description', ts('Description'), CRM_Core_DAO::getAttribute('CRM_Financial_DAO_FinancialType', 'description')); - - $this->add('checkbox', 'is_deductible', ts('Tax-Deductible?'), CRM_Core_DAO::getAttribute('CRM_Financial_DAO_FinancialType', 'is_deductible')); - $this->add('checkbox', 'is_active', ts('Enabled?'), CRM_Core_DAO::getAttribute('CRM_Financial_DAO_FinancialType', 'is_active')); - $this->add('checkbox', 'is_reserved', ts('Reserved?'), CRM_Core_DAO::getAttribute('CRM_Financial_DAO_FinancialType', 'is_reserved')); - if ($this->_action == CRM_Core_Action::UPDATE) { - $this->assign('aid', $this->_id); - } - if ($this->_action == CRM_Core_Action::UPDATE && CRM_Core_DAO::getFieldValue('CRM_Financial_DAO_FinancialType', $this->_id, 'is_reserved', 'vid')) { - $this->freeze(array('is_active')); + if ($this->_action == CRM_Core_Action::UPDATE && CRM_Core_DAO::getFieldValue('CRM_Financial_DAO_FinancialType', $this->_id, 'is_reserved')) { + $this->freeze(['is_active']); } - $this->addRule('name', ts('A financial type with this name already exists. Please select another name.'), 'objectExists', - array('CRM_Financial_DAO_FinancialType', $this->_id) + ['CRM_Financial_DAO_FinancialType', $this->_id] ); } @@ -95,35 +138,46 @@ class CRM_Financial_Form_FinancialType extends CRM_Contribute_Form { CRM_Core_Session::setStatus(ts('Selected financial type has been deleted.'), ts('Record Deleted'), 'success'); } else { - $params = $ids = array(); // store the submitted values in an array $params = $this->exportValues(); - - if ($this->_action & CRM_Core_Action::UPDATE) { - $ids['financialType'] = $this->_id; + if ($this->_id) { + $params['id'] = $this->_id; } - - $financialType = CRM_Financial_BAO_FinancialType::add($params, $ids); + foreach ([ + 'is_active', + 'is_reserved', + 'is_deductible', + ] as $field) { + $params[$field] = CRM_Utils_Array::value($field, $params, FALSE); + } + $financialType = civicrm_api3('FinancialType', 'create', $params); if ($this->_action & CRM_Core_Action::UPDATE) { $url = CRM_Utils_System::url('civicrm/admin/financial/financialType', 'reset=1&action=browse'); - CRM_Core_Session::setStatus(ts('The financial type "%1" has been updated.', array(1 => $financialType->name)), ts('Saved'), 'success'); + CRM_Core_Session::setStatus(ts('The financial type "%1" has been updated.', [1 => $params['name']]), ts('Saved'), 'success'); } else { - $url = CRM_Utils_System::url('civicrm/admin/financial/financialType/accounts', 'reset=1&action=browse&aid=' . $financialType->id); - $statusArray = array( - 1 => $financialType->name, - 2 => $financialType->name, - 3 => CRM_Utils_Array::value(0, $financialType->titles), - 4 => CRM_Utils_Array::value(1, $financialType->titles), - 5 => CRM_Utils_Array::value(2, $financialType->titles), - ); - if (empty($financialType->titles)) { - $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); + $url = CRM_Utils_System::url('civicrm/admin/financial/financialType/accounts', 'reset=1&action=browse&aid=' . $financialType['id']); + + $statusArray = [ + 1 => $params['name'], + ]; + $financialAccounts = civicrm_api3('EntityFinancialAccount', 'get', [ + 'return' => ["financial_account_id.name"], + 'entity_table' => "civicrm_financial_type", + 'entity_id' => $financialType['id'], + 'options' => ['sort' => "id"], + 'account_relationship' => ['!=' => "Income Account is"], + ]); + if (!empty($financialAccounts['values'])) { + foreach ($financialAccounts['values'] as $financialAccount) { + $statusArray[] = $financialAccount['financial_account_id.name']; + } + $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); } else { - $text = ts('Your Financial "%1" Type has been created, along with a corresponding income account "%2". That income account, along with standard financial accounts "%3", "%4" and "%5" have been linked to the financial type. You may edit or replace those relationships here.', $statusArray); + $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); } - CRM_Core_Session::setStatus($text, ts('Saved'), 'success', array('expires' => 0)); + CRM_Core_Session::setStatus($text, ts('Saved'), 'success', ['expires' => 0]); } $session = CRM_Core_Session::singleton(); diff --git a/templates/CRM/Financial/Form/FinancialType.tpl b/templates/CRM/Financial/Form/FinancialType.tpl index c815ec8fbc..675256334f 100644 --- a/templates/CRM/Financial/Form/FinancialType.tpl +++ b/templates/CRM/Financial/Form/FinancialType.tpl @@ -24,46 +24,9 @@ +--------------------------------------------------------------------+ *} {* this template is used for adding/editing/deleting financial type *} -
- {if $action eq 8} -
-
- {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} {ts}Deleting a financial type cannot be undone.{/ts} {ts}Do you want to continue?{/ts} -
- {else} -
{include file="CRM/common/formButtons.tpl" location="top"}
- - - - - - - - - - - - - - - - - - - - - - - -
{$form.name.label}{$form.name.html}
{$form.description.label}{$form.description.html}
{$form.is_deductible.label}{$form.is_deductible.html}
- {ts}Are contributions of this type tax-deductible?{/ts} -
{$form.is_active.label}{$form.is_active.html}
{$form.is_reserved.label}{$form.is_reserved.html}
- {/if} -
{include file="CRM/common/formButtons.tpl" location="botttom"}
- {if $action eq 2 or $action eq 4 } {* Update or View*} - - {/if} -
- +{include file="CRM/Core/Form/EntityForm.tpl"} +{if $action eq 2 or $action eq 4 } {* Update or View*} +
+ {ts}View or Edit Financial Accounts{/ts} +
+{/if} diff --git a/xml/schema/Financial/FinancialType.xml b/xml/schema/Financial/FinancialType.xml index d82956aa51..8e93b6c82e 100644 --- a/xml/schema/Financial/FinancialType.xml +++ b/xml/schema/Financial/FinancialType.xml @@ -31,6 +31,10 @@ /(finan(cial)?)?type/i /donation|member|campaign/i Financial Type Name. + + Text + + 1.3 civicrm_financial_type
@@ -51,6 +55,12 @@ description varchar + + TextArea + 6 + 50 + + 255 Financial Type Description. 1.3 @@ -63,6 +73,10 @@ 1 Is this financial type tax-deductible? If true, contributions of this type may be fully OR partially deductible - non-deductible amount is stored in the Contribution record. 1.3 + + CheckBox + + is_reserved @@ -71,6 +85,10 @@ 4 Is this a predefined system object? 1.3 + + CheckBox + + is_active @@ -79,6 +97,10 @@ 4 Is this property active? 1.3 + + CheckBox + + UI_id -- 2.25.1