a
    fz[                     @   s  d dl mZ d dlmZ d dlmZ d dlZd dlmZ d dl	m
Z
 d dlmZ d dlT d d	lmZ d d
lmZ d dlmZmZ d dlZd dlmZ dd ZG dd deZG dd deeZejeded G dd dejZG dd dejZG dd dejZG dd dejZ G dd dejZ!eje"de!d G dd  d ejZ#G d!d" d"ejZ$G d#d$ d$ejZ%G d%d& d&ejZ&G d'd( d(ejZ'G d)d* d*ejZ(G d+d, d,ejZ)G d-d. d.ejZ*G d/d0 d0ejZ+G d1d2 d2ejZ,G d3d4 d4ejZ-G d5d6 d6ejZ.dS )7    )unicode_literals)timezone)modelsN)
ImageField)slugify)	post_save)*)get_random_string)BaseUserManager)AbstractBaseUserPermissionsMixinc                 C   s0   | j }|}|jj|d r,|tdd }q
|S )N)slug   )length)	__class__objectsfilterexistsr	   )instancer   modelZunique_slug r   /Users/christophesurbier/Dropbox/Mon Mac (MacBook-Air-de-christophe.local)/Documents/Programmation/SellTix/tixsellbackend/backoffice/models.pyunique_slugify   s
    r   c                   @   s*   e Zd ZdZdd Zd	ddZdd ZdS )
UserManagerTc                 K   sF   |st d| |}| jf d|i|}|| |j| jd |S )zM
        Creates and saves a User with the given email and password.
        zThe given email must be setemail)using)
ValueErrornormalize_emailr   set_passwordsave_db)selfr   passwordextra_fieldsuserr   r   r   _create_user   s    

zUserManager._create_userNc                 K   s    | dd | j||fi |S )Nis_superuserF)
setdefaultr%   r!   r   r"   r#   r   r   r   create_user&   s    zUserManager.create_userc                 K   s6   | dd |ddur"td| j||fi |S )Nr&   Tz&Superuser must have is_superuser=True.)r'   getr   r%   r(   r   r   r   create_superuser*   s    zUserManager.create_superuser)N)__name__
__module____qualname__use_in_migrationsr%   r)   r+   r   r   r   r   r      s   
r   c                   @   s  e Zd ZejdejddZejdddZ	ej
ddddZej
d	dddZejd
ddZejdddZejdddZej
ddddZej
ddddZejddZej
ddddZej
ddddZej
ddddZej
ddddZejddZejddZejddZejddZejddZejddZejdddZ ej
ddddZ!ej
ddddZ"ej
ddddZ#ej
ddddZ$ej
ddddZ%ej
ddddZ&ej
ddddZ'ej
ddddZ(ej
ddddZ)ej
dddZ*ej
ddddZ+ej
ddddZ,ejddZ-ejddZ.ej/ddZ0ej
ddddZ1ejdddZ2ejddZ3ej
ddddZ4ej
dddd  e5j6D d!d"Z7ejddZ8ej/d#dZ9ejdddZ:ejdddZ;ej
d$d%dZ<ej
d&d'dZ=d(Z>g Z?e@ ZAd)d* ZBd+S ),UserTFprimary_keydefaulteditablezemail address)uniquez
first name   
max_lengthblankz	last namezdate joinedauto_now_addactiver3   is_staffzphone number(   d   r8   nullr9      i   rB   r9      
      ZFRr8   r3         2   Europe/Parisc                 C   s   g | ]}||fqS r   r   ).0tzr   r   r   
