
    sib                     r   d Z ddlZddl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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& ddl'm(Z(m)Z)m*Z* ddl+m,Z, ddl-m.Z. ddl/m0Z0 ddl1m2Z2m3Z3 ddl4m5Z5 ddl6m7Z7 ddl8m9Z9m:Z:m;Z;m<Z<m=Z=m>Z>  ej~                  e@      ZAd ZBd ZCeBe(_B        eCe(_C         ee5d       e edd e.!      d       G d" d#e>                    ZDdd$lEmFZG  ee5d       e edd e.!      d       G d% d&e;                    ZHd' ZIeIe(_I         ee5d       G d( d)e;             ZJ ee5d       G d* d+e:             ZK ee5d       G d, d-e=             ZL ee5d       e edd e.!      d       G d. d/e<                    ZM ee3e0      d1        ZN ee5d       e edd e.!      d       G d2 d3e>                    ZO ee5d       e edd e.!      d       G d4 d5e9                    ZP ee2e(0      dd6d7       ZQy)8z
employee view page
    N)Any)forms)identify_hashermake_password)User)ImproperlyConfigured)transaction)receiver)reversereverse_lazy)method_decorator)gettext_lazy)enter_if_accessible)DefaultAccessibility)enable_profile_edit)is_reportingmanager)EmployeeFilter)BulkUpdateFieldFormEmployeeExportExcelForm)EmployeeEmployeeBankDetailsEmployeeWorkInformation)edit_accessibility)_check_reporting_manager)_thread_locals)post_generic_deletepost_generic_import)login_required)DynamicBulkUpdateForm)HorillaCardViewHorillaDetailedViewHorillaListViewHorillaNavViewHorillaTabViewTemplateViewc                 V    t         j                  }| j                  |j                  v ryy)z!
    Profile edit accessible
    zRevoke Profile Edit AccesszAdd Profile Edit Access)r   requestpkall_edit_accessible_employees)selfr'   s     :/var/www/python-projects/worksol/employee/cbv/employees.py"profile_edit_accessibility_displayr,   ,   s'     $$Gww'777+$    c                 :    t        dd| j                  i      dz   S )z3
    toggle profiel edit access url get method
    zprofile-edit-accessemp_idkwargsz?feature=profile_editr   r(   r*   s    r+   toggle_profile_edit_access_urlr4   6   s%    
 	%x.AB
!	"r-   dispatch)nameemployee_viewemployee.view_employee)featurepermmethodc                   ,     e Zd ZdZdZdef fdZ xZS )EmployeesViewz
    Employees view

    z&cbv/employees_view/view_employees.htmlr1   c                 D    t        |   di |}t               }||d<   |S )Nupdate_fields_form )superget_context_datar   )r*   r1   contextupdate_fields	__class__s       r+   rB   zEmployeesView.get_context_dataU   s-    '*4V4+-(5$%r-   __name__
__module____qualname____doc__template_namer   rB   __classcell__rE   s   @r+   r=   r=   D   s     
 =M  r-   r=   )modelsc                       e Zd ZdZeZeZdZdZ	g dZ
g dZdZdZdgd	gd
gg dg ddgdZej                   eeeej&                  ej(                  ej*                  ej,                  ej.                  ej0                  ej2                  dZdddddddddZdddddddd d!d"	Zd#d#d$Zd%d&iZd%gZi Z d' Z!d(e"d)d*f fd+Z# e$d,      d-d.f e$d/      d0f e$d1      d2f e$d3      df e$d4      d5f e$d6      d7f e$d8      d9f e$d:      d;f e$d<      d=f e$d>      d?f e$d@      dAf e$dB      dCf e$dD      dEf e$dF      dGfgZ%dHZ&dIZ'dJdKiZ(dLZ)g dMZ* xZ+S )NEmployeesListz 
    List view of employees
    zview-containerz(cbv/employees_view/bulk_update_page.html)
