o
    4%i!p                    @   s  d dl mZ d dlmZ d dlmZ d dlmZ d dlm	Z	m
Z
 d dlT ddlmZmZmZmZmZmZmZmZmZmZmZmZmZmZ dd	lmZ d d
lZd dlmZ d dl m!Z! d dl"m#Z# d dlm	Z	 G dd deZ$G dd deZ%G dd deZ&G dd deZ'G dd deZ(G dd deZ)G dd deZ*G dd deZ+G dd  d eZ,G d!d" d"eZ-G d#d$ d$eZ.G d%d& d&eZ/G d'd( d(eZ0G d)d* d*eZ1d
S )+    )APIView)Responsestatus)IsAuthenticated)QCount)*   )CustomProductCustomProductImageCustomProductVideoDynamicFilteringProductCategoryProductReviewSalesUnitProductSelectionProductsSKUProductImageSpecialListTagsWishlistYouMayAlsoLike)ProductCategorySerializerN)Shop)UserLocation)get_object_or_404)r   c                   @      e Zd ZdZdd ZdS )CategoryListViewz.
    View for listing product categories.
    c                 C   s&   t j }t|dd}t|jtjdS )NT)manyr   )r   objectsallr   r   datar   HTTP_200_OK)selfrequest
categories
serializer r(   8/var/www/html/Testing_prj/Navya-Bakers/products/views.pyget%   s   
zCategoryListView.getN)__name__
__module____qualname____doc__r*   r(   r(   r(   r)   r           r   c                   @      e Zd Zdd ZdS )ProductListViewc           "         s  |j d}|j dg }|j dg }z$|jjr2tjj|jd tjj|jdj	ddd}n|j d}tjj|d	 g }rmj
rmj
j}tjj|d
d}	dd |	D |rgtjj|d}
ntj }
n|rztjj|dd }
n	tjjdd }
|
jddgd }
tjj|
d }tjj|
d }|rtjj|d}|
j|d }
|rtjj|d}|
j|d }
i }tjtd|
j	ddddtjtd|
j	ddddB tjtd|
d B tjtd!tjj|
d"d#B }|
D ]}rj
rtjj|ddgd$}ntjj|ddgdd%}| rtjj|d&}| r3| jjnd }|jdd' pE|jdd' }|rY|j}|d(}|j}|j}|j}d }|D ]Q  jdkrr|j j  v rr } n= jdkr|j! j" v r } n* jdkr| j# v r } n jd!krt$ fd)d*|D r } nq]|r|j%}t&|d+t&|d,   d(}| d-}n|}d.}|j!j'}|j(|j)|j*|||||||fd/d0|D |jjr|j(|v nd1d2} ||vr|j!j+r|j!j+jnd g d3||< || d4g ,|  qd5d0 |- D }t.d+d6|d7d0 |D d8d0 |D d9d:t/j0d;W S  t1yY }! zt.d<d=t2|!d>t/j3d;W  Y d }!~!S d }!~!ww )?Ncategory_codetag_idsdynamic_filter_idsuserproductTflatanonymous_idr:   sales_unit__uuidskuc                 S      i | ]}|j r|j j|jqS r(   r>   idshop_admin_status.0	selectionr(   r(   r)   
<dictcomp>C       
z(ProductListView.post.<locals>.<dictcomp>)item_category__category_code   )rH   skus__sku_expiry_duration__gtrJ   VisibleOut of Stockskus__sku_status__inproducts__inid__intags__indynamicfiltering__inCategoryitem_category
DiscountOnApplicableCategory__inSubCategoryitem_sub_categoryr[   ApplicableSubCategory__inProductr[   ApplicableProduct__inSkuproduct__inr[   ApplicableSku__inr7   sku_status__inr7   rj   sku_expiry_duration__gtr7   
sku_status.2fc                 3       | ]
}| j  v V  qd S NApplicableSkur!   rD   r>   discountr(   r)   	<genexpr>       
z'ProductListView.post.<locals>.<genexpr>r
   d   %0%c                    0   g | ]}|j rjr |jn|jd qS sku_namero   r   shopr*   rA   ro   ru   sku_status_mapuser_locationr(   r)   
