o
    ނi                    @   s  d dl Z d dlZd dlZd dlmZ d dlmZmZ d dlmZ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mZmZmZmZmZmZmZmZmZmZmZm Z m!Z!m"Z"m#Z#m$Z$m%Z%m&Z&m'Z'm(Z(m)Z)m*Z*m+Z+m,Z,m-Z-m.Z.m/Z/m0Z0m1Z1 d d
l2m3Z3 ddl4m5Z5 dd Z6dfddZ7dd Z8dd Z9dd Z:dd Z;dd Z<dd Z=dd Z>dd Z?d d! Z@d"d# ZAd$d% ZBd&d' ZCd(d) ZDd*d+ ZEd,d- ZFd.d/ ZGd0d1 ZHd2d3 ZId4d5 ZJd6d7 ZKd8d9 ZLd:d; ZMd<d= ZNd>d? ZOd@dA ZPdBdC ZQdDdE ZRdFdG ZSdHdI ZTdJdK ZUdLdM ZVdNdO ZWdPdQ ZXdRdS ZYe3jZdTdU Z[dVdW Z\dfdXdYZ]dZd[ Z^d\d] Z_d^d_ Z`d`da Zadbdc Zbddde ZcdS )g    N)datetime)urljoinunquote)QMax)decrypt_code)	getConfig   )	sendEmail)!AccountBrulesCompanyCreditsReferenceId	CandidateRegistrationCallScheduleUserJobDescCompanyCompanyDataWorkflow	QResponse
IvFeedbackEmail_templateBrandingSourceProfileResumeProfileAwardsProfileActivityProfileEducationProfileExperienceProfileProjectsProfileSkillsProfileCertificates
ResumeFileWorkCalProfileAddressLookupmaster	WorkspaceJobBoardCredentialJDJobBoards)transaction)convert_word_binary_to_pdfc              
   C   s*   zt d W d S  ty } z d }~ww )NdataObjs)print	Exception)r.   e r2   3/home/acert/hirelines/app_api/functions/database.pyaddCompanyDataDB   s   r4   c           3      C   sv  z+ddl m} tjj|d}tjj|| d d }tjj||j	d}t
 d }|d }	|	d	kr4d	}
ntjj|| d
 | d d}
|
rH|
d	kr*|j|jkr'd}d| v rytjj|| d d }|rg|j}nt|| d | d d}|  |j}t| d | d || d | d | d
 |t dd	}|  tjj|d}t d}tjjdd||d\}}|dkrd}||_|  |dkr|jd }||_|  tdt|j}|j |j | }||_|  d}d}tjj| d
 d }|r|jpd}|j pd}t
 d d  }d!}t!||}| d | d | d | d | d ||j||d"	}t"j#||dd#}|j$}|r$t%&|'d$}|d% } t(|j)| d |j*|j+|j,d&| d' d(}!|!  |!j	d&krut-|j)|| d d	|j+d)}"|"  |j)|!j	d*}#||| d' | d  d	}$|j|jkrd+}$|j|j }%nd	}$|j}%t
 d }t|d, }&t|d- }'|%|'krd	}(n
|%|&krd.}(nd/}(d	})|(d	ks|(d.kr!|j.d+kr!d+})tjj|d}*d+|*_.|*  d0}+t/t0jj||+d/d1j1ddd2},||$|(|,|%|)d3}-t
 d d  }d4}t!||}.t"j#|.|-dd#}/|/j$}0|0r!t%&|0'd$}1|#W S W d S W d5S W d6S  t2y: }2 z d }2~2ww )7Nr   )deductCreditsService	companyidz
begin-from)r7   paperid)r7   	transtype
APP_CONFIGregister_candidate_once_per_jdNjdemail)r7   jobidr>    source-coder7   coder7   rC   label	firstnamelastnamemobileP)	rF   rG   r7   r>   rH   r?   sourceregistrationdatestatusid%yRz{:03}typeprefix1prefix2Tr	   Fz{:05}DOMAINacertz/api/hirelines-add-candidate)	rF   rG   r>   rH   paper_id
company_idreference_idjd_titlejd_desc)jsonverifyutf-8dataI	papertype)candidateidr8   rK   r7   r?   rL   ra   )rb   hridrW   rL   r7   )rb   ra   Ylowcredits_warningreg_stop_warningLAzHR-Admin)r7   role__containsrL   flat)rX   credit_availablity_statcredits_statushradmin_emails_listcurrent_creditssend_lowcredits_notificationz/api/credits-notificationinsufficient_creditscandidate_already_registered)3app_api.functions.servicesr5   r   objectsgetr   filterlastr   ra   r   r   balancecreditsr   rC   saver   nowr   strftimer   get_or_createformatlastidstrintrS   rT   rb   r   titledescriptionr   requestspostcontentr\   loadsdecoder   rN   rK   r7   r?   r   lowcreditsnotificationlistr   values_listr0   )3r.   cidworkflow_datauser_idr5   company_accountworkflowcompany_credits
app_configr;   check_candidate_registeredsource_coderJ   
new_source	candidatecompany_datayear	refid_obj
refid_flagr   candidate_id_seqcandidate_coderZ   r[   
jd_detailsacert_domainendpointurlcandidate_datasend_candidate_dataresponse_content	json_data
acert_datac_registrationcall_schedulec_datarl   ro   re   rf   rm   rp   company_account_hr_admin_labelrn   credits_infocredits_notification_urlcredits_notification_requestcredits_notification_respcredits_notification_resp_objr1   r2   r2   r3   addCandidateDB   s$  






 
Rr   c              
   C   s  z2t jj| d}t|d}| r||d< n
