o
    Q?hĠ                     @   s  d dl Z d dlmZmZ d dlZd dlZd dlmZmZ d dlm	Z	 d dl
mZmZ g dZde_defd	d
Zdd ZdPdedefddZdd Zdd Zdd ZdefddZdddddddddddddddddd d!dd"d#d$d%dd&dgdd'd(d)idd*d+d,d-i d.d/	gZd0gZdefd1d2Zdefd3d4Zd5d6 Zd7d8 Zd9d: Zdefd;d<Zdefd=d>Zd?d@ Z ddg g eeg ddddfdAdBZ!defdCdDZ"dEdF Z#defdGdHZ$dPdefdIdJZ%dKe&dLe'dMe&fdNdOZ(dS )Q    N)datetime	timedelta)SERVER_TIMESTAMPdb)	API_Error)getUserupdateUserTasks)H3VPShrDPIXOqRQdep6EnBp7zXZ2DboCIpJzyRheyl0lAOGjXkVgS482EFaAqAIzycYSjZIcIGINY4waB862BhBFqJmts0TIBB4be9IIOpX4coq2ghhifp7lQISmR5Ixie4WltcyJO43ad0WwLLxhAODJzg58kmBqA9ys4j1C231P1oJ20TjvQKpCxpkDRZJYpc2XiZwBRHZtmXeJREtBhLVQVdJm6f1tL328gQi1HMyTQ3Y0QuhvALmKGE2beSY66Q0qhPrRHVEI8voofYTVXD2r   UTFn1YJfY1cRufnyM5FNhd45ekn13d2ulpLKdFN6SWJepyc4KHAEStF2Gu6B9cWm13f4Zasy7bFxsorcrmA3SZKPqZdhkqcBbI0z3lo0ZJsELlg2xp1SNO97xNblzNm7FuDTsN2HYb83r   ZW62xDtX4ddJVJMaaUcrcmBZGkO2iVMheWpTx0hNr43wt9cYY09ussy22omMbm2OSHXOxGfgfJoRNjRsyDh1cVlvEpN6XYe0YTBQJNYzDKrvBFg2Vv40VRMA7ZfKUcUbgGkwy9K83M92PhDBWLh23xM4DKiMXmOs2mSf5L32z
2017-08-15paramsc                 C   s  |  d}| d| d| d| df\}}}}|  d}td|  }| d}|r3d	}|jr|r| }	|	 d
}
tdd|   }|jr| }| d}|t_t|
|}|sjt	t
|
|}|r| d}d}t||||d}z*tjj|t|	 dd d||d tjj|d||dd}ttj| d}W n ty } zt| tt|dd }~ww |jt| d| ddd| d|dtd t|j   dS tdd td!d td"d t|d#)$NcurrentUseruidenterpriseIddisplayNameisEnterpriseAdminidinvoices	isProUsercfbZh6XFBG3usCcUwpREuserIdpaymentPlatformsCredentialsSTRIPE	apiSecret
customerId )r    	invoiceIdr!   r"   	totalCostd   USDcustomeramountcurrencydescriptionmetadatasend_invoice   )r3   collection_methodr6   r7   days_until_due  hosted_invoice_urlStripeaccount_nameT)platformInvoiceId
paymentUrl
platformIdplatformNameplatformAccountNameplatformCustomerIdsentsentAtinvoicezCustomer not found.  Stripe API Keys not saved.Invoice not found.r$   )getr   
collectiondocumentexiststo_dictstripeapi_keygetCustomercreateCustomerr   dictInvoiceItemcreateintInvoicefinalize_invoice	Exceptionprintr   str	referenceupdater   )r   userr    r!   r"   r#   r$   
invoiceRefr&   rI   r(   stripeCredsapiKeyr3   r,   r6   r7   stripeInvoicee rh   G/var/www/html/riverr-enterprise-integrations-main/functions/Invoices.pysendInvoice+   s   










rj   c                 C   s6   t dd| d|  }|jr| S i S )Nr)   r*   	customersr   rO   rP   rN   rQ   rR   )r(   r!   refrh   rh   ri   rU   z   s   
rU   rb   rd   c           	      C   s   |  d|  d|  d|s|  dn|f\}}}}|  d}|  d}|s(|r)	 | dt_ttjjd||t||d	d
}t|| d| d| d| dtt|  d|d	}td	d| d	|j
|dd |S )Nr    emailr"   r!   r&   r#   r+   r-   r    r"   r6   namern   r7   r$   rq   r7   )	r$   r,   rq   rn   r7   	createdAt	updatedAtr!   r    r)   r*   rk   T)merge)rN   rS   rT   rW   CustomerrY   r   r   rO   rP   set)	rb   rd   r!   r    rn   rq   r&   r#   r3   rh   rh   ri   rV      sF   



