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 d d	lmZ d d
lmZ d dlmZ d dlmZmZ eddddddddg\ZZZZZZZeddddddg\Z Z!Z"Z#Z$eddZ%G dd dej&Z'G dd  d ej(Z)G d!d" d"ej&Z*G d#d$ d$ej&Z+G d%d& d&e,Z-G d'd( d(ej.Z/G d)d* d*e-ej0Z0G d+d, d,e0Z1G d-d. d.e0Z2G d/d0 d0e0Z3G d1d2 d2e0Z4G d3d4 d4e0Z5G d5d6 d6e0Z6G d7d8 d8e-ej7Z7G d9d: d:e7Z8G d;d< d<e7Z9G d=d> d>e7Z:G d?d@ d@e7Z;G dAdB dBe7Z<G dCdD dDe7Z=G dEdF dFej.Z.G dGdH dHe.Z>G dIdJ dJe.Z?G dKdL dLe.Z@G dMdN dNe.ZAG dOdP dPe.ZBG dQdR dRe.ZCdS )S    N)settings)messages)ContentType)Count)HttpResponseRedirect)HttpResponse)reverse)gettext_lazy)generic)PROMOTION_CLASSES)	get_classget_classeszpromotions.modelsSingleProductRawHTMLImage
MultiImageAutomaticProductListPagePromotionHandPickedProductListzdashboard.promotions.formsZPromotionTypeSelectFormRawHTMLFormPagePromotionFormHandPickedProductListFormSingleProductFormzdashboard.promotions.formsetsOrderedProductFormSetc               @   s   e Zd ZdZdd ZdS )ListViewz(dashboard/promotions/promotion_list.htmlc             C   sR   g }d}x,t D ]$}|jj }||j 7 }|j| qW tj| }||t d}|S )Nr   )num_promotions
promotionsZselect_form)r   objectsallcountappend	itertoolschain
SelectForm)selfdatar   klassr   r   ctx r(   @/var/www/html/oscar2019/oscar/apps/dashboard/promotions/views.pyget_context_data"   s    



zListView.get_context_dataN)__name__
__module____qualname__template_namer*   r(   r(   r(   r)   r      s   r   c               @   s   e Zd ZdZdd ZdS )CreateRedirectViewTc             K   sF   | j jjdd }i }x$tD ]}td|j  ||j < qW |j|d S )NZpromotion_typezdashboard:promotion-create-%s)requestGETgetr   r   	classname)r$   kwargscodeurlsr&   r(   r(   r)   get_redirect_url7   s    
z#CreateRedirectView.get_redirect_urlN)r+   r,   r-   	permanentr7   r(   r(   r(   r)   r/   4   s   r/   c               @   s   e Zd ZdZdd ZdS )PageListViewz,dashboard/promotions/pagepromotion_list.htmlc             O   s(   t jj jdj jtdd}d|iS )Npage_urlid)freqpages)r   r   r   valuesdistinctannotater   )r$   argsr4   r=   r(   r(   r)   r*   C   s    
zPageListView.get_context_dataN)r+   r,   r-   r.   r*   r(   r(   r(   r)   r9   @   s   r9   c               @   s0   e Zd ZdZdd Zdd Zdd Zdd	 Zd
S )PageDetailViewz%dashboard/promotions/page_detail.htmlc             O   s   | j d }|| j|dS )Npath)r:   	positions)r4   get_positions_context_data)r$   rA   r4   rC   r(   r(   r)   r*   L   s    
zPageDetailView.get_context_datac             C   sH   g }x>t jD ]4\}}tjj j||d}|j|||jdd qW |S )N)r:   positiondisplay_order)r5   namer   )r   OSCAR_PROMOTION_POSITIONSr   _default_managerselect_relatedfilterr    order_by)r$   rC   r'   r5   rH   r   r(   r(   r)   rE   Q   s    
z)PageDetailView.get_positions_context_datac             K   s$   t |jjd}| j| tddS )z
        When called with a post request, try and get 'promo' from
        the post data and use it to reorder the page content blocks.
        Zpromo   )status)dictPOSTr2   _save_page_orderr   )r$   r0   r4   r%   r(   r(   r)   post^   s    
zPageDetailView.postc             C   s@   x:t |D ].\}}tjj|d}|j|kr
||_|j  q
W dS )z
        Save the order of the pages. This gets used when an ajax request
        posts backa new order for promotions within page regions.
        )pkN)	enumerater   r   r2   rG   save)r$   r%   indexitempager(   r(   r)   rR   g   s
    
zPageDetailView._save_page_orderN)r+   r,   r-   r.   r*   rE   rS   rR   r(   r(   r(   r)   rB   I   s
   	rB   c               @   s   e Zd Zdd ZdS )PromotionMixinc             C   s   d| j j  dgS )Nz!dashboard/promotions/%s_form.htmlzdashboard/promotions/form.html)modelr3   )r$   r(   r(   r)   get_template_namesu   s    z!PromotionMixin.get_template_namesN)r+   r,   r-   r\   r(   r(   r(   r)   rZ   s   s   rZ   c               @   s   e Zd ZdZeZdd ZdS )DeletePagePromotionViewz.dashboard/promotions/delete_pagepromotion.htmlc             C   s&   t j| jtd tdd| jjidS )Nz"Content block removed successfullyzdashboard:promotion-list-by-urlrC   )r4   )r   infor0   _r   objectr:   )r$   r(   r(   r)   get_success_url~   s    z'DeletePagePromotionView.get_success_urlN)r+   r,   r-   r.   r   r[   ra   r(   r(   r(   r)   r]   z   s   r]   c                   s,   e Zd Zdd Z fddZdd Z  ZS )
