
    si#]                     0   d 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mZmZmZmZmZ ddlmZmZm Z  ddl!m"Z" ddl#m$Z$m%Z%  eed       e e"d      d       G d de                    Z& eed       e e"d      d       G d de                    Z' eed       e e"d      d       G d de                    Z( eed       e e"d      d       G d de                    Z) eed       e e"d      d       G d de                    Z* eed       e e"d      d       G d de                    Z+ eed       e e"d      d       G d d e                    Z,y!)"z
recruitment/cbv/pipeline.py
    )Any)messages)cache)reversereverse_lazy)method_decorator)	urlencode)gettext_lazy)login_required)HorillaKanbanView)HorillaFormViewHorillaListViewHorillaNavViewHorillaTabViewTemplateViewget_short_uuid)filtersformsmodels)manager_can_enter)recruitment_managesstage_managesdispatch)namerecruitment.view_recruitment)permc                       e Zd ZdZdZy)PipelineViewz
    PipelineView
    zcbv/pipeline/pipeline.htmlN)__name__
__module____qualname____doc__template_name     </var/www/python-projects/worksol/recruitment/cbv/pipeline.pyr   r       s    
 1Mr%   r   c                   D     e Zd ZdZej
                  Z fdZ fdZ xZ	S )RecruitmentTabViewz
    RecruitmentTabView
    c           
         t        |   d7i | | j                  | j                  j                        j
                  j                  d      }| j                  j                  j                  dd      }t        j                  | j                  j                  j                  dz   t        j                  | j                  j                        j
                  j                  d      |ddd	
       g | _        | j                  j                  j!                  d      }| j                  j                  j!                  d      }| j                  j                  j!                  d      }| j                  j                  j!                  d      }| j                  j                  j!                  d      }|D ]  }	t#        | j                  j                  |	      }
