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');
 }
 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();
 }
Exemple #3
0
 /**
  * Get duration of absences, in minutes.
  *
  * @param array $absenceTypeNames
  * @param       $periodId
  *
  * @return int
  */
 private static function getAbsenceDuration($absenceTypeNames = array(), $periodId)
 {
     $absenceTypeIds = static::getActivityIdsForAbsenceTypeNames($absenceTypeNames, $periodId);
     $activityStatuses = CRM_HRAbsence_BAO_HRAbsenceType::getActivityStatus('name');
     $sql = "\n      SELECT SUM(a1.duration) duration\n      FROM civicrm_activity a\n\n      INNER JOIN civicrm_activity_contact ac\n      ON a.id = ac.activity_id\n\n      INNER JOIN civicrm_contact c\n      ON (ac.contact_id = c.id AND c.contact_type = 'Individual')\n\n      INNER JOIN civicrm_hrjobcontract jc\n      ON c.id = jc.contact_id AND jc.is_primary = 1\n\n      INNER JOIN civicrm_hrjobcontract_revision jcr\n      ON (jc.id = jcr.jobcontract_id AND jcr.effective_date <= NOW())\n\n      INNER JOIN civicrm_hrjobcontract_details jcd\n      ON (jcr.id = jcd.jobcontract_revision_id AND (jcd.period_end_date >= NOW() OR jcd.period_end_date IS NULL))\n\n      INNER JOIN civicrm_activity a1\n      ON (a.id = a1.source_record_id AND a1.activity_type_id = %1 AND a1.status_id = %2)\n\n      WHERE\n        a.id IN (" . implode(',', $absenceTypeIds) . ")\n        AND a.status_id = %2\n    ";
     $params = array(1 => array(static::getAbsenceActivityTypeId(), 'Integer'), 2 => array(CRM_Utils_Array::key('Completed', $activityStatuses), 'Integer'));
     $duration = 0;
     $dao = CRM_Core_DAO::executeQuery($sql, $params);
     if ($dao->fetch()) {
         $duration = $dao->duration;
     }
     return $duration;
 }
Exemple #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');
}
 /**
  * {@inheritDoc}
  */
 public function toApiOutput($apiRequest, $result)
 {
     if (isset($apiRequest['params']['options']) && CRM_Utils_Array::value('absence-range', $apiRequest['params']['options'], FALSE)) {
         if (!CRM_Utils_Array::value('is_error', $result, FALSE) && !empty($result['values'])) {
             $absenceTypeId = array_search('Absence', CRM_Core_PseudoConstant::activityType());
             if (!$absenceTypeId) {
                 throw new API_Exception("Failed to determine activity type ID of absences");
             }
             $ids = array_keys($result['values']);
             $ids = array_filter($ids, 'is_numeric');
             // paranoia
             foreach ($ids as $id) {
                 $result['values'][$id]['absence_range'] = array('low' => NULL, 'high' => NULL, 'approved_duration' => 0, 'duration' => 0, 'count' => 0, 'items' => array());
             }
             $sql = "\n          SELECT id, source_record_id, activity_date_time, status_id, duration as duration\n          FROM civicrm_activity\n          WHERE activity_type_id = %1 AND source_record_id in (" . implode(',', $ids) . ")\n          ";
             $params = array(1 => array($absenceTypeId, 'Integer'));
             $dao = CRM_Core_DAO::executeQuery($sql, $params);
             $activityStatus = CRM_HRAbsence_BAO_HRAbsenceType::getActivityStatus('name');
             while ($dao->fetch()) {
                 $ar =& $result['values'][$dao->source_record_id]['absence_range'];
                 if ($ar['low'] === NULL || $ar['low'] > $dao->activity_date_time) {
                     $ar['low'] = $dao->activity_date_time;
                 }
                 if ($ar['high'] === NULL || $ar['high'] < $dao->activity_date_time) {
                     $ar['high'] = $dao->activity_date_time;
                 }
                 if ($dao->status_id == CRM_Utils_Array::key('Completed', $activityStatus)) {
                     $ar['approved_duration'] += $dao->duration;
                 }
                 $ar['duration'] += $dao->duration;
                 $ar['count']++;
                 $ar['items'][] = array('id' => $dao->id, 'activity_date_time' => $dao->activity_date_time, 'duration' => $dao->duration);
             }
         }
     }
     return $result;
 }