rV   c                 C   s8   t d| dd }|jr| dS dS )NenterprisessettingsCURRENCYcoder1   rl   r!   rm   rh   rh   ri   getCurrency   s   r|   c              
   C   sP  |  d}| d| d}}| d}|rd}|r|  d}td|  }|jr| }| d}| d}	||kr| d	}
|
r|	rtd
d|   }|jr| dt_z
tjj	|
dd W n t
y} } z
t| W Y d }~nd }~ww d|d< t |d< d|d< |j| |S ntddtddt|dtdd)Nr   r!   r#   r&   r'   r$   r%   rF   r@   r)   r*   r+   T)paid_out_of_bandpaidpaidAtmarkedAsPaidzInvoice is not sent yet.r<   rL   rJ   rM   zAccess denied.i  )rN   r   rO   rP   rQ   rR   rS   rT   r[   payr]   r^   r   nowr`   ra   r   rW   )r   rb   r!   r#   r&   r$   rm   rI   invoiceEnterpriseIdrF   r.   credsrg   rh   rh   ri   
markAsPaid   sL   








r   c                 C   s  |  d}| d}| d}| d}|rd}|  d}td|  }| }| d}t||}	|r:d	}
nt|}
t| d
}| d
dv rNd S tdd|   }|	sat||}	|j	r| }|	 d}d| d d}t
| d|| d|d}d }z| dt_tjj|t| dd |
||d}| d}W n ty } zt| tt|dd }~ww |jt
ddd|dtdd t
|j   dS tdd )!Nr   r&   r    r#   r'   orderIdorderInvoicesr!   r1   r(   )r	   r   r   r   r)   r*   r,   zInvoice for order - platformOrderId.r"   )r    r!   r"   r   r+   r/   r0   r2   r$   r<   Tr>   F)dailyInvoicerB   rC   rE   rF   rG   invoicedrH   rK   rJ   )rN   r   rO   rP   rR   rU   r|   r   rV   rQ   rW   rS   rT   rX   rY   rZ   r]   r^   r   r_   r`   ra   r   )r   rb   r&   r    r#   r!   r   orderInvoiceReforderInvoicer3   r5   rd   r,   r6   r7   invoiceItemIdinvoiceItemrg   rh   rh   ri   createOrderInvoice   s|   










r   c           
   
   C   s0  |  d}| d}| d}| d| d}}|s|r d}tdd|   }|  d	}|jr| }| d
t_t||d}|sKt	||}z4| ddkrXt
|W S tjj| d| dd tjj| dt
| ddd t|dd |W S  ty }	 ztt|	dd }	~	ww tdd)Nr   r#   r&   r    r!   r'   r)   r*   paymentMethodr+   r!   typebankr$   r,   )r3   default_payment_methodinvoice_settingsT)billingCreatedr<   z)Can't save payment method, contact admin.)rN   r   rO   rP   rQ   rR   rS   rT   rU   rV   rW   PaymentMethodattachru   modifyr   r]   r   r_   )
r   r   r#   r&   r    r!   rd   r   r3   rg   rh   rh   ri   savePaymenMethod:  sH   







r   pm_1OVVbmKc34kmwhxFV0vgJxaBpayment_method12345)citycountryline1line2postal_codestate)addressrn   rq   phonevisapass)address_line1_checkaddress_postal_code_check	cvc_checkUS   i  NsK5ftM6E6VBsGUPcredit4242)	available	preferred	supportedT)brandchecksr   display_brand	exp_monthexp_yearfingerprintfundinggenerated_fromlast4networksthree_d_secure_usagewalletiecus_PK9nqrG8Bowg72Fcard)	r$   objectbilling_detailsr   createdr3   livemoder7   r   UJWIVJdFrEPSPq8w5xh5c           
   
   C   s   |  d}| d}| d}| d| d}}|s|r d}tdd|   }|  d	}|jrh| }| d