t%        | j                  j                  |	      }i }|	|d<   t'        dd|	j(                  i      }|dk(  rt'        dd|	j(                  i      d| z   }||d<   || j*                  d<   t-        d      |d<   g |d<   |
s|r|s|
s|ru|d   j/                  t-        d      dt'        d       d|	j(                   d d!       |d   j/                  t-        d"      dt'        d#d|	j(                  i       d d!       |s|
s|r;|d   j/                  t-        d$      dt'        d%d|	j(                  i       d d!       |s|
s|r:|d   j/                  t-        d&      d't'        d(       d)|	j(                   d*d!       |s|
r|	j0                  r<|d   j/                  t-        d+      d,t'        d-d|	j(                  i       d.d!       n;|d   j/                  t-        d/      d,t'        d0d|	j(                  i       d1d!       |r:|d   j/                  t-        d2      d3t'        d4       d5|	j(                   d6d!       |s|sy| j                  j/                  |        y )8NT	is_activeviewcardpipelinesequenceF)stagesrecruitments
candidatesiX  )timeoutr   zrecruitment.change_recruitmentzrecruitment.add_candidatezrecruitment.delete_recruitmentzrecruitment.add_stagetitlezcandidate-card-cbvpk)kwargslistzget-stages-recruitmentrec_idz?view=urlStagesbadge_labelactionsz	Add Stagez
                                data-toggle="oh-modal-toggle"
                                data-target="#genericModal"
                                hx-get="zrec-stage-createz?recruitment_id=z"
                                hx-target="#genericModalBody"
                                style="cursor: pointer;"
                            actionattrszManage Stage Orderzrec-update-stage-seqEditzrecruitment-update-pipelinezResume Shortlistingz
                                data-toggle="oh-modal-toggle"
                                data-target="#bulkResumeUpload"
                                hx-get="zview-bulk-resumez?rec_id=z"
                                hx-target="#bulkResumeUploadBody"
                                style="cursor: pointer;"
                            Reopenz+
                                    href="zrecruitment-reopen-pipelinez"
                                    style="cursor: pointer;"
                                    onclick="return confirm('Are you sure you want to reopen this recruitment?');"
                                Closezrecruitment-close-pipelinez"
                                    style="cursor: pointer;"
                                    onclick="return confirm('Are you sure you want to close this recruitment?');"
                                Deletez
                                data-toggle="oh-modal-toggle"
                                data-target="#deleteConfirmation"
                                hx-get="zgeneric-deletez"?model=recruitment.Recruitment&pk=z"
                                hx-target="#deleteConfirmationBody"
                                style="cursor: pointer;"
                            r$   )super__init__filter_classrequestGETqsfiltergetCACHEsetsessionsession_key	GetStagesorder_bytabsuserhas_permr   r   r   r5   query_params_appendclosed)selfr6   r1   	view_type	view_permchange_permadd_cand_permdelete_permadd_stage_permrecrec_manager_permstage_manage_permtabr9   	__class__s                 r&   rE   zRecruitmentTabView.__init__7   sn   "6"(()9)9:==DDtDTLL$$((8			LL  ,,z9#001A1ABEENN !-# 
	
 	LL%%../MN	ll''001QR))223NOll''001QR**334KL n	&C24<<3D3DcJ -dll.?.? ECCL.cff~FCF"4h=OPyk*+  CJ(1Df%!"8CC	N;!%5	N))&'n*) *11C)D(EEUVYV\V\U] ^& 	 	N))&'(<&=*) *11GQUWZW]W]P^)_(` a& 	 "2k	N))&'i*) *11NX\^a^d^dWe)f(g h& 	 !$4	N))&'(=&>*) *11C)D(EXcffX V& 	 "2zzI--*+H+.++23PZbdgdjdjYk+l*m n!*$	 I--*+G*.++23OYacfciciXj+k*l m!*$	 	N))&'k*) *11A)B(CCefiflflem n& 	 !I		  %]n	&r%   c                 0    t        |   di |}d|d<   |S )NTshow_filter_tagsr$   )rD   get_context_datarY   r6   contextrd   s      r&   rg   z#RecruitmentTabView.get_context_data   s%    '*4V4&*"#r%   )
r   r    r!   r"   r   RecruitmentFilterrF   rE   rg   __classcell__rd   s   @r&   r(   r(   ,   s&    
 ,,LC&J r%   r(   c                   L     e Zd ZdZej
                  ZdZdZ fdZ	 fdZ
 xZS )rP   z
    GetStages
    zcbv/pipeline/stages.htmlNc                    |d   }t        j                  |j                  j                  dz         }|j                  d      sst        j                  | j                  j                        j                  j                  d      |d<   t        j                  |j                  j                  dz   |       |d   j                  |      | _        t        |   |g|i |S )z
        get method
        r8   r.   r2   Tr*   r0   recruitment_id)rL   rK   rN   rO   CandidateListrF   rG   rH   rI   rJ   rM   r0   rD   )rY   rG   argsr6   r8   r   rd   s         r&   rK   zGetStages.get   s     !		'//55
BCyy&"/"<"<  #b$' , IIgoo11J>FHo,,F,Cw{74T4V44r%   c                 r    t        |   di |}| j                  |d<   t        dd      |d<   |d   |d<   |S )Nr0      hsvview_idr8   r$   )rD   rg   r0   r   rh   s      r&   rg   zGetStages.get_context_data   sH    '*4V4 KK+Au5	"8,r%   )r   r    r!   r"   r   StageFilterrF   r#   r0   rK   rg   rk   rl   s   @r&   rP   rP      s.    
 &&L.MF5 r%   rP   c            
       p    e Zd ZdZej
                  Zej                  Z	dZ
dZdZdZdZdZdZddddd	Zg d
Zg dZddgZdZddiZ ed      ddd ed      ddd ed      ddd ed      ddd ed      dd d ed!      d"d#d ed$      d%d&dgZ fd'Z fd(Z fd)Z fd*Z fd+Z fd,Z xZS )-rq   z
    CandidateList
    FT
   zcbv/pipeline/empty.htmlz style="width:400px;" z style="width:100px;" z style="width:200px;" )r>   mobileStageget_interview_count)Namecandidate_name
get_avatarEmailmail_indicationr{   stage_drop_down)Rating
rating_bar)z
Hired Date
hired_date)zScheduled Interviewr|   )zJob Positionjob_position_id)Contactrz   )r}   r   r   stage_idr   
        hx-get='{get_details_candidate}'
        data-toggle="oh-modal-toggle"
        data-target="#genericModal"
        hx-target="#genericModalBody"
    optionz4
            style="width:280px !important"
        Schedule Interviewztime-outlinea  
                class="oh-btn oh-btn--danger-outline oh-btn--light-bkg w-100"
                hx-get = "{get_schedule_interview}"
                data-toggle="oh-modal-toggle"
                data-target="#genericModal"
                hx-target="#genericModalBody"
            )r>   iconr?   	Send Mailzmail-open-outlinea  
                class="oh-btn oh-btn--danger-outline oh-btn--light-bkg w-100"
                hx-get = "{get_send_mail}"
                data-toggle="oh-modal-toggle"
                data-target="#objectDetailsModal"
                hx-target="#objectDetailsModalTarget"
            Add to Skill Zonezheart-circle-outlinea  
                class="oh-btn oh-btn--danger-outline oh-btn--light-bkg w-100 disabled"
                data-toggle="oh-modal-toggle"
                hx-get="{get_skill_zone_url}"
                data-target="#genericModal"
                hx-target="#genericModalBody"
            zReject Candidatezthumbs-down-outlineaD  
                class="oh-btn oh-btn--danger-outline oh-btn--light-bkg w-100"
                data-toggle="oh-modal-toggle"
                hx-get="{get_rejected_candidate_url}"
                {rejected_candidate_class}
                data-target="#genericModal"
                hx-target="#genericModalBody"
            	View Noteznewspaper-outlineaT  
                class="oh-btn oh-btn--danger-outline oh-btn--light-bkg w-100 oh-activity-sidebar__open"
                hx-get="{get_view_note_url}"
                data-target="#activitySidebar"
                hx-target="#activitySidebar"
                onclick="$('#activitySidebar').addClass('oh-activity-sidebar--show')"
            zDocument Requestzdocument-attach-outlinea  
                hx-get="{get_document_request}"
                data-target="#genericModal"
                hx-target="#genericModalBody"
                class="oh-btn oh-btn--danger-outline oh-btn--light-bkg w-100"
                data-toggle="oh-modal-toggle"
            Resumezdocument-outlinez
                class="oh-btn oh-btn--danger-outline oh-btn--light-bkg w-100"
                href="{get_resume_url}" target="_blank"
            c                     t         |          }|j                  d   j                  j	                  | j
                  d         |j                  d   _        |S )Nr   r8   ro   )rD   get_bulk_formfieldsquerysetrJ   r6   )rY   formrd   s     r&   r   zCandidateList.get_bulk_formq  sT    w$&+/;;z+B+K+K+R+R;;x0 ,S ,
J( r%   c                    | j                   j                  d      st        |          S | j                  j                         }t        |          xs |xr | j                  j                  j                  |j                  j                  j                         v xsD | j                  j                  j                  |j                  j                  j                         v S )z*
        Bulk Update accessiblity
        r   )r6   rK   rD   bulk_update_accessibilityr   firstrG   rS   employee_getr   stage_managersallrp   recruitment_managers)rY   first_cand_in_stagerd   s     r&   r   z'CandidateList.bulk_update_accessibilityx  s     {{z*7466"mm113w02 
 !!..&//>>BBDE Q<<$$11&55JJNNPQ	
r%   c                 Z    t        |   di | | j                  j                  | _        y )Nr$   )rD   rE   rG   path
search_urlrY   r6   rd   s     r&   rE   zCandidateList.__init__  s$    "6",,++r%   c                 P    t        |   di |}| j                         sg |d<   |S )Nr<   r$   )rD   rg   r   rh   s      r&   rg   zCandidateList.get_context_data  s0    '*4V4--/!#GIr%   c                 D    d|d    | _         t        |   |g|i |S )NselectedCandidateRecordsr   )selected_instances_key_idrD   rK   )rY   rG   rr   r6   rd   s       r&   rK   zCandidateList.get  s1    +CF:DVCW)X&w{74T4V44r%   c                 @   | j                   t        j                  | j                  j                  j
                  dz         d   j                  | j                  d         }|j                  | j                  d         }t        | %  |d       | j                   S )Nr.   r2   r   )r   T)r   filtered)
r   rL   rK   rG   rN   rO   rJ   r6   rD   get_queryset)rY   rr   r6   r   rd   s       r&   r   zCandidateList.get_queryset  s    == yy!5!5!A!AJ!NOfdkk*5f6   J0GHHG (T B}}r%   )r   r    r!   r"   r   	Candidatemodelr   CandidateFilterrF   filter_selectedquick_export	next_prevrf   records_per_pagerecords_count_in_tabcustom_empty_templateheader_attrscolumnsdefault_columnsbulk_update_fields	row_attrsrV   r<   r   r   rE   rg   rK   r   rk   rl   s   @r&   rq   rq      s_   
 E**LOLI 5..-;	L	GO 	
I 	 L ,-"
	
 n'
	
 +,*
	
 *+)	
 n'
	
 *+-
	
 k&	
ILG\
",5 r%   rq   c                   x    e Zd Zej                  Zej                  Zej                  Z
dZdZdgZdZddddd	Z ed
      ddd ed      ddd ed      ddd ed      dddgZ ed      dd ed      ddddddddd dd!d"d#dd$d%d&dd'd(d&d ed)      d*d ed+      d,dd-d.ddd/dgZ fd0Z xZS )1CandidateCardr   ry   r8   r   z{get_avatar}z{get_full_name}z{email}z{job_position_id})	image_srcr4   emailpositionzAdd Candidatez5recruitment.accessibility.add_candidate_accessibilityz
                hx-target="#genericModalBody"
                hx-get="{get_add_candidate_url}"
                data-toggle="oh-modal-toggle"
                data-target="#genericModal"
            )r>   accessibilityr?   r@   z2recruitment.accessibility.edit_stage_accessibilityz
                hx-target="#genericModalBody"
                hx-get="{get_stage_update_url}"
                data-toggle="oh-modal-toggle"
                data-target="#genericModal"
            z	Bulk Mailz
                hx-target="#objectCreateModalTarget"
                hx-get="{get_send_email_url}"
                data-toggle="oh-modal-toggle"
                data-target="#objectCreateModal"
            rC   z4recruitment.accessibility.delete_stage_accessibilityz
                hx-target="#deleteConfirmationBody"
                hx-get="{get_delete_url}"
                data-toggle="oh-modal-toggle"
                data-target="#deleteConfirmation"
            r   z
                hx-get = "{get_schedule_interview}"
                data-toggle="oh-modal-toggle"
                data-target="#genericModal"
                hx-target="#genericModalBody"
            r=   r   z
                hx-get = "{get_send_mail}"
                data-toggle="oh-modal-toggle"
                data-target="#objectDetailsModal"
                hx-target="#objectDetailsModalTarget"
            r   z,recruitment.cbv.accessibility.add_skill_zonez
                data-toggle="oh-modal-toggle"
                data-target="#genericModal"
                hx-get="{get_add_to_skill}"
                hx-target="#genericModalBody"
                class="oh-dropdown__link"

            zView candidate self trackingz;recruitment.cbv.accessibility.check_candidate_self_trackingzf
                href="{get_self_tracking_url}"
                class="oh-dropdown__link"
            zRequest Documentz.recruitment.cbv.accessibility.request_documentz
                data-toggle="oh-modal-toggle"
                data-target="#genericModal"
                hx-get="{get_document_request_doc}"
                hx-target="#genericModalBody"
                class="oh-dropdown__link"
            zAdd to Rejectedz(recruitment.cbv.accessibility.add_rejecta  
                hx-target="#genericModalBody"
                hx-swap="innerHTML"
                data-toggle="oh-modal-toggle"
                data-target="#genericModal"
                hx-get="{get_add_to_reject}"
                class="oh-dropdown__link"
            zEdit Rejected Candidatez)recruitment.cbv.accessibility.edit_rejectr   z
                hx-get="{get_view_note_url}"
                data-target="#activitySidebar"
                hx-target="#activitySidebar"
                onclick="$('#activitySidebar').addClass('oh-activity-sidebar--show')"
            r   zE
                href="{get_resume_url}" target="_blank"
            archive_statuszv
                class="oh-dropdown__link"
                onclick="archiveCandidate({get_archive_url});"
            z
                class="oh-dropdown__link oh-dropdown__link--danger"
                onclick="event.stopPropagation();
                deleteCandidate('{get_delete_url}'); "
            c                     t        |   |i |}| j                  j                  d      }|r|j	                  |      }|S )Nr5   ro   )rD   get_related_groupsr6   rK   rJ   )rY   rr   r6   related_groupsr8   rd   s        r&   r   z CandidateCard.get_related_groupsQ  sE    3TDVD&+22&2INr%   )r   r    r!   r   r   r   r   r   rF   rw   group_filter_class	group_keyr   filter_keys_to_removekanban_attrsdetailsrV   group_actionsr<   r   rk   rl   s   @r&   r   r     s   
 E**L ,,I%JL $"'	G (T		
 iQ		
 nQ		
 kS		
?)MZ ,-	
 n	
 *K	
 5Z	
 )M
	
 (G	
 0H	
 n	
 k	
 '	
 	
AhGT r%   r   c                        e Zd ZdZ ed      Z ed      ZdZdZ	 e
j                         ZdZdZded	d
f fdZ fdZ xZS )PipelineNavz
    HorillaNavView
    cbv-pipeline-tabPipelinez#pipelineContainerz!cbv/pipeline/pipeline_filter.htmlr   Fr6   returnNc                    t        |   di | | j                  j                  j	                  d      r#dt        d       dt        ddi       d| _        nd | _        dd	t        d
       dddddt        d
       dddg| _        y )Nzrecruitment.add_recruitmentz
                hx-get="zrecruitment-create?r.   truez"
                hx-target="#genericModalBody"
                data-target="#genericModal"
                data-toggle="oh-modal-toggle"
            r7   zlist-outliner   z
?view=listz3
                    title ='List'
                )typer   r9   r?   r-   zgrid-outlinez
?view=cardz3
                    title ='Card'
                r$   )	rD   rE   rG   rS   rT   r   r	   create_attrs
view_typesr   s     r&   rE   zPipelineNav.__init__k  s    "6"<<%%&CD%%&:;<AiU[H\>]=^ _!D !%D &&'9:;:F	 &&'9:;:F	
r%   c                     t        |   di |}t        j                         }t        j                         }||d<   ||d<   |S )z
        context data
        stage_filter_objcandidate_filter_objr$   )rD   rg   rP   rF   rq   )rY   r6   ri   r   r   rd   s        r&   rg   zPipelineNav.get_context_data  sP     '*4V4$113,99;&6"#*>&'r%   )r   r    r!   r"   r   r   rV   	nav_titlesearch_swap_targetfilter_body_templater   rj   filter_instancefilter_form_context_nameapply_first_filterr   rE   rg   rk   rl   s   @r&   r   r   Z  sc    
 01J*I->/g//1O%
 
 
>	 	r%   r   c                   F    e Zd ZdZej
                  Zej                  Z	d Z
y)ChangeStagez 
    Change Candidate stage
    c                 &   |j                         rIt        j                  | j                  t	        d             |j                          | j                         S t        j                  | j                  t	        d             | j                         S )NzStage UpdatedzStage not updated)is_validr   successrG   rV   saveHttpResponseinfo)rY   r   s     r&   
form_validzChangeStage.form_valid  sc    ==?T\\1_+=>IIK$$&&dllA&9$:;  ""r%   N)r   r    r!   r"   r   r   r   r   StageChangeForm
form_classr   r$   r%   r&   r   r     s$    
 E&&J#r%   r   N)-r"   typingr   django.contribr   django.core.cacher   rL   django.urlsr   r   django.utils.decoratorsr   django.utils.httpr	   django.utils.translationr
   rV   horilla_views.cbv_methodsr    horilla_views.generic.cbv.kanbanr   horilla_views.generic.cbv.viewsr   r   r   r   r   r   recruitmentr   r   r   recruitment.cbv_decoratorsr   +recruitment.templatetags.recruitmentfiltersr   r   r   r(   rP   rq   r   r   r   r$   r%   r&   <module>r      s    # , - 4 ' 6 4 >  / . 8 .z29:1< 1 31 .z29:P P 3Pf .z29:  3B .z29:sO s 3sl .z29:q% q 3qh .z29:5. 5 35p .z29:#/ # 3#r%   