experiencegendercountrystatecityzipmarital_statuschildren!employee_work_info__department_id#employee_work_info__job_position_idemployee_work_info__job_role_idemployee_work_info__shift_id employee_work_info__work_type_id(employee_work_info__reporting_manager_id$employee_work_info__employee_type_idemployee_work_info__location employee_work_info__date_joiningemployee_work_info__company_id).badge_idemployee_first_nameemployee_last_nameemployee_user_id__usernameemployee_user_id__passwordemailphoneaddressrS   rT   rU   rV   dobrR   qualificationrQ   rW   rX   emergency_contactemergency_contact_nameemergency_contact_relation	is_activerY   rZ   r[   r^   r\   r]   r_   r`   rb   employee_work_info__emailemployee_work_info__mobilera   %employee_work_info__contract_end_date employee_work_info__basic_salaryemployee_work_info__salary_hour employee_bank_details__bank_name%employee_bank_details__account_numberemployee_bank_details__branchemployee_bank_details__addressemployee_bank_details__countryemployee_bank_details__stateemployee_bank_details__city&employee_bank_details__any_other_code1&employee_bank_details__any_other_code2zEmployee ImportidzDont Alter this columnzEnsure no Duplicate Codesz$Ensure Badge ID with employee exists)malefemaleother)singlemarrieddivorcedz
yyyy-mm-dd)zId | ReferencezBadge IDReporting ManagerGenderzMarital StatuszDate Formats)employee_user_idemployee_work_infoemployee_bank_detailsr^   rY   rZ   r[   r\   r]   r_   rb   2employee_work_info__reporting_manager_id__badge_id-employee_work_info__department_id__department1employee_work_info__job_position_id__job_position)employee_work_info__job_role_id__job_role,employee_work_info__shift_id__employee_shift+employee_work_info__work_type_id__work_type3employee_work_info__employee_type_id__employee_type'employee_work_info__company_id__company)r^   rY   rZ   r[   r\   r]   r_   rb   usernamerc   
departmentjob_positionjob_roleemployee_shift	work_typeemployee_typecompany)	r   r^   rY   rZ   r[   r\   r]   r_   rb   employee_id)r   r   r   employee_getc                 (   t        t        | j                        }t        j                  dt        j
                  ddd            |j                  d<   t        j                  dt        j
                  ddd            |j                  d	<   |S )
z-
        Bulk from generating method
        )
root_modelbulk_update_fieldsFzoh-select oh-select-2zwidth: 100%; height:45px;)classstyle)attrs)requiredwidgetrS   rT   )r   r   r   r   ChoiceFieldSelectfields)r*   forms     r+   get_bulk_formzEmployeesList.get_bulk_form   s    
 %D4K4K
 "'!2!2<<48"
I  %00<<48 
G r-   r1   returnNc                 D    t        |   di | t        d      | _        y )Nemployees-listr@   )rA   __init__r   
search_urlr*   r1   rE   s     r+   r   zEmployeesList.__init__  s     "6"!"23r-   r   employee_name_with_badge_id
get_avatarEmailrh   Phoneri   Badge IdJob PositionrZ   
DepartmentrY   Shiftr\   	Work Typer]   Employee Typer_   Job Roler[   r   r^   Companyrb   
Work Emailrq   Date of Joiningra   employee_actions   actionzG
                   style="width:300px !important;"
                   
                {diff_cell}
                onclick="window.location.href='{get_individual_url}?instance_ids={ordered_ids}'"
                ))r   get_full_namer   )r   rc   )r   7employee_work_info__reporting_manager_id__get_full_name)r   r   )r   r   )r   ra   ),rG   rH   rI   rJ   r   modelr   filter_classview_idbulk_templater   import_fieldsimport_file_nameupdate_referenceimport_helpbase_modelsr   r   r   r   JobPositionJobRoleEmployeeShiftWorkTypeEmployeeTyper   #import_related_model_column_mapping$import_related_column_export_mappingprimary_key_mapping$reverse_model_relation_to_base_modelo2o_related_name_mappingfk_o2o_field_in_base_model
