
    sio                        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  G d d      Zd Z ed	d	
      Z edd
      Z edd
      Z edd
      Z edd
      Z edd
      Z edd
      Z edd
      Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd  Zd! Z d" Z!d# Z"d$ Z#ee_        ee_        ee_        ee_        ee_        ee_        ee_        ee_$        ee_        ee_        ee_        e e_         e!e_!        e"e_"        e#e_#        d d%l%m&Z&m'Z' e'jP                  Z)d& Z*e&jP                  Z+d' Z,e*e'_(        e,e&_(         ejZ                  d      rd d(l.m/Z/ e/jP                  Z0d) Z1e1e/_(         ejZ                  d      rd d*l2m3Z3 e3jP                  Z4d+ Z5e5e3_(         ejZ                  d      rdd d,l6m7Z7m8Z8m9Z9m:Z: e:jP                  Z;d- Z<e9jP                  Z=d. Z>e7jP                  Z?d/ Z@e8jP                  ZAd0 ZBe<e:_(        e>e9_(        e@e7_(        eBe8_(         ejZ                  d      r4d d1lCmDZDmEZE eDjP                  ZFd2 ZGeEjP                  ZHd3 ZIeGeD_(        eIeE_(         ejZ                  d      rd d4lJmKZK d d5lLmMZM d d6lNmOZO d d7lPmQZQ d d8lRmSZS d d9lTmUZUmVZV d d:lWmXZY d d;lZm[Z[ d d<l\m]Z] d d=l^m_Z_ d d>l`maZambZbmcZc d d?ldmeZe e[jP                  Zfd@ Zgege[_(        e_j                  ZidA ZjdB ZkdC Zlele__h        e]j                  ZmdD Znene]_h        eajP                  ZodE Zpepea_(        ebjP                  ZqdF Zrereb_(        ecjP                  ZsdG Ztetec_(        eKeU eVdH      dI                      ZueueY_v         ejZ                  dJ      rJd dKlwmxZxmyZy d dLlzm{Z{ dM Z|dN Z}dO Z~dP ZdQ ZeyjP                  ZdR Zeey_(        exjP                  ZdS Zeex_(        yTyT)U    )apps)reverse)format_htmlformat_html_join)gettext_lazyrender_templatec                   "    e Zd ZdZd Zd Zd Zy)
DummyModelz=A dummy fallback class that behaves like a model placeholder.c                      y N selfargskwargss      ;/var/www/python-projects/worksol/horilla_theme/overrides.py__init__zDummyModel.__init__   s        c                     t               S r   r   )r   names     r   __getattr__zDummyModel.__getattr__   
    |r   c                     t               S r   r   r   s      r   __call__zDummyModel.__call__   r   r   N)__name__
__module____qualname____doc__r   r   r   r   r   r   r   r   	   s    Gr   r   c                 Z    	 t        j                  | |      S # t        $ r	 t        cY S w xY wr   )r   	get_modelLookupErrorr   	app_labelmodels     r   get_horilla_model_classr'      s-    ~~i// s    **recruitmentr$   
attendanceattendancelatecomeearlyOutleaveleaverequestpmsMeetingsoffboardingResignationLetterassetAssetAssignmentproject	TimeSheetc                     d| j                          d| j                  j                         j                          d}|S )z<
    This method for get custom column for Total hires.
    z	
        z
 Hired of z Candidates
    )total_hires	candidateallcountr   cols     r   	tot_hiresr<   -   sG    
					Jt~~'9'9';'A'A'C&D EC Jr   c                     | j                   j                         }d}|r(dj                  |D cg c]  }t        |       c}      }|S c c}w )z 
    manager in detail view
     ,<br />)recruitment_managersr8   joinstr)r   	employeesemployee_names_stringemployees       r   managers_detailrF   9   sO     ))--/I )+45xS]5!
 !  6   A	c                     | j                   j                         }d}|r(dj                  |D cg c]  }t        |       c}      }|S c c}w )z"
    open jobs in detail view
    r>   r?   )open_positionsr8   rA   rB   )r   jobsjobs_names_stringjobs       r   open_job_detailrM   G   sK     ""$D%NN+ECH+EF ,FrG   c                     | j                         }|r(t        d      d| j                   z   }t        d||      S t        d      S )zO
    Returns an HTML snippet showing penalty status with Tailwind styling.
    zview-penaltiesz?late_early_id=a,  <div class="bg-red-100/10 border-2 border-red-300 rounded-xl px-4 py-2 w-32 text-xs text-center text-red-700 font-semibold" data-target="#penaltyViewModal" data-toggle="oh-modal-toggle" onclick="event.stopPropagation();"hx-get="{}" hx-target="#penaltyViewModalBody" align="center">Penalties :{}</div>z<div class="bg-green-100/10 border-2 border-green-300 rounded-xl px-4 py-2 w-32 text-xs text-center text-green-700 font-semibold">No Penalties</div>)get_penalties_countr   idr   )r   penalties_counturls      r   penalities_columnrS   T   s^    
 ..0O&'ODGG9*EE"
 
 	
 !
 	
