o
    C6h`                    @   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 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Z/G d)d* d*eZ0d
S )+    )APIView)Responsestatus)IsAuthenticated)QCount)*   )CustomProductCustomProductImageCustomProductVideoDynamicFilteringProductCategoryProductReviewSalesUnitProductSelectionProductsSKUProductImageSpecialListTagsWishlist)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r9   sales_unit__uuidskuc                 S      i | ]}|j r|j j|jqS r'   r=   idshop_admin_status.0	selectionr'   r'   r(   
<dictcomp>B       
z(ProductListView.post.<locals>.<dictcomp>)item_category__category_code   )rG   skus__sku_expiry_duration__gtrI   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rZ   ApplicableSubCategory__inProductrZ   ApplicableProduct__inSkuproduct__inrZ   ApplicableSku__inr6   sku_status__inr6   ri   sku_expiry_duration__gtr6   
sku_status.2fc                 3       | ]
}| j  v V  qd S NApplicableSkur    rC   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_namern   r   shopr)   r@   rn   rt   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)   rC   subcatr   r'   r'   r(   r      s    

 Products retrieved successfully!c                 S      g | ]	}|j |jd qS )r@   namer@   tag_namerC   tagr'   r'   r(   r          c                 S   r   r   r@   filter_namerC   filterr'   r'   r(   r      r   tagsdynamic_filtersr   messager!   filtersr   r   An unexpected error occurred.r   r   	exception)4r!   r)   r5   is_authenticatedr   r   r   firstr   values_listr   uuidr   select_relatedr   r    distinctr   r   Discountr   r   existsr   imageurlsku_mrpr   r   r   rZ   rX   ApplicableCategoryr]   ApplicableSubCategoryApplicableProductanyDiscountPercentagefloatsub_category_namer@   	item_nameveg_or_non_veg_statusstandard_imageappenditemsr   r   r"   	ExceptionstrHTTP_400_BAD_REQUEST)"r#   r$   r1   r2   r3   wishlist_itemsr9   resultsshop_idproduct_selectionsr   	tags_listdynamic_filters_listr   r   subcategory_dict	discountsr6   r   product_imagesproduct_image_url	first_skur   r   r   r   r   applicable_discountdiscount_percentager   r   r   product_infoer'   rv   r   r   r(   post+   sz  





"	zProductListView.postNr*   r+   r,   r   r'   r'   r'   r(   r0   *       r0   c                   @   r/   )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_termr2   r3   r4   r6   Tr7   r9   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?   rB   r'   r'   r(   rE   /  rF   z*ProductSearchView.post.<locals>.<dictcomp>rH   rJ   rK   rL   rM   rO   rQ   rS   rU   rW   rX   rY   r\   r]   r^   r`   ra   rc   rd   rf   rh   rj   rl   rm   ro   c                 3   rp   rq   rr   rt   ru   r'   r(   rw     rx   z)ProductSearchView.post.<locals>.<genexpr>r
   ry   rz   r{   c                    r|   r}   r   rt   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)   r5   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   rZ   rX   r   r    r]   r   r   r   r   r   r   r@   r   r   r   r   r   r   r"   r   r   r   )"r#   r$   r   r2   r3   r   r9   r   r   r   r   r   r   r   r   r   r   r6   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                   @   r/   )ProductDetailViewc                    s  zTt 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(d)
 qt1d"d*|d+t2j3d,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}t1d/d0|d+t2j4d,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qq|r|j+}t,|d"t,|d#   d$}| d%}n|d$}d&}|d' -|j||j.|d$||||j/|j0||j5d6 q1t1d"d*|d+t2j3d,W S tjj|d}| rd7d |D ng }|jj	r)|jjnd|j|j|j|jj|jj|jj||j|j|d8d |D |	g d}t1d/d9|d+t2j4d,W S  t j6yj   t1d/d:d;t2j4d, Y S  t7y } zt1d/d<t8|d=t2j9d,W  Y d }~S d }~ww )>Nr@   c              
   S   s@   g | ]}|j j|j|j j d |j j |j|j|j|jdqS ) )r5   	review_idusernameratingreview_headingreview_text
