
    siA                        d 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 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mZ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(m)Z)m*Z*m+Z+ ddl,m-Z-  eed       e e"d      d       G d de                     Z. eed       e e"d      d       G d de                    Z/ eed       e e"d      d       G d de                    Z0 eed       G d de             Z1 G d d e1      Z2 eed       e e"d      d       G d! d"e                    Z3 G d# d$e      Z4y%)&z
CBV of projects page
    )Any)messages)Q)HttpResponse)reverse)method_decorator)cached_property)gettext_lazy)ListView)Employee)_thread_locals)login_requiredpermission_required)HorillaCardViewHorillaFormViewHorillaListViewHorillaNavViewTemplateView)$is_projectmanager_or_member_or_perms)ProjectFilter)ProjectForm)any_project_managerany_project_member is_project_manager_or_super_useryou_dont_have_permission)Projectdispatch)nameproject.view_projectc                       e Zd ZdZdZy)ProjectsViewz
    for projects page
    zcbv/projects/projects.htmlN)__name__
__module____qualname____doc__template_name     8/var/www/python-projects/worksol/project/cbv/projects.pyr!   r!   &   s    
 1Mr(   r!   c                   R     e Zd ZdZdZ e       ZdZddgZdZ	dZ
ded	d
f fdZ xZS )ProjectsNavViewz
    Nav bar
    formz#listContainerstatus	is_activezcbv/projects/project_nav.htmlzcbv/projects/filter.htmlkwargsreturnNc                    t        |   di | t        d      | _        | j                  j
                  j                  d      rHt        d      ddt        d      ddt        d      d	dt        d
      ddt        d      ddg| _        ddt        d      ddddt        d      ddg| _	        | j                  j
                  j                  d      rdt        d       d| _
        y y )Nproject-list-viewr   Importz
                        id="importProject"
                        data-toggle="oh-modal-toggle"
                        data-target="#projectImport"
                        style="cursor: pointer;"
                        )actionattrsExportzu
                        id="exportProject"
                        style="cursor: pointer;"
                        Archivez
                        id="archiveProject"
                        style="cursor: pointer;"
                        onclick="validateProjectIds(event);"
                        data-action="archive"
                        z
Un-archivez
                        id="unArchiveProject"
                        style="cursor: pointer;"
                        onclick="validateProjectIds(event);"
                        data-action="unarchive"
                        Deletea/  
                        class="oh-dropdown__link--danger"
                        data-action ="delete"
                        id="deleteProject"
                        onclick="validateProjectIds(event);"
                        style="cursor: pointer; color:red !important"
                        listzlist-outlinez?
                        title ='List'
                        )typeiconurlr5   cardzgrid-outlineproject-card-viewzC
                          title ='Card'
                          project.add_projecta&  
                                onclick = "event.stopPropagation();"
                                data-toggle="oh-modal-toggle"
                                data-target="#genericModal"
                                hx-target="#genericModalBody"
                                hx-get="zcreate-projectz""
                                r'   )super__init__r   