t|}t||d< tjj|d d	 }|r1d
|d dd d }t|d}|d ddd  }|d	 }	tjt|	d
t|dtddtddB }
td|
 |
s.tjj|jd}t d d }t|	t|jdd t|j }|d}| }|| }||_|	|_|d |_d|_||_| |_|j|_|  tjj|j d}|j!d}t jj|jd}|j" d|j" }|j#|j|j$|j|j|||j|d d	}t d d }d}t%||}t&j'||d}|j(r+t)jj|j(dd* }|r"t+|j(d d!|j W d#S t+|j(dd"|j W d#S W d$S W d%S  t,yG } ztt|  d }~ww )&NrM   candidate_idrb    slot_id__   %a-%d-%b-%Y %I_%M_%pr   interviewerid	datentimeSrL   rP   scheduled_checkMEETING_CONFIGmeeting_link-r@   r^   instructions%d-%b-%Y %I:%M %p,schedule_type		job_titlemeetinglink	int_paperr   interviewerinterview_time	to_emailsr   r   rU   rV   /api/schedule-interviewr\   IS)	profileidactivitycodeRSzInterview Re-ScheduledInterview ScheduledSlot BookedPlease select another slotNo Candidate)-r   rt   ru   r   isdigitr   r   r   rv   rw   joinsplitr   strptimer   r/   r   rb   r   replacerN   encodehexr   r   r   rL   r   rc   r7   rz   r   r?   r|   r>   r   rW   r   r   r   r   r   existsaddProfileActivityDBr0   )r   r.   userraw_cidencrypted_cidcall_detailsdatentime_strr   r   interviewer_idr   r   meeting_configstring_enc_st_hex_coder   job_descr   to_mailsinterview_datar   r   r   send_interview_datainterview_existsr1   r2   r2   r3   scheduleInterviewDB   s   

$


r   c                 C   s(  zt d|  | d dkrd }d| v r+| d dkrd}| d dkr#d}| d d	kr+d
}t|d| v r5| d nd d |d| v r@| d nd dd}|  |j}tjj|d  }d }d| v ra| d }d}d| v rq| d rqt| d }t	|| d || d ||d}|  |j
|d< | d |d< d|d< d| v r| d r| d |d< |gW S | d dkrd }d| v r| d }d}d| v r| d rt| d }d| v r| d }	|	rtjj|	|| d d }t	jj||j| d d }
d| v r| d r| d |_|  d| v r| d |_|  | d |
_|
  d| v r&| d r&| d |_|  d}d| v rh| d rht	jj||	| d d }| d }|rV||_||_| d |_
|  nt	|| d |	||| d d}|  d ||j|jd |j|j|j|||d!}t|W S W d S W d S  ty } z d }~ww )"Nr.   createOrUpdatecreatetestType	Screeningr   CodingE	Interviewr`   jdIdtestNamerh   )r7   r?   r8   ra   
papertitle
teststatusrM   holdYesOrNor   	holdvaluepromotPercentage)r7   	jobdescid
workflowid	passscoreholdholdpercentagepromotr  r@   r  updatetestId)rN   r7   r?   )r7   r   r   createdPaperid	libraryId)r7   r   r   r  r  r   rd   )updateEventr7   rN   r?   orderr8   r   ra   r  r  r  )r/   r   rz   rN   rt   rv   valuesrw   r   r   r   r   r8   paperlibraryidr  r  r?   ra   dictr0   )r.   compyIdr   savedWorkFlowDetailswrkflIdworkFlowDetails
holdStatusholdpercentagval
save_brulscurrentTestId
brulesDatapasscorebrulesDetailsupdatedDatar1   r2   r2   r3   saveJdNewTest8  s   













