
    siN                        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	 ddlm
Z
mZmZmZ ddlmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZm Z m!Z!m"Z"m#Z# ddl$mZm%Z%m&Z&  G d	 d
e%      Z' G d de%      Z( G d de%      Z) G d de%      Z* G d d      Z+ G d d      Z, G d d      Z- G d d      Z. G d de%      Z/ G d de      Z0 G d de      Z1 G d d e%      Z2 G d! d"e%      Z3 G d# d$e%      Z4 G d% d&e%      Z5 G d' d(e      Z6 G d) d*e%      Z7 G d+ d,e      Z8 G d- d.e%      Z9 G d/ d0e%      Z: G d1 d2e%      Z; G d3 d4e      Z< G d5 d6e%      Z= G d7 d8e%      Z> G d9 d:e%      Z?y);z
This module contains custom Django filters for filtering querysets related to Shift Requests,
Work Type Requests, Rotating Shift and Rotating Work Type Assign.
    N)forms)Q)gettext)
CharFilter
DateFilter	FilterSetfilters)AnnouncementAnnouncementViewCompanyCompanyLeaves
DepartmentDynamicEmailConfigurationEmailLogEmployeeShiftEmployeeShiftScheduleEmployeeTypeHolidaysJobPositionMultipleApprovalConditionPenaltyAccountsRotatingShiftRotatingShiftAssignRotatingWorkTypeRotatingWorkTypeAssignShiftRequestWorkTypeWorkTypeRequest)r   HorillaFilterSetfilter_by_namec                   n    e Zd ZdZ ej
                  d ej                  ddi            Z ej
                  dd ej                  ddi            Z	 ej
                  dd	 ej                  ddi            Z
 ee
      Z ej                  dd      Z G d d      Zdddd fdZd Z xZS )ShiftRequestFilterz+
    Custom filter for Shift Requests.
    requested_datetypedateattrs
field_namewidgetgter)   lookup_exprr*   ltemethodfilter_requestedz
Requested?r0   labelc                        e Zd ZdZdZeZg dZy)ShiftRequestFilter.MetaT
        A nested class that specifies the model and fields for the filter.
        __all__)idemployee_idr#   previous_shift_idshift_idrequested_tillapprovedcanceled employee_id__employee_first_nameemployee_id__employee_last_nameemployee_id__is_activeemployee_id__gender0employee_id__employee_work_info__job_position_id.employee_id__employee_work_info__department_id-employee_id__employee_work_info__work_type_id1employee_id__employee_work_info__employee_type_id,employee_id__employee_work_info__job_role_id5employee_id__employee_work_info__reporting_manager_id+employee_id__employee_work_info__company_id)employee_id__employee_work_info__shift_idN)__name__
__module____qualname____doc__fieldsr   model     0/var/www/python-projects/worksol/base/filters.pyMetar5   @   s    	 
rR   rT   Nrequestprefixc                   t         |   ||||       | j                  j                  j	                         D ]E  }t        j                          | j                  j                  |   j                  j                  d<   G y NdataquerysetrV   rW   r8   	super__init__formrO   keysuuiduuid4r*   r'   selfr[   r\   rV   rW   field	__class__s         rS   r_   zShiftRequestFilter.__init__^   j    dXwvVYY%%**, 	KE<@JJL>DIIU#**006	KrR   c                 0    |r|j                  dd      S |S zk
        Filters the queryset to return entries where 'approved' is False and 'canceled' is False.
        F)r=   r>   filterre   r\   namevalues       rS   r1   z#ShiftRequestFilter.filter_requestedc        ??EE?BBrR   NN)rK   rL   rM   rN   django_filtersr   r   	DateInputr#   requested_date__gterequested_date__lter   r    searchBooleanFilter	requestedrT   r_   r1   __classcell__rg   s   @rS   r"   r"   (   s     /^..#OEOO66BR,SN 4.33#uff%56
 4.33#uff%56
 ~.F,,,!I
 
