# Tutorial ## <img src="https://cdn-icons-png.flaticon.com/512/724/724831.png" style="height: 60px; width: auto;"> &nbsp; Cadastro de Parceiros e Importação de imóveis<br><br> <span style="color:grey">O intuito deste documento é auxiliar no cadastramento de novos parceiros e na importação de imóveis dos parceiros cadastrados para a base de dados da Netimóveis por meio de arquivos XML. Qualquer dúvida, contatar o setor de TI (NITI).</span> <hr> ### <img src="https://cdn-icons-png.flaticon.com/512/265/265674.png" style="height: 40px; width: auto;"> &nbsp; 1. Cadastro de Parceiro<br><br> 1. <span style="color:grey31">Para gerar as consultas referentes ao cadastro de parceiros, é necessário identificar qual banco de dados será utilizado, nesse caso, utilizaremos o banco de dados <strong>Site_Netimoveis_Versao7</strong>: ~~~html USE Site_Netimoveis_Versao7 ~~~ 2. <span style="color:grey31">Para listar ==**todas as parceiras cadastradas na Netimóveis**==, basta realizar a seguinte consulta:</span> ~~~html USE Site_Netimoveis_Versao7 --Tabela exclusiva para as parceiras SELECT Formato, Ativo,* From Site_ListarAgenciaViewCompletaParceira --Tabela exclusiva para as associadas SELECT * From Site_ListarAgenciaViewCompleta --View que unifica as duas tabelas SELECT * From Site_ListarAgenciaViewCompletaUniao ~~~ Na View As parceiras são identificadas pelo campo <strong>Rede=0</strong> e as associadas pelo campo <strong>Rede=1</strong><br> 3. <span style="color:grey31">Para listar os ==**imóveis de uma determinada parceira**==, utilizamos a seguinte consulta:</span> ~~~html USE Site_Netimoveis_Versao7 SELECT * FROM Site_ListarImoveisViewCompletaParceira WHERE AgenciaSan_Id = 99999 ~~~ 4. <span style="color:grey31">Antes de executarmos o ==**camando SQL**== que inserirá no banco de dados uma nova parceira, é necessário explicarmos sobre alguns campos que deverão ser preenchidos, são eles:</span> #### logo <span style="color:#b6b6b6"> // Não é necessário preencher o campo de logo na tabela mas é necessário coloar a imagem nos seguintes diretórios e o nome da logo deve ser o ID da Parceira com extensão SVG: C:\inetpub\wwwroot\core.netimoveis.com\wwwroot\img\parceiras\logo C:\inetpub\wwwroot\core.netimoveis.com\wwwroot\img\parceiras\logo ><span style="color:#b6b6b6">Tamanho: 100 × 50 px</span> ><span style="color:#b6b6b6">Extensão: SVG</span> ><span style="color:#b6b6b6">Nome: AGENCIASAN_ID.svg | Exemplo: 99999.svg</span> #### Bairro_Id <span style="color:#b6b6b6"> // utilizar o modelo de query abaixo para pegar esta informação: ~~~html SELECT * FROM San2017..san_bairro where nomebairro = 'Savassi' AND Cidade_Id = 2754 ~~~ #### Cidade_Id <span style="color:#b6b6b6"> // utilizar o modelo de query abaixo para pegar esta informação: ~~~html SELECT * FROM San2017..san_cidade where nomecidade = 'Belo Horizonte' and Estado_Id = 14 ~~~ #### Estado_Id <span style="color:#b6b6b6"> // utilizar o modelo de query abaixo para pegar esta informação: ~~~html SELECT * FROM San2017..San_Estado where NomeEstado = 'Minas Gerais' ~~~ #### Formato <span style="color:#b6b6b6"> // o ormato do XML pode variar de acordo com o Software da empresa</span> #### CaminhoXML <span style="color:#b6b6b6"> // é o caminho físico no servidor de banco de dados para a leitura do XML</span> #### CaminhoURL <span style="color:#b6b6b6"> // é a URL do XML que a parceira disponibilza</span> #### Ordem <span style="color:#b6b6b6"> // sempre cadastrar como 0. Trata-se de um campo auxiliar alterado todos os dias por um job para alterar a pontuação do imóvel e, assim, a ordem de exibição na listagem de imóveis (Rodizio por pontuação)</span> #### Agrupamento_Id <span style="color:#b6b6b6"> // campo usado para agrupar os Leads no Dashboard, caso a parceira tenha apenas uma unidade, preencher com um número único</span> <br> #### <img src="https://cdn-icons-png.flaticon.com/512/337/337953.png" style="height: 30px; width: auto;"> &nbsp;Comando SQL para inserção de uma nova parceira:</span> ~~~html INSERT INTO Site_ListarAgenciaViewCompletaParceira ( NomeAgencia, DataHoraAtualizacao, Celula_Id, NomeCelula, ddd, ddi, TelefoneGeral, TelefoneVenda, TelefoneLocacao, EmailGeral, EmailVenda, EmailLocacao, WhatsAppVenda, WhatsAppLocacao, logo, Latitude, Longitude, SiteAgencia, Cep, Logradouro, Numero, Complemento, Bairro_Id, BairroNome, Cidade_Id, CidadeNome, Estado_Id, EstadoNome, Pais_Id, PaisNome, Creci, Regiao_Id, DataHoraMigrado, SiglaEstado, SiglaPais, UrlBairro, UrlCidade, UrlEstado, UrlPais, Formato, CaminhoXML, CaminhoURL, LogoListagem, Ativo, Ordem, Agrupamento_Id, AgrupamentoNome) VALUES ( 'Agência Exemplo', GETDATE(), 9999, 'Celula Exemplo', 99, 99, '00000000', '99999999', '99999999', email@email.com.br', 'email@email.com.br', 'email@email.com.br', '3199999999', '3199999999', '', '-00.000000000', '-99.999999999', 'www.exemplo.com.br', '88888-888', 'Logradouro Exemplo', 'Número de Logradouro, 'Complemento do ndereço', 9999, 'Bairro Exemplo', 9999, 'Cidade Exemplo', 99, 'Estado Exemplo', 1, 'País Exemplo', 9999J', 0, GETDATE(), 'Sigla UF Exemplo', 'Sigla País Exemplo', 'url-bairro-exemplo', 'url-cidade-exemplo', url-estado-exemplo', 'url-pais', 'formatoexemplo', 'F:\XML\', 'http://www.formato.com.br/imobiliaria.php/99999999/parceira', '', 0, 0, 99, 'Parceira Imóveis') ~~~ <span style="color:red">Para realizar os testes manuais com a **nova parceira**, é necessário que o campo **'Ativo'** seja preenchido com o valor zero **(0)** para que a importação dos imóveis desta parceira não ocorra automaticamente.</span><br><br> <hr> ### <img src="https://cdn-icons-png.flaticon.com/512/337/337959.png" style="height: 40px; width: auto;"> &nbsp; 2.&nbsp; Importação dos imóveis através do arquivo XML da parceira <br><br> <span style="color:grey">Após a realização do cadastro da nova parceira, será necessário importar os imóveis desta parceira para dentro do banco de dados da Netimóveis por meio de arquivo XML fornecido pela parceira cadastrada.</span><br><br> #### <img src="https://cdn-icons-png.flaticon.com/512/4477/4477837.png" style="height: 30px; width: auto;"> 2.0 Validação de Dados * <span style="color:grey31"> Para que o XML seja importado, é necessário pelo menos as seguintes informações: * Codigo imovel * Tipo do imovel * Estado * Cidade * Bairro * Valor de venda ou Valor de locação Testar algumas URLs das fotos para saber estão funcionando corretamente. #### <img src="https://cdn-icons-png.flaticon.com/512/4477/4477837.png" style="height: 30px; width: auto;"> 2.1 Baixar o XML * <span style="color:grey31">O primeiro passo para importar os imóveis da nova parceira, é baixar o XML fornecido pela parceira e coloca-lo no servidor do banco de dados na pasta ==**F:\\XML\\**==. O **nome do XML** deve ser o ==**ID da parceira**== <span style="color:grey">Exemplo: F:\XML\99999.xml</span> <strong>Observação:</strong> Este processo é automático e roda todos os dias as 17:00 para as parceiras que possuem os campos <strong>'CaminhoXML'</strong> e <strong>'CaminhoURL'</strong> diferentes de **NULL**. Este processo é realizado por um *Windows Service* instalado no servidor do banco de dados #### <img src="https://cdn-icons-png.flaticon.com/512/1832/1832215.png" style="height: 30px; width: auto;">&nbsp;2.2&nbsp; Ler arquivo XML e colocá-lo como campo em uma tabela * <span style="color:grey31">Para que seja possível a importação do arquivo XML, é necessário coloca-lo como sendo um campo de uma tabela.</span> * <span style="color:grey31">Para isso, realizaremos os seguintes passos:</span> > <span style="color:grey31">1. Executar a procedure **import_LeArquivoFisicoXML** <span style="color:grey">Vale ressaltar que esta procedure irá ler o arquivo físico do XML e preecher o campo "XMLData" da tabela **Site_ListarXMLParceiras**. Ao executar, ele altera todos os outros registros para **Ativo=0**, porém, os que acabaram de ser inseridos ficarão como **Ativo=1**.</span> Esta procedure é disparada automaticamente todo dia às 1h da manha pelo JOB **Import_ImportacaoParceirasXML**</span> Segue exemplo de como ficará o arquivo XML na tabela **Site_ListarXMLParceiras**: ~~~html SELECT top 1 * FROM Site_ListarXMLParceiras WHERE Ativo=1 AND Parceira_Id = 50034 ~~~ ![](https://i.imgur.com/MIkkUl9.png) * <span style="color:grey31">Para verificar se existe registro da conversão do **XML Físico** para o **campo XMLData**, rodamos a seguinte query: </span> ~~~HTML SELECT * FROM Site_ListarXMLParceiras WHERE Parceira_id = 99999 ~~~ ![](https://i.imgur.com/HG1YbW6.png) * <span style="color:grey31">Para inserir o registro da conversao do **XML Físico** para o campo **XMLData** é preciso rodar a procedure ==**import_CursorConvertXmlimoveis**== a partir do servidor.</span><br><br> <img src="https://cdn-icons-png.flaticon.com/512/337/337953.png" style="height: 30px; width: auto;"> &nbsp;Segue a descrição da procedure **import_CursorConvertXmlimoveis**:</span> ~~~html declare @query as varchar(max); DECLARE @Parceira_Id int, @Formato VARCHAR(60), @CaminhoXML VARCHAR(100) SET @Formato = 'inetsoft' SET @Parceira_Id = 99999 SET @CaminhoXML = 'F:\XML\' SET @query = 'INSERT INTO Site_ListarXMLParceiras(XMLData, DataHora, Parceira_id, Formato) SELECT CONVERT(XML, replace(BulkColumn,''</URLArquivo>'','';</URLArquivo>'')) AS BulkColumn, GETDATE(),'+CAST(@Parceira_Id as varchar(10))+','''+@Formato+''' FROM OPENROWSET(BULK '''+@CaminhoXML+''+CAST(@Parceira_Id as varchar(10))+'.xml'+''', SINGLE_BLOB) AS x;' exec(@query) ~~~ <span style="color:#9d9d9d; text-align:right">Esta procedure retorna a **lista de Imobiliárias ativas** que possuem um registro de **XMLData** também ativo. A partir desta lista, a procedure ela identifica o campo com o formato XML e chama a procedure de importação dos imóveis que fará a leitura do campo **XMLData** da tabela **Site_ListarXMLParceiras** e inserirá os registros na tabela de imóveis **Site_ListarImoveisViewCompletaParceira**.</span> #### <img src="https://cdn-icons-png.flaticon.com/512/3498/3498738.png" style="height: 30px; width: auto"> &nbsp; **OBSERVAÇÕES SOBRE A IMPORTAÇÃO** * <span style="color:grey31">Procurar por: ==**"--EM CASO DE TESTES COMENTAR ESTE INSERT"**== e comentar o comando **INSERT INTO** antes de executar a procedure.</span> * <span style="color:grey31">Verificar como ocorreu a leitura.</span> * <span style="color:grey31">No final do dia, retirar este comentário, pois esta procedure será executada de madrugada para rodar o processo automático.</span> * <span style="color:grey31">Verificar se algum imovel ficou com estes campos em branco: **Tipo do imovel, Estado, Cidade, Valor de venda ou Valor de locação**. Se algum desses campos estiverem em branco é necessário abrir a função que trata o campo e fazer a adequação na função para a tratativa do campo. Seguem as funções que tratam esses campos:</span><span> * fk_DeParaTipoImovel -> Tipo * fc_RetornaNomeEstado -> Transforma UF em Nome do estado * fk_CorrigeNome -> Verifica Cidade e Bairro * fk_ValorCaracteristica -> ValorLocacao e ValorVenda</span><br><br> #### <img src="https://cdn-icons-png.flaticon.com/512/337/337953.png" style="height: 40px; width: auto;"> &nbsp; Nesta procedure utilizamos várias funções para adaptar as informações enviadas e coloca-las no formato que precisamos: ~~~html fc_RetornaNomeEstado(UF,0) -- Retorna o nome do Estado a partir da sua Sigla SELECT dbo.fc_RetornaNomeEstado('MG',0) -- Nome do estado normal SELECT dbo.fc_RetornaNomeEstado('MG',1) -- Nome do estado para URL Amigável fk_CorrigeNome(Cidade), --Retira aspas simples, e outros caratcteres inválidos de Cidade e Bairro SELECT dbo.fk_CorrigeNome('Olhos d''água') SELECT dbo.fk_CorrigeNome('Remove, virgula') fk_DeParaTipoImovel --Pega o tipo de imóvel informado e transforma em tipos válidos do SAN SELECT dbo.fk_DeParaTipoImovel('Apartamento', 'Apartamento Padrão', 'Padrão', 4 /*QtdDormitorios*/,0) SELECT dbo.fk_DeParaTipoImovel('Apartamento', 'Apartamento Padrão', 'Padrão', 4 /*QtdDormitorios*/,1) fk_RetornaPrimeiraFoto(Fotos) as NomeArquivoThumb, -- Retorna o nome da foto principal a partir da lista de fotos fk_ValorCaracteristica --Valida características em vários formatos, necessário 2 parâmetros, 1: Valor, 2: Tipo esperado Tipo: moeda, numero, area -> Retorna valor com pontuação apenas de decimal no formato americano select dbo.fk_ValorCaracteristica('1000','moeda') -> valor esperado 1000.00 select dbo.fk_ValorCaracteristica('1000,00','moeda') -> valor esperado 1000.00 select dbo.fk_ValorCaracteristica('1,000.00','moeda') -> valor esperado 1000.00 select dbo.fk_ValorCaracteristica('1,000','moeda') -> valor esperado 1000.00 select dbo.fk_ValorCaracteristica('1,0A00','moeda') -> valor esperado 0.00 Tipo: validamoeda -> Retorna 0 ou 1 se o valor passado é um valor de imóvel válido select dbo.fk_ValorCaracteristica('1000','validamoeda') -> valor esperado 1 select dbo.fk_ValorCaracteristica('1000,00','validamoeda') -> valor esperado 1 select dbo.fk_ValorCaracteristica('1,000.00','validamoeda') -> valor esperado 1 select dbo.fk_ValorCaracteristica('1,000','validamoeda') -> valor esperado 1 select dbo.fk_ValorCaracteristica('1,0A00','validamoeda') -> valor esperado 0 Tipo: qtd -> Valida se valor passado é um inteiro, retorna o próprio valor caso seja válido e 0 para inválido select dbo.fk_ValorCaracteristica('10','qtd') -> 10 select dbo.fk_ValorCaracteristica('10A','qtd') > 0 Tipo: simnao -> Valida valor passado e transforma em 0 ou 1 select dbo.fk_ValorCaracteristica('1','simnao') -> 1 select dbo.fk_ValorCaracteristica('0','simnao') -> 0 select dbo.fk_ValorCaracteristica('Sim','simnao') -> 1 select dbo.fk_ValorCaracteristica('Não','simnao') -> 0 select dbo.fk_ValorCaracteristica('AAAA','simnao') -> 0 fk_RetornaEnderecoOuTipoLogradouro(Endereco, 'T') --Retorna apenas o tipo de logradouro passando como parametro o endereço completo Select dbo.fk_RetornaEnderecoOuTipoLogradouro('Rua Paraíba', 'T') Select dbo.fk_RetornaEnderecoOuTipoLogradouro('R Paraíba', 'T') fk_RetornaEnderecoOuTipoLogradouro(Endereco, 'E') as logradouroPublico --Retorna apenas o logradouro passando como parametro o endereço completo Select dbo.fk_RetornaEnderecoOuTipoLogradouro('Rua Paraíba', 'E') Select dbo.fk_RetornaEnderecoOuTipoLogradouro('R Paraíba', 'E') fk_RetornaTransacaoDescricao(PrecoVenda,PrecoLocacao,'Descricao') as Descricao, --Retorna o nome da transação baseado no valor de Venda e Locação SELECT dbo.fk_RetornaTransacaoDescricao('1234.12','11111','Descricao') -> Venda ou Locação SELECT dbo.fk_RetornaTransacaoDescricao('0','11111','Descricao') -> Locação SELECT dbo.fk_RetornaTransacaoDescricao('1234.12','0','Descricao') -> Venda SELECT dbo.fk_RetornaTransacaoDescricao('1234.12','11111','DescricaoAl') -> venda-locacao SELECT dbo.fk_RetornaTransacaoDescricao('0','11111','DescricaoAl') -> locacao SELECT dbo.fk_RetornaTransacaoDescricao('1234.12','0','DescricaoAl') -> venda ~~~ #### <img src="https://cdn-icons-png.flaticon.com/512/3498/3498738.png" style="height: 30px; width: auto;"> &nbsp; INFORMAÇÕES IMPORTANTES</span> * <span style="color:grey">Caso sejam inseridos novos imóveis, a antiga importação será apagada</span> * <span style="color:grey">As fotos removidas e as fotos dos imóveis removidos são alteradas para **status_id=2**</span> * <span style="color:grey">As novos fotos são colocadas com **status_id=0**</span> * <span style="color:grey">De madugada, o software baixará as fotos com o **status_id=0**</span> * <span style="color:grey">As fotos baixadas com sucesso receberão o **status_id=1** e as que estiverem com erro terão o **status_id=2**;</span> * <span style="color:grey">O software listará todas as fotos com **status_id=2** e as apagará do Blob da Azure</span> * <span style="color:grey">Quando há mais de 10 mil fotos para downloads, devemos baixa-las manualmente, alterando o **status_id** das fotos de **0** para **10** e além disso, devemos também rodar em nosso computador o software **Importação Parceiras**, alterando a query, para que ela baixe as fotos de **status_id=10** no método **ListaFotosParaDownload()**</span><br><br> #### <img src="https://cdn-icons-png.flaticon.com/512/337/337953.png" style="height: 30px; width: auto;"> &nbsp; Query 'Importação Parceiras': <span style="color:grey">Para importar manualmente as fotos utilizaremos a seguinte query:</span> ~~~html UPDATE top(2500) Site_ListarFotosImoveisViewCompletaParceira SET status_id=10 WHERE AgenciaSan_id = 99999 AND status_id=0 // realizar o update com envios a cada 2500 fotos ~~~ <span style="color:grey"> &nbsp;Para acompanhar a importação manual das fotos, utilizaremos as seguintes consultas:</span> ~~~HTML FOTOS A SEREM BAIXADAS: SELECT Count(*) FROM Site_ListarFotosImoveisViewCompletaParceira WHERE AgenciaSan_id = 50034 AND status_id = 10 FOTOS BAIXADAS: SELECT Count(*) FROM Site_ListarFotosImoveisViewCompletaParceira WHERE AgenciaSan_id = 50034 AND status_id = 1 FOTOS COM FALHAS NO DOWNLOAD: SELECT Count(*) FROM Site_ListarFotosImoveisViewCompletaParceira WHERE AgenciaSan_id = 50034 AND status_id = 2 ~~~ <br> #### <img src="https://cdn-icons-png.flaticon.com/512/337/337953.png" style="height: 30px; width: auto;"> &nbsp; Após a inserção manual das fotos, podemos alterar a parceira cadastrada para **status=1** e verificar os imóveis inseridos utilizando a seguinte query: ~~~html UPDATE top(1) Site_ListarAgenciaViewCompletaParceira SET Ativo=1 WHERE AGenciaSAn_id = 99999 ~~~ <br><hr> ### <img src="https://cdn-icons-png.flaticon.com/512/1077/1077012.png" style="height: 40px; width: auto;"> &nbsp; Cadastro de Usuário<br> Os usuário cadastrados terão acesso aos dashboards da parceira. <span style="color:grey">Para realizar o cadastro de um novo usuário, utilizamos o seguinte comando SQL:</span> ~~~HTML INSERT INTO Dashboard_User VALUES ( 1, 'Nome Parceira', 'email@email.com.br', '/KVKJuUVwAdiEtosLp9ls51PCsbe4aDFwz5u93KfNAQ=', '1900-01-01 00:00:00.000', '', GETDATE(), GETDATE() ) ~~~ <span style="color:grey">Para consultar o usuário cadastrado, utilizamos a seguinte query:</span> ~~~HTML SELECT * FROM Dashboard_User WHERE id = 99 ~~~ <span style="color:grey">Para vincular o novo usuário cadastrado à nova parceira, utilizamos o seguinte comando SQL:</span> ~~~HTML INSERT INTO Dashboard_UserParceira VALUES (99, 99999) ~~~ <span style="color:grey">Para consultar o vínculo criado entre o usuário e a parceira, utilizamos o seguinte comando SQL:</span> ~~~HTML SELECT * FROM Dashboard_UserParceira WHERE userid = 99 ~~~ <br><hr> ### <img src="https://cdn-icons-png.flaticon.com/512/1293/1293029.png" style="height: 40px; width: auto;"> &nbsp; Finalização<br> <span style="color:grey">Informar o Gerente de TI e o Suporte sobre a conclusão do cadastro da parceira, enviando para eles os dados de acesso (conforme modelo abaixo). &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:grey10">Olá, informamos que a parceira XXXXXXX foi cadastrada com sucesso e o XML dos seus &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;imóveis e respectivas fotos foram importados para a nossa base de dados.</span> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:grey10">Segue abaixo os dados de acesso ao Dash da parceira:</span> <span style="color:grey10">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Link de acesso:</span><span style="color:grey10"> https://portal.netimoveis.com/dashboard/</span> <span style="color:grey10">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Usuário:</span><span style="color:grey10"> email@email.com.br</span> <span style="color:grey10">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Senha:</span><span style="color:grey10"> netimoveis26anos</span> <span style="color:grey">Solicitar ao suporte que envie o email de "Boas Vindas" para a nova parceira Netimóveis. O suporte deverá encaminhar o email de boas vindas contendo os dados de acesso ao dashboard.</span> #### <span style="color:grey31"><img src="https://cdn-icons-png.flaticon.com/512/3498/3498738.png" style="height: 20px; width: auto;"> &nbsp;Observação</span> <span style="color:grey">No dashboard ainda não aparecerá a listagem de imóveis até que o setor de TI execute o software que gerará a listagem em Json, porém, o total de imóveis já aparecerá no dash.</span>