public static function registerResources($contactID, $absenceTypes = NULL, $activityTypes = NULL, $periods = NULL)
 {
     static $loaded = FALSE;
     if ($loaded) {
         return;
     }
     $loaded = TRUE;
     CRM_Core_Resources::singleton()->addSettingsFactory(function () use($contactID, $absenceTypes, $activityTypes, $periods) {
         if ($periods === NULL) {
             $res = civicrm_api3('HRAbsencePeriod', 'get', array('options' => array('sort' => "start_date DESC")));
             $periods = $res['values'];
         }
         if ($absenceTypes === NULL) {
             $res = civicrm_api3('HRAbsenceType', 'get', array());
             $absenceTypes = $res['values'];
         }
         if ($activityTypes === NULL) {
             $activityTypes = CRM_HRAbsence_BAO_HRAbsenceType::getActivityTypes();
         }
         $legend = new CRM_HRAbsence_TypeLegend(9, $absenceTypes, $activityTypes);
         $i = 1;
         foreach ($periods as $key => $val) {
             $sortPeriods[$i] = $val;
             $i++;
         }
         return array('PseudoConstant' => array('locationType' => CRM_Core_PseudoConstant::get('CRM_Core_DAO_Address', 'location_type_id'), 'absenceStatus' => CRM_HRAbsence_BAO_HRAbsenceType::getActivityStatus()), 'Permissions' => array('viewWidget' => CRM_HRAbsence_Page_EmployeeAbsencePage::checkPermissions($contactID, 'viewWidget'), 'newAbsences' => CRM_HRAbsence_Page_EmployeeAbsencePage::checkPermissions($contactID, 'enableNewAbsence'), 'enableEntitlement' => CRM_HRAbsence_Page_EmployeeAbsencePage::checkPermissions($contactID, 'enableEntitlements'), 'getJobInfo' => CRM_HRAbsence_Page_EmployeeAbsencePage::checkPermissions($contactID, 'getJobInfo'), 'getOwnJobInfo' => CRM_HRAbsence_Page_EmployeeAbsencePage::checkPermissions($contactID, 'getOwnJobInfo')), 'FieldOptions' => CRM_HRAbsence_Page_EmployeeAbsencePage::getFieldOptions(), 'absenceApp' => array('contactId' => $contactID, 'activityTypes' => $activityTypes, 'absenceTypes' => $absenceTypes, 'legend' => $legend->getMap(), 'periods' => $periods, 'sortPeriods' => $sortPeriods, 'standardDay' => 8 * 60, 'apiTsFmt' => 'YYYY-MM-DD HH:mm:ss'));
     })->addScriptFile('civicrm', 'packages/momentjs/moment.min.js', 100, 'html-header', FALSE)->addScriptFile('civicrm', 'packages/backbone/json2.js', 100, 'html-header', FALSE)->addScriptFile('civicrm', 'packages/backbone/backbone.js', 120, 'html-header')->addScriptFile('civicrm', 'packages/backbone/backbone.marionette.js', 125, 'html-header', FALSE)->addScriptFile('civicrm', 'packages/backbone/backbone.modelbinder.js', 125, 'html-header', FALSE)->addScriptFile('civicrm', 'js/crm.backbone.js', 130, 'html-header', FALSE)->addStyleFile('org.civicrm.hrabsence', 'css/hrabsence.css', 140, 'html-header')->addStyleFile('org.civicrm.hrabsence', 'css/jquery.multiselect.css', 140, 'html-header')->addScriptFile('org.civicrm.hrabsence', 'js/jquery.multiselect.js', 140, 'html-header');
     self::addScriptFiles('org.civicrm.hrabsence', 'js/*.js', 200, 'html-header');
     self::addScriptFiles('org.civicrm.hrabsence', 'js/*/*.js', 300, 'html-header');
     self::addScriptFiles('org.civicrm.hrabsence', 'js/*/*/*.js', 400, 'html-header');
     self::addTemplateFiles('org.civicrm.hrabsence', 'CRM/HRAbsence/Underscore/*.tpl', 'page-header');
     // self::addTemplates('civicrm', 'CRM/Form/validate.tpl', 'page-header');
 }
