o
    Q?h                     @   s
  d dl Z d dlmZ d dlZd dlmZm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 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mZmZ d dlmZ d dlm Z m!Z! de fddZ"de!fddZ#de fddZ$de fddZ%de fddZ&dJddZ'de(fddZ)di fd e*d!efd"d#Z+d$d% Z,d&d' Z-d(d) Z.d d*i fd+e*fd,d-Z/dKd.d/Z0d0d1 Z1d2d3 Z2d4d5 Z3d6d5 Z3d7d8 Z4d dl5Z5d d9l6m7Z7 d:e(d;ed<ed=e*fd>d?Z8d@dA Z9de fdBdCZ:dDdE Z;de fdFdGZ<de fdHdIZ=dS )L    N)datetime)SERVER_TIMESTAMPdb)getStripeCreds)convertOrderconvertOrderItem	saveOrder)getProductByIdgetProductVariant)Address)Image)Order)	OrderItem)ProductVariant)ShopgetPopupStore)	API_Error)ParamsPublicParamsparamsc              
   C   s8  | j d}| j d}t|d}|dt_tjj| }|d}|dkr4t	ddt
|d	|d
i d}|sHt	ddt
|d	td| }|js^t	ddt
|d	| }|d}|dsut	ddt
|d	|d}	t|d|	d|	d|	d|	d|	d|	dd}
d S )NcheckoutSessionId
enterpriseid	apiSecretpayment_statuspaidzPayment Failed.  )r   metadatacustomizationIdzCustomization Failed.stripeCheckoutscustomer_detailsaddresszAddress not found.nameline1line2postal_codestatecountry)r#   address1address2zipr'   r(   countryCode)argsgetr   stripeapi_keycheckoutSessionretrieveto_dictr   dictr   
collectiondocumentexistsr   )r   r   r   stripeCredscheckoutSessionpaymentStatusr   customizationDetailscustomerDetailsr"   shippingAddresss r?   M/var/www/html/riverr-enterprise-integrations-main/V2/functions/Stripe/main.pycompleteCheckoutSession   sJ   




rA   c                 C   s  | j d}| j d}| j di }| j}| j}|d}td}|dt_g }ttt	
  }	|D ]_}
|
d|
d}}|D ]O}|d	}|d
}|d}dd |di D }|d}tjj| d| d| |t| j ddt|d dt|	dtddgddd}|| qEq6tjjjdd |D dd| d d| d  d!did" }td#|	td'i | ||| |	|dd$ t|d%d&S )(NproductsshippingAddressshippingRater   cfbZh6XFBG3usCcUwpREr   product
variationscolorsizepricec                 S      g | ]}| d qS urlr.   .0vr?   r?   r@   
<listcomp>N       z$stripeCustomizer.<locals>.<listcomp>imagesr#   z --currencyUSDd   )rV   unit_amount)r   USCA)allowed_countriesT)r#   rT   default_price_datar   shipping_address_collection	shippablec                 S   s   g | ]
}| d ddqS )default_price   )rJ   quantityrN   )rP   pr?   r?   r@   rR   e   s    paymenthttps://z9/checkout-success?checkoutSessionId={CHECKOUT_SESSION_ID}z9/checkout-failure?checkoutSessionId={CHECKOUT_SESSION_ID}enabled)
line_itemsmodesuccess_url
cancel_urlautomatic_taxr    )rD   rC   sessionr   	sessionIdrM   )checkout_urlr?   )r-   r.   hostnamer   r   r/   r0   strintr   now	timestampr   creater5   appendr1   r2   r4   r   r6   r7   set)r   rB   rC   rD   ro   r   enterpriseIdr9   createdProductsr   rc   rF   rG   	variationrH   rI   rJ   rT   r#   createdProductcheckout_sessionr?   r?   r@   stripeCustomizer=   s|   




	

