
    j                       d dl Z d dlZd dlZd dlmZ d dlZd dlZd dlZd dlm	Z	m
Z
mZ d dlmZmZ d dlmZmZmZmZmZm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&m'Z' d dl(m)Z)m*Z* d dl+m,Z, d dl-m.Z.m/Z/m0Z0m1Z1m2Z2m3Z3 ddl4m5Z5m6Z6m7Z7m8Z8m9Z9m:Z:m;Z;m<Z<m=Z=m>Z>m?Z?m@Z@mAZAmBZBmCZCmDZDmEZEmFZFmGZGmHZHmIZImJZJmKZKmLZLmMZMmNZNmOZOmPZP d dlQmRZRmSZSmTZTmUZU d dlVmVZVmWZW d dlXmYZY d dlZm[Z[ ddl\m]Z]m^Z^m_Z_m`Z`maZambZbmcZcmdZd d dlemfZf d dlgZgd dlhZhd dliZid dljZjd dlkmlZl d dlmmnZn d dlompZp d dlqmrZr d dlsmtZtmuZu d dlvZvd dlwmxZx d dlmZ ddlymzZz  G d  d!      Z{ G d" d#e{e      Z| G d$ d%e{e      Z} G d& d'e{e      Z~ G d( d)e{e      Zd* Z G d+ d,e      Z G d- d.e{e      Z G d/ d0e{e      Z G d1 d2e{e      Z G d3 d4ee{      Z G d5 d6e      Z G d7 d8e      Z G d9 d:e      Zd; Z G d< d=e      Z G d> d?e      Z G d@ dAe      Z G dB dCe      Z G dD dEe      Z G dF dGe      Z G dH dIe      Z G dJ dKe{e      Z G dL dMe      Z G dN dOe      ZdP Z G dQ dRe      Z G dS dTe      ZdidUZ G dV dWe      Zd dXlmZ  eepdYZ       G d[ d\e             Z G d] d^e      Z G d_ d`e      ZdaZdbZdcZ G dd dee      Zdf Zdg Zdh Zy)j    N)	urlencode)send_whatsapp_messagecheck_and_verify_order_statussend_whatsapp_order_message)	EmailSendNotificationInit)calculate_cart_weightget_delhivery_chargeget_delivery_infoget_expected_delivery_timeget_full_address_from_latlngget_pincode_from_latlng)	localtime)parse)ROUND_HALF_UPDecimal)APIView)Responsestatus)get_object_or_404redirectrender)ProductionUnitShop)order_confirmed)CustomProductProductImageProductsWishlistSalesUnitProductSelectionCustomProductImage   )AdditionalDetails
BillEditedCartCartItemSKUCartItemCustomizationCustomCouponSettingsCustomOrderTracking	DelhiveryDeliveryBoysDeliveryMatrixDeliveryOTP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JsonResponse)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$|
j                         }|r|j                   d}n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.z% discount applied on delivery.zNo delivery discount available.   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_kmrQ   	remainingrh   ri   rj   extra_kmdelivery_fee	discountsmessageapplied_discountdiscountrm   discount_amountdnext_discountsnext_discounts                      JC:\Users\Saasvaap\Desktop\Akash\Saasvaap\DEMO\Navya-Bakers\orders\views.pycalculate_dynamic_delivery_feez,CartViewMixin.calculate_dynamic_delivery_fee   sT   #++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  )0->>??^_;\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#   r^   )r   namephone_numberr   r   )
r=   rb   filterrc   r   r   r   r   HTTP_200_OKHTTP_404_NOT_FOUND)ro   r   some_one_detailss      r}   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                    |j                   j                         }i }d}d}d}d}|D ],  }	|	j                  }
|
j                  }|
j                  }||vr|
j                  |
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 ]  }|j0                  dk(  r*|j,                  |j2                  j                         v r|} n|j0                  dk(  r*|j.                  |j4                  j                         v r|} na|j0                  d	k(  r ||j6                  j                         v r|} n2|j0                  dk(  s|
|j8                  j                         v s|} n |
j"                  }|r9|j:                  }t=        t?        |      dt?        |      dz  z
  z  d      }| d}n|}d}|j@                  xs d|jB                  xs d|jD                  xs dd}d}|j                         D ],  \  }}|t=        t?        |      t?        |      dz  z  d      z  }. |||   d<   |||   d<   ||   dxx   |	jF                  z  cc<   |t=        t?        |      |	jF                  z  d      z  }|t?        |      |	jF                  z  z  }|t=        t?        |      t?        |      z
  |	jF                  z  d      z  }|
j                   s|	jH                  j                         D ]x  }||   d   jK                  |	j                  |j                  |jL                  |jN                  r|jN                  j                  nd|jP                  |jS                         d       z / tU        |jW                               }d}|jX                  r|t[        |jX                  t\              rt\        j&                  j)                  |jX                  j^                        j                         }|rV| ja                  |||jb                        }n8|jd                  r*|jd                  }| ja                  |||jb                        }nd}d}d}d}d} d}!i }"tf        j&                  j)                  |jb                        ji                  d      j                         }#|#stk        dddd      S |#jl                  }$d}%d}&|$s|jb                  rd }%tn        j&                  jq                  d!d "      j                         }'ts        |      }&tu        |#jv                  |#jx                        }(t{        |'|(|&d#d$      } t{        |'|(|&d#d%      }!t{        |'|(|&d&d$      }t{        |'|(|&d&d%      }d'})t}        |(      }"n|jb                  ratf        j&                  j)                  |jb                        ji                  d      j                         }#|#r|#j~                  |#j~                  }| j                  ||(      \  }})t?        |      }*t?        |      }+t?        |      t?        |      z   },|%rt?        |!      }nt?        |      }t=        |*|+z   |,z
  |z   d      }-t?        |      t?        |      z   },|*|+z   |,z
  }.t=        |d      t=        |d      t=        |d      t=        |d      t=        ||z   d      t=        |d      |-|jX                  r|jX                  j^                  n|jd                  t=        |.d      d)	}/| |!|||"j                  d*      |"j                  d+      |&d,}0t        j&                  j)                  |-      j                         }1|1r6|1j                  r|1j                  nd'|1j                  r|1j                  nd'd.}2ni }2t        j&                  j)                  d       jW                  d/d0      }3tk        d|||/|2|)tU        |3      |0|%d1	t        j                        S )2z3Helper method to format cart items into a response.r   Nz0%)sku_idsame_day_delivery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   r`   %)s_gstc_gstcessr   r   r   r   )r   	custom_idcustom_notecustom_imagecustom_image_idhas_customization)
CouponCode        userz-created_atzUser location not found.r   rv     r   FTpin_codeflatzPre-paidESCODr^   )rq   )	rp   taxes_and_chargesrt   rx   total_savingscoupon_savingsgrand_totalcoupon_codetotal_without_deliverytat_surfacetat_express)delivery_fee_online_expressdelivery_fee_online_surfacedelivery_fee_cod_expressdelivery_fee_cod_surfaceexpected_tat_surfaceexpected_tat_expresscart_weightr   )r   r   	mode_nameid)	r   rv   data
price_datasome_one_else_orderdelivery_discount_messageavailable_payment_modeslong_distance_chargeslong_distance)Hitemsallskuproductr   r   r   r   r   r   	item_nameimagesexistsrc   imageurlr   sku_mrpr1   rb   r   rT   item_categoryitem_sub_categoryr   ApplicableCategoryApplicableSubCategoryApplicableProductApplicableSkuDiscountPercentagern   floatr   r   r   r   customizationsappendr   r   r   r   listvaluescoupon
isinstancer6   r   calculate_coupon_savingsr   custom_couponr@   rk   r   shopr   values_listr	   r   latitude	longituder
   r   distancer~   getr=   r   r   r<   r   r   )4ro   r   rv   
cart_itemsgrouped_itemssubtotal_sumgst_charges_sumr   rt   itemr   r   r   applicable_discountru   rx   r   discount_percentager   r   
gst_values
gst_amountgst_typegst_percentcustomization
items_datar   
coupon_objr   rq   r   r   r   r   expected_deliveryuser_location	shop_uuidr   r   pickup_pincodeaddress_pin_coder   rp   gstsavingsr   r   r   r   r   some_one_orderpayment_modess4                                                       r}   get_cart_items_responsez%CartViewMixin.get_cart_items_response   so   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+$6%:Ls:R$SUVWW
 *< 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  &?[ n -..01
 ;;$++w/$__33t{{?U?U3V\\^
%)%B%B:|]a]f]f%gN,,K!::;VZV_V_`N!N #$ #$ $%#$%#$,,333CLL][aac)CD  "&&	TYY M+33??
QU?V\\^N/5K6}7M7M}OfOfg*>~O_almwx{*|'*>~O_almwx{*|'';NL\^ijops't$';NL\^ijops't$')% 12B Cyy , 4 4 ; ; ; K T TUb c i i k ]%;%;%G"/"8"8K7;7Z7Z[g  xC7Z  8D3L3&O$&~)>> !<=L .LHsNW4|CQG&~)>>!)C'!9lA.!&!:!,2mQ/"=>#A1E#NA6&59[[4;;11dFXFX&+,BA&F


 ,G+F(@(@$5$9$9-$H$5$9$9-$H&

 '..55T5BHHJ1A1F1F(--BAQA^A^ 0 = =dfN
  N$,,3343@GGTXY""('5,E+/+>(=!. %%
 	
r   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   r`   )r   r6   
CouponTyper   MaxDiscountAmountForPercentageminDiscountAmountrd   rB   rb   r   rc   r   r3   r   r7   r   ry   	Exceptionloggingerrorrn   r   	TypeError
ValueError)	ro   r   rp   r   r  referralhas_previous_ordersr   es	            r}   r   z&CartViewMixin.calculate_coupon_savings  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__r~   r   r  r    r   r}   rZ   rZ   z   s    >;/z*N
`!r   rZ   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 }t        j                  j                  |
      }n=|j                   j                  d      }d }t        j                  j                  |      }t        j                  j                  |r|nd |s|nd       \  }	}
