o
    Ah(                      @   s  d dl Z 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 d dlmZ d dlmZmZmZmZmZmZmZmZmZmZ d dlmZ d dlmZ d d	lmZ d dl Z d
dl!m"Z"m#Z#m$Z$m%Z%m&Z&m'Z'm(Z(m)Z)m*Z* e Z+e+j,dedededededededededededededeej-fde.de.de.de/de/de/de.de.de.de.de	de	dej0fddZ1e+j2dedeej-eefde.dej0d efd!d"Z3e+j2d#edeej-eefde.dej0d efd$d"Z3e+j2d%edeej-eefde.dej0d efd&d"Z3e+j2d'edeej-eefde.dej0d efd(d"Z3e+j2d)eddddeej-eefde.dee. d*ee. d+ee4 dej0d efd,d"Z3e+j2dedd d-dddeej-eefd.e/d/e/d*ee. d0ee. d1ee4 dej0d efd2d3Z5e+j2d4edeej-fde.dej0fd5d6Z6e+j,d4ededededededededededededeej-eefde.de.de.de.de/de/de/de.de.de.de	de	dej0d efd7d8Z7e+j8d4edeej-fde.dej0fd9d:Z9e+j2d;edd d-dddddddddd<eej-eefde.d.e/d/e/d*ee. d1ee4 d=ee. dee/ dee. dee. d>ee. d?ee. d@ee. dAee. dej0d efdBd"Z3e+j:d4edeej-eefde.dCedej0fdDdEZ;dS )F    N)datetime)	APIRouterHTTPExceptionDependsRequestFormFile
UploadFile)Optional)database)
	WorkforceWorkforceCreateWorkforceUpdate
WorkforcesWorkforceUpdateBaseCheckListSelectAddonsSelectSkillsListSelectServiceCategorySelectSubServiceSelect)User)get_current_userdetails)services   )	get_users_serviceupdate_account_servicedelete_account_serviceupdate_workforce_serviceget_select_listget_addonselect_listget_skillsselect_listget_servicecatselect_listget_subserviceselect_list/)response_model.service_title
service_idservice_descriptioncapacity_jobshas_costis_vehicle_focusedskillsaddons	checklistdynamicFieldsimagemap_icondbc                    s`  t jddd i }d|
fd|ffD ]M\}}|r_|jr_tt  }|jdd }| d| d| }d	| }t|d
}|	 I d H }|
| W d    n1 sVw   Y  |||< qzt|	}W n tjy} } z	tdd| dd }~ww || ||||||||d
|}zttdi ||}|W S  ty } ztdt|dd }~ww )Nzpublic/servicesT)exist_okr/   r0   .-zpublic/services/wb  zInvalid dynamicFields format: status_codedetail)
r&   r%   r'   r(   r)   r*   r+   r,   r-   r.    )osmakedirsfilenameintr   now	timestampsplitopenreadwritejsonloadsJSONDecodeErrorr   account_servicecreate_account_servicer   
ValueErrorstr)r%   r&   r'   r(   r)   r*   r+   r,   r-   r.   r/   r0   r1   	filenames	file_typeupload_filerA   extr>   filepathbuffercontentparsed_dynamic_fieldseaccount_datacreated_accountver;   r;   </var/www/html/moveengine/app/v1/routers/platform/services.pycreate_account   sX   

rZ   z/getchecklist/{account_id}
account_idcurrent_userc                 C      t | ||S z8
    Returns a list of users for the given account.
    )r   r[   r1   r\   r;   r;   rY   	get_users[      	r`   z/getskills/{account_id}c                 C   r]   r^   )r    r_   r;   r;   rY   r`   f   ra   z/getaddonlist/{account_id}c                 C   r]   r^   )r   r_   r;   r;   rY   r`   q   ra   z$/getservicecategorylist/{account_id}c                 C   r]   r^   )r!   r_   r;   r;   rY   r`   |   ra   z/getsubservicelist/{account_id}q	is_parentc                 C   s   t | |||||S r^   )r"   )r[   r&   rb   rc   r1   r\   r;   r;   rY   r`      s   
   skiplimitaccount_type	is_activec           	   
   C   sB   zt | ||||||}|W S  ty  } ztdddd }~ww )N  zInternal server errorr8   )rI   get_accounts_service	Exceptionr   )	re   rf   rb   rg   rh   r1   r\   resultrU   r;   r;   rY   get_accounts   s   rm   z/{account_id}c              
   C   V   zt | |}|d u rtddd|W S  ty* } ztddt| dd }~ww )N  Workforce not foundr8   r7   zError retrieving workforce: )rI   get_account_servicer   rk   rL   )r[   r1   accountrU   r;   r;   rY   get_account   s   rs   c              
      sz   |||||||||	d	t }dd | D }zt| tdi |||}|W S  ty< } ztdt|dd }~ww )N)	r&   r%   r'   r(   r)   r*   r+   r,   r-   c                 S   s   i | ]\}}|d ur||qS )Nr;   ).0kvr;   r;   rY   
<dictcomp>   s    z"update_account.<locals>.<dictcomp>r7   r8   r;   )rM   itemsrI   r   r   rK   r   rL   )r[   r&   r%   r'   r(   r)   r*   r+   r,   r-   r/   r0   r1   r\   update_dataupdated_accountrX   r;   r;   rY   update_account   s4   
r{   c              
   C   rn   )Nro   rp   r8   r7   zError deleting workforce: )rI   r   r   rk   rL   )r[   r1   deleted_accountrU   r;   r;   rY   delete_account   s   r}   z/list/{account_id}/ascstatuscreated_date_fromcreated_date_tosort_by
sort_orderc                 C   s4   dd }t | |||||||||||	|
||||S )Nc                 S   s"   t | tr| r|  dkS d S | S )Ntrue)
isinstancerL   lower)valr;   r;   rY   
parse_bool  s   
zget_users.<locals>.parse_bool)r   )r[   re   rf   rb   rh   r   r&   r)   r*   r   r   r   r   r1   r\   r   r;   r;   rY   r`      s
   role_updatec              
      s|   | dddkr| ddstdddzt| ||I d	H }|s'td
dd|W S  ty= } ztdt|dd	}~ww )z"
    Update an existing role.
    rolesr      is_account_adminFi  zNot authorized to update rolesr8   Nro   rp   ri   )getr   r   rk   rL   )r[   r   r1   r\   updated_rolerU   r;   r;   rY   update_workforce  s   
r   )<r<   r   fastapir   r   r   r   r   r   r	   typingr
   app.dbr   app.v1.models.platform.servicesr   r   r   r   r   r   r   r   r   r   app.v1.models.saas.usersmodelr   app.v1.dependencies.authr   app.v1.services.platformr   rI   rF   services.platform.servicesr   r   r   r   r   r   r    r!   r"   routerpostget_mongo_dbrL   r?   MongoDBrZ   r   r`   boolrm   rs   r{   deleter}   putr   r;   r;   r;   rY   <module>   s   $0,	
>


	
/	
