
    AiI9                       d dl Z d dlZd dlZd dlZd dlZd dlmZ d dlmZm	Z	 d dl
mZ  ej                  e      Zd dlmZ d dlmZ d dl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mZ d dl m!Z!m"Z" d dl#m$Z$ d dl%m&Z&m'Z'm(Z(m)Z)m*Z*m+Z+ ddl,m-Z-m.Z.m/Z/m0Z0m1Z1m2Z2m3Z3m4Z4m5Z5m6Z6m7Z7m8Z8m9Z9m:Z:m;Z;m<Z<m=Z=m>Z>m?Z?m@Z@mAZA d dlBmCZCmDZDmEZEmFZF d dlGmGZGmHZH d dlImJZJ d dlKmLZL ddlMmNZNmOZOmPZPmQZQmRZRmSZSmTZTmUZU d dlVmWZW d dlXZXd dlYZYd dlZZZd dl[Z[d dl\m]Z] d dl^m_Z_ d dl`maZa d dlbmcZc d dldmeZe d dlfZfd dlgmhZh d dlmZ ddlimjZj  G d d       Zk G d! d"eke      Zl G d# d$eke      Zm G d% d&eke      Zn G d' d(eke      Zo G d) d*e      Zp G d+ d,eke      Zq G d- d.eke      Zr G d/ d0eke      Zs G d1 d2e      Zt G d3 d4eek      Zu G d5 d6e      Zv G d7 d8e      Zw G d9 d:e      Zx G d; d<e      Zy G d= d>e      Zz G d? d@e      Z{ G dA dBe      Z| G dC dDe      Z} G dE dFe      Z~ G dG dHe      Z G dI dJeke      Z G dK dLe      Z G dM dNe      ZdO Z G dP dQe      Z G dR dSe      Z G dT dUe      Z G dV dWe      Zy)X    N)send_whatsapp_message)	EmailSendNotificationInit)check_and_verify_order_status)	localtime)parse)ROUND_HALF_UPDecimal)APIView)Responsestatus)get_object_or_404render)ProductionUnitShop)order_confirmed)CustomProductProductImageProductsWishlistSalesUnitProductSelectionCustomProductImage   )CartCartItemSKUCartItemCustomizationCustomOrderTrackingDeliverySlotDiscountOrderProductCustomizationOrdersDropaddressOrderProductsCouponsCustomCouponPaymentAdsOrderDeliveryNotificationStatPaymentModesSomeOneElseDeliverySettingsDeliveryDiscount)UserLocationAddressReferralUsers)datetime	timedelta)timezone)transaction)CustomOrderCreateSerializerOrderSerializerPastOrderListSerializerAdSerializerOrderSerializer2CourierDetailsSerializerCustomOrderSerializerOrderBillDetailsSerializer)CustomProductSerializer)settings)View)csrf_exempt)Q)FileResponse)template_writer)r
   )billdesk_utilsc                   &    e Zd ZddZd Zd Zd Zy)CartViewMixinc                 F   t         j                  j                         }|st        d      dfS t        t	        |            }t        t	        |            }|j
                  t        d      kD  r|j                  t        d      kD  rl||j
                  k  r]||j                  k\  rt        d      dfS |j                  |z
  }|j                  t        d      t              }|j                  d| dfS |j                  }|j                  }|j                  }||kD  r||z
  }|||z  z   }	n|}	t        j                  j                  d      }
d	}d }|
D ]@  }||j                  k\  st        |j                        t        d
      z  }||	z  }|	|z  }	|} n |
D cg c]  }||j                  k  s| }}|rH|d   }|j                  |z
  }|j                  t        d      t              }d| d|j                   d}n|
d   }|j                   d}t!        |	d      |fS c c}w )Nz0.0z!Delivery settings not configured.zFree delivery applied!z0.01)roundingu   Add ₹z more to get free delivery.z-min_order_value z100.0z more to get z% off on delivery.r   z% discount applied on delivery.   )r.   objectsfirstr
   strfree_delivery_max_distancefree_delivery_min_order_valuequantizer	   base_feebase_km
per_km_feer/   order_bymin_order_valuediscount_percentround)selfsubtotaldistance_kmrA   	remainingrU   rV   rW   extra_kmdelivery_fee	discountsmessageapplied_discountdiscountrZ   discount_amountdnext_discountsnext_discounts                      .E:\Akash\Saasvaap\Navya-Bakers\orders\views.pycalculate_dynamic_delivery_feez,CartViewMixin.calculate_dynamic_delivery_feeh   sI   #++1135>#FFF c+./3x=) //'%.@66GxBBB8AAAu~'???$BBXM	%..wv.W	((GI;>Y*ZZZ $$""((
 "W,H#zH'<=L#L %,,556HI	!H8333#*8+D+D#EPWHX#X "2\"A/#+  " &/OY(Q=N=N2N!YO*2.M%55@I!**76?]*SI	{-8V8V7WWijG  )|)::;;Z[G\1%w.. Ps   H,Hc                 >   t         j                  j                  |      j                         }|rOt	        d|j
                  r|j
                  nd|j                  r|j                  nddt        j                        S t	        ddddt        j                        S )Ncartr   rL   )r   namephone_numberr   r   )
r-   rO   filterrP   r   ro   rp   r   HTTP_200_OKHTTP_404_NOT_FOUND)r\   rn   some_one_detailss      rj   order_for_someone_else_detailsz,CartViewMixin.order_for_someone_else_details   s    &..55T5BHHJ1A1F1F(--BAQA^A^ 0 = =df
 %%
 
 "$  22     c                 R   |j                   j                         }i }d}d}d}|D ]!  }|j                  }	|	j                  }
|	j                  }||vr|	j                  |	j
                  |	j                  |	j                  |	j                  |
j                  |
j                  j                         r.|
j                  j                         j                  j                  nd|	j                  g |	j                   dd|j                  dd||<   d}t"        j$                  j'                  t)        d|
j*                  g      t)        d|
j,                  g      z  t)        d	|
g
      z  t)        d|	g      z        }|D ]  }|j.                  dk(  r*|
j*                  |j0                  j                         v r|} n|j.                  dk(  r*|
j,                  |j2                  j                         v r|} na|j.                  d	k(  r |
|j4                  j                         v r|} n2|j.                  dk(  s|	|j6                  j                         v s|} n |	j                   }|r9|j8                  }t;        t=        |      dt=        |      dz  z
  z  d      }| d}n|}d}|
j>                  xs d|
j@                  xs d|
jB                  xs dd}d}|j                         D ],  \  }}|t;        t=        |      t=        |      dz  z  d      z  }. |||   d<   |||   d<   ||   dxx   |jD                  z  cc<   |t;        t=        |      |jD                  z  d      z  }|t=        |      |jD                  z  z  }|t;        t=        |      t=        |      z
  |jD                  z  d      z  }|	j                  s|jF                  j                         D ]x  }||   d   jI                  |j                  |j                  |jJ                  |jL                  r|jL                  j                  nd|jN                  |jQ                         d       z $ tS        |jU                               }d}|jV                  r|tY        |jV                  tZ              rtZ        j$                  j'                  |jV                  j\                        j                         }|rV| j_                  |||j`                        }n8|jb                  r*|jb                  }| j_                  |||j`                        }nd}d}|j`                  ratd        j$                  j'                  |j`                        jg                  d      j                         }|r|jh                  |jh                  }| jk                  ||      \  }}t;        t=        |      t=        |      z   t=        |      z
  t=        |      z
  t=        |      z   d      } t;        |d      t;        |d      t;        |d      t;        |d      t;        ||z   d      t;        |d      | |jV                  r|jV                  j\                  n|jb                  d}!tl        j$                  j'                  |      j                         }"|"r6|"jn                  r|"jn                  nd|"jp                  r|"jp                  ndd}#ni }#tr        j$                  j'                  d !      jU                  d"d#      }$tu        d|||!|#|tS        |$      d$tv        jx                  !      S )%z3Helper method to format cart items into a response.r   Nz0%)sku_idsku_namesku_codesku_unitsku_quantityproduct_nameproduct_imagecustomization_availablecustomization_items	sku_priceoffer_priceoffercart_item_idquantityCategory)
DiscountOnApplicableCategory__inSubCategory)r   ApplicableSubCategory__inProduct)r   ApplicableProduct__inSku)r   ApplicableSku__inr   d   rN   %)s_gstc_gstcessr   r   r   r   )r   	custom_idcustom_notecustom_imagecustom_image_idhas_customization)
CouponCode        userz-created_at)r^   )r]   taxes_and_chargesra   re   total_savingscoupon_savingsgrand_totalcoupon_coderm   rL   )ro   rp   Tr   	mode_nameid)r   rc   data
price_datasome_one_else_orderdelivery_discount_messageavailable_payment_modes)=itemsallskuproductr   ry   rz   r{   r|   	item_nameimagesexistsrP   imageurlr   sku_mrpr!   rO   rq   rD   item_categoryitem_sub_categoryr   ApplicableCategoryApplicableSubCategoryApplicableProductApplicableSkuDiscountPercentager[   floatr   r   r   r   customizationsappendr   r   r   r   listvaluescoupon
isinstancer&   r   calculate_coupon_savingsr   custom_couponr0   rX   distancerk   r-   ro   rp   r,   r   r   rr   )%r\   rn   rc   
cart_itemsgrouped_itemssubtotal_sumgst_charges_sumr   itemr   r   rx   applicable_discountrb   re   r   discount_percentager   r   
gst_values
gst_amountgst_typegst_percentcustomization
items_datar   
coupon_objr   r^   user_locationra   r   r   r   rt   some_one_orderpayment_modess%                                        rj   get_cart_items_responsez%CartViewMixin.get_cart_items_response   s   ZZ^^%
D((CkkGVVF]*!ff # # #$'$4$4$+$5$5IPI^I^I`W^^%9%9%;%A%A%E%Efj/2/J/J+-!$#'!$(GG !)f%$ #' ((//ZAVAV@WX]wG`G`FabcYwiHI Use<=I &&&*49N9NRZRmRmRqRqRs9s*2'((M9g>W>W[c[y[y[}[}[>*2'((I5'XE_E_EcEcEe:e*2'((E1cX=S=S=W=W=Y6Y*2' & kkG"&9&L&L##E'Na%@S:TWZ:Z6Z$[]^_./q1% !+! +!)J
 J)3)9)9);%+eE'NeK6H36N$OQRSS
 *< 4?M&!-0-2M&!'*&!*->-E%.4=="@!DDLuZ04==@@OUE'NU;5G$G4==#XZ[\\M **%)%8%8%<%<%>M!&)*?@GG(,%2%5%5'4'@'@JWJdJd(B(B(F(Fjn+8+H+H-:-L-L-NI  &?Y l -..01
 ;;$++w/$__33t{{?U?U3V\\^
%)%B%B:|]a]f]f%gN,,K!::;VZV_V_`N!N 99(0077TYY7GPPQ^_eegM!7!7!C+44373V3VWcs~3V3//E,/%2HH5Q^K__bghvbwwz  AM  {N  N  PQ  R lA.!&!:!,2mQ/"=>#A1E#NA6&59[[4;;11dFXFX	

 '..55T5BHHJ1A1F1F(--BAQA^A^ 0 = =dfN
  N %,,3343@GGTXY ""('5,E+/+>	 %%
 	
rv   c                    d}	 t        |t              ro|j                  dk(  r?|j                  xs ddz  |z  }|j                  r-t        ||j                  xs d      }n|j                  dk(  r|j                  xs d}nt        |t              rt        j                  j                  |      j                         }|rB|j                  |k7  r3t        j                  j                  |      j                         }|sqd}nnt        j                  j                  |	      j                         }|r>|j                  |k(  r/|j                   j"                  r|j                   j"                  }nd}	 t+        t-        |      d
      S # t$        $ r}t'        j(                  |       Y d }~9d }~ww xY w# t.        t0        f$ r Y yw xY w)Nr   
percentager   r   amountreferral_code	user_uuidg      Y@r   rN   )r   r&   
CouponTyper   MaxDiscountAmountForPercentageminDiscountAmountrQ   r2   rO   rq   rP   r   r#   r   r'   r   rf   	Exceptionloggingerrorr[   r   	TypeError
ValueError)	r\   r   r]   r   savingsreferralhas_previous_ordersr   es	            rj   r   z&CartViewMixin.calculate_coupon_savingsS  s   	&'*$$4%88=ADxOG<<"%gv/T/T/YXY"Z&&(2$33:sGFC(#++222HNNP 5*0..*?*?$*?*O*V*V*X'."'$0$8$8$?$?F$?$S$Y$Y$[M$););t)C(//??&3&:&:&J&JG&)G
	w++  	MM!	 :& 		s*   E/F	 4F4 		F1F,,F14GGN)r   )__name__
__module____qualname__rk   ru   r   r    rv   rj   rI   rI   I   s    >8/t*Z
x!rv   rI   c                       e Zd Zd Zy)AddOrUpdateCartViewc                    |j                   j                  d      }	 t        |t              rt	        j
                  |      n|}|j                   j                  d      }|j                   j                  dd      }|s"|s |st        dd	dt        j                        S |j                  j                  r|j                  }d }n|j                   j                  d
      }d }t        j                  j                  |r|nd |s|nd       \  }}	|rt        j                  j!                  |t#        j$                               j'                         }
|
r)|
|_        |j+                          | j-                  |d      S t.        j                  j!                  |      j'                         }|r|j                  |k7  rwt0        j                  j!                  |      j3                         }|s)||_        |j+                          | j-                  |d      S t        dddt        j                        S t        dddt        j                        S t6        j                  j!                  |      j'                         }|rV|j                  |k7  rt        dddt        j                        S ||_        |j+                          | j-                  |d      S t        dddt        j                        S |r0d |_        d|_        |j+                          | j-                  |d      S |D ];  }|j                  d      }|j                  dd      }|j                  dg       }|r|dk  r t        dddt        j                        c S t9        t:        |      }t<        j                  j                  ||      \  }}t?        |      }||_         |j+                          g }|D ]?  }|j                  d       }|j                  d!      }|j                  d"      }|r|jB                  j                  |      nd }|r	 tD        j                  j                  ||#      }|d$v r|d$v r|s|jG                          ||_$        ||_%        |r||_&        |d |_&        |j+                          |jO                  |jP                         |d$v r|s|stD        j                  jU                  |||%      }|r||_&        |j+                          |jO                  |jP                         B tD        j                  j!                  |&      jW                  |'      jG                          > | j-                  |d(      S # t        j                  $ r! t        dddt        j                        cY S w xY w# tD        jR                  $ r Y w xY w))Nskusr   z%Invalid JSON format for 'skus' field.r   rc   r   r   remove_couponFz)SKU data or coupon code must be provided.anonymous_id)r   r   )r   validity_end_date__gtezCoupon added successfully!r   r   z#Referral code applied successfully!z1Referral code is only valid for first-time users.z&You cannot use your own referral code.r   z-Coupon code is only valid for approved users.z!Coupon code applied successfully!z(Invalid or expired coupon/referral code.rL   zCoupon removed successfully!r   r   r   customisationz;SKU ID and quantity must be provided and greater than zero.r   )rn   r   r   r   r   )r   	cart_item)rL   N)r   r   r   )r   )id__inzCart Updated Successfully!),r   getr   rQ   jsonloadsJSONDecodeErrorr   r   HTTP_400_BAD_REQUESTr   is_authenticatedr   rO   get_or_creater&   rq   r6   nowrP   r   saver   r2   r#   r   r   r'   r   r   r   lenr   FILESr   deleter   r   r   r   r   DoesNotExistcreateexclude)r\   requestsku_data_rawsku_datar   r   r   r   rn   createdr   r   r   r   sku_inforx   r   customization_datar   r   _total_custom_entriesexisting_custom_idscustomr   r   r   r   r   
new_customs                                 rj   postzAddOrUpdateCartView.posty  sr   ||''/	3=lC3Ptzz,/VbH ll&&}5((%@M)TU22 
 <<((<<DL"<<++N;LD 224$lTX 3 
g
 __++{[c[g[g[i+jpprF$		33D:VWW $++222MSSU}},.4nn.C.Cd.C.S.Z.Z.\+21<D. IIK#'#?#?Fk#ll#++,9l m'-'B'B$ 
  ('(5]^#)#>#>  
 %1$8$8$?$?k$?$Z$`$`$bM$(--5#++,9h i'-'B'B$  .9*		#;;DBeff##$1[\%::  DK!#DIIK//6TUU !H\\%(F||J2H!)or!B X]"##` "66  $CF3C#++99t9MLIq#&'9#: !)INN"$,"JJ{3	$jj7"(**->"?ETw}}00AZ^
 (=(E(E(I(I(I )J ) )J6_PZ=Zdp)002$
 5@1 9H5 (9EM6 +29=M6%**,+22=3C3CD $z1?S_ !6!>!>!E!E"+$/(7 "F "J $2>
/")'..z}}=} -H "))0090EMM* N ,,2FHC !V ++D2NOOq ## 	)PQ22 	b 1== s*   'U9 <;V08AV091V-,V-0WWNr   r   r   r  r   rv   rj   r   r   x  s	    }Prv   r   c                       e Zd Zd Zy)RemoveFromCartViewc                 v   t        t        |      }|j                  }|j                          t        j
                  j                  |      }|r|j                          |j                  j                         s/|j                          t        ddd dt        j                        S | j                  |d      S )Nr   rm   r   zCart is now empty.r   rc   r   r   z$Item removed from cart successfully!)r   r   rn   r  r-   rO   rq   r   r   r   r   rr   r   )r\   r
  r   r   rn   some_one_elses         rj   r  zRemoveFromCartView.delete;  s    %h<@	~~ 	#++222=  "zz  "KKM3 
 ))  ++8
 	