t_t||d}|sHd S ztj	
| tddW S  tyg }	 ztt|	dd }	~	ww tdd)Nr   r#   r&   r    r!   r'   r)   r*   paymentMethodIdr+   r   zPayment method deleted.)messager<   z+Can't delete payment method, contact admin.)rN   r   rO   rP   rQ   rR   rS   rT   rU   r   detachrW   r]   r   r_   )
r   r   r#   r&   r    r!   rd   r   r3   rg   rh   rh   ri   deletePaymentMethod  s,   




 
r   c              
   C   s  |  d}| dg }| d| d}}| d| d}}|s%|r'd}tdd	|   }|d
ks?d|v s?|tv rGtt| dS |jr| }| dt	_
t||d}|sbt|||}zt|||}	d }
zt	j| d d d}
W n ty } z
t| W Y d }~nd }~ww t	jj| ddd dg }|t	jj| ddd dg  |
r|D ]}| d|
k|d< q| ds| ddkrtt| d|	dW S t|| d|	dW S  ty } ztt|dd }~ww tdd)Nr   rolesr&   r#   r    r!   r'   r)   r*   R7UPQvH1cOUPPHcgOVtcaqRycAA3NO_PAYMENT_METHOD)paymentMethodsrd   r+   r   r,   r   r   r   )r3   r   dataus_bank_accountr$   defaulttestrn   zapprevtest1@shopify.comre   )r   rd   setupIntentr<   )Can't get payment methods, contact admin.)rN   r   rO   rP   BYPASS_PAYMENT_METHODrW   testPaymentMethodrR   rQ   rS   rT   rU   rV   createSetupIntentru   retriever]   r^   r   listextendr   r_   )r   r   r   r&   r#   r    r!   rd   r3   r   defaultPaymentMethodrg   r   r   rh   rh   ri   getPaymentMethods  s   




r   c                 C   s    t dd|   }| S )Nr)   r*   )r   rO   rP   rN   rR   r{   rh   rh   ri   getStripeCreds  s
   
r   c           	      C   s  |  d d}|  d d|  d d|  d}}}td}|dkr+d|d	< |r| d	t_t|d}|sBt|  d|}z.ttjj| d
dd|igt|||  d d|  d ddd}t	|||| |W S  t
y } ztt  tt|dd }~ww d S )Nr   r#   r    r!   r$   r'   zNAlxdaZG6hKf6vexv6ljqHyP8i1 sk_test_zhJQxkYHdbtF9EqZAw8l0HlPr+   r,      pricer"   rn   )r    r!   r"   rn   )r3   trial_period_daysitemsr7   r<   )rN   r   rS   rT   rU   rV   rW   SubscriptionrY   saveSubscriptionr]   r^   	traceback	print_excr   r_   )	r   r#   r    r!   r$   
stripCredsr3   subscriptionrg   rh   rh   ri   createSubscription  sJ   

r   c                 C   s   | d}t|d< t|d< | |d< ||d< td|| td|t||d td	| t||d |S )
Nr$   rr   rs   r    r!   subscriptionsrw   )subscriptionIdplanIdusers)rN   r   r   rO   rP   rv   ra   rW   )r    r!   r$   r   subIdrh   rh   ri   r     s&   
r   c              
   C   s   |r;| dt_t| |}ztjj| dt| |ddgd}|W S  ty: } ztt	
  tt|dd }~ww tdd)Nr+   r,   r    r!   r   )r3   r7   payment_method_typesr<   r   )rN   rS   rT   rU   SetupIntentrY   rW   r]   r^   r   r   r   r_   )r    r!   rd   r3   r   rg   rh   rh   ri   r   4  s&   

r   c                    sj  t  tdd }tdddddd| }td	d
 |D }|D ]\ }|dv r5td | q%t	|}t