r   c                     | j                   r=| j                  dk(  rt        d      }nt        d      }t        d|| j                         S y)N	cancelledzReason for CancellationzReason for Rejectionaj  
                <div class="w-full p-4 rounded-lg bg-orange-100/20 border border-orange-300 rounded-md">
                    <div>
                        <span class="block text-xs font-medium text-gray-700 mb-1">{}</span>
                        <div class="text-sm text-gray-800 italic">{}</div>
                    </div>
                </div>
            r>   )reject_reasonstatus_r   )r   labels     r   rejected_actionrZ   m   sR    ;;+%/0E,-E 
 	
 r   c                 p    | j                   r*t        d| j                   j                  t        d            S y)Na  
            <a href="{}" target="_blank" class="w-50 bg-gray-100 p-4 flex items-center text-gray-700 text-sm font-medium">
                <ion-icon name="download-outline" class="me-1 text-lg"></ion-icon>
                <span class="ml-1">{}</span>
            </a>
            zView attachmentr>   )
attachmentr   rR   rX   r   s    r   attachment_actionr^      s8     OO 	
 		
 r   c                    | j                         j                  dd      }|dk(  ryt        d      }t        d      }|dk(  rt        d      n
t        d      }t        d	| j                  g
      }t        d|||||      }|S )Nr9   r   r>   zActivities:zView Activities   Activity
Activitieszget-attendance-activitiesr   as  
        <div class="mb-2 flex gap-5 items-center">
            <span class="font-medium text-xs text-[#565E6C] w-32">
                {}
            </span>
            <p class="text-xs font-semibold flex items-center gap-5">
                : <span>
                    <button
                        data-target="#activityViewModal"
                        data-toggle="oh-modal-toggle"
                        hx-get="{}"
                        hx-target="#activityViewModalBody"
                        title="{}"
                        class="flex items-center text-primary-600 text-sm font-semibold transition-colors"
                    >
                        <span>{} {}</span>
                        <ion-icon name="eye-outline" class="text-lg ml-2 mt-[2px]"></ion-icon>
                    </button>
                </span>
            </p>
        </div>
        )
activitiesgetrX   r   rP   r   )r   activity_countrY   
view_labelcount_labelrR   r;   s          r   attendance_detail_activity_colri      s    __&**7A6NmE$%J#1Q#6!J-AlOK
-TWWI
>C
	, 	7C< Jr   c                     | j                   }t        d      }t        d| j                  g      }t	        d|||      }|S )NzView Clasheszview-clashesrc   a/  
            <div onclick="event.stopPropagation();">
                <div class="flex "
                    data-target="#clashModal"
                    data-toggle="oh-modal-toggle"
                    hx-get="{}"
                    hx-target="#clashModalBody"
                    title="{}">

                    <i class="material-icons text-4xl" >groups</i>
                    <span class="w-5 h-5 bg-[#e54f38] rounded-full text-white text-xs font-semibold flex items-center justify-center">{}</span>
                </div>
            </div>
        )leave_clashes_countrX   r   rP   r   )r   r9   rY   rR   r;   s        r   leave_clash_colrl      sJ    $$EnE