|rt         j                  j#                  |t%        j&                               j)                         }|r)||	_        |	j-                          | j/                  |	d      S t0        j                  j#                  |      j)                         }|r|j                  |k7  rwt2        j                  j#                  |      j5                         }|s)||	_        |	j-                          | j/                  |	d      S t        dddt        j                        S t        dddt        j                        S t8        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 t;        t<        |       }t>        j                  j                  |	|!      \  }}tA        |      }||_!        |j-                          g }|D ]?  }|j                  d"      }|j                  d#      }|j                  d$      }|r|jD                  j                  |      nd }|r	 tF        j                  j                  ||%      }|d&v r|d&v r|s|jI                          ||_%        ||_&        |r||_'        |d |_'        |j-                          |jQ                  |jR                         |d&v r|s|stF        j                  jW                  |||'      }|r||_'        |j-                          |jQ                  |jR                         B tF        j                  j#                  |(      jY                  |)      jI                          > | j/                  |	d*      S # t        j                  $ r! t        dddt        j                        cY S w xY w# tF        jT                  $ r Y w xY w)+Nskusr   z%Invalid JSON format for 'skus' field.r   r   r   remove_couponFz)SKU data or coupon code must be provided.r   anonymous_idr'  )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.r^   zCoupon removed successfully!r   r   r#   customisationz;SKU ID and quantity must be provided and greater than zero.r   )r   r   r   r   r   )r   	cart_item)r^   N)r,  r   r   )r,  )id__inzCart Updated Successfully!)-r   r   r   rd   jsonloadsJSONDecodeErrorr   r   HTTP_400_BAD_REQUESTr   is_authenticatedr@   rb   r&   get_or_creater6   r   rF   nowrc   r   saver  rB   r3   r   r   r7   r   r(   r'   lenr   FILESr)   deleter   r   r   r   r   DoesNotExistcreateexclude)ro   requestsku_data_rawsku_datar   r&  r   r'  locationr   createdr   r  r  r   sku_infor   r   customization_datar   r,  _total_custom_entriesexisting_custom_idscustomr   r   r   r   r   
new_customs                                  r}   postzAddOrUpdateCartView.post  s   ||''/	3=lC3Ptzz,/VbH ll&&}5((%@M)TU22 
 <<((<<DL#++//T/:H #<<++N;LD#++//\/JH 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OA ## 	)PQ22 	r 1== s*   'V9 <;W08AW091W-,W-0XXNr  r  r   rH  r!  r   r}   r#  r#    s	    EPr   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+  r   r#   zCart is now empty.r   rv   r   r   z$Item removed from cart successfully!)r   r'   r   r8  r=   rb   r   r   r   r   r   r   r  )ro   r<  r   r,  r   some_one_elses         r}   r8  zRemoveFromCartView.delete  s    %h<@	~~ 	#++222=  "zz  "KKM3 
 ))  ++8
 	
r   N)r  r  r   r8  r!  r   r}   rK  rK        
r   rK  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.rM  r   r   zCart flushed successfully.)r   r2  r&   rb   r   rc   r   r   r   r   r   r=   r8  r   r   r   )ro   r<  r   r'  rN  s        r}   rH  zFlushCartView.post  s   <<((<<&&GLL&9??AD&||//?||***EKKM )GQUV))  $++222=  "

!zz  "KKM%A4P%%
 	
#s   A	E E$NrI  r!  r   r}   rQ  rQ    s    
r   rQ  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#   rS  rM  r   zCart retrieved successfully!)r   r2  r&   rb   r   rc   r   r   r   r   r   r  )ro   r<  r   r'  s       r}   rH  zGetCartView.post  s    <<((<<&&GLL&9??AD&||//?||***EKKM )GQUV)) 
 ++D2PQQs   A	C CNrI  r!  r   r}   rU  rU    s    Rr   rU  c                  b    t         j                  j                  dd      j                  d      S )z-Retrieve active and available delivery slots.Tactive)is_availabler   
start_time)r0   rb   r   rk   r!  r   r}   get_available_delivery_slotsr[    s2    && '  h|r   c                       e Zd Zd Zy)DeliverySlotSelectionViewc           
      n   	 |j                   j                  st        dddt        j                        S t
        j                  j                  |j                         j                         }|st        dddt        j                        S t        j                  j                  |      }|j                         st        dddt        j                        S t        d	 |D              }d }|sd
}t        j                  j                  |j                         j                         }d}d }|rU|j                  rId}|j                  }	d|	j                  |	j                  |	j                   |	j"                  |	j$                  d}t'               }
g }t)               }t+        j,                  t+        j.                               }|rdnd}|
D ]o  }t1        ||dz         D ]Y  }|t3        |      z   }t+        j,                  t+        j4                  t7        j8                  |j;                         |j<                                    }t+        j,                  t+        j4                  t7        j8                  |j;                         |j>                                    }|dk(  r||k  r|j@                  |j;                         f}||v r|jC                  |       |jE                  d       d|jE                  d       }|jG                  ||j@                  |jE                  d      |jI                         d       \ r |jK                  d        |d d }t        dd||||dt        jL                        S # tN        $ r2}t        ddtQ        |      dt        j                        cY d }~S d }~ww xY w)Nr   zUser is not authenticated.r   r   r   zCart not found.r   zGCart is empty. Please add items to cart before selecting delivery slot.c              3   J   K   | ]  }t        |j                  d d        yw)r   FN)getattrr   ).0r   s     r}   	<genexpr>z0DeliverySlotSelectionView.get.<locals>.<genexpr>$  s&      !&D "5u=&s   !#z}One or more products in your cart are not eligible for same-day delivery. Your order will be delivered from tomorrow onwards.FTzNavya Bakers)r   	shop_name
shop_phoneshop_locationr   r   r#      )daysz%d %b %Y %I:%M %p to %I:%M %p%Y-%m-%d)delivery_slotslot_iddaterZ  c                     | d   | d   fS )Nrm  rZ  r!  xs    r}   <lambda>z/DeliverySlotSelectionView.get.<locals>.<lambda>q  s    1V9ao*Fr   keyz0Available delivery slots retrieved successfully!)r   rv   r   pickup_availableshop_detailssame_day_messageAn unexpected error occurred.r   rv   	exception))r   r2  r   r   r1  r&   rb   r   rc   r'   r   r   r@   r   	unit_name
contact_nounit_locationr   r   r[  setrF   r   r4  rangerE   
make_awarerD   combinerm  rZ  end_timer   addstrftimer   	isoformatsortr   r  rd   )ro   r<  r   r   allow_same_dayrv  r   rt  ru  r   available_slots
slots_dataseencurrent_time	start_dayslot
day_offsetfuture_daterZ  r  rs  rk  r  s                          r}   r   zDeliverySlotSelectionView.get  s   E	<<00"##? "66  <<&&GLL&9??AD"##4 "66  "))00d0;J$$&"##l "66  ! !&! N  $!J ! )0077W\\7JPPRM$L!3!3#' $))*!%"&//%)%7%7 $!%  ;<OJ5D#--hlln=L+I'"'	9q="AJ".
1K"KK!)!3!3 ++$,,[-=-=-?Q"J  (11 ++$,,[-=-=-?O H "Q:+E 77K$4$4$67Cd{ HHSM &../BCD E&//
;<> "
 %%-:'+ww$/$8$8$D*4*>*>*@	; #B (P OO FOG#BQJQ&(8$0(8 ))
 
  	>!$Q
 22 	s1   3M9 AM9 AM9 JM9 9	N4'N/)N4/N4Nr  r  r   r   r!  r   r}   r]  r]    s    Fr   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)Nr   r^   r   rv   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   rv   r   r   z"Some one else data creation failedr   rv   r  z5Cart detail and other person details should be given.z,Cart couldn't found please check cart numberr   )r   r   r&   rb   r   r   rc   r   r   r1  r3   
order_typer=   r3  r   r   rv   r5  HTTP_201_CREATEDr  rd   HTTP_500_INTERNAL_SERVER_ERRORr   )ro   r<  r   r   rv   r   r  ordersome_oner@  r  s              r}   rH  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NrI  r!  r   r}   r  r    s	    DBr   r  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   r   r#   z*Some one else data retrieved successfully!r  r   r   Some one else data not foundr   Cart not found)r&   rb   r   r   rc   r=   r   r   r   r   r   HTTP_204_NO_CONTENTr   )ro   r<  r   some_one_datas       r}   r   zGetSomeOneElseOrderDetail.get  s    ||"""5;;='//66d6CIIKMK)..$1$>$>	!
 "--/ /  =! "55	7 7 + 113 3r   Nr  r!  r   r}   r  r    s    3r   r  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   r   r#   z(Some one else data deleted successfully!r  r   r   r  r   r  )r&   rb   r   r   rc   r=   r   r   r8  r   r   r   r   )ro   r<  r   r  r  r   r   s          r}   rH  z$DeleteGetSomeOneElseOrderDetail.post  s    ||"""5;;="**11t1<H$NN,M %%D(55L!I $0	!
 !,,. .  =! !33	5 5 + //1 1r   NrI  r!  r   r}   r  r    s    1r   r  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   rp   r   )r)  FTr  r
  )coupon_namer   coupon_descriptioncoupon_typeminimum_bill_amountpricer
  max_discount_amounticonterms_and_conditionsr  
