o
    ţ5h                     @   s  d dl Z d dlZd dlZee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 d dlmZmZmZmZmZ d	d
lmZmZmZmZmZmZm Z m!Z!m"Z"m#Z#m$Z$m%Z%m&Z& d dl'm(Z(m)Z) d dl*m*Z*m+Z+ d dl,m-Z- d dl.m/Z/ d	dl0m1Z1m2Z2m3Z3m4Z4m5Z5m6Z6m7Z7 d dl8m9Z9 d dl:Z:d dl;Z;d dl<Z<d dl=Z=d dl>m?Z? d dl@mAZA d dlBmCZC d dlDmEZE G dd dZFG dd deFe	ZGG dd deFe	ZHG dd deFe	ZIG dd deFe	ZJG dd  d e	ZKG d!d" d"e	ZLG d#d$ d$e	eFZMG d%d& d&e	ZNG d'd( d(e	ZOG d)d* d*e	ZPG d+d, d,e	ZQG d-d. d.e	ZRG d/d0 d0e	ZSG d1d2 d2e	ZTG d3d4 d4e	ZUG d5d6 d6e	ZVG d7d8 d8eFe	ZWdS )9    N)Decimal)APIView)Responsestatus)get_object_or_404)ProductionUnitShop)CustomProductProductImageProductsWishlistSalesUnitProductSelection   )CartCartItemSKUDeliverySlotDiscountOrdersDropaddressOrderProductsCouponsPaymentAdsOrderDeliveryNotificationStat)UserLocationAddress)datetime	timedelta)timezone)transaction)OrderSerializerPastOrderListSerializerAdSerializerOrderSerializer2CourierDetailsSerializerCustomOrderSerializerOrderBillDetailsSerializer)CustomProductSerializer)settings)View)csrf_exempt)Qc                   @      e Zd Zdd Zdd ZdS )CartViewMixinc                 C   s  |j  }g }d}d}d}d}|D ]}	|	j}
|
j}|j r&|j jjnd}d}t	j
td|jgdtd|jgdB td|gd	B td
|
gdB }|D ]D}|jdkra|j|j v ra|} n2|jdkrr|j|j v rr|} n!|jdkr||j v r|} n|jd
kr|
|j v r|} nqN|
j}|r|j}tt|dt|d   d}| d}n|}d}|jpd|jpd|jpd|jpdd}d}|  D ]\}}|tt|t|d  d7 }q|	j|
j|
j|
j|	j|||
j |
j!|j"||d}|#| |tt||	j d7 }|t||	j 7 }|tt|t| |	j d7 }qt|d}t|d}t|d}d}|j$r?| %|j$|}tt|t| t| t| t| d}||t|d||| |||j$rj|j$j&ndd}t'd|||dt(j)dS )z3Helper method to format cart items into a response.r      NCategory)
DiscountOnApplicableCategory__inSubCategory)r3   ApplicableSubCategory__inProduct)r3   ApplicableProduct__inSku)r3   ApplicableSku__inr   d      %z0%)i_gsts_gstc_gstcess)cart_item_idsku_idsku_namesku_codequantity	sku_priceoffer_pricesku_unitsku_quantityproduct_nameproduct_imageoffer)subtotaltaxes_and_chargesdelivery_feediscounttotal_savingscoupon_savingsgrand_totalcoupon_code)r   messagedata
price_datar   )*itemsallskuproductimagesexistsfirstimageurlr   objectsfilterr.   item_categoryitem_sub_categoryr3   ApplicableCategoryApplicableSubCategoryApplicableProductApplicableSkusku_mrpDiscountPercentageroundfloatr>   r?   r@   rA   idrD   rE   rF   rI   rJ   	item_nameappendcouponcalculate_coupon_savings
CouponCoder   r   HTTP_200_OK)selfcartrV   
cart_items
items_datasubtotal_sumgst_charges_sumrP   rR   itemr[   r\   rL   applicable_discount	discountsrQ   rj   discount_percentagerH   rM   
gst_values
gst_amountgst_typegst_percent	item_datarN   rO   savingsrS   rT   rX    r   6/var/www/html/Testing_prj/Navya-Bakers/orders/views.pyget_cart_items_response,   s   

 
"


.z%CartViewMixin.get_cart_items_responsec                 C   sJ   d}|j dkr|jd | }|jrt||j}n|j dkr |j}t|dS )z.Calculate the savings from the applied coupon.r   
percentager;   amountr<   )
CouponTyperk   MaxDiscountAmountForPercentageminDiscountAmountrl   )ru   rq   rN   r   r   r   r   rr      s   