|} tv rGtd  q%|sOtd  q%|dt_t |} fdd|D }t|d}	|rz't|d |	D ]}
|
D ]6}tjj|dt|dd |d|d t|d|ddd}|d|d< td|d q|tjj|ddt |dd}z|d}ttj|}tdd
 |
D }td d
 |
D }td!d
 |
D }td"d
 |
D }d#d |
D }d$d |
D }d%d |
D }td&d
 |
D }td?i d' d(|d)|d*|d|d+|d,|d-|d.|d/d0d1d0d2td3td4 d5|d6|d7d8|d9|d}|
D ]}td:|d t||dtd0|d; qVtd< | W qw ty } ztd= | W Y d }~qwd }~ww W q% ty } ztd> | t  W Y d }~q%d }~ww q%d S )@N
   daysr   r   ==Frr   >c                 s   s$    | ]}| d | dfV  qdS )r(   r!   NrN   .0orderrh   rh   ri   	<genexpr>P  s    
z%createDailyInvoice.<locals>.<genexpr>)4ARNc3YSVqBDEcHbXa0f60D7GFDlMFFd6IsK1e58BWhPnd7E0xk180M3Hpj7gSo3G298DNypOMvofnaRz$enterprise skipped for daily invoicezuser skipped for daily invoicezstripe creds not found forr+   c                    s&   g | ]}|  d  kr|  qS )r(   )rR   rN   r   docrb   rh   ri   
<listcomp>f  s
    z&createDailyInvoice.<locals>.<listcomp>   r,   r/   r0   zInvoice for Order: r   r$   )r   r   r2   platformInvoiceItemIdcharge_automaticallyr   )r3   r:   r7   c                 s       | ]}| d V  qdS )shippingCostNr   r   rh   rh   ri   r         

c                 s   r
  )printingCostNr   r   rh   rh   ri   r     r  c                 s   r
  )r/   Nr   r   rh   rh   ri   r     r  c                 s   r
  )poCostNr   r   rh   rh   ri   r         c                 S      g | ]}| d qS rM   r   r   rh   rh   ri   r        c                 S   r  )r   r   r   rh   rh   ri   r    s    
c                 S   r  )r  r   r   rh   rh   ri   r    s    c                 s   s&    | ]}| d r| d dV  qdS )discountr   Nr   r   rh   rh   ri   r     s    


r    r!   r  r  r  r  orderIdsplatformOrderIdsrF   Tr~   rG   r   r(   r@   rA   r=   platformInvoiceItemIdsrE   zorderInvoices/)r@   r  
invoicedAtr   r.   z Daily invoice created for user: z Error while finalizing invoice: z'Error while creating invoice for user: rh   ) r   r   r   r   rO   whererN   rv   r^   r|   r   DONT_CHARGE_USERSrS   rT   rU   pydashchunkclearUninvoicedItemsrX   rY   rZ   rW   r[   r\   sumsaveInvoicer   rP   ra   r]   r   r   )r   
twoDaysAgor   r   r!   r5   rd   r3   thisUserAllInvoicesgroupedInvoicesthisUserInvoicesr   r   rf   r@   r  r  r/   r  r  r  r  r  r.   rg   rh   r  ri   createDailyInvoiceH  s  









	


V\r"  c                 C   s   d }	 t jj| dd|r|nd d}|dg }|sd S |D ]6}zt j|d td|d W q tyS } ztd|d dt|  W Y d }~qd }~ww |d	ra|d
 d}nd S q)NTr0   )r3   pendinglimitstarting_afterr   r$   zcleared uninvoiced itemzError deleting invoice item z: has_more)rS   rX   r   rN   deleter^   r]   r_   )customer_idlast_item_idinvoice_itemsr   itemrg   rh   rh   ri   r    s,   
*
r  c                 K   s   t di d|d| d|d|d|d|d|d|d	|d
|d|d|	d|
d|d|d|d|d|d|d|d|d|d||}|r[td| | |S td|\}}|j}|t |d |S )Nr$   r    r!   r  r  r/   rr   rs   rF   rG   r~   r   r(   r  r  r  r  r@   rA   r  rE   r   transactionIdz	invoices/r%   rM   rh   )rW   r   rP   rv   rO   addr$   ra   )r    r!   r  r  r/   r  rF   rG   r~   r   r(   r  r@   rA   r  r  rr   rs   r  rE   r   r-  r$   kwargsrI   _rm   rh   rh   ri   r    sn   	
r  c           
   
   C   s   |  d d|  d d|  d d}}}|  d}|  d d}|s+|r-d}t|}|re| dt_t||}ztjj| d	t|d
