a
    §K.jmC  ã                   @   sv   d dl Z d dlZd dlZd dlZd dlmZ d dlmZmZmZm	Z	m
Z
mZmZ ddd„Zdd„ Zd	d
„ Zdd„ ZdS )é    N)Údatetime)Úregistrar_logÚenviar_whatsappÚobter_mensagem_dbÚbuscar_configÚcobrancas_cliente_atrasoÚcobrancas_cliente_nao_pagasÚgerar_boletoÚ c           	      C   s®  g }| st dd|› ƒ |S t| tƒrª|  dg ¡}t dd|› dt|ƒ› dƒ t|ƒD ]N\}}| d¡d| d	¡| d
¡| dd¡| dd¡| dd¡| dd¡| dd¡| dd¡| dd¡| dd¡| dd¡| dd¡dœ}| dg ¡}|r^t|d tƒr^|d }| d¡|d< |d
 s6| d
¡|d
< |d dksN|d s^| dd¡|d< | |¡ t dd|› d| d¡› d | d
¡› d!| d¡› d"| d¡› 
ƒ qX|S )#uµ   
    Extrai a lista de cobranÃ§as da resposta da API.
    Os dados principais (data_vencimento, linha_digitavel, qrcode) estÃ£o no nÃ­vel do row,
    nÃ£o dentro de itensPlano.
    Ú
FINANCEIROz(extrair_cobrancas: resultado vazio para Úrowszextrair_cobrancas (z): z rows encontradosÚid_cobrancaNÚid_cliente_planoÚplanoÚdata_vencimentor
   Úperiodo_prestacaoZvalor_total_cobrancaú0.00Úvalor_ate_vencimentoÚvalor_total_a_pagarÚlinha_digitavelÚqrcode_copy_pasteÚtipoPagamentoÚpagoÚ0Ú	isVencidoF)r   Úid_cobranca_planor   r   r   r   Úvalorr   r   r   r   r   r   r   Z
itensPlanor   r   r   z  Row z: id_cobranca=ú, plano=ú, venc=ú, valor=)r   Ú
isinstanceÚdictÚgetÚlenÚ	enumerateÚappend)	Ú	resultadoZtipo_chamadaÚ	cobrancasr   Zidx_rowÚrowZcobrancaZitens_planoÚitem© r*   ú!/var/www/html/fluxo_financeiro.pyÚextrair_cobrancas   sD    









ò

Br,   c                 C   sJ   | sdS z.t  | d¡}t  ¡ }|j|jko4|j|jkW S    Y dS 0 dS )u5   Verifica se a data de vencimento Ã© no mÃªs corrente.Fú%Y-%m-%dN)r   ÚstrptimeÚnowÚyearÚmonth)r   ÚdataZagorar*   r*   r+   Úesta_no_mes_correnteA   s    r3   c                 C   s6   | sdS zt  | d¡}| d¡W S    |  Y S 0 dS )u,   Formata a data para exibiÃ§Ã£o (DD/MM/YYYY).u   data nÃ£o informadar-   z%d/%m/%YN)r   r.   Ústrftime)r   r2   r*   r*   r+   Úformatar_dataL   s    r5   c           6      C   sP	  |d }|d }|  dd¡}|  d¡}	|	r4t |	¡ni }
|
  d¡}tdd|› d	|› ƒ |dkr~|s–tdd
