if (!defined('BASEPATH') || !defined('APPPATH')) exit('No direct script access allowed');
require_once APPPATH . 'models/orm/relation_model.php';
require_once APPPATH . 'models/istudent/learn_event_model.php';
/**
* Description of learn_status_model
*
* @author dik
*/
class Learn_Status_Model extends Relation_Model
{
const FIELD_ID_LEFT = 'menu_r';
const FIELD_ID_RIGHT = 'rec_n';
const FIELD_ID_FULL = 'id';
const FIELD_NAME = 'value';
const FIELD_ID_EVENT = 'event';
const FIELD_NAME_EVENT = 'event_name';
public function __construct()
{
$this->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
);
}
}
?>
if (!defined('BASEPATH') || !defined('APPPATH')) exit('No direct script access allowed');
require_once APPPATH . 'models/orm/relation_model.php';
/**
* Модель для работы с оценочными шкалами.
* @author Коротков Д.
*/
class User_Scale_Model extends Relation_Model
{
const FIELD_ID = 'id';
const FIELD_TYPE_DICT_ID = 'scale_dict_id';
const FIELD_TITLE = 'title';
const FIELD_TITLE2 = 'title2';
const FIELD_LEFT_BORDER = 'mark_min_base';
const FIELD_RIGHT_BORDER = 'mark_max_base';
const FIELD_SATISFACTORY = 'satisfactory';
/**
* Конструктор
*/
public function __construct()
{
parent::__construct();
$this->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;
}
}
?>
if (!defined('BASEPATH') || !defined('APPPATH')) exit('No direct script access allowed');
/**
* Модель для работы с профсоюзом
* @author Коротков Д.
*/
require_once 'trade_union_model.php';
/**
* Модель для работы с системными константами
* @author Коротков Д.
*/
require_once 'admin/system_constant_model.php';
require_once APPPATH .'models/admin/contact_model.php';
require_once APPPATH .'models/dictionary/worker_model.php';
require_once APPPATH .'models/dictionary/org_model.php';
/**
* Модель для сотрудников
* @version 1.0
* @package worker
* @author Саша-дипломнег
* @author Коротков Д.
* @author Завялова О.
*
* @todo полная замена модели на использование dictionary/worker_model
*
* @property CI_DB_active_record $db
*/
class mWorker extends CI_Model
{
protected $sValueObjPersonFromDict;
protected $sValueConstForTypeContacts;
//protected $aListIdTypeContecs;
//protected $aListIdTypeContecs1;
function __construct()
{
parent::__construct();
$this->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;
}
}
?>