<listcomp>       z(ProductListView.post.<locals>.<listcomp>F
product_idproduct_nameproduct_typeofferprice
offerpriceproduct_imgr   sku_quantitysku_unitskuswishlist)subcategory_imageproductsr   c                 S   s,   g | ]\}}|| d d| dg dqS )r    r   )subcategory_namer   r   )r*   rD   subcatr   r(   r(   r)   r      s    

 Products retrieved successfully!c                 S      g | ]	}|j |jd qS )rA   namerA   tag_namerD   tagr(   r(   r)   r          c                 S   r   r   rA   filter_namerD   filterr(   r(   r)   r      r   tagsdynamic_filtersr   messager"   filtersr   r   An unexpected error occurred.r   r   	exception)4r"   r*   r6   is_authenticatedr   r    r   firstr   values_listr   uuidr   select_relatedr   r!   distinctr   r   Discountr   r   existsr   imageurlsku_mrpr   r   r   r[   rY   ApplicableCategoryr^   ApplicableSubCategoryApplicableProductanyDiscountPercentagefloatsub_category_namerA   	item_nameveg_or_non_veg_statusstandard_imageappenditemsr   r   r#   	ExceptionstrHTTP_400_BAD_REQUEST)"r$   r%   r2   r3   r4   wishlist_itemsr:   resultsshop_idproduct_selectionsr   	tags_listdynamic_filters_listr   r   subcategory_dict	discountsr7   r   product_imagesproduct_image_url	first_skur   r   r   r   r   applicable_discountdiscount_percentager   r   r   product_infoer(   rw   r   r   r)   post,   sz  





"	zProductListView.postNr+   r,   r-   r   r(   r(   r(   r)   r1   +       r1   c                   @   r0   )ProductSearchViewc           "         s  |j d}|j dg }|j dg }z|jjr2tjj|jd tjj|jdj	ddd}n|j d}tjj|d	 g }t
jt|d
t|dB t|dB t|dB  }rxjrxjj}	tjj|	dd}
dd |
D n|jdd }|jddgd }tjj|d }tjj|d }|rtjj|d}|j|d }|rtjj|d}|j|d }tjtd|j	ddddtjtd|j	dddd B tjtd!|d"B tjtd#tjj|d$d%B }i }|D ]}rjrtjj|ddgd&}ntjj|ddgdd'}| rtjj|d(}| r0| jjnd }|jdd) pB|jdd) }|rV|j}|d*}|j}|j}|j}d }|D ]Q  jdkro|j j  v ro } n= jdkr|j! j"  v r } n* jd!kr| j#  v r } n jd#krt$ fd+d,|D r } nqZ|r|j%}t&|d-t&|d.   d*}| d/}n|}d0}|j!j'}|j(|j)|j*|||||||fd1d2|D |jjr|j(|v nd3d4} ||vrg ||< || +|  qd5d2 |, D }t-d-d6|d7d2 |D d8d2 |D d9d:t.j/d;W S  t0yE }! zt-d<d=t1|!d>t.j2d;W  Y d }!~!S d }!~!ww )?Nsearch_termr3   r4   r5   r7   Tr8   r:   r;   )item_name__icontains)skus__sku_name__icontains)'item_category__category_code__icontains)/item_sub_category__sub_category_name__icontainsr<   r>   c                 S   r?   r(   r@   rC   r(   r(   r)   rF   0  rG   z*ProductSearchView.post.<locals>.<dictcomp>rI   rK   rL   rM   rN   rP   rR   rT   rV   rX   rY   rZ   r]   r^   r_   ra   rb   rd   re   rg   ri   rk   rm   rn   rp   c                 3   rq   rr   rs   ru   rv   r(   r)   rx     ry   z)ProductSearchView.post.<locals>.<genexpr>r
   rz   r{   r|   c                    r}   r~   r   ru   r   r(   r)   r     r   z*ProductSearchView.post.<locals>.<listcomp>Fr   c                 S   s   g | ]	\}}||d qS ))r   r   r(   r   r(   r(   r)   r     s    r   c                 S   r   r   r   r   r(   r(   r)   r     r   c                 S   r   r   r   r   r(   r(   r)   r     r   r   r   r   r   r   r   )3r"   r*   r6   r   r   r    r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r[   rY   r   r!   r^   r   r   r   r   r   r   rA   r   r   r   r   r   r   r#   r   r   r   )"r$   r%   r   r3   r4   r   r:   r   r   r   r   r   r   r   r   r   r   r7   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r(   r   r)   r     sp  





	zProductSearchView.postNr   r(   r(   r(   r)   r     r   r   c                   @   r0   )ProductDetailViewc                    s$  z\t jj|d}|j }dd |D }tjj|d }|jj	r?t
