
    vg                        d Z ddlZddlZddlmZ 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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 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+m,Z,m-Z-m.Z.m/Z/m0Z0m1Z1m2Z2m3Z3m4Z4m5Z5m6Z6m7Z7m8Z8  ejr                  e:      Z; G d de
jx                        Z< G d de
jx                        Z= G d de
jx                        Z> G d de<      Z? G d de<      Z@ G d d e<      ZA G d! d"e=      ZB G d# d$e>      ZC G d% d&e<      ZD G d' d(e>      ZE G d) d*e
j                        ZG G d+ d,e
j                        ZI G d- d.e<      ZJ G d/ d0e<      ZK G d1 d2e<      ZL G d3 d4e
j,                        ZM G d5 d6e
j,                        ZN G d7 d8e<      ZO G d9 d:e      ZPg d;ZQ G d< d=e
j,                        ZR G d> d?e<      ZS G d@ dAe<      ZT G dB dCe<      ZU G dD dEe<      ZV G dF dGe<      ZW G dH dIe<      ZX G dJ dKe<      ZY G dL dMe<      ZZ G dN dOe<      Z[ G dP dQe<      Z\ G dR dSe<      Z] G dT dUe<      Z^y)Va  
forms.py

This module contains the form classes used in the application.

Each form represents a specific functionality or data input in the
application. They are responsible for validating
and processing user input data.

Classes:
- YourForm: Represents a form for handling specific data input.

Usage:
from django import forms

class YourForm(forms.Form):
    field_name = forms.CharField()

    def clean_field_name(self):
        # Custom validation logic goes here
        pass
    N)Dict)datedatetime)Any)forms)apps)NON_FIELD_ERRORSValidationErrorrender_to_string)gettext_lazy)Form)reload_queryset)EmployeeFilter)Employee)horilla_middlewares)_thread_locals)HorillaMultiSelectField)HorillaMultiSelectWidget)widgets)	CandidateCandidateDocumentCandidateDocumentRequestInterviewScheduleJobPositionRecruitmentRecruitmentSurveyRejectedCandidateRejectReasonResumeSkill	SkillZoneSkillZoneCandidateStage
StageFiles	StageNoteSurveyTemplatec                   "     e Zd ZdZ fdZ xZS )	ModelFormC
    Overriding django default model form to apply some styles
    c                 F   t        |   |i | t        t        j                  dd       }t        | j                         | j                  j                         D ]  \  }}|j                  }t        |t        j                        rt        j                         |_        t        |t        j                  t        j                   t        j"                  t        j$                  f      r?t'        |j(                        }|j                  j*                  j-                  d|d       nt        |t        j.                        r4|j                  j*                  j-                  d|j(                  d       n>t        |t        j0                  f      rxt'        d      j3                  t'        |j(                              |_        | j                  |   j                  j*                  j-                  t6        j8                  ddd       nt        |t        j:                        r@t'        |j(                        }|j                  j*                  j-                  d|d	d
d       nQt        |t        j<                  t        j>                  f      r'|j                  j*                  j-                  ddi       	 |j@                  jB                  | j                  d   _        	 |j@                  jB                  jD                  | j                  d   _         y #  Y ;xY w#  Y xY w)Nrequestoh-input w-100classplaceholder---Choose {label}---labelzoh-select oh-select-2 w-100zheight:50px;)idr/   style   (   r/   r0   rowscolsr/   oh-switch__checkbox employee_id
company_id)#super__init__getattrr   r   r   fieldsitemswidget
isinstancer   	DateInputr   todayinitialNumberInput
EmailInput	TextInput	FileInput_r3   attrsupdateURLInputSelectformatempty_labeluuiduuid4TextareaCheckboxInputCheckboxSelectMultipleuseremployee_getget_company)	selfargskwargsr,   
field_namefieldrC   r3   	__class__s	           %/var/www/horilla/recruitment/forms.pyr?   zModelForm.__init__I   sd   $)&)-<<iN$!%!2!2!4 9	J\\F&5??4 $

""E$4$4eoouW %++"")).uE FENN3"")).u{{K FU\\O4$%&<$=$D$DEKK. %E %! J'..44;;"jj!>!/ FU^^5%++""))!1', ! "	 ''00 ""))74J*KL5<\\5N5NM*2LL--99 L)1k9	bs   5(L2LLL __name__
__module____qualname____doc__r?   __classcell__r`   s   @ra   r)   r)   D   s    = =    r)   c                   "     e Zd ZdZ fdZ xZS )RegistrationFormr*   c                    t        |   |i | t        | j                         | j                  j	                         D ]I  \  }}|j
                  }t        |t        j                  f      rd}|j                  t        |j                        }t        d      j                  |      |_        | j                  |   j
                  j                  j                  t        j                   dd       t        |t        j"                        r(|j
                  j                  j                  ddi       t        |t        j$                  t        j&                  f      s#|j
                  j                  j                  ddi       L y )	N r1   r2   zoh-select-2 oh-select--sm w-100)r4   r/   r/   r-   r;   )r>   r?   r   rA   rB   rC   rD   r   rP   r3   rL   rQ   rR   rM   rN   rS   rT   rJ   rV   rW   r[   r\   r]   r^   r_   rC   r3   r`   s          ra   r?   zRegistrationForm.__init__   s<   $)&)$!%!2!2!4 	MJ\\F&5<</2;;*ekkNE$%&<$=$D$D5$D$Q!J'..44;;::0QR FU__6""))!1
 ''00 ""))74J*KL/	Mri   rb   rh   s   @ra   rk   rk      s    M Mri   rk   c                   "     e Zd ZdZ fdZ xZS )DropDownFormr*   c           	      2   t        |   |i | t        | j                         | j                  j	                         D ]  \  }}|j
                  }t        |t        j                  t        j                  t        j                  t        j                  t        j                  f      rK|j                  wt        |j                        }|j
                  j                  j!                  d|d       t        |t        j"                  f      rI| j                  |   j
                  j                  j!                  dt%        j&                         d       t        |t        j(                        rO|j                  At        |j                        }|j
                  j                  j!                  d|ddd       t        |t        j*                  t        j,                  f      s|j
                  j                  j!                  d	d
