3 +--------------------------------------------------------------------+
4 | CiviCRM version 4.6 |
5 +--------------------------------------------------------------------+
6 | Copyright CiviCRM LLC (c) 2004-2014 |
7 +--------------------------------------------------------------------+
8 | This file is a part of CiviCRM. |
10 | CiviCRM is free software; you can copy, modify, and distribute it |
11 | under the terms of the GNU Affero General Public License |
12 | Version 3, 19 November 2007 and the CiviCRM Licensing Exception. |
14 | CiviCRM is distributed in the hope that it will be useful, but |
15 | WITHOUT ANY WARRANTY; without even the implied warranty of |
16 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. |
17 | See the GNU Affero General Public License for more details. |
19 | You should have received a copy of the GNU Affero General Public |
20 | License and the CiviCRM Licensing Exception along |
21 | with this program; if not, contact CiviCRM LLC |
22 | at info[AT]civicrm[DOT]org. If you have questions about the |
23 | GNU Affero General Public License or the licensing of CiviCRM, |
24 | see the CiviCRM license FAQ at http://civicrm.org/licensing |
25 +--------------------------------------------------------------------+
31 * @copyright CiviCRM LLC (c) 2004-2014
35 class CRM_Grant_BAO_Grant
extends CRM_Grant_DAO_Grant
{
38 * Static field for all the grant information that we can potentially export
42 static $_exportableFields = NULL;
47 public function __construct() {
48 parent
::__construct();
58 * @return array Array of event summary values
60 public static function getGrantSummary($admin = FALSE) {
62 SELECT status_id, count(id) as status_total
63 FROM civicrm_grant GROUP BY status_id";
65 $dao = CRM_Core_DAO
::executeQuery($query, CRM_Core_DAO
::$_nullArray);
69 $summary['total_grants'] = NULL;
70 $status = CRM_Core_PseudoConstant
::get('CRM_Grant_DAO_Grant', 'status_id');
72 foreach ($status as $id => $name) {
79 while ($dao->fetch()) {
80 $stats[$dao->status_id
] = array(
81 'label' => $status[$dao->status_id
],
82 'total' => $dao->status_total
,
84 $summary['total_grants'] +
= $dao->status_total
;
87 $summary['per_status'] = $stats;
96 * @return array Array of event summary values
98 public static function getGrantStatusOptGroup() {
101 $params['name'] = CRM_Grant_BAO_Grant
::$statusGroupName;
105 $og = CRM_Core_BAO_OptionGroup
::retrieve($params, $defaults);
107 CRM_Core_Error
::fatal('No option group for grant statuses - database discrepancy! Make sure you loaded civicrm_data.mysql');
114 * Retrieve statistics for grants.
120 * @return array Array of grant summary statistics
122 public static function getGrantStatistics($admin = FALSE) {
123 $grantStatuses = array();
127 * Fetch object based on array of properties
129 * @param array $params (reference ) an assoc array of name/value pairs
130 * @param array $defaults (reference ) an assoc array to hold the flattened values
132 * @return CRM_Grant_BAO_ManageGrant object
135 public static function retrieve(&$params, &$defaults) {
136 $grant = new CRM_Grant_DAO_Grant();
137 $grant->copyValues($params);
138 if ($grant->find(TRUE)) {
139 CRM_Core_DAO
::storeValues($grant, $defaults);
148 * @param array $params reference array contains the values submitted by the form
149 * @param array $ids reference array contains the id
155 public static function add(&$params, &$ids) {
157 if (!empty($ids['grant_id'])) {
158 CRM_Utils_Hook
::pre('edit', 'Grant', $ids['grant_id'], $params);
161 CRM_Utils_Hook
::pre('create', 'Grant', NULL, $params);
164 // first clean up all the money fields
165 $moneyFields = array(
170 foreach ($moneyFields as $field) {
171 if (isset($params[$field])) {
172 $params[$field] = CRM_Utils_Rule
::cleanMoney($params[$field]);
175 // convert dates to mysql format
177 'application_received_date',
179 'money_transfer_date',
183 foreach ($dates as $d) {
184 if (isset($params[$d])) {
185 $params[$d] = CRM_Utils_Date
::processDate($params[$d], NULL, TRUE);
188 $grant = new CRM_Grant_DAO_Grant();
189 $grant->id
= CRM_Utils_Array
::value('grant_id', $ids);
191 $grant->copyValues($params);
193 // set currency for CRM-1496
194 if (!isset($grant->currency
)) {
195 $config = CRM_Core_Config
::singleton();
196 $grant->currency
= $config->defaultCurrency
;
199 $result = $grant->save();
201 $url = CRM_Utils_System
::url('civicrm/contact/view/grant',
202 "action=view&reset=1&id={$grant->id}&cid={$grant->contact_id}&context=home"
205 $grantTypes = CRM_Core_PseudoConstant
::get('CRM_Grant_DAO_Grant', 'grant_type_id');
206 if (empty($params['skipRecentView'])) {
207 if(!isset($grant->contact_id
) ||
!isset($grant->grant_type_id
)){
210 $title = CRM_Contact_BAO_Contact
::displayName($grant->contact_id
) . ' - ' . ts('Grant') . ': ' . $grantTypes[$grant->grant_type_id
];
212 $recentOther = array();
213 if (CRM_Core_Permission
::checkActionPermission('CiviGrant', CRM_Core_Action
::UPDATE
)) {
214 $recentOther['editUrl'] = CRM_Utils_System
::url('civicrm/contact/view/grant',
215 "action=update&reset=1&id={$grant->id}&cid={$grant->contact_id}&context=home"
218 if (CRM_Core_Permission
::checkActionPermission('CiviGrant', CRM_Core_Action
::DELETE
)) {
219 $recentOther['deleteUrl'] = CRM_Utils_System
::url('civicrm/contact/view/grant',
220 "action=delete&reset=1&id={$grant->id}&cid={$grant->contact_id}&context=home"
224 // add the recently created Grant
225 CRM_Utils_Recent
::add($title,
235 if (!empty($ids['grant'])) {
236 CRM_Utils_Hook
::post('edit', 'Grant', $grant->id
, $grant);
239 CRM_Utils_Hook
::post('create', 'Grant', $grant->id
, $grant);
248 * @param array $params reference array contains the values submitted by the form
249 * @param array $ids reference array contains the id
255 public static function create(&$params, &$ids) {
256 $transaction = new CRM_Core_Transaction();
258 $grant = self
::add($params, $ids);
260 if (is_a($grant, 'CRM_Core_Error')) {
261 $transaction->rollback();
265 $session = CRM_Core_Session
::singleton();
266 $id = $session->get('userID');
268 $id = CRM_Utils_Array
::value('contact_id', $params);
270 if (!empty($params['note']) || CRM_Utils_Array
::value('id', CRM_Utils_Array
::value('note', $ids))) {
272 'entity_table' => 'civicrm_grant',
273 'note' => $params['note'] = $params['note'] ?
$params['note'] : "null",
274 'entity_id' => $grant->id
,
276 'modified_date' => date('Ymd'),
279 CRM_Core_BAO_Note
::add($noteParams, (array) CRM_Utils_Array
::value('note', $ids));
281 // Log the information on successful add/edit of Grant
283 'entity_table' => 'civicrm_grant',
284 'entity_id' => $grant->id
,
285 'modified_id' => $id,
286 'modified_date' => date('Ymd'),
289 CRM_Core_BAO_Log
::add($logParams);
291 // add custom field values
292 if (!empty($params['custom']) && is_array($params['custom'])) {
293 CRM_Core_BAO_CustomValueTable
::store($params['custom'], 'civicrm_grant', $grant->id
);
296 // check and attach and files as needed
297 CRM_Core_BAO_File
::processAttachment($params,
302 $transaction->commit();
310 * @param int $id contact id
316 public static function deleteContact($id) {
317 $grant = new CRM_Grant_DAO_Grant();
318 $grant->contact_id
= $id;
326 * @param int $id grant id
332 public static function del($id) {
333 CRM_Utils_Hook
::pre('delete', 'Grant', $id, CRM_Core_DAO
::$_nullArray);
335 $grant = new CRM_Grant_DAO_Grant();
340 // delete the recently created Grant
341 $grantRecent = array(
345 CRM_Utils_Recent
::del($grantRecent);
347 if ($grant->fetch()) {
348 $results = $grant->delete();
349 CRM_Utils_Hook
::post('delete', 'Grant', $grant->id
, $grant);
356 * Combine all the exportable fields from the lower levels object
358 * @return array array of exportable Fields
361 public static function &exportableFields() {
362 if (!self
::$_exportableFields) {
363 if (!self
::$_exportableFields) {
364 self
::$_exportableFields = array();
367 $grantFields = array(
368 'grant_status' => array(
369 'title' => 'Grant Status',
370 'name' => 'grant_status',
371 'data_type' => CRM_Utils_Type
::T_STRING
,
373 'grant_type' => array(
374 'title' => 'Grant Type',
375 'name' => 'grant_type',
376 'data_type' => CRM_Utils_Type
::T_STRING
,
378 'grant_money_transfer_date' => array(
379 'title' => 'Grant Money Transfer Date',
380 'name' => 'grant_money_transfer_date',
381 'data_type' => CRM_Utils_Type
::T_DATE
,
383 'grant_amount_requested' => array(
384 'title' => 'Grant Amount Requested',
385 'name' => 'grant_amount_requested',
386 'data_type' => CRM_Utils_Type
::T_FLOAT
,
388 'grant_application_received_date' => array(
389 'title' => 'Grant Application Recieved Date',
390 'name' => 'grant_application_received_date',
391 'data_type' => CRM_Utils_Type
::T_DATE
,
395 $fields = CRM_Grant_DAO_Grant
::export();
396 $grantNote = array('grant_note' => array('title' => ts('Grant Note'),
397 'name' => 'grant_note',
398 'data_type' => CRM_Utils_Type
::T_TEXT
,
400 $fields = array_merge($fields, $grantFields, $grantNote,
401 CRM_Core_BAO_CustomField
::getFieldsForImport('Grant')
403 self
::$_exportableFields = $fields;
406 return self
::$_exportableFields;
410 * Get grant record count for a Contact
412 * @param int $contactID
414 * @return int count of grant records
417 public static function getContactGrantCount($contactID) {
418 $query = "SELECT count(*) FROM civicrm_grant WHERE civicrm_grant.contact_id = {$contactID} ";
419 return CRM_Core_DAO
::singleValueQuery($query);