rv   N)r   r   r   r  r   rv   rj   r  r  :      
rv   r  c                       e Zd Zd Zy)FlushCartViewc                    |j                   j                  r9t        j                  j	                  |j                         j                         }nJ	 |j                  j                  d      }t        j                  j	                  |      j                         }|st        ddd dt        j                        S t        j                  j	                  |      }|r|j                          |j                  j                         j                          |j                  j                         s|j                          t        dd	d dt        j                        S #  d }Y xY w)
Nr   r   r   r   No cart found for this user.r  r   rm   zCart flushed successfully.)r   r   r   rO   rq   rP   r   r   r   r   rr   r-   r  r   r   r   )r\   r
  rn   r   r  s        rj   r  zFlushCartView.postX  s   <<((<<&&GLL&9??AD&||//?||***EKKM )GQUV))  $++222=  "

!zz  "KKM%A4P%%
 	
#s   A	E E$Nr  r   rv   rj   r  r  W  s    
rv   r  c                       e Zd Zd Zy)GetCartViewc                    |j                   j                  r9t        j                  j	                  |j                         j                         }nJ	 |j                  j                  d      }t        j                  j	                  |      j                         }|st        ddd dt        j                        S | j                  |d      S #  d }Y 9xY w)	Nr   r   r   r   r!  r  r   zCart retrieved successfully!)r   r   r   rO   rq   rP   r   r   r   r   rr   r   )r\   r
  rn   r   s       rj   r  zGetCartView.postw  s    <<((<<&&GLL&9??AD&||//?||***EKKM )GQUV)) 
 ++D2PQQs   A	C CNr  r   rv   rj   r#  r#  v  s    Rrv   r#  c                       e Zd Zd Zd Zy)DeliverySlotSelectionViewc           	      b   	 |j                   j                  r<t        j                  j	                  |j                         j                         }d}d }|rT|j                  rHd}|j                  }|j                  |j                  |j                  |j                  |j                  d}| j                         }g }t               }t        j                  t        j                                }	|D ](  }
t#        dd      D ]  }|	t%        |      z   }t        j&                  t)        j*                  |j-                         |
j.                              }t        j&                  t)        j*                  |j-                         |
j0                              }|dk(  r||	k  r|
j2                  }||v r|j5                  |       |j7                  d       d	|j7                  d
       }|j9                  ||
j2                  |j7                  d      |d        + |j;                  d        |d d }t=        dd|||dt>        j@                        S t=        dddt>        jB                        S # tD        $ r2}t=        ddtG        |      dt>        jB                        cY d }~S d }~ww xY 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                     | d   | d   fS )Nr2  r3  r   )xs    rj   <lambda>z/DeliverySlotSelectionView.get.<locals>.<lambda>  s    qy!L/.Jrv   keyr   z0Available delivery slots retrieved successfully!)r   rc   r   pickup_availableshop_detailsr   zUser is not authenticated.r   An unexpected error occurred.r   rc   	exception)$r   r   r0   rO   rq   rP   shop	unit_name
contact_nounit_locationr+  r,  get_available_delivery_slotssetr6   r   r  ranger5   
make_awarer4   combiner2  r3  end_timer   addstrftimer   sortr   r   rr   r   r   rQ   )r\   r
  r   r9  r:  r>  available_slots
slots_dataseencurrent_timeslot
day_offsetfuture_dater3  rG  r8  r0  r   s                     rj   r   zDeliverySlotSelectionView.get  s{   R	||,, , 4 4 ; ; ; N T T V#( # ]%7%7'+$(--D%)^^&*oo)-););#'==$(NN$L #'"C"C"E
u'11(,,.A ,D&+Aqk
&2YJ5O&O%-%8%8$,,[-=-=-?Q&
 $,#6#6$,,[-=-=-?O$ &?z\/I$"gg$;$+5+>+>?R+S*TTXYaYjYjkuYvXw(x"))1>+/77(3(<(<Z(H.8	# '2 ,8 $JK'^
"##U *,<'3 "--	 	  "##? "66   	>!$Q
 22 	s$   II3 I3 3	J.<'J)#J.)J.c                     t        j                         }t        j                  j	                  dd      j                  d      }|S )z-Retrieve active and available delivery slots.Tactive)is_availabler   r3  )r6   r  r    rO   rq   rX   )r\   r  rK  s      rj   rB  z6DeliverySlotSelectionView.get_available_delivery_slots  sH    lln&..55 6 
 (
 	 rv   N)r   r   r   r   rB  r   rv   rj   r&  r&    s    Sjrv   r&  c                       e Zd Zd Zy)!AddOrUpdateSomeOneElseOrderDetailc                    |j                   j                  dd      }|j                   j                  dd      }|j                   j                  dd      }t        j                  j	                  |j
                        j                         }|j                   j                  dd      }|s |st        ddd	t        j                  
      S |rt        j                  j	                  |      j                         }|r|j                  dk7  rt        ddd	t        j                  
      S 	 t        j                  j                  |      \  }}	|r|nd|_        |r|nd|_        |r|nd|_        |j#                          t        dd||dt        j$                  
      S y |s"|s |st        ddd	t        j                  
      S |st        ddd	t        j,                  
      S 	 t        j                  j                  |      \  }}	|r|nd|_        |r|nd|_        |r|nd|_        |j#                          t        dd||dt        j$                  
      S # t&        $ r2}
t        ddt)        |
      dt        j*                  
      cY d }
~
S d }
~
ww xY w# t&        $ r2}
t        ddt)        |
      dt        j*                  
      cY d }
~
S d }
~
ww xY w)Nro   rL   rp   rc   r   order_idr   z%other person details should be given.r   r   )uuidCustom Ordersz,Invalid Order type please check order detail)ordersr   z(Some one else data created successfully!r   rc   ro   rp   z"Some one else data creation failedr   rc   r   z5Cart detail and other person details should be given.z,Cart couldn't found please check cart numberrm   )r   r   r   rO   rq   r   rP   r   r   r   r#   
order_typer-   r  ro   rp   rc   r  HTTP_201_CREATEDr   rQ   HTTP_500_INTERNAL_SERVER_ERRORrs   )r\   r
  ro   rp   rc   rn   rX  ordersome_oner  r   s              rj   r  z&AddOrUpdateSomeOneElseOrderDetail.post  s   ||+||'';,,""9b1||"""5;;=<<##J3L)PQ22 
 NN))):@@BE##6##$1_`%:: E(3(;(;(I(IQV(I(W%Hg,0DbHM<HLbH)29wrH$MMO#"##M $(4	%
 %557 7 4 T -de!66  ,Z!"557 7B%0%8%8%F%FD%F%Q"7(,"8D"%.572 I $0	!
 #335 51 ! E#"##G!$Q% %CC	E EE<  BC V! "@@	B BBs>   +A3I %A3J 	J"'J	JJ	K 'KKKNr  r   rv   rj   rV  rV    s	    DBrv   rV  c                       e Zd Zd Zy)GetSomeOneElseOrderDetailc                    t         j                  j                  |j                        j	                         }|rt
        j                  j                  |      j	                         }|r4t        dd|j                  |j                  dt        j                        S t        ddd	t        j                        S t        dd
d	t        j                        S )Nr   rm   r   z*Some one else data retrieved successfully!r\  r   r   Some one else data not foundr   Cart not found)r   rO   rq   r   rP   r-   r   ro   rp   r   rr   rs   )r\   r
  rn   some_one_datas       rj   r   zGetSomeOneElseOrderDetail.get7  s    ||"""5;;='//66d6CIIKMK)..$1$>$>	!
 "--/ /  =! "44	6 6 + 113 3rv   Nr   r   r   r   r   rv   rj   rd  rd  6  s    3rv   rd  c                       e Zd Zd Zy)DeleteGetSomeOneElseOrderDetailc                    t         j                  j                  |j                        j	                         }|rt
        j                  j                  |      }|j	                         }|j                  }|j                  }|r0|j                          t        dd||dt        j                        S t        ddd	t        j                        S t        dd
