sTableName = 'tstudents.tlearnstatus'; $this->asKeyFieldsNames = array(self::FIELD_ID_LEFT, self::FIELD_ID_RIGHT); $this->aAttributes[self::FIELD_ID_FULL] = new Operation('||', array(self::FIELD_ID_LEFT, self::FIELD_ID_RIGHT)); $this->aAttributes[self::FIELD_ID_FULL]->alias(self::FIELD_ID_FULL); parent::__construct(); } public function foreignKey($psForeignKey) { $vForeignKey = parent::foreignKey($psForeignKey); do { if (!is_null($vForeignKey)) { break; } if ($psForeignKey == self:: FIELD_ID_EVENT) { $vForeignKey = new application\models\orm\ForeignKey ( $this, self:: FIELD_ID_EVENT, new Learn_Event_Model(), Learn_Event_Model::FIELD_ID ); } if (!is_null($vForeignKey)) { $this->aForeignKeys[$psForeignKey] = $vForeignKey; break; } } while (false); return $vForeignKey; } public function fieldsList() { return array ( self::FIELD_ID_LEFT, self::FIELD_ID_RIGHT, self::FIELD_ID_FULL, self::FIELD_NAME, self::FIELD_ID_EVENT ); } } ?> sTableName = 'student.user_scale'; $this->asKeyFieldsNames = array(self::FIELD_ID); } /** * Вернуть список названий полей * @return array */ public function fieldsList() { return array ( self::FIELD_ID, self::FIELD_TYPE_DICT_ID, self::FIELD_TITLE, self::FIELD_TITLE2, self::FIELD_LEFT_BORDER, self::FIELD_RIGHT_BORDER, self::FIELD_SATISFACTORY ); } /** * Получить допустимый диапазон для шкалы * @param int $piScaleId - ID шкалы * @return array массив:
* min_base - минимальное значение по базовой шкале
* max_base - максимальное значение по базовой шкале
* middle_base - минимальный балл, с которого начинается положительная отметка * @author Жучок И. */ public function range($piScaleId) { $aReturn = array(); $this->saveModelState(true); $this->filter(array(self::FIELD_TYPE_DICT_ID => $piScaleId)); $this->order(array(self::FIELD_LEFT_BORDER => 'ASC')); $aRows = $this->elements(); $this->restoreModelState(); $iCount = count($aRows); if ($iCount > 0) { $aReturn['min_base'] = $aRows[0][self::FIELD_LEFT_BORDER]; $aReturn['max_base'] = $aRows[$iCount-1][self::FIELD_RIGHT_BORDER]; foreach ($aRows as $aRow) { if ($aRow[self::FIELD_SATISFACTORY] == 1) { $aReturn['middle_base'] = $aRow[self::FIELD_LEFT_BORDER]; break; } } } return $aReturn; } } ?>fsModelClassName = strtolower(get_class($this)); //$this->sValueConstForTypeContact = $this->getConstantValueFromPropName('DICT_OBJECT_TYPE_HUMAN','constant_value'); $this->sValueObjPersonFromDict = $this->getConstantValueFromPropName('DICT_OBJECT_TYPE_HUMAN','constant_value'); $this->sValueConstForTypeContacts = $this->getConstantValueFromPropName('DICT_ID_TYPE_CONTACTS', 'constant_value'); } //============================================================================================================================// // получить родителя для подразделения function get_parent_org($id_org) { //print('/get_parent_org: $id_org = '.$id_org.'/'); $query_str = "SELECT org1.name FROM iworkers.org LEFT OUTER JOIN iworkers.org org1 ON (org.parent_code = org1.id) WHERE org.id = ".$id_org; $query = $this -> db -> query($query_str); return $query -> result(); } /** * Получить актуальный список подразделений. Подразделения, которые расформированы, не будут включены в вывод * @param int $piRootOrg * Корневое подразделение (возможно значение null для выбора всего дерева подразделений). * @return array * Массив элементов формата:
* name - название подразделения,
* parent_code - идентификатор родительского подразделения,
* id - идентификатор подразделения,
* parent_name - название родительского подразделения,
* children - массив вложенных подразделений. */ function getOrgTree($piRootOrg = NULL) { $oOrg = new Org_Model(); $oOrg->selectList ( [ Org_Model::FIELD_TITLE_NAME => 'name', Org_Model::FIELD_PARENT_FK_NAME => 'parent_code', Org_Model::FIELD_ID_NAME => 'id' ] ); $oOrg->filter ( [ [ 'or' => true, 'conditions' => [ Org_Model::FIELD_TORG_FK_NAME => ['not' => true, 'value' => 289], [ 'and' => true, 'conditions' => [ Org_Model::FIELD_TORG_FK_NAME => null ] ] ] ] ] ); $oOrg->order([Org_Model::FIELD_TITLE_NAME => 'asc']); return $oOrg->treeByRoot($piRootOrg); } // //=========================================================================================================================== //получить список контактов /* function get_list_cotacts() { $query_str = "SELECT DISTINCT cont.value as val, cont.person_fk as per FROM istudents.contact as cont"; $query = $this ->db -> query($query_str); $aResult = $query->result(); return $aResult; }*/ // //============================================================================================================================ // получить всех сотрудников заданного подразделения // 04.07.13 добавила получение имени родителя -OL- // 06.07.13 добавила получение рабоч. номера телефона для штатн.места (подр+должн) -OL- // 06.07.13 добавила получение рабоч. номера телефона, указанного сотрудником в личном кабинете -OL- // 03.10.13 изменения в dict: 'человек' - cont.obj_type_fk = '1999999561' теперь нужен '1999999526' // 'штатное место' - cont.obj_type_fk = '1999999540' теперь нужен '1999999446' // 'рабочий телефон' - cont.tcontact_fk = 3 теперь нужен '1999999442' function get_worker_by_org($id_org = "",$id_person = "") { $str = ""; /* cont.value as tel_staff_list, cont1.value as tel_LK*/ /*org.id IN ( SELECT parent_code from iworkers.org WHERE org.dead_date IS NULL OR org.dead_date > CURRENT_TIMESTAMP ) as have_child (SELECT contact.value FROM istudent.contact WHERE contact.person_fk = id_person) as contacts * / */ $query_str = " SELECT DISTINCT per.surname, per.name, per.patronymic, post.name as post, per.id as id_person, sht.name as shtat, sht.id as shtat_id, org.name as org, org.parent_code as parent_org, org1.name as parent_org_name, work.person_fk as tab_num, work.org_fk, deg.name as degree, st.name as study, rang.name as rang FROM iworkers.active_workers work LEFT OUTER JOIN general.person per ON (work.person_fk = per.id) LEFT OUTER JOIN iworkers.post post ON (post.id = work.post_fk) LEFT OUTER JOIN iworkers.org org ON (org.id = work.org_fk) LEFT OUTER JOIN iworkers.shtat sht ON (work.shtat = sht.id) LEFT OUTER JOIN iworkers.degree_study deg_st ON (deg_st.id = work.degree_study_fk) LEFT OUTER JOIN iworkers.degree deg ON (deg.id = work.degree_fk) LEFT OUTER JOIN iworkers.study st ON (st.id = work.study_fk) LEFT OUTER JOIN iworkers.rang rang ON (rang.id = work.rang_fk) LEFT OUTER JOIN iworkers.org org1 ON (org.parent_code = org1.id) LEFT OUTER JOIN iworkers.staff_list sl ON (sl.org_fk = org.id) AND (sl.post_fk = post.id) "; /* LEFT OUTER JOIN istudents.contact cont ON (cont.obj_fk = sl.id) AND (cont.obj_type_fk = 1999999446) AND (cont.tcontact_fk = 1999999442) LEFT OUTER JOIN istudents.contact cont1 ON (cont1.obj_fk = per.id) AND (cont1.obj_type_fk = 1999999526) AND (cont1.tcontact_fk = 1999999442) */ if ($id_org !== "" and $id_person == "") { $str = "WHERE (org.id = ".$this->db->escape($id_org).") and (work.date_dead IS NULL or work.date_dead>=CURRENT_TIMESTAMP) and ((sht.id = 1) or (sht.id = 2))"; } if ($id_person !== "" and $id_org == "") { $str = "WHERE (per.id = ".$this->db->escape($id_person).") and (work.date_dead IS NULL or work.date_dead>=CURRENT_TIMESTAMP) and ((sht.id = 1) or (sht.id = 2))"; } $str1 = "ORDER BY per.surname"; $query_str = $query_str.$str.$str1; $query = $this -> db -> query($query_str); $aResult = $query->result(); /** * Получаем информацию о членстве в профсоюзе сотрудников ДГТУ * @author Коротков Д. */ $aPersonIds = array(); foreach($aResult as $aWorker) { $aPersonIds[] = $aWorker->id_person; } $aMembersById = array(); $iDepartment = $this->tradeUnionDepartment(); if(!is_null($iDepartment)) { $oTradeUnion = new Trade_Union_Model(); $oTradeUnion->filter ( array ( Trade_Union_Model::FIELD_PERSON => $aPersonIds, Trade_Union_Model::FIELD_DEPARTMENT => $iDepartment ) ); $aMembers = $oTradeUnion->elements(); foreach($aMembers as $aMember) { $aMembersById[$aMember[Trade_Union_Model::FIELD_PERSON]] = true; } } foreach($aResult as $k => $aWorker) { $aResult[$k]->trade_union = isset($aMembersById[$aWorker->id_person]); } return $aResult; } // //============================================================================================================================ /** * Получить информацию о сотрудниках * @author Сартисон И. * @param $pPersonFk - массив id персон или срока вида "id1,id2,id3,.." * @return array массив элементов */ function getWorkerInfo($pPersonFk,$paStat=array()) { if (gettype($pPersonFk)!=='array') { if (gettype($pPersonFk)=='string') $aPersonFk = explode(",",$pPersonFk); else {$aResult = array(); return $aResult;} } $oWorkerModel = new Worker_Model(); $aFilter =array ( Worker_Model::FIELD_PERSON_FK_NAME => $aPersonFk, Worker_Model::FIELD_DATE_DEAD_NAME => NULL ); if (!empty($paStat)) { $aFilter[Worker_Model::FIELD_SHTAT_FK_NAME] = $paStat; } $oWorkerModel->filter($aFilter); $oWorkerModel->order(array($oWorkerModel::FIELD_SHTAT_FK_NAME =>'ASC')); $aWorkerInfo = $oWorkerModel->elements(NULL, NULL); $aResult = array(); $person_fk = '*'; foreach($aWorkerInfo as $aInfo) { if($person_fk != $aInfo["person_fk"]) { $person_fk = $aInfo["person_fk"]; $aResult[$person_fk]["person_fk"] = $aInfo["person_fk"]; $aResult[$person_fk]["surname"] = $aInfo["surname"]; $aResult[$person_fk]["name"] = $aInfo["name"]; $aResult[$person_fk]["patronymic"] = $aInfo["patronymic"]; $aResult[$person_fk]["full_name"] = $aInfo["full_name"]; $aResult[$person_fk]["rang_name"] = mb_strtolower($aInfo["rang_name"]); $aResult[$person_fk]["study_name"] = $aInfo["study_name"]; $aResult[$person_fk]["degree_name"] = mb_strtolower($aInfo["degree_name"]); } $aResult[$person_fk]["aJob"][] = array ( "shtat" => $aInfo["shtat"], "post_name" => $aInfo["post_name"], "org_shname" => $aInfo["org_shname"], "shtat_name" => $aInfo["shtat_name"] ); //подготовить вывод рабочих номеров телефонов в карточку //$this->load->helper('php_helper'); //$aListPhone1 = array_column($aListPhone,'value'); $aIdWorker = array('id_person' => $person_fk); $aListPhone = $this->mod->getListCotactsWorkers($aIdWorker,'id_person','WPHONE'); $aListPhone1 = array(); foreach ($aListPhone as $key) { $aListPhone1[] = $key['value']; } //добавим номер телефона $str_phone = implode(", ", $aListPhone1); if ($str_phone == null) { $str_phone = ""; } $aResult[$person_fk]['str_phone']= $str_phone; //$aResult[$person_fk]['mas_phone']= $aListPhone1; } return $aResult; } //=============================================================================================================================== //function get_number_phone1($id_person) //{ /* 06.06.13 поиск телефона для "человека": id person -> active_workers(работающий ли сейчас) -> telefon */ /* 03.10.13 изменения в dict: 'человек' - cont.obj_type_fk = '1999999561' теперь нужен '1999999526'*/ /* 'рабочий телефон' - cont.tcontact_fk = 3 теперь нужен '1999999442'*/ /* $query_str= " SELECT DISTINCT cont.value as number FROM general.person pers LEFT JOIN iworkers.active_workers worker ON worker.person_fk = pers.id LEFT JOIN istudents.contact cont ON (cont.obj_fk = worker.person_fk) AND (cont.obj_type_fk = '1999999526') AND (cont.tcontact_fk = '1999999442') WHERE pers.id = ? "; $query = $this -> db -> query($query_str, $id_person); return $query -> result(); } //=============================================================================================================================== //function get_number_phone2($id_person) //{ /* 14.06.13 поиск телефона для "штатного места": id person -> id staff_list -> telefon*/ /* 03.10.13 изменения в dict: 'штатное место' - cont.obj_type_fk = '1999999540' теперь нужен '1999999446'*/ /* 'рабочий телефон' - cont.tcontact_fk = 3 теперь нужен '1999999442'*/ /* $query_str= " SELECT DISTINCT cont.value as number FROM general.person pers LEFT JOIN iworkers.active_workers worker ON worker.person_fk = pers.id LEFT JOIN iworkers.staff_list sl ON (sl.org_fk = worker.org_fk) AND (sl.post_fk = worker.post_fk) AND (sl.time_dead is NULL) LEFT JOIN istudents.contact cont ON (cont.obj_fk = sl.id) AND (cont.obj_type_fk = '1999999446') AND (cont.tcontact_fk = '1999999442') WHERE pers.id = ? "; $query = $this -> db -> query($query_str, $id_person); return $query -> result(); }*/ /*******************************************************************************************************/ /* список всех подразделений из iworkers.org (ниже есть ф-ция с проверкой на сотрудников) /*******************************************************************************************************/ function find_substing_org($substr) { $substr = trim($substr); $substr = mb_convert_case($substr,MB_CASE_UPPER); $query_str =" SELECT org.name, org.id, COALESCE(org1.shortname, org1.name) as shortname FROM iworkers.org org LEFT OUTER JOIN iworkers.org org1 ON (org.parent_code = org1.id) WHERE (upper(org.name) like '%".$this->db->escape_like_str($substr)."%') AND (org.dead_date IS NULL OR org.dead_date > CURRENT_TIMESTAMP) AND (org.torg_fk <> 289 OR org.torg_fk IS NULL) ORDER BY org.name" ; $query = $this->db->query($query_str)->result(); $res=''; foreach ($query as $obj) { $res .= $obj->name.' | '.$obj->shortname.' | '.$obj->id.chr(10); } return $res; } /******************************************************************************************************* список подразделений из iworkers.org, в кот есть действующие сотрудники (условие EXISTS) используется для STRUCTURE (автопоиск подразделения) OL *******************************************************************************************************/ function find_substing_org_structure($substr) { $substr = trim($substr); $substr = mb_convert_case($substr,MB_CASE_UPPER); $query_str =" SELECT org.name, org.id, COALESCE(org1.shortname, org1.name) as shortname FROM iworkers.org org LEFT OUTER JOIN iworkers.org org1 ON (org.parent_code = org1.id) WHERE (upper(org.name) like '%".$this->db->escape_like_str($substr)."%') and org.dead_date is NULL and EXISTS (select * from iworkers.active_workers act_w where act_w.org_fk = org.id) ORDER BY org.name" ; $query = $this->db->query($query_str)->result(); $res=''; foreach ($query as $obj) { $res .= $obj->name.' | '.$obj->shortname.' | '.$obj->id.chr(10); } return $res; } /** * Массив информации о сотрудниках, соответствующих человеку * @deprecated используйте модель dictionary/worker_model * @param int $piPersonId идентификатор человека * @return array массив элементов, каждый из которых соответствует одному сотруднику и имеет сл. формат:
* surname - фамилия,
* name - имя,
* patronymic - отчество,
* gender - пол,
* post - должность,
* orgname - название подразделения,
* worker_fk - идентификатор сотрудника,
* id - идентификатор ПОДРАЗДЕЛЕНИЯ,
* torg_fk - идентификатор типа подразделения,
* org_root_fk - идентификатор корневого подразделения,
* org_fk - идентификатор подразделения (=id),
* post_fk - идентификатор должности,
* stavka - ставка,
* person_fk - идентификатор человека
*/ public function workersInfoForPerson($piPersonId) { $oSessionModel = new application\models\Session(); $aSessionConstants = $oSessionModel->sessionDataForController($this->fsModelClassName); $sSessionParamName = 'workersInfoForPerson'; if(isset($aSessionConstants[$sSessionParamName][$piPersonId])) { $aResult = $aSessionConstants[$sSessionParamName][$piPersonId]; } else { $this->db->select ( 'person.surname, person.name, person.patronymic, person.gender, post.name as post, org.name as orgname, active_workers.id AS worker_fk, org.id, org.torg_fk, org.org_root_fk, active_workers.org_fk, active_workers.post_fk, active_workers.stavka, active_workers.person_fk' ); $this->db->from('iworkers.active_workers'); $this->db->join('general."person"', 'active_workers.person_fk = person.id', 'LEFT OUTER'); $this->db->join('iworkers."post"', 'active_workers.post_fk = post.id', 'LEFT OUTER'); $this->db->join('iworkers."org"', 'active_workers.org_fk = org.id', 'LEFT OUTER'); $this->db->where('active_workers.person_fk', $piPersonId); $this->db->distinct(); $result = $this->db->get(); $aResult = $result->result_array(); $aSessionConstants[$sSessionParamName][$piPersonId] = $aResult; $oSessionModel->sessionDataForController($this->fsModelClassName, $aSessionConstants); } return $aResult; } /** * Сформировать предикат (SQL запрос) для выбора пользователей, которые являются * действующими сотрудниками с переданными параметрами * @author Коротков Д. * @param $paIdOrg - ID структурного подразделения * @param $pbRecursive - учитывать ли подчиненные подразделения * @return string */ public function groupPredicate($paIdOrg, $paRecursive = false) { $sGroupPredicate = 'SELECT id_account FROM ' . ACCESS_USERS_VIEW . ' user_account JOIN general.person ON person.id = user_account.person_fk JOIN iworkers.active_workers AS worker ON person.id = worker.person_fk JOIN iworkers.org ON org.id = worker.org_fk WHERE org.id IN ('; foreach ($paIdOrg as $iOrgId) { $sEscapedOrgId = $this->db->escape($iOrgId); if(isset($paRecursive[$iOrgId])) { $sGroupPredicate .= 'SELECT * FROM ' . ACCESS_SCHEMA . '.org_children(' . $sEscapedOrgId . ') UNION '; } else { $sGroupPredicate .= 'SELECT (' . $sEscapedOrgId . ')::bigint UNION '; } } $sGroupPredicate = trim($sGroupPredicate); $sGroupPredicate = substr($sGroupPredicate, 0, strlen($sGroupPredicate) - strlen('UNION')); $sGroupPredicate .= ')'; return $sGroupPredicate; } /** * Выбрать организации по родительскому коду * @author Коротков Д. * @param int $parent - id родителя * @param bool $pbRecursive - пройти рекурсивно до конца * @return стандартно возвращает объект запроса, но т.к. это не соответствует стандартному хэлперу db_helper, для рекурсивного обхода * поведение изменено */ function select_org_by_parent($parent, $pbRecursive = false) { //SELECT * FROM iworkers.org WHERE parent_code = $parent ORDER BY name ASC $this->db->select('*'); $this->db->from('iworkers."org"'); $this->db->where('parent_code', $parent); $this->db->order_by('name', "asc"); $result = $this->db->get(); $aOrgs = $result->result_array(); //$res[0][] = $this->foWorkersModel->select_org_by_parent(NULL); if ($pbRecursive) { foreach ($aOrgs as $key => $value) { //print_r($); $aOrgs[$key]['children'] = $this->select_org_by_parent($value['id'], true); } return $aOrgs; } else { return $result->result(); } } /** * Получить информацию о подразделении по идентификатору. * @param int $piId идентификатор подразделения * @return array массив значений из отношения iworkers.org * @author Коротков Д. */ public function organizationInfo($piId) { $aInfo = $this->db->select()->from('iworkers.org')->where('id', $piId)->get()->result_array(); if(!empty ($aInfo)) { $aInfo = $aInfo[0]; } return $aInfo; } /******************************************************************************* получить номер телефона и аудиторию для подразделения ********************************************************************************/ /*public function get_contacts($id) // НЕ ИСПОЛЬЗУЕТСЯ { /* 03.10.13 изменения в dict: 'рабочий телефон' - cont.tcontact_fk = 3 теперь нужен '1999999442'*/ /* $sql=' SELECT map.org_fk, map.id as map_id, map.build_id, b.number, map.name, tel.value as telephon FROM structure.map_cord map LEFT OUTER JOIN istudents.contact tel ON tel.obj_fk = map.id and tel.tcontact_fk = 1999999442 LEFT OUTER JOIN structure.building b ON b.id = map.build_id WHERE map.org_fk = ? '; $res= $this->db->query($sql,$id); $res = $res->result_array(); if($res) return $res; return false; }*/ /****************************************************************************************** изменить РАБОЧИЙ номер телефона ЧЕЛОВЕКА (кот.указывается в личном кабинете сотрудника) *****************************************************************************************/ //public function record_new_tel($id_pers,$new_tel) //{ /* 03.10.13 изменения в dict: 'человек' - cont.obj_type_fk = '1999999561' теперь нужен '1999999526'*/ /* 'рабочий телефон' - cont.tcontact_fk = 3 теперь нужен '1999999442'*/ /*$sql=' UPDATE istudents.contact SET value = ? WHERE (obj_fk = ?) AND (obj_type_fk = 1999999526) AND (tcontact_fk = 1999999442) '; $query = $this->db->query($sql,array($new_tel,$id_pers)); return ($query !== false) ? $this->db->affected_rows() : 0; //возвращает кол-во изменных строк }*/ /****************************************************************************************** создать новую запись с РАБОЧИМ номером телефона ЧЕЛОВЕКА (кот.указывается в личном кабинете сотрудника) *****************************************************************************************/ //public function record_add_tel($id_pers,$new_tel) // { /* 03.10.13 изменения в dict: 'человек' - cont.obj_type_fk = '1999999561' теперь нужен '1999999526'*/ /* 'рабочий телефон' - cont.tcontact_fk = 3 теперь нужен '1999999442'*/ /*$sql=' INSERT INTO istudents.contact (obj_fk, person_fk, obj_type_fk, tcontact_fk, value) VALUES (?, ?, 1999999526, 1999999442, ?) '; $query = $this->db->query($sql,array($id_pers, $id_pers, $new_tel)); //возвращает кол-во изменных строк return ($query === false) ? 0 : 1; } //*********************************************************************** /** * Исключить человека из профсоюза сотрудников. * @author Коротков Д. * @param int $piPerson идентификатор человека * @param int $piEditor идентификатор человека, который производит исключение * @return boolean */ public function tradeUnionExclude($piPerson, $piEditor) { $bResult = false; $iDepartment = $this->tradeUnionDepartment(); if(!is_null($iDepartment)) { $oTradeUnionModel = new Trade_Union_Model(NULL, $piEditor); $bResult = $oTradeUnionModel->delete ( array ( Trade_Union_Model::FIELD_PERSON => $piPerson, Trade_Union_Model::FIELD_DEPARTMENT => $iDepartment ) ); } return $bResult; } /** * Включить человека в профсоюз сотрудников. * @author Коротков Д. * @param int $piPerson идентификатор человека * @param int $piEditor идентификатор человека, который производит включение * @return boolean */ public function tradeUnionInclude($piPerson, $piEditor) { $bResult = false; $aWorkers = $this->get_worker_by_org("", $piPerson); if(!empty($aWorkers)) { $iDepartment = $this->tradeUnionDepartment(); if(!is_null($iDepartment)) { $oTradeUnionModel = new Trade_Union_Model(NULL, $piEditor); $oTradeUnionModel->filter ( array ( Trade_Union_Model::FIELD_PERSON => $piPerson, Trade_Union_Model::FIELD_DEPARTMENT => $iDepartment ) ); $aMembers = $oTradeUnionModel->elements(); if(empty($aMembers)) { $bResult = $oTradeUnionModel->add ( array ( Trade_Union_Model::FIELD_PERSON => $piPerson, Trade_Union_Model::FIELD_DEPARTMENT => $iDepartment ) ); } else { $bResult = true; } } } return $bResult; } /** * Получить подразделение, ответственное за профсоюз сотрудников * @author Коротков Д. * @return mixed идентификатор подразделения или NULL, если подразделение не найдено */ public function tradeUnionDepartment() { $oSystemConstantModel = new System_Constant_Model(); $aDepartment = $oSystemConstantModel->elementByName('TRADE_UNION_WORKER_DEPARTMENT'); if(empty($aDepartment)) { $iDepartment = NULL; } else { $iDepartment = $aDepartment[System_Constant_Model::FIELD_VALUE]; } return $iDepartment; } /** *Получить все записи из справочника Dict выбрав по заданному полю, можно выбрать значения поля к качестве ключа * @author Сартисон И. * @param str $psIdDict - значение ID dict справочника * @param str $psField - имя свойства * @param str $psKey - необязательный параметр, имя свойства, которое мы хотим использовать в качестве ключа */ public function getAllbyField_Dict($psIdDict,$psField,$psKey = '') { $oDict = new Dict_Flat($this->db,$psIdDict); $aDict_result = array(); if (!empty($oDict)) { $aDict = $oDict->getAllRecords(); if (empty($psKey)) foreach ($aDict as $key) {$aDict_result[] = $key[$psField];} else foreach ($aDict as $key) { $Key_Dict_result = $key[$psKey]; if (!empty($Key_Dict_result)) $aDict_result[$Key_Dict_result] = $key[$psField]; } } return $aDict_result; } /** *Получить значение заданного свойсва из константы по PropName * @author Сартисон И. * @param $psPropName - значение PropName * @param $psFieldName - имя свойства из которого необходимо получить значение */ public function getConstantValueFromPropName($psPropName,$psFieldName) { $oSystemConstantModel = new System_Constant_Model(); $aDictTypeObject = $oSystemConstantModel->elementByName($psPropName); if (!empty($aDictTypeObject)) $sDictNTypeObjectValue = $aDictTypeObject[$psFieldName]; else $sDictNTypeObjectValue =''; return $sDictNTypeObjectValue; } /** * Получить список контактов для объекта * @author Сартисон И. * @param $paIdObject - массив id объектов для которого необходимо получить контакты(персона,аудитория,штатное место) * @param $psNameField - * @param $$psListTypeContact - массив типов контактов(PropName), по которым установить фильтр * @example descriptiongetListCotactsWorkers($aIdWorker,'id_person','WPHONE'); * @return $aCotactsWorkers - массив контактов * */ public function getListCotactsWorkers($paIdObject,$psNameField,$psListTypeContact='') { $oContactsModel = new Contact_Model(); $aDictTypePhone = new Dict_Flat($this->db,$this->sValueConstForTypeContacts); $this->aListIdTypeContecs = $this->getAllbyField_Dict($this->sValueConstForTypeContacts, 'id'); $this->aListIdTypeContecs1 = $this->getAllbyField_Dict($this->sValueConstForTypeContacts,'id','propname'); /* if ($a) print('true'); else print ('false'); */ /*$this->oContactsModel->join(Contact_Model::FIELD_TYPE, true); $oDictModel = $this->oContactsModel->foreignKeys()[Contact_Model::FIELD_TYPE]->toRelation(); $oDictModel->selectList(array()); $oDictModel->filter(array(System_Dictionary_Model::FIELD_CONSTANT_NAME => array('MPHONE')));*/ $oContactsModel->selectList // выбрать все контакты ( array ( Contact_Model::FIELD_VALUE, //Contact_Model::FIELD_OBJECT_ID, //Contact_Model::FIELD_OBJECT_TYPE_ID ) ); //$this->oContactsModel->foreignKeys()[Contact_Model::FIELD_TYPE] // ->toRelation() // ->selectList(array()); $aFilter = array ( Contact_Model::FIELD_OBJECT_ID => $paIdObject[$psNameField], Contact_Model::FIELD_VALUE => array('not'=>true, 'value'=>''), //если номер телефона заполнен //Contact_Model::FIELD_OBJECT_ID => $paWorkersId, Contact_Model::FIELD_OBJECT_TYPE_ID => $this->sValueObjPersonFromDict ); if (!empty($psListTypeContact)) { /* $aListTypeContact_ = explode(",",$psListTypeContact); foreach ($aListTypeContact_ as $key =>$val) { if ($aDictTypePhone->is_set($val)) $aListTypeContact[] = $val; }*/ $aListTypeContact_ = explode(",",$psListTypeContact); foreach ($aListTypeContact_ as $key) { $val = $key; if (isset($this->aListIdTypeContecs1[$val])) $aListTypeContact[] = $this->aListIdTypeContecs1[$val]; } //print_r($aListTypeContact); $aFilter[Contact_Model::FIELD_TYPE] = $aListTypeContact; } $oContactsModel->filter($aFilter); $aCotacts = $oContactsModel->elements(); return $aCotacts; } } ?>

Oops! Произошла ошибка