
    ݦiw-                    \   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/m0Z0m1Z1m2Z2 d d
l3m4Z4 ddl5m6Z6 d Z7d=dZ8d Z9d Z:d Z;d Z<d Z=d Z>d Z?d Z@d ZAd ZBd ZCd ZDd ZEd ZFd ZGd ZHd ZId ZJd  ZKd! ZLd" ZMd# ZNd$ ZOd% ZPd& ZQd' ZRd( ZSd) ZTd* ZUd+ ZVd, ZWd- ZXd. ZYd/ ZZe4j                  d0        Z\d1 Z]d=d2Z^d3 Z_d4 Z`d5 Zad6 Zbd7 Zcd8 Zdd9 Zed: Zfd; Zgd< Zhy)>    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Tag)transaction)convert_word_binary_to_pdfc                 @    	 t        d       y # t        $ r} d }~ww xY w)NdataObjs)print	Exception)r1   es     7/home/hirelines/hirelines/app_api/functions/database.pyaddCompanyDataDBr6      s"    j s    	c                 f   	 ddl m} t        j                  j	                  |      }t
        j                  j                  || d         j                         }t        j                  j	                  ||j                        }t               d   }|d   }	|	d	k(  rd	}
n(t        j                  j                  || d
   | d         }
|
r|
d	k(  rK|j                  |j                  k\  r0d}d| v rqt        j                  j                  || d         j                         }|r|j                  }n0t        || d   | d         }|j!                          |j                  }t        | d   | d   || d   | d   | d
   |t#        j$                         d	      }|j!                          t&        j                  j	                  |      }t#        j$                         j)                  d      }t*        j                  j-                  ddj/                  |      |      \  }}|dk(  rd}||_        |j!                          |dk(  r&|j0                  dz   }||_        |j!                          t3        dj/                  t5        |j0                                    }|j6                   |j8                   | }||_        |j!                          d}d}d}d}d}t<        j                  j                  | d
         j                         }|r<|j>                  xs d}|j@                  xs d}|jB                  (|jD                  |jB                   d|jD                   d }|jF                  xs g }g }tI        |tJ              r|D ]  }tI        |tL              s|jO                         D ]m  }tI        |t2              rAd!|v r=|jQ                  |jS                  d!      D  cg c]  } | jU                          c}        T|jW                  t3        |             o  nt3        |      g}d"jY                  |      }|jZ                  xs d}t               d#   d$   }!d%}"t]        |!|"      }#| d   | d   | d   | d   | d   ||j:                  |||||d&}$t_        j`                  |#|$d'      }%|%jb                  }&|&rote        jf                  |&ji                  d(            }'|'d)   }(tk        |jl                  | d   |jn                  |jp                  |jr                  d*|(d+   ,      })|)j!                          |)j                  d*k(  r7tu        |jl                  || d   d	|jp                  -      }*|*j!                          |jl                  |)j                  d.}+ |||(d+   | d          d	},|j                  |j                  k\  rd/},|j                  |j                  z
  }-nd	},|j                  }-t               d   }t5        |d0         }.t5        |d1         }/|-|/k  rd	}0n
|-|.k  rd2}0nd3}0d	}1|0d	k(  s|0d2k(  r|jv                  d/k7  rd/}1t        j                  j	                  |      }2d/|2_;        |2j!                          d4}3tK        tx        j                  j                  ||3d35      j{                  dd6            }4||,|0|4|-|1d7}5t               d#   d$   }!d8}"t]        |!|"      }6t_        j`                  |6|5d'      }7|7jb                  }8|8r$te        jf                  |8ji                  d(            }9|+S y9y:y c c} w # t|        $ r}: d }:~:ww xY w);Nr   )deductCreditsService	companyidz
begin-from)r:   paperid)r:   	transtype
APP_CONFIGregister_candidate_once_per_jdNjdemail)r:   jobidrA    source-coder:   coder:   rF   label	firstnamelastnamemobileP)	rI   rJ   r:   rA   rK   rB   sourceregistrationdatestatusid%yRz{:03}typeprefix1prefix2Tr
   Fz{:05}z - z Years,, DOMAINacertz/api/hirelines-add-candidate)rI   rJ   rA   rK   paper_id