fk_mappingr   r   r   _columnsaction_methodrecords_per_pageheader_attrs	row_attrssortby_mappingrL   rM   s   @r+   rP   rP   _   s<    E!LG>M*0Mb ) 4401DE-;%K (,,5!44<-8-C-C/:/F/F+6+>+>(3(A(A,7,@,@0;0H0H*5*=*=+' 5i-\/b+V(V,Y0e*S	,( '4>-9/=+5(8,70?*3 ,!.,(
 !3NC #5!5J>4 4 4
 
:5|D	
7W	
7W	
:
#	
>	AB	
<=>	
734	
;;<	
?	CD	
:9:	
	!KL	
978	
<56	
	ABG" 'M 	 LINr-   rP   c                 4    t        dd| j                  i      S )z
    Get detailed work url
    zemployee-work-detailedr(   r0   r2   r3   s    r+   get_detailed_work_urlr   K  s     +T477ODDr-   c                       e Zd ZdZeZeZdZdZ	 e
d      df e
d      df e
d      df e
d	      d
f e
d      df e
d      df e
d      df e
d      df e
d      df e
d      df e
d      dfgZ fdZ fdZ xZS )TabEmployeeWorkListz!
    Self Employee Work List
    Fr   rc   r   rZ   r   rY   r   r\   r   r]   r   r_   r   r[   r   r^   r   rb   r   rq   r   ra   c                 2    t        |   di | d| _        y )Nz
        hx-get="{get_detailed_work_url}"
        hx-target="#genericModalBody"
        data-toggle="oh-modal-toggle"
        data-target="#genericModal"
        r@   )rA   r   r   r   s     r+   r   zTabEmployeeWorkList.__init__o  s    "6"r-   c                 v   | j                   j                  j                  d      rAt        |          j                  | j                   j                  j                  d            S t        |   | j                  j                  j                  | j                   j                  j                        d      S )
        Get Queryset
        r8   r(   r   r   T)querysetfiltered)r'   userhas_permrA   get_querysetfilterGETgetr   objectsr   r*   rE   s    r+   r   z TabEmployeeWorkList.get_querysetx  s     <<%%&>?7')00DLL4D4D4H4H4N0OOw#ZZ''..@Q@Q@T@T.U $ 
 	
r-   )rG   rH   rI   rJ   r   r   r   r   filter_selectedshow_filter_tagsr   r   r   r   rL   rM   s   @r+   r   r   U  s     E!LO 
:
#	
>	AB	
<=>	
734	
;;<	
?	CD	
:9:	
	!KL	
978	
<56	
	ABG
 
r-   r   c                        e Zd ZdZ ed      ZeZ ed      df ed      df ed      df ed	      d
f ed      df ed      df ed      df ed      df ed      df ed      df ed      dfgZ fdZ	 xZ
S )EmployeeWorkDetailsz
    Employee Detail View
    Work Informationr   rc   r   rZ   r   rY   r   r\   r   r]   r   r_   r   r[   r   r^   r   rb   r   rq   r   ra   c                 D   | j                   j                  j                  d      r7t        |          j                  | j                  j                  d            S | j                  j                  j                  | j                   j                  j                        S )r   r8   r(   r   r   )r'   r   r   rA   r   r   r1   r   r   r   r   r   s    r+   r   z EmployeeWorkDetails.get_queryset  su     <<%%&>?7')00DKKOOD4I0JJzz!!(($,,:K:K:N:N(OOr-   )rG   rH   rI   rJ   r   titler   r   bodyr   rL   rM   s   @r+   r   r     s      !EE 
:
#	
>	AB	
<=>	
734	
;;<	
?	CD	
:9:	
	!KL	
978	
<56	
	ABDP Pr-   r   c                   *     e Zd ZdZeZg Z fdZ xZS )WorkTabz
    Work Tab
    c                 z    t        |   di | t        d      t        d       dg| j                  z   | _        y )Nr   zemployee-work-tab)r   urlr@   )rA   r   r   r   additional_tabstabsr   s     r+   r   zWorkTab.__init__  sH    "6" -.&':;<

   !	r-   )	rG   rH   rI   rJ   r   r   r   r   rL   rM   s   @r+   r   r     s     EO! !r-   r   c            
            e Zd ZdZdeddf fdZ ed      ZdZ e	       Z
