o
    *i9                  4   @   s~  d dl Z d dlmZ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 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m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/ ddl0m1Z1m2Z2m3Z3 e Z4de5defddZ6e4j7d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
de
de
de
de
de
de
de
de
de
deej8ee%fdede5de5de5de5de5de5de5de5d ed!ee5 d"ee5 d#ee5 d$ee5 d%ee5 d&ee5 d'ee9 d(ee5 d)ee5 d*e5d+e5d,ee5 d-ee5 d.ej:d/e;f2d0d1Z<e4j=d2edd d3dddddd4deej8ee%fd5e>d6e>d7ee5 d8ee5 d9ee5 d:ee5 d;ee5 d<ee5 d=ee5 d.ej:d/e;fd>d?Z?e4j=d@edeej8fdAe5d.ej:fdBdCZ@e4jAd@edeej8fdAe5dDe d.ej:fdEdFZBe4jCd@ede	ddGdHeej8fdAe5d.ej:fdIdJZDe4j=dKeee5e5f  deej8ee%edLdMdNfd.ej:d/e;d7e5fdOdPZEe4j=dQeee5eFf  deddRdHedLdMdNeddSdNeddTdNeddUdNeddVdNeddWdNeddXdNeddYdNeej8ee%fdZee5 d[e5d7e5d(eee5  d\ee9 d]ee9 d-ee5 d^ee5 d_ee d`ee d.ej:d/e;fdadbZGe4j7dceee5ef  deej8ee%fdde!d.ej:d/e;fdedfZHe4j=dgee" dhgdiedLdMdNeej8ee%fd7e5d.ej:d/e;fdjdkZIe4j=dlee# dhgdiedLdmdNeej8ee%fd7e5d.ej:d/e;fdndoZJdS )p    N)datedatetime)		APIRouterDependsHTTPExceptionBackgroundTasksPathFormFile
UploadFileQuery)JSONResponse)jsonable_encoder)ListOptionalDictAny   )UserBaseEmailAction)database)	WorkforceWorkforceBaseWorkforceResponseListWorkforceUpdateWorkforceDetailsRequestWorkforceResponseTagNameResponse)get_current_userdetails)str_to_objectid)create_workforce_serviceget_workforce_serviceread_workforce_serviceupdate_workforce_servicedelete_workforce_serviceget_workforce_list_by_type.get_workforce_details_with_tasks_and_schedules)create_user_servicesend_email_verification_serviceread_user_serviceby_emaildate_strreturnc              
   C   s^   zd| v rt | dd W S t | d W S  ttfy. } ztd|  d }~ww )NTZ z%Y-%m-%dzInvalid date format: )r   fromisoformatreplacer   strptime
ValueErrorAttributeError)r*   e r5   =/var/www/html/moveengine/app/v1/routers/platform/workforce.py
parse_date#   s   r7   /)response_model.Tbackground_tasks
first_name	last_namemobile_numberemail_idworkforce_category_idgenderdate_of_birth	join_datephoto
license_idnational_idemergency_contactshift_timingaddressblood_groupis_humanskillscertificationsworkforce_category_nameskills_nametag_nameaddons_namedbcurrent_userc           2   
      s  t jddd d }|	rM|	jrMtt  }|	jdd }d| d| }d| }t|d}|		 I d H }|
| W d    n1 sHw   Y  z
t|}t|} W n tyk }! ztd	t|!d
d }!~!ww g }"|d urt| }#|#dr|#drzdd t|#D }"W n, ty   td	dd
w d|#v rdd |#dD }"n|# rt|#g}"ntd	dd
g }$|rzt|}$t|$tstW n tjtfy   td	dd
w i d|d|d|d|d|d|d|d| d|d|ddt|d d |
pd d!|pd d"|pd d#|pd d$|d%|||"|$||||d&d'}%zttdCi |%|}&|&d }'d(}(|d)|dd*d+})tdCi |)}*t|*| |}+t||},td, t|, |,d-}-t|- td. i d/|d0d1d-|-d2| d3| d4|d|dd|d5d6d7d6d8d6d9|pd6d:dd;dd<d&d=d*d>|'}.td? t|. td@ t dCi |.}/t!|/| |}0t"t#|&dAW S  ty }1 z|1d }1~1w ty }! ztdBt|!d
d }!~!ww )DNzpublic/workforceT)exist_ok.z
workforce-zpublic/workforce/wb  status_codedetail[]c                 S   s   g | ]}t |qS r5   )int.0xr5   r5   r6   
<listcomp>r   s    z-create_workforce_endpoint.<locals>.<listcomp>zInvalid skills JSON array,c                 S   s$   g | ]}|   rt|  qS r5   )stripisdigitr]   r^   r5   r5   r6   ra   x   s
    