z&CartViewMixin.calculate_coupon_savingsN)__name__
__module____qualname__r   rr   r   r   r   r   r0   +   s    xr0   c                   @      e Zd Zdd ZdS )AddOrUpdateCartViewc                 C   s  |j d}|j d}|j dd}|s#|s#|s#tdddtjdS |jjr-|j}d }n|j d	}d }tjj	|r<|nd |sA|nd d
\}}|rvzt
jj|t d}	|	|_|  | |dW S  t
jyu   tdddtjd Y S w |rd |_|  | |dS |D ]6}
|
d}|
dd}|r|dkrtdddtjd  S tt|d}tjj	||d\}}||_|  q| |dS )NskusrU   remove_couponFr   z)SKU data or coupon code must be provided.r   rV   r   anonymous_id)userr   )rs   validity_end_date__gtezCoupon added successfully!zInvalid or expired coupon code.zCoupon removed successfully!r[   rF   r   z;SKU ID and quantity must be provided and greater than zero.rn   )rv   r[   zCart Updated Successfully!)rW   getr   r   HTTP_400_BAD_REQUESTr   is_authenticatedr   rb   get_or_creater   r!   nowrq   saver   DoesNotExistr   r   r   rF   )ru   requestsku_datarU   r   r   r   rv   createdrq   sku_inforC   rF   r[   	cart_itemr   r   r   post   s^   




zAddOrUpdateCartView.postNr   r   r   r   r   r   r   r   r          r   c                   @   r   )RemoveFromCartViewc                 C   sN   t t|d}|j}|  |j s!|  tddd dtjdS | 	|dS )Nr   r   zCart is now empty.r   rV   rW   r   z$Item removed from cart successfully!)
r   r   rv   deleterY   r^   r   r   rt   r   )ru   r   rB   r   rv   r   r   r   r      s   
	zRemoveFromCartView.deleteN)r   r   r   r   r   r   r   r   r      r   r   c                   @   r   )FlushCartViewc                 C   s   |j jrtjj|j d }nz|jd}tjj|d }W n   d }Y |s4tddd dt	j
dS |j   |j sD|  tddd dt	j
dS )	Nr   r   r   r   No cart found for this user.r   r   zCart flushed successfully.)r   r   r   rb   rc   r_   rW   r   r   r   rt   rY   rZ   r   r^   ru   r   rv   r   r   r   r   r     s&   


zFlushCartView.postNr   r   r   r   r   r     r   r   c                   @   r   )GetCartViewc                 C   st   |j jrtjj|j d }nz|jd}tjj|d }W n   d }Y |s4tddd dt	j
dS | |dS )	Nr   r   r   r   r   r   r   zCart retrieved successfully!)r   r   r   rb   rc   r_   rW   r   r   r   rt   r   r   r   r   r   r   (  s   
zGetCartView.postNr   r   r   r   r   r   '  r   r   c                   @   r/   )DeliverySlotSelectionViewc              
   C   s  z|j jrtjj|j d }d}d }|r*|jr*d}|j}|j|j|j	|j
|jd}|  }g }tt }|D ]M}	tddD ]E}
|t|
d }tt| |	j}tt| |	j}|
dkrj||krjq@|d d	|d
 }|||	j|d|d q@q9|jdd d |d d }tdd|||dtjdW S tdddtjdW S  t y } ztddt!|dtjdW  Y d }~S d }~ww )Nr   FT)	shop_name
