<?php
/**
 * System generated by SysGen (System Generator with Formdin Framework) 
 * Download SysGenAd: https://github.com/bjverde/sysgenad
 * Download Formdin5 Framework: https://github.com/bjverde/formDin5
 * 
 * SysGen  Version: 0.6.0
 * FormDin Version: 5.0.0
 * 
 * System cnpjrfb created in: 2021-11-19 22:41:13
 */
class EstabelecimentoDAO 
{

    private static $sqlBasicSelect = 'select
                                      cnpj_basico
                                     ,cnpj_ordem
                                     ,cnpj_dv
                                     ,identificador_matriz_filial
                                     ,nome_fantasia
                                     ,situacao_cadastral
                                     ,data_situacao_cadastral
                                     ,motivo_situacao_cadastral
                                     ,nome_cidade_exterior
                                     ,pais
                                     ,data_inicio_atividade
                                     ,cnae_fiscal_principal
                                     ,cnae_fiscal_secundaria
                                     ,tipo_logradouro
                                     ,logradouro
                                     ,numero
                                     ,complemento
                                     ,bairro
                                     ,cep
                                     ,uf
                                     ,municipio
                                     ,ddd_1
                                     ,telefone_1
                                     ,ddd_2
                                     ,telefone_2
                                     ,ddd_fax
                                     ,fax
                                     ,correio_eletronico
                                     ,situacao_especial
                                     ,data_situacao_especial
                                     from '.DATABASE_SCHEMA.'estabelecimento ';

    private $tpdo = null;
    private $repositoryName = 'estabelecimento'; //Nome da Classe do tipo Active Record no diretorio /app/model/maindatabase