jj|jd }tjj|jdjddd}|j|v }	nd	}	|jd
}
t
jj|
d }|r|jr|jj}tjj|dd}dd |D }tjj|ddgd}| rtjj|d}| rdd |D ng }|jj	r|jjnd|j|j|j|jj|jj|jj||j|j|dd |D |	g d}|D ]}|j }|j!}|j"}|j#}d }t$jt%d|jgdt$jt%d|jgdB t$jt%d|gdB t$jt%d|gdB }|D ]P  j&dkr|j j' v r } n< j&dkr"|j j( v r" } n) j&dkr4| j) v r4 } n j&dkrJt* fd d!|D rJ } nq|re|j+}t,|d"t,|d#   d$}| d%}n|d$}d&}|d' -|j|j.|d$||||j/|j0|||jd(|j1|j2d) qt3d"d*|d+t4j5d,W S tjj|d}| rd-d |D ng }|jj	r|jjnd|j|j|j|jj|jj|jj||j|j|d.d |D |	g d}t3d/d0|d+t4j6d,W S tjj|ddgd1d2}| rtjj|d}| rd3d |D ng }|jj	r|jjnd|j|j|j|jj|jj|jj||j|j|d4d |D |	g d}|D ]}|j }|j!}|j"}|j#}d }t$jt%d|jgdt$jt%d|jgdB t$jt%d|gdB t$jt%d|gdB }|D ]Q  j&dkr|j j' v r } n= j&dkr|j j( v r } n* j&dkr| j) v r } n j&dkrt* fd5d!|D rň } nqu|r|j+}t,|d"t,|d#   d$}| d%}n|d$}d&}|d' -|j||j.|d$||||j/|j0||j7|j1|j2d6 q5t3d"d*|d+t4j5d,W S tjj|d}| r&d7d |D ng }|jj	r1|jjnd|j|j|j|jj|jj|jj||j|j|d8d |D |	g d}t3d"d9|d+t4j5d,W S  t j8yr   t3d/d:d;t4j6d, Y S  t9y } zt3d/d<t:|d=t4j;d,W  Y d }~S d }~ww )>NrA   c              
   S   sX   g | ](}|j j|j|j jr|j jnd  d|j jr|j jnd  |j|j|j|jdqS )r    )r6   	review_idusernameratingreview_headingreview_text