d	t        j                        S )Nr   rm   r   z(Some one else data deleted successfully!r\  r   r   rf  r   rg  )r   rO   rq   r   rP   r-   ro   rp   r  r   r   rr   rs   )r\   r
  rn   rb  rh  ro   rp   s          rj   r  z$DeleteGetSomeOneElseOrderDetail.postP  s    ||"""5;;="**11t1<H$NN,M %%D(55L!I $0	!
 !,,. .  =! !33	5 5 + //1 1rv   Nr  r   rv   rj   rk  rk  O  s    1rv   rk  c                       e Zd Zd Zd Zy)CheckoutAPIViewc                 $   	 dt        j                  dd       t        j                  t        j                         t        j                  t        j                         }t
        j                  j                  |      j                         s|S zGenerate a unique order ID.IDr   i  order_ID	randomrandintchoicestringascii_uppercaser#   rO   rq   r   r\   rX  s     rj   generate_unique_order_idz(CheckoutAPIView.generate_unique_order_idp      FNN345fmmFDZDZ6[5\]c]j]jkq  lB  lB  ^C  ]D  EH>>((((;BBD	 rv   c                    	 |j                   }|j                  j                  dd      }t        |      }|j                  j
                  }t        j                  d|        d}|dk(  s|dk(  s
|dk(  s|dk(  rd	}n|d
k(  rd}n|dk(  s|dk(  rd}nd}t        t        |      }	|j                  j                  dd      }
d }d }|
su|j                  j                  d      }t        t        |      }t        j                  t        j                        }d|j                    d|j"                   d| }t%        j                  |      }|j&                  dk(  r|j)                         }|d   dk(  r>|d   d   d   }dx}x}x}}|D ]%  }|d   }|d   }d |v r|}d!|v r|}d"|v r|}d#|v s$|}' nTt+        dd$t-        |j)                               d%t.        j0                  &      S t+        dd'd(t.        j0                  &      S |j                  j                  d)      }t        t2        |      }|j4                  }|j                  j                  d*      }t        t6        |      }|j8                  }|
rd+nd,}|j8                  sd-}d } |
st:        j<                  j?                  |j@                   d.|jB                   |jD                  |jF                  |j                   |j"                  |jH                  |jJ                  /      } | jM                         }!tO               }"|"jQ                  |	d0      }#|#j                  d1   }$|$d2   }%|$d3   }&|$d4   }'|$d5   }(|$d6   })|$d7   }*|$d8   }+tS        jT                         5  	 tV        j<                  j?                  |!|d9|| r| nd |j                  j                  d:d      |j                  j                  d;d      ||
snd<|*|&|+|%|(|)|'d=tY        jZ                         |>      },t\        j<                  j_                  |	?      ja                         }-|-r|,|-_1        |-je                          |,jf                  d,k(  s|,jf                  d+k(  r||,_4        |,je                          nE|,jf                  d-k(  r6	 tj        j<                  ja                         }.|.|,_7        |,je                          |	jp                  js                         D ]a  }0|0jt                  }1|0jv                  }2|1jx                  |2z  }3tz        j<                  j?                  |1j|                  j~                  |,|1|2|3@       c t        j                  t        j                  t        j                  fA      }4|4j                  j?                  t        |*dBz        dCdDdE      }5t        j<                  j?                  |,|5dF   dGH       t+        dDdI|,j                  |5dF   |5dJ   |*dKdLt.        j                  &      cd d d        S # tl        $ r}/d }.Y d }/~/gd }/~/ww xY w# tl        $ rR}/dM,_H        |,je                          t+        ddNt-        |/      dOt.        j0                  &      cY d }/~/cd d d        S d }/~/ww xY w# 1 sw Y   y xY w# tl        $ r2}/t+        ddNt-        |/      dOt.        j0                  &      cY d }/~/S d }/~/ww xY w)PNHTTP_USER_AGENTrL   Platform : OtherWindowsMac OS XLinuxUbuntuWebAndroidAndriodiOSFlutter Mobile App / iOSIOSr   pickupF
address_idr   r7  z9https://maps.googleapis.com/maps/api/geocode/json?latlng=,z&key=   r   OKresultsr   address_componentstypes	long_nameroutelocalityadministrative_area_level_1postal_codez1Unable to fetch address details from Google Maps.r   rc   excr   z$Error connecting to Google Maps API.r   r0  deliver_datePick UpLocal OrdersLong Distance Orders ro   house_number_or_name	land_markstreetcitystate_or_provincepin_coder+  r,  address_typecontact_numberCart data fetched successfullyr   r]   r   re   r   r   r   ra   	New Orderdelivery_instructioncooking_instruction19:00White)rs  r^  order_statusr   drop_addressr  r  delivery_slot_datedelivery_slot_timer   r   delivery_charges	sub_totalr   r   re   color_statuscolor_status_updation_timeplatformrm   r}   ra  r   r   priceauthr   INRr   )r   currencypayment_capturer   pending)ra  razorpay_order_idpayment_statusOrder Created Successfullyreceipt)rX  r  razorpay_payment_linkr   r  Failedr;  r<  )Ir   METAr   r   osfamilyr   infor   r   r   r1   
googlemapsClientrA   GOOGLE_MAPS_API_KEYr+  r,  requestsstatus_coder   r   rQ   r   r   r    r3  r0   r>  r$   rO   r  
first_name	last_nameflat_nolandmarkr  rp   r{  rI   r   r7   atomicr#   r4   r  r-   rq   rP   r[  r  r^  
store_uuidr   r   pu_uuidr   r   r   r   r   r%   r   r   razorpayRAZORPAY_KEY_IDRAZORPAY_KEY_SECRETra  intr(   rs  r_  r  )6r\   r
  argskwargsr   	ua_string
user_agentr  platform_datarn   r  addressr0  r  google_maps_api_keygeocode_urlresponser   r  r  r  stater  	componentr  r  delivery_slot_idr  r  r   	shop_uuidr^  r  rX  
cart_mixincart_responser   r]   r   re   r   r   r   ra   ra  r  pur   r   r   r   r  razorpay_clientrazorpay_orders6                                                         rj   r  zCheckoutAPIView.postx  s   \	<<D(():B?Iy)J!}}++HLL;xj12#M9$J(>(gBUYaemYm %Y& )U"i3M&M % ' %T5D\\%%h6FG M $\\--l;
+G
C '1&7&7H<X<X&Y# !ZZaZjZjYkklmtm~m~l  @E  FY  EZ  [#<<4''3.#==?DH~--1)_Q-?@T-U*;====);I$-g$6E(1+(>I&%/)2)U2'0<E(1,5+4 *<  (1At{~  @H  @M  @M  @O  |P  )Q  Z`  Zu  Zu   v  v#q=c$dms  nI  nI  J  J $+<<#3#3O#D  1,CS T%2%=%="!(!1!1.!A .lFM%**I&,.J %%3

  L*2299 OO,Adnn-=>)0%..
 "&+%$--%//!(!5!5#'#4#4  :  & 446H&J&>>tEefM&++L9J!*-H *+> ?!*-H&7M'(89N$]3K%n5L##%]"NN11!)#-%0"&5A\t-4\\-=-=>TVX-Y,3LL,<,<=RTV,W+=EK+=QX$/*;)5"*&3'5!)'.3;<<>!.' 2 E* %0$7$7$>$>d$>$K$Q$Q$SM$/4,%**,''>9U=M=MQZ=Z)2(

))-CC&!/!7!7!=!=!?B )+

%)ZZ^^%5	'mm#,#5#5 #h 6%--44),)>)>"' #%-"' 5  &6 '/oo&668T8TU'O &5%:%:%A%A&)+*;&<(-/0&N OO**#*8*>'0 +  $&''C,1NN5CD5I9G$-:" +6%  &66K &%D  ) &!%B&d ! 
(0E&JJL#"##B%(V%  &:: o &%h
i &%@  	>!$Q
 22 	s   F(Z +:Z &Z E9Z =Y7?DXX *EX6	Z  	X	XXXX	Y4">Y/ Y4!Y7%	Z /Y44Y77Z <Z  Z 	Z>'Z93Z>9Z>Nr   r   r   r{  r  r   rv   rj   rn  rn  n  s     drv   rn  c                   "    e Zd ZdZd Zd Zd Zy)CouponsListViewzf
    View to list all available valid coupons and calculate the savings based on the user's cart.
    c                 H   	 |j                   j                  r9t        j                  j	                  |j                         j                         }nJ	 |j                  j                  d      }t        j                  j	                  |      j                         }|st        dddt        j                        S | j                  |d      }|j                  j                  d	i       j                  d
d      }t        j                  j	                  |      }t        j                  j	                  t        j                               }g }|D ]  }	| j!                  |	|      }
d}d}|
r| j#                  |	|
|      }d}|j%                  |	j&                  |	j(                  |	j*                  |	j,                  |	j.                  |	j,                  dk(  r|	j0                  nd |	j,                  dk(  r|	j2                  nd |	j4                  |	j6                  r|	j6                  j8                  nd |	j:                  ||d        t        dd|dt        j<                        S #  d }Y xY w# t>        $ r2}t        ddtA        |      dt        j                        cY d }~S d }~ww xY w)Nr   r   r   r   zNo cart found for the user.r   r   zCart detailsr   r]   rm   )r   FTr   r   )coupon_namer   coupon_descriptioncoupon_typeminimum_bill_amountr  r   max_discount_amounticonterms_and_conditionsr   
applicabler   z%Valid coupons retrieved successfully.)r   rc   couponsr;  r   rc   r   )!r   r   r   rO   rq   rP   r   r   r   r   r   r   r   r&   r6   r  get_applicable_itemscalculate_savingsr   
CouponNamer   CouponDescriptionr   TotalBillAmountr   r   r   Iconr   TermsAndConditionsrr   r   rQ   )r\   r
  rn   r   price_data_response
cart_totalr   valid_couponsapplicable_couponsr   applicable_itemsr   is_applicabler   s                 rj   r  zCouponsListView.postd  so   L	||,,||***=CCE #*<<#3#3N#CL<<..L.IOOQD  -JK!66  #'">">t^"T -1155lBGKKJXYZJ "))00d0;J $OO22'/||~ 3 M
 "$ (#'#<#<VZ#P  %#"44V=MzZG$(M"))'-'8'8'-'8'8.4.F.F'-'8'8/5/E/E:@:K:Kx:W!6!6]aCICTCTXdCdf&?&?jn/5/T/T39;;D060I0I#*&3 (4 F1
 )) k Dx  	>!$Q
 22 	s>   AI& A	I I& ;F I& I# I& &	J!/'JJ!J!c                    g }|j                   dk(  r8|D cg c]+  }|j                  |j                  j                         v s*|- }}|S |j                   dk(  rK|D cg c]>  }|j                  j                  j
                  |j                  j                         v r|@ }}|S |j                   dk(  rK|D cg c]>  }|j                  j                  j                  |j                  j                         v r|@ }}|S |j                   dk(  r?|D cg c]4  }|j                  j                  |j                  j                         v r|6 }}|S c c}w c c}w c c}w c c}w )zw
        Check if any items in the cart match the applicable categories, subcategories, or SKUs of the coupon.
        r   r   r   r   )
CouponOnr   r   r   r   r   r   r   r   r   )r\   r   r   r  r   s        rj   r  z$CouponsListView.get_applicable_items  s     ??e#!+ !+txx6;O;O;S;S;U/U   4  + __
* ' &D88##11V5N5N5R5R5TT &   (   __- ' &D88##55//3356 &      __	) ' &D88##v'?'?'C'C'EE &     5    s   +EEAE7AE9Ec                     d}||j                   k\  r_|j                  dk(  r|j                  }nC|j                  dk(  r4|j                  dz  |z  }|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   rN   )r  r   r   r   r   r   r[   )r\   r   r  r  r   s        rj   r  z!CouponsListView.calculate_savings  s      ///  H, //""l2!44s:jH 88!'6+P+PQG#rv   N)r   r   r   __doc__r  r  r  r   rv   rj   r  r  _  s    M^" Hrv   r  c                       e Zd Zd Zy)VerifyPayBillDeskc           
         	 |j                   j                  d      }t        j                  j                  |      }t        j                  d|j                          t        j                  j                  |      }|j                  }|j                  j                         }	 t        j                  d|        |j                  dk(  s|j                  dk(  rd|_        d}d	}	d
|j                   d}
t        |j                  j                  ||	|
|j                         t!        |	|
|j                  j"                  gd       |j                  j$                  dk(  rMt'        j(                  |j                  j*                  |j                  |j                  j,                  |gd       |j/                          |j0                  dk7  r|j                  }t3        t4        |      }t        j                  d|        |j7                          |j8                  }t        j                  d|        |r.t:        j                  j=                  |      j7                          	 t?        j@                  d|j                  |jB                  jD                         |j0                  dk(  r$tG        ddtI        |      j                   dd      S |j0                  dk(  r(tG        ddtK        |d|i      j                   dd      S |j0                  dk(  r$tG        ddtM        |      j                   dd      S tG        ddtI        |      j                   dd      S d |_        |j/                          d!}d"}	d#|j                   d$}
t        |j                  j                  ||	|
|j                         t!        |	|
|j                  j"                  gd       |j                  j$                  dk(  rMt'        j(                  |j                  j*                  |j                  |j                  j,                  |gd       t        jO                  d%|j                   d&tQ        jR                                 tG        d'd(d)d*      S #  Y xY w# tT        $ r5}d |_        |j/                          d!}d"}	d#|j                   d$}
t        |j                  j                  ||	|
|j                         t!        |	|
|j                  j"                  gd       |j                  j$                  dk(  rMt'        j(                  |j                  j*                  |j                  |j                  j,                  |gd       t        jO                  d+|j                   d,| d-tQ        jR                                 tG        d'd.d)d*      cY d }~S d }~ww xY w# tT        $ rk}t        j                  j                  /      }|j                  }d |_        |j/                          d!}d"}	d#|j                   d$}
t        |j                  j                  ||	|
|j                         t!        |	|
|j                  j"                  gd       |j                  j$                  dk(  rMt'        j(                  |j                  j*                  |j                  |j                  j,                  |gd       t        jO                  d+|j                   d,| d-tQ        jR                                 tG        d'd(tW        |      d0d*      cY d }~S d }~ww xY w)1NrX  rr   the payment value is ra  paidPaid	Confirmedorder_confirmation_generalzOrder Confirmed SuccessfullyYour order z! has been confirmed successfully.FTrN   r  	countdownrZ  r   z the cart value isz the custom_coupon value isr   Order CreationsenderrX  store_idr  r   Payment Verified Successfullyr   rc   order_detailsr  r   r
  contextr  r  deliveryfailedcase_generalPayment FailedYour payment for  order = could not be processed at this time. Please try again later.zPayment Failed  for z:
r   r;  r      Payment Verification Failed for : 
Payment verification failedrX  r<  ),r   r   r#   rO   loggerr  r  r(   ra  r  lowerr  rs  r   r   	fcm_tokenr   emailopt_inr   apply_asyncrp   r  r  r^  r   r   r  r   r'   rq   r   sendr  rY  r   r9   r>   r<   r   	traceback
format_excr   rQ   )r\   r
  r  r  rX  ra  paymenttest	temp_nametitledescriptionr   rn   r   r   s                  rj   r  zVerifyPayBillDesk.post  s   J	||''
3H~~))H)=EKK01C1C0DEF***7G}}E--335De4TF;<))V3w7M7MQW7W)4E&;I:E$//??`"aK$U__%>%>uk[`[j[jke[5??3H3H2I5Q--5-99@\@\^c^l^lnsn}n}  oI  oI  KT  @U  ab  dJJL''?:$0DA&8$?@(,(:(:&A-$QR((0077M7RYY[',,4DQVQ_Q_lql|l|  mB  mB  C ''>9'*++J1@1G1L1L
 $'   ))_<'&''F-B5S\^eRf-g-l-l #&   ))-CC'*++J1A%1H1M1M
 $'    (*++J1@1G1L1L
 $'   *2E&JJL;I,E$<U^^<L  MJ  #KK$U__%>%>uk[`[j[jke[5??3H3H2I5Q--5-99@\@\^c^l^lnsn}n}  oI  oI  KT  @U  ab  dLL*5>>*:#i>R>R>T=UV $&''F  # gv  %-"

7	( 88H  IF  G !:!:E5+W\WfWfg%u/D/D.EuM??))T1)55EOO<X<XZ_ZhZhjojyjy  kE  kE  GP  <Q  ]^  `6u~~6Fb2iNbNbNdMef   -JK "  	oo))8)<GMME!)EJJL3I$E4U^^4D  EB  CKU__66ukSXSbSbce[5??+@+@*A5I%%- 5 A AHdHdfkftftv{  wF  wF  wQ  wQ  S\  H]  ij  !lLL6u~~6Fb2iNbNbNdMef >!$Q
  +	s|   B#W &G R '6R 2R 6R 2R :#R D'R RR 
WD*WWW WW 
]E ] :] ]Nr  r   rv   rj   r  r    s    Krv   r  c                       e Zd Zd Zy)VerifyPaymentAPIViewc                    |j                   }|j                  j                  d      }|j                  j                  d      }|j                  j                  d      }	 t        j                  j                  |      }|j
                  }	t        j                  t        j                  t        j                  f      }
|||d}	 |
j                  j                  |       d|_        ||_        |j                          d|	_        |	j                          t#        t$        |	      }|j'                          |j(                  }|r.t*        j                  j-                  |
      j'                          	 t/        j0                  d|	j2                  |	j4                  j6                         |	j8                  dk(  r$t;        ddt=        |	      j                  dd      S |	j8                  dk(  r"t;        ddt?        |	      j                  d      S |	j8                  dk(  r$t;        ddtA        |	      j                  dd      S t;        ddt=        |	      j                  dd      S #  Y xY w# t        jB                  jD                  $ rM d|	_        |	j                          tF        jI                  d|	j2                   d       t;        dddd      cY S tJ        $ rV}d|	_&        |	j                          tF        jI                  d|	j2                   d|        t;        dddd      cY d }~S d }~ww xY w# tJ        $ r}t        j                  j                  |      }|j
                  }	d|	_        |	j                          tF        jI                  d|	j2                   d|        t;        ddtO        |      dd      cY d }~S d }~ww xY w) Nr  razorpay_payment_idrazorpay_signature)r  r  )r  r:  r;  r  r  r   r   r  r  r  r   r  r  r  r   rZ  r  r  zPayment Failed for z : Signature Verification Failed r   r'  r   r#  r$  r%  r;  r<  )(r   r   r   r(   rO   ra  r  r  rA   r  r  utilityverify_payment_signaturer  r:  r  r  r   r   r  r   r'   rq   r   r/  rs  r  rY  r^  r   r9   r>   r<   errorsSignatureVerificationErrorr)  r   r   r   rQ   )r\   r
  r  r  r   r  r:  r;  r2  ra  r  paramsrn   r   r   s                  rj   r  zVerifyPaymentAPIView.post}  s{   ||#LL,,-@A%ll../DE$\\--.BCq	oo))<M)NGMME 'oo..0L0LMO &7':&8FM''@@H)/&.A+%0"

(D9 $ 2 2  ((//M/JQQS#((0@U^^hmhxhxh}h}~
 ##~5#&''F-<U-C-H-H
  #  %%8#"##B)>u)E)J)J  %%)??#&''F-=e-D-I-I
  #  $&''F-<U-C-H-H
  # AX ??== %-"

25>>2BBbcd -JKTW   '

??OrRSQTUV -JKTW   	oo))<M)NGMME!)EJJLLL.u~~.>bDE>!$Q
  	s   A&L6 B-I, 46I% *2I, 0I, 2I, #I, %I)'I, ,A'L3L6 L3AL.(L3)L6 .L33L6 6	O?BO OONr  r   rv   rj   r8  r8  |  s    wrv   r8  c                       e Zd Zd Zy)PastOrdersListAPIViewc                    |j                   }t        j                  j                  |      j	                  d      j                  d      }t        |d      j                  }|D ]A  }|d   dk(  r|d	   d
k(  rd|d	<   |d   dk(  rd|d<   &|d   dk(  rd|d<   4|d   dk(  s=d|d<   C t        dd|dt        j                        S )Nr   r  )r  -created_dateTmanyr^  r  r  	DeliveredOrder collectedr  homeHomeworkWorkothersOthersr   z Past orders fetched successfully)r   rc   r[  r   )r   r#   rO   rq   r	  rX   r:   r   r   r   rr   )r\   r
  r  r  r   r[  
serializeris           rj   r   zPastOrdersListAPIView.get  s    ||&&&6>>K>Xaabqr,V$?DD
A)+^$3(9An% F*$*.!>"f,$*.!>"h.$,.!  =$
 %%
 	
rv   Nri  r   rv   rj   rB  rB    r  rv   rB  c                       e Zd Zd Zy)PastOrderDetailAPIViewc                 x   	 t         j                  j                  ||j                        }|j                  dk(  rt        |      j                  }n|j                  dk(  rt        |      j                  }|j                  d      dk(  s|j                  d      dk(  rt        j                  j                  |      j                         }t        |      j                  }||d<   np|j                  d	k(  rt        |d
|i      j                  }nG|j                  dk(  r#t        |      j                  }|d   dk(  rd|d<   nt        |      j                  }t        dd|dt        j                        S # t         j                   $ r/ t        ddt#        t$              dt        j                        cY S w xY w)N)rY  r   r  r  r  
DespatchedrG  r  courier_detailsrZ  r
  r  r  rH  r   z"Order details fetched successfullyr  r   r   z"Error while fetching order detailsr  )r#   rO   r   r   r^  r9   r   r<   r*   rq   rP   r=   r>   r   r   rr   r  rQ   r   )r\   r
  
order_uuidra  rO  order_deliveryrU  s          rj   r   zPastOrderDetailAPIView.get  s   *	NN&&J',,&OE>1,U388
!!%;;-e499
>>.1\AZ^^TbEcgrEr%2%:%:%A%A*%A%U%[%[%]N&>~&N&S&SO4CJ01!!_4259gBVW\\
!!Y.,U388
n-<5F
>2 -U388
 C%/
 ))  "" 	Ci.
 )) 	s   E4E7 7?F98F9Nri  r   rv   rj   rR  rR    s    +rv   rR  c                       e Zd Zd Zy)AddressChangeViewc                    |j                   j                  rv|j                   }|j                  j                  d      }t        j
                  j                  ||      }t        j
                  j                  |      j                         }d }|j                  r|j                  }|j                  |j                  f}|j                  |j                  f}t        j                  t        j                        }	|	j!                  ||d      }
|
d   d   d	   d   d
   dk(  rH|
d   d   d	   d   d   d   }||j"                  dz  k  rt%        ddddd      S t%        ddddd      S t%        ddddd      S t%        ddddd      S y )Nr  )r   r   r   r7  driving)originsdestinationsmoderowsr   elementsr   r  r   valuei  r   zAddress change applicable.T)r   rc   proceedr  r   zDAddress change not possible. Address is outside the delivery radius.F)r   r   r   r   r1   rO   r0   rq   rP   r>  r+  r,  r  r  rA   r  distance_matrixdelivery_radiusr   )r\   r
  r   r  r  r   r>  new_address_coordsshop_location_coordsgmapsresultroad_distances               rj   r  zAddressChangeView.postE  s   <<((<<D )),7Joo))Zd)CG(0077T7BHHJMD!!$))&-&6&68I8I%J"(,t~~'F$"))h.J.JK..7IXls|.}&>!$Z03H=E$*6N1$5j$A!$DZ$PQX$YM$(<(<t(CC'&''C&*
  #    (*++q+0
 $'   $&''m&+
  #   &''C&*
  # [ )rv   Nr  r   rv   rj   rY  rY  D  s    5rv   rY  c                       e Zd Zd Zy)CustomOrderCheckoutAPIViewc                 ^   	 |j                   j                  rk|j                   }|j                  j                  d      }t        j
                  j                  |      j                         }|j                  j                  d      }	 t        j
                  j                  |      }|j                  d
k7  rt        ddd      S |st        ddd      S t        j                         5  t        j
                  j                  |      j                  d|j                  j                  dd      |j                  j                  dd      |      }	t        j                   |j"                  fd       |	dk(  rt%        d      |j&                  dk(  rt(        j
                  j+                  |dd t-        
      d       d|_        |j/                          d}d}d|j"                   d}t1        |j2                  j4                  ||||j2                         t7        |||j2                  j8                  gd       |j2                  j:                  dk(  rMt=        j                   |j2                  j>                  |j"                  |j2                  j@                  |gd !       	 tB        j
                  j                  |"      }tD        jG                  d#|        |jI                          t        dd%|j"                  |
|j&                  tK        |d&|i'      j                  d(d)d*	      cd d d        S |j&                  d k(  r4	 |jL                  }
|tN        jP                  tS        jT                  d+      |
d,t-        tN        jV                        d-z   d.d/d0d1d2d3d4}tY        jZ                  |d56      }t]        j^                  |tN        j`                  tN        jb                  tN        jd                        }t]        jf                  |tN        jh                  tN        jb                  tN        jd                        }	 d9d9t-        to        jp                               js                  d:d      d d; t-        tu        tS        jR                                     d<}d=}tw        jx                  |||>      }|j{                          	 t]        j~                  |j                  tN        j`                        }	 t        |t              st        dF|       dG|vrt        dH|       	 	 t(        j
                  j+                  ||dG   dJ       t        ddL|j"                  ||
dMd)tj        j                  	      cd d d        S 	 d d d        y t        ddNd      S # t        j                  $ r t        dddd	      cY S w xY w# tB        j                  $ r tD        jG                  d$       Y w xY w# t$        $ r;}t        dd7t-        |      d8tj        jl                  	      cY d }~cd d d        S d }~ww xY w# tv        j|                  $ r}d?|_        |j/                          d@}dA}dB|j"                   dC}t1        |j2                  j4                  ||||j2                         t7        |||j2                  j8                  gd       |j2                  j:                  dk(  rMt=        j                   |j2                  j>                  |j"                  |j2                  j@                  |gd !       t        ddDt-        |      d8tj        jl                  	      cY d }~cd d d        S d }~ww xY w# t        $ r}d?|_        |j/                          d@}dA}dB|j"                   dC}t1        |j2                  j4                  ||||j2                         t7        |||j2                  j8                  gd       |j2                  j:                  dk(  rMt=        j                   |j2                  j>                  |j"                  |j2                  j@                  |gd !       t        ddEt-        |      d8tj        jl                  	      cY d }~cd d d        S d }~ww xY w# t        t        f$ r}d?|_        |j/                          d@}dA}dB|j"                   dC}t1        |j2                  j4                  ||||j2                         t7        |||j2                  j8                  gd       |j2                  j:                  dk(  rMt=        j                   |j2                  j>                  |j"                  |j2                  j@                  |gd !       t        ddIt-        |      d8tj        jl                  	      cY d }~cd d d        S d }~ww xY w# t$        $ r}d?|_        |j/                          d@}dA}dB|j"                   dC}t1        |j2                  j4                  ||||j2                         t7        |||j2                  j8                  gd       |j2                  j:                  dk(  rMt=        j                   |j2                  j>                  |j"                  |j2                  j@                  |gd !       t        ddKt-        |      d8tj        jl                  	      cY d }~cd d d        S d }~ww xY w# 1 sw Y   y xY w# t$        $ r2}t        ddOt-        |      d8tj        jl                  	      cY d }~S d }~ww xY w)PNrX  rr  delivery_moder   r   Invalid payment mode.r   r#  r   Bill CreatedzPayment not allowed!zOrder not found!r  r  rL   r  )r  r  r  payment_mode,  r  z(Update failed! Rolling back transaction.r   r  CODra  r  bill_desk_order_idr   payment_method_typer  custom_order_confirmationOrder ConfirmedzYour custom order z* has been confirmed and is being prepared.FTrN   r  r   The cart value is .No cart found for user, skipping cart deletion#Order placed successfully with COD.r
  r  rX  r   rp  r  r     %Y-%m-%dT%H:%M:%S+05:30356orders/payment_return_url/DIRECTinternet	123.0.0.1IMozilla/5.0 (Windows NT 10.0; WOW64; rv:51.0) Gecko/20100101 Firefox/51.0gapplication/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9init_channelipr  accept_header)orderidmercid
order_dater   r  ruitemcodedevicer  :
separators#Failed to prepare BillDesk payload.r<  application/jose-   zContent-TypeAcceptz
BD-TraceidzBD-Timestamp9https://uat1.billdesk.com/u2/payments/ve1_2/orders/createheadersr   r  custom_paymentfailedcaser   zYour payment for custom order r"  "Failed to connect to BillDesk API.$Failed to decrypt BillDesk response.$Decrypted data is not a dictionary: 	bdorderid.Missing 'bdorderid' key in BillDesk response: $Invalid BillDesk response structure.)ra  ru  r   Failed to create payment record.r  )rX  billdesk_paramsr   User not Authenticatedr;  )Fr   r   r   r   r#   rO   rq   rP   r,   r  r   r  r7   r  updater   r.  rs  r   r   r(   r  rQ   r  r   r   r+  r   r,  r-  r   rp   r  r   r)  r  r  r>   r   rA   BILLDESK_MERCHANT_IDtimerI  DOMAINr   dumpsrG   encrypt_jwe_billdeskBILLDESK_ENCRYPTION_KEYBILLDESK_KEY_IDBILLDESK_CLIENT_IDsign_jws_billdeskBILLDESK_SIGNING_KEYr   r   rY  uuid4replacer  r  r  raise_for_statusRequestExceptiondecrypt_jwe_billdesktextr   r   dictKeyErrorr_  )r\   r
  r  r  r   rX  ra  delivery_mode_idrp  order_updater   r4  r5  r6  rn   payloadpayload_jsonencrypted_datasigned_encrypted_datar   r  r   r  decrypted_datas                           rj   r  zCustomOrderCheckoutAPIView.post  s   ^	||,, ' ' 0 0 <---AGGI#*<<#3#3O#D c#/#7#7#;#;?O#;#PL %%7#%&'=  #&''9  !'')/5~~/D/DPX/D/Y/`/`/:/6||/?/?@VXZ/[/6||/?/?@UWY/Z/;	 0a 0L 2==u~~>O[^_#q('(RSS#!+  .."'+4/3#&{#305 /  .9*

#>	 1(:5>>:JJt&u()B)BE5R]_d_n_no!%u7L7L6MuU ??11T91==EOOD`D`bgbpbprw  sB  sB  sM  sM  OX  DY  ef  hZ#'<<#3#3#3#>D"KK*<TF(CD KKM  (&''L,1NN*50<1FuW`biVj1k1p1p	%	 #&
 'S *)h &A-*/*;*;K+3*2*G*G.2mm<U.V*5,1&)(//&:<X&X,44>*52} 6_	+"+G 59JJwS]4^L4B4W4WXdfn  gG  gG  IQ  Ia  Ia  ck  c~  c~  5N4B4T4TUcem  fC  fC  EM  E]  E]  _g  _z  _z  5{10B*<.1$**,.?.G.GR.PQTRT.U03C		4D0E	'G #^C'/}}S'Pe'fH$557"-;-P-PQYQ^Q^`h  aA  aA  .BN"#-nd#C&03WXfWg1h&i i*.@&03abpaq1r&s s  A$#OO225:5CK5P5> 3 (  (*++G057E.9)" $*#:#: M *)h .i *)h  "##; I $00 c#q=T$U^abbcn  $00 Z"KK(XYZD  ) #++,9^mpqrms t'-'B'B$ U *)R"  (88 19E.!JJL'AI$4E,J5>>JZ  [X  +YK,U__-F-FuVachcrcrs%e[5??;P;P:QSXY$55= 5 A AHdHdfkftftv{  wF  wF  wQ  wQ  S\  H]  ij  !l#++,9]lopqlr s'-'B'B$ I *)t$  * 19E.!JJL'AI$4E,J5>>JZ  [X  +YK,U__-F-FuVachcrcrs%e[5??;P;P:QSXY$55= 5 A AHdHdfkftftv{  wF  wF  wQ  wQ  S\  H]  ij  !l#++,9_nqrsnt u'-'B'B$ m *)X* !)*5 19E.!JJL'AI$4E,J5>>JZ  [X  +YK,U__-F-FuVachcrcrs%e[5??;P;P:QSXY$55= 5 A AHdHdfkftftv{  wF  wF  wQ  wQ  S\  H]  ij  !l#++,9_nqrsnt u'-'B'B$ W *)B,  ) 19E.!JJL'AI$4E,J5>>JZ  [X  +YK,U__-F-FuVachcrcrs%e[5??;P;P:QSXY$55= 5 A AHdHdfkftftv{  wF  wF  wQ  wQ  S\  H]  ij  !l#++,9[jmnojp q'-'B'B$ C *)no *)v  	>!$Q
 22 	s  Bk1 
 V *k1 k1 k1 +F8k%$AV;,A k%,	k1 6k%C2W*:BX1>.]$-0bk%%f<,k%0	k1 ;k1 k1 #V85k1 7V88k1 ;(W'#k%&W''k%*	X.3'X)X.k%	k1 )X..k%1]!D]]!k%	k1 ]!!k%$
b
.Db6b
7k%;	k1 b

k%f9Df4%f9&k%*	k1 4f99k%<
k"Dkk"k%	k1 k""k%%k.*k1 .k1 1	l,:'l'!l,'l,Nr  r   rv   rj   rk  rk    s    _rv   rk  c                       e Zd Zd Zy)AdListAPIViewc                 ,   	 t         j                  j                         }t        |d      }t	        ddd|j
                  idt        j                        S # t        $ r2}t	        dd	t        |      d
t        j                        cY d }~S d }~ww xY w)NTrE  r   zAd Listed Successfullyadsr  r   r   r;  r<  )r)   rO   r   r;   r   r   r   rr   r   rQ   r   )r\   r
  r  ad_serializerr   s        rj   r   zAdListAPIView.getf  s    	++//#C(D9M7}11 ))	 	  	>!$Q
 22 	s   AA 	B!'BBBNri  r   rv   rj   r  r  d  s    rv   r  c                       e Zd ZdZd Zy)DiscountDetailViewz_
    View to retrieve the details of a selected discount and list the associated products.
    c                 <   	 |j                   j                  r9t        j                  j	                  |j                         j                         }nI|j                  j                  d      }t        j                  j	                  |      j                         }|r|j                  r|j                  j                  }t        j                  j	                  |      j                  d      }|D ci c]/  }|j                  r!|j                  j                  |j                  1 }}t        t         |      }	g }
|	j"                  dk(  r;|	j$                  j'                         }t(        j                  j	                  |      }n|	j"                  d	k(  r;|	j*                  j'                         }t(        j                  j	                  |
      }nu|	j"                  dk(  r|	j,                  j'                         }|}nI|	j"                  dk(  r:|	j.                  j'                         }t(        j                  j	                  |      }D ]  }t0        j                  j	                  |      j                         }|r|j2                  j4                  nd }|r0|j                  r$t6        j                  j	                  |ddg      }n$t6        j                  j	                  |ddgd      }|j                  |j8                  |j:                  |	j<                  r|	j<                  nd|j>                  jA                         r$|j>                  j                         jB                  nd |j>                  jA                         rJtE        jF                  |j>                  j                         jB                        d|	j<                  dz  z
  z  nd ||jA                         r|j                         jH                  nd |jA                         r|j                         jJ                  nd |jA                         r|j                         jL                  nd |D cg c]D  }|jH                  |r'|j                  rj                  |j                        n|jN                  dF c}|j                   j                  rX|j                  tP        j                  j	                  |j                         D cg c]  }|jR                  j                   c}v ndd}|
jU                  |        tW        dd|	jX                  |	jZ                  |
dt\        j^                        S c c}w c c}w c c}w # t`        $ r2}tW        ddtc        |      dt\        jd                        cY d }~S d }~ww xY w)Nr   r   r   )sales_unit__uuidr   r   r   )item_category__inr   )item_sub_category__inr   r   )skus__in)r   VisiblezOut of Stock)r   sku_status__in   )r   r  sku_expiry_duration__gtr   r   r   )ry   
sku_statusF)
product_idr}   product_typer   r  
offerpriceproduct_imgry   r|   r{   r   wishlistz5Discount details and products retrieved successfully.)r   rc   discount_namediscount_codeproductsr   r;  r  )3r   r   r0   rO   rq   rP   r   r   r>  rY  r   select_relatedr   r   shop_admin_statusr   r!   r   r   r   r   r   r   r   r   r   r   r   r   veg_or_non_veg_statusr   r   r   r   r
   
from_floatry   r|   r{   r  r   r   r   r   DiscountNameDiscountCoder   rr   r   rQ   r   )r\   r
  discount_idr   r   shop_idproduct_selections	selectionsku_status_mapre   product_info_listapplicable_categoriesr  applicable_subcategoriesapplicable_productsapplicable_skusr   r~   product_image_urlr   r   r  product_infor   s                           rj   r   zDiscountDetailView.get  s
   k	||,, , 4 4 ; ; ; N T T V  '||//? , 4 4 ; ;!- !< !%' 
 !3!3 (,,11%>%F%F%M%M%, &N & .' #
 &8"%7	 }} MM$$i&A&AA%7  " )kBH """j0(0(C(C(G(G(I% $++22EZ2[ $$5+3+I+I+M+M+O(#++22Ia2b$$	1&.&@&@&D&D&F#.$$-"*"8"8"<"<">#++22O2L $ , 4 4 ; ;G ; L R R T?LM$7$7$;$;RV! ]%7%7;;-- 'N8S . D ;;-- '(1>'B02 . D #***$+$5$5$+$A$A<D<W<WX88]^=D\\=P=P=RW\\//199X\ CJ  CO  CO  CV  CV  CX7#5#5gll6H6H6J6R6R#SWX[c[v[vy|[|W|#}  ^b#49=

 5 5DAEDJJL$=$=TX9=

 5 5D $(
 $(C ),IV[h[m[m>+=+=cff+Esv  tB  tB $( CJ  CO  CO  C`  C`

S[ScScSjSjpwp|p|SjS}.~S}xx/?/?/B/BS}.~ ~  fk% * "((6I $L V%-%:%:%-%:%: 1 ))	 	M"t /  	>!$Q
 22 	sL   C/U  14U%L&U  A	UAU  #U AU  U   	V)'VVVNr   r   r   r	  r   r   rv   rj   r  r    s    lrv   r  c                       e Zd ZdZd Zy)DiscountsListViewzI
    View to list all discounts with DiscountName and StandardImage.
    c                    	 d }|j                   j                  r9t        j                  j	                  |j                         j                         }nL|j                  j                  dd      }|r.t        j                  j	                  |      j                         }d}|r\|j                  rPt        j                  d       t        j                  d|j                  j                   d       |j                  }d	}	 t        j                  j                         }g }|d	k(  r|D ]  }|j                  d
k(  rx|j                   j	                  g      j#                         s?|j%                  |j&                  |j(                  |j*                  r|j*                  j,                  nd d       |j                  dk(  ry|j.                  j	                  g      j#                         s|j%                  |j&                  |j(                  |j*                  r|j*                  j,                  nd d       |j                  dk(  rz|j0                  j	                  g      j#                         sO|j%                  |j&                  |j(                  |j*                  r|j*                  j,                  nd d       |j2                  j	                  g      j#                         s|j%                  |j&                  |j(                  |j*                  r|j*                  j,                  nd d        n|D ]  }|j                  d
k(  ry|j                   j                         D ][  }	|	j4                  s|j%                  |j&                  |j(                  |j*                  r|j*                  j,                  nd d         |j                  dk(  r{|j.                  j                         D ]\  }
|
j4                  s|j%                  |j&                  |j(                  |j*                  r|j*                  j,                  nd d         |j                  dk(  r{|j0                  j                         D ]\  }|j4                  s|j%                  |j&                  |j(                  |j*                  r|j*                  j,                  nd d         |j2                  j                         D ]\  }|j4                  s|j%                  |j&                  |j(                  |j*                  r|j*                  j,                  nd d          t7        dd|dt8        j:                        S #  g }Y gxY w# t<        $ r2}t7        ddt?        |      dt8        j@                        cY d }~S d }~ww xY w)Nr   r   rL   r   long_distancezQ////////////////....User Location Fetched................////////////////////////z////////////////////////////.......Shop Found : z........./////////r>  r   )sales_unit__in)r   r  StandardImager   r   r   z!Discounts retrieved successfully.)r   rc   rb   r   r   r;  r  )!r   r   r0   rO   rq   rP   r   r   r>  r   r  r)  r?  r!   r   r   r   r   r   r   r  r  r   r   r   r   long_distance_availabilityr   r   rr   r   rQ   r   )r\   r
  r   r   r^  r  rb   discounts_datare   categorysub_categoryr   r   r   s                 rj   r   zDiscountsListView.get  s   y	 M||,, , 4 4 ; ; ; N T T V  '||//C$0$8$8$?$?%1 %@ %eg "
 )J!3!3pqMmN`N`NjNjMkk}~ (,,#
$,,002	  NV# )H**j8#66==PWy=Y``b*11"*++,4,A,AKSKaKaX-C-C-G-Ggk4 
 ",,=#99@@SZR[@\cce*11&.kk080E0EOWOeOe1G1G1K1Kko3 
 ",,	9#55<<wi<X__a*11&.kk080E0EOWOeOe1G1G1K1Kko3  $11887)8T[[]*11&.kk080E0EOWOeOe1G1G1K1Kko3 3 !*@ !*H**j8(0(C(C(G(G(IH'BB . 5 5&.kk080E0EOWOeOe1G1G1K1Kko8" !#
 !& )J ",,=,4,J,J,N,N,PL+FF . 5 5*2++4<4I4IS[SiSiX5K5K5O5Oos7" !#
 !& -Q ",,	9'/'A'A'E'E'GG&AA . 5 5*2++4<4I4IS[SiSiX5K5K5O5Oos7" !#
 !& (H %-$:$:$>$>$@D#>> . 5 5*2++4<4I4IS[SiSiX5K5K5O5Oos7" !#
 !& %A? !*T B!/
 )) ]	l  	>!$Q
 22 	so   C=V  U> AV 'BV .BV 7A8V 1BV  BV B	V A:V A0V >VV 	W'V>8W>WNr  r   rv   rj   r  r    s    zrv   r  c                       e Zd Zd Zd Zy)Customorder_placingc                 $   	 dt        j                  dd       t        j                  t        j                         t        j                  t        j                         }t
        j                  j                  |      j                         s|S rp  rt  rz  s     rj   r{  z,Customorder_placing.generate_unique_order_idw  s    FNN345fmmFDZDZ6[5\]c]j]jkq  lB  lB  ^C  ]D  EH>>((((;BBD rv   c                 6   	 |j                   }|j                  j                  dd      }t        |t              r|j                         dk(  }|j                  |k7  r||_        |j                  dg       t        t        |      }|j                  j                  d      }|j                  j                  d      }|d}|j                  j                  d	d      }t        |      }	t        j                  d
