Joywork/ajax/getNBChart.php

161 lines
6.2 KiB
PHP
Raw Normal View History

2026-05-22 20:21:54 +02:00
<?php
if (isset($_POST['obj']) && !empty($_POST['obj'])) {
$block_id = $_POST['obj'];
$chart_data = [];
require_once($_SERVER['DOCUMENT_ROOT'] . "/config.php");
//-----
$sql = "SELECT apartments_sales.id, block_id, room_type_id, is_sold, apartments_sales.discount_meter_price as ap_price, apartments_sales.updated_at as ap_date, price_history.meter_price as his_price, price_history.created_at as his_date
FROM apartments_sales LEFT JOIN price_history ON apartments_sales.id = price_history.ap_id
WHERE block_id='".$block_id."'";
$rez = mysql_query($sql);
while ($obj = mysql_fetch_assoc($rez)) {
$aps[$obj['id']][] = $obj;
}
foreach ($aps as $id => $ap_data) {
$ap_prices = [];
$ap_prices_avg = [];
foreach ($ap_data as $ap_entry) {
if ($ap_entry['his_price']) {
$ap_prices[substr($ap_entry['his_date'], 0, 7)][] = $ap_entry['his_price'];
}
}
$ap_prices[substr($ap_entry['ap_date'], 0, 7)][] = $ap_entry['ap_price'];
foreach ($ap_prices as $date => $date_prices) {
$ap_prices_avg[$date] = ceil(array_sum($date_prices)/count($date_prices));
}
foreach ($ap_prices_avg as $date => $price) {
$result_price[$date][$ap_entry['room_type_id']][] = $price;
}
if ($ap_entry['is_sold'] == 1) {
$result_quantity[$date][$ap_entry['room_type_id']][] = 1;
}
}
// avg current data
foreach ($result_price as $date => $types_data) {
foreach ($types_data as $type => $prices) {
$res1['price'][$date][$type] = ceil(array_sum($prices)/count($prices));
}
}
foreach ($result_quantity as $date => $types_data) {
foreach ($types_data as $type => $quantities) {
$res1['quantity'][$date][$type] = array_sum($quantities);
}
}
// get parsed data
$sql = "SELECT block_id, room_type_id, price, period, quantity FROM nb_sales WHERE block_id=" . $block_id . " ORDER BY period";
$rez = mysql_query($sql);
while ($obj = mysql_fetch_assoc($rez)) {
$res2['price'][substr($obj['period'], 0, 7)][$obj['room_type_id']] = $obj['price'];
$res2['quantity'][substr($obj['period'], 0, 7)][$obj['room_type_id']] = $obj['quantity'];
}
//get date periods, and room types
$price_dates = [];
$quantity_dates = [];
$price_types = [];
$quantity_types = [];
if (!empty($res1)) {
foreach ($res1['price'] as $key => $date) {
if (array_search($key, $price_dates) === FALSE) {
$price_dates[] = $key;
}
foreach ($date as $type => $value) {
if (array_search($type, $price_types) === FALSE) {
$price_types[] = $type;
}
}
}
foreach ($res1['quantity'] as $key => $date) {
if (array_search($key, $quantity_dates) === FALSE) {
$quantity_dates[] = $key;
}
foreach ($date as $type => $value) {
if (array_search($type, $quantity_types) === FALSE) {
$quantity_types[] = $type;
}
}
}
}
if (!empty($res2)) {
foreach ($res2['price'] as $key => $date) {
if (array_search($key, $price_dates) === FALSE) {
$price_dates[] = $key;
}
foreach ($date as $type => $value) {
if (array_search($type, $price_types) === FALSE) {
$price_types[] = $type;
}
}
}
foreach ($res2['quantity'] as $key => $date) {
if (array_search($key, $quantity_dates) === FALSE) {
$quantity_dates[] = $key;
}
foreach ($date as $type => $value) {
if (array_search($type, $quantity_types) === FALSE) {
$quantity_types[] = $type;
}
}
}
}
sort($price_dates);
reset($price_dates);
sort($quantity_dates);
reset($quantity_dates);
//foreach dates and room types
//$price_dates
//$price_types
//$quantity_dates
//$quantity_types
$result = [];
foreach ($price_dates as $date) {
$prices = [];
$prices['date'] = $date;
foreach ($price_types as $type) {
if (isset($res1['price'][$date][$type]) && isset($res2['price'][$date][$type])) {
$prices[$type] = ceil(($res1['price'][$date][$type] + $res2['price'][$date][$type]) / 2);
} elseif (isset($res1['price'][$date][$type])) {
$prices[$type] = $res1['price'][$date][$type];
} elseif (isset($res2['price'][$date][$type])) {
$prices[$type] = $res2['price'][$date][$type];
} else {
$prices[$type] = 0;
}
}
$result['price'][] = $prices;
}
foreach ($quantity_dates as $date) {
$quantities = [];
$quantities['date'] = $date;
foreach ($quantity_types as $type) {
if (isset($res1['quantity'][$date][$type]) && isset($res2['quantity'][$date][$type])) {
$quantities[$type] = $res1['quantity'][$date][$type] + $res2['quantity'][$date][$type];
} elseif (isset($res1['quantity'][$date][$type])) {
$quantities[$type] = $res1['quantity'][$date][$type];
} elseif (isset($res2['quantity'][$date][$type])) {
$quantities[$type] = $res2['quantity'][$date][$type];
} else {
$quantities[$type] = 0;
}
}
$result['count'][] = $quantities;
}
echo json_encode($result); exit;
}
echo false; exit;