created_at)	r6   r   rA   
first_name	last_namer   r   r   r   )rD   reviewr(   r(   r)   r     s    
,z*ProductDetailView.post.<locals>.<listcomp>)r   r5   r7   Tr8   Fr:   r;   r<   r>   c                 S   r?   r(   r@   rC   r(   r(   r)   rF   	  rG   z*ProductDetailView.post.<locals>.<dictcomp>rL   rM   ri   rm   c                 S      g | ]}|j jqS r(   r   r   rD   r   r(   r(   r)   r         NAc                 S   r   r   r   r   r(   r(   r)   r   *  r   )user_idr   r   r   product_categoryproduct_subcategoryproduct_category_codereviews	item_codeitem_descriptionimagesr   r   r   rX   rZ   r]   r_   ra   rb   rd   rg   c                 3   rq   rr   rs   ru   rv   r(   r)   rx   h  ry   z)ProductDetailView.post.<locals>.<genexpr>r
   rz   rp   r{   r|   r   Disabled)sku_idsku_coder   offer_pricer   r   sku_expiry_durationsku_bulk_qty_limitr   ro   same_day_deliverycustomization_availablez'Product details retrieved successfully!r   r   r"   r   c                 S   r   r(   r   r   r(   r(   r)   r     r   c                 S   r   r   r   r   r(   r(   r)   r     r   r   zNo sku Detials retrieved!rI   rk   c                 S   r   r(   r   r   r(   r(   r)   r     r   c                 S   r   r   r   r   r(   r(   r)   r     r   c                 3   rq   rr   rs   ru   rv   r(   r)   rx     ry   )r   r   r   r   r   r   r   r   r  r   ro   r  r  c                 S   r   r(   r   r   r(   r(   r)   r   8  r   c                 S   r   r   r   r   r(   r(   r)   r   M  r   z(SKU  details not retrieved successfully!Product not found.r   r   r   r   )<r   r    r*   r   r!   r   r   r   r6   r   r   r   r   r   rA   r"   r   r   r   r   r   r   r   r   r   rY   category_namer^   r   r2   r   r   r   r   r   r   r   r   r[   r   r   r   r   r   r   r   r   r   r  r  r  r   r   r#   HTTP_404_NOT_FOUNDro   DoesNotExistr   r   r   )r$   r%   r   r7   r   review_datar   r   r   wishlist_statusr:   r   r   r   r   r   product_image_urlsr   r>   r   r   r   r   r   r   r   r   r   r   r(   rv   r)   r     sr  

	
		




	
zProductDetailView.postNr   r(   r(   r(   r)   r     r   r   c                   @   r0   )SpecialListProductViewc                    s  zt j }g }d }|jjr'tjj|jd }tjj|jdj	ddd}n|j
dd}|r9tjj|d }t }t }|D ]}	|	j D ]}
||
jj ||
jj qHqAtjtd|d	tjtd
|dB tjtd|	j dB tjtdtjj|	j ddB }|r|jr|jj}tjj|dd}dd |D |D ]
}	|	j|	jr|	jjnd |	jr|	jjnd g d}|	j D ]}
tjj|
ddgd}tjj|
d}| r| jjnd }|jdd p|jdd }|r|j}|d ur|dnd}|j }|j!}|j"}d }|D ]Q  j#dkr+|
j j$ v r+ } n= j#d
kr>|
j j% v r> } n* j#dkrP|
 j& v rP } n j#dkrft' fdd|D rf } nq|r|j(}t)|dt)|d    d}| d!}n|}d"}|
j*|
j+|
j,|||||||fd#d$|D |jjr|
j*|v nd%d&}|d' -| q|-| qn|D ]}	|	j|	jr|	jjnd |	jr|	jjnd g d}|	j D ]}
tjj|
ddgd(d)}tjj|
d}| r| jjnd }|jdd p|jdd }|r|j}|d ur|dnd}|j }|j!}|j"}d }|D ]Q  j#dkr@|
j j$ v r@ } n= j#d
krS|
j j% v rS } n* j#dkre|
 j& v re } n j#dkr{t' fd*d|D r{ } nq+|r|j(}t)|dt)|d    d}| d!}n|}d"}|
