o
    Q?h,                  	   @   s  d dl Z d dlmZmZ d dlmZ d dlZd dlmZmZm	Z	m
Z
 d dlmZ d dlmZ d dlmZmZ d dlmZ d d	lmZ d d
lmZ eddG dd deZdededede	dB fddZd dedee defddZdedefddZdedededB fddZdS )!    N)	dataclassfield)datetime)SERVER_TIMESTAMP
ArrayUnionDocumentReferencedb)clearBin)Address)DocumentDatavalidate)	OrderItem)printifyTime)ShipmentT)kw_onlyc                   @   s  e Zd ZU eed< eed< eed< eed< eed< eed< eeB ed< eeB ed< eeB ed	< eeB ed
< eeB ed< eed< dZ	edB ed< dZ
eed< dZeed< dZedB ed< dZedB ed< eedZee ed< eedZee ed< eedZee ed< eedZee ed< eedZedB ed< eedZedB ed< eedZee ed< dZedB ed< eedZee ed< ed d! Zed"efd#d$Zd%d& Zd'd( Zd4d)ee fd*d+Z d,d- Z!d.e"fd/d0Z#g fd1ee fd2d3Z$dS )5OrderplatformOrderId
platformIdshopIdshipped	cancelleddrafttotalDiscount
totalPricetotalTaxshippingCost
grandTotalshippingAddressNorderNumber shopNameUSDcurrencyCodeFroutedshippingSpeedId)default_factoryitemIdsmappedItems
productIdsroutedOrderIdsmetadata
routedFromlabelsprintFilePending
statusTagsc                    s$   | di  fddt | jD S )Nc                    s   i | ]}|  |qS  )get).0kdatar/   M/var/www/html/riverr-enterprise-integrations-main/V2/functions/Orders/main.py
<dictcomp>2   s    z#Order.from_dict.<locals>.<dictcomp>r/   )inspect	signature
parameters)clsr4   r/   r3   r5   	from_dict0   s   

zOrder.from_dictorderIdc                 C   sX   t d|  }|jr*| ds|jt|jd | 	d|ji| S d S )Norders/idr>   )
r   documentr0   existsto_dict	referenceupdatedictr>   r;   )r:   r<   snapr/   r/   r5   r0   6   s
   "z	Order.getc                 C   s(   t ddd| j }dd |D S )N
orderItemsr<   ==c                 S   s   g | ]	}t | qS r/   )r   r;   rB   )r1   docr/   r/   r5   
<listcomp>?       z'Order.getOrderItems.<locals>.<listcomp>)r   
collectionwherer>   r0   )selfdocsr/   r/   r5   getOrderItems=   s   zOrder.getOrderItemsc                 C   s   t |  d S N)r   )rN   r/   r/   r5   __post_init__A   s   zOrder.__post_init__rG   c                 C   s   t | |||dS )N)rG   rewritereadd)	saveOrder)rN   rG   rS   rT   r/   r/   r5   saveD   s   z
Order.savec                 K   s*   t d| j  }|jj|dd |S )Nr=   Tmerge)r   r@   r>   r0   rC   set)rN   kwargsrefr/   r/   r5   rD   G   s   zOrder.updateshipmentc                 C   s  t d| j  }|  }t  }tj}| jr| jdnd }|r,t	|dd}t
dtj|dtt
|jd|jr>|jn|jdg| j tttj|d  t
d	tt
t|jd	d
d |D |j|j|jdt
t|jddd |D dgdd	gd}|j|j|dd |D ]}|t d|j t
dtj|dd q| jrt d| jd }	|	jrt ddd| jd }
|
D ]}||jt
dtj|dd q||	jt
dtj|dd	gd |   t!| j"| j t#| j"| j |S )Nr=   locationtimezoneUTCT)tzr\   )r>   typeurlr   c                 S      g | ]}|j qS r/   platformOrderItemIdr1   itemr/   r/   r5   rJ   a       z'Order.markAsShipped.<locals>.<listcomp>)timeactionaffected_itemstracking_numbercarriertracking_urlpackagedc                 S   rc   r/   rd   rf   r/   r/   r5   rJ   h   rh   ri   rj   rk   )statusevents)r   	shippedAtr,   maskedOrderIdr*   r.   rW   orderItems/)r   rs   ordersr<   rG   rH   )r   rs   r.   )$r   r@   r>   r0   rP   batchpytzutcr*   r^   rE   r   nowr   imagepdflowerstrint	timestampr   zonetrackingCodecarrierNametrackingUrlrY   rC   rD   r+   rL   rA   rM   commitr	   enterpriseIdfulfillBatchItems)rN   r\   r[   itemsrw   r^   r]   rD   rg   	routedRefrG   	orderItemr/   r/   r5   markAsShippedL   sr   
 

 




zOrder.markAsShippedorderItemIdsc           	         sN  t d| j  }tj}| jd}|rt|dd}|jr| 	 }t
 dkr5 fdd|D ndd |D }t
 dt
