o
    diHH                     @   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
mZmZmZ d dlmZ d dlmZ d d	lmZmZ d d
lmZmZ dZdZdZdZdZd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%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e$ d/ee$ de!fd0d1Z*d e$d2edej de!fd3d4Z+dCd e$dee$ de!fd6d7Z,dCd e$dee$ de!fd8d9Z-dCd e$dee$ de!fd:d;Z.d e$d)ee$ dee$ d<ee% de!f
d=d>Z/dCd e$dee$ de!fd?d@Z0dCd e$dee$ dee$e1f fdAdBZ2d5S )D    )datetime)DuplicateKeyError)database)
send_email)str_to_objectid)WorkforceCreateWorkforceUpdate	Workforce
Workforces)User)get_next_sequence_value_int)	ASCENDING
DESCENDING)OptionalDictservicesusers	checklistaddonsskillsservice_categoryzhttp://localhost:8003zpublic/servicesaccountdbreturnc              
   C   s   |   }t|dg |d< t|dg |d< t|dg |d< |dg  t |d< d|d< |t }td||d< z||}W n t	y^ } zd	t
|v rVtd
tdd }~ww t
|j|d< |S )Nr   r   r   dynamicFieldscreated_dateAstatuss_id	rule_namezPricing rule already exists.zDuplicate key error.
account_id)dictlistget
setdefaultr   utcnowCOLLECTION_NAMEr   
insert_oner   str
ValueErrorinserted_id)r   r   account_dataaccounts_collectionresulte r/   =/var/www/html/moveengine/app/v1/services/platform/services.pycreate_account_service   s&   r1   skiplimitqaccount_type	is_active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< |d ur?||d< ||| |}
g }|
D ]V}t|d |d< t|d |d< d|v rv|d rvt dt d|d  |d< d|v r|d rt dt d|d  |d< d|v rt	|d t
r|d  |d< || qN||}||dS )Nrolesr         zNot permitted to view accounts.iz$regexz$optionsaccount_namenamecountrycity$orr5   r6   _ididr    image/map_iconr   )total_countaccounts)r&   r#   r)   findr2   r3   r(   BASE_URL	FILE_PATH
isinstancer   	isoformatappendcount_documents)r2   r3   r4   r5   r6   r   r7   
collectionqueryregex_queryaccounts_cursoraccounts_listr   rG   r/   r/   r0   get_accounts_service>   s:   	 


rU   r    c                 C   s  |t  }|dt| i}|rt|d |d< |d |d< d|v r3|d r3t dt d|d  |d< d|v rI|d rIt dt d|d  |d< |dg  |dg  |dg  |d	}|r|t dt|i}|r{d
|v r{|d
 |d< |S g |d< |S g |d< |S )NrB   r    rD   rE   rF   r   r   r   
service_idinputscategory_inputs)	r&   find_oner   r(   rJ   rK   r$   r#   SERVICECAT_COLLECTION_NAME)r    r   rP   r   rV   r   r/   r/   r0   get_account_servicer   s,   
r[   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)NrB   Account not foundzUser not foundr    z%Not authorized to update this accountuser_id)excluder8      $set)r>   mobilezAccount not found after update)r&   USER_COLLECTION_NAMErY   r   r)   r(   r#   r!   pop
update_oner>   rb   )r    r\   r7   r   r,   users_collectionexisting_accountuser_documentaccount_updatesuser_update_dataupdated_accountr/   r/   r0   update_account_service   s,   rl   c                 C   sX   |t  }|dt| i}|std|dt| i t|d |d< |d |d< |S )NrB   r]   r    )r&   rY   r   r)   
delete_oner(   )r    r   rP   r   r/   r/   r0   delete_account_service   s   rn   r   rV   has_costis_vehicle_focusedcreated_date_fromcreated_date_tosort_by
sort_orderc                 C   s  |t  }i }| dkr|ddkrtddd| dkr| |d< |r0|dd	}d
|id|ig|d< |d ur8||d< |r>||d< |d urF||d< |d urN||d< |d urV||d< |	sZ|
rti }|	rft|	d|d< |
rpt|
d|d< ||d< d
dddd}||d}|dkrtnt}t||	||
||}|D ]*}t|d |d< t|d |d< dD ]}||v rt|| tr||  ||< qq||}||dS )Nallr8   1  z#Not permitted to view all services.status_codedetailr    r;   r<   service_titleservice_descriptionrA   r6   r   rV   ro   rp   z%Y-%m-%dz$gtez$lter   )r{   r|   r   r   ascrB   r^   rC   r   
last_logindate_of_birth)rG   r   )r&   r#   HTTPExceptionr   strptimer   r   r"   rI   sortr2   r3   r(   rL   rM   rO   )r    r2   r3   r4   r6   r   rV   ro   rp   rq   rr   rs   rt   r   r7   rf   rQ   rR   date_filtersort_fields
sort_fieldsort_directionr   userfieldrG   r/   r/   r0   get_users_service   s\   
"

