
    (8iL5                        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mZmZmZ d dlmZmZmZ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"jG                  dddeddideddedd       eddd       eddd       eddd       ee       ee      fdee$   d ee$   d!ee$   d"dd#e
f
d$       Z%e"jG                  d%d&d'edd(ideddedd       eddd       ee       ee      fd ee$   d"dd#e
fd)       Z&e"jG                  d*d+d,edd-ideddedd       eddd       ee       ee      fd ee$   d"dd#e
fd.       Z'e"jG                  d/d0d1edd2ideddedd       eddd       edd3d4       edd5d6       eddd7       ee       ee      fd ee$   d8ee   d9ee   d!ee$   d"dd#e
fd:       Z(y);    N)date)Optional)get_mysql_db)require_fix_token)AsyncSession)OmieContratoResponseOmieContratoServicoResponse OmieContratoDepartamentoResponseOmieContratoVencimentoResponse)OmieContratoServiceOmieContratoServicoServiceOmieContratoDepartamentoServiceOmieContratoVencimentoService)	APIRouterDependsQuerystatus)build_success_payloadto_schema_dictSuccessResponseErrorResponsez
/contratoszOmie - Contratos)prefixtags zListar contratos da Omieu]  
Consulta a tabela **omie_contrato** no banco de dados **MySQL (DataLake)**.

**⚠️ IMPORTANTE:** Esta rota consulta dados da **Omie** armazenados no **MySQL**, diferente das rotas do sistema Alerta Fiscal que consultam o **SQL Server**.

**Tabela:** `omie_contrato` (MySQL)

**Filtros suportados (todos opcionais):**
- `cnpj`: Filtra por CNPJ (busca parcial)
- `codigo_contrato`: Filtra por código do contrato
- `status`: Filtra por status do contrato

**Exemplos:**

1. **Buscar todos os contratos:**
```bash
curl -X GET 'http://localhost:8000/contratos'   -H 'Authorization: Bearer <TOKEN>'
```

2. **Buscar por CNPJ:**
```bash
curl -X GET 'http://localhost:8000/contratos?cnpj=12345678000190'   -H 'Authorization: Bearer <TOKEN>'
```

3. **Buscar por código de contrato:**
```bash
curl -X GET 'http://localhost:8000/contratos?codigo_contrato=12345'   -H 'Authorization: Bearer <TOKEN>'
```

**SQL Base:**
```sql
SELECT * FROM omie_contrato
WHERE 
  (cnpj LIKE '%{cnpj}%' OR :cnpj IS NULL)
  AND (codigo_contrato = :codigo_contrato OR :codigo_contrato IS NULL)
  AND (status = :status OR :status IS NULL)
```
descriptionzLista de contratosu"   Credenciais inválidas ou ausentes)r   modelzErro interno)   i  i  )summaryr   response_model	responsesz Filtrar por CNPJ (busca parcial)12345678000190)r   exampleu   Filtrar por código do contrato12345zFiltrar por statusAtivocnpjcodigo_contrator   _dbc                   K   t         j                  d|  d| d|        	 t        j                  || ||       d {   }g }|D ]$  }	 t	        t
        |      }|j                  |       & t        |      }
g }| r|j                  d|  d       |r|j                  d| d       |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}	t         j                  d|	         d }	~	ww xY w# t        $ r }	t         j                  d|	 d        d }	~	ww xY ww)Nz%Iniciando busca de contratos - CNPJ: u   , Código: 
, Status: )r%   r&   r   $Erro ao converter item para schema: zCNPJ contendo ''   Código Contrato 'Status ' com filtros: , r   r   zNenhum contrato encontrado   z1 contrato encontradoz contratos encontrados   Busca concluída com sucesso: datamessagezErro ao listar contratos: Texc_info)loggerinfor   listarr   r   append	Exceptionerrorlenjoinr   )r%   r&   r   r'   r(   itemsr4   item	convertedeqtdfiltrossufixor5   s                 1/srv/www/app-alerta/controllers/omie_contratos.pylistar_contratosrH      s    t KK7v[HYYcdjcklm')00+	
 
  	D*+?F	I&	 $iNN_TF!45NN//@BCNNXfXQ/0:A>$))G"4!56r!826(;GAX-fX6G3F8<G4WI>?$$@@E
  CA3GH0  1!5Es]   E2E DE !D,B-E E2E 	E%D>>EE 	E/E**E//E2z	/servicosu&   Listar serviços dos contratos da OmieuW  
Consulta a tabela **omie_contrato_servico** no banco de dados **MySQL (DataLake)**.

