3

\(                 @   sh  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 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 e ZeddZedddddddg\ZZZZZ 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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j&Z/d'S )(    )messages)
Permission)get_object_or_404redirect)render_to_string)reversereverse_lazy)gettext_lazy)generic)normalise_email)get_user_model)get_classes	get_model)sort_querysetpartnerPartnerzdashboard.partners.formsPartnerSearchFormPartnerCreateFormPartnerAddressFormNewUserFormUserEmailFormExistingUserFormc                   s4   e Zd ZeZdZdZeZdd Z	 fddZ
  ZS )PartnerListViewpartnersz$dashboard/partners/partner_list.htmlc             C   s   | j jj }t|| jdg}td| _d| _| j| jj	| _
| j
j sJ|S | j
j}|d r|j|d d}td|d  | _d| _|S )NnamezAll partnersF)Zname__icontainszPartners matching '%s'T)model_default_managerallr   request_descriptionis_filtered
form_classGETformis_validcleaned_datafilter)selfqsdata r+   >/var/www/html/oscar2019/oscar/apps/dashboard/partners/views.pyget_queryset   s    

zPartnerListView.get_querysetc                s0   t  jf |}| j|d< | j|d< | j|d< |S )Nqueryset_descriptionr$   r!   )superget_context_datar    r$   r!   )r(   kwargsctx)	__class__r+   r,   r0   5   s
    


z PartnerListView.get_context_data)__name__
__module____qualname__r   r   context_object_nametemplate_namer   r"   r-   r0   __classcell__r+   r+   )r3   r,   r      s   r   c                   s8   e Zd ZeZdZeZedZ	 fddZ
dd Z  ZS )PartnerCreateViewz$dashboard/partners/partner_form.htmlzdashboard:partner-listc                s   t  jf |}td|d< |S )NzCreate new partnertitle)r/   r0   r   )r(   r1   r2   )r3   r+   r,   r0   C   s    z"PartnerCreateView.get_context_datac             C   s"   t j| jtd| jj  tdS )Nz&Partner '%s' was created successfully.zdashboard:partner-list)r   successr   r   objectr   r   )r(   r+   r+   r,   get_success_urlH   s    z!PartnerCreateView.get_success_url)r4   r5   r6   r   r   r8   r   r"   r   success_urlr0   r>   r9   r+   r+   )r3   r,   r:   =   s   r:   c                   sN   e Zd ZdZdZeZedZdddZ	dd Z
 fd	d
Z fddZ  ZS )PartnerManageViewz
    This multi-purpose view renders out a form to edit the partner's details,
    the associated address and a list of all associated users.
    z&dashboard/partners/partner_manage.htmlzdashboard:partner-listNc             C   s:   t t| jd d| _| jj}|d kr6| jjj| jd}|S )Npk)rA   )r   )r   r   r1   r   primary_address	addressesr   )r(   querysetaddressr+   r+   r,   
get_objectX   s
    zPartnerManageView.get_objectc             C   s   d| j jiS )Nr   )r   r   )r(   r+   r+   r,   get_initial_   s    zPartnerManageView.get_initialc                s8   t  jf |}| j|d< | jj|d< | jjj |d< |S )Nr   r;   users)r/   r0   r   r   rH   r   )r(   r1   r2   )r3   r+   r,   r0   b   s
    
z"PartnerManageView.get_context_datac                s>   t j| jtd| jj  |jd | j_| jj  t j	|S )Nz&Partner '%s' was updated successfully.r   )
r   r<   r   r   r   r   r&   saver/   
form_valid)r(   r$   )r3   r+   r,   rJ   i   s    

zPartnerManageView.form_valid)N)r4   r5   r6   __doc__r8   r   r"   r   r?   rF   rG   r0   rJ   r9   r+   r+   )r3   r,   r@   O   s   
r@   c               @   s   e Zd ZeZdZdd ZdS )PartnerDeleteViewz&dashboard/partners/partner_delete.htmlc             C   s"   t j| jtd| jj  tdS )Nz&Partner '%s' was deleted successfully.zdashboard:partner-list)r   r<   r   r   r=   r   r   )r(   r+   r+   r,   r>   v   s    z!PartnerDeleteView.get_success_urlN)r4   r5   r6   r   r   r8   r>   r+   r+   r+   r,   rL   r   s   rL   c                   sH   e Zd ZeZdZeZ fddZ fddZ	 fddZ
dd	 Z  ZS )
PartnerUserCreateViewz)dashboard/partners/partner_user_form.htmlc                s*   t t|jdd d| _t j|f||S )N
partner_pk)rA   )r   r   getr   r/   dispatch)r(   r   argsr1   )r3   r+   r,   rP      s    zPartnerUserCreateView.dispatchc                s(   t  jf |}| j|d< td|d< |S )Nr   zCreate userr;   )r/   r0   r   r   )r(   r1   r2   )r3   r+   r,   r0      s    
z&PartnerUserCreateView.get_context_datac                s   t  j }| j|d< |S )Nr   )r/   get_form_kwargsr   )r(   r1   )r3   r+   r,   rR      s    