|        |	j                  j                  }
t        j                  d|
        d}|
dk(  s|
dk(  s
|
dk(  s|
dk(  rd}n|
dk(  rd}n|
dk(  s|dk(  rd}nd}|st!        ddit"        j$                        S |j&                  st!        ddit"        j(                        S t        t*        |      }|st!        ddit"        j$                        S |j,                  }|st!        ddit"        j$                        S |j                  j                  d      }|st!        dd d!t"        j$                        S 	 t        t.        |"      }t2        j4                  j7                  |j8                   d%|j:                   |j<                  |j>                  d&d'd(d|j@                  |jB                  |jD                  )
      }| jG                         }tH        j4                  j7                  ||d*||||d+d,||-      }tH        j4                  j                  |.      }|j                  j                  d/      }|r"tJ        j4                  j7                  ||0       n tJ        j4                  j7                  |1       t!        d2d3tM        |      j                  d4d5      S # t0        $ r2}t!        dd#t	        |      d$t"        j$                        cY d }~S d }~ww xY w# t0        $ r2}t!        dd6t	        |      d7t"        jN                        cY d }~S d }~ww xY w)8Nr-  Ftrueupdate_fields)pkr6  rc   rL   r~  $Platform for the user agent string: r  r  r  r  r  r  r  r  r  r  r  r  r   zDescription field is required!r   zUser is not authenticatedr   zPlease add your locationzNo shops found at your locationr  r   +Address ID is required for delivery orders.r   r   Failed to fetch address.r<  r  r  r  r  )