applicabler#   z%Valid coupons retrieved successfully.)r   rv   couponsrw  r   rv   r  )!r   r2  r&   rb   r   rc   r   r   r   r   r1  r  r'   r6   rF   r4  get_applicable_itemscalculate_savingsr   
CouponNamer   CouponDescriptionr  TotalBillAmountr  r   r  Iconr   TermsAndConditionsr   r  rd   )ro   r<  r   r'  price_data_response
cart_totalr   valid_couponsapplicable_couponsr   applicable_itemsr  is_applicabler  s                 r}   rH  zCouponsListView.post  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   )ro   r   r   r  r   s        r}   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   r`   )r  r  r  r   r  r  rn   )ro   r   r  r  r  s        r}   r  z!CouponsListView.calculate_savings  s      ///  H, //""l2!44s:jH 88!'6+P+PQG#r   N)r  r  r   __doc__rH  r  r  r!  r   r}   r  r    s    M^" Hr   r  c                       e Zd Zg Zg Zd Zy)VerifyDeliveryOTPc                    |j                   j                  d      }|j                   j                  d      }t        j                  j	                  |      j                         }|st        ddi      S t        j                  j	                  |      j                         }|st        ddi      S |j                  |k7  rt        ddi      S |j                  rt        dd	i      S d
|_	        |j                          d|_        d|_        t        j                         |_        |j                          	 |j                   }t"        j                  j	                  |      j                         }|r&|j$                  dk(  rd|_        |j                          t&        j                  j                         }|j(                  |j*                  k\  r|j(                  |j,                  k  rdt/        t1        j2                  dd             }	t4        j                  j7                  |	||j8                        }
d}d|	 d}t;        |j8                  j<                  ||||j8                         t        ddi      S #  Y xY w)N
order_uuidotpr  r  Order not foundr  zOTP not foundzInvalid OTPzOTP already usedT	DeliveredWhitepkassignedznot assigned	NavyaCoup  i )r   r   r   zEligible for Coupon!zYou are eligible for Coupon (z).rv   zOrder Delivered Successfully)r   r   r3   rb   r   rc   r   r/   r  is_verifiedr5  order_statuscolor_statusrD   r4  color_status_updation_timedelivery_boyr-   delivery_boy_statusr*   r   lower_limit_pricehigher_limit_pricerd   randomrandintr7   r:  r  r   	fcm_token)ro   r<  r  r  r  delivery_otpshipper_uuidshippercustom_coupon_checkcoupon_code_generationr   notification_titlenotification_descriptions                r}   rH  zVerifyDeliveryOTP.post  sM   \\%%l3
llu%%%:%6<<>W&7899"**111>DDFWo677s"Wm455##W&89::#' ($+3<<>(


'	 --L"**11\1BHHJG766*D.<+"6">">"D"D"F!!%8%J%JJQVQbQbfy  gM  gM  RM+4SY9W5X4Y)Z& , 4 4 ; ; 6. !< ! &<"-JKaJbbd+e( OO--&,OO$ 5
  		s   5D5I7 7I;Nr  r  r   authentication_classespermission_classesrH  r!  r   r}   r  r    s    Kr   r  c                       e Zd Zd Zy)VerifyPayBillDeskc                 &   	 |j                   j                  d      }t        j                  j                  |      }t        j                  j                  |      }|j
                  }|j                  j                         }	 |j                  dk(  s|j                  dk(  r|j                  r-|j                  j                  }|j                  j                  }	n,|j                  j                  }|j                  j                  }	|j                  }
|j                  j                  }d}|j                   r|j"                  rt$        j                  j'                  |j                         j)                         }|rt+        |j"                  t,              r!t/        j0                  |j"                  d      }n|j"                  }|j3                  d	      }|j4                  j3                  d
      }|j6                  j3                  d
      }| d| d| }|j8                  dk7  r|j8                  }|dk(  rkd}|j:                  r|j:                  }|j<                   d|j>                   d|j@                   d|jB                   d|jD                   d|jF                   }nd}ntH        j                  j'                  |      j)                         jJ                  }|dk(  rh|j:                  r^|j:                  }|j<                   d|j>                   d|j@                   d|jB                   d|jD                   d|jF                   }nd}tM        jN                  |	||jP                  |jR                  jT                  |jR                  jV                  |
|||g
       |j8                  dk7  ri|jR                  }tY        tZ        |      }|j]                          |j^                  }|r.t`        j                  j'                  |      j]                          |j8                  dk(  s|j8                  dk(  rptc        jd                  d|jP                  |j                  jf                  |jh                  |j8                         tk        ddtm        |      j                   dd      S |j8                  dk(  rh	 tn        j                  j'                  |      j)                         }|r|jp                  nd}tk        ddty        |||d      j                   dd      S |j8                  d k(  r$tk        ddt{        |      j                   dd      S tk        ddtm        |      j                   dd      S d!}d"}d#|jP                   d$}t}        |jR                  j~                  ||||jR                         t        |||jR                  j                  gd       |jR                  j                  d%k(  rMt        jN                  |jR                  jV                  |jP                  |jR                  jT                  |gd&'       tu        jv                  d(|jP                   d)t        j                                 tk        d*d+d,d-      S # tr        $ r%}tu        jv                  d|        d}Y d }~d }~ww xY w# tr        $ r}d!}d"}d#|jP                   d$}t}        |jR                  j~                  ||||jR                         t        |||jR                  j                  gd       |jR                  j                  d%k(  rMt        jN                  |jR                  jV                  |jP                  |jR                  jT                  |gd&'       tu        jv                  d.|jP                   d/| d0t        j                                 tk        d*d1d,d-      cY d }~S d }~ww xY w# tr        $ r(}d!}d"}d#jP                   d$}t}        |jR                  j~                  ||||jR                         t        |||jR                  j                  gd       |jR                  j                  d%k(  rMt        jN                  |jR                  jV                  |jP                  |jR                  jT                  |gd&'       tu        jv                  d.|jP                   d/| d0t        j                                 tk        d*d+t-        |      d2d-      cY d }~S d }~ww xY w)3Nr  order_IDr  paidPaidN/ArZ  rj  %d %b %Yri   |  - r  Local OrdersHome Delivery, argsr   r  Pick UpOrder Creationsenderr  store_idplatformr  r#   zPayment Verified Successfullyr   rv   order_details   r   F0Error occurred while fetching bill edit status: r<  	is_editedcontextLong Distance Ordersdeliveryfailedcase_generalPayment FailedzYour payment for  order z= could not be processed at this time. Please try again later.Tr`   r  	countdownzPayment Failed  for z:
r   rw  r   r   z Payment Verification Failed for z: 
zPayment verification failedrx  )Fr   r   r3   rb   r8   r  payment_statuslower
store_uuidrz  r{  pu_uuidpu_namer   payment_moder   delivery_slot_timedelivery_slot_dater0   r   rc   r   rd   rD   strptimer  rZ  r  r  drop_addressr   house_number_or_namestreetcitystate_or_provincer   r+   delivery_typer   apply_asyncr  r  
first_namer   r   r&   r8  r   r7   r   sendr  r  r   rI   r%   r  r  r  r  rN   rL   r   r  r   emailopt_inr   	traceback
format_exc)ro   r<  r  kwargsr  r  paymenttestrc  r   r   payment_methoddelivery_timer  delivery_date_objdelivery_daterZ  r  delivery_moderz   r  r   r   r   	bill_editedittedr  	temp_nametitledescriptions                                 r}   rH  zVerifyPayBillDesk.post  s   M	||''
3H~~))H)=E***7G}}E--335Dr))V3w7M7MQW7W ''$)$4$4$>$>	','7'7'B'B$)MM$9$9	',}}'?'?"'"3"3K%*%7%7%A%AN$)M//E4L4L+33::','?'?  ;  %'     *%*B*BCH4<4E4E$)$<$<$.5" 1
 5:4L4L 1,=,F,Fz,RM)-)A)A*)MJ'+}}'='=j'IH $1/#-,c(!= * ''?:','7'7(N:,;M$11$)$6$6'(vvhb1G1G0H188*TV'(vvhb1D1D0ES%V !-
 ,1L(;(C(C(J(JQV(J(W(](](_(m(m(O;$11$)$6$6'(vvhb1G1G0H188*TV'(vvhb1D1D0ES%V !-
 ,1L/;;,PY[`[i[ikpkzkz  lF  lF  HM  HW  HW  Hd  Hd  fr  t  AO  Q^  `m  Bn  o''?:$0DA(,(:(:((0077M7RYY[''>9U=M=MQZ=Z',,^^""^^  (*++J1@1G1L1L
 $'   ))_<,(2(:(:(A(A(A(N(T(T(VI=Fi&9&9EG  (&''F-B!+2-4%. $
 #&   ))-CC'*++J1A%1H1M1M
 $'    (*++J1@1G1L1L
 $'    <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MM*5>>*:#i>R>R>T=UV $&''F  # _  ) ,#MM,\]^\_*`a&+G,p  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   	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MM6u~~6Fb2iNbNbNdMef >!$Q
  	s   B_ PZ3 #Z3 3>Z 1(Z3 2Z3 #Z3 1DZ3 	Z0Z+%Z3 +Z00Z3 3
_=D___ __ 
d(DdddNrI  r!  r   r}   r  r    s    Nr   r  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  	New Order)r  -created_dateTmanyr  r  r  r  Order collectedaddress_typehomeHomeworkWorkothersOthersr#   z Past orders fetched successfully)r   rv   r  r   )r   r3   rb   r   r;  rk   rJ   r   r   r   r   )ro   r<  r  r&  r   r  
serializeris           r}   r   zPastOrdersListAPIView.get  s    ||&&&6>>K>Xaabqr,V$?DD
A)+^$3(9An% F*$*.!>"f,$*.!>"h.$,.!  =$
 %%
 	
r   Nr  r!  r   r}   r4  r4    rO  r   r4  c                     d|  d| S )Nzhttps://www.google.com/maps?q=,r!  )latlngs     r}   get_google_maps_linkrH    s    +C5#77r   c                       e Zd Zd Zy)PastOrderDetailAPIViewc                 j   	 d}d }t         j                  j                  ||j                        }t        j                  j                  |      j                         }|rJ|j                  dk(  r;d}|j                  j                  }|j                  j                  }t        ||      }nI|j                  dk(  r:d}|j                  j                  }|j                  j                  }t        ||      }|j                  dk(  rt        |      j                  }	nE|j                  dk(  rt        |      j                  }	|	j                  d      d	k(  s|	j                  d      d
k(  rt         j                  j                  |      j                         }
t#        |
      j                  }||	d<   n|j                  dk(  rZ	 t$        j                  j                  |      j                         }|r|j&                  nd}t/        |||d      j                  }	nG|j                  dk(  r#t        |      j                  }	|	d   d
k(  rd|	d<   nt        |      j                  }	t0        j                  j                  d      j3                  dd      }t5        dd|	t7        |      d|rd|ini t8        j:                        S # t(        $ r$}t+        j,                  d|        d}Y d }~d }~ww xY w# t         j<                  $ r/ t5        ddt?        t(              dt8        j:                        cY S w xY w)NF)r  r  r  r  Tr  r
  r  
Despatchedr  r  courier_detailsr  r  r  r  r:  r   r   r   r#   z"Order details fetched successfully)r   rv   r  r   delivery_linkr   z"Error while fetching order details)r   rv   exc) r3   rb   r   r   r+   r   rc   r  r  r   r   rH  r  rI   r   rL   r:   rM   r%   r  r  r  r  rN   r<   r   r   r   r   r   r9  rd   )ro   r<  r  pickuprO  r  custom_orderrF  rG  rB  order_deliveryrN  r.  r/  r  r  s                   r}   r   zPastOrderDetailAPIView.get  s   C	F MNN&&J',,&OE.66==u=MSSUL : :i G&&//&&00 4S# >!!Y.&&//&&00 4S# > >1,U388
!!%;;-e499
>>.1\AZ^^TbEcgrEr%2%:%:%A%A*%A%U%[%[%]N&>~&N&S&SO4CJ01!!_4($.$6$6$=$=E$=$J$P$P$R	9B)"5"5 "7'.)0!" d  !!Y.,U388
n-<5F
>2,U388
(0077t7DKKKX\]MC%//3M/B	
 <B7r ))	 	# % ((XYZX[&\]"'(6 "" 	Ci.
 )) 	s=   F<K0 ?>K  =CK0  	K-	K(#K0 (K--K0 0?L21L2Nr  r!  r   r}   rJ  rJ    s    Dr   rJ  c                       e Zd Zd Zy)AddressChangeViewc           
      T   |j                   j                  st        dddd      S |j                   }|j                  j	                  d      }|st        dddd      S 	 t
        j                  j	                  ||	      }|j                  r|j                  st        dddd      S t        |j                        t        |j                        f}t        j                  j                  |      j                         }|r|j                  nd }|r|j                  nd }|r|j                  nd }	t        j                  j                  ddd      }