i        y )Nz<oh-input oh-input--small oh-table__add-new-row d-block w-100r.   z!oh-select-2 oh-select--xs-forced )r/   r4   z+oh-input oh-input--small oh-input--textarea   r7   r8   r/   r;   )r>   r?   r   rA   rB   rC   rD   r   rH   rI   rJ   rK   rO   r3   rL   rM   rN   rP   rS   rT   rU   rV   rW   rn   s          ra   r?   zDropDownForm.__init__   s   $)&)$!%!2!2!4 -	MJ\\F%%$$OOOONN	 ;;*ekkNELL&&--%c+0 FU\\O4J'..44;;!D"jjl FU^^5;;*ekkNELL&&--%R+0$%$&	 ''00 ""))74J*KL[-	Mri   rb   rh   s   @ra   rp   rp      s    0M 0Mri   rp   c                   F     e Zd ZdZ G d d      Zd Z fdZ fdZ xZS )RecruitmentCreationForm$
    Form for Recruitment model
    c                       e Zd ZdZeZdZdgZ ej                  ddi       ej                  ddi       ej                  ddi      d	Z ed
       ed      dZy)RecruitmentCreationForm.Meta7
        Meta class to add the additional info
        __all__	is_activetyper   rM   data-summernoterm   
start_dateend_datedescriptionDescriptionVacancyr   vacancyN)rc   rd   re   rf   r   modelrA   excluder   rE   rU   r   rL   labels ri   ra   Metarw      sp    	 -)%//0@A'vv.>?)5>>1BB0GH

 "#=!1a	lKri   r   c                 &    d| i}t        d|      }|S )S
        Render the form fields as HTML table rows with Bootstrap styling.
        formzattendance_form.htmlr   r[   r\   r]   context
table_htmls        ra   as_pzRecruitmentCreationForm.as_p   s      4.%&<gF
ri   c           
         t        |   |i | t        | j                         | j                  j
                  sKt        t        j                  j                  d      t        dt        ddd      d      | j                  d	<   d
t        d      fgt        | j                  d   j                  j                  dd            z   }|| j                  d   _        | j                  d   xj                   dt        d      fgz  c_        y )NTrz   employee-widget-filterfemployee_filters.htmlfilter_route_namefilter_classfilter_instance_contex_namefilter_template_pathrequiredr   querysetrC   r3   recruitment_managersrm   z---Choose Skills---skillsr4   titlecreatezCreate new skill )r>   r?   r   rA   instancepkr   r   objectsfilterr   r   rL   listr   values_listchoices)r[   r\   r]   skill_choicesr`   s       ra   r?   z RecruitmentCreationForm.__init__  s    $)&)$}}2I!))0040@/&>!/03)@! !
3DKK./ a 56784KK!**66tWE<
 
 )6H%H%%8Q7J5K*L)MM%ri   c                 ~   t        | j                  d   t              r9| j                  j	                  d      }|r| j
                  j                  dd        | j                  j                  d      }| j                  j                  d      }|r |st        j                  t        d            t        | 5          y )Nr   open_positionsis_publishedz:Job position is required if the recruitment is publishing.)rD   rA   r   datagetlisterrorspopcleaned_datagetr   r
   rL   r>   clean)r[   idsr   r   r`   s       ra   r   zRecruitmentCreationForm.clean%  s    dkk"89;RS))##$:;C 6=**../?@((,,^<''NO  	ri   )	rc   rd   re   rf   r   r   r?   r   rg   rh   s   @ra   rt   rt      s)    L LN> ri   rt   c                   @     e Zd ZdZ G d d      Z fdZ fdZ xZS )StageCreationForm
    Form for Stage model
    c                   4    e Zd ZdZeZdZddgZd ed      iZ	y)StageCreationForm.Metarx   ry   sequencerz   stager$   N
rc   rd   re   rf   r$   r   rA   r   rL   r   r   ri   ra   r   r   8  -    	 {+QwZ
ri   r   c           
         t        |   |i | t        | j                         | j                  j
                  sLt        t        j                  j                  d      t        dt        ddd      d      | j                  d	<   y y )
NTr   r   r   r   r   r   r   stage_managers)r>   r?   r   rA   r   r   r   r   r   r   r   r   r[   r\   r]   r`   s      ra   r?   zStageCreationForm.__init__D  sz    $)&)$}},C!))0040@/&>!/03)@! !
-DKK()  ri   c                     t        | j                  d   t              r9| j                  j	                  d      }|r| j
                  j                  dd        t        | !          y )Nr   )	rD   rA   r   r   r   r   r   r>   r   )r[   r   r`   s     ra   r   zStageCreationForm.cleanT  sL    dkk"235LM))##$45C 0$7ri   )rc   rd   re   rf   r   r?   r   rg   rh   s   @ra   r   r   3  s!    

 

  ri   r   c                        e Zd ZdZ ej
                  ej                  d      Z fdZ	 G d d      Z
