Fix calendar mobile

This commit is contained in:
mac 2026-07-16 17:42:39 +03:00
parent 7223bb33ae
commit b00403a684

View File

@ -14727,7 +14727,11 @@ class CommonController extends ApiController
}
// События по заявкам и клиентам
$seenDealIds = array();
$where2 = $where;
if ($only_active) {
$where2[] = "`cancel` = 0";
}
$agency_id = \User::getUserAgencyID($user_id);
if($agency_id == 13394 || $agency_id == 13430){
$where2[] = "`megafon` = 0";
@ -14735,84 +14739,193 @@ class CommonController extends ApiController
$sql = "SELECT * FROM `user_client_events`
WHERE `user_id` = '$user_id' AND
`schedule_date` IS NOT NULL AND
`cancel` = 0 AND " . implode (' AND ', $where2);
`schedule_date` IS NOT NULL AND " . implode (' AND ', $where2);
if ($query = mysql_query($sql)) {
$dealEvents = array();
while ($event = mysql_fetch_assoc($query)) {
if ($event['type'] == 'deal' && !empty($event['deal_id'])) {
$did = (int)$event['deal_id'];
if (!isset($dealEvents[$did])) {
$dealEvents[$did] = array();
}
$dealEvents[$did][] = $event;
} else {
if ($event['cancel'] == 1) continue;
$type = null;
$is_viewed = false;
$type = null;
$is_viewed = false;
$section = 'free';
if ($event['client_id'] > 0)
$section = 'clients';
else if($event['req_id'] > 0)
$section = 'requisitions';
$fio = '';
if ($event['client_id'] > 0) {
$q_cl = mysql_query("SELECT `fio` FROM `clients` WHERE `id` = {$event['client_id']}");
$fio = str_replace("\\","/", mysql_fetch_assoc($q_cl)['fio']);
} else if ($event['req_id'] > 0) {
$q_req = mysql_query("SELECT `name` from `requisitions` WHERE `id`={$event['req_id']}");
$fio = mysql_fetch_assoc($q_req)['name'];
}
if (empty($fio)) {
$q_u = mysql_query("SELECT `first_name`, `last_name`, `middle_name` FROM `users` WHERE `id` = ".$event['user_id']);
$r_u = mysql_fetch_assoc($q_u);
$fio = '(исполнитель '.trim($r_u['last_name'] . ' ' . $r_u['first_name'] . ' ' . $r_u['middle_name']).')';
}
$fio = str_replace('"', "'", $fio);
$fio = str_replace('"', "'", $fio);
$title = $fio;
if ($event['calendar_view'] != 0)
$is_viewed = true;
if ($event['type'] == 'call') {
$type = "call";
$title = "Звонок " . $fio;
} else if ($event['type'] == 'meet') {
$type = "meet";
$title = "Встреча " . $fio;
} else if ($event['type'] == 'show') {
$type = "show";
$title = "Показ " . $fio;
} else if ($event['type'] == 'even') {
$type = "even";
$title = $event['name'] ." ". $fio;
}
if (!is_null($type)) {
$item_id++;
$list[] = [
'id' => $item_id,
'event_id' => (int)$event['id'],
'section' => $section,
'start' => date('Y-m-d H:i:s', strtotime($event['schedule_date'])),
'start_date' => date('Y-m-d', strtotime($event['schedule_date'])),
'start_time' => date('H:i:s', strtotime($event['schedule_date'])),
'client_id' => ($event['client_id']) ? (int)$event['client_id'] : null,
'object_id' => null,
'requisition_id' => ($event['req_id']) ? (int)$event['req_id'] : null,
'employee_id' => null,
'title' => $title,
'event_type' => $type,
'is_viewed' => $is_viewed,
'user_id' => $event['user_id']
];
}
}
}
// Дедупликация сделок по deal_id — одно событие на сделку
foreach ($dealEvents as $did => $events) {
$q_deal = mysql_query("SELECT title, side_one_requisition_id, side_two_requisition_id FROM deals WHERE id = " . intval($did) . " LIMIT 1");
$deal = ($q_deal && mysql_num_rows($q_deal) > 0) ? mysql_fetch_assoc($q_deal) : null;
$dealTitle = $deal ? $deal['title'] : '';
$sideOneReqId = $deal ? (int)$deal['side_one_requisition_id'] : 0;
$sideTwoReqId = $deal ? (int)$deal['side_two_requisition_id'] : 0;
// Приоритет: 1) заявка стороны 1, 2) заявка стороны 2, 3) клиент, 4) req, 5) любое
$bestEvent = null;
foreach ($events as $ev) {
if ($sideOneReqId > 0 && (int)$ev['req_id'] == $sideOneReqId) { $bestEvent = $ev; break; }
}
if (!$bestEvent) {
foreach ($events as $ev) {
if ($sideTwoReqId > 0 && (int)$ev['req_id'] == $sideTwoReqId) { $bestEvent = $ev; break; }
}
}
if (!$bestEvent) {
foreach ($events as $ev) {
if (!empty($ev['client_id'])) { $bestEvent = $ev; break; }
}
}
if (!$bestEvent) {
foreach ($events as $ev) {
if (!empty($ev['req_id'])) { $bestEvent = $ev; break; }
}
}
if (!$bestEvent) {
$bestEvent = $events[0];
}
$is_viewed = ($bestEvent['calendar_view'] != 0) || ($bestEvent['cancel'] == 1);
$section = 'free';
if ($event['client_id'] > 0)
if (!empty($bestEvent['client_id']))
$section = 'clients';
else if($event['req_id'] > 0)
else if (!empty($bestEvent['req_id']))
$section = 'requisitions';
$fio = '';
if ($event['client_id'] > 0) {
$q_cl = mysql_query("SELECT `fio` FROM `clients` WHERE `id` = {$event['client_id']}");
$fio = str_replace("\\","/", mysql_fetch_assoc($q_cl)['fio']);
} else if ($event['req_id'] > 0) {
$q_req = mysql_query("SELECT `name` from `requisitions` WHERE `id`={$event['req_id']}");
$fio = mysql_fetch_assoc($q_req)['name'];
}
if (empty($fio)) {
$q_u = mysql_query("SELECT `first_name`, `last_name`, `middle_name` FROM `users` WHERE `id` = ".$event['user_id']);
$r_u = mysql_fetch_assoc($q_u);
$fio = '(исполнитель '.trim($r_u['last_name'] . ' ' . $r_u['first_name'] . ' ' . $r_u['middle_name']).')';
}
$fio = str_replace('"', "'", $fio);
$fio = str_replace('"', "'", $fio);
$title = $fio;
if ($event['calendar_view'] != 0)
$is_viewed = true;
if ($event['type'] == 'call') {
$type = "call";
$title = "Звонок " . $fio;
} else if ($event['type'] == 'meet') {
$type = "meet";
$title = "Встреча " . $fio;
} else if ($event['type'] == 'show') {
$type = "show";
$title = "Показ " . $fio;
} else if ($event['type'] == 'deal') {
$type = "deal";
$title = "Сделка " . $fio;
} else if ($event['type'] == 'even') {
$type = "even";
$title = $event['name'] ." ". $fio;
}
if (!is_null($type)) {
$item_id++;
$list[] = [
'id' => $item_id,
'event_id' => (int)$event['id'],
'section' => $section,
'start' => date('Y-m-d H:i:s', strtotime($event['schedule_date'])),
'start_date' => date('Y-m-d', strtotime($event['schedule_date'])),
'start_time' => date('H:i:s', strtotime($event['schedule_date'])),
'client_id' => ($event['client_id']) ? (int)$event['client_id'] : null,
'object_id' => null,
'requisition_id' => ($event['req_id']) ? (int)$event['req_id'] : null,
'employee_id' => null,
'title' => $title,
'event_type' => $type,
'is_viewed' => $is_viewed,
'user_id' => $event['user_id']
];
}
$item_id++;
$list[] = [
'id' => $item_id,
'event_id' => (int)$bestEvent['id'],
'section' => $section,
'start' => date('Y-m-d H:i:s', strtotime($bestEvent['schedule_date'])),
'start_date' => date('Y-m-d', strtotime($bestEvent['schedule_date'])),
'start_time' => date('H:i:s', strtotime($bestEvent['schedule_date'])),
'client_id' => !empty($bestEvent['client_id']) ? (int)$bestEvent['client_id'] : null,
'object_id' => null,
'requisition_id' => !empty($bestEvent['req_id']) ? (int)$bestEvent['req_id'] : null,
'employee_id' => null,
'title' => "Сделка " . str_replace('"', "'", $dealTitle ?: 'без названия'),
'event_type' => 'deal',
'is_viewed' => $is_viewed,
'user_id' => $bestEvent['user_id'],
];
$seenDealIds[] = $did;
}
} else {
$errors[] = mysql_error();
}
// Добавляем сделки из deal_user для текущего пользователя
$sql_deals = "SELECT d.id, d.title, d.side_one_requisition_id FROM deals d
INNER JOIN deal_user du ON du.deal_id = d.id
WHERE du.user_id = " . intval($user_id) . "
AND d.id NOT IN (" . (empty($seenDealIds) ? '0' : implode(',', $seenDealIds)) . ")";
$q_deals = mysql_query($sql_deals);
while ($dealRow = mysql_fetch_assoc($q_deals)) {
$did = (int)$dealRow['id'];
$dealTitle = $dealRow['title'];
$sideOneReqId = (int)$dealRow['side_one_requisition_id'];
$q_dates = mysql_query("SELECT schedule_date, deal_id, cancel FROM user_client_events WHERE deal_id = " . $did . " AND type = 'deal' AND schedule_date IS NOT NULL ORDER BY schedule_date DESC LIMIT 1");
if ($q_dates && mysql_num_rows($q_dates) > 0) {
$dateRow = mysql_fetch_assoc($q_dates);
$scheduleDate = $dateRow['schedule_date'];
$isCancelled = ($dateRow['cancel'] == 1);
} else {
$q_created = mysql_query("SELECT created_at FROM deals WHERE id = " . $did);
$scheduleDate = ($q_created && mysql_num_rows($q_created) > 0) ? mysql_fetch_assoc($q_created)['created_at'] : date('Y-m-d H:i:s');
$isCancelled = false;
}
if ($only_active && $isCancelled) continue;
$item_id++;
$list[] = [
'id' => $item_id,
'event_id' => $did,
'section' => 'requisitions',
'start' => date('Y-m-d H:i:s', strtotime($scheduleDate)),
'start_date' => date('Y-m-d', strtotime($scheduleDate)),
'start_time' => date('H:i:s', strtotime($scheduleDate)),
'client_id' => null,
'object_id' => null,
'requisition_id' => $sideOneReqId ?: null,
'employee_id' => null,
'title' => "Сделка " . str_replace('"', "'", $dealTitle),
'event_type' => 'deal',
'is_viewed' => $isCancelled,
'user_id' => $user_id,
];
}
// Дни рождения клиентов
$where = ['1'];
if (!is_null($start_date)){