jj.}|
j*|
j+|
j,|||||||d+d$ |D |jjr|
j*|v nd%d&}|d' -| q|-| qt/dd,|d-t0j1d.W S  t2y } zt/d/d0t3|d1t0j4d.W  Y d }~S d }~ww )2Nr5   r7   Tr8   r:   r   r;   rX   rZ   r]   r_   ra   rb   rd   re   rg   r<   r>   c                 S   r?   r(   r@   rC   r(   r(   r)   rF     rG   z.SpecialListProductView.get.<locals>.<dictcomp>)special_nameiconbanner_imager   rL   rM   ri   rm   rn   rp   zN/Ac                 3   rq   rr   rs   ru   rv   r(   r)   rx     ry   z-SpecialListProductView.get.<locals>.<genexpr>r
   rz   r{   r|   c                    s"   g | ]}|j  |jd dqS )Unknownr   )r   r*   rA   ru   )r   r(   r)   r     s    z.SpecialListProductView.get.<locals>.<listcomp>Fr   r   rI   rk   c                 3   rq   rr   rs   ru   rv   r(   r)   rx   Q  ry   c                 S   r   r~   r   ru   r(   r(   r)   r   q      z2Special lists and products retrieved successfully!r  r   r   r   r   )5r   r    r!   r6   r   r   r   r   r   r   r"   r*   setr   addrY   r   r^   r   r   r   r   r   r   r  r  r   r  r   r   r   r   r   r   r   r[   r   r   r   r   r   r   rA   r   r   r   r   r   r   r#   r   r   r   )r$   r%   special_listsr   r   r   r:   category_idssubcategory_idsspecial_listr7   r   r   r   special_list_datar   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r(   )rw   r   r)   r*   o  s  
	
	




f
	zSpecialListProductView.getNr+   r,   r-   r*   r(   r(   r(   r)   r  n  r   r  c                   @   r0   )CustomProductListViewc           	      C   s   zDt j }g }|D ].}tjj|d }|r|jjnd }|j|j	|j
|j|j|j|j|j|j|d
}|| q
tdd|dtjdW S  tyc } ztddt|d	tjdW  Y d }~S d }~ww )
Ncustom_product)
r   r   product_codeproduct_descriptionr   min_sizemax_size	size_unitavailabilityr   r
   z'Custom products retrieved successfully!r  r   r   r   r   )r   r    r!   r   r   r   r   r   rA   r   r   r   r   r   r!  r"  r#  r   r   r   r#   r   r   r   )	r$   r%   custom_productscustom_product_listr7   product_imager   r   r   r(   r(   r)   r     sN   
	zCustomProductListView.postNr   r(   r(   r(   r)   r    r   r  c                   @   r0   )CustomProductDetailViewc                 C   s   zUt jj|d }|stdddtjdW S tjj|d}tjj|d}|j	|j
|j|j|j|j|j|j|j|j|jdd |D d	d |D d
}tdd|dtjdW S  tyt } ztddt|dtjdW  Y d }~S d }~ww )Nr   r   zCustom product not found.r  r   r  c                 S      g | ]
}|j j|jd qS ))	image_urlcreated_date)r   r   r*  r   r(   r(   r)   r         z/CustomProductDetailView.get.<locals>.<listcomp>c                 S   r(  ))	video_urlr*  )videor   r*  )rD   r-  r(   r(   r)   r     r+  )r   r   r  descriptionr   r   r!  r"  r#  r*  updated_dater   videosr
   z.Custom product details retrieved successfully!r  r   r   )r   r    r   r   r   r   r  r   r   rA   r   r   r   r   r   r!  r"  r#  r*  r/  r#   r   r   r   )r$   r%   r   r  r   r0  product_datar   r(   r(   r)   r*     s\   		zCustomProductDetailView.getNr  r(   r(   r(   r)   r'    r   r'  c                   @   r0   )DeleteReviewViewc              
   C   s   z6|j jstdddtjdW S tjj|d}|j |j kr(tdddtjdW S |	  tdddtj
dW S  tjyJ   tdd	dtjd Y S  tyh } ztdd
t|dtjdW  Y d }~S d }~ww )Nr   User not authenticated.r  r   r   z%You can only delete your own reviews.r
   zReview deleted successfully!Review not found.r   r   )r6   r   r   r   HTTP_401_UNAUTHORIZEDr   r    r*   HTTP_403_FORBIDDENdeleter#   r	  r  r   r   r   )r$   r%   r   r   r   r(   r(   r)   r7    s@   