ddef fdZd	 Z fd
Z xZS )CandidateCreationForm"
    Form for Candidate model
    FrC   r   c                    t        |   |i | d| j                  d   _        d| j                  d   j                  j
                  d<   d| j                  d   _        d| j                  d   j                  j
                  d<   d| j                  d   _        | j                  j                  \| j                  Pt        j                  | j                  j                  j                  j                         d	
      | j                  d<   ddi| j                  d   j                  _        ddi| j                  d   j                  _        y )Nsoftwaresource.jpg, .jpeg, .pngprofileacceptF.pdfresumezJob Positionr   r3   job_position_iddata-widgetajax-widgetrecruitment_id)r>   r?   rA   rG   rC   rM   r   r   r   r   ModelChoiceFieldr   allr   s      ra   r?   zCandidateCreationForm.__init__c  s   $)&)(2H%8KI%%++H5*/I'7=H$$**84).H&==''3}}(161G1G!]]99HHLLN(2-. 7D]5S$%,,27Dm6T%&--3ri   c                       e Zd ZdZeZg dZ ej                  ddi       ej                  ddi      dZ	 e
d       e
d       e
d	       e
d
       e
d      dZy)CandidateCreationForm.Metarx   )r   name	portfolioemailmobiler   r   dobgenderaddressr   countrystatezipr   referralcanceledrz   r{   r   r|   )scheduled_dater   NameEmailMobileAddressZip)r   r   r   r   r   N)rc   rd   re   rf   r   r   rA   r   rE   r   rL   r   r   ri   ra   r   r   s  sp    	 
, .eooVV4DE"5??&&)9:

 fIwZk|U8
ri   r   commitc                    | j                   }|j                  }|j                  }d|_        d|_        |+|j
                  dk(  r|j                  du rd|_        d|_        ||_        ||_        | j                  j                  d      }|r1t        j                  j                  |      }|| j                   _        t        | 5  |      S )NFhiredTr   r4   )r   r   stage_idr   start_onboard
stage_typer   r   r   r   r   r   r>   save)r[   r   	candidaterecruitmentr   job_idjob_positionr`   s          ra   r   zCandidateCreationForm.save  s    MM	..""	"'	7*y/A/AU/J"&	*.	'#.	 "	01&..22f2=L,8DMM)w|F##ri   c                 &    d| i}t        d|      }|S )r   r   z)candidate/candidate_create_form_as_p.htmlr   r   s        ra   r   zCandidateCreationForm.as_p  s$     4.%7

 ri   c                    i }| j                   d   }| j                   d   }| j                   d   }|s|j                  st        d      |d<   |s|j                  st        d      |d<   | j                  j
                  | j                  j                  dd        | j                  j                  | j                  j                  d      dk(  rt        d      |d<   | j                  j                  | j                  j                  j                  j                         vrt        d      |d<   |rt        |      t        | A         S )Nr   r   r   This field is requiredr   rm   zChoose valid choice)r   optional_resumerL   optional_profile_imager   r   r   r   r   r   r   r   r   r   r
   r>   r   )r[   r   r   r   r   r`   s        ra   r   zCandidateCreationForm.clean  s%   ##I.""8,#'#4#45E#Fk99 !9:F8{AA !": ;F9==)KKOO-t4--599==!23r9,-.F,G()--}}33BBFFHI -..C,D()!&))w}ri   .)rc   rd   re   rf   r   	CharFieldr   RecruitmentAjaxWidgetloadr?   r   boolr   r   r   rg   rh   s   @ra   r   r   \  sN     5??'"?"?%PDU %
 %
N$4 $$ ri   r   c                        e Zd ZdZ ej
                  ej                  d      Ze	j                  j                  ddd      Z ej                  e      Z G d d      Z fd	Z fd
Z xZS )ApplicationFormz#
    Form for create Candidate
    Fr   T)rz   closedr   )r   c                   n    e Zd ZdZeZdZ ej                  ddi       ej                  ddi      dZ
y)	ApplicationForm.Metarx   )r   schedule_dater   r   r   rz   r   joining_dater   offerletter_statusr   r   r|   r{   r   )r   r   N)rc   rd   re   rf   r   r   r   r   rJ   rE   r   r   ri   ra   r   r    sP    	 
 .eoo

 #5??F
ri   r   c                    t        |   |i | t        t        dd       }d| j                  d   j
                  j                  d<   d| j                  d   _        d| j                  d   j
                  j                  d<   d| j                  d   _        dd	i| j                  d
   j
                  _        dd	i| j                  d   j
                  _        |r1|j                  j                  d      rd| j                  d   _        y y y )Nr,   r   r   r   Fr   r   r   r   r   r   recruitment.add_candidate)
r>   r?   r@   r   rA   rC   rM   r   rX   has_perm)r[   r\   r]   r,   r`   s       ra   r?   zApplicationForm.__init__  s    $)&).)T:8KI%%++H5*/I'7=H$$**84).H&6C]5S$%,,27Dm6T%&--3w||,,-HI.3DKK	"+ J7ri   c                    | j                   d   }t        t        dd       }i }| j                   d   }| j                   d   }| j                   d   }|s|j                  st	        d      |d<   |s|j
                  st	        d      |d<   |rt        |      |s1|r/|j                  j                  d      rd| }	|	| j                   d<   t        
| )          | j                   S )	Nr   r,   r   r   r   r   r	  z!https://ui-avatars.com/api/?name=)r   r@   r   r   rL   r   r
   rX   r
  r>   r   )r[   r\   r]   r   r,   r   r   r   r   profile_pic_urlr`   s             ra   r   zApplicationForm.clean  s      (.)T:##I.""8,#'#4#45E#Fk99 !9:F8{AA !": ;F9!&))%%&AB A$HO+:Di(   ri   )rc   rd   re   rf   r   r   r   r   r   r   r   r   active_recruitmentr   r   r   r?   r   rg   rh   s   @ra   r  r    st     5??'"?"?%PD$,,33u4 4  ,U++5GHN
 
