
    vg3                     j   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	m
Z
mZmZ ddlmZmZmZmZmZmZmZ ddl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
      Z  G d 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)gettext)
CharFilter
DateFilter	FilterSetNumberFilterfilters)CompanyLeavesHolidaysPenaltyAccountsRotatingShiftAssignRotatingWorkTypeAssignShiftRequestWorkTypeRequest)r   filter_by_namec                   @    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 G d d      Zdddd fdZ xZS )ShiftRequestFilterz+
    Custom filter for Shift Requests.
    requested_datetypedateattrs
field_namewidgetgter   lookup_exprr   ltemethodc                        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      /var/www/horilla/base/filters.pyMetar#   -   s    	 
r@   rB   Nrequestprefixc                   t         |   ||||       | j                  j                  j	                         D ]E  }t        j                          | j                  j                  |   j                  j                  d<   G y N)dataquerysetrD   rE   r&   	super__init__formr=   keysuuiduuid4r   r   selfrH   rI   rD   rE   field	__class__s         rA   rL   zShiftRequestFilter.__init__K   j    dXwvVYY%%**, 	KE<@JJL>DIIU#**006	Kr@   NNr9   r:   r;   r<   django_filtersr   r   	DateInputr   requested_date__gterequested_date__lter   r   searchrB   rL   __classcell__rT   s   @rA   r   r      s     /^..#OEOO66BR,SN 4.33#uff%56
 4.33#uff%56
 ~.F
 
<KD K Kr@   r   c                   @    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 G d d      Zdddd fdZ xZS )WorkTypeRequestFilterz/
    Custom filter for Work Type Requests.
    r   r   r   r   r   r*   r   r   r   r    c                        e Zd ZdZdZeZg dZy)WorkTypeRequestFilter.Metar$   r%   )r&   r'   r   previous_work_type_idr+   work_type_idr,   r-   r.   r/   r0   r1   r2   r3   r4   r5   r6   r7   r8   N)r9   r:   r;   r<   r=   r   r>   r?   r@   rA   rB   rb   e   s    	 
r@   rB   NrC   c                   t         |   ||||       | j                  j                  j	                         D ]E  }t        j                          | j                  j                  |   j                  j                  d<   G y rG   rJ   rQ   s         rA   rL   zWorkTypeRequestFilter.__init__   rU   r@   rV   rW   r^   s   @rA   r`   r`   Q   s     /^..#OEOO66BR,SN 4.33#uff%56
 4.33#uff%56
 ~.F
 
:KD K Kr@   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.Metar$   r%   )r'   rotating_shift_idrh   ri   based_onrotate_after_dayrotate_every_weekendrotate_everycurrent_shift
next_shift	is_activer1   r2   r3   r4   r5   r6   r7   r8   N)r9   r:   r;   r<   r=   r   r>   r?   r@   rA   rB   rk      s    	 #
r@   rB   Nr9   r:   r;   r<   r   r   r\   rX   r   r   rY   rh   ri   rB   r?   r@   rA   rg   rg      n     ~.F0~00%oeooVVDT.U +**vv>N(OJ
 
r@   rg   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    rh   r   r   r   r   ri   c                        e Zd ZdZdZeZg dZy)!RotatingWorkTypeAssignFilter.Metar$   r%   )r'   rotating_work_type_idrh   ri   rm   rn   ro   rp   current_work_typenext_work_typers   r1   r2   r3   r4   r5   r6   r7   r8   N)r9   r:   r;   r<   r=   r   r>   r?   r@   rA   rB   ry      s    	 &
r@   rB   Nrt   r?   r@   rA   rw   rw      ru   r@   rw   c                       e Zd ZdZg dZy)ShiftRequestReGroup:
    Class to keep the field name for group by option
    ) Selectr'   Employee)r)   zRequested Shift)r(   zCurrent Shiftr   zRequested DateNr9   r:   r;   r<   r=   r?   r@   rA   r~   r~      s    Fr@   r~   c                       e Zd ZdZg dZy)WorkTypeRequestReGroupr   )r   r   )rd   zRequested Work Type)rc   Current Work Typer   r2   
Department)r1   zJob Positionr6   zReporting ManagerNr   r?   r@   rA   r   r          	Fr@   r   c                       e Zd ZdZg dZy)RotatingWorkTypeRequestReGroupr   )r   r   )rz   zRotating Work Type)r{   r   rm   zBased Onr   r5   zJob Roler   Nr   r?   r@   rA   r   r      r   r@   r   c                       e Zd ZdZg dZy)RotatingShiftRequestReGroupr   )r   r   )rl   zRotating Shiftr   r   r   r   Nr   r?   r@   rA   r   r     s    Fr@   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.
    name	icontainsr   r   ri   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)r9   r:   r;   r<   r   r>   r=   r?   r@   rA   rB   r   ?  s    	 '
r@   rB   NrC   c                   t         |   ||||       | j                  j                  j	                         D ]E  }t        j                          | j                  j                  |   j                  j                  d<   G y rG   rJ   rQ   s         rA   rL   zHolidayFilter.__init__I  rU   r@   rV   )r9   r:   r;   r<   r	   r   r\   r   r   rY   	from_dateto_dateri   r   rB   rL   r]   r^   s   @rA   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
 
KD K Kr@   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)r9   r:   r;   r<   r
   r>   r=   r?   r@   rA   rB   r   Z  s    	 %Y")
r@   rB   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appendfilter)rR   rI   _valueweek_qryweekday_valuesweek_values	WEEK_DAYSWEEKS	day_valueday_names              rA   r   z"CompanyLeaveFilter.filter_week_daye  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Or@   N)
r9   r:   r;   r<   r	   r   r   r\   rB   r   r?   r@   rA   r   r   O  sA     7)<+VDW'89F	
 	
Pr@   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.Metar%   N)r9   r:   r;   r   r>   r=   r?   r@   rA   rB   r     s    r@   rB   N)r9   r:   r;   r<   rB   r?   r@   rA   r   r     s     r@   r   )"r<   rO   rX   djangor   django.utils.translationr   r   r   r   r   r   r	   base.modelsr
   r   r   r   r   r   r   horilla.filtersr   r   r`   rg   rw   r~   r   r   r   r   r   r   r?   r@   rA   <module>r      s   
    2 S S   65K 5Kp4KI 4Kn)
 )
X)
9 )
X  " "  ,KI ,K^5P 5PpI r@   