o
    8h:6                     @   s  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 G d	d
 d
ejZG dd dejZG dd dejZG dd dejZG dd dejZG dd dejZG dd dejZd dl mZ g dZdgd ddgd ddgd ddgd ddgd ddgd ddgdddgd dd gd!dd"gd dd#
ZG d$d% d%ejZG d&d% d%ejZd dl mZ dd'l
mZ G d(d) d)ejZd dl mZ G d*d+ d+ejZd,S )-    )forms)UserCreationForm)User)timezone)	timedelta   )EmployeeProfileCompany
CostCenterVacationRequest)Qc                   @   sD   e Zd ZejejddddddZejejddddddZdS )	LoginFormform-controlu   Nome de usuário)classplaceholderattrswidgetlabelSenhaN)	__name__
__module____qualname__r   	CharField	TextInputusernamePasswordInputpassword r   r   #/var/www/html/rh/vacations/forms.pyr   	   s    
r   c                       sB  e Zd ZejddddZejddddZejdddZejdddZ	ejd	ej
d
dZejdej
d
dZejejjdddddZejej dde dZejddddZejejddiddddZejejdddZejd
ddZ ejejjdddd
ddZ!G dd dZ" fd d!Z#d& fd"d#	Z$ fd$d%Z%  Z&S )'EmployeeForm   TNome)
max_lengthrequiredr   	SobrenomezE-mail)r%   r   u   Usuárior   F)r   r   r%   u   Confirmação de senha	is_activeEmpresa)querysetr%   r   zCentros de Custo)r*   r%   r   r   2   u
   Matrículatypedater   u   Data de Admissãor   r%   r   Papel)choicesr%   r   zEste colaborador pode ser tutor)is_tutorr(   u   Tutor (para estagiário)c                   @   s   e Zd ZeZg dZdS )zEmployeeForm.Meta)r   
first_name	last_nameemailN)r   r   r   r   modelfieldsr   r   r   r    MetaI   s    r7   c                    s0  | dd }t j|i | | j D ]}t|jtjj	r'|jj
ddi q| jd jj
ddi |rdt|drd|j}t|jjddd	}tjtdd
t|d@  | jd _|j| jd _ntjjdd
 | jd _|r|jrt | jd _t | jd _d| jd _d| jd _d S d S d S )Ninstancer   r   r1   form-check-inputemployeeprofileidT)flatr'   )id__incost_centers	password1	password2F)getsuper__init__r6   values
isinstancer   r   widgetsInputr   updatehasattrr:   listr>   values_listr
   objectsfilterr   distinctr*   r1   initialpkHiddenInputr%   )selfargskwargsr8   fieldprofileassigned_ids	__class__r   r    rC   M   s.   

zEmployeeForm.__init__c              	      s   t  jdd}| jjs| jdr|| jd  |r#|  |   | jd | jd | jd | jd | jdd| jd	 | jd d
krJ| jdnd d| _|S )NFcommitr?   companyemployee_id	hire_dateroler1   r>   interntutor)r\   r]   r^   r_   r1   r>   ra   )	rB   saver8   rP   cleaned_datarA   set_passwordsave_m2mprofile_data)rR   r[   userrX   r   r    rb   g   s   
zEmployeeForm.savec                    sT   t   }| jr| jjs(|d}|d}|r|std||kr(td|S )Nr?   r@   u?   Senha e confirmação são obrigatórias para novo colaborador.u   As senhas não coincidem.)rB   cleanr8   rP   rA   r   ValidationError)rR   rc   r?   r@   rX   r   r    rh   }   s   




zEmployeeForm.cleanT)'r   r   r   r   r   r2   r3   
EmailFieldr4   r   r   r?   r@   ModelChoiceFieldr	   rL   rM   r\   ModelMultipleChoiceFieldr
   noneCheckboxSelectMultipler>   r]   	DateField	DateInputr^   ChoiceFieldr   USER_ROLE_CHOICESr_   BooleanFieldr1   ra   r7   rC   rb   rh   __classcell__r   r   rX   r    r!      sd    r!   c                       s   e Zd Zejejde edd 	 
 ddddZejejddidd	dZejd
dd
dddZG dd dZd fdd	Z fddZ  ZS )VacationRequestFormr-   r"   days)r,   minr      Data de Inícior   r,   zData de Retornor   Fu!   Dias a vender (abono pecuniário)u>   Você pode vender até 1/3 dos dias de férias conforme a CLT.)	min_valuer%   rO   r   	help_textc                   @   s   e Zd ZeZdZdS )zVacationRequestForm.Meta)
start_dateend_dateselling_daysN)r   r   r   r   r5   r6   r   r   r   r    r7      s    r7   Nc                    sB   || _ t j|i | | j D ]\}}|jjddi qd S )Nr   r   )employeerB   rC   r6   itemsr   r   rH   )rR   r   rS   rT   
field_namerU   rX   r   r    rC      s
   zVacationRequestForm.__init__c           	         s  t   }|d}|d}|dd}|r|s|S |t  tdd k r.| dd ||kr8| dd || jd	 }|d
k rI| dd |r`t	d|d }||kr`| dd| d | j
rddlm} || j
}||prd |kr| dd| d |S )Nr}   r~   r   r   r"   rw   uR   A data de início deve ser no mínimo 30 dias após a solicitação, conforme CLT.u0   A data final deve ser posterior à data inicial.r      uA   Conforme a CLT, períodos de férias devem ter no mínimo 5 dias.
      u-   Conforme a CLT, você pode vender no máximo u    dias (1/3 das férias).)calculate_vacation_balanceu,   Saldo insuficiente de férias. Você possui u    dias disponíveis.)rB   rh   rA   r   nowr-   r   	add_errorrx   ry   r   vacations.utilsr   )	rR   rc   r}   r~   r   
