Joywork/cron/expired_move_req_client.php

321 lines
16 KiB
PHP
Raw Permalink Normal View History

2026-05-22 20:21:54 +02:00
<?php
require_once($_SERVER['DOCUMENT_ROOT'] . "/config.php");
header('Content-Type: application/json');
error_reporting(E_ALL | E_STRICT);
ini_set('display_errors', 1);
$pdo = new MysqlPdo(hst, ndb, user, pass);
$sql = "SET NAMES 'utf8'";
$pdo->query($sql);
$tel = new Telegram(false, $pdo);
$max = new MaxClass();
function move_req($req, $steps){
global $pdo;
global $agency_users;
global $users;
global $tel;
global $max;
$db_sphinx = new MysqlPdo(hstsph2, null, null, null, true, '9306');
$text_tel = "Ваша Заявка ID {$req['id']} переведен в общие, по причине истечения срока даты выполнения этапа \"".$steps[(int)$req['step_id']]['name']."\"";
if(isset($users[$req['who_work']])){
$user = $users[$req['who_work']];
} else {
$user = new User();
$user->get($req['who_work']);
$users[$req['who_work']] = $user;
$agency_users[$req['who_work']] = $user->agencyId;
}
$sql_u = "UPDATE requisitions SET who_work=0, confirm=0 WHERE id = {$req['id']}";
$pdo->query($sql_u);
if($user->telegramm_chat_id > 0){
$tel->send($text_tel, $user->telegramm_chat_id);
}
if($user->max_notice > 0 && $user->max_user_id > 0){
$max->send_messages_to_user($user->max_user_id, $text_tel);
}
$dop_text = "Переведена в общие так как просрочен срок закрытия этапа &laquo;".$steps[(int)$req['step_id']]['name']."&raquo;";
$sql_ev = "INSERT INTO events_clients (req_id, event, dop_text, user_id) VALUES ({$req['id']}, 'update', '{$dop_text}', {$req['who_work']})";
$pdo->query($sql_ev);
if(($req['type_id'] == 2 || $req['heir'] == 2) && $req['object_id']>0){
//Данные объекта
$sql_obj = "SELECT * FROM objects WHERE id = {$req['object_id']}";
$q_obj = $pdo->query($sql_obj);
$obj = $pdo->fetch_assoc($q_obj);
$user_id = $obj['id_add_user'];
$agency_id = 0;
//Вычисляем агенство
if(!isset($agency_users[$user_id])){
$user = new User();
$user->get($user_id);
$agency_id = $user->agencyId;
$agency_users[$user_id] = $agency_id;
} else {
$agency_id = $agency_users[$user_id];
}
if($agency_id > 0){
$newUser = new User;
$newUser->get($agency_id);
$currentUser = $newUser;
$phone = $newUser->phone;
$num_search = User::num_search($phone);
$sobstv = trim($newUser->last_name . ' ' . $newUser->first_name . ' ' . $newUser->middle_name);
if ($newUser->agency == 0) {
$sql="SELECT * FROM users WHERE id=$newUser->id_manager";
$rez=$this->db->query($sql);
$manager = $this->db->fetch_assoc($rez);
if($manager['id_manager']) {
$agency = $this->db->fetch_assoc($this->db->query("SELECT * FROM users WHERE id=$manager[id_manager]"));
} else {
$agency = $manager;
}
if ($agency) {
$sobstv = trim($currentUser->last_name . ' ' . $currentUser->first_name . ' ' . $currentUser->middle_name) . ", агентство " . $agency['agency_name'];
}
} else {
$sobstv = $sobstv . ", агентство " . $newUser->agency_name;
}
$sql_obj_up = "UPDATE objects SET id_add_user={$agency_id}, phone = '{$phone}', phone_search = '{$num_search}', sobstv = '{$sobstv}', is_main = 0 WHERE id = {$obj['id']}";
$pdo->query($sql_obj_up);
//Запись в сфинкс
$sql_sph = "UPDATE objects SET id_add_user={$agency_id}, phone_search = '$num_search' WHERE id={$obj['id']}";
$db_sphinx->query($sql_sph);
$sql_ev = "INSERT INTO user_object_events(user_id, object_id, create_date, type, address, sum, schedule_date, comment, calendar_view)
VALUES({$agency_id}, {$obj['id']}, NOW(), 'comment', NULL, NULL, NULL, 'Объект был переведен по причине просрочки этапа &laquo;{$steps[(int)$req['step_id']]['name']}&raquo;', '1')";
$pdo->query($sql_ev);
}
}
}
function move_client($client, $steps){
global $pdo;
global $agency_users;
global $users;
global $tel;
$db_sphinx = new MysqlPdo(hstsph2, null, null, null, true, '9306');
$text_tel = "Ваша Клиент ID {$client['id']} переведен в общие, по причине истечения срока даты выполнения этапа \"".$steps[(int)$client['step_id']]['name']."\"";
if(isset($users[$client['who_work']])){
$user = $users[$client['who_work']];
} else {
$user = new User();
$user->get($client['who_work']);
$users[$client['who_work']] = $user;
$agency_users[$client['who_work']] = $user->agencyId;
}
//$db_sphinx = new MysqlPdo(hstsph2, null, null, null, true, '9306');
$sql_u = "UPDATE clients SET who_work=0, confirm=0 WHERE id = {$client['id']}";
$pdo->query($sql_u);
if($user->telegramm_chat_id > 0){
$tel->send($text_tel, $user->telegramm_chat_id);
}
$dop_text = "Переведен в общие так как просрочен срок закрытия этапа &laquo;".$steps[(int)$client['step_id']]['name']."&raquo;";
$sql_ev = "INSERT INTO events_clients (client_id, event, dop_text, user_id) VALUES ({$client['id']}, 'update', '{$dop_text}', {$client['who_work']})";
$pdo->query($sql_ev);
}
$steps = array();
$steps_ids = array();
$agency_users = array();
$users = array();
$sql = "SELECT * FROM funnel_steps WHERE is_move_end_srok = 1 AND deleted = 0";
$q = $pdo->query($sql);
while($r = $pdo->fetch_assoc($q)){
$steps[$r['id']] = $r;
$steps_ids[] = $r['id'];
}
//var_dump($steps_ids);
if(!empty($steps_ids)){
//Для заявок
$sql_req = "SELECT id, step_id, created_at, object_id, who_work, type_id,(SELECT heir FROM requisitions_type WHERE id = requisitions.type_id) as heir, (SELECT date_update FROM clients_funnel_step WHERE req_id=requisitions.id) as date_update FROM requisitions WHERE funnel_id > 0 AND step_id in (".implode(',',$steps_ids).") and who_work > 0 AND deleted=0 AND cancel=0";
$q_req = $pdo->query($sql_req);
$reqs_task = array();
while($r_req = $pdo->fetch_assoc($q_req)){
if($steps[(int)$r_req['step_id']]['days_step'] > 0){
$set_move = array('is_task'=>0);
if(!empty($steps[(int)$r_req['step_id']]['tasks_move'])){
$set_move = json_decode($steps[(int)$r_req['step_id']]['tasks_move'], true);
}
$days_step = $steps[(int)$r_req['step_id']]['days_step'];
if(!empty($r_req['date_update'])){
$lostDate = $r_req['date_update'];
$interval = date_diff(new DateTime(), new DateTime($lostDate))->days;
if($interval >= $days_step){
if($set_move['is_task'] == 1){
$delta_time = '-1 hour';
if(isset($users[$r_req['who_work']])){
$user = $users[$r_req['who_work']];
} else {
$user = new User();
$user->get($r_req['who_work']);
$users[$r_req['who_work']] = $user;
$agency_users[$r_req['who_work']] = $user->agencyId;
}
//Вычисляем агенство
if(!isset($agency_users[$r_req['who_work']])){
$user = new User();
$user->get($r_req['who_work']);
$agency_id = $user->agencyId;
$agency_users[$r_req['who_work']] = $agency_id;
} else {
$agency_id = $agency_users[$r_req['who_work']];
}
if($agency_id == 13154){
$delta_time = '-1 day';
}
$sql_task = "SELECT id FROM user_client_events WHERE req_id = {$r_req['id']}
AND calendar_view = 0 and schedule_date is not null AND schedule_date >= '".date("Y-m-d H:i:s", strtotime($delta_time))."'";
// echo $sql_task;
$q_task = $pdo->query($sql_task);
if($pdo->num_rows($q_task) == 0){
move_req($r_req, $steps);
}
} else {
move_req($r_req, $steps);
}
}
} else {
$lostDate = $r_req['created_at'];
$interval = date_diff(new DateTime(), new DateTime($lostDate))->days;
if($interval >= $days_step){
$sql_event = "SELECT * FROM `events_clients` where `req_id` = {$r_req['id']} and event = 'update' order by id desc limit 1";
//echo $sql_event."\n";
$q_event = $pdo->query($sql_event);
if($pdo->num_rows($q_event) > 0){
$r_event = $pdo->fetch_assoc($q_event);
$lostDate1 = $r_event['date_update'];
$interval1 = date_diff(new DateTime(), new DateTime($lostDate1))->days;
if($interval1 >= $days_step){
if($set_move['is_task'] == 1){
$delta_time = '-1 hour';
if(isset($users[$r_req['who_work']])){
$user = $users[$r_req['who_work']];
} else {
$user = new User();
$user->get($r_req['who_work']);
$users[$r_req['who_work']] = $user;
$agency_users[$r_req['who_work']] = $user->agencyId;
}
//Вычисляем агенство
if(!isset($agency_users[$r_req['who_work']])){
$user = new User();
$user->get($r_req['who_work']);
$agency_id = $user->agencyId;
$agency_users[$r_req['who_work']] = $agency_id;
} else {
$agency_id = $agency_users[$r_req['who_work']];
}
if($agency_id == 13154){
$delta_time = '-1 day';
}
$sql_task = "SELECT id FROM user_client_events WHERE req_id = {$r_req['id']}
AND calendar_view = 0 and schedule_date is not null AND schedule_date >= '".date("Y-m-d H:i:s", strtotime($delta_time))."'";
$q_task = $pdo->query($sql_task);
if($pdo->num_rows($q_task) == 0){
move_req($r_req, $steps);
}
} else {
move_req($r_req, $steps);
}
}
} else {
move_req($r_req, $steps);
}
}
}
}
}
//Для клиентов
$sql_client = "SELECT id, step_id, date_add, who_work, (SELECT date_update FROM clients_funnel_step WHERE client_id=clients.id) as date_update FROM clients WHERE funnel_id > 0 AND step_id in (".implode(',',$steps_ids).") and who_work > 0 AND deleted=0";
$q_client = $pdo->query($sql_client);
while($r_client = $pdo->fetch_assoc($q_client)){
if($steps[(int)$r_client['step_id']]['days_step'] > 0){
$set_move = array('is_task'=>0);
if(!empty($steps[(int)$r_req['step_id']]['tasks_move'])){
$set_move = json_decode($steps[(int)$r_req['step_id']]['tasks_move'], true);
}
$days_step = $steps[(int)$r_client['step_id']]['days_step'];
if(!empty($r_client['date_update'])){
$lostDate = $r_client['date_update'];
$interval = date_diff(new DateTime(), new DateTime($lostDate))->days;
// echo $r_client['id']." - ".$interval." - ".$days_step."\n";
if($interval >= $days_step){
if($set_move['is_task'] == 1){
$sql_task = "SELECT id FROM user_client_events WHERE client_id = {$r_client['id']}
AND calendar_view = 0 and schedule_date is not null AND schedule_date >= '".date("Y-m-d H:i:s")."'";
$q_task = $pdo->query($sql_task);
if($pdo->num_rows($q_task) == 0){
move_req($r_client, $steps);
}
} else {
move_client($r_client, $steps);
}
}
} else {
$lostDate = $r_client['date_add'];
$interval = date_diff(new DateTime(), new DateTime($lostDate))->days;
// echo $r_client['id']." - ".$interval." - ".$days_step."\n";
if($interval >= $days_step){
if($set_move['is_task'] == 1){
$sql_task = "SELECT id FROM user_client_events WHERE client_id = {$r_client['id']}
AND calendar_view = 0 and schedule_date is not null AND schedule_date >= '".date("Y-m-d H:i:s")."'";
$q_task = $pdo->query($sql_task);
if($pdo->num_rows($q_task) == 0){
move_req($r_client, $steps);
}
} else {
move_client($r_client, $steps);
}
}
}
}
}
//var_dump($expiredStagesClients);
// var_dump($agency_users);
}