<r  c           	   
   C   sx  zt jj| d d}t|jddd}t| }|rtdt|D ]}|| d | d krt jj|| d d }d	}|r|j	}|rH|
  tjj|j|jd
 }|r[|
  n	 d}|dkrot|dkrn||d  }n,|d t|kr|d t|kr||d  }|d t|krt||d kr||d  }d|| ||d  W S 	 q"W d S W d S  ty } z d }~ww )Njdid)r?   rN   Trj   r   deleteTestIdrM   r@   )r   r   r   r	   zDeleted-successfully)msgtestDatanextSelectTestIdpaperId)r   rt   rv   r   r   r
  rangelenrw   r8   deleter   rN   r?   r0   )	r.   workflowDetails
testIdListtestInWorkFlow
deleteTestr  	delBrulesnextSelectedCardr1   r2   r2   r3   deleteTestInJdDB  sH   
 0r)  c              
   C   sl   z(| d r#t jj| d d }| d r&| d |_|  d|jiW S W d S W d S  ty5 } z d }~ww )Nr   rM   interviwersLstinterviewers)r   rt   rv   rw   r+  rz   r0   )r.   jdDatar1   r2   r2   r3   saveInterviewersJD  s   
r-  c              
   C   sj  z%| d }t  }|d}|d}tjjd||d\}}|r$d}	n|jp(dd }	|	|_|  d|j}
d	|j	 |j
 |
 }td
d |D }|d pQd}| | }tjj|d }|d ur$td*i d| d rr| d nd d| d r}| d nd d| d r| d nd d| d r| d nd d| d r| d nd d| d r| d nd d| d r| d nd d| d r| d nd d| d r| d nd d|jr|jnd d| d d| d  d!| d" r| d" nd d#|r|nd d$d%d&|r|nd d't  d(|}|  d)|jiW S d't  d(|}|  d)|jiW S W d S  ty4 } z d }~ww )+NhiringmanagerrO   %mJrQ   r	   r   z{:04}JCc                 s        | ]}|  rt|V  qd S Nr   r   ).0chr2   r2   r3   	<genexpr>%      zsaveAddJD.<locals>.<genexpr>	   r>   r   r   jobDescrole
departmentexpminminExpexpmaxmaxExplocationworkLocationbudget	positionsnoPositions	createdbyskillsetskillssecondaryskillssecondarySkills
skillnotesanySpecialNoter7   rL   Dhiringmanagerid	createdonjobcodenewJdIdr2   )r   r{   r|   r   rt   r}   r   rz   r~   rS   rT   sumr   rv   rw   r   rN   r0   )r.   r  hrEmailr.  	curr_dater   monthr   r   r   job_seq	base_code
digits_sumchecksumrQ  	hrDeatilssaveJdr1   r2   r2   r3   	saveAddJD  s   



	

r]  c              
   C   s  zt jj|d }|d urtjj| d d }|r| d r#| d nd |_| d r.| d nd |_| d r9| d nd |_| d rD| d nd |_	| d rO| d nd |_
| d	 rZ| d	 nd |_| d
 re| d
 nd |_| d rp| d nd |_| d |_| d |_| d r| d nd |_|r|nd |_|jr|jnd |_| d |_| d r| d nd |_|  W d S W d S W d S  ty } ztd|   d }~ww )Nr:  JdIDrM   r   r;  r<  r?  rA  rC  rD  rF  rI  rK  rM  jobDescriptionStatusr.  zError occurred: )r   rt   rv   rw   r   firstr   r   r<  r>  r@  rB  rD  rE  rH  rJ  rL  r7   rN   rG  rL   rO  rz   r0   r/   )r.   r  rT  	hrDetailsr;  r1   r2   r2   r3   saveUpdateJdH  s8   


rb  c           
   
   C   s  zxzt jj| d | d | d d}W n   d }Y |r0t |j| d | d | d | d d  nt | d | d | d | d d  tjj| d d}tjj| d d}| d | d |j|jd	}t	 d
 d }d}t
||}tj||d}W d S  ty }	 z d }	~	ww )Nqid	candid_idcall_sch_id)rc  rb   callscheduleidqrate)rN   rc  rb   rf  rg  )rc  rb   rf  rg  rM   )rc  rg  r   r   rU   rV   z/api/interview-responser   )r   rt   ru   rN   rz   r   r   rb   rW   r   r   r   r   r0   )
r.   	res_checkr   r   response_datar   r   r   send_response_datar1   r2   r2   r3   interviewResponseDBg  sD   "
rk  c              
   C   s   z@z#t jj|d | jd }|d |_|d |_| j|_|  W W d S    t |d | j|d |d | jd}|  Y W d S  t	yM } z d }~ww )Nrb   )rb   r   gonogonotes)rb   r   rl  rm  r7   )