zDeleteReviewView.deleteN)r+   r,   r-   r7  r(   r(   r(   r)   r2  
  r   r2  c                   @   r0   )EditReviewViewc              
   C   sJ  zr|j jstdddtjdW S tjj|d}|j |j kr(tdddtjdW S |j	d|j
}|j	d|j}|j	d	|j}|rF|rF|sQtdd
dtjdW S ||_
||_||_|  tdd|j j||||jddtjdW S  tjy   tdddtjd Y S  ty } ztddt|dtjdW  Y d }~S d }~ww )Nr   r3  r  r   r   z#You can only edit your own reviews.r   r   r   Missing required fields.r
   zReview updated successfully!r6   r   r   r   r   r  r4  r   r   )r6   r   r   r   r5  r   r    r*   r6  r"   r   r   r   r   saver   r   r#   r	  r  r   r   )r$   r%   r   r   r   r   r   r   r(   r(   r)   put7  sf   
zEditReviewView.putN)r+   r,   r-   r<  r(   r(   r(   r)   r8  6  r   r8  c                   @   r0   )AddReviewViewc           
   
   C   s   z]t jj|d}|jjstdddtjdW S |j}|jd}|jd}|jd}|r2|r2|s=tdd	dtj	dW S t
|||||d
}|  tdd|j||||jddtjdW S  t jyq   tdddtjd Y S  ty }	 ztddt|	dtj	dW  Y d }	~	S d }	~	ww )Nr   r   r3  r  r   r   r   r   r9  )r7   r6   r   r   r   r
   zReview added successfully!r:  r  r  r   r   )r   r    r*   r6   r   r   r   r5  r"   r   r   r;  r   r   HTTP_201_CREATEDr	  r  r   r   )
r$   r%   r   r7   r6   r   r   r   r   r   r(   r(   r)   r   {  sf   
zAddReviewView.postNr   r(   r(   r(   r)   r=  z  r   r=  c                   @   r0   )AddToWishlistViewc              
   C   s   z.t jj|d}|jjstdddtjdW S |j}t||d}|	  tdddtj