|	st        dddd dd      S t!        j"                  t$        j&                        }|
D cg c]  }|j                  |j                  f }}	 |j)                  |g|d      }|j	                  dg       d   j	                  dg       }g }t/        |
|      D ]l  \  }}|j	                  d      dk7  r|d   d   dz  }|j1                  t-        |j2                        |j4                  t7        |d      |j8                  d        n |st        dd!ddd"      S |j;                  d#        |d   }|
j	                  |d$   %      }|d&   }|d'   }|r||_        ||_        |j?                          |r||kD  rt        dd(d|d)   |dd*      S |	j2                  |j2                  k(  r t        d+d,d|	j4                  |d)   |dd-      S t        dd.d|	r|	j4                  nd |d)   |dd-      S # t
        j                  $ r t        dd
dd      cY S w xY wc c}w # t*        $ r&}t        ddt-        |       dd      cY d }~S d }~ww xY w)/Nr   Unauthorizedr   i  r   
address_idzAddress ID requiredr   )r   r   zInvalid addresszInvalid coordinatesr   FOpen)latitude__isnulllongitude__isnullr   z2No shops available. Delivery from production unit.T)r   rv   proceednearest_shopr   rr  driving)originsdestinationsmodezGoogle API error: i  rowselementsr   OKr   valuer  r`   )r  rc  rq   radiuszNo reachable shops)r   rv   r\  r   c                     | d   S )Nrq   r!  ro  s    r}   rq  z(AddressChangeView.post.<locals>.<lambda>  s	    Q}%5r   r  r  rq   rf  zOutside delivery radiusrc  )r   rv   r\  r]  rq   r   r#   zSame shop - allowed)r   rv   r\  current_shopr]  rq   r   z"Nearest shop changed - not allowed) r   r2  r   r   r   rA   rb   r9  r   r   r   r@   r   rc   r   r   
googlemapsClientrQ   GOOGLE_MAPS_API_KEYdistance_matrixr  rd   zipr   r  rz  rn   delivery_radiusr  r   r5  )ro   r<  r   rX  address
new_coordsr   user_latitudeuser_longituderh  shopsgmapsr   r`  resultr  rc  	distanceselementrq   nearestr]  nearest_distancenearest_radiuss                           r}   rH  zAddressChangeView.postq  s    ||,,q^DSQQ||\\%%l3
q5JKTWXX
	Uoo))Zd)CG w'8'8q5JKTWXXG,,-uW5F5F/GH

 %,,333>DDF2?..T4A00t-:}))
 ##"# $ 
 O $!%   !!h&B&BCDIJED7EJ
	**#) + F ::fb)!,00R@	
 !1MD'{{8$,!*-g6=K ^!^^$[!4..	  2 / !&	   	56A,yygk&:y;"=1 *
 %5M"!-M 
 .?4  ' 4/!&    1 110 , 6 6 ' 4/!&   ;6BL22#K0+"
  	G ## 	Uq5FGPSTT	UN K  	/Ax8  	s6   !!M
 M31M8 
#M0/M08	N'N"N'"N'NrI  r!  r   r}   rU  rU  p  s    ]r   rU  c                       e Zd Zd Zy)CustomOrderCheckoutAPIViewc                    	 |j                   j                  r|j                   }|j                  j                  d      }t        j
                  j                  |      j                         }|j                  j                  d      }|j                  }	 t        j
                  j                  |      }	|j                  j                  d
d      }
|j                  j                  dd       }|r|dk(  rd}nv|r|dk(  rd}nlt        |
      }t        j                  d|
        |j                   j"                  }t        j                  d|        d}|dk(  s|dk(  s
|dk(  s|dk(  rd}nd}|j$                  dk7  rt        ddd      S |st        ddd      S t'        j(                         5  d|_        |j                  j                  dd      |_        |j                  j                  dd      |_        |	|_        ||_        |j3                          t5        j6                  |j8                  fd        |	j:                  d!k(  rt<        j
                  j?                  |d"d tA        |      d#$       d%|_        |j3                          tC        jD                  d&|j8                  |jF                  jH                  |d'(       d)}d*}d+|jJ                  jL                   d,|j8                   d-}tO        |jJ                  jP                  ||||jJ                         tS        |||jJ                  jT                  gd.       |jJ                  jV                  d/k(  rMtY        j6                  |jJ                  jZ                  |j8                  |jJ                  jL                  |gd01       |jF                  r-|jF                  j\                  }|jF                  j^                  }n,|j`                  jb                  }|j`                  j^                  }|j                  }|j.                  jd                  }d2}|jf                  r|jh                  rtj        j
                  j                  |jf                  3      j                         }|rtm        |jh                  t@              r!to        jp                  |jh                  d4      }n|jh                  }|js                  d5      }|jt                  js                  d6      }|jv                  js                  d6      }| d7| d8| }tx        j
                  j                  |9      j                         jz                  }|d:k(  rh|j|                  r^|j|                  }|j~                   d;|j                   d;|j                   d;|j                   d;|j                   d8|j                   }nd2}t        j6                  |||j8                  |jJ                  jL                  |jJ                  jZ                  ||||g