r   rt   rv   rN   rw   rl  rm  r7   rz   r0   )r   r.   feedbackr1   r2   r2   r3   addInterviewFeedbackDB  s(   

ro  c                 C   s  z|d dkr	dn|d dkrdn	|d dkrdnd}t jjt|d	 |d
 |d }|rn|d |_|d |_|d |_|d |_|d |_|d |_	|d |_
|d |_|  |d dkrmd |_d |_
d |_|  n9t t|d	 |d |d |d |d |d |d
 ||d |d d
}|  |d dkrd |_d |_
d |_|  t jjt|d	 |d
 |dd}| D ]}|d |_q|  W d S  ty } z d }~ww )N
paper_typer   r   r   r   r   r`   r@   rX   event)rX   rq  rp  template_headingemail_subject
email_bodytemplate_namesender_labelattachment_name	file_nameupdate_remove_attachmentremove)
rX   rs  rt  ru  rr  rv  rq  rp  email_attachmentemail_attachment_namerN   r	   )r   rt   rv   r   rw   rr  rs  rt  ru  rv  r{  r|  rz   email_attachment_pathlatestitemsr0   )r   r.   fileObjsrp  
email_temptemplatefiler1   r2   r2   r3   updateEmailtempDB  sZ   4"








$r  c              
   C   sJ   zt jjt| d d}| d |_|  W d S  ty$ } z d }~ww )Nsch_idrM   remarks)r   rt   ru   r   intnotesrz   r0   )r.   r   r1   r2   r2   r3   interviewRemarkSaveDB  s   
r  c              
   C   s   z=| d rt jj| d d }|r|j| d< n
ddiW S ddiW S t d d }d	}t||}d
| i}tj||d W d S  t	yJ } z d }~ww )N
testCardIdrM   r8   r  ztest paper id was not foundztest number was not foundrU   rV   z/api/star-questionr_   r   )
r   rt   rv   rw   r8   r   r   r   r   r0   )r.   workFlowDatar   r   r   startQuestionDatar1   r2   r2   r3   saveStarQuestion  s"   


r  c              
   C   s6  zt jj| d d}| d |_| d |_| d |_| d |_| d |_| d |_| d	 |_	| d
 |_
| d |_|  g }dD ]}| |rR|| d| |   q?|r\d|d nd}tjj|jd }|rq||_|  t d d }d}t||}| |d}	tj||	d}
W d S  ty } z d }~ww )Nr   rM   zcompany-namezcontact-personzcompany-emailphonewebsitecityrB  countrycompanytype)LinkedinFacebook	InstagramYoutubeTwitter:z, r   r@   r6   rU   rV   z/api/update-company)r_   social_linksr   )r   rt   ru   namecontactpersonr>   phone1r  r  address1r  r  rz   appendr   r   rv   rN   rw   sociallinksr   r   r   r   r0   )r.   companyr  keysocial_links_stringbrandingr   r   r   r   send_company_datar1   r2   r2   r3   updateCompanyDB  sB   










r  c              
   C   sP   zt jj| d d }|rd|_|  W d S W d S  ty' } z d }~ww )Nzdemo-idrM   rd   )r   rt   rv   rw   demorequestrz   r0   )r.   r   r1   r2   r2   r3   demoRequestDB0  s   r  c              
   C   sb   z#| d }|r|D ]}t jj|d }|rd|_|  q	W d S W d S  ty0 } z d }~ww )Nr   rM   rd   )r   rt   rv   rw   
deleteflagrz   r0   )r.   delete_candidatesr   r   r1   r2   r2   r3   deleteCandidateDB=  s   r  c              
   C   sb   z#| d }|D ]}t jj||d d }|r |d |_|  qW d S  ty0 } z d }~ww )Nsources_datarC   rB   rE   )r   rt   rv   rw   rE   rz   r0   )r.   rX   r  rJ   company_sourcer1   r2   r2   r3   updateSourcesDataDBM  s   
r  c              
   C   sj   z't jj| d |d }|r%| d |_| d |_| d |_|  W d S W d S  ty4 } z d }~ww )Nr   )rb   r7   rF   rG   rH   )	r   rt   rv   rw   rF   rG   rH   rz   r0   )r.   rX   r   r1   r2   r2   r3   updateCandidateInfoDB]  s   


r  c              
   C   sV   zt jj| d |d }|r| d |_|  W d S W d S  ty* } z d }~ww )Nr?   )rN   r7   zdashboard-display)r   rt   rv   rw   dashboardflagrz   r0   )r.   rX   r   r1   r2   r2   r3   updateDashboardDisplayFlagDBm  s   
r  c              
   C   s   z=t jj| d d}t|j|j|jt dd}|	  d|_
|	  t|j}||_|	  t|jdd|j d|jiW S  tyJ } z d }~ww )	N	resume_idrM   rN  )sourceidresumeidr7   dateofcreationrL   rh   PCProfile Created
profile_id)r   rt   ru   r   r  rN   r7   r   r{   rz   rL   generate_profile_codeprofilecoder   r0   )r.   	user_dataresumeprofileprofile_coder1   r2   r2   r3   addResumeProfileDBz  s*   
r  c                 C   s  zd }|  }tj|jd  }|dv r$zt|}W n   |}Y n|dkr+|}ntdtj	j
|j| d d }|rB|j}nt|j| d | d d}|  |j}t||j|jt dd	}	|	  t|	j|j|d
}
|
  t||	j|jt | d | d | d | d | d | d dd}|  |j|jd}t|jdd|j t|j}||_|  W d S  ty } z d }~ww )Nr	   z.docz.docx.pdfUnsupported file formatrA   rB   rD   rh   r  r7   filenamer   rL   r  r  filecontentr   rF   
middlenamerG   r>   rH   rN  )r  r  r7   r  r   rF   r  rG   r>   rH   rL   )r   acvityuseridr  r  )readospathsplitextr  lowerr-   r0   r   rt   rv   r7   rw   rN   rz   r   r   r{   r%   r   r   r  r  )r.   r  r  r  file_binaryext
pdf_binaryrJ   r   r  resume_filer  activity_datar  r1   r2   r2   r3   addProfileDB  sz   
r  c              
   C   s2  zt jj| d d}tjj| d d\}}| d |_| d |_| d |_| d |_| d |_	| d	 |_
| d
 |_| d |_| d |_| d |_| d |_| d |_| d |_| d |_| d |_| d |_| d |_|j|_|  | d }|rt|d |_nd |_|  W d S  ty } z d }~ww )Nr   rM   r   r   rF   r  rG   r>   rH   linkedinfacebookpassportfather_name	native_ofAddressLine1AddressLine2r  stater  zipcodedob%Y-%m-%d)r   rt   ru   r'   r}   r   rF   r  rG   r>   rH   r  r  passportnum
fathernamenativeofaddline1addline2r  r  r  r  rN   r   rz   r   r   datedateofbirthr0   )r.   r  profile_addresscreateddob_strr1   r2   r2   r3   updateProfileDetailsDB  sB   

















r  c              
   C   s   z@ddl m} | d }| d }tjj|d  t|ddD ]\}}tjj|||d |d	 |d
 |d |d d qt| W d S  t	yM } z d }~ww )Nr   CalculateProfileScoringr  r_   r  r	   start
coursenameinstitutenameyearfromyeartograder   sequencecourse	instituter  r  r  )
"app_api.functions.profile_strengthr  r    rt   rv   r"  	enumerater   updateProfileScoreDBr0   )r.   r  r  profile_educationindex	educationr1   r2   r2   r3   updateProfileEducationDB  s(   
r  c              
   C   s   z7| d }| d }t jj|d  t|ddD ]\}}t jj|||d |d |d |d	 d
 qt| W d S  tyD } z d }~ww )Nr  r_   r  r	   r  jobtitlecompanynamer  r  r   r  r  r  r  r  )r!   rt   rv   r"  r  r   r  r0   )r.   r  profile_experiencer  
experiencer1   r2   r2   r3   updateProfileExperienceDB7  s$   	r  c                 C   s   z=| d }| d }t jj|d  t|ddD ]\}}t jj|||d |d |d |d	 |d
 |d d qt| W d S  tyJ } z d }~ww )Nr  r_   r  r	   r  projectname
clientname
roleplayed
skillsusedr  r  r   r  r  r  r  r  	yearsfromyearsto)r"   rt   rv   r"  r  r   r  r0   )r.   r  profile_projectsr  projectr1   r2   r2   r3   updateProfileProjectsDBP  s(   r  c              
   C   ~   z1| d }| d }t jj|d  t|ddD ]\}}t jj|||d |d d qt| W d S  ty> } z d }~ww )	Nr  r_   r  r	   r  	awardnamer   r   r  r  r   )r   rt   rv   r"  r  r   r  r0   )r.   r  profile_awardsr  awardr1   r2   r2   r3   updateProfileAwardsDBk      r  c              
   C   r  )	Nr  r_   r  r	   r  	cert_namer   r   r  certnamer   )r$   rt   rv   r"  r  r   r  r0   )r.   r  profile_certificatesr  certificater1   r2   r2   r3   updateProfileCertificatesDB  r  r  c              
   C   sf   z%| d }| d }t jj|d  d|}t jj||d t| W d S  ty2 } z d }~ww )Nr  rI  r  r   )r   primaryskills)r#   rt   rv   r"  r   r   r  r0   )r.   r  profile_skills
skills_strr1   r2   r2   r3   updateProfileSkillsDB  s   
r  c              
   C   s  z}|  d}|  d}|  d}tjj|dd }|s td|j}tjj|djt	dd	d
 }|p5dd }d }	|rDt
jj |dj}	tjj||t |||||	d |dv rit
jj |d}
d|
_|
  W dS |dv r{t
jj |d}
d|
_|
  W dS  ty } z d }~ww )Nr  activitynamer  rh   )
lookupnamerL   zInvalid activity namer  r  max_seqr!  r   r	   rM   )r   r  r   r  r  r   activityremarksr7   )RJCRr   )SLCSHT)ru   r(   rt   rv   r`  r0   lookupparam1r   	aggregater   r   r7   r   r   r{   rL   rz   )r.   useridr  r  r  lookupactivity_codelast_seqnext_seqr7   r  r1   r2   r2   r3   updateProfileActivityDB  sJ   


