o
    Q?h)]                     @   s
  d dl Z d dlmZmZ d dlmZ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 defdd	Zd
d Z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&ddZdd ZdefddZdefddZdefddZd&d ed!efd"d#Zd$d% ZdS )'    N)SERVER_TIMESTAMPdb)createSetupIntentgetCurrencygetCustomergetStripeCredssaveInvoice)UsergetUser)	API_Error)Paramsparamsc              
   C   sl  | j }|j|j}}|j|j}}|s|rd}t|}|r|dt_t	||d}|s1t
|||}zlt|||}d }	ztj|ddd}	W n tya }
 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< qt||d|dW S  ty }
 ztt|
dd }
~
ww tdd)NcfbZh6XFBG3usCcUwpRE	apiSecret)enterpriseId
customerIdinvoice_settingsdefault_payment_methodcardcustomertypedataus_bank_accountiddefaultapiKey)paymentMethodsstripeCredssetupIntent  z)Can't get payment methods, contact admin.)currentUser	isProUserisEnterpriseAdminuidr   r   getstripeapi_keyr   createCustomerr   Customerretrieve	ExceptionprintPaymentMethodlistextenddictr   str)r   r!   r"   r#   r$   r   r   r   r   defaultPaymentMethoder   paymentMethod r5   Q/var/www/html/riverr-enterprise-integrations-main/V2/functions/Invoices/Wallet.pygetPaymentMethods   s`   


r7   c              
   C   sD   z
t || |d}|W S  ty! } zt| W Y d }~dS d }~ww )NbalanceF)updateCustomerr+   r,   )r   r$   amountr   r3   r5   r5   r6   updateCustomerBalance9   s   r<   c              
   K   s\   z| t _t jjt||d|dg||d}|W S  ty- } zt| W Y d }~d S d }~ww )NTr   )r;   r   confirmcurrencypayment_method_typespayment_methodmetadata)r&   r'   PaymentIntentcreateintr+   r,   )r'   r   paymentMethodIdr;   r>   kwargsintentr3   r5   r5   r6   createPaymentIntentC   s"   	rH   c              
   C   ^   | j j}| j j}t| jdd}z
t|||d}|W S  ty. } ztt	|dd }~ww )Nr;      )rechargeThreshold  
r!   r   r$   roundargsr%   r:   r+   r   r1   r   r   r$   r;   r   r3   r5   r5   r6   updateThresholdX      rQ   c              
   C   rI   )Nr;   rJ   )rechargeAmountrL   rM   rP   r5   r5   r6   updateRechargeAmountc   rR   rT   c              
   C   sh   zt dd|  d| }| ddW S  ty3 } zt| W Y d }~dS d }~ww )NpaymentPlatformCredentialsSTRIPE	customersrK   r   )r   
collectiondocumentr%   to_dictr+   r,   )r   r   refr3   r5   r5   r6   getMinimumThresholdn   s   r\   c                 C   s  | j d}| j d}| jr| jj}| jj}| j d}|s$t||}tt| j dd}t|}t	|}| j d}|si|dt
_t
jj|dd	d
dg }|ritdd |D d }|si|d d}zdt|d|d||d |}	|	r|	ddkrt|	d|d||||	dd| j dd| j d| j dd
 t|ddd}
|
dk rd}
|
|7 }
t|||
d W dS t|	 W dS W d S  ty } zt|| t| W Y d }~dS d }~ww )Nr   r$   r   r;   rJ   rE   r   r   r   r   r   c                 s   s    | ]
}| d r|V  qdS )r   Nr%   ).0pmr5   r5   r6   	<genexpr>   s    zaddBalance.<locals>.<genexpr>r   r   d   status	succeededcreditdescriptionzAdded by user/system.batchId	invoiceId)
r   r   r;   r$   r   rb   r   re   rf   rg   r9   r8   TF)rO   r%   r!   r   r$   r   rN   floatr   r   r&   r'   r-   r.   nextrH   saveTransactionr:   r,   r+   )r   r   r$   r   r;   r   r>   rE   r   rG   currentBalancer3   r5   r5   r6   
addBalance}   sz   