<KD K
rR   r"   c                   n    e Zd ZdZ ej
                  d ej                  ddi            Z ej
                  dd ej                  ddi      	      Z	 ej
                  dd
 ej                  ddi      	      Z
 ej                  dd      Z ee      Z G d d      Zdddd fdZd Z xZS )WorkTypeRequestFilterz/
    Custom filter for Work Type Requests.
    r#   r$   r%   r&   r(   r<   r+   r,   r.   filter_by_requested	Requestedr2   r/   c                        e Zd ZdZdZeZg dZy)WorkTypeRequestFilter.Metar6   r7   )r8   r9   r#   previous_work_type_idr=   work_type_idr>   r?   r@   rA   rB   rC   rD   rE   rF   rG   rH   rI   rJ   N)rK   rL   rM   rN   rO   r   rP   rQ   rR   rS   rT   r      s    	 
rR   rT   NrU   c                   t         |   ||||       | j                  j                  j	                         D ]E  }t        j                          | j                  j                  |   j                  j                  d<   G y rY   r]   rd   s         rS   r_   zWorkTypeRequestFilter.__init__   rh   rR   c                 0    |r|j                  dd      S |S rj   rk   rm   s       rS   r}   z)WorkTypeRequestFilter.filter_by_requested   rp   rR   rq   )rK   rL   rM   rN   rr   r   r   rs   r#   rt   ru   rw   rx   r   r    rv   rT   r_   r}   ry   rz   s   @rS   r|   r|   l   s     /^..#OEOO66BR,SN 4.33#uff%56
 4.33#uff%56
 -,,$KI ~.F
 
:KD K
rR   r|   c                       e Zd ZdZ ee      Z ej                  d e	j                  ddi            Z ej                  d e	j                  ddi            Z G d	 d
      Zy)RotatingShiftAssignFiltersz2
    Custom filter for Rotating Shift Assign.
    r/   next_change_dater$   r%   r&   r(   
start_datec                        e Zd ZdZdZeZg dZy)RotatingShiftAssignFilters.Metar6   r7   )r9   rotating_shift_idr   r   based_onrotate_after_dayrotate_every_weekendrotate_everycurrent_shift
next_shift	is_activerC   rD   rE   rF   rG   rH   rI   rJ   N)rK   rL   rM   rN   rO   r   rP   rQ   rR   rS   rT   r      s    	 #
rR   rT   NrK   rL   rM   rN   r   r    rv   rr   r   r   rs   r   r   rT   rQ   rR   rS   r   r      n     ~.F0~00%oeooVVDT.U +**vv>N(OJ
 
rR   r   c                       e Zd ZdZ ee      Z ej                  d e	j                  ddi            Z ej                  d e	j                  ddi            Z G d	 d
      Zy)RotatingWorkTypeAssignFilterz6
    Custom filter for Rotating Work Type Assign.
    r/   r   r$   r%   r&   r(   r   c                        e Zd ZdZdZeZg dZy)!RotatingWorkTypeAssignFilter.Metar6   r7   )r9   rotating_work_type_idr   r   r   r   r   r   current_work_typenext_work_typer   rC   rD   rE   rF   rG   rH   rI   rJ   N)rK   rL   rM   rN   rO   r   rP   rQ   rR   rS   rT   r      s    	 &
rR   rT   Nr   rQ   rR   rS   r   r      r   rR   r   c                       e Zd ZdZg dZy)ShiftRequestReGroup:
    Class to keep the field name for group by option
    ) Selectr9   Employee)r;   zRequested Shift)r:   zCurrent Shiftr#   zRequested DateNrK   rL   rM   rN   rO   rQ   rR   rS   r   r     s    FrR   r   c                       e Zd ZdZg dZy)WorkTypeRequestReGroupr   )r   r   )r   zRequested Work Type)r   Current Work Typer   rD   r   )rC   zJob PositionrH   zReporting ManagerNr   rQ   rR   rS   r   r         	FrR   r   c                       e Zd ZdZg dZy)RotatingWorkTypeRequestReGroupr   )r   r   )r   zRotating Work Type)r   r   r   zBased Onr   rG   zJob Roler   Nr   rQ   rR   rS   r   r   %  r   rR   r   c                       e Zd ZdZg dZy)RotatingShiftRequestReGroupr   )r   r   )r   zRotating Shiftr   r   r   r   Nr   rQ   rR   rS   r   r   6  s    FrR   r   c                   L    e Zd Z ej                  d      Z G d d      Zd Zy)MultipleApprovalConditionFiltersearch_methodr/   c                       e Zd ZeZdgZy)$MultipleApprovalConditionFilter.Meta
