예제 #1
0
 /**
  * Function to set variables up before form is built
  *
  * @return void
  * @access public
  */
 function preProcess()
 {
     $this->_isTemplate = (bool) CRM_Utils_Request::retrieve('template', 'Integer', $this);
     $this->_id = CRM_Utils_Request::retrieve('id', 'Integer', $this);
     if ($this->_isTemplate) {
         CRM_Utils_System::setTitle(ts('New Vacancy Template'));
     }
     if ($this->_id) {
         if ($this->_isTemplate = CRM_Core_DAO::getFieldValue('CRM_HRRecruitment_DAO_HRVacancy', $this->_id, 'is_template')) {
             CRM_Utils_System::setTitle(ts('Edit Vacancy Template'));
         } else {
             CRM_Utils_System::setTitle(ts('Edit Vacancy'));
         }
     }
     $this->assign('isTemplate', $this->_isTemplate);
     $session = CRM_Core_Session::singleton();
     if ($this->_id) {
         $permission = CRM_HRRecruitment_BAO_HRVacancyPermission::checkVacancyPermission($this->_id, array("administer Vacancy", "administer CiviCRM"));
     } else {
         $permission = CRM_Core_Permission::checkAnyPerm(array("administer Vacancy", "administer CiviCRM"));
     }
     if (!$permission) {
         $session->pushUserContext(CRM_Utils_System::url('civicrm'));
         CRM_Core_Error::statusBounce(ts('You do not have the necessary permission to perform this action.'));
     }
     CRM_Core_Resources::singleton()->addScriptFile('org.civicrm.hrrecruitment', 'templates/CRM/HRRecruitment/Form/HRVacancy.js');
 }
예제 #2
0
 function preProcess()
 {
     // process url params
     if ($this->_vid = CRM_Utils_Request::retrieve('vid', 'Positive')) {
         $this->assign('vid', $this->_vid);
     } else {
         CRM_Core_Error::fatal(ts('There is no vacancy information provided'));
     }
     $this->_statusId = CRM_Utils_Request::retrieve('status_id', 'Positive');
     $administerper = CRM_HRRecruitment_BAO_HRVacancyPermission::checkVacancyPermission($this->_vid, array("administer Vacancy", "administer CiviCRM", "manage Applicants"));
     $evaluateper = CRM_HRRecruitment_BAO_HRVacancyPermission::checkVacancyPermission($this->_vid, array("administer Vacancy", "administer CiviCRM", "evaluate Applicants"));
     $viewper = CRM_HRRecruitment_BAO_HRVacancyPermission::checkVacancyPermission($this->_vid, array("view Applicants"));
     $this->assign('administerper', $administerper);
     $this->assign('evaluateper', $evaluateper);
     if (!($administerper || $evaluateper || $viewper)) {
         CRM_Core_Session::singleton()->pushUserContext(CRM_Utils_System::url('civicrm'));
         CRM_Core_Error::statusBounce(ts('You do not have the necessary permission to perform this action.'));
         return;
     }
 }
