3

\0                 @   s  d dl mZ d dl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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 Z d dl!Z!d dl"m#Z# d dl$Z$d dl%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/ eddZ0eddZ1eddZ2eddZ3G dd deZ4G d d! d!eZ5G d"d# d#eZ6d d$l7T dS )%    )render_to_string)AbstractOrderAbstractLineAbstractShippingEvent)models)methods)ShippingApiError)	get_model   )#generate_common_product_label_imagegenerate_product_label_image)	JSONField)OrderQuerySet)enqueue)MANDRILL_TEMPLATES)
send_email)timezone)SubscriptionN)settings)StripeSourceStripeCustomerStripeTransaction)charge)Amount)refill_order_placed)transaction	catalogueAttributeOptionorderShippingEventQuantitypaymentSource
SourceTypec               @   sB   e Zd ZejedejdddZdd Zdd Z	dd	 Z
d
d ZdS )OrderordersT)related_name	on_deletenullblankc             C   s(   d}x| j j D ]}||jj7 }qW |S )Nr   )linesallproductZshipping_weight)selftotalline r/   ,/var/www/html/oscar2019/apps/order/models.pyget_total_weight$   s    zOrder.get_total_weightc       
      C   s  | j   tt| j}t|d}tdd}tdd}| }|jjddj }| jj }|s|j	| }|jj
| ||d}x,| jj D ]}	d|	_tjj
|	||	jd	 qW | js
ttd
td | jjd| jjr| jjndttj | jd t| j td| |ddddd nttdtd | jjd| jjr0| jjndttj | jd t| j td| |dd| jjtjkrrdndt| jjddd |j |j!| S )NZ__shipping_method_class__r   ShippingEventTypeShippingEventZshipped)code)r   
event_typenotesShipped)r.   eventquantityz#Your order is making its way to youZORDER_SHIPPED_OUTz#Hook Coffee<hola@hookcoffee.com.sg>  z0communication/partials/order_email_shipment.html)r   Zshipping_class)contextr   )USERNAMESHIPPING_DATEPRICECOFFEESDISPLAY_REFERRAL_CODE)subjecttemplateto_email
from_email
merge_varszYour coffee is on the way!ZSUB_RENEWAL_SHIPPEDz-Hook Coffee Roastery <hola@hookcoffee.com.sg>r
   )r=   r>   r?   r@   ZSUBSCRIPTION_ACTIVEZNEXT_REFILLrA   )"r1   getattrshipping_methodsZshipping_coder	   objectsfilterfirstZshipping_eventsZprocess_shipmentcreater)   r*   statusr   r9   subscriptionr   r   r   useremail
first_namestrr   	localdatecurrencytotal_incl_taxr   r   	CANCELLED
next_orderZget_waybill_pdfr6   )
r,   Zshipping_methodZShippingMethodClassr2   r3   shippingZshipped_event_typeZshipping_eventZtracking_numberr.   r/   r/   r0   create_shipping_label*   s\    







zOrder.create_shipping_labelc             C   s  ddl m}m} tdd}tdd}tdd}d}| j}tj  |jj| j	| j
dj }|rHtjjd	d
\}	}
|jjdd
\}}
|rH|j| jk rd}|j}d|_| j| }n>d}| j}d}|j| |_tj| _| j  tj| j| | j	d |jj||d}|j  tjj| |	| j
|j||d |jj| | j|j|d |sHdS |ryZtjj| j	djddj }|sxt tjjdd}|jjdd}t|| j
| j|}W n tk
rb } zttdt d | j	j!dd| j	j"r| j	j"ndid tj#| _x$| j$j% D ]}tj#|_|j  qW | j&r8t'j(| j&_| j&j  |rLd|_)|j  | j  dS d }~X nX |rtjj| || j
|j*| j| jd tj| _| j  |jj| | j|j+|d}x(| j$j% D ]}|jj|||j,d qW tj| j| | j	d dS W d Q R X dS )Nr   )AccountTransactionr   PaymentEventPaymentEventTypePaymentEventQuantityT)rO   rT   rZ   )namezAccount PaymentF)senderr   rO   )accountamount)r   source_typerT   	referenceZamount_debitedZamount_allocated)r   rb   rd   r5   )Zcustomer__user)activestripe)r4   zstripe-paymentz Oops, your payment was declined ZFAILED_CARD_PAYMENTz$Hook Coffee <hola@hookcoffee.com.sg>Z	FIRSTNAMEr:   )rB   rC   rD   rE   rF   )r8   r.   r9   )-Zgiftcard.modelsrZ   r[   r	   rU   r   atomicrI   rJ   rO   rT   rK   r"   get_or_createbalancer   ORDER_STATUS_BEING_PROCESSEDrM   saver   send	__class__rL   r!   pkr   	Exceptiongetr   numberr   r   r   rP   rQ   ORDER_STATUS_ERRORr)   r*   rN   r   ERRORre   ZcardZstripe_transaction_idr9   )r,   rZ   ZAccountTransactionr\   r]   r^   Zneed_card_paymentZstripe_amountra   Zaccount_source_type__Zaccount_payment_event_typeZaccount_withdrawZaccount_transactionZstripe_sourcerc   Zpayment_event_typeZstripe_chargeer.   r8   r/   r/   r0   process_paymentc   s    





zOrder.process_paymentc             C   s   ddl m} | jtjkrdS | jtjkr,dS | jtjkr| j sDdS x"| jj	 D ]}tj|_|j
  qPW | jr| jjtjtjgkr|| j dS d S )Nr   )create_next_orderFT)Zsubscription.utilsrw   rM   r   ORDER_STATUS_CANCELLEDrj   ORDER_STATUS_PENDINGrv   r)   r*   rk   rN   r   ACTIVEPAUSED)r,   rw   r.   r/   r/   r0   process_order   s    
zOrder.process_orderN)__name__
__module____qualname__r   
ForeignKeyr   SET_NULLrN   r1   rY   rv   r|   r/   r/   r/   r0   r#       s   9xr#   c               @   s   e Zd Zdd Zdd ZdS )Linec             C   sf   t | jdd p:t | jjdd p:t | jdd p:t | jjdd }|rZ| jj jdkrZt| }nt| }|S )NlabelZ
label_dripz
coffee-bag)rG   r+   parentZget_product_classslugr   r   )r,   Z	has_labelr   r/   r/   r0   create_label   s    
zLine.create_labelc             C   s   t j| j S )N)img2pdfconvertr   )r,   r/   r/   r0   get_label_pdf   s    zLine.get_label_pdfN)r}   r~   r   r   r   r/   r/   r/   r0   r      s   r   c               @   s   e Zd ZedddZdS )r3   T)r'   r(   N)r}   r~   r   r   
extra_datar/   r/   r/   r0   r3     s   r3   )*)8django.template.loaderr   Z oscar.apps.order.abstract_modelsr   r   r   	django.dbr   Zapps.shippingr   rH   Zapps.shipping.exceptionsr   oscar.core.loadingr	   utilsr   r   django_mysql.models.fieldsr   managersr   	django_rqr   Zcommunication.settingsr   Zcommunication.tasksr   django.utilsr   Zsubscription.modelsr   r   iodjango.confr   rf   Zstripe_payment.modelsr   r   r   Zstripe_payment.gatewayr   helpersr   Zsubscription.signalsr   r   r   r   r!   r"   r#   r   r3   Zoscar.apps.order.modelsr/   r/   r/   r0   <module>   s>   



 R