
    si                         d dl 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mZ d dlmZ d dlmZmZmZ d	 Zd
 Zd Zd Zd Zd Zd Zd Zd Zed        Zd Zd Zd Zd Z d Z!d Z"d Z#d Z$y)    N)messages)	Paginator)HttpResponseHttpResponseRedirect)render)get_paginationget_subordinates)Employee)ProjectTask	TimeSheetc                       fdS )Nc                        fdS )Nc                      | gi S N )funcargs	decoratorkwargss    3/var/www/python-projects/worksol/project/methods.py<lambda>z,<lambda>.<locals>.<lambda>.<locals>.<lambda>   s    9<<<     r   )r   r   r   s   ``r   r   z<lambda>.<locals>.<lambda>   s
     / r   r   )r   s   `r   r   r      s
      r   c                 |    g d}t        d t        |t        t        | j	                  d                  D              S )z
    this method is used to reconvert time in H:M formate string back to seconds and return it
    args:
        time : time in H:M format
    )i  <      c              3   ,   K   | ]  \  }}||z    y wr   r   ).0abs      r   	<genexpr>z"strtime_seconds.<locals>.<genexpr>   s     EAq1uEs   :)sumzipmapintsplit)timeftrs     r   strtime_secondsr*      s0     CES#c4::c?*C!DEEEr   c                 P    t        | t                     }|j                  |      } | S )zA
    This method is used to generate common paginator limit.
    )r   r   get_page)qrysetpage_number	paginators      r   paginator_qryr0      s(     &."23I,FMr   c                      t        j                  dd      } t        j                  dd      }t        j                  dd      }| |k(  s
||k(  s|| k(  r
t                d|  d| d| dS )Nr      zrgba(z, z , 0.7))randomrandintrandom_color_generator)rgr    s      r   r5   r5   &   sf    q#Aq#Aq#AAva16 1#Rs"QCw''r   c                     g d}| t        |      kD  r5t        | t        |      z
        D ]  }|j                  t                       g }t        |       D ]"  }|j                  ||t        |      z            $ |S )N)zrgba(255, 99, 132, 1)zrgba(54, 162, 235, 1)zrgba(255, 206, 86, 1)zrgba(75, 192, 192, 1)zrgba(153, 102, 255, 1)zrgba(255, 159, 64, 1))lenrangeappendr5   )
num_colorscolor_paletteicolorss       r   generate_colorsr@   1   s    M C&&zC$667 	;A  !7!9:	; F: =mAM(:$:;<= Mr   c                 n    | j                   }|j                  j                         j                         ryyNTF)employee_getproject_managersallexistsuseremployees     r   any_project_managerrJ   H   s.      H  $$&--/r   c                 n    | j                   }|j                  j                         j                         ryyrB   )rC   project_membersrE   rF   rG   s     r   any_project_memberrM   P   s.      H##%,,.r   c                 n    | j                   }|j                  j                         j                         ryyrB   )rC   task_setrE   rF   rG   s     r   any_task_managerrP   X   s.      H%%'r   c                 n    | j                   }|j                  j                         j                         ryyrB   )rC   tasksrE   rF   rG   s     r   any_task_memberrS   `   s,      H~~""$r   c                       fd}|S )Nc                 $   | j                   }|j                        s,t        |      s!t        |      st	        |      st        |      r | g|i |S t        j                  | d       t        | j                  j                  dd            S )zU
        This method is used to check the employee is project manager or not
        zYou don't have permission.HTTP_REFERER/)rH   has_permrJ   rM   rP   rS   r   infor   METAget)requestr   r   rH   functionperms       r   	_functionz7is_projectmanager_or_member_or_perms.<locals>._functionj   sz     ||MM$"4(!$'%t$G5d5f55g;<#GLL$4$4^S$IJJr   r   )r]   r^   r_   s   `` r   $is_projectmanager_or_member_or_permsr`   h   s    K  r   c                 t   | j                   j                  d      s| j                   j                  t        j                  j                  |      j                  j                         v sN| j                   j                  t        j                  j                  |      j                  j                         v ryy)I
    This method is used to check the employee is task member or not
    zproject.change_taskidTF)	rH   rX   rC   r   objectsr[   task_managersrE   task_membersr\   task_ids     r   is_task_memberrj   }   s    
 	34<<$$(8(8G(8(D(R(R(V(V(XX<<$$(8(8G(8(D(Q(Q(U(U(WWr   c                     | j                   j                  d      sN| j                   j                  t        j                  j                  |      j                  j                         v ryy)rb   zproject.delete_taskrc   TF)rH   rX   rC   r   re   r[   rf   rE   rh   s     r   is_task_managerrl      sP    
 	34<<$$(8(8G(8(D(R(R(V(V(XXr   c                 z   | j                   j                  d      s| j                   j                  t        j                  j                  |      j                  k(  s^t        j                  j                  |      j                  t        j                  j                  | j                   j                        v ryy)Nzproject.change_timesheetrc   )(employee_work_info__reporting_manager_idTF)	rH   rX   rC   r   re   r[   employee_idr
   filter)r\   time_sheet_ids     r   time_sheet_update_permissionsrr      s    89<<$$  M 2>>?  M 2>>""5<\\5N5N # 


 r   c                    | j                   j                  }t        j                  j	                  |      j                         }| j                   j                  d      se|j                  |k(  sV||j                  j                  j                         v s0||j                  j                  j                  j                         v ryy)Nrc   zproject.delete_timesheetTF)rH   rC   r   re   rp   firstrX   ro   ri   rf   rE   projectmanagers)r\   rq   rI   	timesheets       r   time_sheet_delete_permissionsrx      s    ||((H!!((M(:@@BI89  H,y((66::<<y((0099==??r   c                  j   t         j                  j                         } t        j                  j                         }t	               }| D ]b  }|j                  d |j                  j                         D               |j                  d |j                  j                         D               d |D ]b  }|j                  d |j                  j                         D               |j                  d |j                  j                         D               d t        j                  j                  |      S )Nc              3   4   K   | ]  }|j                     y wr   rc   )r   managers     r   r!   z7get_all_project_members_and_managers.<locals>.<genexpr>   s      
"GJJ
   c              3   4   K   | ]  }|j                     y wr   rc   )r   members     r   r!   z7get_all_project_members_and_managers.<locals>.<genexpr>   s     EVvyyEr|   c              3   4   K   | ]  }|j                     y wr   rc   )r   task_managers     r   r!   z7get_all_project_members_and_managers.<locals>.<genexpr>   s      
 ,LOO
r|   c              3   4   K   | ]  }|j                     y wr   rc   )r   task_members     r   r!   z7get_all_project_members_and_managers.<locals>.<genexpr>   s      
*KNN
r|   )id__in)r   re   rE   r   setupdaterv   membersrf   rg   r
   rp   )all_projects	all_tasksall_idsru   tasks        r   $get_all_project_members_and_managersr      s   ??&&(L  "IeG F 
&-&6&6&:&:&<
 	
 	Ew/B/B/DEE	F  
 
040B0B0F0F0H
 	
 	 
.2.?.?.C.C.E
 	
	
 ""'"22r   c                 r    t               }t        |       }|D ch c]  }| c}}|D ]  }||v s y yc c}w )zM
    used to check whether the project contain users subordinates or not
    TF)r   r	   )r\   all_members_infosubordinatesr~   subordinates        r   has_subordinatesr      sK     <=#G,L#34f4F# &   5s   	4c                     | j                   j                  |j                  j                         v xs | j                   j                  S )z[
    Method to check whether user is a manager of project or
    user is a super user.
    )rH   rC   rv   rE   is_superuser)r\   ru   s     r    is_project_manager_or_super_userr      s9     	!!W%5%5%9%9%;;Xw||?X?Xr   c                     t        j                  | d       | j                  j                  dd      }d}|| j                  j	                         v rt        | d      S d| d}t        |      S )z3
    Method to return you dont have permission
    zYou dont have permission.rV   rW   HTTP_HX_REQUESTzdecorator_404.htmlz <script>window.location.href = "z
"</script>)r   rY   rZ   r[   keysr   r   )r\   previous_urlkeyscripts       r   you_dont_have_permissionr      sj     MM'67<<##NC8L
C
gll!!g344/~ZHFr   )%r3   django.contribr   django.core.paginatorr   django.httpr   r   django.shortcutsr   base.methodsr   r	   employee.modelsr
   project.modelsr   r   r   decorator_with_argumentsr*   r0   r5   r@   rJ   rM   rP   rS   r`   rj   rl   rr   rx   r   r   r   r   r   r   r   <module>r      s     # + : # 9 $ 3 3 F(.  (
	30 
 r   