search_urlrequestuserhas_perm_actions
view_typescreate_attrsselfr/   	__class__s     r)   rA   zProjectsNavView.__init__B   s'   "6"!"56
 <<%%&<=  k  k  	l  o  k	G-DL` &23	 &23	
$ <<%%&;<%)
 *11A)B(C D!!$D =r(   )r"   r#   r$   r%   filter_form_context_namer   filter_instancesearch_swap_targetgroup_by_fieldsr&   filter_body_templater   rA   __classcell__rL   s   @r)   r+   r+   2   sN    
  &#oO)-O3M5O$ O$ O$ O$r(   r+   c            	            e Zd ZdZeZeZ fdZde	ddf fdZ
ed        Zed        Zd	 ed
      dfd ed      dfd ed      dfd ed      dfd ed      dfd ed      dfgZdZdZ xZS )ProjectsListz
    Projects list view
    c                 t   t         |          }| j                  j                  j	                  d      su| j                  j                  j
                  }|j                  t        |      t        |      z        }|j                  t        |      t        |      z        }||z  }|j                         S Nr   task__task_members)task__task_managers)managersmembers	r@   get_querysetrC   rD   rE   employee_getfilterr   distinctrK   querysetemployeetask_filterproject_filterrL   s        r)   r_   zProjectsList.get_queryset       7')||  ))*@A||((55H"//X.x1PPK &__Q-AAhDW-WXN"^3H  ""r(   r/   r0   Nc                     t        |   di | t        d      | _        | j                  j
                  j                  rd| _        y y )Nr2   rG   r'   )r@   rA   r   rB   rC   rD   is_superuseraction_methodrJ   s     r)   rA   zProjectsList.__init__   s@    "6"!"56<<))!*D *r(   c           
      ~   | j                         j                  j                  } |d      j                  df |d      j                  df |d      j                  df |d      j                  df |d      j                  df |d	      j                  d	f |d
      j                  df |d      j                  dfgS )Ntitler[   get_managersr]   get_membersr-   get_status_display
start_dateend_datedocumentget_document_htmldescriptionget_descriptionmodel_meta	get_fieldverbose_namerK   rz   s     r)   columnszProjectsList.columns   s    JJL&&00	w,,g6z"//@y!..>x --/CD|$11<@z"//<z"//1DE}%224EF	
 		
r(   c                     | j                         j                  j                  } |d      j                  df |d      j                  df |d      j                  dfgS )Nrm   rq   rr   rw   r|   s     r)   sortby_mappingzProjectsList.sortby_mapping   s\    JJL&&00	w,,g6|$11<@z"//<
 	
r(   new--dotNew
            onclick="
                $('#applyFilter').closest('form').find('[name=status]').val('new');
                $('#applyFilter').click();
            "
            in-progress--dotIn progress
            onclick="
                $('#applyFilter').closest('form').find('[name=status]').val('in_progress');
                $('#applyFilter').click();

            "
            completed--dot	Completed
            onclick="
                $('#applyFilter').closest('form').find('[name=status]').val('completed');
                $('#applyFilter').click();

            "
            on-hold--dotOn Hold
            onclick="
                $('#applyFilter').closest('form').find('[name=status]').val('on_hold');
                $('#applyFilter').click();

            "
            cancelled--dot
            onclick="
                $('#applyFilter').closest('form').find('[name=status]').val('cancelled');
                $('#applyFilter').click();

            "
            expired--dotExpired
            onclick="
                $('#applyFilter').closest('form').find('[name=status]').val('expired');
                $('#applyFilter').click();

            "
            status-{status}z,
                {redirect}
                )r"   r#   r$   r%   r   rx   r   filter_classr_   r   rA   r	   r}   r   rF   row_status_indicationsrow_status_class	row_attrsrR   rS   s   @r)   rU   rU      s    
 E L	#+ + + 
 
 
 
 eH		
 m
	
 kN
	
 iL
	
 kN
	
 iL
	
oBH )Ir(   rU   c                        e Zd ZdZeZeZ ed      dz   ej                  j                  z   Z fdZ fdZdedef fdZ xZS )	ProjectFormViewz&
    form view for create project
    Create c                     t        |   di | | j                  j                  }|j                  s|j                  d      sd| _        y y y )Nr?   zdecorator_404.htmlr'   )r@   rA   rC   rD   rj   rE   r&   )rK   r/   rD   rL   s      r)   rA   zProjectFormView.__init__  sH    "6"||    7L)M!5D *N r(   c                     t        |   di |}| j                  j                  j                  r>t        d      dz   | j                  j                  j                  z   | j                  _        |S )NUpdater   r'   )
r@   get_context_datar,   instancepkrF   rx   ry   r{   
form_class)rK   r/   contextrL   s      r)   r   z ProjectFormView.get_context_data%  s\    '*4V499  (c!DJJ$4$4$A$AA OO( r(   r,   r0   c                 4   |j                         r|j                  j                  rt        | j                  j                   d      }| j
                  j                  j                  dd       }|rPd|v rL|j                          t        j                  | j
                  |       | j                  d      S t        d      }|j                          t        j                  | j
                  t        |             | j                         S t        | 5  |      S )Nz UpdatedHTTP_REFERERz
task-view/z)<script>window.location.reload()</script>zNew project created)is_validr   r   rF   r,   rC   METAgetsaver   successr   r@   
form_valid)rK   r,   messager   rL   s       r)   r   zProjectFormView.form_valid-  s    ==?}}tyy112(;<#||0044^TJLL$@IIK$$T\\7;,,C  12IIKT\\1W:6$$&&w!$''r(   )r"   r#   r$   r%   r   rx   r   r   rF   ry   r{   new_display_titlerA   r   r   r   rR   rS   s   @r)   r   r     sT     EJ(c)EKK,D,DD6({ (| ( (r(   r   c                       e Zd ZdZy)DynamicProjectCreationFormViewTN)r"   r#   r$   is_dynamic_create_viewr'   r(   r)   r   r   @  s    !r(   r   c            	            e Zd ZdZeZeZ fdZde	ddf fdZ
ddd	d
ZdZd ed      dfd ed      dfd ed      dfd ed      dfd ed      dfd ed      dfgZdZ xZS )ProjectCardViewz
    For card view
    c                 t   t         |          }| j                  j                  j	                  d      su| j                  j                  j
                  }|j                  t        |      t        |      z        }|j                  t        |      t        |      z        }||z  }|j                         S rW   r^   rc   s        r)   r_   zProjectCardView.get_querysetQ  rh   r(   r/   r0   Nc                    t        |   di | t        d      | _        | j                  j
                  j                  d      sc| j                  j
                  j                  d      s>t        | j                  j
                        st        | j                  j
                        rddddddd	dd
dddg| _	        y y )Nr>   zproject.change_projectzproject.delete_projectEditz7project.cbv.accessibility.project_manager_accessibilitya5  
                            hx-get='{get_update_url}'
                            hx-target='#genericModalBody'
                            data-toggle="oh-modal-toggle"
                            data-target="#genericModal"
                            class="oh-dropdown__link"
                            )r4   accessibilityr5   archive_statusz
                    href="{get_archive_url}"
                    onclick="return confirm('Do you want to {archive_status} this project?')"
                    class="oh-dropdown__link"
                    r8   a  
                    onclick="
                                event.stopPropagation()
                                deleteItem({get_delete_url});
                                "
                    class="oh-dropdown__link oh-dropdown__link--danger"
                    r'   )
r@   rA   r   rB   rC   rD   rE   r   r   rG   rJ   s     r)   rA   zProjectCardView.__init__\  s    "6"!"56LL&&'?@||  ))*BC"4<<#4#45!$,,"3"34 %%^ 
 /%^ '%^
+ DL 5r(   
get_avatarz{get_task_badge_html}zVStatus : {get_status_display} <br> Start date : {start_date} <br>End date : {end_date})	image_srcrm   subtitler   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   z.
                 {redirect}
                 )r"   r#   r$   r%   r   rx   r   r   r_   r   rA   detailscard_status_classrF   card_status_indications
card_attrsrR   rS   s   @r)   r   r   E  s    
 E L	#) ) )X "(lG
 * eH		
 m
	
 kN
	
 iL
	
 kN
	
 iL
	
oBFJr(   r   c                   0     e Zd ZeZdZdZd Z fdZ xZ	S )ProjectsTabViewzcbv/projects/project_tab.htmlprojectsc                     | j                   j                  d      }t        j                  j	                  t        |      t        |      z  t        |      z  t        |      z        }|j                         S )Nr   )managerr\   rX   )task__task_manager)r/   r   r   objectsra   r   rb   )rK   r   rd   s      r)   r_   zProjectsTabView.get_queryset  sh    [[__T"??))bMm2&' 2&'
   ""r(   c                     t        |   di |}| j                  j                  d      }|rCt        j
                  j                  |      j                         }|j                         }||d<   |S )Nr   )idre   r'   )	r@   r   r/   r   r   r   ra   rb   first)rK   r/   r   r   	employeesre   rL   s         r)   r   z ProjectsTabView.get_context_data  sg    '*4V4[[__T" ((//2/6??AI (H"*GJr(   )
r"   r#   r$   r   rx   r&   context_object_namer_   r   rR   rS   s   @r)   r   r     s"    E3M$# r(   r   N)5r%   typingr   django.contribr   django.db.modelsr   django.httpr   django.urlsr   django.utils.decoratorsr   django.utils.functionalr	   django.utils.translationr
   rF   django.views.genericr   employee.modelsr   horilla.horilla_middlewaresr   horilla_views.cbv_methodsr   r   horilla_views.generic.cbv.viewsr   r   r   r   r   project.cbv.cbv_decoratorsr   project.filtersr   project.formsr   project.methodsr   r   r   r   project.modelsr   r!   r+   rU   r   r   r   r   r'   r(   r)   <module>r      s    #  $  4 3 6 ) $ 6 I  L ) %  # .z2()?@z1< 1 31 .z2()?@z[$n [$ 3[$| .z2()?@zx? x 3xv .z2((o (( 3((V"_ "
 .z2()?@zJo J 3JJh r(   