o
    54h                     @   sF   d dl mZ d dlmZmZ d dlmZ dd Zdd Zdd	d
Z	dS )    timezone)	timedeltadaterelativedeltac                 C   s   ddl m} ddlm} ddlm} ddlm} | jsdS |	  }| j
}|j|j |j|jf|j|jfk  }t|d}d| }	||dd	 }
|jj| |j|
d
}|D ]}|j|j jd }|	||j 8 }	qTtd|	S )u   
    Calcula o saldo de férias considerando até 3 anos anteriores (36 meses),
    com base na data de admissão do colaborador.
       )VacationRequestr   r   )r   r         )years)employeestatusstart_date__gte)modelsr	   django.utilsr   datetimer   dateutil.relativedeltar   	is_activenow	hire_dateyearmonthdayminobjectsfilterSTATUS_APPROVEDend_date
start_datedaysselling_daysmax)r   r	   r   r   r   todayr   completed_yearsmax_years_to_considerbalancecutoff_datetaken_vacationsvacationvacation_days r+   #/var/www/html/rh/vacations/utils.pycalculate_vacation_balance   s*   $

r-   c                 C   s   | t dd S )zs
    According to Brazilian labor law, employees must be notified 
    at least 30 days before vacation starts
    r   r    )r   )r   r+   r+   r,   get_vacation_notice_deadline.   s   r/   Nc                 C   sp   t   }| |tdd k rdS || krdS ||  jd }|dk r$dS |r6t|}||kr6dd	| d
fS dS )zw
    Validate vacation request against Brazilian labor law requirements
    
    Returns (is_valid, error_message)
    r   r.   )FuD   A data de início deve ser no mínimo 30 dias após a solicitação.)Fu0   A data final deve ser posterior à data inicial.r      )Fu@   Períodos de férias devem ter no mínimo 5 dias conforme a CLT.Fu,   Saldo insuficiente de férias. Você possui u    dias disponíveis.)T )r   r   r   r   r    r-   )r   r   r   r#   
total_daysr&   r+   r+   r,   validate_vacation_period6   s   r3   )N)
r   r   r   r   r   r   r   r-   r/   r3   r+   r+   r+   r,   <module>   s    )