예제 #3
0
 static function getVacanciesByStatus()
 {
     $statuses = CRM_Core_OptionGroup::values('vacancy_status');
     $vacancies = $statusesCount = array();
     //initialize $statusesCount which hold the number of vacancies of status 'Draft' and 'Open'
     foreach (array('Open', 'Draft') as $statusName) {
         $value = array_search($statusName, $statuses);
         $statusesCount[$value] = 0;
         //Retrieve top four recently modified vacancies of either status 'Draft' or 'Open'
         $result = civicrm_api3('HRVacancy', 'get', array('is_template' => 0, 'status_id' => $value, 'sort' => 'created_date DESC', 'option.limit' => 4));
         foreach ($result['values'] as $id => $vacancy) {
             $isDraft = FALSE;
             if (isset($statusesCount[$vacancy['status_id']])) {
                 $statusesCount[$vacancy['status_id']] += 1;
                 if ($vacancy['status_id'] == array_search('Draft', $statuses)) {
                     $isDraft = TRUE;
                 }
                 $position = "<a class='hr-vacancy-title' href='" . CRM_Utils_System::url('civicrm/case/pipeline', "reset=1&vid={$id}") . "'>{$vacancy['position']}</a>";
                 //show the pencil icon to edit vacancy only if the user has appropriate permission
                 if (CRM_HRRecruitment_BAO_HRVacancyPermission::checkVacancyPermission($id, array('administer CiviCRM', 'administer Vacancy'))) {
                     $position .= "<a class='crm-hover-button action-item' title='" . ts('Edit this vacancy') . "' href='" . CRM_Utils_System::url('civicrm/vacancy/add', "reset=1&id={$id}") . "'><span class='icon edit-icon'></span></a>";
                 }
                 $vacancy['start_date'] = !empty($vacancy['start_date']) ? CRM_Utils_Date::customFormat($vacancy['start_date'], '%b %E, %Y') : NULL;
                 $vacancy['end_date'] = !empty($vacancy['end_date']) ? CRM_Utils_Date::customFormat($vacancy['end_date'], '%b %E, %Y') : NULL;
                 $vacancyEntry[$vacancy['status_id']]['vacancies'][$id] = array('date' => CRM_Utils_Date::customFormat($vacancy['start_date'], '%b %E, %Y') . ' - ' . CRM_Utils_Date::customFormat($vacancy['end_date'], '%b %E, %Y'), 'position' => $position, 'location' => CRM_Utils_Array::value('location', $vacancy), 'date' => "{$vacancy['start_date']} - {$vacancy['end_date']}");
                 //assign stages by weight
                 $stages = CRM_HRRecruitment_BAO_HRVacancyStage::caseStage($id);
                 foreach ($stages as $stage) {
                     $vacancyEntry[$vacancy['status_id']]['vacancies'][$id]['stages'][$stage['weight']] = array('stage_id' => $stage['id'], 'title' => $stage['title'], 'count' => $stage['count']);
                 }
                 ksort($vacancyEntry[$vacancy['status_id']]['vacancies'][$id]['stages']);
                 $vacancies[$vacancy['status_id']] = array('title' => $statuses[$vacancy['status_id']]) + $vacancyEntry;
             }
         }
     }
     //append $statusCount result to vacancy's position as title
     foreach ($statusesCount as $status => $count) {
         if ($count) {
             $vacancies[$status]['title'] .= " ({$count})";
         } else {
             $vacancies += array($status => array('title' => "{$statuses[$status]} ({$count})"));
         }
     }
     return $vacancies;
 }
예제 #4
0
 function browse($action = NULL, $searchParams = array())
 {
     $template = CRM_Utils_Request::retrieve('template', 'Positive', $this, FALSE, 0);
     $status = CRM_Utils_Request::retrieve('status', 'Positive', $this, FALSE, 0);
     if (empty($searchParams['status_id']) && $status) {
         $searchParams['status'] = $status;
     }
     if ($template) {
         $searchParams['is_template'] = 1;
     } else {
         $searchParams['is_template'] = 0;
     }
     $whereClause = $this->whereClause($searchParams);
     $this->_force = $this->_searchResult = NULL;
     $this->search();
     $params = array();
     $this->_force = CRM_Utils_Request::retrieve('force', 'Boolean', $this, FALSE);
     $this->search();
     $query = "SELECT *\n    FROM civicrm_hrvacancy\n    {$whereClause}";
     $dao = CRM_Core_DAO::executeQuery($query);
     $rows = array();
     $vacancyStatuses = CRM_Core_OptionGroup::values('vacancy_status', FALSE);
     $location = CRM_Core_OptionGroup::values('hrjc_location', FALSE);
     while ($dao->fetch()) {
         $rows[$dao->id]['position'] = $dao->position;
         $rows[$dao->id]['location'] = $dao->location;
         $rows[$dao->id]['salary'] = $dao->salary;
         $rows[$dao->id]['start_date'] = $dao->start_date;
         $rows[$dao->id]['end_date'] = $dao->end_date;
         $hasPermission = CRM_HRRecruitment_BAO_HRVacancyPermission::checkVacancyPermission($dao->id, array('administer CiviCRM', 'administer Vacancy', 'Edit Vacancy'));
         if (empty($template)) {
             $rows[$dao->id]['status'] = $vacancyStatuses[$dao->status_id];
         }
         if ($hasPermission) {
             $actionLink = self::links();
             if ($template) {
                 $actionLink[CRM_Core_Action::UPDATE]['title'] = ts('Edit Vacancy Template');
                 $actionLink[CRM_Core_Action::COPY]['title'] = ts('Copy Vacancy Template');
                 $actionLink[CRM_Core_Action::DELETE]['title'] = ts('Delete Vacancy Template');
                 $actionLink[CRM_Core_Action::DELETE]['qs'] .= '&template=1';
             }
             $rows[$dao->id]['action'] = CRM_Core_Action::formLink($actionLink, array(), array('id' => $dao->id));
         }
     }
     $this->_isTemplate = (bool) CRM_Utils_Request::retrieve('template', 'Integer', $this);
     if (isset($this->_isTemplate)) {
         $this->assign('isTemplate', $this->_isTemplate);
     }
     $this->assign('rows', $rows);
 }
예제 #5
0
/**
 * Implementation of hook_civicrm_buildForm
 *
 * @params string $formName - the name of the form
 *         object $form - reference to the form object
 * @return void
 */
