U
    {hj'                     @   sT  d dl Z d dl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 d d	lmZ d d
lmZ 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 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 Z+dd Z,dd Z-G dd deZ.G dd deZ/G dd de*Z0G d d! d!e*Z1dS )"    N)forms)get_user_model)ContentType)	CharFieldQ)Cast)reverse)cached_property)gettext)gettext_lazy)DateRangePickerWidgetFilteredModelChoiceFilterWagtailFilterSetget_latest_str)HeaderButton)get_content_type_label)Task	TaskStateWorkflowWorkflowStateget_default_page_content_type)page_permission_policy)get_editable_models   )
ReportViewc                 C   s,   t  }|jjttjjdddd|jS )NZrequested_by__pkTZflat)Zpk__in)r   objectsfiltersetr   values_listorder_byZUSERNAME_FIELD)requestZUser r#   m/var/www/dating/data/www/fatepal.com/env/lib/python3.8/site-packages/wagtail/admin/views/reports/workflows.pyget_requested_by_queryset#   s    r%   c                 C   s&   t | jd}|jtdt dddS )Nchangeid)Zoutput_fieldTr   )r   Z!instances_user_has_permission_foruserr    r   r   )r"   Zpagesr#   r#   r$   get_editable_page_ids_query*   s
     r)   c                 C   s$   t | j}dd tjj|  D S )Nc                 S   s   g | ]
}|j qS r#   )r'   ).0ctr#   r#   r$   
<listcomp>8   s    z1get_editable_content_type_ids.<locals>.<listcomp>)r   r(   r   r   Zget_for_modelsvalues)r"   Zeditable_modelsr#   r#   r$   get_editable_content_type_ids6   s    
r.   c                   @   sj   e Zd ZejededZejedddedffede	j
dZejd	ed
Zdd ZG dd dZdS )WorkflowReportFilterSet
Started atlabelwidgetShowfilter_reviewabletrueAwaiting my reviewAllr2   methodchoicesZempty_labelr3   requested_by)
field_namequerysetc                 C   s.   |r*| j r*| j jr*|jtj| j jd}|S )N)Zcurrent_task_state__in)r"   r(   r   r   r   reviewable_byselfr>   namevaluer#   r#   r$   r5   L   s    z)WorkflowReportFilterSet.filter_reviewablec                   @   s   e Zd ZeZdddddgZdS )zWorkflowReportFilterSet.Meta
reviewableworkflowstatusr<   
created_atN)__name__
__module____qualname__r   modelfieldsr#   r#   r#   r$   MetaU   s   rM   N)rH   rI   rJ   django_filtersDateFromToRangeFilter_r   rG   ChoiceFilterr   RadioSelectrD   ModelChoiceFilterr%   r<   r5   rM   r#   r#   r#   r$   r/   =   s"     	r/   c                   @   s   e Zd ZejededZejededZej	de
j eddZeej ddd	Zejed
ddedffedejdZdd ZG dd dZdS )WorkflowTasksReportFilterSetr0   r1   zCompleted atZworkflow_state__workflowr   )r=   r>   r2   Zid_workflowZ	workflows)r>   Zfilter_fieldZfilter_accessorr4   r5   r6   r7   r8   r9   c                 C   s8   |r4| j r4| j jr4|jtj| j jjdddd}|S )Nr'   Tr   )Zid__in)r"   r(   r   r   r   r?   r    r@   r#   r#   r$   r5   w   s     z.WorkflowTasksReportFilterSet.filter_reviewablec                   @   s    e Zd ZeZddddddgZdS )z!WorkflowTasksReportFilterSet.MetarD   rE   taskrF   
started_atfinished_atN)rH   rI   rJ   r   rK   rL   r#   r#   r#   r$   rM      s   rM   N)rH   rI   rJ   rN   rO   rP   r   rV   rW   rS   r   r   allrE   r   r   rU   rQ   r   rR   rD   r5   rM   r#   r#   r#   r$   rT   Z   s6     	rT   c                       s   e Zd ZdZedZdZeZdZ	dZ
eZdddgZed	ed
edededdZdddddddgZ fddZedd Zdd Zdd Zdd Zd d! Z  ZS )"WorkflowViewz*wagtailadmin/reports/workflow_results.htmlZ	Workflowstaskswagtailadmin_reports:workflowz%wagtailadmin_reports:workflow_resultsaddr&   publishPage/Snippet IDPage/Snippet TypePage/Snippet TitleStatusr0   )content_object.pkcontent_typecontent_objectget_status_displayrG   rE   rb   rc   rd   re   r<   rG   c                    sN   t  jf | | j | _| j| j| j| ji| jd< | jt| jti| jd< d S )Nrd   rc   super__init__Zcustom_field_preprocesscopyZ
FORMAT_CSV	get_titleZFORMAT_XLSXr   rA   kwargs	__class__r#   r$   rh      s      
  zWorkflowView.__init__c                 C   s   t tdtdddgS )NzBy task#wagtailadmin_reports:workflow_tasks	thumbtackZ	icon_namer   r
   r   rA   r#   r#   r$   header_buttons   s    zWorkflowView.header_buttonsc                 C   s   t |S Nr   rA   rd   r#   r#   r$   rj      s    zWorkflowView.get_titlec                 C   s   d tj dS )Nzworkflow-report-{}%Y-%m-%dformatdatetimetodaystrftimers   r#   r#   r$   get_filename   s    zWorkflowView.get_filenamec                 C   sL   t t jt| jd}t t| jd}tj||B 	dd
