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(); }
/** * 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; }
/** * 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; }
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')); } }
/** * 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(' ', '', $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(' ', '', $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}")); } }
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; } } }
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; } } }
<?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))))));
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; }
/** * 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); } }
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} {/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> </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']; } }