AnonSec Shell
Server IP : 162.214.74.102  /  Your IP : 216.73.217.114
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/imobles/application/plugins/module_imobles/helpers/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Command :


[ HOME ]     

Current File : /home/lrsys/www/lrsys_apps/imobles/application/plugins/module_imobles/helpers/UnitsHelper.php
<?php

include_once __DIR__ . "/../models/TypeunityModel.php";
include_once __DIR__ . "/UnitsException.php";

class UnitsHelper {

    public function batchOfUnits($units) {
        $count_total = 0;
        $csv_units = array();
        $user = User::_info();
        
        $validade = $this->validateFields($units);
        if (!$validade === true)
        {
            $msg_erro .= "Dados Inválidados. Informar Webmaster<br/>";
            return false;
        }
        $this->updateEntepriseValues($units[0]);
        
        
        // Pego a primeira torre do empreendimento
        $tower = ORM::for_table('module_imobles_enterprise_towers')->where('module_imobles_enterprise_id', $units[0]['enterprise_id'])->find_one();
        if (!isset($tower->id)) 
        {
            $msg_erro .= 'Unidade Não cadastrada | Torre não encontrada: ' . $units[0]['enterprise_id'] . '<br/>';
            return false;
        }

        foreach ($units as $data) 
        {
            $count_total++;
            $data['unit_number'] = $this->alphanumeric($data['unit_number']);

            // Verifico se tem algum Tipo de Unidade cadastrado com as características da Unidade
            $data['unit_type_id'] = $this->compareUnitTypes($data);
            if(!$data['unit_type_id'])
            {
                //create unit type
//                $model = new TypeunityModel();
//                $unit_type_data = array();
//                $unit_type_data['module_imobles_enterprise_id'] = $data['enterprise_id'];
//                $unit_type_data['area'] = $data['area'];
//                $unit_type_data['number_garage'] = $data['parking_spaces_count'];
//                $unit_type_data['title'] = $data['area'] . 'm² | ' . $data['parking_spaces_count'] . ' Garagens';
//                $unit_type = $model->createTypeunity($unit_type_data);
//                $data['unit_type_id'] = $unit_type->id;
                $msg_erro .= "Unidade Não cadastrada | Tipo de Unidade não encontrada: " . $data['enterprise_id']. "| ".$data["area"]. "| ".$data["parking_spaces_count"] . "<br/>";
                continue;
            }
            

            // Verifico se a unidade já está cadastrada
            $unit = ORM::for_table('module_imobles_enterprise_units')
                    ->where('crawler_type_id', 4)
                    ->where("verified", 1)
                    ->where('number_unity', $data['unit_number'])
                    ->where('module_imobles_enterprise_units_type_id', $data['unit_type_id'])
                    ->find_one();

            if (isset($unit->id)) 
            {
                // Atualizo a Unidade
                $unit->verified = 1;
                $unit->crawler_type_id = 4;
                $unit->updated_at = date('Y-m-d H:i:s');
                
                // TODO: revisar
                $unit->unavailable = $data['availability'] == 1 ? null : 1;
                
                $unit->save();

                // Atualizo o Anúncio
                
                // TODO: isso vai dar problema quando um PDF vier com ponto no preço
                $price = str_replace('.','',$data['price']);
                $price = str_replace(',','.',$price);
                
                $arr_listing = ORM::for_table('module_imobles_listings')
                                ->where('unit_id', $unit->id)
                                ->where('crawler_type_id', 4)
                                ->order_by_asc('id')->find_one();
                if (isset($arr_listing->id)) 
                {
                    $arr_listing->crawler_type = 'airtable';
                    $arr_listing->crawler_type_id = 4;
                    $arr_listing->verified = 1;
                    
                    // TODO: está pegando o valor INTEIRO do PRICE. Verificar se está correto
                    $arr_listing->crawler_price = intval($price);
                    
                    
                    $arr_listing->updated_at = date('Y-m-d H:i:s');
                    $arr_listing->save();
                }
            } else {
                
                // Cadastro a Unidade
                $unit = ORM::for_table('module_imobles_enterprise_units')->create();
                $unit->module_imobles_enterprise_units_type_id = $data['unit_type_id'];
                $unit->module_imobles_enterprise_towers_id = $tower->id;
                $unit->number_unity = $data['unit_number'];
                $unit->garage_covered = $data['parking_cover'];
                $unit->garage_area = $data['parking_area'];
                $unit->created_at = date('Y-m-d H:i:s');
//                $unit->created_by = 0;
                $unit->crawler_type_id = 4;
                $unit->verified = 1;
                $unit->unavailable = $data['availability'] == 1 ? null : 1;
                $unit->save();

                // Cadastro o anúncio
                
                // TODO: isso vai dar problema quando um PDF vier com ponto no preço
                $price = str_replace('.','',$data['price']);
                $price = str_replace(',','.',$price);
                
                
                $d = ORM::for_table('module_imobles_listings')->create();
                $d->entreprise_id = $data['enterprise_id'];
                $d->unit_type_id = $data['unit_type_id'];
                $d->unit_id = $unit->id;
                $d->crawler_type = 'airtable';
                $d->crawler_type_id = 4;
                
                // TODO: está pegando o valor INTEIRO do PRICE. Verificar se está correto
                $d->crawler_price = intval($price);
                
                $d->created_at = date('Y-m-d H:i:s');
                $d->created_by = 0;
                $d->verified = 1;
                $d->save();

            }
            
            // Guardo a Unidade no array de controle
            $csv_units[$data['unit_type_id']][] = $unit->id;
        }
        
        // TODO: deletar todas unidades geradas pelo Airtable para o empreendimento (unit_number == null)
        $units_delete = ORM::for_table('module_imobles_enterprise_units')
                        ->where('crawler_type_id', 4)
                        ->where_null('number_unity')
                        ->where("module_imobles_enterprise_towers_id", $tower->id)
                        ->where('verified', 1)
                        ->find_many();
        foreach($units_delete as $unit_delete) 
        {
            $unit_delete->unavailable = 1;
            $unit_delete->updated_at = date('Y-m-d H:i:s');
            $unit_delete->updated_by = $user->id;
            $unit_delete->delete_at = date('Y-m-d H:i:s');
            $unit_delete->delete_by = $user->id;
            $unit_delete->save();
        }

        foreach($csv_units as $key => $value) 
        {
            // Deixo como indisponível todas as unidades que não foram tratadas
            $invalidUnits = ORM::for_table('module_imobles_enterprise_units')
                            ->where('crawler_type_id', 4)
                            ->where_not_in('id', $value)
                            ->where('unavailable', null)
                            ->where("module_imobles_enterprise_units_type_id", $key)
                            ->where('verified', 1)
                            ->find_many();

            if (count($invalidUnits)) 
            {
                foreach($invalidUnits as $invalid) 
                {
                    $invalid->unavailable = 1;
                    $invalid->updated_at = date('Y-m-d H:i:s');
                    $invalid->updated_by = $user->id;
                    $invalid->save();
                }
            }
        }
    }

