public static function create($params) { $className = get_called_class(); $entityName = _civicrm_get_entity_name($className); $baoName = 'CRM_Hrjobcontract_BAO_' . $entityName; $daoName = 'CRM_Hrjobcontract_DAO_' . $entityName; $tableName = _civicrm_get_table_name($className); $hook = empty($params['id']) ? 'create' : 'edit'; if ($hook === 'create') { if (empty($params['jobcontract_id'])) { throw new API_Exception("Cannot create entity: please specify jobcontract_id value."); } $jobContractId = (int) $params['jobcontract_id']; $previousEntityParams = array('jobcontract_id' => $jobContractId, 'sequential' => 1); _civicrm_hrjobcontract_api3_set_current_revision($previousEntityParams, $tableName); $previousEntityResult = civicrm_api3($entityName, 'get', $previousEntityParams); $previousEntity = CRM_Utils_Array::first($previousEntityResult['values']); if (!empty($previousEntity)) { $classInstance = new $daoName(); $previousInstance = $classInstance->create($previousEntity); /*$previousInstance = new $baoName(); if (!empty($previousEntity)) { $previousInstance->id = $previousEntity['id']; $previousInstance->find(true); }*/ } if (empty($params['jobcontract_revision_id'])) { // Creating new revision: $newRevision = _civicrm_hrjobcontract_api3_create_revision($jobContractId); $params['jobcontract_revision_id'] = $newRevision['id']; // Updating currently saved revision with its 'id' as {table}_revision_id: $updatedRevision = civicrm_api3('HRJobContractRevision', 'create', array('sequential' => 1, 'id' => $newRevision['id'], $tableName . '_revision_id' => $newRevision['id'])); } else { $updatedRevision = civicrm_api3('HRJobContractRevision', 'create', array('sequential' => 1, 'id' => $params['jobcontract_revision_id'], $tableName . '_revision_id' => $params['jobcontract_revision_id'])); } if (!empty($previousEntity)) { unset($previousEntity['id']); unset($previousEntity['jobcontract_revision_id']); $previousEntityData = array(); foreach ($previousEntity as $key => $value) { $previousEntityData[$key] = $previousInstance->{$key}; } $params = array_merge($previousEntityData, $params); } } foreach ($params as $key => $value) { if (is_array($value)) { $params[$key] = json_encode($value); } } CRM_Utils_Hook::pre($hook, $entityName, CRM_Utils_Array::value('id', $params), $params); $instance = new $className(); if (!empty($params['id'])) { $instance->id = $params['id']; $instance->find(true); } $instance->copyValues($params); if (module_exists('rules')) { rules_invoke_event('hrjobcontract_' . $tableName . '_presave', $instance); } $instance->save(); CRM_Utils_Hook::post($hook, $entityName, $instance->id, $instance); if (module_exists('rules')) { if ($hook == 'create') { rules_invoke_event('hrjobcontract_' . $tableName . '_insert', $instance); } else { rules_invoke_event('hrjobcontract_' . $tableName . '_update', $instance); } } return $instance; }
/** * HRJobLeave.get API * * @param array $params * @return array API result descriptor * @throws API_Exception */ function civicrm_api3_h_r_job_leave_replace($params) { $validRevisionId = null; if (!empty($params['values'])) { foreach ($params['values'] as $leave) { if (!empty($leave['id']) && !empty($leave['jobcontract_revision_id'])) { $validRevisionId = $leave['jobcontract_revision_id']; break; } } } $result = _civicrm_hrjobcontract_api3_replace(_civicrm_get_entity_name(_civicrm_api3_get_BAO(__FUNCTION__)), $params, $validRevisionId); if (!empty($params['values'])) { $firstLeaveEntry = CRM_Utils_Array::first($params['values']); $jobContractId = isset($firstLeaveEntry['jobcontract_id']) ? $firstLeaveEntry['jobcontract_id'] : null; if (!$jobContractId && isset($firstLeaveEntry['jobcontract_revision_id'])) { $revision = civicrm_api3('HRJobContractRevision', 'get', array('sequential' => 1, 'id' => $firstLeaveEntry['jobcontract_revision_id'])); $revisionData = CRM_Utils_Array::first($revision['values']); $jobContractId = $revisionData['jobcontract_id']; } if ($jobContractId) { CRM_Hrjobcontract_BAO_HRJobLeave::recalculateAbsenceEntitlement($jobContractId); } } return $result; }