.y
1C
	 	#C( Jr   c                      t        dd| i      S )Nz cbv/meetings/mom_detail_col.htmlinstancepathcontextr   r]   s    r   mom_detail_colrr      s    /T" r   c                      t        dd| i      S )Nz-cbv/exit_process/detail_page_description.htmlrn   ro   r   r]   s    r   detail_description_colrt      s    <T" r   c                     | j                   j                         }|syt        d      }t        ddd |D              }t	        d||      }|S )Nr>   zAssign Condition Images  
        <a href="{}" rel="noopener noreferrer" target="_blank">
            <span
                class="oh-file-icon oh-file-icon--pdf"
                onmouseover="enlargeattachment('{}')"
                style="width:40px;height:40px"
            ></span>
        </a>
        c              3   t   K   | ]0  }|j                   j                  |j                   j                  f 2 y wr   imagerR   .0docs     r   	<genexpr>z'assign_condition_img.<locals>.<genexpr>   %     :C#))--	':   68z
        <div class="mb-2">
            <span class="font-medium text-xs text-[#565E6C] w-32">
                {}
            </span>
            <div class="d-flex mt-2 mb-2 gap-2">
                {}
            </div>
        </div>
        )assign_imagesr8   rX   r   r   r   imagesrY   
links_htmlr;   s        r   assign_condition_imgr      c    ##%F'(E!
	 	;6:J 		 	C Jr   c                     | j                   j                         }|syt        d      }t        ddd |D              }t	        d||      }|S )Nr>   zReturn Condition Imagesrv   c              3   t   K   | ]0  }|j                   j                  |j                   j                  f 2 y wr   rx   rz   s     r   r}   z'return_condition_img.<locals>.<genexpr>&  r~   r   z
        <div class="mb-2 ">
            <span class="font-medium text-xs text-[#565E6C] w-32">
                {}
            </span>
            <div class="d-flex mt-2 mb-2 gap-2">
                {}
            </div>
        </div>
        )return_imagesr8   rX   r   r   r   s        r   return_condition_imgr     r   r   c                 t    t        d| j                  | j                  | j                  | j                        }|S )z%
    for subtitle in detail view
    a  
                <div class="grid grid-cols-1 sm:grid-cols-2 gap-2 rounded-md bg-white text-sm text-gray-700">

                    <div>
                        <span class="text-gray-500 mb-2">Date</span><br />
                        <span class="font-semibold">{}</span>
                    </div>

                    <div>
                        <span class="text-gray-500 mb-2">Time Spent</span><br />
                        <span class="font-semibold">{}</span>
                    </div>

                    <div>
                        <span class="text-gray-500 mb-2">Project</span><br />
                        <span class="font-semibold">{}</span>
                    </div>

                    <div>
                        <span class="text-gray-500 mb-2">Task</span><br />
                        <span class="font-semibold">{}</span>
                    </div>


                </div>
            )r   date
time_spent
project_idtask_idr:   s     r   detail_view_subtitler   ;  s9     	4 			=CB Jr   c                     t        d| j                  j                         | j                  j                               }|S )Nao  
            <div class="flex items-center gap-5 mb-5">

                <div>
                    <img src="{}" alt="" class="w-[50px] h-[50px] rounded-full">
                </div>

                <div>
                    <p class="mb-1 text-sm font-semibold">
                        {}
                    </p>
                </div>
            </div>
        )r   employee_id
get_avatarget_full_namer:   s     r   detail_view_titler   c  s>    
	 	##%&&(!C& Jr   )DashboardWorkTypeRequestShiftRequestToApprovec                 *    t        | fi | i | _        y r   )#_shift_request_to_approve_init_origheader_attrsr   r   s     r   _shift_request_to_approve_initr     s    '77Dr   c                 *    t        | fi | i | _        y r   )'_work_type_request_to_approve_init_origr   r   s     r   "_work_type_request_to_approve_initr     s    +D;F;Dr   )MeetingsDetailedViewc                     t        | fi | t        d      dft        d      dft        d      dft        d      dft        d	      d
ft        d      ddfg| _        y )NDater   zQuestion Templatequestion_template	Employeesemploy_detail_colManagersmanager_detail_colzAnswerable employeesanswerable_colzMinutes of Meetingrr   T)_meeting_detailed_init_origrX   bodyr   s     r   _meeting_detailed_initr     sm    #D3F3vY"#%89{^01z]01%&(89#$&6=
	r   )ResignationLetterDetailViewc                     t        | fi | t        d      dft        d      dft        d      ddfg| _        ddi| _        y )	NzPlanned To Leaveplanned_to_leave_onStatus