ƒ t||dƒ | d|f¡ |  ¡  d S t|dƒ}t|||ƒ t||ƒ}t	||ƒ}t
|dƒ}t
|dƒ}tddt|ƒ› ƒ tddt|ƒ› ƒ g }|D ]`}|  dd¡}t|ƒrF| |¡ tdd|  d¡› d|› ƒ ntdd|  d¡› d|› ƒ qtddt|ƒ› dt|ƒ› ƒ i }|D ]²}|  d¡}|rŒ||  d¡|  dd¡|  dd¡|  dd¡|  d|  dd ¡¡|  dd ¡|  d!d¡|  d"d¡dd#œ
|t|ƒ< tdd$|› d%|  d¡› d&|  d¡› d'|  d¡› ƒ qŒ|D ]À}|  d¡}|rDt|ƒ|vrD||  d¡|  dd¡|  dd¡|  dd¡|  d|  dd ¡¡|  dd ¡|  d!d¡|  d"d¡d(d#œ
|t|ƒ< tdd)|› d%|  d¡› d&|  d¡› d'|  d¡› ƒ qDt| ¡ ƒ}|jd*d+„ d, |sXt|d-ƒ}t|||ƒ | d.|f¡ |  ¡  d S ||
d/< | d0t |
¡|f¡ |  ¡  g }t|d1ƒD ]Î\}}|d2 dkr¨d3}nd4}t|  d5d¡ƒ}|  d6d¡}|  dd ¡}t|ƒd7krò|d d8… d9 }|  d:d¡}|r2| |› d|› d;|› d<|› d=|› d>|› ¡ n&| |› d|› d?|› d=|› d>|› 	¡ qŒd@dA |¡ dB } t||| ƒ nÎ|dCkrŠ| ¡  ¡ }!|
  d/g ¡}"|!dDkrîttt|"ƒƒƒ|
dE< | dFt |
¡|f¡ |  ¡  dG}#t|||#ƒ n˜zvt|!ƒd1 }$dH|$  krt|"ƒk rVn n:|$g|
dE< | dFt |
¡|f¡ |  ¡  dG}#t|||#ƒ nt||dIƒ W n  ty„   t||dJƒ Y n0 nÂ|dKkræ| ¡ }%|
  d/g ¡}"|
  dEg ¡}&t|dLƒ}'t|dMƒ}(g })g }*|&D ]}+|"|+ }|%dNkr@|  dO¡},|,r(t|||,ƒ |) dP|d6 › ¡ t d1¡ n|* dQ|d6 › ¡ qÔ|%dRkrž|  dS¡}-|-r†t|||-ƒ |) dT|d6 › ¡ t d1¡ n|* dU|d6 › ¡ qÔ|%dVkrÔ|  d¡}.|.rPtddW|.› ƒ t||.ƒ}/tddX|/› ƒ |/r:t|/t ƒr:|/  dY¡p|/  dZ¡p|/  d[¡}0|0r$tdd\|0› ƒ d]d^|(› i}1d_|d`|0da|.› dbdcœddœ}2z€t!j"de|'› df|2|1d7dg}3|3j#dhkr®|) di|d6 › ¡ tddj|› ƒ t dk¡ n&tddl|3j#› ƒ |* dm|d6 › ¡ W nJ t$y  }4 z0tddn|4› ƒ |* dm|d6 › ¡ W Y d }4~4n
d }4~40 0 n|* do|d6 › ¡ n|* dp|d6 › ¡ n|* dq|d6 › ¡ qÔt d1¡ |*D ]}5t||dr|5› ƒ qv|)rÒt d1¡ t||dsdt |)¡ du ƒ | dv|f¡ |  ¡  n|*	sLt||dwƒ nf|dxk	rL| ¡  ¡ }!|!dyv 	r*| dz|f¡ |  ¡  t||d{ƒ n"t||d|ƒ | d}|f¡ |  ¡  d S )~NÚidÚcliente_numeroÚestado_atualÚINICIOÚcontexto_jsonÚ
id_clienter   zEstado: z, ID Cliente: u)   ID do cliente nÃ£o encontrado no contextouI   NÃ£o foi possÃ­vel identificar seu cadastro. Transferindo para atendente.zMUPDATE atendimentos SET status = 'fila', fluxo_atual = 'HUMANO' WHERE id = %sZmsg_financeiro_buscandoZatrasoZ	nao_pagasu   CobranÃ§as em atraso: u   CobranÃ§as nÃ£o pagas: r   r
   u     â†’ Do mÃªs corrente: r   z - u     â†’ Ignorada (futura): zTotal a exibir: atraso=z + mes_corrente=r   r   ZFaturar   r   r   r   r   r   )
r   r   Ú
nome_planoÚ
vencimentoÚperiodor   Zvalor_originalÚqrcodeÚcodigo_barrasÚstatuszAdicionado atraso: id_cobranca=r   r   r   Zpendentez!Adicionado pendente: id_cobranca=c                 S   s   |   dd¡S )Nr=   r
   )r"   )Úxr*   r*   r+   Ú<lambda>­   ó    zprocessar.<locals>.<lambda>)ÚkeyZmsg_financeiro_nada_encontradoziUPDATE atendimentos SET fluxo_atual = 'CLASSIFICACAO', estado_atual = 'AGUARDANDO_MENSAGEM' WHERE id = %sr'   z]UPDATE atendimentos SET contexto_json = %s, estado_atual = 'AGUARDANDO_ESCOLHA' WHERE id = %sé   rA   u   ðŸ”´ ATRASADOu   ðŸŸ¡ A VENCERr=   r<   é   é   z...r>   z (z)
   Vencimento: z
   Valor: R$ ú z
   Vencimento: u   ðŸ“‹ *FATURAS EM ABERTO*