    public function __construct($tpdo=null)
    {
        //FormDinHelper::validateObjTypeTPDOConnectionObj($tpdo,__METHOD__,__LINE__);
        if( empty($tpdo) ){
            //$tpdo = New TPDOConnectionObj(); //FomDin4
            $tpdo = New TFormDinPdoConnection('maindatabase');
        }
        $this->setTPDOConnection($tpdo);
    }
    public function getTPDOConnection()
    {
        return $this->tpdo;
    }
    public function setTPDOConnection($tpdo)
    {
        //FormDinHelper::validateObjTypeTPDOConnectionObj($tpdo,__METHOD__,__LINE__);
        $this->tpdo = $tpdo;
    }
    private function processWhereGridParameters( $whereGrid )
    {
        $result = $whereGrid;
        if ( is_array($whereGrid) ){
            $where = ' 1=1 ';
            $connetor = SqlHelper::SQL_CONNECTOR_AND;
            $dbms = $this->tpdo->getDbms();
            $where = SqlHelper::getAtributeWhereGridParameters($where, $whereGrid, 'CNPJ_BASICO', SqlHelper::SQL_TYPE_TEXT_LIKE,true,$connetor,$dbms);
            $where = SqlHelper::getAtributeWhereGridParameters($where, $whereGrid, 'CNPJ_ORDEM', SqlHelper::SQL_TYPE_TEXT_LIKE,true,$connetor,$dbms);
            $where = SqlHelper::getAtributeWhereGridParameters($where, $whereGrid, 'CNPJ_DV', SqlHelper::SQL_TYPE_TEXT_LIKE,true,$connetor,$dbms);
            $where = SqlHelper::getAtributeWhereGridParameters($where, $whereGrid, 'IDENTIFICADOR_MATRIZ_FILIAL', SqlHelper::SQL_TYPE_TEXT_LIKE,true,$connetor,$dbms);
            $where = SqlHelper::getAtributeWhereGridParameters($where, $whereGrid, 'NOME_FANTASIA', SqlHelper::SQL_TYPE_TEXT_LIKE,true,$connetor,$dbms);
            $where = SqlHelper::getAtributeWhereGridParameters($where, $whereGrid, 'SITUACAO_CADASTRAL', SqlHelper::SQL_TYPE_TEXT_LIKE,true,$connetor,$dbms);
            $where = SqlHelper::getAtributeWhereGridParameters($where, $whereGrid, 'DATA_SITUACAO_CADASTRAL', SqlHelper::SQL_TYPE_TEXT_LIKE,true,$connetor,$dbms);
            $where = SqlHelper::getAtributeWhereGridParameters($where, $whereGrid, 'MOTIVO_SITUACAO_CADASTRAL', SqlHelper::SQL_TYPE_NUMERIC,true,$connetor,$dbms);
            $where = SqlHelper::getAtributeWhereGridParameters($where, $whereGrid, 'NOME_CIDADE_EXTERIOR', SqlHelper::SQL_TYPE_TEXT_LIKE,true,$connetor,$dbms);
            $where = SqlHelper::getAtributeWhereGridParameters($where, $whereGrid, 'PAIS', SqlHelper::SQL_TYPE_NUMERIC,true,$connetor,$dbms);
            $where = SqlHelper::getAtributeWhereGridParameters($where, $whereGrid, 'DATA_INICIO_ATIVIDADE', SqlHelper::SQL_TYPE_TEXT_LIKE,true,$connetor,$dbms);
            $where = SqlHelper::getAtributeWhereGridParameters($where, $whereGrid, 'CNAE_FISCAL_PRINCIPAL', SqlHelper::SQL_TYPE_NUMERIC,true,$connetor,$dbms);
            $where = SqlHelper::getAtributeWhereGridParameters($where, $whereGrid, 'CNAE_FISCAL_SECUNDARIA', SqlHelper::SQL_TYPE_TEXT_LIKE,true,$connetor,$dbms);
            $where = SqlHelper::getAtributeWhereGridParameters($where, $whereGrid, 'TIPO_LOGRADOURO', SqlHelper::SQL_TYPE_TEXT_LIKE,true,$connetor,$dbms);
            $where = SqlHelper::getAtributeWhereGridParameters($where, $whereGrid, 'LOGRADOURO', SqlHelper::SQL_TYPE_TEXT_LIKE,true,$connetor,$dbms);
            $where = SqlHelper::getAtributeWhereGridParameters($where, $whereGrid, 'NUMERO', SqlHelper::SQL_TYPE_TEXT_LIKE,true,$connetor,$dbms);
            $where = SqlHelper::getAtributeWhereGridParameters($where, $whereGrid, 'COMPLEMENTO', SqlHelper::SQL_TYPE_TEXT_LIKE,true,$connetor,$dbms);
            $where = SqlHelper::getAtributeWhereGridParameters($where, $whereGrid, 'BAIRRO', SqlHelper::SQL_TYPE_TEXT_LIKE,true,$connetor,$dbms);
            $where = SqlHelper::getAtributeWhereGridParameters($where, $whereGrid, 'CEP', SqlHelper::SQL_TYPE_TEXT_LIKE,true,$connetor,$dbms);
            $where = SqlHelper::getAtributeWhereGridParameters($where, $whereGrid, 'UF', SqlHelper::SQL_TYPE_TEXT_LIKE,true,$connetor,$dbms);
            $where = SqlHelper::getAtributeWhereGridParameters($where, $whereGrid, 'MUNICIPIO', SqlHelper::SQL_TYPE_NUMERIC,true,$connetor,$dbms);
            $where = SqlHelper::getAtributeWhereGridParameters($where, $whereGrid, 'DDD_1', SqlHelper::SQL_TYPE_TEXT_LIKE,true,$connetor,$dbms);
            $where = SqlHelper::getAtributeWhereGridParameters($where, $whereGrid, 'TELEFONE_1', SqlHelper::SQL_TYPE_TEXT_LIKE,true,$connetor,$dbms);
            $where = SqlHelper::getAtributeWhereGridParameters($where, $whereGrid, 'DDD_2', SqlHelper::SQL_TYPE_TEXT_LIKE,true,$connetor,$dbms);
            $where = SqlHelper::getAtributeWhereGridParameters($where, $whereGrid, 'TELEFONE_2', SqlHelper::SQL_TYPE_TEXT_LIKE,true,$connetor,$dbms);
            $where = SqlHelper::getAtributeWhereGridParameters($where, $whereGrid, 'DDD_FAX', SqlHelper::SQL_TYPE_TEXT_LIKE,true,$connetor,$dbms);
            $where = SqlHelper::getAtributeWhereGridParameters($where, $whereGrid, 'FAX', SqlHelper::SQL_TYPE_TEXT_LIKE,true,$connetor,$dbms);
            $where = SqlHelper::getAtributeWhereGridParameters($where, $whereGrid, 'CORREIO_ELETRONICO', SqlHelper::SQL_TYPE_TEXT_LIKE,true,$connetor,$dbms);
            $where = SqlHelper::getAtributeWhereGridParameters($where, $whereGrid, 'SITUACAO_ESPECIAL', SqlHelper::SQL_TYPE_TEXT_LIKE,true,$connetor,$dbms);
            $where = SqlHelper::getAtributeWhereGridParameters($where, $whereGrid, 'DATA_SITUACAO_ESPECIAL', SqlHelper::SQL_TYPE_TEXT_LIKE,true,$connetor,$dbms);
            $result = $where;
        }
        return $result;
    }
    //--------------------------------------------------------------------------------
    public function selectById( $id )
    {
        $values = array($id);
        $sql = self::$sqlBasicSelect.' where cnpj_basico = ?';
        $result = $this->tpdo->executeSql($sql, $values);
        return $result;
    }
    //--------------------------------------------------------------------------------
    /**
     * Faz um Select SQL nativo count
     * @param array  $where   - 01: array PHP "NOME_COLUNA1=>VALOR,NOME_COLUNA1=>VALOR" que será usado na consulta no metodo processWhereGridParameters
     * @return int Qtd
     */
    public function selectCount( $where=null )
    {
        $where = $this->processWhereGridParameters($where);
        $sql = 'select count(cnpj_basico) as qtd from dados_rfb.estabelecimento';
        $sql = $sql.( ($where)? ' where '.$where:'');
        $result = $this->tpdo->executeSql($sql);
        return $result[0]->QTD;
    }
    //--------------------------------------------------------------------------------
    /**
     * Faz um Select SQL nativo, COM paginação do banco
     * @param string $orderBy - 01: criterio de ordenação
     * @param array  $where   - 02: array PHP "NOME_COLUNA1=>VALOR,NOME_COLUNA1=>VALOR" que será usado na consulta no metodo processWhereGridParameters
     * @return array Adianti
     */
    public function selectAllPagination( $orderBy=null, $where=null, $page=null,  $rowsPerPage= null )
    {
        $rowStart = SqlHelper::getRowStart($page,$rowsPerPage);
        $where = $this->processWhereGridParameters($where);

        $sql = self::$sqlBasicSelect
        .( ($where)? ' where '.$where:'')
        .( ($orderBy) ? ' order by '.$orderBy:'')
        .( ' LIMIT '.$rowStart.','.$rowsPerPage);

        $result = $this->tpdo->executeSql($sql);
        return $result;
    }
    //--------------------------------------------------------------------------------
    /**
     * Faz um Select SQL nativo, sem paginação
     * @param string $orderBy - 01: criterio de ordenação
     * @param array  $where   - 02: array PHP "NOME_COLUNA1=>VALOR,NOME_COLUNA1=>VALOR" que será usado na consulta no metodo processWhereGridParameters
     * @return array Adianti
     */
    public function selectAll( $orderBy=null, $where=null )
    {
        $where = $this->processWhereGridParameters($where);
        $sql = self::$sqlBasicSelect
        .( ($where)? ' where '.$where:'')
        .( ($orderBy) ? ' order by '.$orderBy:'');

        $result = $this->tpdo->executeSql($sql);
        return $result;
    }
    //--------------------------------------------------------------------------------
    /**
     * Faz um Select usando o TCriteria
     * @param TCriteria $criteria    - 01: Obj TCriteria
     * @param string $repositoryName - 02: nome de classe
     * @return array Adianti
     */
    public function selectByTCriteria( TCriteria $criteria=null )
    {
        $result = $this->tpdo->selectByTCriteria($criteria,$this->repositoryName);
        return $result;
    }
    //--------------------------------------------------------------------------------
    /**
     * Faz um Select Count usando o TCriteria
     * @param TCriteria $criteria    - 01: Obj TCriteria
     * @param string $repositoryName - 02: nome de classe
     * @return array Adianti
     */
    public function selectByTCriteriaCount( TCriteria $criteria=null )
    {
        $result = $this->tpdo->selectByTCriteriaCount($criteria,$this->repositoryName);
        return $result;
    }
    //--------------------------------------------------------------------------------
    public function insert( EstabelecimentoVO $objVo )
    {
        $values = array(  $objVo->getCnpj_ordem() 
                        , $objVo->getCnpj_dv() 
                        , $objVo->getIdentificador_matriz_filial() 
                        , $objVo->getNome_fantasia() 
                        , $objVo->getSituacao_cadastral() 
                        , $objVo->getData_situacao_cadastral() 
                        , $objVo->getMotivo_situacao_cadastral() 
                        , $objVo->getNome_cidade_exterior() 
                        , $objVo->getPais() 
                        , $objVo->getData_inicio_atividade() 
                        , $objVo->getCnae_fiscal_principal() 
                        , $objVo->getCnae_fiscal_secundaria() 
                        , $objVo->getTipo_logradouro() 
                        , $objVo->getLogradouro() 
                        , $objVo->getNumero() 
                        , $objVo->getComplemento() 
                        , $objVo->getBairro() 
                        , $objVo->getCep() 
                        , $objVo->getUf() 
                        , $objVo->getMunicipio() 
                        , $objVo->getDdd_1() 
                        , $objVo->getTelefone_1() 
                        , $objVo->getDdd_2() 
                        , $objVo->getTelefone_2() 
                        , $objVo->getDdd_fax() 
                        , $objVo->getFax() 
                        , $objVo->getCorreio_eletronico() 
                        , $objVo->getSituacao_especial() 
                        , $objVo->getData_situacao_especial() 
                        );
        $sql = 'insert into dados_rfb.estabelecimento(
                                 cnpj_ordem
                                ,cnpj_dv
                                ,identificador_matriz_filial
                                ,nome_fantasia
                                ,situacao_cadastral
                                ,data_situacao_cadastral
                                ,motivo_situacao_cadastral
                                ,nome_cidade_exterior
                                ,pais
                                ,data_inicio_atividade
                                ,cnae_fiscal_principal
                                ,cnae_fiscal_secundaria
                                ,tipo_logradouro
                                ,logradouro
                                ,numero
                                ,complemento
                                ,bairro
                                ,cep
                                ,uf
                                ,municipio
                                ,ddd_1
                                ,telefone_1
                                ,ddd_2
                                ,telefone_2
                                ,ddd_fax
                                ,fax
                                ,correio_eletronico
                                ,situacao_especial
                                ,data_situacao_especial
                                ) values (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)';
        $result = $this->tpdo->executeSql($sql, $values); //Insert return de LastID
        return intval($result);
    }
    //--------------------------------------------------------------------------------
    public function update ( EstabelecimentoVO $objVo )
    {
        $values = array( $objVo->getCnpj_ordem()
                        ,$objVo->getCnpj_dv()
                        ,$objVo->getIdentificador_matriz_filial()
                        ,$objVo->getNome_fantasia()
                        ,$objVo->getSituacao_cadastral()
                        ,$objVo->getData_situacao_cadastral()
                        ,$objVo->getMotivo_situacao_cadastral()
                        ,$objVo->getNome_cidade_exterior()
                        ,$objVo->getPais()
                        ,$objVo->getData_inicio_atividade()
                        ,$objVo->getCnae_fiscal_principal()
                        ,$objVo->getCnae_fiscal_secundaria()
                        ,$objVo->getTipo_logradouro()
                        ,$objVo->getLogradouro()
                        ,$objVo->getNumero()
                        ,$objVo->getComplemento()
                        ,$objVo->getBairro()
                        ,$objVo->getCep()
                        ,$objVo->getUf()
                        ,$objVo->getMunicipio()
                        ,$objVo->getDdd_1()
                        ,$objVo->getTelefone_1()
                        ,$objVo->getDdd_2()
                        ,$objVo->getTelefone_2()
                        ,$objVo->getDdd_fax()
                        ,$objVo->getFax()
                        ,$objVo->getCorreio_eletronico()
                        ,$objVo->getSituacao_especial()
                        ,$objVo->getData_situacao_especial()
                        ,$objVo->getCnpj_basico() );
        $sql = 'update dados_rfb.estabelecimento set 
                                 cnpj_ordem = ?
                                ,cnpj_dv = ?
                                ,identificador_matriz_filial = ?
                                ,nome_fantasia = ?
                                ,situacao_cadastral = ?
                                ,data_situacao_cadastral = ?
                                ,motivo_situacao_cadastral = ?
                                ,nome_cidade_exterior = ?
                                ,pais = ?
                                ,data_inicio_atividade = ?
                                ,cnae_fiscal_principal = ?
                                ,cnae_fiscal_secundaria = ?
                                ,tipo_logradouro = ?
                                ,logradouro = ?
                                ,numero = ?
                                ,complemento = ?
                                ,bairro = ?
                                ,cep = ?
                                ,uf = ?
                                ,municipio = ?
                                ,ddd_1 = ?
                                ,telefone_1 = ?
                                ,ddd_2 = ?
                                ,telefone_2 = ?
                                ,ddd_fax = ?
                                ,fax = ?
                                ,correio_eletronico = ?
                                ,situacao_especial = ?
                                ,data_situacao_especial = ?
                                where cnpj_basico = ?';
        $result = $this->tpdo->executeSql($sql, $values);
        return intval($result);
    }
    //--------------------------------------------------------------------------------
    public function delete( $id )
    {
        $values = array($id);
        $sql = 'delete from dados_rfb.estabelecimento where cnpj_basico = ?';
        $result = $this->tpdo->executeSql($sql, $values);
        return $result;
    }
    //--------------------------------------------------------------------------------
    public function getVoById( $id )
    {
        $result = $this->selectById( $id );
        $result = \ArrayHelper::convertArrayFormDin2Pdo($result,false);
        $result = $result[0];
        $vo = new EstabelecimentoVO();
        $vo = \FormDinHelper::setPropertyVo($result,$vo);
        return $vo;
    }
}
?>