o
    Q?h                     @   sF  d dl Z d dlZd dlmZ d dlZd dlmZ d dlmZmZm	Z	 d dl
mZ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mZ d d	lmZmZmZ d d
lmZ d dlmZ d dl m!Z! i fddZ"de#fddZ$de#fddZ%dd Z&de#fddZ'de#fddZ(d$defddZ)de#de#defd d!Z*i fd"d#Z+dS )%    N)datetime)
PROJECT_ID)SERVER_TIMESTAMP	Incrementdb)ordersLastUpdatedsaveOrdersLastUpdated)convertOrderconvertOrderItemconvertShippingAddress	saveOrder)	API_Error	saveError)
apiVersioncreateHeader)getShopByIdgetShops
updateShop)saveWebhook)Shop)Paramsc                 C   sF   |  d}|stddd}dd |D }t|S t|d}tt|S )NshopId2T)
platformIdcredentialsc                 S   s   g | ]}| d st|qS disabled)getupdateShopOrders).0shop r!   M/var/www/html/riverr-enterprise-integrations-main/functions/Shopify/Orders.py
<listcomp>       z#updateAllOrders.<locals>.<listcomp>)r   r   strr   r   )paramsr   shopsresr    r!   r!   r"   updateAllOrders   s   

r)   r    c           (         s|  | r|  d	|  d|  d|  d}|  d|  d}t|}t}| dt d}tt  }t| d		 }zQt
j ||t|d
dddd}|jdkr| dddkrftdd tdg g | d	dtdd t|j | W S t
j ||t|d
dddd}	t
j ||t|d
dddd}
g }g }|	jdkr||	  d |
jdkr||
  d d }|jdkr||  dg  |j d}|r<|d}|r<|r<t|dk r<|dddd}t