**⚠️ IMPORTANTE:** Esta rota consulta dados da **Omie** armazenados no **MySQL**, diferente das rotas do sistema Alerta Fiscal que consultam o **SQL Server**.

**Tabela:** `omie_contrato_servico` (MySQL)

**Filtros suportados (todos opcionais):**
- `codigo_contrato`: Filtra por código do contrato

**Exemplos:**

1. **Buscar todos os serviços:**
```bash
curl -X GET 'http://localhost:8000/contratos/servicos'   -H 'Authorization: Bearer <TOKEN>'
```

2. **Buscar serviços de um contrato específico:**
```bash
curl -X GET 'http://localhost:8000/contratos/servicos?codigo_contrato=12345'   -H 'Authorization: Bearer <TOKEN>'
```

**SQL Base:**
```sql
SELECT * FROM omie_contrato_servico
WHERE (codigo_contrato = :codigo_contrato OR :codigo_contrato IS NULL)
```
u    Lista de serviços dos contratosc                 .  K   t         j                  d|         	 t        j                  ||        d {   }g }|D ]$  }	 t	        t
        |      }|j                  |       & t        |      }| rd|  dnd}	|dk(  rd|	 }
n|d	k(  rd
|	 }
n| d|	 }
t         j                  d|
        t        ||
      S 7 # t        $ r}t         j                  d|         d }~ww xY w# t        $ r }t         j                  d| d        d }~ww xY ww)Nu1   Iniciando busca de serviços - Código Contrato: r&   r+       com filtro: Código Contrato 'r,   r   r   u   Nenhum serviço encontrador1   u   1 serviço encontradou    serviços encontradosr2   r3   u   Erro ao listar serviços: Tr6   )r8   r9   r   r:   r   r	   r;   r<   r=   r>   r   r&   r'   r(   r@   r4   rA   rB   rC   rD   filtror5   s              rG   listar_servicosrN      s<    Z KKCOCTUV077O\\ 	D*+FM	I&	 $iIX2?2C1E^`!826(;GAX-fX6G3F8<G4WI>?$$@@+ ]  CA3GH   1!5E]   DC) B=C) !B?$AC) <D=C) ?	C&C!!C&&C) )	D2DDDz/departamentosz*Listar departamentos dos contratos da Omieux  
Consulta a tabela **omie_contrato_departamento** no banco de dados **MySQL (DataLake)**.

**⚠️ IMPORTANTE:** Esta rota consulta dados da **Omie** armazenados no **MySQL**, diferente das rotas do sistema Alerta Fiscal que consultam o **SQL Server**.

**Tabela:** `omie_contrato_departamento` (MySQL)

**Filtros suportados (todos opcionais):**
- `codigo_contrato`: Filtra por código do contrato

**Exemplos:**

1. **Buscar todos os departamentos:**
```bash
curl -X GET 'http://localhost:8000/contratos/departamentos'   -H 'Authorization: Bearer <TOKEN>'
```

2. **Buscar departamentos de um contrato específico:**
```bash
curl -X GET 'http://localhost:8000/contratos/departamentos?codigo_contrato=12345'   -H 'Authorization: Bearer <TOKEN>'
```

**SQL Base:**
```sql
SELECT * FROM omie_contrato_departamento
WHERE (codigo_contrato = :codigo_contrato OR :codigo_contrato IS NULL)
```
z$Lista de departamentos dos contratosc                 .  K   t         j                  d|         	 t        j                  ||        d {   }g }|D ]$  }	 t	        t
        |      }|j                  |       & t        |      }| rd|  dnd}	|dk(  rd|	 }