@4! !ri   r  c                   6     e Zd ZdZ G d d      Z fdZ xZS )RecruitmentDropDownFormru   c                       e Zd ZdZdZeZ ej                  ddi       ej                  ddi       ej                  ddi      dZ
 ed	       ed
      dZy)RecruitmentDropDownForm.Metarx   ry   r{   r   r|   r}   rm   r~   r   r   r   N)rc   rd   re   rf   rA   r   r   r   rE   rU   r   rL   r   r   ri   ra   r   r  &  si    	 )%//0@A'vv.>?)5>>1BB0GH

 "#=!1a	lKri   r   c                 t   t        |   |i | | j                  d   j                  j                  j                  dt        j                  i       | j                  d   j                  j                  j                  dt        j                  i       | j                  d   }|j                         |_        y )Nr   r4   r   rz   )	r>   r?   rA   rC   rM   rN   rS   rT   hidden_widgetr[   r\   r]   r_   r`   s       ra   r?   z RecruitmentDropDownForm.__init__4  s    $)&)%&--33::D$**;MN*+2288??tzz@RSK(**,ri   rc   rd   re   rf   r   r?   rg   rh   s   @ra   r  r  !  s    L L- -ri   r  c                   @     e Zd ZdZdZ G d d      Z fdZd Z xZS )AddCandidateFormr   zAdd Candidatec                       e Zd ZdZeZg dZy)AddCandidateForm.Metarx   )r   r   r   r   r   r   r   r   N)rc   rd   re   rf   r   r   rA   r   ri   ra   r   r  C  s    	 	
ri   r   c                    t        |   |i | |d   j                  d      }|rt        j                  j                  |      j
                  }|| j                  _        | j                  d   j                  j                  |      | j                  d   _        |j                  | j                  d   _        d| j                  d   j                  j                  d<   d	| j                  d
   j                  j                  d<   j                  rd| j                  d   _        |j                  rd| j                  d
   _        d | j                  d   _        d | j                  d   _        d | j                  d   _        y )NrG   r   r   )r   r   r   r   r   r   r   Fr   )r>   r?   r   r$   r   r   r   rA   r   r   r   rC   rM   r   r   r   rR   )r[   r\   r]   rG   r   r`   s        ra   r?   zAddCandidateForm.__init__T  sK   $)&)#''
3--++w+7FFK+6DMM(/3{{:/F/O/O/V/V* 0W 0DKK
#, 7B6P6PDKK)*38KI%%++H57=H$$**84--.3DKK	"+&&-2DKK!*,0H)59%&2.2J+ri   c                 &    d| i}t        d|      }|S r   r   zcommon_form.htmlr   r   s        ra   r   zAddCandidateForm.as_ph        4.%&8'B
ri   )	rc   rd   re   rf   verbose_namer   r?   r   rg   rh   s   @ra   r  r  <  s#     #L
 
"3(ri   r  c                   6     e Zd ZdZ G d d      Z fdZ xZS )StageDropDownFormr   c                   4    e Zd ZdZeZdZddgZd ed      iZ	y)StageDropDownForm.Metarx   ry   r   rz   r   r$   Nr   r   ri   ra   r   r"  v  r   ri   r   c                     t        |   |i | t        j                  j	                         }|+|j
                  |j
                  dz   | j                  _        y d| j                  _        y )Nrr   )r>   r?   r$   r   lastr   r   )r[   r\   r]   r   r`   s       ra   r?   zStageDropDownForm.__init__  sW    $)&)""$!;%*^^a%7DMM"%&DMM"ri   r  rh   s   @ra   r   r   q  s    

 