r|   c                 C   sz   t d| j }|jr;| }|d}|r1t| }|r1t|dd t	
|D ddS t|d| jdS d S )	Nr    orderIdc                 S      g | ]}|  qS r?   r4   )rP   itemr?   r?   r@   rR          z&getCheckoutSession.<locals>.<listcomp>	completed)order
orderItemsstatusr   )r   r   )r   r6   r7   r   r.   r8   r4   r   r5   r   getByOrderId)r   refrl   r}   r   r?   r?   r@   getCheckoutSession   s    
r   c                 C   s  | j d}| j di }| j di }t|ddd }| j}td}|dt_|d	}|d
v r?|dt_|d}t|}d}	|D ]P}
|
d|
d|
d}}}|
d}d}|r|
d}t	d|  
 }|r|dd }|d}n
t||}|d}|	t|| d 7 }	qGtjjjd|d|d|d|d|dddd|	ddd d!g|dd"d#d$gd%}t|d&}|	| | }ttt  }t|j}tjj|| j d'd(d)g||d*}tt|d d+t|d d+t|d d+t|	d d+d,}td-	|dtd2|dd.|||j|j|j||t t |||dd/| td2|d0||d|dd1|S )3NrB   rD   rC   costr   rX   rE   r   apiKeyzspstore.mycart.mezchristmas.mycart.meapiSecretTest
apiKeyTestr   rb   	variantId
customizedr   popupStoreCartPlacements/rG   rJ   usdr$   cityr'   r+   r(   )r$   r   r'   r&   r(   shipping)r"   address_sourcedecorated_tshirt	exclusivetxcd_99999999)amount	referencetax_behaviortax_codetxcd_92010001)r   r   r   rg   )rV   r!   rg   shipping_costexpandtax_amount_exclusiverV   rW   card)r   rV   payment_method_typeson_behalf_oftransfer_group   )taxshippingCost	totalCostsubtotalr    pending)r   r   ro   rB   uidrw   shopIdrC   rD   	createdAt	updatedAttransferGroupIdconnectAccountIdpaymentIntentIdclient_secret)clientSecretpublishableKeyr   r   r?   )r-   r.   rq   ro   r   r/   r0   r   r   r7   r4   r
   r   Calculationrt   rp   r   rr   rs   getConnectAccountIdr   PaymentIntentr5   roundr6   rv   rw   r   )r   rB   rD   rC   r   ro   r9   r   shopr   rc   r   rb   r   r   rJ   r   r<   ry   varianttaxCalculationr   totalr   r   payment_intentamountsr?   r?   r@   PopupStoreCheckout   s   

"




2	
r   c              	   C   s   dd l }d|_| jjs:|jjdddiddidddid	did
diddddddiid}|d}| jj|d n|j| jj}|d}|j	j|d| j
 d| j
 dd}t|S )Nr    sk_live_rQt2VpSDVdmNs8Ayf8YwUWMcrZ   	requestedT)card_payments	transferspayerapplicationpaymentstypeexpress)feeslossesstripe_dashboardpayoutsscheduleweeklysundayintervalweekly_anchor)r(   capabilities
controllersettingsr   )r   re   account_onboarding)accountrefresh_url
return_urlr   )r/   r0   currentUserr   Accountrt   r.   updater3   AccountLinkro   r5   )r   r/   r   	accountId
login_linkr?   r?   r@   createConnectAccountp  s8   




r   Fc                 C   s   | j }| jd}d}|rd}z
tj|||}W n+ ty.   tddi ddidf Y S  tjj	yD   tddi ddidf Y S w |d d	krZ|d
 d }|d}t
|S ddidfS )z\
    Stripe Webhook to handle events and complete an order after payment is successful.
    zStripe-Signature&whsec_cvfaN7T65hpn2OTpwGiqj2HQ9zYlxHnc&whsec_TmxVNud1elMOZKUxHspJEb9jl0HXEsxjerrorzInvalid payloadr   zInvalid signaturer   zpayment_intent.succeededdataobjectr   messagezInvalid event type   )r   headersr.   r/   Webhookconstruct_event
