
    x?i $                        d dl m Z  d dlmZmZmZmZmZ d dlmZ d dl	m
Z
mZmZmZ d dlmZmZ d dlmZ d dlmZ  e
dd	g
          Z ed	          Z ed          Z ed          Z G d de          Z G d de          ZdedefdZdeeef         deeef         fdZdeeeef                  deeeeef                  eef         fdZ dedededeeeeef         ef         fdZ!deeef         ddfdZ"e#                    dej$                   d!ed"efd#            Z%e&                    dej'                   d!efd$            Z(e&                    d%ej'                   d&             Z)e&                    d'ej'                    ed(d)*          fd+efd,            Z*e#                    d-ej'                   d+ed"efd.            Z+e#                    d/ej'                   d+efd0            Z,e&                    d1ej'                   d!ed+efd2            Z-e&                    d3ej'                   d!efd4            Z.e&                    d5ej'                   d!ed+efd6            Z/dS )7    )datetime)AnyDictListOptionalTuple)ObjectId)	APIRouterHTTPExceptionPathstatus)	BaseModelField)get_col)ShippingAddressz/ordersorders)prefixtagscartsshipping_feesc                   T    e Zd ZU  eddg d          Zeed<   dZee         ed<   dS )ChangeOrderStatusRequest.zOrder status)pendingshipped	delivered	cancelled)descriptionchoicesr   NtrackingNumber)	__name__
__module____qualname__r   r   str__annotations__r   r        1D:\Nbitz\nbitez_python\app\routers\OrderRouter.pyr   r      sN         %AqAqAqrrrFCrrr$(NHSM(((((r&   r   c                   r    e Zd ZU eed<   eed<   dZee         ed<   dZ	ee         ed<   dZ
ee         ed<   dS )CreateOrderRequestshippingAddresspaymentMethodNplatformFeepaymentReferencepaymentProvider)r    r!   r"   r   r$   r#   r,   r   floatr-   r.   r%   r&   r'   r)   r)      sg         $$$$#'K%'''&*hsm***%)OXc])))))r&   r)   
identifierreturnc                 ~    t          j        |           st          t          j        d          t          |           S )NzInvalid identifierstatus_codedetail)r	   is_validr   r   HTTP_400_BAD_REQUEST)r0   s    r'   _ensure_object_idr8      s;    Z(( b(CL`aaaaJr&   	order_docc                 D   t          | d                   t          | d                   |                     dg           |                     d          |                     d          |                     d          |                     dd          |                     d	d          |                     d
d          |                     dd          |                     dd          |                     d          |                     d          |                     d          dS )N_iduser
orderItemsr*   r+   paymentResult
itemsPricer   shippingFeer,   
totalPricer   r   shippingFeeSource	createdAt	updatedAt)idr<   r=   r*   r+   r>   r?   r@   r,   rA   r   rB   rC   rD   )r#   get)r9   s    r'   _serialize_orderrG   #   s    )E"##If%&&mmL"55$==):;;"77"77mmL!44 }}]A66 }}]A66mmL!44--)44&]]+>??]];//]];//  r&   
cart_itemsc                    g }d}d}| D ]Q}t          |                    dd                    }||z  }|                    d          }t          ||n|                    dd                    }|||z  z  }|                    t	          |                    d                    |                    d          r"t	          |                    d                    nd |                    d          |                    d	          |t          |                    dd                    ||t          ||z  d
          |                    d          d
           S|t          |d
          |fS )N        r   quantityoffer_pricepriceproduct	variantIdvariantTypevariantValue   rC   )
rN   rO   rP   rQ   rK   listedPricerL   chargedPrice	lineTotaladdedAt)intrF   r/   appendr#   round)rH   order_itemssubtotaltotal_quantityitemrK   offered_amount
unit_prices           r'   _prepare_order_itemsr`   7   sq   (*KHN 
 
txx
A..//("-00^-G>>TXXV]_`MaMabb
J))txx	2233;?88K;P;PZS+!6!6777VZ#xx66 $ 8 8$$TXXgq%9%9::- *":#8!<<88K00 	
 	
 	
 	
 h**N::r&   stater[   r\   c           	      6   t                               d| i          }|st          t          j        d|            |dk    rd}n|dk    rd}nd}t          |                    ||                    dd	                              }t          |d
          ||fS )Nra   z Shipping fee not configured for r3   i  above_500_fee   	combo_feedelivery_feer   rR   )shipping_fee_colfind_oner   r   HTTP_404_NOT_FOUNDr/   rF   rY   )ra   r[   r\   fee_docapplied_ruleshipping_amounts         r'   _resolve_shipping_feerm   R   s    ''%(899G v(AJtmrJtJtuuuu3&	!		"%GKKgkk.RS6T6TUUVVO!$$g|;;r&   cart_docNc                 h   g | d<   d| d<   t          |                     dd                    }t          |                     dd                    }||z   | d<   t          j                    | d<   d |                                 D             }t
                              d	| d	         id
|i           d S )NitemsrJ   totalAmountr,   shippingChargesfinalAmountrD   c                 &    i | ]\  }}|d k    ||S )r;   r%   ).0kvs      r'   
<dictcomp>z_reset_cart.<locals>.<dictcomp>g   s#    ???1AJJq!JJJr&   r;   $set)r/   rF   r   utcnowrp   	carts_col
update_one)rn   platform_feeshippingpayloads       r'   _reset_cartr   `   s    HW!H]mS99::LX\\"3S99::H*X5H]$O--H[?? 0 0???G%%1FG3DEEEEEr&   z
/{user_id})r4   user_idr   c                 `   t          |           }t                              d|i          }|r|                    d          st	          t
          j        d          t          |                    dg                     \  }}}t          |j	        j
        ||          \  }}}	t          |j        |j        n|                    dd                    }
t          ||z   |
z   d          }t          j                    }|||j	                                        |j        |dd	|j        |j        d
|||
|d	t)          |d                   |d         |	d||d}t*                              |          }t*                              d|j        i          }t1          |           t3          |          S )Nr<   rp   zCart is emptyr3   r,   rJ   rR   INRr   )amountcurrencyr   	referenceproviderr;   ra   )rE   ra   appliedRule)r<   r=   r*   r+   r>   r?   r@   r,   rA   r   rB   rC   rD   )r8   r{   rh   rF   r   r   r7   r`   rm   r*   ra   r/   r,   rY   r   rz   dictr+   r-   r.   r#   
orders_col
insert_oneinserted_idr   rG   )r   r   user_oidcartrZ   r[   r\   rl   shipping_fee_docrk   r}   total_pricenowr9   resultcreateds                   r'   create_orderr   k   s    ))Hvx011D ]txx(( ](CO\\\\,@'SUAVAV,W,W)K>6K%x7 73O%| &2>DHH]\_D`D` L ?2\A1EEK
/