company_idreference_idjd_titlejd_desc
experienceskillslocation)jsonverifyutf-8dataI	papertype)candidateidr;   rN   r:   rB   rO   ri   )rj   hridr\   rO   r:   )rj   ri   Ylowcredits_warningreg_stop_warningLAzHR-Admin)r:   role__containsrO   flat)r]   credit_availablity_statcredits_statushradmin_emails_listcurrent_creditssend_lowcredits_notificationz/api/credits-notificationinsufficient_creditscandidate_already_registered)?app_api.functions.servicesr8   r   objectsgetr   filterlastr   ri   r	   r   balancecreditsr   rF   saver   nowr   strftimer   get_or_createformatlastidstrintrV   rW   rj   r   titledescriptionexpminexpmaxskillset
isinstancelistdictvaluesextendsplitstripappendjoinrc   r   requestspostcontentrd   loadsdecoder   rQ   rN   r:   rB   r   lowcreditsnotificationr   values_listr3   );r1   cidworkflow_datauser_idr8   company_accountworkflowcompany_credits
app_configr>   check_candidate_registeredsource_coderM   
new_source	candidatecompany_datayear	refid_obj
refid_flagr   candidate_id_seqcandidate_coder_   r`   ra   rb   rc   
jd_details
raw_skills
skill_listskillvaluesacert_domainendpointurlcandidate_datasend_candidate_dataresponse_content	json_data
acert_datac_registrationcall_schedulec_datart   rw   rm   rn   ru   rx   company_account_hr_admin_labelrv   credits_infocredits_notification_urlcredits_notification_requestcredits_notification_respcredits_notification_resp_objr4   s;                                                              r5   addCandidateDBr      sw   WC!//---<##**c(<BX*Y^^`(0044sXM_M_4`[.
)34T)U&)S0),&)2):):)A)Ac  ) *B *+& +0Jc0Q&&/*A*AA  H,#^^22Sh}F]2^cceF&,kk &,&)#+M#:$,]$;&

 #)&0oo% ( 5'
3 #$W-%h/$TN('/||~ 
	  &22c2:||~..t4(3(;(;(I(IQT`g`n`nor`s  @D(I  )E%	:%F'-I$NN$&&--a/F'-I$NN$#&w~~c):J:J6K'L#M $-$5$5#6y7H7H6IJZI[!\(6	% 
$__33x~3FKKM
)//52H(44:G!((49J9J9V(2(9(9':#j>O>O=PPV%W
 ",!4!4!:J!#J!*d3%/ FE)%6-2\\^ !FE'1%'=#,(2(9(9ekkZ]N^:_1779:_(`(2(9(9#e*(E	!FF '**o%6
!YYz2F)228bH({84W=9lH5 #+;"7!)*!5$W-&x0 ( 6!$$-$9$9'%",$ (" '/mmCW\&]##6#>#> # $

+;+B+B7+K LI!*6!2J%1&/ll"*<"8+4+E+E$-$7$7 )!$$.{$;&N #'')%//36(4*3,,#*'/'=%((1(;(;) &**, '0ll$2$<$<F
 )Z-DXlE[\.1+&../2I2II25/*9*A*A/BYBY*Y25/*9*A*A!*\!:J),Z8L-M)N&'*:6H+I'J$&(88*-(*<<),),360&3.Nc4I*AASH;>8/6/B/BS/B/Q,FI,C,113-7N26t||7J7JUXhv  B7J  8C  8O  8O  PW  ]a  8O  8b  3c/-0:Q1?6I2A?[,L ,5;x+@+IL'BH7>|X7V4;C==Iajv  @E  <F88T8\8\58@D

KdKkKklsKt@u =!M-1i $G ;`p  s2   N\! A\! \+L-\! \! !	\0*\++\0c           
         	 t         j                  j                  |       }t        |j                  d            }|j	                         r||d<   nt        |      }t        |      |d<   t        j                  j                  |d         j                         }|r@dj                  |d   j                  d      d d       }t        j                  |d      }|d   j                  d      dd  }|d	   }	t        j                  j                  t        |	
      t        |      t        d      t        d      z        }
t        d|
       |
st         j                  j                  |j"                        }t%               d   d   }t        |	      t        |j"                        j'                  dd      z   t        |j(                        z   }|j+                  d      }|j-                         }||z   }||_        |	|_        |d   |_        d|_        ||_        | |_        |j:                  |_        |j=                          t>        j                  j                  |j@                        }|j.                  jC                  d      }t         j                  j                  |j0                        }|jD                   d|jD                   }|jF                  |j6                  |jH                  |j"                  |j0                  |||j2                  |d   d	}t%               d   d   }d}tK        ||      }tM        jN                  ||      }|jP                  rtR        j                  j                  |jP                  d      jU                         }|r#tW        |jP                  d d!|j(                         y#tW        |jP                  dd"|j(                         y#y$y%# tX        $ r}t        t        |              d }~ww xY w)&NrP   candidate_idrj    slot_id__   %a-%d-%b-%Y %I_%M_%pr   interviewerid	datentimeSrO   rS   scheduled_checkMEETING_CONFIGmeeting_link-rC   rf   instructions%d-%b-%Y %I:%M %prX   schedule_type		job_titlemeetinglink	int_paperr   interviewerinterview_time	to_emailsr   r   rZ   r[   /api/schedule-interviewrd   IS)	profileidactivitycodeRSzInterview Re-ScheduledInterview ScheduledSlot BookedPlease select another slotNo Candidate)-r   r|   r}   r   isdigitr   r   r   r~   r   r   r   r   strptimer   r2   r   rj   r	   replacerQ   encodehexr   r   r   rO   r   rk   r:   r   r   rB   r   rA   r   r\   r   r   r   r   r    existsaddProfileActivityDBr3   )r   r1   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_existsr4   s                              r5   scheduleInterviewDBr     s   \||7+hll>23 ??'.H^$ $G,M'3M'BH^$#++22x?W2X]]_HHXi%8%>%>t%DRa%HIM ))-9OPI"9-33D9!"=K(^N*2299!.:Y[\gp[q<=SM!SV-<WYO #O4 #%--11\5M5M1N	!*-=!>~!Nn-Y5J5J1K1S1STWY[1\]`cdpdsds`tt!..1";;=-8)2&-;*,4^,D)&)#+7($+!)-&!!# #??..)//.B!-!7!7!@!@AT!U"ll..,2L2L.M'oo.a0A0A/BC !)".":":!-!6!6&/&;&;#/#=#=&4!)$0$=$=$,_$=
"  ){84W=4lH5&.mmCn&M#&&'6'>'>'E'E"+"5"5%) (F ( fh %
 (,Y-@-@$H`bfbibij % -Y-@-@$H]_c_f_fg$3!  c!fs   N8O  ;"O   	P)O>>Pc                    	 t        d|        | d   dk(  rd }d| v r| d   dk(  rd}| d   dk(  rd}| d   d	k(  rd
}t        |d| v r| d   nd d |d| v r| d   nd d      }|j                          |j                  }t        j                  j                  |      j                         j                         }d }d| v r| d   }d}d| v r| d   rt        | d         }t        || d   || d   ||      }|j                          |j                  |d<   | d   |d<   d|d<   d| v r| d   r| d   |d<   |gS | d   dk(  rd }d| v r| d   }d}d| v r| d   rt        | d         }d| v r| d   }		rt        j                  j                  |	|| d         j                         }t        j                  j                  ||j                  | d         j                         }
d| v r| d   r| d   |_        |j                          d| v r4| d   |_        |j                          | d   |
_        |
j                          d| v r| d   r| d   |_        |j                          d}d| v r| d   rt        j                  j                  ||	| d         j                         }| d   }|r)||_        ||_        | d   |_
        |j                          n't        || d   |	||| d         }|j                          d ||j                  |j                   d |j                  |j                  |j"                  |||d!}t%        |      S y y # t&        $ r} d }~ww xY w)"Nr1   createOrUpdatecreatetestType	Screeningr   CodingE	Interviewrh   jdIdtestNamerp   )r:   rB   r;   ri   
papertitle
teststatusrP   holdYesOrNor   	holdvaluepromotPercentage)r:   	jobdescid
workflowid	passscoreholdholdpercentagepromotr  rC   r  updatetestId)rQ   r:   rB   )r:   r  r  createdPaperid	libraryId)r:   r  r  r  r  r  rl   )updateEventr:   rQ   rB   orderr;   r  ri   r  r  r  )r2   r   r   rQ   r|   r~   r   r   r   r   r  r  r;   paperlibraryidr  r  rB   ri   r   r3   )r1   compyIdr	  savedWorkFlowDetailswrkflIdworkFlowDetails
holdStatusholdpercentagval
save_brulscurrentTestId
brulesDatapasscorebrulesDetailsupdatedDatar4   s                  r5   saveJdNewTestr.  T  s]   Fj"$%1HX%J';6"HJ'83"HJ';6"H#+ '06(0BHV," (9Cx9O*!5UY!$$  !%%'*--G&..555AHHJOOQOJ(%m4
  !h&K('*8K+@'A$$+$,V$4%,$,-?$@))9J OO(2(<(<OH%&.}&=OF#02O,-h&K(8@8MO$45#$$ $%1J(%m4
 h&K('*8K+@'A$8# ( 2'/'7'7'>'>M_fpxy  qA'>  (B  (G  (G  (I$#^^22wThTkTk  zB  CI  zJ2  K  P  P  R
)
+:B::N,7,113#x/3;<L3M(0(--/)12B)CJ&OO%(*,>F{>S,;,113%1 23(.(=(='`m  }E  FL  }M(=  )N  )S  )S  )U#+,>#?(1;M.;KM86>?Q6RM3)..0 *0,3,4V,<-:'11A,45G,H*J 'OO- #&")"6"9"9"6"<"<"&"6">">"6"A"A"6"@"@"*",'7 K((u  2T  s   D.L: 1HL: :	M	MM	c                    	 t         j                  j                  | d         }t        |j	                  dd            }t        |j                               }|rWt        dt        |            D ]=  }||   d   | d   k(  st         j                  j                  ||   d         j                         }d	}|r|j                  }|r|j                          t        j                  j                  |j                  |j                  
      j                         }|r|j                          n	 d}|dk(  rt        |      dk\  r]||dz      }nT|dz   t        |      k(  r|dz   t        |      k  r||dz
     }|dz   t        |      k  rt        |      |dz   k\  r||dz
     }d||   ||dc S @ y y # t        $ r} d }~ww xY w)Njdid)rB   rQ   Trr   r   deleteTestIdrP   rC   )r  r  r   r
   zDeleted-successfully)msgtestDatanextSelectTestIdpaperId)r   r|   r~   r   r   r   rangelenr   r;   deleter   rQ   rB   r3   )	r1   workflowDetails
testIdListtestInWorkFlow
deleteTestr5  	delBrulesnextSelectedCardr4   s	            r5   deleteTestInJdDBr?    s   7"**118H1I/55d5FG
5578"'3+?"@ " #>248H^<TT!)!1!1!8!8ON<[\`<a!8!b!g!g!iJ G!","4"4%&--/$*NN$9$9z}}akaqaq$9$r$w$w$y	$%,,. ,-()Q.":!33=nq>P3Q 0-1c*oE#1A#5#j/"I7A.STBT7U$4-1c*oE#j/^lop^pJq3=nq>P3Q 0&<XfHg  |L  X_   `  `E" b  s%   BF5 D*F5 0F5 5	G>F??Gc                     	 | d   r_t         j                  j                  | d         j                         }| d   r(| d   |_        |j                          d|j                  iS y y # t        $ r} d }~ww xY w)Nr  rP   interviwersLstinterviewers)r   r|   r~   r   rB  r   r3   )r1   jdDatar4   s      r5   saveInterviewersJDrD    s    	F__++&1A+BGGIF()&./?&@#&v':':;;	 *   s   A"A' '	A60A11A6c                 L   	 | d   }t        j                         }|j                  d      }|j                  d      }t        j                  j                  d||      \  }}|rd}	n|j                  xs ddz   }	|	|_        |j                          dj                  |j                        }
d	|j                   |j                   |
 }t        d
 |D              }|dz  xs d}| | }t        j                  j                  |      j                         }|t        d)i 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| 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        j                         d'|}|j                          d(|j                   iS y # t"        $ r} d }~ww xY w)*NhiringmanagerrR   %mJrT   r
   r   z{:04}JCc              3   T   K   | ]   }|j                         st        |       " y wNr   r   ).0chs     r5   	<genexpr>zsaveAddJD.<locals>.<genexpr>A  s     ER

RE   ((	   rA   r   r   jobDescrole
departmentr   minExpr   maxExprc   workLocationbudget	positionsnoPositions	createdbyr   rb   secondaryskillssecondarySkills
skillnotesanySpecialNoter:   rO   Dhiringmanagerid	createdonjobcodenewJdId )r   r   r   r   r|   r   r   r   r   rV   rW   sumr   r~   r   r   rQ   r3   )r1   r"  hrEmailrF  	curr_dater   monthr   r   r   job_seq	base_code
digits_sumchecksumrd  	hrDeatilssaveJdr4   s                     r5   	saveAddJDrq  )  s   70LLN	!!$'""4( + 3 3 A A !B !
	: F&&+!q0F!	..!1!12)++,Y->->,?yI	E9EE
!O)Kz*LL''g'6;;=	  3;G3Dhw/$ 6>i5Hhy1d 3;62Bhv.	
 3;62Bhv. 5=X4Fhx0D 5=X4Fhx0D ;C>:Rh~6X\ 5=X4Fhx0D :B-9Ph}5VZ /8llill 'x0 &..?%@ =EEU<Vh'78\` *1gd  "!" 3@T#$ %LLN%& "'F, KKMfii((3 !4  s   HH 	H#HH#c                    	 t         j                  j                  |      j                         }|8t        j                  j                  | d         j                         }|r| d   r| d   nd |_        | d   r| d   nd |_        | d   r| d   nd |_        | d   r| d   nd |_	        | d   r| d   nd |_
        | d	   r| d	   nd |_        | d
   r| d
   nd |_        | d   r| d   nd |_        | d   |_        | d   |_        | d   r| d   nd |_        |r|nd |_        |j$                  r|j$                  nd |_        | d   |_        | d   r| d   nd |_        |j-                          y y y # t.        $ r}t1        d|         d }~ww xY w)NrR  JdIDrP   r   rS  rT  rV  rW  rX  rY  r[  rb   r^  r`  jobDescriptionStatusrF  zError occurred: )r   r|   r~   r   r   firstr   r   rT  r   r   rc   rY  rZ  r   r]  r_  r:   rQ   r\  rO   rb  r   r3   r2   )r1   r"  rh  	hrDetailsrS  r4   s         r5   saveUpdateJdrw  d  s   LL''g'6;;=	 oo,,(62B,CIIKG;CG;Lhw&7RV=Ei=Phy&9VZ#:B6:Jhv&6PT<DX<Nhx&8TX<DX<Nhx&8TXBJ>BZh~&>`d <DX<Nhx&8TXAI-AXh}&=^b!&.x&8 -56G-H'DLM]D^h/?&@dh"18gd!6?llill!&./E&FFNF_/)Bei'% 	 !.   $%s   E'E, ,	F	5FF	c                    	 	 t         j                  j                  | d   | d   | d         }|r5t        |j                  | d   | d   | d   | d         j	                          n)t        | d   | d   | d   | d         j	                          t
        j                  j                  | d         }t        j                  j                  | d         }| d   | d   |j                  |j                  d	}t               d
   d   }d}t        ||      }t        j                  ||      }y #  d }Y xY w# t        $ r}	 d }	~	ww xY w)Nqid	candid_idcall_sch_id)ry  rj   callscheduleidqrate)rQ   ry  rj   r|  r}  )ry  rj   r|  r}  rP   )ry  r}  r   r   rZ   r[   z/api/interview-responser   )r   r|   r}   rQ   r   r   r   rj   r\   r	   r   r   r   r3   )
r1   	res_checkr   r   response_datar   r   r   send_response_datar4   s
             r5   interviewResponseDBr    sn   )	!))--(5/hWbNcs{  }J  tK-  LI 9<<uo&{3!)-!8 )	
 df HUO&{3!)-!8 ) df%%))Xk-B)C	$,,00H]4K0L E?W%'33&//	
 !{8,W5,lH-%]]3]CG	IH  s)   +D+ C<D5 +D2/D5 5	E>D??Ec                    	 	 t         j                  j                  |d   | j                        j	                         }|d   |_        |d   |_        | j                  |_        |j                          y #  t        |d   | j                  |d   |d   | j                        }|j                          Y y xY w# t        $ r} d }~ww xY w)Nrj   )rj   r   gonogonotes)rj   r   r  r  r:   )
r   r|   r~   rQ   r   r  r  r:   r   r3   )r   r1   feedbackr4   s       r5   addInterviewFeedbackDBr    s    	!))00Xm=Tcgcjcj0kpprH&x0HO%g.HN!%HMMO		!&}5 $!(+ ) NNH MMO s*   A1A5 5?B64B9 6B9 9	CCCc                    	 |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
   |      j	                         }|r|d   |_        |d   |_        |d   |_        |d   |_        |d   |_        |d   |_	        |d   |_
        |d   |_        |j                          |d   dk(  rd |_        d |_
        d |_        |j                          nvt        t        |d	         |d   |d   |d   |d   |d   |d
   ||d   |d   
      }|j                          |d   dk(  r%d |_        d |_
        d |_        |j                          t         j                  j                  t        |d	         |d
   |      j                  d      }|j                         D ]  }|d   |_         |j                          y # t         $ r} d }~ww xY w)N
paper_typer
  r   r  r  r  rh   rC   r]   event)r]   r  r  template_headingemail_subject
email_bodytemplate_namesender_labelattachment_name	file_nameupdate_remove_attachmentremove)
r]   r  r  r  r  r  r  r  email_attachmentemail_attachment_namerQ   r
   )r   r|   r~   r   r   r  r  r  r  r  r  r  r   email_attachment_pathlatestitemsr3   )r   r1   fileObjsr  
email_temptemplatefiler4   s           r5   updateEmailtempDBr    sl   +$\2kAShWcNdhpNps  ~F  GS  ~T  Xc  ~cvy  ik
#++22l8T`Ka>biqryiz  GQ2  R  W  W  Y
*23E*FJ''/'@J$$,\$:J!'/'@J$*23E*FJ'&.~&>J#(01B(CJ'-5k-BJ,OO23x?37
0.2
+37
0!')(<*@A ( 9%l3 ( 9#+,>#?'7 )'!)*;!<&.{&;J OO23x?37
0.2
+37
0!!))00LR^I_<`gopwgx  EO0  P  W  W  X\  ]NN$ 	5D-1!WH*	5 s   GG 	G& G!!G&c                     	 t         j                  j                  t        | d               }| d   |_        |j                          y # t        $ r} d }~ww xY w)Nsch_idrP   remarks)r   r|   r}   r   intnotesr   r3   )r1   r   r4   s      r5   interviewRemarkSaveDBr    sV    $,,00C8J4K0L!))!4 s   AA	 		AAAc                 <   	 | d   rGt         j                  j                  | d         j                         }|r|j                  | d<   nddiS ddiS t               d   d   }d	}t        ||      }d
| i}t        j                  ||       y # t        $ r} d }~ww xY w)N
testCardIdrP   r;   r2  ztest paper id was not foundztest number was not foundrZ   r[   z/api/star-questionrg   r   )
r   r|   r~   r   r;   r	   r   r   r   r3   )r1   workFlowDatar   r   r   startQuestionDatar4   s          r5   saveStarQuestionr    s    L!#++228N2OTTVL&2&:&:#;<<566 {8,W5'lH- 8
 	c 12 s$   AB B 9B 	BBBc                    	 t         j                  j                  | d         }| d   |_        | d   |_        | d   |_        | d   |_        | d   |_        | d   |_        | d	   |_	        | d
   |_
        | d   |_        |j                          g }dD ]-  }| j                  |      s|j                  | d| |           / |rdj                  |      dz   nd}t        j                  j!                  |j"                        j%                         }|r||_        |j                          t)               d   d   }d}t+        ||      }| |d}	t-        j.                  ||	      }
y # t0        $ r} d }~ww xY w)Nr   rP   zcompany-namezcontact-personzcompany-emailphonewebsitecityrc   countrycompanytype)LinkedinFacebook	InstagramYoutubeTwitter:rY   rX   rC   r9   rZ   r[   z/api/update-company)rg   social_linksr   )r   r|   r}   namecontactpersonrA   phone1r  r  address1r  r  r   r   r   r   r~   rQ   r   sociallinksr	   r   r   r   r3   )r1   companyr  keysocial_links_stringbrandingr   r   r   r   send_company_datar4   s               r5   updateCompanyDBr    s   *//%%%%9/ ()9 : 1!'*"9-'#J/"9-&}5N 	>C||C ##se1Xc]O$<=	> @Ldii5;QS##**WZZ*@EEG#6H MMO {8,W5(lH- /

 %MM#LA s   B%E' (B>E' '	E60E11E6c                     	 t         j                  j                  | d         j                         }|rd|_        |j                          y y # t        $ r} d }~ww xY w)Nzdemo-idrP   rl   )r   r|   r~   r   demorequestr   r3   )r1   r   r4   s      r5   demoRequestDBr  L  s_    	"**11Xi5H1INNP'*L$   s   A
A 	AAAc                     	 | d   }|rP|D ]J  }t         j                  j                  |      j                         }|s4d|_        |j                          L y y # t        $ r} d }~ww xY w)Nr   rP   rl   )r   r|   r~   r   
deleteflagr   r3   )r1   delete_candidatesr   r   r4   s        r5   deleteCandidateDBr  Y  st    $UO 1 %%--444EJJL	+.I(NN$	%   s   <A A 	A)#A$$A)c                     	 | d   }|D ]Q  }t         j                  j                  ||d         j                         }|s8|d   |_        |j                          S y # t        $ r} d }~ww xY w)Nsources_datarF   rE   rH   )r   r|   r~   r   rH   r   r3   )r1   r]   r  rM   company_sourcer4   s         r5   updateSourcesDataDBr  i  sw    /" 	&F#^^22ZVTZ^2\aacN'-g$##%	&  s   >A A 	A-'A((A-c                     	 t         j                  j                  | d   |      j                         }|r/| d   |_        | d   |_        | d   |_        |j                          y y # t        $ r} d }~ww xY w)Nr   )rj   r:   rI   rJ   rK   )	r   r|   r~   r   rI   rJ   rK   r   r3   )r1   r]   r   r4   s       r5   updateCandidateInfoDBr  y  s~    %%,,%S],^cce	"*;"7I!)*!5I'1INN   s   A"A& &	A5/A00A5c                     	 t         j                  j                  | d   |      j                         }|r| d   |_        |j                          y y # t        $ r} d }~ww xY w)NrB   )rQ   r:   zdashboard-display)r   r|   r~   r   dashboardflagr   r3   )r1   r]   r   r4   s       r5   updateDashboardDisplayFlagDBr    sb    	??))Xg->)TYY[%-.A%BH"MMO   s   AA 	A!AA!c                    	 t         j                  j                  | d         }t        |j                  |j
                  |j                  t        j                         dd      }|j                          d|_
        |j                          t        |j
                        }||_        |j                          t        |j
                  dd|j
                         d	|j
                  iS # t        $ r} d }~ww xY w)