CreateViewc             C   s.   t j| jtd td| jj | jjddS )Nz"Content block created successfullyzdashboard:promotion-update)ptyperT   )r4   )	r   successr0   r_   r   r[   r3   r`   r;   )r$   r(   r(   r)   ra      s    zCreateView.get_success_urlc                s   t  j||}| j |d< |S )Nheading)superr*   get_heading)r$   rA   r4   r'   )	__class__r(   r)   r*      s    zCreateView.get_context_datac             C   s$   t | drt| dS td| jj S )Nre   zCreate a new %s content block)hasattrgetattrr_   r[   _type)r$   r(   r(   r)   rg      s    

zCreateView.get_heading)r+   r,   r-   ra   r*   rg   __classcell__r(   r(   )rh   r)   rb      s   rb   c               @   s   e Zd ZeZeZdS )CreateRawHTMLViewN)r+   r,   r-   r   r[   r   
form_classr(   r(   r(   r)   rm      s   rm   c               @   s   e Zd ZeZeZdS )CreateSingleProductViewN)r+   r,   r-   r   r[   r   rn   r(   r(   r(   r)   ro      s   ro   c               @   s   e Zd ZeZdddgZdS )CreateImageViewrH   link_urlimageN)r+   r,   r-   r   r[   fieldsr(   r(   r(   r)   rp      s   rp   c               @   s   e Zd ZeZdgZdS )CreateMultiImageViewrH   N)r+   r,   r-   r   r[   rs   r(   r(   r(   r)   rt      s   rt   c               @   s    e Zd ZeZddddddgZdS )CreateAutomaticProductListViewrH   descriptionrq   	link_textmethodnum_productsN)r+   r,   r-   r   r[   rs   r(   r(   r(   r)   ru      s   
ru   c                   s,   e Zd ZeZeZ fddZdd Z  Z	S )CreateHandPickedProductListViewc                s.   t t| jf |}d|kr*t| jd|d< |S )Nproduct_formset)instance)rf   rz   r*   r   r`   )r$   r4   r'   )rh   r(   r)   r*      s
    z0CreateHandPickedProductListView.get_context_datac             C   sn   |j dd}t| jj|d}|j rX|j   |j   || _tj| jtd t	| j
 S | j|d}| j|S )NF)commit)r|   z"Product list content block created)r{   )rV   r   r0   rQ   is_validr`   r   rd   r_   r   ra   r*   render_to_response)r$   form	promotionr{   r'   r(   r(   r)   
form_valid   s    
z*CreateHandPickedProductListView.form_valid)
r+   r,   r-   r   r[   r   rn   r*   r   rl   r(   r(   )rh   r)   rz      s   rz   c                   sH   e Zd ZdZeZ fddZ fddZdd Zd	d
 Z	dd Z
  ZS )
UpdateViewadd_to_pageremove_from_pagec                s\   t  j||}td|d< | j |d< | j |d< tjj| j}t	jj
|| jjd|d< |S )NzUpdate content blockre   r   	link_form)content_type	object_idlinks)rf   r*   r_   
get_objectlink_form_classr   r   get_for_modelr[   r   rL   r`   r;   )r$   rA   r4   r'   r   )rh   r(   r)   r*      s    zUpdateView.get_context_datac                sP   |j jdd }|| jkr<| j | _t| || j|f||S t j|f||S )Naction)rQ   r2   actionsr   r`   rj   rf   rS   )r$   r0   rA   r4   r   )rh   r(   r)   rS      s
    

zUpdateView.postc             C   s   t j| jtd tdS )Nz"Content block updated successfullyzdashboard:promotion-list)r   r^   r0   r_   r   )r$   r(   r(   r)   ra      s    zUpdateView.get_success_urlc       
      O   s   t | j d}| j|j|d}|j rd|j  |jd }tj|t	d|j