shop_phoneshop_locationlatitude	longituder      )daysz%d %b %Y %I:%M %pz to z%I:%M %p%Y-%m-%d)delivery_slotslot_iddate
start_timec                 S   s   | d | d fS )Nr   r   r   )xr   r   r   <lambda>i  s    z/DeliverySlotSelectionView.get.<locals>.<lambda>keyr   z0Available delivery slots retrieved successfully!)r   rV   rW   pickup_availableshop_detailsr   zUser is not authenticated.r   An unexpected error occurred.r   rV   	exception)"r   r   r   rb   rc   r_   shop	unit_name
contact_nounit_locationr   r   get_available_delivery_slotsr!   	localtimer   ranger    
make_awarer   combiner   r   end_timestrftimerp   rn   sortr   r   rt   r   	Exceptionstr)ru   r   user_locationr   r   r   available_slots
slots_datacurrent_timeslot
day_offsetfuture_dater   r   r   er   r   r   r   ;  s   
zDeliverySlotSelectionView.getc                 C   s"   t  }tjjdddd}|S )z-Retrieve active and available delivery slots.Tactive)is_availabler   r   )r!   r   r   rb   rc   order_by)ru   r   r   r   r   r   r     s   z6DeliverySlotSelectionView.get_available_delivery_slotsN)r   r   r   r   r   r   r   r   r   r   :  s    Pr   c                   @   r/   )CheckoutAPIViewc                 C   D   	 dt dd t tj t tj }tjj|d s!|S qzGenerate a unique order ID.TIDr;   i  order_ID	randomrandintchoicestringascii_uppercaser   rb   rc   r^   ru   order_idr   r   r   generate_unique_order_id  s
   *z(CheckoutAPIView.generate_unique_order_idc           %      O   s  z|j }tt|d}|jdd}d }d }|s4|jd}	tt|	d}	 |jd}
tt|
d}|j}|jd}tt|d}|j	}|rGdnd	}|j	sNd
}d }|spt
jj|j d|j |j|jdddd|j|j|j|jd}|  }t }||d}|jd }|d }|d }|d }|d }|d }|d }|d }t " ztjjd;i d|d|ddd|d|r|nd d |jd d!d"|jd"d!d#|d$|s|nd d|d|d%|d&|d|d|d|d'd(d)t }|jd	ks|jdkr
||_|  n*|jd
kr4zt j! }W n t"y, } zd }W Y d }~nd }~ww ||_#|  |j$% D ]}|j&} |j'}!| j(|! }"t)jj| j*j+|| |!|"d* q9t,j-t.j/t.j0fd+}#|#j1t2|d, d-d.d/}$t3jj||$d0 d1d2 t4d.d3|j5|$d0 |$d4 |d5d6t6j7d7W W  d    W S  t"y } z"d8|_8|  t4dd9t9|d:t6j:d7W  Y d }~W  d    W S d }~ww 1 sw   Y  W d S  t"y } zt4dd9t9|d:t6j:d7W  Y d }~S d }~ww )<Nr   pickupF
address_idr   r   deliver_datePick UpLocal OrdersLong Distance Orders streetcitystater   namehouse_number_or_name	land_markr   r   state_or_provincepin_coder   r   address_typecontact_numberzCart data fetched successfullyrX   rN   rO   rQ   rR   rS   rT   rP   r   
order_typeorder_status	New Order	user_uuiddrop_addressdelivery_instruction cooking_instructiondelivery_slot_datedelivery_slot_timedelivery_charges	sub_totalcolor_statusWhitecolor_status_updation_time)rK   orderr[   rF   priceauthr;   INRr   r   currencypayment_capturern   pendingr  razorpay_order_idpayment_statusOrder Created Successfullyreceiptr   r  razorpay_payment_linkr   r   r   Failedr   r   r   );r   r   r   rW   r   r   r   r   r   r   r   rb   create
first_name	last_nameflat_nolandmarkr   r   r   phone_numberr   r0   r   r"   atomicr   r   r   r  
store_uuidr   r   r_   r   pu_uuidrY   rZ   r[   rF   rj   r   r\   ro   razorpayClientr+   RAZORPAY_KEY_IDRAZORPAY_KEY_SECRETr  intr   r   r   r   HTTP_201_CREATEDr  r   r   )%ru   r   argskwargsr   rv   r   addressr   r   delivery_slot_idr  r
  r   	shop_uuidr  r  r   