N	resume_idrP   ra  r   )sourceidresumeidr:   dateofcreationrO   strengthrp   PCProfile Created
profile_id)r   r|   r}   r   r  rQ   r:   r   r   r   rO   generate_profile_codeprofilecoder   r3   )r1   	user_dataresumeprofileprofile_coder4   s         r5   addResumeProfileDBr    s     ##x'<#=yy((%\\^
 	 ,GJJ7*WZZ->y||LWZZ(( s   C&C) )	C82C33C8c                    	 d }|j                         }t        j                  j                  |j                        d   j                         }|dv r	 t        |      }n|dk(  r|}nt        d      t        j                  j                  |j                  | d         j                         }|r|j                  }n:t        |j                  | d   | d         }|j                          |j                  }t        ||j                  |j                  t!        j"                         d	      }	|	j                          t%        |	j                  |j                  |
      }
|
j                          t'        ||	j                  |j                  t!        j"                         | d   | d   | d   | d   | d   | d   d      }|j                          |j                  |j                  d}t)        |j                  dd|j                         t+        |j                        }||_        |j                          y #  |}Y xY w# t        $ r} d }~ww xY w)Nr
   z.docz.docx.pdfUnsupported file formatrD   rE   rG   rp   r  r:   filenamer   rO   r  r  filecontentr   rI   