ValueErrorprintr   SignatureVerificationErrorcompleteOrder)r   testpayload
sig_headerwebhookSecreteventintentr   r?   r?   r@   stripeConnectWebhook  s.   
r   r   c                 C   s8   t d|  }|jr| }|d}|r|S dS )z>
    Function to get the connected account ID for a user.
    usersr   Nr   r6   r7   r.   r8   r4   )r   user	user_datar   r?   r?   r@   r     s   
r   placementsDatar   c                    s  |}t |d}d}||i d  sd ||i di }g }d}| D ](\}}| D ]\}}|t d.|d||d|dd	d
 |i q8q0g }||i di }| D ](\}}| D ]\}}|t d.|d|d|d|dd |i qqqi||i 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 }|	s|
dr|
dn|
d}	tt  }t	d.i d|j
ddd|jd|d|d|jdddt dt d| d |d!|d"|d#dd$|d%|d&t d'd|d(d)d*d+t ||	|d,d |D d- }}|S )/NplacementDetailsblankProductIdvariantTyperH   canvasImagesr   rM   r#   printing)r   	placementrM   r#   r   previewImagespreview)r   rM   r#   r   r   c                    $   g | ]}|    kr|qS r?   rN   rP   ir   ry   r?   r@   rR        $ z*convertCustomizerItems.<locals>.<listcomp>r   c                       g | ]}|  d kr|qS defaultrN   r  r   r?   r@   rR         c                    r  r?   rN   r  r  r?   r@   rR     r  c                    r  r  rN   r  r
  r?   r@   rR     r  blankVariantIdr   
platformId13rw   platformOrderItemIdplatformOrderIdr   	cancelledFr   r   platformProductIdrJ   rb   shippedr   rT   productMappingTrF   decorationType)printOnDemandignoredr  variantMappingc                 S   rK   )r   rN   r  r?   r?   r@   rR     rS   )r   r  rT   
placementsr?   )r5   r.   itemsru   lenrp   r   rr   rs   r   r   rw   r   )r#   r  	productIdr   ry   rb   rJ   r   r   r  r   r   r   r   r   printImagesrH   keycanvasImager   
printImage
mockImagesr   placementPreviewsimgthisItemPrintImagesthisItemMockImagesr  convertedOrderItemr?   r  r@   convertCustomizerItems  s   

	
r'  c                  C   s  t d| }| }|jr| }|dg }|d}|s#dS |d|d|d}}}ttt	 
 }ttdd	}	t|}
td
}|d}|d}|ddv rj|d}|d}t|d|d|d|d|d|d|d|dd}g }d}|d|d|d|df\}}}}|D ]}|d}t d|   }|r|d }|d!d }|d"|d#|d"}}}td$| t|d||||||d%||
|d"d&
}nmt|| }tdHi d|d|d'||d(|d)|d*|
jd|
jd|dd+|d,r:t|d,d d-d. nd d%|d%d|d%| d/dd0|d%| ddd1|d2|d#|d3|}||d0d7 }|| qtdHi d|d|d(|d*|
jd|
jd4d5d6d5d7d8d9d5d:dd;|d<|d|d=|d| d>|
jd?|	d@|dAt	 dBt	 }|rt||}|tdC||	t	 dD dE| dFfS dGS )INr    rB   rC   )zNo shipping addressr   r   rw   r   i  i'  rE   r   r   ro   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   rF   rG   r   rb   
CUSTOMIZEDrJ   )
r#   r  r  r   ry   rb   rJ   r   r   r  r  r  r  r  imagerT   rM   rL   discountr   r   r  r   r  Fr  currencyCoderW   drafttotalDiscount
totalPricetotalTax
grandTotalshopNameorderNumberr   r   r   r   )r   r}   r2  completedAtzOrder Created - r   )zSession not foundr   r?   )r   r6   r7   r.   r8   r4   rp   rq   r   rr   rs   randomrandintr   r   r   r   r'  r   r   indexr  r   r   ru   r   r#   r   r   r5   ) r   r   stripeCheckoutrB   rC   r   rw   r   r  r2  r   r9   r   r   convertedOrderItemsr.  r   r   r   r   rc   r   r<   rF   ry   r  rb   r   r&  r   convertedOrderr}   r?   r?   r@   r   
  s8  