' 'ri   r   c                       e Zd ZdZy)MultipleFileInputTN)rc   rd   re   allow_multiple_selectedr   ri   ra   r&  r&    s    "ri   r&  c                   *     e Zd Z fdZd fd	Z xZS )MultipleFileFieldc                 X    |j                  dt                      t        |   |i | y )NrC   )
setdefaultr&  r>   r?   r   s      ra   r?   zMultipleFileField.__init__  s)    ($5$78$)&)ri   c                     t         |   }t        |t        t        f      r|D cg c]  } |||       }}n
 |||      g}|r|d   S g S c c}w )Nr   )r>   r   rD   r   tuple)r[   r   rG   single_file_cleandresultr`   s         ra   r   zMultipleFileField.clean  sb    !GMdT5M*=AB'73BFB "$0F #vay** Cs   AN)rc   rd   re   r?   r   rg   rh   s   @ra   r)  r)    s    *+ +ri   r)  c                   L     e Zd ZdZ G d d      Z fdZddedef fdZ xZ	S )	StageNoteFormz"
    Form for StageNote model
    c                        e Zd ZdZeZdgZdgZy)StageNoteForm.Metarx   r   rz   N)rc   rd   re   rf   r&   r   rA   r   r   ri   ra   r   r5    s    	 
  -ri   r   c                 ~    t        |   |i | t        d      | j                  d<   d| j                  d   _        y )Nfilesr2   stage_filesF)r>   r?   r)  rA   r   r   s      ra   r?   zStageNoteForm.__init__  s;    $)&) &7W%EM".3M"+ri   r   returnc                    g }g }d }| j                   j                  d      rt| j                   j                  d      }|d   | j                  _        g }|D ]>  }t	               }||_         |j                          |j                  |j                         @ t        |   |      }|r |j                  j                  |  ||fS )Nr8  r   )r7  r   r   attachementr%   r   appendr   r>   r8  add)r[   r   
attachmentmultiple_attachment_idsattachmentsfile_instancer   r`   s          ra   r   zStageNoteForm.save  s    
"$::m,**,,];K(3ADMM%&(#) A
 *&0#""$'..}/?/?@	A
 7<'$H  $$&=>000ri   r   )
rc   rd   re   rf   r   r?   r   r   r   rg   rh   s   @ra   r3  r3    s/       414 1# 1 1ri   r3  c                   2     e Zd Z G d d      Z fdZ xZS )StageNoteUpdateFormc                        e Zd ZdZeZg dZdZy)StageNoteUpdateForm.Metarx   )
updated_byr   r8  rz   ry   N)rc   rd   re   rf   r&   r   r   rA   r   ri   ra   r   rE    s    	 Hri   r   c                 l    t        |   |i | | j                  d   }|j                         |_        y )Ncandidate_id)r>   r?   rA   r  rC   r  s       ra   r?   zStageNoteUpdateForm.__init__  s3    $)&)N+**,ri   rc   rd   re   r   r?   rg   rh   s   @ra   rC  rC    s     - -ri   rC  c                   
    e Zd ZdZdZ ej                  ej                  j                  d      d e
d            Z ej                  ej                   e
d      d	      Z G d
 d      Zd Z fdZd fd	Z fdZ xZS )QuestionFormz
    QuestionForm
    zSurvey QuestionsTr   Fr   )r   r   r3   Options)rC   r3   r   c                   l    e Zd ZdZeZdZg dZ ed       ed       ed       ed       ed      d	Z	y
)QuestionForm.Meta3
        Class Meta for additional options
        ry   )recruitment_idsjob_position_idsrz   optionsQuestionSequenceTyperL  zIs Mandatory)questionr   r{   rR  is_mandatoryN)
rc   rd   re   rf   r   r   rA   r   rL   r   r   ri   ra   r   rN    sC    	 "Q**fI|n-
ri   r   c                 &    d| i}t        d|      }|S )r   r   z,survey/question_template_organized_form.htmlr   r   s        ra   r   zQuestionForm.as_p  s$     4.%:G

 ri   c                     t         |          }| j                  d   }| j                  d   }| j                  j                  d      }|j	                         st        dt        d      i      || _        |dv r||dk(  rt        ddi      |S )Nr   r{   rR  z-Choose any recruitment to apply this questionrR  multiplerm   zOptions field is required)r>   r   r   r   existsr
   rL   r   )r[   r   r   question_typerR  r`   s        ra   r   zQuestionForm.clean  s    w}''6))&1##''	2!!#!"Q RS  '33Ow"}!9.I"JKKri   c                 Z   t         |   d      }|j                  dv rg }| j                  j	                         D ]+  \  }}|j                  d      s|s|j                  |       - dj                  |      |_        |r |j                          | j                          |S d|_        |S )NF)r   rZ  rR  , rm   )
r>   r   r{   r   rB   
startswithr<  joinrR  save_m2m)r[   r   r   additional_optionskeyvaluer`   s         ra   r   zQuestionForm.save  s    7<u<-==33!#"//557 5
U>>),&--e45  $yy);<H   "Hri   c                 l    t           |i | |j                  dd       }d _        d fd	}|r^|j                  j                  d      }t        |      D ]5  \  }}|dk(  r
 |d|        xj                  dz  c_         |d| |       7 |r,|j                  j                          j                  d   _
         j                  d   j                  j                  j                  d	d
d        j                  j                         D ]6  \  }}	|j!                  d      s xj                  dz  c_         |||	       8 t#         j                  j%                               }
|
j'                  d       |
j)                  dd       |
D ci c]  }| j                  |    c} _	        y c c}w )Nr   rr   c                     t        j                  t        j                  | d|  dd      t        d      d|      j                  | <   y )Nid_r-   )r   r4   r/   r|   rL  F)rC   r3   r   rG   )r   r   rJ   rL   rA   )
option_keyrG   r[   s     ra   create_options_fieldz3QuestionForm.__init__.<locals>.create_options_field+  sJ    &+oo * #J<0!1 	l'DKK
#ri   ,r   rR  r   r{   z w-100z'border:solid 1px #6c757d52;height:50px;)r/   r5   )rG   r6   r1  )r>   r?   r   option_countrR  split	enumeraterP  r   rA   rG   rC   rM   rN   r   rB   r`  r   keysremoveinsert)r[   r\   r]   r   rj  split_optionsioptionrd  re  fields_orderr_   r`   s   `           ra   r?   zQuestionForm.__init__&  s   $)&)::j$/	 $,,2237M&}5 @	66(F;%%*%(71#?@ 191I1I1M1M1ODKK&.F""((//)RS	
 ))//+ 	9JC~~i(!!Q&!$S%8	9 DKK,,./M*A}->JKUudkk%00KKs   F1)T)rc   rd   re   rf   r  r   ModelMultipleChoiceFieldr   r   r   rL   r   r   rJ   rR  r   r   r   r   r?   rg   rh   s   @ra   rK  rK    s     &L0%00$$++d+;K
 eooa	lUG
 
   (L (Lri   rK  c                   $     e Zd ZdZd fdZ xZS )
SurveyForm
    SurveyTemplateForm
    c                 j   t        	|   |g|i | |j                  j                         }t        j
                  j                         |z  }|j                  j                         D ]!  }|j                  j                         }||z  }# | |j                         d}t        d|      }|| _
        y )Nr   	questionszsurvey_form.html)r>   r?   recruitmentsurvey_setr   r   r   nonesurvey_templatesdistinctr   r   )
