
    h,                        S SK J r   S SKJr  S SKJrJrJrJr  S SKJ	r	  S SK
JrJr  S SKJr  S SKJr  S SKJr  S S	KJr  S S
KJrJrJrJr  S SKJr  S SKJrJr  SrSr Sr!Sr"Sr#S\S\RH                  S\%4S jr&S\'S\'S\\(   S\\(   S\\)   S\\(   S\\(   S\\(   S\\(   S\\(   S \\(   S!\\(   S"\\(   S\\(\4   4S# jr*S!\(S\RH                  S\%4S$ jr+S!\(S%\S&\%S\RH                  S\%4
S' jr,S!\(S\RH                  S\%4S( jr-g))*    )datetime)parser)OptionalListDictAny)DuplicateKeyError)HTTPExceptionDepends)database)
send_email)ObjectId)str_to_objectid)AccountCreateAccountUpdateAccountAccounts)User)get_next_sequence_valueconvert_enumsaccountsusersemailsfleets	workforceaccountdbreturnc                    U R                  5       n[        R                  " 5       US'   UR                  S/ 5       Vs/ s H  o3R                  PM     snUS'   UR                  S/ 5       Vs/ s H  oDR                  PM     snUS'   UR                  S/ 5       Vs/ s H  oDR                  PM     snUS'   UR                  S5      (       a  US   R                  OS US'   UR                  S5      (       a  US   R                  OS US'   US   R                  US'   US   R                  US'   U[
           n[        S	U5      US	'   US
   nU[           nUR                  SUR                  S5      05      nU(       aG  UR                  SS5      US'   UR                  SUS   05      n	U	(       a  U	R                  SS5      US'    UR                  U5      n
[        U
R                  5      US'   US   US'    UR!                  S[#        US   5      0SSUS   005      nUR$                  S:X  a
  [        SSS9eSnSU R&                   S 3n[)        XU R*                  5        U$ s  snf s  snf s  snf ! [         aD  nS[        U5      ;   a  [        S5      eS[        U5      ;   a  [        S5      e[        S5      eS nAf[         a  n[        SS[        U5       3S9eS nAff = f! [         a  n[        SS[        U5       3S9eS nAff = f)!Ncreated_datepurposes_of_usefleet_capabilitiesworkforce_capabilitiesindustrysubscription_statusworkforce_countrevenuesaccounts_idr   emailreferred_by referral_code
account_idreferred_account_idz'Account with this email already exists.mobilez/Account with this mobile number already exists.zDuplicate key error.i  zDatabase error: )status_codedetail_iduser_id$setzFailed to update user: r   z&Failed to update user with account_id.z#Your Organization has been created!zHello zQ,

Thank you for signing up for our platform. We're excited to have you on board!)dictr   utcnowgetvalueCOLLECTION_NAMEr   COLLECTION_EMAILSfind_one
insert_oner	   str
ValueError	Exceptionr
   inserted_id
update_oner   modified_countnamer   r)   )r   r   account_datapurpose
capabilityaccounts_collectionusers_collectionemails_collectionemails_inforeferral_inforesulteupdate_resultsubjectbodys                  KC:\Suresh\moveshuttle\MDcreated\moveengine\app\v1\services\saas\accounts.pycreate_account_servicerR      sM   <<>L#+??#4L  EQDTDTUfhjDk&lDk}}Dk&lL"#MYM]M]^rtvMw)xMwz*:*:Mw)xL%&Q]QaQabz|~Q  .AQ:.>.>Q  .AL)*AMAQAQR\A]A]|J7==cgLWcWgWgh}W~W~,7L*M*S*S  EIL&'&23D&E&K&KL"#+J7==L_-"9-"LL'{ ,-#,,g|7G7G7P-QRK&1oomR&H]# )11?LQ^D_2`a2?2C2CLRT2UL./

Q$//= f001L!-e!4LX(33H\)456lL$>?@
 ##q(4\]] 4GGLL>!tuDwgmm,{ 'm)x .A6  5c!fFGGQNOO344 Q6Fs1vh4OPPQ  X6McRSfX4VWWXsM   I",I'I,I1 7'K% 1
K";?J::K"KK"%
L
/LL
skiplimitqaccount_type	is_activer%   reg_date_fromreg_date_toworkforce_count_rangefleet_count_rangerevenue_ranger-   r.   c                    S nS nU(       a,  UR                  5       (       a   [        R                  " U5      nU(       a,  UR                  5       (       a   [        R                  " U5      nUR                  SS5      S;  a  [	        S5      eUS   n0 nUR                  S5      S:w  a0  U(       d  UR                  S	5      nU(       a  UUS
'   O[	        S5      eU(       a  USS.nSU0SU0SU0SU0/US'   U(       a  UUS'   U(       a  UUS
'   Ub  UUS'   U(       a  UUS'   U(       d  U(       a  0 nU(       a  UUS'   U(       a  UUS'   UUS'   U(       a  UUS'   U	(       a  U	US'   U
(       a  U
US'   UR                  U5      R                  U 5      R                  U5      n/ nU Hj  n[        US   5      US'   [        US   5      US	'   SU;   a.  [        US   [        5      (       a  US   R                  5       US'   UR                  U5        Ml     UR                  U5      nUUS.$ ! [         a    [	        SU 35      ef = f! [         a    [	        SU 35      ef = f)NzInvalid reg_date_from: zInvalid reg_date_to: rolesr   )         zNot permitted to view accounts.r   r_   r-   r.   z(account_id is required but not provided.i)z$regexz$optionsaccount_namerC   countrycityz$orrV   rW   r%   z$gtez$lter    r&   fleet_countr'   r2   id)total_countr   )stripr   parser?   r>   r7   findrS   rT   r=   
isinstancer   	isoformatappendcount_documents)rS   rT   rU   rV   rW   r%   rX   rY   rZ   r[   r\   r-   r.   r   current_userdt_fromdt_to
collectionqueryregex_query
date_queryaccounts_cursoraccounts_listr   rh   s                            rQ   get_accounts_servicery   X   s   & GE,,..	Hll=1G {((**	DLL-E
 #94:;;JJE  A%%)),7J+5E'(GHH 	!"4[)[!$[!	
e  ,n':#$&k':#$%
!(Jv!&Jv *n #8 0m)j ooe,11$7==eDOM"GEN+ #GEN 3W$GN4KX)V)V&-n&=&G&G&IGN#W% # ,,U3K&MBBQ  	H6}oFGG	H
  	D4[MBCC	Ds   H) I )IIc                    U[            nUR                  S[        U 5      05      nU(       a  [        US   5      US'   US   US'   U[           nU[
           nUR                  SU 05      nUR                  SU 05      nXcS'   XsS'   [        UR                  SS5      5      [        UR                  SS5      5      [        UR                  SS5      5      UR                  S	5      S
.US'   [        SU 35        U$ )Nr2   r-   total_fleetstotal_workforcerV   r+   r%   subscription_typeactive_subscription_id)rV   r%   r}   r~   plan_detailsz	Account: )	r9   r;   r   r=   FLEETS_COLLECTIONWORKFORCE_COLLECTIONro   r7   print)r-   r   rs   r   fleets_collectionworkforce_collectionrf   r&   s           rQ   get_account_servicer      s   O$J!!5/**E"FGGWU^, '01!"67'77z8RS />>j?YZ #.%4!"  NB ?@#&w{{3H"'M#N!$W[[1Db%I!J&-kk2J&K	#
 
IgY
 N    account_updaterp   c                    U[            nU[           nUR                  S[        U 5      05      nU(       d  [	        S5      eUR                  S[        UR                  S5      5      05      nU(       d  [	        S5      eUR                  S5      S:w  a4  [        UR                  S5      5      U :w  a  [        S5        [	        S5      eUR                  S	S
1S9n[        U5      nUR                  S5      S:X  d  UR                  S5      S:X  a  UR                  S[        U 5      0SU05        UR                  S[        U 5      05      n	U	(       a  [        U	S   5      U	S'   U	S   U	S'   U	$ [	        S5      e)Nr2   Account not foundzUser not foundr^   r_   r-   zaccount id mismachz%Not authorized to update this accountr3   rV   )excluded   r4   zAccount not found after update)r9   USER_COLLECTION_NAMEr;   r   r>   r7   r=   r   r5   r   rA   )
r-   r   rp   r   rG   rH   existing_accountuser_documentaccount_updatesupdated_accounts
             rQ   update_account_servicer      s    _-./ +33UOJ<W4XY,-- %--uolFVFVW\F]6^._`M)**  A%}  ./:=&'DEE %))9n2M)NO#O4O
  C'<+;+;G+D+I&&z/J'KfVeMfg *22E?:;V3WXO!$_U%;!<(7(>%9::r   c                     U[            nUR                  S[        U 5      05      nU(       d  [        S5      eUR	                  S[        U 5      05        [        US   5      US'   US   US'   U$ )Nr2   r   r-   )r9   r;   r   r>   
delete_oner=   )r-   r   rs   r   s       rQ   delete_account_servicer   
  sr    O$J!!5/**E"FGG,--5/*"=>?(GEN#ENGLNr   N).r   dateutilr   typingr   r   r   r   pymongo.errorsr	   fastapir
   r   app.dbr   app.v1.integrations.SMTPmailerr   bsonr   app.v1.libraries.objectr   app.v1.models.saas.accountmodelr   r   r   r   app.v1.models.saas.usersmodelr   app.v1.services.sequencer   r   r9   r   r:   r   r   MongoDBr5   rR   intr=   boolry   r   r   r    r   rQ   <module>r      s     , , , *  5  3 [ [ . K   " BM Bx7G7G BD BH`C
`C`C }`C 3-	`C
 ~`C "#`C C=`C #`C $C=`C  }`C C=`C `C "#`C  
#s(^!`CFC X-=-= $ </;/;!/; /; 		/;
 
/;bs 0@0@ T r   