
    si                     r    d dl 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 Zd Zd	 Zdd
Zd Zd Zy)    N)datetime	timedelta)apps)Q)Employee)get_horilla_model_classc                     | |k(  r|dk(  r|dk(  rdS dS || z
  j                   dz
  }|dk(  rdnd}|dk(  rdnd}||z   |z   S )Nfull_day         ?)days)
start_dateend_datestart_date_breakdownend_date_breakdownmiddle_daysstart_day_valueend_day_values          1/var/www/python-projects/worksol/leave/methods.pycalculate_requested_daysr      sw     X $z16HJ6V 	
 	
 j(..2K 0:=a3O+z9AsM(=88    c                     g }| D ]Q  }|j                   |j                  xs }|j                  fdt        |z
  j                  dz         D               S |S )zE
    :return: This function returns a list of all holiday dates.
    c              3   :   K   | ]  }t        |      z     y wN)r   ).0iholiday_start_dates     r   	<genexpr>z%holiday_dates_list.<locals>.<genexpr>'   s"      
 1-
s   r   )r   r   extendranger   )holidaysholiday_datesholidayholiday_end_dater   s       @r   holiday_dates_listr%      sq     M 
$//"++A/A 
,/AAGG!KL
 	

 r   c                    t               }|j                  }| D ]4  }|j                  }|j                  }t	        dd      D ]	  }t        j                  ||      }|t        j                  d       	 |t        |         D 	cg c]
  }	|	dk7  s	|	 }
}	|
D ]K  }	t        |||	      }|j                         t        |      k(  s-|j                  |j                                M t        j                  d       |D ]L  }|t        |         dk7  st        |||t        |               }|j                  |j                                N  7 t        |      S c c}	w # t        $ r Y ,w xY w)zJ
    :return: This function returns a list of all company leave dates
    r         r   )setyearbased_on_weekbased_on_week_dayr    calendarmonthcalendarsetfirstweekdayintr   weekdayadddate
IndexErrorlist)company_leavesr   company_leave_datesr*   company_leaver+   r,   monthmonth_calendarday	week_daysr3   weeks                r   company_leave_dates_listr>   .   su    %??D' =%33);;1b\ 	=E%33D%@N(((+	'5c-6H'I! #STUX!I !  ) A'eS9<<>S1B-CC/33DIIK@A ((+* =DC 123q8'eT#>O:P5QR+//		<='	=	=8 #$$#! " s0   3E!
EE0E!!E!E!!	E.-E.c                 J   t        dd      }ddlm} |j                  j	                         }|j                  j                  |       j                  t        |      t        d      z        j                         rf|j                  j                  |       j                  t        |      t        d      z        }|D ]  }||j                  j                         z  }! |j                  j                  d	| d	
      j                  |j                  dd	            }|S )zG
    This function returns a queryset of attendance on leave dates
    
attendance)	app_labelmodelr   )CompensatoryLeaveRequest)employee_id)idrejected)statusT)
is_holidayrD   attendance_validatedrE   )flat)id__in)r   leave.modelsrC   objectsnonefilterexcluder   existsattendance_idallvalues_list)employeecomp_id
AttendancerC   attendances_to_excludecomp_leave_reqsreqholiday_attendances           r   get_leave_day_attendancer\   S   s    )<|TJ5'//446 	!((//H/E	g*!55	6		 3::AA  B 

'!w-!:"66
7 	 # 	>C"c&7&7&;&;&=="	> $++22XD 3 g+7747HgI  r   c                 d   d}t        j                  d      rddlm} |D ]  }|j                  j                  | |j                        j                         s9|j                  j                  | |j                        j                         j                  }|dk(  r|dz  }|dk(  s|dz  } |S )	zG
    This function returns count of workrecord from the attendance
    r   r@   )WorkRecords)rD   r3   HDPr   FDPr   )
r   is_installedattendance.modelsr^   rM   rO   attendance_daterQ   firstwork_record_type)rU   attendancesattendance_daysr^   r@   re   s         r   rg   rg   m   s     O&1% 	)J""))$:+E+E * fh  ''..$,:3M3M /  UW%% ! $u,#s*O%.#q(O	) r   c                    t         j                  j                  | j                        j	                         }g }t        j                  d      r%ddlm}m	} |j                  j                  |      }nd}|D ]  }|j                  dkD  r||j                  dz
  }|j                  }j                  j                  ||      j	                         }|s[|j                  sh|j                  |j                  j                         |j                  |j                  j                          j                  j                  |	      S )
z
    Filters and returns LeaveRequest objects that have been conditionally approved by the previous sequence of approvals.
    )employee_user_idleaver   )LeaveRequestLeaveRequestConditionApproval)
manager_idNr   )leave_request_idsequence)pk__in)r   rM   rO   userrd   r   ra   rL   rk   rl   ro   rn   is_approvedappendrE   )	requestapproval_managerleave_request_idsrk   rl   multiple_approval_requestsinstancepre_sequencern   s	            r    filter_conditional_leave_requestrz      s.     ''...MSSU!L%B%J%J%Q%Q' &R &
"
 &*". 
Cq #,,q0L'884<<CC!1L D eg  H00!(()B)B)E)EF$$X%>%>%A%AB
C &&.?&@@r   r   )r-   r   r   django.appsr   django.db.modelsr   employee.modelsr   horilla.methodsr   r   r%   r>   r\   rg   rz    r   r   <module>r      s7     (   $ 39("%J44Ar   