
    fei*                        d dl mZ d dlmZmZmZmZmZmZm	Z	 d dl
mZmZ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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$Z$d dl%m&Z& d dl'm(Z( d dl)m)Z) er#d dlm*Z* d dl+m,Z, d dl-m.Z. e*Z/e*Z0e*Z1e*Z2e*Z3e*Z4e*Z5e*Z6ndZ,dZ. ede#jn                   e	d ed             e	d ed                  Z8 G d de#      Z9y)    )UUID)IntegerStringDateTime
ForeignKeyBooleanTextColumn)relationshipMappedmapped_column)funccase)Table)hybrid_property)settings)InvoiceStatusTypes)AddressSchema)DictListOptionalTYPE_CHECKING)
UserSchema)BaseN)Session)SessionCelery)datetime)AnyMerchantSettingsInvoicemerchant_addressesmerchant_idzmerchants.id
address_idz
address.idc                   L   e Zd ZU dZdZ eeddd      Zee	   e
d<    e ed      ej                  dd      Zee   e
d<    e ed	      dd
      Zee   e
d<    e ed      ddd      Zeee      e
d<    e e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      Zeee      e
d<    eed      Zee   e
d<    eed      Zee   e
d<    eed      Zee   e
d<    ee e jB                               Z"ee#   e
d<    eed e jB                               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      e
d#<    ee'd      Z)eee      e
d$<    ee'd      Z*eee      e
d%<    eed      Z+ee   e
d&<    eed      Z,eee#      e
d'<    ee e-d(      d      Z.eee	      e
d)<    eed      Z/eee#      e
d*<    ee'd      Z0eee      e
d+<    ee e-d,      d      Z1eee	      e
d-<    e2d.d/0      Z3eed.      e
d1<    e2d2d34      Z4ee5d2      e
d5<    e2d6e67      Z7ee5d6      e
d8<    e2d9d34      Z8ee5d9      e
d:<    e2d;d34      Z9ee5d;      e
d<<    e2d=d34      Z:ee5d=      e
d><    e2d?d34      Z;ee5d?      e
d@<    e2dAd34      Z<ee5dA      e
dB<   e=dCe>fdD       Z?e=dCe@fdE       ZAe=dCefdF       ZBe=dCefdG       ZCe=dCeDfdH       ZEe=dCefdI       ZFe=dCeGfdJ       ZHe=dCeGfdK       ZIyL)MMerchantz7
    Merchant Model: ORM class for Merchant Entity
    	merchantsT)primary_keyindexautoincrementid)as_uuid)defaultr*   uniqueuuid   )r*   r/   uin2   )r*   r/   nullabler$   name)r4   taglineindustryemailphoneregistration_no
