Joywork/constructor/Models/NewBuildingModel.php

248 lines
8.7 KiB
PHP
Raw Normal View History

2026-05-22 20:21:54 +02:00
<?php
class NewBuildingModel extends BaseModel
{
public function getAll()
{
// global $agent;
// $agencyRegionId = $this->arrToString($agency_id);
$sqlComplexes =
"SELECT complex_list.* FROM complex_list
JOIN users ON users.region_rf_id = complex_list.rf_region_id
WHERE users.id = {$this->agent['id']} AND newbuildings_access = '0'";
$complexesQuery = $this->db->query($sqlComplexes);
$complexesArr = [];
while ($complexesResult = $this->db->fetch_assoc($complexesQuery)) {
// var_dump($complexesResult);die;
// $complex_id = $complexesResult['id'];
$complexesArr[] = $complexesResult;
}
return $complexesArr;
}
public function getNewBuildingBlock($params)
{
$block_id = $params['block_id'];
$blocksQuery = $this->db->query("SELECT b.*, r.name AS region_name
FROM blocks b
LEFT JOIN regions r ON r.id = b.region_id
JOIN apartments a ON a.block_id = b.id
JOIN buildings ON buildings.id = a.building_id
WHERE b.id = $block_id
");
$block = $this->db->fetch_assoc($blocksQuery);
if (!$block) {
return ['status' => false];
}
// Получение изображений блока
$block_img = "SELECT image FROM block_images WHERE model_id = $block_id";
$block_imgQuery = $this->db->query($block_img);
$block_imgArr = [];
while ($block_imgRes = $this->db->fetch_assoc($block_imgQuery)) {
$block_imgArr[] = $block_imgRes['image'];
}
// Получение данных по метро
$metro = "SELECT subway_id, distance, metro
FROM block_subways
LEFT JOIN metro ON block_subways.subway_id = metro.id
WHERE block_subways.block_id = $block_id";
$metroQuery = $this->db->query($metro);
$metroArr = [];
while ($metroRes = $this->db->fetch_assoc($metroQuery)) {
$metroArr[] = $metroRes;
}
// Получение квартир
$apartments = "SELECT room_types.name AS room_type_name, decoration_types.name AS decoration, a.*,
buildings.corp AS building_corp, buildings.floors AS building_floors, buildings.deadline AS building_deadline
FROM apartments a
JOIN buildings ON buildings.id = a.building_id
JOIN decoration_types ON decoration_types.id = a.decoration_id
JOIN room_types ON room_types.id = a.room_type_id
WHERE a.block_id = $block_id
";
$apartmentsQuery = $this->db->query($apartments);
$apartmentsArr = [];
while ($apartmentsRes = $this->db->fetch_assoc($apartmentsQuery)) {
$apartmentsRes['visible'] = true;
$apartmentsArr[] = $apartmentsRes;
}
// Получение данных по зданиям (корпуса, этажи и дедлайны)
$buildings = "SELECT corp AS building_corp, floors AS building_floors, deadline AS building_deadline
FROM buildings
WHERE id IN (SELECT building_id FROM apartments WHERE block_id = $block_id)";
$buildingsQuery = $this->db->query($buildings);
$maxFloors = 0;
$buildingCorpsArr = [];
$deadlinesArr = [];
while ($buildingsRes = $this->db->fetch_assoc($buildingsQuery)) {
// Собираем массив корпусов
$buildingCorpsArr[] = $buildingsRes['building_corp'];
// Определяем максимальное количество этажей
if ($buildingsRes['building_floors'] > $maxFloors) {
$maxFloors = $buildingsRes['building_floors'];
}
// Добавляем дедлайн в массив дедлайнов
$deadlinesArr[] = $buildingsRes['building_deadline'];
}
// Формируем массив block_info
$block_info = [
'building_corps' => $buildingCorpsArr, // Массив корпусов
'max_floors' => $maxFloors, // Самый высокий этаж
'deadlines' => $deadlinesArr // Массив дедлайнов
];
$block['apartments'] = $apartmentsArr;
$block['block_img'] = $block_imgArr;
$block['metros'] = $metroArr;
$block['block_info'] = $block_info; // Добавляем массив block_info
return [
'block' => $block,
];
}
public function getNewBuildingBlocks($params, $current_page)
{
// $constructor_id = $params['id'];
// $agency_id = $frameRes['agency_id'];
// $agency = "SELECT users.first_name, last_name, middle_name, phone, photo, email, user_logo, phoneAgency, site, agency_name
// FROM users WHERE id = $agency_id";
// $agencyQuery = $this->db->query($agency);
// $agencyData = [];
// if ($agencyRes = $this->db->fetch_assoc($agencyQuery)) {
// $agencyData = $agencyRes;
// } else {
// return 'ended';
// }
// $price_from = $query['price_from'];
// $price_to = $query['price_to'];
// $building_dl = $query['building_dl'];
// $current_page = $query['page'];
// $room_type_id = $query['room_type_id'];
// $room_type_ids = array_map('intval', explode(',', $room_type_id));
// $sql_filter = '';
// echo htmlspecialchars($sql_filter);
// if (!empty($price_from)) {
// $sql_filter .= " AND a.price >= $price_from";
// }
// if (!empty($price_to)) {
// $sql_filter .= " AND a.price <= $price_to";
// }
// if (!empty($room_type_id)) {
// $room_type_id_list = implode(',', array_map('intval', $room_type_ids));
// $sql_filter .= " AND a.room_type_id IN ($room_type_id_list)";
// }
// if (!empty($building_dl) && $building_dl !== "ready") {
// $sql_filter .= " AND DATE(buildings.deadline) <= '$building_dl'";
// } else if ($building_dl === "ready") {
// $sql_filter .= " AND DATE(buildings.deadline) < now()";
// }
$per_page = 21;
$offset = $per_page * ($current_page - 1);
$blocks = "SELECT b.*, r.name AS region_name
FROM blocks b
LEFT JOIN regions r ON r.id = b.region_id
JOIN apartments a ON a.block_id = b.id
JOIN buildings ON buildings.id = a.building_id
GROUP BY b.id
LIMIT $per_page
OFFSET $offset
";
$blocks_count = "SELECT count(DISTINCT b.id) as total_count
FROM blocks b
LEFT JOIN regions r ON r.id = b.region_id
JOIN apartments a ON a.block_id = b.id
JOIN buildings ON buildings.id = a.building_id
";
$blocks_count_query = $this->db->query($blocks_count);
$count_row = $this->db->fetch_assoc($blocks_count_query);
$blocksQuery = $this->db->query($blocks);
$blocksData = [];
while ($blocksRes = $this->db->fetch_assoc($blocksQuery)) {
$block_id = $blocksRes['id'];
// Получение изображений блока
$block_img = "SELECT image FROM block_images WHERE model_id = $block_id";
$block_imgQuery = $this->db->query($block_img);
$block_imgArr = [];
while ($block_imgRes = $this->db->fetch_assoc($block_imgQuery)) {
$block_imgArr[] = $block_imgRes['image'];
}
// Получение данных по метро
$metro = "SELECT s.name as metro, bs.distance
FROM block_subways bs, subways s
WHERE s.id = bs.subway_id
AND bs.block_id=$block_id";
$metroQuery = $this->db->query($metro);
$metroArr = [];
while ($metroRes = $this->db->fetch_assoc($metroQuery)) {
$metroArr[] = $metroRes;
}
// Получение квартир
$apartments = "SELECT room_types.name AS room_type_name, decoration_types.name AS decoration, a.*,
buildings.corp AS building_corp, buildings.floors AS building_floors, buildings.deadline AS building_deadline
FROM apartments a
JOIN buildings ON buildings.id = a.building_id
JOIN decoration_types ON decoration_types.id = a.decoration_id
JOIN room_types ON room_types.id = a.room_type_id
WHERE a.block_id = $block_id
";
$apartmentsQuery = $this->db->query($apartments);
$apartmentsArr = [];
while ($apartmentsRes = $this->db->fetch_assoc($apartmentsQuery)) {
// $apartmentsRes['visible'] = true;
$apartmentsArr[] = $apartmentsRes;
}
$blocksRes['apartments'] = $apartmentsArr;
$blocksRes['block_img'] = $block_imgArr;
$blocksRes['metros'] = $metroArr;
$blocksData[] = $blocksRes;
}
return [
'blocks' => $blocksData,
'count_blocks' => $count_row['total_count'],
'type' => 'newbuildings',
];
}
}