3

\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mZmZ d dlmZmZmZ d dlmZ eddZeddZeddZ eddZ!eddZ"eddZ#eddddddg\Z$Z%Z&Z'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-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)settings)messages)serializers)DjangoJSONEncoder)HttpResponseRedirect)get_object_or_404)reverse)timezone)gettext_lazy)
DeleteViewFormViewListView)	get_classget_classes	get_model)sort_querysetofferConditionalOffer	ConditionRange	catalogueProductorderOrderDiscountBenefitzdashboard.offers.formsMetaDataFormConditionFormBenefitFormRestrictionsFormOfferSearchFormzdashboard.offers.reportsOrderDiscountCSVFormatterc                   s:   e Zd ZeZdZdZeZe	j
Zdd Z fddZ  ZS )OfferListViewoffersz dashboard/offers/offer_list.htmlc             C   s   | j jjtjd}t|| jdddddg}td| _d| _	| j
| jj| _| jj sX|S | jj}|d r|j|d d	}td
|d  | _d| _	|d rd| _	tj }|j||d}|S )N)
offer_typenamestart_datetimeend_datetimenum_applicationstotal_discountz
All offersF)name__icontainszOffers matching '%s'T	is_active)start_datetime__lteend_datetime__gte)model_default_managerexcluder   VOUCHERr   request_descriptionis_filtered
form_classGETformis_validcleaned_datafilterr	   now)selfqsdatatoday r@   </var/www/html/oscar2019/oscar/apps/dashboard/offers/views.pyget_queryset&   s(    



zOfferListView.get_querysetc                s0   t  jf |}| j|d< | j|d< | j|d< |S )Nqueryset_descriptionr7   r4   )superget_context_datar3   r7   r4   )r<   kwargsctx)	__class__r@   rA   rE   C   s
    