d}| W S  t	yd }	 zt
t|	dd }	~	ww t
d)Nr   r    r!   r&   r   r#   r'   r+   r,   r   r   i  zStripe Creds not found.)rN   r   rS   rT   rU   ru   r   rW   rR   r]   r   r_   )
r   r    r!   r&   r   r#   rd   r3   resrg   rh   rh   ri   updatePaymentMethod&  s2   



r2  c              
   C   s  dd t dddt tdd dd	d
 D }t|dd }|	 D ]\}}|dv r2q)t
dd |D }td}t d|  }|d}|dt_t|d}	|	sctt||d}	d}
tjj|	dt|d dd|
 t||dd tjj|	ddd|
 t||dd}t|dd |D |||dt|
d }t d!|d | |D ]}t d"|d# td$|dd% qtd&| q)d S )'Nc                 S   s   g | ]}|  qS rh   )rR   r  rh   rh   ri   r    s    z'orderChargeInvoices.<locals>.<listcomp>orderChargesrr   z>=   r   r   r   Fc                 S   s
   |  dS )Nr!   r   )r   rh   rh   ri   <lambda>  s   
 z%orderChargeInvoices.<locals>.<lambda>)r'   r   c                 s   r
  )totalNr   r   rh   rh   ri   r     r  z&orderChargeInvoices.<locals>.<genexpr>r'   zenterprises/r    r+   zOrder Charges for last weekr,   r0   r1   z
Invoice : )r!   adminr2   r	  zInvoice )r3   r:   r6   r7   c                 S   r  )r   r   r   rh   rh   ri   r    r  r$   )r6  r  r!   r    r$   rr   r6   zorderChargesInvoices/zorderCharges/r   T)r   r.   z.Order Charges Invoice created for enterprise: )r   rO   r  r   r   r   rN   r  group_byr   r  r   rP   rS   rT   rU   rV   r   rX   rY   rZ   rW   r[   r   rv   ra   r^   )r   	Allordersrw   r!   ordersr6  rd   
enterpriser7  r3   invoiceTitlerf   rI   r   rh   rh   ri   orderChargeInvoices  sp   





		r=  c           
   
   C   s   |  d}| d| d}}| d| d}}|s|r!d}t|}|s,tdd|  d	}| d
t_ztjj|ddddddddid}||jdW S  tyi }	 zt	t
  tt|	dd }	~	ww )Nr   r    r!   r&   r#   r'   zStripe API Keys not found.rJ   
account_idr+   payoutsT)instant_payoutsstandard_payoutsedit_payout_scheduleexternal_account_collection)enabledfeatures)account
components)accountSessionclient_secretr<   )rN   r   r   rS   rT   AccountSessionrY   rI  r]   r^   r   r   r_   )
r   r   r    r!   r&   r#   rd   r>  account_sessionrg   rh   rh   ri   createStripeAccountSession  sB   


rL  c              
   K   sT   | d| d| d}}}|  dt_ttjj|d||t||dd}|S )Nr    rn   r"   r+   r-   ro   rp   )rN   rS   rT   rW   ru   r   )rd   r,   r   r    rn   rq   r3   rh   rh   ri   updateCustomer  s   

	rM  r4   r5   returnc                 C   s0   d}t | } t| | }| }t||||d}|S )Nr0   )originalvaluer5   divisor)floatrZ   rW   )r4   r5   rQ  rP  originalAmountr   rh   rh   ri   convertAmount  s   rT  )N))r   r   r   r  rS   configs.firebaser   r   functions.Responser   functions.Usersr   r   r  api_versionrW   rj   rU   rV   r|   r   r   r   r   r   r   r   r   r   r   r   r"  r  r  r2  r=  rL  rM  rR  r_   rT  rh   rh   rh   ri   <module>   s    O%(Y)
-E	( (
?m<.