r/  c              
   C   s   zP|  d}|  d}|  dg }|std|D ]4}| d}|r9tjj|dj| d| d| d	d
 qtjj||| d| d| d	d qW dS  tyd } ztdt|  d }~ww )Nr*  r7   r  zNo rows providedrN   rM   startday	starttimehours)r0  r1  r2  )r*  r7   r0  r1  r2  TzsaveWorkCalDB ERROR:)	ru   r0   r&   rt   rv   r  r   r/   r   )r.   r   rX   r  itemrow_idr1   r2   r2   r3   saveWorkCalDB  s6   


	
r5  c              
   C   s  zt jj| d}tjj|d d }|rd|d dd d }t	|d}|d ddd  }|d	 }tjt
|d
t
|dt
ddt
ddB }td| |stjj|jd}	t d d }
t|t|	jdd t|j }|d}| }|
| }||_||_|d |_d|_||_| |_|j|_|  tjj|	jd}|jd}t jj|jd}|	j d|j }|j |j|j!|	j|j|||j|d d	}t d d }d}t"||}t#j$||d}W dS W d S W dS  t%y } ztt|  d }~ww ) NrM   r   r   r   r   r   r   r   r   r   r   r   r   rP   r   r   r   r   r@   r^   r   r   r   r   r   rU   rV   r   r   r   r   )&r   rt   ru   r   rv   rw   r   r   r   r   r   r/   r   rb   r   r   r   rN   r   r   r   r   r   rL   r   rc   r7   rz   r   r?   r|   r>   r   rW   r   r   r   r0   )r   r.   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r1   r2   r2   r3   scheduleInterviewLinkDB  sj   
$


