o
    _QhD                     @   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 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*dAd e#dee# de fd6d7Z+dAd e#dee# de fd8d9Z,dAd 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.dAd e#dee# de fd?d@Z/d5S )B    )datetime)DuplicateKeyError)database)
send_email)str_to_objectid)WorkforceCreateWorkforceUpdate	Workforce
Workforces)User)get_next_sequence_value_int)	ASCENDING
DESCENDING)Optional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&   r0   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$orr4   r5   _ididr   image/map_iconr   )total_countaccounts)r%   r"   r(   findr1   r2   r'   BASE_URL	FILE_PATH
isinstancer   	isoformatappendcount_documents)r1   r2   r3   r4   r5   r   r6   
collectionqueryregex_queryaccounts_cursoraccounts_listr   rF   r.   r.   r/   get_accounts_service>   s:   	 


rT   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 )NrA   r   rC   rD   rE   r   r   r   
service_idinputscategory_inputs)	r%   find_oner   r'   rI   rJ   r#   r"   SERVICECAT_COLLECTION_NAME)r   r   rO   r   rU   r   r.   r.   r/   get_account_servicer   s,   
rZ   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)NrA   Account not foundzUser not foundr   z%Not authorized to update this accountuser_id)excluder7      $set)r=   mobilezAccount not found after update)r%   USER_COLLECTION_NAMErX   r   r(   r'   r"   r    pop
update_oner=   ra   )r   r[   r6   r   r+   users_collectionexisting_accountuser_documentaccount_updatesuser_update_dataupdated_accountr.   r.   r/   update_account_service   s,   rk   c                 C   sX   |t  }|dt| i}|std|dt| i t|d |d< |d |d< |S )NrA   r\   r   )r%   rX   r   r(   
delete_oner'   )r   r   rO   r   r.   r.   r/   delete_account_service   s   rm   r   rU   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allr7   1  z#Not permitted to view all services.status_codedetailr   r:   r;   service_titleservice_descriptionr@   r5   r   rU   rn   ro   z%Y-%m-%dz$gtez$lter   )rz   r{   r   r   ascrA   r]   rB   r   
last_logindate_of_birth)rF   r   )r%   r"   HTTPExceptionr   strptimer   r   r!   rH   sortr1   r2   r'   rK   rL   rN   )r   r1   r2   r3   r5   r   rU   rn   ro   rp   rq   rr   rs   r   r6   re   rP   rQ   date_filtersort_fields
sort_fieldsort_directionr   userfieldrF   r.   r.   r/   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_unsetrA   r`   r   )r%   r    rd   r   matched_countrX   )r   r   r   roles_collectionupdate_datar,   roler.   r.   r/   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 )Nrt   r7   ru   rv    Not permitted to view all users.rw   r:   r;   checklist_namer@   activer   rA   r]   r}   r   )
CHECKLIST_COLLECTION_NAMEr"   r   r!   rH   r'   rK   r   rL   rN   r   r   r6   r3   re   rP   rQ   r   r   r   rF   r.   r.   r/   get_select_list  $   


r   c                 C   r   Nrt   r7   ru   rv   r   rw   r:   r;   r   r@   r   r   rA   r]   r}   r   )
ADDON_COLLECTION_NAMEr"   r   r!   rH   r'   rK   r   rL   rN   r   r.   r.   r/   get_addonselect_list0  r   r   c                 C   r   r   )
rY   r"   r   r!   rH   r'   rK   r   rL   rN   r   r.   r.   r/   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 )Nrt   r7   ru   rv   r   rw   r:   r;   rz   r@   Fr   	parent_idz$nerA   r]   rB   r}   r   )
r%   r"   r   r!   rH   r'   rK   r   rL   rN   )r   rU   r3   r   r   r6   re   rP   rQ   r   r   r   rF   r.   r.   r/   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=   r@   rA    r   )r]   r=   r   r   )SKILLS_COLLECTION_NAMEr!   rH   rM   r'   r"   )
r   r   r6   r3   re   rP   rQ   r   formatted_skillsskillr.   r.   r/   get_skillsselect_list  s   



r   )N)0r   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%   rb   r   r   r   rY   rI   rJ   MongoDBr    r0   intr'   boolrT   rZ   rk   rm   r   r   r   r   r   r   r   r.   r.   r.   r/   <module>   s    '
4
(F

=%%*& 0