3

\d                 @   s^  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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" edd&\Z#Z$Z%eddZ&eddZ'e ddZ(e Z)G dd de"eeZ*G dd deZ+G dd deeZ,G dd  d eZ-G d!d" d"eZ.G d#d$ d$eZ/d%S )'    )settings)messages)Q)redirect)reverse)gettext_lazy)
DeleteView
DetailViewFormViewListView
UpdateView)SingleObjectMixin)	FormMixin)SingleTableView)normalise_email)get_user_model)	get_classget_classes	get_model)BulkEditMixinzdashboard.users.formsUserSearchFormProductAlertSearchFormProductAlertUpdateFormzcustomer.formsPasswordResetFormzdashboard.users.tables	UserTablecustomerProductAlertc                   s   e Zd ZdZdZeZdZeZ	e
ZdZedZdZ fdd	Z fd
dZdd Zdd Zdd Z fddZ fddZdd Zdd Zdd Z  ZS )	IndexViewzdashboard/users/index.htmlTmake_activemake_inactiveusersz0%(main_filter)s %(email_filter)s %(name_filter)s c                s(   | j  }| j|| _t j|f||S )N)get_form_classget_formformsuperdispatch)selfrequestargskwargs
form_class)	__class__ ;/var/www/html/oscar2019/oscar/apps/dashboard/users/views.pyr&   &   s    zIndexView.dispatchc                s,   t  j }d| jjkr(|jd| jji |S )z<
        Only bind search form if it was submitted.
        searchdata)r%   get_form_kwargsr(   GETupdate)r'   r*   )r,   r-   r.   r1   +   s
    
zIndexView.get_form_kwargsc             C   s   | j jj jd}| j|S )Nz-date_joined)modelobjectsallorder_byapply_search)r'   querysetr-   r-   r.   get_queryset8   s    zIndexView.get_querysetc             C   s4   t dddd| _| jj r,| j|| jjS |S d S )Nz	All usersr!   )Zmain_filteremail_filtername_filter)_desc_ctxr$   is_validapply_search_filterscleaned_data)r'   r9   r-   r-   r.   r8   <   s    

zIndexView.apply_searchc             C   s   |d r2t |d }|j|d}td| | jd< |d r|d j }t }x$|D ]}|t|dt|dB M }qRW |j|j }td|d  | jd	< |S )
zW
        Function is split out to allow customisation with little boilerplate.
        email)Zemail__istartswithz with email matching '%s'r;   name)Zfirst_name__icontains)Zlast_name__icontainsz with name matching '%s'r<   )r   filterr=   r>   splitr   distinct)r'   r9   r0   rB   parts	conditionpartr-   r-   r.   r@   H   s    