Exemple #6
0
 public function buildAdvancedSearchPaneForm(&$form, $type)
 {
     //if (!CRM_Core_Permission::check('access HRJobs')) { echo 'not accessible'; return; }
     if ($type == 'hrjobcontract') {
         $form->add('hidden', 'hidden_hrjobcontract', 1);
         $form->addElement('text', 'hrjobcontract_details_position', ts('Position'), CRM_Core_DAO::getAttribute('CRM_Hrjobcontract_DAO_HRJobDetails', 'position'));
         $form->addElement('text', 'hrjobcontract_details_title', ts('Title'), CRM_Core_DAO::getAttribute('CRM_Hrjobcontract_DAO_HRJobDetails', 'title'));
         $form->addElement('text', 'hrjobcontract_details_funding_notes', ts('Funding Notes'), CRM_Core_DAO::getAttribute('CRM_Hrjobcontract_DAO_HRJobDetails', 'funding_notes'));
         $form->addElement('text', 'hrjobcontract_details_notice_amount', ts('Notice Period from Employer (Amount)'), CRM_Core_DAO::getAttribute('CRM_Hrjobcontract_DAO_HRJobDetails', 'notice_amount'));
         $form->add('select', 'hrjobcontract_details_notice_unit', ts('Notice Period from Employer (Amount)'), CRM_Hrjobcontract_SelectValues::commonUnit(), FALSE, array('id' => 'hrjobcontract_details_notice_unit', 'multiple' => true));
         $form->addElement('text', 'hrjobcontract_details_notice_amount_employee', ts('Notice Period from Employee (Amount)'), CRM_Core_DAO::getAttribute('CRM_Hrjobcontract_DAO_HRJobDetails', 'notice_amount_employee'));
         $form->add('select', 'hrjobcontract_details_notice_unit_employee', ts('Notice Period from Employer (Amount)'), CRM_Hrjobcontract_SelectValues::commonUnit(), FALSE, array('id' => 'hrjobcontract_details_notice_unit_employee', 'multiple' => true));
         $hrjcLocation = CRM_Core_PseudoConstant::get('CRM_Hrjobcontract_DAO_HRJobDetails', 'hrjobcontract_details_location');
         $form->add('select', 'hrjobcontract_details_location', ts('Normal Place of Work'), $hrjcLocation, FALSE, array('id' => 'hrjobcontract_details_location', 'multiple' => true));
         $form->add('select', 'hrjobcontract_role_role_level_type', ts('Level'), CRM_Core_PseudoConstant::get('CRM_Hrjobcontract_DAO_HRJobRole', 'hrjobcontract_role_role_level_type'), FALSE, array('id' => 'hrjobcontract_role_role_level_type', 'multiple' => true));
         $form->add('select', 'hrjobcontract_details_contract_type', ts('Contract Type'), CRM_Core_PseudoConstant::get('CRM_Hrjobcontract_DAO_HRJobDetails', 'hrjobcontract_details_contract_type'), FALSE, array('id' => 'hrjobcontract_details_contract_type', 'multiple' => true));
         CRM_Core_Form_Date::buildDateRange($form, 'hrjobcontract_details_period_start_date', 1, '_low', '_high', ts('From:'), FALSE, FALSE);
         CRM_Core_Form_Date::buildDateRange($form, 'hrjobcontract_details_period_end_date', 1, '_low', '_high', ts('From:'), FALSE, FALSE);
         //$form->addYesNo( 'hrjobcontract_details_is_primary', ts('Is Primary?'));
         $form->add('select', 'hrjobcontract_details_is_primary', ts('Is Primary'), array('' => '- select -', 0 => 'No', 1 => 'Yes'), FALSE, array('id' => 'hrjobcontract_details_is_primary', 'multiple' => false));
     }
     if ($type == 'hrjobcontract_health') {
         $form->add('hidden', 'hidden_hrjobcontract_health', 1);
         //$form->add('checkbox', 'hrjobcontract_health_is_healthcare', ts('Is healthcare provided?'));
         $form->addElement('text', 'hrjobcontract_health_health_provider', ts('Healthcare Provider (Complete OR Partial Name)'), CRM_Core_DAO::getAttribute('CRM_Hrjobcontract_DAO_HRJobHealth', 'provider'));
         $form->add('select', 'hrjobcontract_health_health_plan_type', ts('Healthcare Plan Type'), CRM_Hrjobcontract_SelectValues::planType(), FALSE, array('id' => 'hrjobcontract_health_health_plan_type', 'multiple' => true));
         $form->addElement('text', 'hrjobcontract_health_description', ts('Description Health Insurance'), CRM_Core_DAO::getAttribute('CRM_Hrjobcontract_DAO_HRJobHealth', 'description'));
         $form->addElement('text', 'hrjobcontract_health_dependents', ts('Healthcare Dependents'), CRM_Core_DAO::getAttribute('CRM_Hrjobcontract_DAO_HRJobHealth', 'dependents'));
         $form->addElement('text', 'hrjobcontract_health_health_provider_life_insurance', ts('Life insurance Provider (Complete OR Partial Name)'), CRM_Core_DAO::getAttribute('CRM_Hrjobcontract_DAO_HRJobHealth', 'provider_life_insurance'));
         $form->add('select', 'hrjobcontract_health_life_insurance_plan_type', ts('Life insurance Plan Type'), CRM_Hrjobcontract_SelectValues::planTypeLifeInsurance(), FALSE, array('id' => 'hrjobcontract_health_life_insurance_plan_type', 'multiple' => true));
         $form->addElement('text', 'hrjobcontract_health_description_life_insurance', ts('Description Life Insurance'), CRM_Core_DAO::getAttribute('CRM_Hrjobcontract_DAO_HRJobHealth', 'description_life_insurance'));
         $form->addElement('text', 'hrjobcontract_health_dependents_life_insurance', ts('Life Insurance Dependents'), CRM_Core_DAO::getAttribute('CRM_Hrjobcontract_DAO_HRJobHealth', 'dependents_life_insurance'));
     }
     if ($type == 'hrjobcontract_hour') {
         $form->add('hidden', 'hidden_hrjobcontract_hour', 1);
         $hoursLocation = new CRM_Hrjobcontract_BAO_HoursLocation();
         $hoursLocation->find();
         $hoursLocationOptions = array();
         while ($hoursLocation->fetch()) {
             $hoursLocationOptions[$hoursLocation->id] = $hoursLocation->location;
         }
         $form->add('select', 'hrjobcontract_hour_location_standard_hours', ts('Location/Standard hours'), $hoursLocationOptions, FALSE, array('id' => 'hrjobcontract_hour_location_standard_hours', 'multiple' => true));
         $hoursType = CRM_Core_PseudoConstant::get('CRM_Hrjobcontract_DAO_HRJobHour', 'hrjobcontract_hour_hours_type');
         $form->add('select', 'hrjobcontract_hour_hours_type', ts('Hours Types'), $hoursType, FALSE, array('id' => 'hrjobcontract_hour_hours_type', 'multiple' => true));
         $form->add('text', 'hrjobcontract_hour_hours_amount', ts('Actual Hours (Amount)'), array('size' => 8, 'maxlength' => 8));
         $form->add('select', 'hrjobcontract_hour_hours_unit', ts('Actual Hours (Unit)'), CRM_Hrjobcontract_SelectValues::commonUnit(), FALSE, array('id' => 'hrjobcontract_hour_hours_unit', 'multiple' => true));
         $form->add('text', 'hrjobcontract_hour_hours_fte', ts('Full-Time Equivalence'), array('size' => 8, 'maxlength' => 8));
         $form->add('text', 'hrjobcontract_hour_hours_fte_num', ts('Full-Time Numerator Equivalence'), array('size' => 8, 'maxlength' => 8));
         $form->add('text', 'hrjobcontract_hour_fte_denom', ts('Full-Time Denominator Equivalence'), array('size' => 8, 'maxlength' => 8));
         $form->add('text', 'hrjobcontract_hour_hours_amount_low', ts('From'), array('size' => 8, 'maxlength' => 8));
         $form->addRule('hrjobcontract_hour_hours_amount_low', ts('Please enter a valid money value (e.g. %1).', array(1 => CRM_Utils_Money::format('9.99', ' '))), 'money');
         $form->add('text', 'hrjobcontract_hour_hours_amount_high', ts('To'), array('size' => 8, 'maxlength' => 8));
         $form->addRule('hrjobcontract_hour_hours_amount_high', ts('Please enter a valid money value (e.g. %1).', array(1 => CRM_Utils_Money::format('99.99', ' '))), 'money');
         $form->add('text', 'hrjobcontract_hour_hours_fte_low', ts('From'), array('size' => 8, 'maxlength' => 8));
         $form->addRule('hrjobcontract_hour_hours_fte_low', ts('Please enter a valid decimal value (e.g. %1).', array(1 => CRM_Utils_Money::format('9.99', ' '))), 'money');
         $form->add('text', 'hrjobcontract_hour_hours_fte_high', ts('To'), array('size' => 8, 'maxlength' => 8));
         $form->addRule('hrjobcontract_hour_hours_fte_high', ts('Please enter a valid decimal value (e.g. %1).', array(1 => CRM_Utils_Money::format('99.99', ' '))), 'money');
     }
     if ($type == 'hrjobcontract_leave') {
         $form->add('hidden', 'hidden_hrjobcontract_leave', 1);
         $leaveTypeOptions = array();
         $absenceType = new CRM_HRAbsence_BAO_HRAbsenceType();
         $absenceType->find();
         while ($absenceType->fetch()) {
             $leaveTypeOptions[$absenceType->id] = $absenceType->title;
         }
         $form->add('select', 'hrjobcontract_leave_leave_type', ts('Leave Type'), $leaveTypeOptions, FALSE, array('id' => 'hrjobcontract_leave_leave_type', 'multiple' => true));
     }
     if ($type == 'hrjobcontract_pay') {
         $form->add('hidden', 'hidden_hrjobcontract_pay', 1);
         $payScaleOptions = array();
         $payScale = new CRM_Hrjobcontract_BAO_PayScale();
         $payScale->find();
         while ($payScale->fetch()) {
             $payScaleOptions[$payScale->id] = $payScale->pay_scale;
             if (!empty($payScale->pay_grade)) {
                 $payScaleOptions[$payScale->id] .= ' - ' . $payScale->pay_grade . ' - ' . $payScale->currency . ' ' . $payScale->amount . ' per ' . $payScale->periodicity;
             }
         }
         $form->add('select', 'hrjobcontract_pay_pay_scale', ts('Pay Scale'), $payScaleOptions, FALSE, array('id' => 'hrjobcontract_pay_pay_scale', 'multiple' => true));
         $form->add('select', 'hrjobcontract_pay_is_paid', ts('Paid / Unpaid'), CRM_Core_PseudoConstant::get('CRM_Hrjobcontract_DAO_HRJobPay', 'is_paid'), FALSE, array('id' => 'hrjobcontract_pay_is_paid', 'multiple' => 'multiple', 'title' => ts('- select -')));
         $form->add('text', 'hrjobcontract_pay_pay_amount', ts('Pay Amount'), array('size' => 8, 'maxlength' => 8));
         $form->addRule('hrjobcontract_pay_pay_amount', ts('Please enter a valid money value (e.g. %1).', array(1 => CRM_Utils_Money::format('9.99', ' '))), 'money');
         $form->add('text', 'hrjobcontract_pay_pay_amount_low', ts('From'), array('size' => 8, 'maxlength' => 8));
         $form->addRule('hrjobcontract_pay_pay_amount_low', ts('Please enter a valid money value (e.g. %1).', array(1 => CRM_Utils_Money::format('9.99', ' '))), 'money');
         $form->add('text', 'hrjobcontract_pay_pay_amount_high', ts('To'), array('size' => 8, 'maxlength' => 8));
         $form->addRule('hrjobcontract_pay_pay_amount_high', ts('Please enter a valid money value (e.g. %1).', array(1 => CRM_Utils_Money::format('99.99', ' '))), 'money');
         $form->add('select', 'hrjobcontract_pay_pay_unit', ts('Pay Unit'), CRM_Hrjobcontract_SelectValues::payUnit(), FALSE, array('id' => 'hrjobcontract_pay_pay_unit', 'multiple' => true));
         $form->add('select', 'hrjobcontract_pay_pay_currency', ts('Pay Currency'), array_keys(CRM_Hrjobcontract_Page_JobContractTab::getCurrencyFormats()), FALSE, array('id' => 'hrjobcontract_pay_pay_currency', 'multiple' => true));
         $form->add('text', 'hrjobcontract_pay_pay_annualized_est', ts('Estimated Annual Pay'), array('size' => 8, 'maxlength' => 8));
         $form->addRule('hrjobcontract_pay_pay_annualized_est', ts('Please enter a valid money value (e.g. %1).', array(1 => CRM_Utils_Money::format('9.99', ' '))), 'money');
         $form->add('text', 'hrjobcontract_pay_pay_annualized_est_low', ts('From'), array('size' => 8, 'maxlength' => 8));
         $form->addRule('hrjobcontract_pay_pay_annualized_est_low', ts('Please enter a valid money value (e.g. %1).', array(1 => CRM_Utils_Money::format('9.99', ' '))), 'money');
         $form->add('text', 'hrjobcontract_pay_pay_annualized_est_high', ts('To'), array('size' => 8, 'maxlength' => 8));
         $form->addRule('hrjobcontract_pay_pay_annualized_est_high', ts('Please enter a valid money value (e.g. %1).', array(1 => CRM_Utils_Money::format('99.99', ' '))), 'money');
         $form->add('select', 'hrjobcontract_pay_pay_is_auto_est', ts('Estimated Auto Pay'), array('' => '- select -', 0 => 'No', 1 => 'Yes'), FALSE, array('id' => 'hrjobcontract_pay_pay_is_auto_est', 'multiple' => false));
         // TODO: Annual Benefits + Annual Deductions
         $payCycleOptions = array();
         $payCycles = array();
         CRM_Core_OptionGroup::getAssoc('hrjc_pay_cycle', $payCycles, true);
         foreach ($payCycles as $payCycle) {
             $payCycleOptions[$payCycle['value']] = $payCycle['label'];
         }
         $form->add('select', 'hrjobcontract_pay_pay_cycle', ts('Pay Cycle'), $payCycleOptions, FALSE, array('id' => 'hrjobcontract_pay_pay_cycle', 'multiple' => true));
         $form->add('text', 'hrjobcontract_pay_pay_per_cycle_gross', ts('Pay Per Cycle Gross'), array('size' => 8, 'maxlength' => 8));
         $form->addRule('hrjobcontract_pay_pay_per_cycle_gross', ts('Please enter a valid money value (e.g. %1).', array(1 => CRM_Utils_Money::format('9.99', ' '))), 'money');
         $form->add('text', 'hrjobcontract_pay_pay_per_cycle_gross_low', ts('From'), array('size' => 8, 'maxlength' => 8));
         $form->addRule('hrjobcontract_pay_pay_per_cycle_gross_low', ts('Please enter a valid money value (e.g. %1).', array(1 => CRM_Utils_Money::format('9.99', ' '))), 'money');
         $form->add('text', 'hrjobcontract_pay_pay_per_cycle_gross_high', ts('To'), array('size' => 8, 'maxlength' => 8));
         $form->addRule('hrjobcontract_pay_pay_per_cycle_gross_high', ts('Please enter a valid money value (e.g. %1).', array(1 => CRM_Utils_Money::format('99.99', ' '))), 'money');
         $form->add('text', 'hrjobcontract_pay_pay_per_cycle_net', ts('Pay Per Cycle Net'), array('size' => 8, 'maxlength' => 8));
         $form->addRule('hrjobcontract_pay_pay_per_cycle_net', ts('Please enter a valid money value (e.g. %1).', array(1 => CRM_Utils_Money::format('9.99', ' '))), 'money');
         $form->add('text', 'hrjobcontract_pay_pay_per_cycle_net_low', ts('From'), array('size' => 8, 'maxlength' => 8));
         $form->addRule('hrjobcontract_pay_pay_per_cycle_net_low', ts('Please enter a valid money value (e.g. %1).', array(1 => CRM_Utils_Money::format('9.99', ' '))), 'money');
         $form->add('text', 'hrjobcontract_pay_pay_per_cycle_net_high', ts('To'), array('size' => 8, 'maxlength' => 8));
         $form->addRule('hrjobcontract_pay_pay_per_cycle_net_high', ts('Please enter a valid money value (e.g. %1).', array(1 => CRM_Utils_Money::format('99.99', ' '))), 'money');
     }
     if ($type == 'hrjobcontract_pension') {
         $form->add('hidden', 'hidden_hrjobcontract_pension', 1);
         $form->add('select', 'hrjobcontract_pension_is_enrolled', ts('Is Enrolled'), array(0 => 'No', 1 => 'Yes', 2 => 'Opted out'), FALSE, array('id' => 'hrjobcontract_pension_is_enrolled', 'multiple' => true));
         $form->add('text', 'hrjobcontract_pension_ee_contrib_pct_low', ts('From'), array('size' => 8, 'maxlength' => 8));
         $form->addRule('hrjobcontract_pension_ee_contrib_pct_low', ts('Please enter a valid money value (e.g. %1).', array(1 => CRM_Utils_Money::format('9.99', ' '))), 'money');
         $form->add('text', 'hrjobcontract_pension_ee_contrib_pct_high', ts('To'), array('size' => 8, 'maxlength' => 8));
         $form->addRule('hrjobcontract_pension_ee_contrib_pct_high', ts('Please enter a valid money value (e.g. %1).', array(1 => CRM_Utils_Money::format('99.99', ' '))), 'money');
         $form->add('text', 'hrjobcontract_pension_er_contrib_pct_low', ts('From'), array('size' => 8, 'maxlength' => 8));
         $form->addRule('hrjobcontract_pension_er_contrib_pct_low', ts('Please enter a valid money value (e.g. %1).', array(1 => CRM_Utils_Money::format('9.99', ' '))), 'money');
         $form->add('text', 'hrjobcontract_pension_er_contrib_pct_high', ts('To'), array('size' => 8, 'maxlength' => 8));
         $form->addRule('hrjobcontract_pension_er_contrib_pct_high', ts('Please enter a valid money value (e.g. %1).', array(1 => CRM_Utils_Money::format('99.99', ' '))), 'money');
         $pensionTypes = array();
         $pensionTypeOptions = array();
         CRM_Core_OptionGroup::getAssoc('hrjc_pension_type', $pensionTypes, true);
         foreach ($pensionTypes as $pensionType) {
             $pensionTypeOptions[$pensionType['value']] = $pensionType['label'];
         }
         $form->add('select', 'hrjobcontract_pension_pension_type', ts('Pension Provider'), $pensionTypeOptions, FALSE, array('id' => 'hrjobcontract_pension_pension_type', 'multiple' => true));
         $form->add('text', 'hrjobcontract_pension_ee_contrib_abs_low', ts('From'), array('size' => 8, 'maxlength' => 8));
         $form->addRule('hrjobcontract_pension_ee_contrib_abs_low', ts('Please enter a valid money value (e.g. %1).', array(1 => CRM_Utils_Money::format('9.99', ' '))), 'money');
         $form->add('text', 'hrjobcontract_pension_ee_contrib_abs_high', ts('To'), array('size' => 8, 'maxlength' => 8));
         $form->addRule('hrjobcontract_pension_ee_contrib_abs_high', ts('Please enter a valid money value (e.g. %1).', array(1 => CRM_Utils_Money::format('99.99', ' '))), 'money');
         $form->addElement('text', 'hrjobcontract_pension_ee_evidence_note', ts('Pension Evidence Note'), CRM_Core_DAO::getAttribute('CRM_Hrjobcontract_DAO_HRJobPension', 'ee_evidence_note'));
     }
 }