rl   c                 K   s   t ||}	|	dd}
|
sd}
|
}|dkr&|dkr|
| }n|dkr&|
| }td
| |||||||t|	ddt|dd|}td| d	| | |S )Nr9   r   rc   rd   debitrJ   )r   r;   r$   r   rb   r   r   orderId	createdAtprevBalance
newBalance"paymentPlatformsCredentials/STRIPE/transactionsr5   )	r   r%   r0   r   rN   r   rX   rY   set)r   r   r;   r$   r   rb   r   rn   rF   r   r9   rq   transactionr5   r5   r6   rj      s6   


rj   c              
   C   sh   zt d|  ddd|dd }dd |D W S  ty3 } zt| W Y d }~d S d }~ww )	Nrr   rs   r$   ==ro   
DESCENDINGc                 S   s   g | ]}|  qS r5   )rZ   )r^   docr5   r5   r6   
<listcomp>   s    z+getCustomerTransactions.<locals>.<listcomp>)r   rX   whereorder_byr%   r+   r,   )r   r$   r[   r3   r5   r5   r6   getCustomerTransactions   s   

r|   c              	   C   s   | j j}| j j}| j j}|rd}t||}|s t| j t||}|dd}|s*d}t||}|s3g }|dd}t	|t
|d|t||dddS )Nr   r9   r   rS   rJ   rK   )rS   r9   transactionsr>   rK   )r!   r   r$   r"   r   r(   r   r%   r|   r0   rN   r   )r   r   r$   r"   r   r9   r}   rS   r5   r5   r6   	getWallet   s0   


r~   c           %      C   s  | j }|j}| jd}td| d|  }|jsd S | }|d}i }t|}t	|}	|	dt
_dt
_|D ]2}
td|
 }|jsRt|jd q<| }|d	|d
}||g }|| |||< q<| D ]o\}}||jkr~qs|dv rqst|t| }tdd |D }tdd |D }tdd |D }tdd |D }tdd |D }dd |D }dd |D }t||}|sqsd}d}d }|dd}|dk rd}d}|d}|dkrqsd}||k r2|dd}|| | } ttd | jt| ||d| ||dd d}!|!r|| 7 }nt|| |t|d||d |d!d"|d#
 d$}t|| |t|d|||sBd%nd |d!d&|d#
}"|"d'}|sV||8 }t|||d( | }|r|D ]}
|jd)d*d+|
 }#|#D ]}$|$jtd d, qvqet d>i d'|d
|d-|d.|d/|d0|d1|d2|d|d3|d4d$d5|d6t!d7t!d	|d8|dd9|d:|d| |D ]}td;|d' t|d't!d$|d< qqs|jtd$|sd%nd |t!d= d S )?Nrf   zenterprises/z	/batches/orderIdsr   
2017-08-15orderInvoiceszNot invoiceduserIdr$   )S6cjn7gKnDh2O6OGNaZRrZPdYlh2YpgkOp5oD1bwPEg6UhCB78kwv053gG895WoY1TWSCwGgNCGupORs7Xg1ad0WwLLxhAODJzg58kmBqA9ys4j1XiZwBRHZtmXeJREtBhLVQVdJm6f1cVlvEpN6XYe0YTBQJNYzDKrvBFg2PhDBWLh23xM4DKiMXmOs2mSf5L32c                 s   $    | ]}| d s| dV  qdS )invoicedshippingCostNr]   r^   orderr5   r5   r6   r`   -      
z/createBatchInvoiceFromWallet.<locals>.<genexpr>c                 s   r   )r   printingCostNr]   r   r5   r5   r6   r`   2  r   c                 s   r   )r   	totalCostNr]   r   r5   r5   r6   r`   7  r   c                 s   r   )r   poCostNr]   r   r5   r5   r6   r`   <  s    