C!"27799 .! 1/
 
 &#!&u-..%g.'
 

 / I4 ""9--F!!5&*<"=>>GG$$$r&   c                     t          |           }d t                              d|i                              dd          D             }|S )Nc                 ,    g | ]}t          |          S r%   rG   ru   docs     r'   
<listcomp>z$list_user_orders.<locals>.<listcomp>   !    iiis##iiir&   r<   rC   r8   r   findsortr   r   r   s      r'   list_user_ordersr      J     ))Hiiz?Q/R/R/W/WXceg/h/hiiiFMr&   z/adminc                  t    d t                                                               dd          D             } | S )Nc                 ,    g | ]}t          |          S r%   r   r   s     r'   r   z#list_all_orders.<locals>.<listcomp>   s!    WWWs##WWWr&   rC   r   )r   r   r   )r   s    r'   list_all_ordersr      s5    WWz/@/@/E/EkSU/V/VWWWFMr&   z/admin/{order_id}.zOrder identifier)r   order_idc                     t                               dt          |           i          }|st          t          j        d          t          |          S )Nr;   Order not foundr3   )r   rh   r8   r   r   ri   rG   r   orders     r'   	get_orderr      sQ    (9((C(C DEEE ](AJ[\\\\E"""r&   z/admin/{order_id}/change-statusc                    t                               dt          |           i          }|st          t          j        d          |j        |d<   |j        |d<   t                               d|d         id|i           t          |          S )Nr;   r   r3   r   r   ry   )	r   rh   r8   r   r   ri   r   r|   rG   )r   r   r   s      r'   change_order_statusr      s    (9((C(C DEEE ](AJ[\\\\nE(O%4E
5%,/&%AAAE"""r&   z/admin/{order_id}/cancelc                     t                               dt          |           i          }|st          t          j        d          d|d<   t                               d|d         id|i           t          |          S )Nr;   r   r3   r   r   ry   )r   rh   r8   r   r   ri   r|   rG   r   s     r'   cancel_orderr      s}    (9((C(C DEEE ](AJ[\\\\!E(O5%,/&%AAAE"""r&   z!/user/{user_id}/orders/{order_id}c                     t          |           }t                              t          |          |d          }|st          t          j        d          t          |          S )Nr;   r<   r   r3   )r8   r   rh   r   r   ri   rG   r   r   r   r   s       r'   get_user_orderr      sa     ))H(9((C(CX V VWWE ](AJ[\\\\E"""r&   z/user/{user_id}/ordersc                     t          |           }d t                              d|i                              dd          D             }|S )Nc                 ,    g | ]}t          |          S r%   r   r   s     r'   r   z#get_user_orders.<locals>.<listcomp>   r   r&   r<   rC   r   r   r   s      r'   get_user_ordersr      r   r&   z(/user/{user_id}/orders/{order_id}/cancelc                     t          |           }t                              t          |          |d          }|st          t          j        d          d|d<   t                              d|d         id|i           t          |          S )Nr   r   r3   r   r   r;   ry   )r8   r   rh   r   r   ri   r|   rG   r   s       r'   cancel_user_orderr      s     ))H(9((C(CX V VWWE ](AJ[\\\\!E(O5%,/&%AAAE"""r&   )0r   typingr   r   r   r   r   bsonr	   fastapir
   r   r   r   pydanticr   r   	app.db.dbr   app.models.ShippFeer   routerr   r{   rg   r   r)   r#   r8   rG   r/   rW   r`   rm   r   postHTTP_201_CREATEDr   rF   HTTP_200_OKr   r   r   r   r   r   r   r   r%   r&   r'   <module>r      s         3 3 3 3 3 3 3 3 3 3 3 3 3 3       : : : : : : : : : : : : % % % % % % % %       / / / / / /	)8*	5	5	5WX
GG	7?++ ) ) ) ) )y ) ) )* * * * * * * * #  (        S#X 4S>    (;T$sCx.%9 ;eDcSVhDXZ_adDd>e ; ; ; ;6< < <s <uUZ\`adfiai\jloUoOp < < < <F$sCx. FT F F F F \v'>??-%# -%(: -% -% -% @?-%` Lf&899c    :9 H&"455  65
 V-?@@"d34FGGG # # # # # A@# .F<NOO## #0H # # # PO# 'V5GHH#3 # # # IH# /V=OPP#C #3 # # # QP# $&2DEES    FE
 6FDVWW#s #c # # # XW# # #r&   