Exemple #7
0
 /**
  * This function is called after the user submits the form.
  *
  * @access public
  *
  * @return none
  */
 public function postProcess()
 {
     global $user;
     $isAdmin = in_array('civihr_admin', $user->roles) ? true : false;
     $session = CRM_Core_Session::singleton();
     $submitValues = $this->_submitValues;
     if (!empty($submitValues['contacts_id'])) {
         $this->_targetContactID = $submitValues['contacts_id'];
     }
     $absentDateDurations = array();
     $activityStatus = CRM_HRAbsence_BAO_HRAbsenceType::getActivityStatus('name');
     $activityStatusId['status_id'] = CRM_Utils_Array::key('Completed', $activityStatus);
     if (!empty($submitValues['date_values'])) {
         foreach (explode('|', $submitValues['date_values']) as $key => $dateString) {
             if ($dateString) {
                 $values = explode('(', $dateString);
                 $date = CRM_Utils_Date::processDate($values[0]);
                 $valuesDate = explode(':', $dateString);
                 $absentDateDurations[$date]['duration'] = (int) $valuesDate[1];
                 if (isset($valuesDate[2]) && $valuesDate[2] == 1 && $this->_showhide == 1 && array_key_exists('_qf_AbsenceRequest_done_save', $submitValues) || isset($valuesDate[2]) && $valuesDate[2] == 0 && $this->_showhide == 0 && array_key_exists('_qf_AbsenceRequest_done_save', $submitValues)) {
                     $absentDateDurations[$date]['approval'] = CRM_Utils_Array::key('Scheduled', $activityStatus);
                 } elseif (isset($valuesDate[2]) && $valuesDate[2] == 0 && $this->_showhide == 1) {
                     $absentDateDurations[$date]['approval'] = CRM_Utils_Array::key('Rejected', $activityStatus);
                 } elseif (array_key_exists('_qf_AbsenceRequest_done_saveandapprove', $submitValues) || array_key_exists('_qf_AbsenceRequest_done_approve', $submitValues)) {
                     $absentDateDurations[$date]['approval'] = CRM_Utils_Array::key('Completed', $activityStatus);
                 }
             }
         }
     }
     // set email template values
     $taDays = explode('|', $submitValues['tot_app_days']);
     $totDays = $taDays[0];
     if (!empty($taDays[1])) {
         $appDays = $taDays[1];
     }
     $msgTempResult = civicrm_api3('MessageTemplate', 'get', array('msg_title' => "Absence Email"));
     $targetContactResult = civicrm_api3('contact', 'get', array('id' => $this->_targetContactID));
     $mailprm[$this->_targetContactID]['display_name'] = $targetContactResult['values'][$this->_targetContactID]['display_name'];
     $mailprm[$this->_targetContactID]['email'] = $targetContactResult['values'][$this->_targetContactID]['email'];
     $tplParams = array('messageTemplateID' => $msgTempResult['values'][$msgTempResult['id']]['id'], 'empName' => $mailprm[$this->_targetContactID]['display_name'], 'absenceType' => $this->_absenceType, 'absentDateDurations' => $absentDateDurations, 'startDate' => $submitValues['start_date'], 'endDate' => $submitValues['end_date'], 'empPosition' => $this->_empPosition, 'totDays' => $totDays, 'jobHoursTime' => $this->_jobHoursTime);
     if (!empty($appDays)) {
         $tplParams['appDays'] = $appDays;
     }
     $sendTemplateParams = array('messageTemplateID' => $tplParams['messageTemplateID'], 'contactId' => $this->_targetContactID, 'tplParams' => $tplParams);
     if ($this->_action & CRM_Core_Action::ADD) {
         $activityParam = array('sequential' => 1, 'source_contact_id' => $this->_loginUserID, 'target_contact_id' => $this->_targetContactID, 'assignee_contact_id' => $this->_managerContactID, 'activity_type_id' => $this->_activityTypeID);
         if (array_key_exists('_qf_AbsenceRequest_done_saveandapprove', $submitValues) || $isAdmin) {
             $activityParam['status_id'] = CRM_Utils_Array::key('Completed', $activityStatus);
         } else {
             //we want to keep the activity status in Scheduled for new absence if save button is clicked
             $activityParam['status_id'] = CRM_Utils_Array::key('Scheduled', $activityStatus);
         }
         $result = civicrm_api3('Activity', 'create', $activityParam);
         //save the custom data
         if (!empty($submitValues['hidden_custom'])) {
             $customFields = CRM_Utils_Array::crmArrayMerge(CRM_Core_BAO_CustomField::getFields('Activity', FALSE, FALSE, $this->_activityTypeID), CRM_Core_BAO_CustomField::getFields('Activity', FALSE, FALSE, NULL, NULL, TRUE));
             $customValues = CRM_Core_BAO_CustomField::postProcess($submitValues, $customFields, $result['id'], 'Activity');
             CRM_Core_BAO_CustomValueTable::store($customValues, 'civicrm_activity', $result['id']);
         }
         if (!empty($customValues)) {
             $customGroup = array();
             foreach ($customValues as $fieldID => $values) {
                 foreach ($values as $fieldValue) {
                     $customValue = array('data' => $fieldValue['value']);
                     $customFields[$fieldID]['id'] = $fieldID;
                     $formattedValue = CRM_Core_BAO_CustomGroup::formatCustomValues($customValue, $customFields[$fieldID], TRUE);
                     $customGroup[$customFields[$fieldID]['groupTitle']][$customFields[$fieldID]['label']] = str_replace('&nbsp;', '', $formattedValue);
                 }
             }
             $sendTemplateParams['tplParams']['customGroup'] = $customGroup;
         }
         $activityLeavesParam = array('sequential' => 1, 'source_record_id' => $result['id'], 'activity_type_id' => CRM_Core_OptionGroup::getValue('activity_type', 'Absence', 'name'));
         foreach ($absentDateDurations as $date => $duration) {
             $activityLeavesParam['activity_date_time'] = $date;
             $activityLeavesParam['duration'] = $duration['duration'];
             $activityLeavesParam['status_id'] = $duration['approval'];
             civicrm_api3('Activity', 'create', $activityLeavesParam);
         }
         if (array_key_exists('_qf_AbsenceRequest_done_save', $submitValues)) {
             $sendTemplateParams['from'] = $mailprm[$this->_targetContactID]['email'];
             CRM_Core_Session::setStatus(ts('Absence(s) have been applied.'), ts('Saved'), 'success');
         } elseif (array_key_exists('_qf_AbsenceRequest_done_saveandapprove', $submitValues) || $isAdmin) {
             if (!empty($this->_managerContactID)) {
                 $emailID = civicrm_api3('contact', 'get', array('id' => $this->_loginUserID));
                 $sendTemplateParams['from'] = $emailID['values'][$emailID['id']]['email'];
             }
             $sendTemplateParams['tplParams']['approval'] = TRUE;
             CRM_Core_Session::setStatus(ts('Absence(s) have been applied and approved.'), ts('Saved'), 'success');
         }
         $managerContactResult = array();
         if (!empty($this->_managerContactID)) {
             foreach ($this->_managerContactID as $key => $val) {
                 $managerContactResult = civicrm_api3('contact', 'get', array('id' => $val));
                 if (!empty($val) && !empty($managerContactResult['values'])) {
                     $mailprm[$val]['display_name'] = $managerContactResult['values'][$val]['display_name'];
                     $mailprm[$val]['email'] = $managerContactResult['values'][$val]['email'];
                 }
             }
         }
         self::sendAbsenceMail($mailprm, $sendTemplateParams);
         $session->pushUserContext(CRM_Utils_System::url('civicrm/absences', "reset=1&cid={$this->_targetContactID}#hrabsence/list"));
     } elseif ($this->_mode == 'edit') {
         if (array_key_exists('_qf_AbsenceRequest_done_cancelabsence', $submitValues)) {
             $statusId = CRM_Utils_Array::key('Cancelled', $activityStatus);
             $activityParam = array('sequential' => 1, 'id' => $this->_activityId, 'activity_type_id' => $this->_activityTypeID, 'status_id' => $statusId);
             $result = civicrm_api3('Activity', 'create', $activityParam);
             $subact = civicrm_api3('Activity', 'get', array('return' => "id", 'source_record_id' => $result['id']));
             foreach ($subact['values'] as $key => $val) {
                 civicrm_api3('Activity', 'create', array('id' => $val['id'], 'status_id' => $statusId));
             }
             $sendTemplateParams['from'] = $mailprm[$this->_targetContactID]['email'];
             $sendTemplateParams['tplParams']['cancel'] = $sendMail = TRUE;
             CRM_Core_Session::setStatus(ts('Absence(s) have been Cancelled.'), ts('Cancelled'), 'success');
             $session->pushUserContext(CRM_Utils_System::url('civicrm/absence/set', "reset=1&action=view&aid={$result['id']}"));
         } elseif (array_key_exists('_qf_AbsenceRequest_done_approve', $submitValues)) {
             $statusId = CRM_Utils_Array::key('Completed', $activityStatus);
             $activityParam = array('sequential' => 1, 'id' => $this->_activityId, 'activity_type_id' => $this->_activityTypeID, 'status_id' => $statusId);
             $result = civicrm_api3('Activity', 'get', array('source_record_id' => $submitValues['source_record_id'], 'option.limit' => 365));
             foreach ($result['values'] as $row_result) {
                 civicrm_api3('Activity', 'delete', array('id' => $row_result['id']));
             }
             foreach ($absentDateDurations as $date => $duration) {
                 $resultAct = civicrm_api3('Activity', 'create', array('activity_type_id' => CRM_Core_OptionGroup::getValue('activity_type', 'Absence', 'name'), 'source_record_id' => $submitValues['source_record_id'], 'activity_date_time' => $date, 'duration' => $duration['duration'], 'status_id' => $duration['approval']));
             }
             $result = civicrm_api3('Activity', 'create', $activityParam);
             if (!empty($this->_managerContactID)) {
                 $emailID = civicrm_api3('contact', 'get', array('id' => $this->_loginUserID));
                 $sendTemplateParams['from'] = $emailID['values'][$emailID['id']]['email'];
             }
             $sendTemplateParams['tplParams']['approval'] = $sendMail = TRUE;
             CRM_Core_Session::setStatus(ts('Absence(s) have been Approved.'), ts('Approved'), 'success');
             $session->pushUserContext(CRM_Utils_System::url('civicrm/absence/set', "reset=1&action=view&aid={$result['id']}"));
         } elseif (array_key_exists('_qf_AbsenceRequest_done_reject', $submitValues)) {
             $statusId = CRM_Utils_Array::key('Rejected', $activityStatus);
             $activityParam = array('id' => $this->_activityId, 'activity_type_id' => $this->_activityTypeID, 'status_id' => $statusId);
             $result = civicrm_api3('Activity', 'create', $activityParam);
             $subact = civicrm_api3('Activity', 'get', array('return' => "id", 'source_record_id' => $result['id']));
             foreach ($subact['values'] as $key => $val) {
                 civicrm_api3('Activity', 'create', array('id' => $val['id'], 'status_id' => $statusId));
             }
             if (!empty($this->_managerContactID)) {
                 $emailID = civicrm_api3('contact', 'get', array('id' => $this->_loginUserID));
                 $sendTemplateParams['from'] = $emailID['values'][$emailID['id']]['email'];
             }
             $sendTemplateParams['tplParams']['reject'] = $sendMail = TRUE;
             CRM_Core_Session::setStatus(ts('Absence(s) have been Rejected.'), ts('Rejected'), 'success');
             $session->pushUserContext(CRM_Utils_System::url('civicrm/absence/set', "reset=1&action=view&aid={$result['id']}"));
         } elseif (array_key_exists('_qf_AbsenceRequest_done_cancel', $submitValues)) {
             $session->pushUserContext(CRM_Utils_System::url('civicrm/absences', "reset=1&cid={$this->_targetContactID}#hrabsence/list"));
         } else {
             $result = civicrm_api3('Activity', 'get', array('source_record_id' => $submitValues['source_record_id'], 'option.limit' => 365));
             foreach ($result['values'] as $row_result) {
                 civicrm_api3('Activity', 'delete', array('id' => $row_result['id']));
             }
             foreach ($absentDateDurations as $date => $duration) {
                 $result = civicrm_api3('Activity', 'create', array('activity_type_id' => CRM_Core_OptionGroup::getValue('activity_type', 'Absence', 'name'), 'source_record_id' => $submitValues['source_record_id'], 'activity_date_time' => $date, 'duration' => $duration['duration'], 'status_id' => $duration['approval']));
             }
             $buttonName = $this->controller->getButtonName();
             if ($buttonName == "_qf_AbsenceRequest_done_save") {
                 $this->_aid = $submitValues['source_record_id'];
                 $sendTemplateParams['from'] = $mailprm[$this->_targetContactID]['email'];
                 $sendTemplateParams['tplParams']['save'] = $sendMail = TRUE;
                 $session->pushUserContext(CRM_Utils_System::url('civicrm/absences', "reset=1&cid={$this->_targetContactID}#hrabsence/list"));
             }
         }
         if (!empty($submitValues['hidden_custom'])) {
             $customFields = CRM_Utils_Array::crmArrayMerge(CRM_Core_BAO_CustomField::getFields('Activity', FALSE, FALSE, $this->_activityTypeID), CRM_Core_BAO_CustomField::getFields('Activity', FALSE, FALSE, NULL, NULL, TRUE));
             $customValues = CRM_Core_BAO_CustomField::postProcess($submitValues, $customFields, $result['id'], 'Activity');
             CRM_Core_BAO_CustomValueTable::store($customValues, 'civicrm_activity', $result['id']);
         }
         if (!empty($customValues)) {
             $customGroup = array();
             foreach ($customValues as $fieldID => $values) {
                 foreach ($values as $fieldValue) {
                     $customValue = array('data' => $fieldValue['value']);
                     $customFields[$fieldID]['id'] = $fieldID;
                     $formattedValue = CRM_Core_BAO_CustomGroup::formatCustomValues($customValue, $customFields[$fieldID], TRUE);
                     $customGroup[$customFields[$fieldID]['groupTitle']][$customFields[$fieldID]['label']] = str_replace('&nbsp;', '', $formattedValue);
                 }
             }
             $sendTemplateParams['tplParams']['customGroup'] = $customGroup;
         }
         if ($sendMail) {
             //send mail to multiple manager
             $managerContactResult = array();
             if (!empty($this->_managerContactID)) {
                 foreach ($this->_managerContactID as $key => $val) {
                     $managerContactResult = civicrm_api3('contact', 'get', array('id' => $val));
                     if (!empty($val) && !empty($managerContactResult['values'])) {
                         $mailprm[$val]['display_name'] = $managerContactResult['values'][$val]['display_name'];
                         $mailprm[$val]['email'] = $managerContactResult['values'][$val]['email'];
                     }
                 }
             }
             self::sendAbsenceMail($mailprm, $sendTemplateParams);
         }
     } else {
         if (CRM_Utils_Request::retrieve('aid', 'Positive', $this)) {
             $activityIDs = CRM_Utils_Request::retrieve('aid', 'Positive', $this);
         }
         if (array_key_exists('_qf_AbsenceRequest_done_cancelabsence', $submitValues)) {
             $statusId = CRM_Utils_Array::key('Cancelled', $activityStatus);
             $statusMsg = ts('Absence(s) have been Cancelled');
         } elseif (array_key_exists('_qf_AbsenceRequest_done_cancel', $submitValues)) {
             $session->pushUserContext(CRM_Utils_System::url('civicrm/absences', "reset=1&cid={$this->_targetContactID}#hrabsence/list"));
         }
         civicrm_api3('Activity', 'create', array('id' => $this->_activityId, 'activity_type_id' => $this->_activityTypeID, 'status_id' => $statusId));
         CRM_Core_Session::setStatus($statusMsg, '', 'success');
         $session->pushUserContext(CRM_Utils_System::url('civicrm/absence/set', "reset=1&action=view&aid={$activityIDs}"));
     }
 }