,r6  c              
   C   s  z~t | }tjj|d}t d d }t d d }d}d|  d}t||}t||}	td|	 |j|j|j	|j
|j|j|j|j|d		}
|jrQt|jd
d|j tj|	|
ddd}|  | }|ddkrwtjj|djdd W dS t|dd ty } z d }~ww )NrM   rU   rV   	hirelinesz+/api/hirelines-send-candidate-schedule-linkz/candidate-schedule-interview//r   )	rF   rG   r>   rH   rX   rY   job_idr   r   r   zInterview Scheduling SentF
   )r\   r]   timeout
statusCoder   r   Wr   TerrorzEmail sending failed)r   r   rt   ru   r   r   r/   rF   rG   r>   rH   r7   rb   r?   rN   r   r   r   r   raise_for_statusr\   r   rv   r  r0   )enc_candidate_idr  r   candidate_detailsr   hirelines_domainr   schedule_link_endpointschedule_link_urlr   r   responseresponse_jsonr1   r2   r2   r3    scheduleCandidateInterviewLinkDB\  sB   


rG  c              
   C   s   z@t jj| d djtddd}|pdd }d }| d r)tjj| d dj}t | d t	 |d	d
| d |d}|
  W d S  tyM } z d }~ww )Nr   r  r  r   r!  r   r	   rM   r  r  r  r   r   r  r   r  r  r7   r   rt   rv   r)  r   ru   r   r7   r   r{   rz   r0   )r.   r-  r.  r7   profile_activityr1   r2   r2   r3   createProfileActivityDB  s4   