n|d	k(  rd
|	 }
n| d|	 }
t         j                  d|
        t        ||
      S 7 # t        $ r}t         j                  d|         d }~ww xY w# t        $ r }t         j                  d| d        d }~ww xY ww)Nu5   Iniciando busca de departamentos - Código Contrato: rJ   r+   rK   r,   r   r   zNenhum departamento encontrador1   z1 departamento encontradoz departamentos encontradosr2   r3   zErro ao listar departamentos: Tr6   )r8   r9   r   r:   r   r
   r;   r<   r=   r>   r   rL   s              rG   listar_departamentosrQ      s=    Z KKGGXYZ5<<RQ`aa 	D*+KTR	I&	 $iIX2?2C1E^`!86vh?GAX1&:G7x@G4WI>?$$@@+ b  CA3GH   5aS9DIrO   z/vencimentosz(Listar vencimentos dos contratos da Omieu  
Consulta a tabela **omie_contrato_vencimentoTexto** no banco de dados **MySQL (DataLake)**.

**⚠️ IMPORTANTE:** Esta rota consulta dados da **Omie** armazenados no **MySQL**, diferente das rotas do sistema Alerta Fiscal que consultam o **SQL Server**.

**Tabela:** `omie_contrato_vencimentoTexto` (MySQL)

**Filtros suportados (todos opcionais):**
- `codigo_contrato`: Filtra por código do contrato
- `data_inicio`: Data inicial para filtro de vencimento (formato: YYYY-MM-DD)
- `data_fim`: Data final para filtro de vencimento (formato: YYYY-MM-DD)
- `status`: Filtra por status do vencimento

**Exemplos:**

1. **Buscar todos os vencimentos:**
```bash
curl -X GET 'http://localhost:8000/contratos/vencimentos'   -H 'Authorization: Bearer <TOKEN>'
```

2. **Buscar vencimentos de um contrato específico:**
```bash
curl -X GET 'http://localhost:8000/contratos/vencimentos?codigo_contrato=12345'   -H 'Authorization: Bearer <TOKEN>'
```

3. **Buscar vencimentos por período:**
```bash
curl -X GET 'http://localhost:8000/contratos/vencimentos?data_inicio=2024-01-01&data_fim=2024-12-31'   -H 'Authorization: Bearer <TOKEN>'
```

**SQL Base:**
```sql
SELECT * FROM omie_contrato_vencimentoTexto
WHERE 
  (codigo_contrato = :codigo_contrato OR :codigo_contrato IS NULL)
  AND (data_vencimento >= :data_inicio OR :data_inicio IS NULL)
  AND (data_vencimento <= :data_fim OR :data_fim IS NULL)
  AND (status = :status OR :status IS NULL)
```
z"Lista de vencimentos dos contratosz3Data inicial para filtro de vencimento (YYYY-MM-DD)z
2024-01-01z1Data final para filtro de vencimento (YYYY-MM-DD)z
2024-12-31Pendentedata_iniciodata_fimc           
        K   t         j                  d|  d| d| d|        	 t        j                  || |||       d {   }g }|D ]$  }	 t	        t
        |      }	|j                  |	       & t        |      }g }| r|j                  d|  d       |r|j                  d	| d       |r|j                  d
| d       |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}
t         j                  d|
         d }
~
ww xY w# t        $ r }
t         j                  d|
 d        d }
~
ww xY ww)Nu*   Iniciando busca de vencimentos - Código: z, Data: z a r*   )r&   rS   rT   r   r+   r-   r,   zVencimento a partir de 'u   Vencimento até 'r.   r/   r0   r   r   zNenhum vencimento encontrador1   z1 vencimento encontradoz vencimentos encontradosr2   r3   zErro ao listar vencimentos: Tr6   )r8   r9   r   r:   r   r   r;   r<   r=   r>   r?   r   )r&   rS   rT   r   r'   r(   r@   r4   rA   rB   rC   rD   rE   rF   r5   s                  rG   listar_vencimentosrV     s    z KK<_<MXVaUbbefneooy  {A  zB  C  D*3::+#
 
  	D*+I4P	I&	 $iNN//@BCNN5k]!DENN.xj:;NNXfXQ/0:A>$))G"4!56r!84VH=GAX/x8G5fX>G4WI>?$$@@K
  CA3GH4  3A37$Gs_   "FE! D5E! !D70CE! 4F5E! 7	E EEE! !	F
*FF

F))loggingdatetimer   typingr   core.databaser   	core.authr   sqlalchemy.ext.asyncior   schemas.omie_contratosr   r	   r
   r   services.omie_contratosr   r   r   r   fastapir   r   r   r   core.api_responsesr   r   r   r   	getLogger__name__r8   routergetstrrH   rN   rQ   rV        rG   <module>rh      sI      & ' /   6 5 d d			8	$	
	

 &(R #12AMZ+mD[  2h  2T^no%*4=^ho%p!$4HRYZ'(|,0
3-0c]0 SM0 	0
 	0g2f0d 4< #?@AMZ+mDE  'R &+4=^ho%p'(|,!c]!! 	!Q'P!F 8< #CDAMZ+mDE  'R &+4=^ho%p'(|,!c]!! 	!Q'P!F 6*V #ABAMZ+mD_  4l &+4=^ho%p"':o  zF  #G$T7j  uA   B!$4HR\]'(|,4c]4$4 tn4 SM	4
 4 	4k4j4rg   