j ||d }|jdkr| }|| dg  |j d}|d}nt|j t	d!|jt||d"d# n|r<|r<t|dk s|D ]g  d$i } d%}g }|d&v r]|  d' d(}|| g }|r] d)g }td{i d	dd*dd+t| d'| d,| d-| d.| d/| d0| d1 d2 d3| d4dd5
d6t d7d8 d9d:kd;t d<d=t d>d? d@dA ddB dCdD dEi  dFi  dGddH dIdJ dCdK dLdMt dNdO|  d'dPt|dQdRdS |D dT}dUdV |D i i  i i }r  D ]\}| dW}|rt!"dX#|  $ }|r|< ||< | dY}|dZkrd[}| d\}| d]} %d^dV |D  t&fd_d`|D d t&fdad`|D d 
t&
fdbd`|D d }tdc| dd d'| dd dde| dd d| dd ddfg} tt|| dgdhdS | D dit| djdk}!|!< q4t'|t()| }q4dg}"g dl|  dmdnv r7|D ]0}#|# dovr|# d t|# dpdqkr|dr |# dsr%|# d qt*fdtd`|D }$|$s7d}"|"r<q>t|dkrU 	f
dudS|D }|t+|| q>dvdS |D }%dwdS |	  dD }&tt||%|&|dgdd nt	d!|jt||d"d# dxt| W S  t,y }' zt-.  t	d!t|'t|dyd# W Y d }'~'dzS d }'~'ww dzS )|Nuididr   accessTokenenterpriseIdurl/admin/api/z/orders.json	timestampanypaid   )created_at_minstatusfinancial_statuslimitheadersr&      	failCountr      Tr      )r   countorderIdscancelledOrdersr0   failedr;   refunded
authorizedordersLinkz
rel="next"i  < z>; rel="next"r9   zShopify/Orders/updateShopOrders)r   
lastUpdateupdated_at_mindatashipping_addresssource_name491917923293124555605name	 - tiktok
line_itemsr   shippingAddressaddress1address2cityprovincezipcountryemailphonecompany
rS   rW   rX   rY   stater[   r\   r]   r^   r_   	cancelledcancelled_atshippedfulfillment_status	fulfilled	createdAt
created_at	updatedAt
updated_atcurrencyCodecurrencyplatformOrderId
grandTotaltotal_priceshippingCosttotal_shipping_price_set
shop_moneyamounttotalDiscounttotal_discounts
totalPricetotalTax	total_taxorderNumberorder_numbershopNamemetadataz, c                 S   s    g | ]}| d r| d qS vendorr   r   itemr!   r!   r"   r#      s     z$updateShopOrders.<locals>.<listcomp>)tagsr~   c                 S   .   i | ]}t |d dd |dg D qS )r+   c                 S      i | ]}| d | dqS rS   valuer   r   propr!   r!   r"   
<dictcomp>   r$   z/updateShopOrders.<locals>.<dictcomp>.<dictcomp>
propertiesr%   r   r   r!   r!   r"   r         . z$updateShopOrders.<locals>.<dictcomp>_placementsDocumentIdshopifyCartPlacementstypenester7DUPlJbSmyNByC5syiEj
variationsvariantsc                 S   s   i | ]
}t |d dqS )platformVariantId7DUPlJbSmyNByC5syiEj0r   )r   variantr!   r!   r"   r      s    c                 3   s0    | ]}t |d  krt |dV  qdS )r+   
variant_idNr   r   v)keyr!   r"   	<genexpr>      . z#updateShopOrders.<locals>.<genexpr>c                 3   s&    | ]}t |d  kr|V  qdS r   Nr   r   	variantIdr!   r"   r      s   $ c                 3   s(    | ]}| d   d kr|V  qdS varIdNr   r   r   r!   r"   r      s   & 1fileprinting)	placementrS   r.   r   r*   r+   Fc                 S      g | ]}| d qS r   r   r   ir!   r!   r"   r#          mappedparentProductId)r+   blankProductIdimagesignored
placementsr   	productId)MSPxyz999MSSplatformShopId)6001062723966592309433r~   
product_id4683530141765zSkip the linetip_payment_gatewayc                 3   s    | ]
}| d  v V  qdS )r~   Nr   r   )vendorsr!   r"   r      s    c                    s  g | ]}t d'i d ddd|dddddtdd	td
dtdd|dd|dd|dd|ddddkd|ddt|di dt|di r t|drtddt|ddndddd |d g D d!t|dr͈ t|drtd'd" t|di	t|di ni d#|dv d$t|d%d&qS )(r*   r   r-   platformOrderItemIdr+   rm   r   rb   rc   rg   rh   ri   rj   rS   platformProductIdr   pricequantityrd   re   rf   r   r   placementsDataproductMappingTFprintOnDemandr   decorationTypeNvariantPropertiesc                 S   $   g | ]}t |d |ddqS rS   r   r   dictr   r   pr!   r!   r"   r#          z/updateShopOrders.<locals>.<listcomp>.<listcomp>r   variantMappingblankVariantIdr   r|   r~   r}   r!   r
   r   boolr   fromisoformatr%   r   r   )
blankVariantsdecorationMethodsr-   ignoredItemsorderr   propsr   r*   variantMappingsr!   r"   r#      sr     

	






^c                 S   r   r+   r   r   r   r!   r!   r"   r#     r   c                 S   r   r   r   r   r!   r!   r"   r#     r   Orders updated => )r   rI   z
No Updatesr!   )/r   r   r   r   intr   nowr0   fromtimestamp	isoformatrequestsr   status_coder   r   r   printtextjsonextendr9   endswithlenreplacer   appendr	   r   r   r   r%   joinitemsr   
collectiondocumentto_dictupdatenextconvertCustomizerItemsr   	from_dictr1   r   	Exception	traceback	print_exc)(r    r,   r.   r9   rI   	ordersUrlnowTimestamprJ   r(   cancelledOrdersRequestauthorizedOrdersRequestrD   updatesendpointrE   nextPagerequestrL   rM   rN   r   convertedOrderItemsr   convertededOrderr   r   r   	orderTyper   r   r   	variationr   r   orderIgnoredr   anyMSPr?   r@   er!   )r   r   r-   r   r   r   r   r   r   r*   r   r   r   r   r"   r      s  







	














#






! 

* "
r   rL   c                 C   s   |  d}t|dS )Nkind)r  )r   r   )rL   r  r!   r!   r"   fulfillmentRequest  s   

r  c                 C   sP   |  d dt d}t|  d}tj ||tddd}t|j|j|j d S )Nr.   r/   z!/assigned_fulfillment_orders.jsonr,   fulfillment_requested)assignment_statusr8   )	r   r   r   r   r   r   r.   r   r   )r    r.   r9   r(   r!   r!   r"   getAssignedOrders!  s   
r
  c              
   C   s  |  d}|  d}| d}t|d}| d}| d}t|}| dt d}tttd	d
