o
    $h32                  2   @   s  d dl Z d dlmZm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l/m0Z0m1Z1m2Z2 e Z3de4defddZ5e3j6d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j7ee$fdede4de4de4de4de4de4de4de4d ed!ee4 d"ee4 d#ee4 d$ee4 d%ee4 d&ee4 d'ee8 d(ee4 d)ee4 d*e4d+e4d,ee4 d-ej9d.e:f0d/d0Z;e3j<d1edd d2dddddd3deej7ee$fd4e=d5e=d6ee4 d7ee4 d8ee4 d9ee4 d:ee4 d;ee4 d<ee4 d-ej9d.e:fd=d>Z>e3j<d?edeej7fd@e4d-ej9fdAdBZ?e3j@d?edeej7fd@e4dCed-ej9fdDdEZAe3jBd?ededdFdGeej7fd@e4d-ej9fdHdIZCe3j<dJeee4e4f  deej7ee$edKdLdMfd-ej9d.e:d6e4fdNdOZDe3j<dPeee4eEf  deddQdGedKdLdMeej7ee$fdRe4d6e4d-ej9d.e:fdSdTZFe3j6dUeee4ef  deej7ee$fdVe d-ej9d.e:fdWdXZGe3j<dYee! dZgd[edKdLdMeej7ee$fd6e4d-ej9d.e:fd\d]ZHe3j<d^ee" dZgd[edKd_dMeej7ee$fd6e4d-ej9d.e:fd`daZIdS )b    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dbcurrent_userc           0   
      sr  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 }!|rzt|}!W n tjy   td	dd
w 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|
pd d|pd d|pd d|pd d|d|||!|"|||d}#zttd<i |#|}$|$d }%d }&|d!|dd"d#}'td<i |'}(t|(| |})t||}*td$ t|* |*d%}+t|+ td& i d'|d(d)d%|+d*| d+| d,|d|dd|d-d.d/d.d0d.d1|pdd.d2dd3dd4d5d6d"d7|%},td8 t|, td9 td<i |,}-t|-| |}.tt|$d:W S  ty }/ z|/d }/~/w ty }  ztd;t| d
d } ~ ww )=Nzpublic/workforceT)exist_ok.z
workforce-zpublic/workforce/wb  status_codedetailzInvalid JSON in 'skills' fieldz&Invalid JSON in 'certifications' fieldr;   r<   r=   r>   r?   r@   rA   rB   rC   
account_iduser_id_idrD   rE   rF   rG   rH   rI   )rJ   rK   rL   rM   rN   rO   zSsk@44140065signupg   )emailsactionrZ   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_verifiedFrolesworkforce_id,useruseruseruseruser149149149149149149149149z,============================================)contenti  r5   ) osmakedirsfilenameintr   now	timestampsplitopenreadwriter7   r2   r   strjsonloadsJSONDecodeError
isinstancelistgetr    r   r   r(   r)   printr   r'   r   r   	Exception)0r:   r;   r<   r=   r>   r?   r@   rA   rB   rC   rD   rE   rF   rG   rH   rI   rJ   rK   rL   rM   rN   rO   rP   rQ   photo_filenamery   extfilepathbufferrs   dob_datejoin_date_objr4   parsed_skillsparsed_certificationsworkforce_dataresultrq   default_passwordemail_actionemail_action_modelresemailversresVerificationCodeverification_code_resuser
user_model
resultUserher5   r5   r6   create_workforce_endpoint*   s   



	




	

r   z/list/
   ascskiplimitqstatusjoin_date_fromjoin_date_tosort_by
sort_orderrZ   c                 C   s   t | |||||||||	|
S )z-
    Returns a list of workforce entries
    )r!   )r   r   r   r   r   r   r   r   rZ   rP   rQ   r5   r5   r6   get_workforce   s   r   z/{workforce_id}rq   c                 C   "   t | |}|du rtddd|S )z)
    Returns workforce details by ID
    N  Workforce not foundrW   )r"   r   rq   rP   	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 updaterW   )r#   r   )rq   r   rP   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   rW   )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 NrZ   )get_workforce_dropdown_list)rP   rQ   r   rZ   r5   r5   r6   r      s   r   z/freeworkforce/{workforce_id}z$Type of workforce: free or scheduledtypec                    s4   |d }t d | dvrtdddt||| |S )NrZ   zCOMING FREE WQORKFORCE 2767276)free	scheduledrV   z(Invalid type. Use 'free' or 'scheduled'.rW   )r   r   r%   )r   r   rP   rQ   rZ   r5   r5   r6   get_workforce_list  s   r   z/detailspayloadc                    s$   |d }t ||| jdI d H }|S )NrZ   )rP   rZ   rq   )r&   rq   )r   rP   rQ   rZ   r   r5   r5   r6   #get_workforce_schedule_task_details  s   r   z/allwithstatusr   )r9   tagsc                    s   |d }t ||| S r   )workforce_serviceget_workforce_list_with_status)r   rP   rQ   rZ   r5   r5   r6   get_all_workforce_with_status3  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   rP   rQ   r5   r5   r6   get_tag_names@  s   	r   )Jrt   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   rw   r   r   putr   deleter   r   objectr   r   r   r   r5   r5   r5   r6   <module>   s   ,$$
	
 	