created_at)	r5   r   r@   
first_name	last_namer   r   r   r   )rC   reviewr'   r'   r(   r     s    
z*ProductDetailView.post.<locals>.<listcomp>)r   r4   r6   Tr7   Fr9   r:   r;   r=   c                 S   r>   r'   r?   rB   r'   r'   r(   rE     rF   z*ProductDetailView.post.<locals>.<dictcomp>rK   rL   rh   rl   c                 S      g | ]}|j jqS r'   r   r   rC   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   rW   rY   r\   r^   r`   ra   rc   rf   c                 3   rp   rq   rr   rt   ru   r'   r(   rw   g  rx   z)ProductDetailView.post.<locals>.<genexpr>r
   ry   ro   rz   r{   r   Disabled)
sku_idsku_coder   offer_pricer   r   sku_expiry_durationsku_bulk_qty_limitr   rn   z'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!rH   rj   c                 S   r   r'   r   r   r'   r'   r(   r     r   c                 S   r   r   r   r   r'   r'   r(   r     r   c                 3   rp   rq   rr   rt   ru   r'   r(   rw   	  rx   )r   r   r   r   r   r   r   r   r   r   rn   c                 S   r   r'   r   r   r'   r'   r(   r   3  r   c                 S   r   r   r   r   r'   r'   r(   r   H  r   z(SKU  details not retrieved successfully!Product not found.r   r   r   r   ):r   r   r)   r   r    r   r   r   r5   r   r   r   r   r   r@   r!   r   r   r   r   r   r   r   r   r   rX   category_namer]   r   r1   r   r   r   r   r   r   r   r   rZ   r   r   r   r   r   r   r   r   r   r   r   r   r"   HTTP_404_NOT_FOUNDrn   DoesNotExistr   r   r   )r#   r$   r   r6   r   review_datar   r   r   wishlist_statusr9   r   r   r   r   r   product_image_urlsr   r=   r   r   r   r   r   r   r   r   r   r   r'   ru   r(   r     sj  

	
		




	
zProductDetailView.postNr   r'   r'   r'   r(   r     r   r   c                   @   r/   )SpecialListProductViewc                    s  zt j }g }|jjr%tjj|jd }tjj|jdj	ddd}n|j
d}tjj|d }t }t }|D ]}	|	j D ]}
||
jj ||
jj qCq<t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r9|
j j% v r9 } n* j#dkrK|
 j& v rK } n j#dkrat' fdd|D ra } 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rN|
j j% v rN } n* j#dkr`|
 j& v r` } n j#dkrvt' fd)d|D rv } 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.d/t3|d0t0j4d-W  Y d }~S d }~ww )1Nr4   r6   Tr7   r9   r:   rW   rY   r\   r^   r`   ra   rc   rd   rf   r;   r=   c                 S   r>   r'   r?   rB   r'   r'   r(   rE     rF   z.SpecialListProductView.get.<locals>.<dictcomp>)special_nameiconbanner_imager   rK   rL   rh   rl   rm   ro   zN/Ac                 3   rp   rq   rr   rt   ru   r'   r(   rw     rx   z-SpecialListProductView.get.<locals>.<genexpr>r
   ry   rz   r{   c                    s"   g | ]}|j  |jd dqS )Unknownr~   )r   r)   r@   rt   )r   r'   r(   r      s    z.SpecialListProductView.get.<locals>.<listcomp>Fr   r   rH   rj   c                 3   rp   rq   rr   rt   ru   r'   r(   rw   K  rx   c                 S   r   r}   r~   rt   r'   r'   r(   r   k      z2Special lists and products retrieved successfully!r  r   r   r   r   )5r   r   r    r5   r   r   r   r   r   r   r!   r)   setr   addrX   r   r]   r   r   r   r   r   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   )r#   r$   special_listsr   r   r   r9   category_idssubcategory_idsspecial_listr6   r   r   r   special_list_datar   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r'   )rv   r   r(   r)   j  s  
	
	




f
	zSpecialListProductView.getNr*   r+   r,   r)   r'   r'   r'   r(   r
  i  r   r
  c                   @   r/   )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   r@   r   r   r   r   r  r  r  r   r   r   r   r"   r   r   r   )	r#   r$   custom_productscustom_product_listr6   product_imager   r   r   r'   r'   r(   r     sN   
	zCustomProductListView.postNr   r'   r'   r'   r(   r    r   r  c                   @   r/   )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'  )rC   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   r@   r   r   r   r   r  r  r  r   r'  r,  r"   r   r   r   )r#   r$   r   r  r   r-  product_datar   r'   r'   r(   r)     s\   		zCustomProductDetailView.getNr  r'   r'   r'   r(   r$    r   r$  c                   @   r/   )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   )r5   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(   r4    s@   
zDeleteReviewView.deleteN)r*   r+   r,   r4  r'   r'   r'   r(   r/    r   r/  c                   @   r/   )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   r0  r  r   r   z#You can only edit your own reviews.r   r   r   Missing required fields.r
   zReview updated successfully!r5   r   r   r   r   r  r1  r   r   )r5   r   r   r   r2  r   r   r)   r3  r!   r   r   r   r   saver   r   r"   r  r  r   r   )r#   r$   r   r   r   r   r   r   r'   r'   r(   put1  sf   