t d| dddd}	tj	|||	|	d}
|
j
dkro|
  d}	t|||	 d|	 d|	 d|	 dttd |
 S t|
  t|d|
jt|dd d S )Nr   currentUserr*   Tr,   r.   r/   z/webhooks.jsonzorders/editedz+https://riverr-enterprise-integrations-dot-z#.uc.r.appspot.com/shopify/webhooks/z/ordersr   )topicaddressformat)webhook)r9   rL   r      r  r+   r  r  )r  rg   ri   zShopify/Orders/orderWebhook)r   rK   )r   r   r   r   r   dumpsr   r   r   postr   r   r   r   r   r   )rL   r   r  r*   r    r,   r.   r9   webhooksUrlr  r(   r!   r!   r"   orderWebhook(  s<   






r  c           
         sh  |  d|  d d}td}| d| d| d t| d}tj | d	 d
t d| d|d}|jdkr,|  d di } ddv ra| d dtdCi dddd dt| d| d| d| d| d| d| d d d| dd d!
d"t	 d#d$ d%d&kd't
 d(d)t
 d*d+ d,d- dd. d/d0 d1i  d2i  d3d4d5 d6d7 d/d8 d9d:t d;d<tgd=d>| d} d?g } d@g } fdAdB|D }	t||	d}|S t|  S )DN
order_editr+   order_idTr*   r   r-   r,   r.   r/   /orders/.jsonrH   r:   r   rM   rN   rO   rS   rT   r   rV   rW   rX   rY   rZ   r[   r\   r]   r^   r_   rG   r`   rb   rc   rd   re   rf   rg   rh   ri   rj   rk   rl   rm   rn   ro   rp   rq   rr   rs   r   rt   ru   rv   rw   rx   ry   rz   r|   r   r{   rU   r   c                    s   g | ]r}t di d dd d|dddddtdd	td
dtdd|dd|dd|dd|dd|ddkd|dddd |dg D dtgdqS )r*   r   r-   r   r+   rm   r   rb   rc   rg   rh   ri   rj   rS   r   r   r   r   rd   re   rf   r   r   r   c                 S   r   r   r   r   r!   r!   r"   r#     r   z1ordersWebhookEvent.<locals>.<listcomp>.<listcomp>r   r|   r  r!   )r
   r   r   r   r   r   r   r-   r+   r   r   rN   r*   r!   r"   r#   }  sR    

	






z&ordersWebhookEvent.<locals>.<listcomp>r!   )r   r   r   r   r   r   r   r	   r   r   r   r   r%   r   r   r   )
rL   orderIdr    r9   r(   rM   r   r   r   r   r!   r  r"   ordersWebhookEventI  s   






&








 "r  Fc                    s  | j | j| j| j}| j| j}t|}| dt d| d}tj	||d}|j
dkr_| 	d	di }	dd	v rJ| j d
|rZtdCi dddddt|	d|	d|	d|	d|	d|	d|	d	d	d|	ddd
dt	dd	dd kd!t	d"d#t	d$d%	d&d'	d(d)	d*d+	d,i 	d-i 	d.d/d0	d1d2	d*d3	d4d5t	d6d7| jd8tgd9}		d:g }
d;d< |
D i 	i  i g }r<i } D ] \}}|	d=}|r1td>|	  }|r1|||< q|r<t|| }t|sS 	f
d?d@|
D }t|	|dA| dB| S t|jj|j|j
 d S )DNr/   r  r  rH   r:   r   rM   rN   rO   rT   r*   r   r   r-   rV   rS   rW   rX   rY   rZ   r[   r\   r]   r^   r_   rG   r`   rb   rc   rd   re   rf   rg   rh   ri   rj   rk   rl   rm   r+   rn   ro   rp   rq   rr   rs   r   rt   ru   rv   rw   rx   ry   rz   r{   r|   r  rU   c                 S   r   )r+   c                 S   r   r   r   r   r!   r!   r"   r     r$   z0updateSingleOrder.<locals>.<dictcomp>.<dictcomp>r   r   r   r!   r!   r"   r     r   z%updateSingleOrder.<locals>.<dictcomp>r   r   c                    s  g | ]}t d%i d ddd|dddddtdd	td