r   role_updatec                    sR   |t  }|jdd}|dt| id|i}|jdkrd S |dt| i}|S )NT)exclude_unsetrB   ra   r   )r&   r!   re   r   matched_countrY   )r    r   r   roles_collectionupdate_datar-   roler/   r/   r0   update_workforce_service   s   
r   Nc                 C      |t  }i }| dkr|ddkrtddd|r%|dd}d	|ig|d
< d|d< t||}|D ]"}t|d |d< dD ]}	|	|v rSt||	 trS||	  ||	< q>q2|	|}
d|iS )Nru   r8   rv   rw    Not permitted to view all users.rx   r;   r<   checklist_namerA   activer   rB   r^   r~   r   )
CHECKLIST_COLLECTION_NAMEr#   r   r"   rI   r(   rL   r   rM   rO   r    r   r7   r4   rf   rQ   rR   r   r   r   rG   r/   r/   r0   get_select_list  $   


r   c                 C   r   Nru   r8   rv   rw   r   rx   r;   r<   r   rA   r   r   rB   r^   r~   r   )
ADDON_COLLECTION_NAMEr#   r   r"   rI   r(   rL   r   rM   rO   r   r/   r/   r0   get_addonselect_list0  r   r   c                 C   r   r   )
rZ   r#   r   r"   rI   r(   rL   r   rM   rO   r   r/   r/   r0   get_servicecatselect_listU  r   r   	is_parentc                 C   s   |t  }i }| dkr|ddkrtddd|r%|dd}d	|ig|d
< |du r6d|d< |d ur5||d< nddi|d< t||}	|	D ]*}
t|
d |
d< t|
d |
d< dD ]}||
v rnt|
| trn|
|  |
|< qYqE|	|}d|	iS )Nru   r8   rv   rw   r   rx   r;   r<   r{   rA   Fr   	parent_idz$nerB   r^   rC   r~   r   )
r&   r#   r   r"   rI   r(   rL   r   rM   rO   )r    rV   r4   r   r   r7   rf   rQ   rR   r   r   r   rG   r/   r/   r0   get_subserviceselect_list{  s0   	

r   c           
   
   C   s~   |t  }ddi}|r|dd}d|ig|d< t||}g }|D ]}	|t|	d |	ddt|	d	dd
 q!d|iS )Nr   r   r;   r<   r>   rA   rB    r    )r^   r>   r    r   )SKILLS_COLLECTION_NAMEr"   rI   rN   r(   r#   )
r    r   r7   r4   rf   rQ   rR   r   formatted_skillsskillr/   r/   r0   get_skillsselect_list  s   



r   c                 C   s   | t  }d|i}|rt|dd|d< ||dd}g }|D ])}|t|d |d|d|d	|d|d
|d|dd q!t||dS )Nr    r;   r<   r>   r   rB   	addons_idr^   r   updated_date)rC   r   r    r^   r>   r   r   r   )rG   r   )	r   reescaperI   r   rN   r(   r#   len)r   r    r4   rP   filtersaddons_cursoraddons_listaddonr/   r/   r0   get_addons_list_service  s(   

r   )N)3r   pymongo.errorsr   app.dbr   app.v1.integrations.SMTPmailerr   app.v1.libraries.objectr   app.v1.models.platform.servicesr   r   r	   r
   app.v1.models.saas.usersmodelr   app.v1.services.sequencer   pymongor   r   typingr   r   r&   rc   r   r   r   rZ   rJ   rK   MongoDBr!   r1   intr(   boolrU   r[   rl   rn   r   r   r   r   r   r   r   objectr   r/   r/   r/   r0   <module>   s    '
4
(F

=%%*&0(