Exemple #8
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;
        }
    }
}
Exemple #9
0
 function alterDisplay(&$rows)
 {
     // custom code to alter rows
     $entryFound = $viewLinks = FALSE;
     $seperator = CRM_Core_DAO::VALUE_SEPARATOR;
     $context = CRM_Utils_Request::retrieve('context', 'String', $this, FALSE, 'report');
     if (CRM_Core_Permission::check('access CiviCRM')) {
         $viewLinks = TRUE;
         $onHover = ts('View Contact Summary for this Contact');
         $onHoverAct = ts('View Absence Record');
     }
     if (!isset($this->_params['absence_date_from']) && !isset($this->_params['absence_date_to'])) {
         $this->_params['absence_date_from'] = date('m/d/Y');
         $this->_params['absence_date_to'] = date("m/d/Y", strtotime("+2 months"));
     }
     if (!empty($rows)) {
         $activityTypeID = CRM_Core_OptionGroup::getValue('activity_type', 'Absence', 'name');
         list($durationFromDate, $durationToDate) = $this->getFromTo(CRM_Utils_Array::value("absence_date_relative", $this->_params), CRM_Utils_Array::value("absence_date_from", $this->_params), CRM_Utils_Array::value("absence_date_to", $this->_params));
         $activityStatus = CRM_HRAbsence_BAO_HRAbsenceType::getActivityStatus('name');
         $activityStatusId = CRM_Utils_Array::key('Rejected', $activityStatus);
         $completedActivityId = CRM_Utils_Array::key('Completed', $activityStatus);
         $result = civicrm_api3('OptionValue', 'get', array('label' => "absence"));
         $activityId = $result['values'][$result['id']]['value'];
         $clause = NULL;
         if ($status = CRM_Utils_Array::value("status_id_value", $this->_params)) {
             $clause = " AND status_id IN (" . implode(',', $status) . ")";
         }
         $sql = "SELECT SUM(duration) / ( 8 *60 ) as qty,\n        source_record_id ,\n        Min(activity_date_time) AS start_date,\n        Max(activity_date_time) AS end_date\n        FROM civicrm_activity\n        WHERE source_record_id IN (select id from civicrm_activity where source_record_id IS NULL AND status_id NOT IN ({$completedActivityId}) {$clause}) AND activity_type_id = {$activityId}\n        GROUP BY source_record_id\n\n        UNION\n\n        SELECT SUM(CASE WHEN (activity_type_id = {$activityId} AND status_id NOT IN ({$activityStatusId})) THEN duration else NULL end) / ( 8 *60 ) as qty,\n        source_record_id ,\n        Min(activity_date_time) AS start_date,\n        Max(activity_date_time) AS end_date\n        FROM civicrm_activity\n        WHERE source_record_id IN (select id from civicrm_activity where source_record_id IS NULL AND status_id IN ({$completedActivityId}) {$clause}) AND activity_type_id = {$activityId}\n        GROUP BY source_record_id";
         if ($durationFromDate && $durationToDate) {
             $sql .= "\n        HAVING ((to_days({$durationFromDate}) <= to_days(Min(activity_date_time))) AND\n        (to_days(Max(activity_date_time))  <= to_days({$durationToDate})))\n        ";
         }
         $data = array();
         $dao = CRM_Core_DAO::executeQuery($sql);
         while ($dao->fetch()) {
             $data[$dao->source_record_id]['start_date'] = $dao->start_date;
             $data[$dao->source_record_id]['end_date'] = $dao->end_date;
             $data[$dao->source_record_id]['qty'] = round($dao->qty, 1);
         }
     }
     foreach ($rows as $rowNum => $row) {
         if (!array_key_exists($rows[$rowNum]['civicrm_activity_id'], $data)) {
             unset($rows[$rowNum]);
             continue;
         }
         if (array_key_exists($row['civicrm_activity_id'], $data)) {
             $rows[$rowNum]['start_date'] = $data[$row['civicrm_activity_id']]['start_date'];
             $rows[$rowNum]['end_date'] = $data[$row['civicrm_activity_id']]['end_date'];
             $rows[$rowNum]['qty'] = $data[$row['civicrm_activity_id']]['qty'];
         }
         if (array_key_exists('civicrm_contact_contact_source', $row)) {
             if ($value = $row['civicrm_contact_contact_source_id']) {
                 if ($viewLinks) {
                     $url = CRM_Utils_System::url("civicrm/contact/view", 'reset=1&cid=' . $value, $this->_absoluteUrl);
                     $rows[$rowNum]['civicrm_contact_contact_source_link'] = $url;
                     $rows[$rowNum]['civicrm_contact_contact_source_hover'] = $onHover;
                 }
                 $entryFound = TRUE;
             }
         }
         if (array_key_exists('civicrm_contact_contact_assignee', $row)) {
             $assigneeNames = explode(';', $row['civicrm_contact_contact_assignee']);
             if ($value = $row['civicrm_contact_contact_assignee_id']) {
                 $assigneeContactIds = explode(';', $value);
                 $link = array();
                 if ($viewLinks) {
                     foreach ($assigneeContactIds as $id => $value) {
                         if (isset($value) && isset($assigneeNames[$id])) {
                             $url = CRM_Utils_System::url("civicrm/contact/view", 'reset=1&cid=' . $value, $this->_absoluteUrl);
                             $link[] = "<a title='" . $onHover . "' href='" . $url . "'>{$assigneeNames[$id]}</a>";
                         }
                     }
                     $rows[$rowNum]['civicrm_contact_contact_assignee'] = implode('; ', $link);
                 }
                 $entryFound = TRUE;
             }
         }
         if (array_key_exists('civicrm_contact_contact_target', $row)) {
             $targetNames = explode(';', $row['civicrm_contact_contact_target']);
             if ($value = $row['civicrm_contact_contact_target_id']) {
                 $targetContactIds = explode(';', $value);
                 $link = array();
                 if ($viewLinks) {
                     foreach ($targetContactIds as $id => $value) {
                         if (isset($value) && isset($targetNames[$id])) {
                             $url = CRM_Utils_System::url("civicrm/contact/view", 'reset=1&cid=' . $value, $this->_absoluteUrl);
                             $link[] = "<a title='" . $onHover . "' href='" . $url . "'>{$targetNames[$id]}</a>";
                         }
                     }
                     $rows[$rowNum]['civicrm_contact_contact_target'] = implode('; ', $link);
                 }
                 $entryFound = TRUE;
             }
         }
         if (array_key_exists('civicrm_activity_activity_type_id', $row)) {
             if ($value = $row['civicrm_activity_activity_type_id']) {
                 $rows[$rowNum]['civicrm_activity_activity_type_id'] = $this->activityTypes[$value];
                 if ($viewLinks) {
                     // Check for target contact id(s) and use the first contact id in that list for view activity link if found,
                     // else use source contact id
                     if (!empty($rows[$rowNum]['civicrm_contact_contact_target_id'])) {
                         $targets = explode(';', $rows[$rowNum]['civicrm_contact_contact_target_id']);
                         $cid = $targets[0];
                     } else {
                         $cid = $rows[$rowNum]['civicrm_contact_contact_source_id'];
                     }
                     $url = CRM_Utils_System::url('civicrm/absence/set', 'reset=1&action=view&aid=' . $rows[$rowNum]['civicrm_activity_id'], $this->_absoluteUrl);
                     $rows[$rowNum]['civicrm_activity_activity_type_id_link'] = $url;
                     $rows[$rowNum]['civicrm_activity_activity_type_id_hover'] = $onHoverAct;
                 }
                 $entryFound = TRUE;
             }
         }
         if (array_key_exists('civicrm_activity_status_id', $row)) {
             if ($value = $row['civicrm_activity_status_id']) {
                 $rows[$rowNum]['civicrm_activity_status_id'] = $this->activityStatus[$value];
                 $entryFound = TRUE;
             }
         }
         if (array_key_exists('civicrm_activity_activity_date_time', $row) && array_key_exists('civicrm_activity_status_id', $row)) {
             if (CRM_Utils_Date::overdue($rows[$rowNum]['civicrm_activity_activity_date_time']) && $this->activityStatus[$row['civicrm_activity_status_id']] != 'Approved') {
                 $rows[$rowNum]['class'] = "status-overdue";
                 $entryFound = TRUE;
             }
         }
         if (!$entryFound) {
             break;
         }
     }
 }