"
	

(r   c                 C   s8   t d|  }|jr| }|d}|r|S dS ),
    Get Stripe Account ID from user ID
    r   r   Nr   )r   r   stripeAccountIdr?   r?   r@   getUserConnectAccountId  s   
r<  c                 C   sV   t d|  }|d}t d| }|jr)| }|d}|r)|S dS )r:  enterprisesr   r   r   Nr   )rw   r   r   r   r;  r?   r?   r@   getAdminConnectAccountId  s   

r>  creditr   c              	   C   sT   t tt  }td| }td|| |t t |d|}|| |S )NzstripeConnectTransactions/)r   r   r   r   r   r   r?   )	rp   rq   r   rr   rs   r   r7   r5   rv   )r   r   r   r   transactionIdr   transactionr?   r?   r@   saveConnectTransaction  s   
	rB  c                 C   s   t d|   }|jr9| }|dd}|jt|dkr(tt	|| dntt	|| dt
 d d S |jtt
 t
 |dkrI|ndd d S )NstripeConnectAccounts/balancer   r?  r   )rD  r   )r   r   rD  )r   r7   r.   r8   r4   r   r   r5   r   floatr   rr   rv   )r   r   r   	walletRefwalletrD  r?   r?   r@   updateStripeConnectWallet  s&   rH  c                 C   s*   t d|   }|jr| }|S dS )r:  rC  N)r   r7   r.   r8   r4   )r   rF  rG  r?   r?   r@   getStripeConnectWallet  s
   rI  c                 C   sH   dd l }d|  d}i }d|i}|jd|||d}|jdkr"| S d S )Nr   z7https://riverr-enterprise-user.uc.r.appspot.com/orders/z/costzx-uidGET)r   r   r   )requestsrequeststatus_codejson)r}   r   rK  rM   r   r   responser?   r?   r@   getPopupStoreOrderCost  s   
rP  c              
   C   x   z t jj| ddgd|i|d}t jj|d|dd td| |W S  t jjy; } ztd|j W Y d }~d S d }~ww 	Nr   r   destination)r   rV   r   transfer_dataapplication_fee_amountzFulfiller fee transferr   rV   rS  descriptionzPaymentIntent created:zError:r/   r   rt   Transferr   r   StripeErroruser_messageamount_in_centsplatform_fee_centsstore_owner_accountfulfiller_accountfulfiller_fee_centsr   er?   r?   r@   create_payment_intent  ,   
rc  c              
   C   rQ  rR  rX  r\  r?   r?   r@   rc  E  rd  c              
   C   st   z| t _t jj|d|dd t jj|d|dd td W d S  t jjy9 } ztd|j W Y d }~d S d }~ww )Nr   zStore owner's paymentrV  zFulfiller's paymentz"Payments distributed successfully!zError distributing payments:)r/   r0   rY  rt   r   r   rZ  r[  )r   store_owner_amountr_  fulfiller_amountr`  rb  r?   r?   r@   distribute_paymentsg  s&   rg  )Applicationr   fromAddress	toAddressparcelc           	         sX  g }z| t _t|j|j|j|j|j|j|j	|j