ro   r  r  r  r  r  r  r+  r,  r  rZ  Enquiryr  )rs  custom_productr^  r   r  r6  rc   r  r  r  r  rr  r   )rX  r   r(  r   z"Custom order created successfully!r  r  r;  r]  )(r   r   r   r   rQ   r*  r-  r  r   r   r  r   r   r  r  r  r   r   r   r   HTTP_401_UNAUTHORIZEDr0   r>  r1   r   r$   rO   r  r  r  r  r  r+  r,  r  r{  r#   r   r8   r`  )r\   r
  r   r   r-  r  r6  rc   r  r  r  r  locationr>  r  r  r   r  rX  	new_orderra  r   s                         rj   r  zCustomorder_placing.post~  s   k	J<<D\\%%h6F &#&61 {{f$$		
	3.}DN!,,**=9Kll&&y1G(():B?Iy)JLL?	{KL!}}++HLL;xj12#M9$J(>(gBUYaemYm %Y& )U"i3M&M % ' *J KTZToTopp ((*E FvOkOkll(DAH*D EfNiNijj==D*K LU[UpUpqq )),7J -Z[!66 +G
C '..55($..)9:%,__!**") ))!++$11 6 L 224H--!-*'&$() . I NN&&&9ELL$$W-E#++22EPU2V#++22E2BC%@%K%P%P
  M   -GVYZ[V\]!66 \  	Jq'F%(V/ $*#H#HJ J	Jsg   E:O =(O &/O *O :O =N EO 	O('OOO OO 	P&'PPPNr  r   rv   rj   r  r  v  s     lJrv   r  c                       e Zd ZdZd Zy)NotificationListViewz0
    View to list all notification history.
    c                 b   	 |j                   j                  rB	 t        j                  j	                  d      }|j                  |j                         j                         }g }|D ]  }|j                  dk(  rt        |j                        }t        |j                  j                        }|j                  |j                  |j                  |j                  |j                  j                  |j                  j                   |j                  j"                  t%        |j&                        j)                  d      t%        |j&                        j)                  d      d|j*                  |j*                  d       |j                  |j                  |j                  |j                  |j                  j                  |j                  j                   |j                  j"                  t%        |j&                        j)                  d      t%        |j&                        j)                  d      dd	        t-        d	d
