o
    ÎY&j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� ¡ }|r°tjj|d�}|
j|d� ¡ }
|rÁt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�r­t$‡ 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 ¡ ,| ¡ qüd5d0„ | -¡ 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� ¡ }|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!|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�rªt$‡ 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�rûg ||< ||  +| ¡ qùd5d2„ | ,¡ 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jdd�}dd„ |D ƒ}tjj|d� ¡ }|jjrAt	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�}| ¡ �r›tjj|d�}| ¡ r�d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�r6|ˆ j) '¡ v �r6ˆ } nˆ j%dk�rLt*‡ fd!d"„|D ƒƒ�rLˆ } nqü|�rg|j+}t,|ƒd#t,|d$ ƒ  d%›}|› d&�}n|d%›}d'}|d(  -|j|j.|d%›||||j/|j0|| |jd)¡|j1|j2d*œ¡ q¼t3d#d+|d,œt4j5d-�W S tjj|d�}| ¡ �r®d.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œ}t3d0d1|d,œt4j6d-�W S tjj|ddgd2d3�}| ¡ �rtjj|d�}| ¡ �r	d4d„ |D ƒng }|jj�r|jjnd|j|j|j|jj|jj|jj||j|j|d5d„ |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�rÇt*‡ fd6d"„|D ƒƒ�rÇˆ } n�qw|�rã|j+}t,|ƒd#t,|d$ ƒ  d%›}|› d&�}n|d%›}d'}|d(  -|j||j.|d%›||||j/|j0||j7|j1|j2d7œ¡ �q7t3d#d+|d,œt4j5d-�W S tjj|d�}| ¡ �r(d8d„ |D ƒng }|jj�r3|jjnd|j|j|j|jj|jj|jj||j|j|d9d„ |D ƒ|	g dœ}t3d#d:|d,œt4j5d-�W S  t j8�yt   t3d0d;d<œt4j6d-� Y S  t9�y“ } zt3d0d=t:|ƒd>œt4j;d-�W  Y d }~S d }~ww )?N©rA   T)Úis_approvedc              
   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   r8   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   g  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†   7  ró   c                 S   r›   rœ   rž   r    r(   r(   r)   r†   L  r¢   z(SKU  details not retrieved successfully!úProduct not found.©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   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Ú   à  sp  
öÿþÿþþÿ
ÿý	ðþÿÿþÿúÿòÿÿïÿÿÿ
ÿ€ôÿýú	ÿý	ðýúý
ÿý
ðþÿÿþÿúÿòÿïÿÿÿ
ÿ€óÿýú
ÿý
ðýú	þ
ûýú€ÿzProductDetailView.postNrÛ   r(   r(   r(   r)   rã   ß  rÜ   rã   c                   @   r0   )ÚSpecialListProductViewc                    sø  �zÚt 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Û| -|¡ �q»t/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.post.<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.post.<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.post.<locals>.<listcomp>Frˆ   r•   rI   rk   c                 3   rq   rr   rs   ru   rv   r(   r)   rx   P  ry   c                 S   r›   r~   r   ru   r(   r(   r)   r†   p  ó    ýþÿ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Ú   n  s°  
ÿþû	
ÿþÿý	ÿ÷ÿôÿÿþþ

ÿøÿþÿÿ
ÿ€ÿ
þñ€ž
fÿøýþÿÿ
ÿ€ÿÿûî€ýú	ýú€ÿzSpecialListProductView.postNrÛ   r(   r(   r(   r)   r  m  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.getN)r+   r,   r-   r*   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)   Úput6  sf   þþþûýô
þýú€ÿzEditReviewView.putN)r+   r,   r-   r<  r(   r(   r(   r)   r8  5  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Ú   z  sf   þþûûýô
þýú€ÿzAddReviewView.postNrÛ   r(   r(   r(   r)   r=  y  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…|
r“d}	nd	}	tjj|jd
dgd� ¡ }|D ]}|
 |j¡ q¤t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   n  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¡ qšt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qÕn1|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 |�sˆt#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ç|  |#¡ �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 ¡ �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
�r tjj|ddgd<�}-ntjj|ddgdd=�}-|- .¡ �r…t/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œ}:|, |:¡ �qŒt#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†   H  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®   )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