o
    ,h                     @   s   d dl mZ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 eeed	d
d Zeeed	dd Zeeed	dd Zeeed	dd ZdS )    )	post_savepre_save)receiver)	send_mail)settings)timezone)	timedelta   )VacationRequestVacationLogEmployeeProfile)senderc                 K   s&   |rt jj|t j|jjdd dS dS )z3Create log entry when a vacation request is createdu   Solicitação de férias criadavacation_requestactionperformed_bydetailsN)r   objectscreateACTION_REQUESTemployeeuser)r   instancecreatedkwargs r   %/var/www/html/rh/vacations/signals.pylog_vacation_request_creation   s   
r   c              	   K   s   |j rbzStjj|j d}|j|jkrQd}|jtjkrtj}n|jtjkr(tj	}n	|jtj
kr1tj}|rTtjj|||jr?|jjndd|  d|  d W dS W dS W dS  tjya   Y dS w dS )z&Log changes to vacation request status)pkNzStatus alterado de z para r   )r   r
   r   getstatusSTATUS_APPROVEDr   ACTION_APPROVESTATUS_REJECTEDACTION_REJECTSTATUS_CANCELLEDACTION_CANCELr   approved_byr   get_status_displayDoesNotExist)r   r   r   old_instancer   r   r   r   log_vacation_request_update   s0   
r+   c           	      K   s  |s|j tjtjfv rz|jjjr^|j tjkrdnd}d| }d|jjj d|j	d d|j
	d d| d		}|j tjkrL|jrL|d
|j d7 }|d7 }t||tj|jjjgdd |j tjkrttjjtjddjddd}|rd|jj  }d|jj  d|jj d|j	d d|j
	d d|jjj d|jjj d|j d|j d|jr|jj nd dt 	d d}t||tj|dd W d!S W d!S W d!S  ty } zt d |  W Y d!}~d!S d!}~ww d!S d!S )"z=Send email notifications when vacation request status changesAPROVADA	REJEITADAu   Solicitação de Férias u   
                Olá uS   ,
                
                Sua solicitação de férias para o período de %d/%m/%Yz 
                a z foi z#.
                
                zMotivo: z

uo   
                Atenciosamente,
                Sistema de Gestão de Férias - Grupo Kuttner
                Tfail_silentlyrole	is_activeuser__emailflatu   Férias Aprovadas - uk   
                    Olá equipe de RH,
                    
                    As férias do colaborador u    (Matrícula: u:   ) 
                    foram APROVADAS para o período de z 
                    a z4.
                    
                    Empresa: &
                    Centro de Custo: z$
                    Total de dias: z$
                    Dias vendidos: z8
                    
                    Aprovado por: zN/Au*   
                    Data da aprovação: z%d/%m/%Y %H:%Mu   
                    
                    Por favor, providencie os procedimentos necessários segundo a CLT.
                    
                    Atenciosamente,
                    Sistema de Gestão de Férias - Grupo Kuttner
                    z"Error sending email notification: N)!r    r
   r!   r#   r   r   email
first_name
start_datestrftimeend_daterejection_reasonr   r   DEFAULT_FROM_EMAILlistr   r   filterUSER_ROLE_ADMINvalues_listget_full_nameemployee_idcompanynamecost_center
total_daysselling_daysr'   r   now	Exceptionprint)	r   r   r   r   status_textsubjectmessage	hr_emailser   r   r   send_vacation_notifications4   s   




	


	
rR   c           	      K   s  |j tjkr|jtdd }t  }||krzTtt	j
jt	jddjddd}|rjd|jj  }d|jj  d	|jj d
|jjj d|jjj d|jd d|jd d}t||tj|dd W dS W dS  ty } ztd|  W Y d}~dS d}~ww dS dS )zRSend reminders for vacation notices that need to be sent (30 days before vacation)   )daysTr1   r4   r5   u*   AVISO IMPORTANTE: Comunicado de Férias - u   
                    Olá equipe de RH,
                    
                    HOJE é o prazo legal para enviar o comunicado de férias para o(a) colaborador(a):
                    
                    Nome: u!   
                    Matrícula: z
                    Empresa: r7   u?   
                    
                    Período de férias: r.   z a ut  
                    
                    Conforme a CLT, o colaborador deve ser notificado com 30 dias de antecedência sobre suas férias.
                    Por favor, providencie o envio do comunicado oficial imediatamente.
                    
                    Atenciosamente,
                    Sistema de Gestão de Férias - Grupo Kuttner
                    r/   zError sending notice reminder: N)r    r
   r!   r:   r   r   rJ   dater?   r   r   r@   rA   rB   r   r   rC   rD   rE   rF   rG   r;   r<   r   r   r>   rK   rL   )	r   r   r   notice_datetodayrP   rN   rO   rQ   r   r   r   send_notice_reminders   sP   




rX   N)django.db.models.signalsr   r   django.dispatchr   django.core.mailr   django.confr   django.utilsr   datetimer   modelsr
   r   r   r   r+   rR   rX   r   r   r   r   <module>   s    






L