|d  ttd|dS | j | jd}| j|d}	||	d	< | j|	S )
N)content_object)r|   r:   z2Content block '%(block)s' added to page '%(page)s')blockrY   zdashboard:promotion-update)r4   )r   r   )r   r   r   rQ   r~   rV   cleaned_datar   rd   r_   rH   r   r   get_form_classr`   r*   r   )
r$   r   r0   rA   r4   r|   r   r:   Z	main_formr'   r(   r(   r)   r      s    

zUpdateView.add_to_pagec             O   sv   |j d }ytjj|d}W n& tjk
rB   tj|td Y n$X |j}|j	  tj
|td|  ttd|dS )NZpagepromotion_id)r;   zNo link found to deletez$Content block removed from page '%s'zdashboard:promotion-update)r4   )rQ   r   r   r2   DoesNotExistr   errorr_   r:   deleterd   r   r   )r$   r   r0   rA   r4   link_idlinkr:   r(   r(   r)   r     s    
zUpdateView.remove_from_page)r   r   )r+   r,   r-   r   r   r   r*   rS   ra   r   r   rl   r(   r(   )rh   r)   r      s   
r   c               @   s   e Zd ZeZeZdS )UpdateRawHTMLViewN)r+   r,   r-   r   r[   r   rn   r(   r(   r(   r)   r     s   r   c               @   s   e Zd ZeZeZdS )UpdateSingleProductViewN)r+   r,   r-   r   r[   r   rn   r(   r(   r(   r)   r     s   r   c               @   s   e Zd ZeZdddgZdS )UpdateImageViewrH   rq   rr   N)r+   r,   r-   r   r[   rs   r(   r(   r(   r)   r     s   r   c               @   s   e Zd ZeZddgZdS )UpdateMultiImageViewrH   imagesN)r+   r,   r-   r   r[   rs   r(   r(   r(   r)   r      s   r   c               @   s    e Zd ZeZddddddgZdS )UpdateAutomaticProductListViewrH   rv   rq   rw   rx   ry   N)r+   r,   r-   r   r[   rs   r(   r(   r(   r)   r   %  s   
r   c                   s,   e Zd ZeZeZ fddZdd Z  Z	S )UpdateHandPickedProductListViewc                s.   t t| jf |}d|kr*t| jd|d< |S )Nr{   )r|   )rf   r   r*   r   r`   )r$   r4   r'   )rh   r(   r)   r*   /  s
    z0UpdateHandPickedProductListView.get_context_datac             C   sn   |j dd}t| jj|d}|j rX|j   |j   || _tj| jtd t	| j
 S | j|d}| j|S )NF)r}   )r|   zProduct list promotion updated)r{   )rV   r   r0   rQ   r~   r`   r   rd   r_   r   ra   r*   r   )r$   r   r   r{   r'   r(   r(   r)   r   7  s    z*UpdateHandPickedProductListView.form_valid)
r+   r,   r-   r   r[   r   rn   r*   r   rl   r(   r(   )rh   r)   r   +  s   r   c               @   s   e Zd ZdZdd ZdS )
DeleteViewz dashboard/promotions/delete.htmlc             C   s   t j| jtd tdS )Nz"Content block deleted successfullyzdashboard:promotion-list)r   r^   r0   r_   r   )r$   r(   r(   r)   ra   M  s    zDeleteView.get_success_urlN)r+   r,   r-   r.   ra   r(   r(   r(   r)   r   J  s   r   c               @   s   e Zd ZeZdS )DeleteRawHTMLViewN)r+   r,   r-   r   r[   r(   r(   r(   r)   r   R  s   r   c               @   s   e Zd ZeZdS )DeleteSingleProductViewN)r+   r,   r-   r   r[   r(   r(   r(   r)   r   V  s   r   c               @   s   e Zd ZeZdS )DeleteImageViewN)r+   r,   r-   r   r[   r(   r(   r(   r)   r   Z  s   r   c               @   s   e Zd ZeZdS )DeleteMultiImageViewN)r+   r,   r-   r   r[   r(   r(   r(   r)   r   ^  s   r   c               @   s   e Zd ZeZdS )DeleteAutomaticProductListViewN)r+   r,   r-   r   r[   r(   r(   r(   r)   r   b  s   r   c               @   s   e Zd ZeZdS )DeleteHandPickedProductListViewN)r+   r,   r-   r   r[   r(   r(   r(   r)   r   f  s   r   )Dr!   django.confr   django.contribr   "django.contrib.contenttypes.modelsr   django.db.modelsr   django.httpr   django.shortcutsr   django.urlsr   django.utils.translationr	   r_   Zdjango.viewsr
   oscar.apps.promotions.confr   oscar.core.loadingr   r   r   r   r   r   r   r   r   r#   r   r   r   r   r   TemplateViewr   RedirectViewr/   r9   rB   r`   rZ   r   r]   rb   rm   ro   rp   rt   ru   rz   r   r   r   r   r   r   r   r   r   r   r   r   r   r(   r(   r(   r)   <module>   s^   
	*!: