3

\                 @   s   d dl 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 d d
lmZ d dlmZ edd\ZZeddZG dd deejZG dd dejZG dd dejZdS )    N)settings)Q)HttpResponseRedirect)reverse)gettext_lazy)generic)get_classes	get_model)format_datetime)sort_queryset)BulkEditMixinzdashboard.reviews.formsProductReviewSearchFormDashboardProductReviewFormreviewsZproductreviewc                   s   e Zd ZeZdZdZeZe	Z
ejZdZdZedZ fddZdd	d
Zdd Zdd Zdd Zdd Z fddZdd Z  ZS )ReviewListViewz"dashboard/reviews/review_list.htmlZreview_listupdate_selected_review_statusreviewzN%(main_filter)s %(date_filter)s %(status_filter)s%(kw_filter)s %(name_filter)sc                s   t  j|f|}| j | _|S )N)superget
form_classform)selfrequestargskwargsresponse)	__class__ =/var/www/html/oscar2019/oscar/apps/dashboard/reviews/views.pyr       s    
zReviewListView.getNc             C   s   |dkr| j jj }|r:|j|d}tdt| | jd< |rp|tjdd }|j|d}tdt| | jd< |r|rtd	t|t|d
 | jd< |S )a  
        Get a ``QuerySet`` of ``ProductReview`` items that match the time
        frame specified by *date_from* and *date_to*. Both parameters are
        expected to be in ``datetime`` format with *date_from* < *date_to*.
        If *queryset* is specified, it will be filtered according to the
        given dates. Otherwise, a new queryset for all ``ProductReview``
        items is created.
        N)Zdate_created__gtez created after %sdate_filter   )days)Zdate_created__ltz created before %sz0 created between %(start_date)s and %(end_date)s)
start_dateend_date)	modelobjectsallfilter_r
   desc_ctxdatetime	timedelta)r   	date_fromdate_toquerysetr   r   r   get_date_from_to_queryset%   s    	z(ReviewListView.get_date_from_to_querysetc             C   s   | j jjddj }t|| jdddg}tdddddd| _| j| jj	| _
| j
j s\|S | j
j}| j||d	 }| j||d
 }| j||d }| j|d |d |}|S )Nproductuserscoretotal_votesdate_createdzAll reviews )main_filterr   status_filter	kw_filtername_filterstatuskeywordnamer,   r-   )r$   r%   select_relatedr&   r   r   r(   r)   r   GETr   is_validcleaned_dataadd_filter_statusadd_filter_keywordadd_filter_namer/   )r   r.   datar   r   r   get_querysetD   s$    

zReviewListView.get_querysetc             C   s8   |dkr4|j |dj }| jj }td| | jd< |S )Nr5   )r:   z with status matching '%s'r7   )r'   distinctr   Zget_friendly_statusr(   r)   )r   r.   r:   Zdisplay_statusr   r   r   rA   _   s
    
z ReviewListView.add_filter_statusc             C   s8   |r4|j t|dt|dB j }td| | jd< |S )N)title__icontains)Zbody__icontainsz with keyword matching '%s'r8   )r'   r   rF   r(   r)   )r   r.   r;   r   r   r   rB   j   s    z!ReviewListView.add_filter_keywordc             C   sp   |rl|j  }t|dkr4|j|d |d dj }n&|jt|d dt|d	 dB j }td| | jd< |S )
N   r   r    )user__first_name__istartswithuser__last_name__istartswith)rI   )rJ   z! with customer name matching '%s'r9   )splitlenr'   rF   r   r(   r)   )r   r.   r<   partsr   r   r   rC   t   s    zReviewListView.add_filter_namec                s8   t  jf |}| j |d< | j|d< | j| j |d< |S )NZreview_formr   description)r   get_context_datareview_form_classr   desc_templater)   )r   r   context)r   r   r   rP      s
    
zReviewListView.get_context_datac             C   s8   t |jjd}x|D ]}||_|j  qW ttdS )z
        Update the status of the selected *reviews* with the new
        status in the *request* POST data. Redirects back to the
        list view of reviews.
        r:   zdashboard:reviews-list)intPOSTr   r:   saver   r   )r   r   r   
new_statusr   r   r   r   r      s
    
z,ReviewListView.update_selected_review_status)r   )N)__name__
__module____qualname__ProductReviewr$   template_namecontext_object_namer   r   r   rQ   r   OSCAR_DASHBOARD_ITEMS_PER_PAGEpaginate_byactionscheckbox_object_namer(   rR   r   r/   rE   rA   rB   rC   rP   r   __classcell__r   r   )r   r   r      s"   

r   c               @   s$   e Zd ZeZdZeZdZdd Z	dS )ReviewUpdateViewz$dashboard/reviews/review_update.htmlr   c             C   s   t dS )Nzdashboard:reviews-list)r   )r   r   r   r   get_success_url   s    z ReviewUpdateView.get_success_urlN)
rX   rY   rZ   r[   r$   r\   r   r   r]   rd   r   r   r   r   rc      s
   rc   c               @   s    e Zd ZeZdZdZdd ZdS )ReviewDeleteViewz$dashboard/reviews/review_delete.htmlr   c             C   s   t dS )Nzdashboard:reviews-list)r   )r   r   r   r   rd      s    z ReviewDeleteView.get_success_urlN)rX   rY   rZ   r[   r$   r\   r]   rd   r   r   r   r   re      s   re   )r   r   ) r*   django.confr   django.db.modelsr   django.httpr   django.urlsr   django.utils.translationr   r(   Zdjango.viewsr   oscar.core.loadingr   r	   oscar.core.utilsr
   oscar.viewsr   oscar.views.genericr   r   r   r[   ListViewr   
UpdateViewrc   
DeleteViewre   r   r   r   r   <module>   s    
 	