dW S  t jyB   tdd	dtjd Y S  ty` } ztdd
t|dtjdW  Y d }~S d }~ww )Nr   r   r3  r  r   r6   r7   r
   z'Product added to wishlist successfully!r  r   r   )r   r    r*   r6   r   r   r   r5  r   r;  r>  r	  r  r   r   r   r$   r%   r   r7   r6   wishlist_itemr   r(   r(   r)   r     s4   
zAddToWishlistView.postNr   r(   r(   r(   r)   r?    r   r?  c                   @   r0   )RemoveFromWishlistViewc              
   C   s   z2t jj|d}|jjstdddtjdW S |j}tjj	||d
 }|  tdddtjdW S  t jyF   tdd	dtjd Y S  tyd } ztdd
t|dtjdW  Y d }~S d }~ww )Nr   r   r3  r  r   r@  r
   z+Product removed from wishlist successfully!r  r   r   )r   r    r*   r6   r   r   r   r5  r   r   r   r7  r#   r	  r  r   r   r   rA  r(   r(   r)   r     s4   
zRemoveFromWishlistView.postNr   r(   r(   r(   r)   rC    r   rC  c                   @   r0   )WishlistListViewc                    s  zN|j d}|j}|jjrtjj|jd }n	tjj|d }tjj|d	d}|
 s<tdddtjdW S g }|D ]}|j}d	}	g }
|ru|jru|jj}tjj||jd
dgd
d }|D ]}|
|j qd|
rrd}	n;d	}	n8tjjd|jd
dgd }|D ]}|
|j q|
rd}	nd	}	tjj|jd
dgd }|D ]}|
|j qtjj|d}|
 r| jjnd }|	r|
d }|j}|d}|j}|j}|j}d }tjtd|jgdtd|j gdB td|gdB tdt!jj|ddB }|D ]E  j"dkr|j j#$ v sA j"dkr!|j  j%$ v sA j"dkr/| j&$ v sA j"dkrEt' fdd|
D rE } nq|ra|j(}t)|dt)|d   d}| d}n|}d }|j|j*|j+|||||||d!d" |
D |	d#}|| q@|
rC|
d }|j}|d}|j}|j}|j}d }tjtd|jgdtd|j gdB td|gdB tdt!jj|ddB }|D ]E  j"dkr|j j#$ v s j"dkr|j  j%$ v s j"dkr| j&$ v s j"dkrt' fd$d|
D r } nq|r#|j(}t)|dt)|d   d}| d}n|}d }|j|j*|j+|||||||d%d" |
D |	d#}|| q@tdd&|d'tjdW S  t,yo } ztdd(t-|d)tj.dW  Y d }~S d }~ww )*Nr:   r5   r;   r7   r   zNo products in wishlist.r  r   FrL   rM   )r=   sku__product__idsku__sku_status__inrB   TrI   )sku__sku_expiry_duration__gtrE  rF  )rE  rF  rm   rp   rX   rZ   r]   r_   ra   rb   rd   rg   c                 3   rq   rr   rs   ru   rv   r(   r)   rx   o  ry   z(WishlistListView.post.<locals>.<genexpr>r
   rz   r{   r|   c                 S   r   r~   r   ru   r(   r(   r)   r     r  z)WishlistListView.post.<locals>.<listcomp>)r   r   r   r   r   r   r   r   r   r   r   product_availablec                 3   rq   rr   rs   ru   rv   r(   r)   rx     ry   c                 S   r   r~   r   ru   r(   r(   r)   r     r  z Wishlist retrieved successfully!r  r   r   )/r"   r*   r6   r   r   r    r   r   r   r   r   r   r   r#   r7   r   r   r   rA   r   r   r>   r   r   r   r   r   r   r   r   r   rY   r^   r   r[   r   r!   r   r   r   r   r   r   r   r   r   r   )r$   r%   r:   r6   r   r   r   rB  r7   rH  r   r   
skus_salesisku_inactivejr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r(   rv   r)   r     s<  




	zWishlistListView.postNr   r(   r(   r(   r)   rD     r   rD  c                   @   r   )AlsoBoughtViewzI
    View to list all discounts with DiscountName and StandardImage.
    c           <         s	  |j d}|j dg }|j dg }|j d}z|jjr8tjj|jd tjj|jdj	ddd}n	tjj|d	 d
}	rMj
rMj
}
d}	g }g }g }|rYtjj|d }|rt|j D ]}|j|vrs||j qftjj|d}g }|D ]	}||jj qtt|}tjj|d}g }|D ]}||j qtjj|dj|djdd}|djtddd}g }|D ]	}||d  q|	dkr|D ]A}tjj|d }tjj|
|d }|r|jdks|jdkr|jj|vr|jj|vr||jj t|dkr nqn1|D ].}tjj|dd }|r>|jj|vr>|jj|vr>||jj t|dkrG nq|| }||v rW| | n|jjr{|j}zt!t"|d}W n7   t#dd|j$ d Y W S |st#dddd d!W S zt!t"|d	}W n   t#dd"| d Y W S t%jj|d#}g }g } |D ]:}!|!j&}"||" |"jj}#tjj|#d$ }|r|j D ]}|j|vr||j q|#| vr| |# qtt|}tjj|d%}g }|D ]
}||jj qtt|}tjj|d}g }|D ]	}||j qtjj|dj|d%j| d&}|djtddd}g }|D ]
}||d  qA|	dkr|D ]C}tjj|d }tjj|
|d }|r|jdksw|jdkr|jj|vr|jj|vr||jj t|dkr nqSn1|D ].}tjj|dd }|r|jj|vr|jj|vr||jj t|dkr nq|| }| D ]}$|$|v r| |$ qψrj
rj
j}
tjj|
d''d}%d(d) |%D t(jj|d* }&n
t(jjd|d+) }&|&jddgd,) d d- }&t*jj|&d.) }'t+jj|&d.) }(|r?t*jj|d*})|&j|)d/) }&|rQt+jj|d*}*|&j|*d0) }&t,jt-d1|&j	d2ddd3t,jt-d4|&j	d5ddd6B t,jt-d7|&d8B t,jt-d9tjj|&d:d;B }+g },|&D ]}rj
rtjj|ddgd<}-ntjj|ddgdd=}-|-. rt/jj|d$}.|.. r|. j0j1nd }/|-jdd> p|-jdd> }0|0r|0j2}1|1d?}2|0j3}3|0j4}4|0j5}5d }6|+D ]Q  j6d1kr|j7 j8 v r }6 n= j6d4kr|j9 j: v r }6 n* j6d7kr&| j; v r& }6 n j6d9kr<t< fd@dA|-D r< }6 nq|6rX|6j=}7t>|2dBt>|7dC   d?}8|7 dD}9n|2}8dE}9|j|j?|j@|9|2|8|/|3|4|5fdFdG|-D |jjr||j|v ndHdI}:|,|: qt#dBdJ|,dKdG |'D dLdG |(D dMdNtAjBd!W S  tCy }; zt#ddOtD|;dPtAjEd!W  Y d };~;S d };~;ww )QNr   r3   r4   r:   r5   r7   Tr8   r;   zLong Distancer   )product__id)sku__product_id)uuid__in)	order__inr   )sku__sku_statusr>   )countz-countr   )
sales_unitr>   rL   rM   
   rI   )rA   rl   r   zCart not found for user : r  zAnonymous ID is required.i  r   z"Cart not found for anonymous_id : )cartrm   )sku__in)sku__product_id__inr<   c                 S   r?   r(   r@   rC   r(   r(   r)   rF     rG   z'AlsoBoughtView.post.<locals>.<dictcomp>rR   )rJ   rS   rN      rP   rT   rV   rX   rY   rZ   r]   r^   r_   ra   rb   rd   re   rg   ri   rk   rn   rp   c                 3   rq   rr   rs   ru   rv   r(   r)   rx   /  ry   z&AlsoBoughtView.post.<locals>.<genexpr>r
   rz   r{   r|   c                    r}   r~   r   ru   r   r(   r)   r   I  s    z'AlsoBoughtView.post.<locals>.<listcomp>Fr   r   c                 S   r   r   r   r   r(   r(   r)   r   `  r   c                 S   r   r   r   r   r(   r(   r)   r   a  r   r   )r   r   r   r   r   r   )Fr"   r*   r6   r   r   r    r   r   r   r   r   r   liked_productsr!   rA   r   OrderProductsorderr   listr  Ordersexcludevaluesannotater   order_byr   r   rB   r7   lenremover   Cartr   r   CartItemr>   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r[   rY   r   r^   r   r   r   r   r   r   r   r   r#   r   r   r   )<r$   r%   argskwargsr7   r3   r4   r:   r   
order_typer   r   r   people_also_like_listyou_may_likeliked_productorder_product_list
order_listordersorder_numbersr\  orders_commoncommon_productssku_product_listsku_productrJ  product_skusales_unit_statusr6   rV  
cart_itemssku_listproduct_id_listitemr>   product_id_skuproduct_existr   r   r   r   r   r   r   product_listr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r(   r   r)   r     s\  
















zAlsoBoughtView.postN)r+   r,   r-   r.   r   r(   r(   r(   r)   rM    r/   rM  )2rest_framework.viewsr   rest_framework.responser   rest_frameworkr   rest_framework.permissionsr   django.db.modelsr   r   orders.modelsmodelsr   r   r   r   r   r   r   r   r   r   r   r   r   r   serializersr   
googlemapsshops.modelsr   accounts.modelsr   django.shortcutsr   r   r1   r   r   r  r  r'  r2  r8  r=  r?  rC  rD  rM  r(   r(   r(   r)   <module>   sF    @ d R     (6@,DB"" a