middlenamerJ   rA   rK   ra  )r  r  r:   r  r   rI   r  rJ   rA   rK   rO   )r   acvityuseridr  r  )readospathsplitextr  lowerr/   r3   r   r|   r~   r:   r   rQ   r   r   r   r   r&   r   r   r  r  )r1   r  r  r  file_binaryext
pdf_binaryrM   r   r  resume_filer  activity_datar  r4   s                  r5   addProfileDBr    s   Rmmoggx}}-a0668##)7D
 F]$J 566&&1D1D(S`Ja&bggiyyH  #--. /J
 OO!}}H!++}} 
 	 yy}}$
 	yy!++%\\^W% -!,/
+W%h'
 	  

%LL
 	WZZ->y||L,WZZ8*I)(
H  s1   AH? H5 GH? 5H<9H? ?	II		Ic                    	 t         j                  j                  | d         }t        j                  j	                  | d         \  }}| d   |_        | d   |_        | d   |_        | d   |_        | d   |_	        | d	   |_
        | d
   |_        | d   |_        | d   |_        | d   |_        | d   |_        | d   |_        | d   |_        | d   |_        | d   |_        | d   |_        | d   |_        |j,                  |_        |j1                          | d   }|r*t3        j4                  |d      j7                         |_        nd |_        |j1                          y # t:        $ r} d }~ww xY w)Nr   rP   r   r   rI   r  rJ   rA   rK   linkedinfacebookpassportfather_name	native_ofAddressLine1AddressLine2r  stater  zipcodedob%Y-%m-%d)r   r|   r}   r(   r   r   rI   r  rJ   rA   rK   r  r  passportnum
fathernamenativeofaddline1addline2r  r  r  r  rQ   r   r   r   r   datedateofbirthr3   )r1   r  profile_addresscreateddob_strr4   s         r5   updateProfileDetailsDBr    s   %//%%+)>%?#1#9#9#G#G{+ $H $
  !)$[1%l3#J/ )!(+#J/#J/&z2%m4#K0#+N#; #+N#; '/ ( 1"*9"5"*9"5$+JJ!5/"*"3"3GZ"H"M"M"OG"&G s   EE 	E.(E))E.c                 P   	 ddl m} | d   }| d   }t        j                  j	                  |      j                          t        |d      D ]:  \  }}t        j                  j                  |||d   |d	   |d
   |d   |d          < t        |       y # t        $ r} d }~ww xY w)Nr   CalculateProfileScoringr  rg   r  r
   start
coursenameinstitutenameyearfromyeartograder   sequencecourse	instituter  r  r  )
"app_api.functions.profile_strengthr  r!   r|   r~   r8  	enumerater  updateProfileScoreDBr3   )r1   r  r  profile_educationindex	educationr4   s          r5   updateProfileEducationDBr   :  s    Nl+
$V,  ''*'=DDF():!D 
	OE)$$++$ "<0%o6$Z0"8,!'* , 
	 	Z( s   BB 	B%B  B%c           
      <   	 | d   }| d   }t         j                  j                  |      j                          t	        |d      D ]6  \  }}t         j                  j                  |||d   |d   |d   |d	   
       8 t        |       y # t        $ r} d }~ww xY w)Nr  rg   r  r
   r  jobtitlecompanynamer  r  r   r  r"  r  r  r  )r"   r|   r~   r8  r  r  r  r3   )r1   r  profile_experiencer  ra   r4   s         r5   updateProfileExperienceDBr&  T  s    l+
%f-!!((:(>EEG )*<A F 		E*%%,,$ %j1$]3%j1#H- - 		 	Z( s   B	B 	BBBc                 L   	 | d   }| d   }t         j                  j                  |      j                          t	        |d      D ]>  \  }}t         j                  j                  |||d   |d   |d   |d	   |d
   |d          @ t        |       y # t        $ r} d }~ww xY w)Nr  rg   r  r
   r  projectname
clientname
roleplayed
skillsusedr  r  r   r  r(  r)  r*  r+  	yearsfromyearsto)r#   r|   r~   r8  r  r  r  r3   )r1   r  profile_projectsr  projectr4   s         r5   updateProfileProjectsDBr1  m  s    l+
#F+&&&<CCE&'7qA 	ME'##**$ %m4$\2$\2$\2#J/!(+ + 		 	Z( s   BB 	B#BB#c                 ,   	 | d   }| d   }t         j                  j                  |      j                          t	        |d      D ].  \  }}t         j                  j                  |||d   |d          0 t        |       y # t        $ r} d }~ww xY w)	Nr  rg   r  r
   r  	awardnamer   r   r  r3  r   )r   r|   r~   r8  r  r  r  r3   )r1   r  profile_awardsr  awardr4   s         r5   updateProfileAwardsDBr7    s    l+
!&)$$z$:AAC$^1= 	KE%!!(($ !+.V}	 ) 	 	Z(    BB 	BBBc                 ,   	 | d   }| d   }t         j                  j                  |      j                          t	        |d      D ].  \  }}t         j                  j                  |||d   |d          0 t        |       y # t        $ r} d }~ww xY w)	Nr  rg   r  r
   r  	cert_namer   r   r  certnamer   )r%   r|   r~   r8  r  r  r  r3   )r1   r  profile_certificatesr  certificater4   s         r5   updateProfileCertificatesDBr?    s    l+
'/##**Z*@GGI!*+?q!I 	E+''..$ &{3"6*	 / 	 	Z( r8  c                    	 | d   }| d   }t         j                  j                  |      j                          dj	                  |      }t         j                  j                  ||       t        |       y # t        $ r} d }~ww xY w)Nr  rb   r  rX   )r   primaryskills)r$   r|   r~   r8  r   r  r  r3   )r1   r  profile_skills
skills_strr4   s        r5   updateProfileSkillsDBrD    s    l+
!(+$$z$:AACXXn-
$$ $ 	% 	

 	Z( s   A5A8 8	BBBc           
      f   	 | j                  d      }| j                  d      }| j                  d      }t        j                  j                  |d      j	                         }|st        d      |j                  }t        j                  j                  |      j                  t        d      	      d
   }|xs ddz   }d }	|r*t        j                  j                  |      j                  }	t        j                  j                  ||t        j                         |||||	       |dv r8t        j                  j                  |      }
d|
_        |
j!                          y|dv r7t        j                  j                  |      }
d|
_        |
j!                          y# t
        $ r} d }~ww xY w)Nr  activitynamer  rp   )
lookupnamerO   zInvalid activity namer  r  max_seqrI  r   r
   rP   )r   r  r   r  rF  r   activityremarksr:   )RJCRr  )SLCSHT)r}   r)   r|   r~   ru  r3   lookupparam1r    	aggregater   r   r:   r  r   r   rO   r   )r1   useridr  rF  r  lookupactivity_codelast_seqnext_seqr:   r  r4   s               r5   updateProfileActivityDBrW    s   .\\,/
||N3,,y)%%,,C,PVVX344++"**11J1GQQ[^_i[jQkluvMQ&	**j*9CCI&& lln%&# 	' 		
 L(oo))Z)8G GNLLN  l*oo))Z)8G GNLLN s   E"F! %;F! !	F0*F++F0c           
      l   	 | j                  d      }| j                  d      }| j                  dg       }|st        d      |D ]  }|j                  d      }|r`t        j                  j	                  |      j                  |j                  d      |j                  d      |j                  d	      
       vt        j                  j                  |||j                  d      |j                  d      |j                  d	              y# t        $ r}t        dt        |              d }~ww xY w)NrR  r:   r  zNo rows providedrQ   rP   startday	starttimehours)rY  rZ  r[  )rR  r:   rY  rZ  r[  TzsaveWorkCalDB ERROR:)	r}   r3   r'   r|   r~   r  r  r2   r   )r1   r   r]   r  itemrow_idr4   s          r5   saveWorkCalDBr^    s   /,,x( \\+.
Wb) .//  	DXXd^F&&&&188!XXj1"hh{3((7+ 9  &&"(!XXj1"hh{3((7+ ' 	2  $c!f-s   DD 	D3D..D3c           
      b   	 t         j                  j                  |       }t        j                  j	                  |d         j                         }|rdj                  |d   j                  d      d d       }t        j                  |d      }|d   j                  d      dd  }|d	   }t        j                  j	                  t        |
      t        |      t        d      t        d      z        }t        d|       |st        j                  j                  |j                        }	t               d   d   }
