a
    wɸf%                     @   sJ  d dl Z d dl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 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 d dlmZ d dlZd dlZd dlZd dlZd dlmZ d dlZd dlmZ e  dZ!dd Z"dd Z#dd Z$dd Z%dd Z&dd Z'dd Z(dd Z)G dd  d e	Z*d!d" Z+d#d$ Z,d%d& Z-dS )'    N)SendGridAPIClientPersonalizationEmail)Mail)ModelBackend)get_user_model)SENDGRID_API_KEY)UserNotification)settingswallet_pool)timezone)	timedelta)Web3)geth_poa_middlewaredjangoc                 C   s   t t| d}t| |rt|dkr:t|d }d}n@t|dkrrt|d }|d d u rdd}qzt|d }nddgS ||gS d S d S )N      r   Z___________________   )
chunk_texttitle_case_wordloggerinfolen)titleoutZphrase1Zphrase2 r   /Users/christophesurbier/Dropbox/Mon Mac (MacBook-Air-de-christophe.local)/Documents/Programmation/SellTix/tixsellbackend/backoffice/helpers.py
get_titles   s    
r   c                 C   s   |   S N)r   )textr   r   r   r   )   s    r   c                    s     fddt dt D S )Nc                    s   g | ]}||   qS r   r   ).0i
chunk_sizer!   r   r   
<listcomp>-       zchunk_text.<locals>.<listcomp>r   )ranger   )r!   r%   r   r$   r   r   ,   s    r   c           
      C   s   | j }tt }|r(||j||d}n|d ||d}tj|t|d}t	 }| |_
||_||_||_||_|jdk|_|jdkrtd|j  ddlm}	 d| j }|	dd	| |  |jdkS )
N)ideventtypemessage)data   z#Error sending webhook notification r   	sendEmailuM   Error sending notification pour organisateur : <b>%s</b> transfert échoué !csurbier@idevotion.fru!   [SellTix] Sending notifs échoué)
webhookUrlstruuiduuid4r)   requestspostjsondumpsr
   refOrganizerrefEventnotifIdr+   r,   status_codesuccessr   errorbackoffice.helpersr0   emailsave)
userr*   r+   r,   webhook_urlZtheIdr-   responseZnotifsr0   r   r   r   notify_partner_webhook.   s8    	

rF   c                 C   s   t d}| j|}|S )NzEurope/Paris)pytzr   	eventDate
astimezone)r*   event_timezone
event_timer   r   r   getEventDateToParisTimeZoneR   s    
rL   c                 C   s:   t | j}| j|}t |}||k r2dS dS d S )NTF)rG   r   rH   rI   now)r*   rJ   rK   current_timer   r   r   hasEventStartedW   s    rO   c                 C   sN   t | j}| j|}t| jd}|| }t |}||k rFdS dS d S )N)minutesTF)rG   r   rH   rI   r   durationrM   )r*   rJ   rK   rQ   rN   r   r   r   hasEventEndeda   s    rR   c              
   C   s   t d t |  t | t | t d td| ||d}ztt}||}W n0 ty } zt |j W Y d }~n
d }~0 0 d S )Nz===On envoi erreur emailz=======================zcontact@selltix.fr)
from_email	to_emailssubjecthtml_content)r   r?   r   r   r   send	Exceptionr,   )rA   rU   rV   r,   sgrE   er   r   r   r0   n   s     




r0   c                   @   s   e Zd ZdddZdd ZdS )EmailBackendNc                 K   sB   t  }z|jj|d}W n |jy.   Y d S 0 ||r>|S d S )N)rA   )r   objectsgetDoesNotExistcheck_password)selfrequestusernamepasswordkwargs	UserModelrC   r   r   r   authenticate   s    
zEmailBackend.authenticatec                 C   s2   t  }z|jj|dW S  |jy,   Y d S 0 d S )N)pk)r   r\   r]   r^   )r`   user_idre   r   r   r   get_user   s
    zEmailBackend.get_user)NN)__name__
__module____qualname__rf   ri   r   r   r   r   r[      s   

r[   c              
   C   sD  zddl m} dd l}tttj}td}tj	}|rL|j
jtdd tj}tj}d}	d}
|
r| }|d u r|d q`||	krd}
q`|d q`|| }||}|j|d	}||d
}|j|||d}|||||jj||d}|jjj||d}|j|j}|jj|dd}td |d }|| |dkrtd zLt tj!}ddiddigd|| f dgddid}|j"j#j$j%|d}W n: t&y } z td t| W Y d }~n
d }~0 0 W dS W nZ t&y> } z@t'| ddl(m)} d| t*|f }|dd| W Y d }~dS d }~0 0 d S ) Nr   r   DEBUG)layerwallet1Tg      ?Flatestether)fromtovalue)rr   rs   rt   gasgasPricenoncechainId)private_keyi,  )timeoutz4receipt with confirmed trx hash (after trx executed)statusr   zAPI publish event send MATIC OKrA   r1   zrofar@mac.comz=SellTix - API publish Event : envoi de %s Matic sur wallet %s)rs   rU   zSellTix <contact@selltix.live>)personalizationsrr   )request_bodyz6API publish event send MATIC erreur send mail sendgridr/   z/Envoi matic sur wallet : <b>%s</b> Exception %sz#SellTix - API publish Event : error)+tixsell.settingsr   timer   HTTPProviderr   CONTRACT_NODE_URLosgetenvCHAIN_IDmiddleware_onioninjectr   SELLTIX_WALLETSELLTIX_WALLET_PRIVATE_KEY
get_walletsleepto_checksum_addressethget_transaction_countto_weiestimate_gas	gas_priceaccountsign_transactionsend_raw_transactionrawTransactionwait_for_transaction_receiptr   r   release_walletsendgridr   r   clientmailrW   r7   rX   r?   r@   r0   r3   )walletAddressamountr   r   w3rm   r   ADRESS_TO_USEPRIVATE_KEY_TO_USEwalletToUse
needToWaitwallet_from_poolcheckedTransferTOWalletAddresscheckedFromWalletAddressrw   Z	amountWeigasEstimateraw_transaction	signed_txreceiptresultTxr{   rY   r-   rE   rZ   r0   r,   r   r   r   	sendMatic   s    







	

 

r   c                   C   s   d S r    r   r   r   r   r   askTva   s    r   c           	   
   C   s   zddl m} tjd t| j d }tjtj	tj
dd }tj|s\t| d| j| jd}|d | }||| d	| | _W d
S  ty } z<t| ddlm} dt| }|dd| W Y d }~dS d }~0 0 d S )Nr   )HTMLz	/invoice//__file__z/static/storage/factureszfactures_{0}_{1}.pdfz%d-%m-%Yz
/factures/Tr/   u   Erreur génération facture %sr1   z$SellTix - Generation facture : errorF)Z
weasyprintr   r   ZBACKEND_URLr3   r)   r   pathjoinabspathdirnameexistsmakedirsformat	createdAtstrftimeZ	write_pdfpdfFilerX   r   r?   r@   r0   )	invoicer   urlr   	file_name	file_pathrZ   r0   r,   r   r   r   generateInvoice   s"     


r   ).loggingr   r   r   r   r   Zsendgrid.helpers.mailr   Zdjango.contrib.auth.backendsr   django.contrib.authr   r~   r   backoffice.modelsr	   r
   tixsellr   r   django.utilsr   datetimer   rG   r8   r4   r6   web3r   web3.middlewarer   	getLoggerr   r   r   r   rF   rL   rO   rR   r0   r[   r   r   r   r   r   r   r   <module>   s:   
$
Z