
    (8i                     ~   d dl Z d dlmZ d dlmZ d dlmZ d dlmZ d dl	m
Z
 d dlmZ d dlmZmZmZmZ d d	lmZmZmZmZ  e j.                  e      Z ed
dg      Zej7                  dddeddideddeddddddddddddd gd!d"iiiii#       edd$d%&       ee       ee      fd'ee   d(dd)efd*       Zy)+    N)Optional)require_fix_token)get_sqlserver_db)AsyncSession)ClienteResponse)ClienteService)	APIRouterDependsQuerystatus)build_success_payloadto_schema_dictSuccessResponseErrorResponsez/clientes-alerta-fiscalz/Alerta Fiscal - Cadastro Clientes Alerta Fiscal)prefixtagsz/buscarz<Listar clientes do cadastro interno do sistema Alerta Fiscalu  
Consulta a tabela **dbo.Cliente** no banco de dados **SQL Server** - cadastro interno do sistema Alerta Fiscal.

**⚠️ IMPORTANTE - DIFERENÇA ENTRE ROTAS:**

Esta rota lista os **clientes do cadastro interno do sistema Alerta Fiscal**, diferente da rota `/clientes-omie` que consulta os clientes cadastrados na Omie.

**Comparação:**
- **Esta rota (`/clientes-alerta-fiscal/buscar`)**: Consulta `dbo.Cliente` no **SQL Server** - cadastro interno do sistema Alerta Fiscal
- **Rota `/clientes-omie`**: Consulta `omie_cliente` no **MySQL (DataLake)** - dados da Omie

**Tabela:** `dbo.Cliente` (SQL Server)

**Parâmetros (query):**
- `cnpj` (opcional): Se fornecido, filtra clientes por CNPJ (busca parcial). Se não fornecido, retorna TODOS os clientes.

**Exemplos:**

1. **Buscar TODOS os clientes do Alerta Fiscal (sem filtros):**
```bash
curl -X GET 'http://localhost:8000/clientes-alerta-fiscal/buscar'   -H 'Authorization: Bearer <TOKEN>'
```

2. **Buscar clientes do Alerta Fiscal por CNPJ (com filtro opcional):**
```bash
curl -X GET 'http://localhost:8000/clientes-alerta-fiscal/buscar?cnpj=12345678000190'   -H 'Authorization: Bearer <TOKEN>'
```

**SQL Base:**
```sql
SELECT * FROM dbo.Cliente
WHERE (Cnpj LIKE '%{cnpj}%' OR :cnpj IS NULL)
```

**Nota:** O parâmetro `cnpj` é completamente opcional. Se não for passado, a API retornará todos os clientes cadastrados no sistema Alerta Fiscal.
descriptionzLista de clientesu"   Credenciais inválidas ou ausentes)r   modelzErro interno)   i  i  	responses200contentzapplication/jsonexamplez2 clientes encontradostoken123z12.345.678/0001-90zEmpresa Exemplo LtdazEmpresa Exemplo)TokenCnpjRazaoSocialNomeFantasiaz2025-01-01T12:00:00Z)messagedata	timestamp)summaryr   response_modelr   openapi_extrauY   Filtrar por CNPJ (busca parcial). OPCIONAL: se não informado, retorna todos os clientes.12345678000190)r   r   cnpj_dbc           
      X  K   t         j                  d| r| nd        	 t         j                  d       t        j                  ||        d {   }t         j                  dt        |       d       t         j                  d       g }t        |      D ]'  \  }}	 t        t        |      }|j                  |       ) t        |      }t         j                  d| d       g }| r|j                  d|  d       |rddj%                  |       nd}|dk(  rd| }n|dk(  rd| }n| d| }t         j                  d|        t'        ||      S 7 
# t        $ r}i }		 t        |d      r[|j                  j                         D 
ci c]/  \  }
}|
j                  d	      r|
t        |      j                   |f1 nc c}}
w }	}
}n#  Y nxY wt         j#                  d
| d| d|	         d }~ww xY w# t        $ r }t         j#                  d| d        d }~ww xY ww)Nz9Iniciando busca de clientes Alerta Fiscal - CNPJ filtro: zNenhum (todos)z!Chamando ClienteService.listar...)r&   zClienteService.listar retornou z itens (Alerta Fiscal)z Convertendo itens para schema...__dict___sa_u   ❌ Erro ao converter item z para schema:
   Erro: z
   Tipos dos campos do item: u   Conversão concluída: z itens processadoszCNPJ contendo ''z com filtros: z,  r   z*Nenhum cliente do Alerta Fiscal encontrado   z%1 cliente do Alerta Fiscal encontradoz& clientes do Alerta Fiscal encontradosu   Busca concluída com sucesso: )r    r   z'Erro ao listar clientes Alerta Fiscal: T)exc_info)loggerinfodebugr   listarlen	enumerater   r   append	Exceptionhasattrr*   items
startswithtype__name__errorjoinr   )r&   r'   r(   r9   r    idxitem	convertede	item_dictkvqtdfiltrossufixor   s                   1/srv/www/app-alerta/controllers/alerta_cliente.pylistar_clientesrJ      s<    ^ KKKTXD^nKopq.89$++BT::6s5zlBXYZ78"5) 	IC*?DA	I&	& $i.se3EFGNN_TF!45:A>$))G"4!56r!8B6(KGAX=fXFGCF8LG4WI>?$$@@Q ;  	tZ0JN--J]J]J_$|$!Qghgsgstzg{Qa)9)91(=%=$|$|	$|1# 7  !s #44=;@
 B  >qcBTRs   H*/G> EAG> !E BG> H*G> 	G;%G6()GG
+G

GG6G$G66G;;G> >	H'H""H''H*)loggingtypingr   	core.authr   core.databaser   sqlalchemy.ext.asyncior   schemas.alerta_clienter   services.alerta_clienter   fastapir	   r
   r   r   core.api_responsesr   r   r   r   	getLoggerr<   r0   routergetstrrJ        rI   <module>rZ      s9     ' * / 2 2 5 5 d d			8	$	$
;	<

 J%L #01AMZ+mD 	&!'? .8,@3I4E	!"% *@$)
_  EN  o 
 '(/09
3-9 9 	9MEL9rY   