z%PartnerUserCreateView.get_form_kwargsc             C   s0   | j j p| j j}tj| jtd|  tdS )Nz#User '%s' was created successfully.zdashboard:partner-list)r=   get_full_nameemailr   r<   r   r   r   )r(   r   r+   r+   r,   r>      s    z%PartnerUserCreateView.get_success_url)r4   r5   r6   Userr   r8   r   r"   rP   r0   rR   r>   r9   r+   r+   )r3   r,   rM      s   rM   c                   sH   e Zd ZdZeZdZ fddZ fddZ fddZ	d	d
 Z
  ZS )PartnerUserSelectViewz+dashboard/partners/partner_user_select.htmlrH   c                s*   t t|jdd d| _t j|f||S )NrN   )rA   )r   r   rO   r   r/   rP   )r(   r   rQ   r1   )r3   r+   r,   rP      s    zPartnerUserSelectView.dispatchc                s4   d }d|j kr|j }| j|| _t j|f||S )NrT   )r#   r"   r$   r/   rO   )r(   r   rQ   r1   r*   )r3   r+   r,   rO      s
    
zPartnerUserSelectView.getc                s&   t  jf |}| j|d< | j|d< |S )Nr   r$   )r/   r0   r   r$   )r(   r1   r2   )r3   r+   r,   r0      s    

z&PartnerUserSelectView.get_context_datac             C   s6   | j j r(t| j jd }tjj|dS tjj S d S )NrT   )email__icontains)r$   r%   r   r&   rU   objectsr'   none)r(   rT   r+   r+   r,   r-      s    
z"PartnerUserSelectView.get_queryset)r4   r5   r6   r8   r   r"   r7   rP   rO   r0   r-   r9   r+   r+   )r3   r,   rV      s   rV   c               @   s$   e Zd Zdd Zdd Zdd ZdS )PartnerUserLinkViewc             C   s   | j |||S )N)post)r(   r   user_pkrN   r+   r+   r,   rO      s    zPartnerUserLinkView.getc             C   sx   t t|d}|j p|j}t t|d}| j||rPtj|td||j	d  ntj
|td||j	d  td|dS )N)rA   z0User '%(name)s' was linked to '%(partner_name)s')r   partner_namez7User '%(name)s' is already linked to '%(partner_name)s'zdashboard:partner-manage)r   rU   rS   rT   r   	link_userr   r<   r   r   infor   )r(   r   r\   rN   userr   r   r+   r+   r,   r[      s    zPartnerUserLinkView.postc             C   sJ   |j j|jdj rdS |j j| |jsFtjjddd}|j	j| dS )z
        Links a user to a partner, and adds the dashboard permission if needed.

        Returns False if the user was linked already; True otherwise.
        )rA   Fdashboard_accessr   )codenamecontent_type__app_labelT)
rH   r'   rA   existsaddis_staffr   rX   rO   user_permissions)r(   r`   r   dashboard_access_permr+   r+   r,   r^      s    zPartnerUserLinkView.link_userN)r4   r5   r6   rO   r[   r^   r+   r+   r+   r,   rZ      s   rZ   c               @   s   e Zd Zdd Zdd ZdS )PartnerUserUnlinkViewc             C   sX   |j j|jdj sdS |j j| |j rT|jj  rTtjj	ddd}|j
j| dS )z
        Unlinks a user from a partner, and removes the dashboard permission
        if they are not linked to any other partners.

        Returns False if the user was not linked to the partner; True
        otherwise.
        )rA   Fra   r   )rb   rc   T)rH   r'   rA   rd   removerf   r   r   rX   rO   rg   )r(   r`   r   rh   r+   r+   r,   unlink_user   s    z!PartnerUserUnlinkView.unlink_userc             C   s   t t|d}|j p|j}t t|d}| j||r\td||j||d}tj	| j
|dd ntj|td||jd  td|dS )	N)rA   z.dashboard/partners/messages/user_unlinked.html)Z	user_namer]   r\   rN   zsafe noicon)
extra_tagsz3User '%(name)s' is not linked to '%(partner_name)s')r   r]   zdashboard:partner-manage)r   rU   rS   rT   r   rk   r   r   r   r<   r   errorr   r   )r(   r   r\   rN   r`   r   r   msgr+   r+   r,   r[      s     
zPartnerUserUnlinkView.postN)r4   r5   r6   rk   r[   r+   r+   r+   r,   ri      s   ri   c                   s6   e Zd ZdZeZd	ddZ fddZdd Z  Z	S )
PartnerUserUpdateViewz)dashboard/partners/partner_user_form.htmlNc             C   s.   t t| jd d| _t t| jd | jd dS )NrN   )rA   r\   )rA   Zpartners__pk)r   r   r1   r   rU   )r(   rD   r+   r+   r,   rF     s    z PartnerUserUpdateView.get_objectc                s>   t  jf |}| jj p| jj}| j|d< td| |d< |S )Nr   zEdit user '%s'r;   )r/   r0   r=   rS   rT   r   r   )r(   r1   r2   r   )r3   r+   r,   r0     s
    
z&PartnerUserUpdateView.get_context_datac             C   s0   | j j p| j j}tj| jtd|  tdS )Nz#User '%s' was updated successfully.zdashboard:partner-list)r=   rS   rT   r   r<   r   r   r   )r(   r   r+   r+   r,   r>   $  s    z%PartnerUserUpdateView.get_success_url)N)
r4   r5   r6   r8   r   r"   rF   r0   r>   r9   r+   r+   )r3   r,   ro     s
   
ro   N)0django.contribr   django.contrib.auth.modelsr   django.shortcutsr   r   django.template.loaderr   django.urlsr   r   django.utils.translationr	   r   Zdjango.viewsr
   oscar.apps.customer.utilsr   oscar.core.compatr   oscar.core.loadingr   r   oscar.viewsr   rU   r   r   r   r   r   r   r   ListViewr   
CreateViewr:   
UpdateViewr@   
DeleteViewrL   rM   rV   ViewrZ   ri   ro   r+   r+   r+   r,   <module>   s2   
$# '-