get_statusDescriptionrt   T   )_resignation_detailed_init_origrX   r   colsr   s     r   _resignation_detailed_initr     sS    '77!"$9:x[,'}7>
	 %b
	r   )TimeSheetCardViewTimeSheetDetailViewTimeSheetListTimeSheetNavViewc                     t        | fi | t        dd| j                  j                  j                  j
                  i       }ddt        d      ddd	t        d
      ddd|dg| _        y )Nzpersonal-time-sheet-viewemp_id)r   listzlist-outlineztime-sheet-list)typeiconrR   cardzgrid-outlineztime-sheet-cardgraphz	bar-chart)_timesheet_nav_init_origr   requestuseremployee_getrP   
view_types)r   r   rR   s      r   _timesheet_nav_initr     s     003HdllFWFWFdFdFgFg;hij &01 &01  #
r   c                 *    t        | fi | d| _        y )N
            hx-get='{detail_view}?instance_ids={ordered_ids}'
            hx-target="#objectDetailsModalTarget"
            data-target="#objectDetailsModal"
            data-toggle="oh-modal-toggle"
        )_timesheet_list_init_orig	row_attrsr   s     r   _timesheet_list_initr     s    !$1&1r   c                 >    t        | fi | d| _        ddd| _        y )Nr   z{detail_view_title}z{detail_view_subtitle})titlesubtitle)_timesheet_card_init_orig
card_attrsdetailsr   s     r   _timesheet_card_initr     s)    !$1&1 +0
r   c                 .    t        | fi | ddi| _        y )Ndescriptionr   )_timesheet_detail_init_origr   r   s     r   _timesheet_detail_initr   
  s    #D3F32
	r   )DashboardaAttendanceOTDashboardAttendanceToValidatec                 *    t        | fi | i | _        y r   )_overtime_attendance_init_origr   r   s     r   _overtime_attendance_initr         &t6v6r   c                 *    t        | fi | i | _        y r   )_validate_attendance_init_origr   r   s     r   _validate_attendance_initr   $  r   r   )login_required)HttpResponse)get_object_or_404)render_to_string)Employee)hx_request_requiredmanager_can_enter)views)LeaveRequestsToApprove)LeaveRequestFormView)MyLeaveRequestForm)LeaveRequestCreationFormLeaveRequestUpdationFormUserLeaveRequestCreationForm)	LeaveTypec                 *    t        | fi | i | _        y r   )#_leave_request_to_approve_init_origr   r   s     r   _leave_request_to_approve_initr   A  s    +D;F;r   c                     | sy t        | j                  h d       t        |        t        | dd       }t	        |      s2t
        j                  j                         }t	        |      r|| _        y y y )N   w-100	oh-selectoh-select-2queryset)	_merge_widget_csswidget_set_field_placeholdergetattr_has_queryset_recordsr   objectsr8   r   )fieldr   fallback_querysets      r   _ensure_leave_type_fieldr   I  sd    %,,(MNu%5*d3$X. ) 1 1 5 5 7$%67!2 8 /r   c                 P    | sy t        | j                  h d       t        |        y )Nr   )r   r   r   )r   s    r   _ensure_employee_fieldr  V  s    %,,(MNu%r   c                 ~    t        | fi |}| j                  j                  j                  d      }t	        |       |S Nleave_type_id)'_my_leave_request_get_context_data_origformfieldsre   r   )r   r   rq   leave_fields       r   "_my_leave_request_get_context_datar	  ]  s8    9$I&Iii&&**?; -r   c                     t        | fi |}| j                  j                  j                  d      }| j                  j                  j                  d      }t	        |       t        |       |S Nr  r   )._leave_request_form_view_get_context_data_origr  r  re   r   r  )r   r   rq   r  employee_fields        r   )_leave_request_form_view_get_context_datar  k  sZ    @PPii&&**?;))--m< -~.r   c                     t        | g|i | | j                  j                  d      }| j                  j                  d      }t        |       t	        |       y r  )&_leave_request_creation_form_init_origr  re   r   r  r   r   r   r  r  s        r   !_leave_request_creation_form_initr  z  H    .tEdEfEkkooo67 -~.r   c                     t        | g|i | | j                  j                  d      }| j                  j                  d      }t        |       t	        |       y r  )&_leave_request_updation_form_init_origr  re   r   r  r  s        r   !_leave_request_updation_form_initr    r  r   c                 n    t        | g|i | | j                  j                  d      }t        |       y r  )+_user_leave_request_creation_form_init_origr  re   r   )r   r   r   r  s       r   &_user_leave_request_creation_form_initr    s.    3DJ4J6Jkkooo6 -r   zleave.add_leaverequestc                 `   | j                   j                  d      }| j                   j                  d      }|dk(  rt               }n
t               }|rat	        t
        |      }t        j                  j                  |j                  j                  dd            }||j                  d   _        n0t        j                  j                         |j                  d   _        t        |j                  j                  d             t        d	|d|j                  d   d
      }t!        |      S )Nr   r  r   )rP   r  T)flat)id__inz)leave/leave_request/leave_type_field.html)r  
field_namer   )GETre   r   r   r   r   r   r   filteravailable_leavevalues_listr  r   noner   r   r   )r   r   	form_namer  rE   assigned_leave_typesleave_type_field_htmls          r   !_patched_get_employee_leave_typesr&    s    kkoom4KKOOF+	22+-D+-D(kBH#,#4#4#;#;//;;ORV;W $< $  5IDKK(14=4E4E4J4J4LDKK(1 !AB 07-_5!
 122r   payroll)GeneratePayslipFormPayslipForm)Contractc           	          t        t        d | j                  j                  dd      j	                                     }dj                  t        |j                  |                  | j                  d<   y )Nclassr>    )setr  attrsre   splitrA   sortedunion)r   required_classesexisting_classess      r   r   r     s_    4))'26<<>?
 !$#))*:;<!
Wr   c                 H    | y	 | j                         S # t        $ r Y yw xY w)NF)exists	Exception)r   s    r   r   r     s/    	??$$ 		s    	!!c                  T   t         j                  j                  d      j                  d      } t	        |       rt        |       S t        t         j                  dd       }t        |      r< |       j                  d      j                  d      } t	        |       rt        |       S g S )Nactive)contract_statusr   entire)r*  r   r  select_relatedr   r   r   callable)	contractsr;  s     r   _get_active_contractsr?    s    $$++H+ETT
	 !+	?"))8T:F1. 
 %Y/I&	r   c                     | j                   j                  j                  d      }|s<| j                  xs t	        d      }t        |      | j                   j                  d<   y y )Nzdata-placeholderzSelect option)r   r/  re   rY   rX   rB   )r   placeholderrY   s      r   r   r     sQ    ll((,,-?@KK51_#5E58ZELL12 r   c                    | y t        | j                        }t        d |D              }|ry t        | dd       }|y d }t	               }|rg }t               }|D ]d  }t        |dd       }	|	rt        |	dd      s |	j                  |v r/|j                  |	j                         |j                  |	j                         f |rt        |j                  dd       }
|
Bt        |
dd       }t        |      r |       j                  |      }n|
j                  |      }|&|j                  j                  j                  |      }||}|j                         }t        |      sy || _        g }t        | d	d       }||j                  d
|f       |D ].  }	|j                  |	j                  | j!                  |	      f       0 || _        y )Nc              3   *   K   | ]  \  }}|d v  yw))r>   NNr   )r{   choice_valuerX   s      r   r}   z2_refresh_payslip_employee_field.<locals>.<genexpr>  s!      
a 
*
s   r   r   	is_activeFr   r;  )pk__inempty_labelr>   )r   choicesanyr   r?  r.  pkaddappendr&   r=  r  _default_managerdistinctr   r   label_from_instance)r   raw_choiceshas_real_choicer   r   r>  employee_idsseencontractrE   managerr;  rH  rG  s                 r   _refresh_payslip_employee_fieldrV    s   =5==) 
#.
 
 5*d3 )+	L5D% 1"8]DAwxe'L;;$&%##HKK01 !(..)TB&$Wh=F',2HOO<O,P),3NN,N,O)$,(0(G(G(N(N+ )O )% $ (-668$%67*e]D9"NNB,-) 	OHNNHKK)B)B8)LMN	Or   c                     t        | g|i | | j                  j                  d      }|sy t        |j                  h d       t        |       t        |       y )Nr   r   )_payslip_form_init_origr  re   r   r   r   rV  )r   r   r   r  s       r   _payslip_form_initrY  -  sR    6t6v67!!#H	
 	~.'7r   c                    t        | g|i | | j                  j                  d      }|sy t        |j                  h d       t        |       t        |dd       }|y t        |      ry t        |j                  dd       }d }|Ft        |dd       }t        |      r |       j                  ddd	      }n|j                  ddd	      }|(|j                  j                  j                  ddd	      }|Ut        t        dd       }|Bt        |dd       }t        |      r |       j                  d
      }n|j                  d
      }|j                         }t        |      sUt        t        dd       }|Bt        |dd       }t        |      r |       j                  d
      }n|j                  d
      }|$t        j                  j                         |_        n|j                         |_        t#        |d      rd |_        y y )Nr   r   r   r   r;  TFr9  )rE  contract_set__isnullcontract_set__contract_status)rE  _choices) _generate_payslip_form_init_origr  re   r   r   r   r   r   r&   r=  r  rM  r   rN  r   r"  r   hasattrr]  )	r   r   r   r  r   rU  r   r;  employee_managers	            r   _generate_payslip_form_initra  >  s   (???7!!#H	
 	~.>:t< *(..)T: Wh5F$*HOO").2: %4 %! %,NN").2: %3 %! $//66").2: 7   $&xDA+ !18TBF#(.$(G%(8(?(?$(?(O%-668$%67&xDA+ !18TBF#(.$(G%(8(?(?$(?(O%$&.&6&6&;&;&=N#&7&@&@&BN#>:.&*N# /r   N)django.appsr   django.urlsr   django.utils.htmlr   r   django.utils.translationr   rX   horilla_views.cbv_methodsr	   r   r'   RecruitmentAttendanceLateComeEarlyOut
AttendanceLeaveRequestr.   r0   r2   r4   r<   rF   rM   rS   rZ   r^   ri   rl   rr   rt   r   r   r   r   penality_colbase.cbv.dashboard.dashboardr   r   r   r   r   r   r   is_installedpms.cbv.meetingsr   r   r   offboarding.cbv.resignationr   r   r   project.cbv.timesheetr   r   r   r   r   r   r   r   r   r   r   r   attendance.cbv.dashboardr   r   r   r   r   r   django.contrib.auth.decoratorsr   django.httpr   django.shortcutsr   django.template.loaderr   employee.modelsr   horilla.decoratorsr   r   r+   r   leave_viewsleave.cbv.dashboardr   leave.cbv.leave_requestsr   leave.cbv.my_leave_requestr   leave.formsr   r   r   leave.modelsr   r   r   get_context_datar  r   r  r	  r  r  r  r  r  r  r  r  r&  get_employee_leave_typespayroll.forms.component_formsr(  r)  payroll.models.modelsr*  r   r   r?  r   rV  rX  rY  r^  ra  r   r   r   <module>r     s     ; 6 5  &]S4">  %|<P
&O"U*E+#6  *GCTU#i{K		!

2**Z:%P%P%P0 . - ! /@  ,,J
 ). !2 - . ( +A  ('; $'; $!5	 /	  Y&;&D&D #
 +C*K*K '
 "@  $F  ! 4U5"6"?"?	
 %;! 4]#G&A&J&J#	
 ,F( 4Y   088
* !. 6 6 !2 : :
 #6">">
 !41M!5#9  4\"
 &<%D%D" &C%K%K" '@#-F!* 4W=(27(I*:== 
 '*@*I*I' 'E#.@.Q.Q+3& +M' 	-- 3	 -V)-E-N-N*/ )J%-E-N-N*/ )J% 	%-- 0. -S )/03 1  3< ,MK( 4YN.
$@; z *228 .K':'C'C$E+N $? G  r   