Joywork/ajax/calendarCharts.php

960 lines
36 KiB
PHP
Raw Permalink Normal View History

2026-05-22 20:21:54 +02:00
<?php
require_once($_SERVER['DOCUMENT_ROOT'] . "/config.php");
$start = microtime(true);
$cl = new Clients();
$usersArr = json_decode($_POST['responsible'], true);
2026-07-02 07:12:13 +02:00
2026-05-22 20:21:54 +02:00
$usersId = $cl -> getUsersFilter($usersArr, $_POST['user_id'], $_POST['users_admin']);
2026-07-02 07:12:13 +02:00
$gmtmsk = get_time_zone_user();
$time_zone = '';
2026-05-22 20:21:54 +02:00
2026-07-02 07:12:13 +02:00
if($gmtmsk >= 0){
$time_zone = '+'.$gmtmsk.' hour';
} else {
$time_zone = '-'.$gmtmsk.' hour';
}
2026-05-22 20:21:54 +02:00
2026-07-02 07:12:13 +02:00
$this_datetime = ($time_zone == '') ? date("Y-m-d H:i:s") : date("Y-m-d H:i:s", strtotime($time_zone));
2026-05-22 20:21:54 +02:00
2026-07-02 07:12:13 +02:00
$where = '';
$whereObj = '';
if(isset($_POST['tasks'])){
$view = $_POST['tasks'];
}
/* if($view == 'open_tasks'){
$where = " AND e.calendar_view = 0 AND DATE_FORMAT(schedule_date, '%Y-%m-%d %H:%i:%s') >= '".date("Y-m-d H:i:s")."'";
} else if($view == 'overdue_tasks'){
$where = " AND calendar_view = 0 AND DATE_FORMAT(schedule_date, '%Y-%m-%d %H:%i:%s') < '".date("Y-m-d H:i:s")."'";
} else if($view == 'completed_tasks'){
$where = " AND calendar_view = 1";
}*/
2026-05-22 20:21:54 +02:00
2026-07-02 07:12:13 +02:00
if($view == 'open_tasks'){
$where = " AND e.calendar_view = 0 AND DATE_FORMAT(e.schedule_date, '%Y-%m-%d %H:%i:%s') >= '".$this_datetime."'";
} else if($view == 'overdue_tasks'){
$where = " AND e.calendar_view = 0 AND DATE_FORMAT(e.schedule_date, '%Y-%m-%d %H:%i:%s') < '".$this_datetime."'";
} else if($view == 'completed_tasks'){
$where = " AND e.calendar_view = 1";
}
2026-05-22 20:21:54 +02:00
2026-07-02 07:12:13 +02:00
if(isset($_POST['event'])){
$where .= " AND `e`.`type` = '".$_POST['event']."'";
}
2026-05-22 20:21:54 +02:00
2026-07-02 07:12:13 +02:00
$whereObj = $where;
//printf($_POST);
$_SESSION['filter_emp'] = $_POST['responsible'];
$bd_usl_managers = '';
$bd_doers = '';
$bd_usl = '';
$arrIdUser = array();
$arrIdAgent = array();
foreach($usersId as $userId){
$arrIdUser[] = "who_work = $userId";
$arrIdAgent[] = "id_agent = $userId";
}
$period = 'all';
$whereTasks = "";
$bd_piriod = '';
$bd_do_period = '';
$eobj = true;
$isReq = false;
$table = "clients";
$dateAdd = "date_add";
$ecl = true;
$eall = false;
if(isset($_POST['type_calendar'])){
if($_POST['type_calendar'] == 'client' || $_POST['type_calendar'] == 'req'){
2026-05-22 20:21:54 +02:00
$eobj = false;
if($_POST['type_calendar'] == 'req'){
$isReq = true;
}
2026-07-02 07:12:13 +02:00
}
if($_POST['type_calendar'] == 'object'){
2026-05-22 20:21:54 +02:00
$ecl = false;
}
2026-07-02 07:12:13 +02:00
} else {
$eall = true;
}
if($_POST['period']){
$period = $_POST['period'];
$onDate = $_POST['start'];
$offDate = $_POST['end'];
}
else {
unset($_SESSION['client_period']);
}
$dates = getPeriod($period, $onDate, $offDate);
$date_between = $dates['between'];
$whereTasks = $dates['whereTasks'];
$date_add = 'date_add';
if($isReq){
$table = 'requisitions';
$date_add = 'created_at';
$agentId = 'user_id as id_agent';
$period = 'all';
$whereTasks = "";
2026-05-22 20:21:54 +02:00
if($_POST['period']){
$period = $_POST['period'];
}
2026-07-02 07:12:13 +02:00
$dates = getPeriod($period,$_POST['onDate'],$_POST['offDate']);
2026-05-22 20:21:54 +02:00
$date_between = $dates['between'];
$whereTasks = $dates['whereTasks'];
2026-07-02 07:12:13 +02:00
$bd_piriod = " AND created_at ".$date_between;
$bd_do_period = " AND created_at < '".$dates['dateStart']."'";
}
2026-05-22 20:21:54 +02:00
2026-07-02 07:12:13 +02:00
if(isset($_POST['charts_type'])){
$typesArr = json_decode(html_entity_decode($_POST['charts_type']), ENT_QUOTES);
if(!empty($typesArr)){
$typeArr = array();
foreach($typesArr as $typeCl){
$typeArr[] = "work_type like '%&quot;{$typeCl}&quot;%'";
2026-05-22 20:21:54 +02:00
}
2026-07-02 07:12:13 +02:00
$bd_usl .= " AND (".implode(" OR ",$typeArr).")";
2026-05-22 20:21:54 +02:00
}
2026-07-02 07:12:13 +02:00
$_SESSION['filter_client_type'] = $_POST['charts_type'];
} else {
unset($_SESSION['filter_client_type']);
}
$part_task = '';
2026-05-22 20:21:54 +02:00
2026-07-02 07:12:13 +02:00
if($isReq){
if (isset($_POST['charts_activities']) && !empty($_POST['charts_activities']) && $_POST['charts_activities'] != 'null') {
$activitiesArr = json_decode(html_entity_decode($_POST['charts_activities']), ENT_QUOTES);
$bd_usl .= " AND `id` IN (
2026-05-22 20:21:54 +02:00
SELECT req_id FROM requisitions_activities
WHERE activity_id IN (" . implode(", ", $activitiesArr) . ")
)";
2026-07-02 07:12:13 +02:00
$_SESSION['filter_activities'] = $_POST['charts_activities'];
} else {
unset($_SESSION['filter_activities']);
2026-05-22 20:21:54 +02:00
}
2026-07-02 07:12:13 +02:00
} else {
2026-05-22 20:21:54 +02:00
2026-07-02 07:12:13 +02:00
if (isset($_POST['charts_activities']) && !empty($_POST['charts_activities']) && $_POST['charts_activities'] != 'null') {
2026-05-22 20:21:54 +02:00
$activitiesArr = json_decode(html_entity_decode($_POST['charts_activities']), ENT_QUOTES);
$bd_usl .= " AND id IN (
2026-07-02 07:12:13 +02:00
SELECT client_id FROM clients_activities
WHERE activity_id IN (" . implode(", ", $activitiesArr) . ")
)";
2026-05-22 20:21:54 +02:00
$_SESSION['filter_activities'] = $_POST['charts_activities'];
} else {
unset($_SESSION['filter_activities']);
2026-07-02 07:12:13 +02:00
}
}
2026-05-22 20:21:54 +02:00
2026-07-02 07:12:13 +02:00
/*if (isset($_POST['charts_activities']) && !empty($_POST['charts_activities']) && $_POST['charts_activities'] != 'null') {
$activitiesArr = json_decode(html_entity_decode($_POST['charts_activities']), ENT_QUOTES);
$bd_usl .= " AND id IN (
SELECT client_id FROM clients_activities
WHERE activity_id IN (" . implode(", ", $activitiesArr) . ")
)";
$_SESSION['filter_activities'] = $_POST['charts_activities'];
} else {
unset($_SESSION['filter_activities']);
}*/
if (isset($_POST['charts_activities']) && !empty($_POST['charts_activities']) && $_POST['charts_activities'] != 'null') {
$activitiesArr = json_decode(html_entity_decode($_POST['charts_activities']), ENT_QUOTES);
$part_task .= " AND req_id IN (
2026-05-22 20:21:54 +02:00
SELECT req_id FROM requisitions_activities
WHERE activity_id IN (" . implode(", ", $activitiesArr) . "))";
2026-07-02 07:12:13 +02:00
}
if(isset($_POST['charts_objects_type'])){
$typesArr = json_decode(html_entity_decode($_POST['charts_objects_type']), ENT_QUOTES);
if(!empty($typesArr)){
$typeArr = array();
foreach($typesArr as $typeCl){
$typeArr[] = "`type` like '%&quot;{$typeCl}&quot;%'";
2026-05-22 20:21:54 +02:00
}
2026-07-02 07:12:13 +02:00
$bd_usl .= " AND (".implode(" OR ",$typeArr).")";
2026-05-22 20:21:54 +02:00
}
2026-07-02 07:12:13 +02:00
$_SESSION['filter_client_objects_type'] = $_POST['charts_objects_type'];
} else {
unset($_SESSION['filter_client_objects_type']);
}
2026-05-22 20:21:54 +02:00
2026-07-02 07:12:13 +02:00
if(isset($_POST['charts_rol'])){
$rolesArr = json_decode(html_entity_decode($_POST['charts_rol']), ENT_QUOTES);
if(!empty($rolesArr)){
$sroleArr = array();
foreach($rolesArr as $roleCl){
$roleArr[] = "`role` like '%&quot;{$roleCl}&quot;%'";
2026-05-22 20:21:54 +02:00
}
2026-07-02 07:12:13 +02:00
$bd_usl .= " AND (".implode(" OR ",$roleArr).")";
2026-05-22 20:21:54 +02:00
}
2026-07-02 07:12:13 +02:00
$_SESSION['filter_client_rol'] = $_POST['charts_rol'];
} else {
unset($_SESSION['filter_client_rol']);
}
2026-05-22 20:21:54 +02:00
2026-07-02 07:12:13 +02:00
if(isset($_POST['source'])){
$sourcesArr = json_decode(html_entity_decode($_POST['source']), ENT_QUOTES);
$sourceArr = array();
if(!empty($sourcesArr )){
foreach($sourcesArr as $sourceCl){
if($sourceCl == 0){
$sourceArr[] = "`source` is null";
$sourceArr[] = "`source` = ''";
$sourceArr[] = "`source` = 'null'";
2026-05-22 20:21:54 +02:00
} else {
2026-07-02 07:12:13 +02:00
$sourceArr[] = "`source` = '{$sourceCl}'";
2026-05-22 20:21:54 +02:00
}
}
2026-07-02 07:12:13 +02:00
$bd_usl .= " AND (".implode(" OR ",$sourceArr).")";
2026-05-22 20:21:54 +02:00
2026-07-02 07:12:13 +02:00
$_SESSION['filter_source'] = $_POST['source'];
} else {
unset($_SESSION['filter_source']);
2026-05-22 20:21:54 +02:00
}
2026-07-02 07:12:13 +02:00
} else {
unset($_SESSION['filter_source']);
}
2026-05-22 20:21:54 +02:00
2026-07-02 07:12:13 +02:00
if(isset($_POST['funnel']) && $_POST['funnel'] != 'all'){
$funnelArr = json_decode(html_entity_decode($_POST['funnel']), ENT_QUOTES);
2026-05-22 20:21:54 +02:00
2026-07-02 07:12:13 +02:00
if(!empty($funnelArr)){
if(is_array($funnelArr))
$bd_usl .= " AND funnel_id in (".implode(', ',$funnelArr).")";
else
$bd_usl .= " AND funnel_id in ({$funnelArr})";
2026-05-22 20:21:54 +02:00
}
2026-07-02 07:12:13 +02:00
}
2026-05-22 20:21:54 +02:00
2026-07-02 07:12:13 +02:00
if(isset($_POST['step'])){
$step = (int)$_POST['step'];
$bd_usl .= " AND step_id = $step";
}
2026-05-22 20:21:54 +02:00
2026-07-02 07:12:13 +02:00
//if($isReq){
$bd_usl .= " AND cancel=0";
//}
$bd_usl_managers = " AND (".implode(" OR ",$arrIdUser).")";
2026-05-22 20:21:54 +02:00
2026-07-02 07:12:13 +02:00
foreach ($usersId as $us) {
2026-05-22 20:21:54 +02:00
if($bd_doers != ''){
2026-07-02 07:12:13 +02:00
$bd_doers .= ' or ';
2026-05-22 20:21:54 +02:00
}
2026-07-02 07:12:13 +02:00
$bd_doers .= "`doers` like '%&quot;".$us."&quot;:1%'";
}
2026-05-22 20:21:54 +02:00
2026-07-02 07:12:13 +02:00
$post = clearInputData($_POST);
2026-05-22 20:21:54 +02:00
2026-07-02 07:12:13 +02:00
$startDateWhere = "1";
$endDateWhere = "1";
2026-05-22 20:21:54 +02:00
2026-07-02 07:12:13 +02:00
if (isset($post['start'])) {
$startDateWhere = "DATE_FORMAT(schedule_date, '%Y-%m-%d %H:%i:%s') >= '".$post['start']." 00:00:00'";
}
2026-05-22 20:21:54 +02:00
2026-07-02 07:12:13 +02:00
if (isset($post['end'])) {
$endDateWhere = "DATE_FORMAT(schedule_date, '%Y-%m-%d %H:%i:%s') <= '".$post['end']." 23:59:59'";
}
2026-05-22 20:21:54 +02:00
2026-07-02 07:12:13 +02:00
if($post['emp']){
$agencyId = $post['emp'];
if($post['filter_stage'] && $post['filter_stage'] == 'filter_work_add'){
$bd_usl_managers .= " AND id_agent in (SELECT id FROM `users` WHERE id=$agencyId or id_manager=$agencyId or id_manager in (select id from users where id_manager=$agencyId))";
// $usersId = [$agencyId];
2026-05-22 20:21:54 +02:00
2026-07-02 07:12:13 +02:00
} else {
$bd_usl_managers .= " AND who_work in (SELECT id FROM `users` WHERE id=$agencyId or id_manager=$agencyId or id_manager in (select id from users where id_manager=$agencyId))";
2026-05-22 20:21:54 +02:00
}
2026-07-02 07:12:13 +02:00
$where .= " AND user_id in (SELECT id FROM `users` WHERE id=$agencyId or id_manager=$agencyId or id_manager in (select id from users where id_manager=$agencyId))";
$bd_doers = '';
$usersId = [$agencyId];
}
2026-05-22 20:21:54 +02:00
2026-07-02 07:12:13 +02:00
$sqlCl = "SELECT `id` FROM $table WHERE 1 $bd_usl_managers $bd_usl ";
2026-05-22 20:21:54 +02:00
2026-07-02 07:12:13 +02:00
if($bd_doers != ''){
$sqlCl .= " UNION ";
$sqlCl .= "SELECT `id` FROM $table WHERE 1 $bd_usl and (".$bd_doers.") ";
}
if($_POST['step']){
$sqlCl = "SELECT `id` FROM $table WHERE 1 $bd_usl_managers $bd_usl and $date_add $date_between ";
}
2026-05-22 20:21:54 +02:00
2026-07-02 07:12:13 +02:00
//echo $sqlCl;
2026-05-22 20:21:54 +02:00
2026-07-02 07:12:13 +02:00
$q = mysql_query($sqlCl);
$row = mysql_num_rows($q);
2026-05-22 20:21:54 +02:00
2026-07-02 07:12:13 +02:00
$whereEv = '';
$tempEv = array();
/*if(!$isReq){
$tempEv[] = 0;
}*/
if($row > 0){
while($r = mysql_fetch_assoc($q)){
$tempEv[] = $r['id'];
2026-05-22 20:21:54 +02:00
}
2026-07-02 07:12:13 +02:00
$whereEv = ' AND (client_id in ('.implode(', ', $tempEv).') ';
if(isset($_POST['type_calendar'])){
if($_POST['type_calendar'] == 'client'){
$whereEv = ' AND (client_id in ('.implode(', ', $tempEv).') AND req_id = 0';
} else if($_POST['type_calendar'] == 'req'){
$whereEv = ' AND (req_id in ('.implode(', ', $tempEv).') AND client_id = 0';
2026-05-22 20:21:54 +02:00
}
2026-07-02 07:12:13 +02:00
}
}
2026-05-22 20:21:54 +02:00
2026-07-02 07:12:13 +02:00
if($eall){
$user_this = new User();
$user_this->get($_SESSION['id']);
$wh = new WebHookIn();
$allUsersIds = array();
if($user_this->agencyId > 0){
$allUsersIds = $wh->getAllUserAgency($user_this->agencyId);
2026-05-22 20:21:54 +02:00
}
2026-07-02 07:12:13 +02:00
if(!empty($allUsersIds)){
$sqlCl2 = "SELECT `id` FROM requisitions WHERE user_id in (".implode(',', $allUsersIds).") AND cancel = 0";
2026-05-22 20:21:54 +02:00
2026-07-02 07:12:13 +02:00
$q2 = mysql_query($sqlCl2);
$row2 = mysql_num_rows($q2);
$tempEv = array();
2026-05-22 20:21:54 +02:00
2026-07-02 07:12:13 +02:00
while($r2 = mysql_fetch_assoc($q2)){
$tempEv[] = $r2['id'];
}
if(!empty($tempEv)){
if($whereEv == ''){
$whereEv .= ' AND (req_id in ('.implode(', ', $tempEv).') OR (req_id = 0 && client_id = 0)';
} else {
$whereEv .= ' OR req_id in ('.implode(', ', $tempEv).') OR (req_id = 0 && client_id = 0)';
}
2026-05-22 20:21:54 +02:00
}
}
2026-07-02 07:12:13 +02:00
}
if($whereEv != ''){
$whereEv .= ")";
}
2026-05-22 20:21:54 +02:00
2026-07-02 07:12:13 +02:00
$from_users = array();
$sql_user = "SELECT id, CONCAT(last_name, ' ', first_name, ' ', middle_name) as user_fio FROM users WHERE id in (".implode(',', $usersId).")
UNION SELECT user_id as id, CONCAT(last_name, ' ', first_name, ' ', middle_name, ' (удален)') as user_fio FROM users_delete WHERE user_id in (".implode(',', $usersId).")";
$q_user = mysql_query($sql_user);
while( $from_user = mysql_fetch_assoc($q_user)){
$from_users[$from_user['id']] = $from_user['user_fio'];
2026-05-22 20:21:54 +02:00
}
/*$time = microtime(true) - $start;
if($_SESSION['id'] == 6635){
2026-07-02 07:12:13 +02:00
echo "\n".$time." сек.";
2026-05-22 20:21:54 +02:00
}*/
2026-07-02 07:12:13 +02:00
echo '[';
//echo $sql;
if (isset($_POST['user_id'])) {
2026-05-22 20:21:54 +02:00
2026-07-02 07:12:13 +02:00
if($eobj){
// Явные колонки (НЕ e.*): после колонки moved_on_copy в user_object_events e.* стал шире 2-й ветки UNION
// → «different number of columns» → задачи по своим объектам пропадали из «Кабинет → Задачи». Порядок o.* выровнен со 2-й веткой.
$sql = "SELECT e.id, e.user_id, e.from_id, e.object_id, e.req_id, e.create_date, e.type, e.address, e.sum, e.document_id, e.schedule_date, e.comment, e.platforms_advert, e.calendar_view, e.cancel, e.tel, e.max, e.name, o.adres, o.dom, o.korpus, o.litera, o.nazv from user_object_events e, objects o WHERE user_id in (". implode(', ', $usersId).") $whereObj $part_task and o.id=e.object_id and e.schedule_date is not null and $startDateWhere and $endDateWhere";
$sql .= "union
SELECT s.id, s.user_for as user_id, 0 as from_id, e.object_id as object_id, 0 as req_id, created_at as create_date, 'sub_moderation' as type,
'' as address,null as sum, null as document_id, created_at as schedule_date, sub_comment as comment, '' as platforms_advert, e.calendar_view,e.cancel, 0 as tel, 0 as max,'' as name, o.adres, o.dom, o.korpus, o.litera,
o.nazv from user_sub_comments as s LEFT JOIN user_object_events as e on e.id=s.event_id LEFT JOIN objects as o on o.id=object_id WHERE section_id = 1 and user_for in (". implode(', ', $usersId).") $whereObj $part_task and $startDateWhere and $endDateWhere";
2026-05-22 20:21:54 +02:00
2026-07-02 07:12:13 +02:00
$rez = mysql_query($sql);
2026-05-22 20:21:54 +02:00
2026-07-02 07:12:13 +02:00
$i = 0;
while ($event = mysql_fetch_assoc($rez)) {
$from_id = $event['user_id'];
if(!empty($event['from_id'])) $from_id = $event['from_id'];
2026-05-22 20:21:54 +02:00
if ($i > 0) {
echo ',{';
} else {
echo '{';
}
echo '"id" : "'.$i.'", ';
2026-07-02 07:12:13 +02:00
// echo '"$sql" : "'.$sql.'", ';
2026-05-22 20:21:54 +02:00
echo '"table_id" : "'.$event['id'].'", ';
echo '"start" : "'.date(DateTime::ATOM, strtotime($event['schedule_date'])).'", ';
2026-07-02 07:12:13 +02:00
echo '"object_id" : "'.$event['object_id'].'",';
2026-05-22 20:21:54 +02:00
2026-07-02 07:12:13 +02:00
$address = $event['nazv'] .' '.$event['adres'];
2026-05-22 20:21:54 +02:00
2026-07-02 07:12:13 +02:00
if ($event['dom']) {
$address = $address . ", " . $event['dom'];
}
2026-05-22 20:21:54 +02:00
2026-07-02 07:12:13 +02:00
if ($event['korpus']) {
$address = $address . ", корпус " . $event['korpus'];
}
2026-05-22 20:21:54 +02:00
2026-07-02 07:12:13 +02:00
if ($event['litera']) {
$address = $address . ", литера" . $event['litera'];
2026-05-22 20:21:54 +02:00
}
2026-07-02 07:12:13 +02:00
$address = str_replace("\\","/", $address);
$address = str_replace("\"","'", $address);
2026-05-22 20:21:54 +02:00
if ($event['type'] == 'call') {
$className = "call";
if ($event['calendar_view'] != 0) {
$className .= " viewed";
}
2026-07-02 07:12:13 +02:00
echo '"title": "Звонок '.$address;
2026-05-22 20:21:54 +02:00
if(isset($from_users[$from_id])){
echo ' - '.$from_users[$from_id];
}
echo '","className" : "'.$className.'"';
}
if ($event['type'] == 'meet') {
$className = "meet";
if ($event['calendar_view'] != 0) {
$className .= " viewed";
}
2026-07-02 07:12:13 +02:00
echo '"title": "Встреча '.$address;
2026-05-22 20:21:54 +02:00
if(isset($from_users[$from_id])){
echo ' - '.$from_users[$from_id];
}
echo '","className" : "'.$className.'"';
}
if ($event['type'] == 'show') {
$className = "showing";
if ($event['calendar_view'] != 0) {
$className .= " viewed";
}
2026-07-02 07:12:13 +02:00
echo '"title": "Показ '.$address;
2026-05-22 20:21:54 +02:00
if(isset($from_users[$from_id])){
echo ' - '.$from_users[$from_id];
}
echo '","className" : "'.$className.'"';
}
if ($event['type'] == 'deal') {
$className = "deal";
if ($event['calendar_view'] != 0) {
$className .= " viewed";
}
2026-07-02 07:12:13 +02:00
echo '"title": "Сделка '.$address;
2026-05-22 20:21:54 +02:00
if(isset($from_users[$from_id])){
echo ' - '.$from_users[$from_id];
}
echo '","className" : "'.$className.'"';
}
2026-07-02 07:12:13 +02:00
if ($event['type'] == 'moderation') {
$className = "moderation";
if ($event['calendar_view'] != 0) {
$className .= " viewed";
}
2026-05-22 20:21:54 +02:00
2026-07-02 07:12:13 +02:00
echo '"title": "Модерация '.$event['nazv'];
if(isset($from_users[$from_id])){
echo ' - '.$from_users[$from_id];
}
echo '","className" : "'.$className.'"';
}
if ($event['type'] == 'sub_moderation') {
$className = "moderation";
2026-05-22 20:21:54 +02:00
if ($event['calendar_view'] != 0) {
$className .= " viewed";
}
2026-07-02 07:12:13 +02:00
echo '"title": "Комментарий к модерация '.$event['nazv'];
2026-05-22 20:21:54 +02:00
if(isset($from_users[$from_id])){
echo ' - '.$from_users[$from_id];
}
echo '","className" : "'.$className.'"';
}
2026-07-02 07:12:13 +02:00
if ($event['type'] == 'even') {
$className = "even";
if ($event['calendar_view'] != 0) {
$className .= " viewed";
}
echo '"title": "'.$event['name']. ' ' . $event['nazv'] .'","className" : "'.$className.'"';
}
2026-05-22 20:21:54 +02:00
echo "}";
$i++;
}
2026-07-02 07:12:13 +02:00
// Найденные листинги парсера: задачи из своей таблицы, чтобы Кабинет→Задачи показывал их наравне с бейджем
// шапки и личным календарём. Offset-free: object_id = РЕАЛЬНЫЙ el.id (он коллизит с objects.id),
// листинг помечаем флагом is_external=1. table_id = реальный id события, from=listing — завершение адресует
// external_listing_events. LEFT JOIN: листинг мог уйти по TTL (адрес тогда пустой). Комментарии — не задачи;
// сделок/модерации у листингов нет.
// $whereObj (фильтры состояния/типа задачи: calendar_view/schedule_date/type) применяем — эти колонки есть у листинга (алиас e).
// $part_task — req-фильтр по активностям: у листинга нет заявки → при активном фильтре листинги исключаем целиком.
if (empty($part_task)) {
$sqlListing = "SELECT e.*, IFNULL(el.address_text, '') AS adres
FROM external_listing_events e
LEFT JOIN external_listings el ON el.id = e.external_listing_id
WHERE e.user_id IN (".implode(', ', $usersId).") AND e.schedule_date IS NOT NULL $whereObj AND $startDateWhere AND $endDateWhere";
$rezListing = mysql_query($sqlListing);
while ($rezListing && ($event = mysql_fetch_assoc($rezListing))) {
if ($event['type'] == 'comment') {
continue;
}
$from_id = $event['user_id'];
if (!empty($event['from_id'])) $from_id = $event['from_id'];
$label = trim($event['adres']) !== '' ? $event['adres'] : ('EXT-' . $event['external_listing_id']);
$label = str_replace(array('"', '\\', "\r", "\n", '&quot;'), array("'", '/', ' ', ' ', "'"), $label);
$evName = str_replace(array('"', '\\', "\r", "\n", '&quot;'), array("'", '/', ' ', ' ', "'"), (string)$event['name']);
$suffix = isset($from_users[$from_id]) ? (' - '.$from_users[$from_id]) : '';
if ($i > 0) { echo ',{'; } else { echo '{'; }
echo '"id" : "'.$i.'", ';
echo '"table_id" : "'.$event['id'].'", ';
echo '"from" : "listing", ';
echo '"is_external" : "1", '; // явный маркер листинга для openEventsWindow (&src=ext); id-диапазон больше не различает
echo '"start" : "'.date(DateTime::ATOM, strtotime($event['schedule_date'])).'", ';
echo '"object_id" : "'.(int)$event['external_listing_id'].'",';
$className = ($event['type'] == 'meet') ? 'meet' : (($event['type'] == 'show') ? 'showing' : (($event['type'] == 'even') ? 'even' : 'call'));
if ($event['calendar_view'] != 0) $className .= ' viewed';
if ($event['type'] == 'meet') {
echo '"title": "Встреча '.$label.$suffix.'","className" : "'.$className.'"';
} else if ($event['type'] == 'show') {
echo '"title": "Показ '.$label.$suffix.'","className" : "'.$className.'"';
} else if ($event['type'] == 'even') {
echo '"title": "'.$evName.' '.$label.$suffix.'","className" : "'.$className.'"';
} else {
echo '"title": "Звонок '.$label.$suffix.'","className" : "'.$className.'"';
}
echo "}";
$i++;
}
} // конец if (empty($part_task)) — листинговый блок
}
2026-05-22 20:21:54 +02:00
/*$time = microtime(true) - $start;
2026-07-02 07:12:13 +02:00
if($_SESSION['id'] == 6635){
echo "\nобъекты".$time." сек.";
}*/
if($ecl){
// echo $whereTasks;
if ($startDateWhere != "1" || $endDateWhere != "1") {
$whereTasks = " and 1 ";
}
$agency_id = (int)$_POST['agency_id'];
if($agency_id != 7384){
$where .= ' and megafon=0 and mango=0 and telphin=0 and beeline=0 and mts=0 and tele2=0 and allo=0';
}
// задачи по ответственному = чистый user_id (как личный календарь): убрали $whereEv — who_work-пересечение по ТЕКУЩЕМУ владельцу клиента, из-за него не показывались задачи по переназначенным клиентам
$sql = "SELECT * FROM user_client_events as e WHERE user_id in (". implode(', ', $usersId).") $whereTasks $where $part_task and schedule_date is not null and cancel=0 and $startDateWhere and $endDateWhere";
if($isReq && empty($whereEv))
$sql = "SELECT * FROM user_client_events as e WHERE user_id in (". implode(', ', $usersId).") and req_id = '-1' and schedule_date is not null and cancel=0 and $startDateWhere and $endDateWhere";
$rez = mysql_query($sql);
//$result['sql'] = $sql;
/*if($_SESSION['id'] == 22687){
echo "\n".$sql."\n";
}*/
//echo $sql;
//Начитки
$events = array();
$clientsIds = array();
$reqsIds = array();
$usersEventIds = array();
$dealIds = array();
$clients = array();
$reqs = array();
$usersEvent = array();
$deals = array();
while ($event = mysql_fetch_assoc($rez)){
$events[] = $event;
if($event['client_id'] > 0) $clientsIds[] = (int)$event['client_id'];
if($event['req_id'] > 0) $reqsIds[] = (int)$event['req_id'];
if($event['user_id'] > 0) $usersEventIds[] = (int)$event['user_id'];
if($event['type'] == 'deal' && !empty($event['deal_id'])) $dealIds[] = (int)$event['deal_id'];
}
if(!empty($clientsIds)){
$sql_cl = "SELECT id, fio from clients WHERE id in (".implode(',',$clientsIds).")";
$q_cl = mysql_query($sql_cl);
while($r_cl = mysql_fetch_assoc($q_cl)){
$clients[$r_cl['id']] = str_replace("\\","/", $r_cl['fio']);
}
}
if(!empty($reqsIds)){
$sql_cl = "SELECT id, name, cancel from requisitions WHERE id in (".implode(',',$reqsIds).")";
$q_cl = mysql_query($sql_cl);
while($r_cl = mysql_fetch_assoc($q_cl)){
$reqs[$r_cl['id']] = $r_cl;
}
2026-05-22 20:21:54 +02:00
}
2026-07-02 07:12:13 +02:00
if(!empty($usersEventIds)){
$sql_u = "SELECT id, first_name, last_name, middle_name FROM users WHERE id in (".implode(',',$usersEventIds).")";
$q_u = mysql_query($sql_u);
while($r_u = mysql_fetch_assoc($q_u)){
$usersEvent[$r_u['id']] = $r_u;
}
}
if(!empty($dealIds)){
$sql_deal = "SELECT id, title FROM deals WHERE id in (".implode(',', array_unique($dealIds)).")";
$q_deal = mysql_query($sql_deal);
while($r_deal = mysql_fetch_assoc($q_deal)){
$deals[$r_deal['id']] = $r_deal['title'];
}
}
foreach ($events as $event) {
$from_id = $event['user_id'];
$cancel = 0;
if(!empty($event['from_id'])) $from_id = $event['from_id'];
if ($event['type'] == 'deal' && !empty($event['deal_id'])) {
if (in_array($event['deal_id'], $seenDealIds)) {
continue;
}
$seenDealIds[] = $event['deal_id'];
}
$fio = '';
if($event['client_id'] > 0 && isset($clients[$event['client_id']])){
$fio = $clients[$event['client_id']];
} else if($event['req_id'] > 0 && isset($reqs[$event['req_id']])) {
$fio = $reqs[$event['req_id']]['name'];
$cancel = (int)$reqs[$event['req_id']]['cancel'];
}
if ($event['type'] == 'deal' && !empty($event['deal_id']) && isset($deals[$event['deal_id']])) {
$fio = $deals[$event['deal_id']];
}
if($cancel == 0){
if ($i > 0) {
echo ',{';
} else {
echo '{';
}
echo '"id" : "'.$i.'", ';
echo '"table_id" : "'.$event['id'].'", ';
echo '"start" : "'.date(DateTime::ATOM, strtotime($event['schedule_date'])).'", ';
if($fio == ''){
if(isset($usersEvent[$event['user_id']])){
$fio = '(исполнитель '.trim($usersEvent[$event['user_id']]['last_name'] . ' ' . $usersEvent[$event['user_id']]['first_name'] . ' ' . $usersEvent[$event['user_id']]['middle_name']).')';
}
}
echo '"client_id" : "'.$event['client_id'].'",';
echo '"req_id" : "'.$event['req_id'].'",';
$fio = str_replace("\\","/", $fio);
$fio = str_replace("\"","'", $fio);
if ($event['type'] == 'comment') {
$className = "comment";
if ($event['calendar_view'] != 0) {
$className .= " viewed";
}
echo '"title": "Комментарий '.$fio;
if(isset($from_users[$from_id])){
echo ' - '.$from_users[$from_id];
}
echo '","className" : "'.$className.'"';
}
if ($event['type'] == 'call') {
$className = "call";
if ($event['calendar_view'] != 0) {
$className .= " viewed";
}
echo '"title": "Звонок '.$fio;
if(isset($from_users[$from_id])){
echo ' - '.$from_users[$from_id];
}
echo '","className" : "'.$className.'"';
}
if ($event['type'] == 'meet') {
$className = "meet";
if ($event['calendar_view'] != 0) {
$className .= " viewed";
}
echo '"title": "Встреча '.$fio;
if(isset($from_users[$from_id])){
echo ' - '.$from_users[$from_id];
}
echo '","className" : "'.$className.'"';
}
if ($event['type'] == 'show') {
$className = "showing";
if ($event['calendar_view'] != 0) {
$className .= " viewed";
}
echo '"title": "Показ '.$fio;
if(isset($from_users[$from_id])){
echo ' - '.$from_users[$from_id];
}
echo '","className" : "'.$className.'"';
}
2026-05-22 20:21:54 +02:00
2026-07-02 07:12:13 +02:00
if ($event['type'] == 'deal') {
2026-05-22 20:21:54 +02:00
2026-07-02 07:12:13 +02:00
$className = "deal";
if ($event['calendar_view'] != 0) {
$className .= " viewed";
}
2026-05-22 20:21:54 +02:00
2026-07-02 07:12:13 +02:00
echo '"title": "Сделка '.$fio;
if(isset($from_users[$from_id])){
echo ' - '.$from_users[$from_id];
}
echo '","className" : "'.$className.'"';
}
2026-05-22 20:21:54 +02:00
2026-07-02 07:12:13 +02:00
if ($event['type'] == 'even' || $event['type'] == 'event') {
2026-05-22 20:21:54 +02:00
2026-07-02 07:12:13 +02:00
$className = "even";
if ($event['calendar_view'] != 0) {
$className .= " viewed";
}
2026-05-22 20:21:54 +02:00
2026-07-02 07:12:13 +02:00
echo '"title": "'.$event['name'].' '.$fio;
if(isset($from_users[$from_id])){
echo ' - '.$from_users[$from_id];
}
echo '","className" : "'.$className.'"';
}
echo "}";
$i++;
}
2026-05-22 20:21:54 +02:00
}
2026-07-02 07:12:13 +02:00
/*$time = microtime(true) - $start;
if($_SESSION['id'] == 6635){
echo "\n клиенты".$time." сек.";
}*/
if($view !='overdue_tasks' && !isset($_POST['event'])){
if (isset($post['start'])) {
$startDateWhereBirthday = "DATE_FORMAT(birthday, '%m-%d') >='".date('m-d', strtotime($post['start']))."'";
}
if (isset($post['end'])) {
$endDateWhereBirthday = "DATE_FORMAT(birthday, '%m-%d') < '".date('m-d', strtotime($post['end']))."'";
}
$sql = "SELECT id, fio, birthday FROM clients WHERE cancel=0 AND who_work = ".$_SESSION['id']." $bd_usl $part_task AND ".$startDateWhereBirthday." AND ".$endDateWhereBirthday;
//echo $sql;
$q = mysql_query($sql);
while ($b = mysql_fetch_assoc($q)) {
if ($i > 0) {
echo ',{';
} else {
echo '{';
}
$fio = $b['fio'];
echo '"id" : "'.$i.'", ';
echo '"table_id" : "'.$b['id'].'", ';
echo '"start" : "'.date('Y-', strtotime($post['start'])).date('m-d', strtotime($b['birthday'])).'", ';
echo '"client_id" : "'.$b['id'].'",';
//if ($event['type'] == 'call') {
$className = "birthday";
/* if ($event['calendar_view'] != 0) {
$className .= " viewed";
}*/
echo '"title": "День рождения «'.$fio.'»","className" : "'.$className.'"';
// }
echo "}";
$i++;
}
if (isset($post['start']))
$startDateWhereBirthday = "DATE_FORMAT(employees.birthday, '%m-%d') >= '".date('m-d', strtotime($post['start']))."'";
if (isset($post['end']))
$endDateWhereBirthday = "DATE_FORMAT(employees.birthday, '%m-%d') < '".date('m-d', strtotime($post['end']))."'";
$userId = $_SESSION['id'];
$user = new User;
$user->get($userId);
if ($_SESSION['users_admin']) {
$userId = $user->agencyId;
}
$sql = "SELECT employees.id,
2026-05-22 20:21:54 +02:00
employees.partner_id,
employees.name,
employees.birthday
FROM `partners_employees` AS employees
LEFT JOIN `users` AS users ON employees.created_by = users.id OR employees.updated_by = users.id
WHERE (users.id = $userId OR users.id_manager = $userId OR users.id_manager IN (
SELECT id FROM `users` WHERE id_manager = $userId
))
AND employees.birthday_notify > 0 AND employees.status > 0
AND $startDateWhereBirthday
AND $endDateWhereBirthday";
2026-07-02 07:12:13 +02:00
if (!$_SESSION['agency']) {
$sql .= " AND (
2026-05-22 20:21:54 +02:00
employees.created_by = " . $userId . " OR
employees.updated_by = " . $userId . " OR
employees.id IN (
SELECT clients.employee_id
FROM `clients` AS clients
WHERE clients.who_work = " . $userId . "
)
)";
2026-07-02 07:12:13 +02:00
}
2026-05-22 20:21:54 +02:00
2026-07-02 07:12:13 +02:00
$sql .= " GROUP BY employees.id";
2026-05-22 20:21:54 +02:00
2026-07-02 07:12:13 +02:00
$q = mysql_query($sql);
while ($b = mysql_fetch_assoc($q)) {
2026-05-22 20:21:54 +02:00
2026-07-02 07:12:13 +02:00
if ($i > 0)
echo ',{';
else
echo '{';
2026-05-22 20:21:54 +02:00
2026-07-02 07:12:13 +02:00
echo '"id" : "' . $i . '", ';
echo '"employee_id" : "' . $b['id'] .'", ';
echo '"start" : "' . date('Y-', strtotime($post['start'])) . date('m-d', strtotime($b['birthday'])) . '", ';
echo '"title": "День рождения партнёра «' . $b['name'] . '»", "className" : "birthday"';
echo "}";
$i++;
}
2026-05-22 20:21:54 +02:00
2026-07-02 07:12:13 +02:00
// Дни рождения сотрудников агенства
$agencyId = $_SESSION['id'];
$user = new User;
$user->get($userId);
if ($_SESSION['id_manager'])
$agencyId = $_SESSION['id_manager'];
2026-05-22 20:21:54 +02:00
2026-07-02 07:12:13 +02:00
if ($_SESSION['users_admin']) {
$agencyId = $user->agencyId;
}
2026-05-22 20:21:54 +02:00
2026-07-02 07:12:13 +02:00
if (isset($post['start']))
$startDateWhereBirthday = "DATE_FORMAT(birthday, '%m-%d') >='".date('m-d', strtotime($post['start']))."'";
2026-05-22 20:21:54 +02:00
2026-07-02 07:12:13 +02:00
if (isset($post['end']))
$endDateWhereBirthday = "DATE_FORMAT(birthday, '%m-%d') < '".date('m-d', strtotime($post['end']))."'";
2026-05-22 20:21:54 +02:00
2026-07-02 07:12:13 +02:00
$usersIds = User::getAllAgencyUsers($agencyId);
if (!empty($usersIds)) {
$sql = "SELECT id,
2026-05-22 20:21:54 +02:00
first_name,
last_name,
middle_name,
birthday,
phone
FROM users
WHERE (
id IN (". implode(',', $usersIds) .") AND
id != $_SESSION[id]
)
AND $startDateWhereBirthday
AND $endDateWhereBirthday
GROUP BY id";
2026-07-02 07:12:13 +02:00
//echo $sql;
2026-05-22 20:21:54 +02:00
2026-07-02 07:12:13 +02:00
$q = mysql_query($sql);
while ($b = mysql_fetch_assoc($q)) {
2026-05-22 20:21:54 +02:00
2026-07-02 07:12:13 +02:00
if ($i > 0)
echo ',{';
else
echo '{';
2026-05-22 20:21:54 +02:00
2026-07-02 07:12:13 +02:00
echo '"id" : "' . $i . '", ';
echo '"user_id" : "' . $b['id'] .'", ';
echo '"start" : "' . date('Y-', strtotime($post['start'])) . date('m-d', strtotime($b['birthday'])) . '", ';
echo '"title": "День рождения у «' . trim($b['last_name'] . ' ' . $b['first_name'] . ' ' . $b['middle_name']) . '», сотрудника Вашего агентства.", "className" : "birthday"';
echo "}";
$i++;
}
2026-05-22 20:21:54 +02:00
}
2026-07-02 07:12:13 +02:00
2026-05-22 20:21:54 +02:00
}
2026-07-02 07:12:13 +02:00
/* $time = microtime(true) - $start;
2026-05-22 20:21:54 +02:00
2026-07-02 07:12:13 +02:00
if($_SESSION['id'] == 6635){
echo "\n дни ".$time." сек.";
}*/
}
2026-05-22 20:21:54 +02:00
}
echo ']';
/*$time = microtime(true) - $start;
if($_SESSION['id'] == 6635){
echo "\n".$time." сек.";
}*/