|dt.        j0                        S t-        ddd      S #  g }Y xY w# t2        $ r2}t-        ddt5        |      dt.        j6                        cY d }~S d }~ww xY w)NrD  )sendToro  r/  z%H:%M:%S)r   SendmsgDescriptionOrderIDr^  rV  r2  r  notification_typeproduct_detailsbill_detailsNormal)	r   r  r  r  r^  rV  r2  r  r  r   z,Notification history retrieved successfully.)r   rc   notification_listr   r   r  r   r;  r  )r   r   r+   rO   rX   rq   r   r  r?   r  r@   r  r   r   r  rs  r^  rY  r   created_daterI  r   r   r   rr   r   rQ   r   )r\   r
  r  notification_list_datanotificationr  r  r   s           rj   r   zNotificationListView.get  sU   F	||,,+(8(@(@(I(I/(Z%(9(@(@(@(U(Y(Y([% (*&$5L#++~='A,BVBV'W)@AUAUAdAd)e.55*oo#/#7#7'3'?'?#/#7#7#@#@%1%9%9%D%D%1%9%9%>%> ),*C*C D M Mj Y ),*C*C D M Mj Y.<,:,?,?(4(9(98   /55*oo#/#7#7'3'?'?#/#7#7#@#@%1%9%9%D%D%1%9%9%>%> ),*C*C D M Mj Y ),*C*C D M Mj Y-5
7 
+ %6F  "##Q-C
 "--    8!  _+(*%h  	>!$Q
 22 	s<   I3 A	I) #G7I3 I3 )I0-I3 3	J.<'J)#J.)J.Nr  r   rv   rj   r  r    s    Grv   r  c                       e Zd ZdZd Zy)ExcelWriterz;
    View for user login (also used for registration).
    c                     d}	 t        ||      }t        dddt        j                        S # t        $ r1}t        dt        |      dt        j                        cY d }~S d }~ww xY w)N%bill_writer/navya_bill_template2.xlsxr   zPdf bill created successfullyr   r   r   )rF   r   r   rr   r   rQ   r   )r\   r
  rX  tempate_pathoutputr   s         rj   r  zExcelWriter.post@	  sk    ?	$X|<F)HI))   	Q122 	s   ). 	A(&A#A(#A(N)r   r   r   r	  r  r   rv   rj   r  r  ;	  s    rv   r  c                       e Zd Zd Zy)DownloadBillc                 <   |j                         }d}	 t        ||       t        j                  j	                  d| d      }t        j                  j                  |      rt        t        |d      d| d      S t        ||       t        j                  j                  |      rt        t        |d      d| d      S t        ddd	t        j                  
      S # t        $ r1}t        dt        |      d	t        j                  
      cY d }~S d }~ww xY w)Nr  media/output/pdfz.pdfrbT)as_attachmentfilenamer   zFile Not Foundr   r   )striprF   r  pathjoinr   rE   openr   r   rs   r   rQ   r   )r\   r
  rX  template_path	file_pathr   s         rj   r  zDownloadBill.postR	  s    >>#@	Hm4%8XJd:KLIww~~i(#DD$9[cZddhXijj-877>>),'Y(=T_g^hhl\mnna4DEPVPiPijj 	Q122 	s+   A(C! =AC! C! !	D*&DDDNr  r   rv   rj   r  r  P	  s    rv   r  c                    t        j                  |       D ]o  }t         j                  j                  | |      }t         j                  j	                  |      sCt        j
                  |       t        j                  d|        q y )Nz	Deleted: )r  listdirr$  r%  isfileremover   r  )folder_pathr"  r(  s      rj   delete_all_filesr.  l	  sZ    JJ{+GGLLh7	 77>>)$IIi LL9YK01 ,rv   c                       e Zd Zd Zy)DeleteBillsc                     	 t        d       t        d       t        dddt        j                        S # t        $ r1}t        dt        |      dt        j                        cY d }~S d }~ww xY w)Nr  zmedia/output/excelr   zFiles Deletedr   r   r   )r.  r   r   rr   r   rQ   r   )r\   r
  r   s      rj   r  zDeleteBills.posty	  sc    		0123aODvOaOabb 	Q122 	s   36 	A0&A+%A0+A0Nr  r   rv   rj   r0  r0  w	  s    
rv   r0  c                       e Zd Zd Zd Zy)CheckoutAPIViewBillc                 $   	 dt        j                  dd       t        j                  t        j                         t        j                  t        j                         }t
        j                  j                  |      j                         s|S rp  rt  rz  s     rj   r{  z,CheckoutAPIViewBill.generate_unique_order_id	  r|  rv   c                 '   	 |j                   }|j                  j                  d      }	 t        j                  j                  |      }|r|j                  st        dddt        j                        S |j                  j                  d	d
      }|j                  j                  dd       }|j                  j                  dd      }	t        |	t              r|	j                         dk(  }	|j                  |	k7  r|	|_        |j                  dg       |rd}
