3

\                 @   s   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mZmZ d dlmZ d dlmZmZ d dlmZ ed	d
ddg\ZZZeddZeddZeddZG dd deZG dd deZG dd deZG dd deZdS )    )settings)messages)get_object_or_404redirect)gettext_lazy)
CreateView
DetailViewListViewView)review_added)get_classes	get_model)redirect_to_referrerzcatalogue.reviews.formsProductReviewFormVoteFormSortReviewsFormreviewsvoteProductReview	catalogueproductc                   sd   e Zd ZdZeZeZeZ	e
Z fddZ fddZ fddZ fdd	Zd
d Zdd Z  ZS )CreateProductReviewz"catalogue/reviews/review_form.htmlc                sr   t | j|d d| _| jj|js^| jj|jr:td}ntd}tj| j	| t
| jj S t j|f||S )N
product_pk)pkz'You have already reviewed this product!z*You can't leave a review for this product.)r   product_modelr   is_review_permitteduserhas_review_by_r   warningrequestr   get_absolute_urlsuperdispatch)selfr    argskwargsmessage)	__class__ =/var/www/html/oscar2019/oscar/apps/catalogue/reviews/views.pyr#      s    
zCreateProductReview.dispatchc                s   t  jf |}| j|d< |S )Nr   )r"   get_context_datar   )r$   r&   context)r(   r)   r*   r+   *   s    
z$CreateProductReview.get_context_datac                s$   t  j }| j|d< | jj|d< |S )Nr   r   )r"   get_form_kwargsr   r    r   )r$   r&   )r(   r)   r*   r-   /   s    

z#CreateProductReview.get_form_kwargsc                s"   t  j|}| j| j|| j |S )N)r"   
form_validsend_signalr    object)r$   formresponse)r(   r)   r*   r.   5   s    zCreateProductReview.form_validc             C   s   t j| jtd | jj S )Nz$Thank you for reviewing this product)r   successr    r   r   r!   )r$   r)   r)   r*   get_success_url:   s    z#CreateProductReview.get_success_urlc             C   s   | j j| ||j||d d S )N)senderreviewr   r    r2   )view_signalsendr   )r$   r    r2   r6   r)   r)   r*   r/   ?   s    zCreateProductReview.send_signal)__name__
__module____qualname__template_namer   modelProductr   r   
form_classr   r7   r#   r+   r-   r.   r4   r/   __classcell__r)   r)   )r(   r*   r      s   r   c                   s(   e Zd ZdZdZeZ fddZ  ZS )ProductReviewDetailz$catalogue/reviews/review_detail.htmlr6   c                s(   t  jf |}tt| jd d|d< |S )Nr   )r   r   )r"   r+   r   r>   r&   )r$   r&   r,   )r(   r)   r*   r+   I   s    z$ProductReviewDetail.get_context_data)	r9   r:   r;   r<   context_object_namer   r=   r+   r@   r)   r)   )r(   r*   rA   D   s   rA   c               @   s   e Zd ZdZdd ZdS )AddVoteViewz
    Simple view for voting on a review.

    We use the URL path to determine the product and review and use a 'delta'
    POST variable to indicate it the vote is up or down.
    c       	      O   s   t t| jd d}t t| jd d}t||j|j}|j rt|jrP|j	|j n|j
rb|j|j tj|td n.x,|jj D ]}x|D ]}tj|| qW qW t||j S )Nr   )r   r   zThanks for voting!)r   r>   r&   r   r   r   POSTis_valid
is_up_votevote_upis_down_vote	vote_downr   r3   r   errorsvalueserrorr   r!   )	r$   r    r%   r&   r   r6   r1   
error_listmsgr)   r)   r*   postX   s    
zAddVoteView.postN)r9   r:   r;   __doc__rO   r)   r)   r)   r*   rC   P   s   rC   c                   s>   e Zd ZdZdZdZeZeZ	e
jZdd Z fddZ  ZS )ProductReviewListz&
    Browse reviews for a product
    z"catalogue/reviews/review_list.htmlr   c             C   sd   | j jj j| jd d}t| jj| _| jjrZ| jj	 rZ| jj
d }|tjkrZ|jdS |jdS )Nr   )r   sort_byz-date_createdz-score)r=   objectsapprovedfilterr&   r   r    GETr1   rE   cleaned_dataSORT_BY_RECENCYorder_by)r$   qsrR   r)   r)   r*   get_querysett   s    

zProductReviewList.get_querysetc                s4   t  jf |}t| j| jd d|d< | j|d< |S )Nr   )r   r   r1   )r"   r+   r   r   r&   r1   )r$   r&   r,   )r(   r)   r*   r+   }   s
    
z"ProductReviewList.get_context_data)r9   r:   r;   rP   r<   rB   r   r=   r>   r   r   OSCAR_REVIEWS_PER_PAGEpaginate_byr[   r+   r@   r)   r)   )r(   r*   rQ   j   s   	rQ   N) django.confr   django.contribr   django.shortcutsr   r   django.utils.translationr   r   Zdjango.views.genericr   r   r	   r
   $oscar.apps.catalogue.reviews.signalsr   oscar.core.loadingr   r   oscar.core.utilsr   r   r   r   Voter   r>   r   rA   rC   rQ   r)   r)   r)   r*   <module>   s"   


0