cart_mixincart_responserX   rN   rO   rQ   rR   rS   rT   rP   r  pur   r   r[   rF   r  razorpay_clientrazorpay_orderr   r   r   r     sB  


	





MMYzCheckoutAPIView.postNr   r   r   r   r   r   r   r   r   r     s    r   c                   @   s(   e Zd ZdZdd Zdd Zdd ZdS )	CouponsListViewzf
    View to list all available valid coupons and calculate the savings based on the user's cart.
    c                 C   s  z|j jrtjj|j d }nz|jd}tjj|d }W n   d }Y |s5tdddt	j
dW S | |d}|jd	i d
d}tjj|d}tjjt d}g }|D ]G}	| |	|}
d}d}|
rq| |	|
|}d}||	j|	j|	j|	j|	j|	jdkr|	jnd |	jdkr|	jnd |	j|	jr|	jjnd |	j||d qZtdd|dt	jdW S  ty } ztddt |dt	j
dW  Y d }~S d }~ww )Nr   r   r   r   zNo cart found for the user.r   r   zCart detailsrX   rN   )rv   )r   FTr   r   )coupon_namerU   coupon_descriptioncoupon_typeminimum_bill_amountr  r   max_discount_amounticonterms_and_conditionsr   
applicabler   z%Valid coupons retrieved successfully.)r   rV   couponsr   r   rV   r   )!r   r   r   rb   rc   r_   rW   r   r   r   r   r   r   r   r!   r   get_applicable_itemscalculate_savingsrp   
CouponNamers   CouponDescriptionr   TotalBillAmountr   rk   r   Iconra   TermsAndConditionsrt   r   r   )ru   r   rv   r   price_data_response
cart_totalrw   valid_couponsapplicable_couponsrq   applicable_itemsr   is_applicabler   r   r   r   r   e  sv   zCouponsListView.postc                    s   g } j dkr fdd|D }|S  j dkr" fdd|D }|S  j dkr2 fdd|D }|S  j dkr@ fd	d|D }|S )
zw
        Check if any items in the cart match the applicable categories, subcategories, or SKUs of the coupon.
        r9   c                    s    g | ]}|j  j v r|qS r   )r[   ri   rZ   .0r{   rq   r   r   
<listcomp>  s    z8CouponsListView.get_applicable_items.<locals>.<listcomp>r2   c                    $   g | ]}|j jj j v r|qS r   )r[   r\   rd   rf   rZ   rT  rV  r   r   rW    s
    r5   c                    rX  r   )r[   r\   re   rg   rZ   rT  rV  r   r   rW    s    r7   c                    s"   g | ]}|j j j v r|qS r   )r[   r\   rh   rZ   rT  rV  r   r   rW    s
    )CouponOn)ru   rq   rw   rR  r   rV  r   rG    s*   







z$CouponsListView.get_applicable_itemsc                 C   sX   d}||j kr%|jdkr|j}n|jdkr%|jd | }|jr%t||j}t|d}|S )zu
        Calculate the savings for the user based on the coupon type (DiscountAmount or DiscountPercentage).
        r   r   r   r;   r<   )rK  r   r   rk   r   r   rl   )ru   rq   rR  rO  r   r   r   r   rH    s   