nt!        |      }t#        j$                  d|        |j&                  j(                  }t#        j$                  d|        d}
|dk(  s|dk(  s
|dk(  s|dk(  rd}
n|dk(  rd}
n|dk(  s|dk(  rd}
nd}
	 t+        t,        |      }|j                  j                  d!d      }d }d }d }d }|s|j                  j                  d"      }|st        dd#dt        j0                        S 	 t+        t2        |      }|j                  j                  d%      }t+        t4        |      }|j6                  }|j                  j                  d&      }t8        j%                  d'|        	 t+        t:        |      }|j<                  }|rd(nd)}|sd*}d }|st>        j                  jA                  |jB                   d,|jD                   |jF                  |jH                  d-d.d/d|jJ                  |jL                  |jN                  |jP                  0      }	 | jS                         }	 tW               }|jY                  |d2      }|j                  d3   }|d4   }|d5   }|d6   } |d7   }!|d8   }"|d9   }#|d:   }$t_        j`                         5  	 tb        j                  jA                  ||d<||r|nd |j                  j                  d=d
      |j                  j                  d>d
      ||s|nd?|#||$||!|"| d@te        jf                         |
|A      }%ti        jj                  |%jl                  fdBC       	 tn        j                  jq                  |D      js                         }&|&r|%|&_:        |&j                          	 |%jv                  dFv r||%_<        nA|%jv                  d*k(  r2tz        j                  js                         }'|'stU        dG      |'|%_>        |%j                          	 |j~                  j                         D ]  }(|(j                  })|(j                  j                         r0|(j                  j                         D ]  }*t        j                  jA                  |)j                  j                  |%|)dI|)j                  J      }+t        j                  jA                  |+|*j                  |*j                  r|*j                  nd |*j                  K        |(j                  j                         },t        |(j                        |,z
  }-|-dkD  st        j                  jA                  |)j                  j                  |%|)|-|)j                  |-z  J       [t        j                  jA                  |)j                  j                  |%|)|(j                  |)j                  |(j                  z  J        	 |j                  dIk(  rt        j                  jA                  |%dMd t        |#      dNO       dP|%_Q        |%j                          dQ}.dR}/dS|%jl                   dT}0t        |%j                  j                  |%|/|0|%j                         t        |/|0|%j                  j                  gd       |%j                  j                  dUk(  rMt        jj                  |%j                  jP                  |%jl                  |%j                  jB                  |.gdVW       	 t,        j                  j                  |      }t8        j%                  dX|        |j                          t        dIdZ|%jl                  |#|j                  t        |%      j                  d[d\d]      cd d d        S |j                  dVk(  r	 t        j                   d^}1|1}2|j                  j                  d_d
      }3d }4|3j                  d`      r"|3j                  d`      dI   j                         }4|r|1 da|4 }2|t        j                  t        j                  db      |#dcdd|2dedfdgdhdidjdk	}5t        j                  |5dlm      }6t        j                  |6t        j                  t        j                  t        j                        }7t        j                  |7t        j                  t        j                  t        j                        }8	 dodot        t        j                               j                  dpd
      d dq t        t        t        j                                     dr}9ds}:t        j                  |:|9|8t      };|;j                          	 |;j                  s$t        dt        j0                        cd d d        S t        j                  |;j                  t        j                        }<	 t        |<t              stU        d|<       d|<vrtU        d|<       	 	 t        j                  jA                  |%|<d   dMd       t        dId|%jl                  |5|<|#|j                  dd\t        j                        cd d d        S t        dddt        j0                        cd d d        S # t        j
                  $ r t        dddd      cY S w xY w# t.        $ r2}t        ddt        |      d t        j0                        cY d }~S d }~ww xY w# t.        $ r2}t        dd$t        |      d t        j0                        cY d }~S d }~ww xY w# t.        $ r2}t        dd+t        |      d t        j0                        cY d }~S d }~ww xY w# tT        $ r2}t        dd1t        |      d t        j0                        cY d }~S d }~ww xY w# tZ        t\        f$ r2}t        dd;t        |      d t        j0                        cY d }~S d }~ww xY w# t.        $ r;}t        ddEt        |      d t        j0                        cY d }~cd d d        S d }~ww xY w# t.        $ r;}t        ddHt        |      d t        j0                        cY d }~cd d d        S d }~ww xY w# t.        $ r;}t        ddLt        |      d t        j0                        cY d }~cd d d        S d }~ww xY w# t,        j
                  $ r t8        j%                  dY       Y w xY w# t.        $ r;}t        ddnt        |      d t        j0                        cY d }~cd d d        S d }~ww xY w# t        j                  $ ru}du|%_Q        t        j                  ;j                  t        j                        }<|%j                          dv}.dw}/dx|%jl                   dy}0t        |%j                  j                  |%|/|0|%j                         t        |/|0|%j                  j                  gd       |%j                  j                  dUk(  rMt        jj                  |%j                  jP                  |%jl                  |%j                  jB                  |.gdVW       t        ddzt        |      |5|7|8d{t               v r|;j                  nd|d}t               v r|<nd~dt        j0                        cY d }~cd d d        S d }~ww xY w# tT        $ r}du|%_Q        |%j                          dv}.dw}/dx|%jl                   dy}0t        |%j                  j                  |%|/|0|%j                         t        |/|0|%j                  j                  gd       |%j                  j                  dUk(  rMt        jj                  |%j                  jP                  |%jl                  |%j                  jB                  |.gdVW       t        ddt        |      d t        j0                        cY d }~cd d d        S d }~ww xY w# tZ        tT        f$ r}du|%_Q        |%j                          dv}.dw}/dx|%jl                   dy}0t        |%j                  j                  |%|/|0|%j                         t        |/|0|%j                  j                  gd       |%j                  j                  dUk(  rMt        jj                  |%j                  jP                  |%jl                  |%j                  jB                  |.gdVW       t        ddt        |      d t        j0                        cY d }~cd d d        S d }~ww xY w# t.        $ r}du|%_Q        dv}.dw}/dx|%jl                   dy}0t        |%j                  j                  |%|/|0|%j                         t        |/|0|%j                  j                  gd       |%j                  j                  dUk(  rMt        jj                  |%j                  jP                  |%jl                  |%j                  jB                  |.gdVW       |%j                          t        ddt        |      d t        j0                        cY d }~cd d d        S d }~ww xY w# t.        $ r;}t        ddt        |      d t        j0                        cY d }~cd d d        S d }~ww xY w# 1 sw Y   y xY w# t.        $ r2}t        ddt        |      d t        j0                        cY d }~S d }~ww xY w)Nrm  r   r   rn  r   r#  r   zUser not authenticated.r~  rL   r  r-  Fr  r  Flutter_web_appr  r  r  r  r  r  r  r  r  r  r  r  r  r   zFailed to fetch cart.r<  r  r  r   r  r0  r  r  r  r  r  zFailed to fetch user location.r  r  r  r  r  zFailed to generate order ID.r  r   r]   r   re   r   r   r   ra   z Failed to fetch cart price data.r  r  r  r  r  )rs  r^  r  r   r  r  r  r  r  r   r   r  r  r   r   re   r  r  r  rp  rq  rr  rm   zFailed to update SomeOneElse.)r  r  z0No production unit found for long distance orderz*Failed to assign store or production unit.r   r  )order_productr   r   r   z Failed to create order products.r  rs  rt  r  r  rx  r  z7 has been confirmed and is being prepared for delivery.TrN   r  ry  rz  r{  r|  r  r}  r  AuthorizationzToken z?token=r~  r  BDUAT2K672001r  r  r  r  r  r  )	r  r  r  r   r  settlement_lobr  r  r  r  r  r  r  r  r  r  r  r  r  r  r   r!  r"  r  r  zNo responser  zNo decrypted data)r   rc   r=  r  r  r  exception_bodyr  z Empty response from BillDesk APIr  r  r  r  r  zOnline Payment)ra  ru  r  rv  r  r  )rX  r  r  r   rp  zInvalid delivery mode.zFailed to create order.r;  )xr   r   r   r,   rO   r  r   r   r   r  r  r   rQ   r*  r-  r  r   r   r  r  r  r   r   r   r   r1   r    r3  r)  r0   r>  r$   r  r  r  r  r  r+  r,  r  rp   r{  r   rI   r   r  r   r7   r  r#   r4   r  r   r.  rs  r-   rq   rP   r[  r^  r  r   r  r   r   r   r   r   r%   r   r   r   r"   r   r   r   countr  r   r   r(   r  r   r   r+  r   r,  r   r  r9   rA   r  r  
startswithsplitr#  r  r  rI  r   r  rG   r  r  r  r  r  r  rY  r  r  r  r  r  r  r  r  localsr  r_  )=r\   r
  r  r  r   r  rp  r  pf_typer-  r  r  r  rn   r   r  r  r0  r  r  r  r  r   r  r^  r  rX  r  r  r   r]   r   re   r   r   r   ra   ra  r  r  r   r   r   r7  customized_countremaining_qtyr4  r5  r6  base_url
return_urlauth_headertokenr  r  r  r  r  r   r  r  s=                                                                rj   r  zCheckoutAPIViewBill.post	  s   H	<<D&||//@_+3377;K7L t44 -FG!77   (():B?Ill&&z48G\\%%h6F&#&61 {{f$$		
	3 1"9-
CI;OP%==//{8*56 'y(H
,BhRYFY]eiq]q$)M*$-M&)7Q*Q$)M$+M(D9 \\%%h6FG M!%!% $\\--l;
!##$1^_%:: /JGG $+<<#3#3O#D  1,CS T%2%=%="!(!1!1.!AKK01C0DEF
 1,T J)..	*0Yn
 !7J  L*2299 OO,Adnn-=>)0%..#&-#
 %--%//!(!5!5#'#4#4  :  &88:*_
 * B B4Ii j*//=
%j1$./B$C!%j1 *? ;!+,<!=(7).9 ##%q"NN11!)#-%0"&5A\t-4\\-=-=>TVX-Y,3LL,<,<=RTV,W+=EK+=QX$/*;)5"*&3'5!)%,3;<<>!.%1) 2 E. 2==u~~>O[^_	(3(;(;(B(B(B(M(S(S(U(38M0)..0 ++/JJ/8E,"--1GG!/!7!7!=!=!?B#%&01c&d d,.EM

:)-)9I"+--C  )77>>@ 6?5M5M5Q5Q5SM4A4I4I4P4P58[[5J5J.3,/12.1kk 5Q 5&M %>$E$E$L$L6C4A4M4M/</I/I 6C5O5OOS8E8U8U %M %& 6T& 4=3K3K3Q3Q3S 003I4F4F0GJZ0Z#01#4$1$9$9$@$@58[[5J5J.3,/1>.1kkM.I %A %& !. 5 5 < <141F1F*/(+-6-?-?*-++	8J8J*J != !"S *:v $!+  .."'+4/3#&{#305 /  .9*