dtdd|dd|dd|dd|dd|ddkd|ddt|di dt|di r t|drtddt|ddnddt|drÈ t|drtd% t|dg g d	t|di ni dd d! |d"g D d#tgd$qS )&r*   r   r-   r   r+   rm   r   rb   rc   rg   rh   ri   rj   rS   r   r   r   r   rd   re   rf   r   r   r   r   TFr   Nr   )r   r   r   r   c                 S   r   r   r   r   r!   r!   r"   r#     r   z0updateSingleOrder.<locals>.<listcomp>.<listcomp>r   r|   r  r!   r   r   
r   r   r-   r   r   r   r   rN   r*   r   r!   r"   r#     s    %

	






"z%updateSingleOrder.<locals>.<listcomp>Tr   r!   )r*   r+   r   r,   r-   r.   r   r   r   r   r   r   rS   r	   r   r   r   r   r%   r   r   r   r   r   r   r   r   r   r   r   r   )r    rm   readdr,   r.   r9   r   r(   rM   r   r   r   placementDocumentsr   r   r   rL   r!   r  r"   updateSingleOrder  s   







 

%'
r   r   r   c                    s  |  dg }g }|  d}|dv r|j d}|D ]}| t| d}|s,g   S t| d}tt| d }	| |	i  dsJd	| |	i  d
i }
g }|
 D ](\}}| D ]\}}|tdA| d|| d| ddd|i qbqZg }| |	i  di }| D ](\}}| D ]\}}|tdA| d| d| d|dd|i qq| d}| d}| |	i  dd	| dtfdd|D d   sg   S t fdd|D d fdd|D }t	|dkrfdd|D }fdd|D }t	|dkr'fdd|D }  dr2  dn  d}t
dAi d|jdd d!|jd"| dd#|  dd$|jd%t|  d&d't|  d(d)t|  d*d| dd+| d,d-| d-d.| d.d/| d0d1kd2| dd3|d4d5d6td7d5| d8 d9d:d;t|	||d<d |D d=d | d>g D t|gd?d@}|| q|S )BNrU   rN   rO   rT   r+   placementDetailsr   variantTypecolorcanvasImagesr.   rS   r   )r+   r   r.   rS   r   previewImagespreview)r+   r.   rS   r   r   r   r   r   c                 3   s*    | ]}t |d t  kr|V  qdS r   r   r   r   r!   r"   r   :  s   ( z)convertCustomizerItems.<locals>.<genexpr>c                 3   s0    | ]}t |d t  d kr|V  qdS r   r   r   r   r!   r"   r   <  r   c                    $   g | ]}|    kr|qS r!   r   r   r"  r  r!   r"   r#   =     $ z*convertCustomizerItems.<locals>.<listcomp>c                       g | ]}|  d kr|qS defaultr   r   r"  r!   r"   r#   >  r$   c                    r'  r!   r   r   r(  r!   r"   r#   ?  r)  c                    r*  r+  r   r   r-  r!   r"   r#   @  r$   r   r*   r   r   r-   r   rm   r   rb   rc   rg   rh   ri   rj   r   r   r   r   rd   re   rf   r   r   rewriteImagesFr   Tproductr   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   r  )r   r   r   r   r   r|   r!   )r   rS   r%   r   listkeysr   r   r   r   r
   r*   r-   r+   r   r   r   )r   r   r    r   r   rN   r   rL   r!  r   r$  printImagesr   canvasImager   
printImage
mockImagesr%  placementPreviewsimgr   r   thisItemPrintImagesthisItemMockImagesr   convertedOrderItemr!   )r   r   r"  r  r"   r     s   




   

	






&r   c                 C   s   |  d}t| t|S )Nr    )r   r   r   )r&   r    r!   r!   r"   acceptPubsubRequests  s   
r;  )F),r   r   r   r   configs.envr   configs.firebaser   r   r   functions.LastUpdatedr   r   functions.Ordersr	   r
   r   r   functions.Responser   r   functions.Shopify.Authr   r   functions.Shopsr   r   r   functions.Webhooks.SaveWebhookr   V2.functions.Shops.mainr   	V2.Paramsr   r)   r   r   r  r
  r  r  r   r   r;  r!   r!   r!   r"   <module>   s2    
  !Vlh