o
    y,h'                     @   s  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mZ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 dZdZdedejdefddZdedede de dee  dejdedefddZ!de dejdefddZ"de dededejdef
dd Z#de dejdefd!d"Z$de dededee  dee  d#ee  d$ee% d%ee  d&ee  d'ee  d(ee  defd)d*Z&de d+edejdefd,d-Z'de d+edejdee fd.d/Z(d0S )1    )HTTPException)datetime)DuplicateKeyError)database)
send_email)str_to_objectid)PricingRulePricingRulesPricingRuleStatusUpdate)User)get_next_sequence_valueconvert_enumsget_next_sequence_value_int)	ASCENDING
DESCENDING)Optionalpricing_rulesusersaccountdbreturnc              
   C   s   |   }t |d< |t }td||d< z||}W n ty6 } zdt|v r.tdtdd }~ww t|j	|d< |S )Ncreated_datepricing_rules_id	rule_namezPricing rule already exists.zDuplicate key error.
account_id)
dictr   utcnowCOLLECTION_NAMEr   
insert_oner   str
ValueErrorinserted_id)r   r   account_dataaccounts_collectionresulte r&   A/var/www/html/moveengine/app/v1/services/platform/pricingrules.pycreate_account_service   s   r(   skiplimitqaccount_typestatuscurrent_userc                 C   s  |t  }|dddkr|dddkrtdi }|r1|dd}	d|	id	|	id
|	id|	ig|d< |r7||d< |r=||d< ||| |}
g }|
D ]*}t|d |d< t|d |d< d|v rqt|d trq|d 	 |d< |
| qL||}||dS )Nrolesr         zNot permitted to view accounts.iz$regexz$optionsaccount_namenamecountrycity$orr,   r-   _ididr   r   )total_countaccounts)r   getr    findr)   r*   r   
isinstancer   	isoformatappendcount_documents)r)   r*   r+   r,   r-   r   r.   
collectionqueryregex_queryaccounts_cursoraccounts_listr   r;   r&   r&   r'   get_accounts_service.   s2   	 


rH   r   c                 C   s>   |t  }|dt| i}|rt|d |d< |d |d< |S )Nr9   r   )r   find_oner   r   r   r   rC   r   r&   r&   r'   get_account_service[   s   rK   account_updatec                 C   s
  |t  }|t }|dt| i}|std|d|d i}|s&tdt|d| kr3td|jdhd}|dd  |dd	krS|	dt| id
|i |j
|jd}	|	d|d id
|	i |dt| i}
|
rt|
d |
d< |
d |
d< |
S td)Nr9   Account not foundzUser not foundr   z%Not authorized to update this accountuser_id)excluder/      $set)r5   mobilezAccount not found after update)r   USER_COLLECTION_NAMErI   r   r    r   r=   r   pop
update_oner5   rR   )r   rL   r.   r   r#   users_collectionexisting_accountuser_documentaccount_updatesuser_update_dataupdated_accountr&   r&   r'   update_account_servicec   s,   r\   c                 C   sX   |t  }|dt| i}|std|dt| i t|d |d< |d |d< |S )Nr9   rM   r   )r   rI   r   r    
delete_oner   rJ   r&   r&   r'   delete_account_service   s   r^   pricing_type	is_activecreated_date_fromcreated_date_tosort_by
sort_orderc                 C   s  |t  }i }td | dkr|ddkrtddd| dkr#| |d< |r1|d	d
}d|ig|d< |r7||d< |r=||d< |d urE||d< |sI|rci }|rUt|d|d< |r_t|d|d< ||d< dddddddd}||	d}|
dkrytnt}t|	|
||||}|D ]*}t|d |d< t|d |d< dD ]}||v rt|| tr||  ||< qq||}||dS )N'162162162162162162162162162162162162162allr/   1i  z Not permitted to view all users.)status_codedetailr   r2   r3   r   r8   r-   r_   r`   z%Y-%m-%dz$gtez$lter   	base_costrateunit)r   r_   rj   rk   rl   r-   r   ascr9   rN   r:   )r   
last_logindate_of_birth)r;   r   )r   printr=   r   r   strptimer   r   listr>   sortr)   r*   r   r?   r@   rB   )r   r)   r*   r+   r-   r_   r`   ra   rb   rc   rd   r   r.   rV   rD   rE   
date_querysort_fields
sort_fieldsort_directionr   userfieldr;   r&   r&   r'   get_users_service   sX   
	"

rz   role_updatec                    sR   |t  }|jdd}|dt| id|i}|jdkrd S |dt| i}|S )NT)exclude_unsetr9   rQ   r   )r   r   rU   r   matched_countrI   )r   r{   r   roles_collectionupdate_datar$   roler&   r&   r'   update_pricingrules_service   s   
r   c                    s   |t  }tdt  |dt| i}i }|jr|j|d< |dt| id|i}td| |jdkr5|S |dt| i}|S )NzTupdate-statusupdate-statusupdate-statusupdate-statusupdate-status 111199999333333333r9   r-   rQ   z\update-statusupdate-statusupdate-statusupdate-statusupdate-status 111199999333333333 UPDATEDr   )r   rp   rI   r   r-   rU   r}   )r   r{   r   r~   existing_roler   r$   r   r&   r&   r'   update_record_status   s   



r   N))fastapir   r   pymongo.errorsr   app.dbr   app.v1.integrations.SMTPmailerr   app.v1.libraries.objectr   #app.v1.models.platform.pricingrulesr   r	   r
   app.v1.models.saas.usersmodelr   app.v1.services.sequencer   r   r   pymongor   r   typingr   r   rS   MongoDBr   r(   intr   rH   rK   r\   r^   boolrz   r   r   r&   r&   r&   r'   <module>   s    
-
(
	

H$