<listcomp>^       zUser.<listcomp>zUser's preferred timezone)r8   r3   choices	help_textr      Zeur   Zinactiver   c                 C   s   | j S N)r   r!   r   r   r   __str__m   s    zUser.__str__N)Cr,   r-   r.   r   	UUIDFielduuiduuid4id
EmailFieldr   	CharField
first_name	last_nameDateTimeFielddate_joinedBooleanField	is_activer>   ZphoneNumberwalletAddressZgeneratedWalletZ	publicKeyZ
privateKeywordsZpinCodeZisOrganizercryptoAcceptedZmaticAcceptedZusdtAcceptedZusdcAccepted
cbAccepted	TextFielddescriptionZorganizerContractZorganizerCompanyZorganizerAddressZorganizerCityZorganizerZipCodeZ	vatNumberZorganizeWebsitetransactionHashnoncecountryZsignInTokenZstripeCustomerIdZaccountLockedappleGoogleWalletIntegerFieldqrcodeTimeoutZlastLoginCodeZlastLoginCodeDateZ	maticSentZ
webhookUrlpytzall_timezonesr   subscriptionZsubscriptionPriceZsubscriptionStartDateZsubscriptionEndDateZsubscriptionCurrencyZsubscriptionStatusUSERNAME_FIELDREQUIRED_FIELDSr   r   rW   r   r   r   r   r0   2   sp   r0   signal_updateuser)dispatch_uidsenderc                   @   sX   e Zd ZejeejdZejdddZ	ejdddZ
ejddZejddZdd	 Zd
S )Seller	on_delete   Tr7   Fr=    c                 C   s   | j jS rU   )r$   r   rV   r   r   r   rW   x   s    zSeller.__str__N)r,   r-   r.   r   OneToOneFieldr0   CASCADEr$   r]   Zstripe_user_idZstripe_access_tokenrb   Zstripe_charges_enabledrh   Zstripe_account_jsonrW   r   r   r   r   rx   r   s   rx   c                   @   s`   e Zd ZejdejddZeje	ej
dZejdddZejddZejdd	Zejdd
ZdS )	ScanUsersTFr1   ry   r@   )r8   r5   rT   r8   r:   auto_nowN)r,   r-   r.   r   rX   rY   rZ   r[   r}   r0   r~   r$   r]   loginr"   r`   	createdAt	updatedAtr   r   r   r   r   |   s   r   c                   @   s\   e Zd ZejdejddZejddddZ	ej
ddZej
ddZG d	d
 d