zIndexView.apply_search_filtersc                s    t  jf |}| j| j |_|S )N)r%   	get_tabledesc_templater>   caption)r'   r*   table)r,   r-   r.   rJ   `   s    zIndexView.get_tablec                s   t  jf |}| j|d< |S )Nr$   )r%   get_context_datar$   )r'   r*   context)r,   r-   r.   rN   e   s    
zIndexView.get_context_datac             C   s   | j |dS )NF)_change_users_active_status)r'   r(   r    r-   r-   r.   r   j   s    zIndexView.make_inactivec             C   s   | j |dS )NT)rP   )r'   r(   r    r-   r-   r.   r   m   s    zIndexView.make_activec             C   s<   x |D ]}|j s||_|j  qW tj| jtd tdS )Nz"Users' status successfully changedzdashboard:users-index)is_superuser	is_activesaver   infor(   r=   r   )r'   r    valueuserr-   r-   r.   rP   p   s    
z%IndexView._change_users_active_status)r   r   )__name__
__module____qualname__template_nametable_paginationUserr4   actionsr   r+   r   table_classcontext_table_namer=   rK   descriptionr&   r1   r:   r8   r@   rJ   rN   r   r   rP   __classcell__r-   r-   )r,   r.   r      s&   r   c               @   s   e Zd ZdZeZdZdS )UserDetailViewzdashboard/users/detail.htmlr   N)rW   rX   rY   rZ   r\   r4   context_object_namer-   r-   r-   r.   rb   y   s   rb   c                   sJ   e Zd ZeZdgZeZ fddZ fddZ	 fddZ
dd	 Z  ZS )
PasswordResetViewpostc                s   | j  | _t j|f||S )N)
get_objectobjectr%   re   )r'   r(   r)   r*   )r,   r-   r.   re      s    
zPasswordResetView.postc                s   t  j }d| jji|d< |S )NrB   r0   )r%   r1   rg   rB   )r'   r*   )r,   r-   r.   r1      s    
z!PasswordResetView.get_form_kwargsc                s   |j | jd t j|S )N)r(   )rS   r(   r%   
form_valid)r'   r$   )r,   r-   r.   rh      s    zPasswordResetView.form_validc             C   s&   t j| jtd tdd| jjidS )Nz$A password reset email has been sentzdashboard:user-detailpk)r*   )r   successr(   r=   r   rg   id)r'   r-   r-   r.   get_success_url   s    z!PasswordResetView.get_success_url)rW   rX   rY   r   r+   http_method_namesr\   r4   re   r1   rh   rl   ra   r-   r-   )r,   r.   rd      s   rd   c                   sF   e Zd ZeZeZdZdZe	j
ZedZdZdd Z fddZ  ZS )	ProductAlertListViewalertsz dashboard/users/alerts/list.htmlz
All Alertsr!   c             C   s8  | j jj jd}| j| _| j| jj| _	| j	j
 s8|S | j	j}|d rr|j|d d}|  jtd|d  7  _|d r|d j }t|dkr|j|d |d d	j }n&|jt|d d
t|d dB j }|  jtd|d  7  _|d r4|jt|d dt|d dB }|  jtd|d  7  _|S )Nz-date_createdstatus)rp   z with status matching '%s'rC      r      )user__first_name__istartswithuser__last_name__istartswith)rs   )rt   z! with customer name matching '%s'rB   )Zuser__email__icontains)email__icontainsz" with customer email matching '%s')r4   r5   r6   r7   base_descriptionr`   r+   r(   r2   r$   r?   rA   rD   r=   rE   lenrF   r   )r'   r9   r0   rG   r-   r-   r.   r:      s8    

z!ProductAlertListView.get_querysetc                s&   t  jf |}| j|d< | j|d< |S )Nr$   Zqueryset_description)r%   rN   r$   r`   )r'   r*   rO   )r,   r-   r.   rN      s    

z%ProductAlertListView.get_context_data)rW   rX   rY   r   r4   r   r+   rc   rZ   r   OSCAR_DASHBOARD_ITEMS_PER_PAGEpaginate_byr=   rw   r`   r:   rN   ra   r-   r-   )r,   r.   rn      s   *rn   c               @   s$   e Zd ZdZeZeZdZdd Z	dS )ProductAlertUpdateViewz"dashboard/users/alerts/update.htmlalertc             C   s   t j| jtd tdS )NzProduct alert savedzdashboard:user-alert-list)r   rj   r(   r=   r   )r'   r-   r-   r.   rl      s    z&ProductAlertUpdateView.get_success_urlN)
rW   rX   rY   rZ   r   r4   r   r+   rc   rl   r-   r-   r-   r.   r{      s
   r{   c               @   s    e Zd ZeZdZdZdd ZdS )ProductAlertDeleteViewz"dashboard/users/alerts/delete.htmlr|   c             C   s   t j| jtd tdS )NzProduct alert deletedzdashboard:user-alert-list)r   warningr(   r=   r   )r'   r-   r-   r.   rl      s    z&ProductAlertDeleteView.get_success_urlN)rW   rX   rY   r   r4   rZ   rc   rl   r-   r-   r-   r.   r}      s   r}   N)r   r   r   )0django.confr   django.contribr   django.db.modelsr   django.shortcutsr   django.urlsr   django.utils.translationr   r=   django.views.genericr   r	   r
   r   r   django.views.generic.detailr   django.views.generic.editr   django_tables2r   oscar.apps.customer.utilsr   oscar.core.compatr   oscar.core.loadingr   r   r   oscar.views.genericr   r   r   r   r   r   r   r\   r   rb   rd   rn   r{   r}   r-   r-   r-   r.   <module>   s4   


^: