9199 lines
334 KiB
PHP
9199 lines
334 KiB
PHP
|
|
<?php
|
|||
|
|
include $_SERVER['DOCUMENT_ROOT'] . '/import/obj/ImportRecord.php';
|
|||
|
|
include $_SERVER['DOCUMENT_ROOT'] . '/import/obj/Building.php';
|
|||
|
|
include $_SERVER['DOCUMENT_ROOT'] . '/import/helper/Date.php';
|
|||
|
|
include $_SERVER['DOCUMENT_ROOT'] . '/import/Clock/Clock.php';
|
|||
|
|
include $_SERVER['DOCUMENT_ROOT'] . '/import/Clock/RealtimeClock.php';
|
|||
|
|
require_once($_SERVER['DOCUMENT_ROOT'] . '/engine/classes/phpexcel/Classes/PHPExcel.php');
|
|||
|
|
require_once($_SERVER['DOCUMENT_ROOT'] . '/engine/classes/phpexcel/Classes/PHPExcel/IOFactory.php');
|
|||
|
|
require_once($_SERVER['DOCUMENT_ROOT'] . '/engine/classes/phpexcel/Classes/PHPExcel/Writer/Excel2007.php');
|
|||
|
|
|
|||
|
|
//ini_set('display_errors', '1');
|
|||
|
|
//ini_set('display_startup_errors', '1');
|
|||
|
|
//error_reporting(E_ALL);
|
|||
|
|
|
|||
|
|
|
|||
|
|
class Complex
|
|||
|
|
{
|
|||
|
|
private $user = null;
|
|||
|
|
private $types_comples = array();
|
|||
|
|
private $db = null;
|
|||
|
|
private $sphinx = null;
|
|||
|
|
private $sphinx2 = null;
|
|||
|
|
private $table = 'complex_list';
|
|||
|
|
private $paymentTypes = array();
|
|||
|
|
private $housingClass = array();
|
|||
|
|
private $complex;
|
|||
|
|
private $objRequisitionsArray = false;
|
|||
|
|
private $objPricesArray = false;
|
|||
|
|
private $userIds = array();
|
|||
|
|
private $filter = array();
|
|||
|
|
private $page_obj = 1;
|
|||
|
|
private $page = 1;
|
|||
|
|
private $limit = 10;
|
|||
|
|
private $listDecorations = array();
|
|||
|
|
private $user_id = 0;
|
|||
|
|
|
|||
|
|
public function __construct($db = null)
|
|||
|
|
{
|
|||
|
|
|
|||
|
|
if ($db) {
|
|||
|
|
$this->db = $db;
|
|||
|
|
} else {
|
|||
|
|
$pdo = new MysqlPdo(hst, ndb, user, pass);
|
|||
|
|
$sql = "SET NAMES 'utf8mb4'";
|
|||
|
|
$pdo->query($sql);
|
|||
|
|
$this->db = $pdo;
|
|||
|
|
}
|
|||
|
|
$this->set_types_complex();
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
public function createImport($document) {
|
|||
|
|
$this->set_user();
|
|||
|
|
|
|||
|
|
$result = $this->uploadFile($document, 'ImportDocuments');
|
|||
|
|
if ($result) {
|
|||
|
|
|
|||
|
|
$file_content = file_get_contents($result);
|
|||
|
|
|
|||
|
|
if ($this->endsWith($result, 'csv')) {
|
|||
|
|
$data = $this->parseCsv(mb_convert_encoding($file_content, 'utf-8'));
|
|||
|
|
} else if($this->endsWith($result, 'xlsx')) {
|
|||
|
|
$temp_name = tempnam(sys_get_temp_dir(), 'tmp-xlsx');
|
|||
|
|
|
|||
|
|
file_put_contents($temp_name, $file_content);
|
|||
|
|
|
|||
|
|
$type = PHPExcel_IOFactory::identify($temp_name);
|
|||
|
|
$objReader = PHPExcel_IOFactory::createReader($type);
|
|||
|
|
$objPHPExcel = $objReader->load($temp_name);
|
|||
|
|
$data = [];
|
|||
|
|
foreach ($objPHPExcel->getWorksheetIterator() as $worksheet) {
|
|||
|
|
// $worksheets[$worksheet->getTitle()] = $worksheet->toArray();
|
|||
|
|
$data = $worksheet->toArray('');
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
} else {
|
|||
|
|
return ['status' => false, 'message' => "Format not supported"];
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
$columns = [];
|
|||
|
|
$rows_count = 10;
|
|||
|
|
foreach ($data as $rowIndex => $row) {
|
|||
|
|
foreach ($row as $key => $value) {
|
|||
|
|
if ($rowIndex < $rows_count) {
|
|||
|
|
$value = is_string($value) ? str_replace('"', "`", $value) : $value;
|
|||
|
|
$value = is_string($value) ? preg_replace('/\s/', " ", $value) : $value;
|
|||
|
|
if (isset($columns[$key])) {
|
|||
|
|
$columns[$key][] = $value;
|
|||
|
|
} else {
|
|||
|
|
$columns[$key] = [$value];
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
$response = ['head' => isset($data[0]) ? $data[0] : [] ,'body' => $columns];
|
|||
|
|
$insertSql = "INSERT INTO complex_house_import SET user_id = {$this->user_id}, document = '{$result}', step = 2, document_preview = '" . json_encode($response, JSON_UNESCAPED_UNICODE) . "'";
|
|||
|
|
$status = $this->db->query($insertSql);
|
|||
|
|
if ($status) {
|
|||
|
|
$response['id'] = (int)$this->db->insert_id();
|
|||
|
|
$response['step'] = 2;
|
|||
|
|
return $response;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
return $result;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
public function getImportHouse($import_id) {
|
|||
|
|
$this->set_user();
|
|||
|
|
$sql = $this->db->query("SELECT * FROM complex_house_import WHERE id = $import_id AND user_id = {$this->user_id}");
|
|||
|
|
$import = $this->db->fetch_assoc($sql);
|
|||
|
|
$import['document_preview'] = json_decode(str_replace(' ', " ", $import['document_preview']), true);
|
|||
|
|
$import['house_name_to_id'] = json_decode($import['house_name_to_id'], true);
|
|||
|
|
$import['dynamic_fields'] = json_decode($import['dynamic_fields'], true);
|
|||
|
|
$import['mapping_fields'] = json_decode($import['mapping_fields'], true);
|
|||
|
|
return $import;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
public function getImportHouseStatus($import_id) {
|
|||
|
|
$this->set_user();
|
|||
|
|
$sql = $this->db->query("SELECT status, step FROM complex_house_import WHERE id = $import_id AND user_id = {$this->user_id}");
|
|||
|
|
$import = $this->db->fetch_assoc($sql);
|
|||
|
|
|
|||
|
|
return $import;
|
|||
|
|
}
|
|||
|
|
public function getHomeById($house_id){
|
|||
|
|
|
|||
|
|
$sql = $this->db->query("
|
|||
|
|
SELECT
|
|||
|
|
house.name,
|
|||
|
|
ent.position AS entrance,
|
|||
|
|
floor.position AS floor,
|
|||
|
|
crn.note,
|
|||
|
|
room.*,
|
|||
|
|
cs.name AS status,
|
|||
|
|
house.name AS house_name
|
|||
|
|
FROM complex_rooms room
|
|||
|
|
JOIN complex_floors floor ON room.floor_id = floor.id
|
|||
|
|
JOIN complex_entrances ent ON floor.complex_entrance_id = ent.id
|
|||
|
|
JOIN complex_houses house ON ent.complex_house_id = house.id
|
|||
|
|
LEFT JOIN complex_status cs ON cs.id = room.complex_status_id
|
|||
|
|
LEFT JOIN complex_room_notes crn ON room.id = crn.room_id
|
|||
|
|
WHERE house.id = $house_id
|
|||
|
|
");
|
|||
|
|
|
|||
|
|
while($import = $this->db->fetch_assoc($sql)){
|
|||
|
|
$import['attibutes'] = $this->getAttrById($import['id']);
|
|||
|
|
$house[] = $import;
|
|||
|
|
}
|
|||
|
|
return $house;
|
|||
|
|
}
|
|||
|
|
public function getAttrById($room_id){
|
|||
|
|
$attr = [];
|
|||
|
|
$sql = $this->db->query("
|
|||
|
|
SELECT * FROM complex_rooms_attribute WHERE complex_room_id = $room_id
|
|||
|
|
");
|
|||
|
|
while($import = $this->db->fetch_assoc($sql)){
|
|||
|
|
$attr[] = $import;
|
|||
|
|
}
|
|||
|
|
return $attr;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
public function downloadHouse($house_id, $complex_name)
|
|||
|
|
{
|
|||
|
|
// НИЧЕГО не выводим!
|
|||
|
|
while (ob_get_level() > 0) { ob_end_clean(); }
|
|||
|
|
|
|||
|
|
// На всякий случай — не печатать ошибки в поток ответа
|
|||
|
|
ini_set('display_errors', '0');
|
|||
|
|
ini_set('display_startup_errors', '0');
|
|||
|
|
error_reporting(E_ALL);
|
|||
|
|
|
|||
|
|
// set_user может кидать Notice — обернём
|
|||
|
|
if (method_exists($this, 'set_user')) {
|
|||
|
|
try { $this->set_user(); } catch (\Throwable $e) { /* молча */ }
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// --- Утилита числовой очистки
|
|||
|
|
$toInt = function ($value) {
|
|||
|
|
if (is_numeric($value)) return (float)$value;
|
|||
|
|
if (is_string($value)) {
|
|||
|
|
$clean = preg_replace('/[^\d\-\.\,]/u', '', $value);
|
|||
|
|
$clean = str_replace(',', '.', $clean);
|
|||
|
|
if ($clean !== '' && is_numeric($clean)) return (float)$clean;
|
|||
|
|
}
|
|||
|
|
return $value;
|
|||
|
|
};
|
|||
|
|
|
|||
|
|
// --- Получаем данные
|
|||
|
|
$house = $this->getHomeById($house_id);
|
|||
|
|
if (!is_array($house)) $house = [];
|
|||
|
|
|
|||
|
|
// --- Справочники
|
|||
|
|
$typeMapping = [
|
|||
|
|
'apartment' => 'Квартира',
|
|||
|
|
'apartments' => 'Апартаменты',
|
|||
|
|
'parking_space' => 'Машиноместо',
|
|||
|
|
'office' => 'Офис',
|
|||
|
|
'storage_room' => 'Кладовка',
|
|||
|
|
'warehouse' => 'Склад',
|
|||
|
|
'retail_space' => 'Торговое Помещение',
|
|||
|
|
'commercial_space' => 'Помещение свободного назначения',
|
|||
|
|
'townhouse' => 'Таунхаус',
|
|||
|
|
'villa' => 'Вилла',
|
|||
|
|
'penthouse' => 'Пентхаус',
|
|||
|
|
'duplex' => 'Дуплекс',
|
|||
|
|
'cottage' => 'Коттедж',
|
|||
|
|
];
|
|||
|
|
$planningMapping = [
|
|||
|
|
'none_of_the_above' => '',
|
|||
|
|
'studio' => 'Студия',
|
|||
|
|
'european_layout' => 'Европланировка',
|
|||
|
|
'available' => 'Свободная планировка',
|
|||
|
|
];
|
|||
|
|
$window_placement_id = $this->get_windows_placements() ?: [];
|
|||
|
|
$decoration_types = $this->get_decoration_types() ?: [];
|
|||
|
|
// var_dump($window_placement_id);die;
|
|||
|
|
// --- Сборка строк данных
|
|||
|
|
$excelData = [];
|
|||
|
|
foreach ($house as $room) {
|
|||
|
|
$roomsAreas = [];
|
|||
|
|
$balconiesAreas = [];
|
|||
|
|
$loggiasAreas = [];
|
|||
|
|
$bathroomsAreas = [];
|
|||
|
|
// var_dump($room['decoration_id']);
|
|||
|
|
// ВНИМАНИЕ: у тебя было 'attibutes'. Если в БД ключ 'attributes', то поправь:
|
|||
|
|
$attrs = [];
|
|||
|
|
if (!empty($room['attributes']) && is_array($room['attributes'])) {
|
|||
|
|
$attrs = $room['attributes'];
|
|||
|
|
} elseif (!empty($room['attibutes']) && is_array($room['attibutes'])) {
|
|||
|
|
$attrs = $room['attibutes'];
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
foreach ($attrs as $attr) {
|
|||
|
|
if (empty($attr['attribute_type']) || !isset($attr['area'])) continue;
|
|||
|
|
switch ($attr['attribute_type']) {
|
|||
|
|
case 'room': $roomsAreas[] = $attr['area']; break;
|
|||
|
|
case 'balcony': $balconiesAreas[] = $attr['area']; break;
|
|||
|
|
case 'loggia': $loggiasAreas[] = $attr['area']; break;
|
|||
|
|
case 'bathroom': $bathroomsAreas[] = $attr['area']; break;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
$roomAreaStr = implode(';', $roomsAreas);
|
|||
|
|
$bathroomAreaStr = implode(';', $bathroomsAreas);
|
|||
|
|
|
|||
|
|
$balconyLoggiaStr = '';
|
|||
|
|
if (!empty($loggiasAreas)) {
|
|||
|
|
foreach ($loggiasAreas as $a) {
|
|||
|
|
$a = trim(preg_replace('/\s+/', '', (string)$a));
|
|||
|
|
$balconyLoggiaStr .= 'Лоджия:' . $a . ';';
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
if (!empty($balconiesAreas)) {
|
|||
|
|
foreach ($balconiesAreas as $a) {
|
|||
|
|
$a = trim(preg_replace('/\s+/', '', (string)$a));
|
|||
|
|
$balconyLoggiaStr .= 'Балкон:' . $a . ';';
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
// var_dump($room);die;
|
|||
|
|
$balconyLoggiaStr = rtrim($balconyLoggiaStr, ';');
|
|||
|
|
$balconyLoggiaStr = preg_replace('/\s*;\s*/', ';', $balconyLoggiaStr);
|
|||
|
|
|
|||
|
|
// Собираем строку данных. КЛЮЧИ ДОЛЖНЫ СОВПАДАТЬ С ЗАГОЛОВКАМИ В ШАБЛОНЕ!
|
|||
|
|
$row = [
|
|||
|
|
'Номер квартиры*' => isset($room['number']) ? $room['number'] : '',
|
|||
|
|
'Полная стоимость, руб*' => isset($room['total_amount']) ? $toInt($room['total_amount']) : '',
|
|||
|
|
'Название ЖК*' => $complex_name ?: '',
|
|||
|
|
'Дом*' => isset($room['house_name']) ? $room['house_name'] : '',
|
|||
|
|
'Подъезд*' => isset($room['entrance']) ? $room['entrance'] : '',
|
|||
|
|
'Этаж*' => isset($room['floor']) ? $room['floor'] : '',
|
|||
|
|
'Статус помещения*' => isset($room['status']) ? $room['status'] : '',
|
|||
|
|
'Цена в рассрочку, руб' => (isset($room['installment_price']) && (!empty($room['payment_types']) && strpos($room['payment_types'], 'INSTALLMENT') !== false)) ? $toInt($room['installment_price']) : '',
|
|||
|
|
'Ипотека' => (!empty($room['payment_types']) && strpos($room['payment_types'], 'MORTGAGE') !== false) ? 'Да' : '',
|
|||
|
|
'Номер на площадке' => isset($room['on_site_number']) ? $room['on_site_number'] : '',
|
|||
|
|
'Код планировки' => isset($room['layout_code']) ? $room['layout_code'] : '',
|
|||
|
|
'Тип помещения*' => isset($typeMapping[$room['type']]) ? $typeMapping[$room['type']] : 'Квартира',
|
|||
|
|
'Особенности планировки' => isset($planningMapping[$room['layout_feature']]) ? $planningMapping[$room['layout_feature']] : '',
|
|||
|
|
'Кол-во комнат*' => isset($room['rooms_count']) ? $room['rooms_count'] : '',
|
|||
|
|
'Общая площадь, м2*' => isset($room['area']) ? $toInt($room['area']) : '',
|
|||
|
|
'Жилая площадь, м2' => isset($room['living_area']) ? $toInt($room['living_area']) : '',
|
|||
|
|
'Площадь кухни, м2' => isset($room['kitchen_area']) ? $toInt($room['kitchen_area']) : '',
|
|||
|
|
'Расчетная площадь, м2' => isset($room['estimated_area']) ? $toInt($room['estimated_area']) : '',
|
|||
|
|
'Описание' => isset($room['description']) ? $room['description'] : '',
|
|||
|
|
'Куда выходят окна' => (!empty($room['windows_placement_id']) && !empty($window_placement_id[$room['windows_placement_id']-1]['name']))
|
|||
|
|
? $window_placement_id[$room['windows_placement_id']-1]['name'] : '',
|
|||
|
|
'Высота потолков' => isset($room['ceiling_height']) ? $toInt($room['ceiling_height']) : '',
|
|||
|
|
'Кол-во лоджий' => isset($room['loggias_count']) ? (int)$room['loggias_count'] : '',
|
|||
|
|
'Кол-во балконов' => isset($room['balconies_count']) ? (int)$room['balconies_count'] : '',
|
|||
|
|
'Кол-во совмещенных санузлов' => isset($room['combined_bathrooms_count']) ? (int)$room['combined_bathrooms_count'] : '',
|
|||
|
|
'Кол-во раздельных санузлов' => isset($room['seperated_bathrooms_count']) ? (int)$room['seperated_bathrooms_count'] : '',
|
|||
|
|
'Отделка' => (!empty($room['decoration_id']) && !empty($decoration_types[$room['decoration_id']-1]['name']))
|
|||
|
|
? $decoration_types[$room['decoration_id']-1]['name'] : '',
|
|||
|
|
'Номер помещения для БТИ' => isset($room['bti_room_number']) ? $room['bti_room_number'] : '',
|
|||
|
|
'Общая площадь по БТИ' => isset($room['bti_total_area']) ? $toInt($room['bti_total_area']) : '',
|
|||
|
|
'Площадь без балкона' => isset($room['area_without_balcony']) ? $toInt($room['area_without_balcony']) : '',
|
|||
|
|
'Площадь прихожей, м2' => isset($room['hallway_area']) ? $toInt($room['hallway_area']) : '',
|
|||
|
|
'Общая площадь без жилой, м2' => isset($room['total_area_excl_living']) ? $toInt($room['total_area_excl_living']) : '',
|
|||
|
|
'Общая площадь санузлов, м2' => isset($room['total_bathroom_area']) ? $toInt($room['total_bathroom_area']) : '',
|
|||
|
|
'Общая площадь лоджий/балконов, м2' => isset($room['total_balcony_loggia_area']) ? $toInt($room['total_balcony_loggia_area']) : '',
|
|||
|
|
|
|||
|
|
// Если в шаблоне есть следующие столбцы — раскомментируй и УБЕДИСЬ, что названия совпадают
|
|||
|
|
'Площадь комнаты, м2' => $roomAreaStr,
|
|||
|
|
'Площадь санузла, м2' => $bathroomAreaStr,
|
|||
|
|
'Площадь лоджии/балкона, м2' => $balconyLoggiaStr,
|
|||
|
|
'Примечание' => isset($room['note']) ? $room['note'] : '',
|
|||
|
|
];
|
|||
|
|
|
|||
|
|
// Нормализуем пробелы
|
|||
|
|
$cleanRow = [];
|
|||
|
|
foreach ($row as $k => $v) {
|
|||
|
|
$cleanK = trim(preg_replace('/[\s\x{00A0}]+/u', ' ', (string)$k));
|
|||
|
|
$cleanV = is_string($v) ? trim(preg_replace('/[\s\x{00A0}]+/u', ' ', $v)) : $v;
|
|||
|
|
$cleanRow[$cleanK] = $cleanV;
|
|||
|
|
}
|
|||
|
|
$excelData[] = $cleanRow;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// --- Загружаем шаблон
|
|||
|
|
$inputFile = $_SERVER['DOCUMENT_ROOT'] . '/complexes/files/Пример_страницы_для_загрузки_Объектов_в_Дом.xlsx';
|
|||
|
|
if (!file_exists($inputFile)) {
|
|||
|
|
// Нельзя писать в поток — отдадим пустой 400 JSON, чтоб фронт увидел ошибку
|
|||
|
|
http_response_code(400);
|
|||
|
|
header('Content-Type: application/json; charset=utf-8');
|
|||
|
|
echo json_encode(['error' => 'Шаблон не найден: ' . $inputFile], JSON_UNESCAPED_UNICODE);
|
|||
|
|
exit;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// Подключи PHPExcel до этого файла: require_once '.../Classes/PHPExcel.php';
|
|||
|
|
$objPHPExcel = PHPExcel_IOFactory::load($inputFile);
|
|||
|
|
$sheet = $objPHPExcel->getActiveSheet();
|
|||
|
|
|
|||
|
|
// --- Читаем заголовки из первой строки шаблона
|
|||
|
|
$headers = [];
|
|||
|
|
$highestColumn = $sheet->getHighestColumn();
|
|||
|
|
$highestColumnIndex = PHPExcel_Cell::columnIndexFromString($highestColumn);
|
|||
|
|
for ($col = 0; $col < $highestColumnIndex; $col++) {
|
|||
|
|
$cellValue = $sheet->getCellByColumnAndRow($col, 1)->getValue();
|
|||
|
|
if ($cellValue instanceof PHPExcel_RichText) {
|
|||
|
|
$cellValue = $cellValue->getPlainText();
|
|||
|
|
}
|
|||
|
|
$headers[] = trim(preg_replace('/[\s\x{00A0}]+/u', ' ', (string)$cellValue));
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// --- Перезаписываем заголовки (на случай «мусора»)
|
|||
|
|
foreach ($headers as $i => $hdr) {
|
|||
|
|
$sheet->setCellValueByColumnAndRow($i, 1, $hdr);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// --- Заполняем строки
|
|||
|
|
$templateRow = 2;
|
|||
|
|
|
|||
|
|
// Получим диапазон последнего столбца
|
|||
|
|
$highestColumn = $sheet->getHighestColumn();
|
|||
|
|
|
|||
|
|
// Функция копирования стилей и валидации
|
|||
|
|
$copyRowFormat = function($srcRow, $dstRow) use ($sheet, $highestColumn) {
|
|||
|
|
// Преобразуем последнюю колонку в индекс (например, 'AF' -> 31)
|
|||
|
|
$highestIndex = PHPExcel_Cell::columnIndexFromString($highestColumn);
|
|||
|
|
|
|||
|
|
for ($i = 0; $i < $highestIndex; $i++) {
|
|||
|
|
$colLetter = PHPExcel_Cell::stringFromColumnIndex($i);
|
|||
|
|
$srcCell = $colLetter . $srcRow;
|
|||
|
|
$dstCell = $colLetter . $dstRow;
|
|||
|
|
|
|||
|
|
|
|||
|
|
// Копируем data validation (выпадающие списки, правила)
|
|||
|
|
$dv = $sheet->getDataValidation($srcCell);
|
|||
|
|
if ($dv) {
|
|||
|
|
$sheet->setDataValidation($dstCell, clone $dv);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// Копируем формулу (если есть)
|
|||
|
|
$formula = $sheet->getCell($srcCell)->getValue();
|
|||
|
|
if (is_string($formula) && strpos($formula, '=') === 0) {
|
|||
|
|
$sheet->setCellValue($dstCell, $formula);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
};
|
|||
|
|
|
|||
|
|
$rowNum = 2; // Если строка 2 — инструкции
|
|||
|
|
foreach ($excelData as $dataRow) {
|
|||
|
|
$copyRowFormat(2, $rowNum);
|
|||
|
|
$col = 0;
|
|||
|
|
foreach ($headers as $header) {
|
|||
|
|
$value = array_key_exists($header, $dataRow) ? $dataRow[$header] : '';
|
|||
|
|
$sheet->setCellValueExplicitByColumnAndRow(
|
|||
|
|
$col,
|
|||
|
|
$rowNum,
|
|||
|
|
$value
|
|||
|
|
);
|
|||
|
|
$col++;
|
|||
|
|
}
|
|||
|
|
$rowNum++;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// --- Отправляем во фронт как attachment (blob)
|
|||
|
|
$filename = 'Помещения_Дома_' . (preg_replace('/\D+/', '', (string)$house_id) ?: 'export') . '.xlsx';
|
|||
|
|
|
|||
|
|
header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
|
|||
|
|
header('Content-Disposition: attachment; filename="' . $filename . '"');
|
|||
|
|
header('Cache-Control: max-age=0');
|
|||
|
|
header('Pragma: public');
|
|||
|
|
// Некоторые прокси любят знать длину — можно не ставить, чтобы не буферизовать целиком.
|
|||
|
|
|
|||
|
|
$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007');
|
|||
|
|
|
|||
|
|
$objWriter->save('php://output');
|
|||
|
|
exit;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
public function updateImportHouse($data, $import_id) {
|
|||
|
|
$this->set_user();
|
|||
|
|
// complex_house_import
|
|||
|
|
|
|||
|
|
if ($data && $import_id) {
|
|||
|
|
$sql = [];
|
|||
|
|
foreach ($data as $key => $value) {
|
|||
|
|
if (is_string($value)) {
|
|||
|
|
$sql[] = "$key='$value'";
|
|||
|
|
} else if($key == 'step' && ($value == 3 || $value == 4 ) ) {
|
|||
|
|
continue;
|
|||
|
|
} else {
|
|||
|
|
$sql[] = "$key=$value";
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
$sql = implode(' ,', $sql);
|
|||
|
|
|
|||
|
|
$sql = "UPDATE complex_house_import SET $sql WHERE id={$import_id} AND user_id = {$this->user_id}";
|
|||
|
|
$query = $this->db->query($sql);
|
|||
|
|
if ($query) {
|
|||
|
|
$import = $this->db->fetch_assoc($this->db->query("SELECT * FROM complex_house_import WHERE id = $import_id"));
|
|||
|
|
if (isset($data['step'])) {
|
|||
|
|
$mapping_fields = json_decode($import['mapping_fields'], true);
|
|||
|
|
if ($data['step'] == 3) {
|
|||
|
|
if (isset($mapping_fields['house_name'])) {
|
|||
|
|
$scriptPath = $_SERVER['DOCUMENT_ROOT'] . '/cron/complexHouseImportGetHouses.php';
|
|||
|
|
$logFile = $_SERVER['DOCUMENT_ROOT'] . '/cron/logs/complexHouseImportGetHouses.log';
|
|||
|
|
|
|||
|
|
// Параметры для передачи
|
|||
|
|
$param1 = $import['id'];
|
|||
|
|
$result=null;
|
|||
|
|
$retval=null;
|
|||
|
|
exec("php $scriptPath $param1 >> $logFile 2>/dev/null &", $result, $retval);
|
|||
|
|
|
|||
|
|
$sql = "UPDATE complex_house_import SET status='get-houses:in_progress' WHERE id={$import_id} AND user_id = {$this->user_id}";
|
|||
|
|
$query = $this->db->query($sql);
|
|||
|
|
} else {
|
|||
|
|
$sql = "UPDATE complex_house_import SET step = 3 WHERE id={$import_id} AND user_id = {$this->user_id}";
|
|||
|
|
$query = $this->db->query($sql);
|
|||
|
|
$import['step'] = 3;
|
|||
|
|
// sleep(1);
|
|||
|
|
return ['status' => true, 'data' => $import];
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
} else if ($data['step'] == 4) {
|
|||
|
|
|
|||
|
|
// return $mapping_fields;
|
|||
|
|
if (!isset($mapping_fields['complex_status_id']) && !isset($mapping_fields['type'])) {
|
|||
|
|
$sql = "UPDATE complex_house_import SET step = 5, status='in_progress' WHERE id={$import_id} AND user_id = {$this->user_id}";
|
|||
|
|
$query = $this->db->query($sql);
|
|||
|
|
|
|||
|
|
if ($query) {
|
|||
|
|
$this->startImportHouse($import_id);
|
|||
|
|
$import['step'] = 5;
|
|||
|
|
return ['status' => true, 'data' => $import, 'message' => 'Starting import',];
|
|||
|
|
}
|
|||
|
|
} else {
|
|||
|
|
$import['step'] = 4;
|
|||
|
|
$sql = "UPDATE complex_house_import SET status='get-statuses-types:in_progress', step=4 WHERE id={$import_id} AND user_id = {$this->user_id}";
|
|||
|
|
$query = $this->db->query($sql);
|
|||
|
|
|
|||
|
|
$scriptPath = $_SERVER['DOCUMENT_ROOT'] . '/cron/complexHouseImportGetStatusesAndTypes.php';
|
|||
|
|
$logFile = $_SERVER['DOCUMENT_ROOT'] . '/cron/logs/complexHouseImportGetStatusesAndTypes.log';
|
|||
|
|
|
|||
|
|
// Параметры для передачи
|
|||
|
|
$param1 = $import['id'];
|
|||
|
|
$result=null;
|
|||
|
|
$retval=null;
|
|||
|
|
|
|||
|
|
exec("php $scriptPath $param1 >> $logFile 2>/dev/null &", $result, $retval);
|
|||
|
|
// sleep(1);
|
|||
|
|
return ['status' => true, 'data' => $import];
|
|||
|
|
}
|
|||
|
|
} else if ($data['step'] == 5) {
|
|||
|
|
$this->startImportHouse($import_id);
|
|||
|
|
return ['status' => true, 'data' => $import, 'message' => 'Starting import',];
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
return ['status' => true, 'data' => $import, 'message' => 'Finding houses started',];
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
return ['status' => false, 'message' => 'empty id to update'];
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
public function startImportHouse($import_id) {
|
|||
|
|
$this->set_user();
|
|||
|
|
if ($import_id) {
|
|||
|
|
$query = $this->db->query("SELECT id FROM complex_house_import
|
|||
|
|
WHERE id = $import_id
|
|||
|
|
AND step > 3
|
|||
|
|
AND user_id = {$this->user_id}
|
|||
|
|
AND house_name_to_id IS NOT NULL
|
|||
|
|
AND document IS NOT NULL ");
|
|||
|
|
// TODO step
|
|||
|
|
|
|||
|
|
if ($row = $this->db->fetch_assoc($query)) {
|
|||
|
|
$scriptPath = $_SERVER['DOCUMENT_ROOT'] . '/cron/complexHouseImport.php';
|
|||
|
|
$logFile = $_SERVER['DOCUMENT_ROOT'] . '/cron/logs/complexHouseImport.log';
|
|||
|
|
|
|||
|
|
// Параметры для передачи
|
|||
|
|
$param1 = $row['id'];
|
|||
|
|
$result=null;
|
|||
|
|
$retval=null;
|
|||
|
|
exec("php $scriptPath $param1 >> $logFile 2>/dev/null &", $result, $retval);
|
|||
|
|
|
|||
|
|
return [
|
|||
|
|
'status' => true,
|
|||
|
|
'message' => 'Import Started',
|
|||
|
|
];
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
return ['status' => false, 'message' => "Invalid parameter id: $import_id"];
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
public function uploadFile($file, $folder) {
|
|||
|
|
$Selectel = SelectelApi::getTokenAndUrl();
|
|||
|
|
$token = $Selectel[0];
|
|||
|
|
$storageUrl = $Selectel[1];
|
|||
|
|
|
|||
|
|
$uploaddir = $_SERVER['DOCUMENT_ROOT'] . "/files/$folder/";
|
|||
|
|
|
|||
|
|
$newPhotos = [];
|
|||
|
|
|
|||
|
|
$originalName = str_replace("0:/", "", $file['name']);
|
|||
|
|
$strArray = explode(".", $originalName);
|
|||
|
|
$ext = end($strArray);
|
|||
|
|
if (!in_array($ext, ['xlsx', 'xls', 'csv'])) {
|
|||
|
|
return ['status' => false, 'message' => 'Формат не подерживается'];
|
|||
|
|
};
|
|||
|
|
$ext = mb_strtolower($ext);
|
|||
|
|
|
|||
|
|
$name = md5(time() . $originalName) . "." . $ext;
|
|||
|
|
|
|||
|
|
$one = mb_substr($name, 0, 1);
|
|||
|
|
|
|||
|
|
|
|||
|
|
$two = mb_substr($name, 1, 1);
|
|||
|
|
|
|||
|
|
$three = mb_substr($name, 3, 1);
|
|||
|
|
$new_path = "$one/$two/$three/$name";
|
|||
|
|
|
|||
|
|
$fp = $uploaddir . $new_path;
|
|||
|
|
if (!is_dir($_SERVER['DOCUMENT_ROOT'] . "/files/")) {
|
|||
|
|
mkdir($_SERVER['DOCUMENT_ROOT'] . "/files/");
|
|||
|
|
}
|
|||
|
|
if (!is_dir($_SERVER['DOCUMENT_ROOT'] . "/files/" . "$folder")) {
|
|||
|
|
mkdir($_SERVER['DOCUMENT_ROOT'] . "/files/$folder");
|
|||
|
|
}
|
|||
|
|
if (!is_dir($_SERVER['DOCUMENT_ROOT'] . "/files/$folder/$one")) {
|
|||
|
|
mkdir($_SERVER['DOCUMENT_ROOT'] . "/files/$folder/$one");
|
|||
|
|
}
|
|||
|
|
$two = mb_substr($name, 1, 1);
|
|||
|
|
if (!is_dir($_SERVER['DOCUMENT_ROOT'] . "/files/$folder/$one/$two")) {
|
|||
|
|
mkdir($_SERVER['DOCUMENT_ROOT'] . "/files/$folder/$one/$two");
|
|||
|
|
}
|
|||
|
|
$three = mb_substr($name, 3, 1);
|
|||
|
|
if (!is_dir($_SERVER['DOCUMENT_ROOT'] . "/files/$folder/$one/$two/$three")) {
|
|||
|
|
mkdir($_SERVER['DOCUMENT_ROOT'] . "/files/$folder/$one/$two/$three");
|
|||
|
|
}
|
|||
|
|
if (is_uploaded_file($file['tmp_name'])) {
|
|||
|
|
move_uploaded_file($file['tmp_name'], $fp);
|
|||
|
|
} else {
|
|||
|
|
rename($file['tmp_name'], $fp);
|
|||
|
|
}
|
|||
|
|
$SelectelApi = new SelectelApi();
|
|||
|
|
$contentType = $ext == 'csv'
|
|||
|
|
? "text/$ext"
|
|||
|
|
: $ext == 'xls'
|
|||
|
|
? "application/vnd.ms-excel"
|
|||
|
|
: "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
|
|||
|
|
|
|||
|
|
$r = $SelectelApi->uploadFile($storageUrl, $token, $fp, "/$folder/" . $new_path, $contentType);
|
|||
|
|
//если выложили в Selectel
|
|||
|
|
|
|||
|
|
if ($r) {
|
|||
|
|
$new_path = "https://data.joywork.ru/$folder/" . $new_path;
|
|||
|
|
unlink($fp);
|
|||
|
|
return $new_path;
|
|||
|
|
} else {
|
|||
|
|
// Local fallback: keep local path
|
|||
|
|
return $fp;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
return null;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
public function get_complex_entrances($complex_id, $includes, $partner_id = 0)
|
|||
|
|
{
|
|||
|
|
$this->set_user();
|
|||
|
|
$result = array();
|
|||
|
|
$sql = "SELECT complex_entrances.*, ch.name as house_name, ch.parking as house_parking, ch.security as house_security, ch.fenced_area as house_fenced_area, ch.sports_ground as house_sports_ground, ch.play_ground as house_play_ground, ch.school as house_school, ch.kinder_garten as house_kinder_garten, ch.id as house_id, cl.name as complex_name FROM complex_entrances
|
|||
|
|
JOIN complex_houses ch ON ch.id = complex_entrances.complex_house_id AND (ch.deleted_at IS NULL OR ch.deleted_at = '0000-00-00 00:00:00')
|
|||
|
|
JOIN complex_list cl ON cl.id = ch.complex_id
|
|||
|
|
WHERE ch.complex_id={$complex_id}";
|
|||
|
|
|
|||
|
|
// echo($sql);die;
|
|||
|
|
|
|||
|
|
// echo($sql);
|
|||
|
|
// die;
|
|||
|
|
|
|||
|
|
$q = $this->db->query($sql);
|
|||
|
|
|
|||
|
|
while ($entrance = $this->db->fetch_assoc($q)) {
|
|||
|
|
$floors = $this->get_entrance_floors($entrance, $includes, $partner_id);
|
|||
|
|
$entrance['floors'] = $floors;
|
|||
|
|
$result[] = $entrance;
|
|||
|
|
}
|
|||
|
|
return $result;
|
|||
|
|
}
|
|||
|
|
public function get_house_entrances($house_id, $includes, $partner_id = 0, $has_token = false)
|
|||
|
|
{
|
|||
|
|
$this->set_user();
|
|||
|
|
$result = array();
|
|||
|
|
$sql = "SELECT complex_entrances.*, ch.name as house_name, ch.parking as house_parking, ch.security as house_security, ch.fenced_area as house_fenced_area, ch.sports_ground as house_sports_ground, ch.play_ground as house_play_ground, ch.school as house_school, ch.kinder_garten as house_kinder_garten, ch.id as house_id, cl.name as complex_name FROM complex_entrances
|
|||
|
|
JOIN complex_houses ch ON ch.id = complex_entrances.complex_house_id
|
|||
|
|
JOIN complex_list cl ON cl.id = ch.complex_id
|
|||
|
|
WHERE complex_entrances.complex_house_id={$house_id}";
|
|||
|
|
$q = $this->db->query($sql);
|
|||
|
|
|
|||
|
|
while ($entrance = $this->db->fetch_assoc($q)) {
|
|||
|
|
$floors = $this->get_entrance_floors($entrance, $includes, $partner_id, $has_token);
|
|||
|
|
$entrance['floors'] = $floors;
|
|||
|
|
$result[] = $entrance;
|
|||
|
|
}
|
|||
|
|
return $result;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
public function updatePlanPhotoPosition($image_id, $position)
|
|||
|
|
{
|
|||
|
|
$sql = "UPDATE complex_house_plans_images SET `position` = $position WHERE id = {$image_id}";
|
|||
|
|
$r = $this->db->query($sql);
|
|||
|
|
|
|||
|
|
return array();
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
public function updateHousePlans($plan_ids, $fields)
|
|||
|
|
{
|
|||
|
|
$this->set_user();
|
|||
|
|
|
|||
|
|
$strArray = [];
|
|||
|
|
$ids = implode(', ', $plan_ids);
|
|||
|
|
|
|||
|
|
foreach ($fields as $key => $value) {
|
|||
|
|
if ($key == 'id' || (empty($value) && $value !== 0 && $value !== false)) {
|
|||
|
|
continue;
|
|||
|
|
}
|
|||
|
|
if (is_string($value)) {
|
|||
|
|
$strArray[] = "$key='$value'";
|
|||
|
|
} else if (is_bool($value)) {
|
|||
|
|
$value = (int)$value;
|
|||
|
|
$strArray[] = "$key=$value";
|
|||
|
|
} else {
|
|||
|
|
$strArray[] = "$key=$value";
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
$str = implode(', ', $strArray);
|
|||
|
|
$sql = "UPDATE complex_house_plans SET $str WHERE id in ({$ids})";
|
|||
|
|
|
|||
|
|
$this->db->query($sql);
|
|||
|
|
|
|||
|
|
return $fields;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
public function updateHouseFloorPlans($plan_ids, $floor_ids, $fields, $is_bulk = false)
|
|||
|
|
{
|
|||
|
|
$this->set_user();
|
|||
|
|
|
|||
|
|
$strArray = [];
|
|||
|
|
$ids = implode(', ', $plan_ids);
|
|||
|
|
|
|||
|
|
if (!$is_bulk) {
|
|||
|
|
$sql = "DELETE FROM complex_floors_plans WHERE `floor_plan_id` in ({$ids})";
|
|||
|
|
$q = $this->db->query($sql);
|
|||
|
|
if (!empty($floor_ids)) {
|
|||
|
|
foreach ($floor_ids as $floor_id) {
|
|||
|
|
|
|||
|
|
foreach ($plan_ids as $plan_id) {
|
|||
|
|
$sql = "INSERT INTO complex_floors_plans SET `floor_id` = {$floor_id}, `floor_plan_id` = {$plan_id}";
|
|||
|
|
$q = $this->db->query($sql);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
foreach ($fields as $key => $value) {
|
|||
|
|
if ($key == 'id' || (empty($value) && $value !== 0 && $value !== false && !is_array($value))) {
|
|||
|
|
continue;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if (in_array($key, ['entrances', 'floor_positions'])) {
|
|||
|
|
$value = json_encode($value);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if (is_string($value)) {
|
|||
|
|
$strArray[] = "$key='$value'";
|
|||
|
|
} else if (is_bool($value)) {
|
|||
|
|
$value = (int)$value;
|
|||
|
|
$strArray[] = "$key=$value";
|
|||
|
|
} else {
|
|||
|
|
$strArray[] = "$key=$value";
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
$str = implode(', ', $strArray);
|
|||
|
|
$sql = "UPDATE complex_house_floor_plans SET $str WHERE id in ({$ids})";
|
|||
|
|
|
|||
|
|
$this->db->query($sql);
|
|||
|
|
|
|||
|
|
$result = array();
|
|||
|
|
foreach ($plan_ids as $id) {
|
|||
|
|
$result[] = $this->get_floor_plan($id);
|
|||
|
|
}
|
|||
|
|
return $result;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
public function isUsedRoomNumber($room_number, $floor_id) {
|
|||
|
|
|
|||
|
|
$house_id = $this->getFloorHouseId($floor_id);
|
|||
|
|
if ($house_id) {
|
|||
|
|
$find = $this->db->query("SELECT complex_rooms.number FROM complex_rooms
|
|||
|
|
JOIN complex_floors ON complex_floors.id = complex_rooms.floor_id
|
|||
|
|
JOIN complex_entrances ON complex_floors.complex_entrance_id = complex_entrances.id
|
|||
|
|
JOIN complex_houses ON complex_entrances.complex_house_id = complex_houses.id
|
|||
|
|
WHERE complex_houses.id = $house_id
|
|||
|
|
AND complex_rooms.number = '{$room_number}'
|
|||
|
|
");
|
|||
|
|
|
|||
|
|
$row = $this->db->fetch_assoc($find);
|
|||
|
|
return (bool)$row;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
public function generateRoomNumber($floor_id) {
|
|||
|
|
$house_id = $this->getFloorHouseId($floor_id);
|
|||
|
|
if ($house_id) {
|
|||
|
|
|
|||
|
|
$find = $this->db->query("SELECT MAX(CAST(complex_rooms.number AS UNSIGNED)) AS max_value FROM complex_rooms
|
|||
|
|
JOIN complex_floors ON complex_floors.id = complex_rooms.floor_id
|
|||
|
|
JOIN complex_entrances ON complex_floors.complex_entrance_id = complex_entrances.id
|
|||
|
|
JOIN complex_houses ON complex_entrances.complex_house_id = complex_houses.id
|
|||
|
|
WHERE complex_houses.id = $house_id
|
|||
|
|
");
|
|||
|
|
|
|||
|
|
$row = $this->db->fetch_assoc($find);
|
|||
|
|
return $row ? $row['max_value'] + 1 : 1;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
public function getFloorHouseId($floor_id) {
|
|||
|
|
$select = $this->db->query("SELECT complex_houses.id FROM complex_houses
|
|||
|
|
JOIN complex_entrances ON complex_entrances.complex_house_id = complex_houses.id
|
|||
|
|
JOIN complex_floors ON complex_floors.complex_entrance_id = complex_entrances.id
|
|||
|
|
WHERE complex_floors.id = $floor_id
|
|||
|
|
");
|
|||
|
|
|
|||
|
|
$row = $this->db->fetch_assoc($select);
|
|||
|
|
|
|||
|
|
return $row ? $row['id'] : $row;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
public function getRoomsCountByStatusId($status_id)
|
|||
|
|
{
|
|||
|
|
if (!$status_id) return false;
|
|||
|
|
|
|||
|
|
$q = $this->db->query("SELECT COUNT(id) as count FROM complex_rooms WHERE `complex_status_id` = {$status_id} ");
|
|||
|
|
|
|||
|
|
return $this->db->fetch_assoc($q);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
public function get_payment_types_list()
|
|||
|
|
{
|
|||
|
|
$sql = "SELECT `code`, `label` FROM `apartment_payment_types` WHERE `is_active` = 1 ORDER BY `label`";
|
|||
|
|
$rez = $this->db->query($sql);
|
|||
|
|
|
|||
|
|
$paymentTypes = array();
|
|||
|
|
if ($this->db->num_rows($rez) > 0) {
|
|||
|
|
while ($dbObject = $this->db->fetch_assoc($rez)) {
|
|||
|
|
$paymentTypes[] = array(
|
|||
|
|
'code' => $dbObject['code'],
|
|||
|
|
'name' => $dbObject['label']
|
|||
|
|
);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
return $paymentTypes;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
public function sendMessageToTelegram($chat_id, $text, $format = 'html')
|
|||
|
|
{
|
|||
|
|
$token = '793676666:AAGFo66CjsmO2KxZVRwQbH8pLTvenpsHiHI';
|
|||
|
|
|
|||
|
|
require_once $_SERVER['DOCUMENT_ROOT'] . "/telegramm/vendor/autoload.php";
|
|||
|
|
header('Content-Type: application/json');
|
|||
|
|
|
|||
|
|
try {
|
|||
|
|
$bot = new \TelegramBot\Api\Client($token);
|
|||
|
|
$bot->sendMessage($chat_id, $text, $format);
|
|||
|
|
}
|
|||
|
|
catch (Exception $e) {
|
|||
|
|
(new Logger())->error($e->getMessage());
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
public function sendMessageToMax($max_user_id, $text)
|
|||
|
|
{
|
|||
|
|
$max = new MaxClass();
|
|||
|
|
$max->send_messages_to_user($max_user_id, $text);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
public function updateRequisitionWithClientsFunnelStep($room_id, $requisition_id)
|
|||
|
|
{
|
|||
|
|
$sqlSelectClientsFunnelStep = $this->db->query("SELECT cfs.*, fs.name, fs.stage, fs.funnel_id FROM `clients_funnel_step` as `cfs` LEFT JOIN `funnel_steps` as `fs` on cfs.step_id = fs.id WHERE cfs.req_id = {$requisition_id}");
|
|||
|
|
$steps = $this->db->fetch_assoc($sqlSelectClientsFunnelStep);
|
|||
|
|
|
|||
|
|
$sqlSelectRequisitionWhoWork = $this->db->query(
|
|||
|
|
"SELECT
|
|||
|
|
requisitions.`client_id`,
|
|||
|
|
users.*
|
|||
|
|
FROM `requisitions`
|
|||
|
|
LEFT JOIN `users` ON users.`id` = requisitions.`who_work`
|
|||
|
|
WHERE requisitions.`id` = $requisition_id
|
|||
|
|
");
|
|||
|
|
$requisition = $this->db->fetch_assoc($sqlSelectRequisitionWhoWork);
|
|||
|
|
|
|||
|
|
|
|||
|
|
$history_requisition = json_decode($steps['history_requisition'], true);
|
|||
|
|
$clients_funnel_step_id = $steps['id'];
|
|||
|
|
$complex_room_id = NULL;
|
|||
|
|
$complex_status_id = NULL;
|
|||
|
|
$prev_id = 0;
|
|||
|
|
$prev_next_id = 0;
|
|||
|
|
$clientsFunnelStep = null;
|
|||
|
|
$newHistoryRequisition = [];
|
|||
|
|
|
|||
|
|
if ($clients_funnel_step_id)
|
|||
|
|
{
|
|||
|
|
$sqlSelectClientsFunnelStep = $this->db->query("SELECT `step_id` FROM `clients_funnel_step` WHERE `id` = $clients_funnel_step_id");
|
|||
|
|
$clientsFunnelStep = $this->db->fetch_assoc($sqlSelectClientsFunnelStep);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
foreach($history_requisition as $history)
|
|||
|
|
{
|
|||
|
|
if ($history['complex_room_id'] != $room_id)
|
|||
|
|
{
|
|||
|
|
$complex_room_id = $history['complex_room_id'];
|
|||
|
|
$complex_status_id = $history['complex_status_id'];
|
|||
|
|
|
|||
|
|
$valarr = json_decode(str_replace(["\n", "\t", "\r"], "", $steps['values']), true);
|
|||
|
|
$arr = deClearInputElements($valarr);
|
|||
|
|
$stepArr = json_decode($arr[$history['step_id']], true);
|
|||
|
|
|
|||
|
|
$prev_id = $stepArr['prev_id'] ?: 0;
|
|||
|
|
$prev_next_id = $stepArr['prev_next_id'] ?: 0;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if ($clientsFunnelStep && $clientsFunnelStep['step_id']
|
|||
|
|
&& $history['step_id'] != $clientsFunnelStep['step_id']
|
|||
|
|
){
|
|||
|
|
$newHistoryRequisition[] = $history;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if ((bool)count($history_requisition))
|
|||
|
|
{
|
|||
|
|
$newHistoryRequisition = json_encode($newHistoryRequisition ?: [], JSON_UNESCAPED_UNICODE);
|
|||
|
|
$sqlUpdateClientsFunnelStep = "UPDATE `clients_funnel_step` SET `step_id` = $prev_id, `next_id` = $prev_next_id, `history_requisition` = '{$newHistoryRequisition}' WHERE `id` = $clients_funnel_step_id";
|
|||
|
|
$this->db->query($sqlUpdateClientsFunnelStep);
|
|||
|
|
|
|||
|
|
$sqlUpdateRequisitions = "UPDATE
|
|||
|
|
`requisitions`
|
|||
|
|
SET
|
|||
|
|
`complex_room_id` = '{$complex_room_id}',
|
|||
|
|
`complex_status_id` = '{$complex_status_id}'
|
|||
|
|
WHERE id = $requisition_id";
|
|||
|
|
$this->db->query($sqlUpdateRequisitions);
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
$sqlUpdateRequisition = "UPDATE `requisitions` SET `complex_room_id` = NULL, `complex_status_id` = 0 WHERE id = $requisition_id";
|
|||
|
|
$this->db->query($sqlUpdateRequisition);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if ($requisition)
|
|||
|
|
{
|
|||
|
|
$text = "Заявка была исключена из очереди на бронирование.";
|
|||
|
|
|
|||
|
|
$client_id = $requisition['client_id'];
|
|||
|
|
|
|||
|
|
$now = new DateTime("now");
|
|||
|
|
$create_date = $now->format('Y-m-d H:i:s');
|
|||
|
|
|
|||
|
|
$this->db->query("INSERT INTO `user_client_events` (
|
|||
|
|
`user_id`,
|
|||
|
|
`req_id`,
|
|||
|
|
`client_id`,
|
|||
|
|
`type`,
|
|||
|
|
`comment`,
|
|||
|
|
`create_date`
|
|||
|
|
)
|
|||
|
|
VALUES (
|
|||
|
|
$this->user_id,
|
|||
|
|
$requisition_id,
|
|||
|
|
$client_id,
|
|||
|
|
'comment',
|
|||
|
|
'{$text}',
|
|||
|
|
'{$create_date}'
|
|||
|
|
)
|
|||
|
|
");
|
|||
|
|
|
|||
|
|
if($requisition['telegramm_notice']
|
|||
|
|
&& $requisition['telegramm_notice'] == 1
|
|||
|
|
&& $requisition['telegramm_chat_id']
|
|||
|
|
&& $requisition['telegramm_chat_id'] > 0
|
|||
|
|
){
|
|||
|
|
$text = "Заявка ID $requisition_id была исключена из очереди на бронирование.";
|
|||
|
|
|
|||
|
|
$this->sendMessageToTelegram($requisition['telegramm_chat_id'], $text);;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
$requisitions = $this->get_room_requisitions($room_id);
|
|||
|
|
|
|||
|
|
$this->generate_room_reservations_positions($room_id);
|
|||
|
|
|
|||
|
|
$reservations = $this->get_room_reservations($room_id);
|
|||
|
|
$can_change_queue = $reservations['can_change_queue'];
|
|||
|
|
unset($reservations['can_change_queue']);
|
|||
|
|
|
|||
|
|
$room = $this->db->fetch_assoc(
|
|||
|
|
$this->db->query(
|
|||
|
|
"SELECT
|
|||
|
|
complex_rooms.`id`,
|
|||
|
|
cs.`name` as status_name,
|
|||
|
|
cs.`status` as status_type,
|
|||
|
|
cs.`color` as status_color
|
|||
|
|
FROM `complex_rooms`
|
|||
|
|
LEFT JOIN `complex_status` AS cs ON cs.`id` = complex_rooms.`complex_status_id`
|
|||
|
|
WHERE complex_rooms.`id` = $room_id"
|
|||
|
|
)
|
|||
|
|
);
|
|||
|
|
|
|||
|
|
$complex_status_info = [
|
|||
|
|
'status_name' => $room['status_name'],
|
|||
|
|
'status_type' => $room['status_type'],
|
|||
|
|
'status_color' => $room['status_color']
|
|||
|
|
];
|
|||
|
|
|
|||
|
|
if ($room['status_type'] != 'reservation' && is_array($reservations) && count($reservations))
|
|||
|
|
{
|
|||
|
|
$complex_status_info = [
|
|||
|
|
'status_name' => $reservations[0]['status_name'],
|
|||
|
|
'status_type' => $reservations[0]['status_type'],
|
|||
|
|
'status_color' => $reservations[0]['status_color'],
|
|||
|
|
];
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
return [
|
|||
|
|
'requisitions' => $requisitions,
|
|||
|
|
'reservations' => $reservations,
|
|||
|
|
'can_change_queue' => $can_change_queue,
|
|||
|
|
'complex_status_info' => $complex_status_info
|
|||
|
|
];
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
public function save_attributes($attributes,$room_id)
|
|||
|
|
{
|
|||
|
|
$existing = [];
|
|||
|
|
$new_ids = [];
|
|||
|
|
|
|||
|
|
$q = $this->db->query("SELECT id FROM complex_rooms_attribute WHERE complex_room_id = " . intval($room_id));
|
|||
|
|
while ($row = $this->db->fetch_assoc($q)) {
|
|||
|
|
$existing[] = $row['id'];
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
foreach ($attributes as $attr) {
|
|||
|
|
|
|||
|
|
$attr_type = isset($attr->attribute_type) ? $attr->attribute_type : null;
|
|||
|
|
$area = isset($attr->area) ? floatval($attr->area) : null;
|
|||
|
|
|
|||
|
|
if (isset($attr->id) && in_array($attr->id, $existing)) {
|
|||
|
|
|
|||
|
|
$id = $attr->id;
|
|||
|
|
$new_ids[] = $id;
|
|||
|
|
if (!$attr_type || $area === null) {
|
|||
|
|
$this->db->query("DELETE FROM complex_rooms_attribute WHERE id = $id");
|
|||
|
|
continue;
|
|||
|
|
}
|
|||
|
|
$new_ids[] = $id;
|
|||
|
|
$this->db->query("
|
|||
|
|
UPDATE complex_rooms_attribute
|
|||
|
|
SET attribute_type = '{$attr_type}', area = {$area}
|
|||
|
|
WHERE id = {$id}
|
|||
|
|
");
|
|||
|
|
} else {
|
|||
|
|
if (!$attr_type || $area === null) {
|
|||
|
|
continue;
|
|||
|
|
}
|
|||
|
|
$this->db->query("
|
|||
|
|
INSERT INTO complex_rooms_attribute (complex_room_id, attribute_type, area)
|
|||
|
|
VALUES ('{$room_id}', '{$attr_type}', {$area})
|
|||
|
|
");
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if (!empty($existing)) {
|
|||
|
|
$to_delete = array_diff($existing, $new_ids);
|
|||
|
|
if (!empty($to_delete)) {
|
|||
|
|
$ids = implode(',', array_map('intval', $to_delete));
|
|||
|
|
$this->db->query("DELETE FROM complex_rooms_attribute WHERE id IN ($ids)");
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
public function update_room($room)
|
|||
|
|
{
|
|||
|
|
|
|||
|
|
$attributes = $room->attributes;
|
|||
|
|
unset($room->attributes);
|
|||
|
|
|
|||
|
|
$room_id = $room->id;
|
|||
|
|
$this->save_attributes($attributes,$room_id);
|
|||
|
|
|
|||
|
|
if ($room->note) {
|
|||
|
|
$note = (string) $room->note;
|
|||
|
|
$note = str_replace("'", "''", $note);
|
|||
|
|
|
|||
|
|
$sql = "SELECT COUNT(*) as count FROM complex_room_notes WHERE room_id = {$room->id}";
|
|||
|
|
$result = $this->db->query($sql);
|
|||
|
|
$count = $this->db->fetch_assoc($result);
|
|||
|
|
|
|||
|
|
if ($count['count'] > 0) {
|
|||
|
|
// Если запись существует, делаем UPDATE
|
|||
|
|
$update_sql = "UPDATE complex_room_notes SET note = '{$note}' WHERE room_id = {$room->id}";
|
|||
|
|
$this->db->query($update_sql);
|
|||
|
|
} else {
|
|||
|
|
// Если записи нет, делаем INSERT
|
|||
|
|
$insert_sql = "INSERT INTO complex_room_notes (`room_id`, `note`) VALUES ({$room->id}, '{$note}')";
|
|||
|
|
$this->db->query($insert_sql);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if ($room->requisition_id)
|
|||
|
|
{
|
|||
|
|
return $this->updateRequisitionWithClientsFunnelStep($room->id, $room->requisition_id);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if ($room->update_positions)
|
|||
|
|
{
|
|||
|
|
$sql = "UPDATE `requisitions` SET `position` = CASE `id` ";
|
|||
|
|
|
|||
|
|
foreach ($room->update_positions as $key => $update)
|
|||
|
|
{
|
|||
|
|
$sql .= "WHEN {$update->id} THEN {$update->position} ";
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
$sql .= "ELSE `position` END WHERE `id` IN (";
|
|||
|
|
$sql .= implode(', ', array_map(function($item) { return $item->id; }, $room->update_positions));
|
|||
|
|
$sql .= ")";
|
|||
|
|
|
|||
|
|
// Execute the query using your database connection
|
|||
|
|
$this->db->query($sql);
|
|||
|
|
|
|||
|
|
return true;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
$required_fields = ['number', 'area', 'complex_status_id'];
|
|||
|
|
|
|||
|
|
if ($room->type === 'apartment' || $room->type === 'apartments' ||
|
|||
|
|
$room->type === 'townhouse' || $room->type === 'villa' ||
|
|||
|
|
$room->type === 'penthouse' || $room->type === 'duplex' || $room->type === 'cottage') {
|
|||
|
|
$required_fields[] = 'rooms_count';
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
$errors = [];
|
|||
|
|
$strArray = [];
|
|||
|
|
|
|||
|
|
$q = $this->db->query("SELECT id, number, complex_status_id FROM complex_rooms WHERE id = {$room->id} ");
|
|||
|
|
$old_room = $this->db->fetch_assoc($q);
|
|||
|
|
|
|||
|
|
foreach ($room as $key => $value) {
|
|||
|
|
if(in_array($key, $required_fields) && empty($value)) {
|
|||
|
|
$errors[$key] = 'required';
|
|||
|
|
continue;
|
|||
|
|
}
|
|||
|
|
if ($key == 'id') {
|
|||
|
|
continue;
|
|||
|
|
}
|
|||
|
|
if ($key == 'inPdf') {
|
|||
|
|
continue;
|
|||
|
|
}
|
|||
|
|
if ($key == 'decoration_id') {
|
|||
|
|
if (is_string($value)) {
|
|||
|
|
$sql = "INSERT INTO decoration_types SET `name` = '{$value}'";
|
|||
|
|
$q = $this->db->query($sql);
|
|||
|
|
|
|||
|
|
$id = $this->db->insert_id();
|
|||
|
|
$value = $id;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if ($key == 'number' && $old_room['number'] != $value ) {
|
|||
|
|
if($this->isUsedRoomNumber($value, $room->floor_id)) {
|
|||
|
|
$errors[$key] = 'должен быть уникальным.';
|
|||
|
|
continue;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
if ($key === 'note') {
|
|||
|
|
continue;
|
|||
|
|
}
|
|||
|
|
if (empty($value)) {
|
|||
|
|
if ($key === 'total_amount') {
|
|||
|
|
$strArray[] = "$key=0";
|
|||
|
|
}
|
|||
|
|
else {
|
|||
|
|
$strArray[] = "$key=NULL";
|
|||
|
|
}
|
|||
|
|
} else {
|
|||
|
|
if (is_string($value)) {
|
|||
|
|
$strArray[] = "$key='$value'";
|
|||
|
|
} else {
|
|||
|
|
$strArray[] = "$key=$value";
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
if ($key == 'complex_status_id' && $old_room['complex_status_id'] != $value)
|
|||
|
|
{
|
|||
|
|
$complex_status = new ComplexStatus($value);
|
|||
|
|
|
|||
|
|
if ($complex_status->status !== 'reservation')
|
|||
|
|
{
|
|||
|
|
$old_complex_status_id = $old_room['complex_status_id'];
|
|||
|
|
|
|||
|
|
$sql = "SELECT
|
|||
|
|
requisitions.`id` AS req_id,
|
|||
|
|
requisitions.`client_id`,
|
|||
|
|
users.*
|
|||
|
|
FROM `requisitions`
|
|||
|
|
LEFT JOIN `users` ON users.`id` = requisitions.`who_work`
|
|||
|
|
LEFT JOIN `complex_status` AS cs ON cs.`id` = $old_complex_status_id
|
|||
|
|
WHERE `complex_room_id` = {$room->id}
|
|||
|
|
AND requisitions.`deleted` = 0
|
|||
|
|
AND cs.`status` = 'reservation'
|
|||
|
|
";
|
|||
|
|
|
|||
|
|
$requisitions = $complex_status::$db->query($sql)->fetchAll();
|
|||
|
|
|
|||
|
|
foreach($requisitions as $req)
|
|||
|
|
{
|
|||
|
|
$text = "Заявка была исключена из очереди на бронирование.";
|
|||
|
|
|
|||
|
|
$req_id = $req['req_id'];
|
|||
|
|
$client_id = $req['client_id'];
|
|||
|
|
$user_id = $_SESSION['id'];
|
|||
|
|
$now = new DateTime("now");
|
|||
|
|
$create_date = $now->format('Y-m-d H:i:s');
|
|||
|
|
|
|||
|
|
if ($req_id && $client_id && $user_id && $create_date)
|
|||
|
|
{
|
|||
|
|
$complex_status::$db->query("INSERT INTO `user_client_events` (
|
|||
|
|
`user_id`,
|
|||
|
|
`req_id`,
|
|||
|
|
`client_id`,
|
|||
|
|
`type`,
|
|||
|
|
`comment`,
|
|||
|
|
`create_date`
|
|||
|
|
)
|
|||
|
|
VALUES (
|
|||
|
|
$user_id,
|
|||
|
|
$req_id,
|
|||
|
|
$client_id,
|
|||
|
|
'comment',
|
|||
|
|
'{$text}',
|
|||
|
|
'{$create_date}'
|
|||
|
|
)
|
|||
|
|
");
|
|||
|
|
|
|||
|
|
if($req['telegramm_notice']
|
|||
|
|
&& $req['telegramm_notice'] == 1
|
|||
|
|
&& $req['telegramm_chat_id']
|
|||
|
|
&& $req['telegramm_chat_id'] > 0
|
|||
|
|
){
|
|||
|
|
$text = "Заявка ID $req_id была исключена из очереди на бронирование.";
|
|||
|
|
|
|||
|
|
$complex = new Complex();
|
|||
|
|
$complex->sendMessageToTelegram($req['telegramm_chat_id'], $text);;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
mysql_query("UPDATE `requisitions` SET `complex_status_id` = 0, `complex_room_id` = NULL WHERE id = {$req_id}");
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if (count($errors)) {
|
|||
|
|
return ['status' => false, 'errors' => $errors];
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// $str = preg_replace('/note\s*=\s*[^,]+,?/', '', $str);
|
|||
|
|
// var_dump($strArray);die;
|
|||
|
|
$str = implode(', ', $strArray);
|
|||
|
|
$sql = "UPDATE complex_rooms SET $str WHERE id={$room->id}";
|
|||
|
|
|
|||
|
|
$q = $this->db->query($sql);
|
|||
|
|
$q = $this->db->query("SELECT complex_rooms.*,
|
|||
|
|
cs.id as status_id,
|
|||
|
|
cs.name as status_name,
|
|||
|
|
cs.status as status_type,
|
|||
|
|
cs.color as status_color
|
|||
|
|
FROM complex_rooms LEFT JOIN complex_status cs ON complex_rooms.complex_status_id = cs.id and cs.is_archive = 0 WHERE complex_rooms.id = {$room->id} ");
|
|||
|
|
$room = $this->db->fetch_assoc($q);
|
|||
|
|
|
|||
|
|
$room['reservations'] = $this->get_room_reservations($room['id']);
|
|||
|
|
$room['note'] = $this->get_room_note($room['id']);
|
|||
|
|
$room['can_change_queue'] = $room['reservations']['can_change_queue'];
|
|||
|
|
|
|||
|
|
unset($room['reservations']['can_change_queue']);
|
|||
|
|
|
|||
|
|
$room['complex_status_info'] = [
|
|||
|
|
'status_id' => $room['status_id'],
|
|||
|
|
'status_name' => $room['status_name'],
|
|||
|
|
'status_type' => $room['status_type'],
|
|||
|
|
'status_color' => $room['status_color']
|
|||
|
|
];
|
|||
|
|
|
|||
|
|
if ($room['status_type'] != 'reservation' && is_array($room['reservations']) && count($room['reservations']))
|
|||
|
|
{
|
|||
|
|
$room['complex_status_info'] = [
|
|||
|
|
'status_id' => $room['reservations'][0]['status_id'],
|
|||
|
|
'status_name' => $room['reservations'][0]['status_name'],
|
|||
|
|
'status_type' => $room['reservations'][0]['status_type'],
|
|||
|
|
'status_color' => $room['reservations'][0]['status_color'],
|
|||
|
|
];
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
$room['installment_plans'] = [];
|
|||
|
|
|
|||
|
|
// Если тип оплаты содержит INSTALLMENT — подгрузим доступные рассрочки по дому
|
|||
|
|
if (!empty($room['payment_types'])) {
|
|||
|
|
$paymentTypes = is_array($room['payment_types'])
|
|||
|
|
? $room['payment_types']
|
|||
|
|
: json_decode($room['payment_types'], true);
|
|||
|
|
|
|||
|
|
if (in_array('INSTALLMENT', $paymentTypes)) {
|
|||
|
|
// Получим house_id через этаж
|
|||
|
|
$house_q = $this->db->query("SELECT e.complex_house_id AS house_id
|
|||
|
|
FROM complex_entrances e
|
|||
|
|
INNER JOIN complex_floors f ON f.complex_entrance_id = e.id
|
|||
|
|
WHERE f.id = {$room['floor_id']}
|
|||
|
|
LIMIT 1");
|
|||
|
|
$house = $this->db->fetch_assoc($house_q);
|
|||
|
|
|
|||
|
|
if ($house && isset($house['house_id'])) {
|
|||
|
|
$house_id = (int)$house['house_id'];
|
|||
|
|
|
|||
|
|
$installment_sql = "SELECT i.*, chi.end_date as house_installment_end_date
|
|||
|
|
FROM installments i
|
|||
|
|
INNER JOIN complex_house_installments chi ON chi.installment_id = i.id
|
|||
|
|
WHERE chi.house_id = {$house_id}
|
|||
|
|
AND i.is_archive = 0
|
|||
|
|
AND (chi.end_date IS NULL OR chi.end_date >= CURDATE())";
|
|||
|
|
|
|||
|
|
$installment_q = $this->db->query($installment_sql);
|
|||
|
|
$installments = [];
|
|||
|
|
|
|||
|
|
while ($plan = $this->db->fetch_assoc($installment_q)) {
|
|||
|
|
$installments[] = [
|
|||
|
|
'id' => $plan['id'],
|
|||
|
|
'name' => $plan['name'],
|
|||
|
|
'description' => $plan['description'],
|
|||
|
|
'type' => $plan['type'],
|
|||
|
|
'initial_payment' => $plan['initial_payment'],
|
|||
|
|
'payment_period' => json_decode($plan['payment_period'], true),
|
|||
|
|
'allow_change_on_close' => $plan['allow_change_on_close'],
|
|||
|
|
'interest_rate' => $plan['interest_rate'],
|
|||
|
|
'comment' => $plan['comment'],
|
|||
|
|
'house_installment_end_date' => $plan['house_installment_end_date']
|
|||
|
|
];
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
$room['installment_plans'] = $installments;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
return $room;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
public function save_room($room)
|
|||
|
|
{
|
|||
|
|
$attributes = $room->attributes;
|
|||
|
|
unset($room->attributes);
|
|||
|
|
$required_fields = ['number', 'area', 'complex_status_id', 'total_amount'];
|
|||
|
|
|
|||
|
|
if ($room->type === 'apartment' || $room->type === 'apartments' ||
|
|||
|
|
$room->type === 'townhouse' || $room->type === 'villa' ||
|
|||
|
|
$room->type === 'penthouse' || $room->type === 'duplex' || $room->type === 'cottage') {
|
|||
|
|
$required_fields[] = 'rooms_count';
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
$this->set_user();
|
|||
|
|
$strArray = [];
|
|||
|
|
|
|||
|
|
$errors = [];
|
|||
|
|
|
|||
|
|
$note = null;
|
|||
|
|
// if (!isset($room->position)) {
|
|||
|
|
// $floor_id = (int)$room->floor_id;
|
|||
|
|
// $q = $this->db->query("SELECT MAX(position) as max_position FROM complex_rooms WHERE floor_id = $floor_id");
|
|||
|
|
// $res = $this->db->fetch_assoc($q);
|
|||
|
|
// $room->position = (int)$res['max_position'] + 1;
|
|||
|
|
// }
|
|||
|
|
|
|||
|
|
foreach ($room as $key => $value) {
|
|||
|
|
if(in_array($key, $required_fields) && empty($value)) {
|
|||
|
|
$errors[$key] = 'required';
|
|||
|
|
continue;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if ($key == 'id' || empty($value)) {
|
|||
|
|
continue;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if ($key == 'decoration_id') {
|
|||
|
|
if (is_string($value)) {
|
|||
|
|
$sql = "INSERT INTO decoration_types SET `name` = '{$value}'";
|
|||
|
|
$q = $this->db->query($sql);
|
|||
|
|
|
|||
|
|
$id = $this->db->insert_id();
|
|||
|
|
$value = $id;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if ($key == 'note') {
|
|||
|
|
$note = str_replace("'", "''", $value);
|
|||
|
|
continue;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if ($key == 'number') {
|
|||
|
|
if($this->isUsedRoomNumber($value, $room->floor_id)) {
|
|||
|
|
$errors[$key] = 'должен быть уникальным.';
|
|||
|
|
continue;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
if (is_string($value)) {
|
|||
|
|
$strArray[] = "$key='$value'";
|
|||
|
|
} else {
|
|||
|
|
$strArray[] = "$key=$value";
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if (count($errors)) {
|
|||
|
|
return ['status' => false, 'errors' => $errors];
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
$str = implode(', ', $strArray);
|
|||
|
|
$sql = "INSERT INTO complex_rooms SET {$str}";
|
|||
|
|
$q = $this->db->query($sql);
|
|||
|
|
|
|||
|
|
$id = $this->db->insert_id();
|
|||
|
|
|
|||
|
|
if ($note != null) {
|
|||
|
|
// делаем INSERT
|
|||
|
|
$insert_sql = "INSERT INTO complex_room_notes (`room_id`, `note`) VALUES ({$id}, '{$note}')";
|
|||
|
|
$this->db->query($insert_sql);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
$q = $this->db->query("SELECT complex_rooms.*,
|
|||
|
|
cs.name as status_name,
|
|||
|
|
cs.status as status_type,
|
|||
|
|
cs.color as status_color,
|
|||
|
|
crn.note
|
|||
|
|
FROM complex_rooms
|
|||
|
|
LEFT JOIN complex_status cs ON complex_rooms.complex_status_id = cs.id
|
|||
|
|
LEFT JOIN complex_room_notes crn ON crn.room_id = complex_rooms.id
|
|||
|
|
AND cs.is_archive = 0 WHERE complex_rooms.id = $id
|
|||
|
|
");
|
|||
|
|
$room = $this->db->fetch_assoc($q);
|
|||
|
|
|
|||
|
|
$room['complex_status_info'] = [
|
|||
|
|
'status_id' => $room['status_id'],
|
|||
|
|
'status_name' => $room['status_name'],
|
|||
|
|
'status_type' => $room['status_type'],
|
|||
|
|
'status_color' => $room['status_color']
|
|||
|
|
];
|
|||
|
|
|
|||
|
|
$this->save_attributes($attributes,$id);
|
|||
|
|
|
|||
|
|
return $room;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
public function get_room_entrance($id)
|
|||
|
|
{
|
|||
|
|
// $rooms_sql = "SELECT
|
|||
|
|
// complex_rooms.*,
|
|||
|
|
// MAX(c_house_p_i.url) as plan_url,
|
|||
|
|
// c_floor.position as floor,
|
|||
|
|
// c_entrance.id as entrance_id,
|
|||
|
|
// c_house.name as house_name,
|
|||
|
|
// c_house.id as house_id,
|
|||
|
|
// c_complex.name as complex_name
|
|||
|
|
// FROM complex_rooms
|
|||
|
|
// LEFT JOIN complex_rooms_plans c_room_p ON c_room_p.room_id = complex_rooms.id
|
|||
|
|
// LEFT JOIN complex_floors c_floor ON c_floor.id = complex_rooms.floor_id
|
|||
|
|
// LEFT JOIN complex_entrances c_entrance ON c_entrance.id = c_floor.complex_entrance_id
|
|||
|
|
// LEFT JOIN complex_houses c_house ON c_house.id = c_entrance.complex_house_id
|
|||
|
|
// LEFT JOIN complex_list c_complex ON c_complex.id = c_house.complex_id
|
|||
|
|
// LEFT JOIN complex_house_plans_images c_house_p_i ON c_room_p.plan_id = c_house_p_i.plan_id AND c_house_p_i.position = 1
|
|||
|
|
// WHERE complex_rooms.id = {$id}
|
|||
|
|
// GROUP BY complex_rooms.id
|
|||
|
|
// ORDER BY complex_rooms.position;
|
|||
|
|
// ";
|
|||
|
|
// $rooms_q = $this->db->query($rooms_sql);
|
|||
|
|
|
|||
|
|
// $room = $this->db->fetch_assoc($rooms_q);
|
|||
|
|
|
|||
|
|
$entrance_sql = $this->db->query("SELECT complex_entrances.id as id FROM complex_entrances
|
|||
|
|
LEFT JOIN complex_floors c_floor ON c_floor.complex_entrance_id = complex_entrances.id
|
|||
|
|
LEFT JOIN complex_rooms c_room ON c_room.floor_id = c_floor.id
|
|||
|
|
WHERE c_room.id = {$id}
|
|||
|
|
");
|
|||
|
|
|
|||
|
|
$entranceRow = $this->db->fetch_assoc($entrance_sql);
|
|||
|
|
|
|||
|
|
$sql = "SELECT complex_entrances.*, ch.name as house_name, ch.parking as house_parking, ch.security as house_security, ch.fenced_area as house_fenced_area, ch.sports_ground as house_sports_ground, ch.play_ground as house_play_ground, ch.school as house_school, ch.kinder_garten as house_kinder_garten, ch.id as house_id, cl.name as complex_name, cl.id as complex_id FROM complex_entrances
|
|||
|
|
JOIN complex_houses ch ON ch.id = complex_entrances.complex_house_id
|
|||
|
|
JOIN complex_list cl ON cl.id = ch.complex_id
|
|||
|
|
WHERE complex_entrances.id={$entranceRow['id']}";
|
|||
|
|
|
|||
|
|
$q = $this->db->query($sql);
|
|||
|
|
|
|||
|
|
$entrance = $this->db->fetch_assoc($q);
|
|||
|
|
$floors = $this->get_entrance_floors($entrance, ['rooms']);
|
|||
|
|
$entrance['floors'] = $floors;
|
|||
|
|
|
|||
|
|
return $entrance;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
public function get_room_requisitions($room_id)
|
|||
|
|
{
|
|||
|
|
if (!$room_id) return null;
|
|||
|
|
|
|||
|
|
$requisition_sql = $this->db->query(
|
|||
|
|
"SELECT
|
|||
|
|
requisitions.`id`,
|
|||
|
|
requisitions.`name`,
|
|||
|
|
requisitions.`description`,
|
|||
|
|
CASE
|
|||
|
|
WHEN requisitions.`funnel_id` != 0 THEN req_funnel.`name`
|
|||
|
|
ELSE req_funnel_default.`name`
|
|||
|
|
END as funnel_name,
|
|||
|
|
clients.`fio` as client_fio,
|
|||
|
|
clients.`phone` as client_phone,
|
|||
|
|
users.`last_name` as responsible_last_name,
|
|||
|
|
users.`first_name` as responsible_first_name,
|
|||
|
|
users.`middle_name` as responsible_middle_name
|
|||
|
|
FROM requisitions
|
|||
|
|
LEFT JOIN funnel req_funnel ON requisitions.`funnel_id` = req_funnel.`id` AND req_funnel.`deleted` != 1
|
|||
|
|
LEFT JOIN funnel_default req_funnel_default ON req_funnel_default.`agency_id` = requisitions.`who_work`
|
|||
|
|
LEFT JOIN clients on clients.`id` = requisitions.`client_id`
|
|||
|
|
LEFT JOIN users on users.`id` = requisitions.`who_work`
|
|||
|
|
|
|||
|
|
WHERE requisitions.`complex_room_id` = {$room_id}
|
|||
|
|
AND requisitions.`deleted` = 0
|
|||
|
|
ORDER BY requisitions.created_at DESC"
|
|||
|
|
);
|
|||
|
|
|
|||
|
|
return $this->db->result_pdo($requisition_sql) ?: [];
|
|||
|
|
}
|
|||
|
|
public function get_room_note ($room_id) {
|
|||
|
|
$sql = "SELECT note FROM complex_room_notes WHERE room_id = {$room_id}";
|
|||
|
|
$q = $this->db->query($sql);
|
|||
|
|
$note = $this->db->fetch_assoc($q);
|
|||
|
|
return $note ? $note['note'] : '';
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
public function get_room_reservations($room_id, $generate_positions = false)
|
|||
|
|
{
|
|||
|
|
if (!$room_id) return null;
|
|||
|
|
|
|||
|
|
if ($generate_positions)
|
|||
|
|
{
|
|||
|
|
$this->generate_room_reservations_positions($room_id);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
$requisition_sql = $this->db->query(
|
|||
|
|
"SELECT
|
|||
|
|
requisitions.`id`,
|
|||
|
|
requisitions.`name`,
|
|||
|
|
requisitions.`description`,
|
|||
|
|
requisitions.`position`,
|
|||
|
|
requisitions.`reservation_updated_at`,
|
|||
|
|
requisitions.`who_work`,
|
|||
|
|
requisitions.`doers_confirm`,
|
|||
|
|
requisitions.`doers`,
|
|||
|
|
CASE
|
|||
|
|
WHEN requisitions.`funnel_id` != 0 THEN req_funnel.`name`
|
|||
|
|
ELSE req_funnel_default.`name`
|
|||
|
|
END AS funnel_name,
|
|||
|
|
users.`last_name` AS responsible_last_name,
|
|||
|
|
users.`first_name` AS responsible_first_name,
|
|||
|
|
users.`middle_name` AS responsible_middle_name,
|
|||
|
|
users.`email` AS responsible_email,
|
|||
|
|
users.`phone` AS responsible_phone,
|
|||
|
|
cs.`id` as status_id,
|
|||
|
|
cs.`name` as status_name,
|
|||
|
|
cs.`status` as status_type,
|
|||
|
|
cs.`color` as status_color,
|
|||
|
|
csr.`can_change_booking_queue`,
|
|||
|
|
csr.`booking_day`,
|
|||
|
|
csr.`booking_hour`
|
|||
|
|
FROM requisitions
|
|||
|
|
LEFT JOIN funnel req_funnel ON requisitions.`funnel_id` = req_funnel.`id` AND req_funnel.`deleted` != 1
|
|||
|
|
LEFT JOIN funnel_default req_funnel_default ON req_funnel_default.`agency_id` = requisitions.`who_work`
|
|||
|
|
LEFT JOIN users ON users.`id` = requisitions.`who_work`
|
|||
|
|
LEFT JOIN complex_status AS cs ON cs.`id` = requisitions.`complex_status_id`
|
|||
|
|
LEFT JOIN complex_status_reservation AS csr ON csr.`complex_status_id` = cs.`id`
|
|||
|
|
WHERE requisitions.`complex_room_id` = $room_id
|
|||
|
|
AND requisitions.`deleted` = 0
|
|||
|
|
AND cs.`status` = 'reservation'
|
|||
|
|
ORDER BY requisitions.`position` ASC"
|
|||
|
|
);
|
|||
|
|
|
|||
|
|
$result = $this->db->result_pdo($requisition_sql);
|
|||
|
|
$newDataReservations = [];
|
|||
|
|
$can_change_booking_queue = [];
|
|||
|
|
|
|||
|
|
if ($result)
|
|||
|
|
{
|
|||
|
|
foreach ($result as $item)
|
|||
|
|
{
|
|||
|
|
$item_ccbq = json_decode($item['can_change_booking_queue']);
|
|||
|
|
$can_change_booking_queue = !empty($item_ccbq) && is_array($item_ccbq) ? array_merge($item_ccbq, $can_change_booking_queue) : $can_change_booking_queue;
|
|||
|
|
|
|||
|
|
$booking_date = new DateTime($item['reservation_updated_at']);
|
|||
|
|
|
|||
|
|
if (!empty($item['booking_day']))
|
|||
|
|
{
|
|||
|
|
$booking_date = $booking_date->modify('+' . $item['booking_day'] . ' day');
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if (!empty($item['booking_hour']))
|
|||
|
|
{
|
|||
|
|
$booking_date = $booking_date->modify('+' . $item['booking_hour'] . ' hour');
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
$userId = $this->user_id;
|
|||
|
|
|
|||
|
|
if (isset($_SESSION['id'])) {
|
|||
|
|
$userId = $_SESSION['id'];
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if (!empty($item['booking_day']) || !empty($item['booking_hour'])) {
|
|||
|
|
$item['completion_time'] = $booking_date->format('d.m.Y H:i:s');
|
|||
|
|
} else {
|
|||
|
|
$item['completion_time'] = null;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
$user = new User;
|
|||
|
|
$user->get($userId);
|
|||
|
|
|
|||
|
|
$requisition = new Requisitions();
|
|||
|
|
$userIdsWork = $requisition->getIdsUsers($userId);
|
|||
|
|
|
|||
|
|
$item['can_read_details'] = false;
|
|||
|
|
if($item['who_work'] == $user->id)
|
|||
|
|
{
|
|||
|
|
$item['can_read_details'] = true;
|
|||
|
|
}
|
|||
|
|
else if($user->agency > 0 || $_SESSION['users_admin'] > 0)
|
|||
|
|
{
|
|||
|
|
$item['can_read_details'] = true;
|
|||
|
|
}
|
|||
|
|
else if($user->manager > 0)
|
|||
|
|
{
|
|||
|
|
if(!empty($userIdsWork))
|
|||
|
|
{
|
|||
|
|
if(in_array($item['who_work'], $userIdsWork))
|
|||
|
|
{
|
|||
|
|
$item['can_read_details'] = true;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
else if(!empty($item['doers']))
|
|||
|
|
{
|
|||
|
|
|
|||
|
|
$doers1 = json_decode(html_entity_decode($item['doers']), true);
|
|||
|
|
$item['doers1'] = $doers1;
|
|||
|
|
if (isset($doers1[$userId]) && $doers1[$userId] == 1)
|
|||
|
|
{
|
|||
|
|
$item['can_read_details'] = true;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
$newDataReservations[] = $item;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
$newDataReservations['can_change_queue'] = in_array($user->id, $can_change_booking_queue);
|
|||
|
|
|
|||
|
|
return $newDataReservations;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
public function generate_room_reservations_positions($room_id)
|
|||
|
|
{
|
|||
|
|
$requisition_sql = $this->db->query(
|
|||
|
|
"SELECT
|
|||
|
|
requisitions.`id`
|
|||
|
|
FROM requisitions
|
|||
|
|
JOIN complex_status ON complex_status.`id` = requisitions.`complex_status_id`
|
|||
|
|
LEFT JOIN complex_status_reservation AS csr ON csr.`complex_status_id` = complex_status.`id`
|
|||
|
|
|
|||
|
|
WHERE requisitions.`complex_room_id` = $room_id
|
|||
|
|
AND requisitions.`deleted` = 0
|
|||
|
|
AND complex_status.`status` = 'reservation'
|
|||
|
|
ORDER BY requisitions.`position` ASC"
|
|||
|
|
);
|
|||
|
|
|
|||
|
|
$result = $this->db->result_pdo($requisition_sql);
|
|||
|
|
$ids = array_column($result, 'id');
|
|||
|
|
|
|||
|
|
$position = 1;
|
|||
|
|
if ($ids)
|
|||
|
|
{
|
|||
|
|
foreach ($ids as $id)
|
|||
|
|
{
|
|||
|
|
$sql = "UPDATE `requisitions` SET `position` = $position WHERE`id` = $id";
|
|||
|
|
$this->db->query($sql);
|
|||
|
|
$position++;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
public function get_room_requisition($room_id)
|
|||
|
|
{
|
|||
|
|
$requisition_sql = $this->db->query(
|
|||
|
|
"SELECT
|
|||
|
|
requisitions.id,
|
|||
|
|
requisitions.name,
|
|||
|
|
requisitions.description,
|
|||
|
|
CASE
|
|||
|
|
WHEN requisitions.funnel_id != 0 THEN req_funnel.name
|
|||
|
|
ELSE req_funnel_default.name
|
|||
|
|
END as funnel_name,
|
|||
|
|
clients.fio as client_fio,
|
|||
|
|
clients.phone as client_phone,
|
|||
|
|
users.last_name as responsible_last_name,
|
|||
|
|
users.first_name as responsible_first_name,
|
|||
|
|
users.middle_name as responsible_middle_name
|
|||
|
|
FROM requisitions
|
|||
|
|
LEFT JOIN funnel req_funnel ON requisitions.funnel_id = req_funnel.id AND req_funnel.deleted != 1
|
|||
|
|
LEFT JOIN funnel_default req_funnel_default ON req_funnel_default.agency_id = requisitions.who_work
|
|||
|
|
LEFT JOIN clients on clients.id = requisitions.client_id
|
|||
|
|
LEFT JOIN users on users.id = requisitions.who_work
|
|||
|
|
|
|||
|
|
WHERE requisitions.complex_room_id = {$room_id}
|
|||
|
|
ORDER BY requisitions.created_at DESC"
|
|||
|
|
);
|
|||
|
|
|
|||
|
|
$requisition = $this->db->fetch_assoc($requisition_sql);
|
|||
|
|
|
|||
|
|
$requisition = $requisition ?: [];
|
|||
|
|
|
|||
|
|
return $requisition;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
public function copy_room($room_id, $floor_id, $position = 0)
|
|||
|
|
{
|
|||
|
|
|
|||
|
|
$this->set_user();
|
|||
|
|
|
|||
|
|
$sql = "SELECT * FROM complex_rooms WHERE id = {$room_id}";
|
|||
|
|
$q = $this->db->query($sql);
|
|||
|
|
$room = $this->db->fetch_assoc($q);
|
|||
|
|
|
|||
|
|
$strArray = [];
|
|||
|
|
|
|||
|
|
foreach ($room as $key => $value) {
|
|||
|
|
if (
|
|||
|
|
$key == 'id' ||
|
|||
|
|
$key == 'position' ||
|
|||
|
|
$key == 'floor_id' ||
|
|||
|
|
$key == 'created_at' ||
|
|||
|
|
$key == 'updated_at' ||
|
|||
|
|
empty($value)
|
|||
|
|
) {
|
|||
|
|
continue;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if ($key == 'number') {
|
|||
|
|
$value = $this->generateRoomNumber($floor_id);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if (is_string($value)) {
|
|||
|
|
$strArray[] = "$key='$value'";
|
|||
|
|
} else {
|
|||
|
|
$strArray[] = "$key=$value";
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
$strArray[] = "floor_id=$floor_id";
|
|||
|
|
|
|||
|
|
if (!$position) {
|
|||
|
|
$rooms_count_sql = "SELECT COUNT(*) AS record_count FROM complex_rooms WHERE floor_id = {$floor_id}";
|
|||
|
|
$result_count = $this->db->query($rooms_count_sql);
|
|||
|
|
$row = $this->db->fetch_assoc($result_count);
|
|||
|
|
$position = $row['record_count'] + 1;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
$strArray[] = "position=$position";
|
|||
|
|
|
|||
|
|
$str = implode(', ', $strArray);
|
|||
|
|
$sql = "INSERT INTO complex_rooms SET {$str}";
|
|||
|
|
$q = $this->db->query($sql);
|
|||
|
|
|
|||
|
|
$id = $this->db->insert_id();
|
|||
|
|
|
|||
|
|
$attr_sql = "SELECT attribute_type, area FROM complex_rooms_attribute WHERE complex_room_id = {$room_id}";
|
|||
|
|
$attr_q = $this->db->query($attr_sql);
|
|||
|
|
while ($attr = $this->db->fetch_assoc($attr_q)) {
|
|||
|
|
|
|||
|
|
$type = $attr['attribute_type'];
|
|||
|
|
$area = $attr['area'];
|
|||
|
|
|
|||
|
|
$this->db->query("
|
|||
|
|
INSERT INTO complex_rooms_attribute (complex_room_id, attribute_type, area)
|
|||
|
|
VALUES ($id, '$type', $area)
|
|||
|
|
");
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
$q = $this->db->query("SELECT complex_rooms.*,
|
|||
|
|
cs.name as status_name,
|
|||
|
|
cs.status as status_type,
|
|||
|
|
cs.color as status_color
|
|||
|
|
FROM complex_rooms
|
|||
|
|
LEFT JOIN complex_status cs ON complex_rooms.complex_status_id = cs.id WHERE complex_rooms.id = $id
|
|||
|
|
");
|
|||
|
|
$room = $this->db->fetch_assoc($q);
|
|||
|
|
|
|||
|
|
$reservations = $this->get_room_reservations($room['id']);
|
|||
|
|
unset($reservations['can_change_queue']);
|
|||
|
|
|
|||
|
|
$complex_status_info = [
|
|||
|
|
'status_name' => $room['status_name'],
|
|||
|
|
'status_type' => $room['status_type'],
|
|||
|
|
'status_color' => $room['status_color']
|
|||
|
|
];
|
|||
|
|
|
|||
|
|
unset($room['status_name']);
|
|||
|
|
unset($room['status_type']);
|
|||
|
|
unset($room['status_color']);
|
|||
|
|
|
|||
|
|
if ($room['status_type'] != 'reservation' && is_array($reservations) && count($reservations))
|
|||
|
|
{
|
|||
|
|
$complex_status_info = [
|
|||
|
|
'status_name' => $reservations[0]['status_name'],
|
|||
|
|
'status_type' => $reservations[0]['status_type'],
|
|||
|
|
'status_color' => $reservations[0]['status_color'],
|
|||
|
|
];
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
$room['complex_status_info'] = $complex_status_info;
|
|||
|
|
|
|||
|
|
return $room;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
public function get_decoration_types()
|
|||
|
|
{
|
|||
|
|
$this->set_user();
|
|||
|
|
$result = array();
|
|||
|
|
$sql = "SELECT * FROM decoration_types where id <= 10";
|
|||
|
|
$q = $this->db->query($sql);
|
|||
|
|
|
|||
|
|
while ($decoration = $this->db->fetch_assoc($q)) {
|
|||
|
|
$result[] = $decoration;
|
|||
|
|
}
|
|||
|
|
return $result;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
public function add_house_entrance($house_id, $data)
|
|||
|
|
{
|
|||
|
|
$this->set_user();
|
|||
|
|
$strArray = [];
|
|||
|
|
|
|||
|
|
foreach ($data as $key => $value) {
|
|||
|
|
if (is_string($value)) {
|
|||
|
|
$strArray[] = "$key='$value'";
|
|||
|
|
} else {
|
|||
|
|
$strArray[] = "$key=$value";
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
$str = implode(', ', $strArray);
|
|||
|
|
$sql = "INSERT INTO complex_entrances SET {$str} , complex_house_id={$house_id}";
|
|||
|
|
$q = $this->db->query($sql);
|
|||
|
|
|
|||
|
|
$id = $this->db->insert_id();
|
|||
|
|
$q = $this->db->query("SELECT * FROM complex_entrances WHERE id = $id ");
|
|||
|
|
$entrance = $this->db->fetch_assoc($q);
|
|||
|
|
// $entrance['floors'] = $this->get_entrance_floors($entrance);
|
|||
|
|
$entrance['floors'] = [];
|
|||
|
|
return $entrance;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
public function add_floor_plan_figure($floor_plan_id, $data)
|
|||
|
|
{
|
|||
|
|
$this->set_user();
|
|||
|
|
$strArray = [];
|
|||
|
|
|
|||
|
|
foreach ($data as $key => $value) {
|
|||
|
|
if (in_array($key, ['points'])) {
|
|||
|
|
$value = json_encode($value);
|
|||
|
|
}
|
|||
|
|
if (is_string($value)) {
|
|||
|
|
$strArray[] = "$key='$value'";
|
|||
|
|
} else {
|
|||
|
|
$strArray[] = "$key=$value";
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
$str = implode(', ', $strArray);
|
|||
|
|
|
|||
|
|
$sql = "INSERT INTO complex_floor_plan_figures SET {$str} , floor_plan_id={$floor_plan_id}";
|
|||
|
|
$q = $this->db->query($sql);
|
|||
|
|
|
|||
|
|
$id = $this->db->insert_id();
|
|||
|
|
$q = $this->db->query("SELECT * FROM complex_floor_plan_figures WHERE id = $id ");
|
|||
|
|
$figure = $this->db->fetch_assoc($q);
|
|||
|
|
$figure['points'] = json_decode($figure['points']);
|
|||
|
|
return $figure;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
public function update_house_entrance($entrance_id, $data)
|
|||
|
|
{
|
|||
|
|
$this->set_user();
|
|||
|
|
$str = '';
|
|||
|
|
|
|||
|
|
foreach ($data as $key => $value) {
|
|||
|
|
if (is_string($value)) {
|
|||
|
|
$str .= "$key='$value'";
|
|||
|
|
} else {
|
|||
|
|
$str .= "$key=$value";
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
$sql = "UPDATE complex_entrances SET $str WHERE id={$entrance_id}";
|
|||
|
|
$q = $this->db->query($sql);
|
|||
|
|
return ['status' => $q];
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
public function update_floor_plan_figure($figure_id, $data)
|
|||
|
|
{
|
|||
|
|
$this->set_user();
|
|||
|
|
$strArray = [];
|
|||
|
|
|
|||
|
|
|
|||
|
|
foreach ($data as $key => $value) {
|
|||
|
|
// if ($key == 'room_plan_id') {
|
|||
|
|
// $sql = "SELECT COUNT(room_plan_id) as count FROM complex_floor_plan_figures WHERE room_plan_id = {$value}";
|
|||
|
|
// $res = $this->db->query($sql);
|
|||
|
|
// $row = $this->db->fetch_assoc($res);
|
|||
|
|
// if ($row['count']) {
|
|||
|
|
// echo json_encode(['status' => false, 'count' => $row['count']], JSON_UNESCAPED_UNICODE);
|
|||
|
|
// exit;
|
|||
|
|
// }
|
|||
|
|
// }
|
|||
|
|
|
|||
|
|
if (is_string($value)) {
|
|||
|
|
$strArray[] = "$key='$value'";
|
|||
|
|
} else if (is_null($value)) {
|
|||
|
|
$strArray[] = "$key=NULL";
|
|||
|
|
} else {
|
|||
|
|
$strArray[] = "$key=$value";
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
$str = implode(', ', $strArray);
|
|||
|
|
$sql = "UPDATE complex_floor_plan_figures SET $str WHERE id={$figure_id}";
|
|||
|
|
$q = $this->db->query($sql);
|
|||
|
|
return $data;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
public function create_floor($entrance_id, $data)
|
|||
|
|
{
|
|||
|
|
$this->set_user();
|
|||
|
|
$strArray = [];
|
|||
|
|
|
|||
|
|
foreach ($data as $key => $value) {
|
|||
|
|
if (is_string($value)) {
|
|||
|
|
$strArray[] = "$key='$value'";
|
|||
|
|
} else {
|
|||
|
|
$strArray[] = "$key=$value";
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
$str = implode(', ', $strArray);
|
|||
|
|
|
|||
|
|
$q = $this->db->query("SELECT * FROM complex_floors WHERE {$str} and complex_entrance_id={$entrance_id}");
|
|||
|
|
|
|||
|
|
if ($this->db->num_rows($q) > 0) {
|
|||
|
|
$floor = $this->db->fetch_assoc($q);
|
|||
|
|
$floor['rooms'] = [];
|
|||
|
|
return $floor;
|
|||
|
|
} else {
|
|||
|
|
$sql = "INSERT INTO complex_floors SET {$str} , complex_entrance_id={$entrance_id}";
|
|||
|
|
$q = $this->db->query($sql);
|
|||
|
|
|
|||
|
|
$id = $this->db->insert_id();
|
|||
|
|
// var_dump($id);
|
|||
|
|
$q = $this->db->query("SELECT * FROM complex_floors WHERE id = $id ");
|
|||
|
|
$floor = $this->db->fetch_assoc($q);
|
|||
|
|
$floor['rooms'] = [];
|
|||
|
|
return $floor;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
public function copy_floor($floor_id, $position)
|
|||
|
|
{
|
|||
|
|
$this->set_user();
|
|||
|
|
|
|||
|
|
$sql = "SELECT * FROM complex_floors WHERE id = {$floor_id}";
|
|||
|
|
$q = $this->db->query($sql);
|
|||
|
|
$floor = $this->db->fetch_assoc($q);
|
|||
|
|
|
|||
|
|
$strArray = [];
|
|||
|
|
|
|||
|
|
foreach ($floor as $key => $value) {
|
|||
|
|
if (
|
|||
|
|
$key == 'id' ||
|
|||
|
|
$key == 'position' ||
|
|||
|
|
$key == 'created_at' ||
|
|||
|
|
$key == 'updated_at' ||
|
|||
|
|
empty($value)
|
|||
|
|
) {
|
|||
|
|
continue;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if (is_string($value)) {
|
|||
|
|
$strArray[] = "$key='$value'";
|
|||
|
|
} else {
|
|||
|
|
$strArray[] = "$key=$value";
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
$strArray[] = "position=$position";
|
|||
|
|
|
|||
|
|
$str = implode(', ', $strArray);
|
|||
|
|
$sql = "INSERT INTO complex_floors SET {$str}";
|
|||
|
|
$this->db->query($sql);
|
|||
|
|
|
|||
|
|
$id = $this->db->insert_id();
|
|||
|
|
$q = $this->db->query("SELECT * FROM complex_floors WHERE id = $id ");
|
|||
|
|
$floor = $this->db->fetch_assoc($q);
|
|||
|
|
|
|||
|
|
$rooms_sql = "SELECT * FROM complex_rooms WHERE floor_id = {$floor_id}";
|
|||
|
|
$rooms_q = $this->db->query($rooms_sql);
|
|||
|
|
// $room = $this->db->fetch_assoc($q);
|
|||
|
|
$floor['rooms'] = [];
|
|||
|
|
|
|||
|
|
// $rooms_count_sql = "SELECT COUNT(*) AS record_count FROM complex_rooms WHERE floor_id = {$floor_id}";
|
|||
|
|
// $result_count = $this->db->query($rooms_count_sql);
|
|||
|
|
// $row = $this->db->fetch_assoc($result_count);
|
|||
|
|
// $rooms_count = $row['record_count'];
|
|||
|
|
|
|||
|
|
$copied_room_position = 1;
|
|||
|
|
while ($room = $this->db->fetch_assoc($rooms_q)) {
|
|||
|
|
$copiedRoom = $this->copy_room($room['id'], $floor['id'], $copied_room_position);
|
|||
|
|
$copied_room_position = $copied_room_position + 1;
|
|||
|
|
// $room['floor'] = $floor['position'];
|
|||
|
|
// $room['entrance_name'] = $entrance['name'];
|
|||
|
|
// $room['entrance_id'] = $entrance['id'];
|
|||
|
|
// $room['house_name'] = $entrance['house_name'];
|
|||
|
|
// $room['complex_name'] = $entrance['complex_name'];
|
|||
|
|
$floor['rooms'][] = $copiedRoom;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
return $floor;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
public function copy_house($house_id, $complex_id)
|
|||
|
|
{
|
|||
|
|
$this->set_user();
|
|||
|
|
|
|||
|
|
$housesArr = $this->get_houses($complex_id);
|
|||
|
|
$targetHouse = null;
|
|||
|
|
|
|||
|
|
foreach ($housesArr as $house) {
|
|||
|
|
if ($house['id'] == $house_id) {
|
|||
|
|
$targetHouse = $house;
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
$house = $targetHouse;
|
|||
|
|
$user_id = $this->user_id;
|
|||
|
|
// 1. Копируем дом
|
|||
|
|
if (!$house) {
|
|||
|
|
return ['error' => 'Original house not found'];
|
|||
|
|
}
|
|||
|
|
$house['name'] .=' (копия)';
|
|||
|
|
$house_id = $house['id'];
|
|||
|
|
unset($house['id']); // не копируем id
|
|||
|
|
$images = $house['images'];
|
|||
|
|
unset($house['images']); // не копируем id
|
|||
|
|
$floors = $house['floors'];
|
|||
|
|
unset($house['floors']); // не копируем id
|
|||
|
|
$rooms = $house['rooms'];
|
|||
|
|
unset($house['rooms']); // не копируем id
|
|||
|
|
$house['created_at'] = date('Y-m-d H:i:s');
|
|||
|
|
$house['update_at'] = date('Y-m-d H:i:s');
|
|||
|
|
unset($house['total_rooms']);
|
|||
|
|
unset($house['name_complex']);
|
|||
|
|
unset($house['min_total_amount']);
|
|||
|
|
|
|||
|
|
$house['parking'] = $this->db->query("SELECT parking FROM complex_houses WHERE complex_id = {$house_id}");
|
|||
|
|
|
|||
|
|
$columns_sql = implode(', ', array_keys($house));
|
|||
|
|
$escaped_values = [];
|
|||
|
|
|
|||
|
|
foreach ($house as $value) {
|
|||
|
|
if (is_null($value) || $value === '') {
|
|||
|
|
$escaped_values[] = 'NULL';
|
|||
|
|
} elseif (is_numeric($value)) {
|
|||
|
|
$escaped_values[] = $value;
|
|||
|
|
} else {
|
|||
|
|
$escaped_values[] = "'" . addslashes($value) . "'";
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
$values_sql = implode(', ', $escaped_values);
|
|||
|
|
|
|||
|
|
$sql = "
|
|||
|
|
INSERT INTO complex_houses ({$columns_sql})
|
|||
|
|
VALUES ({$values_sql})
|
|||
|
|
";
|
|||
|
|
$this->db->query($sql);
|
|||
|
|
$new_house_id = $this->db->insert_id();
|
|||
|
|
|
|||
|
|
// 2. Копируем изображения
|
|||
|
|
|
|||
|
|
foreach ($images as $image) {
|
|||
|
|
unset($image['id']); // не копируем id
|
|||
|
|
$image_url = $image['url'];
|
|||
|
|
$name = $image['name'];
|
|||
|
|
$this->db->query("
|
|||
|
|
INSERT INTO complex_house_images (house_id, url, name)
|
|||
|
|
VALUES ({$new_house_id}, '{$image_url}', '{$name}')
|
|||
|
|
");
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// 3. Копируем подъезды
|
|||
|
|
|
|||
|
|
$entrances = $this->db->query("SELECT * FROM complex_entrances WHERE complex_house_id = {$house_id}");
|
|||
|
|
$entrance_name = 0;
|
|||
|
|
|
|||
|
|
$room_id_map = [];
|
|||
|
|
|
|||
|
|
while ($entrance = $this->db->fetch_assoc($entrances)) {
|
|||
|
|
|
|||
|
|
$entrance_name = $entrance['name'];
|
|||
|
|
$positionFloor = $entrance['position'];
|
|||
|
|
|
|||
|
|
$this->db->query("
|
|||
|
|
INSERT INTO complex_entrances (complex_house_id, name, position)
|
|||
|
|
VALUES ({$new_house_id}, '{$entrance_name}', {$positionFloor})
|
|||
|
|
");
|
|||
|
|
$old_entrance_id = $entrance['id'];
|
|||
|
|
$new_entrance_id = $this->db->insert_id();
|
|||
|
|
// 3. Копируем этажи
|
|||
|
|
foreach($floors as $floor){
|
|||
|
|
|
|||
|
|
if($floor['complex_entrance_id'] !== $old_entrance_id) {
|
|||
|
|
continue;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
$position = $floor['position']; // скопируем позицию
|
|||
|
|
$old_floor_id = $floor['id'];
|
|||
|
|
|
|||
|
|
unset($floor['id']);
|
|||
|
|
$alignment = $floor['alignment']; // скопируем позицию
|
|||
|
|
|
|||
|
|
$this->db->query("
|
|||
|
|
INSERT INTO complex_floors (complex_entrance_id, position,alignment)
|
|||
|
|
VALUES ({$new_entrance_id}, {$position}, '{$alignment}')
|
|||
|
|
");
|
|||
|
|
$new_floor_id = $this->db->insert_id();
|
|||
|
|
|
|||
|
|
// 4. Копируем комнаты
|
|||
|
|
foreach ($rooms as $room) {
|
|||
|
|
if ($room['floor_id'] !== $old_floor_id) {
|
|||
|
|
continue;
|
|||
|
|
}
|
|||
|
|
$old_id = $room['id'];
|
|||
|
|
unset($room['id']);
|
|||
|
|
unset($room['min_total_amount']);
|
|||
|
|
unset($room['status']);
|
|||
|
|
|
|||
|
|
$room['floor_id'] = $new_floor_id;
|
|||
|
|
$room_column_sql = implode(', ', array_keys($room));
|
|||
|
|
$room_values = [];
|
|||
|
|
|
|||
|
|
foreach ($room as $value) {
|
|||
|
|
if (is_null($value)) {
|
|||
|
|
$room_values[] = 'NULL';
|
|||
|
|
} elseif (is_numeric($value)) {
|
|||
|
|
$room_values[] = $value;
|
|||
|
|
} else {
|
|||
|
|
$room_values[] = "'" . addslashes($value) . "'";
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
$rooms__sql = implode(', ', $room_values);
|
|||
|
|
|
|||
|
|
$sql = "INSERT INTO complex_rooms ({$room_column_sql})
|
|||
|
|
VALUES ({$rooms__sql})";
|
|||
|
|
$this->db->query($sql);
|
|||
|
|
$new_id = $this->db->insert_id();
|
|||
|
|
// Сохраняем связь старый ID => новый ID
|
|||
|
|
$room_id_map[$old_id] = $new_id;
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// 5. Копируем планировку
|
|||
|
|
$houses_plans = $this->db->query("SELECT * FROM complex_house_plans WHERE house_id = {$house_id}");
|
|||
|
|
|
|||
|
|
foreach ($houses_plans as $plans) {
|
|||
|
|
|
|||
|
|
$plans_id = $plans['id'];
|
|||
|
|
unset($plans['id']);
|
|||
|
|
$columns_sql = implode(', ', array_keys($plans));
|
|||
|
|
$plans['house_id'] = $new_house_id;
|
|||
|
|
$plans_values = [];
|
|||
|
|
foreach ($plans as $value) {
|
|||
|
|
if (is_null($value)) {
|
|||
|
|
$plans_values[] = 'NULL';
|
|||
|
|
} elseif (is_numeric($value)) {
|
|||
|
|
$plans_values[] = $value;
|
|||
|
|
} else {
|
|||
|
|
$plans_values[] = "'" . addslashes($value) . "'";
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
$plans__sql = implode(', ', $plans_values);
|
|||
|
|
$sql = "INSERT INTO complex_house_plans ({$columns_sql})
|
|||
|
|
VALUES ({$plans__sql})";
|
|||
|
|
|
|||
|
|
$this->db->query($sql);
|
|||
|
|
|
|||
|
|
$new_plan_id = $this->db->insert_id();
|
|||
|
|
// 6. Копируем изображения планировки
|
|||
|
|
|
|||
|
|
$houses_plans_images = $this->db->query("SELECT * FROM complex_house_plans_images WHERE plan_id = {$plans_id}");
|
|||
|
|
$houses_plans_image = $this->db->fetch_assoc($houses_plans_images);
|
|||
|
|
if ($houses_plans_image) {
|
|||
|
|
|
|||
|
|
unset($houses_plans_image['id']);
|
|||
|
|
$houses_plans_image['plan_id'] = $new_plan_id;
|
|||
|
|
// var_dump($houses_plans_image);
|
|||
|
|
$columns_sql = implode(', ', array_keys($houses_plans_image));
|
|||
|
|
$plans_image_values = [];
|
|||
|
|
foreach ($houses_plans_image as $value) {
|
|||
|
|
if (is_null($value)) {
|
|||
|
|
$plans_image_values[] = 'NULL';
|
|||
|
|
} elseif (is_numeric($value)) {
|
|||
|
|
$plans_image_values[] = $value;
|
|||
|
|
} else {
|
|||
|
|
$plans_image_values[] = "'" . addslashes($value) . "'";
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
$plans_image_sql = implode(', ', $plans_image_values);
|
|||
|
|
|
|||
|
|
$sql = "INSERT INTO complex_house_plans_images ({$columns_sql})
|
|||
|
|
VALUES ({$plans_image_sql})";
|
|||
|
|
$this->db->query($sql);
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
// 7. Копируем планировку для каждого дома
|
|||
|
|
$rooms_plans = $this->db->query("SELECT * FROM complex_rooms_plans WHERE plan_id = {$plans_id}");
|
|||
|
|
|
|||
|
|
while ($room_plan = $this->db->fetch_assoc($rooms_plans)) {
|
|||
|
|
unset($room_plan['id']);
|
|||
|
|
$room_plan_id = $room_id_map[$room_plan['room_id']];
|
|||
|
|
$plan_id_for_room = $new_plan_id;
|
|||
|
|
|
|||
|
|
$sql = "INSERT INTO complex_rooms_plans (room_id, plan_id)
|
|||
|
|
VALUES ({$room_plan_id},{$plan_id_for_room})";
|
|||
|
|
$this->db->query($sql);
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
return $housesArr;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
public function update_floor($floor_id, $data)
|
|||
|
|
{
|
|||
|
|
$this->set_user();
|
|||
|
|
$result = array();
|
|||
|
|
|
|||
|
|
$strArray = [];
|
|||
|
|
|
|||
|
|
foreach ($data as $key => $value) {
|
|||
|
|
if (is_string($value)) {
|
|||
|
|
$strArray[] = "$key='$value'";
|
|||
|
|
} else {
|
|||
|
|
$strArray[] = "$key=$value";
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
$str = implode(', ', $strArray);
|
|||
|
|
|
|||
|
|
$sql = "UPDATE complex_floors SET $str WHERE id={$floor_id}";
|
|||
|
|
$q = $this->db->query($sql);
|
|||
|
|
return ['status' => $q];
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
public function get_entrance_floors($entrance, $includes, $partner_id = 0, $has_token = false)
|
|||
|
|
{
|
|||
|
|
$complex_status = new ComplexStatus(null, true);
|
|||
|
|
$this->set_user();
|
|||
|
|
$result = array();
|
|||
|
|
$entrance_id = $entrance['id'];
|
|||
|
|
$sql = "SELECT DISTINCT complex_floors.*, floor_plans.has_light_angle as has_light_angle, floor_plans.light_angle as light_angle FROM complex_floors
|
|||
|
|
LEFT JOIN complex_floors_plans floor_plan_link ON floor_plan_link.floor_id = complex_floors.id
|
|||
|
|
LEFT JOIN complex_house_floor_plans floor_plans ON floor_plans.id = floor_plan_link.floor_plan_id
|
|||
|
|
WHERE complex_entrance_id={$entrance_id}";
|
|||
|
|
//echo $sql;
|
|||
|
|
$q = $this->db->query($sql);
|
|||
|
|
|
|||
|
|
$roomIds = [];
|
|||
|
|
$attributes = [];
|
|||
|
|
while ($floor = $this->db->fetch_assoc($q)) {
|
|||
|
|
$floor['rooms'] = [];
|
|||
|
|
if ($includes && in_array('rooms', $includes)) {
|
|||
|
|
|
|||
|
|
// SELECT complex_rooms.*, c_house_p_i.url as plan_url FROM complex_rooms
|
|||
|
|
// LEFT JOIN complex_rooms_plans c_room_p ON c_room_p.room_id = complex_rooms.id
|
|||
|
|
// LEFT JOIN complex_house_plans_images c_house_p_i ON c_room_p.plan_id = c_house_p_i.plan_id AND c_house_p_i.position = 1
|
|||
|
|
// WHERE complex_rooms.floor_id={$floor['id']}
|
|||
|
|
// ORDER BY complex_rooms.position
|
|||
|
|
// $rooms_sql = "SELECT complex_rooms.*, MAX(c_house_p_i.url) as plan_url FROM complex_rooms
|
|||
|
|
// LEFT JOIN complex_rooms_plans c_room_p ON c_room_p.room_id = complex_rooms.id
|
|||
|
|
// LEFT JOIN complex_house_plans_images c_house_p_i ON c_room_p.plan_id = c_house_p_i.plan_id AND c_house_p_i.position = 1
|
|||
|
|
// WHERE complex_rooms.floor_id = {$floor['id']}
|
|||
|
|
// GROUP BY complex_rooms.id
|
|||
|
|
// ORDER BY complex_rooms.position;
|
|||
|
|
// ";
|
|||
|
|
|
|||
|
|
if ($has_token) {
|
|||
|
|
if ($this->user->agencyId == 20382) {
|
|||
|
|
$filter_by_status = "";
|
|||
|
|
} else {
|
|||
|
|
$filter_by_status = "AND cs.status IN ('available', 'reservation')";
|
|||
|
|
}
|
|||
|
|
} else {
|
|||
|
|
$filter_by_status = "";
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
$rooms_sql = "SELECT complex_rooms.*,
|
|||
|
|
MAX(c_house_p_i.url) as plan_url,
|
|||
|
|
MAX(c_house_p.has_light_angle) as has_light_angle,
|
|||
|
|
MAX(c_house_p.light_angle) as light_angle,
|
|||
|
|
MAX(cs.name) as status_name,
|
|||
|
|
MAX(cs.status) as status_type,
|
|||
|
|
MAX(cs.color) as status_color,
|
|||
|
|
MAX(cra.add_to_domclick_feed) as add_to_domclick_feed,
|
|||
|
|
MAX(cra.add_to_avito_feed) as add_to_avito_feed,
|
|||
|
|
MAX(cra.add_to_cian_feed) as add_to_cian_feed,
|
|||
|
|
MAX(cra.add_to_yandex_feed) as add_to_yandex_feed,
|
|||
|
|
MAX(cra.add_to_domrf_feed) as add_to_domrf_feed,
|
|||
|
|
MAX(cra.add_to_site_feed) as add_to_site_feed,
|
|||
|
|
MAX(crn.note) as note,
|
|||
|
|
CASE
|
|||
|
|
WHEN MAX(cs.status) = 'reservation' THEN (
|
|||
|
|
SELECT r.id
|
|||
|
|
FROM requisitions r
|
|||
|
|
WHERE r.complex_room_id = complex_rooms.id
|
|||
|
|
ORDER BY r.created_at DESC
|
|||
|
|
LIMIT 1
|
|||
|
|
)
|
|||
|
|
ELSE NULL
|
|||
|
|
END AS requisition_id
|
|||
|
|
FROM complex_rooms
|
|||
|
|
LEFT JOIN complex_rooms_plans c_room_p ON c_room_p.room_id = complex_rooms.id
|
|||
|
|
LEFT JOIN complex_room_advert cra ON cra.complex_room_id = complex_rooms.id
|
|||
|
|
LEFT JOIN complex_house_plans_images c_house_p_i ON c_room_p.plan_id = c_house_p_i.plan_id AND c_house_p_i.position = 1
|
|||
|
|
LEFT JOIN complex_house_plans c_house_p ON c_room_p.plan_id = c_house_p.id
|
|||
|
|
LEFT JOIN complex_status cs ON complex_rooms.complex_status_id = cs.id AND cs.is_archive = 0
|
|||
|
|
LEFT JOIN complex_room_notes crn ON crn.room_id = complex_rooms.id
|
|||
|
|
WHERE complex_rooms.floor_id = {$floor['id']}
|
|||
|
|
{$filter_by_status}
|
|||
|
|
GROUP BY complex_rooms.id
|
|||
|
|
ORDER BY complex_rooms.position;";
|
|||
|
|
|
|||
|
|
$rooms_q = $this->db->query($rooms_sql);
|
|||
|
|
|
|||
|
|
// Modified installment plans query using only complex_house_installments
|
|||
|
|
$house_id = $entrance['house_id'];
|
|||
|
|
$installment_sql = "SELECT i.*,
|
|||
|
|
chi.end_date as house_installment_end_date
|
|||
|
|
FROM installments i
|
|||
|
|
INNER JOIN complex_house_installments chi ON chi.installment_id = i.id
|
|||
|
|
WHERE chi.house_id = {$house_id}
|
|||
|
|
AND i.is_archive = 0
|
|||
|
|
AND (chi.end_date IS NULL OR chi.end_date >= CURDATE())";
|
|||
|
|
|
|||
|
|
$installment_q = $this->db->query($installment_sql);
|
|||
|
|
$installment_plans = [];
|
|||
|
|
while ($plan = $this->db->fetch_assoc($installment_q)) {
|
|||
|
|
$installment_plans[] = [
|
|||
|
|
'id' => $plan['id'],
|
|||
|
|
'name' => $plan['name'],
|
|||
|
|
'description' => $plan['description'],
|
|||
|
|
'type' => $plan['type'],
|
|||
|
|
'initial_payment' => $plan['initial_payment'],
|
|||
|
|
'payment_period' => json_decode($plan['payment_period'], true),
|
|||
|
|
'allow_change_on_close' => $plan['allow_change_on_close'],
|
|||
|
|
'interest_rate' => $plan['interest_rate'],
|
|||
|
|
'comment' => $plan['comment'],
|
|||
|
|
'house_installment_end_date' => $plan['house_installment_end_date']
|
|||
|
|
];
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
while ($room = $this->db->fetch_assoc($rooms_q)) {
|
|||
|
|
$roomIds[] = $room['id'];
|
|||
|
|
$room_id = $room['id'];
|
|||
|
|
$attributes_sql = "
|
|||
|
|
SELECT complex_room_id, id, attribute_type, area
|
|||
|
|
FROM complex_rooms_attribute
|
|||
|
|
WHERE complex_room_id = $room_id
|
|||
|
|
";
|
|||
|
|
$attributes_q = $this->db->query($attributes_sql);
|
|||
|
|
$room['attributes'] = [];
|
|||
|
|
while($attributes = $this->db->fetch_assoc($attributes_q)){
|
|||
|
|
$room['attributes'][] = $attributes;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if (!isset($room['attributes']) || !is_array($room['attributes'])) {
|
|||
|
|
$room['attributes'] = [];
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
$hasRoom = false;
|
|||
|
|
$hasBathroom = false;
|
|||
|
|
$hasBalcony = false;
|
|||
|
|
$hasLoggia = false;
|
|||
|
|
|
|||
|
|
foreach ($room['attributes'] as $attr) {
|
|||
|
|
if ($attr['attribute_type'] === 'room') {
|
|||
|
|
$hasRoom = true;
|
|||
|
|
} elseif ($attr['attribute_type'] === 'bathroom') {
|
|||
|
|
$hasBathroom = true;
|
|||
|
|
} elseif ($attr['attribute_type'] === 'balcony') {
|
|||
|
|
$hasBalcony = true;
|
|||
|
|
} elseif ($attr['attribute_type'] === 'loggia') {
|
|||
|
|
$hasLoggia = true;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if (!$hasRoom) {
|
|||
|
|
$room['attributes'][] = ['attribute_type' => 'room', 'area' => null];
|
|||
|
|
}
|
|||
|
|
if (!$hasBathroom) {
|
|||
|
|
$room['attributes'][] = ['attribute_type' => 'bathroom', 'area' => null];
|
|||
|
|
}
|
|||
|
|
if (!$hasBalcony && !$hasLoggia) {
|
|||
|
|
$room['attributes'][] = ['attribute_type' => 'balcony', 'area' => null];
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
$room['floor'] = $floor['position'];
|
|||
|
|
// $room['floor_has_light_angle'] = $floor['has_light_angle'];
|
|||
|
|
// $room['floor_light_angle'] = $floor['light_angle'];
|
|||
|
|
$room['entrance_name'] = $entrance['name'];
|
|||
|
|
$room['entrance_id'] = $entrance['id'];
|
|||
|
|
$room['house_name'] = $entrance['house_name'];
|
|||
|
|
// $room['house_name'] = $entrance['house_name'];
|
|||
|
|
|
|||
|
|
$room['house_security'] = $entrance['house_security'];
|
|||
|
|
$room['house_parking'] = $entrance['house_parking'];
|
|||
|
|
$room['house_fenced_area'] = $entrance['house_fenced_area'];
|
|||
|
|
$room['house_sports_ground'] = $entrance['house_sports_ground'];
|
|||
|
|
$room['house_play_ground'] = $entrance['house_play_ground'];
|
|||
|
|
$room['house_school'] = $entrance['house_school'];
|
|||
|
|
$room['house_kinder_garten'] = $entrance['house_kinder_garten'];
|
|||
|
|
|
|||
|
|
$room['house_id'] = $entrance['house_id'];
|
|||
|
|
$room['complex_name'] = $entrance['complex_name'];
|
|||
|
|
|
|||
|
|
// Add installment plans only if INSTALLMENT exists in room.payment_types
|
|||
|
|
$paymentTypes = json_decode($room['payment_types'] ? $room['payment_types'] : '[]');
|
|||
|
|
if (is_array($paymentTypes) && in_array('INSTALLMENT', $paymentTypes)) {
|
|||
|
|
$room['installment_plans'] = $installment_plans;
|
|||
|
|
} else {
|
|||
|
|
$room['installment_plans'] = [];
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if (in_array((string)$room['id'], $_SESSION['to_send_complexes'])) {
|
|||
|
|
$room['inPdf'] = true;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
$room['requisitions'] = $this->get_room_requisitions($room['id']);
|
|||
|
|
$room['reservations'] = $this->get_room_reservations($room['id']);
|
|||
|
|
$room['can_change_queue'] = $room['reservations']['can_change_queue'];
|
|||
|
|
|
|||
|
|
unset($room['reservations']['can_change_queue']);
|
|||
|
|
|
|||
|
|
// Переопределяем статусы при наличии токена
|
|||
|
|
if ($has_token) {
|
|||
|
|
if ($room['status_type'] == 'available') {
|
|||
|
|
$room['status_name'] = 'Свободные';
|
|||
|
|
} elseif ($room['status_type'] == 'reservation') {
|
|||
|
|
$room['status_name'] = 'Бронь';
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
if($partner_id > 0){
|
|||
|
|
|
|||
|
|
|
|||
|
|
// if($room['status_type'] == 'sold'){
|
|||
|
|
// $temp_status = $complex_status->getDefaultStatusStatus('not_for_sale');
|
|||
|
|
// if(!empty($temp_status)){
|
|||
|
|
// $room['status_type'] = $temp_status['status'];
|
|||
|
|
// $room['status_name'] = $temp_status['name'];
|
|||
|
|
// $room['status_color'] = $temp_status['color'];
|
|||
|
|
// $room['status_id'] = $temp_status['id'];
|
|||
|
|
// }
|
|||
|
|
// } else {
|
|||
|
|
$temp_status = $complex_status->getDefaultStatusStatus($room['status_type']);
|
|||
|
|
if(!empty($temp_status)){
|
|||
|
|
$room['status_type'] = $temp_status['status'];
|
|||
|
|
$room['status_name'] = $temp_status['name'];
|
|||
|
|
$room['status_color'] = $temp_status['color'];
|
|||
|
|
$room['status_id'] = $temp_status['id'];
|
|||
|
|
}
|
|||
|
|
// }
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
$room['complex_status_info'] = [
|
|||
|
|
'status_id' => $room['status_id'],
|
|||
|
|
'status_name' => $room['status_name'],
|
|||
|
|
'status_type' => $room['status_type'],
|
|||
|
|
'status_color' => $room['status_color']
|
|||
|
|
];
|
|||
|
|
|
|||
|
|
|
|||
|
|
if ($room['status_type'] != 'reservation' && is_array($room['reservations']) && count($room['reservations']))
|
|||
|
|
{
|
|||
|
|
// if($partner_id > 0){
|
|||
|
|
// $temp_status = $complex_status->getDefaultStatusStatus('reservation');
|
|||
|
|
// if(!empty($temp_status)){
|
|||
|
|
// $room['complex_status_info'] = [
|
|||
|
|
// 'status_id' => $temp_status['id'],
|
|||
|
|
// 'status_name' => $temp_status['name'],
|
|||
|
|
// 'status_type' => $temp_status['status'],
|
|||
|
|
// 'status_color' => $temp_status['color']
|
|||
|
|
// ];
|
|||
|
|
// }
|
|||
|
|
// } else {
|
|||
|
|
|
|||
|
|
$room['complex_status_info'] = [
|
|||
|
|
'status_id' => $room['reservations'][0]['status_id'],
|
|||
|
|
'status_name' => $room['reservations'][0]['status_name'],
|
|||
|
|
'status_type' => $room['reservations'][0]['status_type'],
|
|||
|
|
'status_color' => $room['reservations'][0]['status_color'],
|
|||
|
|
];
|
|||
|
|
// }
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
$floor['rooms'][] = $room;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
$result[] = $floor;
|
|||
|
|
}
|
|||
|
|
//ищем статусы размещения в рекламу для квартир
|
|||
|
|
$objAdsErrors = [];
|
|||
|
|
$objAdsSended = [];
|
|||
|
|
|
|||
|
|
//начитываем ошибки и ссылки размещения объектов в рекламе
|
|||
|
|
$sql_ads = "SELECT `object_id`, `service_id`, `errors`, `url` FROM `ads_stats_complex` WHERE `object_id` IN (" . implode(", ", $roomIds) .")";
|
|||
|
|
$rezAdsErrors = mysql_query($sql_ads);
|
|||
|
|
if (mysql_num_rows($rezAdsErrors) > 0) {
|
|||
|
|
while ($objAdsInfo = mysql_fetch_assoc($rezAdsErrors)) {
|
|||
|
|
$object_id = $objAdsInfo['object_id'];
|
|||
|
|
$service_id = $objAdsInfo['service_id'];
|
|||
|
|
if ($objAdsInfo['errors']) {
|
|||
|
|
$objAdsErrors[$object_id][$service_id] = json_decode($objAdsInfo['errors']);
|
|||
|
|
} else {
|
|||
|
|
$objAdsSended[$object_id][$service_id] = $objAdsInfo['url'];
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//идем по всем помещениям и проставляем
|
|||
|
|
foreach ($result as $key => $floor) {
|
|||
|
|
foreach ($floor['rooms'] as $keyRoom => $room) {
|
|||
|
|
//домклик
|
|||
|
|
if ($objAdsErrors[$room['id']][4]) {
|
|||
|
|
$result[$key]['rooms'][$keyRoom]['ads_domclick_error'] = $objAdsErrors[$room['id']][4];
|
|||
|
|
}
|
|||
|
|
if ($objAdsSended[$room['id']][4]) {
|
|||
|
|
$result[$key]['rooms'][$keyRoom]['ads_domclick_url'] = $objAdsSended[$room['id']][4];
|
|||
|
|
}
|
|||
|
|
//авито
|
|||
|
|
if ($objAdsErrors[$room['id']][1]) {
|
|||
|
|
$result[$key]['rooms'][$keyRoom]['ads_avito_error'] = $objAdsErrors[$room['id']][1];
|
|||
|
|
}
|
|||
|
|
if ($objAdsSended[$room['id']][1]) {
|
|||
|
|
$result[$key]['rooms'][$keyRoom]['ads_avito_url'] = $objAdsSended[$room['id']][1];
|
|||
|
|
}
|
|||
|
|
//циан
|
|||
|
|
if ($objAdsErrors[$room['id']][2]) {
|
|||
|
|
$result[$key]['rooms'][$keyRoom]['ads_cian_error'] = $objAdsErrors[$room['id']][2];
|
|||
|
|
}
|
|||
|
|
if ($objAdsSended[$room['id']][2]) {
|
|||
|
|
$result[$key]['rooms'][$keyRoom]['ads_cian_url'] = $objAdsSended[$room['id']][2];
|
|||
|
|
}
|
|||
|
|
//яндекс
|
|||
|
|
if ($objAdsErrors[$room['id']][3]) {
|
|||
|
|
$result[$key]['rooms'][$keyRoom]['ads_yandex_error'] = $objAdsErrors[$room['id']][3];
|
|||
|
|
}
|
|||
|
|
if ($objAdsSended[$room['id']][3]) {
|
|||
|
|
$result[$key]['rooms'][$keyRoom]['ads_yandex_url'] = $objAdsSended[$room['id']][3];
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//идем по всем помещениям и проставляем
|
|||
|
|
foreach ($result as $key => $floor) {
|
|||
|
|
foreach ($floor['rooms'] as $keyRoom => $room) {
|
|||
|
|
$result[$key]['rooms'][$keyRoom]['advStat'] = [];
|
|||
|
|
|
|||
|
|
$result[$key]['rooms'][$keyRoom]['advStat']['avito'] = [];
|
|||
|
|
$result[$key]['rooms'][$keyRoom]['advStat']['cian'] = [];
|
|||
|
|
$result[$key]['rooms'][$keyRoom]['advStat']['yandex'] = [];
|
|||
|
|
$result[$key]['rooms'][$keyRoom]['advStat']['domclick'] = [];
|
|||
|
|
|
|||
|
|
$sqlSumStat = "SELECT asc2.*, (select sum(asc1.views) as sum_view_count from ads_stats_complex asc1 where asc1.object_id = asc2.object_id) as sum_view_count from ads_stats_complex asc2 where asc2.object_id = {$room['id']}";
|
|||
|
|
$rezSumStat = $this->db->query($sqlSumStat);
|
|||
|
|
|
|||
|
|
while ($stat = $this->db->fetch_assoc($rezSumStat)) {
|
|||
|
|
$result[$key]['rooms'][$keyRoom]['advStat']['allViews'] = $stat['sum_view_count'];
|
|||
|
|
|
|||
|
|
$service_id = $stat['service_id'];
|
|||
|
|
|
|||
|
|
if ($service_id == 1) {
|
|||
|
|
$result[$key]['rooms'][$keyRoom]['advStat']['avito']['views'] = $stat['views'];
|
|||
|
|
$result[$key]['rooms'][$keyRoom]['advStat']['avito']['contacts'] = $stat['contacts'];
|
|||
|
|
$result[$key]['rooms'][$keyRoom]['advStat']['avito']['favorites'] = $stat['favorites'];
|
|||
|
|
$result[$key]['rooms'][$keyRoom]['advStat']['avito']['calls'] = $stat['calls'];
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if ($service_id == 2) {
|
|||
|
|
$result[$key]['rooms'][$keyRoom]['advStat']['cian']['views'] = $stat['views'];
|
|||
|
|
$result[$key]['rooms'][$keyRoom]['advStat']['cian']['contacts'] = $stat['contacts'];
|
|||
|
|
$result[$key]['rooms'][$keyRoom]['advStat']['cian']['favorites'] = $stat['favorites'];
|
|||
|
|
$result[$key]['rooms'][$keyRoom]['advStat']['cian']['calls'] = $stat['calls'];
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if ($service_id == 3) {
|
|||
|
|
$result[$key]['rooms'][$keyRoom]['advStat']['yandex']['views'] = $stat['views'];
|
|||
|
|
$result[$key]['rooms'][$keyRoom]['advStat']['yandex']['contacts'] = $stat['contacts'];
|
|||
|
|
$result[$key]['rooms'][$keyRoom]['advStat']['yandex']['favorites'] = $stat['favorites'];
|
|||
|
|
$result[$key]['rooms'][$keyRoom]['advStat']['yandex']['calls'] = $stat['calls'];
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if ($service_id == 4) {
|
|||
|
|
$result[$key]['rooms'][$keyRoom]['advStat']['domclick']['views'] = $stat['views'];
|
|||
|
|
$result[$key]['rooms'][$keyRoom]['advStat']['domclick']['contacts'] = $stat['contacts'];
|
|||
|
|
$result[$key]['rooms'][$keyRoom]['advStat']['domclick']['favorites'] = $stat['favorites'];
|
|||
|
|
$result[$key]['rooms'][$keyRoom]['advStat']['domclick']['calls'] = $stat['calls'];
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
return $result;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
public function get_room_figures($room_id)
|
|||
|
|
{
|
|||
|
|
$figures_sql = "SELECT
|
|||
|
|
JSON_OBJECT(
|
|||
|
|
'id', c_f_p_f.id,
|
|||
|
|
'floor_plan_id', c_f_p_f.floor_plan_id,
|
|||
|
|
'room_plan_id', c_f_p_f.room_plan_id,
|
|||
|
|
'points', c_f_p_f.points,
|
|||
|
|
'background', c_f_p_f.background
|
|||
|
|
) AS figures
|
|||
|
|
FROM complex_rooms
|
|||
|
|
JOIN complex_rooms_plans c_room_p ON c_room_p.room_id = complex_rooms.id
|
|||
|
|
JOIN complex_house_plans_images c_house_p_i ON c_room_p.plan_id = c_house_p_i.plan_id AND c_house_p_i.position = 1
|
|||
|
|
JOIN complex_house_plans c_house_p ON c_room_p.plan_id = c_house_p.id
|
|||
|
|
JOIN complex_floor_plan_figures c_f_p_f ON c_f_p_f.room_plan_id = c_house_p.id
|
|||
|
|
WHERE complex_rooms.id = {$room_id};
|
|||
|
|
";
|
|||
|
|
|
|||
|
|
$figures_q = $this->db->query($figures_sql);
|
|||
|
|
|
|||
|
|
return json_decode($this->db->fetch_assoc($figures_q)['figures']);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//Установка страниц
|
|||
|
|
public function set_page_obj($page_obj)
|
|||
|
|
{
|
|||
|
|
$this->page_obj = $page_obj;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
public function set_page($page)
|
|||
|
|
{
|
|||
|
|
$this->page = $page;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//Установка id юзера
|
|||
|
|
public function set_user_id($user_id)
|
|||
|
|
{
|
|||
|
|
if ($user_id > 0) {
|
|||
|
|
$this->user_id = $user_id;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//Установка юзера
|
|||
|
|
public function set_user()
|
|||
|
|
{
|
|||
|
|
if (empty($this->user)) {
|
|||
|
|
$user = new User;
|
|||
|
|
$user_id = 0;
|
|||
|
|
if ($this->user_id > 0) {
|
|||
|
|
$user_id = $this->user_id;
|
|||
|
|
} else {
|
|||
|
|
$user_id = $_SESSION['id'];
|
|||
|
|
}
|
|||
|
|
$user->get($user_id);
|
|||
|
|
$this->user = $user;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//Установка юзеров агенства
|
|||
|
|
public function set_users_ids()
|
|||
|
|
{
|
|||
|
|
|
|||
|
|
if (empty($this->userIds)) {
|
|||
|
|
$userIds = array();
|
|||
|
|
$this->set_user();
|
|||
|
|
$agency_id = $this->user->agencyId;
|
|||
|
|
$userIds[] = $agency_id;
|
|||
|
|
|
|||
|
|
$sql_users = "SELECT id FROM users WHERE id in (select id from users where id={$agency_id} or id_manager={$agency_id} or id_manager in
|
|||
|
|
(select id from users where id_manager={$agency_id} or id_manager in
|
|||
|
|
(select id from users where id_manager={$agency_id})))";
|
|||
|
|
$q_users = $this->db->query($sql_users);
|
|||
|
|
while ($r_users = $this->db->fetch_assoc($q_users)) {
|
|||
|
|
$userIds[] = (int)$r_users['id'];
|
|||
|
|
}
|
|||
|
|
$this->userIds = array_unique($userIds);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
private function set_types_complex()
|
|||
|
|
{
|
|||
|
|
$this->types_comples = array(
|
|||
|
|
array('code' => 'complex', 'name' => 'Жилой комплекс в новостройке'),
|
|||
|
|
array('code' => 'comerc', 'name' => 'Коммерция'),
|
|||
|
|
array('code' => 'cottage_village', 'name' => 'Коттеджный поселок')
|
|||
|
|
);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
public function get_types_complex()
|
|||
|
|
{
|
|||
|
|
return $this->types_comples;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
*
|
|||
|
|
*/
|
|||
|
|
private function set_sphinx()
|
|||
|
|
{
|
|||
|
|
$pdo = new MysqlPdo(hstsph, null, null, null, true, '9306');
|
|||
|
|
$sql = "SET NAMES 'utf8mb4'";
|
|||
|
|
$pdo->query($sql);
|
|||
|
|
$this->sphinx = $pdo;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
private function set_sphinx2()
|
|||
|
|
{
|
|||
|
|
$pdo = new MysqlPdo(hstsph2, null, null, null, true, '9306');
|
|||
|
|
$sql = "SET NAMES 'utf8mb4'";
|
|||
|
|
$pdo->query($sql);
|
|||
|
|
$this->sphinx2 = $pdo;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
*
|
|||
|
|
*/
|
|||
|
|
private function set_payment_types()
|
|||
|
|
{
|
|||
|
|
$this->paymentTypes = array(
|
|||
|
|
array('code' => 1, 'name' => 'Субсидия'),
|
|||
|
|
array('code' => 2, 'name' => 'Ипотека'),
|
|||
|
|
array('code' => 3, 'name' => 'Военная ипотека'),
|
|||
|
|
);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
*
|
|||
|
|
*/
|
|||
|
|
public function get_payment_types()
|
|||
|
|
{
|
|||
|
|
$this->set_payment_types();
|
|||
|
|
return $this->paymentTypes;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
*
|
|||
|
|
*/
|
|||
|
|
private function set_housing_class()
|
|||
|
|
{
|
|||
|
|
$this->housingClass = array(
|
|||
|
|
array('code' => 1, 'name' => 'Эконом'),
|
|||
|
|
array('code' => 2, 'name' => 'Комфорт'),
|
|||
|
|
array('code' => 3, 'name' => 'Комфорт+'),
|
|||
|
|
array('code' => 4, 'name' => 'Бизнес'),
|
|||
|
|
array('code' => 5, 'name' => 'Элитный'),
|
|||
|
|
);
|
|||
|
|
}
|
|||
|
|
/**
|
|||
|
|
* Получение отделки
|
|||
|
|
*/
|
|||
|
|
public function get_decarations()
|
|||
|
|
{
|
|||
|
|
$rezult = array('list' => array(), 'options' => array());
|
|||
|
|
$sql = "SELECT * FROM avito_decoration_types order by id";
|
|||
|
|
$rez = $this->db->query($sql);
|
|||
|
|
while ($newFlatDecorationType = $this->db->fetch_assoc($rez)) {
|
|||
|
|
$rezult['list'][$newFlatDecorationType['id']] = $newFlatDecorationType['name'];
|
|||
|
|
$rezult['options'][] = array('code' => $newFlatDecorationType['id'], 'name' => $newFlatDecorationType['name']);
|
|||
|
|
}
|
|||
|
|
$this->listDecorations = $rezult;
|
|||
|
|
return $this->listDecorations;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
public function get_housing_class()
|
|||
|
|
{
|
|||
|
|
$this->set_housing_class();
|
|||
|
|
return $this->housingClass;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
public function get_decorations()
|
|||
|
|
{
|
|||
|
|
$sql = "SELECT * FROM decoration_types where id <= 10 ORDER BY name";
|
|||
|
|
$rez = $this->db->query($sql);
|
|||
|
|
|
|||
|
|
$decorationTypes = array();
|
|||
|
|
if ($this->db->num_rows($rez) > 0) {
|
|||
|
|
while ($dbObject = $this->db->fetch_assoc($rez)) {
|
|||
|
|
|
|||
|
|
$decorationTypes[] = array('code' => $dbObject['id'], 'name' => $dbObject['name']);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
return $decorationTypes;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* Страны
|
|||
|
|
* @return array
|
|||
|
|
*
|
|||
|
|
*/
|
|||
|
|
public function get_country()
|
|||
|
|
{
|
|||
|
|
$result = array();
|
|||
|
|
$country = array();
|
|||
|
|
$country_list = array();
|
|||
|
|
$countryListQuery = $this->db->query("select * from country_list where id=171 union select * from country_list where id <> 171");
|
|||
|
|
while ($countryList = $this->db->fetch_assoc($countryListQuery)) {
|
|||
|
|
$country[] = array('code' => $countryList['id'], 'name' => $countryList['name']);
|
|||
|
|
$country_list[$countryList['id']] = $countryList;
|
|||
|
|
}
|
|||
|
|
$result['country'] = $country;
|
|||
|
|
$result['country_list'] = $country_list;
|
|||
|
|
return $result;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* Регионы
|
|||
|
|
* @return array
|
|||
|
|
*/
|
|||
|
|
public function get_rf_regions()
|
|||
|
|
{
|
|||
|
|
$result = array();
|
|||
|
|
$regions = array();
|
|||
|
|
$regions_list = array();
|
|||
|
|
$region_id_user = 0;
|
|||
|
|
$this->set_user();
|
|||
|
|
$region_id_user = $this->user->region_rf_id;
|
|||
|
|
$regions_rf = $this->db->query("select * from rf_regions where parent = 0");
|
|||
|
|
while ($region_rf = $this->db->fetch_assoc($regions_rf)) {
|
|||
|
|
$regions[] = array(
|
|||
|
|
'code' => $region_rf['id'],
|
|||
|
|
'name' => $region_rf['name'],
|
|||
|
|
'rayons' => $this->get_rf_region_rayons($region_rf['id'])
|
|||
|
|
);
|
|||
|
|
|
|||
|
|
$regions_list[$region_rf['id']] = array('kladr' => $region_rf['kladr'], 'label' => mb_strtolower($region_rf['name']));
|
|||
|
|
}
|
|||
|
|
$result['regions'] = $regions;
|
|||
|
|
$result['region_id_user'] = $region_id_user;
|
|||
|
|
$result['regions_list'] = $regions_list;
|
|||
|
|
return $result;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
public function get_rf_region_rayons($rf_region_id)
|
|||
|
|
{
|
|||
|
|
$result = [];
|
|||
|
|
$sql = $this->db->query("SELECT id, name FROM regions WHERE rf_region_id = {$rf_region_id}");
|
|||
|
|
while ($row = $this->db->fetch_assoc($sql)) {
|
|||
|
|
$result[] = $row;
|
|||
|
|
}
|
|||
|
|
return $result;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* Метро
|
|||
|
|
* @param int $region_id
|
|||
|
|
* @return array
|
|||
|
|
*/
|
|||
|
|
public function get_metro($region_id)
|
|||
|
|
{
|
|||
|
|
$result = array();
|
|||
|
|
$metroRegion = $region_id;
|
|||
|
|
if ($region_id == 19) {
|
|||
|
|
$metroRegion = 1432;
|
|||
|
|
}
|
|||
|
|
if ($region_id == 1) {
|
|||
|
|
$metroRegion = 80;
|
|||
|
|
}
|
|||
|
|
if ($region_id == 2) {
|
|||
|
|
$metroRegion = 81;
|
|||
|
|
}
|
|||
|
|
if ($region_id == 37) {
|
|||
|
|
$metroRegion = 1468;
|
|||
|
|
}
|
|||
|
|
if ($region_id == 55) {
|
|||
|
|
$metroRegion = 1500;
|
|||
|
|
}
|
|||
|
|
if ($region_id == 57) {
|
|||
|
|
$metroRegion = 1504;
|
|||
|
|
}
|
|||
|
|
if ($region_id == 66) {
|
|||
|
|
$metroRegion = 1520;
|
|||
|
|
}
|
|||
|
|
if ($region_id == 69) {
|
|||
|
|
$metroRegion = 1526;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
$sql = empty($region_id) ? "SELECT * from metro" : "SELECT * from metro where region_rf_id = $metroRegion";
|
|||
|
|
|
|||
|
|
$metros_query = $this->db->query($sql);
|
|||
|
|
while ($metro = $this->db->fetch_assoc($metros_query)) {
|
|||
|
|
$result[] = array('code' => $metro['id'], 'name' => $metro['metro']);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
return $result;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
public function getUniquePeriods()
|
|||
|
|
{
|
|||
|
|
$result = [];
|
|||
|
|
|
|||
|
|
$sql = "SELECT DISTINCT deadline FROM buildings GROUP BY deadline LIMIT 1000";
|
|||
|
|
$rez = $this->db->query($sql);
|
|||
|
|
|
|||
|
|
$date = Date::getLastPeriodDate(time());
|
|||
|
|
$currentTs = strtotime($date);
|
|||
|
|
if ($this->db->num_rows($rez) > 0) {
|
|||
|
|
while ($dbObject = $this->db->fetch_assoc($rez)) {
|
|||
|
|
$date = Date::getLastPeriodDate(strtotime($dbObject['deadline']));
|
|||
|
|
$ts = strtotime($date);
|
|||
|
|
$name = Date::getFormatedEndingPeriod($date);
|
|||
|
|
if ($currentTs < $ts) {
|
|||
|
|
$result[$ts] = $name;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
$result[$currentTs] = Date::DEADLINE_DONE;
|
|||
|
|
ksort($result);
|
|||
|
|
$res = array();
|
|||
|
|
foreach ($result as $key => $period) {
|
|||
|
|
$res[] = array('code' => $key, 'name' => $period);
|
|||
|
|
}
|
|||
|
|
return $res;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* Список застройщиков
|
|||
|
|
* @return array
|
|||
|
|
*/
|
|||
|
|
private function building_list()
|
|||
|
|
{
|
|||
|
|
$building_list = array();
|
|||
|
|
$building_query = $this->db->query("SELECT * FROM buildings");
|
|||
|
|
while ($building = $this->db->fetch_assoc($building_query)) {
|
|||
|
|
$building_list[$building['block_id']][] = $building;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
return $building_list;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* ЖК новостройки
|
|||
|
|
* @return array
|
|||
|
|
*/
|
|||
|
|
public function get_blocks()
|
|||
|
|
{
|
|||
|
|
$result = array();
|
|||
|
|
$building_list = $this->building_list();
|
|||
|
|
$sql = "SELECT * FROM `blocks` order by name";
|
|||
|
|
$block_query = $this->db->query($sql);
|
|||
|
|
while ($block = $this->db->fetch_assoc($block_query)) {
|
|||
|
|
$result['block_list'][] = array('code' => $block['id'], 'name' => $block['name']);
|
|||
|
|
if (isset($building_list[$block['id']]) && !empty($building_list[$block['id']])) {
|
|||
|
|
foreach ($building_list[$block['id']] as $building) {
|
|||
|
|
if (!isset($block['lines'][(int)$building['line']])) {
|
|||
|
|
$block['lines'][(int)$building['line']] = array(
|
|||
|
|
'name' => (int)$building['line'], 'isDiv' => true,
|
|||
|
|
'isEdit' => false, 'corpuses' => array(), 'isInput' => false
|
|||
|
|
);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
$block['lines'][(int)$building['line']]['corpuses'][] = array(
|
|||
|
|
'corpus' => $building['corp'],
|
|||
|
|
'period' => Date::getFormatedEndingPeriod($building['deadline']),
|
|||
|
|
'deadline' => date('d.m.Y', strtotime($building['deadline'])),
|
|||
|
|
'isDiv' => true,
|
|||
|
|
'isEdit' => false,
|
|||
|
|
'date' => '',
|
|||
|
|
);
|
|||
|
|
}
|
|||
|
|
} else {
|
|||
|
|
$block['lines'] = array();
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
$result['blocks'][$block['id']] = $block;
|
|||
|
|
}
|
|||
|
|
return $result;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* Фото комплекса
|
|||
|
|
* @param int block_id
|
|||
|
|
* @return array $photos
|
|||
|
|
*/
|
|||
|
|
public function getPhotos($block_id)
|
|||
|
|
{
|
|||
|
|
$photos = array();
|
|||
|
|
|
|||
|
|
$sql = "SELECT image FROM blocks WHERE id={$block_id}";
|
|||
|
|
$rez = $this->db->query($sql);
|
|||
|
|
$appendedFiles = array();
|
|||
|
|
if ($this->db->num_rows($rez) > 0) {
|
|||
|
|
while ($dbObject = $this->db->fetch_assoc($rez)) {
|
|||
|
|
|
|||
|
|
$ph_url = $dbObject['image'];
|
|||
|
|
$name = $dbObject['image'];
|
|||
|
|
$pathInfo = pathinfo($name);
|
|||
|
|
$appendedFiles[] = array(
|
|||
|
|
"name" => $ph_url,
|
|||
|
|
"file" => $ph_url,
|
|||
|
|
"type" => "image/" . $pathInfo['extension'],
|
|||
|
|
"data" => array(
|
|||
|
|
"url" => $ph_url,
|
|||
|
|
"thumbnail" => $ph_url
|
|||
|
|
)
|
|||
|
|
);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
$sql = "SELECT image FROM block_images WHERE model_id='{$block_id}' AND type != 10";
|
|||
|
|
$rez = $this->db->query($sql);
|
|||
|
|
|
|||
|
|
if ($this->db->num_rows($rez) > 0) {
|
|||
|
|
while ($dbObject = $this->db->fetch_assoc($rez)) {
|
|||
|
|
$ph_url = $dbObject['image'];
|
|||
|
|
$name = $dbObject['image'];
|
|||
|
|
$pathInfo = pathinfo($name);
|
|||
|
|
$appendedFiles[] = array(
|
|||
|
|
"name" => $ph_url,
|
|||
|
|
"file" => $ph_url,
|
|||
|
|
"type" => "image/" . $pathInfo['extension'],
|
|||
|
|
"data" => array(
|
|||
|
|
"url" => $ph_url,
|
|||
|
|
"thumbnail" => $ph_url
|
|||
|
|
)
|
|||
|
|
);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
return $appendedFiles;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* Преобразование корпуса
|
|||
|
|
* @param string $deadline
|
|||
|
|
* @param string $corpus
|
|||
|
|
* @return array $corpusNew
|
|||
|
|
*/
|
|||
|
|
public function corpus_convert($corpus, $deadline, $corpus_id, $corpus_floors, $corpus_floors_ready, $corpus_fz_214, $corpus_status)
|
|||
|
|
{
|
|||
|
|
$corpusNew = array();
|
|||
|
|
$newDeadline = date('Y-m-d', strtotime($deadline));
|
|||
|
|
$period = Date::getFormatedEndingPeriod($newDeadline);
|
|||
|
|
$corpusNew = array(
|
|||
|
|
'corpus' => $corpus,
|
|||
|
|
'period' => $period,
|
|||
|
|
'deadline' => date('d.m.Y', strtotime($newDeadline)),
|
|||
|
|
'isDiv' => true,
|
|||
|
|
'isEdit' => false,
|
|||
|
|
'date' => '',
|
|||
|
|
'corpus_id' => $corpus_id,
|
|||
|
|
'corpus_floors' => $corpus_floors,
|
|||
|
|
'corpus_floors_ready' => $corpus_floors_ready,
|
|||
|
|
'corpus_fz_214' => $corpus_fz_214,
|
|||
|
|
'corpus_status' => $corpus_status
|
|||
|
|
);
|
|||
|
|
return $corpusNew;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* Список застройщиков
|
|||
|
|
* @return array
|
|||
|
|
*/
|
|||
|
|
public function get_builder_list($agency_id = null)
|
|||
|
|
{
|
|||
|
|
$builder_list = array();
|
|||
|
|
$builder_query = $this->db->query("SELECT id, name, logo, phone, link
|
|||
|
|
FROM (
|
|||
|
|
SELECT builders.id, builders.name, builders.logo, complex_builders.phone, complex_builders.link
|
|||
|
|
FROM builders
|
|||
|
|
LEFT JOIN complex_builders ON complex_builders.builder_id = builders.id
|
|||
|
|
UNION ALL
|
|||
|
|
SELECT id, name, logo, phone, link
|
|||
|
|
FROM complex_builders
|
|||
|
|
WHERE name IS NOT NULL AND name != ''
|
|||
|
|
) AS combined_results
|
|||
|
|
ORDER BY name");
|
|||
|
|
$complex_builder_ids = array();
|
|||
|
|
if ($agency_id > 0) {
|
|||
|
|
$sql = "SELECT id , builder_id FROM complex_list WHERE agency_id = {$agency_id} AND deleted = 0 AND arhive = 0";
|
|||
|
|
$q = $this->db->query($sql);
|
|||
|
|
while ($r = $this->db->fetch_assoc($q)) {
|
|||
|
|
if ((int)$r['builder_id'] > 0) {
|
|||
|
|
$complex_builder_ids[] = (int)$r['builder_id'];
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
while ($builders = $this->db->fetch_assoc($builder_query)) {
|
|||
|
|
if ($agency_id > 0) {
|
|||
|
|
if (in_array($builders['id'], $complex_builder_ids)) {
|
|||
|
|
$builder_list['list'][$builders['id']] = $builders;
|
|||
|
|
$builder_list['options'][] = array('code' => $builders['id'], 'name' => $builders['name']);
|
|||
|
|
}
|
|||
|
|
} else {
|
|||
|
|
$builder_list['list'][$builders['id']] = $builders;
|
|||
|
|
$builder_list['options'][] = array('code' => $builders['id'], 'name' => $builders['name']);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
return $builder_list;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* Добавить застройщика
|
|||
|
|
* @param string $name
|
|||
|
|
* @return array
|
|||
|
|
*/
|
|||
|
|
public function addBuilder($name, $phone, $link)
|
|||
|
|
{
|
|||
|
|
$result = array();
|
|||
|
|
$this_name = trim($name);
|
|||
|
|
$sql_b = "SELECT id FROM builders WHERE name = '{$this_name}'";
|
|||
|
|
$q_b = $this->db->query($sql_b);
|
|||
|
|
if ($this->db->num_rows($q_b) > 0) {
|
|||
|
|
$res = $this->db->fetch_assoc($q_b);
|
|||
|
|
$id = (int)$res['id'];
|
|||
|
|
$sql_info = "SELECT * FROM complex_builders WHERE builder_id = {$id}";
|
|||
|
|
$q_info = $this->db->query($sql_info);
|
|||
|
|
if ($this->db->num_rows($q_info) > 0) {
|
|||
|
|
$sql_up = "UPDATE complex_builders SET phone='{$phone}', link='{$link}' WHERE builder_id = {$id}";
|
|||
|
|
} else {
|
|||
|
|
$sql_up = "INSERT INTO complex_builders SET phone='{$phone}', link='{$link}', builder_id = {$id}";
|
|||
|
|
}
|
|||
|
|
$this->db->query($sql_up);
|
|||
|
|
$result['result'] = 'old';
|
|||
|
|
$result['builder_id'] = (int)$id;
|
|||
|
|
} else {
|
|||
|
|
$sql_in = "INSERT INTO complex_builders SET name = '{$this_name}', phone='{$phone}', link='{$link}'";
|
|||
|
|
$this->db->query($sql_in, true);
|
|||
|
|
$id = $this->db->insert_id();
|
|||
|
|
$result['result'] = 'new';
|
|||
|
|
$result['builder_id'] = (int)$id;
|
|||
|
|
}
|
|||
|
|
return $result;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
*
|
|||
|
|
*/
|
|||
|
|
public function get_complexes()
|
|||
|
|
{
|
|||
|
|
$this->set_user();
|
|||
|
|
$result = array();
|
|||
|
|
$sql = "SELECT id, name FROM complex_list WHERE agency_id={$this->user->agencyId} AND deleted=0 AND arhive=0";
|
|||
|
|
//echo $sql;
|
|||
|
|
$q = $this->db->query($sql);
|
|||
|
|
while ($complex = $this->db->fetch_assoc($q)) {
|
|||
|
|
$result[] = array('code' => $complex['id'], 'name' => $complex['name']);
|
|||
|
|
}
|
|||
|
|
return $result;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
*
|
|||
|
|
*/
|
|||
|
|
public function get_types_room()
|
|||
|
|
{
|
|||
|
|
$result = array();
|
|||
|
|
$sql = "SELECT * FROM room_types ORDER BY name";
|
|||
|
|
$rez = $this->db->query($sql);
|
|||
|
|
while ($type_room = $this->db->fetch_assoc($rez)) {
|
|||
|
|
$result[] = array('code' => $type_room['id'], 'name' => $type_room['name']);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
return $result;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* Установка комплекса
|
|||
|
|
* @param array $complex
|
|||
|
|
* @return void()
|
|||
|
|
*/
|
|||
|
|
public function set_complex($complex)
|
|||
|
|
{
|
|||
|
|
$this->complex = $complex;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* Тип дома
|
|||
|
|
*/
|
|||
|
|
public function get_house_types()
|
|||
|
|
{
|
|||
|
|
$result = array();
|
|||
|
|
$sql = "SELECT * FROM house_material ORDER BY name";
|
|||
|
|
$rez = $this->db->query($sql);
|
|||
|
|
while ($house_material = $this->db->fetch_assoc($rez)) {
|
|||
|
|
$result[] = array('code' => $house_material['id'], 'name' => $house_material['name']);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
return $result;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* Материал дома
|
|||
|
|
*/
|
|||
|
|
public function get_house_material()
|
|||
|
|
{
|
|||
|
|
$result = array();
|
|||
|
|
$sql = "SELECT * FROM house_material ORDER BY name";
|
|||
|
|
$rez = $this->db->query($sql);
|
|||
|
|
while ($house_material = $this->db->fetch_assoc($rez)) {
|
|||
|
|
$result[] = array('code' => $house_material['id'], 'name' => $house_material['name']);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
return $result;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* Сохранение фото
|
|||
|
|
* @param array $photos
|
|||
|
|
* @return array $photo_links
|
|||
|
|
*/
|
|||
|
|
private function save_photo($photos)
|
|||
|
|
{
|
|||
|
|
$this->set_user();
|
|||
|
|
$Selectel = SelectelApi::getTokenAndUrl();
|
|||
|
|
|
|||
|
|
$token = $Selectel[0];
|
|||
|
|
$storageUrl = $Selectel[1];
|
|||
|
|
|
|||
|
|
if (!is_dir($_SERVER['DOCUMENT_ROOT'] . "/photos")) {
|
|||
|
|
mkdir($_SERVER['DOCUMENT_ROOT'] . "/photos");
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if (!is_dir($_SERVER['DOCUMENT_ROOT'] . "/photos/complexes")) {
|
|||
|
|
mkdir($_SERVER['DOCUMENT_ROOT'] . "/photos/complexes");
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
foreach ($photos as $filePos) {
|
|||
|
|
if (strpos($filePos['file'], "https://") !== false) {
|
|||
|
|
$newPhotos[$filePos['index']] = $filePos['file'];
|
|||
|
|
} else {
|
|||
|
|
if (strpos($filePos['file'], "0:/") !== false) {
|
|||
|
|
$originalName = str_replace("0:/", "", $filePos['file']);
|
|||
|
|
$strArray = explode(".", $originalName);
|
|||
|
|
$ext = end($strArray);
|
|||
|
|
if ($ext == "pjpeg") {
|
|||
|
|
$ext = "jpeg";
|
|||
|
|
}
|
|||
|
|
$ext = mb_strtolower($ext);
|
|||
|
|
|
|||
|
|
$name = md5($originalName . time()) . "." . $ext;
|
|||
|
|
|
|||
|
|
$one = mb_substr($name, 0, 1);
|
|||
|
|
|
|||
|
|
if (!is_dir($_SERVER['DOCUMENT_ROOT'] . "/photos/complexes/$one")) {
|
|||
|
|
mkdir($_SERVER['DOCUMENT_ROOT'] . "/photos/complexes/$one");
|
|||
|
|
}
|
|||
|
|
$two = mb_substr($name, 1, 1);
|
|||
|
|
if (!is_dir($_SERVER['DOCUMENT_ROOT'] . "/photos/complexes/$one/$two")) {
|
|||
|
|
mkdir($_SERVER['DOCUMENT_ROOT'] . "/photos/complexes/$one/$two");
|
|||
|
|
}
|
|||
|
|
$three = mb_substr($name, 3, 1);
|
|||
|
|
if (!is_dir($_SERVER['DOCUMENT_ROOT'] . "/photos/complexes/$one/$two/$three")) {
|
|||
|
|
mkdir($_SERVER['DOCUMENT_ROOT'] . "/photos/complexes/$one/$two/$three");
|
|||
|
|
}
|
|||
|
|
$new_path = "$one/$two/$three/$name";
|
|||
|
|
|
|||
|
|
$photo = "/photos/complexes/" . $new_path;
|
|||
|
|
|
|||
|
|
$oldPath = $_SERVER['DOCUMENT_ROOT'] . "/photos/complexes/complex_temp/" . $_SESSION['id'] . "/" . $originalName;
|
|||
|
|
|
|||
|
|
try {
|
|||
|
|
copy($oldPath, $_SERVER['DOCUMENT_ROOT'] . $photo);
|
|||
|
|
|
|||
|
|
$oldPathList[] = $oldPath;
|
|||
|
|
|
|||
|
|
$index = $filePos['index'];
|
|||
|
|
if (isset($filePos['editor'])) {
|
|||
|
|
$editor = $filePos['editor'];
|
|||
|
|
} else {
|
|||
|
|
$editor = [];
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
resize($_SERVER['DOCUMENT_ROOT'] . $photo, null, null, null, (isset($editor['crop']) ? $editor['crop'] : null), 100, (isset($editor['rotation']) ? $editor['rotation'] : null));
|
|||
|
|
|
|||
|
|
$image = new Imagick();
|
|||
|
|
|
|||
|
|
$image->readImage($_SERVER['DOCUMENT_ROOT'] . $photo);
|
|||
|
|
|
|||
|
|
$resolution = 1024;
|
|||
|
|
|
|||
|
|
if ($this->user->agencyId == 10919 || $this->user->agencyId == 8826 || $this->user->agencyId == 12482 || $this->user->agencyId == 11916) {
|
|||
|
|
$resolution = 1920;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if ($image->getImageWidth() > $resolution) {
|
|||
|
|
$image->scaleImage($resolution, $resolution, true);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
$image->writeImage();
|
|||
|
|
|
|||
|
|
//загрузка в Selectel
|
|||
|
|
$fp = $_SERVER['DOCUMENT_ROOT'] . "/photos/complexes/" . $new_path;
|
|||
|
|
|
|||
|
|
$SelectelApi = new SelectelApi();
|
|||
|
|
|
|||
|
|
$r = $SelectelApi->uploadFile($storageUrl, $token, $fp, '/complexes/' . $new_path, 'image/' . $ext);
|
|||
|
|
//если выложили в Selectel
|
|||
|
|
|
|||
|
|
if ($r) {
|
|||
|
|
//заменяем путь на новый
|
|||
|
|
$new_path = "https://data.joywork.ru/complexes/" . $new_path;
|
|||
|
|
//удаляем файл с локального сервера
|
|||
|
|
unlink($fp);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if ($index >= 0) {
|
|||
|
|
$newPhotos[$index] = $new_path;
|
|||
|
|
} else {
|
|||
|
|
$newPhotos[] = $new_path;
|
|||
|
|
}
|
|||
|
|
} catch (Exception $e) {
|
|||
|
|
$err = "Проблема загрузки фотографии " . $originalName . ", возможно, фото повреждено или его формат не соответствует расширению";
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
if (isset($err)) {
|
|||
|
|
$result['error'] = $err;
|
|||
|
|
}
|
|||
|
|
if (isset($newPhotos)) {
|
|||
|
|
$result = $newPhotos;
|
|||
|
|
}
|
|||
|
|
return $result;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* Добавить фото для комплекса
|
|||
|
|
* @param array $photos
|
|||
|
|
* @param array $complex
|
|||
|
|
*
|
|||
|
|
*/
|
|||
|
|
public function addPhotoToComplex($photos, $complex_id)
|
|||
|
|
{
|
|||
|
|
$newPhotos = $this->uploadPhotosToEntity($photos, 'complexes', $complex_id);
|
|||
|
|
if (isset($newPhotos)) {
|
|||
|
|
// $filesToDelete = array();
|
|||
|
|
// $r = $this->db->query("SELECT `image` FROM complex_images WHERE complex_id = {$complex_id}");
|
|||
|
|
// while ($row = $this->db->fetch_assoc($r)) {
|
|||
|
|
// $filesToDelete[] = $row['image'];
|
|||
|
|
// }
|
|||
|
|
|
|||
|
|
// $this->deleteFiles($filesToDelete);
|
|||
|
|
|
|||
|
|
// $this->db->query("DELETE FROM complex_images WHERE complex_id = {$complex_id}", true);
|
|||
|
|
foreach ($newPhotos as &$image) {
|
|||
|
|
$sql_in_image = "INSERT INTO complex_images SET complex_id = {$complex_id}, image = '{$image['url']}'";
|
|||
|
|
$this->db->query($sql_in_image, true);
|
|||
|
|
$image['id'] = (int)$this->db->insert_id();
|
|||
|
|
$image['complex_id'] = (int)$complex_id;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
return $newPhotos;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
return '';
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
public function updateComplexPhoto($photo, $photo_id)
|
|||
|
|
{
|
|||
|
|
$r = $this->db->query("SELECT * FROM complex_images WHERE id = {$photo_id}");
|
|||
|
|
|
|||
|
|
$row = $this->db->fetch_assoc($r);
|
|||
|
|
$fileToDelete = $row['image'];
|
|||
|
|
|
|||
|
|
$this->deleteFiles([$fileToDelete]);
|
|||
|
|
|
|||
|
|
$newPhotos = $this->uploadPhotosToEntity([$photo], 'complexes', $row['complex_id']);
|
|||
|
|
|
|||
|
|
if (count($newPhotos)) {
|
|||
|
|
$sqlUpdate = "UPDATE complex_images SET image = '{$newPhotos[0]['url']}' WHERE id = {$photo_id}";
|
|||
|
|
$this->db->query($sqlUpdate);
|
|||
|
|
$row['image'] = $newPhotos[0]['url'];
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
return $row;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
public function addPhotosToHouse($photos, $house_id)
|
|||
|
|
{
|
|||
|
|
$newPhotos = $this->uploadPhotosToEntity($photos, 'houses', $house_id);
|
|||
|
|
|
|||
|
|
if (isset($newPhotos)) {
|
|||
|
|
foreach ($newPhotos as &$image) {
|
|||
|
|
$sql_in_image = "INSERT INTO complex_house_images SET house_id = {$house_id}, `url` = '{$image['url']}', `name` = '{$image['name']}'";
|
|||
|
|
$this->db->query($sql_in_image, true);
|
|||
|
|
$image['id'] = (int)$this->db->insert_id();
|
|||
|
|
$image['house_id'] = (int)$house_id;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
return $newPhotos;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
return '';
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
public function saveHouseDecoration($house_id, $desc = null, $id = null, $decorationId = null, $photo = null, $photo2 = null, $photo3 = null, $photo4 = null, $photo5 = null)
|
|||
|
|
{
|
|||
|
|
if (empty($house_id)) {
|
|||
|
|
return ['status' => false];
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
$SQLSet = ["`house_id` = {$house_id}"];
|
|||
|
|
|
|||
|
|
if ($photo === null) {
|
|||
|
|
if ($id) {
|
|||
|
|
$selectSql = $this->db->query("SELECT photo FROM complex_house_decoration WHERE id = $id");
|
|||
|
|
$foundDecoration = $this->db->fetch_assoc($selectSql);
|
|||
|
|
if ($foundDecoration) {
|
|||
|
|
$this->deleteFiles([$foundDecoration['photo']]);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
$SQLSet[] = "`photo` = NULL";
|
|||
|
|
} else if ($photo) {
|
|||
|
|
if (is_string($photo) && strpos($photo, "https://") !== false) {
|
|||
|
|
$SQLSet[] = "`photo` = '$photo'";
|
|||
|
|
} else {
|
|||
|
|
$newPhotos = $this->uploadPhotosToEntity([$photo], 'decoration', $house_id);
|
|||
|
|
if (isset($newPhotos[0])) {
|
|||
|
|
$img = $newPhotos[0];
|
|||
|
|
$SQLSet[] = "`photo` = '{$img['url']}'";
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if ($photo2 === null) {
|
|||
|
|
if ($id) {
|
|||
|
|
$selectSql = $this->db->query("SELECT photo FROM complex_house_decoration WHERE id = $id");
|
|||
|
|
$foundDecoration = $this->db->fetch_assoc($selectSql);
|
|||
|
|
if ($foundDecoration) {
|
|||
|
|
$this->deleteFiles([$foundDecoration['photo2']]);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
$SQLSet[] = "`photo2` = NULL";
|
|||
|
|
} else if ($photo2) {
|
|||
|
|
if (is_string($photo2) && strpos($photo2, "https://") !== false) {
|
|||
|
|
$SQLSet[] = "`photo2` = '$photo2'";
|
|||
|
|
} else {
|
|||
|
|
$newPhotos = $this->uploadPhotosToEntity([$photo2], 'decoration', $house_id);
|
|||
|
|
if (isset($newPhotos[0])) {
|
|||
|
|
$img = $newPhotos[0];
|
|||
|
|
$SQLSet[] = "`photo2` = '{$img['url']}'";
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if ($photo3 === null) {
|
|||
|
|
if ($id) {
|
|||
|
|
$selectSql = $this->db->query("SELECT photo FROM complex_house_decoration WHERE id = $id");
|
|||
|
|
$foundDecoration = $this->db->fetch_assoc($selectSql);
|
|||
|
|
if ($foundDecoration) {
|
|||
|
|
$this->deleteFiles([$foundDecoration['photo3']]);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
$SQLSet[] = "`photo3` = NULL";
|
|||
|
|
} else if ($photo3) {
|
|||
|
|
if (is_string($photo3) && strpos($photo3, "https://") !== false) {
|
|||
|
|
$SQLSet[] = "`photo3` = '$photo3'";
|
|||
|
|
} else {
|
|||
|
|
$newPhotos = $this->uploadPhotosToEntity([$photo3], 'decoration', $house_id);
|
|||
|
|
if (isset($newPhotos[0])) {
|
|||
|
|
$img = $newPhotos[0];
|
|||
|
|
$SQLSet[] = "`photo3` = '{$img['url']}'";
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if ($photo4 === null) {
|
|||
|
|
if ($id) {
|
|||
|
|
$selectSql = $this->db->query("SELECT photo FROM complex_house_decoration WHERE id = $id");
|
|||
|
|
$foundDecoration = $this->db->fetch_assoc($selectSql);
|
|||
|
|
if ($foundDecoration) {
|
|||
|
|
$this->deleteFiles([$foundDecoration['photo4']]);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
$SQLSet[] = "`photo4` = NULL";
|
|||
|
|
} else if ($photo4) {
|
|||
|
|
if (is_string($photo4) && strpos($photo4, "https://") !== false) {
|
|||
|
|
$SQLSet[] = "`photo4` = '$photo4'";
|
|||
|
|
} else {
|
|||
|
|
$newPhotos = $this->uploadPhotosToEntity([$photo4], 'decoration', $house_id);
|
|||
|
|
if (isset($newPhotos[0])) {
|
|||
|
|
$img = $newPhotos[0];
|
|||
|
|
$SQLSet[] = "`photo4` = '{$img['url']}'";
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if ($photo5 === null) {
|
|||
|
|
if ($id) {
|
|||
|
|
$selectSql = $this->db->query("SELECT photo FROM complex_house_decoration WHERE id = $id");
|
|||
|
|
$foundDecoration = $this->db->fetch_assoc($selectSql);
|
|||
|
|
if ($foundDecoration) {
|
|||
|
|
$this->deleteFiles([$foundDecoration['photo5']]);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
$SQLSet[] = "`photo5` = NULL";
|
|||
|
|
} else if ($photo5) {
|
|||
|
|
if (is_string($photo5) && strpos($photo5, "https://") !== false) {
|
|||
|
|
$SQLSet[] = "`photo5` = '$photo5'";
|
|||
|
|
} else {
|
|||
|
|
$newPhotos = $this->uploadPhotosToEntity([$photo5], 'decoration', $house_id);
|
|||
|
|
if (isset($newPhotos[0])) {
|
|||
|
|
$img = $newPhotos[0];
|
|||
|
|
$SQLSet[] = "`photo5` = '{$img['url']}'";
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if ($decorationId) {
|
|||
|
|
$SQLSet[] = "`decoration_id` = {$decorationId}";
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if ($desc) {
|
|||
|
|
$SQLSet[] = "`desc` = '$desc'";
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// EDIT
|
|||
|
|
if ($id) {
|
|||
|
|
$sql_in_image = "UPDATE complex_house_decoration SET " . implode(', ', $SQLSet) . " WHERE id = $id";
|
|||
|
|
} else {
|
|||
|
|
$sql_in_image = "INSERT INTO complex_house_decoration SET " . implode(', ', $SQLSet);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
$this->db->query($sql_in_image, true);
|
|||
|
|
|
|||
|
|
if (!$id) {
|
|||
|
|
$id = (int)$this->db->insert_id();
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
return $id;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
public function deleteHouseDecoration($id)
|
|||
|
|
{
|
|||
|
|
if ($id) {
|
|||
|
|
$selectSql = $this->db->query("SELECT photo FROM complex_house_decoration WHERE id = $id");
|
|||
|
|
$foundDecoration = $this->db->fetch_assoc($selectSql);
|
|||
|
|
if ($foundDecoration) {
|
|||
|
|
$this->deleteFiles([$foundDecoration['photo'], $foundDecoration['photo2'], $foundDecoration['photo3'], $foundDecoration['photo4'], $foundDecoration['photo5']]);
|
|||
|
|
}
|
|||
|
|
$this->db->query("DELETE FROM complex_house_decoration WHERE id = $id");
|
|||
|
|
return ['status' => true];
|
|||
|
|
} else {
|
|||
|
|
return ['status' => false, 'message' => 'field id required'];
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
public function saveHouseUTP($house_id, $desc = null, $id = null, $title = null, $photo)
|
|||
|
|
{
|
|||
|
|
if (empty($house_id)) {
|
|||
|
|
return ['status' => false];
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
$SQLSet = ["`house_id` = {$house_id}"];
|
|||
|
|
|
|||
|
|
if ($photo === null) {
|
|||
|
|
if ($id) {
|
|||
|
|
$selectSql = $this->db->query("SELECT photo FROM complex_house_UTP WHERE id = $id");
|
|||
|
|
$foundUtp = $this->db->fetch_assoc($selectSql);
|
|||
|
|
if ($foundUtp) {
|
|||
|
|
$this->deleteFiles([$foundUtp['photo']]);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
$SQLSet[] = "`photo` = NULL";
|
|||
|
|
} else if ($photo) {
|
|||
|
|
$newPhotos = $this->uploadPhotosToEntity([$photo], 'utp', $house_id);
|
|||
|
|
if (isset($newPhotos[0])) {
|
|||
|
|
$img = $newPhotos[0];
|
|||
|
|
$SQLSet[] = "`photo` = '{$img['url']}'";
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if ($title) {
|
|||
|
|
$SQLSet[] = "`title` = '$title'";
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if ($desc) {
|
|||
|
|
$SQLSet[] = "`desc` = '$desc'";
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
// EDIT
|
|||
|
|
if ($id) {
|
|||
|
|
$sql_in_image = "UPDATE complex_house_UTP SET " . implode(', ', $SQLSet) . " WHERE id = $id";
|
|||
|
|
} else {
|
|||
|
|
$sql_in_image = "INSERT INTO complex_house_UTP SET " . implode(', ', $SQLSet);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
$this->db->query($sql_in_image, true);
|
|||
|
|
|
|||
|
|
if (!$id) {
|
|||
|
|
$id = (int)$this->db->insert_id();
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
return $id;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
public function deleteHouseUTP($id)
|
|||
|
|
{
|
|||
|
|
if ($id) {
|
|||
|
|
$selectSql = $this->db->query("SELECT photo FROM complex_house_UTP WHERE id = $id");
|
|||
|
|
$foundUtp = $this->db->fetch_assoc($selectSql);
|
|||
|
|
if ($foundUtp) {
|
|||
|
|
$this->deleteFiles([$foundUtp['photo']]);
|
|||
|
|
}
|
|||
|
|
$this->db->query("DELETE FROM complex_house_UTP WHERE id = $id");
|
|||
|
|
return ['status' => true];
|
|||
|
|
} else {
|
|||
|
|
return ['status' => false, 'message' => 'field id required'];
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
public function uploadPhotosToEntity($photos, $entity_name, $entity_id = null)
|
|||
|
|
{
|
|||
|
|
if (!$entity_id) {
|
|||
|
|
$entity_id = 'new';
|
|||
|
|
}
|
|||
|
|
$Selectel = SelectelApi::getTokenAndUrl();
|
|||
|
|
$token = $Selectel[0];
|
|||
|
|
$storageUrl = $Selectel[1];
|
|||
|
|
|
|||
|
|
$uploaddir = $_SERVER['DOCUMENT_ROOT'] . "/photos/$entity_name/";
|
|||
|
|
$newPhotos = [];
|
|||
|
|
|
|||
|
|
foreach ($photos as $photo) {
|
|||
|
|
$originalName = $photo['name'];
|
|||
|
|
$strArray = explode(".", $originalName);
|
|||
|
|
$ext = mb_strtolower(end($strArray));
|
|||
|
|
|
|||
|
|
if ($ext == "pjpeg") {
|
|||
|
|
$ext = "jpeg";
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
$name = md5(time() . $originalName) . "." . $ext;
|
|||
|
|
|
|||
|
|
$one = mb_substr($name, 0, 1);
|
|||
|
|
$two = mb_substr($name, 1, 1);
|
|||
|
|
$three = mb_substr($name, 3, 1);
|
|||
|
|
|
|||
|
|
$new_path = "$one/$two/$three/$name";
|
|||
|
|
$fp = $uploaddir . $new_path;
|
|||
|
|
|
|||
|
|
// create directories
|
|||
|
|
if (!is_dir($uploaddir)) {
|
|||
|
|
mkdir($uploaddir, 0777, true);
|
|||
|
|
}
|
|||
|
|
if (!is_dir("$uploaddir/$one/$two/$three")) {
|
|||
|
|
mkdir("$uploaddir/$one/$two/$three", 0777, true);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if (move_uploaded_file($photo['tmp_name'], $fp)) {
|
|||
|
|
|
|||
|
|
$fileSize = filesize($fp); // get size before deletion
|
|||
|
|
|
|||
|
|
$SelectelApi = new SelectelApi();
|
|||
|
|
$remotePath = "/$entity_name/" . $entity_id . '/' . $new_path;
|
|||
|
|
|
|||
|
|
$r = $SelectelApi->uploadFile(
|
|||
|
|
$storageUrl,
|
|||
|
|
$token,
|
|||
|
|
$fp,
|
|||
|
|
$remotePath,
|
|||
|
|
'image/' . $ext
|
|||
|
|
);
|
|||
|
|
|
|||
|
|
if ($r) {
|
|||
|
|
$url = "https://data.joywork.ru/$entity_name/" . $entity_id . "/" . $new_path;
|
|||
|
|
|
|||
|
|
// remove local file
|
|||
|
|
unlink($fp);
|
|||
|
|
|
|||
|
|
$newPhotos[] = [
|
|||
|
|
'file_path' => $remotePath, // or $fp if you prefer local
|
|||
|
|
'original_name' => $originalName,
|
|||
|
|
'file_size' => $fileSize,
|
|||
|
|
'thumbnail_path' => null,
|
|||
|
|
'url' => $url
|
|||
|
|
];
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
return $newPhotos;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
public function addPlanToHouse($house_id, $photos, $position)
|
|||
|
|
{
|
|||
|
|
$sql = "INSERT INTO complex_house_plans SET house_id = {$house_id}";
|
|||
|
|
$r = $this->db->query($sql, true);
|
|||
|
|
|
|||
|
|
$plan_id = $this->db->insert_id();
|
|||
|
|
|
|||
|
|
$plan_sql = "SELECT * FROM complex_house_plans WHERE id = {$plan_id}";
|
|||
|
|
$plan_r = $this->db->query($plan_sql, true);
|
|||
|
|
$plan = $this->db->fetch_assoc($plan_r);
|
|||
|
|
|
|||
|
|
$plan['images'] = $this->addPhotosToRoomPlan($photos, $plan_id, $position);
|
|||
|
|
|
|||
|
|
return $plan;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
public function addMediaToHouse($house_id, $photos)
|
|||
|
|
{
|
|||
|
|
$medias = $this->uploadPhotosToEntity($photos, "medias", $house_id);
|
|||
|
|
|
|||
|
|
$result = [];
|
|||
|
|
|
|||
|
|
$thmbResult=null;
|
|||
|
|
$retval=null;
|
|||
|
|
$worker_script = dirname(__FILE__) . '/worker_thumbnails.php';
|
|||
|
|
$logFile = $_SERVER['DOCUMENT_ROOT'] . '/cron/logs/media-thumbnail.log';
|
|||
|
|
|
|||
|
|
foreach ($medias as $media) {
|
|||
|
|
// safe fallback escaping
|
|||
|
|
$file_path = addslashes($media['file_path']);
|
|||
|
|
$original_name = addslashes($media['original_name']);
|
|||
|
|
$file_size = (int)$media['file_size'];
|
|||
|
|
|
|||
|
|
$thumbnail_path = isset($media['thumbnail_path']) && $media['thumbnail_path']
|
|||
|
|
? "'" . addslashes($media['thumbnail_path']) . "'"
|
|||
|
|
: "NULL";
|
|||
|
|
|
|||
|
|
$sql = "
|
|||
|
|
INSERT INTO complex_house_media SET
|
|||
|
|
complex_house_id = {$house_id},
|
|||
|
|
file_path = '{$file_path}',
|
|||
|
|
original_name = '{$original_name}',
|
|||
|
|
file_size = {$file_size},
|
|||
|
|
thumbnail_path = {$thumbnail_path},
|
|||
|
|
created_at = NOW(),
|
|||
|
|
updated_at = NOW()
|
|||
|
|
";
|
|||
|
|
|
|||
|
|
$this->db->query($sql, true);
|
|||
|
|
|
|||
|
|
$media['id'] = $this->db->insert_id();
|
|||
|
|
$mediaId = $media['id'];
|
|||
|
|
|
|||
|
|
exec("php $worker_script $mediaId $logFile >> $logFile 2>&1 &", $thmbResult, $retval);
|
|||
|
|
|
|||
|
|
$result[] = [
|
|||
|
|
'id' => (int)$media['id'],
|
|||
|
|
'name' => $media['original_name'],
|
|||
|
|
'size' => (int)$media['file_size'],
|
|||
|
|
'url' => 'https://data.joywork.ru' . $media['file_path'],
|
|||
|
|
'thumbnail_url' => $media['thumbnail_path'] ? 'https://data.joywork.ru/' . $media['thumbnail_path'] : null,
|
|||
|
|
'rooms' => []
|
|||
|
|
];
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
return $result;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
public function deleteMediaFromHouse($house_id, $media_ids)
|
|||
|
|
{
|
|||
|
|
if (empty($media_ids)) {
|
|||
|
|
return ['status' => false, 'message' => 'No media IDs provided'];
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// ensure IDs are integers to prevent SQL injection
|
|||
|
|
$media_ids = array_map('intval', $media_ids);
|
|||
|
|
$ids_str = implode(',', $media_ids);
|
|||
|
|
|
|||
|
|
// fetch only needed columns for this house
|
|||
|
|
$sql = "SELECT file_path, thumbnail_path
|
|||
|
|
FROM complex_house_media
|
|||
|
|
WHERE complex_house_id = {$house_id}
|
|||
|
|
AND id IN ({$ids_str})";
|
|||
|
|
|
|||
|
|
$r = $this->db->query($sql);
|
|||
|
|
|
|||
|
|
$medias = [];
|
|||
|
|
while ($row = $this->db->fetch_assoc($r)) {
|
|||
|
|
$medias[] = $row;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if (empty($medias)) {
|
|||
|
|
return ['status' => false, 'message' => 'No media found'];
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
$baseUrl = 'https://data.joywork.ru';
|
|||
|
|
$filesToDelete = [];
|
|||
|
|
|
|||
|
|
foreach ($medias as $media) {
|
|||
|
|
if (!empty($media['file_path'])) {
|
|||
|
|
$filesToDelete[] = $baseUrl . $media['file_path'];
|
|||
|
|
}
|
|||
|
|
if (!empty($media['thumbnail_path'])) {
|
|||
|
|
$filesToDelete[] = $baseUrl . $media['thumbnail_path'];
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// delete files
|
|||
|
|
if (!empty($filesToDelete)) {
|
|||
|
|
$this->deleteFiles($filesToDelete);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// delete from DB
|
|||
|
|
$deleteSql = "DELETE FROM complex_house_media
|
|||
|
|
WHERE complex_house_id = {$house_id}
|
|||
|
|
AND id IN ({$ids_str})";
|
|||
|
|
|
|||
|
|
$this->db->query($deleteSql);
|
|||
|
|
|
|||
|
|
return ['status' => true, 'deleted_count' => count($medias)];
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
public function getHouseMedia($house_id)
|
|||
|
|
{
|
|||
|
|
$sql = "SELECT * FROM complex_house_media WHERE complex_house_id = {$house_id} ORDER BY created_at DESC";
|
|||
|
|
$q = $this->db->query($sql);
|
|||
|
|
$result = [];
|
|||
|
|
while ($media = $this->db->fetch_assoc($q)) {
|
|||
|
|
$result[] = [
|
|||
|
|
'id' => (int)$media['id'],
|
|||
|
|
'name' => $media['original_name'],
|
|||
|
|
'size' => (int)$media['file_size'],
|
|||
|
|
'url' => 'https://data.joywork.ru' . $media['file_path'],
|
|||
|
|
'thumbnail_url' => $media['thumbnail_path'] ? 'https://data.joywork.ru/' . $media['thumbnail_path'] : null,
|
|||
|
|
'rooms' => []
|
|||
|
|
];
|
|||
|
|
}
|
|||
|
|
return $result;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
public function addMediaSetToHouse($house_id, $mediaSetName, $photos = null)
|
|||
|
|
{
|
|||
|
|
$house_id = (int)$house_id;
|
|||
|
|
|
|||
|
|
$color = $this->generateUniqueColor($house_id);
|
|||
|
|
|
|||
|
|
// 1. Create set
|
|||
|
|
$sql = "
|
|||
|
|
INSERT INTO complex_house_media_set (complex_house_id, name, color, created_at)
|
|||
|
|
VALUES ({$house_id}, '{$mediaSetName}', '{$color}', NOW())
|
|||
|
|
";
|
|||
|
|
$this->db->query($sql);
|
|||
|
|
|
|||
|
|
$set_id = $this->db->insert_id();
|
|||
|
|
|
|||
|
|
return [
|
|||
|
|
'id' => $set_id,
|
|||
|
|
'name' => $mediaSetName,
|
|||
|
|
'color' => $color,
|
|||
|
|
'items' => [],
|
|||
|
|
'rooms' => []
|
|||
|
|
];
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
public function deleteMediaSetFromHouse($house_id, $set_id)
|
|||
|
|
{
|
|||
|
|
try {
|
|||
|
|
$house_id = (int)$house_id;
|
|||
|
|
$set_id = (int)$set_id;
|
|||
|
|
|
|||
|
|
$sql = "DELETE FROM complex_house_media_set
|
|||
|
|
WHERE id = $set_id AND complex_house_id = $house_id";
|
|||
|
|
$this->db->query($sql);
|
|||
|
|
|
|||
|
|
return ['status' => true];
|
|||
|
|
} catch (\Throwable $th) {
|
|||
|
|
return ['status' => false];
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
public function getMediaSetsForHouse($house_id)
|
|||
|
|
{
|
|||
|
|
$house_id = (int)$house_id;
|
|||
|
|
|
|||
|
|
// 1. Fetch all sets for the house
|
|||
|
|
$sql = "SELECT * FROM complex_house_media_set WHERE complex_house_id = {$house_id} ORDER BY created_at DESC";
|
|||
|
|
$q = $this->db->query($sql);
|
|||
|
|
|
|||
|
|
$sets = [];
|
|||
|
|
|
|||
|
|
while ($set = $this->db->fetch_assoc($q)) {
|
|||
|
|
$set_id = (int)$set['id'];
|
|||
|
|
|
|||
|
|
$rooms = $this->getMediaSetRooms($set_id);
|
|||
|
|
|
|||
|
|
// 2. Fetch items for this set, ordered by sort_order
|
|||
|
|
$itemsSql = "
|
|||
|
|
SELECT m.id, m.original_name AS name, m.file_size AS size, m.file_path AS url, m.thumbnail_path AS thumbnail_url, si.sort_order as sort_order
|
|||
|
|
FROM complex_house_media_set_item si
|
|||
|
|
JOIN complex_house_media m ON m.id = si.media_id
|
|||
|
|
WHERE si.set_id = {$set_id}
|
|||
|
|
ORDER BY si.sort_order ASC
|
|||
|
|
";
|
|||
|
|
$itemsQ = $this->db->query($itemsSql);
|
|||
|
|
$items = [];
|
|||
|
|
while ($item = $this->db->fetch_assoc($itemsQ)) {
|
|||
|
|
$items[] = [
|
|||
|
|
'id' => (int)$item['id'],
|
|||
|
|
'name' => $item['name'],
|
|||
|
|
'size' => (int)$item['size'],
|
|||
|
|
'url' => 'https://data.joywork.ru' . $item['url'],
|
|||
|
|
'thumbnail_url' => $item['thumbnail_url'] ? 'https://data.joywork.ru/' . $item['thumbnail_url'] : null,
|
|||
|
|
'sort_order' => (int)$item['sort_order']
|
|||
|
|
];
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// 3. Add set with items
|
|||
|
|
$sets[] = [
|
|||
|
|
'id' => $set_id,
|
|||
|
|
'name' => $set['name'],
|
|||
|
|
'color' => $set['color'],
|
|||
|
|
'items' => $items,
|
|||
|
|
'rooms' => $rooms
|
|||
|
|
];
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
return $sets;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
public function updateMediaSet($set_id, $items, $name = null)
|
|||
|
|
{
|
|||
|
|
$sql = "
|
|||
|
|
DELETE FROM complex_house_media_set_item
|
|||
|
|
WHERE set_id = {$set_id}
|
|||
|
|
";
|
|||
|
|
$this->db->query($sql);
|
|||
|
|
|
|||
|
|
// Prepare bulk insert
|
|||
|
|
$values = [];
|
|||
|
|
|
|||
|
|
foreach ($items as $item) {
|
|||
|
|
$media_id = (int)$item['media_id'];
|
|||
|
|
$sort_order = (int)$item['sort_order'];
|
|||
|
|
|
|||
|
|
$values[] = "({$set_id}, {$media_id}, {$sort_order})";
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if (!empty($values)) {
|
|||
|
|
$sql = "
|
|||
|
|
INSERT INTO complex_house_media_set_item (set_id, media_id, sort_order)
|
|||
|
|
VALUES " . implode(',', $values);
|
|||
|
|
|
|||
|
|
$this->db->query($sql);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if ($name) {
|
|||
|
|
$sql = "
|
|||
|
|
UPDATE complex_house_media_set
|
|||
|
|
SET name = '{$name}'
|
|||
|
|
WHERE id = {$set_id}
|
|||
|
|
";
|
|||
|
|
|
|||
|
|
$this->db->query($sql);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
return ['status' => true];
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
public function removeItemFromMediaSet($set_id, $media_id)
|
|||
|
|
{
|
|||
|
|
$set_id = (int)$set_id;
|
|||
|
|
$media_id = (int)$media_id;
|
|||
|
|
|
|||
|
|
// Get the sort_order of the item being deleted
|
|||
|
|
$sql = "
|
|||
|
|
SELECT sort_order
|
|||
|
|
FROM complex_house_media_set_item
|
|||
|
|
WHERE set_id = {$set_id} AND media_id = {$media_id}
|
|||
|
|
LIMIT 1
|
|||
|
|
";
|
|||
|
|
$result = $this->db->query($sql);
|
|||
|
|
$row = $this->db->fetch_assoc($result);
|
|||
|
|
if (!$row) {
|
|||
|
|
return ['status' => false, 'error' => 'Item not found'];
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
$deletedOrder = (int)$row['sort_order'];
|
|||
|
|
|
|||
|
|
try {
|
|||
|
|
// Delete the item
|
|||
|
|
$sql = "
|
|||
|
|
DELETE FROM complex_house_media_set_item
|
|||
|
|
WHERE set_id = {$set_id} AND media_id = {$media_id}
|
|||
|
|
";
|
|||
|
|
$this->db->query($sql);
|
|||
|
|
|
|||
|
|
// Shift remaining items up
|
|||
|
|
$sql = "
|
|||
|
|
UPDATE complex_house_media_set_item
|
|||
|
|
SET sort_order = sort_order - 1
|
|||
|
|
WHERE set_id = {$set_id} AND sort_order > {$deletedOrder}
|
|||
|
|
";
|
|||
|
|
$this->db->query($sql);
|
|||
|
|
|
|||
|
|
return ['status' => true];
|
|||
|
|
} catch (\Exception $e) {
|
|||
|
|
return ['status' => false, 'error' => $e->getMessage()];
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
public function addRoomsToMediaSet($set_id, $room_ids)
|
|||
|
|
{
|
|||
|
|
if (empty($set_id)) {
|
|||
|
|
return [];
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
$sqlDelete = "DELETE FROM complex_house_media_set_room WHERE set_id = $set_id";
|
|||
|
|
$q = $this->db->query($sqlDelete);
|
|||
|
|
|
|||
|
|
if (!empty($room_ids)) {
|
|||
|
|
|
|||
|
|
// Prepare IDs safely
|
|||
|
|
$room_ids = array_map('intval', $room_ids);
|
|||
|
|
$idsStr = implode(',', $room_ids);
|
|||
|
|
|
|||
|
|
// 1. Remove rooms from ANY set (including current one)
|
|||
|
|
$sqlDeleteRooms = "
|
|||
|
|
DELETE FROM complex_house_media_set_room
|
|||
|
|
WHERE complex_room_id IN ($idsStr)
|
|||
|
|
";
|
|||
|
|
$this->db->query($sqlDeleteRooms);
|
|||
|
|
|
|||
|
|
// 2. Insert into new set
|
|||
|
|
$insertValues = [];
|
|||
|
|
foreach ($room_ids as $room_id) {
|
|||
|
|
$insertValues[] = "($set_id, $room_id)";
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
$valuesStr = implode(', ', $insertValues);
|
|||
|
|
|
|||
|
|
$sqlInsert = "
|
|||
|
|
INSERT INTO complex_house_media_set_room (set_id, complex_room_id)
|
|||
|
|
VALUES $valuesStr
|
|||
|
|
";
|
|||
|
|
$this->db->query($sqlInsert);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
return $this->getMediaSetRooms($set_id);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
public function getMediaSetRooms($set_id)
|
|||
|
|
{
|
|||
|
|
$sql = "SELECT r.id, r.position, r.type, r.number FROM complex_house_media_set_room msr JOIN complex_rooms r ON msr.complex_room_id = r.id WHERE msr.set_id = $set_id";
|
|||
|
|
$q = $this->db->query($sql);
|
|||
|
|
$rooms = [];
|
|||
|
|
while ($room = $this->db->fetch_assoc($q)) {
|
|||
|
|
$rooms[] = [
|
|||
|
|
'id' => (int)$room['id'],
|
|||
|
|
'position' => (int)$room['position'],
|
|||
|
|
'type' => $room['type'],
|
|||
|
|
'number' => $room['number']
|
|||
|
|
];
|
|||
|
|
}
|
|||
|
|
return $rooms;
|
|||
|
|
}
|
|||
|
|
public function updateMediaItemSortOrder($set_id, $media_id, $oldIndex, $newIndex)
|
|||
|
|
{
|
|||
|
|
$set_id = (int)$set_id;
|
|||
|
|
$media_id = (int)$media_id;
|
|||
|
|
$oldIndex = (int)$oldIndex;
|
|||
|
|
$newIndex = (int)$newIndex;
|
|||
|
|
|
|||
|
|
if ($oldIndex === $newIndex) {
|
|||
|
|
return ['status' => true, 'message' => 'No change needed'];
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// If DB sort_order is 1-based, add 1
|
|||
|
|
$oldOrder = $oldIndex + 1;
|
|||
|
|
$newOrder = $newIndex + 1;
|
|||
|
|
|
|||
|
|
try {
|
|||
|
|
if ($newOrder < $oldOrder) {
|
|||
|
|
// Moving up: shift items down
|
|||
|
|
$sql = "
|
|||
|
|
UPDATE complex_house_media_set_item
|
|||
|
|
SET sort_order = sort_order + 1
|
|||
|
|
WHERE set_id = {$set_id}
|
|||
|
|
AND sort_order >= {$newOrder}
|
|||
|
|
AND sort_order < {$oldOrder}
|
|||
|
|
";
|
|||
|
|
} else {
|
|||
|
|
// Moving down: shift items up
|
|||
|
|
$sql = "
|
|||
|
|
UPDATE complex_house_media_set_item
|
|||
|
|
SET sort_order = sort_order - 1
|
|||
|
|
WHERE set_id = {$set_id}
|
|||
|
|
AND sort_order > {$oldOrder}
|
|||
|
|
AND sort_order <= {$newOrder}
|
|||
|
|
";
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
$this->db->query($sql);
|
|||
|
|
|
|||
|
|
// Update moved item
|
|||
|
|
$sql = "
|
|||
|
|
UPDATE complex_house_media_set_item
|
|||
|
|
SET sort_order = {$newOrder}
|
|||
|
|
WHERE set_id = {$set_id} AND media_id = {$media_id}
|
|||
|
|
";
|
|||
|
|
$this->db->query($sql);
|
|||
|
|
|
|||
|
|
return ['status' => true];
|
|||
|
|
} catch (\Exception $e) {
|
|||
|
|
return ['status' => false, 'error' => $e->getMessage()];
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
public function getMediaSetForRoom($roomId)
|
|||
|
|
{
|
|||
|
|
// 1. Получаем сам set
|
|||
|
|
$sql = "
|
|||
|
|
SELECT s.id, s.name, s.color
|
|||
|
|
FROM complex_house_media_set_room msr
|
|||
|
|
JOIN complex_house_media_set s ON s.id = msr.set_id
|
|||
|
|
WHERE msr.complex_room_id = " . (int)$roomId . "
|
|||
|
|
LIMIT 1
|
|||
|
|
";
|
|||
|
|
|
|||
|
|
$q = $this->db->query($sql);
|
|||
|
|
$set = $this->db->fetch_assoc($q);
|
|||
|
|
|
|||
|
|
if (!$set) {
|
|||
|
|
return null; // у комнаты нет набора
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
$set_id = (int)$set['id'];
|
|||
|
|
|
|||
|
|
// 2. Получаем items (медиа)
|
|||
|
|
$sql = "
|
|||
|
|
SELECT
|
|||
|
|
m.id,
|
|||
|
|
m.file_path,
|
|||
|
|
m.thumbnail_path,
|
|||
|
|
m.original_name,
|
|||
|
|
m.file_size,
|
|||
|
|
si.sort_order
|
|||
|
|
FROM complex_house_media_set_item si
|
|||
|
|
JOIN complex_house_media m ON m.id = si.media_id
|
|||
|
|
WHERE si.set_id = $set_id
|
|||
|
|
ORDER BY si.sort_order
|
|||
|
|
";
|
|||
|
|
|
|||
|
|
$q = $this->db->query($sql);
|
|||
|
|
|
|||
|
|
$items = [];
|
|||
|
|
while ($row = $this->db->fetch_assoc($q)) {
|
|||
|
|
$items[] = [
|
|||
|
|
'id' => (int)$row['id'],
|
|||
|
|
'url' => 'https://data.joywork.ru' . $row['file_path'],
|
|||
|
|
'thumbnail_url' => $row['thumbnail_path'] ? 'https://data.joywork.ru/' . $row['thumbnail_path'] : null,
|
|||
|
|
'original_name' => $row['original_name'],
|
|||
|
|
'file_size' => (int)$row['file_size'],
|
|||
|
|
'sort_order' => (int)$row['sort_order'],
|
|||
|
|
];
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// 4. Собираем итог
|
|||
|
|
return [
|
|||
|
|
'id' => $set_id,
|
|||
|
|
'name' => $set['name'],
|
|||
|
|
'color' => $set['color'],
|
|||
|
|
'items' => $items,
|
|||
|
|
];
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
public function getHouseMediaCompletionPercentage($house_id)
|
|||
|
|
{
|
|||
|
|
$sql = "
|
|||
|
|
SELECT
|
|||
|
|
COUNT(DISTINCT r.id) AS total_rooms,
|
|||
|
|
COUNT(DISTINCT msr.complex_room_id) AS used_rooms
|
|||
|
|
FROM complex_rooms r
|
|||
|
|
INNER JOIN complex_floors f
|
|||
|
|
ON r.floor_id = f.id
|
|||
|
|
INNER JOIN complex_entrances e
|
|||
|
|
ON f.complex_entrance_id = e.id
|
|||
|
|
LEFT JOIN complex_house_media_set_room msr
|
|||
|
|
ON msr.complex_room_id = r.id
|
|||
|
|
WHERE e.complex_house_id = {$house_id}
|
|||
|
|
";
|
|||
|
|
|
|||
|
|
$q = $this->db->query($sql);
|
|||
|
|
$r = $this->db->fetch_assoc($q);
|
|||
|
|
|
|||
|
|
return round(($r['used_rooms'] / $r['total_rooms']) * 100);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
public function get_media_entrances($house_id)
|
|||
|
|
{
|
|||
|
|
$this->set_user();
|
|||
|
|
$result = array();
|
|||
|
|
$sql = "SELECT complex_entrances.*, ch.name as house_name, ch.parking as house_parking, ch.security as house_security, ch.fenced_area as house_fenced_area, ch.sports_ground as house_sports_ground, ch.play_ground as house_play_ground, ch.school as house_school, ch.kinder_garten as house_kinder_garten, ch.id as house_id, cl.name as complex_name FROM complex_entrances
|
|||
|
|
JOIN complex_houses ch ON ch.id = complex_entrances.complex_house_id
|
|||
|
|
JOIN complex_list cl ON cl.id = ch.complex_id
|
|||
|
|
WHERE complex_entrances.complex_house_id={$house_id}";
|
|||
|
|
$q = $this->db->query($sql);
|
|||
|
|
|
|||
|
|
while ($entrance = $this->db->fetch_assoc($q)) {
|
|||
|
|
$floors = $this->get_media_entrance_floors($entrance);
|
|||
|
|
$entrance['floors'] = $floors;
|
|||
|
|
$result[] = $entrance;
|
|||
|
|
}
|
|||
|
|
return $result;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
public function get_media_entrance_floors($entrance)
|
|||
|
|
{
|
|||
|
|
$this->set_user();
|
|||
|
|
$entrance_id = $entrance['id'];
|
|||
|
|
$sql = "SELECT DISTINCT complex_floors.*, floor_plans.has_light_angle as has_light_angle, floor_plans.light_angle as light_angle FROM complex_floors
|
|||
|
|
LEFT JOIN complex_floors_plans floor_plan_link ON floor_plan_link.floor_id = complex_floors.id
|
|||
|
|
LEFT JOIN complex_house_floor_plans floor_plans ON floor_plans.id = floor_plan_link.floor_plan_id
|
|||
|
|
WHERE complex_entrance_id={$entrance_id}";
|
|||
|
|
$q = $this->db->query($sql);
|
|||
|
|
|
|||
|
|
$floors = [];
|
|||
|
|
|
|||
|
|
while ($floor = $this->db->fetch_assoc($q)) {
|
|||
|
|
$floor['rooms'] = [];
|
|||
|
|
|
|||
|
|
$floorId = (int)$floor['id'];
|
|||
|
|
$sql = "SELECT
|
|||
|
|
complex_rooms.id,
|
|||
|
|
position,
|
|||
|
|
type,
|
|||
|
|
number,
|
|||
|
|
layout_feature,
|
|||
|
|
rooms_count,
|
|||
|
|
cs.name as status_name,
|
|||
|
|
cs.status as status_type,
|
|||
|
|
cs.color as status_color
|
|||
|
|
FROM complex_rooms
|
|||
|
|
LEFT JOIN complex_status cs
|
|||
|
|
ON complex_rooms.complex_status_id = cs.id
|
|||
|
|
AND cs.is_archive = 0
|
|||
|
|
WHERE floor_id = $floorId";
|
|||
|
|
|
|||
|
|
$roomsResult = $this->db->query($sql);
|
|||
|
|
|
|||
|
|
while ($room = $this->db->fetch_assoc($roomsResult)) {
|
|||
|
|
|
|||
|
|
$room['complex_status_info'] = [
|
|||
|
|
'status_name' => $room['status_name'],
|
|||
|
|
'status_type' => $room['status_type'],
|
|||
|
|
'status_color' => $room['status_color']
|
|||
|
|
];
|
|||
|
|
|
|||
|
|
unset($room['status_name'], $room['status_type'], $room['status_color']);
|
|||
|
|
|
|||
|
|
$floor['rooms'][] = $room;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
$floors[] = $floor;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
return $floors;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
public function addFloorPlanToHouse($house_id, $photo)
|
|||
|
|
{
|
|||
|
|
$sql = "INSERT INTO complex_house_floor_plans SET house_id = {$house_id}";
|
|||
|
|
$r = $this->db->query($sql, true);
|
|||
|
|
|
|||
|
|
$plan_id = $this->db->insert_id();
|
|||
|
|
|
|||
|
|
$this->addPhotoToFloorPlan($photo, $plan_id);
|
|||
|
|
|
|||
|
|
$plan_sql = "SELECT * FROM complex_house_floor_plans WHERE id = {$plan_id}";
|
|||
|
|
$plan_r = $this->db->query($plan_sql, true);
|
|||
|
|
$plan = $this->db->fetch_assoc($plan_r);
|
|||
|
|
|
|||
|
|
return $plan;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
public function addPhotoToFloorPlan($photo, $floor_plan_id)
|
|||
|
|
{
|
|||
|
|
$newPhotos = $this->uploadPhotosToEntity([$photo], "floor_plans", $floor_plan_id);
|
|||
|
|
|
|||
|
|
$q = $this->db->query("DELETE FROM complex_floor_plan_figures WHERE floor_plan_id = {$floor_plan_id}"); // TODO
|
|||
|
|
|
|||
|
|
$result = '';
|
|||
|
|
if (count($newPhotos)) {
|
|||
|
|
$image = $newPhotos[0];
|
|||
|
|
$sql_in_image = "UPDATE complex_house_floor_plans SET `image` = '{$image['url']}', `name` = '{$image['name']}' WHERE `id` = {$floor_plan_id}";
|
|||
|
|
$r = $this->db->query($sql_in_image, true);
|
|||
|
|
$result = $image;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
return $result;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
public function addPhotosToRoomPlan($photos, $plan_id, $position)
|
|||
|
|
{
|
|||
|
|
$newPhotos = $this->uploadPhotosToEntity($photos, "plans", $plan_id);
|
|||
|
|
|
|||
|
|
$result = [];
|
|||
|
|
|
|||
|
|
foreach ($newPhotos as $image) {
|
|||
|
|
$sql_in_image = "INSERT INTO complex_house_plans_images SET plan_id = {$plan_id}, position = {$position}, url='{$image['url']}', name='{$image['name']}'";
|
|||
|
|
$r = $this->db->query($sql_in_image, true);
|
|||
|
|
$image_id = $this->db->insert_id();
|
|||
|
|
$r = $this->db->query("SELECT * FROM complex_house_plans_images where id={$image_id}");
|
|||
|
|
$plan_image = $this->db->fetch_assoc($r);
|
|||
|
|
$result[] = $plan_image;
|
|||
|
|
}
|
|||
|
|
return $result;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
*
|
|||
|
|
*/
|
|||
|
|
public function save_photo2($photos, $patch)
|
|||
|
|
{
|
|||
|
|
|
|||
|
|
$this->set_user();
|
|||
|
|
$Selectel = SelectelApi::getTokenAndUrl();
|
|||
|
|
|
|||
|
|
$token = $Selectel[0];
|
|||
|
|
$storageUrl = $Selectel[1];
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
foreach ($photos as $filePos) {
|
|||
|
|
if (!isset($filePos->file) && strpos($filePos, "https://") !== false) {
|
|||
|
|
$newPhotos[] = $filePos;
|
|||
|
|
} elseif (isset($filePos->file) && strpos($filePos->file, "https://") !== false) {
|
|||
|
|
$newPhotos[] = $filePos->file;
|
|||
|
|
} else {
|
|||
|
|
if (strpos($filePos->file, "0:/") !== false) {
|
|||
|
|
$originalName = str_replace("0:/", "", $filePos->file);
|
|||
|
|
$strArray = explode(".", $originalName);
|
|||
|
|
$ext = end($strArray);
|
|||
|
|
if ($ext == "pjpeg") {
|
|||
|
|
$ext = "jpeg";
|
|||
|
|
}
|
|||
|
|
$ext = mb_strtolower($ext);
|
|||
|
|
|
|||
|
|
$name = md5(time() . $originalName) . "." . $ext;
|
|||
|
|
|
|||
|
|
$one = mb_substr($name, 0, 1);
|
|||
|
|
|
|||
|
|
|
|||
|
|
$two = mb_substr($name, 1, 1);
|
|||
|
|
|
|||
|
|
$three = mb_substr($name, 3, 1);
|
|||
|
|
|
|||
|
|
$new_path = "$one/$two/$three/$name";
|
|||
|
|
|
|||
|
|
// $photo = "/photos/complexes/" . $new_path;
|
|||
|
|
|
|||
|
|
$oldPath = $_SERVER['DOCUMENT_ROOT'] . "/photos/complexes/complex_temp/" . $patch . "/" . $_SESSION['id'] . "/" . $originalName;
|
|||
|
|
//загрузка в Selectel
|
|||
|
|
$fp = $oldPath;
|
|||
|
|
|
|||
|
|
$SelectelApi = new SelectelApi();
|
|||
|
|
|
|||
|
|
$r = $SelectelApi->uploadFile($storageUrl, $token, $fp, '/complexes/' . $patch . '/' . $new_path, 'image/' . $ext);
|
|||
|
|
//если выложили в Selectel
|
|||
|
|
|
|||
|
|
if ($r) {
|
|||
|
|
//заменяем путь на новый
|
|||
|
|
$new_path = "https://data.joywork.ru/complexes/" . $patch . "/" . $new_path;
|
|||
|
|
//удаляем файл с локального сервера
|
|||
|
|
unlink($fp);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// echo $new_path."\n";
|
|||
|
|
$newPhotos[] = $new_path;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if (isset($err)) {
|
|||
|
|
$result['error'] = $err;
|
|||
|
|
}
|
|||
|
|
if (isset($newPhotos)) {
|
|||
|
|
$result = $newPhotos;
|
|||
|
|
} else {
|
|||
|
|
$result = '';
|
|||
|
|
}
|
|||
|
|
return $result;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* Сохранение комплекса
|
|||
|
|
* @return array $result
|
|||
|
|
*/
|
|||
|
|
public function save($linkBuilder, $phoneBuilder, $photo = null)
|
|||
|
|
{
|
|||
|
|
$this->set_user();
|
|||
|
|
|
|||
|
|
$photo_links = [];
|
|||
|
|
|
|||
|
|
if(!empty($photo) && !isset($photo['error'])){
|
|||
|
|
|
|||
|
|
$photo_links = $this->save_photo($photo);
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
$result = '';
|
|||
|
|
$complex_id = (int)$this->complex->id;
|
|||
|
|
$builder_id = (int)$this->complex->builder_id;
|
|||
|
|
if ($builder_id > 0) {
|
|||
|
|
$sql_info = "SELECT id FROM complex_builders WHERE builder_id = {$builder_id} or id = {$builder_id}";
|
|||
|
|
$q_info = $this->db->query($sql_info);
|
|||
|
|
if ($this->db->num_rows($q_info) > 0) {
|
|||
|
|
$this->db->fetch_assoc($q_info);
|
|||
|
|
$sql_up = "UPDATE complex_builders SET phone='{$phoneBuilder}', link='{$linkBuilder}' WHERE builder_id = {$builder_id} or id = {$builder_id}";
|
|||
|
|
} else {
|
|||
|
|
$sql_up = "INSERT INTO complex_builders SET phone='{$phoneBuilder}', link='{$linkBuilder}', builder_id = {$builder_id}";
|
|||
|
|
}
|
|||
|
|
// echo $sql_up."\n";
|
|||
|
|
$this->db->query($sql_up);
|
|||
|
|
}
|
|||
|
|
$arrayComplexList = array('name', 'type', 'country_id', 'rf_region_id', 'rayon_id', 'builder_id', 'payment_types', 'contract_type','house_type', 'cian_id', 'avito_id', 'yandex_id', 'domclick_id', 'domclick_builder_id', 'has_show_room', 'cadastral_number', 'domrf_id',
|
|||
|
|
'housing_class_id', 'number_apartments', 'first_floor', 'last_floor', 'ceiling_height', 'decoration_id', 'house_material', 'parking', 'closed_area', 'protected_area', 'concierge');
|
|||
|
|
$arrayComplexSet = array();
|
|||
|
|
$arrayComplexAddress = array('address', 'rayon', 'city', 'street', 'korpus', 'dom', 'litera', 'kladr_id', 'latitude', 'longitude');
|
|||
|
|
$arrayComplexAddressSet = array();
|
|||
|
|
//$arrayComplexInfrastructure = array('complex_id', 'school', 'kindergarten', 'playgrounds', 'sportsgrounds', 'cafes', 'shops', 'beautysalons', 'fitnessclub', 'park', 'trc', 'commercialobjects');
|
|||
|
|
$arrayComplexInfrastructureSet = array();
|
|||
|
|
$arrayComplexMetroSet = array();
|
|||
|
|
$arrayComplexDop = array();
|
|||
|
|
$arrayComplexUTP = array();
|
|||
|
|
$arrayComplexUTP2 = array();
|
|||
|
|
|
|||
|
|
foreach ($this->complex as $key => $complex_val) {
|
|||
|
|
if (in_array($key, $arrayComplexList)) {
|
|||
|
|
if (($key === 'rayon_id' || $key === "domclick_id" || $key === "domclick_builder_id" || $key === "cian_id" || $key === "avito_id" || $key === "yandex_id" || $key === "domrf_id") && empty($complex_val)) {
|
|||
|
|
$arrayComplexSet[] = $key . " = 0";
|
|||
|
|
} else if ($key == 'payment_types') {
|
|||
|
|
$arrayComplexSet[] = $key . " = '" . json_encode($complex_val) . "'";
|
|||
|
|
} else {
|
|||
|
|
$arrayComplexSet[] = $key . " = '" . $complex_val . "'";
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
if ($key == 'address') {
|
|||
|
|
foreach ($complex_val as $address_key => $address_value) {
|
|||
|
|
if (in_array($address_key, $arrayComplexAddress)) {
|
|||
|
|
$arrayComplexAddressSet[] = $address_key . " = '" . $address_value . "'";
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
if ($key == 'infrastructure') {
|
|||
|
|
foreach ($complex_val as $keyi => $infrastructure_val) {
|
|||
|
|
$arrayComplexInfrastructureSet[] = $keyi . " = " . $infrastructure_val;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
if ($key == 'metros') {
|
|||
|
|
if ($this->complex->id > 0) {
|
|||
|
|
$this->db->query("DELETE FROM complex_metro WHERE complex_id = {$this->complex->id}");
|
|||
|
|
|
|||
|
|
foreach ($complex_val as $metro) {
|
|||
|
|
|
|||
|
|
foreach ($metro as $keym => $metro_val) {
|
|||
|
|
if ($keym == 'id') {
|
|||
|
|
continue;
|
|||
|
|
}
|
|||
|
|
if ($keym != 'metro') {
|
|||
|
|
if (!is_numeric($metro_val)) {
|
|||
|
|
$metro_val = "'$metro_val'";
|
|||
|
|
}
|
|||
|
|
$arrayComplexMetroSet[] = $keym . " = $metro_val";
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
$arrayComplexMetroSet[] = 'complex_id = ' . $this->complex->id;
|
|||
|
|
$sql_in_metro = "INSERT INTO complex_metro SET " . implode(',', $arrayComplexMetroSet);
|
|||
|
|
$this->db->query($sql_in_metro, true);
|
|||
|
|
$arrayComplexMetroSet = [];
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
if ($key == 'dop') {
|
|||
|
|
foreach ($complex_val as $key_dop => $dop_val) {
|
|||
|
|
if ($key_dop != 'complex_id' && $key_dop != 'UTP' && $key_dop != 'UTP2' && $key_dop != 'workdays_op') {
|
|||
|
|
$arrayComplexDop[] = $key_dop . " = '" . $dop_val . "'";
|
|||
|
|
} else if ($key_dop == 'UTP') {
|
|||
|
|
$arrayComplexUTP = $dop_val;
|
|||
|
|
} else if ($key_dop == 'UTP2') {
|
|||
|
|
$arrayComplexUTP2 = $dop_val;
|
|||
|
|
} else if ($key_dop == 'workdays_op') {
|
|||
|
|
if (empty($dop_val) || $dop_val == 'null') {
|
|||
|
|
$arrayComplexDop[] = $key_dop . " = ''";
|
|||
|
|
} else {
|
|||
|
|
$arrayComplexDop[] = $key_dop . " = '" . json_encode($dop_val, JSON_UNESCAPED_UNICODE) . "'";
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
$arrayComplexSet[] = 'user_id = ' . $this->user->id;
|
|||
|
|
$arrayComplexSet[] = 'agency_id = ' . $this->user->agencyId;
|
|||
|
|
$sql_in = '';
|
|||
|
|
$set_query_complex = implode(',', $arrayComplexSet);
|
|||
|
|
if ($this->complex->id > 0) {
|
|||
|
|
$sql_in = "UPDATE " . $this->table . " SET " . $set_query_complex . " WHERE id = " . $this->complex->id;
|
|||
|
|
|
|||
|
|
} else {
|
|||
|
|
$sql_in = "INSERT INTO " . $this->table . " SET " . $set_query_complex;
|
|||
|
|
}
|
|||
|
|
if ($this->db->query($sql_in, true)) {
|
|||
|
|
$complex_id = $this->db->insert_id();
|
|||
|
|
if ($this->complex->id > 0) {
|
|||
|
|
$sql_in_infrastructure = "UPDATE complex_infrastructure SET " . implode(',', $arrayComplexInfrastructureSet) . " WHERE complex_id = " . $this->complex->id;
|
|||
|
|
$sql_in_address = "UPDATE complex_address SET " . implode(',', $arrayComplexAddressSet) . " WHERE complex_id = " . $this->complex->id;
|
|||
|
|
|
|||
|
|
// $sql_in_metro = "UPDATE complex_metro SET " . implode(',', $arrayComplexMetroSet) . " WHERE complex_id = " . $this->complex->id;
|
|||
|
|
|
|||
|
|
|
|||
|
|
if ($this->db->num_rows($this->db->query("SELECT id FROM complex_dop WHERE complex_id = {$this->complex->id}")) > 0) {
|
|||
|
|
$sql_in_dop = "UPDATE complex_dop SET " . implode(', ', $arrayComplexDop) . " WHERE complex_id = " . $this->complex->id;
|
|||
|
|
} else {
|
|||
|
|
$arrayComplexDop[] = 'complex_id = ' . $this->complex->id;
|
|||
|
|
$sql_in_dop = "INSERT INTO complex_dop SET " . implode(', ', $arrayComplexDop);
|
|||
|
|
}
|
|||
|
|
} else {
|
|||
|
|
$arrayComplexInfrastructureSet[] = 'complex_id = ' . $complex_id;
|
|||
|
|
$arrayComplexAddressSet[] = 'complex_id = ' . $complex_id;
|
|||
|
|
$arrayComplexMetroSet = [];
|
|||
|
|
if (isset($this->complex->metros)) {
|
|||
|
|
foreach ($this->complex->metros as $metro) {
|
|||
|
|
foreach ($metro as $keym => $metro_val) {
|
|||
|
|
if ($keym != 'metro') {
|
|||
|
|
if (!is_numeric($metro_val)) {
|
|||
|
|
$metro_val = "'$metro_val'";
|
|||
|
|
}
|
|||
|
|
$arrayComplexMetroSet[] = $keym . " = $metro_val";
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
$arrayComplexMetroSet[] = 'complex_id = ' . $complex_id;
|
|||
|
|
$sql_in_metro = "INSERT INTO complex_metro SET " . implode(',', $arrayComplexMetroSet);
|
|||
|
|
$this->db->query($sql_in_metro, true);
|
|||
|
|
$arrayComplexMetroSet = [];
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
// $arrayComplexMetroSet[] = 'complex_id = ' . $complex_id;
|
|||
|
|
$arrayComplexDop[] = 'complex_id = ' . $complex_id;
|
|||
|
|
$sql_in_infrastructure = "INSERT INTO complex_infrastructure SET " . implode(',', $arrayComplexInfrastructureSet);
|
|||
|
|
$sql_in_address = "INSERT INTO complex_address SET " . implode(',', $arrayComplexAddressSet);
|
|||
|
|
// var_dump($sql_in_address);die;
|
|||
|
|
// if(!empty($arrayComplexDop)){
|
|||
|
|
$sql_in_dop = "INSERT INTO complex_dop SET " . implode(',', $arrayComplexDop);
|
|||
|
|
// }
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//echo $sql_in_dop."\n";
|
|||
|
|
|
|||
|
|
$this->db->query($sql_in_address, true);
|
|||
|
|
$this->db->query($sql_in_infrastructure, true);
|
|||
|
|
|
|||
|
|
$this->db->query($sql_in_dop, true);
|
|||
|
|
|
|||
|
|
if ($complex_id == 0 && $this->complex->id > 0) {
|
|||
|
|
$complex_id = $this->complex->id;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if (count($photo_links)) {
|
|||
|
|
$this->db->query("DELETE FROM complex_images WHERE complex_id = {$complex_id}", true);
|
|||
|
|
foreach ($photo_links as $image) {
|
|||
|
|
$sql_in_image = "INSERT INTO complex_images SET complex_id = {$complex_id}, image = '" . $image . "'";
|
|||
|
|
$this->db->query($sql_in_image, true);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if (property_exists($this->complex, 'lines')) {
|
|||
|
|
foreach ($this->complex->lines as $lines) {
|
|||
|
|
foreach ($lines->corpuses as $deadline) {
|
|||
|
|
$period = (int)strtotime($deadline->deadline);
|
|||
|
|
// var_dump($deadline);
|
|||
|
|
$deadline_base = date('Y-m-d', $period);
|
|||
|
|
if ($deadline->del == 0 and $deadline->id == 0) {
|
|||
|
|
$sql_in_deadline = "INSERT INTO complex_corpuses SET
|
|||
|
|
complex_id = {$complex_id},
|
|||
|
|
corpus = '{$deadline->corpus}',
|
|||
|
|
line='{$lines->name}',
|
|||
|
|
deadline='{$deadline_base}',
|
|||
|
|
period='{$period}',
|
|||
|
|
corpus_id = '{$deadline->corpus_id}',
|
|||
|
|
corpus_floors = {$deadline->corpus_floors},
|
|||
|
|
corpus_floors_ready = {$deadline->corpus_floors_ready},
|
|||
|
|
corpus_fz_214 = {$deadline->corpus_fz_214},
|
|||
|
|
corpus_status = '{$deadline->corpus_status}'
|
|||
|
|
";
|
|||
|
|
$this->db->query($sql_in_deadline, true);
|
|||
|
|
} else if ($deadline->del == 0 and $deadline->id > 0) {
|
|||
|
|
$sql_in_deadline = "UPDATE complex_corpuses SET
|
|||
|
|
complex_id = {$complex_id},
|
|||
|
|
corpus = '{$deadline->corpus}',
|
|||
|
|
line='{$lines->name}',
|
|||
|
|
deadline='{$deadline_base}',
|
|||
|
|
period='{$period}',
|
|||
|
|
corpus_id = '{$deadline->corpus_id}',
|
|||
|
|
corpus_floors = {$deadline->corpus_floors},
|
|||
|
|
corpus_floors_ready = {$deadline->corpus_floors_ready},
|
|||
|
|
corpus_fz_214 = {$deadline->corpus_fz_214},
|
|||
|
|
corpus_status = '{$deadline->corpus_status}'
|
|||
|
|
WHERE id = {$deadline->id}
|
|||
|
|
";
|
|||
|
|
$this->db->query($sql_in_deadline, true);
|
|||
|
|
} else if ($deadline->del > 0 && $deadline->id > 0) {
|
|||
|
|
$sql_del_deadline = "DELETE FROM complex_corpuses WHERE id = {$deadline->id}";
|
|||
|
|
$this->db->query($sql_del_deadline);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
$this->saveUTP($arrayComplexUTP, $complex_id);
|
|||
|
|
$this->saveUTP($arrayComplexUTP2, $complex_id, 'secondary');
|
|||
|
|
// $this->saveActions($this->complex->actions, $complex_id);
|
|||
|
|
|
|||
|
|
|
|||
|
|
$result = array('result' => 'done', 'complex_id' => $complex_id, 'sql' => $sql_in_dop);
|
|||
|
|
} else {
|
|||
|
|
$result = 'error';
|
|||
|
|
}
|
|||
|
|
//echo $sql_in;
|
|||
|
|
return $result;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
*
|
|||
|
|
*/
|
|||
|
|
public function saveUTP($arrayUTP, $complex_id, $type = 'main')
|
|||
|
|
{
|
|||
|
|
$this->db->query("DELETE FROM complex_UTP WHERE complex_id = {$complex_id} and type='{$type}'");
|
|||
|
|
foreach ($arrayUTP as $utp) {
|
|||
|
|
$set = '';
|
|||
|
|
$set = "title = '{$utp->title}', desck = '{$utp->desc}'";
|
|||
|
|
// if(!empty($utp->images)){
|
|||
|
|
//var_dump($utp->images);
|
|||
|
|
if ($type == 'main') {
|
|||
|
|
$images = $this->save_photo2($utp->images, 'UTP');
|
|||
|
|
} else if ($type == 'secondary') {
|
|||
|
|
$images = $this->save_photo2($utp->images, 'UTP2');
|
|||
|
|
}
|
|||
|
|
//if(!empty($images)){
|
|||
|
|
$photos = json_encode($images);
|
|||
|
|
//var_dump($photos);
|
|||
|
|
if ($photos == 'null') $photos = '';
|
|||
|
|
$set .= ", photos = '{$photos}'";
|
|||
|
|
$set .= ", type = '{$type}'";
|
|||
|
|
//}
|
|||
|
|
//}
|
|||
|
|
|
|||
|
|
|
|||
|
|
$set .= ", complex_id = {$complex_id}";
|
|||
|
|
$sql_insert = "INSERT INTO complex_UTP SET {$set}";
|
|||
|
|
//echo $sql_insert."\n";
|
|||
|
|
$this->db->query($sql_insert);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// public function saveActions($actions, $complex_id)
|
|||
|
|
// {
|
|||
|
|
// $this->db->query("DELETE FROM complex_actions WHERE complex_id = {$complex_id}");
|
|||
|
|
// foreach ($actions as $action) {
|
|||
|
|
// //var_dump($action);
|
|||
|
|
// $set = '';
|
|||
|
|
// if (empty($action->name)) $action->name = 'Название не указано';
|
|||
|
|
// $set .= "name = '{$action->name}', `desc` = '{$action->desc}', link = '{$action->link}'";
|
|||
|
|
// $images = $this->save_photo2($action->images, 'Action');
|
|||
|
|
|
|||
|
|
// $photos = json_encode($images);
|
|||
|
|
|
|||
|
|
// if ($photos == 'null') $photos = '';
|
|||
|
|
// $set .= ", images = '{$photos}'";
|
|||
|
|
|
|||
|
|
// $set .= ", complex_id = {$complex_id}";
|
|||
|
|
// $sql_insert = "INSERT INTO complex_actions SET {$set}";
|
|||
|
|
// //echo $sql_insert;
|
|||
|
|
// $this->db->query($sql_insert);
|
|||
|
|
// }
|
|||
|
|
// }
|
|||
|
|
|
|||
|
|
public function saveComplexAction($name, $desc, $image, $link, $id, $complex_id)
|
|||
|
|
{
|
|||
|
|
if (empty($complex_id)) {
|
|||
|
|
return ['status' => false, 'message' => 'complex_id required'];
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if (empty($name)) $name = 'Название не указано';
|
|||
|
|
$set = [];
|
|||
|
|
|
|||
|
|
if (!empty($name)) {
|
|||
|
|
$set[] = "`name` = '$name'";
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if (!empty($desc)) {
|
|||
|
|
$set[] = "`desc` = '$desc'";
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if (!empty($link)) {
|
|||
|
|
$set[] = "`link` = '$link'";
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
$image = $this->uploadPhotosToEntity([$image], 'ComplexAction', $complex_id);
|
|||
|
|
|
|||
|
|
$photo = isset($image[0]) ? $image[0] : '';
|
|||
|
|
|
|||
|
|
$set[] = "`image` = '{$photo['url']}'";
|
|||
|
|
|
|||
|
|
$set[] = "`complex_id` = {$complex_id}";
|
|||
|
|
|
|||
|
|
if ($id) {
|
|||
|
|
$sql_insert = "UPDATE complex_actions SET " . implode(', ', $set) . " WHERE id = $id";
|
|||
|
|
} else {
|
|||
|
|
$sql_insert = "INSERT INTO complex_actions SET " . implode(', ', $set) . "";
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
//echo $sql_insert;
|
|||
|
|
$this->db->query($sql_insert, true);
|
|||
|
|
if (!$id) {
|
|||
|
|
$id = (int)$this->db->insert_id();
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
return [
|
|||
|
|
'status' => true,
|
|||
|
|
'action' => [
|
|||
|
|
'id' => $id,
|
|||
|
|
'name' => $name,
|
|||
|
|
'desc' => $desc,
|
|||
|
|
'link' => $link,
|
|||
|
|
'complex_id' => $complex_id,
|
|||
|
|
'image' => $photo['url']
|
|||
|
|
]
|
|||
|
|
];
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
public function deletecComplesAction($id)
|
|||
|
|
{
|
|||
|
|
if ($id) {
|
|||
|
|
$selectSql = $this->db->query("SELECT image FROM complex_actions WHERE id = $id");
|
|||
|
|
$foundUtp = $this->db->fetch_assoc($selectSql);
|
|||
|
|
if ($foundUtp) {
|
|||
|
|
$this->deleteFiles([$foundUtp['image']]);
|
|||
|
|
}
|
|||
|
|
$this->db->query("DELETE FROM complex_actions WHERE id = $id");
|
|||
|
|
return ['status' => true];
|
|||
|
|
} else {
|
|||
|
|
return ['status' => false, 'message' => 'field id required'];
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* Добавление дома
|
|||
|
|
*/
|
|||
|
|
public function add_edit_house($house)
|
|||
|
|
{
|
|||
|
|
$this->set_user();
|
|||
|
|
$house = json_decode(json_encode($house), true);
|
|||
|
|
// var_dump($house);
|
|||
|
|
$arrColumnHouse = [
|
|||
|
|
'id',
|
|||
|
|
'complex_id',
|
|||
|
|
'name',
|
|||
|
|
'address',
|
|||
|
|
'type_building',
|
|||
|
|
'placement_type',
|
|||
|
|
'decoration_id',
|
|||
|
|
'house_type',
|
|||
|
|
'status_corpus',
|
|||
|
|
'deadline_quarter',
|
|||
|
|
'deadline_year',
|
|||
|
|
'development_start_quarter',
|
|||
|
|
'development_start_year',
|
|||
|
|
'development_end_quarter',
|
|||
|
|
'development_end_year',
|
|||
|
|
'sales_start_month',
|
|||
|
|
'sales_start_year',
|
|||
|
|
'sales_end_month',
|
|||
|
|
'sales_end_year',
|
|||
|
|
'is_archive',
|
|||
|
|
'agency_id',
|
|||
|
|
'user_id',
|
|||
|
|
'security',
|
|||
|
|
'parking',
|
|||
|
|
'fenced_area',
|
|||
|
|
'sports_ground',
|
|||
|
|
'play_ground',
|
|||
|
|
'school',
|
|||
|
|
'kinder_garten',
|
|||
|
|
'cian_id',
|
|||
|
|
'avito_id',
|
|||
|
|
'yandex_id',
|
|||
|
|
'domclick_id',
|
|||
|
|
'domclick_builder_id',
|
|||
|
|
'is_partner_show',
|
|||
|
|
'domrf_id',
|
|||
|
|
];
|
|||
|
|
|
|||
|
|
$arrUTPColumns = [
|
|||
|
|
'id',
|
|||
|
|
'house_id',
|
|||
|
|
'title',
|
|||
|
|
'desck',
|
|||
|
|
'type',
|
|||
|
|
'photo'
|
|||
|
|
];
|
|||
|
|
|
|||
|
|
$arrUKeys = array();
|
|||
|
|
$arrUVals = array();
|
|||
|
|
|
|||
|
|
$arrKeys = array();
|
|||
|
|
$arrVals = array();
|
|||
|
|
foreach ($arrColumnHouse as $column) {
|
|||
|
|
|
|||
|
|
if ($column == 'deadline_quarter' || $column == 'development_end_quarter' || $column == 'development_start_quarter') {
|
|||
|
|
|
|||
|
|
|
|||
|
|
$temp_column = str_replace('_quarter', '', $column);
|
|||
|
|
|
|||
|
|
if (isset($house[$temp_column]['quarter']) && ($house[$temp_column]['quarter'] != null || $house[$temp_column]['quarter'] != 0)) {
|
|||
|
|
|
|||
|
|
$arrKeys[] = $column;
|
|||
|
|
$arrVals[] = "'" . $house[$temp_column]['quarter'] . "'";
|
|||
|
|
}
|
|||
|
|
} else if ($column == 'deadline_year' || $column == 'development_start_year' || $column == 'development_end_year' || $column == 'sales_start_year' || $column == 'sales_end_year') {
|
|||
|
|
$temp_column = str_replace('_year', '', $column);
|
|||
|
|
if (isset($house[$temp_column]['year']) && ($house[$temp_column]['year'] != null || $house[$temp_column]['year'] != 0)) {
|
|||
|
|
|
|||
|
|
$arrKeys[] = $column;
|
|||
|
|
$arrVals[] = "'" . $house[$temp_column]['year'] . "'";
|
|||
|
|
}
|
|||
|
|
} else if ($column == 'sales_start_month' || $column == 'sales_end_month') {
|
|||
|
|
$temp_column = str_replace('_month', '', $column);
|
|||
|
|
// var_dump($temp_column);
|
|||
|
|
// var_dump($house[$temp_column]);
|
|||
|
|
if (isset($house[$temp_column]['month']) && ($house[$temp_column]['month'] != null || $house[$temp_column]['month'] != 0)) {
|
|||
|
|
|
|||
|
|
$arrKeys[] = $column;
|
|||
|
|
$arrVals[] = "'" . $house[$temp_column]['month'] . "'";
|
|||
|
|
}
|
|||
|
|
} else if ($column == 'agency_id') {
|
|||
|
|
$arrKeys[] = $column;
|
|||
|
|
$arrVals[] = $this->user->agencyId;
|
|||
|
|
} else if ($column == 'user_id') {
|
|||
|
|
$arrKeys[] = $column;
|
|||
|
|
$arrVals[] = $this->user->id;
|
|||
|
|
} else {
|
|||
|
|
if (isset($house[$column]) && ($house[$column] !== null || $house[$column] !== 0)) {
|
|||
|
|
$arrKeys[] = $column;
|
|||
|
|
|
|||
|
|
if ($column == 'is_archive') {
|
|||
|
|
$arrVals[] = (int)$house[$column];
|
|||
|
|
} else if ($column == 'is_partner_show') {
|
|||
|
|
$arrVals[] = (int) $house[$column];
|
|||
|
|
} else if ($column == 'security') {
|
|||
|
|
$arrVals[] = (int) $house[$column];
|
|||
|
|
} else if ($column == 'sports_ground') {
|
|||
|
|
$arrVals[] = (int) $house[$column];
|
|||
|
|
} else if ($column == 'play_ground') {
|
|||
|
|
$arrVals[] = (int) $house[$column];
|
|||
|
|
} else if ($column == 'school') {
|
|||
|
|
$arrVals[] = (int) $house[$column];
|
|||
|
|
} else if ($column == 'kinder_garten') {
|
|||
|
|
$arrVals[] = (int) $house[$column];
|
|||
|
|
} else if ($column == 'fenced_area') {
|
|||
|
|
$arrVals[] = (int) $house[$column];
|
|||
|
|
} else {
|
|||
|
|
$arrVals[] = "'" . $house[$column] . "'";
|
|||
|
|
}
|
|||
|
|
} else if (isset($house[$column]) && filter_var($house[$column], FILTER_VALIDATE_BOOLEAN)) {
|
|||
|
|
$arrVals[] = $house[$column] == 'true' ? 1 : 0;
|
|||
|
|
} else if (isset($house[$column]) && is_string($house[$column])) {
|
|||
|
|
$arrVals[] = "'$house[$column]'";
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if ($house['id'] > 0) {
|
|||
|
|
$sql = "UPDATE `complex_houses` SET ";
|
|||
|
|
$updatePairs = array();
|
|||
|
|
foreach ($arrKeys as $index => $key) {
|
|||
|
|
$updatePairs[] = "`$key` = " . $arrVals[$index];
|
|||
|
|
}
|
|||
|
|
$sql .= implode(',', $updatePairs);
|
|||
|
|
$sql .= " WHERE id = {$house['id']}";
|
|||
|
|
if ($this->db->query($sql)) {
|
|||
|
|
// Сохраняем связи с программами рассрочек
|
|||
|
|
if (is_array($house['installments'])) {
|
|||
|
|
$house_id = (int)$house['id'];
|
|||
|
|
(new Installments())->updateHouseInstallments($house_id, $house['installments']);
|
|||
|
|
}
|
|||
|
|
$result = array('id' => $house['id']);
|
|||
|
|
} else {
|
|||
|
|
$result = array('error' => $this->db->error());
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
return $result;
|
|||
|
|
} else {
|
|||
|
|
|
|||
|
|
$sql = "INSERT INTO `complex_houses` (" . implode(',', $arrKeys) . ") VALUES (" . implode(',', $arrVals) . ")";
|
|||
|
|
// echo $sql;
|
|||
|
|
if ($this->db->query($sql)) {
|
|||
|
|
$id = $this->db->insert_id();
|
|||
|
|
|
|||
|
|
// Сохраняем связи с программами рассрочек
|
|||
|
|
if (is_array($house['installments'])) {
|
|||
|
|
$house_id = $house['id'] > 0 ? (int)$house['id'] : $id;
|
|||
|
|
|
|||
|
|
(new Installments())->updateHouseInstallments($house_id, $house['installments']);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
$result = array('id' => $id);
|
|||
|
|
} else {
|
|||
|
|
$result = array('error' => $this->db->error());
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
return $result;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* Очериди комплекса
|
|||
|
|
* @param int complex_id
|
|||
|
|
*/
|
|||
|
|
public function get_corpuses($complex_id)
|
|||
|
|
{
|
|||
|
|
$result = array();
|
|||
|
|
$sql = "SELECT * FROM complex_corpuses WHERE complex_id = {$complex_id}";
|
|||
|
|
$q = $this->db->query($sql);
|
|||
|
|
while ($corpus = $this->db->fetch_assoc($q)) {
|
|||
|
|
$corpus['deadline'] = Date::getFormatedEndingPeriod($corpus['deadline']);
|
|||
|
|
$result[] = $corpus;
|
|||
|
|
}
|
|||
|
|
return $result;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
*
|
|||
|
|
*/
|
|||
|
|
private function showAds($obj)
|
|||
|
|
{
|
|||
|
|
$showAds = true;
|
|||
|
|
if ((in_array($_SESSION['agency_id'], array(8353, 8375, 8376, 8399, 8867, 8910, 9082, 9072, 9077, 9110, 9588, 9805, 9973, 7864, 10203, 10041, 10493, 4873, 10876, 10982, 11086, 10933, 11456, 11501, 11397, 7507, 8826))) && !in_array($_SESSION['id'], array(8373, 8353, 8375, 8376, 8399, 8867, 8910, 9082, 9072, 9077, 9110, 9588, 9805, 9973, 7864, 10203, 10041, 10493, 4873, 10876, 10982, 11086, 10933, 11456, 11501, 11397, 7507, 8826))) {
|
|||
|
|
$showAds = false;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if ($showAds && $obj['archive'])
|
|||
|
|
$showAds = false;
|
|||
|
|
|
|||
|
|
/* if ($post['selected'] == "potential" || $post['selected'] == "favor")
|
|||
|
|
$showAds = false;*/
|
|||
|
|
|
|||
|
|
if ($_SESSION['agency_id'] == 8435 && (!in_array($_SESSION['id'], array(8435, 8532, 8541, 8555))))
|
|||
|
|
$showAds = false;
|
|||
|
|
|
|||
|
|
if ($_SESSION['agency_id'] == 8649 && (!in_array($_SESSION['id'], array(8649, 8653)))) {
|
|||
|
|
$showAds = false;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if ($_SESSION['agency_id'] == 8867 && (!in_array($_SESSION['id'], array(8867, 8910, 9082, 9072, 9077)))) {
|
|||
|
|
$showAds = false;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if ($_SESSION['id'] == 9170) {
|
|||
|
|
$showAds = true;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if ($_SESSION['id'] == 9588 || $_SESSION['id'] == 9904) {
|
|||
|
|
$showAds = true;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if ($_SESSION['id'] == 9110 || $_SESSION['id'] == 9892) {
|
|||
|
|
$showAds = true;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if ($_SESSION['id'] == 9805 || $_SESSION['id'] == 9927) {
|
|||
|
|
$showAds = true;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if ($_SESSION['id'] == 9973) {
|
|||
|
|
$showAds = true;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if ($_SESSION['id'] == 10203) {
|
|||
|
|
$showAds = true;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if ($_SESSION['id'] == 10041) {
|
|||
|
|
$showAds = true;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if ($_SESSION['id'] == 7864 || $_SESSION['id'] == 8118 || $_SESSION['id'] == 7866 || $_SESSION['id'] == 8432 || $_SESSION['id'] == 9152 || $_SESSION['id'] == 9426) {
|
|||
|
|
$showAds = true;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if ($_SESSION['id'] == 10493 || $_SESSION['id'] == 10606) {
|
|||
|
|
$showAds = true;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if ($_SESSION['id'] == 4873) {
|
|||
|
|
$showAds = true;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if ($_SESSION['id'] == 10876) {
|
|||
|
|
$showAds = true;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if ($_SESSION['id'] == 10982 || $_SESSION['id'] == 10992 || $_SESSION['id'] == 11299) {
|
|||
|
|
$showAds = true;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if ($_SESSION['id'] == 11086) {
|
|||
|
|
$showAds = true;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if ($_SESSION['id'] == 10933 || $_SESSION['id'] == 11547 || $_SESSION['id'] == 11538) {
|
|||
|
|
$showAds = true;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if ($_SESSION['id'] == 11456 || $_SESSION['id'] == 11552) {
|
|||
|
|
$showAds = true;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if ($_SESSION['id'] == 11501 || $_SESSION['id'] == 11549) {
|
|||
|
|
$showAds = true;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if ($_SESSION['id'] == 11397 || $_SESSION['id'] == 11583) {
|
|||
|
|
$showAds = true;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if (in_array((int)$_SESSION['id'], [11378, 11688, 11690, 11691, 11694, 11696, 11698, 11700, 11702, 11864, 11865, 11868, 11873, 8829, 11799, 11801, 11803, 11806, 11808, 11810, 11812, 11814, 11816, 11818, 11819, 11821, 11822, 11824, 11825, 11827, 11830, 11831, 11833, 11835, 11850, 11837, 11839, 11840, 11841, 11843, 11845, 11847, 11849, 11851, 11854, 11856, 11859, 11861, 11683, 11877, 11879, 11880, 11882, 11705, 11709, 11711, 11713, 11715, 11720, 11722, 11723, 11725, 11726, 11728, 11731, 11733, 11735, 11737, 11739, 11741, 11743, 11745, 11747, 11749, 11753, 11763, 11765, 11769, 11770, 11771, 11772, 11773, 11774, 11775, 11776, 11777, 11779, 11781, 11784, 11786, 11788, 11791, 11793, 11795, 11796, 11797, 11798, 11800, 11802, 11804, 11807, 11809, 11811, 11813, 11815, 11817, 11820, 11823, 11826, 11828, 11829, 11832, 11834, 11836, 11838, 11842, 11844, 11846, 11848, 11852, 11853, 11855, 11857, 11858, 11860, 11862, 11863, 11866, 11869, 11871, 11872, 11875, 11876, 11878, 11881, 11703, 11704, 11706, 11708, 11710, 11712, 11714, 11716, 11717, 11718, 11719, 11721, 11724, 11727, 11729, 11730, 11732, 11734, 11736, 11738, 11740, 11742, 11744, 11746, 11748, 11750, 11751, 11752, 11754, 11755, 11756, 11757, 11758, 11759, 11760, 11761, 11762, 11764, 11766, 11767, 11768, 11778, 11780, 11782, 11783, 11785, 11787, 11789, 11790, 11792, 11794, 11883, 11884, 11885, 11886, 11887, 11888, 11889, 11890, 11891, 11892, 11893, 11894, 11895, 11679, 11680, 11681, 11682, 11684, 11685, 11686, 11687, 11689, 11692, 11693, 11695, 11697, 11699, 11701, 11896, 11897, 11898, 11899, 11900, 11901, 11902, 11903, 11904, 11905, 11906])) {
|
|||
|
|
$showAds = false;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if (in_array((int)$_SESSION['id'], [8826, 8827, 11867, 11870, 11874])) {
|
|||
|
|
$showAds = true;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if (in_array((int)$_SESSION['id'], [7507, 7719, 7513, 8787, 9878, 10483, 10815, 7514, 7516, 7517, 7518, 7519, 7614, 7762, 8364, 10484, 9047, 9928, 10386, 10522, 10530, 10531, 7548, 7931, 8893, 9048, 9809, 11039, 11805, 10589, 11329, 11516, 9770, 10338, 7905, 8569, 11641, 11707, 7520, 7540, 7541, 7826, 8729, 8737, 9861, 10156, 11034, 7508, 7509, 7510, 7512, 7515, 7543, 7553, 10499])) // АН ООО МИДОМ
|
|||
|
|
$showAds = false;
|
|||
|
|
|
|||
|
|
if (in_array((int)$_SESSION['id'], [7507, 7509, 7543, 7905, 8364, 11707]))
|
|||
|
|
$showAds = true;
|
|||
|
|
|
|||
|
|
return $showAds;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
private function object_details($obj)
|
|||
|
|
{
|
|||
|
|
global $SROK_ARENDY;
|
|||
|
|
global $etaz_first_types;
|
|||
|
|
// var_dump($hasAutoSearchLayout);
|
|||
|
|
|
|||
|
|
$obj['price'] = number_format($obj['stoim'], 0, ',', ' ');
|
|||
|
|
$sql_nb_info = "SELECT id, nb_end_date, zipal_new_flat_decoration_type_id FROM object_nb_info WHERE object_id = {$obj['id']}";
|
|||
|
|
$info_obj = $this->db->fetch_assoc($this->db->query($sql_nb_info));
|
|||
|
|
$obj['nb_end_date'] = Date::getFormatedEndingPeriod($info_obj['nb_end_date']);
|
|||
|
|
$obj['decaration'] = "";
|
|||
|
|
if (isset($this->listDecorations['list'][$info_obj['zipal_new_flat_decoration_type_id']])) {
|
|||
|
|
$obj['decaration'] = $this->listDecorations['list'][$info_obj['zipal_new_flat_decoration_type_id']];
|
|||
|
|
}
|
|||
|
|
$obj['plan'] = '';
|
|||
|
|
$sqlP = "SELECT * FROM objects_plan WHERE object_id = {$obj['id']}";
|
|||
|
|
$rez_plan = $this->db->query($sqlP);
|
|||
|
|
if ($this->db->num_rows($rez_plan) > 0) {
|
|||
|
|
$obj_plan = $this->db->fetch_assoc($rez_plan);
|
|||
|
|
if ($obj_plan['img_plan'] != '') {
|
|||
|
|
if (stripos($obj_plan['img_plan'], "http://") === false && stripos($obj_plan['img_plan'], "https://") === false) {
|
|||
|
|
$obj_plan['img_plan'] = "/photos/" . $obj_plan['img_plan'];
|
|||
|
|
}
|
|||
|
|
$obj['plan'] = $obj_plan['img_plan'];
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
$obj['photos'] = array();
|
|||
|
|
$sqlPhotoInfo = "SELECT oop.sort_order, p.photo FROM objects_object_photo oop, object_photo p WHERE p.id = oop.object_photo_id AND oop.object_id = {$obj['id']} ORDER BY oop.sort_order";
|
|||
|
|
$rezPhotoInfo = $this->db->query($sqlPhotoInfo);
|
|||
|
|
|
|||
|
|
if ($this->db->num_rows($rezPhotoInfo) > 0) {
|
|||
|
|
while ($photoInfo = $this->db->fetch_assoc($rezPhotoInfo)) {
|
|||
|
|
if (stripos($photoInfo['photo'], "http://") === false && stripos($photoInfo['photo'], "https://") === false) {
|
|||
|
|
$obj['photos'][] = '/photos/' . $photoInfo['photo'];
|
|||
|
|
} else {
|
|||
|
|
$obj['photos'][] = $photoInfo['photo'];
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//Доп обработка
|
|||
|
|
if (!$obj['etazh']) {
|
|||
|
|
$obj['etazh'] = Filter::getFloorFromName($obj['nazv'], true);
|
|||
|
|
} else {
|
|||
|
|
Filter::getFloorFromName($obj['nazv'], true);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if (!$obj['etazh_iz']) {
|
|||
|
|
$obj['etazh_iz'] = Filter::getMaxFloorFromName($obj['nazv'], true);
|
|||
|
|
} else {
|
|||
|
|
Filter::getMaxFloorFromName($obj['nazv'], true);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
Filter::getSpaceFromName($obj['nazv'], true);
|
|||
|
|
|
|||
|
|
$obj['nazv'] = Filter::name($obj['nazv']);
|
|||
|
|
|
|||
|
|
$obj['sobstv'] = Filter::replaceSobstv($obj['sobstv']);
|
|||
|
|
|
|||
|
|
$obj['opis'] = cleanHtml($obj['opis'], '<p><br><strong><em><ul><ol><li>');
|
|||
|
|
|
|||
|
|
if ($obj['stoim_prim'] == 0) {
|
|||
|
|
$obj['stoim_prim'] = '';
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//$canEdit = false;
|
|||
|
|
|
|||
|
|
$date_add_temp = explode(" ", date("d.m.Y H:i", strtotime($obj['date_add'])));
|
|||
|
|
if (isset($obj['date'])) $date_add_temp = explode(" ", date("d.m.Y H:i", strtotime($obj['date'])));
|
|||
|
|
list($dateAdd, $timeAdd) = $date_add_temp;
|
|||
|
|
list($d, $m, $y) = explode(".", $dateAdd);
|
|||
|
|
|
|||
|
|
$date_add = $d . " " . getRusMonth($m) . " " . $y;
|
|||
|
|
$date = $date_add . " " . $timeAdd;
|
|||
|
|
$obj['date'] = $date;
|
|||
|
|
|
|||
|
|
if ($obj['operation_type'] == 0) {
|
|||
|
|
$obj['SROK_AREND'] = "Сдается " . $SROK_ARENDY[$obj['srok']];
|
|||
|
|
if (!empty($obj['prim_srok'])) {
|
|||
|
|
$obj['SROK_AREND'] .= " (" . $obj['prim_srok'] . ")";
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
$canDeleteOwn = false;
|
|||
|
|
if (!empty($this->user)) {
|
|||
|
|
if ($this->user->agencyId == 8307) {
|
|||
|
|
$canDeleteOwn = false;
|
|||
|
|
if ($_SESSION['id'] == 8307) {
|
|||
|
|
$canDeleteOwn = true;
|
|||
|
|
}
|
|||
|
|
} else {
|
|||
|
|
if ($_SESSION['id'] == 10499) {
|
|||
|
|
$canDeleteOwn = false;
|
|||
|
|
} else {
|
|||
|
|
if ($this->user->agency == 1 || $this->user->users_admin == 1) {
|
|||
|
|
$canDeleteOwn = true;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
$obj['canDeleteOwn'] = $canDeleteOwn;
|
|||
|
|
|
|||
|
|
$filesTotal = 0;
|
|||
|
|
$sql_f = "SELECT * FROM clients_files WHERE object_id = {$obj['id']} AND event_id > 0";
|
|||
|
|
$q_f = $this->db->query($sql_f);
|
|||
|
|
$filesTotal += $this->db->num_rows($q_f);
|
|||
|
|
$obj['filesTotal'] = $filesTotal;
|
|||
|
|
//$obj['hasAutoSearchLayout'] = $hasAutoSearchLayout;
|
|||
|
|
|
|||
|
|
$mtr = array();
|
|||
|
|
$sql = "SELECT metro.metro FROM metro, sp_metro WHERE sp_metro.id_metro = metro.id AND sp_metro.id_obj = {$obj['id']}";
|
|||
|
|
$result = $this->db->query($sql);
|
|||
|
|
while ($m = $this->db->fetch_row($result)) {
|
|||
|
|
$mtr[] = $m[0];
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if (!empty($obj['rayon'])) {
|
|||
|
|
$obj['rayon'] = str_replace([' район', 'район', ' р-н', 'р-н'], '', $obj['rayon']) . ' район';
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
$obj['mtr'] = $mtr;
|
|||
|
|
|
|||
|
|
$objCoordinates = [];
|
|||
|
|
$obj['address'] = '';
|
|||
|
|
|
|||
|
|
if (isset($objCoordinatesArray)) {
|
|||
|
|
foreach ($objCoordinatesArray as $objCoords) {
|
|||
|
|
if ($objCoords['object_id'] == $obj['id']) {
|
|||
|
|
$objCoordinates = $objCoords;
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
} else {
|
|||
|
|
$sql_coordinates = "SELECT address FROM object_location WHERE object_id=" . $obj['id'];
|
|||
|
|
$rezCoordinates = $this->db->query($sql_coordinates);
|
|||
|
|
if ($this->db->num_rows($rezCoordinates) > 0) {
|
|||
|
|
$objCoordinates = $this->db->fetch_assoc($rezCoordinates);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if ($objCoordinates && isset($objCoordinates['address'])) {
|
|||
|
|
$obj['address'] = $objCoordinates['address'];
|
|||
|
|
} else {
|
|||
|
|
$obj['address'] = $obj['adres'];
|
|||
|
|
if ($obj['dom']) {
|
|||
|
|
$obj['address'] .= ", " . $obj['dom'];
|
|||
|
|
}
|
|||
|
|
if ($obj['korpus']) {
|
|||
|
|
$obj['address'] .= ", корпус " . $obj['korpus'];
|
|||
|
|
}
|
|||
|
|
if ($obj['litera']) {
|
|||
|
|
$obj['address'] .= ", литера " . $obj['litera'];
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
if ((int)$obj['etazh'] > 0) {
|
|||
|
|
if ((int)$obj['etazh'] == 1 && !empty($obj['etaz_first_type'])) {
|
|||
|
|
$obj['etazh'] = $etaz_first_types[$obj['etaz_first_type']];
|
|||
|
|
} else {
|
|||
|
|
$obj['etazh'] = $obj['etazh'] . ' этаж';
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
$objClientsArrayCurrent = [];
|
|||
|
|
$clients_count = 0;
|
|||
|
|
if (isset($objClientsArray)) {
|
|||
|
|
foreach ($objClientsArray as $objClient) {
|
|||
|
|
if (strpos($objClient["objects"], $obj['id']) !== false) {
|
|||
|
|
$clients_count++;
|
|||
|
|
$objClientsArrayCurrent[] = $objClient;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
} else {
|
|||
|
|
$objClientsArray = [];
|
|||
|
|
$clientObjIds = [];
|
|||
|
|
$sql_cl_obj = "SELECT client_id FROM client_objects WHERE object_id = {$obj['id']}";
|
|||
|
|
$q_cl_obj = mysql_query($sql_cl_obj);
|
|||
|
|
|
|||
|
|
|
|||
|
|
while ($r_cl_obj = mysql_fetch_assoc($q_cl_obj)) {
|
|||
|
|
$clientObjIds[] = $r_cl_obj['client_id'];
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if (!empty($clientObjIds)) {
|
|||
|
|
$sql_clients = "SELECT `id`, `fio`, `email`, `phone` FROM `clients` WHERE id in (" . implode(',', $clientObjIds) . ")";
|
|||
|
|
|
|||
|
|
$q_client = $this->db->query($sql_clients);
|
|||
|
|
$clients_count = $this->db->num_rows($q_client);
|
|||
|
|
if ($clients_count > 0) {
|
|||
|
|
while ($objCl = $this->db->fetch_assoc($q_client)) {
|
|||
|
|
$objClientsArrayCurrent[] = $objCl;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
$obj['clientsArrayCurrent'] = $objClientsArrayCurrent;
|
|||
|
|
|
|||
|
|
$obj['isPdf'] = 0;
|
|||
|
|
if (in_array($obj['id'], $_SESSION['to_send'])) {
|
|||
|
|
$obj['isPdf'] = 1;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
$obj['isVK'] = 0;
|
|||
|
|
|
|||
|
|
if ($this->user->agencyId != 5530 || $this->user->agencyId == 5530) {
|
|||
|
|
if (!empty($this->user->vk_token)) {
|
|||
|
|
$obj['isVK'] = 1;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
$notes_bd_usl = ' true';
|
|||
|
|
|
|||
|
|
$sql_count_notes = "SELECT COUNT(*) FROM object_notes WHERE object_id = $obj[id] AND $notes_bd_usl";
|
|||
|
|
|
|||
|
|
$obj['notes'] = $this->db->result($this->db->query($sql_count_notes), 0);
|
|||
|
|
|
|||
|
|
|
|||
|
|
$requestsCount = 0;
|
|||
|
|
|
|||
|
|
if ($this->objRequisitionsArray) {
|
|||
|
|
foreach ($this->objRequisitionsArray as $objRequisition) {
|
|||
|
|
if ($objRequisition["object_id"] == $obj["id"]) {
|
|||
|
|
$requestsCount = $objRequisition["cnt"];
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
} else {
|
|||
|
|
$sqlRequest = "SELECT id FROM requisitions WHERE type_id=4 and object_id = $obj[id] and cancel=0";
|
|||
|
|
$qRequest = $this->db->query($sqlRequest);
|
|||
|
|
|
|||
|
|
$requestsCount = $this->db->num_rows($qRequest);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if ($this->objPricesArray) {
|
|||
|
|
foreach ($this->objPricesArray as $objPrice) {
|
|||
|
|
if ($objPrice["object_id"] == $obj["id"]) {
|
|||
|
|
if (!is_null($objPrice['prep_price'])) {
|
|||
|
|
$obj['prep_price'] = $objPrice['prep_price'];
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if (!is_null($objPrice['start_price'])) {
|
|||
|
|
$obj['start_price'] = $objPrice['start_price'];
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if (!is_null($objPrice['fact_price'])) {
|
|||
|
|
$obj['fact_price'] = $objPrice['fact_price'];
|
|||
|
|
}
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
$obj['requestsCount'] = $requestsCount;
|
|||
|
|
$obj['showAds'] = $this->showAds($obj);
|
|||
|
|
|
|||
|
|
$obj['stoim_format'] = number_format($obj['stoim'], 0, ',', ' ');
|
|||
|
|
|
|||
|
|
if (!isset($obj['prep_price']))
|
|||
|
|
$obj['prep_price'] = 0;
|
|||
|
|
if (!isset($obj['start_price']))
|
|||
|
|
$obj['start_price'] = 0;
|
|||
|
|
if (!isset($obj['fact_price']))
|
|||
|
|
$obj['fact_price'] = 0;
|
|||
|
|
//if(isset())
|
|||
|
|
$obj['prep_price'] = number_format($obj['prep_price'], 0, ',', ' ');
|
|||
|
|
$obj['start_price'] = number_format($obj['start_price'], 0, ',', ' ');
|
|||
|
|
$obj['fact_price'] = number_format($obj['fact_price'], 0, ',', ' ');
|
|||
|
|
|
|||
|
|
$obj['objPriceHistory'] = array();
|
|||
|
|
$sqlPriceHistory = "SELECT date_change_price, price, price_ku FROM objects_price_history WHERE object_id ={$obj['id']}";
|
|||
|
|
$rezPriceHistory = $this->db->query($sqlPriceHistory);
|
|||
|
|
while ($objPriceHistory = $this->db->fetch_assoc($rezPriceHistory)) {
|
|||
|
|
$objPriceHistory['price'] = number_format($objPriceHistory['price'], 0, ',', ' ');
|
|||
|
|
$objPriceHistory['date_change_price'] = date('d.m.Y', strtotime($objPriceHistory['date_change_price']));
|
|||
|
|
$obj['objPriceHistory'][] = $objPriceHistory;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
$obj['type_k'] = "-";
|
|||
|
|
if ((int)$obj['komnat'] > 0) {
|
|||
|
|
$obj['type_k'] = (int)$obj['komnat'] . " к.кв.";
|
|||
|
|
if ($obj['studio_flag'] > 0) {
|
|||
|
|
$obj['type_k'] = "студия";
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
$result = $obj;
|
|||
|
|
return $result;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
*
|
|||
|
|
*/
|
|||
|
|
public function set_filter($filter)
|
|||
|
|
{
|
|||
|
|
$this->filter = $filter;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* Комплекс
|
|||
|
|
* @param int $complex_id
|
|||
|
|
*/
|
|||
|
|
public function get_complex_one($complex_id, $photo_visible = true, $objects_list = true, $object_info_id = 0)
|
|||
|
|
{
|
|||
|
|
$this->get_decarations();
|
|||
|
|
$this->set_user();
|
|||
|
|
$sql = "SELECT * FROM complex_list WHERE id={$complex_id} AND agency_id={$this->user->agencyId}";
|
|||
|
|
$q = $this->db->query($sql);
|
|||
|
|
$complex = $this->db->fetch_assoc($q);
|
|||
|
|
if (!$complex) {
|
|||
|
|
echo(json_encode([
|
|||
|
|
'error' => 'Complex not Found'
|
|||
|
|
]));
|
|||
|
|
exit;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
$result['images'] = array();
|
|||
|
|
$result['builder'] = array();
|
|||
|
|
$result = array();
|
|||
|
|
$complex['can_delete'] = 0;
|
|||
|
|
if ($this->user->agency > 0 || $this->user->users_admin) {
|
|||
|
|
$complex['can_delete'] = 1;
|
|||
|
|
}
|
|||
|
|
$result = $complex;
|
|||
|
|
//С фотками
|
|||
|
|
if ($photo_visible) {
|
|||
|
|
$appendedFiles = array();
|
|||
|
|
$sql_images = "SELECT * FROM complex_images WHERE complex_id = {$complex_id}";
|
|||
|
|
$q_images = $this->db->query($sql_images);
|
|||
|
|
|
|||
|
|
while ($r_images = $this->db->fetch_assoc($q_images)) {
|
|||
|
|
$result['images'][] = $r_images;
|
|||
|
|
$ph_url = $r_images['image'];
|
|||
|
|
$name = $r_images['image'];
|
|||
|
|
$pathInfo = pathinfo($name);
|
|||
|
|
$appendedFiles[] = array(
|
|||
|
|
"name" => $ph_url,
|
|||
|
|
"file" => $ph_url,
|
|||
|
|
"type" => "image/" . $pathInfo['extension'],
|
|||
|
|
"data" => array(
|
|||
|
|
"url" => $ph_url,
|
|||
|
|
"thumbnail" => $ph_url
|
|||
|
|
)
|
|||
|
|
);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
$result['images_uploader'] = $appendedFiles;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
$sql_builder = "SELECT * FROM builders WHERE id = {$complex['builder_id']}";
|
|||
|
|
if ($complex['builder_id'] >= 10000) {
|
|||
|
|
$sql_builder = "SELECT * FROM complex_builders WHERE id = {$complex['builder_id']}";
|
|||
|
|
}
|
|||
|
|
$q_builder = $this->db->query($sql_builder);
|
|||
|
|
if ($this->db->num_rows($q_builder) > 0) {
|
|||
|
|
$logo = '';
|
|||
|
|
$builder = $this->db->fetch_assoc($q_builder);
|
|||
|
|
if (!empty($builder['logo']) && file_exists($_SERVER['DOCUMENT_ROOT'] . '/photos/builder/' . $builder['logo'])) {
|
|||
|
|
$logo = '/photos/builder/' . $builder['logo'];
|
|||
|
|
}
|
|||
|
|
$result['builder'] = array('name' => $builder['name'], 'logo' => $logo);
|
|||
|
|
} else {
|
|||
|
|
$result['builder'] = array('name' => '', 'logo' => '');
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
$sql_metro = "SELECT metro.id, metro.metro, m.metro_id, m.subway_time, m.subway_type FROM complex_metro as m
|
|||
|
|
JOIN metro on metro.id = m.metro_id
|
|||
|
|
WHERE m.complex_id={$complex_id}";
|
|||
|
|
|
|||
|
|
|
|||
|
|
$result['metros'] = [];
|
|||
|
|
$mQuery = $this->db->query($sql_metro);
|
|||
|
|
while ($metro = $this->db->fetch_assoc($mQuery)) {
|
|||
|
|
$result['metros'][] = $metro;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
$result['dop'] = array('domclick_id' => null);
|
|||
|
|
$sql_dop = "SELECT * FROM complex_dop WHERE complex_id={$complex_id}";
|
|||
|
|
$dop = $this->db->fetch_assoc($this->db->query($sql_dop));
|
|||
|
|
if ($dop) {
|
|||
|
|
$result['dop'] = $dop;
|
|||
|
|
if ($result['dop']['domclick_id'] == 0) $result['dop']['domclick_id'] = null;
|
|||
|
|
if (!empty($result['dop']['workdays_op'])) $result['dop']['workdays_op'] = json_decode($result['dop']['workdays_op'], true);
|
|||
|
|
$result['dop']['UTP'] = array();
|
|||
|
|
$result['dop']['UTP2'] = array();
|
|||
|
|
$sql_dop_utp = "SELECT * FROM complex_UTP WHERE complex_id = {$complex_id}";
|
|||
|
|
$q_dop_utp = $this->db->query($sql_dop_utp);
|
|||
|
|
while ($r_dop_utp = $this->db->fetch_assoc($q_dop_utp)) {
|
|||
|
|
$otpImages = [];
|
|||
|
|
if (!empty($r_dop_utp['photos'])) {
|
|||
|
|
// echo $r_dop_utp['photos'];
|
|||
|
|
$otpImages = json_decode($r_dop_utp['photos'], true);
|
|||
|
|
}
|
|||
|
|
if ($r_dop_utp['type'] == 'main') {
|
|||
|
|
$result['dop']['UTP'][] = array('title' => $r_dop_utp['title'], 'desc' => $r_dop_utp['desck'], 'isDiv' => true, 'isEdit' => false, 'images' => $otpImages, 'imagesUTP' => $otpImages, 'isInput' => false);
|
|||
|
|
} else if ($r_dop_utp['type'] == 'secondary') {
|
|||
|
|
$result['dop']['UTP2'][] = array('title' => $r_dop_utp['title'], 'desc' => $r_dop_utp['desck'], 'isDiv' => true, 'isEdit' => false, 'images' => $otpImages, 'imagesUTP' => $otpImages, 'isInput' => false);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
$result['actions'] = [];
|
|||
|
|
$sql_action = "SELECT * FROM complex_actions WHERE complex_id = {$complex_id}";
|
|||
|
|
$q_action = $this->db->query($sql_action);
|
|||
|
|
while ($r_action = $this->db->fetch_assoc($q_action)) {
|
|||
|
|
$result['actions'][] = $r_action;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
$sql_address = "SELECT * FROM complex_address WHERE complex_id={$complex_id}";
|
|||
|
|
$q_address = $this->db->query($sql_address);
|
|||
|
|
$result['address'] = $this->db->fetch_assoc($q_address);
|
|||
|
|
$decoration = '';
|
|||
|
|
$decoration_res = $this->db->fetch_assoc($this->db->query("SELECT name FROM decoration_types WHERE id={$complex['decoration_id']}"));
|
|||
|
|
if (isset($decoration_res['name'])) {
|
|||
|
|
$decoration = $decoration_res['name'];
|
|||
|
|
}
|
|||
|
|
$result['decoration'] = $decoration;
|
|||
|
|
|
|||
|
|
|
|||
|
|
//Тип дома
|
|||
|
|
$house_types = '';
|
|||
|
|
if ($complex['house_type'] > 0) {
|
|||
|
|
$house_types_res = $this->db->fetch_assoc($this->db->query("SELECT name FROM house_material WHERE id={$complex['house_type']}"));
|
|||
|
|
if (isset($house_types_res['name'])) {
|
|||
|
|
$house_types = $house_types_res['name'];
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
$result['house_type_name'] = $house_types;
|
|||
|
|
|
|||
|
|
$house_material = '';
|
|||
|
|
if ($complex['house_material'] > 0) {
|
|||
|
|
$house_material_res = $this->db->fetch_assoc($this->db->query("SELECT name FROM house_material WHERE id={$complex['house_material']}"));
|
|||
|
|
if (isset($house_material_res['name'])) {
|
|||
|
|
$house_material = $house_material_res['name'];
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
$result['house_material_name'] = $house_material;
|
|||
|
|
$result['infrastructure'] = array();
|
|||
|
|
|
|||
|
|
$infrastructure = $this->db->fetch_assoc($this->db->query("SELECT * FROM complex_infrastructure WHERE complex_id = {$complex['id']}"));
|
|||
|
|
$result['infrastructure'] = $infrastructure;
|
|||
|
|
|
|||
|
|
$result['corpuses'] = $this->get_corpuses($complex_id);
|
|||
|
|
|
|||
|
|
$result['lines_info'] = array();
|
|||
|
|
/*$block['lines'][(int)$building['line']]['corpuses'][] = array('corpus'=> $building['corp'],
|
|||
|
|
'period' => Date::getFormatedEndingPeriod($building['deadline']),
|
|||
|
|
'deadline' => date('d.m.Y', strtotime($building['deadline'])),
|
|||
|
|
'isDiv' => true,
|
|||
|
|
'isEdit' => false,
|
|||
|
|
'date' => '',
|
|||
|
|
);*/
|
|||
|
|
foreach ($result['corpuses'] as $corpus) {
|
|||
|
|
// var_dump($corpus);
|
|||
|
|
if (!isset($result['lines_info'][$corpus['line']])) $result['lines_info'][$corpus['line']] = array();
|
|||
|
|
$result['lines_info'][$corpus['line']]['corpuses'][] = array(
|
|||
|
|
'id' => $corpus['id'],
|
|||
|
|
'corpus' => $corpus['corpus'],
|
|||
|
|
'period' => $corpus['deadline'],
|
|||
|
|
'deadline' => date('d.m.Y', $corpus['period']),
|
|||
|
|
'isDiv' => true,
|
|||
|
|
'isEdit' => false,
|
|||
|
|
'date' => '',
|
|||
|
|
'corpus_id' => $corpus['corpus_id'],
|
|||
|
|
'corpus_floors' => $corpus['corpus_floors'],
|
|||
|
|
'corpus_floors_ready' => $corpus['corpus_floors_ready'],
|
|||
|
|
'corpus_fz_214' => $corpus['corpus_fz_214'],
|
|||
|
|
'corpus_status' => $corpus['corpus_status'],
|
|||
|
|
'del' => 0
|
|||
|
|
|
|||
|
|
);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// var_dump($result['lines']);
|
|||
|
|
|
|||
|
|
$result['use_in_advert'] = 0;
|
|||
|
|
$result['add_to_bn_feed'] = 0;
|
|||
|
|
$result['add_to_yandex_feed'] = 0;
|
|||
|
|
$result['add_to_domclick_feed'] = 0;
|
|||
|
|
$result['add_to_avito_feed'] = 0;
|
|||
|
|
$result['add_to_emls_feed'] = 0;
|
|||
|
|
$result['add_to_cian_feed'] = 0;
|
|||
|
|
$result['add_to_zipal'] = 0;
|
|||
|
|
|
|||
|
|
$sql_advert = "SELECT * FROM complex_advert WHERE complex_id = {$complex_id}";
|
|||
|
|
$q_advert = $this->db->query($sql_advert);
|
|||
|
|
if ($this->db->num_rows($q_advert) > 0) {
|
|||
|
|
$r_advert = $this->db->fetch_assoc($q_advert);
|
|||
|
|
$result['use_in_advert'] = (int)$r_advert['use_in_advert'];
|
|||
|
|
$result['add_to_bn_feed'] = (int)$r_advert['add_to_bn_feed'];
|
|||
|
|
$result['add_to_yandex_feed'] = (int)$r_advert['add_to_yandex_feed'];
|
|||
|
|
$result['add_to_domclick_feed'] = (int)$r_advert['add_to_domclick_feed'];
|
|||
|
|
$result['add_to_avito_feed'] = (int)$r_advert['add_to_avito_feed'];
|
|||
|
|
$result['add_to_emls_feed'] = (int)$r_advert['add_to_emls_feed'];
|
|||
|
|
$result['add_to_cian_feed'] = (int)$r_advert['add_to_cian_feed'];
|
|||
|
|
$result['add_to_zipal'] = (int)$r_advert['add_to_zipal'];
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
$this->set_sphinx2();
|
|||
|
|
|
|||
|
|
$result['objects_total'] = 0;
|
|||
|
|
$sql_obj_total = "SELECT id FROM objects WHERE archive=0 and complex_id = {$complex_id} LIMIT 1000000 OPTION max_matches=1000000";
|
|||
|
|
$q_obj_total = $this->sphinx2->query($sql_obj_total);
|
|||
|
|
$result['objects_total'] = $this->sphinx2->num_rows($q_obj_total);
|
|||
|
|
/*$sql_obj_total = "SELECT count(*) as total FROM complex_objects WHERE complex_id = {$complex_id}";
|
|||
|
|
$q_obj_total = $this->db->query($sql_obj_total);
|
|||
|
|
$result['objects_total'] = $this->db->result($q_obj_total);*/
|
|||
|
|
|
|||
|
|
//Инфа по заданному объекту
|
|||
|
|
if ($object_info_id > 0) {
|
|||
|
|
$sql_object = "SELECT * FROM complex_objects WHERE object_id = {$object_info_id}";
|
|||
|
|
$q_object = $this->db->query($sql_object);
|
|||
|
|
if ($this->db->num_rows($q_object) > 0) {
|
|||
|
|
$compl_obj = $this->db->fetch_assoc($q_object);
|
|||
|
|
$result['corpus_id_object'] = $compl_obj['corpus_id'];
|
|||
|
|
} else {
|
|||
|
|
$result['corpus_id_object'] = 0;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//С объектами
|
|||
|
|
if ($objects_list) {
|
|||
|
|
$result['objects'] = array();
|
|||
|
|
$obj_ids = array();
|
|||
|
|
$objLines = array();
|
|||
|
|
$objCorpuses = array();
|
|||
|
|
$whereObjects = '';
|
|||
|
|
|
|||
|
|
if (!empty($this->filter)) {
|
|||
|
|
//Фильтр
|
|||
|
|
|
|||
|
|
|
|||
|
|
if (!empty($this->filter->metros)) {
|
|||
|
|
$whereObjects .= " AND id_metro in (" . implode(',', $this->filter->metros) . ")";
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if (!empty($this->filter->period)) {
|
|||
|
|
$whereObjects .= " AND nb_end_date <= {$this->filter->period}";
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if (!empty($this->filter->sq_all_ot)) {
|
|||
|
|
$whereObjects .= " AND ploshad >= {$this->filter->sq_all_ot}";
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if (!empty($this->filter->sq_all_do)) {
|
|||
|
|
$whereObjects .= " AND ploshad <= {$this->filter->sq_all_do}";
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if (!empty($this->filter->flat_floor_ot)) {
|
|||
|
|
$whereObjects .= " AND etazh >= {$this->filter->flat_floor_ot}";
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if (!empty($this->filter->flat_floor_do)) {
|
|||
|
|
$whereObjects .= " AND etazh <= {$this->filter->flat_floor_do}";
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if (!empty($this->filter->stoim_ot)) {
|
|||
|
|
$whereObjects .= " AND stoim >= {$this->filter->stoim_ot}";
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if (!empty($this->filter->stoim_do)) {
|
|||
|
|
$whereObjects .= " AND stoim <= {$this->filter->stoim_do}";
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if (!empty($this->filter->types_room)) {
|
|||
|
|
$types_room = array();
|
|||
|
|
$sql = "SELECT * FROM room_types where id in (" . implode(',', $this->filter->types_room) . ")";
|
|||
|
|
$rez = $this->db->query($sql);
|
|||
|
|
while ($type_room = $this->db->fetch_assoc($rez)) {
|
|||
|
|
$types_room[] = (int)$type_room['name'];
|
|||
|
|
}
|
|||
|
|
$whereObjects .= " AND komnat in (" . implode(',', $types_room) . ")";
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if (!empty($this->filter->decaration_types)) {
|
|||
|
|
$objDIds = array();
|
|||
|
|
$sql_d = "SELECT id, object_id FROM object_nb_info WHERE zipal_new_flat_decoration_type_id in (" . implode(',', $this->filter->decaration_types) . ")";
|
|||
|
|
|
|||
|
|
$rez_d = $this->db->query($sql_d);
|
|||
|
|
while ($r_d = $this->db->fetch_assoc($rez_d)) {
|
|||
|
|
$objDIds[] = (int)$r_d['object_id'];
|
|||
|
|
}
|
|||
|
|
if (!empty($objDIds)) {
|
|||
|
|
$whereObjects .= " AND id in (" . implode(',', $objDIds) . ")";
|
|||
|
|
} else {
|
|||
|
|
$whereObjects .= " AND id in (0)";
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
$this->set_users_ids();
|
|||
|
|
|
|||
|
|
|
|||
|
|
/* if(!empty($whereObjects)){
|
|||
|
|
$complexObjIds = array();
|
|||
|
|
$this->set_sphinx2();
|
|||
|
|
//$sql_obj = "SELECT id FROM objects WHERE archive=0 and complex_id = {$complex_id} and id_add_user in (".implode(',', $this->userIds).") {$whereObjects} LIMIT 1000000 OPTION max_matches=1000000";
|
|||
|
|
echo $sql_obj;
|
|||
|
|
$q_obj = $this->sphinx2->query($sql_obj, true);
|
|||
|
|
while($r_obj = $this->sphinx2->fetch_assoc($q_obj)){
|
|||
|
|
$complexObjIds[] = (int)$r_obj['id'];
|
|||
|
|
}
|
|||
|
|
}*/
|
|||
|
|
$obj_ids = array();
|
|||
|
|
$objects = array();
|
|||
|
|
$limitSqlObj = " limit 10";
|
|||
|
|
if ($_SESSION['id'] == 5238) {
|
|||
|
|
$this->limit = 2;
|
|||
|
|
}
|
|||
|
|
if ($this->page_obj > 0) {
|
|||
|
|
$limitSqlObj = ' limit ' . ($this->page_obj - 1) * $this->limit . ', ' . $this->limit;
|
|||
|
|
}
|
|||
|
|
$sql_obj_total = "SELECT id FROM objects WHERE archive=0 and complex_id = {$complex_id} and id_add_user in (" . implode(',', $this->userIds) . ") {$whereObjects} LIMIT 1000000 OPTION max_matches=1000000";
|
|||
|
|
$q_obj_total = $this->sphinx2->query($sql_obj_total);
|
|||
|
|
$result['objects_total'] = $this->sphinx2->num_rows($q_obj_total);
|
|||
|
|
|
|||
|
|
$sql_obj = "SELECT * FROM objects WHERE archive=0 and complex_id = {$complex_id} and id_add_user in (" . implode(',', $this->userIds) . ") {$whereObjects} order by date_add desc {$limitSqlObj} OPTION max_matches=1000000";
|
|||
|
|
// echo $sql_obj;
|
|||
|
|
$q_obj = $this->sphinx2->query($sql_obj, true);
|
|||
|
|
while ($r_obj = $this->sphinx2->fetch_assoc($q_obj)) {
|
|||
|
|
$objects[] = $r_obj;
|
|||
|
|
$obj_ids[] = (int)$r_obj['id'];
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
if (!empty($obj_ids)) {
|
|||
|
|
$sql_complex_object = "SELECT * FROM complex_objects WHERE complex_id = {$complex_id} and object_id in (" . implode(", ", $obj_ids) . ")";
|
|||
|
|
//echo $sql_complex_object;
|
|||
|
|
|
|||
|
|
$q_complex_object = $this->db->query($sql_complex_object);
|
|||
|
|
while ($complex_obj = $this->db->fetch_assoc($q_complex_object)) {
|
|||
|
|
//$obj_ids[] = $complex_obj['object_id'];
|
|||
|
|
$objLines[$complex_obj['object_id']] = array();
|
|||
|
|
$objCorpuses[$complex_obj['object_id']] = array();
|
|||
|
|
if ($complex_obj['corpus_id'] > 0) {
|
|||
|
|
$sql_line = "SELECT * FROM complex_corpuses WHERE id = {$complex_obj['corpus_id']}";
|
|||
|
|
$q_line = $this->db->query($sql_line);
|
|||
|
|
$r_line = $this->db->fetch_assoc($q_line);
|
|||
|
|
$objLines[$complex_obj['object_id']] = $r_line;
|
|||
|
|
} else {
|
|||
|
|
$objLines[$complex_obj['object_id']] = array('line' => 1, 'corpus' => 1);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
//var_dump($objLines);
|
|||
|
|
$objAddInfoList = array();
|
|||
|
|
$objSaleInfoList = array();
|
|||
|
|
if (!empty($obj_ids)) {
|
|||
|
|
|
|||
|
|
//Доп инфа
|
|||
|
|
|
|||
|
|
$sqlAddInfo = "SELECT * FROM objects_additional_information WHERE object_id in (" . implode(", ", $obj_ids) . ")";
|
|||
|
|
$rezAddInfo = $this->db->query($sqlAddInfo);
|
|||
|
|
while ($objAddInfo = $this->db->fetch_assoc($rezAddInfo)) {
|
|||
|
|
$objAddInfoList[$objAddInfo['object_id']] = $objAddInfo;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//sale инфа
|
|||
|
|
$sqlSaleInfo = "SELECT * FROM sale_objects WHERE object_id in (" . implode(", ", $obj_ids) . ")";
|
|||
|
|
$rezSaleInfo = $this->db->query($sqlSaleInfo);
|
|||
|
|
while ($objSaleInfo = $this->db->fetch_assoc($rezSaleInfo)) {
|
|||
|
|
$objSaleInfoList[$objSaleInfo['object_id']] = $objSaleInfo;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//начитываем кол-во заявок для объектов
|
|||
|
|
$objRequisitionsArray = [];
|
|||
|
|
$sqlRequisitions = "SELECT count(id) as cnt, object_id FROM requisitions WHERE (type_id = 4 or type_id in (SELECT id FROM requisitions_type WHERE heir = 4 AND agency_id = {$this->user->agencyId})) AND cancel = 0 AND object_id in (" . implode(", ", $obj_ids) . ") GROUP BY object_id";
|
|||
|
|
$qRequisitions = $this->db->query($sqlRequisitions);
|
|||
|
|
|
|||
|
|
if ($this->db->num_rows($qRequisitions) > 0) {
|
|||
|
|
while ($objRequisitions = $this->db->fetch_assoc($qRequisitions)) {
|
|||
|
|
$objRequisitionsArray[] = $objRequisitions;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
$this->objRequisitionsArray = $objRequisitionsArray;
|
|||
|
|
|
|||
|
|
$objPricesArray = [];
|
|||
|
|
$sqlPrices = "SELECT * FROM `object_prices`
|
|||
|
|
WHERE `object_id` in (" . implode(", ", $obj_ids) . ") AND `agency_id`='{$this->user->agencyId}'";
|
|||
|
|
|
|||
|
|
if ($queryPrices = $this->db->query($sqlPrices)) {
|
|||
|
|
if ($this->db->num_rows($queryPrices) > 0) {
|
|||
|
|
while ($objPrice = $this->db->fetch_assoc($queryPrices)) {
|
|||
|
|
$objPricesArray[] = $objPrice;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
$this->objPricesArray = $objPricesArray;
|
|||
|
|
|
|||
|
|
$objects1 = array();
|
|||
|
|
$sql_obj1 = "SELECT *, DATE_FORMAT(date_add,'%d.%m.%Y %H:%i') as date_add
|
|||
|
|
FROM objects
|
|||
|
|
WHERE id in (" . implode(", ", $obj_ids) . ") ";
|
|||
|
|
// echo $sql_obj;
|
|||
|
|
$q_obj1 = $this->db->query($sql_obj1);
|
|||
|
|
while ($r_obj1 = $this->db->fetch_assoc($q_obj1)) {
|
|||
|
|
$objects1[$r_obj1['id']] = $r_obj1;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//var_dump($objects1);
|
|||
|
|
$result['allPages'] = ceil($result['objects_total'] / $this->limit);
|
|||
|
|
|
|||
|
|
foreach ($objects as $obj) {
|
|||
|
|
// var_dump($obj);
|
|||
|
|
$obj['line'] = $objLines[$obj['id']]['line'];
|
|||
|
|
if (isset($objAddInfoList[$obj['id']])) {
|
|||
|
|
$obj['flat_number'] = $objAddInfoList[$obj['id']]['flat_number'];
|
|||
|
|
} else {
|
|||
|
|
$obj['flat_number'] = "-";
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
$obj['nazv'] = $objects1[$obj['id']]['nazv'];
|
|||
|
|
$obj['opis'] = $objects1[$obj['id']]['opis'];
|
|||
|
|
$obj['etazh'] = $objects1[$obj['id']]['etazh'];
|
|||
|
|
$obj['ploshad'] = $objects1[$obj['id']]['ploshad'];
|
|||
|
|
$obj['ploshad_komn'] = $objects1[$obj['id']]['ploshad_komn'];
|
|||
|
|
$obj['ploshad_k'] = $objects1[$obj['id']]['ploshad_k'];
|
|||
|
|
$obj['etazh_iz'] = $objects1[$obj['id']]['etazh_iz'];
|
|||
|
|
$obj['sobstv'] = $objects1[$obj['id']]['sobstv'];
|
|||
|
|
$obj['date_add'] = $objects1[$obj['id']]['date_add'];
|
|||
|
|
$obj['korpus'] = $objLines[$obj['id']]['corpus'];
|
|||
|
|
$obj['stoim'] = $objects1[$obj['id']]['stoim'];
|
|||
|
|
// $obj['zipal_new_flat_decoration_type_id']
|
|||
|
|
|
|||
|
|
if (isset($objSaleInfoList[$obj['id']])) {
|
|||
|
|
$obj['entrance_number'] = $objSaleInfoList[$obj['id']]['entrance_number'];
|
|||
|
|
} else {
|
|||
|
|
$obj['entrance_number'] = "-";
|
|||
|
|
}
|
|||
|
|
$result['objects']['object_' . $obj['id']] = $this->object_details($obj);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
return $result;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
public function getComplexNames($use_empty_rooms = false)
|
|||
|
|
{
|
|||
|
|
$result = array();
|
|||
|
|
$this->set_user();
|
|||
|
|
$this->set_users_ids();
|
|||
|
|
// $use_empty_rooms = true;
|
|||
|
|
if ($use_empty_rooms) {
|
|||
|
|
$query = $this->db->query("SELECT id, `name`
|
|||
|
|
FROM complex_list
|
|||
|
|
WHERE agency_id={$this->user->agencyId}
|
|||
|
|
AND complex_list.arhive = 0
|
|||
|
|
AND complex_list.deleted = 0
|
|||
|
|
");
|
|||
|
|
} else {
|
|||
|
|
$query = $this->db->query("SELECT complex_list.id, complex_list.name FROM complex_list
|
|||
|
|
LEFT JOIN complex_houses ON complex_houses.complex_id = complex_list.id
|
|||
|
|
LEFT JOIN complex_metro ON complex_metro.complex_id = complex_list.id
|
|||
|
|
LEFT JOIN complex_address ON complex_address.complex_id = complex_list.id
|
|||
|
|
LEFT JOIN complex_entrances complex_entrances ON complex_entrances.complex_house_id = complex_houses.id
|
|||
|
|
LEFT JOIN complex_floors complex_floors ON complex_floors.complex_entrance_id = complex_entrances.id
|
|||
|
|
LEFT JOIN complex_rooms complex_rooms ON complex_rooms.floor_id = complex_floors.id
|
|||
|
|
WHERE complex_list.agency_id={$this->user->agencyId}
|
|||
|
|
AND complex_list.arhive = 0
|
|||
|
|
AND complex_list.deleted = 0
|
|||
|
|
AND complex_houses.id IS NOT NULL AND complex_rooms.id IS NOT NULL
|
|||
|
|
GROUP BY complex_list.id
|
|||
|
|
HAVING COUNT(complex_houses.id) > 0 AND COUNT(complex_rooms.id) > 0
|
|||
|
|
ORDER BY complex_list.id DESC
|
|||
|
|
");
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// print_r($query);die;
|
|||
|
|
|
|||
|
|
while ($row = $this->db->fetch_assoc($query)) {
|
|||
|
|
$result[] = $row;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// var_dump($result);die;
|
|||
|
|
|
|||
|
|
return $result;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* Поиск
|
|||
|
|
*/
|
|||
|
|
public function search($filter, $use_empty_rooms = false)
|
|||
|
|
{
|
|||
|
|
$whereComplex = '';
|
|||
|
|
$whereRoom = '';
|
|||
|
|
$whereAddress = '';
|
|||
|
|
$whereHouse = '';
|
|||
|
|
$whereFloor = '';
|
|||
|
|
$priceFilterKey = ' complex_rooms.total_amount ';
|
|||
|
|
|
|||
|
|
$havingComplex = "";
|
|||
|
|
|
|||
|
|
if (!$use_empty_rooms) {
|
|||
|
|
$havingComplex .= " HAVING COUNT(complex_houses.id) > 0 AND COUNT(complex_rooms.id) > 0";
|
|||
|
|
$whereComplex .= " AND complex_houses.id IS NOT NULL AND complex_rooms.id IS NOT NULL ";
|
|||
|
|
// $whereHouse .= " AND COUNT(complex_rooms.id) > 0 ";
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if ($filter) {
|
|||
|
|
if (!empty($filter->selectedDecorations)) {
|
|||
|
|
$whereRoom .= " AND complex_rooms.decoration_id in (" . implode(',', $filter->selectedDecorations) . ") ";
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if (!empty($filter->selectedTypes)) {
|
|||
|
|
$whereRoom .= " AND complex_rooms.type in ('" . implode('\',\'', $filter->selectedTypes) . "') ";
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if (!empty($filter->rooms)) {
|
|||
|
|
$isMoreThenFive = in_array('5-more', $filter->rooms);
|
|||
|
|
$isSelectedStudio = in_array('studio', $filter->rooms);
|
|||
|
|
|
|||
|
|
$filteredArray = array_filter($filter->rooms, function ($element) {
|
|||
|
|
return !in_array($element, ["5-more", "studio"]);
|
|||
|
|
});
|
|||
|
|
|
|||
|
|
|
|||
|
|
if ($isSelectedStudio) {
|
|||
|
|
$whereRoom .= " AND complex_rooms.layout_feature = 'studio' ";
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if (count($filteredArray)) {
|
|||
|
|
if ($isMoreThenFive) {
|
|||
|
|
$whereRoom .= " AND (complex_rooms.rooms_count >= 5 OR complex_rooms.rooms_count IN (" . implode(',', $filteredArray) . "))";
|
|||
|
|
} else {
|
|||
|
|
$whereRoom .= " AND complex_rooms.rooms_count IN (" . implode(',', $filteredArray) . ")";
|
|||
|
|
}
|
|||
|
|
} else if ($isMoreThenFive) {
|
|||
|
|
$whereRoom .= " AND complex_rooms.rooms_count >= 5 ";
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if (!empty($filter->rayons)) {
|
|||
|
|
$whereComplex .= " AND (";
|
|||
|
|
foreach ($filter->rayons as $index => $rayon) {
|
|||
|
|
$whereComplex .= " complex_address.rayon LIKE '%{$rayon}%'";
|
|||
|
|
if (isset($filter->rayons[$index + 1])) {
|
|||
|
|
$whereComplex .= " OR ";
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
$whereComplex .= " ) ";
|
|||
|
|
// var_dump($whereAddress);die;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if (!empty($filter->selectedMetros)) {
|
|||
|
|
$whereComplex .= " AND complex_metro.metro_id in (" . implode(',', $filter->selectedMetros) . ")";
|
|||
|
|
}
|
|||
|
|
if (!empty($filter->complexes)) {
|
|||
|
|
$whereComplex .= " AND complex_list.id in (" . implode(',', $filter->complexes) . ")";
|
|||
|
|
}
|
|||
|
|
if (!empty($filter->address)) {
|
|||
|
|
$whereComplex .= " AND complex_address.address like '%{$filter->address}%'";
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if (!empty($filter->squareKitchen_min)) {
|
|||
|
|
$whereRoom .= " AND complex_rooms.kitchen_area >= {$filter->squareKitchen_min}";
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if (!empty($filter->squareKitchen_max)) {
|
|||
|
|
$whereRoom .= " AND complex_rooms.kitchen_area <= {$filter->squareKitchen_max}";
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if (!empty($filter->area_from)) {
|
|||
|
|
$whereRoom .= " AND complex_rooms.area >= {$filter->area_from}";
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if (!empty($filter->area_to)) {
|
|||
|
|
$whereRoom .= " AND complex_rooms.area <= {$filter->area_to}";
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if (filter_var($filter->useSquarePrice, FILTER_VALIDATE_BOOLEAN)) {
|
|||
|
|
$priceFilterKey = " complex_rooms.total_amount / complex_rooms.area ";
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if (!empty($filter->price_from)) {
|
|||
|
|
|
|||
|
|
$whereRoom .= " AND {$priceFilterKey} >= {$filter->price_from}";
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if (!empty($filter->price_to)) {
|
|||
|
|
$whereRoom .= " AND {$priceFilterKey} <= {$filter->price_to}";
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if (!empty($filter->floor_from)) {
|
|||
|
|
$whereFloor .= " AND complex_floors.position >= {$filter->floor_from}";
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if (!empty($filter->floor_to)) {
|
|||
|
|
$whereFloor .= " AND complex_floors.position <= {$filter->floor_to}";
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if (!empty($filter->selectedComplexTypes)) {
|
|||
|
|
$whereComplex .= " AND complex_list.type in ('" . implode('\',\'', $filter->selectedComplexTypes) . "')";
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if (!empty($filter->period)) {
|
|||
|
|
if ($filter->period == 'completed') {
|
|||
|
|
$currentMonth = date('n');
|
|||
|
|
$currentYear = date('Y');
|
|||
|
|
|
|||
|
|
$currentQuarter = ceil($currentMonth / 3);
|
|||
|
|
$whereHouse .= " AND complex_houses.deadline_quarter <= $currentQuarter AND complex_houses.deadline_year <= $currentYear ";
|
|||
|
|
} else {
|
|||
|
|
list($year, $quarter) = explode('Q', $filter->period);
|
|||
|
|
|
|||
|
|
$whereHouse .= " AND complex_houses.deadline_quarter = $quarter AND complex_houses.deadline_year = $year ";
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if(!empty($filter->is_partner_show)){
|
|||
|
|
$whereHouse .= " AND complex_houses.is_partner_show = 1 ";
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if (!empty($filter->is_archive)) {
|
|||
|
|
$whereComplex .= " AND complex_list.arhive = 1 ";
|
|||
|
|
} else {
|
|||
|
|
$whereComplex .= " AND complex_list.arhive = 0 ";
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// Фильтрация по способам оплаты
|
|||
|
|
if (!empty($filter->selectedPaymentTypes)) {
|
|||
|
|
$conditions = [];
|
|||
|
|
|
|||
|
|
foreach ($filter->selectedPaymentTypes as $pt) {
|
|||
|
|
$conditions[] = "complex_rooms.payment_types LIKE '%\"{$pt}\"%'";
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if (!empty($conditions)) {
|
|||
|
|
$whereRoom .= " AND (" . implode(' OR ', $conditions) . ")";
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// Installment-specific filtering
|
|||
|
|
if (in_array('INSTALLMENT', $filter->selectedPaymentTypes)) {
|
|||
|
|
$whereRoom .= " AND EXISTS (
|
|||
|
|
SELECT 1
|
|||
|
|
FROM complex_house_installments chi
|
|||
|
|
JOIN complex_entrances ce ON ce.complex_house_id = chi.house_id
|
|||
|
|
JOIN complex_floors cf ON cf.complex_entrance_id = ce.id
|
|||
|
|
JOIN installments i ON i.id = chi.installment_id
|
|||
|
|
WHERE cf.id = complex_rooms.floor_id
|
|||
|
|
AND i.is_archive = 0"
|
|||
|
|
. (!empty($filter->selectedInstallments)
|
|||
|
|
? " AND chi.installment_id IN (" . implode(',', $filter->selectedInstallments) . ")"
|
|||
|
|
: "")
|
|||
|
|
. ((isset($filter->initialPayment) && is_numeric($filter->initialPayment))
|
|||
|
|
? " AND complex_rooms.installment_price IS NOT NULL AND complex_rooms.installment_price > 0 AND ((i.initial_payment / 100.0) * complex_rooms.installment_price) <= " . (float)$filter->initialPayment
|
|||
|
|
: "")
|
|||
|
|
. ((isset($filter->paymentTerm) && is_numeric($filter->paymentTerm))
|
|||
|
|
? " AND (DATEDIFF(chi.end_date, CURDATE()) / 30.44) >= " . (float)$filter->paymentTerm
|
|||
|
|
: "")
|
|||
|
|
. ((isset($filter->installmentPrice->min) && is_numeric($filter->installmentPrice->min))
|
|||
|
|
? " AND complex_rooms.installment_price >= " . (float)$filter->installmentPrice->min
|
|||
|
|
: "")
|
|||
|
|
. ((isset($filter->installmentPrice->max) && is_numeric($filter->installmentPrice->max))
|
|||
|
|
? " AND complex_rooms.installment_price <= " . (float)$filter->installmentPrice->max
|
|||
|
|
: "")
|
|||
|
|
. ")";
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
$this->limit = 12;
|
|||
|
|
$limitSqlComolex = " limit {$this->limit}";
|
|||
|
|
|
|||
|
|
$this->set_user();
|
|||
|
|
$this->set_users_ids();
|
|||
|
|
|
|||
|
|
if ($this->page > 0) {
|
|||
|
|
$limitSqlComolex = ' limit ' . ($this->page - 1) * $this->limit . ', ' . $this->limit;
|
|||
|
|
}
|
|||
|
|
// var_dump($limitSqlComolex);die;
|
|||
|
|
$result = array();
|
|||
|
|
|
|||
|
|
$sql_total = "SELECT count(DISTINCT complex_list.id) as total, count( DISTINCT complex_houses.id) as houses_total, COUNT(DISTINCT complex_rooms.id) as total_rooms FROM complex_list
|
|||
|
|
LEFT JOIN complex_houses ON complex_houses.complex_id = complex_list.id AND (complex_houses.deleted_at IS NULL OR complex_houses.deleted_at = '0000-00-00 00:00:00') {$whereHouse}
|
|||
|
|
LEFT JOIN complex_metro ON complex_metro.complex_id = complex_list.id
|
|||
|
|
LEFT JOIN complex_address ON complex_address.complex_id = complex_list.id
|
|||
|
|
LEFT JOIN complex_entrances complex_entrances ON complex_entrances.complex_house_id = complex_houses.id
|
|||
|
|
LEFT JOIN complex_floors complex_floors ON complex_floors.complex_entrance_id = complex_entrances.id {$whereFloor}
|
|||
|
|
LEFT JOIN complex_rooms complex_rooms ON complex_rooms.floor_id = complex_floors.id {$whereRoom}
|
|||
|
|
WHERE complex_list.agency_id={$this->user->agencyId}
|
|||
|
|
AND complex_list.deleted = 0
|
|||
|
|
{$whereComplex}
|
|||
|
|
{$havingComplex}
|
|||
|
|
ORDER BY complex_list.id DESC
|
|||
|
|
";
|
|||
|
|
|
|||
|
|
$q_total = $this->db->query($sql_total);
|
|||
|
|
$result['total'] = (int)$this->db->fetch_assoc($q_total)['total'];
|
|||
|
|
|
|||
|
|
$sql = "SELECT complex_list.*, count( DISTINCT CASE
|
|||
|
|
WHEN (complex_houses.deleted_at IS NULL OR complex_houses.deleted_at = '0000-00-00 00:00:00')
|
|||
|
|
THEN complex_houses.id
|
|||
|
|
ELSE NULL
|
|||
|
|
END) as houses_total, COUNT(DISTINCT CASE
|
|||
|
|
WHEN (complex_houses.deleted_at IS NULL OR complex_houses.deleted_at = '0000-00-00 00:00:00')
|
|||
|
|
THEN complex_rooms.id
|
|||
|
|
ELSE NULL
|
|||
|
|
END) as total_rooms, MIN(CASE
|
|||
|
|
WHEN (complex_houses.deleted_at IS NULL OR complex_houses.deleted_at = '0000-00-00 00:00:00')
|
|||
|
|
THEN complex_rooms.total_amount
|
|||
|
|
ELSE NULL
|
|||
|
|
END) AS min_total_amount FROM complex_list
|
|||
|
|
LEFT JOIN complex_houses ON complex_houses.complex_id = complex_list.id AND (complex_houses.deleted_at IS NULL OR complex_houses.deleted_at = '0000-00-00 00:00:00') {$whereHouse}
|
|||
|
|
LEFT JOIN complex_metro ON complex_metro.complex_id = complex_list.id
|
|||
|
|
LEFT JOIN complex_address ON complex_address.complex_id = complex_list.id
|
|||
|
|
LEFT JOIN complex_entrances complex_entrances ON complex_entrances.complex_house_id = complex_houses.id
|
|||
|
|
LEFT JOIN complex_floors complex_floors ON complex_floors.complex_entrance_id = complex_entrances.id {$whereFloor}
|
|||
|
|
LEFT JOIN complex_rooms complex_rooms ON complex_rooms.floor_id = complex_floors.id {$whereRoom}
|
|||
|
|
WHERE complex_list.agency_id={$this->user->agencyId}
|
|||
|
|
AND complex_list.deleted = 0
|
|||
|
|
{$whereComplex}
|
|||
|
|
GROUP BY complex_list.id
|
|||
|
|
{$havingComplex}
|
|||
|
|
ORDER BY complex_list.id DESC {$limitSqlComolex}
|
|||
|
|
";
|
|||
|
|
|
|||
|
|
$q = $this->db->query($sql);
|
|||
|
|
// , MIN(complex_rooms.total_amount) AS min_total_amount
|
|||
|
|
// echo '<pre>';
|
|||
|
|
// print_r($q->queryString);
|
|||
|
|
// echo '</pre>';
|
|||
|
|
// die();
|
|||
|
|
|
|||
|
|
// var_dump($q);die;
|
|||
|
|
// $result['total'] = $this->db->num_rows($q);
|
|||
|
|
// var_dump('test');die;
|
|||
|
|
|
|||
|
|
$result['allPages'] = ceil($result['total'] / $this->limit);
|
|||
|
|
$result['agency_name'] = $this->user->agencyName;
|
|||
|
|
$result['agency_logo'] = $this->user->photo;
|
|||
|
|
$result['agency_phone'] = $this->user->agencyPhone;
|
|||
|
|
// var_dump($result['agency_phone']);die;
|
|||
|
|
// var_dump($this->user);die;
|
|||
|
|
// var_dump($result);die;
|
|||
|
|
$complexIds = [];
|
|||
|
|
while ($r = $this->db->fetch_assoc($q)) {
|
|||
|
|
$cid = (int)$r['id'];
|
|||
|
|
$complexIds[] = $cid;
|
|||
|
|
|
|||
|
|
$result['list']['complex_' . $r['id']] = $this->get_complex_one($r['id'], true, false);
|
|||
|
|
$result['list']['complex_' . $r['id']]['houses_total'] = $r['houses_total'];
|
|||
|
|
$result['list']['complex_' . $r['id']]['houses_total_unarchived'] = 0;
|
|||
|
|
$result['list']['complex_' . $r['id']]['total_rooms'] = $r['total_rooms'];
|
|||
|
|
$result['list']['complex_' . $r['id']]['total_rooms_unarchived'] = 0;
|
|||
|
|
$result['list']['complex_' . $r['id']]['min_total_amount'] = $r['min_total_amount'];
|
|||
|
|
// var_dump($r);die;
|
|||
|
|
}
|
|||
|
|
// var_dump($result);die;
|
|||
|
|
|
|||
|
|
//Подсчет кол-ва домов и комнат не в архиве
|
|||
|
|
if (!empty($complexIds)) {
|
|||
|
|
$idsString = implode(',', $complexIds);
|
|||
|
|
$sql_unarchived_counts = "
|
|||
|
|
SELECT
|
|||
|
|
cl.id as complex_id,
|
|||
|
|
COUNT(DISTINCT ch.id) as houses_total_unarchived,
|
|||
|
|
COUNT(DISTINCT cr.id) as total_rooms_unarchived
|
|||
|
|
FROM complex_list cl
|
|||
|
|
LEFT JOIN complex_houses ch
|
|||
|
|
ON ch.complex_id = cl.id
|
|||
|
|
AND ch.is_archive = 0
|
|||
|
|
AND (ch.deleted_at IS NULL OR ch.deleted_at = '0000-00-00 00:00:00')
|
|||
|
|
LEFT JOIN complex_metro cm ON cm.complex_id = cl.id
|
|||
|
|
LEFT JOIN complex_address ca ON ca.complex_id = cl.id
|
|||
|
|
LEFT JOIN complex_entrances ce ON ce.complex_house_id = ch.id
|
|||
|
|
LEFT JOIN complex_floors cf ON cf.complex_entrance_id = ce.id
|
|||
|
|
LEFT JOIN complex_rooms cr
|
|||
|
|
ON cr.floor_id = cf.id
|
|||
|
|
LEFT JOIN complex_status cs ON cs.id = cr.complex_status_id
|
|||
|
|
WHERE
|
|||
|
|
cl.id IN ({$idsString})
|
|||
|
|
AND cl.agency_id={$this->user->agencyId}
|
|||
|
|
AND cl.deleted = 0
|
|||
|
|
AND cs.status = 'available'
|
|||
|
|
GROUP BY cl.id
|
|||
|
|
";
|
|||
|
|
|
|||
|
|
$q_unarchived = $this->db->query($sql_unarchived_counts);
|
|||
|
|
if ($q_unarchived) {
|
|||
|
|
while ($u_r = $this->db->fetch_assoc($q_unarchived)) {
|
|||
|
|
$cid = (int)$u_r['complex_id'];
|
|||
|
|
if (isset($result['list']['complex_' . $cid])) {
|
|||
|
|
$result['list']['complex_' . $cid]['houses_total_unarchived'] = (int)$u_r['houses_total_unarchived'];
|
|||
|
|
$result['list']['complex_' . $cid]['total_rooms_unarchived'] = (int)$u_r['total_rooms_unarchived'];
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
} else {
|
|||
|
|
error_log("Ошибка выполнения запроса подсчета не архивных домов и доступных помещений: " . $this->db->error . "\nЗапрос: " . $sql_unarchived_counts);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
return $result;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
public function searchOLD($filter = array())
|
|||
|
|
{
|
|||
|
|
$whereComplex = '';
|
|||
|
|
$whereObjects = '';
|
|||
|
|
$whereDecoration = '';
|
|||
|
|
$complexIds = array();
|
|||
|
|
|
|||
|
|
//Фильтр
|
|||
|
|
if (!empty($filter)) {
|
|||
|
|
//var_dump($filter);
|
|||
|
|
// if (!empty($filter->country_id)) {
|
|||
|
|
// $whereComplex .= " AND country_id = {$filter->country_id}";
|
|||
|
|
// }
|
|||
|
|
|
|||
|
|
// if (!empty($filter->region_id)) {
|
|||
|
|
// $whereComplex .= " AND rf_region_id = {$filter->region_id}";
|
|||
|
|
// }
|
|||
|
|
|
|||
|
|
// if (!empty($filter->complexes)) {
|
|||
|
|
// $complexIds = $filter->complexes;
|
|||
|
|
// //$whereComplex .= " AND id in (".implode(',',$filter->complexes).")";
|
|||
|
|
// }
|
|||
|
|
|
|||
|
|
if (!empty($filter->selectedDecorations)) {
|
|||
|
|
$whereComplex .= " AND type in ('" . implode('\',\'', $filter->selectedDecorations) . "')";
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// if (!empty($filter->builders)) {
|
|||
|
|
// $whereComplex .= " AND builder_id in (" . implode(',', $filter->builders) . ")";
|
|||
|
|
// }
|
|||
|
|
|
|||
|
|
// if (!empty($filter->payment_types)) {
|
|||
|
|
// $whereComplex .= " AND (JSON_EXTRACT(`payment_types`, '$[0]') in (" . implode(',', $filter->payment_types) . ")
|
|||
|
|
// or JSON_EXTRACT(`payment_types`, '$[1]') in (" . implode(',', $filter->payment_types) . ")
|
|||
|
|
// or JSON_EXTRACT(`payment_types`, '$[2]') in (" . implode(',', $filter->payment_types) . ")
|
|||
|
|
// )";
|
|||
|
|
// }
|
|||
|
|
|
|||
|
|
// if (!empty($filter->selectedMetros)) {
|
|||
|
|
// $whereObjects .= " AND id_metro in (" . implode(',', $filter->selectedMetros) . ")";
|
|||
|
|
// }
|
|||
|
|
|
|||
|
|
// if (!empty($filter->period)) {
|
|||
|
|
// $whereObjects .= " AND nb_end_date <= {$filter->period}";
|
|||
|
|
// }
|
|||
|
|
|
|||
|
|
// if (!empty($filter->area_from)) {
|
|||
|
|
// $whereObjects .= " AND ploshad >= {$filter->area_from}";
|
|||
|
|
// }
|
|||
|
|
|
|||
|
|
// if (!empty($filter->area_to)) {
|
|||
|
|
// $whereObjects .= " AND ploshad <= {$filter->area_to}";
|
|||
|
|
// }
|
|||
|
|
|
|||
|
|
// if (!empty($filter->floor_from)) {
|
|||
|
|
// $whereObjects .= " AND etazh >= {$filter->floor_from}";
|
|||
|
|
// }
|
|||
|
|
|
|||
|
|
// if (!empty($filter->floor_to)) {
|
|||
|
|
// $whereObjects .= " AND etazh <= {$filter->floor_to}";
|
|||
|
|
// }
|
|||
|
|
|
|||
|
|
// if (!empty($filter->price_from)) {
|
|||
|
|
// $whereObjects .= " AND stoim >= {$filter->price_from}";
|
|||
|
|
// }
|
|||
|
|
|
|||
|
|
// if (!empty($filter->price_to)) {
|
|||
|
|
// $whereObjects .= " AND stoim <= {$filter->price_to}";
|
|||
|
|
// }
|
|||
|
|
|
|||
|
|
if (!empty($filter->types_room)) {
|
|||
|
|
|
|||
|
|
$types_room = array();
|
|||
|
|
$sql = "SELECT * FROM room_types WHERE id in (" . implode(',', $filter->types_room) . ")";
|
|||
|
|
$rez = $this->db->query($sql);
|
|||
|
|
while ($type_room = $this->db->fetch_assoc($rez)) {
|
|||
|
|
$types_room[] = (int)$type_room['name'];
|
|||
|
|
}
|
|||
|
|
$whereObjects .= " AND komnat in (" . implode(',', $types_room) . ")";
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if (!empty($filter->decaration_types)) {
|
|||
|
|
$whereDecoration = "AND decoration_id IN (" . implode(',', $filter->decaration_types) . ")";
|
|||
|
|
// $objDIds = array();
|
|||
|
|
// $sql_d = "SELECT id, object_id FROM object_nb_info WHERE zipal_new_flat_decoration_type_id in (" . implode(',', $filter->decaration_types) . ")";
|
|||
|
|
|
|||
|
|
// $rez_d = $this->db->query($sql_d);
|
|||
|
|
// while ($r_d = $this->db->fetch_assoc($rez_d)) {
|
|||
|
|
// $objDIds[] = (int)$r_d['object_id'];
|
|||
|
|
// }
|
|||
|
|
// if (!empty($objDIds)) {
|
|||
|
|
// $whereObjects .= " AND id in (" . implode(',', $objDIds) . ")";
|
|||
|
|
// } else {
|
|||
|
|
// $whereObjects .= " AND id in (0)";
|
|||
|
|
// }
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
$this->set_user();
|
|||
|
|
$this->set_users_ids();
|
|||
|
|
|
|||
|
|
// if (!empty($whereObjects)) {
|
|||
|
|
// $complexIds = array();
|
|||
|
|
// $complexTotalObject = array();
|
|||
|
|
// $this->set_sphinx2();
|
|||
|
|
// $sql_obj = "SELECT * FROM objects WHERE archive=0 and complex_id > 0 and id_add_user in (" . implode(',', $this->userIds) . ") {$whereObjects} LIMIT 1000000 OPTION max_matches=1000000";
|
|||
|
|
// //echo $sql_obj;
|
|||
|
|
// $q_obj = $this->sphinx2->query($sql_obj, true);
|
|||
|
|
// while ($r_obj = $this->sphinx2->fetch_assoc($q_obj)) {
|
|||
|
|
// $complexIds[] = (int)$r_obj['complex_id'];
|
|||
|
|
// if (!isset($complexTotalObject[(int)$r_obj['complex_id']])) $complexTotalObject[(int)$r_obj['complex_id']] = 0;
|
|||
|
|
// $complexTotalObject[(int)$r_obj['complex_id']]++;
|
|||
|
|
// }
|
|||
|
|
// }
|
|||
|
|
|
|||
|
|
if (!empty($complexIds)) {
|
|||
|
|
$complexIds = array_unique($complexIds);
|
|||
|
|
$whereComplex .= " AND id in (" . implode(',', $complexIds) . ")";
|
|||
|
|
} else {
|
|||
|
|
if (!empty($whereObjects) || !empty($filter->complexes))
|
|||
|
|
$whereComplex .= " AND id in (-1)";
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
$limitSqlComolex = " limit 20";
|
|||
|
|
|
|||
|
|
if ($this->page > 0) {
|
|||
|
|
$limitSqlComolex = ' limit ' . ($this->page - 1) * $this->limit . ', ' . $this->limit;
|
|||
|
|
}
|
|||
|
|
$result = array();
|
|||
|
|
|
|||
|
|
$sql_total = "SELECT count(*) as total FROM complex_list
|
|||
|
|
WHERE agency_id={$this->user->agencyId}
|
|||
|
|
AND arhive = 0
|
|||
|
|
AND deleted = 0 {$whereComplex}
|
|||
|
|
";
|
|||
|
|
//echo $sql;
|
|||
|
|
$q_total = $this->db->query($sql_total);
|
|||
|
|
$result['total'] = (int)$this->db->fetch_assoc($q_total)['total'];
|
|||
|
|
|
|||
|
|
$sql = "SELECT * FROM complex_list WHERE agency_id={$this->user->agencyId} AND arhive = 0 AND deleted = 0 {$whereComplex} ORDER BY id DESC {$limitSqlComolex}";
|
|||
|
|
//echo $sql;
|
|||
|
|
$q = $this->db->query($sql);
|
|||
|
|
//$result['total'] = $this->db->num_rows($q);
|
|||
|
|
|
|||
|
|
|
|||
|
|
$result['allPages'] = ceil($result['total'] / $this->limit);
|
|||
|
|
$complex_ids = array();
|
|||
|
|
while ($r = $this->db->fetch_assoc($q)) {
|
|||
|
|
$objects_list = true;
|
|||
|
|
$complex_ids[] = $r['id'];
|
|||
|
|
if (isset($complexTotalObject[$r['id']])) $objects_list = false;
|
|||
|
|
$result['list']['complex_' . $r['id']] = $this->get_complex_one($r['id'], true, false);
|
|||
|
|
|
|||
|
|
if (!$objects_list) $result['list']['complex_' . $r['id']]['objects_total'] = $complexTotalObject[$r['id']];
|
|||
|
|
}
|
|||
|
|
$totalsHouse = array();
|
|||
|
|
if (!empty($complex_ids)) {
|
|||
|
|
$sql_houses = "SELECT count(*) as total, complex_id FROM complex_houses WHERE complex_id in (" . implode(',', $complex_ids) . ") AND deleted_at IS NULL group by complex_id";
|
|||
|
|
//echo $sql_houses;
|
|||
|
|
$q_houses = $this->db->query($sql_houses);
|
|||
|
|
while ($r_houses = $this->db->fetch_assoc($q_houses)) {
|
|||
|
|
$totalsHouse[$r_houses['complex_id']] = $r_houses['total'];
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
foreach ($complex_ids as $id_c) {
|
|||
|
|
if (isset($totalsHouse[$id_c])) {
|
|||
|
|
$result['list']['complex_' . $id_c]['houses_total'] = $totalsHouse[$id_c];
|
|||
|
|
} else {
|
|||
|
|
$result['list']['complex_' . $id_c]['houses_total'] = 0;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
$queryCountRooms = $this->db->query("SELECT SUM(cr.total_rooms) as total_rooms
|
|||
|
|
FROM (
|
|||
|
|
SELECT COUNT(cr.id) as total_rooms
|
|||
|
|
FROM complex_houses as ch
|
|||
|
|
LEFT JOIN complex_entrances ce ON ce.complex_house_id = ch.id
|
|||
|
|
LEFT JOIN complex_floors cf ON cf.complex_entrance_id = ce.id
|
|||
|
|
LEFT OUTER JOIN complex_rooms cr ON cr.floor_id = cf.id {$whereDecoration}
|
|||
|
|
WHERE ch.complex_id = {$id_c}
|
|||
|
|
GROUP BY ch.id
|
|||
|
|
) as cr");
|
|||
|
|
|
|||
|
|
$rowCount = $this->db->fetch_assoc($queryCountRooms);
|
|||
|
|
|
|||
|
|
$result['list']['complex_' . $id_c]['total_rooms'] = (int)$rowCount['total_rooms'];
|
|||
|
|
}
|
|||
|
|
return $result;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
*
|
|||
|
|
*/
|
|||
|
|
public function complex_add_object($complex_id, $object_id)
|
|||
|
|
{
|
|||
|
|
if ($complex_id > 0 && $object_id > 0) {
|
|||
|
|
|
|||
|
|
|
|||
|
|
$sql_complex = "SELECT id FROM complex_objects WHERE complex_id={$complex_id} AND object_id={$object_id}";
|
|||
|
|
$q_complex = $this->db->query($sql_complex);
|
|||
|
|
if ($this->db->num_rows($q_complex) == 0) {
|
|||
|
|
$this->db->query("INSERT INTO complex_objects SET complex_id={$complex_id}, object_id={$object_id}");
|
|||
|
|
$this->set_sphinx2();
|
|||
|
|
$sql = "UPDATE objects SET complex_id = $complex_id
|
|||
|
|
WHERE id = {$object_id}";
|
|||
|
|
|
|||
|
|
$this->sphinx2->query($sql, true);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
return 'done';
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
*
|
|||
|
|
*/
|
|||
|
|
|
|||
|
|
public function complex_archive($complex_id, $archive)
|
|||
|
|
{
|
|||
|
|
if ($archive) {
|
|||
|
|
$this->db->query("UPDATE complex_list SET arhive=1 WHERE id = {$complex_id}");
|
|||
|
|
} else {
|
|||
|
|
$this->db->query("UPDATE complex_list SET arhive=0 WHERE id = {$complex_id}");
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
return array('result' => 'done', 'complex_id' => $complex_id);;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
private function update_complex($complex_id, $fields, $table)
|
|||
|
|
{
|
|||
|
|
if ($table == 'complex_advert') {
|
|||
|
|
$sql = "SELECT id FROM {$table} WHERE complex_id = {$complex_id}";
|
|||
|
|
$q = $this->db->query($sql);
|
|||
|
|
if ($this->db->num_rows($q) == 0) {
|
|||
|
|
$sql_in = "INSERT INTO {$table} SET " . implode(',', $fields) . ", complex_id = {$complex_id}";
|
|||
|
|
} else {
|
|||
|
|
$sql_in = "UPDATE {$table} SET " . implode(',', $fields) . " WHERE complex_id = {$complex_id}";
|
|||
|
|
}
|
|||
|
|
// echo $sql_in;
|
|||
|
|
|
|||
|
|
$this->db->query($sql_in);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
*
|
|||
|
|
*/
|
|||
|
|
public function complex_advert($complex_id, $yes_no = 1)
|
|||
|
|
{
|
|||
|
|
$this->set_sphinx2();
|
|||
|
|
$obj_ids = array();
|
|||
|
|
$sql_complex_object = "SELECT * FROM complex_objects WHERE complex_id = {$complex_id}";
|
|||
|
|
$q_complex_object = $this->db->query($sql_complex_object);
|
|||
|
|
while ($complex_obj = $this->db->fetch_assoc($q_complex_object)) {
|
|||
|
|
$obj_ids[] = $complex_obj['object_id'];
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
$fields[] = "use_in_advert={$yes_no}";
|
|||
|
|
$this->update_complex($complex_id, $fields, 'complex_advert');
|
|||
|
|
|
|||
|
|
if (!empty($obj_ids) && $yes_no > 0) {
|
|||
|
|
$sql = "UPDATE objects SET archive = 0, use_in_advert=1, is_main = 0
|
|||
|
|
WHERE id in (" . implode(',', $obj_ids) . ")";
|
|||
|
|
$this->db->query($sql);
|
|||
|
|
|
|||
|
|
|
|||
|
|
//Запрос к сфинкс
|
|||
|
|
$sql = "UPDATE objects SET archive = 0, use_in_advert=1
|
|||
|
|
WHERE id in (" . implode(',', $obj_ids) . ")";
|
|||
|
|
|
|||
|
|
$this->sphinx2->query($sql, true);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if (!empty($obj_ids) && $yes_no == 0) {
|
|||
|
|
$sql = "UPDATE objects
|
|||
|
|
SET use_in_advert = 0,
|
|||
|
|
add_to_bn_feed = 0,
|
|||
|
|
add_to_yandex_feed = 0,
|
|||
|
|
add_to_domclick_feed = 0,
|
|||
|
|
add_to_avito_feed = 0,
|
|||
|
|
add_to_emls_feed = 0,
|
|||
|
|
add_to_cian_feed = 0,
|
|||
|
|
add_to_zipal = 0
|
|||
|
|
WHERE id in (" . implode(',', $obj_ids) . ")";
|
|||
|
|
$this->db->query($sql);
|
|||
|
|
|
|||
|
|
$sql_sph = "UPDATE objects
|
|||
|
|
SET use_in_advert = 0,
|
|||
|
|
add_to_bn_feed = 0,
|
|||
|
|
add_to_yandex_feed = 0,
|
|||
|
|
add_to_domclick_feed = 0,
|
|||
|
|
add_to_avito_feed = 0,
|
|||
|
|
add_to_emls_feed = 0,
|
|||
|
|
add_to_cian_feed = 0,
|
|||
|
|
add_to_zipal = 0
|
|||
|
|
WHERE id in (" . implode(',', $obj_ids) . ")";
|
|||
|
|
|
|||
|
|
$this->sphinx2->query($sql_sph, true);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* Отправка объектов в рекламу на площадки
|
|||
|
|
* @param int $complex_id id комплекса
|
|||
|
|
* @param int $yes_no вкл/выкл
|
|||
|
|
* @param string $type
|
|||
|
|
*/
|
|||
|
|
public function complex_advert_plases($complex_id, $yes_no, $type, $days)
|
|||
|
|
{
|
|||
|
|
if ($complex_id > 0) {
|
|||
|
|
$this->set_sphinx2();
|
|||
|
|
$feed = '';
|
|||
|
|
$stat_feed = '';
|
|||
|
|
$user_id = (int)$_SESSION['id'];
|
|||
|
|
|
|||
|
|
|
|||
|
|
switch ($type) {
|
|||
|
|
case 'COMPLEX_YANDEX_JW_FEED': {
|
|||
|
|
$feed = 'add_to_bn_feed';
|
|||
|
|
$stat_feed = 'YANDEX_JW_FEED';
|
|||
|
|
$del_query = 'use_in_advert = IF(
|
|||
|
|
add_to_yandex_feed = 0 AND
|
|||
|
|
add_to_domclick_feed = 0 AND
|
|||
|
|
add_to_avito_feed = 0 AND
|
|||
|
|
add_to_emls_feed = 0 AND
|
|||
|
|
add_to_cian_feed = 0 AND
|
|||
|
|
add_to_zipal = 0, 0, 1)';
|
|||
|
|
$del_query_sph = 'if(
|
|||
|
|
add_to_yandex_feed = 0 AND
|
|||
|
|
add_to_domclick_feed = 0 AND
|
|||
|
|
add_to_avito_feed = 0 AND
|
|||
|
|
add_to_emls_feed = 0 AND
|
|||
|
|
add_to_cian_feed = 0 AND
|
|||
|
|
add_to_zipal = 0, 0, 1)';
|
|||
|
|
$advert_stat = 'yandex';
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
case 'COMPLEX_EMLS_JW_FEED': {
|
|||
|
|
$feed = 'add_to_emls_feed';
|
|||
|
|
$stat_feed = 'EMLS_JW_FEED';
|
|||
|
|
$del_query = 'use_in_advert = IF(
|
|||
|
|
add_to_bn_feed = 0 AND
|
|||
|
|
add_to_yandex_feed = 0 AND
|
|||
|
|
add_to_domclick_feed = 0 AND
|
|||
|
|
add_to_avito_feed = 0 AND
|
|||
|
|
add_to_cian_feed = 0 AND
|
|||
|
|
add_to_zipal = 0, 0, 1)';
|
|||
|
|
$del_query_sph = 'if(
|
|||
|
|
add_to_bn_feed = 0 AND
|
|||
|
|
add_to_yandex_feed = 0 AND
|
|||
|
|
add_to_domclick_feed = 0 AND
|
|||
|
|
add_to_avito_feed = 0 AND
|
|||
|
|
add_to_cian_feed = 0 AND
|
|||
|
|
add_to_zipal = 0, 0, 1)';
|
|||
|
|
$advert_stat = '';
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
case 'COMPLEX_DOMCLICK_JW_FEED': {
|
|||
|
|
$feed = 'add_to_domclick_feed';
|
|||
|
|
$stat_feed = 'DOMCLICK_JW_FEED';
|
|||
|
|
$del_query = 'use_in_advert = IF(
|
|||
|
|
add_to_bn_feed = 0 AND
|
|||
|
|
add_to_yandex_feed = 0 AND
|
|||
|
|
add_to_cian_feed = 0 AND
|
|||
|
|
add_to_avito_feed = 0 AND
|
|||
|
|
add_to_emls_feed = 0 AND
|
|||
|
|
add_to_zipal = 0, 0, 1)';
|
|||
|
|
$del_query_sph = 'if(
|
|||
|
|
add_to_bn_feed = 0 AND
|
|||
|
|
add_to_yandex_feed = 0 AND
|
|||
|
|
add_to_cian_feed = 0 AND
|
|||
|
|
add_to_avito_feed = 0 AND
|
|||
|
|
add_to_emls_feed = 0 AND
|
|||
|
|
add_to_zipal = 0, 0, 1)';
|
|||
|
|
$advert_stat = 'domclick';
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
case 'COMPLEX_CIAN_JW_FEED': {
|
|||
|
|
$feed = 'add_to_cian_feed';
|
|||
|
|
$stat_feed = 'CIAN_JW_FEED';
|
|||
|
|
$del_query = 'use_in_advert = IF(
|
|||
|
|
add_to_bn_feed = 0 AND
|
|||
|
|
add_to_yandex_feed = 0 AND
|
|||
|
|
add_to_domclick_feed = 0 AND
|
|||
|
|
add_to_avito_feed = 0 AND
|
|||
|
|
add_to_emls_feed = 0 AND
|
|||
|
|
add_to_zipal = 0, 0, 1)';
|
|||
|
|
$del_query_sph = 'if(
|
|||
|
|
add_to_bn_feed = 0 AND
|
|||
|
|
add_to_yandex_feed = 0 AND
|
|||
|
|
add_to_domclick_feed = 0 AND
|
|||
|
|
add_to_avito_feed = 0 AND
|
|||
|
|
add_to_emls_feed = 0 AND
|
|||
|
|
add_to_zipal = 0, 0, 1)';
|
|||
|
|
$advert_stat = 'cian';
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
case 'COMPLEX_AVITO_JW_FEED': {
|
|||
|
|
$feed = 'add_to_avito_feed';
|
|||
|
|
$stat_feed = 'AVITO_JW_FEED';
|
|||
|
|
$del_query = 'use_in_advert = IF(
|
|||
|
|
add_to_bn_feed = 0 AND
|
|||
|
|
add_to_yandex_feed = 0 AND
|
|||
|
|
add_to_domclick_feed = 0 AND
|
|||
|
|
add_to_emls_feed = 0 AND
|
|||
|
|
add_to_cian_feed = 0 AND
|
|||
|
|
add_to_zipal = 0, 0, 1)';
|
|||
|
|
$del_query_sph = 'if(
|
|||
|
|
add_to_bn_feed = 0 AND
|
|||
|
|
add_to_yandex_feed = 0 AND
|
|||
|
|
add_to_domclick_feed = 0 AND
|
|||
|
|
add_to_emls_feed = 0 AND
|
|||
|
|
add_to_cian_feed = 0 AND
|
|||
|
|
add_to_zipal = 0, 0, 1)';
|
|||
|
|
$advert_stat = 'avito';
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
case 'COMPLEX_FREE_JW_FEED': {
|
|||
|
|
$feed = 'add_to_yandex_feed';
|
|||
|
|
$stat_feed = 'FREE_JW_FEED';
|
|||
|
|
$del_query = 'use_in_advert = IF(
|
|||
|
|
add_to_bn_feed = 0 AND
|
|||
|
|
add_to_domclick_feed = 0 AND
|
|||
|
|
add_to_avito_feed = 0 AND
|
|||
|
|
add_to_emls_feed = 0 AND
|
|||
|
|
add_to_cian_feed = 0 AND
|
|||
|
|
add_to_zipal = 0, 0, 1)';
|
|||
|
|
$del_query_sph = 'if(
|
|||
|
|
add_to_bn_feed = 0 AND
|
|||
|
|
add_to_domclick_feed = 0 AND
|
|||
|
|
add_to_avito_feed = 0 AND
|
|||
|
|
add_to_emls_feed = 0 AND
|
|||
|
|
add_to_cian_feed = 0 AND
|
|||
|
|
add_to_zipal = 0, 0, 1)';
|
|||
|
|
$advert_stat = 'yandex';
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
$obj_ids = array();
|
|||
|
|
$sql_complex_object = "SELECT * FROM complex_objects WHERE complex_id = {$complex_id}";
|
|||
|
|
$q_complex_object = $this->db->query($sql_complex_object);
|
|||
|
|
while ($complex_obj = $this->db->fetch_assoc($q_complex_object)) {
|
|||
|
|
$obj_ids[] = $complex_obj['object_id'];
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
$fields[] = "{$feed}={$yes_no}";
|
|||
|
|
$this->update_complex($complex_id, $fields, 'complex_advert');
|
|||
|
|
|
|||
|
|
$objData = array();
|
|||
|
|
|
|||
|
|
//Начитываем объекты
|
|||
|
|
$sqlObjData = "SELECT id, nazv, id_add_user from objects WHERE id in (" . implode(',', $obj_ids) . ")";
|
|||
|
|
$qObjData = $this->db->query($sqlObjData);
|
|||
|
|
while ($rObjData = $this->db->fetch_assoc($qObjData)) {
|
|||
|
|
$objData[$rObjData['id']] = $rObjData;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
if ($yes_no > 0) {
|
|||
|
|
$sql = "UPDATE objects SET use_in_advert = 1, {$feed} = {$yes_no}, is_main = 0 WHERE id in (" . implode(',', $obj_ids) . ")";
|
|||
|
|
$this->db->query($sql);
|
|||
|
|
$sql_sph = "UPDATE objects SET use_in_advert = 1, {$feed}={$yes_no} WHERE id in (" . implode(',', $obj_ids) . ")";
|
|||
|
|
$this->sphinx2->query($sql_sph, true);
|
|||
|
|
foreach ($obj_ids as $objId) {
|
|||
|
|
$sqlBaseStat = "INSERT INTO object_publish_statistic(object_id, user_owner_id, publish_user_id, created_at, publish_start_date, publish_end_date, days_count, destination, price)
|
|||
|
|
VALUES ({$objId}, '{$objData[$objId]['id_add_user']}', '$user_id', NOW(), NOW(), DATE_ADD(NOW(), INTERVAL $days DAY), '$days', '{$stat_feed}', '0')";
|
|||
|
|
//echo $sqlBaseStat;
|
|||
|
|
$this->db->query($sqlBaseStat);
|
|||
|
|
if (!empty($advert_stat)) {
|
|||
|
|
AdvertStats::cleanUpStats($advert_stat, $objId);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
} else {
|
|||
|
|
$sql = "UPDATE objects
|
|||
|
|
SET {$del_query},
|
|||
|
|
{$feed}='{$yes_no}',
|
|||
|
|
is_main = 0
|
|||
|
|
WHERE id in (" . implode(',', $obj_ids) . ")";
|
|||
|
|
$this->db->query($sql);
|
|||
|
|
/*$sql_sph_tmp = "SELECT {$del_query_sph} FROM objects WHERE id in (" . implode(',', $obj_ids) . ")";
|
|||
|
|
|
|||
|
|
$q_sph_tmp = $this->sphinx2->query($sql_sph_tmp);
|
|||
|
|
$use_in_advert = $this->sphinx2->result($q_sph_tmp);*/
|
|||
|
|
$sql_sph = "UPDATE objects
|
|||
|
|
SET
|
|||
|
|
{$feed}=$yes_no
|
|||
|
|
WHERE id in (" . implode(',', $obj_ids) . ")";
|
|||
|
|
$this->sphinx2->query($sql_sph, true);
|
|||
|
|
|
|||
|
|
//проставляем дату отмены в статистике
|
|||
|
|
$sqlUpdateStat = "UPDATE object_publish_statistic SET unpublish_user_id = '$user_id', publish_end_date = NOW(), days_count = DATEDIFF(NOW(), publish_start_date) WHERE object_id in (" . implode(',', $obj_ids) . ") AND destination = '{$stat_feed}' AND (publish_end_date IS NULL OR publish_end_date > NOW())";
|
|||
|
|
$this->db->query($sqlUpdateStat);
|
|||
|
|
if (!empty($advert_stat)) {
|
|||
|
|
foreach ($obj_ids as $objId) {
|
|||
|
|
|
|||
|
|
AdvertStats::cleanUpStats($advert_stat, $objId);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
public function get_all_houses() {
|
|||
|
|
$result = array();
|
|||
|
|
|
|||
|
|
$this->set_user();
|
|||
|
|
$this->set_users_ids();
|
|||
|
|
|
|||
|
|
// $imgR = $this->db->query("SELECT * from complex_house_images WHERE house_id = {$r['id']}");
|
|||
|
|
|
|||
|
|
$sql = "
|
|||
|
|
SELECT
|
|||
|
|
ch.id,
|
|||
|
|
ch.name,
|
|||
|
|
ch.development_end_quarter,
|
|||
|
|
ch.development_end_year,
|
|||
|
|
COUNT(cr.id) as total_rooms,
|
|||
|
|
MIN(cr.total_amount) as min_room_amount,
|
|||
|
|
complex_list.name as complex_name,
|
|||
|
|
complex_list.id as complex_id,
|
|||
|
|
complex_address.address as complex_address,
|
|||
|
|
chi.url as image_url
|
|||
|
|
FROM complex_houses as ch
|
|||
|
|
left JOIN complex_entrances ce ON ce.complex_house_id = ch.id
|
|||
|
|
left JOIN complex_floors cf ON cf.complex_entrance_id = ce.id
|
|||
|
|
LEFT OUTER JOIN complex_rooms cr ON cr.floor_id = cf.id
|
|||
|
|
JOIN complex_list on complex_list.id = ch.complex_id
|
|||
|
|
LEFT JOIN complex_address on complex_address.complex_id = complex_list.id
|
|||
|
|
LEFT JOIN complex_house_images chi ON chi.house_id = ch.id
|
|||
|
|
WHERE complex_list.agency_id={$this->user->agencyId}
|
|||
|
|
AND complex_list.arhive != 1
|
|||
|
|
AND ch.is_archive !=1
|
|||
|
|
AND (ch.deleted_at IS NULL OR ch.deleted_at = '0000-00-00 00:00:00')
|
|||
|
|
GROUP BY ch.id order by ch.id desc";
|
|||
|
|
|
|||
|
|
|
|||
|
|
$q = $this->db->query($sql);
|
|||
|
|
while ($r = $this->db->fetch_assoc($q)) {
|
|||
|
|
$result[] = $r;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
return $result;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
*
|
|||
|
|
*/
|
|||
|
|
public function get_houses($complex_id, $has_token = false, $filter = [])
|
|||
|
|
{
|
|||
|
|
$result = array();
|
|||
|
|
if ($complex_id > 0) {
|
|||
|
|
$name_complex = '';
|
|||
|
|
$sql_complex = "SELECT name FROM complex_list WHERE id = {$complex_id}";
|
|||
|
|
$q_complex = $this->db->query($sql_complex);
|
|||
|
|
$r_complex = $this->db->fetch_assoc($q_complex);
|
|||
|
|
if (isset($r_complex['name'])) {
|
|||
|
|
$name_complex = $r_complex['name'];
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if ($has_token) {
|
|||
|
|
if ($this->user->agencyId == 20382) {
|
|||
|
|
$filter_by_status = "";
|
|||
|
|
} else {
|
|||
|
|
$filter_by_status = "AND cs.status IN ('available', 'reservation')";
|
|||
|
|
}
|
|||
|
|
} else {
|
|||
|
|
$filter_by_status = "";
|
|||
|
|
}
|
|||
|
|
$whereHouse = '';
|
|||
|
|
if(!empty($filter->is_partner_show)){
|
|||
|
|
$whereHouse .= " AND ch.is_partner_show = 1 ";
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
$sql = "SELECT ch.*, COUNT(cr.id) as total_rooms FROM complex_houses as ch
|
|||
|
|
LEFT JOIN complex_entrances ce ON ce.complex_house_id = ch.id
|
|||
|
|
LEFT JOIN complex_floors cf ON cf.complex_entrance_id = ce.id
|
|||
|
|
LEFT JOIN complex_rooms cr ON cr.floor_id = cf.id
|
|||
|
|
LEFT JOIN complex_status cs ON cr.complex_status_id = cs.id AND cs.is_archive = 0
|
|||
|
|
WHERE ch.complex_id = {$complex_id} AND deleted_at IS NULL
|
|||
|
|
{$filter_by_status}
|
|||
|
|
{$whereHouse}
|
|||
|
|
GROUP BY ch.id
|
|||
|
|
ORDER BY ch.id DESC";
|
|||
|
|
|
|||
|
|
$q = $this->db->query($sql);
|
|||
|
|
while ($r = $this->db->fetch_assoc($q)) {
|
|||
|
|
$r['name_complex'] = $name_complex;
|
|||
|
|
$r['images'] = array();
|
|||
|
|
$r['floors'] = array();
|
|||
|
|
$r['rooms'] = array();
|
|||
|
|
|
|||
|
|
$imgR = $this->db->query("SELECT * from complex_house_images WHERE house_id = {$r['id']}");
|
|||
|
|
|
|||
|
|
$floorsQuery = $this->db
|
|||
|
|
->query("SELECT complex_floors.* from complex_floors
|
|||
|
|
LEFT JOIN complex_entrances ce ON complex_floors.complex_entrance_id = ce.id
|
|||
|
|
WHERE ce.complex_house_id = {$r['id']};");
|
|||
|
|
|
|||
|
|
$roomQuery = $this->db->query("
|
|||
|
|
SELECT complex_rooms.*, cs.status
|
|||
|
|
FROM complex_rooms
|
|||
|
|
LEFT JOIN complex_floors AS cf ON cf.id = complex_rooms.floor_id
|
|||
|
|
LEFT JOIN complex_entrances AS ce ON cf.complex_entrance_id = ce.id
|
|||
|
|
LEFT JOIN complex_status cs ON complex_rooms.complex_status_id = cs.id AND cs.is_archive = 0
|
|||
|
|
WHERE ce.complex_house_id = {$r['id']}
|
|||
|
|
{$filter_by_status};
|
|||
|
|
");
|
|||
|
|
|
|||
|
|
$min_total_amount = null;
|
|||
|
|
|
|||
|
|
while ($floor = $this->db->fetch_assoc($floorsQuery)) {
|
|||
|
|
$r['floors'][] = $floor;
|
|||
|
|
}
|
|||
|
|
while ($room = $this->db->fetch_assoc($roomQuery)) {
|
|||
|
|
if (in_array((string)$room['id'], $_SESSION['to_send_complexes'])) {
|
|||
|
|
$room['inPdf'] = true;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
$r['rooms'][] = $room;
|
|||
|
|
|
|||
|
|
// Вычисляем минимальную стоимость
|
|||
|
|
if ($room['total_amount'] !== null && $room['total_amount'] > 0) {
|
|||
|
|
if ($min_total_amount === null || $room['total_amount'] < $min_total_amount) {
|
|||
|
|
$min_total_amount = $room['total_amount'];
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
$r['min_total_amount'] = $min_total_amount;
|
|||
|
|
|
|||
|
|
while ($row = $this->db->fetch_assoc($imgR)) {
|
|||
|
|
$r['images'][] = $row;
|
|||
|
|
}
|
|||
|
|
$result[] = $r;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
return $result;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
*
|
|||
|
|
*/
|
|||
|
|
public function get_house_one($house_id)
|
|||
|
|
{
|
|||
|
|
$types_building = [
|
|||
|
|
'RESIDENTIAL' => 'Жилое',
|
|||
|
|
'PARKING' => 'Паркинг',
|
|||
|
|
'APARTMENT' => 'Апартаменты',
|
|||
|
|
'OFFICE' => 'Офисы'
|
|||
|
|
|
|||
|
|
];
|
|||
|
|
|
|||
|
|
$placement_types = [
|
|||
|
|
1 => 'Квартиры',
|
|||
|
|
2 => 'Комнаты',
|
|||
|
|
3 => 'Дома',
|
|||
|
|
4 => 'Коммерция',
|
|||
|
|
5 => 'Части домов',
|
|||
|
|
7 => 'Участки'
|
|||
|
|
|
|||
|
|
];
|
|||
|
|
|
|||
|
|
$time_to_subway = [
|
|||
|
|
1 => 'пешком',
|
|||
|
|
2 => 'на транспорте'
|
|||
|
|
];
|
|||
|
|
|
|||
|
|
$quarter_list = [
|
|||
|
|
1 => 'I квартал',
|
|||
|
|
2 => 'II квартал',
|
|||
|
|
3 => 'III квартал',
|
|||
|
|
4 => 'IV квартал',
|
|||
|
|
];
|
|||
|
|
|
|||
|
|
$month_list = [
|
|||
|
|
1 => 'Январь',
|
|||
|
|
2 => 'Февраль',
|
|||
|
|
3 => 'Март',
|
|||
|
|
4 => 'Апрель',
|
|||
|
|
5 => 'Май',
|
|||
|
|
6 => 'Июнь',
|
|||
|
|
7 => 'Июль',
|
|||
|
|
8 => 'Август',
|
|||
|
|
9 => 'Сентябрь',
|
|||
|
|
10 => 'Октябрь',
|
|||
|
|
11 => 'Ноябрь',
|
|||
|
|
12 => 'Декабрь',
|
|||
|
|
];
|
|||
|
|
|
|||
|
|
$status_corpus_list = [
|
|||
|
|
1 => 'Построен, но не сдан',
|
|||
|
|
2 => 'Cдан в эксплуатацию',
|
|||
|
|
3 => 'Cтроится',
|
|||
|
|
4 => 'Построен и сдан',
|
|||
|
|
];
|
|||
|
|
|
|||
|
|
$work_days = [
|
|||
|
|
1 => 'Понедельник',
|
|||
|
|
2 => 'Вторник',
|
|||
|
|
3 => 'Среда',
|
|||
|
|
4 => 'Четверг',
|
|||
|
|
5 => 'Пятница',
|
|||
|
|
6 => 'Суббота',
|
|||
|
|
7 => 'Воскресенье',
|
|||
|
|
];
|
|||
|
|
|
|||
|
|
$result = array();
|
|||
|
|
if ($house_id > 0) {
|
|||
|
|
$sql = "SELECT
|
|||
|
|
complex_houses.*,
|
|||
|
|
COUNT(DISTINCT c_rooms.id) AS rooms_count,
|
|||
|
|
COUNT(DISTINCT c_rooms_plans.id) AS rooms_count_where_has_plans,
|
|||
|
|
COUNT(DISTINCT c_floors.id) as floors_count,
|
|||
|
|
COUNT(DISTINCT c_floor_plans.floor_plan_id) as floors_plans_count_where_has_floor,
|
|||
|
|
COUNT(DISTINCT facades.id) as facades_count,
|
|||
|
|
COUNT(DISTINCT figures.floor_id) as figures_where_has_floor_count
|
|||
|
|
FROM
|
|||
|
|
complex_houses
|
|||
|
|
LEFT JOIN
|
|||
|
|
complex_entrances c_entrances ON c_entrances.complex_house_id = complex_houses.id
|
|||
|
|
LEFT JOIN
|
|||
|
|
complex_floors c_floors ON c_floors.complex_entrance_id = c_entrances.id
|
|||
|
|
LEFT JOIN
|
|||
|
|
complex_house_facades facades ON facades.house_id = complex_houses.id AND facades.is_published != 0
|
|||
|
|
LEFT JOIN
|
|||
|
|
complex_facade_figures figures ON figures.facade_id = facades.id
|
|||
|
|
LEFT JOIN
|
|||
|
|
complex_floors_plans c_floor_plans ON c_floor_plans.floor_id = c_floors.id
|
|||
|
|
LEFT JOIN
|
|||
|
|
complex_rooms c_rooms ON c_rooms.floor_id = c_floors.id
|
|||
|
|
LEFT JOIN
|
|||
|
|
complex_rooms_plans c_rooms_plans ON c_rooms_plans.room_id = c_rooms.id
|
|||
|
|
WHERE
|
|||
|
|
complex_houses.id = {$house_id} AND complex_houses.deleted_at IS NULL";
|
|||
|
|
|
|||
|
|
$q = $this->db->query($sql);
|
|||
|
|
$r = $this->db->fetch_assoc($q);
|
|||
|
|
|
|||
|
|
if (!$r) {
|
|||
|
|
return ['status' => false, 'message' => 'house not found'];
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
$r['type_building_text'] = '';
|
|||
|
|
if (isset($types_building[$r['type_building']])) $r['type_building_text'] = $types_building[$r['type_building']];
|
|||
|
|
$r['placement_type_text'] = '';
|
|||
|
|
if (isset($placement_types[$r['placement_type']])) $r['placement_type_text'] = $placement_types[$r['placement_type']];
|
|||
|
|
$r['status_corpus_text'] = '';
|
|||
|
|
if (isset($status_corpus_list[$r['status_corpus']])) $r['status_corpus_text'] = $status_corpus_list[$r['status_corpus']];
|
|||
|
|
$r['deadline'] = '';
|
|||
|
|
if (isset($quarter_list[$r['deadline_quarter']])) $r['deadline'] .= $quarter_list[$r['deadline_quarter']];
|
|||
|
|
$r['deadline'] .= ' ' . $r['deadline_year'];
|
|||
|
|
$r['development'] = '';
|
|||
|
|
if (isset($quarter_list[$r['development_start_quarter']])) {
|
|||
|
|
$r['development'] .= $quarter_list[$r['development_start_quarter']] . ' ' . $r['development_start_year'];
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if (isset($quarter_list[$r['development_end_quarter']])) {
|
|||
|
|
$r['development'] .= ' - ' . $quarter_list[$r['development_end_quarter']] . ' ' . $r['development_end_year'];
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
$result['house'] = $r;
|
|||
|
|
|
|||
|
|
$result['house']['images'] = array();
|
|||
|
|
|
|||
|
|
$imgR = $this->db->query("SELECT * from complex_house_images WHERE house_id = $house_id");
|
|||
|
|
|
|||
|
|
while ($row = $this->db->fetch_assoc($imgR)) {
|
|||
|
|
$result['house']['images'][] = $row;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
$utpR = $this->db->query("SELECT * FROM complex_house_UTP WHERE house_id = {$house_id}");
|
|||
|
|
$result['house']['utps'] = [];
|
|||
|
|
while ($row = $this->db->fetch_assoc($utpR)) {
|
|||
|
|
$result['house']['utps'][] = $row;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
$decR = $this->db->query("SELECT chd.*, dt.name as decoration_name FROM complex_house_decoration chd, decoration_types dt WHERE dt.id = chd.decoration_id AND house_id = {$house_id}");
|
|||
|
|
$result['house']['decorations'] = [];
|
|||
|
|
while ($row = $this->db->fetch_assoc($decR)) {
|
|||
|
|
$result['house']['decorations'][] = $row;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if ($r['complex_id'] > 0) {
|
|||
|
|
$complex = $this->get_complex_one($r['complex_id'], false, false);
|
|||
|
|
$result['complex'] = $complex;
|
|||
|
|
|
|||
|
|
if (isset($complex['metro']) && isset($complex['metro']['metro'])) {
|
|||
|
|
$result['house']['metro'] = $complex['metro']['metro'];
|
|||
|
|
} else {
|
|||
|
|
$result['house']['metro'] = [];
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
$installmentsResult = $this->db->query("
|
|||
|
|
SELECT
|
|||
|
|
i.id,
|
|||
|
|
i.name,
|
|||
|
|
i.type,
|
|||
|
|
i.description,
|
|||
|
|
i.initial_payment,
|
|||
|
|
i.payment_period,
|
|||
|
|
i.interest_rate,
|
|||
|
|
i.comment,
|
|||
|
|
chi.end_date
|
|||
|
|
FROM
|
|||
|
|
complex_house_installments chi
|
|||
|
|
LEFT JOIN
|
|||
|
|
installments i ON i.id = chi.installment_id
|
|||
|
|
WHERE
|
|||
|
|
chi.house_id = $house_id
|
|||
|
|
");
|
|||
|
|
|
|||
|
|
$result['house']['installments'] = [];
|
|||
|
|
while ($row = $this->db->fetch_assoc($installmentsResult)) {
|
|||
|
|
$result['house']['installments'][] = $row;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
return $result;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
public function get_house_plans($house_id, $has_token = false)
|
|||
|
|
{
|
|||
|
|
$result = array();
|
|||
|
|
|
|||
|
|
if ($house_id > 0) {
|
|||
|
|
$sql = "SELECT * FROM complex_house_plans WHERE house_id = {$house_id}";
|
|||
|
|
$q = $this->db->query($sql);
|
|||
|
|
while ($plan = $this->db->fetch_assoc($q)) {
|
|||
|
|
$images = $this->get_plans_images($plan['id']);
|
|||
|
|
$rooms = $this->get_plan_rooms($plan['id'], $has_token);
|
|||
|
|
$plan['images'] = $images;
|
|||
|
|
$plan['rooms'] = $rooms;
|
|||
|
|
|
|||
|
|
$result[] = $plan;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
return $result;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
public function get_entrances_floor_plans($house_id, $has_token = false)
|
|||
|
|
{
|
|||
|
|
$result = array();
|
|||
|
|
$sql = "SELECT DISTINCT entrances.*
|
|||
|
|
FROM complex_entrances as entrances
|
|||
|
|
JOIN complex_floors floors ON floors.complex_entrance_id = entrances.id
|
|||
|
|
JOIN complex_floors_plans floor_plan_link ON floor_plan_link.floor_id = floors.id
|
|||
|
|
JOIN complex_house_floor_plans floor_plans ON floor_plans.id = floor_plan_link.floor_plan_id
|
|||
|
|
WHERE entrances.complex_house_id = {$house_id}
|
|||
|
|
";
|
|||
|
|
// JOIN complex_floor_plan_figures figures ON figures.floor_plan_id = floor_plans.id
|
|||
|
|
// figures.room_plan_id IS NOT NULL AND
|
|||
|
|
|
|||
|
|
$res = $this->db->query($sql);
|
|||
|
|
|
|||
|
|
while ($entrance = $this->db->fetch_assoc($res)) {
|
|||
|
|
$sql_floors = "SELECT DISTINCT complex_floors.* from complex_floors
|
|||
|
|
JOIN complex_floors_plans floor_plan_link ON floor_plan_link.floor_id = complex_floors.id
|
|||
|
|
WHERE complex_entrance_id = {$entrance['id']}
|
|||
|
|
order by complex_floors.position
|
|||
|
|
";
|
|||
|
|
|
|||
|
|
$entrance['floors'] = [];
|
|||
|
|
|
|||
|
|
$r_floors = $this->db->query($sql_floors);
|
|||
|
|
|
|||
|
|
while ($floor = $this->db->fetch_assoc($r_floors)) {
|
|||
|
|
|
|||
|
|
$sql_plan_with_not_use_all = "SELECT plan.* FROM complex_house_floor_plans as plan
|
|||
|
|
JOIN complex_floors_plans floor_plan_link ON floor_plan_link.floor_plan_id = plan.id
|
|||
|
|
WHERE floor_plan_link.floor_id = {$floor['id']} AND plan.is_use_all_entrances != 1
|
|||
|
|
";
|
|||
|
|
|
|||
|
|
$sql_plan = "SELECT plan.* FROM complex_house_floor_plans as plan
|
|||
|
|
JOIN complex_floors_plans floor_plan_link ON floor_plan_link.floor_plan_id = plan.id
|
|||
|
|
WHERE floor_plan_link.floor_id = {$floor['id']}
|
|||
|
|
";
|
|||
|
|
|
|||
|
|
$floor['plan'] = [];
|
|||
|
|
|
|||
|
|
$r_plans = $this->db->query($sql_plan_with_not_use_all);
|
|||
|
|
|
|||
|
|
$plan = $this->db->fetch_assoc($r_plans);
|
|||
|
|
|
|||
|
|
if (!$plan) {
|
|||
|
|
$plan = $this->db->fetch_assoc($this->db->query($sql_plan));
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
$plan['entrances'] = json_decode($plan['entrances']);
|
|||
|
|
$plan['floor_positions'] = json_decode($plan['floor_positions']);
|
|||
|
|
$plan['is_use_all_entrances'] = (bool)$plan['is_use_all_entrances'];
|
|||
|
|
$plan['has_light_angle'] = (bool)$plan['has_light_angle'];
|
|||
|
|
$plan['figures'] = array();
|
|||
|
|
|
|||
|
|
$q = $this->db->query("SELECT DISTINCT figures.* FROM complex_floor_plan_figures as figures
|
|||
|
|
JOIN complex_floors on complex_floors.id = {$floor['id']}
|
|||
|
|
JOIN complex_rooms ON complex_rooms.floor_id = complex_floors.id
|
|||
|
|
JOIN complex_rooms_plans on complex_rooms_plans.plan_id = figures.room_plan_id AND complex_rooms_plans.room_id = complex_rooms.id
|
|||
|
|
WHERE figures.floor_plan_id = {$plan['id']} AND figures.room_plan_id IS NOT NULL");
|
|||
|
|
|
|||
|
|
$installment_plans = [];
|
|||
|
|
$installment_sql = "SELECT i.*,
|
|||
|
|
chi.end_date as house_installment_end_date
|
|||
|
|
FROM installments i
|
|||
|
|
INNER JOIN complex_house_installments chi ON chi.installment_id = i.id
|
|||
|
|
WHERE chi.house_id = {$house_id}
|
|||
|
|
AND i.is_archive = 0
|
|||
|
|
AND (chi.end_date IS NULL OR chi.end_date >= CURDATE())";
|
|||
|
|
|
|||
|
|
$installment_q = $this->db->query($installment_sql);
|
|||
|
|
while ($plan_installment = $this->db->fetch_assoc($installment_q)) {
|
|||
|
|
$installment_plans[] = [
|
|||
|
|
'id' => $plan_installment['id'],
|
|||
|
|
'name' => $plan_installment['name'],
|
|||
|
|
'description' => $plan_installment['description'],
|
|||
|
|
'type' => $plan_installment['type'],
|
|||
|
|
'initial_payment' => $plan_installment['initial_payment'],
|
|||
|
|
'payment_period' => json_decode($plan_installment['payment_period'], true),
|
|||
|
|
'allow_change_on_close' => $plan_installment['allow_change_on_close'],
|
|||
|
|
'interest_rate' => $plan_installment['interest_rate'],
|
|||
|
|
'comment' => $plan_installment['comment'],
|
|||
|
|
'house_installment_end_date' => $plan_installment['house_installment_end_date']
|
|||
|
|
];
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
while ($figure = $this->db->fetch_assoc($q)) {
|
|||
|
|
// $r_room = $this->db->query("SELECT DISTINCT rooms.* FROM complex_rooms as rooms
|
|||
|
|
// JOIN complex_rooms_plans as room_plan_link ON room_plan_link.room_id = rooms.id AND room_plan_link.plan_id = {$figure['room_plan_id']}
|
|||
|
|
// WHERE rooms.floor_id = {$floor['id']}
|
|||
|
|
// ");
|
|||
|
|
$r_room = $this->db->query("SELECT DISTINCT
|
|||
|
|
complex_rooms.*,
|
|||
|
|
c_house_p_i.url as plan_url,
|
|||
|
|
|
|||
|
|
cs.name as status_name,
|
|||
|
|
cs.status as status_type,
|
|||
|
|
cs.color as status_color,
|
|||
|
|
|
|||
|
|
ch.name as house_name,
|
|||
|
|
ch.parking as house_parking,
|
|||
|
|
ch.security as house_security,
|
|||
|
|
ch.fenced_area as house_fenced_area,
|
|||
|
|
ch.sports_ground as house_sports_ground,
|
|||
|
|
ch.play_ground as house_play_ground,
|
|||
|
|
ch.school as house_school,
|
|||
|
|
ch.kinder_garten as house_kinder_garten,
|
|||
|
|
ch.id as house_id,
|
|||
|
|
c_house_p.has_light_angle ,
|
|||
|
|
c_house_p.light_angle FROM complex_rooms
|
|||
|
|
|
|||
|
|
LEFT JOIN complex_rooms_plans c_room_p ON c_room_p.room_id = complex_rooms.id AND c_room_p.plan_id = {$figure['room_plan_id']}
|
|||
|
|
LEFT JOIN complex_house_plans_images c_house_p_i ON c_room_p.plan_id = c_house_p_i.plan_id AND c_house_p_i.position = 1
|
|||
|
|
LEFT JOIN complex_status cs ON complex_rooms.complex_status_id = cs.id and cs.is_archive = 0
|
|||
|
|
JOIN complex_houses ch on ch.id = {$house_id}
|
|||
|
|
LEFT JOIN complex_house_plans c_house_p ON c_room_p.plan_id = c_house_p.id
|
|||
|
|
WHERE complex_rooms.id=c_room_p.room_id AND complex_rooms.floor_id = {$floor['id']}
|
|||
|
|
ORDER BY complex_rooms.position
|
|||
|
|
");
|
|||
|
|
|
|||
|
|
$room = $this->db->fetch_assoc($r_room);
|
|||
|
|
|
|||
|
|
$reservations = $this->get_room_reservations($room['id']);
|
|||
|
|
unset($reservations['can_change_queue']);
|
|||
|
|
|
|||
|
|
$complex_status_info = [
|
|||
|
|
'status_name' => $room['status_name'],
|
|||
|
|
'status_type' => $room['status_type'],
|
|||
|
|
'status_color' => $room['status_color']
|
|||
|
|
];
|
|||
|
|
|
|||
|
|
if (!$has_token) {
|
|||
|
|
unset($room['status_name']);
|
|||
|
|
unset($room['status_type']);
|
|||
|
|
unset($room['status_color']);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if ($room['status_type'] != 'reservation' && is_array($reservations) && count($reservations))
|
|||
|
|
{
|
|||
|
|
$complex_status_info = [
|
|||
|
|
'status_name' => $reservations[0]['status_name'],
|
|||
|
|
'status_type' => $reservations[0]['status_type'],
|
|||
|
|
'status_color' => $reservations[0]['status_color'],
|
|||
|
|
];
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
$room['complex_status_info'] = $complex_status_info;
|
|||
|
|
|
|||
|
|
if (in_array((string)$room['id'], $_SESSION['to_send_complexes'])) {
|
|||
|
|
$room['inPdf'] = true;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
$room['installment_plans'] = $installment_plans;
|
|||
|
|
|
|||
|
|
$figure['room'] = $room ? $room : null;
|
|||
|
|
$figure['points'] = json_decode($figure['points']);
|
|||
|
|
$plan['figures'][] = $figure;
|
|||
|
|
}
|
|||
|
|
$floor['plan'] = $plan ? $plan : null;
|
|||
|
|
|
|||
|
|
// $row_floor['plan'] = $this->get_floor_plan($row_floor['id']);
|
|||
|
|
$entrance['floors'][] = $floor;
|
|||
|
|
}
|
|||
|
|
$result[] = $entrance;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
return $result;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
public function get_house_floors_plans($house_id)
|
|||
|
|
{
|
|||
|
|
$result = array();
|
|||
|
|
|
|||
|
|
if ($house_id > 0) {
|
|||
|
|
$sql = "SELECT * FROM complex_house_floor_plans WHERE house_id = {$house_id}";
|
|||
|
|
$q = $this->db->query($sql);
|
|||
|
|
while ($plan = $this->db->fetch_assoc($q)) {
|
|||
|
|
$floors = $this->get_plan_floors($plan['id']);
|
|||
|
|
$plan['floors'] = $floors;
|
|||
|
|
$plan['entrances'] = json_decode($plan['entrances']);
|
|||
|
|
$plan['floor_positions'] = json_decode($plan['floor_positions']);
|
|||
|
|
$result[] = $plan;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
return $result;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
public function get_floor_plan($floor_plan_id)
|
|||
|
|
{
|
|||
|
|
if ($floor_plan_id > 0) {
|
|||
|
|
$sql = "SELECT * FROM complex_house_floor_plans WHERE id = {$floor_plan_id}";
|
|||
|
|
$q = $this->db->query($sql);
|
|||
|
|
|
|||
|
|
$plan = $this->db->fetch_assoc($q);
|
|||
|
|
$plan['entrances'] = json_decode($plan['entrances']);
|
|||
|
|
$plan['floor_positions'] = json_decode($plan['floor_positions']);
|
|||
|
|
$plan['is_use_all_entrances'] = (bool)$plan['is_use_all_entrances'];
|
|||
|
|
$plan['has_light_angle'] = (bool)$plan['has_light_angle'];
|
|||
|
|
$plan['figures'] = array();
|
|||
|
|
|
|||
|
|
$q = $this->db->query("SELECT * FROM complex_floor_plan_figures WHERE floor_plan_id = {$plan['id']}");
|
|||
|
|
while ($row = $this->db->fetch_assoc($q)) {
|
|||
|
|
$row['points'] = json_decode($row['points']);
|
|||
|
|
$plan['figures'][] = $row;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
return $plan;
|
|||
|
|
}
|
|||
|
|
return ['status' => false];
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
public function save_document($blank_id, $req_id, $room,$user_id){
|
|||
|
|
|
|||
|
|
$room_array = json_decode(json_encode($room), true);
|
|||
|
|
$room_id = $room_array['id'] ;
|
|||
|
|
$q = $this->db->query("SELECT client_id, object_id FROM requisitions WHERE id = " . intval($req_id));
|
|||
|
|
$client = $this->db->fetch_assoc($q);
|
|||
|
|
$client_id = $client['client_id'];
|
|||
|
|
$document = Docs::fillInnerDocument($blank_id, $client_id,null,null,false,$room_array);
|
|||
|
|
$document_id = $document["doc_id"];
|
|||
|
|
$sql_insert = "
|
|||
|
|
INSERT INTO user_client_events (req_id, type, document_id, user_id)
|
|||
|
|
VALUES ($req_id, 'file', $document_id, $user_id)
|
|||
|
|
";
|
|||
|
|
$this->db->query($sql_insert);
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
public function updateRoomsPlanLink($plan_id, $room_ids = [])
|
|||
|
|
{
|
|||
|
|
// $plan_id, $room_ids
|
|||
|
|
if ($plan_id) {
|
|||
|
|
$sqlDelete = "DELETE FROM complex_rooms_plans WHERE plan_id = $plan_id";
|
|||
|
|
$q = $this->db->query($sqlDelete);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if (!empty($room_ids)) {
|
|||
|
|
$insertValue = array();
|
|||
|
|
|
|||
|
|
foreach ($room_ids as $room_id) {
|
|||
|
|
$insertValue[] = "($plan_id, $room_id)";
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
$insertValueStr = implode(', ', $insertValue);
|
|||
|
|
|
|||
|
|
$sqlAddRooms = "INSERT INTO complex_rooms_plans (plan_id, room_id) VALUES {$insertValueStr}";
|
|||
|
|
|
|||
|
|
$q = $this->db->query($sqlAddRooms);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
return $this->get_plan_rooms($plan_id);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
public function change_rooms_price_by_square($value, $room_ids, $type, $operation_type) {
|
|||
|
|
foreach ($room_ids as $id) {
|
|||
|
|
if (!is_numeric($id)) continue;
|
|||
|
|
|
|||
|
|
$q = $this->db->query("SELECT id, $operation_type, area FROM complex_rooms WHERE id = {$id}");
|
|||
|
|
$room = $this->db->fetch_assoc($q);
|
|||
|
|
|
|||
|
|
if (!$room || $room['area'] == 0) continue;
|
|||
|
|
|
|||
|
|
$unitPrice = $room[$operation_type] / $room['area'];
|
|||
|
|
|
|||
|
|
switch ($type) {
|
|||
|
|
case 'change_by_value':
|
|||
|
|
$unitPrice = $value;
|
|||
|
|
break;
|
|||
|
|
case 'up_by_percent':
|
|||
|
|
$unitPrice += $unitPrice * ($value / 100);
|
|||
|
|
break;
|
|||
|
|
case 'down_by_percent':
|
|||
|
|
$unitPrice -= $unitPrice * ($value / 100);
|
|||
|
|
break;
|
|||
|
|
case 'up_by_value':
|
|||
|
|
$unitPrice += $value;
|
|||
|
|
break;
|
|||
|
|
case 'down_by_value':
|
|||
|
|
$unitPrice -= $value;
|
|||
|
|
break;
|
|||
|
|
default:
|
|||
|
|
return ['status' => false];
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
$newTotal = $unitPrice * $room['area'];
|
|||
|
|
|
|||
|
|
$sql = "UPDATE complex_rooms SET $operation_type = {$newTotal} WHERE id = {$id}";
|
|||
|
|
$this->db->query($sql);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
return ['status' => true];
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
public function change_rooms_price($value, $room_ids, $type, $operation_type) {
|
|||
|
|
|
|||
|
|
if ($type === 'change_by_value') {
|
|||
|
|
foreach ($room_ids as $id) {
|
|||
|
|
if (is_numeric($id)) {
|
|||
|
|
$sqlAddRooms = "UPDATE complex_rooms SET $operation_type = {$value} WHERE id = {$id}";
|
|||
|
|
$this->db->query($sqlAddRooms);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
return ['status' => true];
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if ($type === 'up_by_percent') {
|
|||
|
|
foreach ($room_ids as $id) {
|
|||
|
|
if (is_numeric($id)) {
|
|||
|
|
$q = $this->db->query("SELECT id, $operation_type FROM complex_rooms WHERE id = {$id}");
|
|||
|
|
$room = $this->db->fetch_assoc($q);
|
|||
|
|
$newPrice = $room[$operation_type] + ($room[$operation_type] * ($value/100));
|
|||
|
|
|
|||
|
|
$sqlAddRooms = "UPDATE complex_rooms SET $operation_type = {$newPrice} WHERE id = {$id}";
|
|||
|
|
$this->db->query($sqlAddRooms);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
return ['status' => true];
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if ($type === 'down_by_percent') {
|
|||
|
|
foreach ($room_ids as $id) {
|
|||
|
|
if (is_numeric($id)) {
|
|||
|
|
$q = $this->db->query("SELECT id, $operation_type FROM complex_rooms WHERE id = {$id}");
|
|||
|
|
$room = $this->db->fetch_assoc($q);
|
|||
|
|
|
|||
|
|
$newPrice = $room[$operation_type] - ($room[$operation_type] * ($value/100));
|
|||
|
|
|
|||
|
|
$sqlAddRooms = "UPDATE complex_rooms SET $operation_type = {$newPrice} WHERE id = {$id}";
|
|||
|
|
$this->db->query($sqlAddRooms);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
return ['status' => true];
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if ($type === 'down_by_value') {
|
|||
|
|
foreach ($room_ids as $id) {
|
|||
|
|
if (is_numeric($id)) {
|
|||
|
|
$q = $this->db->query("SELECT id, $operation_type FROM complex_rooms WHERE id = {$id}");
|
|||
|
|
$room = $this->db->fetch_assoc($q);
|
|||
|
|
|
|||
|
|
$newPrice = $room[$operation_type] - $value;
|
|||
|
|
|
|||
|
|
$sqlAddRooms = "UPDATE complex_rooms SET $operation_type = {$newPrice} WHERE id = {$id}";
|
|||
|
|
$this->db->query($sqlAddRooms);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
return ['status' => true];
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if ($type === 'up_by_value') {
|
|||
|
|
foreach ($room_ids as $id) {
|
|||
|
|
if (is_numeric($id)) {
|
|||
|
|
$q = $this->db->query("SELECT id, $operation_type FROM complex_rooms WHERE id = {$id}");
|
|||
|
|
$room = $this->db->fetch_assoc($q);
|
|||
|
|
|
|||
|
|
$newPrice = $room[$operation_type]+ $value;
|
|||
|
|
|
|||
|
|
$sqlAddRooms = "UPDATE complex_rooms SET $operation_type = {$newPrice} WHERE id = {$id}";
|
|||
|
|
$this->db->query($sqlAddRooms);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
return ['status' => true];
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
return ['status' => false];
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
public function send_rooms_to_advert($house_id, $room_ids, $type) {
|
|||
|
|
if ($type === 'domclick') {
|
|||
|
|
$roomsInAdvert = [];
|
|||
|
|
//ищем все помещения, которые уже размещены
|
|||
|
|
$rooms_sql = "SELECT complex_rooms.id
|
|||
|
|
FROM complex_rooms
|
|||
|
|
LEFT JOIN complex_room_advert cra ON cra.complex_room_id = complex_rooms.id
|
|||
|
|
LEFT JOIN complex_floors cf ON cf.id = complex_rooms.floor_id
|
|||
|
|
LEFT JOIN complex_entrances ce ON ce.id = cf.complex_entrance_id
|
|||
|
|
LEFT JOIN complex_houses ch ON ch.id = ce.complex_house_id
|
|||
|
|
WHERE ce.complex_house_id = {$house_id} and cra.add_to_domclick_feed = 1
|
|||
|
|
GROUP BY complex_rooms.id
|
|||
|
|
ORDER BY complex_rooms.position";
|
|||
|
|
|
|||
|
|
$rooms_q = $this->db->query($rooms_sql);
|
|||
|
|
|
|||
|
|
while ($room = $this->db->fetch_assoc($rooms_q)) {
|
|||
|
|
$roomsInAdvert[] = $room['id'];
|
|||
|
|
}
|
|||
|
|
//размещаем выбранные помещения в рекламу
|
|||
|
|
foreach ($room_ids as $id) {
|
|||
|
|
$sql_adv = "SELECT id FROM complex_room_advert WHERE complex_room_id={$id}";
|
|||
|
|
$q_adv = $this->db->query($sql_adv);
|
|||
|
|
if ($this->db->num_rows($q_adv) == 0) {
|
|||
|
|
$sqlAddRooms = "INSERT INTO complex_room_advert (complex_room_id, add_to_domclick_feed) VALUES ({$id}, 1)";
|
|||
|
|
$this->db->query($sqlAddRooms);
|
|||
|
|
} else {
|
|||
|
|
$sqlAddRooms = "UPDATE complex_room_advert SET add_to_domclick_feed = 1 WHERE complex_room_id = {$id}";
|
|||
|
|
$this->db->query($sqlAddRooms);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//удаляем из массива уже размещенных
|
|||
|
|
$key = array_search($id, $roomsInAdvert);
|
|||
|
|
if ($key !== false) {
|
|||
|
|
unset($roomsInAdvert[$key]);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
//снимаем с рекламы то, что было в БД, но снято
|
|||
|
|
foreach ($roomsInAdvert as $id) {
|
|||
|
|
$sqlAddRooms = "UPDATE complex_room_advert SET add_to_domclick_feed = 0 WHERE complex_room_id = {$id}";
|
|||
|
|
$this->db->query($sqlAddRooms);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
if ($type === 'avito') {
|
|||
|
|
$roomsInAdvert = [];
|
|||
|
|
//ищем все помещения, которые уже размещены
|
|||
|
|
$rooms_sql = "SELECT complex_rooms.id
|
|||
|
|
FROM complex_rooms
|
|||
|
|
LEFT JOIN complex_room_advert cra ON cra.complex_room_id = complex_rooms.id
|
|||
|
|
LEFT JOIN complex_floors cf ON cf.id = complex_rooms.floor_id
|
|||
|
|
LEFT JOIN complex_entrances ce ON ce.id = cf.complex_entrance_id
|
|||
|
|
LEFT JOIN complex_houses ch ON ch.id = ce.complex_house_id
|
|||
|
|
WHERE ce.complex_house_id = {$house_id} and cra.add_to_avito_feed = 1
|
|||
|
|
GROUP BY complex_rooms.id
|
|||
|
|
ORDER BY complex_rooms.position";
|
|||
|
|
|
|||
|
|
$rooms_q = $this->db->query($rooms_sql);
|
|||
|
|
|
|||
|
|
while ($room = $this->db->fetch_assoc($rooms_q)) {
|
|||
|
|
$roomsInAdvert[] = $room['id'];
|
|||
|
|
}
|
|||
|
|
//размещаем выбранные помещения в рекламу
|
|||
|
|
foreach ($room_ids as $id) {
|
|||
|
|
$sql_adv = "SELECT id FROM complex_room_advert WHERE complex_room_id={$id}";
|
|||
|
|
$q_adv = $this->db->query($sql_adv);
|
|||
|
|
if ($this->db->num_rows($q_adv) == 0) {
|
|||
|
|
$sqlAddRooms = "INSERT INTO complex_room_advert (complex_room_id, add_to_avito_feed) VALUES ({$id}, 1)";
|
|||
|
|
$this->db->query($sqlAddRooms);
|
|||
|
|
} else {
|
|||
|
|
$sqlAddRooms = "UPDATE complex_room_advert SET add_to_avito_feed = 1 WHERE complex_room_id = {$id}";
|
|||
|
|
$this->db->query($sqlAddRooms);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//удаляем из массива уже размещенных
|
|||
|
|
$key = array_search($id, $roomsInAdvert);
|
|||
|
|
if ($key !== false) {
|
|||
|
|
unset($roomsInAdvert[$key]);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
//снимаем с рекламы то, что было в БД, но снято
|
|||
|
|
foreach ($roomsInAdvert as $id) {
|
|||
|
|
$sqlAddRooms = "UPDATE complex_room_advert SET add_to_avito_feed = 0 WHERE complex_room_id = {$id}";
|
|||
|
|
$this->db->query($sqlAddRooms);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
if ($type === 'cian') {
|
|||
|
|
$roomsInAdvert = [];
|
|||
|
|
//ищем все помещения, которые уже размещены
|
|||
|
|
$rooms_sql = "SELECT complex_rooms.id
|
|||
|
|
FROM complex_rooms
|
|||
|
|
LEFT JOIN complex_room_advert cra ON cra.complex_room_id = complex_rooms.id
|
|||
|
|
LEFT JOIN complex_floors cf ON cf.id = complex_rooms.floor_id
|
|||
|
|
LEFT JOIN complex_entrances ce ON ce.id = cf.complex_entrance_id
|
|||
|
|
LEFT JOIN complex_houses ch ON ch.id = ce.complex_house_id
|
|||
|
|
WHERE ce.complex_house_id = {$house_id} and cra.add_to_cian_feed = 1
|
|||
|
|
GROUP BY complex_rooms.id
|
|||
|
|
ORDER BY complex_rooms.position";
|
|||
|
|
|
|||
|
|
$rooms_q = $this->db->query($rooms_sql);
|
|||
|
|
|
|||
|
|
while ($room = $this->db->fetch_assoc($rooms_q)) {
|
|||
|
|
$roomsInAdvert[] = $room['id'];
|
|||
|
|
}
|
|||
|
|
//размещаем выбранные помещения в рекламу
|
|||
|
|
foreach ($room_ids as $id) {
|
|||
|
|
$sql_adv = "SELECT id FROM complex_room_advert WHERE complex_room_id={$id}";
|
|||
|
|
$q_adv = $this->db->query($sql_adv);
|
|||
|
|
if ($this->db->num_rows($q_adv) == 0) {
|
|||
|
|
$sqlAddRooms = "INSERT INTO complex_room_advert (complex_room_id, add_to_cian_feed) VALUES ({$id}, 1)";
|
|||
|
|
$this->db->query($sqlAddRooms);
|
|||
|
|
} else {
|
|||
|
|
$sqlAddRooms = "UPDATE complex_room_advert SET add_to_cian_feed = 1 WHERE complex_room_id = {$id}";
|
|||
|
|
$this->db->query($sqlAddRooms);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//удаляем из массива уже размещенных
|
|||
|
|
$key = array_search($id, $roomsInAdvert);
|
|||
|
|
if ($key !== false) {
|
|||
|
|
unset($roomsInAdvert[$key]);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
//снимаем с рекламы то, что было в БД, но снято
|
|||
|
|
foreach ($roomsInAdvert as $id) {
|
|||
|
|
$sqlAddRooms = "UPDATE complex_room_advert SET add_to_cian_feed = 0 WHERE complex_room_id = {$id}";
|
|||
|
|
$this->db->query($sqlAddRooms);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
if ($type === 'ya') {
|
|||
|
|
$roomsInAdvert = [];
|
|||
|
|
//ищем все помещения, которые уже размещены
|
|||
|
|
$rooms_sql = "SELECT complex_rooms.id
|
|||
|
|
FROM complex_rooms
|
|||
|
|
LEFT JOIN complex_room_advert cra ON cra.complex_room_id = complex_rooms.id
|
|||
|
|
LEFT JOIN complex_floors cf ON cf.id = complex_rooms.floor_id
|
|||
|
|
LEFT JOIN complex_entrances ce ON ce.id = cf.complex_entrance_id
|
|||
|
|
LEFT JOIN complex_houses ch ON ch.id = ce.complex_house_id
|
|||
|
|
WHERE ce.complex_house_id = {$house_id} and cra.add_to_yandex_feed = 1
|
|||
|
|
GROUP BY complex_rooms.id
|
|||
|
|
ORDER BY complex_rooms.position";
|
|||
|
|
|
|||
|
|
$rooms_q = $this->db->query($rooms_sql);
|
|||
|
|
|
|||
|
|
while ($room = $this->db->fetch_assoc($rooms_q)) {
|
|||
|
|
$roomsInAdvert[] = $room['id'];
|
|||
|
|
}
|
|||
|
|
//размещаем выбранные помещения в рекламу
|
|||
|
|
foreach ($room_ids as $id) {
|
|||
|
|
$sql_adv = "SELECT id FROM complex_room_advert WHERE complex_room_id={$id}";
|
|||
|
|
$q_adv = $this->db->query($sql_adv);
|
|||
|
|
if ($this->db->num_rows($q_adv) == 0) {
|
|||
|
|
$sqlAddRooms = "INSERT INTO complex_room_advert (complex_room_id, add_to_yandex_feed) VALUES ({$id}, 1)";
|
|||
|
|
$this->db->query($sqlAddRooms);
|
|||
|
|
} else {
|
|||
|
|
$sqlAddRooms = "UPDATE complex_room_advert SET add_to_yandex_feed = 1 WHERE complex_room_id = {$id}";
|
|||
|
|
$this->db->query($sqlAddRooms);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//удаляем из массива уже размещенных
|
|||
|
|
$key = array_search($id, $roomsInAdvert);
|
|||
|
|
if ($key !== false) {
|
|||
|
|
unset($roomsInAdvert[$key]);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
//снимаем с рекламы то, что было в БД, но снято
|
|||
|
|
foreach ($roomsInAdvert as $id) {
|
|||
|
|
$sqlAddRooms = "UPDATE complex_room_advert SET add_to_yandex_feed = 0 WHERE complex_room_id = {$id}";
|
|||
|
|
$this->db->query($sqlAddRooms);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
if ($type === 'domrf') {
|
|||
|
|
$roomsInAdvert = [];
|
|||
|
|
//ищем все помещения, которые уже размещены
|
|||
|
|
$rooms_sql = "SELECT complex_rooms.id
|
|||
|
|
FROM complex_rooms
|
|||
|
|
LEFT JOIN complex_room_advert cra ON cra.complex_room_id = complex_rooms.id
|
|||
|
|
LEFT JOIN complex_floors cf ON cf.id = complex_rooms.floor_id
|
|||
|
|
LEFT JOIN complex_entrances ce ON ce.id = cf.complex_entrance_id
|
|||
|
|
LEFT JOIN complex_houses ch ON ch.id = ce.complex_house_id
|
|||
|
|
WHERE ce.complex_house_id = {$house_id} and cra.add_to_domrf_feed = 1
|
|||
|
|
GROUP BY complex_rooms.id
|
|||
|
|
ORDER BY complex_rooms.position";
|
|||
|
|
|
|||
|
|
$rooms_q = $this->db->query($rooms_sql);
|
|||
|
|
|
|||
|
|
while ($room = $this->db->fetch_assoc($rooms_q)) {
|
|||
|
|
$roomsInAdvert[] = $room['id'];
|
|||
|
|
}
|
|||
|
|
//размещаем выбранные помещения в рекламу
|
|||
|
|
foreach ($room_ids as $id) {
|
|||
|
|
$sql_adv = "SELECT id FROM complex_room_advert WHERE complex_room_id={$id}";
|
|||
|
|
$q_adv = $this->db->query($sql_adv);
|
|||
|
|
if ($this->db->num_rows($q_adv) == 0) {
|
|||
|
|
$sqlAddRooms = "INSERT INTO complex_room_advert (complex_room_id, add_to_domrf_feed) VALUES ({$id}, 1)";
|
|||
|
|
$this->db->query($sqlAddRooms);
|
|||
|
|
} else {
|
|||
|
|
$sqlAddRooms = "UPDATE complex_room_advert SET add_to_domrf_feed = 1 WHERE complex_room_id = {$id}";
|
|||
|
|
$this->db->query($sqlAddRooms);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//удаляем из массива уже размещенных
|
|||
|
|
$key = array_search($id, $roomsInAdvert);
|
|||
|
|
if ($key !== false) {
|
|||
|
|
unset($roomsInAdvert[$key]);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
//снимаем с рекламы то, что было в БД, но снято
|
|||
|
|
foreach ($roomsInAdvert as $id) {
|
|||
|
|
$sqlAddRooms = "UPDATE complex_room_advert SET add_to_domrf_feed = 0 WHERE complex_room_id = {$id}";
|
|||
|
|
$this->db->query($sqlAddRooms);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
if ($type === 'site') {
|
|||
|
|
$roomsInAdvert = [];
|
|||
|
|
//ищем все помещения, которые уже размещены
|
|||
|
|
$rooms_sql = "SELECT complex_rooms.id
|
|||
|
|
FROM complex_rooms
|
|||
|
|
LEFT JOIN complex_room_advert cra ON cra.complex_room_id = complex_rooms.id
|
|||
|
|
LEFT JOIN complex_floors cf ON cf.id = complex_rooms.floor_id
|
|||
|
|
LEFT JOIN complex_entrances ce ON ce.id = cf.complex_entrance_id
|
|||
|
|
LEFT JOIN complex_houses ch ON ch.id = ce.complex_house_id
|
|||
|
|
WHERE ce.complex_house_id = {$house_id} and cra.add_to_site_feed = 1
|
|||
|
|
GROUP BY complex_rooms.id
|
|||
|
|
ORDER BY complex_rooms.position";
|
|||
|
|
|
|||
|
|
$rooms_q = $this->db->query($rooms_sql);
|
|||
|
|
|
|||
|
|
while ($room = $this->db->fetch_assoc($rooms_q)) {
|
|||
|
|
$roomsInAdvert[] = $room['id'];
|
|||
|
|
}
|
|||
|
|
//размещаем выбранные помещения в рекламу
|
|||
|
|
foreach ($room_ids as $id) {
|
|||
|
|
$sql_adv = "SELECT id FROM complex_room_advert WHERE complex_room_id={$id}";
|
|||
|
|
$q_adv = $this->db->query($sql_adv);
|
|||
|
|
if ($this->db->num_rows($q_adv) == 0) {
|
|||
|
|
$sqlAddRooms = "INSERT INTO complex_room_advert (complex_room_id, add_to_site_feed) VALUES ({$id}, 1)";
|
|||
|
|
$this->db->query($sqlAddRooms);
|
|||
|
|
} else {
|
|||
|
|
$sqlAddRooms = "UPDATE complex_room_advert SET add_to_site_feed = 1 WHERE complex_room_id = {$id}";
|
|||
|
|
$this->db->query($sqlAddRooms);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//удаляем из массива уже размещенных
|
|||
|
|
$key = array_search($id, $roomsInAdvert);
|
|||
|
|
if ($key !== false) {
|
|||
|
|
unset($roomsInAdvert[$key]);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
//снимаем с рекламы то, что было в БД, но снято
|
|||
|
|
foreach ($roomsInAdvert as $id) {
|
|||
|
|
$sqlAddRooms = "UPDATE complex_room_advert SET add_to_site_feed = 0 WHERE complex_room_id = {$id}";
|
|||
|
|
$this->db->query($sqlAddRooms);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
public function get_plan_floors($floor_plan_id)
|
|||
|
|
{
|
|||
|
|
$result = array();
|
|||
|
|
if ($floor_plan_id > 0) {
|
|||
|
|
$sql = "SELECT floor.* FROM complex_floors as floor
|
|||
|
|
JOIN complex_floors_plans floors_plans on floors_plans.floor_id = floor.id
|
|||
|
|
WHERE floors_plans.floor_plan_id = {$floor_plan_id}
|
|||
|
|
";
|
|||
|
|
$q = $this->db->query($sql);
|
|||
|
|
while ($floor = $this->db->fetch_assoc($q)) {
|
|||
|
|
$result[] = $floor;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
return $result;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
public function get_house_facades($house_id, $includes = [])
|
|||
|
|
{
|
|||
|
|
$result = array();
|
|||
|
|
$usePublished = in_array('not_published', $includes);
|
|||
|
|
if ($house_id > 0) {
|
|||
|
|
if ($usePublished) {
|
|||
|
|
$sql = "SELECT * FROM complex_house_facades WHERE house_id = {$house_id}";
|
|||
|
|
} else {
|
|||
|
|
$sql = "SELECT * FROM complex_house_facades WHERE house_id = {$house_id} AND is_published != 0 ";
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
$q = $this->db->query($sql);
|
|||
|
|
|
|||
|
|
while ($facade = $this->db->fetch_assoc($q)) {
|
|||
|
|
$facade['figures'] = $this->getFacadeFigures($house_id, $facade['id'], $includes);
|
|||
|
|
$facade['is_published'] = (bool) $facade['is_published'];
|
|||
|
|
$result[] = $facade;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
return $result;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
public function getFacadeFigures($house_id, $facade_id, $includes = [])
|
|||
|
|
{
|
|||
|
|
$result = array();
|
|||
|
|
$useRooms = in_array('rooms', $includes);
|
|||
|
|
$useFloor = in_array('floor', $includes);
|
|||
|
|
$useEntrance = in_array('entrance', $includes);
|
|||
|
|
|
|||
|
|
if ($facade_id > 0) {
|
|||
|
|
$sql = "SELECT * FROM complex_facade_figures WHERE facade_id = {$facade_id}";
|
|||
|
|
$q = $this->db->query($sql);
|
|||
|
|
|
|||
|
|
// Installment plans: fetch once by house_id
|
|||
|
|
$installment_plans = [];
|
|||
|
|
$installment_sql = "SELECT i.*, chi.end_date as house_installment_end_date
|
|||
|
|
FROM installments i
|
|||
|
|
INNER JOIN complex_house_installments chi ON chi.installment_id = i.id
|
|||
|
|
WHERE chi.house_id = {$house_id}
|
|||
|
|
AND i.is_archive = 0
|
|||
|
|
AND (chi.end_date IS NULL OR chi.end_date >= CURDATE())";
|
|||
|
|
$installment_q = $this->db->query($installment_sql);
|
|||
|
|
while ($plan = $this->db->fetch_assoc($installment_q)) {
|
|||
|
|
$installment_plans[] = [
|
|||
|
|
'id' => $plan['id'],
|
|||
|
|
'name' => $plan['name'],
|
|||
|
|
'description' => $plan['description'],
|
|||
|
|
'type' => $plan['type'],
|
|||
|
|
'initial_payment' => $plan['initial_payment'],
|
|||
|
|
'payment_period' => json_decode($plan['payment_period'], true),
|
|||
|
|
'allow_change_on_close' => $plan['allow_change_on_close'],
|
|||
|
|
'interest_rate' => $plan['interest_rate'],
|
|||
|
|
'comment' => $plan['comment'],
|
|||
|
|
'house_installment_end_date' => $plan['house_installment_end_date']
|
|||
|
|
];
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
while ($figure = $this->db->fetch_assoc($q)) {
|
|||
|
|
$figure['points'] = json_decode($figure['points']);
|
|||
|
|
if ($useRooms) {
|
|||
|
|
$figure['rooms'] = [];
|
|||
|
|
|
|||
|
|
if ($figure['floor_id'] && $figure['entrance_id']) {
|
|||
|
|
$sqlRooms = "SELECT
|
|||
|
|
complex_rooms.id,
|
|||
|
|
complex_rooms.number,
|
|||
|
|
complex_rooms.area,
|
|||
|
|
complex_rooms.kitchen_area,
|
|||
|
|
complex_rooms.total_amount,
|
|||
|
|
complex_rooms.installment_price,
|
|||
|
|
complex_rooms.rooms_count,
|
|||
|
|
complex_rooms.layout_feature,
|
|||
|
|
complex_rooms.decoration_id,
|
|||
|
|
complex_rooms.windows_placement_id,
|
|||
|
|
complex_rooms.ceiling_height,
|
|||
|
|
complex_rooms.payment_types,
|
|||
|
|
|
|||
|
|
MIN(complex_rooms.position) AS position,
|
|||
|
|
MIN(complex_floors.position) AS floor,
|
|||
|
|
complex_entrances.name AS entrance_name,
|
|||
|
|
MIN(c_house_p_i.url) AS plan_url,
|
|||
|
|
|
|||
|
|
MIN(cs.name) AS status_name,
|
|||
|
|
MIN(cs.status) AS status_type,
|
|||
|
|
MIN(cs.color) AS status_color,
|
|||
|
|
|
|||
|
|
MIN(ch.name) AS house_name,
|
|||
|
|
MIN(ch.parking) AS house_parking,
|
|||
|
|
MIN(ch.security) AS house_security,
|
|||
|
|
MIN(ch.fenced_area) AS house_fenced_area,
|
|||
|
|
MIN(ch.sports_ground) AS house_sports_ground,
|
|||
|
|
MIN(ch.play_ground) AS house_play_ground,
|
|||
|
|
MIN(ch.school) AS house_school,
|
|||
|
|
MIN(ch.kinder_garten) AS house_kinder_garten,
|
|||
|
|
MIN(ch.id) AS house_id,
|
|||
|
|
MIN(c_house_p.has_light_angle) AS has_light_angle,
|
|||
|
|
MIN(c_house_p.light_angle) AS light_angle
|
|||
|
|
FROM
|
|||
|
|
complex_rooms
|
|||
|
|
JOIN complex_floors ON complex_floors.id = complex_rooms.floor_id
|
|||
|
|
JOIN complex_entrances ON complex_entrances.id = complex_floors.complex_entrance_id
|
|||
|
|
LEFT JOIN complex_rooms_plans c_room_p ON c_room_p.room_id = complex_rooms.id
|
|||
|
|
LEFT JOIN complex_house_plans_images c_house_p_i ON c_room_p.plan_id = c_house_p_i.plan_id AND c_house_p_i.position = 1
|
|||
|
|
LEFT JOIN complex_status cs ON complex_rooms.complex_status_id = cs.id AND cs.is_archive = 0
|
|||
|
|
JOIN complex_houses ch ON ch.id = {$house_id}
|
|||
|
|
LEFT JOIN complex_house_plans c_house_p ON c_room_p.plan_id = c_house_p.id
|
|||
|
|
WHERE
|
|||
|
|
complex_floors.id = {$figure['floor_id']}
|
|||
|
|
AND complex_entrances.id = {$figure['entrance_id']}
|
|||
|
|
AND cs.status = 'available'
|
|||
|
|
GROUP BY
|
|||
|
|
complex_rooms.id,
|
|||
|
|
complex_entrances.name
|
|||
|
|
ORDER BY
|
|||
|
|
MIN(complex_rooms.position)";
|
|||
|
|
|
|||
|
|
$res = $this->db->query($sqlRooms);
|
|||
|
|
while ($room = $this->db->fetch_assoc($res)) {
|
|||
|
|
if ($room['status_type'] == 'reservation') {
|
|||
|
|
$requisition_sql = $this->db->query("SELECT id FROM requisitions where complex_room_id = {$room['id']} ORDER BY created_at DESC");
|
|||
|
|
|
|||
|
|
if ($row = $this->db->fetch_assoc($requisition_sql)) {
|
|||
|
|
$room['requisition_id'] = $row['id'];
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
if (in_array((string)$room['id'], $_SESSION['to_send_complexes'])) {
|
|||
|
|
$room['inPdf'] = true;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
$reservations = $this->get_room_reservations($room['id']);
|
|||
|
|
unset($reservations['can_change_queue']);
|
|||
|
|
|
|||
|
|
$complex_status_info = [
|
|||
|
|
'status_name' => $room['status_name'],
|
|||
|
|
'status_type' => $room['status_type'],
|
|||
|
|
'status_color' => $room['status_color']
|
|||
|
|
];
|
|||
|
|
|
|||
|
|
if ($room['status_type'] != 'reservation' && is_array($reservations) && count($reservations))
|
|||
|
|
{
|
|||
|
|
$complex_status_info = [
|
|||
|
|
'status_name' => $reservations[0]['status_name'],
|
|||
|
|
'status_type' => $reservations[0]['status_type'],
|
|||
|
|
'status_color' => $reservations[0]['status_color'],
|
|||
|
|
];
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
$room['complex_status_info'] = $complex_status_info;
|
|||
|
|
|
|||
|
|
// Installment plans without base_price
|
|||
|
|
$room['installment_plans'] = $installment_plans;
|
|||
|
|
|
|||
|
|
// Payment types decode
|
|||
|
|
if (!empty($room['payment_types'])) {
|
|||
|
|
$decodedPaymentTypes = json_decode($room['payment_types'], true);
|
|||
|
|
$room['payment_types'] = is_array($decodedPaymentTypes) ? $decodedPaymentTypes : [];
|
|||
|
|
} else {
|
|||
|
|
$room['payment_types'] = [];
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
$figure['rooms'][] = $room;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if ($useFloor) {
|
|||
|
|
$figure['floor'] = null;
|
|||
|
|
if ($figure['floor_id']) {
|
|||
|
|
$sqlFloor = $this->db->query("SELECT DISTINCT complex_floors.*, floor_plans.image as plan_url FROM complex_floors
|
|||
|
|
LEFT JOIN complex_floors_plans floor_plan_link ON floor_plan_link.floor_id = complex_floors.id
|
|||
|
|
LEFT JOIN complex_house_floor_plans floor_plans ON floor_plans.id = floor_plan_link.floor_plan_id
|
|||
|
|
WHERE complex_floors.id = {$figure['floor_id']} and complex_floors.complex_entrance_id = {$figure['entrance_id']} ORDER BY position ASC
|
|||
|
|
");
|
|||
|
|
$figure['floor'] = $this->db->fetch_assoc($sqlFloor);
|
|||
|
|
}
|
|||
|
|
unset($figure['floor_id']);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if ($useEntrance) {
|
|||
|
|
$figure['entrance'] = null;
|
|||
|
|
if ($figure['entrance_id']) {
|
|||
|
|
$sqlEntrance = $this->db->query("SELECT * FROM complex_entrances WHERE id = {$figure['entrance_id']}");
|
|||
|
|
$figure['entrance'] = $this->db->fetch_assoc($sqlEntrance);
|
|||
|
|
}
|
|||
|
|
unset($figure['entrance_id']);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
$result[] = $figure;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
return $result;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
public function addFacadeToHouse($house_id, $photo, $position, $hover_color, $opacity)
|
|||
|
|
{
|
|||
|
|
$sql = "INSERT INTO complex_house_facades SET house_id = {$house_id}, position = {$position}, hover_color = '{$hover_color}', opacity = '{$opacity}'";
|
|||
|
|
$r = $this->db->query($sql, true);
|
|||
|
|
|
|||
|
|
$facade_id = $this->db->insert_id();
|
|||
|
|
|
|||
|
|
$this->addPhotoToFacade($photo, $facade_id);
|
|||
|
|
|
|||
|
|
$facade_sql = "SELECT * FROM complex_house_facades WHERE id = {$facade_id}";
|
|||
|
|
$facade_r = $this->db->query($facade_sql, true);
|
|||
|
|
$facade = $this->db->fetch_assoc($facade_r);
|
|||
|
|
$facade['is_published'] = (bool) $facade['is_published'];
|
|||
|
|
$facade['figures'] = [];
|
|||
|
|
|
|||
|
|
return $facade;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
public function addPhotoToFacade($photo, $facade_id)
|
|||
|
|
{
|
|||
|
|
$newPhotos = $this->uploadPhotosToEntity([$photo], "facades", $facade_id);
|
|||
|
|
|
|||
|
|
$q = $this->db->query("DELETE FROM complex_facade_figures WHERE facade_id = {$facade_id}"); // TODO
|
|||
|
|
|
|||
|
|
$result = '';
|
|||
|
|
if (count($newPhotos)) {
|
|||
|
|
$image = $newPhotos[0];
|
|||
|
|
$sql_in_image = "UPDATE complex_house_facades SET `image` = '{$image['url']}', `name` = '{$image['name']}' WHERE `id` = {$facade_id}";
|
|||
|
|
$r = $this->db->query($sql_in_image, true);
|
|||
|
|
$result = $image;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
return $result;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
public function updateHouseFacade($facade_id, $fields)
|
|||
|
|
{
|
|||
|
|
$this->set_user();
|
|||
|
|
|
|||
|
|
$strArray = [];
|
|||
|
|
|
|||
|
|
foreach ($fields as $key => $value) {
|
|||
|
|
if ($key == 'id' || (empty($value) && $value !== 0 && $value !== false)) {
|
|||
|
|
continue;
|
|||
|
|
}
|
|||
|
|
if (is_string($value)) {
|
|||
|
|
$strArray[] = "$key='$value'";
|
|||
|
|
} else if (is_bool($value)) {
|
|||
|
|
$value = (int)$value;
|
|||
|
|
$strArray[] = "$key=$value";
|
|||
|
|
} else {
|
|||
|
|
$strArray[] = "$key=$value";
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
$str = implode(', ', $strArray);
|
|||
|
|
$sql = "UPDATE complex_house_facades SET $str WHERE id = {$facade_id}";
|
|||
|
|
|
|||
|
|
$this->db->query($sql);
|
|||
|
|
|
|||
|
|
$facade = $this->db->fetch_assoc($this->db->query("SELECT * from complex_house_facades WHERE id = {$facade_id}"));
|
|||
|
|
$facade['is_published'] = (bool) $facade['is_published'];
|
|||
|
|
return $facade;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
public function updateFacadeFigure($figure_id, $fields)
|
|||
|
|
{
|
|||
|
|
$this->set_user();
|
|||
|
|
|
|||
|
|
$strArray = [];
|
|||
|
|
|
|||
|
|
foreach ($fields as $key => $value) {
|
|||
|
|
if ($key == 'id' || (empty($value) && $value !== 0 && $value !== false)) {
|
|||
|
|
continue;
|
|||
|
|
}
|
|||
|
|
if (is_string($value)) {
|
|||
|
|
$strArray[] = "$key='$value'";
|
|||
|
|
} else if (is_bool($value)) {
|
|||
|
|
$value = (int)$value;
|
|||
|
|
$strArray[] = "$key=$value";
|
|||
|
|
} else {
|
|||
|
|
$strArray[] = "$key=$value";
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
$str = implode(', ', $strArray);
|
|||
|
|
$sql = "UPDATE complex_facade_figures SET $str WHERE id = {$figure_id}";
|
|||
|
|
$this->db->query($sql);
|
|||
|
|
|
|||
|
|
$figure = $this->db->fetch_assoc($this->db->query("SELECT * from complex_facade_figures WHERE id = {$figure_id}"));
|
|||
|
|
$figure['points'] = json_decode($figure['points']);
|
|||
|
|
return $figure;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
public function addFacadeFigure($facade_id, $points)
|
|||
|
|
{
|
|||
|
|
$points = json_encode($points);
|
|||
|
|
|
|||
|
|
$sql = "INSERT INTO complex_facade_figures SET points = '{$points}', facade_id={$facade_id}";
|
|||
|
|
$q = $this->db->query($sql);
|
|||
|
|
|
|||
|
|
$id = $this->db->insert_id();
|
|||
|
|
$q = $this->db->query("SELECT * FROM complex_facade_figures WHERE id = $id ");
|
|||
|
|
$figure = $this->db->fetch_assoc($q);
|
|||
|
|
$figure['points'] = json_decode($figure['points']);
|
|||
|
|
return $figure;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
public function get_plan_rooms($plan_id, $has_token = false)
|
|||
|
|
{
|
|||
|
|
$result = array();
|
|||
|
|
if ($plan_id > 0) {
|
|||
|
|
|
|||
|
|
// Get house_id based on plan_id
|
|||
|
|
$house_id_sql = "SELECT ch.id as house_id
|
|||
|
|
FROM complex_house_plans chp
|
|||
|
|
JOIN complex_houses ch ON ch.id = chp.house_id
|
|||
|
|
WHERE chp.id = {$plan_id}
|
|||
|
|
LIMIT 1";
|
|||
|
|
|
|||
|
|
$house_id_result = $this->db->query($house_id_sql);
|
|||
|
|
$house_row = $this->db->fetch_assoc($house_id_result);
|
|||
|
|
$house_id = (int)($house_row['house_id'] ? $house_row['house_id'] : 0);
|
|||
|
|
|
|||
|
|
// Fetch installment plans for the house
|
|||
|
|
$installment_plans = [];
|
|||
|
|
if ($house_id > 0) {
|
|||
|
|
$installment_sql = "SELECT i.*, chi.end_date as house_installment_end_date
|
|||
|
|
FROM installments i
|
|||
|
|
INNER JOIN complex_house_installments chi ON chi.installment_id = i.id
|
|||
|
|
WHERE chi.house_id = {$house_id}
|
|||
|
|
AND i.is_archive = 0
|
|||
|
|
AND (chi.end_date IS NULL OR chi.end_date >= CURDATE())";
|
|||
|
|
|
|||
|
|
$installment_q = $this->db->query($installment_sql);
|
|||
|
|
while ($plan = $this->db->fetch_assoc($installment_q)) {
|
|||
|
|
$installment_plans[] = [
|
|||
|
|
'id' => $plan['id'],
|
|||
|
|
'name' => $plan['name'],
|
|||
|
|
'description' => $plan['description'],
|
|||
|
|
'type' => $plan['type'],
|
|||
|
|
'initial_payment' => $plan['initial_payment'],
|
|||
|
|
'payment_period' => json_decode($plan['payment_period'], true),
|
|||
|
|
'allow_change_on_close' => $plan['allow_change_on_close'],
|
|||
|
|
'interest_rate' => $plan['interest_rate'],
|
|||
|
|
'comment' => $plan['comment'],
|
|||
|
|
'house_installment_end_date' => $plan['house_installment_end_date'],
|
|||
|
|
];
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if ($has_token) {
|
|||
|
|
if ($this->user->agencyId == 20382) {
|
|||
|
|
$filter_by_status = "";
|
|||
|
|
} else {
|
|||
|
|
$filter_by_status = "AND cs.status IN ('available', 'reservation')";
|
|||
|
|
}
|
|||
|
|
} else {
|
|||
|
|
$filter_by_status = "";
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
$sql = "SELECT
|
|||
|
|
room.id,
|
|||
|
|
room.number,
|
|||
|
|
room.area,
|
|||
|
|
room.kitchen_area,
|
|||
|
|
room.total_amount,
|
|||
|
|
room.installment_price,
|
|||
|
|
room.rooms_count,
|
|||
|
|
room.layout_feature,
|
|||
|
|
room.decoration_id,
|
|||
|
|
room.windows_placement_id,
|
|||
|
|
room.payment_types,
|
|||
|
|
room.type,
|
|||
|
|
MIN(room.position) AS position,
|
|||
|
|
|
|||
|
|
MIN(cs.name) AS status_name,
|
|||
|
|
MIN(cs.status) AS status_type,
|
|||
|
|
MIN(cs.color) AS status_color,
|
|||
|
|
MIN(c_house_p_i.url) AS plan_url,
|
|||
|
|
MIN(floors.position) AS floor,
|
|||
|
|
entrances.name AS entrance_name,
|
|||
|
|
MIN(ch.name) AS house_name,
|
|||
|
|
MIN(ch.parking) AS house_parking,
|
|||
|
|
MIN(ch.security) AS house_security,
|
|||
|
|
MIN(ch.fenced_area) AS house_fenced_area,
|
|||
|
|
MIN(ch.sports_ground) AS sports_ground,
|
|||
|
|
MIN(ch.play_ground) AS play_ground,
|
|||
|
|
MIN(ch.school) AS school,
|
|||
|
|
MIN(ch.kinder_garten) AS kinder_garten,
|
|||
|
|
MIN(ch.id) AS house_id,
|
|||
|
|
MIN(c_house_p.has_light_angle) AS has_light_angle,
|
|||
|
|
MIN(c_house_p.light_angle) AS light_angle
|
|||
|
|
FROM complex_rooms AS room
|
|||
|
|
JOIN complex_rooms_plans rooms_plans ON rooms_plans.room_id = room.id
|
|||
|
|
LEFT JOIN complex_house_plans_images c_house_p_i ON rooms_plans.plan_id = c_house_p_i.plan_id AND c_house_p_i.position = 1
|
|||
|
|
LEFT JOIN complex_status cs ON room.complex_status_id = cs.id AND cs.is_archive = 0
|
|||
|
|
JOIN complex_floors floors ON floors.id = room.floor_id
|
|||
|
|
JOIN complex_entrances entrances ON entrances.id = floors.complex_entrance_id
|
|||
|
|
JOIN complex_houses ch ON ch.id = entrances.complex_house_id
|
|||
|
|
LEFT JOIN complex_house_plans c_house_p ON rooms_plans.plan_id = c_house_p.id
|
|||
|
|
WHERE rooms_plans.plan_id = {$plan_id} {$filter_by_status}
|
|||
|
|
GROUP BY room.id, entrances.name
|
|||
|
|
ORDER BY MIN(room.position)";
|
|||
|
|
|
|||
|
|
$q = $this->db->query($sql);
|
|||
|
|
|
|||
|
|
while ($room = $this->db->fetch_assoc($q)) {
|
|||
|
|
$reservations = $this->get_room_reservations($room['id']);
|
|||
|
|
unset($reservations['can_change_queue']);
|
|||
|
|
|
|||
|
|
$complex_status_info = [
|
|||
|
|
'status_name' => $room['status_name'],
|
|||
|
|
'status_type' => $room['status_type'],
|
|||
|
|
'status_color' => $room['status_color']
|
|||
|
|
];
|
|||
|
|
|
|||
|
|
unset($room['status_name']);
|
|||
|
|
unset($room['status_type']);
|
|||
|
|
unset($room['status_color']);
|
|||
|
|
|
|||
|
|
if ($room['status_type'] != 'reservation' && is_array($reservations) && count($reservations))
|
|||
|
|
{
|
|||
|
|
$complex_status_info = [
|
|||
|
|
'status_name' => $reservations[0]['status_name'],
|
|||
|
|
'status_type' => $reservations[0]['status_type'],
|
|||
|
|
'status_color' => $reservations[0]['status_color'],
|
|||
|
|
];
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
$room['complex_status_info'] = $complex_status_info;
|
|||
|
|
|
|||
|
|
// Add installment_plans
|
|||
|
|
$room['installment_plans'] = $installment_plans;
|
|||
|
|
|
|||
|
|
// Decode payment_types safely
|
|||
|
|
if (!empty($room['payment_types'])) {
|
|||
|
|
$decodedPaymentTypes = json_decode($room['payment_types'], true);
|
|||
|
|
$room['payment_types'] = is_array($decodedPaymentTypes) ? $decodedPaymentTypes : [];
|
|||
|
|
} else {
|
|||
|
|
$room['payment_types'] = [];
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if (in_array((string)$room['id'], $_SESSION['to_send_complexes'])) {
|
|||
|
|
$room['inPdf'] = true;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
$result[] = $room;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
return $result;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
public function get_windows_placements()
|
|||
|
|
{
|
|||
|
|
$result = array();
|
|||
|
|
|
|||
|
|
$sql = "SELECT * FROM complex_rooms_windows_placements";
|
|||
|
|
$q = $this->db->query($sql);
|
|||
|
|
while ($window = $this->db->fetch_assoc($q)) {
|
|||
|
|
$result[] = $window;
|
|||
|
|
}
|
|||
|
|
return $result;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
public function get_plans_images($plan_id)
|
|||
|
|
{
|
|||
|
|
$result = array();
|
|||
|
|
|
|||
|
|
if ($plan_id > 0) {
|
|||
|
|
$sql = "SELECT * FROM complex_house_plans_images WHERE plan_id = {$plan_id} ORDER BY `position`";
|
|||
|
|
$q = $this->db->query($sql);
|
|||
|
|
while ($res = $this->db->fetch_assoc($q)) {
|
|||
|
|
$result[] = $res;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
return $result;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
public function complex_delete($complex_id)
|
|||
|
|
{
|
|||
|
|
$this->deleteComplexFiles($complex_id);
|
|||
|
|
$this->db->query("UPDATE complex_list SET deleted=1 WHERE id = {$complex_id}");
|
|||
|
|
|
|||
|
|
return array('result' => 'done', 'complex_id' => $complex_id);;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
public function delete_house($house_id)
|
|||
|
|
{
|
|||
|
|
$house_id = (int)$house_id;
|
|||
|
|
$sql = "UPDATE complex_houses SET deleted_at = NOW() WHERE id = {$house_id}";
|
|||
|
|
$q = $this->db->query($sql);
|
|||
|
|
|
|||
|
|
return [
|
|||
|
|
'status' => $q,
|
|||
|
|
'message' => $q ? 'Дом перемещен в корзину' : 'Ошибка при удалении дома',
|
|||
|
|
'house_id' => $house_id
|
|||
|
|
];
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
public function deleteComplexFiles($complex_id)
|
|||
|
|
{
|
|||
|
|
$this->db->query('SET SESSION group_concat_max_len = 9999999;');
|
|||
|
|
$sql = $this->db->query("SELECT
|
|||
|
|
complex_list.id AS complex_id,
|
|||
|
|
GROUP_CONCAT(complex_house_floor_plans.image SEPARATOR ',') AS floor_plan_images,
|
|||
|
|
GROUP_CONCAT(complex_house_plans_images.url SEPARATOR ',') AS room_plan_images,
|
|||
|
|
GROUP_CONCAT(complex_house_images.url SEPARATOR ',') AS house_images,
|
|||
|
|
GROUP_CONCAT(complex_house_facades.image SEPARATOR ',') AS house_facade_images,
|
|||
|
|
GROUP_CONCAT(complex_images.image SEPARATOR ',') AS complex_images,
|
|||
|
|
GROUP_CONCAT(complex_house_UTP.photo SEPARATOR ',') AS house_utp_images,
|
|||
|
|
GROUP_CONCAT(complex_house_decoration.photo SEPARATOR ',') AS house_dec_images,
|
|||
|
|
GROUP_CONCAT(complex_house_decoration.photo2 SEPARATOR ',') AS house_dec_images2,
|
|||
|
|
GROUP_CONCAT(complex_house_decoration.photo3 SEPARATOR ',') AS house_dec_images3,
|
|||
|
|
GROUP_CONCAT(complex_house_decoration.photo4 SEPARATOR ',') AS house_dec_images4,
|
|||
|
|
GROUP_CONCAT(complex_house_decoration.photo5 SEPARATOR ',') AS house_dec_images5,
|
|||
|
|
GROUP_CONCAT(complex_actions.image SEPARATOR ',') AS complex_actions_images
|
|||
|
|
FROM complex_list
|
|||
|
|
LEFT JOIN complex_houses ON complex_houses.complex_id = complex_list.id
|
|||
|
|
|
|||
|
|
LEFT JOIN complex_entrances ON complex_entrances.complex_house_id = complex_houses.id
|
|||
|
|
LEFT JOIN complex_floors ON complex_floors.complex_entrance_id = complex_entrances.id
|
|||
|
|
LEFT JOIN complex_floors_plans ON complex_floors_plans.floor_id = complex_floors.id
|
|||
|
|
LEFT JOIN complex_house_floor_plans ON complex_house_floor_plans.id = complex_floors_plans.floor_plan_id
|
|||
|
|
|
|||
|
|
LEFT JOIN complex_rooms ON complex_rooms.floor_id = complex_floors.id
|
|||
|
|
LEFT JOIN complex_rooms_plans ON complex_rooms_plans.room_id = complex_rooms.id
|
|||
|
|
LEFT JOIN complex_house_plans_images ON complex_house_plans_images.plan_id = complex_rooms_plans.plan_id
|
|||
|
|
|
|||
|
|
LEFT JOIN complex_house_images ON complex_house_images.house_id = complex_houses.id
|
|||
|
|
LEFT JOIN complex_house_facades ON complex_house_facades.house_id = complex_houses.id
|
|||
|
|
|
|||
|
|
LEFT JOIN complex_images ON complex_images.complex_id = complex_list.id
|
|||
|
|
LEFT JOIN complex_house_UTP ON complex_house_UTP.house_id = complex_houses.id
|
|||
|
|
LEFT JOIN complex_house_decoration ON complex_house_decoration.house_id = complex_houses.id
|
|||
|
|
LEFT JOIN complex_actions ON complex_actions.complex_id = complex_list.id
|
|||
|
|
WHERE complex_list.id = {$complex_id}
|
|||
|
|
GROUP BY complex_list.id;");
|
|||
|
|
|
|||
|
|
$urls = [];
|
|||
|
|
|
|||
|
|
while ($row = $this->db->fetch_assoc($sql)) {
|
|||
|
|
|
|||
|
|
$mergedArray = array_merge(
|
|||
|
|
explode(',', $row['floor_plan_images']),
|
|||
|
|
explode(',', $row['room_plan_images']),
|
|||
|
|
explode(',', $row['house_images']),
|
|||
|
|
explode(',', $row['house_facade_images']),
|
|||
|
|
explode(',', $row['complex_images']),
|
|||
|
|
explode(',', $row['house_utp_images']),
|
|||
|
|
explode(',', $row['house_dec_images']),
|
|||
|
|
explode(',', $row['house_dec_images2']),
|
|||
|
|
explode(',', $row['house_dec_images3']),
|
|||
|
|
explode(',', $row['house_dec_images4']),
|
|||
|
|
explode(',', $row['house_dec_images5']),
|
|||
|
|
explode(',', $row['complex_actions_images'])
|
|||
|
|
);
|
|||
|
|
|
|||
|
|
$mergedArray = array_filter($mergedArray);
|
|||
|
|
|
|||
|
|
$urls = array_merge(
|
|||
|
|
$mergedArray,
|
|||
|
|
$urls
|
|||
|
|
);
|
|||
|
|
};
|
|||
|
|
|
|||
|
|
$this->deleteFiles($urls);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
public function deleteHouseFiles($house_id)
|
|||
|
|
{
|
|||
|
|
$this->db->query('SET SESSION group_concat_max_len = 9999999;');
|
|||
|
|
$sql = $this->db->query("SELECT
|
|||
|
|
complex_houses.id AS complex_house_id,
|
|||
|
|
GROUP_CONCAT(complex_house_floor_plans.image SEPARATOR ',') AS floor_plan_images,
|
|||
|
|
GROUP_CONCAT(complex_house_plans_images.url SEPARATOR ',') AS room_plan_images,
|
|||
|
|
GROUP_CONCAT(complex_house_images.url SEPARATOR ',') AS house_images,
|
|||
|
|
GROUP_CONCAT(complex_house_facades.image SEPARATOR ',') AS house_facade_images,
|
|||
|
|
GROUP_CONCAT(complex_house_UTP.photo SEPARATOR ',') AS house_utp_images,
|
|||
|
|
GROUP_CONCAT(complex_house_decoration.photo SEPARATOR ',') AS house_dec_images,
|
|||
|
|
GROUP_CONCAT(complex_house_decoration.photo2 SEPARATOR ',') AS house_dec_images2,
|
|||
|
|
GROUP_CONCAT(complex_house_decoration.photo3 SEPARATOR ',') AS house_dec_images3,
|
|||
|
|
GROUP_CONCAT(complex_house_decoration.photo4 SEPARATOR ',') AS house_dec_images4,
|
|||
|
|
GROUP_CONCAT(complex_house_decoration.photo5 SEPARATOR ',') AS house_dec_images5
|
|||
|
|
FROM complex_houses
|
|||
|
|
LEFT JOIN complex_entrances ON complex_entrances.complex_house_id = complex_houses.id
|
|||
|
|
LEFT JOIN complex_floors ON complex_floors.complex_entrance_id = complex_entrances.id
|
|||
|
|
LEFT JOIN complex_floors_plans ON complex_floors_plans.floor_id = complex_floors.id
|
|||
|
|
LEFT JOIN complex_house_floor_plans ON complex_house_floor_plans.id = complex_floors_plans.floor_plan_id
|
|||
|
|
|
|||
|
|
LEFT JOIN complex_rooms ON complex_rooms.floor_id = complex_floors.id
|
|||
|
|
LEFT JOIN complex_rooms_plans ON complex_rooms_plans.room_id = complex_rooms.id
|
|||
|
|
LEFT JOIN complex_house_plans_images ON complex_house_plans_images.plan_id = complex_rooms_plans.plan_id
|
|||
|
|
|
|||
|
|
LEFT JOIN complex_house_images ON complex_house_images.house_id = complex_houses.id
|
|||
|
|
LEFT JOIN complex_house_facades ON complex_house_facades.house_id = complex_houses.id
|
|||
|
|
LEFT JOIN complex_house_UTP ON complex_house_UTP.house_id = complex_houses.id
|
|||
|
|
LEFT JOIN complex_house_decoration ON complex_house_decoration.house_id = complex_houses.id
|
|||
|
|
|
|||
|
|
WHERE complex_houses.id = {$house_id}
|
|||
|
|
GROUP BY
|
|||
|
|
complex_entrances.id;");
|
|||
|
|
|
|||
|
|
$urls = [];
|
|||
|
|
|
|||
|
|
while ($row = $this->db->fetch_assoc($sql)) {
|
|||
|
|
|
|||
|
|
$mergedArray = array_merge(
|
|||
|
|
explode(',', $row['floor_plan_images']),
|
|||
|
|
explode(',', $row['room_plan_images']),
|
|||
|
|
explode(',', $row['house_images']),
|
|||
|
|
explode(',', $row['house_facade_images']),
|
|||
|
|
explode(',', $row['house_utp_images']),
|
|||
|
|
explode(',', $row['house_dec_images2']),
|
|||
|
|
explode(',', $row['house_dec_images3']),
|
|||
|
|
explode(',', $row['house_dec_images4']),
|
|||
|
|
explode(',', $row['house_dec_images5'])
|
|||
|
|
);
|
|||
|
|
|
|||
|
|
$mergedArray = array_filter($mergedArray);
|
|||
|
|
|
|||
|
|
$urls = array_merge(
|
|||
|
|
$mergedArray,
|
|||
|
|
$urls
|
|||
|
|
);
|
|||
|
|
};
|
|||
|
|
|
|||
|
|
$this->deleteFiles($urls);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
public function deleteEntranceFiles($entrance_id)
|
|||
|
|
{
|
|||
|
|
$this->db->query('SET SESSION group_concat_max_len = 9999999;');
|
|||
|
|
$sql = $this->db->query("SELECT
|
|||
|
|
complex_entrances.id AS entrance_id,
|
|||
|
|
GROUP_CONCAT(complex_house_floor_plans.image SEPARATOR ',') AS floor_plan_images,
|
|||
|
|
GROUP_CONCAT(complex_house_plans_images.url SEPARATOR ',') AS room_plan_images
|
|||
|
|
FROM complex_entrances
|
|||
|
|
LEFT JOIN complex_floors ON complex_floors.complex_entrance_id = complex_entrances.id
|
|||
|
|
LEFT JOIN complex_floors_plans ON complex_floors_plans.floor_id = complex_floors.id
|
|||
|
|
LEFT JOIN complex_house_floor_plans ON complex_house_floor_plans.id = complex_floors_plans.floor_plan_id
|
|||
|
|
|
|||
|
|
LEFT JOIN complex_rooms ON complex_rooms.floor_id = complex_floors.id
|
|||
|
|
LEFT JOIN complex_rooms_plans ON complex_rooms_plans.room_id = complex_rooms.id
|
|||
|
|
LEFT JOIN complex_house_plans_images ON complex_house_plans_images.plan_id = complex_rooms_plans.plan_id
|
|||
|
|
|
|||
|
|
WHERE complex_entrances.id = {$entrance_id}
|
|||
|
|
GROUP BY
|
|||
|
|
complex_entrances.id;");
|
|||
|
|
|
|||
|
|
$urls = [];
|
|||
|
|
|
|||
|
|
while ($row = $this->db->fetch_assoc($sql)) {
|
|||
|
|
$mergedArray = array_merge(
|
|||
|
|
explode(',', $row['floor_plan_images']),
|
|||
|
|
explode(',', $row['room_plan_images'])
|
|||
|
|
);
|
|||
|
|
|
|||
|
|
$mergedArray = array_filter($mergedArray);
|
|||
|
|
|
|||
|
|
$urls = array_merge(
|
|||
|
|
$mergedArray,
|
|||
|
|
$urls
|
|||
|
|
);
|
|||
|
|
};
|
|||
|
|
|
|||
|
|
$this->deleteFiles($urls);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
public function deleteFloorFiles($floor_id)
|
|||
|
|
{
|
|||
|
|
$this->db->query('SET SESSION group_concat_max_len = 9999999;');
|
|||
|
|
$sql = $this->db->query(
|
|||
|
|
"SELECT
|
|||
|
|
complex_floors.id AS floor_id,
|
|||
|
|
GROUP_CONCAT(complex_house_floor_plans.image SEPARATOR ',') AS floor_plan_images,
|
|||
|
|
GROUP_CONCAT(complex_house_plans_images.url SEPARATOR ',') AS room_plan_images
|
|||
|
|
FROM complex_floors
|
|||
|
|
LEFT JOIN complex_floors_plans ON complex_floors_plans.floor_id = complex_floors.id
|
|||
|
|
LEFT JOIN complex_house_floor_plans ON complex_house_floor_plans.id = complex_floors_plans.floor_plan_id
|
|||
|
|
|
|||
|
|
LEFT JOIN complex_rooms ON complex_rooms.floor_id = complex_floors.id
|
|||
|
|
LEFT JOIN complex_rooms_plans ON complex_rooms_plans.room_id = complex_rooms.id
|
|||
|
|
LEFT JOIN complex_house_plans_images ON complex_house_plans_images.plan_id = complex_rooms_plans.plan_id
|
|||
|
|
|
|||
|
|
WHERE complex_floors.id = {$floor_id}
|
|||
|
|
GROUP BY complex_floors.id;"
|
|||
|
|
);
|
|||
|
|
|
|||
|
|
$urls = [];
|
|||
|
|
|
|||
|
|
while ($row = $this->db->fetch_assoc($sql)) {
|
|||
|
|
$mergedArray = array_merge(
|
|||
|
|
explode(',', $row['floor_plan_images']),
|
|||
|
|
explode(',', $row['room_plan_images'])
|
|||
|
|
);
|
|||
|
|
|
|||
|
|
$mergedArray = array_filter($mergedArray);
|
|||
|
|
|
|||
|
|
$urls = array_merge(
|
|||
|
|
$mergedArray,
|
|||
|
|
$urls
|
|||
|
|
);
|
|||
|
|
};
|
|||
|
|
|
|||
|
|
$this->deleteFiles($urls);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
public function delete_house_entrance($entrance_id)
|
|||
|
|
{
|
|||
|
|
$this->set_user();
|
|||
|
|
$this->deleteEntranceFiles($entrance_id);
|
|||
|
|
$sql = "DELETE FROM complex_entrances WHERE id={$entrance_id}";
|
|||
|
|
$q = $this->db->query($sql);
|
|||
|
|
return ['status' => $q];
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// TODO FIX DELETE ENTRIES WHILE DELETING THEIR PARENTS
|
|||
|
|
|
|||
|
|
public function delete_floor($floor_id)
|
|||
|
|
{
|
|||
|
|
$this->set_user();
|
|||
|
|
$this->deleteFloorFiles($floor_id);
|
|||
|
|
|
|||
|
|
$sql = "DELETE FROM complex_floors WHERE id={$floor_id}";
|
|||
|
|
$q = $this->db->query($sql);
|
|||
|
|
|
|||
|
|
// $sql = "DELETE FROM complex_rooms WHERE floor_id={$floor_id}";
|
|||
|
|
// $q_ = $this->db->query($sql);
|
|||
|
|
|
|||
|
|
|
|||
|
|
return ['status' => $q];
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
public function delete_room($room_id)
|
|||
|
|
{
|
|||
|
|
$this->set_user();
|
|||
|
|
|
|||
|
|
$sql = "DELETE FROM complex_room_notes WHERE room_id={$room_id}";
|
|||
|
|
$this->db->query($sql);
|
|||
|
|
|
|||
|
|
$sql = "DELETE FROM complex_rooms_plans WHERE room_id={$room_id}";
|
|||
|
|
$this->db->query($sql);
|
|||
|
|
|
|||
|
|
$sql = "DELETE FROM complex_rooms WHERE id={$room_id}";
|
|||
|
|
$q = $this->db->query($sql);
|
|||
|
|
|
|||
|
|
return ['status' => $q];
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
public function deleteFiles(array $urls)
|
|||
|
|
{
|
|||
|
|
if (empty($urls)) {
|
|||
|
|
return false;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
$urls = array_map(function ($url) {
|
|||
|
|
return "('$url')";
|
|||
|
|
}, $urls);
|
|||
|
|
|
|||
|
|
$urls = implode(',', $urls);
|
|||
|
|
$sql = "INSERT INTO job_delete_files (`url`) VALUES {$urls}";
|
|||
|
|
$this->db->query($sql);
|
|||
|
|
|
|||
|
|
return true;
|
|||
|
|
|
|||
|
|
|
|||
|
|
// $Selectel = SelectelApi::getTokenAndUrl();
|
|||
|
|
// $api = new SelectelApi();
|
|||
|
|
|
|||
|
|
// $token = $Selectel[0];
|
|||
|
|
// $storageUrl = $Selectel[1];
|
|||
|
|
|
|||
|
|
|
|||
|
|
// foreach ($urls as $url) {
|
|||
|
|
// $parsed_url = parse_url($url);
|
|||
|
|
|
|||
|
|
// if (isset($parsed_url['path'])) {
|
|||
|
|
// $api->deleteFile($storageUrl, $token, $parsed_url['path']);
|
|||
|
|
// }
|
|||
|
|
// }
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
public function deleteComplexPhoto($photo_id)
|
|||
|
|
{
|
|||
|
|
$r = $this->db->query("SELECT `image` FROM complex_images WHERE id = {$photo_id}");
|
|||
|
|
|
|||
|
|
$row = $this->db->fetch_assoc($r);
|
|||
|
|
|
|||
|
|
$this->deleteFiles([$row['image']]);
|
|||
|
|
|
|||
|
|
$this->db->query("DELETE FROM complex_images WHERE id = {$photo_id}", true);
|
|||
|
|
|
|||
|
|
return ['status' => true];
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
public function deleteHousePhoto($photo_id)
|
|||
|
|
{
|
|||
|
|
$r = $this->db->query("SELECT `url` FROM complex_house_images WHERE id = {$photo_id}");
|
|||
|
|
|
|||
|
|
$row = $this->db->fetch_assoc($r);
|
|||
|
|
|
|||
|
|
$this->deleteFiles([$row['url']]);
|
|||
|
|
|
|||
|
|
$this->db->query("DELETE FROM complex_house_images WHERE id = {$photo_id}", true);
|
|||
|
|
|
|||
|
|
return ['status' => true];
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
public function deleteHouseFacede($facade_id)
|
|||
|
|
{
|
|||
|
|
$r = $this->db->query("SELECT `image` FROM complex_house_facades WHERE id = {$facade_id}");
|
|||
|
|
|
|||
|
|
$row = $this->db->fetch_assoc($r);
|
|||
|
|
|
|||
|
|
$this->deleteFiles([$row['image']]);
|
|||
|
|
|
|||
|
|
$q = $this->db->query("DELETE FROM complex_facade_figures WHERE facade_id = {$facade_id}"); // TODO
|
|||
|
|
$q = $this->db->query("DELETE FROM complex_house_facades WHERE `id` = {$facade_id}");
|
|||
|
|
|
|||
|
|
return ['status' => true];
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
public function deleteFacedeFigure($figure_id)
|
|||
|
|
{
|
|||
|
|
$q = $this->db->query("DELETE FROM complex_facade_figures WHERE id = {$figure_id}"); // TODO
|
|||
|
|
|
|||
|
|
return ['status' => true, 'sql' => $q];
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
public function deletePhotoFloorPlan($floor_plan_id)
|
|||
|
|
{
|
|||
|
|
$sql = "SELECT `image` FROM complex_house_floor_plans WHERE id = {$floor_plan_id}";
|
|||
|
|
|
|||
|
|
$r = $this->db->query($sql);
|
|||
|
|
$row = $this->db->fetch_assoc($r);
|
|||
|
|
$this->deleteFiles([$row['image']]);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
public function delete_floor_plan_figure($figure_id)
|
|||
|
|
{
|
|||
|
|
$q = $this->db->query("DELETE FROM complex_floor_plan_figures WHERE id = {$figure_id}"); // TODO
|
|||
|
|
|
|||
|
|
return ['status' => true];
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
public function delete_floor_plan($floor_plan_id)
|
|||
|
|
{
|
|||
|
|
$q = $this->db->query("DELETE FROM complex_house_floor_plans WHERE id = {$floor_plan_id}"); // TODO
|
|||
|
|
$q = $this->db->query("DELETE FROM complex_floor_plan_figures WHERE floor_plan_id = {$floor_plan_id}"); // TODO
|
|||
|
|
$q = $this->db->query("DELETE FROM complex_floors_plans WHERE floor_plan_id = {$floor_plan_id}"); // TODO
|
|||
|
|
return ['status' => true];
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
public function deleteHousePlans($plan_ids)
|
|||
|
|
{
|
|||
|
|
$plan_ids_str = implode(', ', $plan_ids);
|
|||
|
|
|
|||
|
|
$filesToDelete = array();
|
|||
|
|
// die("SELECT `url` FROM complex_house_plans_images where plan_id in ({$plan_ids_str})");
|
|||
|
|
$r = $this->db->query("SELECT `url` FROM complex_house_plans_images where plan_id in ({$plan_ids_str})");
|
|||
|
|
while ($res = $this->db->fetch_assoc($r)) {
|
|||
|
|
$filesToDelete[] = $res['url'];
|
|||
|
|
}
|
|||
|
|
$this->deleteFiles($filesToDelete);
|
|||
|
|
|
|||
|
|
$plans_sql = "DELETE FROM complex_house_plans where id in ({$plan_ids_str})";
|
|||
|
|
$images_sql = "DELETE FROM complex_house_plans_images where plan_id in ({$plan_ids_str})";
|
|||
|
|
$room_plans_sql = "DELETE FROM complex_rooms_plans where plan_id in ({$plan_ids_str})";
|
|||
|
|
|
|||
|
|
$figures_sql = "UPDATE complex_floor_plan_figures SET room_plan_id = NULL WHERE room_plan_id in ($plan_ids_str)";
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
$this->db->query($figures_sql);
|
|||
|
|
$this->db->query($plans_sql);
|
|||
|
|
$this->db->query($images_sql);
|
|||
|
|
$this->db->query($room_plans_sql);
|
|||
|
|
|
|||
|
|
return $plan_ids;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
public function deletePhotoFromRoomPlan($photo_id)
|
|||
|
|
{
|
|||
|
|
|
|||
|
|
$res = $this->db->query("SELECT `url` FROM complex_house_plans_images where id = {$photo_id}");
|
|||
|
|
|
|||
|
|
$photo = $this->db->fetch_assoc($res);
|
|||
|
|
$sql = "DELETE FROM complex_house_plans_images where id = {$photo_id}";
|
|||
|
|
$r = $this->db->query($sql);
|
|||
|
|
|
|||
|
|
$this->deleteFiles([$photo['url']]);
|
|||
|
|
|
|||
|
|
return ['success' => true];
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
protected function parseCsv($input)
|
|||
|
|
{
|
|||
|
|
$possibleSeparators = [',', ';', "\t", '|'];
|
|||
|
|
$separatorCounts = [];
|
|||
|
|
$for_first_line = fopen('php://memory', 'rw');
|
|||
|
|
fwrite($for_first_line, $input);
|
|||
|
|
fseek($for_first_line, 0);
|
|||
|
|
|
|||
|
|
$firstLine = fgets($for_first_line);
|
|||
|
|
fclose($for_first_line);
|
|||
|
|
|
|||
|
|
$temp = fopen('php://memory', 'rw');
|
|||
|
|
|
|||
|
|
fwrite($temp, $input);
|
|||
|
|
fseek($temp, 0);
|
|||
|
|
$res = array();
|
|||
|
|
|
|||
|
|
|
|||
|
|
foreach ($possibleSeparators as $separator) {
|
|||
|
|
$columns = str_getcsv($firstLine, $separator);
|
|||
|
|
$separatorCounts[$separator] = count($columns);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
$mostLikelySeparator = array_search(max($separatorCounts), $separatorCounts);
|
|||
|
|
|
|||
|
|
while (($data = fgetcsv($temp, null, $mostLikelySeparator)) !== false) {
|
|||
|
|
$res[] = $data;
|
|||
|
|
}
|
|||
|
|
fclose($temp);
|
|||
|
|
|
|||
|
|
return $res;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
protected function endsWith($haystack, $needle) {
|
|||
|
|
$length = strlen($needle);
|
|||
|
|
return $length > 0 ? substr($haystack, -$length) === $needle : true;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
public function createRequisition($room_id = null, $requisition, $partner_id, $employee_id){
|
|||
|
|
$this->set_user();
|
|||
|
|
$this->set_users_ids();
|
|||
|
|
|
|||
|
|
$phone = $requisition->phone;
|
|||
|
|
$fio_client = $requisition->fio;
|
|||
|
|
$opis = $requisition->description;
|
|||
|
|
|
|||
|
|
$partners = new Partners($this->user->agencyId);
|
|||
|
|
$partner = $partners->getPartner($partner_id);
|
|||
|
|
|
|||
|
|
$user_id = $user_id_client = $this->user->id;
|
|||
|
|
$confirm = 1;
|
|||
|
|
$confirm_client = 1;
|
|||
|
|
$who_work = (int)$partner['who_work_req'];
|
|||
|
|
$who_work_client = (int)$partner['who_work_client'];
|
|||
|
|
$funnel_id = (int)$partner['funnel_id_req'];
|
|||
|
|
$funnel_id_client = (int)$partner['funnel_id_client'];
|
|||
|
|
if($who_work == 0) {
|
|||
|
|
$confirm = 0;
|
|||
|
|
} else {
|
|||
|
|
$user_id = $who_work;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if($who_work_client == 0){
|
|||
|
|
$confirm_client = 0;
|
|||
|
|
} else {
|
|||
|
|
$user_id_client = $who_work_client;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
$sql = "SELECT `id`, `stage`, `deleted`, `fio` FROM `clients` WHERE cancel=0 AND (phone = '$phone' OR id in (SELECT client_id FROM clients_phone2 WHERE phone = '$phone')) and (id_agent in (".implode(',', $this->userIds).") or who_work in (".implode(',', $this->userIds)."))";
|
|||
|
|
|
|||
|
|
$client = $this->db->fetch_assoc($this->db->query($sql));
|
|||
|
|
if(!empty($client) && $client){
|
|||
|
|
$client_id = (int)$client['id'];
|
|||
|
|
//$fio_client = $client['fio'];
|
|||
|
|
|
|||
|
|
} else {
|
|||
|
|
|
|||
|
|
$sql = "INSERT INTO clients SET phone='{$phone}', fio='{$fio_client}', opis='{$opis}', employee_id='{$employee_id}', id_agent={$user_id_client}, who_work={$who_work_client}, date_add=NOW(), confirm={$confirm_client}, funnel_id={$funnel_id_client}, stage=1, integration=10";
|
|||
|
|
|
|||
|
|
$this->db->query($sql);
|
|||
|
|
$client_id = $this->db->insert_id();
|
|||
|
|
|
|||
|
|
if($funnel_id_client > 0){
|
|||
|
|
$Clients = new Clients();
|
|||
|
|
$Clients->get_class_etap($client_id, $funnel_id_client);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
$type_id = 1;
|
|||
|
|
$name = $fio_client;
|
|||
|
|
$sql = "SELECT name FROM requisitions_type WHERE id = {$type_id}";
|
|||
|
|
$q = $this->db->query($sql);
|
|||
|
|
$r = $this->db->fetch_assoc($q);
|
|||
|
|
$name = $r['name'].' для '.$fio_client;
|
|||
|
|
|
|||
|
|
|
|||
|
|
if($client_id > 0){
|
|||
|
|
|
|||
|
|
$sql = "INSERT INTO requisitions SET
|
|||
|
|
client_id={$client_id},
|
|||
|
|
name='{$name}',
|
|||
|
|
description='{$opis}',
|
|||
|
|
user_id={$user_id},
|
|||
|
|
who_work={$who_work},
|
|||
|
|
type_id={$type_id},
|
|||
|
|
confirm={$confirm},
|
|||
|
|
funnel_id={$funnel_id},
|
|||
|
|
stage=1,
|
|||
|
|
employee_id = {$employee_id}
|
|||
|
|
";
|
|||
|
|
if ($room_id !== 0) {
|
|||
|
|
$sql .= ", complex_room_id = {$room_id}";
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
$this->db->query($sql);
|
|||
|
|
$req_id = $this->db->insert_id();
|
|||
|
|
if($funnel_id > 0){
|
|||
|
|
$Requisitions = new Requisitions();
|
|||
|
|
$Requisitions->get_class_etap($req_id, $funnel_id);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
public function get_filter_fields($house_id = null, $complex_id = null)
|
|||
|
|
{
|
|||
|
|
$where = "";
|
|||
|
|
|
|||
|
|
if (!empty($house_id)) {
|
|||
|
|
$house_id = (int)$house_id;
|
|||
|
|
$where = "complex_houses.`id` = {$house_id}";
|
|||
|
|
} elseif (!empty($complex_id)) {
|
|||
|
|
$complex_id = (int)$complex_id;
|
|||
|
|
$where = "complex_houses.`complex_id` = {$complex_id}";
|
|||
|
|
} else {
|
|||
|
|
return [
|
|||
|
|
'total' => (object)['min' => null, 'max' => null],
|
|||
|
|
'area' => (object)['min' => null, 'max' => null],
|
|||
|
|
'kitchen_area' => (object)['min' => null, 'max' => null],
|
|||
|
|
'room_types' => [],
|
|||
|
|
'decoration_types' => [],
|
|||
|
|
'window_placements' => [],
|
|||
|
|
'payment_types' => [],
|
|||
|
|
];
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
$sql = "SELECT
|
|||
|
|
JSON_OBJECT(
|
|||
|
|
'min', MIN(c_rooms.total_amount),
|
|||
|
|
'max', MAX(c_rooms.total_amount)
|
|||
|
|
) AS total,
|
|||
|
|
JSON_OBJECT(
|
|||
|
|
'min', MIN(c_rooms.area),
|
|||
|
|
'max', MAX(c_rooms.area)
|
|||
|
|
) AS area,
|
|||
|
|
JSON_OBJECT(
|
|||
|
|
'min', MIN(c_rooms.kitchen_area),
|
|||
|
|
'max', MAX(c_rooms.kitchen_area)
|
|||
|
|
) AS kitchen_area,
|
|||
|
|
GROUP_CONCAT(DISTINCT c_rooms.type SEPARATOR ',') AS room_types,
|
|||
|
|
GROUP_CONCAT(DISTINCT c_r_w_p.id SEPARATOR ',') AS window_placements,
|
|||
|
|
GROUP_CONCAT(DISTINCT d_types.id SEPARATOR ',') AS decoration_types,
|
|||
|
|
GROUP_CONCAT(DISTINCT apt.code SEPARATOR ',') AS payment_types
|
|||
|
|
FROM
|
|||
|
|
complex_houses
|
|||
|
|
LEFT JOIN
|
|||
|
|
complex_entrances AS c_entrances ON c_entrances.complex_house_id = complex_houses.id
|
|||
|
|
LEFT JOIN
|
|||
|
|
complex_floors AS c_floors ON c_floors.complex_entrance_id = c_entrances.id
|
|||
|
|
LEFT JOIN
|
|||
|
|
complex_house_facades AS facades ON facades.house_id = complex_houses.id AND facades.is_published != 0
|
|||
|
|
LEFT JOIN
|
|||
|
|
complex_facade_figures AS figures ON figures.facade_id = facades.id
|
|||
|
|
LEFT JOIN
|
|||
|
|
complex_floors_plans AS c_floor_plans ON c_floor_plans.floor_id = c_floors.id
|
|||
|
|
LEFT JOIN
|
|||
|
|
complex_rooms AS c_rooms ON c_rooms.floor_id = c_floors.id
|
|||
|
|
LEFT JOIN
|
|||
|
|
complex_rooms_plans AS c_rooms_plans ON c_rooms_plans.room_id = c_rooms.id
|
|||
|
|
LEFT JOIN
|
|||
|
|
complex_status AS cs ON cs.id = c_rooms.complex_status_id
|
|||
|
|
LEFT JOIN
|
|||
|
|
complex_rooms_windows_placements AS c_r_w_p ON c_r_w_p.id = c_rooms.windows_placement_id
|
|||
|
|
LEFT JOIN
|
|||
|
|
decoration_types AS d_types ON d_types.id = c_rooms.decoration_id
|
|||
|
|
LEFT JOIN
|
|||
|
|
apartment_payment_types AS apt ON JSON_CONTAINS(c_rooms.payment_types, JSON_QUOTE(apt.code))
|
|||
|
|
WHERE
|
|||
|
|
{$where}
|
|||
|
|
AND (cs.status = 'available' OR cs.status = 'reservation')
|
|||
|
|
AND c_rooms.id IS NOT NULL";
|
|||
|
|
|
|||
|
|
$q = $this->db->query($sql);
|
|||
|
|
$fields = $this->db->fetch_assoc($q);
|
|||
|
|
|
|||
|
|
// Convert JSON strings to PHP objects
|
|||
|
|
$fields['total'] = json_decode($fields['total']);
|
|||
|
|
$fields['area'] = json_decode($fields['area']);
|
|||
|
|
$fields['kitchen_area'] = json_decode($fields['kitchen_area']);
|
|||
|
|
|
|||
|
|
// Process other fields safely
|
|||
|
|
$fields['room_types'] = !empty($fields['room_types']) ? explode(',', $fields['room_types']) : [];
|
|||
|
|
$fields['decoration_types'] = !empty($fields['decoration_types']) ? array_map('intval', explode(',', $fields['decoration_types'])) : [];
|
|||
|
|
$fields['window_placements'] = !empty($fields['window_placements']) ? array_map('intval', explode(',', $fields['window_placements'])) : [];
|
|||
|
|
$fields['payment_types'] = !empty($fields['payment_types']) ? array_filter(explode(',', $fields['payment_types'])) : [];
|
|||
|
|
|
|||
|
|
return $fields;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
public function get_frame_access($token) {
|
|||
|
|
$sql = "SELECT * FROM complexes_frame cf WHERE cf.token = '$token' AND cf.end_date >= NOW()";
|
|||
|
|
$query = $this->db->query($sql);
|
|||
|
|
$result = $this->db->fetch_assoc($query);
|
|||
|
|
if ($result) {
|
|||
|
|
return [
|
|||
|
|
'access' => true,
|
|||
|
|
'agency_id' => $result['agency_id'],
|
|||
|
|
];
|
|||
|
|
} else {
|
|||
|
|
return ['access' => 'denied'];
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
public function get_frame_colors($token) {
|
|||
|
|
$sql = "SELECT cf.frame_color, cf.color_reserved, cf.color_free FROM complexes_frame cf WHERE cf.token = '$token'";
|
|||
|
|
$query = $this->db->query($sql);
|
|||
|
|
$colors = $this->db->fetch_assoc($query);
|
|||
|
|
return $colors;
|
|||
|
|
}
|
|||
|
|
public function create_frame_requisition($data) {
|
|||
|
|
$token = $data['token'];
|
|||
|
|
$full_name = $data['full_name'];
|
|||
|
|
$phone_number = $data['phone_number'];
|
|||
|
|
$sql = "SELECT cf.agency_id, cf.client_funnel_id, cf.req_funnel_id FROM complexes_frame cf WHERE cf.token = '$token'";
|
|||
|
|
$query = $this->db->query($sql);
|
|||
|
|
$funnels = $this->db->fetch_assoc($query);
|
|||
|
|
$agency_id = $funnels['agency_id'];
|
|||
|
|
$client_funnel_id = $funnels['client_funnel_id'];
|
|||
|
|
$requisition_funnel_id = $funnels['req_funnel_id'];
|
|||
|
|
$confirm = 1;
|
|||
|
|
$complex_name = $data['complex_name'];
|
|||
|
|
$house_name = $data['house_name'];
|
|||
|
|
$entrance_name = $data['entrance_name'];
|
|||
|
|
$room_id = $data['room_number'];
|
|||
|
|
$description = "Заявка с каталога комплексов по объекту в {$complex_name}, {$house_name}, {$entrance_name}, № кв {$room_id}";
|
|||
|
|
|
|||
|
|
// Добавляем клиента
|
|||
|
|
$client_sql = "INSERT INTO clients (`fio`, `phone`, `opis`, `id_agent`, `date_add`, `who_work`, `confirm`, `funnel_id`)
|
|||
|
|
VALUES ('$full_name', '$phone_number', '$description', '$agency_id', NOW(), '$agency_id', '$confirm', '$client_funnel_id' )";
|
|||
|
|
$this->db->query($client_sql);
|
|||
|
|
$new_client_id = $this->db->insert_id();
|
|||
|
|
|
|||
|
|
// Добавляем заявку
|
|||
|
|
$requisition_sql = "INSERT INTO requisitions (`name`, `user_id`, `client_id`, `who_work`, `type_id`, `description`, `stage`, `funnel_id`)
|
|||
|
|
VALUES ('Подбор объекта для $full_name', '$agency_id', '$new_client_id', '$agency_id', 1, '$description', 1, '$requisition_funnel_id')";
|
|||
|
|
$this->db->query($requisition_sql);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
public function getComplexNamesForIframe($use_empty_rooms = false, $page = 1)
|
|||
|
|
{
|
|||
|
|
$limit = 10;
|
|||
|
|
$offset = ($page - 1) * $limit;
|
|||
|
|
|
|||
|
|
$result = array();
|
|||
|
|
$this->set_user();
|
|||
|
|
$this->set_users_ids();
|
|||
|
|
|
|||
|
|
// Формируем SQL-запрос
|
|||
|
|
if ($use_empty_rooms) {
|
|||
|
|
$sql = "SELECT id, `name`
|
|||
|
|
FROM complex_list
|
|||
|
|
WHERE agency_id={$this->user->agencyId}
|
|||
|
|
AND complex_list.arhive = 0
|
|||
|
|
AND complex_list.deleted = 0";
|
|||
|
|
} else {
|
|||
|
|
$sql = "SELECT complex_list.id, complex_list.name
|
|||
|
|
FROM complex_list
|
|||
|
|
LEFT JOIN complex_houses ON complex_houses.complex_id = complex_list.id
|
|||
|
|
LEFT JOIN complex_entrances complex_entrances ON complex_entrances.complex_house_id = complex_houses.id
|
|||
|
|
LEFT JOIN complex_floors complex_floors ON complex_floors.complex_entrance_id = complex_entrances.id
|
|||
|
|
LEFT JOIN complex_rooms complex_rooms ON complex_rooms.floor_id = complex_floors.id
|
|||
|
|
WHERE complex_list.agency_id={$this->user->agencyId}
|
|||
|
|
AND complex_list.arhive = 0
|
|||
|
|
AND complex_list.deleted = 0
|
|||
|
|
AND complex_houses.id IS NOT NULL
|
|||
|
|
AND complex_rooms.id IS NOT NULL
|
|||
|
|
GROUP BY complex_list.id
|
|||
|
|
HAVING COUNT(complex_houses.id) > 0 AND COUNT(complex_rooms.id) > 0";
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// Для подсчёта общего количества записей
|
|||
|
|
$count_sql = "SELECT COUNT(*) as count FROM ($sql) AS subquery";
|
|||
|
|
|
|||
|
|
// Добавляем LIMIT и OFFSET для основного запроса
|
|||
|
|
$sql .= " ORDER BY id DESC LIMIT {$limit} OFFSET {$offset}";
|
|||
|
|
|
|||
|
|
// Выполняем основной запрос
|
|||
|
|
$query = $this->db->query($sql);
|
|||
|
|
while ($row = $this->db->fetch_assoc($query)) {
|
|||
|
|
$result[] = $row;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// Выполняем запрос на подсчёт общего числа записей
|
|||
|
|
$count_query = $this->db->query($count_sql);
|
|||
|
|
$count_row = $this->db->fetch_assoc($count_query);
|
|||
|
|
$total = (int)$count_row['count'];
|
|||
|
|
$allPages = ceil($total / $limit);
|
|||
|
|
|
|||
|
|
return [
|
|||
|
|
'list' => $result,
|
|||
|
|
'total' => $total,
|
|||
|
|
'allPages' => $allPages
|
|||
|
|
];
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
public function searchForIframe($filter, $use_empty_rooms = false)
|
|||
|
|
{
|
|||
|
|
$whereComplex = '';
|
|||
|
|
$whereRoom = '';
|
|||
|
|
$whereAddress = '';
|
|||
|
|
$whereHouse = '';
|
|||
|
|
$whereFloor = '';
|
|||
|
|
$priceFilterKey = ' complex_rooms.total_amount ';
|
|||
|
|
|
|||
|
|
$havingComplex = "";
|
|||
|
|
|
|||
|
|
if (!$use_empty_rooms) {
|
|||
|
|
$havingComplex .= " HAVING COUNT(complex_houses.id) > 0 AND COUNT(complex_rooms.id) > 0";
|
|||
|
|
$whereComplex .= " AND complex_houses.id IS NOT NULL AND complex_rooms.id IS NOT NULL ";
|
|||
|
|
// $whereHouse .= " AND COUNT(complex_rooms.id) > 0 ";
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if ($filter) {
|
|||
|
|
if (!empty($filter->selectedDecorations)) {
|
|||
|
|
$whereRoom .= " AND complex_rooms.decoration_id in (" . implode(',', $filter->selectedDecorations) . ") ";
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if (!empty($filter->selectedTypes)) {
|
|||
|
|
$whereRoom .= " AND complex_rooms.type in ('" . implode('\',\'', $filter->selectedTypes) . "') ";
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if (!empty($filter->rooms)) {
|
|||
|
|
$isMoreThenFive = in_array('5-more', $filter->rooms);
|
|||
|
|
$isSelectedStudio = in_array('studio', $filter->rooms);
|
|||
|
|
|
|||
|
|
$filteredArray = array_filter($filter->rooms, function ($element) {
|
|||
|
|
return !in_array($element, ["5-more", "studio"]);
|
|||
|
|
});
|
|||
|
|
|
|||
|
|
|
|||
|
|
if ($isSelectedStudio) {
|
|||
|
|
$whereRoom .= " AND complex_rooms.layout_feature = 'studio' ";
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if (count($filteredArray)) {
|
|||
|
|
if ($isMoreThenFive) {
|
|||
|
|
$whereRoom .= " AND (complex_rooms.rooms_count >= 5 OR complex_rooms.rooms_count IN (" . implode(',', $filteredArray) . "))";
|
|||
|
|
} else {
|
|||
|
|
$whereRoom .= " AND complex_rooms.rooms_count IN (" . implode(',', $filteredArray) . ")";
|
|||
|
|
}
|
|||
|
|
} else if ($isMoreThenFive) {
|
|||
|
|
$whereRoom .= " AND complex_rooms.rooms_count >= 5 ";
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if (!empty($filter->rayons)) {
|
|||
|
|
$whereComplex .= " AND (";
|
|||
|
|
foreach ($filter->rayons as $index => $rayon) {
|
|||
|
|
$whereComplex .= " complex_address.rayon LIKE '%{$rayon}%'";
|
|||
|
|
if (isset($filter->rayons[$index + 1])) {
|
|||
|
|
$whereComplex .= " OR ";
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
$whereComplex .= " ) ";
|
|||
|
|
// var_dump($whereAddress);die;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if (!empty($filter->selectedMetros)) {
|
|||
|
|
$whereComplex .= " AND complex_metro.metro_id in (" . implode(',', $filter->selectedMetros) . ")";
|
|||
|
|
}
|
|||
|
|
if (!empty($filter->complexes)) {
|
|||
|
|
$whereComplex .= " AND complex_list.id in (" . implode(',', $filter->complexes) . ")";
|
|||
|
|
}
|
|||
|
|
if (!empty($filter->address)) {
|
|||
|
|
$whereComplex .= " AND complex_address.address like '%{$filter->address}%'";
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if (!empty($filter->squareKitchen_min)) {
|
|||
|
|
$whereRoom .= " AND complex_rooms.kitchen_area >= {$filter->squareKitchen_min}";
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if (!empty($filter->squareKitchen_max)) {
|
|||
|
|
$whereRoom .= " AND complex_rooms.kitchen_area <= {$filter->squareKitchen_max}";
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if (!empty($filter->area_from)) {
|
|||
|
|
$whereRoom .= " AND complex_rooms.area >= {$filter->area_from}";
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if (!empty($filter->area_to)) {
|
|||
|
|
$whereRoom .= " AND complex_rooms.area <= {$filter->area_to}";
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if (filter_var($filter->useSquarePrice, FILTER_VALIDATE_BOOLEAN)) {
|
|||
|
|
$priceFilterKey = " complex_rooms.total_amount / complex_rooms.area ";
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if (!empty($filter->price_from)) {
|
|||
|
|
|
|||
|
|
$whereRoom .= " AND {$priceFilterKey} >= {$filter->price_from}";
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if (!empty($filter->price_to)) {
|
|||
|
|
$whereRoom .= " AND {$priceFilterKey} <= {$filter->price_to}";
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if (!empty($filter->floor_from)) {
|
|||
|
|
$whereFloor .= " AND complex_floors.position >= {$filter->floor_from}";
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if (!empty($filter->floor_to)) {
|
|||
|
|
$whereFloor .= " AND complex_floors.position <= {$filter->floor_to}";
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if (!empty($filter->selectedComplexTypes)) {
|
|||
|
|
$whereComplex .= " AND complex_list.type in ('" . implode('\',\'', $filter->selectedComplexTypes) . "')";
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if (!empty($filter->period)) {
|
|||
|
|
if ($filter->period == 'completed') {
|
|||
|
|
$currentMonth = date('n');
|
|||
|
|
$currentYear = date('Y');
|
|||
|
|
|
|||
|
|
$currentQuarter = ceil($currentMonth / 3);
|
|||
|
|
$whereHouse .= " AND complex_houses.deadline_quarter <= $currentQuarter AND complex_houses.deadline_year <= $currentYear ";
|
|||
|
|
} else {
|
|||
|
|
list($year, $quarter) = explode('Q', $filter->period);
|
|||
|
|
|
|||
|
|
$whereHouse .= " AND complex_houses.deadline_quarter = $quarter AND complex_houses.deadline_year = $year ";
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if(!empty($filter->is_partner_show)){
|
|||
|
|
$whereHouse .= " AND complex_houses.is_partner_show = 1 ";
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// if (!empty($filter->is_archive)) {
|
|||
|
|
// $whereComplex .= " AND complex_list.arhive = 1 ";
|
|||
|
|
// } else {
|
|||
|
|
// $whereComplex .= " AND complex_list.arhive = 0 ";
|
|||
|
|
// }
|
|||
|
|
|
|||
|
|
// Фильтрация по способам оплаты
|
|||
|
|
if (!empty($filter->selectedPaymentTypes)) {
|
|||
|
|
$conditions = [];
|
|||
|
|
|
|||
|
|
foreach ($filter->selectedPaymentTypes as $pt) {
|
|||
|
|
$conditions[] = "complex_rooms.payment_types LIKE '%\"{$pt}\"%'";
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if (!empty($conditions)) {
|
|||
|
|
$whereRoom .= " AND (" . implode(' OR ', $conditions) . ")";
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// Installment-specific filtering
|
|||
|
|
if (in_array('INSTALLMENT', $filter->selectedPaymentTypes)) {
|
|||
|
|
$whereRoom .= " AND EXISTS (
|
|||
|
|
SELECT 1
|
|||
|
|
FROM complex_house_installments chi
|
|||
|
|
JOIN complex_entrances ce ON ce.complex_house_id = chi.house_id
|
|||
|
|
JOIN complex_floors cf ON cf.complex_entrance_id = ce.id
|
|||
|
|
JOIN installments i ON i.id = chi.installment_id
|
|||
|
|
WHERE cf.id = complex_rooms.floor_id
|
|||
|
|
AND i.is_archive = 0"
|
|||
|
|
. (!empty($filter->selectedInstallments)
|
|||
|
|
? " AND chi.installment_id IN (" . implode(',', $filter->selectedInstallments) . ")"
|
|||
|
|
: "")
|
|||
|
|
. ((isset($filter->initialPayment) && is_numeric($filter->initialPayment))
|
|||
|
|
? " AND complex_rooms.installment_price IS NOT NULL AND complex_rooms.installment_price > 0 AND ((i.initial_payment / 100.0) * complex_rooms.installment_price) <= " . (float)$filter->initialPayment
|
|||
|
|
: "")
|
|||
|
|
. ((isset($filter->paymentTerm) && is_numeric($filter->paymentTerm))
|
|||
|
|
? " AND (DATEDIFF(chi.end_date, CURDATE()) / 30.44) >= " . (float)$filter->paymentTerm
|
|||
|
|
: "")
|
|||
|
|
. ((isset($filter->installmentPrice->min) && is_numeric($filter->installmentPrice->min))
|
|||
|
|
? " AND complex_rooms.installment_price >= " . (float)$filter->installmentPrice->min
|
|||
|
|
: "")
|
|||
|
|
. ((isset($filter->installmentPrice->max) && is_numeric($filter->installmentPrice->max))
|
|||
|
|
? " AND complex_rooms.installment_price <= " . (float)$filter->installmentPrice->max
|
|||
|
|
: "")
|
|||
|
|
. ")";
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
$whereComplex .= " AND complex_list.arhive = 0 ";
|
|||
|
|
|
|||
|
|
$this->limit = 10;
|
|||
|
|
$limitSqlComolex = " limit {$this->limit}";
|
|||
|
|
|
|||
|
|
$this->set_user();
|
|||
|
|
$this->set_users_ids();
|
|||
|
|
|
|||
|
|
if ($this->page > 0) {
|
|||
|
|
$limitSqlComolex = ' limit ' . ($this->page - 1) * $this->limit . ', ' . $this->limit;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if ($this->user->agencyId == 20382) {
|
|||
|
|
$filter_by_status = "";
|
|||
|
|
} else {
|
|||
|
|
$filter_by_status = "AND cs.status IN ('available', 'reservation')";
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// var_dump($limitSqlComolex);die;
|
|||
|
|
$result = array();
|
|||
|
|
|
|||
|
|
$sql_total = "SELECT count(DISTINCT complex_list.id) as total, count( DISTINCT complex_houses.id) as houses_total, COUNT(DISTINCT complex_rooms.id) as total_rooms FROM complex_list
|
|||
|
|
LEFT JOIN complex_houses ON complex_houses.complex_id = complex_list.id AND (complex_houses.deleted_at IS NULL OR complex_houses.deleted_at = '0000-00-00 00:00:00') {$whereHouse}
|
|||
|
|
LEFT JOIN complex_metro ON complex_metro.complex_id = complex_list.id
|
|||
|
|
LEFT JOIN complex_address ON complex_address.complex_id = complex_list.id
|
|||
|
|
LEFT JOIN complex_entrances complex_entrances ON complex_entrances.complex_house_id = complex_houses.id
|
|||
|
|
LEFT JOIN complex_floors complex_floors ON complex_floors.complex_entrance_id = complex_entrances.id {$whereFloor}
|
|||
|
|
LEFT JOIN complex_rooms complex_rooms ON complex_rooms.floor_id = complex_floors.id {$whereRoom}
|
|||
|
|
LEFT JOIN complex_status cs ON complex_rooms.complex_status_id = cs.id AND cs.is_archive = 0
|
|||
|
|
WHERE complex_list.agency_id={$this->user->agencyId}
|
|||
|
|
AND complex_list.deleted = 0
|
|||
|
|
{$filter_by_status}
|
|||
|
|
{$whereComplex}
|
|||
|
|
{$havingComplex}
|
|||
|
|
ORDER BY complex_list.id DESC
|
|||
|
|
";
|
|||
|
|
|
|||
|
|
$q_total = $this->db->query($sql_total);
|
|||
|
|
$result['total'] = (int)$this->db->fetch_assoc($q_total)['total'];
|
|||
|
|
|
|||
|
|
$sql = "SELECT complex_list.*, count( DISTINCT complex_houses.id) as houses_total, COUNT(DISTINCT complex_rooms.id) as total_rooms, MIN(complex_rooms.total_amount) AS min_total_amount FROM complex_list
|
|||
|
|
LEFT JOIN complex_houses ON complex_houses.complex_id = complex_list.id AND (complex_houses.deleted_at IS NULL OR complex_houses.deleted_at = '0000-00-00 00:00:00') {$whereHouse}
|
|||
|
|
LEFT JOIN complex_metro ON complex_metro.complex_id = complex_list.id
|
|||
|
|
LEFT JOIN complex_address ON complex_address.complex_id = complex_list.id
|
|||
|
|
LEFT JOIN complex_entrances complex_entrances ON complex_entrances.complex_house_id = complex_houses.id
|
|||
|
|
LEFT JOIN complex_floors complex_floors ON complex_floors.complex_entrance_id = complex_entrances.id {$whereFloor}
|
|||
|
|
LEFT JOIN complex_rooms complex_rooms ON complex_rooms.floor_id = complex_floors.id {$whereRoom}
|
|||
|
|
LEFT JOIN complex_status cs ON complex_rooms.complex_status_id = cs.id AND cs.is_archive = 0
|
|||
|
|
WHERE complex_list.agency_id={$this->user->agencyId}
|
|||
|
|
AND complex_list.deleted = 0
|
|||
|
|
{$filter_by_status}
|
|||
|
|
{$whereComplex}
|
|||
|
|
GROUP BY complex_list.id
|
|||
|
|
{$havingComplex}
|
|||
|
|
ORDER BY complex_list.id DESC {$limitSqlComolex}
|
|||
|
|
";
|
|||
|
|
|
|||
|
|
$q = $this->db->query($sql);
|
|||
|
|
// , MIN(complex_rooms.total_amount) AS min_total_amount
|
|||
|
|
// echo '<pre>';
|
|||
|
|
// print_r($q->queryString);
|
|||
|
|
// echo '</pre>';
|
|||
|
|
// die();
|
|||
|
|
|
|||
|
|
// var_dump($q);die;
|
|||
|
|
// $result['total'] = $this->db->num_rows($q);
|
|||
|
|
// var_dump('test');die;
|
|||
|
|
|
|||
|
|
$result['allPages'] = ceil($result['total'] / $this->limit);
|
|||
|
|
$result['agency_name'] = $this->user->agencyName;
|
|||
|
|
$result['agency_logo'] = $this->user->photo;
|
|||
|
|
$result['agency_phone'] = $this->user->agencyPhone;
|
|||
|
|
// var_dump($result['agency_phone']);die;
|
|||
|
|
// var_dump($this->user);die;
|
|||
|
|
// var_dump($result);die;
|
|||
|
|
while ($r = $this->db->fetch_assoc($q)) {
|
|||
|
|
$result['list']['complex_' . $r['id']] = $this->get_complex_one($r['id'], true, false);
|
|||
|
|
$result['list']['complex_' . $r['id']]['houses_total'] = $r['houses_total'];
|
|||
|
|
$result['list']['complex_' . $r['id']]['total_rooms'] = $r['total_rooms'];
|
|||
|
|
$result['list']['complex_' . $r['id']]['min_total_amount'] = $r['min_total_amount'];
|
|||
|
|
// var_dump($r);die;
|
|||
|
|
}
|
|||
|
|
$result['debug']['sql'] = $q;
|
|||
|
|
// var_dump($result);die;
|
|||
|
|
|
|||
|
|
return $result;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
private function generateUniqueColor($house_id)
|
|||
|
|
{
|
|||
|
|
$colors = [
|
|||
|
|
'#F44336', // red
|
|||
|
|
'#E91E63', // pink
|
|||
|
|
'#9C27B0', // purple
|
|||
|
|
'#673AB7',
|
|||
|
|
'#3F51B5',
|
|||
|
|
'#2196F3',
|
|||
|
|
'#03A9F4',
|
|||
|
|
'#00BCD4',
|
|||
|
|
'#009688',
|
|||
|
|
'#4CAF50',
|
|||
|
|
'#8BC34A',
|
|||
|
|
'#CDDC39',
|
|||
|
|
'#FFC107',
|
|||
|
|
'#FF9800',
|
|||
|
|
'#FF5722'
|
|||
|
|
];
|
|||
|
|
|
|||
|
|
// get used colors
|
|||
|
|
$sql = "SELECT color FROM complex_house_media_set WHERE complex_house_id = {$house_id}";
|
|||
|
|
$q = $this->db->query($sql);
|
|||
|
|
|
|||
|
|
$used = [];
|
|||
|
|
while ($row = $this->db->fetch_assoc($q)) {
|
|||
|
|
$used[] = $row['color'];
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// find unused
|
|||
|
|
foreach ($colors as $color) {
|
|||
|
|
if (!in_array($color, $used)) {
|
|||
|
|
return $color;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// fallback → random color
|
|||
|
|
return sprintf('#%06X', mt_rand(0, 0xFFFFFF));
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
public function findUser($sessionId)
|
|||
|
|
{
|
|||
|
|
$userSql = "SELECT id, agency, users_admin, role_developer FROM users where id={$sessionId}";
|
|||
|
|
$query = $this->db->query($userSql);
|
|||
|
|
|
|||
|
|
return $this->db->fetch_assoc($query);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
public function getMediaThumbnails(array $mediaIds)
|
|||
|
|
{
|
|||
|
|
if (empty($mediaIds)) {
|
|||
|
|
return [];
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// Sanitize IDs (ensure integers)
|
|||
|
|
$mediaIds = array_map('intval', $mediaIds);
|
|||
|
|
$idsList = implode(',', $mediaIds);
|
|||
|
|
|
|||
|
|
$sql = "SELECT id, thumbnail_path
|
|||
|
|
FROM complex_house_media
|
|||
|
|
WHERE id IN ($idsList)";
|
|||
|
|
|
|||
|
|
$query = $this->db->query($sql);
|
|||
|
|
|
|||
|
|
$results = [];
|
|||
|
|
|
|||
|
|
while ($row = $this->db->fetch_assoc($query)) {
|
|||
|
|
$results[] = [
|
|||
|
|
'id' => $row['id'],
|
|||
|
|
'thumbnail' => !empty($row['thumbnail_path'])
|
|||
|
|
? 'https://data.joywork.ru' . $row['thumbnail_path']
|
|||
|
|
: null
|
|||
|
|
];
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
return $results;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
public function findHouseComplexAgency($homeId)
|
|||
|
|
{
|
|||
|
|
$sql = "
|
|||
|
|
SELECT cl.agency_id
|
|||
|
|
FROM complex_houses ch
|
|||
|
|
JOIN complex_list cl ON cl.id = ch.complex_id
|
|||
|
|
WHERE ch.id = {$homeId}
|
|||
|
|
";
|
|||
|
|
|
|||
|
|
$query = $this->db->query($sql);
|
|||
|
|
|
|||
|
|
$result = $this->db->fetch_assoc($query);
|
|||
|
|
|
|||
|
|
return isset($result['agency_id']) && $result['agency_id'] ? $result['agency_id'] : null;
|
|||
|
|
}
|
|||
|
|
}
|