query($sql);
static::$db = $pdo;
static::$user_agency_id = isset($_SESSION['agency_id']) ? $_SESSION['agency_id'] : 0;
static::$user_id = isset($_SESSION['id']) ? $_SESSION['id'] : 0;
static::$user = new User;
static::$client = new Clients;
if($default){
static::$defaulStatus = $this->getDefaultStatus();
}
if ($id && is_int($id))
{
$sql = static::$db->query(
"SELECT
complex_status.*,
csr.`booking_hour`,
csr.`booking_day`
FROM `complex_status`
LEFT JOIN complex_status_reservation AS csr ON csr.`complex_status_id` = complex_status.`id`
WHERE complex_status.`id` = $id
"
);
$complex_status = static::$db->fetch_assoc($sql);
if ($complex_status)
{
$this->id = $complex_status['id'];
$this->name = $complex_status['name'];
$this->status = $complex_status['status'];
$this->agency_id = $complex_status['agency_id'];
$this->color = $complex_status['color'];
$this->is_archive = $complex_status['is_archive'];
$this->booking_hour = $complex_status['booking_hour'];
$this->booking_day = $complex_status['booking_day'];
}
}
}
protected static function addEditReservation($status_id, $reservation)
{
if (!$reservation) return false;
$id = $status_id ? $status_id : $reservation->id;
$can_change_booking_queue = $reservation->can_change_booking_queue ? json_encode($reservation->can_change_booking_queue) : NULL;
// confirm
$managers_of_confirm_reservation_extension = $reservation->managers_of_confirm_reservation_extension ? json_encode($reservation->managers_of_confirm_reservation_extension) : NULL;
$employees_not_required_confirmation = $reservation->employees_not_required_confirmation ? json_encode($reservation->employees_not_required_confirmation) : NULL;
// unconfirm
$managers_of_unconfirm_reservation_extension = $reservation->managers_of_unconfirm_reservation_extension ? json_encode($reservation->managers_of_unconfirm_reservation_extension) : NULL;
$employees_not_required_unconfirmation = $reservation->employees_not_required_unconfirmation ? json_encode($reservation->employees_not_required_unconfirmation) : NULL;
if (static::getReservationByComplexStatusId($reservation->id))
{
$sql = "UPDATE `complex_status_reservation`
SET `booking_hour` = '{$reservation->booking_hour}',
`booking_day` = '{$reservation->booking_day}',
`reminder_hour` = '{$reservation->reminder_hour}',
`reminder_day` = '{$reservation->reminder_day}',
`booking_type` = '{$reservation->booking_type}',
`can_change_booking_queue` = '{$can_change_booking_queue}',
`specify_comment_confirm` = '{$reservation->specify_comment_confirm}',
`managers_of_confirm_reservation_extension` = '{$managers_of_confirm_reservation_extension}',
`employees_not_required_confirmation` = '{$employees_not_required_confirmation}',
`specify_comment_unconfirm` = '{$reservation->specify_comment_unconfirm}',
`managers_of_unconfirm_reservation_extension` = '{$managers_of_unconfirm_reservation_extension}',
`employees_not_required_unconfirmation` = '{$employees_not_required_unconfirmation}',
`reservation_extension` = '{$reservation->reservation_extension}'
WHERE `complex_status_id` = $id";
}
else
{
$sql = "INSERT INTO
`complex_status_reservation` (
`booking_hour`,
`booking_day`,
`reminder_hour`,
`reminder_day`,
`booking_type`,
`reservation_extension`,
`can_change_booking_queue`,
`specify_comment_confirm`,
`managers_of_confirm_reservation_extension`,
`employees_not_required_confirmation`,
`specify_comment_unconfirm`,
`managers_of_unconfirm_reservation_extension`,
`employees_not_required_unconfirmation`,
`complex_status_id`
)
VALUES (
'{$reservation->booking_hour}',
'{$reservation->booking_day}',
'{$reservation->reminder_hour}',
'{$reservation->reminder_day}',
'{$reservation->booking_type}',
'{$reservation->reservation_extension}',
'{$can_change_booking_queue}',
'{$reservation->specify_comment_confirm}',
'{$managers_of_confirm_reservation_extension}',
'{$employees_not_required_confirmation}',
'{$reservation->specify_comment_unconfirm}',
'{$managers_of_unconfirm_reservation_extension}',
'{$employees_not_required_unconfirmation}',
$id
)";
}
static::$db->query($sql);
return true;
}
public static function getReservationById($id)
{
$sql = static::$db->query("SELECT * FROM `complex_status_reservation` WHERE `id` = $id");
if ($sql)
{
return static::$db->fetch_assoc($sql);
}
return null;
}
public static function getReservationByComplexStatusId($complex_status_id)
{
$sql = static::$db->query("SELECT * FROM `complex_status_reservation` WHERE `complex_status_id` = $complex_status_id");
if ($sql)
{
return static::$db->fetch_assoc($sql);
}
return null;
}
protected static function removeReservationByStatusComplexId($complex_status_id)
{
$sql = "UPDATE `complex_status_reservation`
SET `booking_hour` = NULL,
`booking_day` = NULL,
`reminder_hour` = NULL,
`reminder_day` = NULL,
`booking_type` = 'constant'
WHERE `complex_status_id` = $complex_status_id";
static::$db->query($sql);
return true;
}
public static function checkStatusInherit($complex_status_id, $status = '')
{
if ($complex_status_id) {
$statusInherit = static::$db->query("SELECT id FROM `complex_status` WHERE `id` = $complex_status_id AND status = '{$status}'");
}
return $statusInherit ? true : false;
}
public static function addEditEventsClinetsExtensionReservation($complex_status_id, $user_id, $client_id, $req_id, $from_id)
{
$reservation = static::getReservationByComplexStatusId($complex_status_id);
$client = static::$client->get($client_id);
if ((bool)$reservation['reservation_extension'] === false) return false;
if ($reservation['id'] && $user_id && $client_id && $req_id && $from_id) {
$dop_text = "Истекло время бронирования по заявке ID $req_id, " . $client->fio . ". Продлить бронь?";
$events_cilent = static::$db->fetch_assoc(static::$db->query("SELECT * FROM `events_clients` WHERE `req_id` = $req_id AND `from_id` = $from_id AND `event` = 'extension_reservation_$reservation[id]'"));
if (!empty($events_cilent)) {
$now = new DateTime("now");
static::$db->query("UPDATE `events_clients` SET `user_id` = $user_id, `client_id` = $client_id, `req_id` = $req_id, `from_id` = $from_id, `read` = 0, `date_update` = '" . $now->format('Y-m-d H:i:s') . "' WHERE `id` = " . $events_cilent['id']);
} else {
static::$db->query("INSERT INTO `events_clients` (
`user_id`,
`client_id`,
`req_id`,
`from_id`,
`event`,
`dop_text`
)
VALUES (
$user_id,
$client_id,
$req_id,
$from_id,
'extension_reservation_$reservation[id]',
'{$dop_text}')
");
}
}
return false;
}
public static function extesionReservation($type, $event_id, $comment)
{
$event_sql = static::$db->query("SELECT * FROM `events_clients` WHERE `id` = $event_id");
if ($event_sql)
{
$event = static::$db->fetch_assoc($event_sql);
$client_id = $event['client_id'];
$req_id = $event['req_id'];
$user_id = static::$user_id;
$user = static::$db->fetch_assoc(static::$db->query("SELECT * FROM `users` WHERE `id` = " . $user_id));
$fio = trim($user['last_name'] . ' ' . $user['first_name'] );
$csr_id = (int)explode('extension_reservation_', $event['event'])[1];
$reservation = static::$db->fetch_assoc(static::$db->query("SELECT * FROM `complex_status_reservation` WHERE `id` = $csr_id"));
$complex_status = static::$db->fetch_assoc(static::$db->query("SELECT * FROM `complex_status` WHERE `id` = " . $reservation['complex_status_id']));
$requisition = static::$db->fetch_assoc(static::$db->query("SELECT `who_work`, `complex_room_id` FROM `requisitions` WHERE `id` = $req_id"));
$m_confirm_re_ids = json_decode($reservation['managers_of_confirm_reservation_extension']);
$m_unconfirm_re_ids = json_decode($reservation['managers_of_unconfirm_reservation_extension']);
$er_confirmation_ids = json_decode($reservation['employees_not_required_confirmation']);
$er_unconfirmation_ids = json_decode($reservation['employees_not_required_unconfirmation']);
$text = null;
$text_telegram = null;
$events_clients_list = [];
static::$db->query("UPDATE `requisitions` SET `er_is_interrupted` = 1 WHERE `id` = $req_id");
if ($type === 'confirm')
{
$dop_text = "Сотрудник $fio запросил продление брони: " . $complex_status['name'] . ".";
$text = "Сотрудник $fio ";
if (!in_array($user_id, $er_confirmation_ids) && !in_array($user_id, $m_confirm_re_ids))
{
$text_telegram = $text . "запросил продление брони по заявке ID $req_id.";
$text .= "запросил продление брони. Отправлен запрос на продление.";
$events_clients_list = $m_confirm_re_ids;
}
else
{
$new_reservation_date = new DateTime("now");
$change_reservation_updated_at = $new_reservation_date->format('Y-m-d H:i:s');
$format_date = new DateTime("now");
$format_date = $format_date->modify('+' . $reservation['booking_day'] . ' day');
$format_date = $format_date->modify('+' . $reservation['booking_hour'] . ' hour');
$format_date = $format_date->format('d.m.Y H:i:s');
$text = "Бронь продлена до " . $format_date;
$text_telegram = $text . "продлил бронь.";
static::$db->query("UPDATE `requisitions` SET `reservation_updated_at` = '{$change_reservation_updated_at}', `is_interrupted` = 0, `er_is_interrupted` = 0 WHERE `id` = $req_id");
}
if ((bool)$reservation['specify_comment_confirm'] === true)
{
$dop_text .= "
Комментарий: " . $comment;
$text .= "
Комментарий: " . $comment;
$text_telegram .= "
Комментарий: " . $comment;
}
$event_column = 'ext_confirming_res_' . $csr_id;
}
else if ($type === 'unconfirm')
{
$dop_text = "Сотрудник $fio запросил отмену брони: " . $complex_status['name'] . ".";
$text = "Сотрудник $fio ";
if (!in_array($user_id, $er_unconfirmation_ids) && !in_array($user_id, $m_unconfirm_re_ids))
{
$text_telegram = $text . "запросил отмену брони по заявке ID $req_id.";
$text .= "запросил отмену брони. Отправлен запрос на отмену брони.";
$events_clients_list = $m_unconfirm_re_ids;
}
else
{
$text .= "отменил бронь.";
$text_telegram = $text . "отменил бронь.";
static::updateRoomsStatus(['new_status_id' => 4, 'status_id' => $reservation['complex_status_id'], 'complex_room_id' => $requisition['complex_room_id']], false, false);
}
if ((bool)$reservation['specify_comment_unconfirm'] === true)
{
$dop_text .= "
Комментарий: " . $comment;
$text .= "
Комментарий: " . $comment;
$text_telegram .= "
Комментарий: " . $comment;
}
$event_column = 'ext_unconfirming_res_' . $csr_id;
}
else
{
return false;
}
$dop_text = removeAllWhitespaceIncludingNbsp($dop_text);
$text = removeAllWhitespaceIncludingNbsp($text);
$now = new DateTime("now");
$create_date = $now->format('Y-m-d H:i:s');
if (count($events_clients_list) > 0)
{
foreach ($events_clients_list as $mre_id)
{
static::$db->query("INSERT INTO `events_clients` (
`user_id`,
`client_id`,
`req_id`,
`from_id`,
`event`,
`dop_text`,
`date`
)
VALUES (
$user_id,
$client_id,
$req_id,
$mre_id,
'{$event_column}',
'{$dop_text}',
'{$create_date}'
)");
$telegramm_chat_id = static::$db->fetch_assoc(static::$db->query("SELECT `telegramm_chat_id` FROM `users` WHERE `id` = $mre_id"))['telegramm_chat_id'];
if($telegramm_chat_id > 0)
{
try
{
$TELEGRAM_TOKEN = '793676666:AAGFo66CjsmO2KxZVRwQbH8pLTvenpsHiHI';
require_once $_SERVER['DOCUMENT_ROOT'] . "/telegramm/vendor/autoload.php";
header('Content-Type: application/json');
$telegram_bot = new \TelegramBot\Api\Client($TELEGRAM_TOKEN);
$telegram_bot->sendMessage($telegramm_chat_id, htmlToTelegramMarkdown($text_telegram), 'markdown');
}
catch (Exception $e)
{
(new Logger())->error($e->getMessage());
}
}
}
}
static::$db->query("INSERT INTO `user_client_events` (
`user_id`,
`req_id`,
`client_id`,
`type`,
`comment`,
`from_id`,
`create_date`
)
VALUES (
$user_id,
$req_id,
$client_id,
'comment',
'{$text}',
$requisition[who_work],
'{$create_date}'
)
");
static::$db->query("UPDATE `events_clients` SET `read` = 1, `date_update` = '{$create_date}' WHERE `id` = $event_id");
return [
'client_id' => $client_id,
'req_id' => $req_id
];
}
return false;
}
public static function employeeExtesionReservation($type, $event_id, $comment)
{
$event_sql = static::$db->query("SELECT * FROM `events_clients` WHERE `id` = $event_id");
if ($event_sql && $type)
{
$event = static::$db->fetch_assoc($event_sql);
$event_type = preg_split("/_res_|ext_/", $event['event']);
$event_type_status = (string)$event_type[1];
$csr_id = (int)$event_type[2];
$req_id = $event['req_id'];
$client_id = $event['client_id'];
$user_id = static::$user_id;
$reservation = static::$db->fetch_assoc(static::$db->query("SELECT * FROM `complex_status_reservation` WHERE `id` = $csr_id"));
$requisition = static::$db->fetch_assoc(static::$db->query("SELECT `who_work`, `complex_room_id` FROM `requisitions` WHERE `id` = $req_id"));
$m_confirm_re_ids = json_decode($reservation['managers_of_confirm_reservation_extension']);
$m_unconfirm_re_ids = json_decode($reservation['managers_of_unconfirm_reservation_extension']);
$events_clients_list = ($event_type_status == 'confirming') ? $m_confirm_re_ids : $m_unconfirm_re_ids;
$user = static::$db->fetch_assoc(static::$db->query("SELECT * FROM `users` WHERE `id` = " . $user_id));
$fio = trim($user['last_name'] . ' ' . $user['first_name'] );
$text = null;
$text_telegram = null;
$new_reservation_date = new DateTime("now");
$change_reservation_updated_at = $new_reservation_date->format('Y-m-d H:i:s');
$format_date = new DateTime("now");
$format_date = $format_date->modify('+' . $reservation['booking_day'] . ' day');
$format_date = $format_date->modify('+' . $reservation['booking_hour'] . ' hour');
$format_date = $format_date->format('d.m.Y H:i:s');
if ($type == 'confirming')
{
if ($type == $event_type_status)
{
$text = "Бронь продлена до " . $format_date;
$text_telegram = "Сотрудник $fio подтвердил продление брони по заявке ID $req_id.";
static::$db->query("UPDATE `requisitions` SET `reservation_updated_at` = '$change_reservation_updated_at', `is_interrupted` = 0, `er_is_interrupted` = 0 WHERE `id` = $req_id");
}
else
{
$text = "Бронь не продлена.";
$text_telegram = "Сотрудник $fio подтвердил отмену брони по заявке ID $req_id.";
static::updateRoomsStatus(['new_status_id' => 4, 'status_id' => $reservation['complex_status_id'], 'complex_room_id' => $requisition['complex_room_id']], false, false);
}
}
else if ($type == 'unconfirming')
{
if ($type == $event_type_status)
{
$text = "Бронь продлена до " . $format_date;
$text_telegram = "Сотрудник $fio отказал в отмене брони по заявке ID $req_id.";
static::$db->query("UPDATE `requisitions` SET `reservation_updated_at` = '$change_reservation_updated_at', `is_interrupted` = 0, `er_is_interrupted` = 0 WHERE `id` = $req_id");
}
else
{
$text = "Отказано в продлении брони.";
$text_telegram = "Сотрудник $fio отказал продление брони по заявке ID $req_id.";
static::updateRoomsStatus(['new_status_id' => 4, 'status_id' => $reservation['complex_status_id'], 'complex_room_id' => $requisition['complex_room_id']], false, false);
}
$events_clients_list = $m_unconfirm_re_ids;
}
else
{
return false;
}
$text_telegram .= $comment ? ("
Комментарий: " . $comment) : '';
if ($requisition['who_work'])
{
$telegramm_chat_id = static::$db->fetch_assoc(static::$db->query("SELECT `telegramm_chat_id` FROM `users` WHERE `id` = " . $requisition['who_work']))['telegramm_chat_id'];
}
if($telegramm_chat_id > 0)
{
try
{
$TELEGRAM_TOKEN = '793676666:AAGFo66CjsmO2KxZVRwQbH8pLTvenpsHiHI';
require_once $_SERVER['DOCUMENT_ROOT'] . "/telegramm/vendor/autoload.php";
header('Content-Type: application/json');
$telegram_bot = new \TelegramBot\Api\Client($TELEGRAM_TOKEN);
$telegram_bot->sendMessage($telegramm_chat_id, htmlToTelegramMarkdown($text_telegram), 'markdown');
}
catch (Exception $e)
{
(new Logger())->error($e->getMessage());
}
}
if (count($events_clients_list) > 0)
{
foreach ($events_clients_list as $mre_id)
{
static::$db->query("UPDATE `events_clients`
SET
`read` = 1
WHERE
`req_id` = $req_id
AND `from_id` = $mre_id
AND `event` = '$event[event]'"
);
}
}
$text .= $comment ? ("
Комментарий: " . $comment) : '';
$text = removeAllWhitespaceIncludingNbsp($text);
$now = new DateTime("now");
$create_date = $now->format('Y-m-d H:i:s');
static::$db->query("INSERT INTO `user_client_events` (
`user_id`,
`req_id`,
`client_id`,
`type`,
`comment`,
`from_id`,
`create_date`
)
VALUES (
$user_id,
$req_id,
$client_id,
'comment',
'{$text}',
$user_id,
'{$create_date}'
)
");
return [
'client_id' => $client_id,
'req_id' => $req_id
];
}
return false;
}
public static function getComplexStatusReservations($colums = ['*'])
{
$sql = "SELECT " . implode(',', $colums) . " FROM `complex_status_reservation`";
if ($res = static::$db->query($sql))
{
$complex_status_reservation = array();
while($cs = static::$db->fetch_assoc($res))
{
$complex_status_reservation[] = $cs;
}
return $complex_status_reservation;
}
return null;
}
public static function getDefaultStatus()
{
$sql = "SELECT * FROM `complex_status` WHERE `agency_id` IS NULL";
if ($res = static::$db->query($sql))
{
$complex_status = array();
while($cs = static::$db->fetch_assoc($res))
{
$complex_status[] = $cs;
}
return $complex_status;
}
return null;
}
public static function getDefaultStatusStatus($status_type)
{
$result = null;
$defaultStatus = self::$defaulStatus;
foreach($defaultStatus as $status){
if($status_type == $status['status']){
$result = $status;
}
}
return $result;
}
public static function getAllComplexStatus($is_archive = 0)
{
$agency_id = static::$user_agency_id;
$sql = "SELECT complex_status.*,
csr.booking_type,
csr.booking_hour,
csr.booking_day,
csr.reminder_hour,
csr.reminder_day,
csr.reservation_extension,
csr.can_change_booking_queue,
csr.specify_comment_confirm,
csr.managers_of_confirm_reservation_extension,
csr.employees_not_required_confirmation,
csr.specify_comment_unconfirm,
csr.managers_of_unconfirm_reservation_extension,
csr.employees_not_required_unconfirmation
FROM complex_status
LEFT JOIN complex_status_reservation csr ON complex_status.id = csr.complex_status_id
WHERE `agency_id` = $agency_id AND `is_archive` = $is_archive
";
if ($res = static::$db->query($sql))
{
$complex_status = array();
while($cs = static::$db->fetch_assoc($res))
{
$cs['reservation_extension'] = (bool)$cs['reservation_extension'];
$cs['specify_comment_confirm'] = (bool)$cs['specify_comment_confirm'];
$cs['specify_comment_unconfirm'] = (bool)$cs['specify_comment_unconfirm'];
$cs['can_change_booking_queue'] = json_decode($cs['can_change_booking_queue']);
$cs['managers_of_confirm_reservation_extension'] = json_decode($cs['managers_of_confirm_reservation_extension']);
$cs['employees_not_required_confirmation'] = json_decode($cs['employees_not_required_confirmation']);
$cs['managers_of_unconfirm_reservation_extension'] = json_decode($cs['managers_of_unconfirm_reservation_extension']);
$cs['employees_not_required_unconfirmation'] = json_decode($cs['employees_not_required_unconfirmation']);
$complex_status[] = $cs;
}
return $complex_status;
}
return null;
}
public static function getAllArchiveComplexStatus()
{
return static::getAllComplexStatus(1);
}
public static function getById($id)
{
$sql = static::$db->query("SELECT * FROM `complex_status` WHERE `id` = $id");
if ($sql)
{
return static::$db->fetch_assoc($sql);
}
return null;
}
public static function getComplexStatus()
{
if (static::$user_agency_id)
{
return array_merge(static::getDefaultStatus(), static::getAllComplexStatus());
}
return static::getDefaultStatus();
}
public static function editAdd($status)
{
$agency_id = static::$user_agency_id;
if (!$status || !$agency_id) return false;
if(static::getById($status->id))
{
$sql = "UPDATE complex_status
SET
`name` = '{$status->name}',
`status` = '{$status->status}',
`color` = '{$status->color}'
WHERE `id` = $status->id AND `agency_id` = $agency_id";
}
else {
$sql = "INSERT INTO complex_status (`name`, `status`, `color`, `agency_id`)
VALUES ('{$status->name}', '{$status->status}', '{$status->color}', $agency_id)";
}
static::$db->query($sql);
if ($status->booking_type == 'temporary')
{
static::addEditReservation(static::$db->insert_id(), $status);
}
else
{
static::removeReservationByStatusComplexId($status->id);
}
return true;
}
public static function updateRoomsStatus($data, $change_req_status_id = true, $complex_status_to_archive = true)
{
if (!count($data)) return false;
$data = is_array($data) ? (object)$data : $data;
$sql = "UPDATE `complex_rooms` SET `complex_status_id` = $data->new_status_id";
$sql .= $data->status_id ? " WHERE `complex_status_id` = $data->status_id" : "";
if ($data->complex_room_id && $data->status_id)
{
$sql .= " AND `id` = $data->complex_room_id";
}
else if($data->complex_room_id)
{
$sql .= " WHERE `id` = $data->complex_room_id";
}
static::$db->query($sql);
if ($change_req_status_id === true)
{
$sql = "UPDATE `requisitions` SET `complex_status_id` = $data->new_status_id WHERE `complex_status_id` = $data->status_id";
$sql .= $data->complex_room_id ? " AND `complex_room_id` = $data->complex_room_id" : "";
static::$db->query($sql);
}
if ($complex_status_to_archive === true)
{
static::recoverOrToArchive($data->status_id, 1);
}
return true;
}
public static function recoverOrToArchive($status_id, $status)
{
if (!$status_id || !static::$user_agency_id || !static::getById($status_id)) return false;
if ($status == 1) {
$complex = new Complex();
$existedRoomsCount = $complex->getRoomsCountByStatusId($status_id);
if ($existedRoomsCount['count']) {
http_response_code(422);
echo json_encode([
"status" => false,
"error" => [
"rooms_count" => $existedRoomsCount['count'],
]
]);
exit;
}
}
$sql = "UPDATE `complex_status` SET `is_archive` = $status WHERE `id` = $status_id";
static::$db->query($sql);
return true;
}
public static function delete($id)
{
$agency_id = static::$user_agency_id;
if (!$agency_id) return false;
$sql = "DELETE FROM `complex_status` WHERE `id` = $id AND `agency_id` = $agency_id";
static::$db->query($sql);
return true;
}
public static function getEmployeesAndManagers()
{
$agency_id = static::$user_agency_id;
$depClass = new Department();
$departments = $depClass->getDepartments();
$result = array();
static::$user->get($agency_id);
$usersArr[] = $agency_id;
$agency = static::$db->fetch_assoc(static::$db->query("SELECT * FROM `users` WHERE `id` = $agency_id AND `blocked` = 0"));
$result[] = array('id' => $agency_id, 'fio' => htmlspecialchars_decode(trim($agency['last_name'] . ' ' . $agency['first_name'] . ' ' . $agency['middle_name']).' (руководитель)'));
if(static::$user->agency)
{
$agentsOfAgency = User::getAllAgents(static::$user->agencyId);
$agentsOfManager = User::getAllManagers(static::$user->agencyId);
}
else if (static::$user->manager)
{
$agentsOfAgency = User::getAllAgents($userId);
}
else if (static::$user->id_manager)
{
$agentsOfAgency = User::getAllAgents(static::$user->id_manager);
$agentsOfManager = array();
while($manager = static::$db->fetch_assoc(static::$db->query("SELECT * FROM `users` WHERE `manager` = 1 AND `id` = " . static::$user->id_manager . " AND `blocked` = 0"))) $agentsOfManager[] = $manager;
}
if($agentsOfManager)
{
foreach($agentsOfManager as $mngr)
{
if(!in_array($mngr['id'], $usersArr)){
$usersArr[] = $mngr['id'];
if($mngr['role_id'] > 0){
$result[] = array('id' => (int)$mngr['id'], 'fio' => htmlspecialchars_decode(trim($mngr['last_name'] . ' ' . $mngr['first_name'] . ' ' . $mngr['middle_name']).' ('.$departments[$mngr['role_id']]['role_name'].' '.$departments[$mngr['role_id']]['dep_name'].')'));
} else {
$result[] = array('id' => (int)$mngr['id'], 'fio' => htmlspecialchars_decode(trim($mngr['last_name'] . ' ' . $mngr['first_name'] . ' ' . $mngr['middle_name']).' (менеджер)'));
}
}
if((int)$mngr['role_id'] > 0 && (int)$mngr['department_id'] > 0)
{
$role_user = $depClass->getRole((int)$mngr['role_id']);
if($role_user['role'] == 'admin_department')
{
$menagerDep = static::$user->getDepManagers($role_user['department_id']);
foreach($menagerDep as $md)
{
if(!in_array($md['id'], $usersArr))
{
$usersArr[] = $md['id'];
$result[] = array('id' => (int)$md['id'], 'fio' => htmlspecialchars_decode(trim($md['last_name'] . ' ' . $md['first_name'] . ' ' . $md['middle_name']).' ('.$departments[$md['role_id']]['role_name'].' '.$departments[$md['role_id']]['dep_name'].')'));
}
$thisAgents = static::$user->getAgentsOfAgency($md['id'], true);
foreach($thisAgents as $da)
{
if (!in_array($da['id'], $usersArr))
{
$usersArr[] = $da['id'];
$result[] = array('id' => (int)$da['id'], 'fio' => htmlspecialchars_decode(trim($da['last_name'] . ' ' . $da['first_name'] . ' ' . $da['middle_name']).' ('.$departments[$da['role_id']]['role_name'].' '.$departments[$da['role_id']]['dep_name'].')'));
}
}
}
}
}
}
}
if($agentsOfAgency)
{
foreach($agentsOfAgency as $agent)
{
if (!in_array($agent['id'], $usersArr))
{
$usersArr[] = $agent['id'];
if($agent['role_id'] > 0){
$result[] = array('id' => (int)$agent['id'], 'fio' => htmlspecialchars_decode(trim($agent['last_name'] . ' ' . $agent['first_name'] . ' ' . $agent['middle_name']).' ('.$departments[$agent['role_id']]['role_name'].' '.$departments[$agent['role_id']]['dep_name'].')'));
} else {
$result[] = array('id' => (int)$agent['id'], 'fio' => htmlspecialchars_decode(trim($agent['last_name'] . ' ' . $agent['first_name'] . ' ' . $agent['middle_name']).' (агент)'));
}
}
}
}
return $result;
}
}