t        |      t        |	j                        j!                  dd      z   t        |j"                        z   }|j%                  d      }|j'                         }|
|z   }||_        ||_        |d   |_        d|_        ||_        | |_        |j4                  |_        |j7                          t8        j                  j                  |	j:                        }|j(                  j=                  d      }t         j                  j                  |j*                        }|	j>                   d|j>                   }|j@                  |j0                  |jB                  |	j                  |j*                  |||j,                  |d   d	}t               d   d   }d}tE        ||      }tG        jH                  ||      }yyy # tJ        $ r}t        t        |              d }~ww xY w) NrP   r   r   r   r   r   r   r   r   r   r   r   r   rS   r   r   r   r   rC   rf   r   r   rX   r   r   rZ   r[   r   r   r   r   )&r   r|   r}   r   r~   r   r   r   r   r   r   r2   r   rj   r	   r   r   rQ   r   r   r   r   r   rO   r   rk   r:   r   r   rB   r   rA   r   r\   r   r   r   r3   )r   r1   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r   r   r   r  r4   s                           r5   scheduleInterviewLinkDBr`  0  s   D||7+
 $++22x?W2X]]_HHXi%8%>%>t%DRa%HIM ))-9OPI"9-33D9!"=K(^N*2299!.:Y[\gp[q<=SM!SV-<WYO #O4 #%--11\5M5M1N	!*-=!>~!Nn-Y5J5J1K1S1STWY[1\]`cdpdsds`tt!..1";;=-8)2&-;*,4^,D)&)#+7($+!)-&!!# #??..)//.B!-!7!7!@!@AT!U"ll..,2L2L.M'oo.a0A0A/BC !)".":":!-!6!6&/&;&;#/#=#=&4!)$0$=$=$,_$=
"  ){84W=4lH5&.mmCn&M#$!Y #^  c!fs   LL 	L.L))L.c           
      \   	 t        |       }t        j                  j                  |      }t	               d   d   }t	               d   d   }d}d|  d}t        ||      }t        ||      }	t        d|	       |j                  |j                  |j                  |j                  |j                  |j                  |j                  |j                  |d		}