dZd	Zd
 ed      fdd ed      fd ed      fd ed      fd ed      fd ed      fgZ xZS )EmployeeNavz
    For nav bar
    r1   r   Nc           
         t        |   d/i | t        d      | _        dt	        d      fddt	        d      fdt	        d      fd	t	        d
      fdt	        d      fdt	        d      fg| _        | j                  j                  j                  d      rdt        d       d| _
        nd | _
        | j                  j                  j                  d      r}t	        d      ddt	        d      dt        d       ddt	        d      ddt	        d      ddt	        d      d t        d!       d"dt	        d#      d$dt	        d%      d&dg| _        nd | _        d'd(t        d      d)d*d+d,t        d-      d.d*g| _        y )0Nr   r^   r   rY   r   rZ   r   r[   r   r\   r   r]   r   rb   r   zemployee.add_employeez'
                                href="zemployee-view-newz""
                                employee.change_employeeImportz
                    id="work-info-import"
                    data-toggle="oh-modal-toggle"
                    data-target="#workInfoImport"
                    style="cursor: pointer;"
                    )r   r   Exportz
                    data-toggle="oh-modal-toggle"
                    data-target="#employeeExport"
                    hx-get="zemployees-exportzw"
                    hx-target="#employeeExportForm"
                    style="cursor: pointer;"
                    Archivezl
                    id="archiveEmployees"
                    style="cursor: pointer;"
                    z
Un-archivezn
                    id="unArchiveEmployees"
                    style="cursor: pointer;"
                    z	Bulk mailz
                    data-toggle="oh-modal-toggle"
                    data-target="#sendMailModal"
                    hx-get="zemployee-bulk-mailzq"
                    hx-target="#mail-content"
                    style="cursor: pointer;"
                    zBulk Updatezp
                    id="employeeBulkUpdateId"
                    style="cursor: pointer;"
                    Deletez
                    class="oh-dropdown__link--danger"
                    data-action ="delete"
                    id="deleteEmployees"
                    style="cursor: pointer; color:red !important"
                    listzlist-outlinezG
                            title ='List'
                            )typeiconr   r   cardzgrid-outlineemployees-cardzC
                          title ='Card'
                          r@   )rA   r   r   r   r   	search_inr'   r   r   r   create_attrsactions
view_typesr   s     r+   r   zEmployeeNav.__init__  s   "6"!"237;N9OP 3An4EF.*>+QwZ8/;@-q|<
 <<%%&=>%''34G'H&I J!!$D !%D<<%%&@A  k  k" %%789 :	  	l  o  n" %%9:; <	  .  kg<DL|  DL &/0 	 &/0	
r-   	Employeesz'cbv/employees_view/filter_employee.htmlr   z#listContainerrZ   r   r  r\   r   r]   r   r[   r   r^   r   rb   r   )rG   rH   rI   rJ   r   r   r   	nav_titlefilter_body_templater   filter_instancefilter_form_context_namesearch_swap_targetgroup_by_fieldsrL   rM   s   @r+   r  r    s    h
 h
 h
T +ID$&O%)	..0AB	
 
(74	+Q{^<	*AjM:	3Q7J5KL	)1Y<8Or-   r  )senderc                 d    |d   }d }t        j                  ||f      }|j                          y)z"
    Handle bulk user imports
    recordsc                    g }| D ]#  }	 t        |j                        }t        |       % |r`t        j                         5  t        j                  j                  |dg       t        j                  t        |       d       d d d        y y # t        t        f$ r$ t              |_        |j                  |       Y w xY w# 1 sw Y   y xY w)Npasswordz* user passwords were successfully updated.)strr  r   
ValueErrorr   r   appendr	   atomicr   r   bulk_updateloggerinfolen)r  users_to_updateinstancer  s       r+   _set_passwordz4user_generic_import_or_update.<locals>._set_passwordL  s     	1H1x001)		1 ##% ((:,G?+,,VW    45 1$1($;!&&x01 s    BAC0C CC)targetargsN)	threadingThreadstart)r  r1   r  r)  threads        r+   user_generic_import_or_updater0  E  s2    
 YG, ]'DF
LLNr-   c                   ,     e Zd ZdZdZdef fdZ xZS )
ExportViewz
    For candidate export
    z'cbv/employees_view/employee_export.htmlr1   c                     t        |   di |}t        j                  j	                  d      }t               }t        |      }||d<   ||d<   |S )NT)rp   )r   export_formexport_filterr@   )rA   rB   r   r   r   r   r   )r*   r1   rC   employeer4  r5  rE   s         r+   rB   zExportView.get_context_datav  sY    '*4V4##**T*:-/&9!,#0 r-   rF   rM   s   @r+   r2  r2  f  s      >M  r-   r2  c                   D     e Zd ZdZeZeZdeddf fdZ	dddd	Z