Zdd ZdS )CategoryTFr1   r{   zCategory Name)r8   rR   r5   r:   r   c                   @   s   e Zd ZdZdS )zCategory.MetaZ
CategoriesNr,   r-   r.   verbose_name_pluralr   r   r   r   Meta   s   r   c                 C   s
   t | jS rU   )strnamerV   r   r   r   rW      s    zCategory.__str__N)r,   r-   r.   r   rX   rY   rZ   r[   r]   r   r`   r   r   r   rW   r   r   r   r   r      s   r   c                   @   sX   e Zd ZejdejddZejddddZ	e
ddZejddZejdd	Zd
d ZdS )EventPageTemplateTFr1   r@   rA   images)	upload_tor:   r   c                 C   s   d| j | jf S Nz%d - %sr[   r   rV   r   r   r   rW      s    zEventPageTemplate.__str__N)r,   r-   r.   r   rX   rY   rZ   r[   r]   r   r   imager`   r   r   rW   r   r   r   r   r      s   
r   c                       s  e Zd ZejdejddZeje	ej
dddZejeej
dddddZejeej
ddd	d
ZdZejedddZdZejeddddZejdddZejddddZejddddZejddddZejddddZejddddZejdddZejdddddZe  Z!ejddZ"ejddZ#ejddZ$ej%de&j'dZ(ejdd d!Z&ejd"d#d!Z)ejd$d%Z*ej+ddd&Z,ejd'dddZ-ejd'ddd(d)Z.ejd'ddd*d)Z/ejd+d,dZ0ejdd-Z1ejdd-Z2ejdd-Z3ej4d.d-Z5ej4d/d-Z6ejdd-Z7ejdd-Z8ejdd-Z9ejd'dddZ:ejdd-Z;d0Z<eje<dddZ=ejdd-Z>ejdd-Z?ej@d1ddd2ZAejd'dddZBejdd-ZCejdd-ZDej%dd3ZEej%dd4ZFG d5d6 d6ZG fd7d8ZHd9d: ZI  ZJS );EventTFr1   Zevent_organiserrz   rB   related_nameZevent_categoryz"Category associated with the event)rz   rB   r9   r   rR   Zevent_page_template)rz   rB   r9   r   ))r   ZOnline)rI   ZVenue)rG   ZContentr   rQ   r3   db_index)r   CreatedrI   Z	Published)rG   CancelrI   z3Status of the event: 0:Created 1:Published 2:Cancel)rQ   r3   r   rR   zFOrganizer does not want SellTix to reference this event on its website)r3   rR   r@   rA      z
Event Name)r8   rR   r|   )r8   r3   rB   r5   r{   r   z6The UTC date of the event in format %Y-%m-%dT%H:%M:%SZ)rR   r3   rK   rL   rH   rF   EURz Duration of the event in minutes)rR   rD   rE   z6Link of the conference event if not managed by SellTixr8   rB   r9   rR   z#URL of the website to present event   z An image to illustrate the Eventr=   i  i  ))r   ZSD)rI   ZHDZvideosr   rB   r9   r:   r   c                   @   s   e Zd ZdZdS )z
Event.MetaZEventsNr   r   r   r   r   r      s   r   c                    s.   | j st| t| j| _ t j|i | d S rU   )r   r   r   r   superr   )r!   argskwargsr   r   r   r      s    z
Event.savec                 C   s   d| j | jf S r   )	eventTyper   rV   r   r   r   rW      s    zEvent.__str__)Kr,   r-   r.   r   rX   rY   rZ   r[   
ForeignKeyr0   SET_NULLZrefOrganiserr   ZrefCategoryr   ZrefEventPageTemplateZ
type_eventrn   r   Zstatus_eventstatusrb   Z	isPrivater]   ZeventContractZticketContractZpaymentContractZticketTypeContractrj   r   	SlugFieldr   rh   ri   Z	venueNameZvenueAddressZvenueGeolocr`   r   nowZ	eventDatecurrencyduration	TimeFieldZ	entryTimeZpreviewVideoZ	onlineUrlZwebsiter   rf   rg   Z
webHookSet
FloatFieldZroyaltyZsellTixRoyaltieValuerm   ro   ZisConferenceZstreamingIdZstreamWithSelltixZstreaming_qualityZstreamingQualityZrecordStreamingZrecordedVideo	FileFieldZrecordedFileZrecordedStreamingUrlZmailRappelSentZendedr   r   r   r   rW   __classcell__r   r   r   r   r      sn   r   Zupdate_eventc                   @   sp   e Zd ZejdejddZeje	ej
dddZejddZejdd	Zejdd
ZejddZG dd dZdS )EventPayeesTFr1   Zevent_payeesr   r@   r   r   r=   r:   r   c                   @   s   e Zd ZdZdZdS )zEventPayees.Meta)refEventrd   r   N)r,   r-   r.   unique_togetherr   r   r   r   r   r      s   r   N)r,   r-   r.   r   rX   rY   rZ   r[   r   r   r   r   r]   rd   r   ZshareAmountr`   r   r   r   r   r   r   r   r      s   r   c                   @   sb  e Zd ZejdejddZejddddZ	ej
ddZej
ddZejdd	Zejd
ddZejd
ddZejddZejddddZejd
ddZejd
ddZejd
ddZejd
ddZejd
ddZejd
ddZejddZejd
ddZejd
ddZejd
ddZejd
ddZejddddZej
ddddZej ddZ!ej ddZ"dd Z#dS )TicketTypeTemplateTFr1   r@   rA   r   r   rI   r=   rF   z#0dcaf0rH   z#FF0090r6   Z30z#fff2025P   Z1521r:   r   c                 C   s   d| j | jf S r   r   rV   r   r   r   rW     s    zTicketTypeTemplate.__str__N)$r,   r-   r.   r   rX   rY   rZ   r[   r]   r   URLFieldr   ZfontUrlrn   Z
templateIdZgradient1ColorZgradient2ColorZeventTitleOneZeventTitleTWoZeventTitleFontZ
eventColorZcategoryFontZcategoryColorZticketTypeFontZticketTypeColorZpriceZ
priceColorZ	priceFontZtypeEventColorZtypeEventFontZvenueZsvgUrlr`   r   r   rW   r   r   r   r   r      s2   r   c                   @   s  e Zd ZejdejddZeje	ej
dddZejeej
dddZejddZejddddZejddddZejd	dZejd	dZejd
dZejejdZejejdZejdddZejddZejddejdZ ejddZ!ejd
dZ"ejd
dZ#ejddZ$ejd
dZ%ejddejdZ&ejddddZ'ejddZ(ejd
dZ)ejddZ*ejddZ+ejddZ,ejddZ-dZ.eje.d
ddZ/ejddZ0ejddZ1G dd dZ2dd Z3dS )
TicketTypeTFr1   rz   rB   r9   r=   r@   rA   rI   r   rD   )rB   r9   r3   r{   )r   r   rG   ZDeletedr   r:   r   c                   @   s   e Zd ZdZdS )zTicketType.MetaZTicketsTypeNr   r   r   r   r   r   :  s   r   c                 C   s   d| j | j| jf S )Nz%s - %d : %s)r   ticketTypeIdr   rV   r   r   r   rW   =  s    zTicketType.__str__N)4r,   r-   r.   r   rX   rY   rZ   r[   r   r   r   r   r   ZrefTicketTypeTemplatern   r   r]   rj   r   Z
maxTicketsZmaxTicketsPerUserr   ZticketPricer`   r   r   ZbookingStartDateZbookingEndDaterh   ri   rb   ZrevealedZrevealStartDateZsellableZmaxSellablePriceZroyaltySellableZearlyBidZdiscountPriceZdiscountEndDateZ	hiddenuriZhasRuleZ	fixAmountZ	freeDrinkZpriorityQueueZ	canStreamZtransferableZstatus_ticketTyper   r   r   r   rW   r   r   r   r   r     sB   r   c                   @   s|   e Zd ZejdejddZeje	ej
dddZejddddZejddZejdd	Zejdd
ZG dd dZdd ZdS )TicketHistoryTFr1   r   r@   rA   r   r=   r:   r   c                   @   s   e Zd ZdZdS )zTicketHistory.Metar   Nr   r   r   r   r   r   I  s   r   c                 C   s
   d| j  S )Nz%s)r[   rV   r   r   r   rW   L  s    zTicketHistory.__str__N)r,   r-   r.   r   rX   rY   rZ   r[   r   r0   r   refUserr]   walletr   	pricePaidr`   r   r   r   rW   r   r   r   r   r   B  s   r   c                   @   s   e Zd ZejdejddZeje	ej
dddZejeej
dddZejddddZe ZejddddZejddZejdd	Zejedd
Zejdd	ZdZejedddZejdd	ZejddZejddZ G dd dZ!dd Z"dS )TicketTFr1   r   r@   rA   r   r   r=   )r9   ))r   zTo be minted)rI   Zmintedr   r   r:   r   c                   @   s   e Zd ZdZdS )zTicket.MetaZTicketsNr   r   r   r   r   r   d  s   r   c                 C   s&   | j rd| j j| jf S d| j S d S )N%s - %dz%d)refTicketTyper   ticketIdrV   r   r   r   rW   g  s    zTicket.__str__N)#r,   r-   r.   r   rX   rY   rZ   r[   r   r0   r   r   r   r   r]   rj   rn   r   Z	lastOwnerZhashedTicketr   r   ManyToManyFieldr   Zownersrb   ZhasBeenOfferedZstatus_ticketr   Zscannedr`   r   r   r   rW   r   r   r   r   r   O  s"   r   c                   @   s   e Zd ZejdejddZeje	ej
ddddZejeej
dddZejddZejddd	Zejd
ddddZe ZejddZejddZejddddZejddZdZejedddZejddZejddZdd Z dS )PaymentTFr1   Z	paiementsr   r   rB   r   rI   r=   rD   r{   z'Stripe PaymentIntent or transactionHashr   r      rA   ))r   Z	InitiatedrI   Done)rG   ZRefundedr   r:   r   c                 C   s   d| j | jf S )Nu   %s - %d €)r   amountrV   r   r   r   __unicode__  s    zPayment.__unicode__N)!r,   r-   r.   r   rX   rY   rZ   r[   r   r0   r   r   r   r   rn   Z	nbTicketsrh   Z
jsonStriper]   ZpaymentIntentr   r   ZfeesSelltixZfeesStripeForSellTix
withWalletrb   Zweb2Zstatus_paymentr   r`   r   r   r   r   r   r   r   r   n  s    r   c                   @   s   e Zd ZejdejddZeje	ej
ddddZejeddZe Ze Zejdd	Zejdd	Zejdd	Zejdd	Zejdddd
ZejddddZejddZejddZdd ZG dd dZ dS )InvoiceTFr1   Zuser_invoicesr   Zinvoices)r   r   r=   r   r@   rA   r:   r   c                 C   s   d| j | j| j| jf S )Nu   %s - %d %d : %d €)r   monthyeartotalVATIncludedrV   r   r   r   r     s    zInvoice.__unicode__c                   @   s   e Zd ZdZdS )zInvoice.Meta)r   r   r   N)r,   r-   r.   r   r   r   r   r   r     s   r   N)!r,   r-   r.   r   rX   rY   rZ   r[   r   r0   r   r   r   r   Zpaymentsrn   r   r   r   ZtotalVATExcludedZ	vatAmountr   rb   Zpaidr   ZpdfFiler]   ZstripeInvoiceIdr`   r   r   r   r   r   r   r   r   r     s   r   c                   @   s   e Zd ZejdejddZeje	ej
ddddZejeej
dddZejeej
dddZejdd	Zejd
dddZdZejddddZejedddZejddZejddZejddZdd ZdS )TicketToMintTFr1   Z
ticketuserr   r   rz   r   rB   r{   r   r   rA   )r   ZTo_dor   )rG   ZFailed)   ZMintingr@   r   r   r=   r:   r   c                 C   s   d| j | jf S Nz%s - %s)r   
refPaymentrV   r   r   r   r     s    zTicketToMint.__unicode__N)r,   r-   r.   r   rX   rY   rZ   r[   r   r0   r   r   r   r   r   r   r]   ZreservationIdr   Zstatus_mintrj   rn   r   Z	nbFailurer`   r   r   r   r   r   r   r   r     s   r   c                   @   sX   e Zd ZejdejddZejddZ	ej
dddZejddZejddZd	d
 ZdS )WebHookTFr1   r@   r   rD   r:   r   c                 C   s   d| j | jf S r   )	webhookIdr   rV   r   r   r   r     s    zWebHook.__unicode__N)r,   r-   r.   r   rX   rY   rZ   r[   r]   r   rh   payloadr`   r   r   r   r   r   r   r   r     s   r   c                   @   s   e Zd ZejdejddZeje	ej