dddS )N)Zbase_content_type_idZobject_id__in)Zcontent_type_id__inrE   r<   rd   Zcontent_object__latest_revisionz-created_at)r   r   r'   r)   r"   r.   r   r   r   select_relatedprefetch_relatedr!   rA   Zeditable_pagesZeditable_objectsr#   r#   r$   get_queryset   s"      zWorkflowView.get_querysetc                 C   s   dd |D S )Nc                 S   s   g | ]}|j r|qS r#   )rd   r*   objr#   r#   r$   r,      s      z<WorkflowView.decorate_paginated_queryset.<locals>.<listcomp>r#   rA   Zobject_listr#   r#   r$   decorate_paginated_queryset   s    z(WorkflowView.decorate_paginated_queryset)rH   rI   rJ   results_template_namerP   
page_titleheader_iconr/   filterset_classindex_url_nameindex_results_url_namer   permission_policyany_permission_requiredexport_headingslist_exportrh   r	   rt   rj   r}   r   r   __classcell__r#   r#   rm   r$   rY      s:   


	rY   c                	       s   e Zd ZdZedZdZeZdZ	dZ
eZdddgZed	ed
edededdZdddddddddg	Z fddZedd Zdd Zdd Zd d! Zd"d# Z  ZS )$WorkflowTasksViewz0wagtailadmin/reports/workflow_tasks_results.htmlzWorkflow tasksrp   ro   z+wagtailadmin_reports:workflow_tasks_resultsr\   r&   r]   r^   r_   r`   ra   zRequested By) workflow_state.content_object.pkworkflow_state.content_type%workflow_state.content_object.__str__re   workflow_state.requested_byrU   r   r   r   re   r   rV   rW   Zfinished_byc                    sN   t  jf | | j | _| j| j| j| ji| jd< | jt| jti| jd< d S )Nzworkflow_state.content_objectr   rf   rk   rm   r#   r$   rh      s      
  zWorkflowTasksView.__init__c                 C   s   t tdtdddgS )NzBy workflowr[   rZ   rq   rr   rs   r#   r#   r$   rt     s    z WorkflowTasksView.header_buttonsc                 C   s   t |S ru   r   rv   r#   r#   r$   rj     s    zWorkflowTasksView.get_titlec                 C   s   d tj dS )Nzworkflow-tasks-{}rw   rx   rs   r#   r#   r$   r}     s    zWorkflowTasksView.get_filenamec                 C   sL   t t jt| jd}t t| jd}tj||B 	dd
dddS )N)Z$workflow_state__base_content_type_idZworkflow_state__object_id__in)Z#workflow_state__content_type_id__inworkflow_staterU   Zworkflow_state__content_objectZ/workflow_state__content_object__latest_revisionz-started_at)r   r   r'   r)   r"   r.   r   r   r   r~   r   r!   r   r#   r#   r$   r     s&     zWorkflowTasksView.get_querysetc                 C   s   dd |D S )Nc                 S   s   g | ]}|j jr|qS r#   )r   rd   r   r#   r#   r$   r,   ,  s      zAWorkflowTasksView.decorate_paginated_queryset.<locals>.<listcomp>r#   r   r#   r#   r$   r   +  s    z-WorkflowTasksView.decorate_paginated_queryset)rH   rI   rJ   r   rP   r   r   rT   r   r   r   r   r   r   r   r   rh   r	   rt   rj   r}   r   r   r   r#   r#   rm   r$   r      s>   

	r   )2rz   rN   djangor   Zdjango.contrib.authr   Z"django.contrib.contenttypes.modelsr   Zdjango.db.modelsr   r   Zdjango.db.models.functionsr   Zdjango.urlsr   Zdjango.utils.functionalr	   Zdjango.utils.translationr
   r   rP   Zwagtail.admin.filtersr   r   r   Zwagtail.admin.utilsr   Zwagtail.admin.widgets.buttonr   Zwagtail.coreutilsr   Zwagtail.modelsr   r   r   r   r   Zwagtail.permissionsr   Zwagtail.snippets.modelsr   baser   r%   r)   r.   r/   rT   rY   r   r#   r#   r#   r$   <module>   s2   2O