d
Z xZS )EmployeeCardz
    For card view
    r1   r   Nc                    t        |   di | t        d      | _        t        j
                  j                  d      j                  dd      | j                  _	        | j                  j                  j                  d      st        | j                        rddd	d
dddddt        d      dddg| _        t        | j                        j!                  d      r | j                  j#                  dddd       y y d | _        y )Nr  profile_edit)r9   employees__pkT)flatr  Editz-employee.cbv.accessibility.edit_accessibilityz
                    onclick="event.stopPropagation()
                    window.location.href='{get_update_url}' "
                    class="oh-dropdown__link"

                )r   accessibilityr   archive_statusz,employee.cbv.accessibility.action_accessiblez
                    hx-confirm="Do you want to {archive_status} this employee?"
                    hx-post="{get_archive_url}"
                    class="oh-dropdown__link"
                    hx-target="#relatedModel"
                    r	  a  
                        onclick="event.stopPropagation()"
                        hx-get="{get_delete_url}?model=employee.Employee&pk={pk}"
                        data-toggle="oh-modal-toggle"
                        data-target="#deleteConfirmation"
                        hx-target="#deleteConfirmationBody"
                        class="oh-dropdown__link"
                        style="cursor: pointer;"
                    profile_edit_enabledr,   z
                        href="{toggle_profile_edit_access_url}"
                        class="oh-dropdown__link"
                        style="cursor: pointer;"
                    r@   )rA   r   r   r   r   r   r   values_listr'   r)   r   r   r   r   r  r   r   r!  r   s     r+   r   zEmployeeCard.__init__  s   "6"!"23 ((///GSSd T  	2
 <<%%&
 . %%T	 /%S	  k%S+"DLF #4<<0445KL##"F)W"
 M  DLr-   r   z{employee_name_with_badge_id}z<span class='oh-kanban-card__subtitle'>{email}</span><span class='oh-kanban-card__subtitle'>{employee_work_info__job_position_id}</span><span class='oh-kanban-card__subtitle'>{offline_online}</span>)	image_srcr   subtitler   )rG   rH   rI   rJ   r   r   r   r   r   r   details
card_attrsrL   rM   s   @r+   r8  r8    sD     E!L;  ;  ; | "0 ]GJr-   r8  )view_instancec                R    |j                   r|j                   j                          yy)zT
    Employee genric post delete signal to handle the deletion of user instance
    N)r   delete)r  r(  rF  r+  r1   s        r+   employee_generic_post_deleterI    s$    
   !!((* !r-   )RrJ   loggingr,  typingr   djangor   django.contrib.auth.hashersr   r   django.contrib.auth.modelsr   django.core.exceptionsr   	django.dbr	   django.dispatchr
   django.urlsr   r   django.utils.decoratorsr   django.utils.translationr   r   accessibility.cbv_decoratorsr   accessibility.modelsr   base.context_processorsr   base.methodsr   employee.filtersr   employee.formsr   r   employee.modelsr   r   r   %employee.templatetags.employee_filterr   employee.viewsr   horilla.horilla_middlewaresr   horilla.signalsr   r   horilla_views.cbv_methodsr   horilla_views.formsr   horilla_views.generic.cbv.viewsr    r!   r"   r#   r$   r%   	getLoggerrG   r$  r,   r4   r=   baserN   r   rP   r   r   r   r   r  r0  r2  r8  rI  r@   r-   r+   <module>re     s       F + 7 ! $ - 4 6 < 5 7 , + G R R D 3 6 D 4 5  
		8	$% /Q +*H ' .z2%'
 
L  3 ' .z2%'
 
`O ` 3`FE "7  .z2-
/ -
 3-
` .z2P- P 3P@ .z2!n ! 3!$ .z2%'
 
.  3D 

d+ ,@ .z2%'
 
  3" .z2%'
 
N? N 3Nb 

h/HL + 0+r-   