
    $1i                      |   d dl mZmZmZmZmZmZmZ d dl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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  erHd dl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+ d dl,m-Z- d dl.m/Z/ d dl0m1Z1 d dl2m3Z3 d dl4m5Z5 d dl6m7Z7  edejp                   ed ed             ed ed                  Z9 edejp                   ed ed             ed ed                  Z: ed ejp                   ed ed             ed! ed"                  Z; G d# d$e      Z<y%)&    )IntegerStringDateTimeBooleanTextColumn
ForeignKey)func)Table)relationshipMappedmapped_column)AddressTypesInvoiceStatusTypes)DictListOptionalTYPE_CHECKING)AddressSchema)Base)hybrid_property)
UserSchema)datetime)Any)Address)File)Transactions)CustomerContact)Merchant)PaymentMethod)User)CustomerUsers)PaymentRequestAuthorizations)Note)Invoicecustomer_addressescustomer_idzcustomers.id
address_idz
address.idcustomer_attachmentsfile_idfiles.idcustomer_notesnote_idznotes.idc                   (   e Zd ZU dZdZ eeddd      Zee	   e
d<    e ed      dd      Zee   e
d<    e ed	      d
      Zeee      e
d<    e ed	      d
      Zeee      e
d<    e ed	      d
      Zeee      e
d<    e ed      d
      Zeee      e
d<    e ed      d
      Zeee      e
d<    e ed      ddd      Zeee      e
d<    e ed      d
      Zeee      e
d<    e ed      d
      Zeee      e
d<    e ed      d
      Zeee      e
d<    e ed      d
      Zeee      e
d<    e ed      d
      Zeee      e
d<    eed
      Zeee      e
d<    e ed	      d
      Zeee      e
d<    eed      Zee    e
d<    eed      Z!ee    e
d<    ee e"jF                               Z$ee   e
d<    eed e"jF                                Z%eee      e
d!<    eed
      Z&eee      e
d"<    e ed      d
      Z'eee      e
d#<    e ed      d
      Z(eee      e
d$<    e ed      d
      Z)eee      e
d%<    ee*d
      Z+eee      e
d&<    ee*d
      Z,eee      e
d'<    e-d(d)*      Z.ee/d(      e
d+<    e-d,e0-      Z1ee/d,      e
d.<    e-d/d)*      Z2ee/d/      e
d0<    e-d1d)*      Z3ee/d1      e
d2<    ee e4d3      d
      Z5eee	      e
d4<    e-d,d56      Z6eed,      e
d7<    ee e4d8            Z7ee	   e
d9<    e-d:      Z8ed:   e
d;<    e-d<d)*      Z9ee/d<      e
d=<    ee e4d>      d
      Z:eee	      e
d?<    e-d@      Z;eed@      e
dA<    e-dBd)*      Z<ee/dB      e
dC<    e-dDd)*      Z=ee/dD      e
dE<    e-dFe>d)G      Z?ee/dF      e
dH<    e-dId)*      Z@ee/dI      e
dJ<   eAdKe fdL       ZBeAdKe/e   fdM       ZCeAdKeDfdN       ZEeAdKeDfdO       ZFeAdKeDfdP       ZGeAdQ        ZHyR)SCustomerz7
    Customer Model: ORM class for Customer Entity
    	customersT)primary_keyindexautoincrementid   )r2   uniqueuin    )nullable
first_namemiddle_name	last_nameemailphone2   )r2   r6   r9   r'   account_typecustomer_typeindustrybusiness_legal_nameoffice_phoneaccount_expires_ontimezoneF)default	is_active	is_vendor)server_default
created_at)r9   onupdate
updated_at
deleted_at	tilled_idwebsiteaccount_tax_idtagsaccount_literalr   customer)back_populates	addressesr   )	secondaryattachmentsr   transactionsr   contactsr+   	avatar_idjoined)lazyavatarzmerchants.idmerchant_idr   merchantr    payment_methodszusers.iduser_account_idr!   user_accountr"   usersr#   payment_request_authorizationsr$   )rW   rU   notesr%   invoicesreturnc                     | j                   d uS N)rb   selfs    `/var/www/html/hwPaymentPortal-be-dev/hw-payment-portal-api/src/apps/customers/models/customer.pyis_registeredzCustomer.is_registeredy   s    ##4//    c                 T    | j                   r| j                   j                  d      S g S )N,)rR   splitrk   s    rm   	tags_listzCustomer.tags_list   s!    9999??3''	ro   c                     | j                   rat        | j                         dkD  rIt        d | j                   D        d       }|| j                   d   }t        di |j	                  d      S y )Nr   c              3   :   K   | ]  }|j                   s|  y wrj   )use_as_default.0addresss     rm   	<genexpr>z+Customer.default_address.<locals>.<genexpr>   s     QW':P:PQs   Finclude_properties )rV   lennextr   _asdict)rl   default_address_maps     rm   default_addresszCustomer.default_address   sr    >>c$..1A5"&QQSW# #*&*nnQ&7#  %---G  ro   c                     | j                   r^t        | j                         dkD  rFt        d | j                   D        d       }|| j                  S t	        di |j                  d      S y )Nr   c              3   Z   K   | ]#  }|j                   t        j                  k(  r| % y wrj   )address_typer   SHIPPINGrw   s     rm   rz   z,Customer.shipping_address.<locals>.<genexpr>   s,      ++|/D/DD    )+Fr{   r}   rV   r~   r   r   r   r   )rl   shipping_address_maps     rm   shipping_addresszCustomer.shipping_address   sv    >>c$..1A5#'#'>>
 $  $++++  &..%.H  ro   c                     | j                   r^t        | j                         dkD  rFt        d | j                   D        d       }|| j                  S t	        di |j                  d      S y )Nr   c              3   Z   K   | ]#  }|j                   t        j                  k(  r| % y wrj   )r   r   BILLINGrw   s     rm   rz   z+Customer.billing_address.<locals>.<genexpr>   s,      ++|/C/CC r   Fr{   r}   r   )rl   billing_address_maps     rm   billing_addresszCustomer.billing_address   sv    >>c$..1A5"&#'>>
 # #*+++  %---G  ro   c                 T    | j                   rt        d | j                   D              S y )Nc              3   4   K   | ]  }|j                     y wrj   )