ddddZejeej
ddddZejddZejd	dZejddd
ZejddZejddZejddZdd ZdS )NotificationTFr1   Z
organizersr   eventsr{   r   r@   rD   r=   r:   r   c                 C   s   d| j | j| jf S )Nz%s - %s : %d)refOrganizernotifIdsuccessrV   r   r   r   r     s    zNotification.__unicode__N)r,   r-   r.   r   rX   rY   rZ   r[   r   r0   r   r   r   r   r]   r   typerh   messagerb   r   r`   r   r   r   r   r   r   r   r     s   r   c                   @   sl   e Zd ZejdejddZdZej	edddZ
ejddZejddd	Zejdd
ZejddZdd ZdS )TasksTFr1   )r   )rI   ZDoing)rG   r   )r   Errorr   r   r@   r   rD   r:   r   c                 C   s   d| j | jf S )Nr   )r[   r   rV   r   r   r   r     s    zTasks.__unicode__N)r,   r-   r.   r   rX   rY   rZ   r[   Zstatus_batchrn   r   r]   actionrh   metadatar`   r   r   r   r   r   r   r   r     s   r   c                   @   s   e Zd ZejdejddZejddddZ	ej
ddZejddddZejeejd	ddd
ZejdddZejddddZejeejdddZejeejdddZejddZejddZdd ZdS )
InvitationTFr1   rT   )r8   r9   rB   r=   r@   rA   Z
userinviter   r{   r|   rH   r   r   r:   r   c                 C   s   d| j | jf S r   )Z'refTicket__refTicketType__refEvent_namecoderV   r   r   r   r     s    zInvitation.__unicode__N)r,   r-   r.   r   rX   rY   rZ   r[   r]   r   rb   ZburnedZwalletSellTixUsedForTransferr   r0   r   ZfromUserZtoUserZ	emailSentr   Z	refTicketr   r   r`   r   r   r   r   r   r   r   r     s   r   )/
__future__r   datetimer   	django.dbr   rY   Zsorl.thumbnailr   django.utils.textr   Zdjango.db.models.signalsr   Zbackoffice.signalsdjango.utils.cryptor	   django.contrib.auth.base_userr
   django.contrib.auth.modelsr   r   rp   django.utilsr   r   r0   connectru   Modelrx   r   r   r   r   Zsignal_modifEventr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   <module>   sD   >
M-