c                 s   r   )r   discountNr]   r   r5   r5   r6   r`   ?  r   c                 S       g | ]}| d s| dqS )r   r   r]   r   r5   r5   r6   ry   D  s
    
z0createBatchInvoiceFromWallet.<locals>.<listcomp>c                 S   r   )r   platformOrderIdr]   r   r5   r5   r6   ry   G  s    card/bank_accountFr9   r   walletr   rK   zAdded for charging batch )r;   r$   r   re   rg   rf   )r!   hostnamerO   r   rJ   failedrm   zPayment Failed.)
r   r   r;   r$   r   rb   rf   r   re   rg   Trc   zCharged for batch.r   r8   
batchItemsrn   rv   )paymentStatusr   r   r   r   r   r   platformOrderIdssentpaidsentAtpaidAtplatformCustomerIdr4   transactionIdzorderInvoices/)platformInvoiceItemId
invoicedAtr   rg   )r   r   rg   r   r5   )"r!   r   rO   r%   r   rY   existsrZ   r   r   r&   r'   api_versionrX   r,   r   appenditemsr$   r1   sumr   rl   r   r   r0   rj   rN   r:   	referencerz   updater   r   )%r   userr   rf   batchRefbatchr   groupedOrdersr>   r   rn   orderInvoiceReforderInvoiceorderUserIdcurrentOrdersr   r   rg   r   r   r   r   r   r   r   r4   r   r   r9   r   r   minimumThresholdamountToAddaddedru   r   	batchItemr5   r5   r6   createBatchInvoiceFromWallet  sJ  








 

"	

&	r   c                 C   s  | j }|j}|j}| jd}td| }| }|d}|r&d}t	||}t
|d}|ddv r;d S |d}	d }
d }d}z|d	d
}||dk rt|}t|}t|||d}d|d }|dt_dt_tjj|	t|dd |||d}tjj|	d|||d}
ttj|
d}
d}|dkrt||	t|dd||d|dd}td-i d|d|d|dd|dd|dd|ddd d!d d"td|d#|d#d$|dkr|
dn|dd%|gd&|dgd'|	d(t}|jtd td ||dkr|dnd ||r%|dn|dd) |dkr>t||||d d* W n tyW } zt| tt |d+d }~ww t|j  d,S ).Nrn   r   r   r   r   )H3VPShrDPIXOqRQdep6EnBp7zXZ2r   tL328gQi1HMyTQ3Y0QuhvALmKGE2r   r   r9   r   r   )rn   r$   r   zInvoice for order r   r   r   ra   )r   r;   r>   re   rA   charge_automatically)r   collection_methodre   rA   r>   r   r   rJ   rc   rm   )r   r   r;   r$   r   rb   rn   r   r$   r   r   r   r   Tr   r   r   platformInvoiceIdr   r   r   r   )r   r   r   r4   r   rg   r   r8   r    )invoicer5   )!r!   r"   r$   rO   r%   r   rX   rY   rZ   r   r
   r   r   r0   r&   r'   r   InvoiceItemrC   rD   Invoicefinalize_invoicerj   rN   r   r   r   r   r:   r+   r,   r   r1   )r   r   r"   r$   rn   r   r   r   r   r   stripeInvoiceinvoiceItemr4   r9   r>   r   rA   re   ru   rg   r3   r5   r5   r6   createOrderInvoiceFromWallet  s   







	



r   r   r   c           	      C   s   | j | j| j|s| jn|f\}}}}| j}| j}|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    )r$   displayName)re   nameemailrA   r   r   r   rA   r   )	r   r   r   r   rA   ro   	updatedAtr   r$   paymentPlatformsCredentialsrV   rW   T)merge)r$   r   r   r   r"   r#   r%   r&   r'   r0   r)   rC   r   r   rX   rY   rt   )	r   r   r   r$   r   r   r"   r#   r   r5   r5   r6   r(   J  sF   

r(   c                 K   sH   t dd| d|  }|jr"|j| |j  S d S )Nr   rV   rW   )r   rX   rY   r%   r   r   r   rZ   )r   r   rF   r[   r5   r5   r6   r:   o  s   
r:   )N) r&   configs.firebaser   r   functions.Invoicesr   r   r   r   r   V2.functions.Users.mainr	   r
   V2.middlewares.authr   	V2.Paramsr   r7   r<   rH   rQ   rT   r\   rl   rj   r|   r~   r   r   r0   r(   r:   r5   r5   r5   r6   <module>   s,    .
@
 Ow%