ocurred_at)rx   transactions     rm   rz   z,Customer.last_active_date.<locals>.<genexpr>   s     S+{--Ss   )rY   maxrk   s    rm   last_active_datezCustomer.last_active_date   s%    SARARSSSro   N)I__name__
__module____qualname____doc____tablename__r   r   r4   r   int__annotations__r   r7   strr:   r   r;   r<   r=   r>   r'   r@   rA   rB   rC   rD   r   rE   r   rF   r   rH   boolrI   r
   nowrK   rM   rN   rO   rP   rQ   r   rR   rS   r   rV   r   customer_attachments_maprX   rY   rZ   r	   r[   r^   r_   r`   ra   rb   rc   rd   re   customer_notes_maprf   rg   r   rn   rs   r   r   r   r   r   r}   ro   rm   r/   r/   1   s<     M#GTY]^Bs^$VC[TJCJ(5fRj4(PJx}%P)6vbzD)QK&Q'4VBZ$'OIvhsm$O#0t#LE6(3- L#0t#LE6(3- L)6vbzVZei)jK&j*7sd*SL&#'S+8d+SM6(3-(S&3F3K$&OHfXc]#O1>vc{UY1Z.Z*7sd*SL&#'S5B8VZ5[x12[&3F2J&NHfXc]#N+GUCIvd|C+GUCIvd|C#0($((*#UJx U-:8d]e]a]e]e]g-hJx)*h-:8d-SJx)*S'4VC[4'PIvhsm$P%26#;%NGVHSM"N,9&+PT,UNF8C=)U"/t"DD&#
D-:4$-OOVHSM*O)5iPZ)[Ivd9o&[(4VG_(`KV%`1=n]g1hL&n-.h0<=N_i0jHfT+,-j'4Wj>T_c'dIvhsm$d'3F'JFF8F#$J,Wj6PQKQ#/
#;HfZ ;5A/bl5mOVD12m-:7JzDZei-jOVHSM*j-9&-AL&&)*A+7Xb+cE6$'(cS_&zT"F40N+O$P  #/,Z#E6$v,  )5Yz(ZHfT)_%Z 0t 0 0 49  
    -  $   $  ro   r/   N)=
sqlalchemyr   r   r   r   r   r   r	   sqlalchemy.sqlr
   sqlalchemy.sql.schemar   sqlalchemy.ormr   r   r   src.core.utils.enumsr   r   typingr   r   r   r   src.apps.base.schemas.commonr   src.apps.base.models.baser   sqlalchemy.ext.hybridr   "src.apps.users.schemas.user_commonr   r   r   src.apps.base.models.addressr   src.apps.files.models.filer   )src.apps.transactions.models.transactionsr   *src.apps.customers.models.customer_contactr   "src.apps.merchants.models.merchantr   /src.apps.payment_methods.models.payment_methodsr    src.apps.users.models.userr!   (src.apps.customers.models.customer_usersr"   ?src.apps.payment_requests.models.payment_request_authorizationsr#   src.apps.notes.models.noter$    src.apps.invoices.models.invoicer%   metadatacustomer_address_mapr   r   r/   r}   ro   rm   <module>r      s   S S S  ' > > A 6 6 6 * 1 9 4/FJ;M/Fl/8MM
=*^45
<L12	  !MM
=*^45
9j,-	  MM
=*^45
9j,-	 Pt Pro   