#?	 1(3ENN3CCz&{()B)BE5R]_d_n_no!%u7L7L6MuU ??11T91==EOOD`D`bgbpbprw  sB  sB  sM  sM  OX  DY  ef  hZ#'<<#3#3#3#>D"KK*<TF(CD KKM  (&''L,1NN*50<1@1G1L1L	%	 #&
 'Y &%r &A-#*2//)::T'UH)1J*1//*=*=or*RK$(E*55h?(3(9(9((CA(F(L(L(N&08z-H
+3*2*G*G.2mm<U.V*5,12A&0,44>*52} 6_	+"'G" ,0::g*+UL-;-P-PQ]_g__  BJ  BZ  BZ  \d  \w  \w  .xN4B4T4TUcem  fC  fC  EM  E]  E]  _g  _z  _z  5{10B*<.1$**,.?.G.GR.PQTRT.U03C		4D0E	'G #^C'/}}S'Pe'fH$557$#+=='/0R[a[v[v'w} &%~ .<-P-PQYQ^Q^`h  aA  aA  .BN"#-nd#C&03WXfWg1h&i i*.@&03abpaq1r&s s  A$#OO22&+3A+3N/85E	 3 *  (*++G05.57E.94@OO)"
 $*#:#: w &%T	  ('(5MN#)#>#> U	 &%U  ,, _19P QZ]^^_V   -DSVWXSYZ!66 0 ! ##$1KZ]^_Z`a%:: $   -M\_`a\bc!66 <   -KZ]^_Z`a!66   i(  -O^abc^de!66 R % ''(5Tcfghcij#)#>#>  G &%D  % ''(5apstupvw#)#>#>  g &%dn % '*++M-0V
 $*#>#>  U &%RB  $00 Z"KK(XYZ^  ) #++,9^mpqrms t'-'B'B$ u &%r$  (88 19E.-;-P-PQYQ^Q^`h  aA  aA  .BN!JJL'CI$4E,DU^^DT  UR  +SK,U__-F-FuVachcrcrs%e[5??;P;P:QSXY$55= 5 A AHdHdfkftftv{  wF  wF  wQ  wQ  S\  H]  ij  !l#++,9]lopqlr  @G  Zh  BW  {E  IO  IQ  {Q  jr  jw  jw  Wd  JZ  ^d  ^f  Jf  xF  l  !@'-'B'B$ m &%V*  * 19E.!JJL'CI$4E,DU^^DT  UR  +SK,U__-F-FuVachcrcrs%e[5??;P;P:QSXY$55= 5 A AHdHdfkftftv{  wF  wF  wQ  wQ  S\  H]  ij  !l#++,9_nqrsnt u'-'B'B$ U &%@* !)*5 19E.!JJL'CI$4E,DU^^DT  UR  +SK,U__-F-FuVachcrcrs%e[5??;P;P:QSXY$55= 5 A AHdHdfkftftv{  wF  wF  wQ  wQ  S\  H]  ij  !l#++,9_nqrsnt u'-'B'B$  &%j.  ) 19E.'CI$4E,DU^^DT  UR  +SK,U__-F-FuVachcrcrs%e[5??;P;P:QSXY$55= 5 A AHdHdfkftftv{  wF  wF  wQ  wQ  S\  H]  ij  !l!JJL#++,9[jmnojp q'-'B'B$ m &%XD ! ##$1JY\]^Y_`%:: _	 &%\	]	 &%h	  	)HWZ[\W]^22 	s  'AN  m2 
+AN 6D&AN n .A AN o !A+AN 'p 4BAN 8q 	Ar AN +AM6-B#AL/AsA'tD,u%/B#u%DAL/2Av,:<AL/6	AN  AL/D<wBx"&~.8	AN .~.10AC!AL/#&AH	8AL/	AN AL/(	AN 2#nAN nAN 	o$'ooAN oAN 	p"'p	p
AN pAN 	q 'qqAN qAN 	r'rrAN rAN s"'s	s
AN sAN 	t 'ttAL/	AN tAL/	u"''uu"AL/	AN u""AL/%	v).'v$v)AL/	AN $v))AL/,(wAL/wAL/	x$'xxAL/	AN xAL/"~+6E!~&~+AL/	AN &~++AL/.
AC8DACC ACCAL/C	AN CACCAL/CAHC'DAG>G/AHG0AL/G4	AN G>AHHAL/H
AL,HDAL'LAL,LAL/L	AN L'AL,L,AL/L/	AM3L8'AM.MAM3M AM6M$	AN M.AM3M3AM6M6AM?M;AN M?AN N	AN=N'AN8N2AN=N8AN=Nr  r   rv   rj   r3  r3  	  s     Jrv   r3  c                       e Zd Zd Zy)BillPaymentAPIc           	      h   |j                   j                  dd       }|j                  j                  dd      }|j                  j                  dd       }|rd}nX	 t	        |      }|j
                  j                  }	t        j                  d|	        |	dv rd}n|	dk(  rd}n|	d	k(  s|d
k(  rd}nd}t        j                  dt        |j                                |s>|dv rt        dddt        j                        S |rd| }
nd}
t        |dd|
dd      S t        j                   |t"        j$                        }|j                  dd      }t&        j(                  j                  |      }t*        j(                  j-                  |      }g d}|j                  d      dk(  rd}d}nd }d!}|D ci c]  }||j                  |d       }}||d"<    |j.                  d.i | |j0                  d#v rd$}
nx|j0                  d%v r|j                  d      dk(  rd&}
nSd}
nP|j0                  dv rB|dk(  rt        d'|dt        j2                        S t        dd(|d)t        j4                        S t        ||||j                  d*d      |dk(  rd+nd,
d-      S # t        $ r d}Y w xY wc c}w )/Ntransaction_responsez
User-AgentrL   rF  r  zDetected OS Platform: )r  r  r  r  r  r  r  r  r  zREQUEST HEADERS: )r  r  r   zNo transaction data received.r   r   z)https://navyabaker.svpstaging.com/?token=z*https://navyabaker.svpstaging.com/checkoutzpayment_failure.html)rc   checkout_urlr#  r  rr  r  )bank_ref_nobankidcharge_amountr  r  payment_categoryrv  transaction_error_codetransaction_error_desctransaction_error_typetransactionidtxn_process_type	surcharger   rR  successr  zpayment_success.htmlr  zpayment_failed2.htmlr  )r6  z"https://navyabaker.svpstaging.com/)r  r  z4https://navyabaker.svpstaging.com/order-confirmationr   Transaction Failed)r   rc   detailsr   zPayment Successful!zPayment Failed!)rX  r   rc   rK  r   )r   r   r  GETr   r  r  r   r  r   r  r   r   r   r   rG   decryptrA   r  r#   rO   r(   rq   r  r  rr   r`  )r\   r
  r  r  rJ  r  rF  platform_typer  r  rK  r   rX  ra  r2  extract_fieldsr  templatefieldupdate_datas                       rj   r  zBillPaymentAPI.post^  s   &||//0FM
 OO''b9	.!M("9-
%==//5hZ@AII$)M*$-M&)7Q*Q$)M$+M 	(goo)>(?@A $  22>! !557 7 !J5'R!K'#9: ,<   %% ("B"B
 88Ir*""H"5//((u(5
 88,-:#N-H%N-H
 @NN~eudhhub11~N(6$%%%>>00?L^^00xx01Y>!U!K ^^11'#! !,,. .
  3#! !??	A A  gx hhx,0>&0H,N_(	*
  	A  ( '(x Os   AJ 8J/J,+J,Nr  r   rv   rj   rH  rH  ]  s    ~rv   rH  c                       e Zd Zd Zy)VerifyPaymentAPIViewBillDeskc                 	   |j                   j                  d      }|st        dddt        j                        S 	 t
        j                  j                  |      }t        j                  j                  |      }|j                  }d}t        t        j                               j                  d	d
      d d }	t        t        t        j                                     }
dd|	|
d}t        j                   |d}t#        j$                  |d      }t'        j(                  |t        j*                  t        j,                  t        j.                        }t'        j0                  |t        j2                  t        j,                  t        j.                        }t5        j6                  |||      }|j8                  dk7  r*t        dd|j:                  |	dt        j                        S t'        j<                  |j:                  t        j*                        }|j                  dd
      }|dk(  rd|_        d|_         d}d}d}d}d|jB                   d}tE        |jF                  jH                  ||||jF                         tK        |||jF                  jL                  gd       |jF                  jN                  d k(  r*tQ        jR                  |jF                  jT                  |jB                  |jF                  jV                  |gd!"       nd#|_        d#|_         d$}d%}d&}d'}d(|jB                   d)}tE        |jF                  jH                  ||||jF                         tK        |||jF                  jL                  gd       |jF                  jN                  d k(  rMtQ        jR                  |jF                  jT                  |jB                  |jF                  jV                  |gd!"       |jY                          |jY                          t        d*|||	d+t        jZ                        S # t
        j\                  $ r! t        dd,dt        j^                        cY S t        j\                  $ r! t        dd-dt        j^                        cY S t`        $ r2}t        dd.t        |      d/t        jb                        cY d }~S d }~ww xY w)0NrX  r   zorder_id is requiredr   r   rr  r  z<https://uat1.billdesk.com/u2/payments/ve1_2/transactions/getr  rL   r  r  r  )r  r  r  r  r  r  zBillDesk API error)r   rc   rX  trace_idauth_status0300r  r  SuccesszTransaction Completedr  zPayment SuccessfulzYour payment for order z! has been processed successfully.FTrN   r  r  FailurerW  r  r   r!  r"  r   )r   rc   transaction_statusrc  zOrder not foundzPayment record not foundzUnexpected errorr<  )2r   r   r   r   r   r#   rO   r(   ru  rQ   rY  r  r  r  r  rA   r  r   r  rG   r  r  r  r  r  r  r  r  r  r  r  r  r  rs  r   r   r+  r   r,  r-  r   r.  rp   r  r  rr   r  rs   r   r`  )r\   r
  r  r  rX  ra  r2  billdesk_order_idr   rc  	timestampr  r  r  r  r  r  r  r  rc   rh  r4  r5  r6  r   s                            rj   r  z!VerifyPaymentAPIViewBillDesk.post  s]   <<##J/q5KLU[UpUpqq]	M & 2 2H 2 EE ' 3 3% 3 @G ' : :VCDJJL)11#r:3B?HC		,-I !3,& )	G #77#G
  ::g*EL+@@00((++	N %3$D$D--((++	%!  }}S'@UVH##s*3'}} (	!
 !557 7 ,@@PXPpPpqN(,,]B?K
 f$)/&%0"#%<"7	, 77GGhi !:!:E5+W\WfWfg%u/D/D.EuM??))T1)55EOO<X<XZ_ZhZhjojyjy  kE  kE  GP  <Q  ]^  `)1&%-"#%9"7	( 88H  IF  G !:!:E5+W\WfWfg%u/D/D.EuM??))T1)55EOO<X<XZ_ZhZhjojyjy  kE  kE  GP  <Q  ]^  `JJLLLN"&8$	
 ((* * "" 	kq5FGPVPiPijj## 	tq5OPY_YrYrss 	Mq5GVYZ[V\]fl  gL  gL  M  M	Ms1   F)P& 'H>P& &1S0SS'S :S SNr  r   rv   rj   ra  ra    s	    cMrv   ra  )r  r0  rY  r  r   adminportal.tasksr   adminportal.viewsr   r   orders.tasksr   	getLoggerr   r)  django.utils.timezoner   user_agentsr   r   decimalr	   r
   rest_framework.viewsr   rest_framework.responser   rest_frameworkr   django.shortcutsr   r   shops.modelsr   r   orders.signals.custom_signalsr   products.modelsr   r   r   r   r   r   modelsr   r   r   r   r   r    r!   r"   r#   r$   r%   r&   r'   r(   r)   r*   r+   r,   r-   r.   r/   accounts.modelsr0   r1   r2   r3   r4   r5   django.utilsr6   	django.dbr7   serializersr8   r9   r:   r;   r<   r=   r>   r?   products.serializersr@   ru  rx  r  r  django.confrA   django.viewsrB   django.views.decorators.csrfrC   django.db.modelsrD   django.httprE   r  bill_writer.BillWriterrF   rL   rG   rI   r   r  r  r#  r&  rV  rd  rk  rn  r  r  r8  rB  rR  rY  rk  r  r  r  r  r  r  r  r.  r0  r3  rH  ra  r   rv   rj   <module>r     s`        3 9 6			8	$ +   * ( , ! 6 - 9 y y     0 C B ( ! ! J  J  J 8 ! !     4  $ 	 3  k k^	~P- ~PD
 
:
M7 
>R- R(a aHEBw EBP3w 321mW 1>ng nbKg} KZL L`x7 xv
G 
<,W ,^6 6va aJG 8q qh DtJ' tJlK=' K^' *7 82'  T' TlW DdM7 dMrv   