Beispiel #2
0
 function __construct()
 {
     // There could be multiple contacts. We not clear on which contact id to display.
     // Lets hide it for now.
     $this->_exposeContactID = FALSE;
     $this->activityTypes = CRM_HRAbsence_BAO_HRAbsenceType::getActivityTypes();
     $this->activityStatus = CRM_HRAbsence_BAO_HRAbsenceType::getActivityStatus('name');
     asort($this->activityTypes);
     $this->_columns = array('civicrm_contact' => array('dao' => 'CRM_Contact_DAO_Contact', 'fields' => array('display_name' => array('name' => 'sort_name', 'title' => ts('Individual'), 'default' => TRUE, 'required' => TRUE)), 'filters' => array('sort_name' => array('name' => 'sort_name', 'title' => ts('Individual'), 'operator' => 'like', 'dbAlias' => 'cc.sort_name', 'type' => CRM_Report_Form::OP_STRING), 'current_user' => array('name' => 'current_user', 'title' => ts('Limit To Current User'), 'type' => CRM_Utils_Type::T_INT, 'operatorType' => CRM_Report_Form::OP_SELECT, 'options' => array('0' => ts('No'), '1' => ts('Yes'))))), 'civicrm_activity' => array('dao' => 'CRM_Activity_DAO_Activity', 'fields' => array('id' => array('no_display' => TRUE, 'title' => ts('Activity ID'), 'required' => TRUE), 'source_record_id' => array('no_display' => TRUE, 'required' => TRUE), 'activity_type_id' => array('title' => ts('Absence Type'), 'required' => TRUE, 'type' => CRM_Utils_Type::T_STRING)), 'filters' => array('absence_date' => array('title' => ts('Absence Date'), 'type' => CRM_Utils_Type::T_DATE, 'operatorType' => CRM_Report_Form::OP_DATE), 'activity_type_id' => array('title' => ts('Absence Type'), 'operatorType' => CRM_Report_Form::OP_MULTISELECT, 'options' => $this->activityTypes), 'status_id' => array('title' => ts('Status'), 'operatorType' => CRM_Report_Form::OP_MULTISELECT, 'options' => CRM_HRAbsence_BAO_HRAbsenceType::getActivityStatus()))), 'civicrm_activity_contact' => array('dao' => 'CRM_Activity_DAO_ActivityContact', 'fields' => array()));
     parent::__construct();
 }