Exemple #10
0
<?php

// This file declares a managed database record of type "ReportTemplate".
// The record will be automatically inserted, updated, or deleted from the
// database as appropriate. For more details, see "hook_civicrm_managed" at:
// http://wiki.civicrm.org/confluence/display/CRMDOC/Hook+Reference
$isEnabled = CRM_Core_DAO::getFieldValue('CRM_Core_DAO_Extension', 'org.civicrm.hrabsence', 'is_active', 'full_name');
if ($isEnabled) {
    $activityStatus = CRM_HRAbsence_BAO_HRAbsenceType::getActivityStatus();
    $approvedStatus = array_search('Approved', $activityStatus);
} else {
    $activityStatus = CRM_Core_PseudoConstant::activityStatus();
    $approvedStatus = array_search('Completed', $activityStatus);
}
return array(array('name' => 'CiviHR Absence Report Template', 'entity' => 'ReportTemplate', 'params' => array('version' => 3, 'label' => 'CiviHR Absence Report', 'description' => 'HR Report showing absences at individual level. ', 'class_name' => 'CRM_HRReport_Form_Activity_HRAbsence', 'report_url' => 'civihr/absence', 'grouping' => 'Absence', 'component' => '')), array('name' => 'CiviHR Absence Report', 'entity' => 'ReportInstance', 'params' => array('version' => 3, 'title' => 'CiviHR Absence Report', 'description' => 'HR Report showing absences at individual level. ', 'report_id' => 'civihr/absence', 'form_values' => serialize(array('addToDashboard' => 1, 'fields' => array('id' => 1, 'contact_target' => 1, 'activity_type_id' => 1, 'duration' => 1, 'absence_date' => 1, 'status_id' => 1, 'this.month' => 1), 'status_id_op' => 'in', 'status_id_value' => array($approvedStatus))))));
Exemple #11
0
 public function upgrade_1401()
 {
     $this->ctx->log->info('Planning update 1401');
     // PEAR Log interface
     $params = array('title' => 'CiviHR Current Employees Report', 'description' => 'HR Report showing drilled down current employee details . ', 'report_id' => 'civihr/detail', 'form_values' => serialize(array('fields' => array('id' => 1, 'sort_name' => 1, 'email' => 1, 'manager' => 1, 'hrjob_title' => 1))));
     $result = civicrm_api3('ReportInstance', 'create', $params);
     CRM_Core_DAO::executeQuery("INSERT INTO civicrm_managed (module, name, entity_type, entity_id) VALUES ('org.civicrm.hrreport', 'CiviHR Current Employees Report', 'ReportInstance', {$result['id']})");
     //Set approved filter ON for Absence report
     $isEnabled = CRM_Core_DAO::getFieldValue('CRM_Core_DAO_Extension', 'org.civicrm.hrabsence', 'is_active', 'full_name');
     if ($isEnabled) {
         $activityStatus = CRM_HRAbsence_BAO_HRAbsenceType::getActivityStatus();
         $update_formValues = serialize(array('addToDashboard' => 1, 'fields' => array('id' => 1, 'contact_target' => 1, 'activity_type_id' => 1, 'duration' => 1, 'absence_date' => 1, 'status_id' => 1, 'this.month' => 1), 'status_id_op' => 'in', 'status_id_value' => array(array_search('Approved', $activityStatus))));
         CRM_Core_DAO::executeQuery("UPDATE civicrm_report_instance SET form_values = '{$update_formValues}' WHERE id = (SELECT entity_id from civicrm_managed where name = 'CiviHR Absence Report')");
     }
     return TRUE;
 }