zEditReviewView.putN)r*   r+   r,   r9  r'   r'   r'   r(   r5  0  r   r5  c                   @   r/   )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   r0  r  r   r   r   r   r6  )r6   r5   r   r   r   r
   zReview added successfully!r7  r  r  r   r   )r   r   r)   r5   r   r   r   r2  r!   r   r   r8  r   r   HTTP_201_CREATEDr  r  r   r   )
r#   r$   r   r6   r5   r   r   r   r   r   r'   r'   r(   r   u  sf   
zAddReviewView.postNr   r'   r'   r'   r(   r:  t  r   r:  c                   @   r/   )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   r0  r  r   r5   r6   r
   z'Product added to wishlist successfully!r  r   r   )r   r   r)   r5   r   r   r   r2  r   r8  r;  r  r  r   r   r   r#   r$   r   r6   r5   wishlist_itemr   r'   r'   r(   r     s4   
zAddToWishlistView.postNr   r'   r'   r'   r(   r<    r   r<  c                   @   r/   )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   r0  r  r   r=  r
   z+Product removed from wishlist successfully!r  r   r   )r   r   r)   r5   r   r   r   r2  r   r   r   r4  r"   r  r  r   r   r   r>  r'   r'   r(   r     s4   
zRemoveFromWishlistView.postNr   r'   r'   r'   r(   r@    r   r@  c                   @   r/   )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 )*Nr9   r4   r:   r6   r   zNo products in wishlist.r  r   FrK   rL   )r<   sku__product__idsku__sku_status__inrA   TrH   )sku__sku_expiry_duration__gtrB  rC  )rB  rC  rl   ro   rW   rY   r\   r^   r`   ra   rc   rf   c                 3   rp   rq   rr   rt   ru   r'   r(   rw   i  rx   z(WishlistListView.post.<locals>.<genexpr>r
   ry   rz   r{   c                 S   r   r}   r~   rt   r'   r'   r(   r     r  z)WishlistListView.post.<locals>.<listcomp>)r   r   r   r   r   r   r   r   r   r   r   product_availablec                 3   rp   rq   rr   rt   ru   r'   r(   rw     rx   c                 S   r   r}   r~   rt   r'   r'   r(   r     r  z Wishlist retrieved successfully!r  r   r   )/r!   r)   r5   r   r   r   r   r   r   r   r   r   r   r"   r6   r   r   r   r@   r   r   r=   r   r   r   r   r   r   r   r   r   rX   r]   r   rZ   r   r    r   r   r   r   r   r   r   r   r   r   )r#   r$   r9   r5   r   r   r   r?  r6   rE  r   r   
skus_salesisku_inactivejr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r'   ru   r(   r     s<  




	zWishlistListView.postNr   r'   r'   r'   r(   rA    r   rA  c                   @   r   )AlsoBoughtViewzI
    View to list all discounts with DiscountName and StandardImage.
    c           6         s6  |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	 g }	g }