<       	 t        j
                  j                  |=      }t        j                  d>|        |j                          	 t        j
                  j                  |9      j                         }|r|j                  nd.} t        d!dA|||	j:                  t        ||| dBC      j                  dDdEdF	      cd d d        S |	j:                  d0k(  rt<        j
                  j?                  |d"dGtA        |      H       dI}"dJ}#|}$|}%t        |      dK}&dL}'|jL                  xs d}(|jT                  xs d})|jZ                  j                  dMd      j                         dNd  }*|j                  j                  dOd      }+d },|+j                  dP      r"|+j                  dP      d!   j                         },|,s't        j                   dQ}-t        j                   dQ}.n*t        j                   dR|, }-t        j                   dR|, }.dL}'dSdT|$ dU|&dVdWidX}/t        j                  |/dYZ      }0|" d[|$ d[|& d[|' d[|( d[|) d\|# d[|0 }1t        j                  |1j                  d]            j                         }2t        |2      d^k(  sJ |"|$|&|'|(xs d|)xs d|*|-|.|2|0|1d_}3|r|j                         d`v r|#|3da<   t        d!dbdc|3ddde	      cd d d        S t        ddfdd	      cd d d        S t        ddgd      S # t        j                  $ r t        dddd	      cY S w xY w# t        j                  $ r t        j                  d?       Y w xY w# t        $ r%}!t        j                  d@|!        d.} Y d }!~!d }!~!ww xY w# 1 sw Y   y xY w# t        $ r2}!t        ddhtA        |!      dit        j                  	      cY d }!~!S d }!~!ww xY w)jNr  r  r-  r+  r   Invalid payment mode.r   r   r   HTTP_USER_AGENTr^   r  Flutter Web AppFlutter_web_appFlutter Mobile AppAndroid$Platform for the user agent string: Platform : OtherWindowsMac OS XLinuxUbuntuWebBill CreatedzPayment not allowed!zOrder not found!r6  delivery_instructioncooking_instructioni,  )r  r#   pendingr   r  r  bill_desk_order_idr  payment_method_type	Confirmedr  r  r  custom_order_confirmation   Your Order is Confirmed 🎉Hi %,
                        Your order     has been successfully confirmed.
                        We’ve started processing it and will keep you updated on the next steps.
                        Thank you for choosing Navya Bakers!FTr`   r  r  r  rj  r  ri  r  r  r  r  r  r  r   The cart value is .No cart found for user, skipping cart deletionr  #Order placed successfully with COD.r  r  r  r  r  r  rM     Online Paymentr  r  r  r  oEOB0P IJB9iqgsiUw879xSB1XGfqSM3hzDSaO7.2fzNavya Bakers Custom Order+AuthorizationToken orders/payu/return/orders/payu/return/?token=absoluteX4Y55z_10.00aggregatorSubTxnIdaggregatorSubAmtaggregatorChargestype	splitInforE  :
separators||||||||||||utf-8   rs  txnidr  productinfo	firstnamer"  phonesurlfurlhashsplitRequesthash_stringandroidiossaltPayU payment initiatedhttps://test.payu.in/_paymentr   rv   payu_urlparamsr  zInvalid payment mode selected.User not Authenticatedrw  rx  )_r   r2  r   r   r3   rb   r   rc   r   r<   r9  r   METAr   r  infoosfamilyr  rG   atomicr  r  r  r  r5  r   r  r  r   r8   r:  rd   r   r!  r  r  r  r   r   r  r   r"  r#  r   r   rz  r{  r  r  r   r  r  r0   r   rD   r  r  rZ  r  r+   r  r  r   r  r  r  r  r   r   r&   r8  r%   r  r  r  rN   r   replacestripheaders
startswithsplitrQ   DOMAINr.  dumpshashlibsha512encode	hexdigestr6  r  r   r1  )4ro   r<  r  r&  r   r  r  delivery_mode_idr   r  	ua_stringpf_typeplatform_data
user_agentr  r0  r1  r2  rc  r   r)  r*  r  r+  r,  rZ  r  r-  rz   r  r   r.  r/  r  payu_key	payu_saltr  split1r  r  r  r"  r  auth_headertokenr  r  split_requestsplit_request_strr  	payu_hashr  s4                                                       r}   rH  zCustomOrderCheckoutAPIView.post  s
   q	||,, ' ' 0 0 <---AGGI#*<<#3#3O#D #//c#/#7#7#;#;?O#;#PL $LL,,->C	!,,**:t<w*;;$5M,@!@$-M!&y!1JLL#G	{!ST)}}33HLL;xj!9:$+M9,J0F(V]J]aimuau(-(/%%7#%&'=  #&''9  !''))4E&181A1ABXZ\1]E.070@0@AVXZ0[E-)5E&%2ENJJL 2==u~~>O[^_#!+  .."'+4/3#&{#305 /  .9*

',,^^"" $?	 >*-eoo.H.H-I J$$)NN#3 4='@ ))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 ++(-(8(8(B(BI+0+;+;+F+FL(-(=(=I+0==+C+CL&+&7&7).););)E)E(- 338P8P#/#7#7#>#>+0+C+C $? $#eg !  $ $.e.F.F#L8@8I8I(-(@(@(29&$5
 9>8P8P$50A0J0J:0V-1__-E-Ej-Q
+/==+A+A*+M (5oS'1l#hZ%A !. )<(C(C(J(JQV(J(W(](](_(m(m(O;$11$)$6$6'(vvhb1G1G0H188*TV'(vvhb1D1D0ES%V !-
 ,1L3??lT]_d_m_moto~o~  pJ  pJ  LQ  L[  L[  Lh  Lh  jv  xC  ES  Ub  dq  Fr  s[#'<<#3#3#3#>D#LL+=dV)DE KKM,(2(:(:(A(A(A(N(T(T(VI=Fi&9&9EG
  (&''L+3*50<1F!+2-4%2 $% #&! '[ *)| &A-#OO22*/3<8H+.{+;	 3 " (0H(JI %-E$/F(/(<S'AF*EK(,(=2I$(JJ$4"E %)$5$5$=$=c2$F$L$L$Nst$TE*1//*=*=or*RK$(E*55h?(3(9(9((CA(F(L(L(N#(*2//)::M'N*2//)::M'N +3//)::TUZT['\*2//)::TUZT['\( +FK )3$,AFrl<B=C/&."	-M 15

=U_0`- $,*AeWAfXQ{m1#,+Qug[1M^L_!a ( )0{7I7I'7R(S(](](_I#&y>S#88#8 (0).*0/:-6_").").(,(,(10A/:&F   -1D1D1FJ\1\1:v#+*++C,K*0	-
 '*$+O *)\  (*++K $' ] *)l  "##; o $00 c#q=T$U^abbcJ  $00 [#LL)YZ[
  ) ,#MM,\]^\_*`a&+G,S *)z  	>!$Q
 22 	s   Bf(  d 6Cf( f( f( /Q#fAd<>e+7f	f( Hf"	f( ,f;	f( f( #d96f( 8d99f( <(e($f'e((f+	f4fffff%!f( %f( (	g#1'gg#g#NrI  r!  r   r}   r|  r|    s    rr   r|  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)NTr8  r#   zAd Listed SuccessfullyadsrM  r   r   rw  rx  )r9   rb   r   rK   r   r   r   r   r  rd   r1  )ro   r<  r  ad_serializerr  s        r}   r   zAdListAPIView.getL  s    	++//#C(D9M7}11 ))	 	  	>!$Q
 22 	s   AA 	B!'BBBNr  r!  r   r}   r  r  J  s    r   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   )r   
sku_statusF)
product_idr   product_typer   r  
offerpriceproduct_imgr   r   r   r%  wishlistz5Discount details and products retrieved successfully.)r   rv   discount_namediscount_codeproductsr   rw  r  )3r   r2  r@   rb   r   rc   r   r   r   r  r!   select_relatedr   r   shop_admin_statusr   r1   r   r   r   r   r   r   r   r   r   r   r(   r   veg_or_non_veg_statusr   r%  r   r   r   
from_floatr   r   r   r  r    r   r   r   DiscountNameDiscountCoder   r   r  rd   r1  )ro   r<  discount_idr   r'  shop_idproduct_selections	selectionsku_status_maprx   product_info_listapplicable_categoriesr  applicable_subcategoriesapplicable_productsapplicable_skusr   r   product_image_urlr%  r   r  product_infor  s                           r}   r   zDiscountDetailView.getk  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!  r   r}   r  r  f  s    lr   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(  r|j                  j	                  g      j!                         s?|j#                  |j$                  |j&                  |j(                  r|j(                  j*                  nd |j,                  r|j,                  j*                  nd d       |j                  dk(  r|j.                  j	                  g      j!                         s|j#                  |j$                  |j&                  |j(                  r|j(                  j*                  nd |j,                  r|j,                  j*                  nd d       Y|j                  dk(  r|j0                  j	                  g      j!                         s|j#                  |j$                  |j&                  |j(                  r|j(                  j*                  nd |j,                  r|j,                  j*                  nd d       |j2                  j	                  g      j!                         s2|j#                  |j$                  |j&                  |j(                  r|j(                  j*                  nd |j,                  r|j,                  j*                  nd d        n|D ]  }|j                  d
k(  r|j                  j                         D ]~  }	|	j4                  s|j#                  |j$                  |j&                  |j(                  r|j(                  j*                  nd |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 |j,                  r|j,                  j*                  nd d        Y \|j                  dk(  r|j0                  j                         D ]  }|j4                  s|j#                  |j$                  |j&                  |j(                  r|j(                  j*                  nd |j,                  r|j,                  j*                  nd d         	|j2                  j                         D ]  }|j4                  s|j#                  |j$                  |j&                  |j(                  r|j(                  j*                  nd |j,                  r|j,                  j*                  nd d          t7        dd|dt8        j:                        S #  g }Y xY w# t<        $ r2}t7        ddt?        |      dt8        j@                        cY d }~S d }~ww xY w)Nr   r'  r^   r(  r   zQ////////////////....User Location Fetched................////////////////////////z////////////////////////////.......Shop Found : z........./////////r   r   )sales_unit__in)r   r
  WebImageMobileImager   r   r#   z!Discounts retrieved successfully.)r   rv   ru   r   r   rw  r  )!r   r2  r@   rb   r   rc   r   r   r   r  r  rz  r1   r   r   r   r   r   r   r
  StandardImager   BannerImager   r   r   long_distance_availabilityr   r   r   r  rd   r1  )ro   r<  r   r'  r  r  ru   discounts_datarx   categorysub_categoryr   r%  r  s                 r}   rH  zDiscountsListView.post  s   B	 M||,, , 4 4 ; ; ; N T T V  '||//C$0$8$8$?$?%1 %@ %eg "
 )J!3!3pqN}OaOaOkOkNll~  A (,,#
$,,002	  NV# )H**j8#66==PWy=Y``b*11"*++,4,A,AFNF\F\(>(>(B(BbfGOG[G[8+?+?+C+Cae	4  ",,=#99@@SZR[@\cce*11&.kk080E0EJRJ`J`H,B,B,F,FfjKSK_K_x/C/C/G/Gei	3  ",,	9#55<<wi<X__a*11&.kk080E0EJRJ`J`H,B,B,F,FfjKSK_K_x/C/C/G/Gei	3  $11887)8T[[]*11&.kk080E0EJRJ`J`H,B,B,F,FfjKSK_K_x/C/C/G/Gei	3 ; !*J !*H**j8(0(C(C(G(G(IH'BB . 5 5&.kk080E0EJRJ`J`H,B,B,F,FfjKSK_K_x/C/C/G/Gei	8" !# !& )J ",,=,4,J,J,N,N,PL+FF . 5 5*2++4<4I4INVNdNd0F0F0J0JjnOWOcOc83G3G3K3Kim	7" !# !& -Q ",,	9'/'A'A'E'E'GG&AA . 5 5*2++4<4I4INVNdNd0F0F0J0JjnOWOcOc83G3G3K3Kim	7" !# !& (H %-$:$:$>$>$@D#>> . 5 5*2++4<4I4INVNdNd0F0F0J0JjnOWOcOc83G3G3K3Kim	7" !# !& %AE !*\ B!/
 )) o	~  	>!$Q
 22 	so   C=Z   Z AZ  'B)Z  B*Z  =BZ  B1Z  B*Z  7B,Z  $BZ  BZ  ZZ   	[)'[[[Nr  r  r   r  rH  r!  r   r}   r  r    s    Cr   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 zGenerate a unique order ID.IDr   i  r  	r  r  choicestringascii_uppercaser3   rb   r   r   ro   r  s     r}   generate_unique_order_idz,Customorder_placing.generate_unique_order_idf	  s    FNN345fmmFDZDZ6[5\]c]j]jkq  lB  lB  ^C  ]D  EH>>((((;BBD r   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_fieldsr  r2  rv   r^   r  r  r  r  r  r  r  r  r  r  AndriodiOSFlutter Mobile App / iOSIOSr  zDescription field is required!r   zUser is not authenticatedr   zPlease add your locationzNo shops found at your locationrX  r   +Address ID is required for delivery orders.r   r+  Failed to fetch address.rx   r  r  state)
r   r  	land_markr  r  r  r   r   r   r;  r  Enquiryr  )r  custom_productr  r  r  r2  rv   r  r  r  r  r  r   )r  r   rL  r#   z"Custom order created successfully!r  r  rw  r  )(r   r   r   r   rd   r  r#  r5  r   r   r  r   r  r  r  r  r   r   r1  r2  HTTP_401_UNAUTHORIZEDr@   r   rA   r  r4   rb   r:  r   	last_nameflat_nolandmarkr   r   r;  r0  r3   r+   rH   r  )ro   r<  r   r   r#  r?  r2  rv   r  r  r  r  r?  r   rX  ro  r  r  r  	new_orderr  r   s                         r}   rH  zCustomorder_placing.postm	  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
  O   -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Nr  r  r   r0  rH  r!  r   r}   r'  r'  e	  s     lJr   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)Nr7  )sendTor  rj  z%H:%M:%S)r   SendmsgDescriptionOrderIDr  r  rm  timenotification_typeproduct_detailsbill_detailsNormal)	r   rJ  rK  rL  r  r  rm  rM  rN  r#   z,Notification history retrieved successfully.)r   rv   notification_listr   r   r  r   rw  r  )r   r2  r;   rb   rk   r   r   rJ  rO   rL  rP   r?  r   r   rK  r  r  r  r   created_dater  r   r   r   r   r  rd   r1  )ro   r<  rR  notification_list_datanotificationrP  r?  r  s           r}   r   zNotificationListView.get	  sS   ;	||,,+(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 
