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 +--------------------------------------------------------------------+
13 * This class generates form components for processing a case
16 class CRM_Grant_Form_Grant
extends CRM_Core_Form
{
19 * The id of the case that we are proceessing.
26 * The id of the contact associated with this contribution.
30 protected $_contactID;
35 * Explicitly declare the entity api name.
37 public function getDefaultEntity() {
42 * Set variables up before form is built.
44 public function preProcess() {
46 $this->_contactID
= CRM_Utils_Request
::retrieve('cid', 'Positive', $this);
47 $this->_id
= CRM_Utils_Request
::retrieve('id', 'Positive', $this);
48 $this->_grantType
= NULL;
50 $this->_grantType
= CRM_Core_DAO
::getFieldValue('CRM_Grant_DAO_Grant', $this->_id
, 'grant_type_id');
52 $this->_context
= CRM_Utils_Request
::retrieve('context', 'Alphanumeric', $this);
54 $this->assign('action', $this->_action
);
55 $this->assign('context', $this->_context
);
57 //check permission for action.
58 if (!CRM_Core_Permission
::checkActionPermission('CiviGrant', $this->_action
)) {
59 CRM_Core_Error
::statusBounce(ts('You do not have permission to access this page.'));
62 $this->setPageTitle(ts('Grant'));
64 if ($this->_action
& CRM_Core_Action
::DELETE
) {
68 $this->_noteId
= NULL;
70 $noteDAO = new CRM_Core_BAO_Note();
71 $noteDAO->entity_table
= 'civicrm_grant';
72 $noteDAO->entity_id
= $this->_id
;
73 if ($noteDAO->find(TRUE)) {
74 $this->_noteId
= $noteDAO->id
;
78 // when custom data is included in this page
79 if (!empty($_POST['hidden_custom'])) {
80 $grantTypeId = empty($_POST['grant_type_id']) ?
NULL : $_POST['grant_type_id'];
81 $this->set('type', 'Grant');
82 $this->set('subType', $grantTypeId);
83 $this->set('entityId', $this->_id
);
84 CRM_Custom_Form_CustomData
::preProcess($this, NULL, $grantTypeId, 1, 'Grant', $this->_id
);
85 CRM_Custom_Form_CustomData
::buildQuickForm($this);
86 CRM_Custom_Form_CustomData
::setDefaultValues($this);
93 public function setDefaultValues() {
95 $defaults = parent
::setDefaultValues();
97 if ($this->_action
& CRM_Core_Action
::DELETE
) {
101 $params['id'] = $this->_id
;
102 if ($this->_noteId
) {
103 $defaults['note'] = CRM_Core_DAO
::getFieldValue('CRM_Core_DAO_Note', $this->_noteId
, 'note');
106 CRM_Grant_BAO_Grant
::retrieve($params, $defaults);
108 // fix the display of the monetary value, CRM-4038
109 if (isset($defaults['amount_total'])) {
110 $defaults['amount_total'] = CRM_Utils_Money
::format($defaults['amount_total'], NULL, '%a');
112 if (isset($defaults['amount_requested'])) {
113 $defaults['amount_requested'] = CRM_Utils_Money
::format($defaults['amount_requested'], NULL, '%a');
115 if (isset($defaults['amount_granted'])) {
116 $defaults['amount_granted'] = CRM_Utils_Money
::format($defaults['amount_granted'], NULL, '%a');
120 if ($this->_contactID
) {
121 $defaults['contact_id'] = $this->_contactID
;
129 * Build the form object.
133 public function buildQuickForm() {
135 if ($this->_action
& CRM_Core_Action
::DELETE
) {
139 'name' => ts('Delete'),
140 'spacing' => ' ',
145 'name' => ts('Cancel'),
151 $attributes = CRM_Core_DAO
::getAttribute('CRM_Grant_DAO_Grant');
152 $this->addSelect('grant_type_id', ['onChange' => "CRM.buildCustomData( 'Grant', this.value );"], TRUE);
154 //need to assign custom data type and subtype to the template
155 $this->assign('customDataType', 'Grant');
156 $this->assign('customDataSubType', $this->_grantType
);
157 $this->assign('entityID', $this->_id
);
159 $this->addSelect('status_id', [], TRUE);
161 $this->add('datepicker', 'application_received_date', ts('Application Received'), [], FALSE, ['time' => FALSE]);
162 $this->add('datepicker', 'decision_date', ts('Grant Decision'), [], FALSE, ['time' => FALSE]);
163 $this->add('datepicker', 'money_transfer_date', ts('Money Transferred'), [], FALSE, ['time' => FALSE]);
164 $this->add('datepicker', 'grant_due_date', ts('Grant Report Due'), [], FALSE, ['time' => FALSE]);
166 $this->addElement('checkbox', 'grant_report_received', ts('Grant Report Received?'), NULL);
167 $this->add('textarea', 'rationale', ts('Rationale'), $attributes['rationale']);
168 $this->add('text', 'amount_total', ts('Amount Requested'), NULL, TRUE);
169 $this->addRule('amount_total', ts('Please enter a valid amount.'), 'money');
171 $this->add('text', 'amount_granted', ts('Amount Granted'));
172 $this->addRule('amount_granted', ts('Please enter a valid amount.'), 'money');
174 $this->add('text', 'amount_requested', ts('Amount Requested<br />(original currency)'));
175 $this->addRule('amount_requested', ts('Please enter a valid amount.'), 'money');
177 $noteAttrib = CRM_Core_DAO
::getAttribute('CRM_Core_DAO_Note');
178 $this->add('textarea', 'note', ts('Notes'), $noteAttrib['note']);
180 // add attachments part
181 CRM_Core_BAO_File
::buildAttachment($this,
186 // make this form an upload since we dont know if the custom data injected dynamically
187 // is of type file etc $uploadNames = $this->get( 'uploadNames' );
191 'name' => ts('Save'),
196 'name' => ts('Save and New'),
197 'js' => ['onclick' => "return verify( );"],
202 'name' => ts('Cancel'),
206 $contactField = $this->addEntityRef('contact_id', ts('Applicant'), ['create' => TRUE], TRUE);
207 if ($this->_context
!= 'standalone') {
208 $contactField->freeze();
213 * Process the form submission.
218 public function postProcess() {
219 if ($this->_action
& CRM_Core_Action
::DELETE
) {
220 CRM_Grant_BAO_Grant
::del($this->_id
);
224 if ($this->_action
& CRM_Core_Action
::UPDATE
) {
225 $ids['grant_id'] = $this->_id
;
228 // get the submitted form values.
229 $params = $this->controller
->exportValues($this->_name
);
231 if (empty($params['grant_report_received'])) {
232 $params['grant_report_received'] = "null";
235 // set the contact, when contact is selected
236 if ($this->_context
== 'standalone') {
237 $this->_contactID
= $params['contact_id'];
240 $params['contact_id'] = $this->_contactID
;
242 if ($this->_noteId
) {
243 $ids['note']['id'] = $this->_noteId
;
246 // build custom data getFields array
247 $customFieldsGrantType = CRM_Core_BAO_CustomField
::getFields('Grant', FALSE, FALSE,
248 CRM_Utils_Array
::value('grant_type_id', $params)
250 $customFields = CRM_Utils_Array
::crmArrayMerge($customFieldsGrantType,
251 CRM_Core_BAO_CustomField
::getFields('Grant', FALSE, FALSE, NULL, NULL, TRUE)
253 $params['custom'] = CRM_Core_BAO_CustomField
::postProcess($params,
258 // add attachments as needed
259 CRM_Core_BAO_File
::formatAttachment($params,
269 foreach ($moneyFields as $field) {
270 if (isset($params[$field])) {
271 $params[$field] = CRM_Utils_Rule
::cleanMoney($params[$field]);
275 $grant = CRM_Grant_BAO_Grant
::create($params, $ids);
277 $buttonName = $this->controller
->getButtonName();
278 $session = CRM_Core_Session
::singleton();
279 if ($this->_context
== 'standalone') {
280 if ($buttonName == $this->getButtonName('upload', 'new')) {
281 $session->replaceUserContext(CRM_Utils_System
::url('civicrm/grant/add',
282 'reset=1&action=add&context=standalone'
286 $session->replaceUserContext(CRM_Utils_System
::url('civicrm/contact/view',
287 "reset=1&cid={$this->_contactID}&selectedChild=grant"
291 elseif ($buttonName == $this->getButtonName('upload', 'new')) {
292 $session->replaceUserContext(CRM_Utils_System
::url('civicrm/contact/view/grant',
293 "reset=1&action=add&context=grant&cid={$this->_contactID}"