z

uJ   

Digite o nÃºmero da fatura que deseja pagar ou *TODAS* para pagar todas:ZAGUARDANDO_ESCOLHAZtodasZcobrancas_selecionadasz_UPDATE atendimentos SET contexto_json = %s, estado_atual = 'AGUARDANDO_PAGAMENTO' WHERE id = %su~   ðŸ’° *OpÃ§Ãµes de pagamento*

1 - Pix Copia e Cola
2 - CÃ³digo de Barras
3 - Boleto PDF

Digite o nÃºmero da opÃ§Ã£o desejada:r   uA   NÃºmero invÃ¡lido. Digite o nÃºmero correto da fatura ou 'TODAS'.u-   Digite apenas o nÃºmero da fatura ou 'TODAS'.ZAGUARDANDO_PAGAMENTOÚPHONE_NUMBER_IDÚWHATSAPP_TOKENÚ1r?   zPix da fatura u#   Pix nÃ£o disponÃ­vel para a fatura Ú2r@   u   CÃ³digo de barras da fatura u1   CÃ³digo de barras nÃ£o disponÃ­vel para a fatura Ú3zGerando PDF para id_cobranca: zResultado gerar_boleto: r   ÚurlÚlinkzURL do PDF obtida: ÚAuthorizationzBearer ÚwhatsappÚdocumentZboleto_z.pdf)rP   Úfilename)Úmessaging_productÚtoÚtyperS   z!https://graph.facebook.com/v25.0/z	/messages)ÚjsonÚheadersÚtimeoutéÈ   zPDF da fatura zPDF enviado com sucesso para é   zErro ao enviar PDF: HTTP zErro ao enviar PDF da fatura u   ExceÃ§Ã£o ao enviar PDF: u#   PDF nÃ£o disponÃ­vel para a fatura u-   NÃ£o foi possÃ­vel gerar o PDF para a fatura u%   ID da cobranÃ§a nÃ£o encontrado para u   âš ï¸ u   âœ… z, uJ    enviado(s) com sucesso!

Deseja mais alguma coisa? (Responda SIM ou NÃƒO)z¡
                UPDATE atendimentos
                SET estado_atual = 'AGUARDANDO_CONTINUACAO', contexto_json = '{}'
                WHERE id = %s
            z1Nenhum pagamento foi processado. Tente novamente.ZAGUARDANDO_CONTINUACAO)ZsimÚsÚyesZqueroZ	continuarz½
                UPDATE atendimentos
                SET fluxo_atual = 'CLASSIFICACAO', estado_atual = 'AGUARDANDO_MENSAGEM', contexto_json = '{}'
                WHERE id = %s
            u!   O que mais posso fazer por vocÃª?u!   Atendimento encerrado. AtÃ© logo!z:UPDATE atendimentos SET status = 'encerrado' WHERE id = %s)%r"   rX   Úloadsr   r   ÚexecuteÚcommitr   r   r   r,   r#   r3   r%   ÚstrÚlistÚvaluesÚsortÚdumpsr$   r5   ÚjoinÚstripÚlowerÚrangeÚintÚ
ValueErrorr   ÚtimeÚsleepr	   r    r!   ÚrequestsÚpostÚstatus_codeÚ	Exception)6ÚconnÚcursorÚjobÚatendimentoÚconfigsÚmensagem_brutaÚatendimento_idÚnumeroÚestadoÚraw_ctxÚctxr;   Z
msg_esperaZresultado_atrasoZresultado_nao_pagasZcobrancas_atrasoZcobrancas_nao_pagasZcobrancas_mes_correnter)   r=   Zcobrancas_unicasZid_cobZlista_cobrancasÚmsgZlinhasÚiZcobZstatus_textoZvenc_formatador<   Zvalor_exibidor>   ÚmensagemÚrespostar'   Zmensagem_opcoesÚescolhaZopcaoZselecionadasÚphone_idÚtokenZenviadosZerrosÚidxr?   Zcodigor   r&   Zurl_pdfrY   ÚpayloadÚrespÚeZerror*   r*   r+   Ú	processarV   sr   










 






ö8






ö8
.*

 











"ü,

ü


ür‰   )r
   )rX   Úrero   rm   r   Úutils_hibridor   r   r   r   r   r   r	   r,   r3   r5   r‰   r*   r*   r*   r+   Ú<module>   s   $
3