r[   r   r\   r]   r|  all_questionstemplater   r   r`   s
            ra   r?   zSurveyForm.__init__V  s    6t6v65599;	)116689D#4488: 	6H 66::<I)I5M	6  m.D.D.FG 2G<	ri   r9  Nrb   rh   s   @ra   rx  rx  Q  s    
 
ri   rx  c                   $     e Zd ZdZd fdZ xZS )SurveyPreviewFormry  c                     t        |   |g|i | t        j                  j	                  |g      }| |j                         d}t        d|      }|| _        y )N)template_id__inr{  zsurvey_preview_form.html)r>   r?   r   r   r   r  r   r   )r[   r  r\   r]   r  r   r   r`   s          ra   r?   zSurveyPreviewForm.__init__j  s_    3D3F3)1188(8Tm.D.D.FG :GD	ri   r  rb   rh   s   @ra   r  r  e  s     ri   r  c                   .    e Zd ZdZdZ G d d      Zd Zy)TemplateFormz
    TemplateForm
    Templatec                       e Zd ZeZdZdgZy)TemplateForm.Metary   rz   N)rc   rd   re   r'   r   rA   r   r   ri   ra   r   r  |  s    -ri   r   c                 &    d| i}t        d|      }|S r  r   r   s        ra   r   zTemplateForm.as_p  r  ri   Nrc   rd   re   rf   r  r   r   r   ri   ra   r  r  u  s     L   
ri   r  c                       e Zd ZdZdZ ej                  ej                  j                         d      Z
 ej                  ej                  j                         d      Zd Zd Zy)	AddQuestionFormz
    AddQuestionForm
    zAdd Question	Questionsr   	Templatesc                 x    | j                   d   D ](  } |j                  j                  | j                  d     * y)zB
        Manual save/adding of questions to the templates
        question_idstemplate_idsN)r   template_idr=  r   )r[   rV  s     ra   r   zAddQuestionForm.save  s?     )).9 	AH$H  $$dii&?@	Ari   c                 &    d| i}t        d|      }|S r  r   r   s        ra   r   zAddQuestionForm.as_p  r  ri   N)rc   rd   re   rf   r  r   rv  r   r   r   r  r'   r  r   r   r   ri   ra   r  r    sg     "L1511"**..0L 2511''++-[LAri   r  )r4   r   r   r   r   r  
created_at
created_bymodified_byrz   last_updatedhorilla_historyc            
       N   e Zd Zej                  j                         ZeD  cg c]F  }t        |d      r8|j                  t        vr&|j                  |j                  j                         fH c}}}} Zedgz   Z ej                  eej                  g d      Zyc c}}}} w )CandidateExportFormr  )rejected_candidate__descriptionzRejected Description)r   r   r   r   r   r   r   r  )r   rC   rG   N)rc   rd   re   r   _meta
get_fieldsmodel_fieldshasattrr   exclude_fieldsr  
capitalizefield_choicesr   MultipleChoiceFieldrW   selected_fields).0r_   r  r  s   0000ra   r  r    s    ??--/L " 5.)ejj.N 
U''2245M
 "C% M 0e//++	
Os   AB
r  c                   *    e Zd ZdZ G d d      Zd Zy)SkillZoneCreateFormz
Skill Zonec                       e Zd ZdZeZdZdgZy)SkillZoneCreateForm.MetarO  ry   rz   N)rc   rd   re   rf   r"   r   rA   r   r   ri   ra   r   r    s    	 -ri   r   c                 &    d| i}t        d|      }|S r  r   r   s        ra   r   zSkillZoneCreateForm.as_p  r  ri   N)rc   rd   re   r  r   r   r   ri   ra   r  r    s    L   ri   r  c                        e Zd ZdZ ej
                  ej                  j                         ej                   e