|rt
jj|d
}g }|D ]	}||jj qRtt|}tjj|d}g }|D ]}||j qmt
jj|dj|d
}|djtddd}g }|D ]	}||d  q|D ] }tjj|d }|jj|
vr|
|jj t|
dkr nqn|jjr|j}ztt|d}W n6   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}||vr,|| qtt|}t
jj|d}g }|D ]
}||jj q?t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  q|D ]#}tjj|d }|jj|
vr|
|jj t|
dkr n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'% } |r+t'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/| d0B t(jt)d1tjj| d2d3B }%g }&| D ]}rzj rztjj|d"d#gd4}'ntjj|d"d#gd d5}'|'* r_t+jj|d6}(|(* r|( j,j-nd })|'jd"d7 p|'jd#d7 }*|*r|*j.}+|+d8},|*j/}-|*j0}.|*j1}/d }0|%D ]Q  j2d)kr|j3 j4$ v rۈ }0 n= j2d,kr|j5 j6$ v r }0 n* j2d/kr | j7$ v r  }0 n j2d1krt8 fd9d:|'D r }0 nq|0r2|0j9}1t:|,d;t:|1d<   d8}2|1 d=}3n|,}2d>}3|j|j;|j<|3|,|2|)|-|.|/fd?d@|'D |jjrV|j|v ndAdB}4|&|4 qftd;dC|&dDd@ |!D dEd@ |"D dFdGt=j>dW S  t?y }5 ztddHt@|5dIt=jAdW  Y d }5~5S d }5~5ww )JNr   r2   r3   r9   r4   r6   Tr7   r:   )sku__product_id)uuid__in)	order__inr=   )countz-countr   
   r   zCart not found for user : r  zAnonymous ID is required.i  r   z"Cart not found for anonymous_id : )cart)sku__in)sku__product_id__inr;   c                 S   r>   r'   r?   rB   r'   r'   r(   rE   ~  rF   z'AlsoBoughtView.post.<locals>.<dictcomp>rQ   rH   )rI   rR   rK   rL   rM      rO   rS   rU   rW   rX   rY   r\   r]   r^   r`   ra   rc   rd   rf   rh   rj   rl   rm   ro   c                 3   rp   rq   rr   rt   ru   r'   r(   rw     rx   z&AlsoBoughtView.post.<locals>.<genexpr>r
   ry   rz   r{   c                    r|   r}   r   rt   r   r'   r(   r     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     r   r   )r   r   r   r   r   r   )Br!   r)   r5   r   r   r   r   r   r   r   OrderProductsr   orderr   listr  Ordersexcludevaluesannotater   order_byr   r6   r@   lenr   Cartr   r   CartItemr=   r   r   r   r   r    r   r   r   r   r   r   r   r   r   r   r   r   r   rZ   rX   r   r]   r   r   r   r   r   r   r   r   r"   r   r   r   )6r#   r$   argskwargsr6   r2   r3   r9   r   r   r   order_product_list
order_listordersorder_numbersrU  orders_commoncommon_productssku_product_listsku_productrG  product_skur5   rP  
cart_itemssku_listproduct_id_listitemr=   product_id_skur   r   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(   rJ    r.   rJ  )1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   serializersr   
googlemapsshops.modelsr   accounts.modelsr   django.shortcutsr   r   r0   r   r   r
  r  r$  r/  r5  r:  r<  r@  rA  rJ  r'   r'   r'   r(   <module>   sF    < d R     '6@,DB"" a