departmentN)rK   rL   rM   r   rP   rO   rQ   rR   rS   rT   r   J  s    )
rR   rT   c                 B    |j                  |      j                         S )z:
        This method is used to search department
        )!department__department__icontainsrl   distinctre   r\   _ro   s       rS   r   z-MultipleApprovalConditionFilter.search_methodP  s    
 %HRRTTrR   NrK   rL   rM   rr   r   rv   rT   r   rQ   rR   rS   r   r   F  s$    &^&&o>F
 
UrR   r   c                   H    e Zd Z ej                  dd      Z G d d      Zy)EmployeeShiftFilteremployee_shift	icontainsr)   r-   c                       e Zd ZeZdgZy)EmployeeShiftFilter.Metar   N)rK   rL   rM   r   rP   rO   rQ   rR   rS   rT   r   ^  s    
rR   rT   NrK   rL   rM   rr   r   rv   rT   rQ   rR   rS   r   r   X  s#    &^&&#F
 
rR   r   c                   H    e Zd Z ej                  dd      Z G d d      Zy)EmployeeShiftScheduleFilterday__dayr   r   c                       e Zd ZeZg Zy) EmployeeShiftScheduleFilter.MetaN)rK   rL   rM   r   rP   rO   rQ   rR   rS   rT   r   i  s    %rR   rT   Nr   rQ   rR   rS   r   r   e  s     &^&&*+VF rR   r   c                   L    e Zd Z ej                  d      Z G d d      Zd Zy)RotatingShiftFilterr   r/   c                       e Zd ZeZg dZy)RotatingShiftFilter.Meta)rn   shift1shift2N)rK   rL   rM   r   rP   rO   rQ   rR   rS   rT   r   u  s    -rR   rT   c                     |j                  |      |j                  |      z  |j                  |      z  j                         S )G
        This method is used to search employees and objective
        name__icontains)!shift1__employee_shift__icontains)!shift2__employee_shift__icontainsr   r   s       rS   r   z!RotatingShiftFilter.search_methody  sH     OOEO2oooFGoooFG (*		rR   Nr   rQ   rR   rS   r   r   n  s%    
 '^&&o>F. .	rR   r   c                   L    e Zd Z ej                  d      Z G d d      Zd Zy)DepartmentViewFilterfilter_by_all_fieldsr/   c                       e Zd ZeZdgZy)DepartmentViewFilter.Metar   N)rK   rL   rM   r   rP   rO   rQ   rR   rS   rT   r     s    
rR   rT   c                 n    |j                  t        |      t        |      z        j                         S )N)department__icontains)%job_position__job_position__icontainsrl   r   r   rm   s       rS   r   z)DepartmentViewFilter.filter_by_all_fields  s1    E*e<=
 (*	rR   NrK   rL   rM   rr   r   rv   rT   r   rQ   rR   rS   r   r     s$    &^&&.DEF
 
rR   r   c                   H    e Zd Z ej                  dd      Z G d d      Zy)WorkTypeFilter	work_typer   r   c                       e Zd ZeZdgZy)WorkTypeFilter.Metar   N)rK   rL   rM   r   rP   rO   rQ   rR   rS   rT   r     s    
rR   rT   Nr   rQ   rR   rS   r   r     s     &^&&+;WF
 
rR   r   c                   L    e Zd Z ej                  d      Zd Z G d d      Zy)RotatingWorkTypeFilterr   r/   c                     |j                  |      |j                  |      z  |j                  |      z  j                         S )r   r   ) work_type1__work_type__icontains) work_type2__work_type__icontainsr   r   s       rS   r   z$RotatingWorkTypeFilter.search_method  sH     OOEO2oouoEFoouoEF (*		rR   c                       e Zd ZeZg dZy)RotatingWorkTypeFilter.Meta)rn   
work_type1
work_type2N)rK   rL   rM   r   rP   rO   rQ   rR   rS   rT   r     s     5rR   rT   N)rK   rL   rM   rr   r   rv   r   rT   rQ   rR   rS   r   r     s#    &^&&o>F	6 6rR   r   c                   H    e Zd Z ej                  dd      Z G d d      Zy)EmployeeTypeFilteremployee_typer   r   c                       e Zd ZeZdgZy)EmployeeTypeFilter.Metar   N)rK   rL   rM   r   rP   rO   rQ   rR   rS   rT   r     s    
rR   rT   Nr   rQ   rR   rS   r   r     s#    &^&&"F
 
rR   r   c                   L    e Zd Z ej                  d      Z G d d      Zd Zy)JobRoleFilterr   r/   c                       e Zd ZeZdgZy)JobRoleFilter.Metajob_positionN)rK   rL   rM   r   rP   rO   rQ   rR   rS   rT   r     s    
rR   rT   c                 n    |j                  t        |      t        |      z        j                         S )N)job_position__icontains)jobrole__job_role__icontainsr   rm   s       rS   r   z"JobRoleFilter.filter_by_all_fields  s,    e,qe/TT

(*	rR   Nr   rQ   rR   rS   r   r     s$    &^&&.DEF
 
rR   r   c                   8    e Zd Z ed      Zd Z G d d      Zy)CompanyFilterr   r/   c                 &   |j                  |      |j                  |      z  |j                  |      z  |j                  |      z  |j                  |      z  |j                  |      z  |j                  |      z  j                         S )zE
        This method is used to search company and objective
        )company__icontains)hq__icontains)address__icontains)country__icontains)state__icontains)city__icontains)zip__icontainsr   r   s       rS   r   zCompanyFilter.search_method  s     OOuO5ooEo23ooo78 ooo78 oouo5	6
 ooeo45 ooUo34 (*	rR   c                       e Zd ZeZg dZy)CompanyFilter.Meta)companyhqaddresscountrystatecityzipN)rK   rL   rM   r   rP   rO   rQ   rR   rS   rT   r    s    PrR   rT   N)rK   rL   rM   r   rv   r   rT   rQ   rR   rS   r   r     s    /FQ QrR   r   c                   L    e Zd Z ej                  d      Z G d d      Zd Zy)MailServerFilterr   r/   c                       e Zd ZeZdgZy)MailServerFilter.MetausernameN)rK   rL   rM   r   rP   rO   rQ   rR   rS   rT   r    s    )rR   rT   c                 B    |j                  |      j                         S )z4
        This method is used to mail server
        )username__icontainsr   r   s       rS   r   zMailServerFilter.search_method  s    
 U;FFHHrR   Nr   rQ   rR   rS   r  r    s$    &^&&o>F IrR   r  c                   X    e Zd ZdZ ej
                  dd      Z edd ej                  ddi	      
      Z
 edd ej                  ddi	      
      Z edd ej                  ddi	      
      Z edd ej                  ddi	      
      Z G d d      Zdddd fdZ xZS )HolidayFilterz{
    Filter class for Holidays model.

    This filter allows searching Holidays objects based on name and date range.
    rn   r   r   r   r+   r$   r%   r&   r,   end_dater.   exactc                       e Zd ZdZeZddgiZy)HolidayFilter.MetazC
        Meta class defines the model and fields to filter
        	recurringr  N)rK   rL   rM   rN   r   rP   rO   rQ   rR   rS   rT   r    s    	 '