d            Z G d d      Zd Zd Zd fd	Zdd
edef fdZ xZS )SkillZoneCandidateFormzSkill Zone Candidater   r   c                        e Zd ZdZeZdZddgZy)SkillZoneCandidateForm.MetarO  ry   added_onrz   N)rc   rd   re   rf   r#   r   rA   r   r   ri   ra   r   r    s     	 #
ri   r   c                 &    d| i}t        d|      }|S r  r   r   s        ra   r   zSkillZoneCandidateForm.as_p  r  ri   c                     | j                   d   }|D ]'  }t        |t              rt        j                  d       |j                         S )NrH  zInvalid candidate selected.)r   rD   r   r   r
   first)r[   selected_candidatesr   s      ra   clean_candidate_idz)SkillZoneCandidateForm.clean_candidate_id  sS    "//? - 	KIi3++,IJJ	K #((**ri   r9  c                    t        |   |i | d | j                  d   _        | j                  j
                  rJ| j                  j                  j                  dz   | j                  j                  j                  z   | _
        y y )NrH  z / )r>   r?   rA   rR   r   r   rH  r   skill_zone_idr   r  r   s      ra   r?   zSkillZoneCandidateForm.__init__  ss    $)&)26N#/==**//----334  ri   r   c                    t         |   |       t        t        | j                  j                  d            t        | j                  j                  j                        hz
        }|rp| j                  }|D ]_  }|j                  dz   |_
        |j                  |_	        t        j                  j                  |      |_        	 t         t        |          a |S # t        $ r}t         j#                  |       Y d }~d }~ww xY w)NrH  rr   r   )r>   r   r   setr   r   strr   rH  r4   r   r   r   r   r#   	Exceptionloggererror)r[   r   other_candidatescandr4   er`   s         ra   r   zSkillZoneCandidateForm.save  s    V		!!.12DMM..112
 ==D& $''A+''$-$5$5$9$9R$9$@!$,d8:$   ! $LLOO$s   C	D&D  Dr  r   )rc   rd   re   r  r   rv  r   r   r   SelectMultiplerL   rH  r   r   r  r?   r   r   r   rg   rh   s   @ra   r  r    sm    )L1511""&&(##nL

 

+ 4  #    ri   r  c                        e Zd ZdZ ej
                  ej                  j                          e	d            Z
 G d d      Z fdZd Z xZS )ToSkillZoneFormzAdd To Skill ZonezSkill Zonesr   c                   ,    e Zd ZdZeZdZg dZeddiiZ	y)ToSkillZoneForm.MetarO  ry   )r  rz   rH  unique_togetherz.This candidate alreay exist in this skill zoneN)
rc   rd   re   rf   r#   r   rA   r   r	   error_messagesr   ri   ra   r   r  2  s1    	 #
 !#S
