Joywork/presentation-api/Models/ComplexesModel.php
2026-05-22 21:21:54 +03:00

295 lines
15 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?php
class ComplexesModel extends BaseModel {
public function getComplexes($params) {
if (!is_array($params)) {
return false;
}
$id = $this->arrToString($params);
$catalog = "SELECT * FROM sent_catalog WHERE id = '$id'";
$catalogQuery = $this->db->query($catalog);
if ($catalogRes = $this->db->fetch_assoc($catalogQuery)) {
$agent_id = $catalogRes['agent_id'];
$agent = "SELECT users.first_name, last_name, middle_name, id_manager, phone, photo, email, user_logo, phoneAgency, site, agency_name FROM users WHERE id = '$agent_id'";
$agentQuery = $this->db->query($agent);
$agentArr = [];
if ($agentRes = $this->db->fetch_assoc($agentQuery)) {
$agentRes['agency_name'] = html_entity_decode($agentRes['agency_name'], ENT_QUOTES, 'UTF-8');
if ($agentRes['id_manager']) {
$managerSql = "SELECT id_manager, photo, agency_name FROM users WHERE id = '$agentRes[id_manager]'";
$managerQuery = $this->db->query($managerSql);
$manager = $this->db->fetch_assoc($managerQuery);
if ($manager && $manager['id_manager']) {
$agencySql = "SELECT photo, agency_name FROM users WHERE id = '$manager[id_manager]'";
$agencyQuery = $this->db->query($agencySql);
$agency = $this->db->fetch_assoc($agencyQuery);
if ($agency) {
$agentRes['photo'] = $agency['photo'];
$agentRes['agency_name'] = $agency['agency_name'];
}
} else {
if ($manager) {
$agentRes['photo'] = $manager['photo'];
$agentRes['agency_name'] = $manager['agency_name'];
}
}
}
$agentArr = $agentRes;
}
}
// Находим комплекс
$complexes = "SELECT cl.*, rr.name as region_name, cd.title_desc as note_text, cd.text_desc as note, ca.address as complex_address, ca.latitude as latitude, ca.longitude as longitude,
COUNT(caf.id) AS count_favorite_apartments
FROM complex_list cl
LEFT JOIN complex_address ca ON ca.complex_id = cl.id
LEFT JOIN rf_regions rr ON rr.id = cl.rf_region_id
JOIN complex_houses ch ON ch.complex_id = cl.id AND (ch.deleted_at IS NULL OR ch.deleted_at = '0000-00-00 00:00:00')
JOIN complex_entrances ce ON ce.complex_house_id = ch.id
JOIN complex_floors cf ON cf.complex_entrance_id = ce.id
JOIN complex_rooms cr ON cr.floor_id = cf.id
LEFT JOIN catalogs_apartments_favorite caf ON caf.apartment_id = cr.id AND caf.catalog_id = '$id'
LEFT JOIN complex_dop cd ON cd.complex_id = cl.id
WHERE cr.id IN (SELECT id_object FROM sended_pdf_complexes WHERE sent_catalog_id = '$id')
GROUP BY cl.id";
$complexesQuery = $this->db->query($complexes);
$complexesArr = [];
while ($complexesRes = $this->db->fetch_assoc($complexesQuery)) {
$complex_id = $complexesRes['id'];
// Тут фото блока
$complex_img = "SELECT image from complex_images WHERE complex_id = '$complex_id'";
$complex_imgQuery = $this->db->query($complex_img);
$complex_imgArr = [];
while ($complex_imgRes = $this->db->fetch_assoc($complex_imgQuery)) {
$complex_imgArr[] = $complex_imgRes['image'];
}
// Находим метро
$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'";
$metroArr = [];
$metroQuery = $this->db->query($metro);
while ($metro = $this->db->fetch_assoc($metroQuery)) {
$metroArr[] = $metro;
}
// Находим квартиры(апартаменты)
$complex_rooms = "SELECT
IF(caf.id IS NOT NULL, 1, 0) AS is_favorite,
IF(complex_rooms.layout_feature = 'studio', 'Студия',
IF(complex_rooms.rooms_count >= 6, '6+ ккв',
CONCAT(complex_rooms.rooms_count, ' ккв'))) AS room_type_name,
dt.name AS decoration,
complex_rooms.*,
cf.position AS building_floors,
ch.name AS corpus_name,
chpi.url AS image,
cf.position AS floor,
spc.new_installment_price AS new_installment_price,
spc.new_presentation_note AS new_presentation_note,
spc.calculation_data AS calculation_data,
DATE_FORMAT(STR_TO_DATE(CONCAT(ch.deadline_year, '-',
CASE ch.deadline_quarter
WHEN '1' THEN '03'
WHEN '2' THEN '06'
WHEN '3' THEN '09'
WHEN '4' THEN '12'
END, '-01'), '%Y-%m-%d'), '%Y-%m-01 00:00:00')
AS building_deadline
FROM complex_rooms
JOIN complex_floors cf ON cf.id = complex_rooms.floor_id
JOIN complex_entrances ce ON ce.id = cf.complex_entrance_id
JOIN complex_houses ch ON ce.complex_house_id = ch.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
JOIN sended_pdf_complexes spc ON spc.sent_catalog_id = '$id' AND spc.id_object = complex_rooms.id
LEFT JOIN decoration_types dt ON dt.id = complex_rooms.decoration_id
LEFT JOIN catalogs_apartments_favorite caf ON caf.apartment_id = complex_rooms.id AND caf.catalog_id = '$id'
LEFT JOIN complex_rooms_plans crp ON crp.room_id = complex_rooms.id
LEFT JOIN complex_house_plans_images chpi ON crp.plan_id = chpi.plan_id AND chpi.position = 1
WHERE complex_rooms.id IN (SELECT id_object FROM sended_pdf_complexes WHERE sent_catalog_id = '$id')
AND cl.id = '$complex_id'
GROUP BY complex_rooms.id";
$complexRoomsQuery = $this->db->query($complex_rooms);
$complexRoomsArr = [];
while ($complexRoomsRes = $this->db->fetch_assoc($complexRoomsQuery)) {
$complexRoomsRes['is_favorite'] = (bool)$complexRoomsRes['is_favorite'];
if (!empty($complexRoomsRes['calculation_data'])) {
$complexRoomsRes['calculation_data'] = json_decode($complexRoomsRes['calculation_data'], true);
} else {
$complexRoomsRes['calculation_data'] = [];
}
// Получаем attributes отдельным запросом
$room_id = $complexRoomsRes['id'];
$attributesSql = "SELECT * FROM complex_rooms_attribute WHERE complex_room_id = '$room_id'";
$attributesQuery = $this->db->query($attributesSql);
// создаём массив с группировкой по типу
$attributesGrouped = [
'rooms' => [],
'bathrooms' => [],
'loggias' => []
];
while ($attr = $this->db->fetch_assoc($attributesQuery)) {
switch ($attr['attribute_type']) {
case 'room':
$attributesGrouped['rooms'][] = $attr;
break;
case 'bathroom':
$attributesGrouped['bathrooms'][] = $attr;
break;
case 'loggia':
$attributesGrouped['loggias'][] = $attr;
break;
case 'balcony':
$attributesGrouped['balcony'][] = $attr;
break;
}
}
$complexRoomsRes['attributes'] = $attributesGrouped;
$floor_id = $complexRoomsRes['floor_id'];
$sql = "
SELECT chfp.image AS image_floor
FROM complex_floors_plans cfp
LEFT JOIN complex_house_floor_plans chfp
ON cfp.floor_plan_id = chfp.id
WHERE cfp.floor_id = '$floor_id'
";
$imageRes = $this->db->fetch_assoc($this->db->query($sql));
$image_floor = $imageRes['image_floor'];
$complexRoomsRes['image_floor'] = $image_floor;
$complexRoomsArr[] = $complexRoomsRes;
}
$complexesRes['apartments'] = $complexRoomsArr;
$complexesRes['block_img'] = $complex_imgArr;
$complexesRes['metros'] = $metroArr;
$complexesRes['image'] = count($complex_imgArr) ? $complex_imgArr[0] : null;
$complexesArr[] = $complexesRes;
}
return [
'id' => $catalogRes['id'],
'agent_id' => $catalogRes['agent_id'],
'agent' => $agentArr,
'blocks' => $complexesArr,
];
}
// apartment presentation page
public function getApartment($id, $token) {
if (!is_array($id)) {
return false;
}
$user = [];
$id = $this->arrToString($id);
if ($token) {
$userSql = "SELECT id, fio, phone, photo, email, site, first_name, last_name, middle_name, id_manager, user_logo FROM users WHERE MD5(id)='$token'";
$rez_user = $this->db->query($userSql);
$user = $this->db->fetch_assoc($rez_user);
if ($user['id_manager']) {
$sql = "SELECT id_manager, photo, fio FROM users WHERE id='$user[id_manager]'";
$rez = $this->db->query($sql);
$manager = $this->db->fetch_assoc($rez);
if ($manager['id_manager']) {
$agency = $this->db->fetch_assoc($this->db->query("SELECT id_manager, email, site, first_name, last_name, middle_name, photo, fio FROM users WHERE id='$manager[id_manager]'"));
} else {
$agency = $manager;
}
$user['photo'] = $agency['photo'];
$user['agency_name'] = trim($agency['last_name'] . ' ' . $agency['first_name'] . ' ' . $agency['middle_name']);
} else {
$user['agency_name'] = $user['fio'];
}
}
$complex_sql = "SELECT cl.*, rr.name as region_name, cd.title_desc as note_text, cd.text_desc as note, ca.address as complex_address, ca.latitude as latitude, ca.longitude as longitude
FROM complex_list cl
LEFT JOIN complex_address ca ON ca.complex_id = cl.id
LEFT JOIN rf_regions rr ON rr.id = cl.rf_region_id
JOIN complex_houses ch ON ch.complex_id = cl.id AND (ch.deleted_at IS NULL OR ch.deleted_at = '0000-00-00 00:00:00')
JOIN complex_entrances ce ON ce.complex_house_id = ch.id
JOIN complex_floors cf ON cf.complex_entrance_id = ce.id
JOIN complex_rooms cr ON cr.floor_id = cf.id
LEFT JOIN complex_dop cd ON cd.complex_id = cl.id
WHERE cr.id = '$id'
";
$complex_q = $this->db->query($complex_sql);
$complex_res = $this->db->fetch_assoc($complex_q);
$complex_id = $complex_res['id'];
// // Тут фото блока
$complex_img = "SELECT image from complex_images WHERE complex_id = '$complex_id'";
$complex_imgQuery = $this->db->query($complex_img);
$complex_imgArr = [];
while ($complex_imgRes = $this->db->fetch_assoc($complex_imgQuery)) {
$complex_imgArr[] = $complex_imgRes['image'];
}
// Находим метро
$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'";
$metroArr = [];
$metroQuery = $this->db->query($metro);
while ($metro = $this->db->fetch_assoc($metroQuery)) {
$metroArr[] = $metro;
}
$complex_res['block_img'] = $complex_imgArr;
$complex_res['metros'] = $metroArr;
$complex_res['image'] = count($complex_imgArr) ? $complex_imgArr[0] : null;
// Находим квартиры(апартаменты)
$complex_room_sql = "SELECT
IF(complex_rooms.layout_feature = 'studio', 'Студия',
IF(complex_rooms.rooms_count >= 6, '6+ ккв',
CONCAT(complex_rooms.rooms_count, ' ккв'))) AS room_type_name,
dt.name AS decoration,
complex_rooms.*,
cf.position AS building_floors,
ch.name AS corpus_name,
chpi.url AS image,
cf.position AS floor,
DATE_FORMAT(STR_TO_DATE(CONCAT(ch.deadline_year, '-',
CASE ch.deadline_quarter
WHEN '1' THEN '03'
WHEN '2' THEN '06'
WHEN '3' THEN '09'
WHEN '4' THEN '12'
END, '-01'), '%Y-%m-%d'), '%Y-%m-01 00:00:00')
AS building_deadline
FROM complex_rooms
JOIN complex_floors cf ON cf.id = complex_rooms.floor_id
JOIN complex_entrances ce ON ce.id = cf.complex_entrance_id
JOIN complex_houses ch ON ce.complex_house_id = ch.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
LEFT JOIN decoration_types dt ON dt.id = complex_rooms.decoration_id
LEFT JOIN complex_rooms_plans crp ON crp.room_id = complex_rooms.id
LEFT JOIN complex_house_plans_images chpi ON crp.plan_id = chpi.plan_id AND chpi.position = 1
WHERE complex_rooms.id = '$id'";
$complex_q = $this->db->query($complex_room_sql);
$complex_room = $this->db->fetch_assoc($complex_q);
return [
"user" => $user,
"apartment" => $complex_room,
"block" => $complex_res
];
}
}