B
    ²ô`±   ã               @   s    d dl mZ G dd„ deƒZdS )é    )ÚPhoneNumberc               @   s  e Zd ZdZdZdd„ Zdd„ ZdDdd	„Zd
d„ Zdd„ Z	dd„ Z
dd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ ZeZd d!„ Zd"d#„ Zd$d%„ Zd&d'„ Zd(d)„ Zd*d+„ Zd,d-„ Zd.d/„ ZeZd0d1„ Zd2d3„ Zd4d5„ Zd6d7„ Z d8d9„ Z!d:d;„ Z"d<d=„ Z#d>d?„ Z$d@dA„ Z%dBdC„ Z&dS )EÚCheckoutSessionDataa:  
    Responsible for marshalling all the checkout session data

    Multi-stage checkouts often require several forms to be submitted and their
    data persisted until the final order is placed. This class helps store and
    organise checkout form data until it is required to write out the final
    order.
    Zcheckout_datac             C   s&   || _ | j| j jkr"i | j j| j< d S )N)ÚrequestÚSESSION_KEYÚsession)Úselfr   © r   úH/home/dcms/DCMS/lib/python3.7/site-packages/oscar/apps/checkout/utils.pyÚ__init__   s    zCheckoutSessionData.__init__c             C   s(   || j j| j kr$i | j j| j |< dS )zK
        Ensure a namespace within the session dict is initialised
        N)r   r   r   )r   Ú	namespacer   r   r	   Ú_check_namespace   s    z$CheckoutSessionData._check_namespaceNc             C   s:   |   |¡ || jj| j | kr6| jj| j | | S |S )z8
        Return a value from within a namespace
        )r   r   r   r   )r   r   ÚkeyÚdefaultr   r   r	   Ú_get   s    
zCheckoutSessionData._getc             C   s.   |   |¡ || jj| j | |< d| jj_dS )z(
        Set a namespaced value
        TN)r   r   r   r   Úmodified)r   r   r   Úvaluer   r   r	   Ú_set$   s    
zCheckoutSessionData._setc             C   sB   |   |¡ || jj| j | kr>| jj| j | |= d| jj_dS )z+
        Remove a namespaced value
        TN)r   r   r   r   r   )r   r   r   r   r   r	   Ú_unset,   s    
zCheckoutSessionData._unsetc             C   s    i | j j| j |< d| j j_dS )z#
        Flush a namespace
        TN)r   r   r   r   )r   r   r   r   r	   Ú_flush_namespace5   s    z$CheckoutSessionData._flush_namespacec             C   s   i | j j| j< dS )z(
        Flush all session data
        N)r   r   r   )r   r   r   r	   Úflush<   s    zCheckoutSessionData.flushc             C   s   |   dd|¡ d S )NÚguestÚemail)r   )r   r   r   r   r	   Úset_guest_emailE   s    z#CheckoutSessionData.set_guest_emailc             C   s   |   dd¡S )Nr   r   )r   )r   r   r   r	   Úget_guest_emailH   s    z#CheckoutSessionData.get_guest_emailc             C   s   |   d¡ d S )NÚshipping)r   )r   r   r   r	   Úreset_shipping_dataR   s    z'CheckoutSessionData.reset_shipping_datac             C   s   |   ¡  |  dd|j¡ dS )zU
        Use an user address (from an address book) as the shipping address.
        r   Úuser_address_idN)r   r   Úid)r   Úaddressr   r   r	   Úship_to_user_addressU   s    z(CheckoutSessionData.ship_to_user_addressc             C   s>   |   dd¡ | d¡}|r,| ¡ }|j|d< |  dd|¡ dS )zH
        Use a manually entered address as the shipping address
        r   Únew_address_fieldsÚphone_numberN)r   ÚgetÚcopyÚas_internationalr   )r   Úaddress_fieldsr!   r   r   r	   Úship_to_new_address\   s    

z'CheckoutSessionData.ship_to_new_addressc             C   s   |   dd¡S )z0
        Return shipping address fields
        r   r    )r   )r   r   r   r	   Únew_shipping_address_fieldsi   s    z/CheckoutSessionData.new_shipping_address_fieldsc             C   s   |   dd¡S )z(
        Return user address id
        r   r   )r   )r   r   r   r	   Úshipping_user_address_ido   s    z,CheckoutSessionData.shipping_user_address_idc             C   s0   |   ¡ }|dk	}|  ¡ }|dk	o&|dk}|p.|S )zš
        Test whether a shipping address has been stored in the session.

        This can be from a new address or re-using an existing address.
        Nr   )r'   r(   )r   Ú
new_fieldsÚhas_new_addressr   Úhas_old_addressr   r   r	   Úis_shipping_address_setx   s
    z+CheckoutSessionData.is_shipping_address_setc             C   s   |   ddd¡ dS )z5
        Set "free shipping" code to session
        r   Úmethod_codeZ__free__N)r   )r   r   r   r	   Úuse_free_shipping‡   s    z%CheckoutSessionData.use_free_shippingc             C   s   |   dd|¡ dS )z5
        Set shipping method code to session
        r   r-   N)r   )r   Úcoder   r   r	   Úuse_shipping_method   s    z'CheckoutSessionData.use_shipping_methodc             C   s   |   dd¡S )z1
        Return the shipping method code
        r   r-   )r   )r   Úbasketr   r   r	   Úshipping_method_code“   s    z(CheckoutSessionData.shipping_method_codec             C   s   |   |¡dk	S )zJ
        Test if a valid shipping method is stored in the session
        N)r2   )r   r1   r   r   r	   Úis_shipping_method_set™   s    z*CheckoutSessionData.is_shipping_method_setc             C   sH   |   dd¡ | d¡}|r6t|tƒr6| ¡ }|j|d< |  dd|¡ dS )z=
        Store address fields for a billing address.
        Úbillingr    r!   N)r   r"   Ú
isinstancer   r#   r$   r   )r   r%   r!   r   r   r	   Úbill_to_new_address§   s    

z'CheckoutSessionData.bill_to_new_addressc             C   s   |   d¡ |  dd|j¡ dS )zx
        Set an address from a user's address book as the billing address

        :address: The address object
        r4   r   N)r   r   r   )r   r   r   r   r	   Úbill_to_user_address´   s    
z(CheckoutSessionData.bill_to_user_addressc             C   s   |   d¡ |  ddd¡ dS )zi
        Record fact that the billing address is to be the same as
        the shipping address.
        r4   Ú billing_address_same_as_shippingTN)r   r   )r   r   r   r	   Úbill_to_shipping_address½   s    
z,CheckoutSessionData.bill_to_shipping_addressc             C   s   |   ddd¡S )Nr4   r8   F)r   )r   r   r   r	   Ú#is_billing_address_same_as_shippingÈ   s    z7CheckoutSessionData.is_billing_address_same_as_shippingc             C   s   |   dd¡S )zJ
        Return the ID of the user address being used for billing
        r4   r   )r   )r   r   r   r	   Úbilling_user_address_idË   s    z+CheckoutSessionData.billing_user_address_idc             C   s   |   dd¡S )z5
        Return fields for a billing address
        r4   r    )r   )r   r   r   r	   Únew_billing_address_fieldsÑ   s    z.CheckoutSessionData.new_billing_address_fieldsc             C   s<   |   ¡ rdS |  ¡ }|dk	}|  ¡ }|dk	o2|dk}|p:|S )z™
        Test whether a billing address has been stored in the session.

        This can be from a new address or re-using an existing address.
        TNr   )r:   r<   r;   )r   r)   r*   r   r+   r   r   r	   Úis_billing_address_set×   s    z*CheckoutSessionData.is_billing_address_setc             C   s   |   dd|¡ d S )NÚpaymentÚmethod)r   )r   r?   r   r   r	   Úpay_byè   s    zCheckoutSessionData.pay_byc             C   s   |   dd¡S )Nr>   r?   )r   )r   r   r   r	   Úpayment_methodë   s    z"CheckoutSessionData.payment_methodc             C   s   |   dd|¡ d S )NÚ
submissionÚorder_number)r   )r   rC   r   r   r	   Úset_order_numberñ   s    z$CheckoutSessionData.set_order_numberc             C   s   |   dd¡S )NrB   rC   )r   )r   r   r   r	   Úget_order_numberô   s    z$CheckoutSessionData.get_order_numberc             C   s   |   dd|j¡ d S )NrB   Ú	basket_id)r   r   )r   r1   r   r   r	   Úset_submitted_basket÷   s    z(CheckoutSessionData.set_submitted_basketc             C   s   |   dd¡S )NrB   rF   )r   )r   r   r   r	   Úget_submitted_basket_idú   s    z+CheckoutSessionData.get_submitted_basket_id)N)'Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r
   r   r   r   r   r   r   r   r   r   r   r&   r'   r(   r   r,   r.   r0   r2   r3   r6   r7   r9   r8   r:   r;   r<   r=   r@   rA   rD   rE   rG   rH   r   r   r   r	   r      sH   
			
		r   N)Zphonenumber_field.phonenumberr   Úobjectr   r   r   r   r	   Ú<module>   s   