o
    P+h"6                     @   s   d dl mZ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mZ dd	lmZ dd
lmZ d dlmZmZmZmZmZmZ d dlZd dlm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S )    )renderredirectget_object_or_404)login_required)messages)HttpResponseForbidden)reverse)timezone)SumCount   )LeaveRequest)LeaveRequestForm)notify_leave_submissionnotify_leave_hr_approvalnotify_leave_hr_rejectionnotify_leave_registrar_approval notify_leave_registrar_rejectionnotify_leave_upcomingN)JsonResponsec                 C   s  | j jjdkr"| jddkrtdddddS t| d td	S | j	d
krt
| j}| r|jdd}| j j|_|j|j jd }|jdkr|jj|jj }||kr|  t|| d d| d}| jddkrutd|ddS t| | td	S d| d}| jddkrtd|dddS t| | n?| j jjdkrd|_| j j|_t |_d|_|  t| d}| jddkrtd|ddS t| | td	S nt
 }t| dd|iS )z,Handle leave request creation for employees.REGzX-Requested-WithXMLHttpRequestFz'Registrar cannot submit leave requests.)successerrori  statushomePOST)commitr   ANNrequestzLeave request for z days submitted successfully.T/)r   messager   zYou only have z leave days available.i  HRHR_APPROVEDzAuto-approved (HR request)z%Leave request submitted successfully.zleave/request_form.htmlform)useremployeeroleheadersgetr   r   r   r   methodr   r   is_validsaveend_date
start_datedays
leave_typeannual_leave_daysaccumulated_leave_daysr   r   r   hr_approved_byr	   nowhr_approved_at
hr_commentr   )r!   r&   leave_requestr1   available_dayssuccess_messageerror_message r=   "/var/www/html/wtlms/leave/views.pyrequest_leave   sx   





@r?   c                 C   s0  | j j}|jdvrt| d tdS |jdkr"tjjdd}d}n	tjjdd}d	}| j	d
kr| j
d}| j
d}| j
dd}|r|rtt|d}|jdkr|dkrtd|_||_t |_||_t| d t|| d nd|_||_t| d t|| d nz|jdkr|dkrd|_||_t |_||_|jdkr|j|j jd }|j}||jkr| j|8  _n||j }	| j|	8  _d|_|   t| d t!|| d |jt "  jdkrt#|| d nd|_||_t| d t$|| d |   tt%dS ||j|d}
t&| d|
S )z,Handle leave approvals for HR and Registrar.r$   r   z/You do not have permission to approve requests.r   r$   PENDINGr   zPending Leave Requestsr%   zHR Approved Leave Requestsr   
request_idactioncomment idapprovez'Request approved and sent to Registrar.r    HR_REJECTEDzRequest rejected.r   REG_APPROVEDr   r   r   zLeave request approved.REG_REJECTEDzleave:approve)requestsr)   titlezleave/approvals.html)'r'   r(   r)   r   r   r   r   objectsfilterr,   r   r+   r   r   r5   r	   r6   r7   r8   r   r   warningr   registrar_approved_byregistrar_approved_atregistrar_commentr2   r/   r0   r1   r3   r4   r.   r   dater   r   r   r   )r!   r(   rL   rM   rB   rC   rD   r9   
days_taken	remainingcontextr=   r=   r>   approve_leavee   st   







rX   c                 C   sv   t t|d}| jj|jkr| jjjdvrt S d||j| jj|jko&|jdv | jjjdk| jjjdkd}t| d|S )	NrF   r@   zLeave Request Details)REJECTEDrA   r$   r   )rM   r!   r(   can_editis_hris_registrarzleave/view_request.html)r   r   r'   r(   r)   r   r   r   )r!   rB   r9   rW   r=   r=   r>   view_request   s   	r]   c              
   C   s   t jj| jjdddddd}| |jdd |jd	d |jd
d |jddgd tdd |jd
dD d}d||d}t	| d|S )z.View for users to see their own leave requests)r(   employee__userhr_approved_by__userregistrar_approved_by__userz-start_datez-created_atrA   r   r%   rJ   rI   rK   )
status__inc                 s   s    | ]}|j V  qd S )N)r1   ).0r!   r=   r=   r>   	<genexpr>   s    zmy_requests.<locals>.<genexpr>)total_requestspending_requestshr_approved_requestsreg_approved_requestsrejected_requests
total_dayszMy Leave Requests)rM   rL   statszleave/my_requests.html)
r   rN   rO   r'   r(   select_relatedorder_bycountsumr   )r!   rL   rj   rW   r=   r=   r>   my_requests   s,   

ro   c                 C   s&  t t|d}| jj|jkrt| d tdS |jdvr&t| d tdS | jdkrt	| j
|d}| r|jdv rPd	|_d
|_d
|_d|_d
|_d
|_d|_| }|jd	krw|jddv rwddlm} ||| d t| d tdS t| d tdS nt	|d}d||d}t| d|S )zAAllow employees to edit their rejected or pending leave requests.rF   z0You do not have permission to edit this request.leave:my_requestsrA   rI   rK   zThis request cannot be edited.r   )instance)rI   rK   rA   NrE   r   r   )r   r    z3Leave request updated successfully and resubmitted.z#Leave request updated successfully.zEdit Leave Request)rM   r&   r9   zleave/edit_request.html)r   r   r'   r(   r   r   r   r   r,   r   r   r-   r5   r7   r8   rQ   rR   rS   r.   initialr+   notifications.utilsr   r   r   )r!   rB   r9   r&   r   rW   r=   r=   r>   edit_request   sB   



ru   c                 C   sn   t t|d}| jj|jkrt| d tdS |jdvr)t| d td|jdS |	  t
| d tdS )	zCAllow employees to delete their rejected or pending leave requests.rF   z2You do not have permission to delete this request.rp   rq   zThis request cannot be deleted.zleave:view_request)rB   z#Leave request deleted successfully.)r   r   r'   r(   r   r   r   r   rG   deleter   )r!   rB   r9   r=   r=   r>   delete_request$  s   
rw   )$django.shortcutsr   r   r   django.contrib.auth.decoratorsr   django.contribr   django.httpr   django.urlsr   django.utilsr	   django.db.modelsr
   r   modelsr   formsr   rt   r   r   r   r   r   r   jsonr   r?   rX   r]   ro   ru   rw   r=   r=   r=   r>   <module>   s0     
R
Z


1