' %6<  "##Q-C
 "--    8!  U+(*%Z  	>!$Q
 22 	s<   I3 A	I) #G7I3 I3 )I0-I3 3	J.<'J)#J.)J.Nr  r!  r   r}   rG  rG  	  s    <r   rG  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_template2new.xlsxr#   zPdf bill created successfullyr   r   r   )rW   r   r   r   r  rd   r1  )ro   r<  r  tempate_pathoutputr  s         r}   rH  zExcelWriter.post&
  sk    B	$X|<F)HI))   	Q122 	s   ). 	A(&A#A(#A(Nr%  r!  r   r}   rW  rW  !
  s    r   rW  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)NrY  media/output/pdfz.pdfrbT)as_attachmentfilenamer   zFile Not Foundr   r   )r  rW   r  pathjoinr   rU   openr   r   r   r  rd   r1  )ro   r<  r  template_path	file_pathr  s         r}   rH  zDownloadBill.post8
  s    >>#C	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NrI  r!  r   r}   r]  r]  6
  s    r   r]  c                    t        j                  |       D ]o  }t         j                  j                  | |      }t         j                  j	                  |      sCt        j
                  |       t        j                  d|        q y )Nz	Deleted: )r  listdirrc  rd  isfileremover  r  )folder_pathrb  rg  s      r}   delete_all_filesrm  R
  sZ    JJ{+GGLLh7	 77>>)$IIi LL9YK01 ,r   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   )rm  r   r   r   r  rd   r1  )ro   r<  r  s      r}   rH  zDeleteBills.post_
  sc    		0123aODvOaOabb 	Q122 	s   36 	A0&A+%A0+A0NrI  r!  r   r}   ro  ro  ]
  s    
r   ro  c                       e Zd Zd Zy)BillPaymentAPIc           	         |j                   j                  dd       }|j                  j                  dd      }|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 t        j                  j!                  |      j#                         }t$        j                  j!                  |      j#                         }|rt&        j(                   d| }nt&        j*                   d}|j,                  dk(  rd|_        d|_        |j3                          |j3                          t5        |dd|dd      S t7        j8                  |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<                  d3i | t&        j*                   d(}|j>                  d)v rt&        j(                   d| }n|j>                  d*v r<|j                  d"      d#k(  rt&        j*                   d+}ndt&        j*                   d}nP|j>                  dv rB|d$k(  rt        d,|dt        j@                        S t        dd-|d.t        jB                        S t5        ||||j                  d/d      |d$k(  rd0nd1|d2      S # t        $ r d}	Y w xY wc c}w )4Ntransaction_responsez
User-Agentr^   r  r  r  r  zDetected OS Platform: )r  r  r  r  r  r  r6  r7  r8  r  zREQUEST HEADERS: r  r8  r   zNo transaction data received.r   r   r  r  z
web?token=checkoutr  r  Failedzpayment_failure.html)rv   checkout_urlr   orderid)bank_ref_nobankidcharge_amountcurrencyitemcodepayment_categoryr  transaction_error_codetransaction_error_desctransaction_error_typetransactionidtxn_process_type	surcharger  r  successr  zpayment_success.htmlzpayment_failed2.htmlr  zweb/)r  )r  r  zorder-confirmationr#   zTransaction Failed)r   rv   detailsr  zPayment Successful!zPayment Failed!)r  r  rv   rx  r!  )"r   r   r  GETr   r  r  r  r  r  dictr   r   r1  r3   rb   r   rc   r8   rQ   domain2domain1r  r  r  r5  r   rX   decryptBILLDESK_ENCRYPTION_KEYupdater  r   r  )ro   r<  r  r&  rt  r  r  r  r  platform_typer  r  r  r'  rx  r   extract_fieldsr  templatefieldupdate_datas                        r}   rH  zBillPaymentAPI.postn
  s   &||//0FM OO''b9	;;??:t4.;;??:t4-M("9-
%==//5hZ@AII$)M*$-M&)7Q*Q$)M$+M 	(goo)>(?@A $  22>! !557 7 NN))H)=CCEEoo,,5,9??AG "*"2"2!3:eWE"*"2"2!38<?2%3"%-G"JJLLLN'#9: ,<   %% ("B"B
 88Ir*""H"5//((u(5
 88,-:#N-H%N-H
 @NN~eudhhub11~N(6$%%%"**+40>>00&../z%AL^^00xx01Y>"*"2"2!33EF"*"2"2!38< ^^11'#! !,,. .
  3#! !??	A A  gx hhx,0>&0H,N_(	*
  	S  ( '(H Os   AO *O)O&%O&NrI  r!  r   r}   rr  rr  m
  s    Ir   rr  c                 b   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$|	j                         }|r|j                   d}
nd}
t!        |d      S c c}w r\   ra   )rp   rq   rQ   rr   rh   ri   rj   rs   rt   ru   rv   rw   rx   rm   ry   rz   r{   r|   s                     r}   r~   r~   
  sO   #++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  )0->>??^_;\1%% Ps   H,,H,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 r)  r+  r/  s     r}   r0  z,CheckoutAPIViewBill.generate_unique_order_id<  s    FNN345fmmFDZDZ6[5\]c]j]jkq  lB  lB  ^C  ]D  EH>>((((;BBD	 r   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      }	|j                  j                  dd
      }
|j                  j                  dd
      }t        |	t              r|	j                         dk(  }	|j                  |	k7  r|	|_        |j                  dg       |r|dk(  rd}nv|r|dk(  rd}nlt!        |      }t#        j$                  d|        |j&                  j(                  }t#        j$                  d|        d}|dk(  s|dk(  s
|dk(  s|dk(  rd}nd}	 t+        t,        |      }|j                  j                  d!d      }d }d }d }d }d
}d
}d }	 t+        t6        |      }|j8                  }|rd"nd#}|sd$}|d$k7  rp|j                  j                  d%      }|j                  j                  d&d
      }|j                  j                  d'd
      }|r|j                  j                  d(      }|sa|j                  j                  d*      }|st        dd+dt        j4                        S 	 t+        t:        |      }t<        j                  j?                  d-d./      jA                         }|jB                  }|jD                  }tG        ||      } tI        ||      }!|!d0   xs d0}"|!d1   xs d1}#|!d2   xs d2}$| st        dd3dd      S tJ        j                  jM                  |jN                   d4|jP                   |jR                  |jT                  |"|#|$tW        |       |jB                  |jD                  |jX                  |jZ                  5      }|d#k(  r8|j                  j                  d6      }%t+        t\        |%      }|j^                  }	 | ja                         }&	 te               }'|'jg                  |d8      }(|(j                  d9   })|(j                  d:   }*|)d;   }+|)d<   },|)d=   }-|)d>   }.|)d?   }/|)d@   }0|)dA   }1|)dB   }2|*dC   }3|*dD   }4|*dE   }5|*dF   }6|*dG   }7|d"k(  rti        |0      ti        |1      z
  }0dH}1|d$k(  rb|j                  j                  dI      }8|jj                  dJk(  r|8dKk(  r|4}9n|8dLk(  r|5}9n|8dKk(  r|6}9n|8dLk(  r|7}9ti        |2      ti        9      z   }0|9}1tq        jr                         5  	 tt        j                  jM                  |&|dN||r|nd ||||tw        |0dO      |,|1|+|.|/|-dPty        jz                         ||Q      }:	 t|        j                  j                  |R      jA                         };|;r|:|;_@        |;j                          	 |:j                  dTv r||:_B        nn|:j                  d$k(  r_t        j                  jM                  |:|38|j                  U       t<        j                  jA                         }<|<stc        dV      |<|:_E        |:j                          	 t        j                  jM                  |:X      }=|
