o
    ^dir*                      @   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	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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e0de0de0de1de1de1de0de0de0de0de	de	dej2fddZ3e-j4dedeej/eefde0dej2d efd!d"Z5e-j4d#edeej/eefde0dej2d efd$d"Z5e-j4d%edeej/eefde0dej2d efd&d"Z5e-j4d'edeej/eefde0dej2d efd(d"Z5e-j4d)eddddeej/eefde0dee0 d*ee0 d+ee6 dej2d efd,d"Z5e-j4dedd d-dddeej/eefd.e1d/e1d*ee0 d0ee0 d1ee6 dej2d efd2d3Z7e-j4d4edeej/fde0dej2fd5d6Z8e-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e0de0de0de0de1de1de1de0de0de0de	de	dej2d efd7d8Z9e-j:d4edeej/fde0dej2fd9d:Z;e-j4d;edd d-dddddddddd<eej/eefde0d.e1d/e1d*ee0 d1ee6 d=ee0 dee1 dee0 dee0 d>ee0 d?ee0 d@ee0 dAee0 dej2d efdBd"Z5e-j4dCede
ddDdEeej/eefd*ee0 dej2d e<fdFdGZ=e-j>d4edeej/eefde0dHedej2fdIdJZ?dS )K    N)datetime)	APIRouterHTTPExceptionDependsRequestFormFile
UploadFileQuery)Optional)database)	WorkforceWorkforceCreateWorkforceUpdate
WorkforcesWorkforceUpdateBaseCheckListSelectAddonsSelectSkillsListSelectServiceCategorySelectSubServiceSelectAddonResponseList)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_okr1   r2   .-zpublic/services/wb  zInvalid dynamicFields format: status_codedetail)
r(   r'   r)   r*   r+   r,   r-   r.   r/   r0    )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/   r0   r1   r2   r3   	filenames	file_typeupload_filerC   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   

r\   z/getchecklist/{account_id}
account_idcurrent_userc                 C      t | ||S z8
    Returns a list of users for the given account.
    )r    r]   r3   r^   r=   r=   r[   	get_users[      	rb   z/getskills/{account_id}c                 C   r_   r`   )r"   ra   r=   r=   r[   rb   f   rc   z/getaddonlist/{account_id}c                 C   r_   r`   )r!   ra   r=   r=   r[   rb   q   rc   z$/getservicecategorylist/{account_id}c                 C   r_   r`   )r#   ra   r=   r=   r[   rb   |   rc   z/getsubservicelist/{account_id}q	is_parentc                 C   s   t | |||||S r`   )r$   )r]   r(   rd   re   r3   r^   r=   r=   r[   rb      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 errorr:   )rK   get_accounts_service	Exceptionr   )	rg   rh   rd   ri   rj   r3   r^   resultrW   r=   r=   r[   get_accounts   s   ro   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 foundr:   r9   zError retrieving workforce: )rK   get_account_servicer   rm   rN   )r]   r3   accountrW   r=   r=   r[   get_account   s   ru   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=   r[   
<dictcomp>   s    z"update_account.<locals>.<dictcomp>r9   r:   r=   )rO   itemsrK   r   r   rM   r   rN   )r]   r(   r'   r)   r*   r+   r,   r-   r.   r/   r1   r2   r3   r^   update_dataupdated_accountrZ   r=   r=   r[   update_account   s4   
r}   c              
   C   rp   )Nrq   rr   r:   r9   zError deleting workforce: )rK   r   r   rm   rN   )r]   r3   deleted_accountrW   r=   r=   r[   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)
isinstancerN   lower)valr=   r=   r[   
parse_bool  s   
zget_users.<locals>.parse_bool)r   )r]   rg   rh   rd   rj   r   r(   r+   r,   r   r   r   r   r3   r^   r   r=   r=   r[   rb      s
   z/addonslistzSearch query for addon name)defaultdescriptionc                 C   s   |d }t ||| S )Nr]   )addons_serviceget_addons_list_service)rd   r3   r^   r]   r=   r=   r[   get_addons_list  s   r   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 rolesr:   Nrq   rr   rk   )getr   r   rm   rN   )r]   r   r3   r^   updated_rolerW   r=   r=   r[   update_workforce  s   
r   )@r>   r   fastapir   r   r   r   r   r   r	   r
   typingr   app.dbr   app.v1.models.platform.servicesr   r   r   r   r   r   r   r   r   r   r   app.v1.models.saas.usersmodelr   app.v1.dependencies.authr   app.v1.services.platformr   rK   rH   services.platform.servicesr   r   r   r   r    r!   r"   r#   r$   routerpostget_mongo_dbrN   rA   MongoDBr\   r   rb   boolro   ru   r}   deleter   dictr   putr   r=   r=   r=   r[   <module>   s   (4,	
>


	
/	