z!CouponsListView.calculate_savingsN)r   r   r   __doc__r   rG  rH  r   r   r   r   r<  `  s
    O#r<  c                   @   r   )VerifyPaymentAPIViewc              
   O   sV  |j }|jd}|jd}|jd}ztjj|d}|j}	tjtj	tj
fd}
|||d}zj|
j| d|_||_|  d|	_|	  tt|d	}|  |	jd
krftddt|	jdddW W S |	jdkrxtddt|	jdW W S |	jdkrtddt|	jdddW W S tddt|	jdddW W S  tjjy   d|	_|	  td|	j d tddddd Y W S  ty } z#d|	_|	  td|	j d|  tdddddW  Y d }~W S d }~ww  ty* } z/tjj|d}|j}	d|	_|	  td|	j d|  tddt |dddW  Y d }~S d }~ww )Nr  razorpay_payment_idrazorpay_signature)r  r  )r  r\  r]  Paid	Confirmedr   r   r   zPayment Verified Successfullyr   rV   order_details   r   Custom Ordersr   r!  zPayment Failed for z : Signature Verification Failed r   zPayment verification failedr   i  z Payment Verification Failed for z: r   r   )!r   rW   r   r   rb   r  r+  r,  r+   r-  r.  utilityverify_payment_signaturer  r\  r   r  r   r   r   r  r   r#   r(   r&   errorsSignatureVerificationErrorloggererrorr   r   r   r   )ru   r   r1  r2  r   r  r\  r]  paymentr  r9  paramsrv   r   r   r   r   r     s   





	



zVerifyPaymentAPIView.postNr   r   r   r   r   r[    r   r[  c                   @   r   )PastOrdersListAPIViewc                 O   s   |j }tjj|djddd}t|ddj}|D ]2}|d dkr,|d	 d
kr,d|d	< |d dkr7d|d< q|d dkrBd|d< q|d dkrLd|d< qtdd|dt	j
dS )N)r  r  )r  z-created_dateTmanyr  r   r  	DeliveredOrder collectedr   homeHomeworkWorkothersOthersr   z Past orders fetched successfully)r   rV   ordersr   )r   r   rb   rc   excluder   r$   rW   r   r   rt   )ru   r   r1  r2  r   rw  
serializerir   r   r   r   c  s*   

zPastOrdersListAPIView.getNr   r   r   r   r   r   r   r   rl  b  r   rl  c                   @   r   )PastOrderDetailAPIViewc                 C   s  zpt jj||jd}|jdkrt|j}nP|jdkr@t|j}|ddks-|ddkr?tjj	|d
 }t|j}||d< n%|jd	krKt|j}n|jd
kr`t|j}|d dkr_d|d< nt|j}tdd|dtjdW S  t jy   tddttdtjd Y S w )N)uuidr  r   r   r  
Despatchedro  )r  courier_detailsrc  r   rp  r   z"Order details fetched successfullyr`  r   r   z"Error while fetching order details)r   rV   exc)r   rb   r   r   r  r#   rW   r&   r   rc   r_   r'   r(   r   r   rt   r   r   r   )ru   r   
order_uuidr  ry  order_deliveryr  r   r   r   r   ~  sF   








zPastOrderDetailAPIView.getNr{  r   r   r   r   r|  }  r   r|  c                   @   r   )AddressChangeViewc                 C   s  |j jr|j }|jd}tjj||d}tjj|d }d }|j	r|j	}|j
|jf}|j
|jf}tjdd}	|	j||dd}
|
d d	 d
 d	 d dkrw|
d d	 d
 d	 d d }||jd krmtddddddS td	dddddS td	dddddS tddddddS d S )Nr   )rn   r   r   'AIzaSyBqLt_zwm0JnJR8Rm29_Lqrs0I5P0CkcYUr   driving)originsdestinationsmoderowsr   elementsr   OKdistancevaluei  r   zAddress change applicable.T)r   rV   proceedrb  r   zDAddress change not possible. Address is outside the delivery radius.F)r   r   rW   r   r   rb   r   rc   r_   r   r   r   