|=_G        ||=_H        |=j                          	 |j                  j                         D ]  }>|>j                  }?|>j                  j                         r0|>j                  j                         D ]  }@t        j                  jM                  |?j                  j                  |:|?dJ|?j                  Z      }At        j                  jM                  |A|@j                  |@j                  r@j                  nd @j                  [        |>j                  j                         }BtW        |>j                        |Bz
  }C|CdkD  st        j                  jM                  |?j                  j                  |:|?C|?j                  |Cz  Z       [t        j                  jM                  |?j                  j                  |:|?|>j                  |?j                  |>j                  z  Z        	 |jj                  dJk(  rt        j                  jM                  |:d]d t        |0      d^_       d`|:_Y        |:j                          |:j                  d$k7  rCt        j                  da|:j                  |:j                  j                  ||:j                  b       nBt        j                  da|:j                  |:j                  j                  ||:j                  b       dc}Ddd}Ede|:j                  jN                   df|:j                   dg}Ft        |:j                  j                  |:|E|F|:j                         t        |E|F|:j                  j                  gd       |:j                  j                  d.k(  rMt        j                  |:j                  jZ                  |:j                  |:j                  jN                  DgdOh       |:j                  r-|:j                  j                  }G|:j                  j                  }Hn,|:j                  j                  }G|:j                  j                  }H|:j                  }0|:j                  j                  }Idi}J|:j                  r|:j                  rt\        j                  j                  |:j                  j      jA                         }K|Krt        |:j                  t              r!ty        j                  |:j                  dk      }Ln|:j                  }LLj                  dl      }MKj^                  j                  dm      }N|Kj                  j                  dm      }O|M dn|N do|O }J|:j                  }8|8d#k(  rjdp}8|:j                  r^|:j                  }P|Pj                   dq|Pj                   dq|Pj                   dq|Pj                   dq|Pj                   do|Pj                   }ndi}t#        j$                  dr|:j                   dsH dtG du|8 dvJ 
       t        j                  |H|G|:j                  |:j                  jN                  |:j                  jZ                  ||0I|8|Jg
dOh       	 t,        j                  j                  |      }t#        j$                  dw|        |j                          |:j                  d$k7  rFt        dJdy|:j                  |0|jj                  t        |:      j                  dzd{d|      cd d d        S t        dJdy|:j                  |0|jj                  t        |:      j                  dzd{d|      cd d d        S |jj                  dOk(  rt        j                  jM                  |:d]d}t        |0      ~       d}Qd}R|:j                  }S|0}Tt        |0      d}Ud}V|jN                  xs d
}W|j                  xs d
}X|jZ                  j                  dd
      j                         dd  }Y|j                  j                  dd
      }Zd }[|Zj                  d      r"Zj                  d      dJ   j                         }[[s+t         j                   d}\t         j                   d}]n.t         j                   d[ }\t         j                   d|[ }]d}VddS dUddid}^t        j                  |^d      }_Q d|S d|U d|V dW dX dR d|_ }`t	        j
                  |`j                  d            j                         }at        |a      dk(  sJ QSUVWxs d
Xxs d
Y\]a_`d}b|r|j                         dv rRbd<   t        dJddbdd      cd d d        S t        ddd      cd d d        S # t        j
                  $ r t        dddd      cY S w xY w# t.        $ r;}t        ddt1        j2                         d t        j4                        cY d }~S d }~ww xY w# t.        $ r;}t        dd)t1        j2                         d t        j4                        cY d }~S d }~ww xY w# t.        $ r;}t        dd,t1        j2                         d t        j4                        cY d }~S d }~ww xY w# tb        $ r2}t        dd7t        |      d t        j4                        cY d }~S d }~ww xY w# tl        tn        f$ r2}t        ddMt        |      d t        j4                        cY d }~S d }~ww xY w# t.        $ r;}t        ddSt        |      d t        j4                        cY d }~cd d d        S d }~ww xY w# t.        $ r;}t        ddWt        |      d t        j4                        cY d }~cd d d        S d }~ww xY w# t.        $ r;}t        ddYt        |      d t        j4                        cY d }~cd d d        S d }~ww xY w# t.        $ r;}t        dd\t        |      d t        j4                        cY d }~cd d d        S d }~ww xY w# t,        j
                  $ r t#        j$                  dx       Y w xY w# t.        $ r;}t        ddt        |      d t        j4                        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        j4                        cY d }~S d }~ww xY w)Nr-  r+  r   r~  r   r   r   zUser not authenticated.r  r^   r  r#  Fadditional_infophone_nor2  r3  r  r  r  r  r  r  r  r  r  r  r  r  r   zFailed to fetch cart.rx  rQ  r  r  r
  deliver_dater  r  pickup_timezFailed to fetch user location.rX  r9  r:  r   Tr   r  r  r<  z&Pincode not available for this addressr;  )r   r  r=  r  r  r  r   r   r   r;  contact_numberrk  zFailed to generate order ID.zCart data fetched successfullyr   r   rp   r   rx   r   r   r   rt   r   r   r   r   r   r   r   longdistance_delivery_moder#   r   r   z Failed to fetch cart price data.r6  r`   r  )r  r  r  r  r  r  r  r  r  r   r   delivery_charges	sub_totalr   r   rx   r  r  r  r  r   zFailed to update SomeOneElse.)r  r  )r  weight_gramsra  r  z0No production unit found for long distance orderz*Failed to assign store or production unit.r  z"Failed to save additional details.)r   r  r   r   r  )order_productr   r   r   z Failed to create order products.r  r   r  r  r  r  order_confirmation_generalr  r  r  r  r  r  r  rj  r  ri  r  r  r  r  z&Scheduling WhatsApp message for order rh  z
 for shop z with delivery mode z and delivery time r  r  r  r  rM  r  r  r  r  r  r  zNavya Bakers Order r  r  r  r  r  r  zNavya Bakers Orderr  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  zFailed to create order.rw  )r   r   r   r<   rb   r9  r   r2  r   r@  r  r   rd   r  r#  r5  r   r  r  r  r  r   r&   r  r$  r%  r1  r@   r   rA   r   r   rc   r   r   r   r   r4   r:  r   rA  rB  rC  intr;  r   r0   rZ  r0  r  rZ   r  r   r   KeyErrorr  rG   r  r3   rn   rD   r4  r=   r   r  r  r  r,   r   r  r$   r  mobile_numberr   r   r   r   r   r5   r   r   r   r2   r   r   r   countr   r8   r  r   r!  r  r  r  r   r  r   r"  r   r  rz  r{  r  r   r  r  r  r  r  r  r  r   r  r  r  r  r   r   r8  rI   rL   r   r  r  r  r  r  rQ   r  r.  r  r  r  r  r  r6  )cro   r<  r  r&  r   r  r  r  r  r#  r  r  r  r  r  r   r  rQ  ro  rk  r  r  r  r  r  r   r  r  rX  r  r   r   r  loc_detailsr  r  r<  delivery_slot_idr  
cart_mixincart_responser   r   rp   r   rx   r   r   r   rt   r   r   cod_surface_delivery_feecod_express_delivery_feeonline_surface_delivery_feeonline_express_delivery_feer-  longdistance_delivery_feer  rN  puadditional_infosr,  r   r   r  customized_countremaining_qtyr0  r1  r2  rc  r   r)  r*  r  r+  r,  rZ  r  rz   r  r  r  r  r  r  r  r"  r  r  r  r  r  r  r  r  r  r  sc                                                                                                      r}   rH  zCheckoutAPIViewBill.postD  s   a	<<D&||//@_+3377;K7L
 t44 -FG!77   (():B?Ill&&z48G\\%%h6F%ll../@"EO||''
B7H&#&61 {{f$$		
	37&77 1W(<< )"9-
CI;OP%==//{8*56 'y(H
,BhRYFY]eiq]q$)M$+M(D9 \\%%h6FG M!%!%#% "$L 1,T J)..	*0Yn
 !7J!77)0)9)9.)I&(/(8(89NPR(S')0)9)9:PRT)U(-4\\-=-=m-L* $\\--l;
!##$1^_%:: /JGG "0!7!7!C!CJUY!C!Z!`!`!b"++#--	#:8Y#O :8YO$X.:("6*4f#G,7'#&''O  #   +2299 OO,Adnn-=>)0%..!&+ !12$--%//!(!5!5#'#4#4  :   ^+#*<<#3#3O#D  1,CS T%2%=%="88:(*_
 * B B4Ii j*//=
(5(:(:;R(S%%j1$./B$C!%j1 *? ;!+,<!=(7).9)34L)M&3MB+@A[+\(+@A[+\(.CDa.b+.CDa.b+)+"'"4u\7J"JK#&L!77$+LL$4$45Q$RM#!+(C/8P5*c18P5(C/8S5*c18S5"'(>"?%HaBb"bK#<L ##%l"NN11!)#-%0"&5A\t-A,?+=+=$)+q$9*;)5"*&3'5!)%,3;<<>!.%1) 2 E4	(3(;(;(B(B(B(M(S(S(U(38M0)..0 ++/JJ/8E,"--1GG%--445Q\fs  DP  DZ  DZ4  [!/!7!7!=!=!?B#%&01c&d d,.EM

	+<+D+D+K+KRW+K+X(<K(89A(6(--/:)-)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*

 ++/EE+00^^"" ,00^^]] $@	 >*-eoo.H.H-I J$$)NN#3 4='@ ))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 ++(-(8(8(B(BI+0+;+;+F+FL(-(=(=I+0==+C+CL&+&7&7).););)E)E(- 338P8P#/#7#7#>#>+0+C+C $? $#eg !  $ $.e.F.F#L8@8I8I(-(@(@(29&$5
 9>8P8P$50A0J0J:0V-1__-E-Ej-Q
+/==+A+A*+M (5oS'1l#hZ%A !. (-'7'7(N:,;M$11$)$6$6'(vvhb1G1G0H188*TV'(vvhb1D1D0ES%V !-
 ,1L'MennM]]abnaooy  {D  zE  EY  Zg  Yh  h{  |I  {J  &K  L3??lT]_d_m_moto~o~  pJ  pJ  LQ  L[  L[  Lh  Lh  jv  xC  ES  Ub  dq  Fr  ~  A[#'<<#3#3#3#>D#LL+=dV)DE KKM !++/EE'/.//T49NN2=8D9H9O9T9T	-&	%" +.
(/ &%V $,*++P05.94@OO5Ee5L5Q5Q	)"	! '*
$+W &%l &A-#OO22&+/84D'*;'7	 3  (0H(JI %*NNE$/F(/(<S'AF*?K(,(=2I$(JJ$4"E %)$5$5$=$=c2$F$L$L$Nst$TE*1//*=*=or*RK$(E*55h?(3(9(9((CA(F(L(L(N#(*2//)::M'N*2//)::M'N*2//)::TUZT['\*2//)::TUZT['\( +?K )3$,AFrl<B=C/&."	-M 15

=U_0`- $,*AeWAfXQ{m1#,+Qug[1M^L_!a ( )0{7I7I'7R(S(](](_I#&y>S#88#8 (0).*0/:-6_").").(,(,(10A/:&F   -1D1D1FJ\1\1:v#+*++C,K*0	-
 '*$+}
 &%L  ('(5LM OM &%S  ,, _19P QZ]^^_P   -DR[RfRfRhi!66 2  19Yhqh|h|h~ !66  ! ##$1KZcZnZnZpq%:: T   -KZ]^_Z`a!66 R i(  -O^abc^de!66 R % ''(5Tcfghcij#)#>#>  G &%D" % ''(5apstupvw#)#>#>  i &%f % ''(5Yhklmhno#)#>#>  } &%zn % '*++M-0V
 $*#>#>  k &%hP  $00 [#LL)YZ[Z ! ##$1JY\]^Y_`%:: U &%RS &%^  	)HWZ[\W]^22 	sf  'AL/  A@ 
+AL/ 6EAL/ A@:  *AL/ BAB '=AL/ &AC 7BAL/ CAL/ 	AD D AE AL/ .AL#0AAKAAFBAG!>AH D,AI&B#AI&1P;AK-AAJ-5AAK 	AL/ 
<AK	AL/ H AK0	AL/ :AK@	AL/ @#A@7@4AL/ @6A@7@7AL/ @:	AA>A0AA9A3AA>A4AL/ A9AA>A>AL/ B	ACB
0AC B:ACB;AL/ C ACCAL/ C	ADC0ADDADDAL/ DADDAL/ D	AE
D'AED?AE
E AL/ EAE
E
AL/ EAFE'AF	FAFFAL/ F	AFFAL/ F	AGF'AGGAGGAKG	AL/ GAGGAKG	AHG!'AHHAHH	AKH	AL/ HAHHAKH	AI#H('AIIAI#IAKI	AL/ IAI#I#AKI&	AJ*I/'AJ%JAJ*JAKJ	AL/ J%AJ*J*AKJ-(AKKAKKAKKAKK	AL K%'ALLAL LAL#L	AL/ LAL L AL#L#AL,L(AL/ L,AL/ L/	AM*L8'AM%MAM*M%AM*NrE  r!  r   r}   r  r  :  s     br   r  )method_decoratordispatch)r   c                       e Zd Zg Zg Zd Zy)PayUWebhookc                 T   |j                         j                         }|dv rd}n|dv rd}|j                  }|j                  d      }t        j
                  j                  |      j                         }|st        ddid	
      S t        j
                  j                  |      j                         }|st        ddid	
      S |dk(  rd|_
        d|_        n |dk(  rd|_
        d|_        n|dk(  rd|_
        |j                          |j                          t        ddid	
      S )N)
successfulr  sucessr  )failedfailurer  r  r  r  r  r  r   r  zPayment not foundr  r  rw  r  refundRefundedr   rd  )r  r  r   r   r3   rb   r   rc   r   r8   r  r  r5  )ro   r<  eventr   r  r  r'  s          r}   rH  zPayUWebhook.posto  s   ##%77E++E||!%%u%5;;=W&78EE//((u(5;;=W&9:3GGI%+G"!,Eh%-G"!1Eh%/G"

4(55r   Nr  r!  r   r}   r  r  j  s    6r   r  c                       e Zd Zg Zg Zd Zy)PayUPaymentResultAPIViewc                    |j                   }|j                  d      }|j                  d      }t        j                  d| d|        t        j
                  j                  |      j                         }|st        ddid	      S t        j
                  j                  |
      j                         }|rB|dk(  rd|_
        d|_        nd|_
        d|_        |j                          |j                          |j                  j                  d      }	|j                  xs d}
|
dv rt        |dk(  rdnd|dd      S t        |d||
|	d      S )Nr  r   zPayU Return | txnid=z
 | status=r  r  r    r   r  r  r  r  rw  r  r  r  ru  r#   r   zPayment processed)r   r  rv   zpayment_processing.html)r  r  r  )r   r   r  r  r3   rb   r   rc   r   r8   r  r  r5  r  r  r   )ro   r<  r  r&  r   r  payu_statusr  r'  r  r  s              r}   rH  zPayUPaymentResultAPIView.post  sE   ||!hhx(+E7*[MJK%%u%5;;=W&78EE//((u(5;;=i')/&%0")1&%5"LLNJJL(1' ..*i7!Q!.   g8*;
  	r   Nr  r!  r   r}   r  r    s    'r   r  c                       e Zd Zg Zg Zd Zy)OrderPaymentStatusAPIViewc                 *   t         j                  j                  |      j                         }|st	        ddid      S t
        j                  j                  |      j                         }|st	        ddi      S t	        ||j                  d	      S )
Nr  r  r  r  r   r  r  Pending)r  r  )r3   rb   r   rc   r   r8   r  )ro   r<  r  r  r'  s        r}   r   zOrderPaymentStatusAPIView.get@  s    %%x%8>>@W&78EE//((u(5;;=-y9:: %44
  	r   N)r  r  r   r  r  r   r!  r   r}   r  r  =  s    
r   r  z0https://test.payu.in/merchant/postservice?form=2r  r  c                       e Zd ZdZd Zy)VerifyPayUPaymentAPIViewz8
    Verify PayU payment and update DB immediately.
    c           	      	   |j                   j                  d      }|st        dddt        j                        S 	 t
        j                  j                  |      }t        j                  j                  |      }|j                  d