|j                  r"t!        |j                  d
d|j                         t#        j$                  |	|
dd      }|j'                          |j)                         }|j                  d      dk(  r1t*        j                  j-                  |      j/                  d       yt1        |j                  dd            # t0        $ r} d }~ww xY w)NrP   rZ   r[   	hirelinesz+/api/hirelines-send-candidate-schedule-linkz/candidate-schedule-interview//r   )	rI   rJ   rA   rK   r]   r^   job_idr   r   r   zInterview Scheduling SentF
   )rd   re   timeout
statusCoder   r   Wr   TerrorzEmail sending failed)r   r   r|   r}   r	   r   r2   rI   rJ   rA   rK   r:   rj   rB   rQ   r   r   r   r   raise_for_statusrd   r   r~   r  r3   )enc_candidate_idr  r   candidate_detailsr   hirelines_domainr   schedule_link_endpointschedule_link_urlr   r   responseresponse_jsonr4   s                 r5    scheduleCandidateInterviewLinkDBrr  y  s   ,#$45#++//</@ !{8,W5$;x0=@#ABRASST!U#$46LMlH-eC ,55*33&,,'..+55-99'---00$

 &&$%6%@%@Fabkbnbno==>%QST!!# \*a/  ''L'AHHPSHT  M--g7MNOO s   E>F F 	F+%F&&F+c           	         	 t         j                  j                  | d         j                  t	        d            j                  d      }|xs ddz   }d }| d   r-t        j                  j                  | d         j                  }t        | d   t        j                         |d	d
| d   |      }|j                          y # t        $ r} d }~ww xY w)Nr   r  r  rH  rI  r   r
   rP   r  r  r  r   r   r  r   rF  r  r:   r    r|   r~   rQ  r   r}   r   r:   r   r   r   r3   )r1   rU  rV  r:   profile_activityr4   s         r5   createProfileActivityDBrw    s     ##Vh{3V4Ys:Y/S^	 	 MQ&	K **h{.C*DNNI* - ,#N3 
 	 s   CC 	CCCc           
         	 t        | j                  d            }|j                         r|| d<   nt        |      }t	        |      | d<   t
        j                  j                  | d         j                         }|rdj                  | d   j                  d      d d       }t        j                  |d      }| d   j                  d      dd  }|d   }t
        j                  j                  t        |	      t        |
      t        d      t        d      z        }t        d|       |st        j                  j                  |j                         }	t#               d   d   }
t        |      t        |	j                         j%                  dd      z   t        |j&                        z   }|j)                  d      }|j+                         }|
|z   }||_        ||_        | d   |_        d|_        ||_        |	j6                  |_        |j9                          t:        j                  j                  |	j<                        }|j,                  j?                  d      }t@        j                  j                  |j.                        }|	jB                   d|jB                   }|jD                  |j4                  |jF                  |	j                   |j.                  |||j0                  | d   d	}t#               d   d   }d}tI        ||      }tK        jL                  ||      }|	jN                  rtQ        |	jN                  dd       y y!y"# tR        $ r}t        t        |              d }~ww xY w)#Nr   r   r   r   r   r   r   r   r   r   r   r   rS   r   rP   r   r   r   rC   rf   r   r   rX   r   r   rZ   r[   r   r   SCHr   r   r   r   )*r   r}   r   r   r   r   r|   r~   r   r   r   r   r   r   r2   r   rj   r	   r   rQ   r   r   r   r   r   rO   r   r:   r   r   rB   r   r   rA   r   r\   r   r   r   r   r   r3   )r1   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r   r   r   r  r4   s                           r5   scheduleCandidateInterviewDBrz    s%   Shll>23 ??'.H^$ $G,M'3M'BH^$#++22x?W2X]]_HHXi%8%>%>t%DRa%HIM ))-9OPI"9-33D9!"=K(^N*2299!.:Y[\gp[q<=SM!SV-<WYO #O4 #%--11\5M5M1N	!*-=!>~!Nn-Y5J5J1K1S1STWY[1\]`cdpdsds`tt!..1";;=-8)2&-;*,4^,D)&)#+7()2)<)<&!!# #??..)//.B!-!7!7!@!@AT!U"ll..,2L2L.M'oo.a0A0A/BC !)".":":!-!6!6&/&;&;#/#=#=&4!)$0$=$=$,_$=
"  ){84W=4lH5&.mmCn&M#&&()<)<UCXY$3!  c!fs   MM 	M3M..M3c                     	 dj                  t        t        | d               }t        j                  j                  | d         }||_        |j                          y # t        $ r} d }~ww xY w)NrX   recruiter_idsr0  rP   )	r   mapr   r   r|   r}   recruiteridsr   r3   )r1   recruiter_ids_strr@   r4   s       r5   jdRecruiterAssignDBr    sa    	HHSh.G%HI__  HV$4 5+
	 s   AA 	A.(A))A.c                    	 ddl m}  |       }|j                  |       }t        j                  j                  |       }|d   |_        |d   d   d   |_        |d   d   d   |_        |d   d	   d   |_	        |d   d
   d   |_
        |d   d   d   |_        |d   d   d   |_        |j                          y # t        $ r} d }~ww xY w)Nr   r  rP   
