Actual prod

This commit is contained in:
mac 2026-07-10 18:36:26 +03:00
parent 72297c6644
commit 25b02a903c

View File

@ -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;
}