googlemapsr,  distance_matrixdelivery_radiusr   )ru   r   r   r   r3  r   r   new_address_coordsshop_location_coordsgmapsresultroad_distancer   r   r   r     sX   			zAddressChangeView.postNr   r   r   r   r   r    r   r  c                   @   r   )CustomOrderCheckoutAPIViewc                 O   sH  z|j jr|j }|jdd}|jdd }d }d }tjj|d }	|	jdkr1t	dddW S |	s;t	dd	dW S |sX|jd
}
t
t|
d}|jd}t
t|d}|j}|jd}d }|stjj|j d|j |j|jdddd|j|j|j|jd}t m tjj|djd|r|nd |jdd|jdd||s|nd d}|dkrtdtjtjtj fd}|j!t"|	j#d ddd}t$jj|	|d dd  t	dd!|	j%|d |d" |	j#d#d$t&j'd%W  d    W S 1 sw   Y  W d S t	dd&dW S  ty# } zt	dd't(|d(t&j)d%W  Y d }~S d }~ww ))Nr   Fr   r   Bill Createdr   zPayment not allowed!r   zOrder not found!r   r   r   r   r   r   r   r   r   r  r  r  r	  )r  r  r  r	  r
  r  z(Update failed! Rolling back transaction.r  r;   r  r   r  rn   r  r  r  r  r  r   r   User not Authenticatedr   r   )*r   r   rW   r   r   rb   rc   r_   r  r   r   r   r   r   r   r"  r#  r$  r%  r&  r   r   r   r'  r"   r(  updater   r+  r,  r+   r-  r.  r  r/  rT   r   r   r   r0  r   r   )ru   r   r1  r2  r   r   r   r3  r   r  r   r4  r  r
  r  order_updater9  r:  r   r   r   r   r     s   





(/zCustomOrderCheckoutAPIView.postNr   r   r   r   r   r    s    r  c                   @   r   )AdListAPIViewc              
   C   st   zt j }t|dd}tddd|jidtjdW S  ty9 } ztdd	t	|d
tj
dW  Y d }~S d }~ww )NTrm  r   zAd Listed Successfullyadsr   r   r   r   r   )r   rb   rZ   r%   r   rW   r   rt   r   r   r   )ru   r   r  ad_serializerr   r   r   r   r   d  s*   
zAdListAPIView.getNr{  r   r   r   r   r  b  s    r  c                   @      e Zd ZdZdd ZdS )DiscountDetailViewz_
    View to retrieve the details of a selected discount and list the associated products.
    c                    s  z9|j jrtjj|j d n|jd}tjj|d r:jr:jj	}t
jj|dd}dd |D  tt|d}g }|jd	krT|j }tjj|d
}	n0|jdkrf|j }
tjj|
d}	n|jdkrs|j }|}	n|jdkr|j }tjj|d}	|	D ]}tjj|d }|r|jjnd }rjrtjj|ddgd}ntjj|ddgdd}|j|j|j|jr|jnd|j r|j jnd |j rt !|j jd|jd   nd || r| j"nd | r| j#nd | r| j$nd  fdd|D |j jr!|jdd t%jj|j dD v ndd}|&| qt'dd|j(|j)|dt*j+d W S  t,yZ } zt'dd!t-|d"t*j.d W  Y d }~S d }~ww )#Nr   r   r   )sales_unit__uuidr[   c                 S   s   i | ]}|j r|j j|jqS r   )r[   rn   shop_admin_status)rU  	selectionr   r   r   
<dictcomp>  s    
z*DiscountDetailView.get.<locals>.<dictcomp>r   r2   )item_category__inr5   )item_sub_category__inr7   r9   )skus__in)r\   VisiblezOut of Stock)r\   sku_status__in   )r\   r  sku_expiry_duration__gtr   r   r;   c                    s0   g | ]}|j rjr |jn|jd qS ))rD   
sku_status)rD   r   r   rn   r  )rU  r[   sku_status_mapr   r   r   rW    s    z*DiscountDetailView.get.<locals>.<listcomp>c                 S   s   g | ]}|j jqS r   )r\   rn   )rU  wishlistr   r   r   rW    s    F)
product_idrK   product_typerM   r  
offerpriceproduct_imgrD   rJ   rI   r   r  z5Discount details and products retrieved successfully.)r   rV   discount_namediscount_codeproductsr   r   rF  )/r   r   r   rb   rc   r_   rW   r   r   r}  r   select_relatedr   r   r3   rf   rZ   r   rg   rh   ri   r   r`   ra   r   rn   ro   veg_or_non_veg_statusrk   r   r^   rj   r   
from_floatrD   rJ   rI   r   rp   r   DiscountNameDiscountCoder   rt   r   r   r   )ru   r   discount_idr   shop_idproduct_selectionsrQ   product_info_listapplicable_categoriesr  applicable_subcategoriesapplicable_productsapplicable_skusr\   rL   product_image_urlr   product_infor   r   r  r   r     s   









,,
zDiscountDetailView.getNr   r   r   rZ  r   r   r   r   r   r  ~      r  c                   @   r  )DiscountsListViewzI
    View to list all discounts with DiscountName and StandardImage.
    c              
   C   s   z!zt j }W n   g }Y dd |D }tdd|dtjdW S  ty@ } ztddt|d	tjdW  Y d }~S d }~ww )
Nc                 S   s*   g | ]}|j |j|jr|jjnd dqS )N)rn   r  StandardImage)rn   r  r  ra   )rU  rQ   r   r   r   rW    s    z)DiscountsListView.get.<locals>.<listcomp>r   z!Discounts retrieved successfully.)r   rV   r}   r   r   r   rF  )	r   rb   rZ   r   r   rt   r   r   r   )ru   r   r}   discounts_datar   r   r   r   r     s2   
	zDiscountsListView.getNr  r   r   r   r   r    r  r  c                   @   r/   )Customorder_placingc                 C   r   r   r   r   r   r   r   r     s
   *z,Customorder_placing.generate_unique_order_idc                 C   s  zdt t|d}|jd}|jd}|r|s!tdditjdW S |j}t t|d}|s6tdditjdW S |j	}|j
sFtdd	itjdW S tjj|  |d
||||ddd	}	tddt|	jdddW S  ty }
 ztddt|
dtjdW  Y d }
~
S d }
~
ww )N)pkdescriptionrV   ri  zAll fields are required!r   r   zPlease add your locationzUser is not authenticatedrc  Enquiryr  )	r   custom_productr  r  r)  r  rV   r  r  r   z"Custom order created successfully!r`  rb  r   r   )r   rV   ri  )r   r
   rW   r   r   r   r   r   r   r   r   HTTP_401_UNAUTHORIZEDr   rb   r"  r   r(   r   r   HTTP_500_INTERNAL_SERVER_ERROR)ru   r   rn   r  r  rV   r   locationr   	new_orderr   r   r   r   r   #  sP   