rR   rT   NrU   c                t   t         |   ||||       | j                  j                  j	                         D ]E  }t        j                          | j                  j                  |   j                  j                  d<   G | j                  j                         j                  j                  d      j                   d| j                  j                  d   _        | j                  j                         j                  j                  d      j                   d| j                  j                  d   _        y )	NrZ   r8   r   z From	from_dater  z Tillto_date)r^   r_   r`   rO   ra   rb   rc   r*   r'   rT   rP   _meta	get_fieldverbose_namer3   rd   s         rS   r_   zHolidayFilter.__init__!  s    dXwvVYY%%**, 	KE<@JJL>DIIU#**006	K yy &&00>KKLER 			%+ yy &&00<IIJ%P 			#)rR   rq   )rK   rL   rM   rN   r	   r   rv   r   r   rs   r  r   r   r  rT   r_   ry   rz   s   @rS   r  r    s      W6{KFuff%56I
 uff%56G uff%56J uff%56H
 
	
D 	
 	
rR   r  c                   x    e Zd ZdZ ej
                  dd      Z ej
                  d      Z G d d      Zd	 Z	y
)CompanyLeaveFilterz
    Filter class for CompanyLeaves model.

    This filter allows searching CompanyLeaves objects based on
    name, week day and based_on_week choices.
    based_on_week_dayr   r   filter_week_dayr/   c                   "    e Zd ZdZeZdgdgdZy)CompanyLeaveFilter.MetazE "
        Meta class defines the model and fields to filter
        r  )based_on_weekr&  N)rK   rL   rM   rN   r   rP   rO   rQ   rR   rS   rT   r)  8  s    	 %Y")
rR   rT   c           
         t         j                  j                         }g }g }dt        d      fdt        d      fdt        d      fdt        d      fd	t        d
      fdt        d      fdt        d      fg}d t        d      fdt        d      fdt        d      fdt        d      fdt        d      fd	t        d      fg}|D ]7  \  }	}
|j	                         |
j	                         v s'|j                  |	       9 |D ]  \  }	}
|j	                         |
j	                         v rN|j	                         t        d      j	                         k7  r$|j                  |	       |j                  |      }t|j	                         t        d      j	                         v s|j                  d      } |j                  |      |z  S )N0Monday1Tuesday2	Wednesday3Thursday4Friday5Saturday6SundayAllz
First WeekzSecond Weekz
Third WeekzFourth Weekz
Fifth Week)based_on_week__inT)based_on_week__isnull)based_on_week_day__in)r   objectsnone__lowerappendrl   )re   r\   r   ro   week_qryweekday_valuesweek_values	WEEK_DAYSWEEKS	day_valueday_names              rS   r'  z"CompanyLeaveFilter.filter_week_dayC  s    ((--/"X,"Y- "[/""Z.!"X,"Z.!"X,
	 2e9"\"#"]#$"\"#"]#$"\"#
 $- 	1Ix{{} 00%%i0	1 $) 	GIx{{} 00U[[]biooFW5W""9-#??[?I"U)//"33#???F	G ^DxOOrR   N)
rK   rL   rM   rN   r	   r   rn   rv   rT   r'  rQ   rR   rS   r%  r%  -  sA     7)<+VDW'89F	
 	
PrR   r%  c                   $    e Zd ZdZ G d d      Zy)PenaltyFilterz
    PenaltyFilter
    c                       e Zd ZeZdZy)PenaltyFilter.Metar7   N)rK   rL   rM   r   rP   rO   rQ   rR   rS   rT   rM  j  s    rR   rT   N)rK   rL   rM   rN   rT   rQ   rR   rS   rK  rK  e  s     rR   rK  c                   H    e Zd Z ej                  dd      Z G d d      Zy)MailLogFiltersubjectr   r   c                       e Zd ZeZdZy)MailLogFilter.Metar7   N)rK   rL   rM   r   rP   rO   rQ   rR   rS   rT   rR  s  s    rR   rT   Nr   rQ   rR   rS   rO  rO  o  s     &^&&)UF rR   rO  c                   H    e Zd Z ej                  dd      Z G d d      Zy)AnnouncementFiltertitler   r   c                       e Zd ZeZdZy)AnnouncementFilter.Metar7   N)rK   rL   rM   r
   rP   rO   rQ   rR   rS   rT   rW  |  s    rR   rT   Nr   rQ   rR   rS   rT  rT  x  s     &^&&'{SF rR   rT  c                   H    e Zd Z ej                  dd      Z G d d      Zy)AnnouncementViewFilterannouncementr   r   c                       e Zd ZeZdZy)AnnouncementViewFilter.Metar7   N)rK   rL   rM   r   rP   rO   rQ   rR   rS   rT   r\    s     rR   rT   Nr   rQ   rR   rS   rY  rY    s#    &^&&!{F rR   rY  )@rN   rb   rr   djangor   django.db.modelsr   django.utils.translationr   r@  r   r   r   r	   base.modelsr
   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   horilla.filtersr   r    r"   r|   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r%  rK  rO  rT  rY  rQ   rR   rS   <module>rb     s  
     2 E E     . H GA) AH?, ?D)
!1 )
X)
#3 )
X  " "  U&6 U$

) 

) * .+  
% 
6- 6(

 

$ QI Q0I' I 2
$ 2
j5P) 5PpI $ ) - rR   