d}t|j|j|j|j|j|j|j	|j
r/|j
n|dd}t|d|d|d|dd}t jj|||td	d
dt jjt jjdd|dd|dddgddddddd dd	d}|d}|stddddi  fdd |D W S  ty } zd!d l}| }tt|dd }~ww )"N)r#   street1street2r'   r   r+   r(   phonern  )r#   rl  rm  r   r'   r+   r(   rn  lengthwidthheightweight)ro  rp  rq  rr  4x6)
label_size0Clothing1ra   r(   610910)rW  rb   rr  valueorigin_countryhs_tariff_numberzNOEEI 30.37(a)merchandisenonereturntrue )	customs_itemseel_pfccontents_typerestriction_typerestriction_commentsnon_delivery_optioncustoms_certifycustoms_signercontents_explanation)
to_addressfrom_addressrk  optionsaddress_validation_levelcustoms_inforateszNo rates availablei  GroundAdvantageGroundc                    s~   g | ];}| d dkrt| d  | d| d| d| d tt| dd| d| dd	d
| dd
qS )carrierUSPSr   servicecarrier_account_idrater   delivery_daysshipment_idEASYPOSTEasyPost)
r   r#   	carrierIdcarrierNamer   deliveryDays
shipmentIdr  platformName	serviceId)r.   r5   r   rE  )rP   r  	rateNamesr?   r@   rR     s     z$getEasypostRates.<locals>.<listcomp>r   )easypostr0   r5   r#   r)   r*   r'   r   r+   r(   rn  r.   Shipmentrt   CustomsInfoCustomsItemr   	Exception	traceback
format_excrp   )	r   ri  rj  rk  r  shipmentrb  r  tracer?   r  r@   getEasypostRates  s   





r  c                 C   s^   g }| D ](}|D ]#}|d |d v r+|d |d kr+i |d|d i}| |  nqq|S )Nr  r  r#   )ru   )r  r  updated_ratesr  optionr?   r?   r@   filtered_and_update_rate_names  s   
r  c                 C   s   | j j}t| jd}| jdd}| jdi }t|dd||dd|d	d
d}tjd| dd}tj|| j j	d}t
|j|||}td|d }	|	rkdd |	D }
t||
}|rkt|dS t|dS )NrC   rr     
dimensionsrq  r   ro     rp     )rq  rr  ro  rp  r  r   )r   )r   r=  popupStoreShippingOptionsc                 S   r~   r?   r   )rP   docr?   r?   r@   rR     r   z&fetchShippingRates.<locals>.<listcomp>)r  )r   rw   r   	from_dictr-   r.   r5   rh  getDefaultAddressr   r  r   r   r6   r7   r  )r   rw   rC   rr  r  rk  appri  r  popupStoreShippingOptionsRefr  r  r?   r?   r@   fetchShippingRates  s6   




r  c                 C   s   t d|   }d S )NzshopsCredentials/)r   r7   r.   )r   r   r?   r?   r@   getPopupStoreOrderNumber  s   r  c                 C   sD   | j }|j}t|}|dd}g |dddddddddd	S )
NrD  r   r   )r   rV   )	availabler   r   mondayr   )r   rD  next_payout_date)r   r   rI  r.   )r   r   r   rG  rD  r?   r?   r@   
getPayouts  s   r  c                    s   | j dd| j dd| j d }}| jd| jd}}| j}t|}|j}ttt	 
 } d| }	 d}
td	| t||| |	||tt||
d
}t|	 fdd|D |dS )NrF   productDetailsrG   r   r   rw   r   r   r   )r   r   rG   rF   parentProductIdrw   r   r   r   r   r   c              	      s4   g | ]}t |d |d  d|ddqS )r   r#   rJ   )r   skur#   rJ   )r5   r.   rO   rF   r?   r@   rR   O  s    
z&popStoreCustomizer.<locals>.<listcomp>)r  variantsr   )r-   r.   r   ro   r   r   rp   rq   r   rr   rs   r   r7   rv   r5   r   )r   rG   r   r   rw   ro   r   r   r   r  r   r   r?   r  r@   popStoreCustomizer1  sB   



r  )F)r?  )>r4  r   r/   configs.firebaser   r   functions.Invoicesr   functions.Ordersr   r   r   functions.Productsr	   r
   V2.functions.Address.mainr   V2.functions.Images.mainr   V2.functions.Orders.mainr   V2.functions.Orders.OrderItemr   V2.functions.Products.mainr   r   V2.functions.Shops.mainr   r   V2.middlewares.authr   	V2.Paramsr   r   rA   r|   r   r   r   r   rp   r   r5   r'  r   r<  r>  rB  rH  rI  rP  rc  rg  r  V2.functions.Applications.mainrh  r  r  r  r  r  r  r?   r?   r?   r@   <module>   sh    ) 	 
%J -
.""
[!