rK  c              
   C   sD  zt | d}| r|| d< n
t|}t|| d< tjj| d d }|rd	| d 
dd d }t|d}| d 
ddd  }|d }tjt|d	t|d
tddtddB }td| |stjj|jd}	t d d }
t |t |	jdd t |j }|d}| }|
| }||_||_| d |_d|_||_|	j|_|  tjj|	jd}|jd}t jj|jd}|	j! d|j! }|j"|j|j#|	j|j|||j| d d	}t d d }d}t$||}t%j&||d}|	j'rt(|	j'dd W d S W d!S W d"S  t)y! } ztt |  d }~ww )#Nr   r   r   r   r   r   r   r   r   r   r   r   rP   r   rM   r   r   r   r@   r^   r   r   r   r   r   rU   rV   r   r   SCHr   r   r   r   )*r   ru   r   r   r   r   rt   rv   rw   r   r   r   r   r   r/   r   rb   r   r   rN   r   r   r   r   r   rL   r   r7   rz   r   r?   r|   r   r>   r   rW   r   r   r   r   r   r0   )r.   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r1   r2   r2   r3   scheduleCandidateInterviewDB  st   

$


rM  c              
   C   sV   zd tt| d }tjj| d d}||_|  W d S  ty* } z d }~ww )Nr   recruiter_idsr  rM   )	r   mapr   r   rt   ru   recruiteridsrz   r0   )r.   recruiter_ids_strr=   r1   r2   r2   r3   jdRecruiterAssignDB  s   rR  c              
   C   s   zWddl m} | }|| }tjj| d}|d |_|d d d |_|d d d |_|d d	 d |_	|d d
 d |_
|d d d |_|d d d |_|  W d S  tyd } z d }~ww )Nr   r  rM   
percentage	breakdownr  scorer  projectsrI  certificatesawards)r  r  score_profiler   rt   ru   strengtheducationscoreexperiencescoreprojectsscoreskillsscorecertificatesscoreawardsscorerz   r0   )r  r  profileScoreprofile_strengthr  r1   r2   r2   r3   r    s"   

r  c                 C   s"  dd }dd }|  d}|stdtjj |d}|  di }| d	i }|| d
|_|| d|_|| d|_|| d|_|| d|_|| d|_	|| d|_
|| d|_|| d|_|| d|_|| d|_| d}|rt|d nd |_|  | di }tjj|d\}	}
|| d|	_|| d|	_|| d|	_|| d|	_|| d|	_|| d|	_|	  tjj|d  | dg D ]-}tjj||| d || d!|| d"|| d#|| d$|| d%d& qt jj|d  | d'g D ](}t jj||| d || d(|| d)|| d#|| d$d* q#| d+i }t!jj|d\}}
|| d,|_"|| d-|_#|  t$jj|d  | d.g D ]4}t$jj||| d || d/|| d0|| d1|| d2|| d3|| d4d5 q~t%jj|d  | d6g D ]}t%jj||| d || d7|| d8d9 qt&jj|d  | d:g D ]}t&jj||| d || d;|| d8d< qt'| d S )=Nc                 S   s&   z| dv rW d S t | W S    Y d S N)r@   N)r   valr2   r2   r3   to_int&  s   
z#updateFullProfileDB.<locals>.to_intc                 S   s   | dvr| S d S rc  r2   rd  r2   r2   r3   safe_str.  s   z%updateFullProfileDB.<locals>.safe_strr   zprofileid missingrM   r  personalr   rF   r  rG   r>   rH   r  r  r  r  r  r  r  addressr  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  rI  r  rJ  rV  r  r  r  r  r  r	  r  rX  r  r   r  rW  r  r  )(ru   r0   r   rt   r   rF   r  rG   r>   rH   r  r  r  r  r  r   r   r  r  rz   r'   r}   r  r  r  r  r  r  r    rv   r"  r   r!   r#   r  rJ  r"   r   r$   r  )r_   rf  rg  r  r  profile_blockrh  r  address_datari  _eduexpskills_datarI  projacr2   r2   r3   updateFullProfileDB#  s   






rs  c              
   C   s\   z t | d | d | d | d | d |jt dd}|  W d S  ty- } z d }~ww )Nclientr  	startdaterm  jd_idsrh   )clientidr  ru  rm  rv  rG  	createdatrL   )r)   rN   r   r{   rz   r0   )r.   r  	workspacer1   r2   r2   r3   addWorkspaceDB  s    rz  c           	   
   C   s   z6t jj| djtddd}|pdd }d }| r#tjj| dj}t | t	 |||||d}|
  W d S  tyC } z d }~ww )	Nr  r  r   r!  r   r	   rM   rH  rI  )	r   r,  r  r*  r-  r.  r7   rJ  r1   r2   r2   r3   r     s4   