zOfferListView.get_context_data)__name__
__module____qualname__r   r-   context_object_nametemplate_namer   r5   r   OSCAR_DASHBOARD_ITEMS_PER_PAGEpaginate_byrB   rE   __classcell__r@   r@   )rH   rA   r!      s   r!   c                   s   e Zd ZdZdZdZdZdZdZ fddZ	dd Z
d&dd	Zd
d Zd'ddZdd Zd(ddZdd Zdd Z fddZ fddZdd Zdd Z fddZd d! Zd"d# Zed$d% Z  ZS ))OfferWizardStepViewZoffer_wizardNFc                s`   | j rtt|d d| _| j|sLtj|td| jj	j
 f  t| j S t j|f||S )Npk)idz%s step not complete)updater   r   r   is_previous_step_completer   warningr2   previous_view	step_nametitler   get_back_urlrD   dispatch)r<   r1   argsrF   )rH   r@   rA   r[   V   s    
zOfferWizardStepView.dispatchc             C   s   | j s
dS | j j| |S )NT)rW   r8   )r<   r1   r@   r@   rA   rU   `   s    z-OfferWizardStepView.is_previous_step_completec             C   s4   |r|n| j }| jr$|t| jj7 }|r0|d7 }|S )N_obj)rX   rT   strr   rS   )r<   rX   	is_objectkeyr@   r@   rA   _keye   s    zOfferWizardStepView._keyc             C   sl   | j jj| ji }|jj }|jdd }|d k	r:|j|d< d|i}tj	|t
d}||| j < | j jj  d S )Nranger>   )cls)r1   session
setdefaultwizard_namer9   copygetrS   jsondumpsr   ra   save)r<   r7   session_data	form_datarb   form_kwargs	json_datar@   r@   rA   _store_form_kwargsm   s    

z&OfferWizardStepView._store_form_kwargsc             C   s@   |s
| j }| jjj| ji }|j| j|d }|r<tj|S i S )N)	rX   r1   rd   re   rf   rh   ra   ri   loads)r<   rX   rl   ro   r@   r@   rA   _fetch_form_kwargs{   s    
z&OfferWizardStepView._fetch_form_kwargsc             C   sL   | j jj| ji }|jdd}tjd|g}||| jdd< | j jj  d S )NF)commitri   T)r_   )r1   rd   re   rf   rk   r   	serializera   )r<   r7   rl   instancejson_qsr@   r@   rA   _store_object   s
    z!OfferWizardStepView._store_objectc             C   sV   |d kr| j }|jj| ji }|j| j|ddd }|rRttjd|}|d j	S d S )NT)r_   ri   r   )
r1   rd   re   rf   rh   ra   listr   deserializeobject)r<   rX   r1   rl   rv   Zdeserialised_objr@   r@   rA   _fetch_object   s    z!OfferWizardStepView._fetch_objectc             C   s"   | j d}|dkr| jr| j}|S )z
        Return the offer instance loaded with the data stored in the
        session.  When updating an offer, the updated fields are used with the
        existing offer data.
        metadataN)r{   rT   r   )r<   r   r@   r@   rA   _fetch_session_offer   s    
z(OfferWizardStepView._fetch_session_offerc             C   s   i | j j| j< | j jj  d S )N)r1   rd   rf   rk   )r<   r@   r@   rA   _flush_session   s    z"OfferWizardStepView._flush_sessionc                sD   i }| j r| j |d< | j }|j | t j||}|j | |S )Nru   )rT   get_instancerr   rD   get_form_kwargs)r<   r\   rF   rn   Zsession_kwargsZparent_kwargs)rH   r@   rA   r      s    

z#OfferWizardStepView.get_form_kwargsc                s:   t  jf |}| jr| j|d< | j |d< | j |d< |S )Nr   session_offerrY   )rD   rE   rT   r   r}   	get_title)r<   rF   rG   )rH   r@   rA   rE      s    
z$OfferWizardStepView.get_context_datac             C   s6   | j s
d S | jr*t| j jd| jd idS t| j jS )NrR   )rF   )rW   rT   r   url_namerF   )r<   r@   r@   rA   rZ      s    z OfferWizardStepView.get_back_urlc             C   s
   | j j S )N)rX   rY   )r<   r@   r@   rA   r      s    zOfferWizardStepView.get_titlec                s@   | j | | j| | jr0d|jkr0| j| jS t j|S d S )Nrk   )rp   rw   rT   r>   
save_offerr   rD   
form_valid)r<   r7   )rH   r@   rA   r      s
    

zOfferWizardStepView.form_validc             C   s   | j  }|j|_|j|_| jd}|r4|j  ||_| jd}|rP|j  ||_|j  | j  | jrvt	d|j }nt	d|j }t
j| j| ttdd|jidS )Nbenefit	conditionzOffer '%s' updatedzOffer '%s' created!zdashboard:offer-detailrR   )rF   )r}   r$   r3   r{   rk   r   r   r~   rT   r2   r   successr1   r   r   rR   )r<   r   r   r   r   msgr@   r@   rA   r      s&    

zOfferWizardStepView.save_offerc             C   s(   | j rt| jd| jd idS t| jS )NrR   )rF   )rT   r   success_url_namerF   )r<   r@   r@   rA   get_success_url   s    z#OfferWizardStepView.get_success_urlc             C   s   |j r
dS |j| j|d k	S )NT)rT   r{   rX   )rc   Zcurrent_viewr1   r@   r@   rA   r8      s    zOfferWizardStepView.is_valid)NF)N)N)rI   rJ   rK   rf   r5   rX   rT   r   rW   r[   rU   ra   rp   rr   rw   r{   r}   r~   r   rE   rZ   r   r   r   r   classmethodr8   rP   r@   r@   )rH   rA   rQ   K   s.   





 rQ   c               @   s0   e Zd ZdZeZdZdZdZdd Z	dd Z
d	S )
OfferMetaDataViewr|   z#dashboard/offers/metadata_form.htmlzdashboard:offer-metadatazdashboard:offer-benefitc             C   s   | j S )N)r   )r<   r@   r@   rA   r     s    zOfferMetaDataView.get_instancec             C   s   t dS )NzName and description)r2   )r<   r@   r@   rA   r   	  s    zOfferMetaDataView.get_titleN)rI   rJ   rK   rX   r   r5   rM   r   r   r   r   r@   r@   r@   rA   r      s   r   c               @   s4   e Zd ZdZeZdZdZdZe	Z
dd Zdd Zd	S )
OfferBenefitViewr   z"dashboard/offers/benefit_form.htmlzdashboard:offer-benefitzdashboard:offer-conditionc             C   s   | j jS )N)r   r   )r<   r@   r@   rA   r     s    zOfferBenefitView.get_instancec             C   s   t dS )NZ	Incentive)r2   )r<   r@   r@   rA   r     s    zOfferBenefitView.get_titleN)rI   rJ   rK   rX   r   r5   rM   r   r   r   rW   r   r   r@   r@   r@   rA   r     s   r   c               @   s,   e Zd ZdZeZdZdZdZe	Z
dd ZdS )OfferConditionViewr   z$dashboard/offers/condition_form.htmlzdashboard:offer-conditionzdashboard:offer-restrictionsc             C   s   | j jS )N)r   r   )r<   r@   r@   rA   r   %  s    zOfferConditionView.get_instanceN)rI   rJ   rK   rX   r   r5   rM   r   r   r   rW   r   r@   r@   r@   rA   r     s   r   c               @   s8   e Zd ZdZeZdZeZdZ	dd Z
dd Zdd	 Zd
S )OfferRestrictionsViewrestrictionsz'dashboard/offers/restrictions_form.htmlzdashboard:offer-restrictionsc             C   s   |j dd}| j|S )NF)rs   )rk   r   )r<   r7   r   r@   r@   rA   r   0  s    z OfferRestrictionsView.form_validc             C   s   | j S )N)r   )r<   r@   r@   rA   r   4  s    z"OfferRestrictionsView.get_instancec             C   s   t dS )NZRestrictions)r2   )r<   r@   r@   rA   r   7  s    zOfferRestrictionsView.get_titleN)rI   rJ   rK   rX   r   r5   rM   r   rW   r   r   r   r   r@   r@   r@   rA   r   )  s   r   c               @   s    e Zd ZeZdZdZdd ZdS )OfferDeleteViewz"dashboard/offers/offer_delete.htmlr   c             C   s   t j| jtd tdS )NzOffer deleted!zdashboard:offer-list)r   r   r1   r2   r   )r<   r@   r@   rA   r   @  s    zOfferDeleteView.get_success_urlN)rI   rJ   rK   r   r-   rM   rL   r   r@   r@   r@   rA   r   ;  s   r   c                   sf   e Zd ZeZdZdZejZ	 fddZ
dd Zdd Zd	d
 Zdd Z fddZ fddZ  ZS )OfferDetailViewz"dashboard/offers/offer_detail.htmlorder_discountsc                s&   t t|d d| _t j|f||S )NrR   )rR   )r   r   r   rD   r[   )r<   r1   r\   rF   )rH   r@   rA   r[   M  s    zOfferDetailView.dispatchc             O   s(   d|j kr| j S d|j kr$| j S d S )Nsuspend	unsuspend)POSTr   r   )r<   r1   r\   rF   r@   r@   rA   postQ  s    

zOfferDetailView.postc             C   sP   | j jrtj| jtd n| j j  tj| jtd tt	dd| j j
idS )NzOffer is already suspendedzOffer suspendedzdashboard:offer-detailrR   )rF   )r   is_suspendedr   errorr1   r2   r   r   r   r   rR   )r<   r@   r@   rA   r   W  s    
zOfferDetailView.suspendc             C   sP   | j jstj| jtd n| j j  tj| jtd tt	dd| j j
idS )Nz;Offer cannot be reinstated as it is not currently suspendedzOffer reinstatedzdashboard:offer-detailrR   )rF   )r   r   r   r   r1   r2   r   r   r   r   rR   )r<   r@   r@   rA   r   `  s    
zOfferDetailView.unsuspendc             C   s   | j jj| jjdjdS )N)offer_idr   )r-   objectsr:   r   rR   select_related)r<   r@   r@   rA   rB   l  s    zOfferDetailView.get_querysetc                s   t  jf |}| j|d< |S )Nr   )rD   rE   r   )r<   rF   rG   )rH   r@   rA   rE   p  s    
z OfferDetailView.get_context_datac                s8   | j jjddkr,t }|j|d | jdS t j|S )Nformatcsvr   )r   )r1   r6   rh   r    generate_responser   rD   render_to_response)r<   context	formatter)rH   r@   rA   r   u  s
    

z"OfferDetailView.render_to_response)rI   rJ   rK   r   r-   rM   rL   r   rN   rO   r[   r   r   r   rB   rE   r   rP   r@   r@   )rH   rA   r   E  s   	r   )2ri   django.confr   django.contribr   django.corer   django.core.serializers.jsonr   django.httpr   django.shortcutsr   django.urlsr   django.utilsr	   django.utils.translationr
   r2   Zdjango.views.genericr   r   r   oscar.core.loadingr   r   r   oscar.viewsr   r   r   r   r   r   r   r   r   r   r   r   r    r!   rQ   r   r   r   r   r   r   r@   r@   r@   rA   <module>   s@   





, 5
