295 lines
15 KiB
PHP
295 lines
15 KiB
PHP
|
|
<?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
|
|||
|
|
];
|
|||
|
|
}
|
|||
|
|
}
|