r   c              
   C   sn   z)t jj| d d}| d |_| d |_| d |_| d |_| d |_|  W d S  t	y6 } z d }~ww )NworkspaceidrM   rt  r  ru  rm  rv  )
r)   rt   ru   rw  r  ru  rm  rv  rz   r0   )r.   ry  r1   r2   r2   r3   updateWorkspaceDB  s   




r|  c                 C   s   t  }|d}|d}d}t . tjj|||d }|s-t|||dd}d}n
| j	d7  _	|j	}|
  W d    n1 sEw   Y  t|d}d| | | }td	d
 |D }	|	d }
|
dkrm|
nd}| | }|S )NrO   r/  rI   rQ   r	   )rR   rS   rT   r      r  c                 s   r2  r3  r4  )r5  rr  r2   r2   r3   r7    r8  z(generate_profile_code.<locals>.<genexpr>r9  r   )r   r{   r|   r,   atomicr   rt   rv   r`  r   rz   r   zfillrS  )r  todayyymmprefix_typerefserial
serial_strrX  rY  quotientrZ  r  r2   r2   r3   r    s(   



r  c              
   C   sl  zt jj| d }|std|  d W d S |jdkr*td|  d|j  W d S d}tjj| d r9|d7 }tjj| d rF|d7 }t	jj| d rS|d7 }t
jj| d r`|d	7 }tjj| d rm|d	7 }tjj| d rz|d7 }td
| d |dkrd|_|  td|  d ntd|  d| d td|  W d S  ty } z d }~ww )NrM   zProfile z not found.rN  z is already in status: r   r     r:  zCalculated Completion: %<   rP   z status updated to Ready.z remains in Draft (Percentage: z%)r  )r   rt   rv   r`  r/   rL   r!   r   r#   r    r$   r   r"   rz   r0   )r  r  completion_percentager1   r2   r2   r3   updateProfileCompletion	  s@   
r  c              
   C   s   zLt jj| d |d }|r/| d |_| d |_| d |_| d |_| d |_|	  W d S t || d | d | d | d | d | d d}|	  W d S  t
yY } z d }~ww )	Njob_board_id)
jobboardidr7   api_keyr   usernamepasswordrL   )r7   r  apikeyr   r  r  rL   )r*   rt   rv   rw   r  r   r  r  rL   rz   r0   )r.   r7   job_board_credentialsr1   r2   r2   r3   saveJobBoardConfigDBA  s.   





r  c              
      s   zO| d j  ttt| dg }tjj d}t|jddd}|| }|r9tj	 fdd|D  || }|rMtjj |d	
  W d S W d S  ty\ } z d }~ww )
Nr?   job_board_ids)r7   r   r  Trj   c              
      s&   g | ]}t  |t jd dqS )rh   )r7   r   r  publishedonpublishedbyrL   )r+   r   r{   rN   )r5  jobboard_idr7   r   r   r2   r3   
<listcomp>t  s    	z%saveJDJobBoardsDB.<locals>.<listcomp>)r7   r   jobboardid__in)r7   setrO  r   ru   r+   rt   rv   r   bulk_creater"  r0   )r.   r   user_selected_jobboardsexisting_jobboardsexisting_jobboard_idsto_create_jobboardsto_delete_jobboardsr1   r2   r  r3   saveJDJobBoardsDB`  s:   	r  c           
   
   C   s   z[|  }tj|jd  }|dv r"zt|}W n   |}Y n|dkr)|}ntdtj	j
|j| d d }t|j|j|jt dd}|  t|j|j|d	}|  W d S  tyh }	 z d }	~	ww )
Nr	   r  r  r  rJ   rB   rI   r  r  )r  r  r  r  r  r  r-   r0   r   rt   rv   r7   rw   r   rN   r   r{   rz   r%   )
r.   r  r  r  r  r  rJ   r  r  r1   r2   r2   r3   addResumeDB  s<   r  r3  )dr  r\   r   r   urllib.parser   r   django.db.modelsr   r   app_api.functions.enc_decr   hirelines.metadatar   mailingr
   app_api.modelsr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r    r!   r"   r#   r$   r%   r&   r'   r(   r)   r*   r+   	django.dbr,   doc2pdfr-   r4   r   r   r  r)  r-  r]  rb  rk  ro  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r/  r5  r6  rG  rK  rM  rR  r  r~  rs  rz  r   r|  r  r  r  r  r  r2   r2   r2   r3   <module>   sx    
 @` =;-0.$V)23I1W
z
(8-