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 '%" { $typeCl } "%' " ;
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 '%" { $typeCl } "%' " ;
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 '%" { $roleCl } "%' " ;
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 '%" " . $us . " ":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 " , '"' ), array ( " ' " , '/' , ' ' , ' ' , " ' " ), $label );
$evName = str_replace ( array ( '"' , '\\' , " \r " , " \n " , '"' ), 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 . " сек. " ;
} */