z,Skills must be comma-separated or JSON arrayz&Invalid JSON in 'certifications' fieldr;   r<   r=   r>   r?   r@   rA   rB   rC   
account_iduser_id_idrD   rE   rF   rG   rH   rI   F)rJ   rK   rL   rM   rN   rO   rP   is_fleet_assignedzSsk@44140065signupg   )emailsactionre   role>send_email_verification_servicesend_email_verification_serviceverificationCodez>==============================================================emailpasswordzDefault@123name mobilegoogle_connectr.   linkedin_connecttokenpicurl	is_activeis_verifiedmobile_verifiedrolesworkforce_id,useruseruseruseruser149149149149149149149149z,============================================)contenti  r5   )$osmakedirsfilenamer]   r   now	timestampsplitopenreadwriter7   r2   r   strrc   
startswithendswithjsonloads	Exceptionrd   
isinstancelistJSONDecodeErrorgetr    r   r   r(   r)   printr   r'   r   r   )2r:   r;   r<   r=   r>   r?   r@   rA   rB   rC   rD   rE   rF   rG   rH   rI   rJ   rK   rL   rM   rN   rO   rP   rQ   rR   photo_filenamer   extfilepathbufferr   dob_datejoin_date_objr4   parsed_skillssparsed_certificationsworkforce_dataresultr}   default_passwordemail_actionemail_action_modelresemailversresVerificationCodeverification_code_resuser
user_model
resultUserher5   r5   r6   create_workforce_endpoint+   s6  !



	








	

r   z/list/
   ascskiplimitqstatusjoin_date_fromjoin_date_tosort_by
sort_orderre   c                 C   s   t | |||||||||	|
S )z-
    Returns a list of workforce entries
    )r!   )r   r   r   r   r   r   r   r   re   rQ   rR   r5   r5   r6   get_workforce   s   r   z/{workforce_id}r}   c                 C   "   t | |}|du rtddd|S )z)
    Returns workforce details by ID
    N  Workforce not foundrX   )r"   r   r}   rQ   	workforcer5   r5   r6   read_workforce      
r   r   c                 C   s$   t | ||}|du rtddd|S )z'
    Updates workforce information
    Nr   z Workforce not found after updaterX   )r#   r   )r}   r   rQ   updated_workforcer5   r5   r6   update_workforce  s   	r   zThe ID of the workforce entry)descriptionc                 C   r   )z)
    Deletes a workforce entry by ID
    Nr   r   rX   )r$   r   r   r5   r5   r6   delete_workforce  r   r   z/dropdown/workforcer.   zSearch query for workforce name)defaultr   c                    s   |d }t | ||S Nre   )get_workforce_dropdown_list)rQ   rR   r   re   r5   r5   r6   r     s   r   z/freeworkforce/{workforce_id}z$Type of workforce: free or scheduledzSkill IDs to filter workforcez9True = mapped (assigned), False = unmapped (not assigned)zFilter by can_fly true/falsezFilter by addons namezFilter by model namezTask start time (ISO format)zTask end time (ISO format)customer_idtypevehicle_requiredcan_flyvehicle_model_id
start_timeend_timec                    sD   |d }t d |dvrtdddt|
||||||||||	| S )Nre   zCOMING FREE WQORKFORCE 2767276)free	scheduledrW   z(Invalid type. Use 'free' or 'scheduled'.rX   )r   r   r%   )r   r   r   rK   r   r   rP   r   r   r   rQ   rR   re   r5   r5   r6   get_workforce_list1  s   r   z/detailspayloadc                    s$   |d }t ||| jdI d H }|S )Nre   )rQ   re   r}   )r&   r}   )r   rQ   rR   re   r   r5   r5   r6   #get_workforce_schedule_task_detailsG  s   r   z/allwithstatusr   )r9   tagsc                    s   |d }t ||| S r   )workforce_serviceget_workforce_list_with_status)r   rQ   rR   re   r5   r5   r6   get_all_workforce_with_status]  s   
r   z/tagszSearch query for tag namec                    s   t || S )zB
    Returns the list of tag names (supports search with `q`)
    )r   get_tag_name_list)r   rQ   rR   r5   r5   r6   get_tag_namesj  s   	r   )Kr   r   r   r   fastapir   r   r   r   r   r	   r
   r   r   fastapi.responsesr   fastapi.encodersr   typingr   r   r   r   models.saas.usersmodelr   r   app.dbr   models.platform.workforcemodelr   r   r   r   r   r   r   dependencies.authr   libraries.objectr   services.platform.workforcer    r!   r"   r#   r$   r%   r&   services.saas.usersr'   r(   r)   routerr   r7   postget_mongo_dbboolMongoDBdictr   r   r]   r   r   putr   deleter   r   objectr   r   r   r   r5   r5   r5   r6   <module>   s   ,$$
	
 9	












	