Beispiel #3
0
 function __construct()
 {
     // There could be multiple contacts. We not clear on which contact id to display.
     // Lets hide it for now.
     $this->_exposeContactID = FALSE;
     $this->activityTypes = CRM_HRAbsence_BAO_HRAbsenceType::getActivityTypes();
     $this->activityStatus = CRM_HRAbsence_BAO_HRAbsenceType::getActivityStatus();
     asort($this->activityTypes);
     $this->_columns = array('civicrm_contact' => array('dao' => 'CRM_Contact_DAO_Contact', 'fields' => array('contact_target' => array('name' => 'sort_name', 'title' => ts('Individual'), 'alias' => 'civicrm_contact_target', 'dbAlias' => "civicrm_contact_target.sort_name", 'default' => TRUE), 'contact_assignee' => array('name' => 'sort_name', 'title' => ts('Approved By'), 'alias' => 'civicrm_contact_assignee', 'dbAlias' => "civicrm_contact_assignee.sort_name"), 'contact_source' => array('name' => 'sort_name', 'title' => ts('Added By'), 'alias' => 'civicrm_contact_source', 'no_repeat' => TRUE), 'contact_source_id' => array('name' => 'id', 'alias' => 'civicrm_contact_source', 'dbAlias' => "civicrm_contact_source.id", 'no_display' => TRUE, 'default' => TRUE, 'required' => TRUE), 'contact_assignee_id' => array('name' => 'id', 'alias' => 'civicrm_contact_assignee', 'dbAlias' => "civicrm_contact_assignee.id", 'no_display' => TRUE, 'default' => TRUE, 'required' => TRUE), 'contact_target_id' => array('name' => 'id', 'alias' => 'civicrm_contact_target', 'dbAlias' => "civicrm_contact_target.id", 'no_display' => TRUE, 'default' => TRUE, 'required' => TRUE)), 'filters' => array('contact_target' => array('name' => 'sort_name', 'alias' => 'civicrm_contact_target', 'title' => ts('Individual'), 'operator' => 'like', 'type' => CRM_Report_Form::OP_STRING), 'contact_assignee' => array('name' => 'sort_name', 'alias' => 'civicrm_contact_assignee', 'title' => ts('Approved by (Contact Name)'), 'operator' => 'like', 'type' => CRM_Report_Form::OP_STRING), 'contact_source' => array('name' => 'sort_name', 'alias' => 'civicrm_contact_source', 'title' => ts('Source Contact Name'), 'operator' => 'like', 'type' => CRM_Report_Form::OP_STRING), 'current_user' => array('name' => 'current_user', 'title' => ts('Limit To Current User'), 'type' => CRM_Utils_Type::T_INT, 'operatorType' => CRM_Report_Form::OP_SELECT, 'options' => array('0' => ts('No'), '1' => ts('Yes')))), 'grouping' => 'contact-fields'), 'civicrm_email' => array('dao' => 'CRM_Core_DAO_Email', 'fields' => array('contact_target_email' => array('name' => 'email', 'title' => ts('Email'), 'alias' => 'civicrm_email_target'), 'contact_assignee_email' => array('name' => 'email', 'title' => ts('Approved By (Email)'), 'alias' => 'civicrm_email_assignee'), 'contact_source_email' => array('name' => 'email', 'title' => ts('Added By (Email)'), 'alias' => 'civicrm_email_source')), 'order_bys' => array('source_contact_email' => array('name' => 'email', 'title' => ts('Source Contact Email'), 'dbAlias' => 'civicrm_email_contact_source_email'))), 'civicrm_activity' => array('dao' => 'CRM_Activity_DAO_Activity', 'fields' => array('id' => array('no_display' => TRUE, 'title' => ts('Activity ID'), 'required' => TRUE), 'source_record_id' => array('no_display' => TRUE, 'required' => TRUE), 'activity_type_id' => array('title' => ts('Absence Type'), 'required' => TRUE, 'type' => CRM_Utils_Type::T_STRING), 'activity_subject' => array('title' => ts('Subject'), 'default' => TRUE), 'activity_date_time' => array('title' => ts('Absence Requested Date'), 'no_display' => TRUE, 'required' => TRUE), 'status_id' => array('title' => ts('Status'), 'default' => TRUE, 'type' => CRM_Utils_Type::T_STRING)), 'filters' => array('activity_date_time' => array('title' => ts('Absence Requested Date'), 'operatorType' => CRM_Report_Form::OP_DATE), 'absence_date' => array('title' => ts('Absence Date'), 'type' => CRM_Utils_Type::T_DATE, 'operatorType' => CRM_Report_Form::OP_DATE), 'activity_subject' => array('title' => ts('Subject')), 'activity_type_id' => array('title' => ts('Absence Type'), 'operatorType' => CRM_Report_Form::OP_MULTISELECT, 'options' => $this->activityTypes), 'status_id' => array('title' => ts('Status'), 'operatorType' => CRM_Report_Form::OP_MULTISELECT, 'options' => $this->activityStatus)), 'order_bys' => array('activity_date_time' => array('title' => ts('Absence Requested on'), 'default_weight' => '1', 'dbAlias' => 'civicrm_activity_activity_date_time'), 'activity_type_id' => array('title' => ts('Absence Type'), 'default_weight' => '2', 'dbAlias' => 'civicrm_activity_activity_type_id')), 'grouping' => 'activity-fields', 'alias' => 'activity'), 'civicrm_activity_contact' => array('dao' => 'CRM_Activity_DAO_ActivityContact', 'fields' => array()));
     $this->_groupFilter = TRUE;
     $this->_tagFilter = TRUE;
     parent::__construct();
 }