function hrrecruitment_civicrm_buildForm($formName, &$form)
{
    $caseTypes = CRM_Case_PseudoConstant::caseType('name');
    $appValue = array_search('Application', $caseTypes);
    //To hide application case type from add assignment form
    if ($formName == 'CRM_Case_Form_Case') {
        if ($form->_action & CRM_Core_Action::DELETE || $form->_action & CRM_Core_Action::RENEW) {
            return;
        }
        $form->_caseType = CRM_Case_PseudoConstant::caseType();
        unset($form->_caseType[$appValue]);
        $form->add('select', 'case_type_id', ts('Assignment Type'), $form->_caseType, TRUE);
    }
    //report change
    if ($formName == 'CRM_Report_Form_Case_Summary' || $formName == 'CRM_Report_Form_Case_Detail') {
        $statuses = CRM_Case_PseudoConstant::caseStatus('label', FALSE, 'AND filter = 1', TRUE);
        $form->case_statuses = $form->case_statuses + $statuses;
    }
    if ($formName == 'CRM_Activity_Form_Search') {
        $actId = CRM_Utils_Request::retrieve('type', 'Positive', $form);
        $form->_formValues['activity_type_id'][$actId] = $defaults['activity_type_id'][$actId] = 1;
        $form->setDefaults($defaults);
        $form->set('formValues', $form->_formValues);
        $form->preProcess();
    }
    if ($formName == 'CRM_Case_Form_CaseView') {
        $params = array('id' => $form->_caseID);
        CRM_Core_DAO::commonRetrieve('CRM_Case_BAO_Case', $params, $values, array('status_id'));
        $statuses = CRM_Case_PseudoConstant::caseStatus('label', FALSE, 'AND (filter IN (0,1) OR filter IS NULL)', TRUE);
        $form->_caseDetails['case_status'] = $statuses[$values['case_status_id']];
        $form->assign('caseDetails', $form->_caseDetails);
    }
    if ($formName == 'CRM_Case_Form_Activity' || $formName == 'CRM_Contact_Form_Task_Email') {
        $caseId = CRM_Utils_Request::retrieve('caseid', 'String', $form);
        $vacancyID = CRM_HRRecruitment_BAO_HRVacancy::getVacancyIDByCase($caseId);
        $caseId = explode(',', $caseId);
        $aType = CRM_Utils_Request::retrieve('atype', 'Positive') ? CRM_Utils_Request::retrieve('atype', 'Positive') : CRM_Utils_Array::value('activity_type_id', $form->_defaultValues);
        $evalID = CRM_Core_PseudoConstant::getKey('CRM_Activity_BAO_Activity', 'activity_type_id', 'Evaluation');
        /* Check for proper permissions */
        if ($vacancyID && $aType) {
            $administerper = CRM_HRRecruitment_BAO_HRVacancyPermission::checkVacancyPermission($vacancyID, array("administer Vacancy", "administer CiviCRM", "manage Applicants"));
            $evaluateper = CRM_HRRecruitment_BAO_HRVacancyPermission::checkVacancyPermission($vacancyID, array("administer Vacancy", "administer CiviCRM", "evaluate Applicants"));
            if ($aType != $evalID && !$administerper || $aType == $evalID && !$evaluateper) {
                CRM_Core_Session::singleton()->pushUserContext(CRM_Utils_System::url('civicrm'));
                CRM_Core_Error::statusBounce(ts('You do not have the necessary permission to perform this action.'));
                return;
            }
        }
        /* TO set vacancy stages as case status for 'Change Case Status' activity */
        if ($aType == CRM_Core_PseudoConstant::getKey('CRM_Activity_BAO_Activity', 'activity_type_id', 'Change Case Status')) {
            $allcase = TRUE;
            foreach ($caseId as $key => $val) {
                $caseType = CRM_Case_BAO_Case::getCaseType($val, 'id');
                if ($caseType != $appValue) {
                    $allcase = FALSE;
                }
            }
            if ($allcase) {
                $form->removeElement('case_status_id');
                $form->_caseStatus = CRM_Case_PseudoConstant::caseStatus('label', TRUE, 'AND filter = 1', TRUE);
                $form->add('select', 'case_status_id', ts('Case Status'), $form->_caseStatus, TRUE);
                if ($caseStatusId = CRM_Utils_Request::retrieve('case_status_id', 'Positive', $form)) {
                    $form->freeze('case_status_id');
                    $form->setDefaults(array('case_status_id' => $caseStatusId));
                }
            }
        }
        /* build the evaluation profile on the evaluation activity */
        //check for evaluation activity type
        if ($aType == CRM_Core_PseudoConstant::getKey('CRM_Activity_BAO_Activity', 'activity_type_id', 'Evaluation')) {
            //rename label and status name for Activity Status
            $activityStatus = $form->getElement('status_id');
            $activityStatus->_options = array();
            $scheduleStatus = CRM_Core_OptionGroup::getValue('activity_status', 'Scheduled');
            $completeStatus = CRM_Core_OptionGroup::getValue('activity_status', 'Completed');
            $activityStatus->addOption('Scheduled', $scheduleStatus);
            $activityStatus->addOption('Complete Evaluation', $completeStatus);
            $activityStatus->_label = 'Evaluation Status';
            //retriev Case ID, Activity ID, Contact ID
            $caseID = CRM_Utils_Request::retrieve('caseid', 'Positive', $form);
            $activityID = CRM_Utils_Request::retrieve('id', 'Positive', $form);
            $contactID = CRM_Utils_Request::retrieve('cid', 'Positive', $form);
            //get Evaluation profile ID
            $dao = new CRM_Core_DAO_UFJoin();
            $dao->module = 'Vacancy';
            $dao->entity_id = CRM_HRRecruitment_BAO_HRVacancy::getVacancyIDByCase($caseID);
            $dao->module_data = 'evaluation_profile';
            $dao->find(TRUE);
            $profileID = $dao->uf_group_id;
            $profileFields = CRM_Core_BAO_UFGroup::getFields($profileID);
            $form->assign('fields', $profileFields);
            CRM_Core_BAO_UFGroup::setProfileDefaults($contactID, $profileFields, $def);
            $form->setDefaults($def);
            //auto populate assignee contact name with vacancy related permission
            if ($form->_action & CRM_Core_Action::ADD) {
                $evaluateContactID = CRM_HRRecruitment_BAO_HRVacancyPermission::getPermissionContact($vacancyID, 'evaluate Applicants');
                $defaults['assignee_contact_id'] = $evaluateContactID;
                $form->setDefaults($defaults);
            }
            //build evaluaiton profile fields
            foreach ($profileFields as $profileFieldKey => $profileFieldVal) {
                CRM_Core_BAO_UFGroup::buildProfile($form, $profileFieldVal, CRM_Profile_Form::MODE_EDIT, $contactID, TRUE, FALSE, NULL);
                $form->_fields[$profileFieldKey] = $profileFields[$profileFieldKey];
                $params[$profileFieldKey] = $profileFieldVal;
            }
            if (!empty($activityID)) {
                $params['entityID'] = $activityID;
                $form->addElement('hidden', 'evaluationProfile', $profileID);
                $defVal = CRM_Core_BAO_CustomValueTable::getValues($params);
                $form->setDefaults($defVal);
            }
            CRM_Core_Region::instance('case-activity-form')->add(array('template' => 'CRM/UF/Form/Block.tpl'));
        }
        //HR-373 -- set Completed status for Comment activity by default
        if ($aType == CRM_Core_PseudoConstant::getKey('CRM_Activity_BAO_Activity', 'activity_type_id', 'Comment')) {
            $defaults['status_id'] = CRM_Core_OptionGroup::getValue('activity_status', 'Completed');
            $form->setDefaults($defaults);
        }
    }
    /* HR-401 Changes to Edit Evaluation and Application popups */
    if ($formName == 'CRM_Custom_Form_Field' || $formName == 'CRM_HRRecruitment_Form_HRVacancy') {
        $uncolapseAppl = $uncolapseEval = array();
        $applicationCG = civicrm_api3('CustomGroup', 'get', array('extends' => "Case", 'extends_entity_column_value' => $appValue, 'name' => 'Application'));
        foreach ($applicationCG['values'] as $k => $v) {
            $uncolapseAppl[] = $v['id'];
        }
        $evalCG = civicrm_api3('CustomGroup', 'get', array('extends' => "Activity", 'extends_entity_column_value' => CRM_Core_PseudoConstant::getKey('CRM_Activity_BAO_Activity', 'activity_type_id', 'Evaluation')));
        foreach ($evalCG['values'] as $k => $v) {
            $uncolapseEval[$k] = $v['id'];
        }
        CRM_Core_Resources::singleton()->addSetting(array('profileSelectorSet' => array('application' => $uncolapseAppl, 'evaluation' => $uncolapseEval)));
        $gID = CRM_Utils_Array::value('gid', $_GET);
        /* HR-401 set default for 'Is field searchable' */
        if (!empty($gID) && (in_array($gID, $uncolapseEval) || in_array($gID, $uncolapseAppl)) && $formName == 'CRM_Custom_Form_Field') {
            $default['is_searchable'] = 1;
            $form->setDefaults($default);
        }
    }
}