From 25b02a903cb871fe01e29eb51bcc58c51ba87df4 Mon Sep 17 00:00:00 2001 From: mac Date: Fri, 10 Jul 2026 18:36:26 +0300 Subject: [PATCH] Actual prod --- .../app/src/controllers/CommonController.php | 350 ++++++++++-------- 1 file changed, 197 insertions(+), 153 deletions(-) diff --git a/api/v2/app/src/controllers/CommonController.php b/api/v2/app/src/controllers/CommonController.php index bbbc5d9..d679b9c 100755 --- a/api/v2/app/src/controllers/CommonController.php +++ b/api/v2/app/src/controllers/CommonController.php @@ -1378,6 +1378,46 @@ class CommonController extends ApiController } } + // Отдельные города субъекта (separate_city, напр. Новокузнецк): их районы — своей группой, + // как в десктопном «Поиске»; иначе на мобилке эти районы недоступны вовсе. + // separate_city.region_id ссылается на РЕБЁНКА субъекта (мета-регион, напр. 1483), а не на сам субъект — + // поэтому матчим по id из $region (дети переданного субъекта), как getRaionByRegion по $region[0]['id']. + $sep_region_ids = []; + foreach ($region as $rg) { + if (!empty($rg['id'])) $sep_region_ids[] = (int)$rg['id']; + } + // плюс сам переданный region_id (форма может слать субъект ИЛИ мету — матчим по обоим) + if (is_array($region_rf_id)) { + foreach ($region_rf_id as $rid) $sep_region_ids[] = (int)$rid; + } elseif ($region_rf_id) { + $sep_region_ids[] = (int)$region_rf_id; + } + $sep_region_ids = array_values(array_unique(array_filter($sep_region_ids))); + if (!empty($sep_region_ids)) { + $sql = "SELECT * FROM separate_city WHERE region_id IN (" . implode(',', $sep_region_ids) . ")"; + if ($rez = mysql_query($sql)) { + while ($city = mysql_fetch_assoc($rez)) { + // id группы города — отрицательный, чтобы не пересекаться с id rf_regions + $city_group_id = -(int)$city['id']; + $groups[] = ['id' => $city_group_id, 'name' => $city['name']]; + + $sql_rayon = "SELECT r.* FROM rayon r JOIN separate_city_rayons scr ON scr.rayon_id = r.id + WHERE scr.sep_city_id = " . (int)$city['id'] . " ORDER BY r.rayon"; + if ($rez_rayon = mysql_query($sql_rayon)) { + while ($rayon = mysql_fetch_assoc($rez_rayon)) { + $list[] = ['id' => (int)$rayon['id'], 'name' => $rayon['rayon'], 'group_id' => $city_group_id]; + } + } + } + } + } + + // фронт читает groups как мапу id→имя (groups[group_id]) — приводим к форме остальных эндпоинтов + $groups_map = []; + foreach ($groups as $g) + $groups_map[(int)$g['id']] = $g['name']; + $groups = $groups_map; + if (!$error) { $app->response->header('Content-Type', 'application/json'); $app->response->setStatus(200); @@ -3981,6 +4021,10 @@ class CommonController extends ApiController $errors[] = mysql_error(); } + // синхронный ES-реиндекс: сменился владелец (id_add_user) — объект сразу у нового агента (как Sphinx-синк выше) + require_once($_SERVER['DOCUMENT_ROOT'] . "/engine/helpers/search_es_bridge.php"); + es_reindex_objects(array((int)$object_id)); + //перенос событий объектов $sql = "UPDATE user_object_events SET user_id = $new_user->id WHERE object_id = $object_id"; if (!mysql_query($sql)) { @@ -8357,88 +8401,88 @@ class CommonController extends ApiController $data['summ'] = floatval($event['sum']); $data['time'] = date("H:i", strtotime($time_zone, strtotime($event['create_date']))); - $deal_id_val = !empty($event['deal_id']) ? intval($event['deal_id']) : null; - $data['deal'] = null; + $deal_id_val = !empty($event['deal_id']) ? intval($event['deal_id']) : null; + $data['deal'] = null; - if ($deal_id_val) { - $sql_deal = "SELECT * FROM deals WHERE id = " . $deal_id_val . " AND status != 2 LIMIT 1"; - $rez_deal = mysql_query($sql_deal); - if ($rez_deal && mysql_num_rows($rez_deal) > 0) { - $deal_row = mysql_fetch_assoc($rez_deal); + if ($deal_id_val) { + $sql_deal = "SELECT * FROM deals WHERE id = " . $deal_id_val . " AND status != 2 LIMIT 1"; + $rez_deal = mysql_query($sql_deal); + if ($rez_deal && mysql_num_rows($rez_deal) > 0) { + $deal_row = mysql_fetch_assoc($rez_deal); - $data['deal']['id'] = intval($deal_row['id']); - $data['deal']['contract_price'] = floatval($deal_row['contract_price']); - $data['deal']['agent_commission'] = floatval($deal_row['agent_commission']); + $data['deal']['id'] = intval($deal_row['id']); + $data['deal']['contract_price'] = floatval($deal_row['contract_price']); + $data['deal']['agent_commission'] = floatval($deal_row['agent_commission']); - $deal_sides = []; - foreach (['one', 'two'] as $side_num) { - $side_text = !empty($deal_row['side_' . $side_num]) ? $deal_row['side_' . $side_num] : ''; - $side_data = [ - 'name' => $side_text, - 'requisition_id' => null, - 'requisition_name' => null, - 'client_id' => null, - 'client_name' => null, - 'object_id' => null, - 'object_name' => null, - 'object_address' => null, - ]; + $deal_sides = []; + foreach (['one', 'two'] as $side_num) { + $side_text = !empty($deal_row['side_' . $side_num]) ? $deal_row['side_' . $side_num] : ''; + $side_data = [ + 'name' => $side_text, + 'requisition_id' => null, + 'requisition_name' => null, + 'client_id' => null, + 'client_name' => null, + 'object_id' => null, + 'object_name' => null, + 'object_address' => null, + ]; - $req_id_val = !empty($deal_row['side_' . $side_num . '_requisition_id']) ? intval($deal_row['side_' . $side_num . '_requisition_id']) : null; - if ($req_id_val) { - $sql_req = "SELECT name, client_id FROM requisitions WHERE id = " . $req_id_val . " LIMIT 1"; - $rez_req = mysql_query($sql_req); - if ($rez_req && mysql_num_rows($rez_req) > 0) { - $row_req = mysql_fetch_assoc($rez_req); - $side_data['requisition_id'] = $req_id_val; - $side_data['requisition_name'] = $row_req['name']; - if (!empty($row_req['client_id'])) { - $side_data['client_id'] = intval($row_req['client_id']); - $sql_cl = "SELECT id, fio FROM clients WHERE id = " . intval($row_req['client_id']) . " LIMIT 1"; - $rez_cl = mysql_query($sql_cl); - if ($rez_cl && mysql_num_rows($rez_cl) > 0) { - $row_cl = mysql_fetch_assoc($rez_cl); - $side_data['client_name'] = $row_cl['fio']; - } - } - } - } + $req_id_val = !empty($deal_row['side_' . $side_num . '_requisition_id']) ? intval($deal_row['side_' . $side_num . '_requisition_id']) : null; + if ($req_id_val) { + $sql_req = "SELECT name, client_id FROM requisitions WHERE id = " . $req_id_val . " LIMIT 1"; + $rez_req = mysql_query($sql_req); + if ($rez_req && mysql_num_rows($rez_req) > 0) { + $row_req = mysql_fetch_assoc($rez_req); + $side_data['requisition_id'] = $req_id_val; + $side_data['requisition_name'] = $row_req['name']; + if (!empty($row_req['client_id'])) { + $side_data['client_id'] = intval($row_req['client_id']); + $sql_cl = "SELECT id, fio FROM clients WHERE id = " . intval($row_req['client_id']) . " LIMIT 1"; + $rez_cl = mysql_query($sql_cl); + if ($rez_cl && mysql_num_rows($rez_cl) > 0) { + $row_cl = mysql_fetch_assoc($rez_cl); + $side_data['client_name'] = $row_cl['fio']; + } + } + } + } - $obj_id_val = !empty($deal_row['side_' . $side_num . '_object_id']) ? intval($deal_row['side_' . $side_num . '_object_id']) : null; - if ($obj_id_val) { - $side_data['object_id'] = $obj_id_val; - $sql_obj = "SELECT id, nazv, adres FROM objects WHERE id = " . $obj_id_val . " LIMIT 1"; - $rez_obj = mysql_query($sql_obj); - if ($rez_obj && mysql_num_rows($rez_obj) > 0) { - $row_obj = mysql_fetch_assoc($rez_obj); - $side_data['object_name'] = $row_obj['nazv']; - $side_data['object_address'] = $row_obj['adres']; - } - } + $obj_id_val = !empty($deal_row['side_' . $side_num . '_object_id']) ? intval($deal_row['side_' . $side_num . '_object_id']) : null; + if ($obj_id_val) { + $side_data['object_id'] = $obj_id_val; + $sql_obj = "SELECT id, nazv, adres FROM objects WHERE id = " . $obj_id_val . " LIMIT 1"; + $rez_obj = mysql_query($sql_obj); + if ($rez_obj && mysql_num_rows($rez_obj) > 0) { + $row_obj = mysql_fetch_assoc($rez_obj); + $side_data['object_name'] = $row_obj['nazv']; + $side_data['object_address'] = $row_obj['adres']; + } + } - $deal_sides[$side_num] = $side_data; - } - $data['deal']['sides'] = $deal_sides; + $deal_sides[$side_num] = $side_data; + } + $data['deal']['sides'] = $deal_sides; - $deal_docs = []; - $sql_ddocs = "SELECT d.id, d.name, did.comment FROM inner_docs d JOIN deal_inner_doc did ON did.inner_doc_id = d.id WHERE did.deal_id = " . $deal_id_val; - $rez_ddocs = mysql_query($sql_ddocs); - if ($rez_ddocs && mysql_num_rows($rez_ddocs) > 0) { - while ($dd_row = mysql_fetch_assoc($rez_ddocs)) { - $deal_docs[] = [ - 'id' => intval($dd_row['id']), - 'name' => $dd_row['name'], + $deal_docs = []; + $sql_ddocs = "SELECT d.id, d.name, did.comment FROM inner_docs d JOIN deal_inner_doc did ON did.inner_doc_id = d.id WHERE did.deal_id = " . $deal_id_val; + $rez_ddocs = mysql_query($sql_ddocs); + if ($rez_ddocs && mysql_num_rows($rez_ddocs) > 0) { + while ($dd_row = mysql_fetch_assoc($rez_ddocs)) { + $deal_docs[] = [ + 'id' => intval($dd_row['id']), + 'name' => $dd_row['name'], 'comment' => isset($dd_row['comment']) ? $dd_row['comment'] : '', - 'url' => $host . '/ajax/getInnerDoc.php?id=' . intval($dd_row['id']) . '&download_pdf=true&t=' . time(), - ]; - } - } - $data['deal']['documents'] = $deal_docs; - } - } + 'url' => $host . '/ajax/getInnerDoc.php?id=' . intval($dd_row['id']) . '&download_pdf=true&t=' . time(), + ]; + } + } + $data['deal']['documents'] = $deal_docs; + } + } $data['document'] = null; - if (!$deal_id_val && isset($event['document_id'])) { + if (!$deal_id_val && isset($event['document_id'])) { $doc_id = $event['document_id']; if ($doc = \Docs::getInnerDoc(null, $doc_id)) { @@ -8457,8 +8501,8 @@ class CommonController extends ApiController $rez_cl = mysql_query($sql_cl); if ($doc_cl = mysql_fetch_assoc($rez_cl)) { - // Маскируем email/phone клиента, если у текущего пользователя - // включено `hide_client_contacts`. Helper сам проверяет право. + // Маскируем email/phone клиента, если у текущего пользователя + // включено `hide_client_contacts`. Helper сам проверяет право. $cl_contacts = []; if ($doc_cl['email']) $cl_contacts[] = mask_email_value_if_needed($doc_cl['email']); @@ -8472,7 +8516,7 @@ class CommonController extends ApiController 'title' => $doc_cl['fio'], 'contacts' => ((!empty($cl_contacts)) ? ' (' . implode(', ', $cl_contacts) . ')' : ''), ]; - // Маскируем title (fio), если он вида "Новый клиент +7...". + // Маскируем title (fio), если он вида "Новый клиент +7...". $doc_party['title'] = mask_fio_if_contains_phone($doc_party['title']); $doc_parties[] = $doc_party; } @@ -8700,8 +8744,8 @@ class CommonController extends ApiController '' as mts, '' as tele2, '' as tracking, - 0 as cancel, - 0 as deal_id, + 0 as cancel, + 0 as deal_id, if ( ev.from_id <> 0, (SELECT u.user_logo FROM users as u WHERE u.id = ev.from_id), @@ -9066,88 +9110,88 @@ class CommonController extends ApiController $data['summ'] = floatval($event['sum']); $data['time'] = date("H:i", strtotime($time_zone, strtotime($event['create_date']))); - $deal_id_val = !empty($event['deal_id']) ? intval($event['deal_id']) : null; - $data['deal'] = null; + $deal_id_val = !empty($event['deal_id']) ? intval($event['deal_id']) : null; + $data['deal'] = null; - if ($deal_id_val) { - $sql_deal = "SELECT * FROM deals WHERE id = " . $deal_id_val . " AND status != 2 LIMIT 1"; - $rez_deal = mysql_query($sql_deal); - if ($rez_deal && mysql_num_rows($rez_deal) > 0) { - $deal_row = mysql_fetch_assoc($rez_deal); + if ($deal_id_val) { + $sql_deal = "SELECT * FROM deals WHERE id = " . $deal_id_val . " AND status != 2 LIMIT 1"; + $rez_deal = mysql_query($sql_deal); + if ($rez_deal && mysql_num_rows($rez_deal) > 0) { + $deal_row = mysql_fetch_assoc($rez_deal); - $data['deal']['id'] = intval($deal_row['id']); - $data['deal']['contract_price'] = floatval($deal_row['contract_price']); - $data['deal']['agent_commission'] = floatval($deal_row['agent_commission']); + $data['deal']['id'] = intval($deal_row['id']); + $data['deal']['contract_price'] = floatval($deal_row['contract_price']); + $data['deal']['agent_commission'] = floatval($deal_row['agent_commission']); - $deal_sides = []; - foreach (['one', 'two'] as $side_num) { - $side_text = !empty($deal_row['side_' . $side_num]) ? $deal_row['side_' . $side_num] : ''; - $side_data = [ - 'name' => $side_text, - 'requisition_id' => null, - 'requisition_name' => null, - 'client_id' => null, - 'client_name' => null, - 'object_id' => null, - 'object_name' => null, - 'object_address' => null, - ]; + $deal_sides = []; + foreach (['one', 'two'] as $side_num) { + $side_text = !empty($deal_row['side_' . $side_num]) ? $deal_row['side_' . $side_num] : ''; + $side_data = [ + 'name' => $side_text, + 'requisition_id' => null, + 'requisition_name' => null, + 'client_id' => null, + 'client_name' => null, + 'object_id' => null, + 'object_name' => null, + 'object_address' => null, + ]; - $req_id_val = !empty($deal_row['side_' . $side_num . '_requisition_id']) ? intval($deal_row['side_' . $side_num . '_requisition_id']) : null; - if ($req_id_val) { - $sql_req = "SELECT name, client_id FROM requisitions WHERE id = " . $req_id_val . " LIMIT 1"; - $rez_req = mysql_query($sql_req); - if ($rez_req && mysql_num_rows($rez_req) > 0) { - $row_req = mysql_fetch_assoc($rez_req); - $side_data['requisition_id'] = $req_id_val; - $side_data['requisition_name'] = $row_req['name']; - if (!empty($row_req['client_id'])) { - $side_data['client_id'] = intval($row_req['client_id']); - $sql_cl = "SELECT id, fio FROM clients WHERE id = " . intval($row_req['client_id']) . " LIMIT 1"; - $rez_cl = mysql_query($sql_cl); - if ($rez_cl && mysql_num_rows($rez_cl) > 0) { - $row_cl = mysql_fetch_assoc($rez_cl); - $side_data['client_name'] = $row_cl['fio']; - } - } - } - } + $req_id_val = !empty($deal_row['side_' . $side_num . '_requisition_id']) ? intval($deal_row['side_' . $side_num . '_requisition_id']) : null; + if ($req_id_val) { + $sql_req = "SELECT name, client_id FROM requisitions WHERE id = " . $req_id_val . " LIMIT 1"; + $rez_req = mysql_query($sql_req); + if ($rez_req && mysql_num_rows($rez_req) > 0) { + $row_req = mysql_fetch_assoc($rez_req); + $side_data['requisition_id'] = $req_id_val; + $side_data['requisition_name'] = $row_req['name']; + if (!empty($row_req['client_id'])) { + $side_data['client_id'] = intval($row_req['client_id']); + $sql_cl = "SELECT id, fio FROM clients WHERE id = " . intval($row_req['client_id']) . " LIMIT 1"; + $rez_cl = mysql_query($sql_cl); + if ($rez_cl && mysql_num_rows($rez_cl) > 0) { + $row_cl = mysql_fetch_assoc($rez_cl); + $side_data['client_name'] = $row_cl['fio']; + } + } + } + } - $obj_id_val = !empty($deal_row['side_' . $side_num . '_object_id']) ? intval($deal_row['side_' . $side_num . '_object_id']) : null; - if ($obj_id_val) { - $side_data['object_id'] = $obj_id_val; - $sql_obj = "SELECT id, nazv, adres FROM objects WHERE id = " . $obj_id_val . " LIMIT 1"; - $rez_obj = mysql_query($sql_obj); - if ($rez_obj && mysql_num_rows($rez_obj) > 0) { - $row_obj = mysql_fetch_assoc($rez_obj); - $side_data['object_name'] = $row_obj['nazv']; - $side_data['object_address'] = $row_obj['adres']; - } - } + $obj_id_val = !empty($deal_row['side_' . $side_num . '_object_id']) ? intval($deal_row['side_' . $side_num . '_object_id']) : null; + if ($obj_id_val) { + $side_data['object_id'] = $obj_id_val; + $sql_obj = "SELECT id, nazv, adres FROM objects WHERE id = " . $obj_id_val . " LIMIT 1"; + $rez_obj = mysql_query($sql_obj); + if ($rez_obj && mysql_num_rows($rez_obj) > 0) { + $row_obj = mysql_fetch_assoc($rez_obj); + $side_data['object_name'] = $row_obj['nazv']; + $side_data['object_address'] = $row_obj['adres']; + } + } - $deal_sides[$side_num] = $side_data; - } - $data['deal']['sides'] = $deal_sides; + $deal_sides[$side_num] = $side_data; + } + $data['deal']['sides'] = $deal_sides; - $deal_docs = []; - $sql_ddocs = "SELECT d.id, d.name, did.comment FROM inner_docs d JOIN deal_inner_doc did ON did.inner_doc_id = d.id WHERE did.deal_id = " . $deal_id_val; - $rez_ddocs = mysql_query($sql_ddocs); - if ($rez_ddocs && mysql_num_rows($rez_ddocs) > 0) { - while ($dd_row = mysql_fetch_assoc($rez_ddocs)) { - $deal_docs[] = [ - 'id' => intval($dd_row['id']), - 'name' => $dd_row['name'], + $deal_docs = []; + $sql_ddocs = "SELECT d.id, d.name, did.comment FROM inner_docs d JOIN deal_inner_doc did ON did.inner_doc_id = d.id WHERE did.deal_id = " . $deal_id_val; + $rez_ddocs = mysql_query($sql_ddocs); + if ($rez_ddocs && mysql_num_rows($rez_ddocs) > 0) { + while ($dd_row = mysql_fetch_assoc($rez_ddocs)) { + $deal_docs[] = [ + 'id' => intval($dd_row['id']), + 'name' => $dd_row['name'], 'comment' => isset($dd_row['comment']) ? $dd_row['comment'] : '', - 'url' => $host . '/ajax/getInnerDoc.php?id=' . intval($dd_row['id']) . '&download_pdf=true&t=' . time(), - ]; - } - } - $data['deal']['documents'] = $deal_docs; - } - } + 'url' => $host . '/ajax/getInnerDoc.php?id=' . intval($dd_row['id']) . '&download_pdf=true&t=' . time(), + ]; + } + } + $data['deal']['documents'] = $deal_docs; + } + } $data['document'] = null; - if (!$deal_id_val && isset($event['document_id'])) { + if (!$deal_id_val && isset($event['document_id'])) { $doc_id = $event['document_id']; if ($doc = \Docs::getInnerDoc(null, $doc_id)) { @@ -9166,8 +9210,8 @@ class CommonController extends ApiController $rez_cl = mysql_query($sql_cl); if ($doc_cl = mysql_fetch_assoc($rez_cl)) { - // Маскируем email/phone клиента, если у текущего пользователя - // включено `hide_client_contacts`. Helper сам проверяет право. + // Маскируем email/phone клиента, если у текущего пользователя + // включено `hide_client_contacts`. Helper сам проверяет право. $cl_contacts = []; if ($doc_cl['email']) $cl_contacts[] = mask_email_value_if_needed($doc_cl['email']); @@ -9181,7 +9225,7 @@ class CommonController extends ApiController 'title' => $doc_cl['fio'], 'contacts' => ((!empty($cl_contacts)) ? ' (' . implode(', ', $cl_contacts) . ')' : ''), ]; - // Маскируем title (fio), если он вида "Новый клиент +7...". + // Маскируем title (fio), если он вида "Новый клиент +7...". $doc_party['title'] = mask_fio_if_contains_phone($doc_party['title']); $doc_parties[] = $doc_party; } @@ -15018,7 +15062,7 @@ class CommonController extends ApiController $user->get($user_id); $user->checkPermissions($user_id, false); $agency_id = $user->agencyId; - if(in_array($agency_id, [4, 8257, 7384, 11082, 12556, 13154, 14134, 11417, 12028, 18237, 19111,19794, 22666])){ + if(in_array($agency_id, [4, 8257, 7384, 11082, 12556, 13154, 14134, 11417, 12028, 18237, 19111,19794, 22666, 20189])){ $required_type = false; $required_role = false; }