Exemple #12
0
 /**
  * Function to process the form
  *
  * @access public
  * @return void
  */
 public function postProcess()
 {
     if ($this->_action & CRM_Core_Action::DELETE) {
         CRM_HRAbsence_BAO_HRAbsenceType::del($this->_id);
         CRM_Core_Session::setStatus(ts('Selected absence type has been deleted.'), 'Success', 'success');
     } else {
         $params = $ids = array();
         // store the submitted values in an array
         $params = $this->exportValues();
         foreach (array('allow_debits', 'allow_credits', 'is_active') as $key => $index) {
             if (!array_key_exists($index, $params)) {
                 $params[$index] = 0;
             }
         }
         if ($this->_action & CRM_Core_Action::UPDATE) {
             $params['id'] = $this->_id;
         }
         $absenceType = CRM_HRAbsence_BAO_HRAbsenceType::create($params);
         if ($this->_action & CRM_Core_Action::UPDATE) {
             CRM_Core_Session::setStatus(ts('The absence type \'%1\' has been updated.', array(1 => $absenceType->title)), 'Success', 'success');
         } else {
             CRM_Core_Session::setStatus(ts('The absence type \'%1\' has been added.', array(1 => $absenceType->title)), 'Success', 'success');
         }
         $url = CRM_Utils_System::url('civicrm/absence/type', 'reset=1&action=browse');
         $session = CRM_Core_Session::singleton();
         $session->replaceUserContext($url);
     }
 }
