| Server IP : 162.214.74.102 / Your IP : 216.73.216.192 Web Server : Apache System : Linux dedi-4363141.lrsys.com.br 3.10.0-1160.119.1.el7.tuxcare.els25.x86_64 #1 SMP Wed Oct 1 17:37:27 UTC 2025 x86_64 User : lrsys ( 1015) PHP Version : 5.6.40 Disable Function : exec,passthru,shell_exec,system MySQL : ON | cURL : ON | WGET : ON | Perl : ON | Python : ON | Sudo : ON | Pkexec : ON Directory : /home/lrsys/www/lrsys_apps/leo/application/plugins/module_imobles/helpers/api/ |
Upload File : |
<?php
include_once "APIUtils.php";
class MainHelper {
private $APIUtils;
public function __construct() {
$this->APIUtils = new APIUtils();
}
private function searchSQL($filter, $selectFilds, $groupBy = '', $orderBy = '', $limit = '', $extraParams = array()) {
$whereParams = array();
// Fixed conditions for API
$whereParams[] = "imobles_client = 1";
$whereParams[] = "searchable = 1";
if (empty($filter['unit_type_ids'])) {
// Fixed conditions for API
$whereParams[] = "unit_type_site_enabled = 1";
if(empty($filter['mobile_search']) || $filter['mobile_search'] == false){
$whereParams[] = "site_enabled = 1";
}
if(empty($filter['amenities_complete']) || $filter['amenities_complete'] == false){
// Filtro por Amenities da API
if (isset($filter['amenities']) && $filter['amenities'] != '') {
$a = implode("','", $filter['amenities']);
if (!empty($a)) {
$whereParams[] = "module_imobles_enterprise_id IN (
SELECT sub.module_imobles_enterprise_id
FROM module_imobles_enterprise_entreprise_amenities sub
WHERE sub.module_imobles_enterprise_id = view.module_imobles_enterprise_id
AND sub.module_imobles_enterprise_amenities_id IN ('" . $a . "'))";
}
}
} else {
// Filtro por Amenities da Buscador
if (isset($filter['amenities']) && $filter['amenities'] != '') {
$operator = " " . $filter['operatorAmenitiesDesired'] . " ";
$whereAmenities = array();
$amenit = explode(",", $filter['amenities']);
$a = array();
foreach ($amenit as $am) {
$e = explode("_", $am);
$a[$e[0]][] = $e[1];
}
if (isset($a['ENTERPRISE'])) {
$whereAmenitiesTemp = array();
foreach($a['ENTERPRISE'] as $amenitieID){
$whereAmenitiesTemp[] = "enterprise_amenities LIKE '%\"$amenitieID\"%'";
}
$whereAmenities[] = implode($operator, $whereAmenitiesTemp);
}
if (isset($a['TYPEUNITY'])) {
$whereAmenitiesTemp = array();
foreach($a['TYPEUNITY'] as $amenitieID){
$whereAmenitiesTemp[] = "type_unit_amenities LIKE '%\"$amenitieID\"%'";
}
$whereAmenities[] = implode($operator, $whereAmenitiesTemp);
}
if( count($whereAmenities) > 0 ){
$whereParams[] = "(" . implode($operator, $whereAmenities) . ")";
}
}
}
// Filtro por Grupos de Amenities
$development_aminities_ids = array();
$unit_type_aminities_ids = array();
$unit_aminities_ids = array();
if (isset($filter['amenities_ids']) && $filter['amenities_ids'] != '') {
foreach($filter['amenities_ids'] as $group_id){
$group = ORM::for_table('module_imobles_enterprise_group_amenities')->find_one($group_id);
$amenities_ids = json_decode($group->amenities_ids);
if(!empty($amenities_ids->development_amenities_ids)){
$development_aminities_ids = array_merge($development_aminities_ids, $amenities_ids->development_amenities_ids);
}
if(empty($filter['development_amenities_only']) || $filter['development_amenities_only'] === false){
if(!empty($amenities_ids->unit_type_amenities_ids)){
$unit_type_aminities_ids = array_merge($unit_type_aminities_ids, $amenities_ids->unit_type_amenities_ids);
}
if(!empty($amenities_ids->unit_amenities_ids)){
$unit_aminities_ids = array_merge($unit_aminities_ids, $amenities_ids->unit_amenities_ids);
}
}
}
$a = implode("','", $development_aminities_ids);
if (!empty($a)) {
$whereParams[] = "EXISTS (
SELECT sub.module_imobles_enterprise_id
FROM module_imobles_enterprise_entreprise_amenities sub
WHERE sub.module_imobles_enterprise_id = view.module_imobles_enterprise_id
AND sub.module_imobles_enterprise_amenities_id IN ('" . $a . "')) ";
}
$b = implode("','", $unit_type_aminities_ids);
if (!empty($b)) {
$whereParams[] = "EXISTS (
SELECT sub.module_imobles_enterprise_units_type_id
FROM module_imobles_enterprise_units_type_amenities sub
WHERE sub.module_imobles_enterprise_units_type_id = view.id
AND sub.module_imobles_type_units_amenities_id IN ('" . $b . "')) ";
}
$c = implode("','", $unit_aminities_ids);
if (!empty($c)) {
// $whereParams[] = "module_imobles_enterprise_id IN (
// SELECT sub.module_imobles_enterprise_id
// FROM module_imobles_enterprise_entreprise_amenities sub
// WHERE sub.module_imobles_enterprise_id = view.module_imobles_enterprise_id
// AND sub.module_imobles_enterprise_amenities_id IN ('" . $c . "')) ";
}
}
// Filtro pela data de entrega
if (!empty($filter['release_date_start'])) {
$whereParams[] = "release_date >= '" . $filter['release_date_start'] . "'";
}
if (!empty($filter['release_date_end'])) {
$whereParams[] = "release_date <= '" . $filter['release_date_end'] . "'";
}
// Filtro pela Localização
if (@$filter['locations']) {
$address_neightborhood = "";
$address_number = "";
$state = '';
$city = '';
$log = '';
$zip = '';
foreach ($filter['locations'] as $d) {
if (!empty($d['address_number'])) {
$address_number .= "OR address_number = '" . ($d['address_number']) . "' "
. "";
}
if (!empty($d['address_state'])) {
$state .= "OR uf_state = '" . ($d['address_state']) . "' "
. "";
}
if (!empty($d['address_city'])) {
$city .= "OR city_name = '" . ($d['address_city']) . "' ";
}
if (!empty($d['address_log'])) {
$log .= "OR address_log_sanitized = '" . htmlentities(sanitizaText($d['address_log'])) . "' ";
} else {
if (!empty($d['address_neighborhood'])) {
$address_neightborhood .= "OR address_neighborhood_sanitized = '" . htmlentities(sanitizaText($d['address_neighborhood'])) . "' ";
}
}
if (!empty($filter['address_zip'])) {
$zip .= "OR address_zip LIKE '%" . $filter['address_zip'] . "%' "
. "";
}
}
if (!empty($address_neightborhood)) {
$whereParams[] = "(" . substr($address_neightborhood, 2) . ")";
}
if (!empty($address_number)) {
$whereParams[] = "(" . substr($address_number, 2) . ")";
}
if (!empty($state)) {
$whereParams[] = "(" . substr($state, 2) . ")";
}
if (!empty($city)) {
$whereParams[] = "(" . substr($city, 2) . ")";
}
if (!empty($log)) {
$whereParams[] = "(" . substr($log, 2) . ")";
}
if (!empty($zip)) {
$whereParams[] = "(" . substr($zip, 2) . ")";
}
}
/*
* Filtro pelo Lat/Long para visualização do MAPA
*/
if (@$filter['viewport']) {
if(!empty($filter['viewport']['northeast']['lat'])
&& !empty($filter['viewport']['northeast']['lng'])
&& !empty($filter['viewport']['southwest']['lat'])
&& !empty($filter['viewport']['southwest']['lng'])) {
$whereParams[] = "ent.latitude >= " . $filter['viewport']['southwest']['lat'];
$whereParams[] = "latitude <= " .$filter['viewport']['northeast']['lat'];
$whereParams[] = "longitude >= " .$filter['viewport']['southwest']['lng'];
$whereParams[] = "longitude <= " .$filter['viewport']['northeast']['lng'];
}
}
if (!empty($filter['area_min'])) {
$whereParams[] = "area >= " . htmlentities(Finance::amount_fix($filter['area_min']));
}
if (!empty($filter['area_max'])) {
$whereParams[] = "area <= " . htmlentities(Finance::amount_fix($filter['area_max']));
}
if (!empty($filter['bedrooms'])) {
$n = implode("','", $filter['bedrooms']);
if (!empty($n)) {
$whereParams[] = "number_rooms IN ('" . $n . "')";
}
}
if (!empty($filter['suites'])) {
$n = implode("','", $filter['suites']);
if (!empty($n)) {
$whereParams[] = "number_suite IN ('" . $n . "')";
}
}
if (!empty($filter['bathrooms'])) {
$n = implode("','", $filter['bathrooms']);
if (!empty($n)) {
$whereParams[] = "number_bathroom IN ('" . $n . "') ";
}
}
if (!empty($filter['parking_spaces'])) {
$n = implode("','", $filter['parking_spaces']);
if (!empty($n)) {
$whereParams[] = "number_garage IN ('" . $n . "') ";
}
}
if (!empty($filter['offers'])) {
$whereParams[] = "promotion = 1";
}
if (!empty($filter['price_min'])) {
$whereParams[] = "min >= " . htmlentities(Finance::amount_fix($filter['price_min']));
}
if (!empty($filter['price_max'])) {
$whereParams[] = "min <= " . htmlentities(Finance::amount_fix($filter['price_max']));
}
if (!empty($filter['condo_fee_min'])) {
$whereParams[] = "condo_fee >= " . htmlentities(Finance::amount_fix($filter['condo_fee_min']));
}
if (!empty($filter['condo_fee_max'])) {
$whereParams[] = "condo_fee <= " . htmlentities(Finance::amount_fix($filter['condo_fee_max']));
}
if (!empty($filter['enterprise_id'])) {
$whereParams[] = "module_imobles_enterprise_id = " . $filter['enterprise_id'];
}
if (isset($filter['development_name']) && !empty($filter['development_name'])) {
$whereParams[] = "enterprise_name LIKE '%" . $filter['development_name'] . "%' ";
}
if (isset($filter['development_id']) && !empty($filter['development_id'])) {
$whereParams[] = "module_imobles_enterprise_id = " . $filter['development_id'];
}
if (isset($filter['development_ids']) && !empty($filter['development_ids'])) {
$whereParams[] = "module_imobles_enterprise_id IN (" . implode(",", $filter['development_ids']) . ") ";
}
if (isset($filter['development_ids_not_in']) && !empty($filter['development_ids_not_in'])) {
$whereParams[] = "module_imobles_enterprise_id NOT IN (" . implode(",", $filter['development_ids_not_in']) . ") ";
}
if (isset($filter['construction_company_ids']) && !empty($filter['construction_company_ids'])) {
$whereParams[] = "module_imobles_company_construction_id IN (" . implode(",", $filter['construction_company_ids']) . ") ";
}
if (isset($filter['construction_company_slug']) && !empty($filter['construction_company_slug'])) {
$whereParams[] = "company_construction_slug = '".$filter['construction_company_slug']."'";
}
if (isset($filter['pre_launch']) && $filter['pre_launch'] === true) {
$now = new DateTime('NOW');
$now->modify('-3 months');
$date_aux = $now->format('Y-m-d');
$whereParams[] = "(init_sales >= '".$date_aux."' OR has_no_ri = 1) ";
} else if (!empty($filter['towers_stage'])){
$whereStages = '';
if (!in_array('', $filter['towers_stage'])) {
foreach ($filter['towers_stage'] as $s) {
switch ($s) {
case 'Lauch':
if (!empty($whereStages)) {
$whereStages .= " OR ";
}
$whereStages .= " init_sales > '" . date("Y-m-d") . "'";
break;
case 'In Works':
if (!empty($whereStages)) {
$whereStages .= " OR ";
}
$whereStages .= " release_date > '" . date("Y-m-d") . "'";
break;
case 'Ready to move in':
if (!empty($whereStages)) {
$whereStages .= " OR ";
}
$whereStages .= " release_date <= '" . date("Y-m-d") . "'";
break;
}
}
}
if (!empty($whereStages)) {
$whereParams[] = "$whereStages";
}
}
if (isset($filter['gpt_unit_type_ids']) && !empty($filter['gpt_unit_type_ids'])) {
$whereParams[] = "id IN ('" . implode("','", $filter['gpt_unit_type_ids']) . "')";
}
} else {
$whereParams[] = "id IN ('" . implode("','", $filter['unit_type_ids']) . "')";
}
$whereParams = array_merge($whereParams, $extraParams);
$where = "WHERE " . implode(" AND ", $whereParams);
// $orderBy = $this->searchOrder();
if($groupBy <> ''){
$groupBy = "GROUP BY " . $groupBy;
}
if($orderBy <> ''){
$orderBy = "ORDER BY " . $orderBy;
}
$sql = "SELECT
$selectFilds
FROM module_imobles_view_type_units_search AS view
$where
$groupBy
$orderBy
$limit";
return $sql;
}
private function orderBy($filter, &$orderBy, &$orderTypeUnit = null){
$orderTypeUnit = 'area asc';
$orderBy = 'module_imobles_enterprise_id ASC';
if (isset($filter['order_by'])) {
$orderBy = "";
foreach ($filter['order_by'] as $orde) {
foreach ($orde as $key => $val) {
if (strtoupper($val) == 'DESC') {
$val = 'DESC';
} else {
$val = 'ASC';
}
switch ($key) {
case 'price':
$orderBy .= ', min ' . $val;
$orderTypeUnit = " min " . $val;
break;
case 'area':
$orderBy .= ', area ' . $val;
$orderTypeUnit = " area " . $val;
break;
case 'release_date':
$orderBy .= ', release_date ' . $val;
break;
case 'init_sales':
$orderBy .= ', pre_launch DESC, init_sales ' . $val;
break;
}
}
}
if (!empty($orderBy)) {
$orderBy = substr($orderBy, 1);
} else {
$orderBy .= 'release_date DESC';
}
} else {
$orderBy = 'relevance DESC, release_date DESC';
}
}
/* * *
* Função simplificada para reuso do search, em consulta de similares
*/
private function resultDevelopments($filter) {
// TODO: ajuste para excluir REVENDA do resultado de busca
$filter['is_new'] = true;
if(isset($filter['pre_launch']) && $filter['pre_launch'] === true){
if(!isset($filter['order_by'])){
$filter['order_by'] = array();
}
array_unshift($filter['order_by'],array("init_sales" => "DESC"));
}
// Verifico se é listagem para o Mapa e retiro a paginação
if (!isset($filter['map_view']) || $filter['map_view'] != true) {
if (!isset($filter['size']) || $filter['size'] < 0) {
$filter['size'] = 10;
} else {
if ($filter['size'] > 1000) {
$filter['size'] = 1000;
}
}
if (!isset($filter['page_token']) || $filter['page_token'] < 1) {
$filter['page_token'] = 1;
}
} else {
$filter['size'] = 10000;
$filter['page_token'] = 1;
}
$limitMaxRegister = $filter['size'] * $filter['page_token'];
$limit = " LIMIT " . $filter['size'] . " offset " . ( $limitMaxRegister - $filter['size']);
$dataResults = array();
//TRATAMENTO se somente total, não busca dados
if (empty(@$filter['count_only']) || @$filter['count_only'] != true || @$filter['count_only'] != 1) {
$selectFields = "*";
$groupBy = 'module_imobles_enterprise_id';
$this->orderBy($filter, $orderBy, $orderTypeUnit);
$sql = $this->searchSQL($filter, $selectFields, $groupBy, $orderBy, $limit);
$dat = ORM::for_table('module_imobles_view_type_units_search')
->raw_query($sql)
->find_array();
if (count($dat) > 0) {
$ent = "";
$queryDispobibleUnit = "";
foreach ($dat as $d) {
$dataResults[$d['module_imobles_enterprise_id']]['id'] = $d['module_imobles_enterprise_id'];
$dataResults[$d['module_imobles_enterprise_id']]['name'] = $d['enterprise_name'];
$dataResults[$d['module_imobles_enterprise_id']]['has_no_ri'] = $d['has_no_ri'];
$dataResults[$d['module_imobles_enterprise_id']]['hubspot_alias'] = $d['hubspot'];
$dataResults[$d['module_imobles_enterprise_id']]['development_url'] = $d['site_url'];
$dataResults[$d['module_imobles_enterprise_id']]['init_sales'] = $d['init_sales'];
$dataResults[$d['module_imobles_enterprise_id']]['development_id'] = $d['module_imobles_enterprise_id'];
$dataResults[$d['module_imobles_enterprise_id']]['relevance'] = $d['relevance'];
$dataResults[$d['module_imobles_enterprise_id']]['development_slug'] = $d['slug'];
if(!empty($d['price_type'])) {
$dataResults[$d['module_imobles_enterprise_id']]['development_price_type'] = $d['price_type'];
} else {
$dataResults[$d['module_imobles_enterprise_id']]['development_price_type'] = null;
}
if($d['pre_launch'] == 1) {
$dataResults[$d['module_imobles_enterprise_id']]['pre_launch'] = true;
} else {
$dataResults[$d['module_imobles_enterprise_id']]['pre_launch'] = false;
}
// Incluo os dados do hotsite
if (!empty($d['hotsite_params'])) {
$hotsite_json = json_decode($d['hotsite_params']);
if(isset($hotsite_json->development_hotsite_enabled)) {
$dataResults[$d['module_imobles_enterprise_id']]['hotsite'] = array("development_hotsite_enabled" => $hotsite_json->development_hotsite_enabled);
}
if(isset($hotsite_json->card_description)) {
$dataResults[$d['module_imobles_enterprise_id']]['card_description'] = $hotsite_json->card_description;
}
}
// Verifico se é imóvel NOVO ou REVENDA
$dataResults[$d['module_imobles_enterprise_id']]['is_new'] = false;
if ($d["imobles_client"] == 1) {
$dataResults[$d['module_imobles_enterprise_id']]['is_new'] = true;
}
if (strtotime(date("Y-m-d")) >= strtotime($d['release_date'])) {
$dataResults[$d['module_imobles_enterprise_id']]['construction_status'] = 'Ready to move in';
} else {
$dataResults[$d['module_imobles_enterprise_id']]['construction_status'] = 'In Works';
}
if (isset($d['release_date']) && !empty($d['release_date'])) {
$year = date("Y", strtotime($d['release_date']));
if ($year >= 1950) {
$dataResults[$d['module_imobles_enterprise_id']]['release_date'] = date("Y-m-d", strtotime($d['release_date']));
} else {
$dataResults[$d['module_imobles_enterprise_id']]['release_date'] = "0000-00-00";
}
} else {
$dataResults[$d['module_imobles_enterprise_id']]['release_date'] = "0000-00-00";
}
$dataResults[$d['module_imobles_enterprise_id']]['address'] = array(
'country' => 'BR',
'zip_code' => $d['address_zip'],
'city' => $d['city_name'],
'ibge_city_id' => $d['city_ibge'],
'state_acronym' => $d['uf_state'],
'state' => $d['state_name'],
'ibge_state_id' => $d['code_state'],
'street' => $d['address_log'],
'number' => $d['address_number'],
'neighborhood' => $d['address_neightborhood'],
);
$dataResults[$d['module_imobles_enterprise_id']]['construction_company'] = $d['company_construction_name'] == null ? "N/A" : $d['company_construction_name'];
$dataResults[$d['module_imobles_enterprise_id']]['construction_company_id'] = $d['module_imobles_company_construction_id'] == null ? 0 : $d['module_imobles_company_construction_id'];
$dataResults[$d['module_imobles_enterprise_id']]['construction_company_status'] = $d['company_construction_status'] == null ? 0 : $d['company_construction_status'];
$dataResults[$d['module_imobles_enterprise_id']]['financing']['entry'] = $d['value_input_porcentage'];
$dataResults[$d['module_imobles_enterprise_id']]['financing']['installment'] = $d['value_installment_porcentage'];
$dataResults[$d['module_imobles_enterprise_id']]['financing']['founding'] = $d['value_founding_porcentage'];
//IMB-19
if (!empty($d['google_geometry'])) {
$dataResults[$d['module_imobles_enterprise_id']]['geometry'] = json_decode($d['google_geometry']);
// TODO: RESOLVER O PROBLEMA DE SE PEGAR O LAT/LONG DO GOOGLE
if(isset($dataResults[$d['module_imobles_enterprise_id']]['geometry']->location)) {
$dataResults[$d['module_imobles_enterprise_id']]['geometry']->location = array("lat" => floatval($d['latitude']), "lng" => floatval($d['longitude']));
}
} else {
$dataResults[$d['module_imobles_enterprise_id']]['geometry'] = array("location" => array("lat" => floatval($d['latitude']), "lng" => floatval($d['longitude'])));
}
$ent .= "," . $d['module_imobles_enterprise_id'];
}
/*
* Pego as imagens de backend
*/
$c = ORM::for_table('module_imobles_enterprise_imgs')
->raw_query("SELECT s.module_imobles_enterprise_id, s.src, s.alt_text, s.resized, s.webp, s.tags, s.unit_type_id, s.description, s.id FROM"
. " module_imobles_enterprise_imgs as s"
. " WHERE (s.duplicated IS NULL OR s.duplicated=0) AND type = 'backend' "
. " AND s.module_imobles_enterprise_id IN(" . substr($ent, 1) . ") "
. " AND s.delete_at IS NULL AND s.tags IS NOT NULL ")
->find_array();
/*
* BUSCA as UNIT_TYPES
*/
$selectFields = "*";
$extraParams = array();
$extraParams[] = "module_imobles_enterprise_id IN (" . substr($ent, 1) . ")";
$groupBy = "";
$limit = "";
$orderTypeUnit = $orderTypeUnit . " , id";
$sql = $this->searchSQL($filter, $selectFields, $groupBy, $orderTypeUnit, $limit, $extraParams);
$types = ORM::for_table('module_imobles_view_type_units_search')
->raw_query($sql)
->find_array();
foreach ($types as $u) {
// Pego as imagens da Tipo de Unidade
$arr_unit_type_imgs = array();
if (count($c) > 0 && isset($filter['full_info']) && $filter['full_info'] === true) {
foreach ($c as $im) {
$arr_tags = array();
if ($im['unit_type_id'] != $u['id']) {
continue;
}
if (empty($arr_unit_type_imgs) || count($arr_unit_type_imgs) < 10) {
if (!empty($im['tags']) && $im['tags'] != "null") {
$arr_tags_id = json_decode($im['tags']);
if(!empty($arr_tags_id)){
$arr_tags_aux = ORM::for_table('module_imobles_enterprise_img_backend_tags')
->select('name')
->where_in('id', $arr_tags_id)
->find_array();
foreach ($arr_tags_aux as $tags) {
$arr_tags[] = $tags['name'];
}
}
// Monto o array com os tamanhos alternativos das imagens
$alternatives_sizes = null;
if ($im['resized'] == 1) {
$alternatives_sizes = array("1152x768" => APP_URL . "/application/plugins/module_imobles/uploads/enterprise/" . $im['module_imobles_enterprise_id'] . "/images/xxl/" . $im['src'],
"840x560" => APP_URL . "/application/plugins/module_imobles/uploads/enterprise/" . $im['module_imobles_enterprise_id'] . "/images/xlg/" . $im['src'],
"600x400" => APP_URL . "/application/plugins/module_imobles/uploads/enterprise/" . $im['module_imobles_enterprise_id'] . "/images/lrg/" . $im['src'],
"450x300" => APP_URL . "/application/plugins/module_imobles/uploads/enterprise/" . $im['module_imobles_enterprise_id'] . "/images/med/" . $im['src'],
"300x200" => APP_URL . "/application/plugins/module_imobles/uploads/enterprise/" . $im['module_imobles_enterprise_id'] . "/images/sml/" . $im['src'],
"120x80" => APP_URL . "/application/plugins/module_imobles/uploads/enterprise/" . $im['module_imobles_enterprise_id'] . "/images/xsm/" . $im['src'],
"104x80" => APP_URL . "/application/plugins/module_imobles/uploads/enterprise/" . $im['module_imobles_enterprise_id'] . "/images/thumb/" . $im['src']);
}
$webp = false;
if ($im['webp'] == 1) {
$webp = true;
}
$arr_unit_type_imgs[] = array(
"type" => 'IMAGE',
"url" => APP_URL . "/application/plugins/module_imobles/uploads/enterprise/" . $im['module_imobles_enterprise_id'] . "/images/" . $im['src'],
"description" => $im['description'],
"alt_text" => $im['alt_text'],
"tags" => $arr_tags,
"alternatives_sizes" => $alternatives_sizes,
"webp" => $webp);
}
} else {
break;
}
}
}
if ($u['avg'] < $u['min']) {
$u['avg'] = $u['min'];
}
// Pego os detalhes dos anúncios
$arr_listings = array();
if ($u["imobles_client"] != 1 && isset($filter['full_info']) && $filter['full_info'] === true) {
$unitTypeID = $u['id'];
$selectlistings = "SELECT sub_l.id, sub_l.crawler_price, sub_l.crawler_listing_link, sub_l.crawler_portal, sub_l.crawler_updatedAt, ads.logoUrl, ads.name as advertiser_name
FROM module_imobles_listings sub_l
JOIN module_imobles_advertisers as ads ON ads.id = sub_l.advertiser_id
WHERE sub_l.unit_type_id = $unitTypeID
AND (sub_l.unavailable IS NULL OR sub_l.unavailable = 0 ) AND sub_l.delete_at IS NULL
AND (sub_l.crawler_type_id IS NULL OR sub_l.crawler_type_id <> 4) AND sub_l.advertiser_id IS NOT NULL
AND (sub_l.crawler_businessType <> 'RENTAL' OR sub_l.crawler_businessType IS NULL)";
$arr_listings_aux = ORM::for_table('module_imobles_enterprise_units_type')
->raw_query($selectlistings)
->find_array();
if (count($arr_listings_aux) > 0) {
$count_aux = 0;
foreach ($arr_listings_aux as $listing_aux) {
if (!empty($listing_aux['logoUrl'])) {
$listing_aux['logoUrl'] = str_replace('{width}', '870', $listing_aux['logoUrl']);
$listing_aux['logoUrl'] = str_replace('{height}', '653', $listing_aux['logoUrl']);
$listing_aux['logoUrl'] = str_replace('{action}', 'fit-in', $listing_aux['logoUrl']);
}
if ($listing_aux['crawler_portal'] == "VIVAREAL") {
$listing_aux['crawler_listing_link'] = "https://vivareal.com.br" . $listing_aux['crawler_listing_link'];
}
if ($listing_aux['crawler_portal'] == "GRUPOZAP") {
$listing_aux['crawler_listing_link'] = "https://zapimoveis.com.br" . $listing_aux['crawler_listing_link'];
}
$arr_listings[] = array("id" => $listing_aux['id'],
"price" => $listing_aux['crawler_price'],
"portal" => $listing_aux['crawler_portal'],
"last_update" => $listing_aux['crawler_updatedAt'],
"logo" => $listing_aux['logoUrl'],
"link" => $listing_aux['crawler_listing_link'],
"advertiser_name" => $listing_aux["advertiser_name"]);
}
}
}
$dataArray = array(
"id" => $u['id'],
"total_listing" => number_format($u['total_listings'], 0, "", ""),
"unit_available" => number_format($u['available_units'], 0, "", ""),
"min_value" => number_format($u['min'], 2, ".", ""),
"average_value" => number_format($u['avg'], 2, ".", ""),
"max_value" => number_format($u['max'], 2, ".", ""),
"bedrooms" => $u['number_rooms'],
"bathrooms" => $u['number_bathroom'],
"area" => $u['area'],
"suites" => $u['number_suite'],
"parking_spaces" => $u['number_garage'],
"medias" => $arr_unit_type_imgs,
"listings_details" => $arr_listings,
"is_offer" => $u['promotion']==1?true:false,
);
if ($u['promotion']==1){
$dataArray["description"] = $u['description'];
$dataArray['standard_price'] = number_format($u["standard_price"], 2, ".", "");
}
$dataResults[$u['module_imobles_enterprise_id']]['unit_type'] [] = $dataArray;
if (!isset($dataResults[$u['module_imobles_enterprise_id']]['total_units_available'])) {
$dataResults[$u['module_imobles_enterprise_id']]['total_units_available'] = 0;
}
$dataResults[$u['module_imobles_enterprise_id']]['total_units_available'] += $u['available_units'];
}
if (count($c) > 0) {
$arr_enterprise_imgs = array();
$arr_enterprise_gallery_imgs = array();
foreach ($c as $im) {
if (!empty($im['unit_type_id']) || empty($im['tags'])) {
continue;
}
$arr_tags = array();
if (!isset($dataResults[$im['module_imobles_enterprise_id']]['medias']) || count(@$dataResults[$im['module_imobles_enterprise_id']]['medias']) < 10)
{
$arr_tags_id = json_decode($im['tags']);
if (!empty($arr_tags_id)) {
if(!in_array(10, $arr_tags_id) && !in_array(8, $arr_tags_id) && !in_array(5, $arr_tags_id) && (!isset($filter['full_info']) || $filter['full_info'] !== true)) {
continue;
}
// Conto as imagens de galeria
if(in_array(10, $arr_tags_id)) {
if(isset($arr_enterprise_gallery_imgs[$im['module_imobles_enterprise_id']]) && count($arr_enterprise_gallery_imgs[$im['module_imobles_enterprise_id']]) >= 5) {
continue;
}
$arr_enterprise_gallery_imgs[$im['module_imobles_enterprise_id']][]= $im['id'];
}
$arr_tags_aux = ORM::for_table('module_imobles_enterprise_img_backend_tags')
->select('name')
->where_in('id', $arr_tags_id)
->find_array();
foreach ($arr_tags_aux as $tags) {
$arr_tags[] = $tags['name'];
}
} else {
continue;
}
// Monto o array com os tamanhos alternativos das imagens
$alternatives_sizes = null;
if ($im['resized'] == 1) {
// $alternatives_sizes = array("1152x768" => APP_URL . "/application/plugins/module_imobles/uploads/enterprise/" . $im['module_imobles_enterprise_id'] . "/images/xxl/" . $im['src'],
// "840x560" => APP_URL . "/application/plugins/module_imobles/uploads/enterprise/" . $im['module_imobles_enterprise_id'] . "/images/xlg/" . $im['src'],
// "600x400" => APP_URL . "/application/plugins/module_imobles/uploads/enterprise/" . $im['module_imobles_enterprise_id'] . "/images/lrg/" . $im['src'],
// "450x300" => APP_URL . "/application/plugins/module_imobles/uploads/enterprise/" . $im['module_imobles_enterprise_id'] . "/images/med/" . $im['src'],
// "300x200" => APP_URL . "/application/plugins/module_imobles/uploads/enterprise/" . $im['module_imobles_enterprise_id'] . "/images/sml/" . $im['src'],
// "120x80" => APP_URL . "/application/plugins/module_imobles/uploads/enterprise/" . $im['module_imobles_enterprise_id'] . "/images/xsm/" . $im['src'],
// "104x80" => APP_URL . "/application/plugins/module_imobles/uploads/enterprise/" . $im['module_imobles_enterprise_id'] . "/images/thumb/" . $im['src']);
$alternatives_sizes = array(
"450x300" => APP_URL . "/application/plugins/module_imobles/uploads/enterprise/" . $im['module_imobles_enterprise_id'] . "/images/med/" . $im['src']
);
}
$webp = false;
if ($im['webp'] == 1) {
$webp = true;
}
$arr_enterprise_imgs[$im['module_imobles_enterprise_id']][] = array(
"type" => 'IMAGE',
"url" => APP_URL . "/application/plugins/module_imobles/uploads/enterprise/" . $im['module_imobles_enterprise_id'] . "/images/" . $im['src'],
"description" => $im['description'],
"alt_text" => $im['alt_text'],
"tags" => $arr_tags,
"alternatives_sizes" => $alternatives_sizes,
"webp" => $webp);
}
}
foreach ($arr_enterprise_imgs as $k => $v) {
$dataResults[$k]['medias'] = $v;
}
}
}
}
// Pego o total de empreendimentos
$sql = $this->searchSQL($filter, "module_imobles_enterprise_id", "module_imobles_enterprise_id");
$arr_enterprise_ids = ORM::for_table('module_imobles_view_type_units_search')
->raw_query($sql)
->find_array();
$arr_enterprise_ids = array_column($arr_enterprise_ids, 'module_imobles_enterprise_id');
$total_count = count($arr_enterprise_ids);
$arr_enterprise_ids = implode(',', $arr_enterprise_ids);
if($arr_enterprise_ids) {
// Pego o total de Anúncios
$query = "SELECT SUM(total_listings) as total_listings, SUM(available_units) as available_units, min(price_min) as price_from
FROM module_imobles_enterprise_units_type
WHERE site_enabled = 1
AND delete_at IS null
AND module_imobles_enterprise_id IN ($arr_enterprise_ids)";
$listings_aux = ORM::for_table('module_imobles_enterprise_units_type')
->raw_query($query)
->find_one();
$total_listings_aux = $listings_aux->total_listings;
$total_units_aux = $listings_aux->available_units;
$prices_from = $listings_aux->price_from;
} else {
$total_listings_aux = 0;
$total_units_aux = 0;
$prices_from = 0;
}
// Verifico se é NOINDEX
$no_index = true;
if (isset($filter['url_search']) && !empty($filter['url_search'])) {
$url_aux = $filter['url_search'];
$url_aux = explode('?', $url_aux);
$url_aux = $url_aux[0];
$url = ORM::for_table("module_imobles_dynamic_urls")->where("url", $url_aux)->find_one();
if(isset($url->id) && $url->id > 0){
$no_index = false;
}
}
$totalresults = count($dataResults);
$output = array(
"total_count" => $total_count,
"total_listings" => $total_listings_aux,
"total_units" => $total_units_aux,
"price_from" => $prices_from,
"page_token" => $totalresults == 0 ? 0 : ( ($total_count >= $limitMaxRegister ? $filter['page_token'] + 1 : "")),
"size" => $filter['size'],
"list_size" => $totalresults,
"locations" => @$filter['locations'],
"results" => array_values($dataResults),
"tag_noindex" => $no_index
);
return $output;
}
public function searchDevelopments($filter = null) {
ORM::configure('caching', true);
if($filter == null){
$filter = $this->APIUtils->getInputFilter();
}
// Verifico se o bairro é válido
if (@$filter['locations']) {
foreach ($filter['locations'] as $d) {
// TODO: verificar a necessidade desse verificação
if (!empty($d['address_neighborhood'])) {
$address_neightborhood = ORM::for_table('module_imobles_enterprise')
->table_alias('s')
->select_expr("s.address_neightborhood")
->where("s.address_neighborhood_sanitized", sanitizaText($d['address_neighborhood']))
->where_raw("s.delete_at IS NULL")
->find_one();
if(!isset($address_neightborhood->address_neightborhood)) {
$output = array(
"error" => array(
"status" => true,
"code" => 404,
"msg" => "Bairro não encontrado | ".$d['address_neighborhood']
),
"total_count" => 0,
"page_token" => 0,
"size" => $filter['size'],
"list_size" => 0,
"locations" => @$filter['locations'],
"results" => []);
return $output;
}
}
}
}
return $this->resultDevelopments($filter);
}
public function developmentDetails() {
$filter = $this->APIUtils->getInputFilter();
$dataResults = array();
$id = null;
if(isset($filter['development_id']) && !empty($filter['development_id'])) {
$id = intval($filter['development_id']);
}
$slug = null;
if(isset($filter['development_slug']) && !empty($filter['development_slug'])) {
$slug = $filter['development_slug'];
}
if ($id > 0 || !empty($slug)) {
$selectFields = "*";
$sql = $this->searchSQL($filter, $selectFields);
$dat = ORM::for_table('module_imobles_view_type_units_search')
->raw_query($sql)
->find_array();
if (count($dat) > 0) {
$d = $dat[0];
if (isset($d['imobles_client']) && $d['imobles_client'] == 1) {
$resale = false;
} else {
$resale = true;
}
$dataResults['name'] = $d['enterprise_name'];
$dataResults['description'] = $d['enterprise_description'];
$dataResults['resale'] = $resale;
$dataResults['has_no_ri'] = $d['has_no_ri'];
$dataResults['construction_company'] = $d['company_construction_name'];
$dataResults['construction_company_id'] = $d['module_imobles_company_construction_id'];
$dataResults['construction_company_slug'] = $d['construction_company_slug'];
// Verifico se temos os parâmetros adicionais da construtora
$dataResults['construction_company_params'] = null;
if (!empty($d['module_imobles_company_construction_id'])) {
// Pego as imagens de backend da Construtora
$tags = ORM::for_table('module_imobles_enterprise_img_backend_tags')
->table_alias('s')
->find_many();
$arrayTag = array();
foreach ($tags as $t) {
$arrayTag[$t->id] = $t->name;
}
// Pego as imagens de backend da construtora
$imagB = ORM::for_table('module_imobles_enterprise_imgs')
->raw_query("SELECT s.module_imobles_enterprise_id, s.src, s.alt_text, s.resized, s.webp, s.tags, s.unit_type_id, s.description, s.construction_company_id FROM"
. " module_imobles_enterprise_imgs as s"
. " WHERE (s.duplicated IS NULL OR s.duplicated=0) AND type = 'backend' "
. " AND s.construction_company_id IN(" . $d['module_imobles_company_construction_id'] . ") "
. " AND s.delete_at IS NULL AND s.tags IN ('[\"23\"]', '[\"2\"]') ")
->find_array();
if (count($imagB) > 0) {
foreach ($imagB as $im) {
$desc_tags = array();
try {
$tagsIm = json_decode($im['tags']);
if ($tagsIm) {
foreach ($tagsIm as $t) {
$desc_tags[] = $arrayTag[$t];
}
}
} catch (Exception $e) {
$desc_tags = "";
}
// Monto o array com os tamanhos alternativos das imagens
$alternatives_sizes = null;
if ($im['resized'] == 1) {
$alternatives_sizes = array("1152x768" => APP_URL . "/application/plugins/module_imobles/uploads/companyconstruction/" . $im['construction_company_id'] . "/images/xxl/" . $im['src'],
"840x560" => APP_URL . "/application/plugins/module_imobles/uploads/companyconstruction/" . $im['construction_company_id'] . "/images/xlg/" . $im['src'],
"600x400" => APP_URL . "/application/plugins/module_imobles/uploads/companyconstruction/" . $im['construction_company_id'] . "/images/lrg/" . $im['src'],
"450x300" => APP_URL . "/application/plugins/module_imobles/uploads/companyconstruction/" . $im['construction_company_id'] . "/images/med/" . $im['src'],
"300x200" => APP_URL . "/application/plugins/module_imobles/uploads/companyconstruction/" . $im['construction_company_id'] . "/images/sml/" . $im['src'],
"120x80" => APP_URL . "/application/plugins/module_imobles/uploads/companyconstruction/" . $im['construction_company_id'] . "/images/xsm/" . $im['src']);
if(in_array("DEVELOPMENT_GALLERY_IMGS", $desc_tags)) {
$alternatives_sizes["104x80"] = APP_URL . "/application/plugins/module_imobles/uploads/companyconstruction/" . $im['construction_company_id'] . "/images/thumb/" . $im['src'];
}
}
$webp = false;
if ($im['webp'] == 1) {
$webp = true;
}
$dataResults['construction_company_params']['medias'][] = array(
"type" => 'IMAGE',
"url" => APP_URL . "/application/plugins/module_imobles/uploads/companyconstruction/" . $im['construction_company_id'] . "/images/" . $im['src'],
"description" => $im['description'],
"alt_text" => $im['alt_text'],
"tags" => $desc_tags,
"alternatives_sizes" => $alternatives_sizes,
"webp" => $webp
);
}
}
if (!empty($d['construction_company_params'])) {
$dataResults['construction_company_params']['hotsite'] = json_decode($d['construction_company_params']);
}
}
$dataResults['hubspot_alias'] = $d['hubspot'];
$dataResults['development_url'] = $d['site_url'];
$dataResults['init_sales'] = $d['init_sales'];
$dataResults['development_id'] = $d['module_imobles_enterprise_id'];
$dataResults['development_slug'] = $d['slug'];
if(!empty($d['price_type'])) {
$dataResults['development_price_type'] = $d['price_type'];
} else {
$dataResults['development_price_type'] = null;
}
// Verifico se é imóvel NOVO ou REVENDA
$dataResults['is_new'] = false;
if ($d["imobles_client"] == 1) {
$dataResults['is_new'] = true;
}
//tratamento do stagio conforme regra IMB-18
if (empty($d['stage'])) {
if (strtotime(date("Y-m-d")) >= strtotime($d['release_date'])) {
$dataResults['construction_status'] = 'Ready to move in';
} else {
$dataResults['construction_status'] = 'In Works';
}
$dataResults['release_date'] = date("Y-m-d", strtotime($d['release_date']));
} else {
$dataResults['construction_status'] = $d['stage'];
$dataResults['release_date'] = date("Y-m-d", strtotime($d['release_date']));
}
$dataResults['property_standard'] = $d['property_standard'];
$dataResults['financing']['entry'] = $d['value_input_porcentage'];
$dataResults['financing']['installment'] = $d['value_installment_porcentage'];
$dataResults['financing']['founding'] = $d['value_founding_porcentage'];
if (!empty($d['google_geometry'])) {
$dataResults['geometry'] = json_decode($d['google_geometry']);
// TODO: RESOLVER O PROBLEMA DE SE PEGAR O LAT/LONG DO GOOGLE
$dataResults['geometry']->location = array("lat" => floatval($d['latitude']), "lng" => floatval($d['longitude']));
} else {
$dataResults['geometry'] = array("location" => array("lat" => floatval($d['latitude']), "lng" => floatval($d['longitude'])));
}
if (!empty($d['enterprise_google_json'])) {
$google_json = json_decode($d['enterprise_google_json']);
$dataResults['google_reviews'] = @$google_json->reviews;
} else {
$dataResults['google_reviews'] = null;
}
if (!empty($d['google_rating'])) {
$dataResults['google_rating'] = $d['google_rating'];
} else {
$dataResults['google_rating'] = null;
}
$dataResults['google']['place_id'] = $d['google_place_id'];
$dataResults['google']['rating'] = $d['google_rating'];
$dataResults['google']['link'] = $d['link_google'];
$dataResults['link_presentation'] = $d['link_presentation'];
$hotsiteTitle = '';
$hotsiteText = '';
if(!empty($d['neighborhood_params'])){
$neighborhoodParams = json_decode($d['neighborhood_params']);
$hotsiteTitle = $neighborhoodParams->hotsite_title;
$hotsiteText = $neighborhoodParams->hotsite_text;
$hotsiteTitle = str_replace('{{enterprise_name}}', $d['enterprise_name'], $hotsiteTitle);
$hotsiteText = str_replace('{{enterprise_name}}', $d['enterprise_name'], $hotsiteText);
}
// Pego a imagem do bairro
$neighborhood_images_arr = array();
if(!empty($d['neighborhood_id'])){
$neighborhood_images = ORM::for_table('module_imobles_enterprise_imgs')
->raw_query("SELECT s.module_imobles_enterprise_id, s.src, s.alt_text, s.resized, s.webp, s.tags, s.unit_type_id, s.description, s.neighborhood_id FROM"
. " module_imobles_enterprise_imgs as s"
. " WHERE s.neighborhood_id = ".$d['neighborhood_id']
. " AND s.delete_at IS NULL")
->find_array();
if (count($neighborhood_images) > 0) {
foreach ($neighborhood_images as $im) {
$desc_tags = array();
// try {
// $tagsIm = json_decode($im['tags']);
// if ($tagsIm) {
// foreach ($tagsIm as $t) {
// $desc_tags[] = $arrayTag[$t];
// }
// }
// } catch (Exception $e) {
// $desc_tags = "";
// }
// Monto o array com os tamanhos alternativos das imagens
$alternatives_sizes = null;
if ($im['resized'] == 1) {
$alternatives_sizes = array("1152x768" => APP_URL . "/application/plugins/module_imobles/uploads/neighborhood/" . $im['neighborhood_id'] . "/images/xxl/" . $im['src'],
"840x560" => APP_URL . "/application/plugins/module_imobles/uploads/neighborhood/" . $im['neighborhood_id'] . "/images/xlg/" . $im['src'],
"600x400" => APP_URL . "/application/plugins/module_imobles/uploads/neighborhood/" . $im['neighborhood_id'] . "/images/lrg/" . $im['src'],
"450x300" => APP_URL . "/application/plugins/module_imobles/uploads/neighborhood/" . $im['neighborhood_id'] . "/images/med/" . $im['src'],
"300x200" => APP_URL . "/application/plugins/module_imobles/uploads/neighborhood/" . $im['neighborhood_id'] . "/images/sml/" . $im['src'],
"120x80" => APP_URL . "/application/plugins/module_imobles/uploads/neighborhood/" . $im['neighborhood_id'] . "/images/xsm/" . $im['src']);
if(in_array("DEVELOPMENT_GALLERY_IMGS", $desc_tags)) {
$alternatives_sizes["104x80"] = APP_URL . "/application/plugins/module_imobles/uploads/neighborhood/" . $im['neighborhood_id'] . "/images/thumb/" . $im['src'];
}
}
$webp = false;
if ($im['webp'] == 1) {
$webp = true;
}
$neighborhood_images_arr[] = array(
"type" => 'IMAGE',
"url" => APP_URL . "/application/plugins/module_imobles/uploads/neighborhood/" . $im['neighborhood_id'] . "/images/" . $im['src'],
"description" => $im['description'],
"alt_text" => $im['alt_text'],
"tags" => $desc_tags,
"alternatives_sizes" => $alternatives_sizes,
"webp" => $webp
);
}
}
}
$dataResults['address'] = array(
'country' => 'BR',
'zip_code' => $d['address_zip'],
'city' => $d['city_name'],
'ibge_city_id' => $d['city_ibge'],
'state_acronym' => $d['uf_state'],
'state' => $d['state_name'],
'ibge_state_id' => $d['code_state'],
'street' => $d['address_log'],
'number' => $d['address_number'],
'neighborhood' => $d['address_neightborhood'],
'hotsite_title' => $hotsiteTitle,
'hotsite_text' => $hotsiteText,
'neighborhood_google_place_details' => json_decode($d['neighborhood_google_place_details']),
'neighborhood_images' => $neighborhood_images_arr
);
$tags = ORM::for_table('module_imobles_enterprise_img_backend_tags')
->table_alias('s')
->find_many();
$arrayTag = array();
foreach ($tags as $t) {
$arrayTag[$t->id] = $t->name;
}
// Pego as imagens de backend
$imagB = ORM::for_table('module_imobles_enterprise_imgs')
->raw_query("SELECT s.module_imobles_enterprise_id, s.src, s.alt_text, s.resized, s.webp, s.tags, s.unit_type_id, s.description FROM"
. " module_imobles_enterprise_imgs as s"
. " WHERE (s.duplicated IS NULL OR s.duplicated=0) AND type = 'backend' "
. " AND s.module_imobles_enterprise_id IN(" . $d['module_imobles_enterprise_id'] . ") "
. " AND s.delete_at IS NULL AND s.tags IS NOT NULL ")
->find_array();
if (count($imagB) > 0) {
foreach ($imagB as $im) {
if (!empty($im['unit_type_id']) || empty($im['tags'])) {
continue;
}
$desc_tags = array();
try {
$tagsIm = json_decode($im['tags']);
if ($tagsIm) {
foreach ($tagsIm as $t) {
if(isset($arrayTag[$t])){
$desc_tags[] = $arrayTag[$t];
}
}
}
} catch (Exception $e) {
$desc_tags = "";
}
// Monto o array com os tamanhos alternativos das imagens
$alternatives_sizes = null;
if ($im['resized'] == 1) {
$alternatives_sizes = array("1152x768" => APP_URL . "/application/plugins/module_imobles/uploads/enterprise/" . $im['module_imobles_enterprise_id'] . "/images/xxl/" . $im['src'],
"840x560" => APP_URL . "/application/plugins/module_imobles/uploads/enterprise/" . $im['module_imobles_enterprise_id'] . "/images/xlg/" . $im['src'],
"600x400" => APP_URL . "/application/plugins/module_imobles/uploads/enterprise/" . $im['module_imobles_enterprise_id'] . "/images/lrg/" . $im['src'],
"450x300" => APP_URL . "/application/plugins/module_imobles/uploads/enterprise/" . $im['module_imobles_enterprise_id'] . "/images/med/" . $im['src'],
"300x200" => APP_URL . "/application/plugins/module_imobles/uploads/enterprise/" . $im['module_imobles_enterprise_id'] . "/images/sml/" . $im['src'],
"120x80" => APP_URL . "/application/plugins/module_imobles/uploads/enterprise/" . $im['module_imobles_enterprise_id'] . "/images/xsm/" . $im['src']);
if(in_array("DEVELOPMENT_GALLERY_IMGS", $desc_tags))
{
$alternatives_sizes["104x80"] = APP_URL . "/application/plugins/module_imobles/uploads/enterprise/" . $im['module_imobles_enterprise_id'] . "/images/thumb/" . $im['src'];
}
}
$webp = false;
if ($im['webp'] == 1) {
$webp = true;
}
$dataResults['medias'][] = array(
"type" => 'IMAGE',
"url" => APP_URL . "/application/plugins/module_imobles/uploads/enterprise/" . $im['module_imobles_enterprise_id'] . "/images/" . $im['src'],
"description" => $im['description'],
"alt_text" => $im['alt_text'],
"tags" => $desc_tags,
"alternatives_sizes" => $alternatives_sizes,
"webp" => $webp
);
}
}
$filterListMediaPriceLIsting = " AND (sub_price2.delete_at IS NULL AND "
. "(sub_price2.crawler_status IS NULL OR sub_price2.crawler_status='ACTIVE')"
. " AND (sub_price2.unavailable IS NULL OR sub_price2.unavailable=0)"
. ")";
if ($resale === false) {
$query_resale = " AND u.crawler_type_id = 4 ";
$query_resale .= " AND l.crawler_type_id = 4 AND l.advertiser_id IS NULL AND l.crawler_price > 0 AND u.delete_at IS NULL ";
$filterListMediaPriceLIsting .= " AND sub_price2.crawler_type_id = 4 AND sub_price2.advertiser_id IS NULL ";
} else {
$query_resale = " ";
$filterListMediaPriceLIsting .= "AND (sub_price2.crawler_type_id IS NULL OR sub_price2.crawler_type_id <> 4) AND sub_price2.advertiser_id IS NOT NULL AND (sub_price2.crawler_businessType <> 'RENTAL' OR sub_price2.crawler_businessType IS NULL) ";
$query_resale .= " AND l.crawler_price > 0 AND u.delete_at IS NULL AND (l.crawler_type_id IS NULL OR l.crawler_type_id <> 4) AND l.advertiser_id IS NOT NULL AND (l.crawler_businessType <> 'RENTAL' OR l.crawler_businessType IS NULL) ";
}
$arr_unit_type_imgs = array();
$selectFields = "*";
$groupBy = 'module_imobles_enterprise_id, id, number_rooms, number_suite, area, number_garage, number_bathroom';
$this->orderBy($filter, $orderBy, $orderTypeUnit);
$sql = $this->searchSQL($filter, $selectFields, $groupBy, $orderBy);
$types = ORM::for_table('module_imobles_view_type_units_search')
->raw_query($sql)
->find_array();
$total_units = 0;
$total_development_units = null;
if (count($types) > 0) {
foreach ($types as $u) {
if($total_development_units === null){
$total_development_units = $u['enterprise_total_units'];
}
if (count($imagB) > 0) {
foreach ($imagB as $im) {
$arr_tags = array();
if ($im['unit_type_id'] != $u['id'] || empty($im['tags'])) {
continue;
}
if (empty($arr_unit_type_imgs[$u['id']]) || count($arr_unit_type_imgs[$u['id']]) < 10) {
// TODO: erro quando imageem está quebrada ou sem tags
$arr_tags_id = json_decode($im['tags']);
if(count($arr_tags_id) == 0) {
continue;
}
$arr_tags_aux = ORM::for_table('module_imobles_enterprise_img_backend_tags')->select('name')->where_in('id', $arr_tags_id)->find_array();
foreach ($arr_tags_aux as $tags) {
$arr_tags[] = $tags['name'];
}
// Monto o array com os tamanhos alternativos das imagens
$alternatives_sizes = null;
if ($im['resized'] == 1) {
$alternatives_sizes = array("1152x768" => APP_URL . "/application/plugins/module_imobles/uploads/enterprise/" . $im['module_imobles_enterprise_id'] . "/images/xxl/" . $im['src'],
"840x560" => APP_URL . "/application/plugins/module_imobles/uploads/enterprise/" . $im['module_imobles_enterprise_id'] . "/images/xlg/" . $im['src'],
"600x400" => APP_URL . "/application/plugins/module_imobles/uploads/enterprise/" . $im['module_imobles_enterprise_id'] . "/images/lrg/" . $im['src'],
"450x300" => APP_URL . "/application/plugins/module_imobles/uploads/enterprise/" . $im['module_imobles_enterprise_id'] . "/images/med/" . $im['src'],
"300x200" => APP_URL . "/application/plugins/module_imobles/uploads/enterprise/" . $im['module_imobles_enterprise_id'] . "/images/sml/" . $im['src'],
"120x80" => APP_URL . "/application/plugins/module_imobles/uploads/enterprise/" . $im['module_imobles_enterprise_id'] . "/images/xsm/" . $im['src']);
if(in_array("DEVELOPMENT_GALLERY_IMGS", $arr_tags)) {
$alternatives_sizes["104x80"] = APP_URL . "/application/plugins/module_imobles/uploads/enterprise/" . $im['module_imobles_enterprise_id'] . "/images/thumb/" . $im['src'];
}
}
$webp = false;
if ($im['webp'] == 1) {
$webp = true;
}
$arr_unit_type_imgs[$u['id']][] = array(
"type" => 'IMAGE',
"url" => APP_URL . "/application/plugins/module_imobles/uploads/enterprise/" . $im['module_imobles_enterprise_id'] . "/images/" . $im['src'],
"description" => $im['description'],
"alt_text" => $im['alt_text'],
"tags" => $arr_tags,
"alternatives_sizes" => $alternatives_sizes,
"webp" => $webp);
} else {
break;
}
}
}
//bbusca os tipos de unidade
$am = ORM::for_table('module_imobles_enterprise_units_type_amenities')
->table_alias('s')
->select("sub.name")
->select_expr("sub.type")
->select_expr("sub.icon")
->join('module_imobles_type_units_amenities', 's.module_imobles_type_units_amenities_id = sub.id', 'sub')
->where('s.module_imobles_enterprise_units_type_id', $u['id'])
->find_array();
if ($u['avg'] < $u['min']) {
$u['avg'] = $u['min'];
}
// Pego os detalhes dos anúncios
$arr_listings = array();
if ($resale === true) {
$selectlistings = "select sub_l.id, sub_l.crawler_price, sub_l.crawler_listing_link, sub_l.crawler_portal, sub_l.crawler_updatedAt, ads.logoUrl, ads.name as advertiser_name "
. "from module_imobles_listings sub_l "
. " JOIN module_imobles_advertisers as ads ON ads.id = sub_l.advertiser_id "
. " where sub_l.unit_type_id= " . $u['id'] . " AND (sub_l.unavailable IS NULL OR sub_l.unavailable = 0 ) AND sub_l.delete_at IS NULL AND "
. "(sub_l.crawler_type_id IS NULL OR sub_l.crawler_type_id <> 4) AND sub_l.advertiser_id IS NOT NULL AND "
. "(sub_l.crawler_businessType <> 'RENTAL' OR sub_l.crawler_businessType IS NULL)";
$arr_listings_aux = ORM::for_table('module_imobles_enterprise_units_type')
->raw_query($selectlistings)
->find_array();
if (count($arr_listings_aux) > 0) {
$count_aux = 0;
foreach ($arr_listings_aux as $listing_aux) {
if (!empty($listing_aux['logoUrl'])) {
$listing_aux['logoUrl'] = str_replace('{width}', '870', $listing_aux['logoUrl']);
$listing_aux['logoUrl'] = str_replace('{height}', '653', $listing_aux['logoUrl']);
$listing_aux['logoUrl'] = str_replace('{action}', 'fit-in', $listing_aux['logoUrl']);
}
if ($listing_aux['crawler_portal'] == "VIVAREAL") {
$listing_aux['crawler_listing_link'] = "https://vivareal.com.br" . $listing_aux['crawler_listing_link'];
}
if ($listing_aux['crawler_portal'] == "GRUPOZAP") {
$listing_aux['crawler_listing_link'] = "https://zapimoveis.com.br" . $listing_aux['crawler_listing_link'];
}
$arr_listings[] = array("id" => $listing_aux['id'],
"price" => $listing_aux['crawler_price'],
"portal" => $listing_aux['crawler_portal'],
"last_update" => $listing_aux['crawler_updatedAt'],
"logo" => $listing_aux['logoUrl'],
"link" => $listing_aux['crawler_listing_link'],
"advertiser_name" => $listing_aux["advertiser_name"]
);
}
}
}
// TODO: recalcular esses valores chumbados para nova ficha do empreendimento.
$financial_information = array(
"rent" => 5000.00,
"itbi" => 500.55,
"notary_fees" => 5000.00,
"condo_fee" => 350.00,
"iptu" => 580.00,
"imobles_index" => -20.00
);
$dataArray = array(
"id" => $u['id'],
"total_listing" => $u['total_listings'],
"unit_available" => $u['available_units'],
"min_value" => number_format($u['min'], 2, ".", ""),
"average_value" => number_format($u['avg'], 2, ".", ""),
"max_value" => number_format($u['max'], 2, ".", ""),
"bedrooms" => $u['number_rooms'],
"bathrooms" => $u['number_bathroom'],
"area" => $u['area'],
"suites" => $u['number_suite'],
"parking_spaces" => $u['number_garage'],
"amenities" => $am,
"medias" => @$arr_unit_type_imgs[$u['id']],
"listings_details" => $arr_listings,
"financial_information" => $financial_information,
"highlighted" => $u['imobles_indicates']==1?true:false,
"is_offer" => $u['promotion']==1?true:false,
);
if ($u['promotion']==1){
$dataArray["description"] = $u['description'];
$dataArray['standard_price'] = number_format($u["standard_price"], 2, ".", "");
}
$dataResults['unit_type'] [] = $dataArray;
$total_units += $u['available_units'];
}
}
$amenities = ORM::for_table('module_imobles_enterprise_entreprise_amenities')
->table_alias('s')
->select("sub.name")
->select_expr("sub.type")
->select_expr("sub.icon")
->join('module_imobles_enterprise_amenities', 's.module_imobles_enterprise_amenities_id = sub.id', 'sub')
->where('s.module_imobles_enterprise_id', $d['module_imobles_enterprise_id'])
->find_array();
$dataResults['amenities'] = $amenities;
// Pego os amenities obrigatórios
$required_amenities = ORM::for_table("module_imobles_enterprise_amenities")->select_many('name', 'type', 'icon')->where("required", 1)->find_array();
$dataResults['required_amenities'] = $required_amenities;
// Pego os dados do Hotsite
if (!empty($d['hotsite_params'])) {
$dataResults['hotsite'] = json_decode($d['hotsite_params']);
} else {
$dataResults['hotsite'] = null;
}
if (!empty($d['youtube_video'])) {
$dataResults['video_youtube'] = $d['youtube_video'];
} else {
$dataResults['video_youtube'] = null;
}
// TODO: recalcular esses valores chumbados para nova ficha do empreendimento.
$dataResults['price_variation'] = "down";
// Pego o total de unidades disponĩveis
if($total_development_units > 0){
$dataResults['total_units'] = $total_development_units;
} else {
$dataResults['total_units'] = null;
}
// Data de lançamento do empreendimento
$dataResults['meeting_date'] = $d['meeting_date'];
// Pego a data da última atualização da tabela de preço
$query =
"SELECT
d.created_at, d.issued_date
FROM
module_imobles_docs d
LEFT JOIN
module_imobles_docs_category dc ON d.module_imobles_docs_category_id = dc.id
WHERE
d.module_imobles_enterprise_id = " . $d['module_imobles_enterprise_id'] . "
AND d.delete_at IS NULL
AND d.module_imobles_docs_category_id
AND dc.name IN ('TABELA DE PREÇO')
ORDER BY d.id DESC
LIMIT 1";
$docs_aux = ORM::for_table("module_imobles_docs_category")
->raw_query($query)
->find_one();
if(!empty($docs_aux->issued_date)){
$expiration_date = strtotime($docs_aux->issued_date);
$expiration_date = date('Y-m-d',$expiration_date);
$expiration_date = new DateTime($expiration_date);
$now = new DateTime('NOW');
$diff = $expiration_date->diff($now)->days;
if($diff <= 90){
$dataResults['price_table_emission_date'] = $expiration_date->format('Y-m-d');
} else {
$dataResults['price_table_emission_date'] = null;
// Salvo no log o erro na tabela de preços do empreendimento
$data = array(
"development_id" => $d['module_imobles_enterprise_id'],
"development_url" => $d['site_url'],
"error_type" => "documents",
"erro_msg" => "Tabela de preço expirada há mais de 60 dias"
);
$log = ORM::for_table('module_imobles_logs')->create();
$log->type = 'development_error';
$log->params = json_encode($data);
$log->save();
}
} else {
if(!empty($docs_aux->created_at)){
$expiration_date = strtotime($docs_aux->created_at);
$expiration_date = date('Y-m-d',$expiration_date);
$expiration_date = new DateTime($expiration_date);
$now = new DateTime('NOW');
$diff = $expiration_date->diff($now)->days;
if($diff <= 90){
$dataResults['price_table_emission_date'] = $expiration_date->format('Y-m-d');
} else {
$dataResults['price_table_emission_date'] = null;
// Salvo no log o erro na tabela de preços do empreendimento
$data = array(
"development_id" => $d['module_imobles_enterprise_id'],
"development_url" => $d['site_url'],
"error_type" => "documents",
"erro_msg" => "Tabela de preço expirada há mais de 60 dias"
);
$log = ORM::for_table('module_imobles_logs')->create();
$log->type = 'development_error';
$log->params = json_encode($data);
$log->save();
}
} else {
$dataResults['price_table_emission_date'] = null;
}
}
if($d['pre_launch'] == 1){
$dataResults['pre_launch'] = true;
} else {
$dataResults['pre_launch'] = false;
}
}
}
$output = array(
"results" => ($dataResults),
);
return $output;
}
public function searchDevelopmentsSimilar() {
ORM::configure('caching', true);
$filter = $this->APIUtils->getInputFilter();
$id = intval(@$filter['development_id']);
$dataResults = array();
if ($id > 0) {
$develop = $this->developmentDetails();
if (count($develop['results']) > 0) {
if ($develop['results']['unit_type']) {
$menorPrice = $develop['results']['unit_type'][0]['min_value'];
$menorArea = $develop['results']['unit_type'][0]['area'];
$arrayBedRooms = array();
foreach ($develop['results']['unit_type'] as $unit) {
if ($unit['area'] < $menorArea) {
$menorArea = $unit['area'];
}
if ($unit['min_value'] < $menorPrice) {
$menorPrice = $unit['min_value'];
}
$arrayBedRooms[] = $unit['bedrooms'];
}
}
} else {
$output = array(
"total_count" => count($dataResults),
"results" => array_values($dataResults),
);
return $output;
}
if(!isset($filter['pre_launch']) || $filter['pre_launch'] === false){
if (empty(@$filter['bedrooms'])) {
$filter['bedrooms'] = $arrayBedRooms;
}
if (empty(@$filter['area_min'])) {
$filter['area_min'] = $menorArea;
}
if (empty(@$filter['price_min'])) {
$filter['price_min'] = $menorPrice;
}
}
if (empty(@$filter['is_new'])) {
$filter['is_new'] = $develop['results']['is_new'];
}
if (!isset($filter['order_by'])){
$filter['order_by'][] = array("price" => 'ASC', "release_date" => 'DESC');
}
if (empty(@$filter['locations'])) {
$locations_aux = array();
$locations_aux['address_neighborhood'] = $develop['results']['address']['neighborhood'];
$locations_aux['address_city'] = $develop['results']['address']['city'];
$locations_aux['address_state'] = $develop['results']['address']['state_acronym'];
$filter['locations'][] = $locations_aux;
}
$filter['development_ids_not_in'][] = $id;
unset($filter['development_id']);
$results = $this->resultDevelopments($filter);
$results2 = array();
$results3 = array();
// $size = $results['size'];
if (!isset($results['list_size']) || $results['list_size'] < $results['size']) {
//adiciona para não trazer os memos já carregados
foreach ($results['results'] as $r) {
$filter['development_ids_not_in'][] = $r['id'];
}
$filter['size'] = $results['size'] - $results['list_size'];
unset($filter['locations'][0]['address_neighborhood']);
$results2 = $this->resultDevelopments($filter);
}
if (is_array($results['results'])) {
//coloca todos os primeiros que vieram do mesmo bairro do empreendimento informado
foreach ($results['results'] as $re) {
if ($re['address']['neighborhood'] == $develop['results']['address']['neighborhood']) {
$dataResults[] = $re;
}
}
//coloca os demais, que aplicou o filtro e não estão no mesmo bairrro
foreach ($results['results'] as $re) {
if ($re['address']['neighborhood'] != $develop['results']['address']['neighborhood']) {
$dataResults[] = $re;
}
}
}
if (is_array(@$results2['results'])) {
foreach ($results2['results'] as $re) {
$dataResults[] = $re;
}
}
if (is_array(@$results3['results'])) {
foreach ($results3['results'] as $re) {
$dataResults[] = $re;
}
}
}
$output = array(
"total_count" => count($dataResults),
"results" => array_values($dataResults),
);
return $output;
}
}