license_noF)r.   is_onboarded	is_activeis_verified)server_default
created_at)r4   onupdate
updated_at
deleted_at   payrix_statuspayrix_account_id	subdomaincustom_domaintnc_accepteddobzusers.idapproved_byapproved_atmerchant_literalzfiles.idbrand_logo_idFilejoined)lazy
brand_logoTransactionsmerchant)back_populatestransactionsAddress)	secondary	addressesMerchantUsersusersr"   invoicesr    r   PaymentRequestAuthorizationspayment_request_authorizationsMerchantPaymentHistorymerchant_payment_historyreturnc                     | j                   rYt        | j                         dkD  rAt        d | j                   D              }t        di |j                  j                  d      S y )Nr   c              3   :   K   | ]  }|j                   s|  y wN)is_owner).0users     R/var/www/html/hwPaymentPortal-be-uat/backend/src/apps/merchants/models/merchant.py	<genexpr>z!Merchant.owner.<locals>.<genexpr>e   s     JdDMMTJ   Finclude_properties )r[   lennextr   rg   _asdict)self	owner_maps     rh   ownerzMerchant.ownerb   sO    ::#djj/A-JdjjJJIQ	 6 6% 6 PQQ    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rd   )use_as_default)rf   addresss     rh   ri   z+Merchant.default_address.<locals>.<genexpr>n   s     QW':P:PQrj   Frk   rm   )rY   rn   ro   r   rp   )rq   default_address_maps     rh   default_addresszMerchant.default_addressj   sr    >>c$..1A5"&QQSW# #*&*nnQ&7#  %---G  rt   c                    	 t         j                  dk(  rdnd}| j                  r9| j                  j                         r| d| j                  j                          S | j                  r9| j                  j                         r| d| j                  j                          S t         j
                  rt        t         j
                        S dS # t        $ r Y yw xY w)Ntruehttpshttpz://zhttp://localhost:3000)r   USE_SSLrG   striprH   SERVER_FRONTstr	Exception)rq   http_protocols     rh   active_domainzMerchant.active_domainx   s    		+,4,<,<,FFM~~$.."6"6"8'DNN,@,@,B+CDD##(:(:(@(@(B'D,>,>,D,D,F+GHH5=5J5Js8001gPgg 	+*	+s%   AC AC #(C C 	CCc                 D   	 ddl m} t               5 }|j                  |      j	                  |j
                  | j                  k(  |j                  dk(        j                         }|r|j                  cd d d        S 	 d d d        y# 1 sw Y   y xY w# t        $ r Y yw xY w)Nr   r   branding_info_logo )+src.apps.merchants.models.merchant_settingsr    r   queryfilterr$   r,   
field_namefirstvalueImportError)rq   r    dbrR   s       rh   logo_urlzMerchant.logo_url   s    	T BHH-.V(44?(337KK UW  %++      		s;   B A!B3	B =B>B BB B 	BBc           	      x     dt         f fd}t         |d       |d       |d       |d       |d            S )	Nr   c                 D     t         fdj                  D        d       S )Nc              3   V   K   | ]   }|j                   k(  s|j                   " y wrd   )r   r   )rf   recr   s     rh   ri   zCMerchant.preferences.<locals>._get_setting_value.<locals>.<genexpr>   s      Tss~~7STs   )))ro   r   )r   rq   s   `rh   _get_setting_valuez0Merchant.preferences.<locals>._get_setting_value   s    TdmmT rt   info_countryinfo_languageinfo_timezoneinfo_date_formatinfo_time_format)countrylanguagetimezonedate_formattime_format)r   dict)rq   r   s   ` rh   preferenceszMerchant.preferences   sH    	3 	 &~6'8'8*+=>*+=>
 	
rt   c                     d }| j                   rX| j                  rH| j                  r| j                  rd}|S d}|S d}| j                  dk(  rd}|S | j                  dk(  rd}|S d}|S d}|S )Nactivepending_approval
onboardingrejected	in_reviewpending_verficationinactive)r=   r>   r<   rL   tilled_status)rq   texts     rh   statuszMerchant.status   s    >>$$'''< 9  28  (D))Z7)  ++{:* 	 -  Drt   c                 p   	 ddl m} t               5 }|j                  t	        j
                  |j                              j                  |j                        j                  |j                  | j                  k(        j                         }|r|ndcddd       S # 1 sw Y   yxY w# t        $ r Y yw xY w)z2Calculate the average paid amount for the merchantr   r!           N) src.apps.invoices.models.invoicer"   r   r   r   avgpaid_amountjoinrT   r   r$   r,   scalarr   )rq   r"   r   	total_avgs       rh   
avg_volumezMerchant.avg_volume   s    	@ 7BHHTXXg&9&9:;T'**+VG//477:;VX	  %.y37 7 7  		s/   B) BB	B) B&"B) &B) )	B54B5c                 ^   	 ddl m} t               5 }t        j                         j
                  }t        j                         j                  }t        ||d      }|j                  t        j                  |j                              j                  |j                        j                  |j                  | j                  k(  |j                   |k\  |j                   t        j                         k        j#                         }|r|ndcddd       S # 1 sw Y   yxY w# t$        $ r Y yw xY w)z2Calculate the avg mtd paid amount for the merchantr   r!      r   N)r   r"   r   r   utcnowmonthyearr   r   r   r   r   rT   r   r$   r,   	paid_dater   r   )rq   r"   r   current_monthcurrent_yearstart_of_monthcurrent_avgs          rh   
mtd_volumezMerchant.mtd_volume   s    	@ ;B ( 1 7 7'055!),q!IHHTXXg&9&9:;T'**+V++tww6))^;))X__->>
 VX  '2{s; ; ;  		s/   D  C8D
	D  DD  D   	D,+D,N)J__name__
__module____qualname____doc____tablename__r   r   r,   r   int__annotations__r   r0   uuid4r   r2   r   r$   r   r5   r6   r7   r8   r9   r:   r;   r   r<   boolr=   r>   r   r   nowr@   r   rB   rC   rE   r	   rF   rG   rH   rI   rJ   r   rK   rL   rM   rN   r   rR   rV   r   merchant_address_maprY   r[   r\   r   r^   r`   r   r   rs   r   rz   r   r   r   r   r   floatr   r   rm   rt   rh   r'   r'   ,   s     M#GTY]^Bs^&tD'94::UYbfgD&,g$VC[TJCJ)6vbzVZei)jK&j%fSk2D&+2%26#;%NGVHSM"N&3F3K$&OHfXc]#O#0t#LE6(3- L#0t#LE6(3- L-:6#;QU-VOVHSM*V(5fSkD(QJx}%Q!.w!FL&,F+GUCIvd|C -gu EKE#0($((*#UJx U-:8d]e]a]e]e]g-hJx)*h-:8d-SJx)*S+8d+SM6(3-(S/<TD/Qvhsm,Q'4TD'IIvhsm$I+8+MM6(3-(M!.w!FL&,F&3Ht&LC"	#L)6w
:@Vae)fK&f.;Ht.TK*+T.;D4.PfXc]+P+8*ZBXcg+hM6(3-(h+7X+NJx'(N 2>n]g1hL&n-.h)5iK_)`Ivd9o&`+7Xb+cE6$'(c(4Yz(ZHfT)_%Z1=>Pak1lHfT,-.l T`&zT"F40N+O$P  HT HfT*B%CD  z      
+s 
+ 
+ #  $ 
T 
 
 $ $ $L E   E  rt   r'   ):sqlalchemy.dialects.postgresqlr   
sqlalchemyr   r   r   r   r   r	   r
   sqlalchemy.ormr   r   r   sqlalchemy.sqlr   r   sqlalchemy.sql.schemar   sqlalchemy.ext.hybridr   src.core.configr   src.core.utils.enumsr   src.apps.base.schemas.commonr   typingr   r   r   r   "src.apps.users.schemas.user_commonr   src.apps.base.models.baser   r0   sqlalchemy.orm.sessionr   src.core.databaser   r   r   r   r    r   r"   rO   rW   rZ   rS   Subscriptionr]   r_   Usermetadatar   r'   rm   rt   rh   <module>r      s    / S S S > > % ' 1 $ 3 6 6 6 9 *  * + L8DGMLL#&  D GMM
=*^45
<L12	 It Irt   