|fv rl|jtt
|t
|kt
|t
|kr^t|nd d	 t
|t
|k| _ttt|jd
dd |D dgd}t
|t
|krd
|d< |jjt|dgddd |D ]}|  q| jS dS )Nr=   r]   r^   r_   r   c                    s   g | ]	}|j  v r|qS r/   r?   r1   r   r   r/   r5   rJ      rK   z Order.cancel.<locals>.<listcomp>c                 S   s   g | ]}|qS r/   r/   r   r/   r/   r5   rJ      s    )r   cancelledAtcanceledc                 S   rc   r/   rd   )r1   ir/   r/   r5   rJ      rh   rp   )rr   rq   r   )r*   r.   TrW   F)r   r@   r>   r0   rx   ry   r*   r^   rA   rP   lenrC   rD   rE   r   rz   r   r   r   r   rY   cancel)	rN   r   r[   r^   r]   rG   orderItemsToCancelr*   r   r/   r   r5   r      s>   ,	zOrder.cancelFF)%__name__
__module____qualname__r~   __annotations__boolr   floatr
   r   r    r"   r#   r$   r   listr&   r'   r(   r)   rE   r*   r+   r,   r-   r.   classmethodr;   r0   rP   rR   r   rV   rD   r   r   r   r/   r/   r/   r5   r      sJ   
 
8r   r   r   r   returnc                 C   s<   t ddd|dd|dd|  }|r|d S d S )Nrv   r   rH   r   r   r   )r   rL   rM   r0   )r   r   r   r[   r/   r/   r5   getOrderRef   s   ,r   ForderrG   c                 C   sH  | j | j| j}}}t|||}t }dd |D | _dd |D | _tdd |D | _	g }	| j
r7dg}	| jr=dg}	| j	rCdg}	|r|s|j}
t| }|j|j
}}|s\|r_| jS t| j| j
| j|	d	}||j| td
dd|
 }|D ]	}||j| qn|r|rt| }|j|j
}}|s|r| jS |j}
|
| _|D ]'}|
|_|
 |j |_||d |_|jtd|j | | d qdd |D | _dd |D | _tdd |D | _	| j
rdg}	| jrdg}	| j	rdg}	|	| _|r| j| _|j|j|  | d ntd|  \}}|j| _|D ]*}| j|_||d |_| j |j }||_|jtd| | dd q,dd |D | _dd |D | _tdd |D | _	tdd |D | _| j
rdg}	| jrdg}	| j	rdg}	|	| _|j||  dd |   |jS )Nc                 S   rc   r/   r?   r   r/   r/   r5   rJ      rh   zsaveOrder.<locals>.<listcomp>c                 S   rc   r/   	productIdr   r/   r/   r5   rJ      rh   c                 s       | ]}|j V  qd S rQ   r   rf   r/   r/   r5   	<genexpr>       zsaveOrder.<locals>.<genexpr>r   r   r   )r   r   	updatedAtr.   rG   r<   rH      ru   rW   c                 S   rc   r/   r?   r   r/   r/   r5   rJ      rh   c                 S   rc   r/   r   r   r/   r/   r5   rJ      rh   c                 s   r   rQ   r   rf   r/   r/   r5   r      r   rv   Tc                 S   rc   r/   r?   r   r/   r/   r5   rJ      rh   c                 S   rc   r/   r   r   r/   r/   r5   rJ      rh   c                 s   r   rQ   r   rf   r/   r/   r5   r      r   c                 s   r   rQ   )r-   rf   r/   r/   r5   r      r   )!r   r   r   r   r   rw   r&   r(   anyr   r   r   r>   r   r;   rB   rE   r   rD   rC   rL   rM   r0   r<   re   indexrY   r@   r.   r'   addr-   r   )r   rG   rS   rT   r   r   r   r[   rw   r.   r<   oldOrder
wasShippedwasCancelledrD   orderItemRefsrg   r   _orderItemIdr/   r/   r5   rU      s~   &$rU   r   r<   c              	   C   s   t d|  ddd| }t  }|D ]7}t d|  d|j ddd| }|D ]}||jtd	t	d
 q.||jtt
dd |D d q|  d S )Nzenterprises/z/batchesorderIdsarray_containsz	/batches/z/batchItemsr<   rH   T)	fulfilledfulfilledAtc                 S   rc   r/   r?   rf   r/   r/   r5   rJ      rh   z%fulfillBatchItems.<locals>.<listcomp>)fulfilledItems)r   rL   rM   r0   rw   r>   rD   rC   rE   r   r   r   )r   r<   batches
batchWriterw   
batchItems	batchItemr/   r/   r5   r      s    (



r   c                 C   s<   t ddd|dd|  }|rt|d  S d S )Nrv   r   rH   r   r   )r   rL   rM   r0   r   r;   rB   )r   r   r[   r/   r/   r5   findOrderByPlatformOrderId   s   "r   r   )r7   dataclassesr   r   r   rx   configs.firebaser   r   r   r   functions.Binsr	   V2.functions.Address.mainr
   V2.functions.mainr   r   V2.functions.Orders.OrderItemr   V2.functions.Printify.Authr   V2.functions.Shipments.mainr   r   r~   r   r   rU   r   r   r/   r/   r/   r5   <module>   s$    C