total_daysmax_selling_daysr   balancerX   r   r    rh      s6   





zVacationRequestForm.clean)N)r   r   r   r   rp   rq   r   r   r   r-   	isoformatr}   r~   IntegerFieldr   r7   rC   rh   ru   r   r   rX   r    rv      s&    &rv   c                       sZ   e Zd ZejddgejddidddZejejdd	d
ddddZ	 fddZ
  ZS )ApprovalForm)approveAprovar)rejectRejeitarr   r9   r   u   Açãor0   r   r   r   r   r   rowsFu   Motivo da rejeiçãor.   c                    s:   t   }|d}|d}|dkr|s| dd |S )Nactionrejection_reasonr   u/   É necessário informar o motivo da rejeição.)rB   rh   rA   r   )rR   rc   r   r   rX   r   r    rh      s   


zApprovalForm.clean)r   r   r   r   rr   RadioSelectr   r   Textarear   rh   ru   r   r   rX   r    r      s    r   c                       s   e Zd Zg dZejeejddidddZeje	j
jddejddidd	d
dZejej
jddejddidd	ddZejejddddd	ddZejejddddd	ddZ fddZ  ZS )
ReportForm))vacation_balanceu   Saldo de Férias)vacation_scheduleu   Programação de Férias)pending_requestsu   Solicitações Pendentesr   r   r   u   Tipo de Relatórior   Tr'   Fr)   )r*   r   r%   r   zCentro de Custor-   r,   r   zData Inicialr.   z
Data Finalc              	      s   t  j|i | | j D ]}|jjddi qd| jv rJz| jd}t	j
j|dd| jd _W d S  ttfyI   t	j
 | jd _Y d S w d S )Nr   r   r\   T)
company_idr(   cost_center)rB   rC   r6   rD   r   r   rH   datarA   r
   rL   rM   r*   
ValueError	TypeErrorrn   )rR   rS   rT   rU   r   rX   r   r    rC     s   
zReportForm.__init__)r   r   r   REPORT_CHOICESr   rr   Selectreport_typerl   r	   rL   rM   r\   r
   r   rp   rq   r}   r~   rC   ru   r   r   rX   r    r      s<    r   c                       s,   e Zd ZG dd dZd fdd	Z  ZS )ManualVacationFormc                   @   sH   e Zd ZeZg dZejddidejddiddZdddd	d
Z	dS )zManualVacationForm.Meta)r   r}   r~   r   correction_noter,   r-   r   )r}   r~   Colaboradorrz   u   Data de TérminozDias Vendidos (opcional))r   r}   r~   r   N)
r   r   r   r   r5   r6   r   rq   rF   labelsr   r   r   r    r7     s    
r7   Tc                    s*   t  jdd}d|_d|_|r|  |S )NFrZ   approvedT)rB   rb   status	is_manual)rR   r[   vacationrX   r   r    rb      s   zManualVacationForm.saverj   )r   r   r   r7   rb   ru   r   r   rX   r    r     s    r   c                   @      e Zd ZG dd dZdS )InternProfileExtraFormc                   @   sr   e Zd ZeZg dZejddidejddidejddidejddidejddidejdd	idd
Z	dS )zInternProfileExtraForm.Meta)cpfcarga_horariahorario_trabalho_iniciohorario_trabalho_fimturmafuncao	logo_filer   zex: 40 horas semanaisr   r,   timez000.000.000-00u   Identificação da turmau   Função exercida)r   r   r   r   r   r   N)
r   r   r   r   r5   r6   r   r   	TimeInputrF   r   r   r   r    r7   )  s    

r7   Nr   r   r   r7   r   r   r   r    r   (      r   )
)Gozo 5 diaszGozo de 5 dias)Gozo 6 diaszGozo de 6 dias)Gozo 7 diaszGozo de 7 dias)Gozo 12 diaszGozo de 12 dias)Gozo 14 diaszGozo de 14 dias)Gozo 15 + venda 5zGozo de 15 dias + 5 vendidos)Gozo 18 diaszGozo de 18 dias)Gozo 20 + venda 10u1   Gozo de 20 dias + 10 vendidos (máximo permitido))Gozo 30 diaszGozo de 30 dias (sem venda))Gozo 15 diaszGozo de 15 diasr   )periods	sold_days                     r   r"   )
r   r   r   r   r   r   r   r   r   r   c                   @   D   e Zd ZejejddddddZejeej	ddidd	d
Z
dS VacationChoiceFormr-   r   r   r   u   Data de início das fériasr   r   zform-selectu   Tipo de fériasr   Nr   r   r   r   rp   rq   r}   rr   VACATION_OPTIONSr   vacation_optionr   r   r   r    r   \      
r   c                   @   r   r   r   r   r   r   r    r   h  r   )LogoInstitucionalc                   @   r   )LogoUploadFormc                   @   s   e Zd ZeZdgZdS )zLogoUploadForm.MetaimagemN)r   r   r   r   r5   r6   r   r   r   r    r7   x  s    
r7   Nr   r   r   r   r    r   w  r   r   c                   @   s*   e Zd ZejdejddddddZdS )	CancelVacationFormzMotivo do cancelamentor      r   r   i  )r   r   r$   N)r   r   r   r   r   r   reasonr   r   r   r    r     s    
r   N) djangor   django.contrib.auth.formsr   django.contrib.auth.modelsr   django.utilsr   datetimer   modelsr   r	   r
   r   django.db.modelsr   Formr   	ModelFormr!   rv   r   r   r   r   r   VACATION_RULESr   r   r   r   r   r   r   r    <module>   sD    
x>2