    private function validateFields($units) {
        // unit number present
        // area present
        // installment < entry < financing < price

        foreach($units as $data) 
        {
            $values=['entry', 'financing', 'price'];
            foreach($values as $v){
                if(!$data[$v]) 
                {
                    echo $v . 'is invalid';
                    return false;
                }
            }

            if (!$data['unit_number']) 
            {
                echo 'Invalid unit number';
                return false;
            }

            if (!$data['area'] || $data['area'] < 30) 
            {
                echo 'Invalid unit area';
                return false;
            }

            if ($data['installment'] > $data['entry']) 
            {
                echo 'Unit installment is larger than entry value';
                return false;
            }

            if ($data['entry'] > $data['financing']) 
            {
                echo 'Unit entry is larger than financing value';
                return false;
            }

            if ($data['financing'] > $data['price']) 
            {
                echo 'Unit financing is larger than total value';
                return false;
            }
        }
      
      return true;
    }

    private function compareUnitTypes($data) {
        $unit_types = ORM::for_table('module_imobles_enterprise_units_type')
            ->select_many('id','area','number_garage')
            ->where('module_imobles_enterprise_id', $data['enterprise_id'])
            ->where('crawler_type_id', 4)
            ->find_many();

        foreach($unit_types as $type) {
          $area = str_replace(',', '.', $data['area']);
          $area = trim($area);
          if($area == $type->area && $type->number_garage == $data['parking_spaces_count']){
            return $type->id;
          }
        }
        return null;
    }

    private function alphanumeric($cell) {
      $pattern = '/[^a-zA-Z0-9]/';
      $clean = preg_replace($pattern, '', $cell);
      return strtoupper($clean);
    }

    private function updateEntepriseValues($data) {
        $enterprise = ORM::for_table('module_imobles_enterprise')
            ->select_many('id','value_input_porcentage', 'value_founding_porcentage', 'value_installment_porcentage')
            ->find_one($data['enterprise_id']);

        $installment = $this->cleanFloat($data['installment']);
        $entry = $this->cleanFloat($data['entry']);
        $financing = $this->cleanFloat($data['financing']);
        $price = $this->cleanFloat($data['price']);

        if (!$data['installment']) {
            $enterprise->value_installment_porcentage = 0.006746;
            $enterprise->value_input_porcentage = 0.2;
            $enterprise->value_founding_porcentage = 0.8;
            $enterprise->save();
            return;
        }

        $installment = ($installment / $price); // installment / total
        $enterprise->value_installment_porcentage = $installment;

        $entry = ($entry / $price); // entry / total
        $enterprise->value_input_porcentage = $entry;

        $financing = 1 - ($financing / $price); // 1 - (financing / total)
        $enterprise->value_founding_porcentage = $financing;

        $enterprise->save();
    }

    private function cleanFloat($num) {
      $num = str_replace('.','', $num);
      $num = str_replace(',','.', $num);
      return floatval($num);
    }

}


Anon7 - 2022
AnonSec Team