percentage	breakdownr  scorera   projectsrb   certificatesawards)r  r  score_profiler   r|   r}   r  educationscoreexperiencescoreprojectsscoreskillsscorecertificatesscoreawardsscorer   r3   )r  r  profileScoreprofile_strengthr  r4   s         r5   r  r  ,  s    N.0'55jA//%%%4+L9!1+!>{!KG!T"2;"?"Mg"V 0 =j I' R.{;HEgN$4[$A.$QRY$Z!.{;HEgN s   B8B; ;	C
CC
c                    d }d }| j                  d      }|st        d      t        j                  j                  |      }| j                  di       }|j                  di       } ||j                  d            |_         ||j                  d	            |_         ||j                  d
            |_         ||j                  d            |_         ||j                  d            |_         ||j                  d            |_	         ||j                  d            |_
         ||j                  d            |_         ||j                  d            |_         ||j                  d            |_         ||j                  d            |_        |j                  d      }|r$t        j                   |d      j#                         nd |_        |j'                          |j                  di       }t(        j                  j+                  |      \  }	}
 ||j                  d            |	_         ||j                  d            |	_         ||j                  d            |	_         ||j                  d            |	_         ||j                  d            |	_         ||j                  d            |	_        |	j'                          t8        j                  j;                  |      j=                          |j                  dg       D ]  }t8        j                  j?                  | ||j                  d             ||j                  d             ||j                  d              ||j                  d!             ||j                  d"             ||j                  d#            $        t@        j                  j;                  |      j=                          |j                  d%g       D ]  }t@        j                  j?                  | ||j                  d             ||j                  d&             ||j                  d'             ||j                  d!             ||j                  d"            (        |j                  d)i       }tB        j                  j+                  |      \  }}
 ||j                  d*            |_"         ||j                  d+            |_#        |j'                          tH        j                  j;                  |      j=                          |j                  d,g       D ]  }tH        j                  j?                  | ||j                  d             ||j                  d-             ||j                  d.             ||j                  d/             ||j                  d0             ||j                  d1             ||j                  d2            3        tJ        j                  j;                  |      j=                          |j                  d4g       D ]d  }tJ        j                  j?                  | ||j                  d             ||j                  d5             ||j                  d6            7       f tL        j                  j;                  |      j=                          |j                  d8g       D ]d  }tL        j                  j?                  | ||j                  d             ||j                  d9             ||j                  d6            :       f tO        |       y );Nc                 2    	 | dv ry t        |       S #  Y y xY wN)rC   N)r   vals    r5   to_intz#updateFullProfileDB.<locals>.to_intC  s%    	j s8O	s    
 c                     | dvr| S d S r  rf  r  s    r5   safe_strz%updateFullProfileDB.<locals>.safe_strK  s    +s55    r   zprofileid missingrP   r  personalr   rI   r  rJ   rA   rK   r  r  r  r  r  r  r   addressr  r  r  r  r  r  r  r  r  r  r  r  r  r  r  ra   r"  r  r$  rb   rA  r]  r  r(  r)  r*  r+  r-  r.  r,  r  r3  r   r4  r  r<  r;  )(r}   r3   r   r|   r   rI   r  rJ   rA   rK   r  r  r  r  r  r   r   r  r  r   r(   r   r  r  r  r  r  r  r!   r~   r8  r  r"   r$   rA  r]  r#   r   r%   r  )rg   r  r  r  r  profile_blockr  r  address_datar  _eduexpskills_datarb   projacs                     r5   updateFullProfileDBr  @  s   6 +&J+,,oo!!Z!0GHHY+M  R0H X\\'23GM k!:;G!(,,|"<=GZ 89GX\\'23GMhll845GNZ 89GZ 89G"8<<#>?G!(,,|"<=GZ 89G
,,}
%C58#z*//1d  LLN<<	2.L''55
5KJGQ 0 0 <=G 0 0 <=G 0 0 89GL 0 0 9:GM 0 0 ;<GO 0 0 ;<GOLLN ##j#9@@B  b1 	
  '' CGGJ/0CGGH-.sww{34CGGJ/0#''(+,3777+, 	( 	
	
 $$z$:AAC  r2 
!!(( CGGJ/0cggj12SWWY/0CGGJ/0#''(+, 	) 	

  ##Hb1K%%33j3IIFA#KOOO$DEF%koo6G&HIF
KKM ""Z"8??A!!*b1 

&& DHHZ01 -!89 67 67 67TXXk23488I./ 	' 		


   : 6==?x, 
$$ AEE*-.quu[12f&	 	% 	

 &&&<CCE~r2 
##** AEE*-.aeeJ/0f&	 	+ 	

 $r  c           
          	 t        | d   | d   | d   | d   | d   |j                  t        j                         d      }|j	                          y # t
        $ r} d }~ww xY w)Nclientr0  	startdater  jd_idsrp   )clientidr0  r  r  r  r\  	createdatrO   )r*   rQ   r   r   r   r3   )r1   r  	workspacer4   s       r5   addWorkspaceDBr    sk    )y) -W%h'! 	
	 	 s   AA 	A AA c           	         	 t         j                  j                  |       j                  t	        d            j                  d      }|xs ddz   }d }| r*t        j                  j                  |       j                  }t        | t        j                         |||||      }|j                          y # t        $ r} d }~ww xY w)	Nr  r  rH  rI  r   r
   rP   rt  ru  )	r   rT  rF  rR  rU  rV  r:   rv  r4   s	            r5   r   r     s    ##ViV(Ys:Y/S^	 	 MQ&	**i*8BBI*! ('!
 	 s   B3B6 6	C?C  Cc                     	 t         j                  j                  | d         }| d   |_        | d   |_        | d   |_        | d   |_        | d   |_        |j                          y # t        $ r} d }~ww xY w)NworkspaceidrP   r  r0  r  r  r  )
r*   r|   r}   r  r0  r  r  r  r   r3   )r1   r  r4   s      r5   updateWorkspaceDBr    s    %%))Xm-D)E	%h/	$Y/	&{3	"7+	#H-	 s   A%A( (	A71A22A7c                 D   t        j                         }|j                  d      }|j                  d      }d}t        j                         5  t
        j                  j                  |||      j                         }|st        |||d      }d}n!|xj                  dz  c_	        |j                  }|j                          d d d        t              j                  d      }d| | | }t        d	 |D              }	|	d
z  }
|
dk7  r|
nd
}| | }|S # 1 sw Y   TxY w)NrR   rG  rL   rT   r
   )rU   rV   rW   r      r  c              3   T   K   | ]   }|j                         st        |       " y wrK  rL  )rM  r  s     r5   rO  z(generate_profile_code.<locals>.<genexpr>  s     >!))+SV>rP  rQ  r   )r   r   r   r.   atomicr   r|   r~   ru  r   r   r   zfillrg  )r  todayyymmprefix_typerefserial
serial_strrl  rm  quotientrn  r  s                r5   r  r    s   LLNE		B		BK 
			 !!((k2r(RXXZ;BqQCF JJ!OJZZF
 V""1%J RDZL)I >Y>>JQH#q=xaH[
+L7 s   A6DDc                    	 t         j                  j                  |       j                         }|st	        d|  d       y |j
                  dk7  rt	        d|  d|j
                          y d}t        j                  j                  |       j                         r|dz  }t        j                  j                  |       j                         r|dz  }t        j                  j                  |       j                         r|dz  }t        j                  j                  |       j                         r|d	z  }t        j                  j                  |       j                         r|d	z  }t        j                  j                  |       j                         r|dz  }t	        d