Exemple #13
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;
    }
 protected function _initialize()
 {
     // annual benefits options:
     CRM_Core_OptionGroup::getAssoc('hrjc_benefit_name', $this->_annualOptions['benefit']['name']);
     CRM_Core_OptionGroup::getAssoc('hrjc_benefit_type', $this->_annualOptions['benefit']['type']);
     foreach ($this->_annualOptions['benefit']['name']['label'] as $key => $value) {
         $this->_annualOptionsFlipped['benefit']['name'][$value] = $key;
     }
     foreach ($this->_annualOptions['benefit']['type']['label'] as $key => $value) {
         $this->_annualOptionsFlipped['benefit']['type'][$value] = $key;
     }
     // annual deductions options:
     CRM_Core_OptionGroup::getAssoc('hrjc_deduction_name', $this->_annualOptions['deduction']['name']);
     CRM_Core_OptionGroup::getAssoc('hrjc_deduction_type', $this->_annualOptions['deduction']['type']);
     foreach ($this->_annualOptions['deduction']['name']['label'] as $key => $value) {
         $this->_annualOptionsFlipped['deduction']['name'][$value] = $key;
     }
     foreach ($this->_annualOptions['deduction']['type']['label'] as $key => $value) {
         $this->_annualOptionsFlipped['deduction']['type'][$value] = $key;
     }
     // contract type options:
     $contractTypeOptions = array();
     CRM_Core_OptionGroup::getAssoc('hrjc_contract_type', $contractTypeOptions, true);
     foreach ($contractTypeOptions as $contractType) {
         $this->_contractTypeOptions[$contractType['value']] = $contractType;
         $this->_contractTypeOptionsFlipped[$contractType['label']] = $contractType['value'];
     }
     // hours location options:
     $hoursLocation = new CRM_Hrjobcontract_BAO_HoursLocation();
     $hoursLocation->find();
     while ($hoursLocation->fetch()) {
         $this->_hoursLocationOptions[$hoursLocation->id] = (array) $hoursLocation;
     }
     // hours type options:
     $hoursTypeOptions = array();
     CRM_Core_OptionGroup::getAssoc('hrjc_hours_type', $hoursType, true);
     foreach ($hoursType as $hourType) {
         $this->_hoursTypeOptions[$hourType['value']] = $hourType;
         $this->_hoursTypeOptionsFlipped[$hourType['label']] = $hourType['value'];
     }
     // leave types options:
     $absenceType = new CRM_HRAbsence_BAO_HRAbsenceType();
     $absenceType->find();
     while ($absenceType->fetch()) {
         $absenceTypeArray = (array) $absenceType;
         $this->_leaveTypes[$absenceType->id] = $absenceTypeArray;
         $this->_leaveTypesFlipped[$absenceTypeArray['title']] = $absenceType->id;
     }
     // location options:
     $locationOptions = array();
     CRM_Core_OptionGroup::getAssoc('hrjc_location', $locationOptions, true);
     foreach ($locationOptions as $location) {
         $this->_locationOptions[$location['value']] = $location;
         $this->_locationOptionsFlipped[$location['label']] = $location['value'];
     }
     // pay cycle options:
     $payCycleOptions = array();
     CRM_Core_OptionGroup::getAssoc('hrjc_pay_cycle', $payCycleOptions, true);
     foreach ($payCycleOptions as $payCycle) {
         $this->_payCycleOptions[$payCycle['value']] = $payCycle;
         $this->_payCycleOptionsFlipped[$payCycle['label']] = $payCycle['value'];
     }
     // pay scale options:
     $payScale = new CRM_Hrjobcontract_BAO_PayScale();
     $payScale->find();
     while ($payScale->fetch()) {
         $this->_payScaleOptions[$payScale->id] = (array) $payScale;
     }
     // pension type options:
     $pensionTypeOptions = array();
     CRM_Core_OptionGroup::getAssoc('hrjc_pension_type', $pensionTypeOptions, true);
     foreach ($pensionTypeOptions as $pensionType) {
         $this->_pensionTypeOptions[$pensionType['value']] = $pensionType;
         $this->_pensionTypeOptionsFlipped[$pensionType['label']] = $pensionType['value'];
     }
 }