zCustomorder_placing.postNr;  r   r   r   r   r    s    r  c                   @   r  )NotificationListViewz0
    View to list all notification history.
    c                 C   sN  z|j jrztjj|j d }W n   g }Y g }|D ]W}|jdkrSt|j}t	|jj
}||j|j|j|jj|jj|jj|jd|jdd|j|jd q||j|j|j|jj|jj|jj|jd|jddd	 qtdd	|d
tjdW S tdddW S  ty } ztddt|dtjdW  Y d }~S d }~ww )N)sendTor  r   z%H:%M:%S)rn   SendmsgDescriptionOrderIDr  r  r   timenotification_typeproduct_detailsbill_detailsNormal)	rn   r  r  r  r  r  r   r  r  r   z,Notification history retrieved successfully.)r   rV   notification_listr   r   r  r   r   rF  )r   r   r   rb   rc   rZ   r  r)   r  r*   r  rp   rn   r  r   r  r}  created_dater   rW   r   r   rt   r   r   r   )ru   r   r  notification_list_datanotificationr  r  r   r   r   r   r   W  sp   







	
zNotificationListView.getNr  r   r   r   r   r  S  s    r  )Xr}  requestslogging	getLoggerr   rh  decimalr   rest_framework.viewsr   rest_framework.responser   rest_frameworkr   django.shortcutsr   shops.modelsr   r	   products.modelsr
   r   r   r   r   modelsr   r   r   r   r   r   r   r   r   r   r   r   r   accounts.modelsr   r   r   r    django.utilsr!   	django.dbr"   serializersr#   r$   r%   r&   r'   r(   r)   products.serializersr*   r   r   r  r+  django.confr+   django.viewsr,   django.views.decorators.csrfr-   django.db.modelsr.   r0   r   r   r   r   r   r   r<  r[  rl  r|  r  r  r  r  r  r  r  r   r   r   r   <module>   sZ    
<$ C_ H t/8~t)8