Beispiel #4
0
/**
 * Activity.GetAbsences API
 *
 * This is a variation on Activity.get with additional filtering behavior suitable for activities.
 *
 * @param array $params
 * @return array API result descriptor
 * @see civicrm_api3_create_success
 * @see civicrm_api3_create_error
 * @throws API_Exception
 */
function civicrm_api3_activity_getabsences($params)
{
    // activity_type_id: int|string|array(int|string)
    // period_id: int|array(int)
    // target_contact_id: int
    $activityTypes = CRM_Core_PseudoConstant::activityType();
    // ****** Defaults ******
    if (!isset($params['activity_type_id'])) {
        $params['activity_type_id'] = CRM_HRAbsence_BAO_HRAbsenceType::getActivityTypes();
    }
    // ****** Build query ******
    $select = new CRM_HRAbsence_DGWDIHTWT('civicrm_activity request');
    $select->select('request.*')->groupBy('request.id')->join('absence', 'INNER JOIN civicrm_activity absence ON (absence.source_record_id = request.id AND absence.activity_type_id = #typeId)', array('#typeId' => array_search('Absence', $activityTypes)));
    if (!empty($params['period_id'])) {
        $periodIds = (array) $params['period_id'];
        $dateExprs = array();
        // array(string $sqlExpression)
        foreach ($periodIds as $periodId) {
            $period = civicrm_api3('HRAbsencePeriod', 'getsingle', array('id' => $periodId));
            $dateExprs[] = $select->interpolate('min(absence.activity_date_time) between @start and @end', array('@start' => $period['start_date'], '@end' => $period['end_date']));
        }
        $select->having(implode(' or ', $dateExprs));
    }
    if (!empty($params['activity_type_id'])) {
        $typeIds = (array) $params['activity_type_id'];
        foreach (array_keys($typeIds) as $key) {
            if (!is_numeric($typeIds[$key])) {
                $typeIds[$key] = array_search($typeIds[$key], $activityTypes);
                if ($typeIds[$key] === FALSE) {
                    throw new API_Exception("Invalid activity type");
                }
            }
        }
        $select->where('request.activity_type_id IN (#typeIds)', array('#typeIds' => $typeIds));
    }
    if (!empty($params['target_contact_id'])) {
        $activityContactTypes = CRM_Core_OptionGroup::values('activity_contacts', FALSE, FALSE, FALSE, NULL, 'name');
        $select->join('tgt', 'INNER JOIN civicrm_activity_contact tgt
        ON tgt.activity_id = request.id
        AND tgt.record_type_id = #tgt
        AND tgt.contact_id IN (#targetIds)', array('#tgt' => CRM_Utils_Array::key('Activity Targets', $activityContactTypes), '#targetIds' => (array) $params['target_contact_id']));
    }
    // ****** Execute query ******
    $entity = _civicrm_api3_get_BAO(__FUNCTION__);
    $bao = CRM_Core_DAO::executeQuery($select->toSQL(), array(), TRUE, 'CRM_Activity_BAO_Activity');
    $activities = _civicrm_api3_dao_to_array($bao, $params, FALSE, $entity, FALSE);
    $activities = _civicrm_api3_activity_get_formatResult($params, $activities);
    return civicrm_api3_create_success($activities, $params, $entity, 'getAbsences');
}
Beispiel #5
0
 /**
  * Function to actually build the components of the form
  *
  * @return void
  * @access public
  */
 function buildQuickForm()
 {
     if (!$this->_mode) {
         $action = array(CRM_Core_Action::VIEW => 'view', CRM_Core_Action::UPDATE => 'edit');
         CRM_Core_Error::fatal(ts('You do not have permission to %1 this absence', array('%1' => $action[$this->_action])));
         return;
     }
     $this->_cancelURL = CRM_Utils_System::url('civicrm/absences', "cid={$this->_targetContactID}");
     $this->_cancelURL = str_replace('&', '&', $this->_cancelURL);
     $this->addElement('hidden', 'cancelURL', $this->_cancelURL);
     $session = CRM_Core_Session::singleton();
     $session->replaceUserContext($this->_cancelURL);
     $statusTypes = array_flip(CRM_HRAbsence_BAO_HRAbsenceType::getActivityStatus('name'));
     $buttons = array('cancel' => array('type' => 'cancel', 'name' => ts('Cancel')), $statusTypes['Scheduled'] => array('type' => 'done', 'name' => ts('Save'), 'subName' => 'save', 'isDefault' => TRUE), $statusTypes['Completed'] => array('type' => 'done', 'name' => ts('Approve'), 'subName' => 'approve'), $statusTypes['Cancelled'] => array('type' => 'done', 'name' => ts('Cancel Absence Request'), 'subName' => 'cancelabsence'), $statusTypes['Rejected'] => array('type' => 'done', 'name' => ts('Reject'), 'subName' => 'reject'));
     $contactField = $this->addEntityRef('contacts_id', ts('Employee'), array('api' => array('params' => array('contact_type' => 'Individual'))), TRUE);
     // No edit allowed
     if ($this->_targetContactID) {
         $contactField->freeze();
     }
     $activityTypes = CRM_HRAbsence_BAO_HRAbsenceType::getActivityTypes();
     $this->_absenceType = $activityTypes[$this->_activityTypeID];
     $this->assign('absenceType', $this->_absenceType);
     $primaryJobContractId = $this->getPrimaryJobContractId($this->_targetContactID);
     $resultHRJobDetails = null;
     if ($primaryJobContractId) {
         $resultHRJobDetails = civicrm_api3('HRJobDetails', 'get', array('sequential' => 1, 'jobcontract_id' => $primaryJobContractId));
     }
     if (!empty($resultHRJobDetails['values'])) {
         $this->_empPosition = $resultHRJobDetails['values'][0]['position'];
         $this->assign('emp_position', $this->_empPosition);
     }
     $this->assign('emp_name', CRM_Contact_BAO_Contact::displayName($this->_targetContactID));
     if ($this->_mode == 'view') {
         $resultAbsences = civicrm_api3('Activity', 'get', array('source_record_id' => $this->_activityId, 'option_sort' => "activity_date_time ASC", 'option.limit' => 365));
         $countDays = $approvedDays = 0;
         $absenceDateDuration = array();
         $actStatus = CRM_Core_OptionGroup::values('activity_status');
         foreach ($resultAbsences['values'] as $key => $val) {
             $convertedDate = date("M d, Y (D)", strtotime($val['activity_date_time']));
             if ($val['duration'] == $this->_jobHoursTime['Full_Time'] * 60) {
                 $converteddays = "Full Day";
                 $countDays = $countDays + 1;
                 if ($val['status_id'] == array_search('Completed', $actStatus)) {
                     $absenceStatus = "Approved";
                     $approvedDays = $approvedDays + 1;
                 } elseif ($val['status_id'] == array_search('Rejected', $actStatus) || $val['status_id'] == array_search('Scheduled', $actStatus)) {
                     $absenceStatus = "Unapproved";
                 } elseif ($val['status_id'] == array_search('Cancelled', $actStatus)) {
                     $absenceStatus = "Cancelled";
                 }
             } elseif ($val['duration'] == $this->_jobHoursTime['Part_Time'] * 60) {
                 $converteddays = "Half Day";
                 $countDays = $countDays + 0.5;
                 if ($val['status_id'] == array_search('Completed', $actStatus)) {
                     $absenceStatus = "Approved";
                     $approvedDays = $approvedDays + 0.5;
                 } elseif ($val['status_id'] == array_search('Rejected', $actStatus) || $val['status_id'] == array_search('Scheduled', $actStatus)) {
                     $absenceStatus = "Unapproved";
                 } elseif ($val['status_id'] == array_search('Cancelled', $actStatus)) {
                     $absenceStatus = "Cancelled";
                 }
             } else {
                 $converteddays = $absenceStatus = "Holiday";
             }
             $absenceDateDuration[$convertedDate] = array('duration' => $converteddays, 'status' => $absenceStatus);
         }
         $keys = array_keys($absenceDateDuration);
         $count = count($keys) - 1;
         $fromdateVal = explode('(', $keys[0]);
         $todateVal = explode('(', $keys[$count]);
         $this->assign('fromDate', date("M j, Y", strtotime($fromdateVal[0])));
         $this->assign('toDate', date("M j, Y", strtotime($todateVal[0])));
         $this->assign('absenceDateDuration', $absenceDateDuration);
         $this->_fromDate = $fromdateVal[0];
         $this->_toDate = $todateVal[0];
         $this->assign('totalDays', $countDays);
         $this->assign('approvedDays', $approvedDays);
     }
     if ($this->_action && (CRM_Core_Action::ADD || CRM_Core_Action::UPDATE) && $this->_mode == 'edit') {
         $this->assign('customDataSubType', $this->_activityTypeID);
         if ($this->_customValueCount) {
             CRM_Custom_Form_CustomData::buildQuickForm($this);
         }
         $this->assign('loginUserID', $this->_loginUserID);
         if (empty($this->_managerContactID)) {
             $this->_managerContactID = NULL;
         }
         $this->add('hidden', 'date_values', '', array('id' => 'date_values'));
         $this->add('hidden', 'tot_app_days', '', array('id' => 'tot_app_days'));
     }
     $this->addDate('start_date', ts('Start Date'), FALSE, array('formatType' => 'activityDate'));
     $this->addDate('end_date', ts('End Date / Time'), FALSE, array('formatType' => 'activityDate'));
     if ($this->_mode == 'edit') {
         if ($this->_action && $this->_action == CRM_Core_Action::ADD) {
             $approveButton = array('type' => 'done', 'name' => ts('Save and Approve'), 'subName' => 'saveandapprove', 'isDefault' => TRUE);
             $this->addButtons(array($approveButton));
         } else {
             $this->add('hidden', 'source_record_id', $this->_aid);
             $result = civicrm_api3('Activity', 'get', array('sequential' => 1, 'source_record_id' => $this->_aid, 'option_sort' => "activity_date_time ASC", 'option.limit' => 365));
             $start_date = date_create($result['values'][0]['activity_date_time']);
             $end_date = date_create($result['values'][$result['count'] - 1]['activity_date_time']);
             $this->assign('fromDate', date_format($start_date, 'm/d/Y'));
             $this->assign('toDate', date_format($end_date, 'm/d/Y'));
             global $user;
             $today = time();
             $date1 = new DateTime(date("M j, Y", $today));
             $intervals = $date1->diff($end_date);
             if (CRM_Core_Permission::check('administer CiviCRM') || CRM_Core_Permission::check('edit HRAbsences') || $intervals->days >= 0 && $intervals->invert == 0 && (!empty($this->_managerContactID) && in_array($this->_loginUserID, $this->_managerContactID) || self::isContactAccessible($this->_targetContactID) == CRM_Core_Permission::EDIT)) {
                 if ($this->_actStatusId != $statusTypes['Scheduled']) {
                     unset($buttons[$this->_actStatusId]);
                 }
             } elseif (CRM_Core_Permission::check('manage own HRAbsences') && $this->_targetContactID == $this->_loginUserID) {
                 unset($buttons[$statusTypes['Completed']], $buttons[$statusTypes['Rejected']]);
             }
             $this->addButtons($buttons);
         }
     } elseif ($this->_mode == 'view') {
         global $user;
         $now = time();
         $datetime1 = new DateTime(date("M j, Y", $now));
         $datetime2 = new DateTime($this->_toDate);
         $interval = $datetime1->diff($datetime2);
         $this->addButtons(array($buttons['cancel']));
         if ($interval->days >= 0 && $interval->invert == 0 && ($this->_actStatusId == $statusTypes['Scheduled'] || $this->_actStatusId == $statusTypes['Completed']) && $this->_targetContactID == $this->_loginUserID) {
             $this->addButtons(array($buttons['cancel'], $buttons[$statusTypes['Cancelled']]));
         }
     }
     if ($this->_action == CRM_Core_Action::UPDATE || $this->_action == CRM_Core_Action::ADD) {
         $this->addFormRule(array('CRM_HRAbsence_Form_AbsenceRequest', 'formRule'));
     }
     if (CRM_Core_Permission::check('administer CiviCRM') || CRM_Core_Permission::check('edit HRAbsences') || !empty($this->_managerContactID) && in_array($this->_loginUserID, $this->_managerContactID)) {
         $this->_showhide = 1;
     } else {
         $this->_showhide = 0;
     }
     $this->assign('showhide', $this->_showhide);
 }
Beispiel #6
0
function hrabsence_civicrm_navigationMenu(&$params)
{
    $absenceMenuItems = array();
    $absenceType = CRM_HRAbsence_BAO_HRAbsenceType::getActivityTypes();
    $absenceId = CRM_Core_DAO::getFieldValue('CRM_Core_DAO_Navigation', 'Absences', 'id', 'name');
    $newAbsenceId = CRM_Core_DAO::getFieldValue('CRM_Core_DAO_Navigation', 'new_absence', 'id', 'name');
    $count = 0;
    foreach ($absenceType as $aTypeId => $absenceTypeName) {
        $absenceMenuItems[$count] = array('attributes' => array('label' => "{$absenceTypeName}", 'name' => "{$absenceTypeName}", 'url' => "civicrm/absence/set?atype={$aTypeId}&action=add&cid=0", 'permission' => 'edit HRAbsences,administer CiviCRM,manage own HRAbsences', 'operator' => 'OR', 'separator' => NULL, 'parentID' => $newAbsenceId, 'navID' => 1, 'active' => 1));
        $count++;
    }
    if (!empty($absenceMenuItems)) {
        $params[$absenceId]['child'][$newAbsenceId]['child'] = $absenceMenuItems;
    }
    $calendarReportId = CRM_Core_DAO::getFieldValue('CRM_Report_DAO_ReportInstance', 'civihr/absence/calendar', 'id', 'report_id');
    $calendarId = CRM_Core_DAO::getFieldValue('CRM_Core_DAO_Navigation', 'calendar', 'id', 'name');
    if ($calendarReportId) {
        $params[$absenceId]['child'][$calendarId]['attributes']['url'] = "civicrm/report/instance/{$calendarReportId}?reset=1";
    } else {
        if ($calendarId) {
            $params[$absenceId]['child'][$calendarId]['attributes']['active'] = 0;
        }
    }
}
Beispiel #7
0
    public function upgrade_1400()
    {
        $this->ctx->log->info('Planning update 1400');
        // PEAR Log interface
        /* Create message template for absence leave application */
        $msg_text = '{ts}Dear{/ts} {$displayName},
    {ts}Employee:{/ts} {$empName}
    {ts}Position:{/ts} {$empPosition}
    {ts}Absence Type:{/ts} {$absenceType}
    {ts}Dates:{/ts} {$startDate} - {$endDate}

      {if $cancel}
        {ts}Leave has been cancelled.{/ts}
      {elseif $reject}
        {ts}Leave has been rejected.{/ts}
      {elseif $approval}
        Leave has been approved for {$appDays}.
      {/if}

      {ts}Date{/ts} | {ts}Absence{/ts} | {if $approval and $totDays neq $appDays} {ts}Approve{/ts} {/if}
      {foreach from=$absentDateDurations item=value key=label}
        {if $value.duration != 0}
          {$label|date_format} | {if $value.duration == $jobHoursTime.Full_Time*60} {ts}Full Day{/ts} {elseif $value.duration == $jobHoursTime.Part_Time*60} {ts}Half Day{/ts} {/if} | {if $approval and $totDays neq $appDays} {if $value.approval == 2}{ts}Approved{/ts} {elseif $value.approval == 9} {ts}Unapproved{/ts} {/if} {/if}
        {/if}
      {/foreach}
      {ts}Total{/ts} | {$totDays}
    {if $customGroup}
      {foreach from=$customGroup item=value key=customName}
        {foreach from=$value item=v key=n}
          {$customName} : {$v}
        {/foreach}
      {/foreach}
    {/if}';
        $msg_html = '<p>{ts}Dear{/ts} {$displayName},</p>
    <table>
      <tbody>
        <tr>
          <td>{ts}Employee:{/ts}</td>
          <td>{$empName}</td>
        </tr>
		    <tr>
          <td>{ts}Position:{/ts}</td>
          <td>{$empPosition}</td>
        </tr>
        <tr>
          <td>{ts}Absence Type:{/ts}</td>
          <td>{$absenceType}</td>
        </tr>
        <tr>
          <td>{ts}Dates:{/ts}</td>
          <td>{$startDate|date_format} - {$endDate|date_format}</td>
        </tr>
      </tbody>
    </table>
      {if $cancel}
        <p> {ts}Leave has been cancelled.{/ts} </p>
      {elseif $reject}
        <p> {ts}Leave has been rejected.{/ts} </p>
      {elseif $approval}
        <p> Leave has been approved for {$appDays}.</p>
      {/if}
      <br/>
      <table border="1" border-spacing="0">
        <tbody>
          <tr>
            <th> {ts}Date{/ts} </th>
            <th> {ts}Absence{/ts} </th>
            {if $approval and $totDays neq $appDays}
              <th> {ts}Status{/ts} </th>
            {/if}
          </tr>
          {foreach from=$absentDateDurations item=value key=label}
            {if $value.duration != 0}
              <tr>
                <td>{$label|date_format}</td>
                <td>{if $value.duration == $jobHoursTime.Full_Time*60} {ts}Full Day{/ts} {elseif $value.duration == $jobHoursTime.Part_Time*60} {ts}Half Day{/ts} {else} &nbsp;{/if}</td>
                {if $approval and $totDays neq $appDays}
                  <td>{if $value.approval == 2} {ts}Approved{/ts} {elseif $value.approval == 9} {ts}Unapproved{/ts} {else}{/if}</td>
                {/if}
              </tr>
            {/if}
          {/foreach}
          <tr>
            <td>{ts}Total{/ts}</td>
            <td>{$totDays}</td>
            {if $approval and $totDays neq $appDays}
              <td> &nbsp; </td>
            {/if}
          </tr>
        </tbody>
      </table>
    <br/>
    {if $customGroup}
      <table>
        <tbody>
          {foreach from=$customGroup item=value key=customName}
            {foreach from=$value item=v key=n}
              <tr>
                <td>
                  {$customName} :
                </td>
                <td>
                  {$v}
                </td>
              </tr>
            {/foreach}
          {/foreach}
        </tbody>
      </table>
    {/if}';
        $subject = '{if $approval}Absences Approved{elseif $cancel}Absences Cancelled{elseif $reject}Absences Rejected{else}Absences Application{/if}';
        $msg_params = array('msg_title' => 'Absence Email', 'msg_subject' => $subject, 'msg_text' => $msg_text, 'msg_html' => $msg_html, 'workflow_id' => NULL, 'is_default' => '1', 'is_reserved' => '0');
        civicrm_api3('message_template', 'create', $msg_params);
        //Update absence status
        $absenceType = CRM_HRAbsence_BAO_HRAbsenceType::getActivityTypes();
        $absenceTypeIds = implode(",", array_flip($absenceType));
        $selectQuery = "SELECT id, status_id FROM civicrm_activity WHERE activity_type_id IN ({$absenceTypeIds})";
        $dao = CRM_Core_DAO::executeQuery($selectQuery);
        $absenceStatus = array();
        while ($dao->fetch()) {
            $absenceStatus[$dao->id] = $dao->status_id;
        }
        foreach ($absenceStatus as $k => $v) {
            $updateQuery = "UPDATE civicrm_activity SET status_id = {$v} WHERE source_record_id = {$k}";
            CRM_Core_DAO::executeQuery($updateQuery);
        }
        return TRUE;
    }