k(  r)t        dd|j                  dt        j                        S 	 t         d| dt         }t        j                   |j#                               j%                         }t        d||d}t'        j(                  t*        |d      }|j-                          |j/                         }	t1        j2                  d| d|	        |	j                  di       j                  |      }
|
s+t        dd|j                  dddt        j                        S |
j                  d      }|
j                  d      xs dj5                         }|
j                  d      xs d}|d k(  r|d!k(  rt7        j8                         5  d"|_
        d#|_        ||_        |
j                  d$      |_        |jA                  g d%&       d'|_        ||_!        |jA                  d(d)g&       d d d        t        dd"d'd*ddd+t        j                        S |d,k(  rt7        j8                         5  d
|_
        |
j                  d-      |_"        |
j                  d.      |_#        |
j                  d/      |_$        |jA                  g d0&       d1|_        |jA                  d(g&       d d d        t        dd
d1d2d3t        j                        S t7        j8                         5  d"|_
        |
j                  d4      |_        |
j                  d$      |_        |jA                  g d5&       d6|_        |jA                  d(g&       d d d        t        dd"d6d7ddt        j                        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 w xY w# 1 sw Y   xY w# 1 sw Y   ?xY w# 1 sw Y   xY w# tJ        $ rG}t1        jL                  d8       t        dd9tO        |      d:t        jP                        cY d }~S d }~ww xY w);Nr  r   ztxnid is requiredr   r   r  r  r  zPayment record not foundr  r#   zPayment already successful)r   rv   r  z|verify_payment|r  verify_payment)rs  commandvar1r     )r   timeoutz[PayU VERIFY] txnid=z
 response=transaction_detailsr  z"Payment not initiated or abandonedT)r   r  r  rv   	can_retryr   unmappedstatusr^   field9zPayment cancelled by userr  usercancelledr  userCancelled
error_code)r  auth_statusr  r  r3  	Cancelledr  rv   USER_CANCELLED)r   r  r  failure_reasonrv   r  r  mihpayidbank_ref_numamt)r  r  rz  r  r  zPayment successful)r   r  r  rv   error_Message)r  r  r  rw  zPayment failedz[PayU VERIFY] Unexpected errorzFailed to verify PayU paymentr  ))r   r   r   r   r1  r3   rb   r8   r9  r   r  r  r   r  r  r  r  r  r  requestsrH  PAYU_VERIFY_URLraise_for_statusr.  r  r  r  rG   r  r  r  r  r5  rv   r  rz  r  r  ry  rd   r  )ro   r<  r  r  r'  r  
hash_valuepayloadresponser   tx_datar  unmapped
cancel_msgr  s                  r}   rH  zVerifyPayUPaymentAPIView.postW  s     ,)<=22 
	NN&&&6Eoo)))6G !!V+;$)$6$6
 )) S	
 *,UG1YK@  !(:(:(<=GGIJ  +"	G  }}H
 %%'==?DLL/wjGHhh4b9==eDG
 "#*3(-(:(:#G%) "--	 	 "++h/K$45;BBDH X.M2MJ
 i'H,G '')-5G**9G'5?G25<[[5NG2LL 0L  *5E&$.EMJJ&!.J  *&  "#*2(3*:#>%) "--
 
 i' '')-3G*,3KK
,CG)*1++n*EG'%,[[%7GNLL 0L  *5E&JJn-=J> *  "#*0(3#7	 "--  ##%)1&18_1M.18\1J. ,  &."

.)9
: & &.$,/!% ))	 	o "" 	):;00  ## 	)CD00 	L *)F *)8 &%0  		>?> V
 << 		s   A O4 6C2R )A'R A"Q2)R R 5A8Q*-'R R )A"Q7(R 41Q'0QQQ'"R *Q4/R 7R <R 	S<SSSNr%  r!  r   r}   r  r  R  s    wr   r  c                    t         j                  j                  |      j                         }|j                  dk(  rt        | dddi      S |j                  }d}|r-|j                   d|j                  xs d j                         }d}t        j                  j                  |      j                         }|r|j                   d	|j                  xs d }|j                  |j                  ||d
}t        | d|      S )Nr  r  zdelivery_error.htmlr  zOrder already deliveredr^   r;  r   r  )r  r  customer_namero  zdelivery_confirm.html)r3   rb   r   rc   r  r   r  r   rA  r  rA   rB  rC  r  r  )r<  r  r  r   r  ro  customer_addressr	  s           r}   delivery_confirm_pager    s
   NN!!z!288:E [(g4.7
  	 ??D M??+1T^^-Ar,BCIIK G--4-8>>@%--.b1A1J1J1Pb0QR jjNN&	G '2G<<r   c                     t        | d      S )Nzdelivery_success.htmlr   r<  s    r}   delivery_successr  4  s    '233r   c                     t        | d      S )Nzdelivery_failed.htmlr  r  s    r}   delivery_failedr  7  s    '122r   r  )r  rM  r$  urllib.parser   r  r  r  adminportal.tasksr   r   r   adminportal.viewsr   r   orders.delhiveryr	   r
   r   r   r   r   django.utils.timezoner   user_agentsr   r.  decimalr   r   rest_framework.viewsr   rest_framework.responser   rest_frameworkr   django.shortcutsr   r   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/   r0   r1   r2   r3   r4   r5   r6   r7   r8   r9   r:   r;   r<   r=   r>   r?   accounts.modelsr@   rA   rB   rC   rD   rE   django.utilsrF   	django.dbrG   serializersrH   rI   rJ   rK   rL   rM   rN   rO   products.serializersrP   r  r-  ri  razorpaydjango.confrQ   django.viewsrR   django.views.decorators.csrfrS   django.db.modelsrT   django.httprU   rV   r  bill_writer.BillWriterrW   r^   rX   rZ   r#  rK  rQ  rU  r[  r]  r  r  r  r  r  r  r4  rH  rJ  rU  r|  r  r  r  r'  rG  rW  r]  rm  ro  rr  r~   r  django.utils.decoratorsr  r  r  r  r  r  r  r  r  r  r  r!  r   r}   <module>r     s      "    o o 9 o  o +   * ( , ! @ @ - 9 y y       > C B ( ! ! J  J  J 8 ! !     4  2 	 3  Zb bLFP- FPT
 
:
M7 
>R- R&G GTEBw EBP3w 321mW 1>Kg} K`P PjO Oj
G 
:8
EW ER^ ^Dt tp	G 8q qhG GVtJ' tJp@=' @H' *7 82'  JW JX;&Bl' l\ 5+J/!6' !6 0!6F+w +^ " E.	|w |~ =F43r   