ri   r   c                 j   t         |          }|j                  d      }|j                  d      }g }|D ]C  }t        j                  j                  ||      j                         s3|j                  |       E t        |      dkD  r)dj                  d |D              }t        | d| d      |S )	NrH  skill_zone_ids)rH  r  r   r_  c              3   2   K   | ]  }t        |        y wr1  )r  )r  
skill_zones     ra   	<genexpr>z(ToSkillZoneForm.clean.<locals>.<genexpr>Q  s      ($.J(s   z already exists in .)r>   r   r   r#   r   r   r\  r<  lenra  r
   )r[   r   r   skill_zonesskill_zone_listr  skill_zones_strr`   s          ra   r   zToSkillZoneForm.cleanD  s    w} $$^4	"&&'78% 	3J!))00&j 1 fh  &&z2	3 !#"ii (2A( O "YK/B?BSST"UVV ri   c                 &    d| i}t        d|      }|S r  r   r   s        ra   r   zToSkillZoneForm.as_pY  r  ri   )rc   rd   re   r  r   rv  r"   r   r   rL   r  r   r   r   rg   rh   s   @ra   r  r  ,  sG    &L3U33""&&(-0@N
 
$*ri   r  c                   .    e Zd ZdZdZ G d d      Zd Zy)RejectReasonFormz
    RejectReasonForm
    zReject Reasonc                       e Zd ZeZdZdgZy)RejectReasonForm.Metary   rz   N)rc   rd   re   r   r   rA   r   r   ri   ra   r   r  i  s    -ri   r   c                 &    d| i}t        d|      }|S r  r   r   s        ra   r   zRejectReasonForm.as_pn  r  ri   Nr  r   ri   ra   r  r  b  s     #L   
ri   r  c                   @     e Zd ZdZdZ G d d      Zd Z fdZ xZS )RejectedCandidateFormz
    RejectedCandidateForm
    zRejected Candidatec                       e Zd ZeZdZdgZy)RejectedCandidateForm.Metary   rz   N)rc   rd   re   r   r   rA   r   r   ri   ra   r   r  ~      !-ri   r   c                 &    d| i}t        d|      }|S r  r   r   s        ra   r   zRejectedCandidateForm.as_p  r  ri   c                     t        |   |i | d | j                  d   _        | j                  d   j	                         | j                  d   _        y )Nreject_reason_idrH  )r>   r?   rA   rR   r  rC   r   s      ra   r?   zRejectedCandidateForm.__init__  sJ    $)&)6:&'3-1[[-H-V-V-XN#*ri   )	rc   rd   re   rf   r  r   r   r?   rg   rh   s   @ra   r  r  w  s*     (L   
Y Yri   r  c                   J     e Zd ZdZdZ G d d      Z fdZ fdZd Z xZ	S )ScheduleInterviewFormz
    ScheduleInterviewForm
    zSchedule Interviewc                       e Zd ZeZdZdgZy)ScheduleInterviewForm.Metary   rz   N)rc   rd   re   r   r   rA   r   r   ri   ra   r   r    r  ri   r   c                     t        |   |i | t        j                  ddd      | j                  d   _        t        j                  ddd      | j                  d   _        y )Nr   r-   )r{   r/   r|   interview_datetimeinterview_time)r>   r?   r   rE   rA   rC   	TimeInputr   s      ra   r?   zScheduleInterviewForm.__init__  s_    $)&)/4!,<=0
$%, 05!,<=0
$%,ri   c                 "   | j                   }t        | 	         }|j                  d      }|j                  d      }|d   }|j                  s4|r2|t        j                         k  r| j                  dt        d             |j                  sg|ret        j                         j                         }|j                  s7|t        j                         k(  r ||k  r| j                  dt        d             t        j                  d      r$ddlm} |j                   j#                  |d	
      }ng }|D 	cg c].  }	||	j%                         v r|	j&                  j)                         0 }
}	|
r| j                  dt        |
 d             |S c c}	w )Nr  r  r<   z%Interview date cannot be in the past.z%Interview time cannot be in the past.leaver   )LeaveRequestapproved)employee_id__instatusz! have approved leave on this date)r   r>   r   r   r   r   rF   	add_errorrL   r   nowr  r   is_installedleave.modelsr  r   r   requested_datesr<   get_full_name)r[   r   r   r  r  managersr  r  leave_employeesr  	employeesr`   s              ra   r   zScheduleInterviewForm.clean  sh   ==w}%))*:;%))*:;.{{~.4::<2ONN+Q/V-WX{{~,,.%%'CKK"djjl2"S($a(O&P W%1*2299 ( : O !O )
!6!6!88 ++-
	 
 NNqI;.O!PQ 
s   53Fc                 &    d| i}t        d|      }|S r  r   r   s        ra   r   zScheduleInterviewForm.as_p  r  ri   )
rc   rd   re   rf   r  r   r?   r   r   rg   rh   s   @ra   r  r    s)     (L   

)Vri   r  c                        e Zd Z G d d      Zy)
SkillsFormc                       e Zd ZeZdgZy)SkillsForm.Metar   N)rc   rd   re   r!   r   rA   r   ri   ra   r   r    s    ri   r   Nrc   rd   re   r   r   ri   ra   r  r    s     ri   r  c                   2     e Zd Z G d d      Z fdZ xZS )
ResumeFormc                   >    e Zd ZeZddgZd ej                         iZy)ResumeForm.Metafiler   N)	rc   rd   re   r    r   rA   r   HiddenInputr   r   ri   ra   r   r    s(    *+#%6U%6%6%89ri   r   c                     t        |   |i | | j                  d   j                  j                  j                  ddi       y )Nr  onchangezsubmitForm($(this)))r>   r?   rA   rC   rM   rN   r   s      ra   r?   zResumeForm.__init__  sC    $)&)F""((//1	
ri   rI  rh   s   @ra   r  r    s    : :

 
ri   r  c                        e Zd Z G d d      Zy)CandidateDocumentRequestFormc                       e Zd ZeZdZdgZy)!CandidateDocumentRequestForm.Metary   rz   N)rc   rd   re   r   r   rA   r   r   ri   ra   r   r    s    (-ri   r   Nr   r   ri   ra   r
  r
    s       ri   r
  c                   (    e Zd ZdZdZ G d d      Zy)CandidateDocumentUpdateFormzform to Update a Documentr   c                       e Zd ZeZdZddgZy) CandidateDocumentUpdateForm.Metary   rz   document_request_idN)rc   rd   re   r   r   rA   r   r   ri   ra   r   r    s    ! 56ri   r   N)rc   rd   re   rf   r  r   r   ri   ra   r  r    s    #&L7 7ri   r  c                   6     e Zd ZdZ G d d      Z fdZ xZS )CandidateDocumentRejectFormz7form to add rejection reason while rejecting a Documentc                       e Zd ZeZdgZy) CandidateDocumentRejectForm.Metareject_reasonN)rc   rd   re   r   r   rA   r   ri   ra   r   r    s    !!"ri   r   c                 p    t        |   |i | d| j                  d   j                  j                  d<   y )NTr  r   )r>   r?   rA   rC   rM   r   s      ra   r?   z$CandidateDocumentRejectForm.__init__  s4    $)&)@DO$++11*=ri   r  rh   s   @ra   r  r    s    A# #E Eri   r  c                   .    e Zd ZdZdZ G d d      Zd Zy)CandidateDocumentFormzform to create a new DocumentDocumentc                   B    e Zd ZeZdZg dZd ej                         iZ	y)CandidateDocumentForm.Metary   )r  r  r  rz   r<   N)
rc   rd   re   r   r   rA   r   r   r  r   r   ri   ra   r   r    s)    !Q,5,,.
ri   r   c                 &    d| i}t        d|      }|S r  r   )r[   r   r   s      ra   r   zCandidateDocumentForm.as_p  r  ri   Nr  r   ri   ra   r  r    s    'L
 
ri   r  )_rf   loggingrS   astr   r   r   typingr   djangor   django.appsr   django.core.exceptionsr	   r
   django.template.loaderr   django.utils.translationr   rL   
base.formsr   base.methodsr   employee.filtersr   employee.modelsr   horillar   horilla.horilla_middlewaresr   2horilla_widgets.widgets.horilla_multi_select_fieldr   &horilla_widgets.widgets.select_widgetsr   r   r   recruitment.modelsr   r   r   r   r   r   r   r   r   r    r!   r"   r#   r$   r%   r&   r'   	getLoggerrc   r  r)   rk   rp   rt   r   r   r  r  r  r   ClearableFileInputr&  	FileFieldr)  r3  rC  rK  rx  r  r  r  r  r  r  r  r  r  r  r  r  r  r
  r  r  r  r   ri   ra   <module>r2     sA  .    #    D 3 6  ( + $ ' 6 V K     ( 
		8	$B BJMu MD5M5?? 5MpMi M`&	 &RqI qhN!& N!b-l -62y 2j' '4#00 #+ + *1I *1Z-) - rL9 rLj (

  9 *d : %** 4) *C Y C L3i 3ly *YI Y4FI FR 
 
 9  7) 7	E) 	EI ri   