| d       |dk\  r'd|_        |j                          t	        d|  d       nt	        d|  d| d       t	        d|        y # t        $ r} d }~ww xY w)NrP   zProfile z not found.ra  z is already in status: r   r     re  zCalculated Completion: %<   rS   z status updated to Ready.z remains in Draft (Percentage: z%)r  )r   r|   r~   ru  r2   rO   r"   r   r$   r!   r%   r   r#   r   r3   )r  r  completion_percentager4   s       r5   updateProfileCompletionr  &  s   4//((J(7==?HZL45 >>S HZL(??OPQ ! $$++j+AHHJ!R'!   ''*'=DDF!R'! ##**Z*@GGI!R'! &&--
-CJJL!R'!   ''*'=DDF!R'! ""))J)?FFH!R'!'(='>a@A !B& GNLLNHZL(ABCHZL(GH]G^^`abl:& s$   ?G; *G; -FG; ;	H
HH
c           
         	 t         j                  j                  | d   |      j                         }|rC| d   |_        | d   |_        | d   |_        | d   |_        | d   |_        |j                          y t        || d   | d   | d   | d   | d   | d         }|j                          y # t        $ r} d }~ww xY w)	Njob_board_id)
jobboardidr:   api_keyr   usernamepasswordrO   )r:   r  apikeyr   r  r  rO   )r+   r|   r~   r   r  r   r  r  rO   r   r3   )r1   r:   job_board_credentialsr4   s       r5   saveJobBoardConfigDBr  ^  s     2 : : A AXVdMepy A z    !B *29*=!(-5j-A!*-5j-A!*-5j-A!*+3H+=!(!&&( %7%%n5!),#J/#J/#J/!(+%! "&&( s   A6B. 94B. .	B=7B88B=c                 P   	 | d   }|j                   }t        t        t        | j	                  dg                   }t
        j                  j                  ||      }t        |j                  dd            }||z
  }|rXt
        j                  j                  |D cg c]/  }t        |||t        j                         |j                  d      1 c}       ||z
  }	|	r1t
        j                  j                  |||		      j                          y y c c}w # t        $ r}
 d }
~
ww xY w)
NrB   job_board_ids)r:   r  r  Trr   rp   )r:   r  r  publishedonpublishedbyrO   )r:   r  jobboardid__in)r:   setr}  r   r}   r,   r|   r~   r   bulk_creater   r   rQ   r8  r3   )r1   r   r  r:   user_selected_jobboardsexisting_jobboardsexisting_jobboard_idsto_create_jobboardsjobboard_idto_delete_jobboardsr4   s              r5   saveJDJobBoardsDBr  }  s4   )W%	NN	"%c#x||OR/P&Q"R(0077 8 

 !$**<d*C!
 68MM++ $7
-   ''* ( $
- 
 46MM&&##2 '  fh 
-*  s*   BD 4D>D D 	D%D  D%c                    	 |j                         }t        j                  j                  |j                        d   j                         }|dv r	 t        |      }n|dk(  r|}nt        d      t        j                  j                  |j                  | d         j                         }t        |j                  |j                  |j                  t        j                          d      }|j#                          t%        |j                  |j                  |	      }|j#                          y #  |}Y xY w# t        $ r}	 d }	~	ww xY w)
Nr
   r  r  r  rM   rE   rL   r  r  )r  r  r  r  r  r  r/   r3   r   r|   r~   r:   r   r   rQ   r   r   r   r&   )
r1   r  r  r  r  r  rM   r  r  r4   s
             r5   addResumeDBr    s   (mmoggx}}-a0668##)7D
 F]$J 566&&1D1D(S[J\&]bbdyy!++}} 
 	 yy}}$
 	7)(
8  s1   AD8 D/ CD8 /D53D8 8	EEEc                     	 t         j                  j                  |j                        }| d   |_        |j                          y # t        $ r} d }~ww xY w)NrP   template_id)r   r|   r}   r:   resumetemplateidr   r3   )r1   r  r  r4   s       r5   updateResumeTemplateDBr    sM    //%%)<)<%=#+M#:  s   AA 	AAAc                 8   	 t         j                  j                  |      }|j                         }t        j
                  j                  |j                        d   j                         }|dv r	 t        |      }n|dk(  r|}nt        d      t        j                  j                  |j                  d      j                         }|s(t        dd|j                  	      }|j                          t!        |j"                  |j                  |j                  t%        j&                         |j"                  d
      }	|	j                          t)        |	j"                  |j                  |      }
|
j                          y #  |}Y xY w# t        $ r} d }~ww xY w)NrP   r
   r  r  r  CARERrE   Careers)rF   rH   r:   rL   )r  r:   r  r   rB   rO   r  )r   r|   r}   r  r  r  r  r  r  r/   r3   r   r~   r:   r   r   r   rQ   r   r   r&   )r  rA   rB   
resumefilejobdescr  r  r  rM   r  r  r4   s               r5   addResumeFromJobPageDBr    s]   5//%%%/ oo'ggz/288:##)7D
 F]$J 566&&1B1B&PUUW!#--F KKMyy))! JJ
 	 yy!$
 	K)(
N  s1   A.F
 1F <DF
 FF
 
	FFFc                 J   	 | j                  d      }| j                  dg       }|syt        t        j                  j	                  |      j                  dd            }|D ch c]0  }|j                         j                  dd	      j                         2 }}|D ][  }|j                         }|s|j                         j                  dd	      }	|	|vs;t        j                  j                  ||
       ] yc c}w # t        $ r}
t        d|
       Y d }
~
yd }
~
ww xY w)Nr  tagsF)r  tagTrr   r   rC   )r  r  zError saving resume tags:)r}   r  r-   r|   r~   r   r  r   r   r  r3   r2   )r1   r  r  r  existing_tagstnormalized_existingtag_name	clean_tag
normalizedr4   s              r5   saveresumetagsDBr  1  s$   'LL-	||FB' KK	2[T[*
 #
 GGIc2&,,.
 
  	H (I"*223;J !44""!& # 	 +
.  )1-s4   %D >D &5C>>D #D >D 	D"DD"c                 l   	 t        j                         5  t        j                  j	                  |j
                        j                  d        t        j                  j	                  |j
                  | d         j                  d       d d d        y # 1 sw Y   y xY w# t        $ r} d }~ww xY w)Nr9   )
webpublishjob_ids)r:   id__inrl   )r.   r  r   r|   r~   r:   r  r3   )r1   r  r4   s      r5   publishCareerJdDBr  \  s    ! 	%OO""Y-@-@"AHHTXHYOO""#--	* #  ff$	% 	% 	%  s5   B$ A9BB$ B!B$ !B$ $	B3-B..B3rK  )ir  rd   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,   r-   	django.dbr.   doc2pdfr/   r6   r   r  r.  r?  rD  rq  rw  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r   r&  r1  r7  r?  rD  rW  r^  r`  rr  rw  rz  r  r  r  r  r  r   r  r  r  r  r  r  r  r  r  r  rf  r  r5   <module>r     s   	    ) # 2 ( d d d d d d d d d " /Xv]@GT8z
8v>*Z2,`4+\
   
!JSl&R426..*/d0fER-b<Tn
( w% w%t(:$$P5p>*Z)X6`(Vr  