
    ݦii                    4   d dl Z d dlZd dlZd dlZd dlZd dlZd dlZd dlZd dlZd dl	Z	d dl
Zd dlmZmZmZ d dlmZmZ d dlmZmZmZmZ d dlmZ d dlmZ d dlmZ d dl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$ ddl%m&Z& d dl'm(Z( d dl)m*Z* ddl+m,Z, d dl-m.Z.m/Z/m0Z0m1Z1m2Z2m3Z3m4Z4m5Z5m6Z6m7Z7m8Z8m9Z9m:Z:m;Z;m<Z<m=Z=m>Z>m?Z?m@Z@mAZAmBZBmCZCmDZDmEZEmFZFmGZGmHZHmIZImJZJmKZKmLZLmMZMmNZNmOZOmPZPmQZQmRZRmSZSmTZTmUZUmVZVmWZWmXZXmYZYmZZZm[Z[m\Z\m]Z]m^Z^m_Z_ d dl`maZambZbmcZcmdZdmeZemfZf d dlgmhZh d dlimjZj ddl%mkZkmlZl ddlmmnZn d dlompZp ddlqmrZr ddlsmtZt ddlumvZvmwZw ddlxmyZy d Zzd Z{d  Z|d! Z}d" Z~d# Zd$ Zd% Zd& Zd' Zd( Zd) Zd* Zd+ Zdd,Zd- Zd. Zd/ Zd0 Zd1 Zd2 Zd3 Zd4 Zd5 Zd6 Zd7 Zd8 Zd9 Zd: Zd; Zd< Zd= Zd> Zd? Zd@ ZdA ZdB ZdC ZdD ZdE ZdF ZddGZdH ZdI ZdJ ZdK ZdL ZdM ZdN ZdO ZdP ZdQ ZdR ZdS ZdT ZdU ZdV ZdW ZddXZdY ZdZ Zd[ Zd\ Zd] Zd^ Z	 	 	 dd_Zd` Zda Zd dblmZ 	 	 	 	 ddcZdd Zde Zdf Zdg Zdh Zdi Zd djlmZ 	 	 	 	 ddkZdl Zdm Zdn Zdo Zdp Zd dqlmZmZmZmZ dr Zds Zdt Zdu Zdv Zdw Zdx Zdy Zdz Zd{ Zd d|lmZ dd}Zd~ Zd Zy)    N)QCountAvg)datetimedate)r   	timedeltatimer   )r   defaultdict)timezone)redirect)urljoinurlparse)Token)pisa)load_workbook)BorderSide   )public_email_domains)	getConfig)BASE_DIR)sendRegistrainMail)2AccountCompanyCreditsCompanyDataCreditsJobDesc	CandidatePaymentsRegistrationReferenceIdCompanyUser	User_dataRolesPermissionsWorkflowCallScheduleVacationWorkCalExtendedHours
HolidayCal	QResponseCdnData
IvFeedbackEmail_templateInterviewMediaBrulesBrandingRole
JdAnalysisSourceUploadsResumeProfileProfileActivityProfileEducationProfileExperienceProfileProjectsProfileSkillsProfileAwardsProfileCertificatesProfileAddress
ResumeFileLookupmasterProfileAnalysis	WorkspaceClientJobBoardJobBoardCredentialJDJobBoardsResumeTemplateTag)saveJdNewTest	saveAddJDsaveUpdateJddeleteTestInJdDBsaveInterviewersJDaddProfileActivityDB)	sendEmail)model_to_dict)const_candidate_statusconst_paper_types)validate_excel_with_json)settings)addCandidateDB)calculateJDProfileMatching)convertProfilingVideocompareVoices)encrypt_codec           	      D   	 t        | d         }|j                  d      d   }|t        v ryt        j                  j                  |      }|ryt        | d   || d   | d   | d	   t        j                         
      }|j                          y# t        $ r} d }~ww xY w)N
reg-bemail@r   )companyemail   reg-companyreg-locationreg-namereg-companytype)companynamer`   locationcontactpersoncompanytyperegisterationtimer   )
strsplitr   r   objectsfilterr   nowsave	Exception)dataObjsbussiness_emailemail_domainemail_checkcompany_dataes         7/home/hirelines/hirelines/app_api/functions/services.pyaddCompanyDataServicery   e   s    h|45&,,S1!4//!))00o0N" /(n-":. !23&lln
 	 s"   *B "B ?B 	BBBc           
      *	   	 t        | d         }|j                  d      d   }|t        v ryt        j                  j                  |      j                         }|ryt        j                  j                  |      j                         }t               }|ryt        | d   ||| d	   t        j                         d
d      }|j                          t        | d   t        j                         | d   |j                  d||d
      }|j                          t               d   }t        |j                  t        j                         dd|d         }	|	j                          t        j                  j!                  |j                        \  }
}|	j"                  |
_        |
j&                  r+t)        |	j"                        t)        |
j&                        z   n|	j"                  |
_        |
j                          t+        |j                  |	j,                  d|j                  |	j                  |	j"                  |
j&                        }|j                          t/        |j                  d|d         j                          t/        |j                  d|d         j                          t/        |j                  d|d         j                          t0        j                  j                  d      j                         }t1        |j                  |j2                  |j4                  r|j4                  nd |j6                  r|j6                  nd d
!      }|j                          d"|j                  d#}t9        ||j:                  |j<                  |j                  $      }|j                          t               d%   d&   }d'}t?        ||      }|j                  |j:                  |j2                  |t        |j4                        |j6                  d(}tA        jB                  ||)      }t               d%   d*   }|j:                  |jD                  |jF                  | d+d,}tI        |       y# tJ        $ r}tM        t        |              d }~ww xY w)-Nr^   r_   r   emailra   )emaildomain   rb   re   AI)namer}   r|   ri   registrationdatestatus	freetrailrd   rc   HR-Admin)r   	datentimerg   	companyidrolepasswordr|   r   	FREETRAILTi0u  registration_grace_credits)r   	dateofpay	modeofpayamountcreditsr   C)r   transdatetime	transtypeusertransidpointsbalanceSscreening_credits_charges)r   r   r   Ecoding_credits_chargesinterview_credits_chargesr    )r   contentlogourlsociallinksr   RC03codelabelr   useridDOMAINacertz/api/add-company)idcompany_namebrand_contentcompany_emailcompany_logor   json	hirelinesz/login)r   r|   r   url)'rk   rl   r   r$   rm   rn   lastr#   generate_random_passwordr   ro   rp   r   r   r    r   get_or_creater   creditr   intr   r   r   r3   r   r   r   r6   r   r   r   requestspostr|   r   r   rq   print)rr   rs   user_email_domain
user_checkcompany_checkrandom_passwordcompanyr   free_trail_datapaymentscompany_accountcompany_account_flagr   default_brandingcompany_brandingr   sourceacert_domainendpointr   rv   send_company_datahirelines_domain	mail_datarw   s                            rx   registerUserServicer      s   Yh|45+11#6q9 44\\(((?DDF
..;L.MRRT24 m,-%$%67!)G LLNj)",,.!.1!**(%	D IIK'k+6O!**",,.'(DEH MMO4;OO4Q4Q!** 5R 51O1 &.%5%5O" #** H$$%O,C,C(DD%% #
   "!**&00WW '''//G LLN!**'(CD df!**'(@A df!**'(CD df'//666CHHJ'!**(004D4L4L(00RT4D4P4P$00VX  !!#|$Dii..ww	F KKM$;x09L)H,1C jj '!1!9!9!0 #$4$<$< =/;;L !)c E({84[A		 MM*+62	I y) c!fs)   *Q/ 0Q/ :Q/ OQ/ /	R8RRc                    	 t         j                  j                  |       j                         }t        j                  j                  | d      j                  dd      }|rYd}d}d}d}d}d}	d}
d}d}t        j                  j                  ||       j                  |	      }|D ]  }|j                  d
k(  r0|dz  }|j                  dk(  r|dz  },|j                  dk(  s<|dz  }B|j                  dk(  r0|dz  }|j                  dk(  r|dz  }k|j                  dk(  s{|	dz  }	|j                  dk(  s|
dz  }
|j                  dk(  r|dz  }|j                  dk(  s|dz  } |j                  |j                  ||||z   z
  ||||||	z   z
  ||	|
|
||z   z
  |||j                  r|j                  ndd}|S y # t        $ r} d }~ww xY w)Nr   Y)jobid
deleteflagr   Tflatr   r   r   )candidateid__inr   r   FPr   r   ORN)r   titlescreening_testsscreening_pendingscreening_failscreening_passcoding_testscoding_pendingcoding_failcoding_pass
interviewsinterview_pendingoffer_lettersrejecteddisplay_flag)r   rm   rn   r   r   values_listr!   exclude	papertyper   r   r   dashboardflagrq   )jid
company_idjob_descdeleted_candidate_idsr   r   r   r   r   r   r   r   r   registrationsregistationjd_datarw   s                    rx   getJobDescDatar   !  s4   F??))S)1668 ) 1 1 8 8# !9 !

+d+
& 	 ONNLKKJMH(0077$C 8 g&;g<   - &((C/#q(O"))S0&!+$++s2&!+ **c1 A%L"))S0#q($++s2#q( **c1!OJ"))S0%*$++s2 A+&0 "!#2%4!N2&4"0"0 ,".+2K"L**(%/=83K%L!.$.6.D.DH**##G( Nw z  s1   C#F? &>F? %F? ;)F? %AF? ?	GG		Gc                 J    	 | rt        | |      }|S y # t        $ r} d }~ww xY wN)rL   rq   )jdDatacompyId	test_datarw   s       rx   	jdTestAddr   k  s6    %fg6I   s    	""c                 F    	 t        | ||      }|S # t        $ r} d }~ww xY wr   )rM   rq   )	addjdData	companyIDhrEmailr   rw   s        rx   addJdServicesr   t  s-    9i9 s    	  c                 r   	 g }t         j                  j                  |       j                  d      }|D ]  }t	        |      }|j                  |         t        j                  j                         }g }|D ]'  }t	        |      }|d   dk7  s|j                  |       ) ||dS # t        $ r}	 d }	~	ww xY w)Nr   -idNamer   )usrsroles)	r$   rm   rn   order_byrS   appendr4   allrq   )
r   usersDataLstuserLstr   userDatalstRolesroleslstroleeuserRolerw   s
             rx   companyUserLstr  |  s    ,,%%	%:CCEJ 	*D$T*H)	* <<##% 	*E$U+H:-)	*
 %x88 s   BB' B' '	B60B11B6c                    	 t         j                  j                  | d         j                         }|ri d|j                  d|j
                  dn|j
                  d|j                  dn|j                  d|j                  dn|j                  d|j                  dn|j                  d	|j                  dn|j                  d
|j                  dn|j                  d|j                  dn|j                  d|j                  dn|j                  d|j                  dn|j                  j                         d|j                  dn|j                  j                         d|j                   dn|j                   d|j"                  dn|j"                  d|j$                  dn|j$                  d|j&                  dn|j&                  d|j(                  dn|j(                  }|S y # t*        $ r} d }~ww xY w)NJdIDr   r   r   r   r   descriptionexpminexpmax
departmentrg   budgetskillsetsecondaryskills
skillnotesexpjoindate	positionsr   hiringmanager)r   rm   rn   r   r   r   r   r  r  r  r  rg   r  r  stripr  r  r  r  r   hiringmanageridrq   )r   r   
jdDataDictrw   s       rx   updateJdDataServicer     s)   &''9V+<'=BBDfiiv||3 fkk1v{{ V%7%7%?rVEWEW	
  5"6==  5"6== F$5$5$=b6CTCT &//"9Bv  5"6== &//"9Bv?T?T?V ")?)?)G2VMcMcMiMiMk F$5$5$=b6CTCT V%7%7%?rVEWEW 6#3#3#;RAQAQ  5"6==   v'='='E6KaKa!J$ C F  s   G5G9 9	HHHc                 D    	 t        | ||       y # t        $ r} d }~ww xY wr   )rN   rq   )r   r   r   rw   s       rx   updateJdServicesr"    s&    Y	73 s    	c                 b   	 | d   }| d   }| d   }| d   }| d   }| d   }| d   }t        |||||||t        j                         d		      }t        j                         j                  d
      }	t        j
                  j                  ddj                  |      |	      \  }
}|dk(  rd}||
_        |
j                          |dk(  r&|
j                  dz   }||
_        |
j                          t        dj                  t        |
j                                    }|
j                   |
j                   | }||_        |j                          t               d   d   }d}t!        ||      }|||||||j                  d}t#        j$                  ||      }|j&                  }|r|t)        j*                  |j-                  d            }t/        |j0                  |j2                  |j4                  d|j6                  |j8                  |d         }|j                          y y # t:        $ r} d }~ww xY w)Nfnamelnamer|   mobilepaper_idr   job_idr   )		firstnamelastnamer   paperidr|   r&  r   r   r   z%yr   z{:03})typeprefix1prefix2Tr   Fz{:05}r   r   z/api/hirelines-add-candidate)r$  r%  r|   r&  r'  r   reference_idr   utf-8data)candidateidr+  r   r   r   r   r   )r   r   ro   strftimer"   rm   r   formatlastidrp   rk   r   r-  r.  r2  r   r   r   r   r   r   loadsdecoder!   r   r+  r   r   r   rq   )rr   r$  r%  r|   r&  r'  r   r(  	candidateyear	refid_obj
refid_flagr5  candidate_id_seqcandidate_coder   r   r   candidate_datasend_candidate_dataresponse_content	json_datac_registrationrw   s                           rx   candidateRegistrationServicerC    sJ   Q!!!(#J'l+
(# %\\^

	 ||~&&t, + 3 3 A AgnnZ8$ !B !
	: F%INN%%)F%INNw~~c)2B2B.CDE%--.y/@/@.ABRAST .	 !{8,W51lH-  $%11
 'mmCnE.66

#3#:#:7#CDI)%LL!))!*!;!;#--oo#F+N !   s   HH 	H.(H))H.c           	      p   	 t         j                  j                  |      }t        j                  j	                  | |j
                        j                  d      j                  d      }g }|D ]0  }t        j                  j	                  |j                  |j
                        }|j                  |j                  |j                   d|j                   |j                  g g g dd	}|D ]  }|j                  j                  d
      |j                   d}	|j"                  dk(  r|d   d   j%                  |	       R|j"                  dk(  r|d   d   j%                  |	       y|j"                  dk(  s|d   d   j%                  |	        |j%                  |       3 |S # t&        $ r}
 d }
~
ww xY w)Nr   )r   r   r   r   r  r2  r    r   r   r   )r   cidr   r|   r   %Y-%m-%d)r   r   r   r   r   r   )r$   rm   getr   rn   r   r   r  r!   r   r2  r)  r*  r|   r   r3  r   r   r  rq   )r   r   r   
candidatescandidates_datar8  r   candidate_inforegistrationregistration_inforw   s              rx   getJdCandidatesDatarQ    s   -||6* $$3$..$IWW$Xe_ 	 # 	3I(0077%LLI4G4G 8 M
  ll ,,$../q1C1C0DE"')!<N !. S )99BB:N*11%!
  ))S0"?3C8??@QR!++s2"?3C8??@QR!++s2"?3C8??@QRS "">29	3<  s   E4F& 7.F& &	F5/F00F5c                 r   	 t         j                  j                  |       }g }t        j                  j	                  |j
                        j                  d      j                  d      }|D ]  }t        j                  |j                  d      }t        j                  j	                  |j                        j                         }|j                  |j                  |j                  |j                   |j"                  |j$                  ||r|j&                  ndd        |S # t(        $ r} d }~ww xY w)Nr   r   r   rE  r  r   )r   candidate_idr)  r*  r|   r   jd_title)r$   rm   rK  r   rn   r   r   r  rT   r   r   r   r   r  r   r2  r)  r*  r|   r   rq   )r   r   candidates_listrL  r8  c_statusr   rw   s           rx   getCandidatesDatarW  H  s   !||6* $$t~~$>WW$Xe_ 	 $ 	I-11)2B2BBGH---AFFHH""#,,$-$9$9!*!4!4 ) 2 2&__&2:
	$  s   D$D' '	D60D11D6c                    	 t         j                  j                  | d   | d   d      }	 |r}t        j                  j	                  |j
                  |j                  d      }|s<t        |j
                  |j
                  |j                  dd	      j                          t        j                  j	                  |j
                  
      j                  d      j                         }t        j                  j                  |j
                  |j                  d      }d|_        |j                          |r|j                  S t        j                  j	                  |j
                        j                         }t        j                  j                  |      \  }}|j                  S y #  Y yxY w# t        $ r}t        t!        |              d }~ww xY w)Nr|   r   r   )r|   r   r   r   r   )	usr_emailusr_passwordr   T)usernamerY  rZ  is_staffr   )user__usr_emailz-created)rY  )r   )r$   rm   rK  r%   rn   r|   r   rp   r   r  firstr\  keyr   rq   r   rk   )rr   r   check1	token_obj	user_datacheck
token_flagrw   s           rx   authentication_servicere  m  s   ||7#hz.B3   
!&&--**4==s . F !ZZ"jj!%! $&$$TZZ$@*% 
 "))--**4==s . I "&INN }}$!))004::0FLLN(-(C(C(C(O%	: }}$9 B  c!fs*   (F, DF3 A&F3 ,F03	G<GGc                    	 t         j                  j                  |       j                  d      }g }|D ]  }|D cg c]  }|d   |j                  k(  s| }}|sb|j                  |j
                  |j                  g d}|d   j                  |j                  |j                  d       |j                  |       |s|D cg c]  }|d   |j                  k7  r| }}|d   d   j                  |j                  |j                  d       |j                  |d           |}|S c c}w c c}w # t        $ r}	t        t        |	              d }	~	ww xY w)N)enable__containsorderbymenuItemParent)ri  UIIconmenuItemKeychildrl  )menuItemNamemenuItemLinkr   )r&   rm   rn   r  functionfunction_iconfunction_categoryr  sub_functionfunction_linkrq   r   rk   )
	user_role	functionstempro  funcfunctionObjList	uifuncObjmenuItemmenuItemListrw   s
             rx   get_functions_servicer|    s   *$,,33& 4 

(9
 	 ! 	0H "&.>)?8CTCT)TO  #&.&7&7&44#+#=#=		 '"))(0(=(=(0(>(> I&  %)  01X5F5FF  
  "7+22(0(=(=(0(>(> OA./?	0@ ?$  c!fsB   :D4 D*D*A(D4 D4 D/ A	D4 *
D4 4	E=EEc                    	 t         j                  j                  |       j                         }|rt        j                  j                  |j                        }t               d   d   }|j                  dk(  r`|j                  dk(  rQ|j                  t        t        |            z   }t        j                         |kD  rd|_        |j                          y	|j                  dk(  r|j                  dk(  ry	y y y # t         $ r} d }~ww xY w)
Nr{   r   r   daysr   r   r~  r   T)r$   rm   rn   r   r#   rK  r   r   r   r   r   r   r   r   ro   rp   rq   )	user_mailr   r   
trial_daystrial_end_daterw   s         rx   checkCompanyTrailPeriodr    s    ||"""388:oo))T^^)<G"[1&9J  C'GNNc,A!(!9!9IZ= " <<>N2(+G%LLN  C'GNNc,A -B'% ,  s   CC= C= =	DDDc                     	 t         j                  t         j                  z   dj                  fdt	        |       D              }|S # t
        $ r} d }~ww xY w)Nr   c              3   H   K   | ]  }t        j                          y wr   )secretschoice).0_
characterss     rx   	<genexpr>z+generate_random_password.<locals>.<genexpr>  s     M!7>>*5Ms   ")stringascii_lettersdigitsjoinrangerq   )lengthr   rw   r  s      @rx   r   r     sL    ))FMM9
77MuV}MM s   AA	 		AAAc                     	 t         j                  j                  |       j                  ddg      }g }|r/|D ]*  }|j	                  |j
                  |j                  d       , |S # t        $ r} d }~ww xY w)Nr   Dr   
status__in)r   r   )r   rm   rn   r   r  r   r   rq   )rI  company_jdsjds_listjdrw   s        rx   getCompanyJdDatar    s    oo,,s,;CCSz D 
 ! Bruurxx @AB  s   A&A) )	A82A33A8c                 H   	 t        t        j                  j                  |       j	                               }t        |      dkD  r|D ]H  }t        j                  j                  |d         j                         }d}|r|j                  }||d<   J |j                          g }g }|D ][  }|d   dk(  r|j                  |       |d	k(  r)|d   d
k(  r|d   s0|d   dk(  r9|j                  |       K|j                  |       ] ||dS g g dS # t        $ r} d }~ww xY w)Nr   r   	createdbyr   r   createdbyUserNamer   r   Hiring-Managerr  approval_statusr   )activeJd
inactiveJd)listr   rm   rn   valueslenr$   r   r   reverser  rq   )		companyIdrt  r  r  r
  userNameInactiveJds	activeJdsrw   s	            rx   getCompanyJDsListr    sO   47??11I1FMMOP{a! 3<<.."[/.BGGI'}}H*2&'3 !KI! ) h<3&&&r*  00 (|s*26G3H  (|s* $$R( $$R(=)@ !*EE !#"55 s   D
D D 	D!DD!c                 6	   	 t         j                  j                  |       j                         }g }|j                  }|rg }t        d|       t        j                  |      }|D ]e  }t        |j                               d   }d||   v r||   j                  d      n||   g}	|	D ]!  }
|j                  |
j                                # g g }g }|rt        j                  j                  d|g d      j                  dd	      }t        j                  j                  | d
      j                         }i }|D ]1  }|j!                         D ci c]  \  }}|||nd }}}|||d   <   3 |D ]  }|r|j                  |d   |d	   d       g }|j"                  s.t        j                  |j"                        }|D ]d  }|st        t        j                  j                  |      j                  dd	            }|sB|sE|j                  |d   d   |d   d	   d       f  t%               d   d   }t'        |j(                        }| d| }i d|j(                  d|j*                  dn|j*                  d|j,                  dn|j,                  d|j.                  dn|j.                  d|j0                  dn|j0                  d|j2                  dn|j2                  d|j4                  dn|j4                  d|j6                  dn|j6                  d|j8                  dn|j8                  d|j:                  dn|j:                  d|j                  dn|j                  d|j<                  dn|j<                  d|j"                  dn|j"                  d|j>                  dn|j>                  d|j@                  dn|j@                  d|jB                  dn|jB                  d|jD                  dn|jD                  |jF                  dn|jF                  |jH                  dn|jH                  |jJ                  dn|jJ                  ||||jL                  dn|jL                  |d 	}|S y c c}}w # tN        $ r} d }~ww xY w)!Nr   zskillLst :: r   ,r   )Interviewerr   zHR-Executive)r   r   role__inr   r   )r   
teststatusr   r   r   r   r   z/job-application/jdlibraryidr   r   r  r  r  r  rg   r  r  r  interviewersr  r  r  r   )	commentsr  r   interviewes_lstselectedInterviewerLst
skillsListworkFlowDetailsr  jd_page_url)(r   rm   rn   r   r  r   astliteral_evalr  keysrl   r  r  r$   r  r'   itemsr  r   r\   r   r  r   r   r  r  r  r  rg   r  r  r  r  r  r   r  r  r   r  rq   )jdIdr  r   r  skillLstmodifiedSkillListparsed_skillLstskillr_  	subSkillssubSkillr  total_interviewers_lstr  workFlowListworkFlowDatavalue	cleanDatainterviewerjd_interviewersselectedInterviewerr
  r   encoded_jdidr  r  rw   s                              rx   	jdDetailsr  |  s   k''4'0557 ?? " .(+!..O ) 5::<(+58E#J5FE#J,,S1USVZL	 ) H%,, (	 "$!# #ll11i:e 2 fT6"  '..55s 6 fh  L / = '3&8&8&:"U 5#4%"<	  4=\$/0=  / &*11*40+f:MN *,&&&&)&6&6v7J7J&KO/> 
&+.'+DLL,?,?CV,?,W,^,^_cek,l'mH'#6$:$A$A2:1+d2C4<QK4G)*%&
&&*  ){84[A'		2L-..?~NKfiiF$6$6$>qFDVDV v||3 fkk1v{{	
 V%7%7%?rVEWEW  5"6==  5"6== F$5$5$=b6CTCT &//"9Bv  5"6== &//"9Bv F$5$5$=b6CTCT  --5B6;N;N  V%7%7%?rVEWEW!" 6#3#3#;RAQAQ#$ 6#3#3#;RAQAQ%&  5"6=='( #)//"9Bv)/)?)?)G2VMcMc#)#3#3#;RAQAQ#9*@/#/'-'='='E6KaKa)9J< AB  sC   ER	 R"<R	 &R	 ;R	 R	 I<R	 R	 		RRRc                 &   	 |d   rvt         j                  j                  |d         j                         }|r?|j                  r/|j                  |j
                  |j                  |j                  dS ddiS ddiS ddiS # t        $ r} d }~ww xY w)N
workFlowIdr   )paperIdtestid	libraryId	paperTyper  r   )	r'   rm   rn   r   r+  r   paperlibraryidr   rq   )r   rr   r  rw   s       rx   checkTestHasPaperServicer    s    L!&..55,9O5PUUWO"**#2#:#:"1"4"4%4%C%C%4%>%>	  &s++!3''s## s*   A2B 5B 9B =B 	B
BBc                 B    	 t        |      }|S # t        $ r} d }~ww xY wr   )rO   rq   r   rr   testDetailsrw   s       rx   deleteTestInJdServicer    s*    &x0     	c                 B    	 t        |      }|S # t        $ r} d }~ww xY wr   )rP   rq   r  s       rx   saveInterviewersServicer  	  s*    (2 r  c                    	 t         j                  j                  dd|      }g }|D ]3  }i }|j                  |d<   |j                  |d<   |j                  |       5 g }t        j                  j                  |       j                         }|D ]k  }t        j                  j                  |d   |d   |d	   
      j                         }|s?|j                  |d<   |j                  |d<   |j                  |d<   m t        t        j                  j                  |       j                               }	d }
d}t        |	      dkD  rj|	d   d   }
g }|	d   d   j!                  d      }|D ]!  }|j                  |j#                                # |	d   d   rt%        j&                  |	d   d         }t        |      ||
|dS # t(        $ r} d }~ww xY w)Nr   r  )r   r   r   userIdr   r   r   r   r   )
workflowid	jobdescidr   promotholdholdpercentager   r   r   r   r  r  r  )r  jdInterviewersjdStatusselectedJDInterviewers	skillsLst)r$   rm   rn   r   r   r  r'   r  r2   r   	passscorer  r  r  r   r  rl   r  r  r  rq   )r1  cmpyIdintervierDeatilsinterviewersLstr  interviewerDatapapersDetailstestbrulesDetailsr   JdStatusselectedJdInterviewersjdSkillsList	skillListr  rw   s                   rx   workFlowDataServicer  >  s   2<<..]f / 
 + 	4K O(3OH%&1&6&6OF#""?3		4  ((//d/;BBD! 
	FD"NN11:w-{+ 2  df	  !.!8!8X,11V)6)E)E%&
	F goo,,,5<<>?!#v;?ay*HLq	*-33C8I" 3##EKKM23 ay(),)9)9&)N:S)T& !/- &<%
 	
  s   CG C2G 	GGGc                    	 | j                  dg       }|st        d       y t               d   d   }d}t        ||      }d|i}t	        j
                  ||      }|j                          |j                  }|r&t        j                  |j                  d            }|S t        d	       y # t        j                  j                  $ r}	t        d
|	        Y d }	~	y d }	~	wt        j                  $ r}	t        d|	        Y d }	~	y d }	~	wt        $ r}	t        d|	        Y d }	~	y d }	~	wt        $ r}	t        d|	        Y d }	~	y d }	~	wt        $ r}	 d }	~	ww xY w)NskillsSetLstz*Error: 'skillsSetLst' is empty or missing.r   r   z$/api/getTopicAndSubtopicAndQuestionsr1  r   r0  zResponse content is empty.zHTTP request failed: zFailed to decode JSON: z!Configuration error: Missing key An unexpected error occurred: )rK  r   r   r   r   r   raise_for_statusr   r   r6  r7  
exceptionsRequestExceptionJSONDecodeErrorKeyErrorrq   )
rr   r  r   r   r   startQuestionDataresponser@  rA  rw   s
             rx   1skillsWithTopicsWithSubtopicsWithQuestionsServicer  t  sJ   )LL4	>? !{8,W59lH- $Y/ ==+<= 	!!# $++

#3#:#:7#CDI./// +%aS)** -'s+,, 71!566 4.qc233 sS   B+ A<B+ B+ +ECE1DED##E/EEEEc                     	 t         j                  j                  | |d      j                  d      }g }|rE|D ]@  }|j	                  |j
                  |j                  |j                  |j                  d       B |S # t        $ r} d }~ww xY w)NF)r   r   paperid__isnullorder)r   r   r   r+  )
r'   rm   rn   r  r  r   r   
papertitler+  rq   )r   rI  jd_workflowsworkflow_dataworkflowrw   s         rx   getJdWorkflowServicer    s    ''..e / 

(7
 	 ( $$&kk%-%7%7!)!4!4#+#3#3	  s   A;A> >	BBBc                 >   	 t         j                  j                  |       }t        j                  j                  |j                        }|j
                  r t        j                  |j
                        }nd}g }|D ]J  }t        j                  j                  |      }|j                  |j                  |j                  d       L |j                  |j                   d|j                   |j                  |j                  d}||fS # t         $ r} d }~ww xY w)Nr   r   r  rG  )rI  c_namec_emailc_mobile)r   rm   rK  r   r   r  r  r  r$   r  r   r   r)  r*  r|   r&  rq   )	rI  r8  r  r  job_interviewersjob_interviewerr  r>  rw   s	            rx   getCallScheduleDetailsr    s   %%))S)1	__  IOO 4??!..r?O O. 	VO,,**o*>K##;>>;CSCS$TU	V <<",,-Qy/A/A.BC !((	
  // s   D
D 	DDDc                 b   	 t               d   }t        |d         }t        |d         }t        |d         }t        j                         j	                  |ddd      }g }t        t        j                  j                  t        d      t        d	      z        j                  d
d            }g }	|D ]E  }
|
d   s	t        j                  |
d         }|	j                  |j                  d      |
d   g       G t        t        j                  j                  |      j!                  ddd            }t        t"        j                  j                  |      j!                               }t$        j                  j                  |d      j!                         }i }|D ]_  }|d   |d   z
  j&                  dz   }t)        |      D ]7  }|d   t+        |      z   }|j                  d      }|d   |d   |d   d||<   9 a t)        dd      D ]b  }g }g }g }t        t,        j                  j                  d|      j                  dd            }|t+        |      z   }|j                  d      }|j                  d       }|j                  d!      }t        j.                  |d"z   d#      }|D ]{  }t        j0                  |d   t2        j4                        }t        j0                  |d   t2        j6                        } ||cxk  r| k  s]n `|d   |v sh|j9                  |d          } t:        j                  j                  |$      j=                         rit)        |d%z        D ]V  }!|t+        d&|!z  '      z   }"|j                  |"j                  d(             |j                  d)       |j                  g        X n{t)        d|d%z        D ]h  }!|t+        d&|!z  '      z   }#|#j                  d(      }$|j                  |$       t        j>                         t+        |d&*      z   }%|t        j                         j                  d      k(  xr |#|%k  }&|&r#|j                  d+       |j                  g        tA               }'|D ]5  }(d,})||v re||   }*|*d   |(k(  r	|*d   }+tC        |*d         },t        j0                  |jE                         |+      }-|-t+        |,-      z   }.|-|#cxk  r|.k  rn nd})n|D /cg c]  }/|/d   |(k(  r
|/d.   |k(  r|/ }0}/|0D ]  }1|1d   }+tG        |+tH              r$t        j.                  |+d/      j3                         }+tC        |1d0         },t        j0                  |jE                         |+      }2|2t+        |,-      z   }3|2|#cxk  r|3k  sn d}) n |)s%|'jK                  |(       8 g }4|'D ];  }(| d1|$ }5d,}6|	D ]  }7|7d   |5k(  s|7d   |(k(  sd}6 n |6r+|4j                  |(       = |4s|j                  d2       n|j                  d3       |j                  |4       k |D 8cg c]  }8t        |8       }9}8|||||9d4}:|j                  |:       e |S c c}/w c c}8w # tL        $ r$};dd l'}<tQ        |<jS                                |;d };~;ww xY w)5NCALL_SCHEDULING_CONSTRAINTS
work_hoursstarting_hourblock_hoursr   )hourminutesecondmicrosecondr   r   r   r   intervieweridz%Y-%m-%d %I:%M %pr   )empidr  fromdatetodater   r   )r  r   r  rJ  	starttime	workhoursr   )r  r  r      )r   r   r   Tr   %Az%a-%d-%b-%Yz	 00:00:00z%Y-%m-%d %H:%M:%S)	holidaydtra      minutesz%I:%M %pHoliday)hoursr%  BlockedFr'  startdayz%H:%M:%Sr'  rG  
No_Vacancy	Available)day
hours_list
slots_listr   ids)*r   r   r   todayreplacer  r(   rm   rn   r   r   r   	localtimer  r3  r)   r  r*   r+   r~  r  r   r$   strptimecombiner	   minmaxremover,   existsro   setfloatr   
isinstancerk   addrq   	tracebackr   
format_exc)=aplidint_idcall_scheduling_constraints
WORK_HOURSSTARTING_HOURBLOCK_HOURSbasedtscheduling_datascheduled_callsscheduled_calls_listscheduled_calllocal_db_timevacation_dataworkcal_dataalter_timings_dataalter_timings_listalter	days_diffxcurr_alter_datedate_strr.  r/  status_listtelecallerscurrent_date_obj	_date_str	_day_namedate_formattedcurrent_date_startvacationv_fromv_toi	slot_timeslot_dtslot_time_strcurr_time_limitis_past_or_blockedworking_users_this_slotuser_id
is_working
alter_datastart_tw_hoursstart_dt_alterend_dt_alterwuser_shiftsshiftstart_dt_shiftend_dt_shiftavailable_for_slotcall_key	is_bookedcallsr0  dataObjrw   r>  s=                                                                rx   interviewSchedulingServicerx    sN   ^&/k2O&P#4\BC
7HI5mDE !))r"" * 
    ''(EFRR_
  "- 	Na  ( 2 2>!3D E$++"++,?@.QRBST		 ##&#188*hW
 OO""&"188:

 +2299 : 

&( 	   ( 
	Ex5+<<BBQFI9% "'
"3iQ6G"G*33J? "'{!3!&{!3#Ho0"8,	
	 q" \	,AJJK ##36#:FFtRVFWK
  &	q(99(11*=I(11$7I-66}EN "*!2!2K')<" * >!))(:*>I''(:DHHE/747(K7#**8G+<=> !!((9(=DDFzA~. *A &26)B BI%%i&8&8&DE&&y1%%b)	* q*q.1 g:A.261JJG$+$4$4Z$@M%%m4 '/llny)28 'O "X^^%5%>%>z%JJ 7#6 '
 *#**95"))"- 
 /2e+ $/ 7A%*
 %(::);I)FJ)(3w>*4[*A*/$.{$;+" 2:1A1A$4$9$9$;W2" 0>	PW@X/X $2W#K|#K15J *6+$%#$X;'#9a
my>X !"+K + *5 **/$/+" $.gs#;.6.?.?(//&&*df %, +0g*?191A1A$4$9$9$;W2" 0>	PW@X/X $2W#K|#K15J$))*, &377@o7At *,&#: ?&/[-#A$)	$8 &D#Aw(2tAw'7I,0	 %&
  ).55g>? .#**<8#**;7%%&89Og:V %//q47/C/ &((%G ""7+y\	,| G+p 0  i""$%	sj   B;Z >IZ 
Z G'Z  Y7
BZ &
Z 21Z $Z -Z 5AZ Y<Z 7
Z 	Z.
Z))Z.c                 @   	 t         j                  j                  | d      j                  d      }g }|D ]  }t        j                  j                  |j                        }t        j                  j                  |j                        }|j                  |j                  |j                   d|j                   |j                  j                  d      |j                  |j                  |j                   |j                  d        |S # t"        $ r} d }~ww xY w)Nr   )r  r   r  r   rG  %d-%b-%Y %I:%M %p)r   r   scheduled_timer|   c_coder  scd_id)r(   rm   rn   r  r   rK  r2  r   r   r  r   r)  r*  r   r3  r|   r   rq   )r   call_detailsrL  	call_datar8  r  rw   s          rx   getInterviewerCandidatesr    s   #++22  3 

(5/ 	 
% 	I!))--1F1F-GI$$	$8B#,,(2231Y5G5G4HI&/&9&9&B&BCV&W&__'33(('ll
	"  s   DD 	DDDc           	         	 d d d d d d dd}t               d   d   }d}t        ||      }t        j                  j	                  |       }t
        j                  j	                  |j                        }|j                  |j                  d}t        j                  ||      }|j                  }	|	r|t        j                  |	j                  d	            }
|
d
   d   }|
d
   d   }|
d
   d   }|
d
   d   }t        d|       |rt        ||j                          d|d<   ||d<   ||d<   ||d<   t"        j                  j	                  |j$                        }d}|rw|j&                  rkt)        j*                  |j&                        }d}|D ]E  }t-        t/        |j1                                     }|dz  }t3        |      |k(  r||z  }>||dz   z  }G |j4                  |j6                  |j8                  ||j:                  |j<                  d}t>        j                  jA                  |j                        jC                         jD                  }|jF                  jI                  d      d   }|j                   |jJ                   d|jL                   |jN                  |jP                  |j                  |r|nd||j                   d}|jR                  rtU        |jR                        }||d<   ||d<   ||d <   |S # tV        $ r} d }~ww xY w)!Nr   )job_desc_datar>  interview_datascreening_datacoding_dataprofile_dataprofiling_videor   r   z/api/candidate-interviewdatar   )r|  int_paperidr   r0  r1  interviewdatascreeningdata
codingdataprofiling_video_urlr   r  r  r  r  r   r   r   , )rT  r   rg   skillsnotesinstructions)r+  apirG  zN/A)r   r   r&  r|   r   	int_papermeetinglinkschd_idr  r  r>  ),r   r   r(   rm   rK  r   r2  r'  r   r   r   r   r6  r7  r   rZ   r   r   r   r  r  r  nextiterr  r  r   r   rg   r  r  r'   rn   r   r  r  rl   r)  r*  r&  r|   	profileidgetProfileDetailsServicerq   )r}  respr   r   r   r~  r8  candidate_int_datar?  r@  rA  r  r  r  r  r   skillsString
skillesSet
skillCountr  r  r  int_paper_titlemeeting_linkr>  profile_detailsrw   s                              rx   getCandidateInterviewDatar    s*   c """" !
 !{8,W51lH-#++//6/:%%))\-E-E)F	++'00

 'mmC6HI.66

#3#:#:7#CDI&v.?N&v.?N#F+L9K"+F"34I"J'(;<"%&9<??K*-&'%3D!"%3D!""-D??&&)//&:   --h.?.?@

' 	5E U\\^,E !OJ:*4$-$4	5 !MM ))"(((55
 ##L,A,A#BGGITT 	 $//55e<Q? ,, **+1Y-?-?,@A&&__)),;'#	
 6y7J7JKO#2D  -_!/ s   K7K: :	L	LL	c                 j   	 | d   }| d   }t         j                  j                  |      j                         }d}|r|j                  }t
        j                  j                  ||      }g }|r/|D ]*  }|j                  |j                  |j                  d       , ||dS # t        $ r} d }~ww xY w)N
candid__idcandid_call_sched_idr   r   )callscheduleidr2  )q_idq_res)q_lstremark_note)
r(   rm   rn   r   intnotesr-   r  qidqraterq   )	rr   rS  call_schedule_idcall_schd_dataremark_note_dataques_lstquestions_lstquesrw   s	            rx   questionsResponseServicer  "  s    -#$:;%--448H4INNP-66$$+++ , 
   N$$dhh%LMN '7GHH s   B B# #	B2,B--B2c                     	 t         j                  j                  | d   | d         }|j                  dk(  ryy# t        $ r} d }~ww xY w)Nschedule_idrS  )r   r2  r   
call_endedcall_active)r(   rm   rK  callendflagrq   )rr   call_schedulerw   s      rx   getInterviewStatusServicer  >  sZ    $,,00&H^4L 1 
 $$+  s   6: 	A	AA	c                      	 t         j                  j                         j                         } | j                  | j
                  d}|S # t        $ r} d }~ww xY w)N)auth_key	libraryid)r.   rm   rn   r   authkeyr  rq   )cdncdn_datarw   s      rx   
getCdnDatar  N  sL    	oo$$&++- ##--H s   AA	 		AAAc                 X   	 t         j                  j                  | d         j                         }t	        j
                         |_        d|_        |j                          	 t        j                  j                  |j                  |      j                         }| d   |_        | d   |_        |j                  f|_        |j                          t        j                  j                  |j                        }d|_        |j                          t         j                  j                  |j"                        }t%        j&                  |j(                        }|D cg c]  }t+        |       }}t,        j                  j                  |j.                        j0                  }	g }
t,        j                  j                  d	|j                  
      }d}|D ]R  }|j2                  |v s|
j5                  |j0                         |j2                  |j6                  k(  sG|j8                  }T dj;                  |
      }|	 d| }|j                  |j<                  |||j>                  |j@                  d}tC               d   d   }d}tE        ||      }tG        jH                  ||      }|jJ                  rtM        |jJ                  dd|       y y #  t        |j                  || d   | d   |j                        }|j                          Y ?xY wc c}w # tN        $ r} d }~ww xY w)Nsch_idr   r   r2  r  gonogor  )r2  r  r  r  r   r   r   )r   r   r   r  r  )r=  rT  interviewed_byto_mailr'  	int_notesr   r   z/api/interview-completionr   ICzInterview Completed)(r(   rm   rn   r   r   ro   callendeddttr   rp   r/   r2  r  r  r   r   rK  r   r   r  r  r  r   r$   hridr|   r   r  r  r   r  r   r'  r  r   r   r   r   r  rQ   rq   )rr   rf  call_sch_detailsfeedbackr8  r  interviewers_dataitemr  hr_emailinterviewers_email_listusersr  r   interviewers_emailsr  r  r   r   r   send_interview_datarw   s                         rx   interviewCompletionServicer  [  s   G'//66(8:L6MRRT(0%"%	!))00,88 1 df  'x0HO%g.HN"2"<"<!>HMMO %%))-=-I-I)J		__  IOO 4,,R__=.?@dD	@@<<##'7'<'<#=CC"$##3):M:M#N 	/Dww,&'..tzz:77.<<<%)YYN	/ #ii(?@Ja 345 (33,(11)22
 !{8,W5.lH-&mmCnE !4!4T:OPWX i		!,88%)w'*44H MMO AN  sL   A!L $A/K BL !L3A8L ,4L !B0L <LL 	L)#L$$L)c                    	 t         j                  j                  |       }t        t        j                  j                  |j                  |j                        j                  dd            }t        t        j                  j                  |j                  |      j                  dd            }t        j                  j                  d|j                  |      j                  d	      }g }|D ]X  }t        j                  j                  |j                        }t         j                  j                  |j                        }t         j                  j                  |j                        }	d
}
t        j                  j                  |j                  |j                        j!                         }|r|j"                  }
|j$                  }|j'                  |j                  |j                  |j(                   d|j*                   |j,                  |j.                  |	j.                  |
|r|j1                  d      nd
d       [ |S # t2        $ r} d }~ww xY w)Nr   )r   interviewers__containsr   Tr   r   	jobid__inr   )r   r   r   
-datentimer   r  rG  z%d %b %Y, %I:%M %p)rI  r|  r	  r
  hrinterviewbyr  interview_datetime)r$   rm   rK  r  r   rn   r   r   r   r   r(   r  r2  r  r  r/   r   r  r   r  r)  r*  r|   r   r3  rq   )r   r   job_desc_idscandidate_idscompleted_interviewsuser_interviewsr  r8  r  	interviewr  iv_feedbackinterview_dtrw   s                 rx   getInterviewCandidatesr    s   9||6*OO"".. # k$Tk*

 $$..L % k$Tk*

  ,33::$..-  ;  

(<
  	 0 	K!))--1H1H-II!![%5%5!6B((K,E,E(FIH$,,33%LL 4 df  &--&00L""$<<'33!*!4!4 5Qy7I7I6JK(''#,>> (Ye,*?*?@T*Ukm	#	@   s   II 	I"II"c                 ~   	 t         j                  j                  |       j                         }t	               }|d   }|rd}t
        j                  j                  | |      j                         }	 t        j                  j                  |j                        j                         j                  }d| d| }|rA|j                  |j                   d|j                   |j                  |j                  |d	}|S | |j                   d|j                   d
d|d	}|S y #  d}Y mxY w# t        $ r}	 d }	~	ww xY w)Nr   r  r   r  r2  z'https://iframe.mediadelivery.net/embed//rG  )r2  r   r  r  
media_pathr   )r   rm   rn   r   r  r/   r1   r   recordedr2  r)  r*  r  r  rq   )
rI  rf  r8  r  
library_idfeedback_datainterview_feedbackinterview_file
video_pathrw   s
             rx   getInterviewFeedbackr    sd   1%%,,,499;	<k*
M!+!3!3!:!:w "; "df 
 "**11ill1KTVX   GzlRSTbScd

 " $6#A#A(2231Y5G5G4HI077/55",!" !  $'(2231Y5G5G4HI!",! ! O " 
.  s8   A0D- 3A
D$ =AD-  "D- $D*(D- -	D<6D77D<c           	      
   	 t         j                  j                  |       j                         }d d d d}|rt        j                  j                  |j                        }d}|j                  rat        j                  j                  |j                  |j                        j                         }|r|j                   d|j                   }nd}|j                  |j                  |j                  |j                  |j                   |j"                  |j$                  |d}||d<   t&        j                  j                  |j                  |j                  	      }d
}d}	g }
d|j                  i}t)               d   d   }d}t+        ||      }t-        j.                  ||      }t1        j2                  |j4                  j7                  d            }|r^|D ]S  }t8        j                  j                  |j                  |j:                        }d}d}d}d}d}d}d}|j<                  dk(  ryd}t>        j                  j                  |j:                  |j                        }|j@                  |j@                  nd}|jB                  r|jB                  nd}|jD                  }n|j<                  dk(  rxd}t>        j                  j                  |j:                  |j                        }|j@                  r|j@                  nd}|jB                  r|jB                  nd}|jD                  }n|j<                  dk(  rd}tF        j                  j                  |j                  |j:                        j                         }|r|jH                  }|jJ                  r|jJ                  jM                  d      nd}|r4tN        j                  j                  |jP                        jR                  }|jH                  dk(  r.d}|jT                  r|jT                  jM                  d      nd}	nd}d}d}d}d}|d   D ]2  } | d   |j:                  k(  s| d    }| d!   }tW        | d"         }| d#   }4 |
jY                  i d$|j                  d%|jZ                  d&|j:                  d'|j<                  d(|d)|d*|j                  d+|jH                  d,|j\                  r|j\                  jM                  d      ndd-|d.|	d/|d0|d1|d2|d"|d ||||rtW        |      d3z
  nd|d4       V |
|d5<   ||d   d-<   t_        |j                        }!|!|d6<   |S # t`        $ r}" d }"~"ww xY w)7Nr   )rN  registrations_datafeedbacks_datar   r   r    - NA)rI  r|  r)  r*  r|   r&  r  source_labelrN  rF  r   r=  r   r   z!/api/candiate-workflow-percentager   r0  )r   r+  r   	Screening)r+  r  r   Codingr   	Interview)r2  r'  rz  r   r   r   r1  r'  scored_markspaper_marksscore_percentage	star_zeroreg_idpaper_titler+  
paper_type
type_titlecall_statusr2  
reg_statuscompletion_datenotify_checkcall_completion_dater{  interviewer_namehold_percentagepass_percentager   )r  
hold_check
hold_ranger  r  r  )1r   rm   rn   r   r   rK  r   r   r6   r   r   r   r   r2  r)  r*  r|   r&  r   r!   r   r   r   r   r   r6  r   r7  r'   r+  r   r2   r  r  r  r(   r   r   r3  r$   r  r   r  r   r  r  completiondatefeedbacksDatarq   )#rI  r8  r>  r  r  r   rN  r   r  r  r  registration_datar   r   r   r  workflow_response_datarO  r  r  r  r{  r  r	  r
  r  paper_brulesr  r  r  r  r  percentage_datar  rw   s#                                      rx   getCandidateWorkflowDatar    s2   F%%,,,499;	 #"&"
 $$	$8BL..'11	8H8H / $&  &,kk]#fll^#DL  $ !||#//&00%.."#**hh ,	N 0>N+,(0077%LLI4G4G 8 M L#% !# !)"7"7! %;x09L:H,1C}}S/@AH%)ZZ0@0@0G0G0P%Q"$1 zL'//33*00,:N:N  4  H "$J"$K%'N')$&(O&(O!#J))S0%0
'-~~'9'9$0$8$8LDVDV (: (
  ,::F )77!# ( 7C6L6LL22RT ( &2%6%6
 "++s2%-
'-~~'9'9$0$8$8LDVDV (: (
  ,:: )77!# ( 7C6L6LL22RT ( &2%6%6
!++s2%0
(4(<(<(C(C(1|?S?S )D )$& & )*7*>*>K $1#:#: !. 7 7 @ @AT U%' +  .37<<3C3C'4'B'B 4D 4""&$ !1  -33s:/2
 (5'A'A %2$>$>$G$G(;%& *, !5 &(
#$L"#K'($ "I+A&+I E*:6,:N:NN+:>+JL*9-*HK/2?CU3V/W,(7(DIE '--$loo)8+>+> &x'7'7 )(*<*<	
 )* *; *9<< ),*=*= . $0#>#> !- ; ; D D$7!" &(  +L!" 34H#$ -n%& /0@'( .)* .+, /0@-. +L/0 ,7*4<KO 4q 8QS)2; uzx 8J34?KN+,^<%ill3+8'( s   QU DU 	U*$U%%U*c                    	 t               d   d   }d}t        ||      }d| i}t        j                  j	                  |       }t
        j                  j	                  |j                        }t        j                  ||      }|j                  }|r8d}	d}
d}d}t        j                  |j                  d	            }|d
   }t        }t        |dz   d      }|j                         }|d   }	|d   }
|d   }t         j                  j	                  |j"                        }|j%                  d|j&                        }|j%                  d|j(                   d|j*                         }|j%                  d|j,                        }|j%                  d|j.                        }|j%                  d|	      }|j%                  d|
      }|j%                  d|      }|j%                  d|j0                        }|j%                  dt3        |j4                        rt3        |j4                        nd      }d}|j6                  rMt8        j                  j;                  |j                  |j6                        j=                         j>                  }|j%                  d|      }t@        j                  j;                  |jB                        j=                         }|r|jD                  }|r+tF        j                  j	                  |      jH                  }nd}|j%                  d|      }tK        |jB                        }|r)d}|D ]  }d|d     d!|d"    d!|d#    d$}||z   } d%| d&}|j%                  d'|      }|d(|j&                   d)z   }t        |d*      }tM        jN                  ||+      }|jQ                          |d,|jR                  d-S y # tT        $ r}tW        t3        |              d }~ww xY w).Nr   r   z/api/hireline-candidate-reportr=  r  r   r   r   r0  r1  z$/media/reports/candidate_report.htmlrr  r  r  r   z{candidate_id}z{candidate_name}rG  z{candidate_email}z{candidate_mobile}z{screening_section}z{coding_section}z{interview_section}z{#jd_title#}{#comapany_logo#}r  r  z{#c_source#}z#interviewer_name#zb
                            <tr>
                                <td class="td_q"><p class="q_a">r   zJ</p></td>
                                <td class="td_q"><p class="q_a">decisionr  zD</p></td>
                            </tr>
                        at  
                        <span class="heading p-clr">Interviewer's Feedback:</span><br><br>
                        <table cellpadding=0 cellspacing=0 class="t0">
                            <thead>
                                <tr style="background-color: #808080;color:#fff">
                                    <th class="td_fd">Interviewer</th>
                                    <th class="td_fd">Decision</th>
                                    <th class="td_fd">Notes</th>
                                </tr>
                            </thead>
                            <tbody>
                                zc
                            </tbody>
                        </table><br><br>
                    z{#feedback_data#}z/media/reports/.pdfw+bdestreport	file_path	file_namepisa_err),r   r   r   rm   rK  r3   r   r   r   r   r   r6  r7  r   openreadr   r   r2  r2  r)  r*  r|   r&  r   rk   r   r   r6   rn   r   r   r(   r   r  r$   r   r  r   	CreatePDFcloseerrrq   r   ) rI  r   r   r   r>  r8  brandingr?  r@  r  r  r  r  rA  
acert_data	root_pathreport_template_pathreport_templater  updated_reportr  r  r  r  	feedbacksfeedback_rowsfd_datafd_troutput_filepathresult_filepisa_statusrw   s                                    rx   generateCandidateReportr3    s*   O {8,W53lH-*C0%%))c):	##'')2E2E'F&mmCnE.66NKNM

#3#:#:7#CDI"6*J I#'BBC$  3779O'(89N$]3K'(89N$$	$8B,44 )"7"7N ,33"y':':&;1Y=O=O<P$QN ,33#Y__N ,33$i&6&6N ,33%~N ,334FTN+33%~N ,33NBHHMN+33#),X-=-=)>H$$%BN
  LNN))"+"5"5I<L<L *  TVU  ,33NLQN(0077ILL7QVVXM+99'+||'7'7;'7'G'L'L$')$!/!7!7(*:" *),,7	$&M#, 	>%AAH@Q RAAHAT@U VAAHAQ@R S	! )6(=	>)! "/ 0%M ,334GWN'OI<Q<Q;RRV*WWO6K..kJK -%'OO m x  c!fs   O	O 	O0O++O0c                 N   	 t         j                  j                  |       }g }|D ]j  }t        j                  j	                  |j
                        }|j                  }|j                  dk(  rdnd}|j                  |j                  ||d       l |S # t        $ r} d }~ww xY w)Nr  r   r   HirezNot Hire)r   r  r  )r/   rm   rn   r$   rK  r  r  r  r  r   rq   )rI  r  int_feedbacksjob_intr  r  r  rw   s           rx   r  r  u	  s    %%,,,= 	G,,**g.C.C*DKMME!(3!6vJH  $))ExP	  s   BB 	B$BB$c                    	 g }| d   rt         j                  j                  | d         j                         }t        j                  j                  | d         }|D ]-  }|j
                  d k(  sd|j                  |j                  dc S  |r| d   |_        |j                          t         j                  j                  | d         j                         }d}|D ]  }||_	        |dz  }t        |      }t        j                  j                  ||j                        j                         }	|	r.|	j                  |d	<   |	j                  |d
<   |	j                  |d<   nd |d	<   d|d
<   d|d<   |j!                  |       |j                           |}
g }t#        t%        |
      dz
        D ]   }|
|   |
|dz      g}|j!                  |       " |||j                  dS y # t&        $ r} d }~ww xY w)NjobDescriptionIdr   r  r   )noPaper
paperTitle	jdStatus_nextStatus_r   )r   r  promotPercentager  r  r   r   )r   
papersDatar<  )r   rm   rn   r   r'   r+  r  r   rp   r  rS   r2   r   r  r  r  r  r  r  rq   )rr   r  	paperDataJdDataworflowDatar  latestJDorderCountertempDct
brulesDatapaperLstnewPaperLstpapertempLstrw   s                  rx   jdPublishServicerK  	  s   >	&'__++x8J/K+LQQSF"**11AS8T1UK# <<4'#&&*oo%+]]   ( 7--:L1M-NSSUHL# )
!'-#^^22'DGG 3 $&  2<2F2FG./&0ooGFO0:0I0IG,-26G./&)GFO01G,-  )		'. !HKs8}q01 ,UOUQY' ""7+, ')%__ k (v  s%   A0G% 3G% EG% %	G4.G//G4c           
         	 | j                  d      }| j                  d      }t        j                  j                  |      }t        j                  j                  |j                        }t
        j                  j                  |j                        }t        j                  j                  |j                  d      j                         }t        j                  j                  |j                        j                         }d}	|r6t        j                  j                  |j                        }|j                  }	t               d   d	   }
d
}t!        |
|      }|j                   d|	 }|||j"                  |j$                  |j&                  |j(                  ||j*                  |j,                  d	}t/        j0                  ||      }t2        j                  j                  |j                  |j,                        }||_        |j7                          ||_        |j7                          |j8                  rvt:        j                  j                  |j8                        }|dk(  r*t=        |j8                  dd|j                         d|_        n|dk(  rd|_        |j7                          y y # t>        $ r}tA        tC        |              d }~ww xY w)NnotifyrI  r  r   r   )r   r   r   r   r   z/api/candidate-notificationr  )	r=  rM  r)  r*  	job_titler  tomailsr   r+  r   )r2  r+  r   OLzOffer letter SentHr   r   )"rK  r   rm   r   r   r#   r   r'   rn   r   r   r(   r$   r  r|   r   r   r)  r*  r   r  r   r+  r   r   r!   r   rp   r  r9   rQ   rq   r   rk   )rr   r   rM  rI  r8  r  r   r  r~  hr_mailr   r   r   to_mailsr>  r?  rO  profilerw   s                      rx   notifyCandidateServicerU  	  sZ   ?h'll5!%%))c):	__  IOO 4//%%)<)<%=##**#*FKKM#++22y||2LQQS<<##|'8'8#9DjjG {8,W50lH-oo&b	2 "",,!**--#LL''

 'mmCnE#++//!h.>.> 0 
 %!	oo))Y-@-@)AG}$Y%8%8>QRVRYRYZ!$3!$LLN   c!fs   J3J7 7	K KKc           	         	 |d   dk(  rt         j                  j                  |d         j                         }|rddiS t        j                  j                  |d         j                         }t        | |d	   |d   |d
   |j
                  |d   d      }|j                          d|j                  d}t        ||j                  |j                  |j                        }|j                          dd|j                  dS |d   dk(  rt         j                  j                  |d         j                         }t        j                  j                  |j                        j                         }|r|d
   |_        |j                          |r|d	   |_	        |d
   |_        |d   |_        |j                          d|j                  d}t        j                  j                  ||j                        j                         }|r/|j                   s|j                  |_        |j                  |_        n-t        ||j                  |j                  |j                        }|j                          d|j                  |j                  |j                  |j                  d}|S y y # t$        $ r}	 d }	~	ww xY w)Neventcreate	userEmailr{   userAlreadyExistedr   r  r   r  userPswdnewUserLocationr   )r   r   r|   r   r   rg   r   r   r   r   r   created)rZ  rW  r   update)r[  )r   r   )rW  r   r   pswdrg   )r$   rm   rn   r   r4   r  rp   r   r6   r   r   r%   r|   rZ  r   rg   r   r   rq   )
r   rb  userFindr  	save_userr   r   userAuthdatauser_data_responserw   s
             rx   addNewUserServicerd  ?
  s   UW)||**;1G*HMMOH,c22<<..)J2G.HMMO (":.#K0&z2!&'89	   ILL,-#..'11$<<	  +.&'ll  W)||**;1G*HMMOH$,,33X^^3LQQSL,5j,A)!!# )* 5$-j$9!$-.?$@! HKK+,..);); / $&  !<<'/}}$,KKFM $!&mm"*"4"4'{{	F  &&kk$MM$-- ( 1 1&" *)M  *^  s%   >J1 CJ1 F'J1 1	K :J;;K c                     	 |d   }t         j                  j                  |      j                         }|r|d   |_        |j                          y y # t        $ r} d }~ww xY wNr   r   r   )r$   rm   rn   r   r   rp   rq   r   rb  r   userdatarw   s        rx   changeUserstatusServiceri  
  sc    8$<<&&&&1668'1HOMMO      AA 	A"AA"c           
      `   	 t         j                  j                  |       }t        j                  j                  | |      }|j                  |j
                  z
  |_        |j                          t        j                  j                  | |      j                         }t        j                  j                  |j                        }t        | t        j                         d||j
                  |j                  ||j                        }|j                          y # t         $ r} d }~ww xY w)Nr   r   r   )r   r   r   r  )r   r   r   r   r   r   r   r   )r   rm   rK  r   r   r   rp   r'   rn   r   r   r   r   r   ro   r  rq   )	r   r  r'  r   company_creditsr  r  transactionrw   s	            rx   deductCreditsServicero  
  s	   !//--
-C(0044 J 5 
 #2"9"9O<S<S"S ((// J 0 

$& 	  ++}/B/B+C ",,. "**((#++	
 	 s   DD 	D-'D((D-c                    	 t         j                  j                  | d         j                         j	                  d      }g }|D ]  }|d   r.t
        j                  j                  |d         j                  }nd}t        |      }||d<   d|d<   d|d<   d|d	<   |d
   j                  d      |d
<   |d   dk(  rt        j                  j                  | d   |d   |d         j                         }t        j                  j                  |j                        }t        j                  |d   d      }|r|j                  nd}	| d|	 d|j                    d|d	<   |d    |d<   |d   dk(  rat"        j                  j                  |d         }
|
j$                  dk(  rd|d    d|d	<   nd|
j&                   d|d    d|d	<   |d    |d<   |j)                  |        |S # t*        $ r} d }~ww xY w)NrI  r   r  r   r   r   r   debitr  r   rz  r   r  r   r   )r   r   r+  -z
                z - JD ()r   r   r   zFree Trial
                    z# Credits added
                    zPayment Successfull z INR
                    )r   rm   rn   r  r  r$   rK  r   dictr3  r'   r   r   r   rU   r  r   r    r   r   r  rq   )rr   company_credits_usage
usage_listusager   
usage_dictr  JDr  r   r   rw   s               rx   getCompanyCreditsUsageServicerz  
  su   9OO""Xe_"=DDFOOPUV 	 
* .	*EV}||''5='9>>eJ "&Jv#%Jx "$Jw(*J}%*/*@*I*I#+J' [!S(#++22&uo#K0!), 3  $&	 
 __((HNN(;.2253ErJ
5=h113 $ %WRXXJa3 ! *4H)=(>
7#[!S(#++//:i3H/I%%,)* + % 10A B)* + %
 +5X*>)?
8$j)].	*`  s   G&G) )	G82G33G8c                 (   	 d}t         j                  j                  |       j                         }|rt        j                  j                  |j
                        j                         }g d}|D ci c]  }|d }}|rp|j                  }|rI|j                  d      j                  d      }|D ]$  }	|	s|	j                  dd      \  }}
||v s |
||<   & |d	   }|d
   }|d   }|d   }|d   }|j
                  |j                  r|j                  nd|j                  r|j                  nd|j                  r|j                  nd|j                  r|j                  nd|j                  r|j                  nd|j                  r|j                  nd|j                  r|j                  nd|j                   r|j                   ndr|ndr|ndr|ndr|ndr|nd|j"                  r|j"                  ndd}|S c c}w # t$        $ r} d }~ww xY w)Nr   r   r   )LinkedinFacebook	InstagramYoutubeTwitterr  r  :r   r|  r}  r~  r  r  )r   r   r|   websitephonecompany_typeaddresscitycountryr|  r}  r~  r  r  contact_person)r#   rm   rn   r   r3   r   r   r  rl   r   r|   r  phone1ri   address1r  r  rh   rq   )rI  rv   r   r&  keywordsr_  social_links_varssocial_links_stringsocial_linkslinkr  r|  r}  r~  r  r  rw   s                    rx   getCompanyDatar  
  s   9//((C(0557''...DIIKHRH 5= =Sb = =&.&:&:#&#6#<#<S#A#G#G#ML , ?)-C);JC"h9> 1# 6	? -Z8,Z8-k:	+I6+I6 jj(/"*1--R.5oo7??2+2>>r7>7J7J 3 3PR/6/?/?7++R(/".5oo7??2(0Hb(0Hb*3Y&-72&-72-4-B-BG))!L( S !>V  s7   A3H 5
G=?9H 9H D)H =H 	HHHc                     	 t        | d   | d   | d   | d   t        j                               }|j                          |j                  S # t
        $ r} d }~ww xY w)Nzcompany-namer|   rg   zcontact-person)rf   r`   rg   rh   rj   )r   r   ro   rp   r   rq   )rr   rv   rw   s      rx   demoUserServicer  <  sf    " 0!'*j)"#34&lln
 	 s   A	A 	AAAc                    	 t         j                  j                  | d         j                         }|rt        j                  j                  |j                        }t        j                  j                  |j                        }d}|j                  r|j                  }g }t        |t              r|D ]  }t        |t              s|j                         D ]m  }t        |t              rAd|v r=|j                  |j!                  d      D 	cg c]  }	|	j#                          c}	       T|j%                  t        |             o  nt        |      g}dj'                  |      }|j                  d |j(                  |j*                  |j,                  |j.                  r|j.                  nd|j0                  r|j0                  nd|j2                  (|j4                  |j2                   d|j4                   dnd||j6                  r|j6                  ndd
}
t9               d	   d
   }d}t;        ||      }| d   dk(  r/| d   |
d<   t<        j                  j                  |j,                  |j>                  |j(                        j                         }|rt<        j                  j                  |j,                  |j>                  |j>                        jA                  d      jC                         }tD        j                  j                  |j,                        }tF        j                  j                  |j,                  |j*                        }|jH                  |jJ                  k\  rtM        jN                  ||
      }|jP                  }|rtS        jT                  |jW                  d            }|d   dk(  rt        |j>                  |j(                  |jX                  |j,                  |j                  d|j*                        }|j[                          |j*                  dk(  r=t]        |j>                  |j(                  d|j,                        }|j[                          |j^                  rM|j*                  dk(  rta        |j^                  dd       n&|j*                  dk(  rta        |j^                  dd        |j*                  dk(  r/d|_1        d|_1        |j[                          |j[                          n=|j*                  dk(  r.d|_1        d|_1        |j[                          |j[                          te        |j,                  |j*                  |j(                         yy!y"y| d   d#k(  rr| d   |
d<   tM        jN                  ||
      }|jP                  }|rEtS        jT                  |jW                  d            }|d   dk(  rd$|_1        |j[                          yy!yy c c}	w # tf        $ r} d }~ww xY w)%Nr  r   r   r  r  r   Years)
r=  r   r+  r  r   r   rN  
experiencer  rg   r   r   z/api/update-candidate-workflowr   r   )r   r   r+  )r   r   id__gtr   r   rl  r   r0  
statusCoder   r   )r2  r+  r   r   r   r   r   r   )r2  r'  r   r   r   SCScreening Sentr   CTCoding Test Sentra   r   r   r   )4r!   rm   rn   r   r   rK  r2  r   r   r  r<  r  rt  r  rk   extendrl   r  r  r  r+  r   r   r  r   r  r  rg   r   r   r'   r   r  r^  r   r   r   r   r   r   r   r   r6  r7  r   rp   r(   r  rQ   r   ro  rq   )rr   rO  r8  r   formatted_skills
raw_skills
skill_listr  r  rv  r  r   r   r   current_workflownext_workflowr   rm  send_workflow_datar@  rA  rB  r  rw   s                           rx   updateCandidateWorkflowServicer  O  sc   ]#++22hx6H2INNP!))--1I1I-JI**ioo*>H!  %..

j$/!+ B%eT2). B#-eS#9cUl$.$5$5%++VYJZ6[Qqwwy6[$\$.$5$5c%j$A	BB #&j/!2J#'99Z#8  #,"7"7'//*44&004<4H4HH00b/7~~X^^2__0X__5P "* 1X__4EVLVX*191B1BH--M  %;x09L7H,1C!S(*28*<h'#+#3#3#:#:'11"++(00 $; $ $&	 ! $ !((//&/&9&9"*++#3#6#6 0 
 "$ " '.oo&9&9IDWDW&9&XO&4&<&<&@&@"+"5"5AXAX 'A 'O '../2I2II-5]]3]-S*+=+E+E(+(,

3C3J3J73S(TI(6!;1=09,9,A,A5>5O5O.7.A.A*3//+..;.E.E2" !/ 3 3 5#1#;#;s#B4@4=LL1>1F1F/22;2E2E	5&M %2$6$6$8#,#6#6'5'?'?3'F(<Y=P=PQUVf(g)7)A)AS)H(<Y=P=PQUVh(i#/#9#9S#@7:I$4:=L$7$-NN$4$0$5$5$7%1%;%;s%B7:I$4:=L$7$-NN$4$0$5$5$7 4$-$7$7$2$<$<$2$:$:!"6 ) () $ ! (#s**28*<h'%-]]3]%K"#5#=#= # $

+;+B+B7+K LI .!3.1+$))+   !m   7\P  s9   C	W4 AW4 W/(QW4 3A8W4 /W4 4	X=W>>Xc           	      	   	 d d d}t         j                  j                  |       j                         }|r]t	        t
        j                  j                  |j                  d      j                  ddg      j                  d      j                  d	d
      d d       }t        |      dk  r|t	        t
        j                  j                  |j                        j                  ddg      j                  |      j                  d      j                  d	d
      d dt        |      z
         z  }t
        j                  j                  |      j                  d      }g g g g g d}g }g }g }g }	g }
|D ]B  }t        j                  j                  |j                  |j                        }d}d}d}d}|rw|D ]r  }|j                  dk(  r||j                  z  }"|j                  dk(  r||j                  z  }A|j                  dk(  sQ||j                  z  }||j                  xs dz  }t t
        j                  j                  |j                        }|j!                  |j"                         |j!                  |       |j!                  |       |	j!                  |       |
j!                  |       E ||d<   ||d<   ||d<   |	|d<   |
|d<   g g g g d}t%        j&                         j)                         }|t+        d      z
  }t-        d      D cg c]  }|t+        |      z    }}|D ci c]  } |j.                  d      dddd }}t0        j                  j                  ||j                        j3                  d d!      j5                  t7        d	      "      }|D ]k  }|d!   j/                  d      }|d    }||v s!|dk(  r||   d#xx   |d$   z  cc<   :|dk(  r||   d%xx   |d$   z  cc<   S|dk(  sY||   d&xx   |d$   z  cc<   m |D cg c]  } |j.                  d'       c}|d(<   |D cg c]
  }||   d#    c}|d#<   |D cg c]
  }||   d%    c}|d%<   |D cg c]
  }||   d&    c}|d&<   ||d)<   ||d*<   |S c c}w c c}w c c}w c c}w c c}w c c}w # t8        $ r}t;        t=        |              d }~ww xY w)+N)line_graph_datajd_reg_datar   r   )r   r   r  r   r  
-createdonr   Tr      r   id__in)jdtitlescreening_countcoding_countinterview_countoffered_countr   r   r   r   r  r  r  r  r  )dates	screeningcodingr  r   r     rJ  )r  r  r  )registrationdate__gter   r   r   )countr  r  r  r  %d-%m-%Yr  r  r  )r#   rm   rn   r   r  r   r   r   r  r   r  r5   r   rO  
efficiencyrK  r  r   r   ro   r   r   r  r3  r!   r  annotater   rq   r   rk   )r   dashboard_datar   jd_ids_with_dashboard	job_descsr  	jd_titlesr  r  r  r  job_datajd_analysissc_reg_countcd_reg_countint_reg_countoffer_countanalysis_datar   
line_graphcurrent_date
start_dater_  
date_ranger   date_mapquerysetentrydate_keyr   rw   s                                  rx   dashBoardGraphDataServicer    s)   A  $

 //((I(6;;= %)&&3&OS#J/,'T-bq2%! ()A-%OO**WZZ*@Wc
W3W$9W:Xl+ [D[12TQ=R9S5S	V* %  ..6K.LUUI
 #% "#%!#K I OL OM% 2(0077%jj 8   !  !)4 I(22c9(M,F,FFL*44;(M,F,FFL*44;)]-G-GGM'=+C+C+HqHKI #??..(++.>  0&&|4##L1&&}5$$[172: &/K	"-<K)**6K'-<K)*+8K( $&B"SUVJ#<<>..0L%	r(::JBG)LQ*ya'88LJL ' j)aVW+XXH  $$++*4

 ,  %78d,  " 
J !34==jI!+.	x' C' *;75>I7"c) *84gF4"c) *;75>I7
J JT"T=4==#<"TJwOW&Xtx~k'B&XJ{#IQ#RHTN8$<#RJx OW&Xtx~k'B&XJ{#0:N,-,7N=)G M2 #U&X#R&X  c!fsz   HR5 DR5 R3R5 9RA8R5 7R5 R5 !R!:
R5 R&
R5 R+,
R5 6R0R5 R5 5	S>SSc                    	 d d d}t         j                  j                  |       j                         }|ri ddddddddddd	dd
dddddddddddddddddddddddi}dddd}t        j                  j                  |j
                        j                  d      j                  t        d      t        d      t        d      t        d      t        d       t        d!      "      }|D ]  }|j                  |d         }|s|d#   rt        |d#         nd|| d$<   |d%   rt        |d%         nd|| d&<   |d'   rt        |d'         nd|| d(<   |d)   rt        |d)         nd|| d*<   |d+   rt        |d+         nd|| d,<   |d-   rt        |d-         nd|| d.<    t        j                  j                  |       }|rZg }	|D ]M  }
t        j                  j                  | |
j                  /      }d}d}d}d}d}d}|D ]  }|j                  d0k(  r&||j                  xs dz  }||j                  xs dz  }|j                  d1k(  r&||j                  xs dz  }||j                  xs dz  }|j                  d2k(  s}||j                  xs dz  }||j                  xs dz  } |dk7  r||z  d3z  nd}|dk7  r||z  d3z  nd}|dk7  r||z  d3z  nd}|	j!                  |
j"                  |||t%        |      t%        |      t%        |      |d4       P |	|d5<   ||d6<   |S y # t&        $ r} d }~ww xY w)7N)durations_datasources_datar   screening_minr   screening_avgscreening_maxscreening_min_ltscreening_avg_ltscreening_max_lt
coding_min
coding_avg
coding_maxcoding_min_ltcoding_avg_ltcoding_max_ltinterview_mininterview_avginterview_maxinterview_min_ltinterview_avg_ltinterview_max_ltr  r  r  rH  r   r   durationmindurationavgdurationmaxleadtimeminleadtimeavgleadtimemax)avg_duration_minavg_duration_avgavg_duration_maxavg_leadtime_minavg_leadtime_avgavg_leadtime_maxr  _minr  _avgr  _maxr  _min_ltr  _avg_ltr  _max_lt)r   
sourcecoder   r   r   d   )r  r  r  r  screening_efficiency_percentagecoding_efficiency_percentageinterview_efficiency_percentageofferedr  r  )r#   rm   rn   r   r5   r   r  r  r   rK  format_durationr6   r   r   rO  r  r  r   r   rq   )r   r  r   r  papertype_mappingpaperwise_durationduration_data
key_prefixcompany_sourcesr  r   source_datar  screening_efficiencyr  coding_efficiencyr  interview_efficiencyr1  r  r  r  rw   s                          rx   getDashboardDatar  u  s   `,0$G//((J(7<<>   #A	
 #A #A a a a              #A!" #A#$ #A%N* '2{ S ""))GJJ)?$%(%7%(%7%(%7%(%7%(%7%(%7    "4 #.22=3MN
 ));< (6H(IJ #j\#67 ));< (6H(IJ #j\#67 ));< (6H(IJ #j\#67 ));< (6H(IJ #j\#9: ));< (6H(IJ #j\#9: ));< (6H(IJ #j\#9:?#N %nn33j3IO!- <F","4"4";";", #< #K '(O+,(#$L()%&'O+,( + I>>S0+t/@/@/EAEO0DOO4HqH0>>S0(D,=,=,BBL-1EAE->>S0+t/@/@/EAEO0DOO4HqH0I  +a/ .?3F 4 (1, +\9S@ 1 +a/ .?3F 4 !'',2LL/>,8/>?B ?@ =@ <= @C ?@ (<W<| 2>~./=N+,!!o r  s&   DM  FM  B"M   	M	M

Mc                 8   	 t        |       } | dk  r|  dS | dk  r'| dz  }| dz  }|dk(  rdnd}|r| d| d| dS | d| S | dz  }| dz  }|dz  }|dz  }|dk(  rdnd	}|dk(  rdnd}| d| }|r|d| d| z  }|r	|d| dz  }|S # t        $ r} d }~ww xY w)
N<   z minutesi  r   r  r'  rG  r-  r~  )r   rq   )r%  r'  remaining_minuteshour_strr~  day_strresultrw   s           rx   r  r    s"   &g,R<Yh''t^rME '"!&!vH % '8*A&7%8A waz* d?D '$%+E 1B 6#qyefG!&!vHvQwi(FAeWAhZ00 A/099M s(   B
 $B
 B
 AB
 
	BBBc                    	 t         j                  j                  |       j                  d      }|r>g }|D ]5  }|j	                  |j
                  |j                  |j                  d       7 |S y # t        $ r} d }~ww xY w)Nr   r   )r   r   r   )	r6   rm   rn   r  r  r   r   r   rq   )r   sourcesr  r   rw   s        rx   getCompanySourcesDatar  C  s    ..''*'=FFwOL! ##!99fkkFLLQ     s   A.A2 2	B;A<<Bc                    	 |j                  d      }|rVt        j                  j                  |j                        }|d   }t        |       j                  d      }| d| }t        j                  j                  t        j                  dd|      }t        |d      5 }	|j                         D ]  }
|	j                  |
        	 d d d        t               d   d	   }| d
}t        ||      }t        j                   j#                  | d      j%                         }|r'||_        ||_        d|_        |j-                          |S t        | d||d      }|j-                          |S y # 1 sw Y   xY w# t.        $ r} d }~ww xY w)Nfiler   r~   _candidatesuploadscandidate_uploadzwb+DIRr(  z,/app_api/functions/data_configs/mapping.jsonr   r   r,  U)r   r,  filepathfilenamer   )rK  ospathsplitextr   rk   zfillr  rW   
MEDIA_ROOTr!  chunkswriter   rV   r7   rm   rn   r   r  r  r   rp   rq   )r   r   fileObjsuploaded_excelexcel_filenameexcel_extensionformatted_company_iduser_file_name
excel_path	user_filechunkr(  r  mappings_datacandidate_upload_fileuploaded_filerw   s                    rx   mapUploadedCandidateFieldsr+  X  s   4!f-WW--n.A.ABN,Q/O#&z?#8#8#;  45[@QRN##Y0BNJ j%( +I+224 +EOOE*++ "E*;7I$+%QRI4Y
KM$+OO$:$:$3 %; %df " %1;%.1?%./2%,%**, !  !(('+! ""$  [ + +D  s7   BE9 !'E-	B E9 
!E9 -E62E9 9	FFFc           	      	   	 t         j                  j                  | d      j                         }|rd|_        |j                          t        |       j                  d      }t        j                  j                  t        j                  dd      }t        j                  |      }d }|D ]  }|j                  | d      s|} n |rtt        j                  j                  ||      }	t        j                   |	      }
|d   }|d	   }t"        j                  j                  |
      j%                         j&                  }|d   }g }|
j)                         D ]
  \  }}	 |j+                  dd      dk7  r|j,                  |j+                  dd         nd }|j+                  dd      dk7  r|j,                  |j+                  dd         nd }|j+                  dd      dk7  r|j,                  |j+                  dd         nd }|j+                  dd      dk7  r|j,                  |j+                  dd         nd }t        j.                  |      rd n|}t        j.                  |      rd n|}t        j.                  |      rd n|}t        j.                  |      rd n|}g }|s|j1                  d       |s|j1                  d       nt3        |      s|j1                  d       |r%|j1                  ddj                  |              |||||d	   ||d}	 t5        || d |      }|dk(  r|j1                  d       n(|dk(  r|j1                  d       n|j1                  d        ||
d<   | d }t        j                  j                  t        j                  dd|      }|
j9                  |d!"       t;        |      }|j<                  }t?        tA        d #      tA        d #      tA        d #      tA        d #      $      }|d%   D ]	  } || _!         |j                  |       |rd|_        |j                          y y y # t6        $ r}|j1                  d       Y d }~d }~ww xY w# t6        $ r)}|j1                  dt        |       d       Y d }~;d }~ww xY w# t6        $ r}!tE        d&t        |!               d }!~!ww xY w)'Nr   r  r   r~   r  r  r  zcolumns-datar  r  source-codez
First Namez	Last NameEmailMobilezMissing First NamezMissing EmailzInvalid Emailz	Skipped: r  )r)  r*  r|   r&  r  
begin-fromr-  insufficient_creditszSkipped: Insufficient Creditscandidate_already_registeredz%Skipped: Candidate Already RegisteredzCandidate is addedzSkipped: Error adding candidatezSkipped: Error occurred (rs  zhirelines-status_candidate_report.xlsxF)index)border_style)leftrighttopbottomr   zError occurred: )#r7   rm   rn   r   r   rp   rk   r  r  r  r  rW   r  listdir
startswithpd
read_excelr'   r^  r+  iterrowsrK  ilocisnar  is_valid_emailrX   rq   to_excelr   activer   r   borderr   )"r   rr   rf  r)  r#  
upload_dirfilesmatching_filer  excel_file_pathdfcolumn_mappingjd_id
begin_fromsource_coderU  r5  row
first_name	last_namer|   r&  skip_reasonsr>  c_datadb_error	row_errorreport_fileoutput_file_pathworkbooksheet	no_bordercellrw   s"                                     rx   processAddCandidateServicer\    s   d ' 6 6 s !7 !

$& 	 !+.!(!&&(  #:44Q7 WW\\("5"5yBTU
 

:&  	I##';&<K$HI )	
  !ggll:}EO /B &n5N TNE!))00u0=CCEMMJ"=1K K !kkm OV
sNV *--lB?2E !3!3L"!EF!  *--k2>"D !3!3K!DE!  *--gr:b@ !3!3GR!@A!  *--h;rA !3!3Hb!AB!  *,)<*J(*	(:	I$&GGENDE%'WWV_T&F $&L &$++,@A $++O<+E2$++O< $#**Ytyy7N6O+PQ  &0$-!&"(&tn&0'2&NO!/*Jg" "%;;'../NO#'EE'../VW (../CDQOVd &1B!" 222HIK!ww||##Y0BK  KK(K6 %%56HOOE t,-d+.	I a ('( MM*+$/2%,%**, %E z % O#**-LNNO ! V&&)B3y>BRRS'TUUVP   Q)*s|   CR BR "F&Q(R 
Q(AQ%CR 	Q%
Q Q( Q%%Q((	R1RR RR 	S&R>>Sc                 6    d}t        j                  ||       duS )z-Basic regex pattern to validate email format.z0^[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+$N)rematch)r|   patterns     rx   rB  rB  8  s    AG88GU#4//    c                     	 t         j                  j                  | d         j                         }|rd}|S d}|S # t        $ r} d }~ww xY w)NrL  r  r   r   )r!   rm   rn   r   rq   )rr   r   registrations_flagrw   s       rx   #checkJdCandidateRegistrationServicerd  >  s`    $,,33(7:K3LQQS!$ "! "%!! s   6= = 	AAAc                     	 i }t         j                  j                  | d      j                         }|r|j                  |d<   d|d<   |S d|d<   |S # t
        $ r} d }~ww xY w)Nr   r  r   r   r   r   )r7   rm   rn   r   r   rq   )r   upload_datacandidate_uploaded_datarw   s       rx   getCompanyCandidateUploadDatarh  N  s    ")//"8"8 s #9 #

$& 	  #$;$B$BK!*-K'  +.K' s   AA A 	A!AA!c                 6   	 t         j                  j                  d| d      j                         }|rTt	        |       j                  d      }| d}t        j                  j                  t        j                  dd|      }||dS y # t        $ r} d }~ww xY w)Nr   )r,  r   r   r~   r4  r  r  )report_file_pathreport_file_name)r7   rm   rn   r   rk   r  r  r  r  rW   r  rq   )r   uploaded_datar#  rV  rj  rw   s         rx   downloadUploadReportServicerm  c  s    ..
3 / 

$& 	 #&z?#8#8#; 122HIK!ww||##Y0BK 
 %5$/    s   BB	 		BBBc           
      ~   	 t         j                  j                  |       j                         j	                         }|si S i d|j                  d      d|j                  dd      d|j                  d      r |j                  dd      j                         ndd|j                  d      r |j                  dd      j                         ndd|j                  dd      d|j                  dd      d	|j                  d	d      d
|j                  d
d      d|j                  dd      d|j                  dd      d|j                  dd      d|j                  dd      d|j                  dd      d|j                  dd      d|j                  dd      d|j                  dd      d|j                  dd      |j                  dd      |j                  dd      |j                  dd      d}t        j                  j                  |       j                  ddddd      j                  d      }t        |      |d <   t        j                  j                  |       j                  d!d"dd      j                  d      }t        |      |d#<   d$}|D ]F  }	 t        |j                  dd$            }t        |j                  dd$            }||k\  r|||z
  z  }H | d%|d&<   t        j                  j                  |       j                  d'd(      j	                         }	|	r|	nddd)|d*<   |d*   j                  d'd      }
|d*   j                  d(d      }g }|
rM|j                  |
j                  d+      D cg c]#  }|j                         s|j                         % c}       |rM|j                  |j                  d+      D cg c]#  }|j                         s|j                         % c}       d,j!                  |      |d-<   t"        j                  j                  |       j                  d.d/d0d1d2d3      j                  d      }t        |      |d4<   t$        j                  j                  |       j                  d5d6      j                  d      }t        |      |d7<   t&        j                  j                  |       j                  d8d6      j                  d      }t        |      |d9<   t        t(        j                  j                  |       j                  d:d;d<d=d>d?            }||d@<   t*        j                  j                  |j                  dA      B      j                  dC      j	                         }t,        j                  j                  |j                  dD            j                  dE      j	                         }|r|dE   nd |dE<   |r'|j                  dC      r|j                  dC      |dF<   |S d |dF<   |S #  Y xY wc c}w c c}w # t.        $ r} d }~ww xY w)GNr   r   
middlenamer   r)  r*  r   r|   r&  dateofcreationlinkedindateofbirthnativeoffacebookpassportnumstrengtheducationscore0awardsscorecertificatesscoreexperiencescoreprojectsscoreskillsscore)r{  r|  r}  r  course	instituteyearfromyeartogradesequence	educationjobtitler   r  r   r  final_experienceprimaryskillsr  )r  r  r  r  r  skills_displayprojectname
clientname
roleplayed
skillsused	yearsfromyearstoprojects	awardnamer9  awardscertnamecertificatesaddline1addline2r  stater  zipcoder  r   r   r   resumeiddocparseridlogo)r9   rm   rn   r  r^  rK  
capitalizer;   r  r  r<   r   r>   r  rl   r  r  r=   r?   r@   rA   r3   r8   rq   )pidrT  profile_deteducation_listexperience_list	total_expexpyfytr  primary	secondaryskills_listrv  projects_listawards_list	cert_listaddress_listr&  resumerw   s                        rx   r  r    s>   S//((C(0779??AI
'++d#
 '++lB7

 gkkR]F^'++k26AACce
 GKKPZD[Z4??A`b
 W[["-
 W[["-
 gkk(B/
 gkk*:B?
 J3
 7;;}b9
 J3
 J3
  7;;}b9!
" Jr2#
$ w{{+;C@%
& gkk-<'
(  7;;/B3#G)
* !(,=c B%kk/#>#KKc:/
6 $$++c+:VHk:xIXj! 	 $(#7K  %%,,s,;VJ	:x@Xj! 	 %)$9L!	" 	CQ/01-.8b(I	 .7Kv*>&' !!((3(7VO%67UW 	 FB2"N 	H
 h'++OR@)--.?D	$+MM#$6Dq!'')D $-OOC$8FqAGGIF )-		+(>$% ##**S*9V Xj! 	 #'}"5J !!((3(7VK(Xj! 	
 !%[ 1H  ''...=VJ'Xj! 	
 '+9oN# ""))C)8??JI
 ".I ##gkk+.F#GVIUW 	
 &&'++j*A&BII-X^^`>DVM%:$M" Y/"*,,y"9K  #'Ko, E
 Gz  sc   ?X- I"X- %AX(B X- X#X#0'X- X(-X(?HX- X- X X- -	X<6X77X<c                    	 t         j                  j                  |       j                         j	                  d      }g }t
        j                  j                  dd      j                  dd      D ci c]  }|d   |d    }}|D ch c]$  }|j                  d      r|j                  d      & }}t        j                  j                  |	      j                  d
d      D ci c]  }|d
   |d    }}t        j                  j                  |       j                  ddd      j                         }	|D ]S  }|j                  d      }
|
rt        |
d      r|
j                  d      nd}|j                  d      }|j                  d      }|j                  |j                  d
      |j                  d      |j                  d      |||j                  ||j                  d            ||j                  |d      |j                  d      |j                  d      |j                  d      |	r|	d   nd|	r$|	j                  d      r|	d   j                         nd|	r$|	j                  d      r|	d   j                         ndd       V |S c c}w c c}w c c}w # t        $ r}t        d|        d }~ww xY w)Nr~  z	-sequencer   r   )lookupidr   lookupparam1
lookupnameacvityuseridr  r   r   r   r   r)  r*  r   r3  rz  r   activitycoder  r  activitynameactivityremarksactivitystatus)r   r  r  r   r  activity_textactivityuseridactivityusernamer  r  r  r  r)  r*  z'getProfileactivityDetailsService error:)r:   rm   rn   r  r  rC   rK  r$   r9   r^  hasattrr3  r  r  rq   r   )r  activity_list
final_listl
lookup_maprO  user_idsuuser_maprN  dtformatted_dtr   r   rw   s                  rx    getProfileactivityDetailsServicer  ;  s   O ##VcV"VXXk"	 	 

 "))00 1  f^\2
 nq.

 
 %
ww~& GGN#
 
 \\(((9VD&!
 dGQvY
 
 OOVsV^VG[*5UW	 	 ! !	C%B '"j1 /0  77>*DWW^,Fggdm WW[1GGJ/) $ ",cggn6M!N"($,LL$<#&77+<#="%''*:"; # 72;Ig. ENR[R_R_`kRli4??ArtBKPYP]P]^hPiYz2==?np) !	F 


f  7;sC   A2J" 4JJ" 
)J34J" 'J7FJ" J" "	J=+J88J=c                 
   	 g }| j                   dk(  rSt        j                  j                  | j                        }|rQ|j                  d      r@|j                  |d         }n*t        j                  j                  | j                        }|j                  dd      }t        j                  j                  |	      j                  d
      j                  d      }|r|D ]  }|j                  |j                        j                         }t        t        j                  j                  |j                        j                  dd            }t        j                  j                  |j                        j                         }	g }
|	rDt        t        j                  j                  |	j                        j                  dd            }
t        t!        ||
z               }|j#                  |j                  |j$                  xs d|j&                  xs d|j(                  r|j(                  j+                  d      nd|j,                  dj/                  |      d        |S # t0        $ r} d }~ww xY w)Nr   r   
source_idsr  r  r   Tr   )sourceid__inr  r  r  r   r  tagr~  r   rz  rG  )r   r   r   r   r   tags)r   r6   rm   rn   r   rK  r   r   r8   r   r  sourceidr^  r  rK   r9   r:  r  r  r   r   r3  r   r  rq   )rb  filtersresumes_datar  r  resumesr  r   resume_tagsrT  profile_tagscombined_tagsrw   s                rx   getResumeDatar    s   :>>Z'nn++i6I6I+JG7;;|4!..0E.Fnn++9<<+@G((D(9
 NN!!z!:WCW Xl# 	 ! ! 6??;AAC"3;;#5#5vyy#5#I#U#UV[bf#U#gh "//00&))0DJJL! #'(:(:WZZ(:(P(\(\]bim(\(n#oL !%S|)C%D E ##$ii & 52"(,,"4"  &// #,,556IJ!#"(-- # 7)!F  s   I0I3 3	J<I==Jc                      	 t        t        j                  j                  d      j	                  dddd            } | S # t
        $ r} d }~ww xY w)Nr   r  r   r|   r   r   )r  r$   rm   rn   r  rq   )r  rw   s     rx   getEmailFetchUsersr    sT    
LLs+22g{F

  s   <? 	AA		Ac                     	 t         j                  j                  |       }d|_        |j	                          y # t
        $ r} d }~ww xY w)Nr   r  )r8   rm   rK  r   rp   rq   )ridr  rw   s      rx   softDeleteResumer    sA    ##s#+ s   7: 	A	AA	c           
      d   	 t         j                  j                  | |j                        j	                         }|sy t
        j                  j                  |       j	                         }d d d d d d d d d}i d|j                  xs dd|j                  xs dd|j                  xs dd|j                  xs dd	|j                  xs dd
|j                  xs dd|j                  xs dd|j                  xs dd|j                  xs dd|j                  xs dd|j                   xs dd|j"                  d|j$                  xs dd|j&                  r|j&                  j)                  d      ndd|r|j*                  ndd|r|j,                  ndd|r|j.                  nd|r|j0                  nd|r|j2                  nd|r|j4                  ndd}t6        j                  j                  |j8                        j;                  d      }g }|rd|D ]_  }|j=                  |j>                  xs d|j@                  xs d|jB                  xs d|jD                  xs d|jF                  xs dd       a tH        j                  j                  |j8                        j;                  d      }	g }
|	rU|	D ]P  }|
j=                  |jJ                  xs d|jL                  xs d|jB                  xs d|jD                  xs dd       R tN        j                  j                  |j8                        j;                  d      }g }|rs|D ]n  }|j=                  |jP                  xs d|jR                  xs d|jT                  xs d|jV                  xs d|jX                  xs d|jZ                  xs dd       p t\        j                  j                  |j8                        j;                  d      }g }|r7|D ]2  }|j=                  |j^                  xs d|j`                  xs dd       4 tb        j                  j                  |j8                        j;                  d      }g }|r7|D ]2  }|j=                  |jd                  xs d|j`                  xs dd       4 tf        j                  j                  |j8                        j	                         }g }|r'|jh                  r|jh                  jk                  d      }d}|jl                  rXtn        j                  jq                  |jl                        }ts        jt                  |jv                        jy                  d       }||d!<   |
|d"<   ||d#<   ||d$<   ||d%<   ||d&<   ||d'<   d(| |d)<   |S # tz        $ r} d }~ww xY w)*Nr   r   r~  )personalr  r  r  r  r  r  resume_filer   r   r)  ro  r*  r|   r&  rq  rt  ru  
fathernamers  r   rv  rr  rJ  r  r  r  )r  r  r  r  )r  r  r  r  r  )r  r   r  r  )r  r  r  r  r  r  )r  r9  )r  r9  r  r  r0  r  r  r  r  r  r  r  zdata:application/pdf;base64,r  )>r9   rm   rn   r   r   rA   r   r)  ro  r*  r|   r&  rq  rt  ru  r  rs  r   rv  rr  r3  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  r9  r@   r  r>   r  rl   r  rB   rK  base64	b64encodefilecontentr7  rq   )r  rb  rT  profile_addressr  personal_detailseducation_dataprofile_educationr  experience_dataprofile_experiencer  projects_dataprofile_projectsprojectawards_dataprofile_awardsawardcertificates_dataprofile_certificatescertificateskills_dataprofile_skillsfile_base64r  rw   s                             rx   getProfileDatar    s   k//((C9;N;N(OTTV(0077#7FKKM  	

W]](b
**0b
 ',,2
 ((.B	

 W]](b
 gnn*
 ((.B
 ((.B
 7..4"
 ',,2
 ((.B
 gnn
 w''-2
 <C<O<O##,,Z8UW
" O00#
$ O00%
& OO(('
( />_**22A..r2A..r-
4 *11887::8NWW
 + 
	!(("+"2"2"8b%.%8%8%>B$-$6$6$<""+"2"2"8b!*!6B
 ,33::jj ; 

(:
 	  - 	
"))$.$7$7$=2#-#5#5#;$.$7$7$=2","3"3"9r		 (//666LUU
 (  '''.':':'@b&-&8&8&>B&-&8&8&>B&-&8&8&>B%,%6%6%<"#*??#8b	 $++22WZZ2HQQ
 $ %%%*__%: %

 0b 077>>jj ? 

(:
 	  "0 $++$/$8$8$>B + 0 0 6B $++22WZZ2HMMO;44(66<<SAN$,,00':J:J0KK **;+B+BCJJ7SK#3Z %7\"$5[!#3Z !/X';^$!/X(D[M&R]# s   ;V  U!V   	V/)V**V/c                 
   	 t        |       }t        j                  j                  |j                        }t
        }t        j                  j                  d      j                         }|j                  r+t        j                  j                  |j                        }n.t        j                  j                  d      j                         }d}|r|j                  r|j                  }nd}t        j                  j                  t        j
                  dd|      }t        |dd	
      5 }|j!                         }d d d        |j#                  d|d   r|d   nd      }	|	j#                  d|d   j%                  d            }	|	j#                  d|d         }	|	j#                  d|d         }	|	j#                  d|d         }	|	j#                  d|d         }	|	j#                  d|d   r|d   j%                  d      nd      }	|	j#                  d|d   r|d   nd      }	|	j#                  d|d   r|d   nd      }	|	j#                  d|d          }	|	j#                  d!|j&                        }	|	j#                  d"|j&                        }	|	j#                  d#|d$   r|d$    d%nd      }	d}
|d&   r/|d&   D ]&  }|
d'|d(    d)|d*    d+|d,    d)|d-    d.|d/    d0z  }
( nd1}
d}|d2   r)|d2   D ]   }|d'|d3    d4|d5    d+|d,    d)|d-    d6	z  }" nd7}d}|d8   d9   }|rTd:j                  |j)                  d;      D cg c]#  }|j+                         s|j+                         % c}      }d<| d=}nd>}d}|d?   r5|d?   D ],  }|d'|d@    d)|dA    dB|dC    dD|dE    d+|dF    d)|dG    d6z  }. ndH}d}|dI   r|dI   D ]  }|d'|dJ    d)|dK    dLz  } ndM}d}|dN   r|dN   D ]  }|d'|dO    d)|dK    dLz  } ndP}|	j#                  dQ|
      }	|	j#                  dR|      }	|	j#                  dS|      }	|	j#                  dT|      }	|	j#                  dU|      }	|	j#                  dV|      }	|dW|  dXz   }t        |dY      }t-        j.                  |	|Z      }|j1                          |d    d[|d    d[|d     }||xs d|j2                  d\S # 1 sw Y   xY wc c}w # t4        $ r}t7        t9        |              d }~ww xY w)]Nr   r   default_templater   zbranded_resume_template.htmlmediabranded_resumesr  r0  )encodingr  r  z{#creation_date#}rp  %d-%B-%Yz	{#title#}r   z{#firstname#}r)  z{#lastname#}r*  z	{#email#}r|   z{#dob#}rr  r  z{#linkedin#}rq  z{#nativeof#}rs  z{#final_experience#}r  z{#user_name#}z{#company_name#}z{#strength#}rv  %r  z/
                    <li class="custom-list">  r  r  r  z (r  r  z) - Grade: r  z </li>
                zY
                <li class="custom-list">No education details available</li>
            r  r  z at r   z)</li>
                zH
                <li class="custom-list">No Experience</li>
            r  r  r  r  z)
                <li class="custom-list">z</li>
            zD
                <li class="custom-list">No Skills</li>
            r  r  r  z	, Role : r  z , Skills Used : r  r  r  zF
                <li class="custom-list">No Projects</li>
            r  r  r9  z</li>
                zJ
                <li class="custom-list">No Certificates</li>
            r  r  zD
                <li class="custom-list">No Awards</li>
            z{#education_data#}z{#experience_data#}z{#skills_data#}z{#projects_data#}z{#certificates_data#}z{#awards_data#}z/media/branded_resumes/resume_r  r  r  rG  r  )r  r#   rm   rK  r   r   rJ   rn   r^  resumetemplateidr  r  r  r  rW   r!  r"  r2  r3  r   rl   r  r   r#  r$  r%  rq   r   rk   )
profile_idrb  r  r   r(  resume_templater  resume_template_pathfupdated_resumer  r  r  r  r  primary_skillsrv  r  r  r  r  r  r  r0  r1  r2  r  rw   s                               rx   generateBrandedProfiler    s:   m2:>//%%)<)<%= 	(00777MSSU##,4488G<T<T8UO,44;;S;QWWYO77.77=  "ww||H,=,=wHY[kl &g> 	'!ffhO	' )00'6v'>OF#B
 (//1A!B!K!KJ!W
 (//_W=UV'//Q\A]^'//PZ@[\'//_W=UV'// #=1  .77
C
 (//_noy_zPZ@[  AC  D'//^mnx^yz?Z  @B  C'//0FXjHkl'//P'//0BGLLQ'//etu  fA?S]C^B__`@a  GI  J;',[9 	 '/09(0C.DCS^I_Gaacenoyezc||  BK  LT  BU  @W  Wb  dm  nu  dv  bx x# 
N <(-l; 
 (/0::0F.GtZXaMbKddfhrs}h~  gA  AD  FP  QY  FZ  D\ \$ O (2?C!YY>;O;OPS;T'baXYX_X_Xa	'bcN))7(8 9KK :&*:6  &/070F.GsGT`LaJcclnu  wC  oD  mF  FW  Y`  am  Yn  Wp  pr  t{  |G  tH  rJ  JM  OV  W`  Oa  Mc c" M >*.~> ! */0;J0G.H[Y_M`Kb c& !
! 8$(2  $/05k0B.C3fFW X  
K (//0DnU'//0EW'//0A;O'//0C]S'//#%6
 (//0A;O#(FzlRV&WW?E2nn^+F&{34Aog6N5OqQ`asQtPuv	 )"b#
 	
I	' 	'v (c^  c!fsD   D+S  -S>G?S  =SS%E(S  SS   	T)S>>Tc                    	 t         j                  j                  |       }t        j                  j                  |j                        }|j
                  }t        j                  j                  |      j                         }|r|j                  nd}|j                  }|j                  }t        j                  j                  |      }|j                  }	|j                  r8t        j                   |j                        }
|
D cg c]  }t#        |       }}ng }|st%        d|j                   d       g S t'        |      }|||	|fS c c}w # t         j(                  $ r t%        d|  d       g cY S t        j(                  $ r! t%        d|  d	j                   d
       g cY S t*        $ r}t%        d|        g cY d}~S d}~ww xY w)z
    Main function to find available interview slots for a candidate's job.

    :param cid: Candidate ID.
    :return: List of available 30-minute slots.
    r   r  Nz!No interviewers found for job ID .zError: Candidate with ID z not found.z%Error: Job Description for candidate z	 (Job ID z) not found.r  )r   rm   rK  r   r   r   r(   rn   r^  r   r   r   r#   r   r  r  r  r   r   get_open_slotsDoesNotExistrq   )rI  r8  r  rS  r  r   rN  r   r   r   jd_interviewers_rawr_  job_interviewer_idsslots_availablerw   s                  rx   getSlotsAvailabler	  H  s   ,%%))S)1	__  IOO 4 ||$,,333MSSU)6%%DHH	\\
//%%%4||??"%"2"22??"C3F"Ga3q6"G"G"$"5ioo5FaHII ))<=	<?? #H !! )#k:;	 3C5	)//ARR^_	
 	 .qc23		sB   DE 	E!E =E E $G90G+G3GGGc                 $    | j                  d      S )Nr!  )r3  )date_objs    rx   get_full_day_namer  ~  s    T""ra  c           
      >	   t        j                         }t        j                         }t        j                  j                  |       }t        t              }|D ]-  }|j                  ||j                     j                  |       / |t        |dz         z   }	t        j                  j                  t        d      t        d      z  | ||	      j                  d	      }
| D ci c]  }|g  }}t        |
      }|
D ]3  }|j                  }||z   }||j                     j                  ||f       5 | D ci c]  }|g  }}t        |
      }d }t!        |      D ]l  }|t        |      z   j#                         }|j%                  d      } ||      }|dk(  r)t        j&                  |t        j(                               }nHt        j*                  |t-        dd            }t        j&                  |t        j(                               }| D ]  }|j/                  |g       }g }|D ]+  } ||j0                        }||k(  s|j                  |       - |sK|D ]g  } ||j2                        } ||j4                        } ||| fv r/	 |j6                  r|j8                  sIt        j*                  ||j6                        }!t        j&                  |!t        j(                               }"t;        |j8                        }#|"t        |#      z   }$t=        |"|      }%|%j?                  dd      }%|%j@                  |z  }&|&dk7  r||&z
  }'|%t        |'
      z  }%|dk(  r
|%|k  r|%|z  }%|%|z   }(|(|$k  rSd})|j/                  |g       }*|*D ]  \  }+},|%|,k  s|(|+kD  sd}) n |)s||   j                  |%|(d       |(}%|%|z   }(|(|$k  rSj  o i }.|jI                         D ]_  \  }}/|/D ]U  }0|0d   jK                         }1|1|.vr|1|0d   jK                         g d|.|1<   ||.|1   d   vs?|.|1   d   j                  |       W a tM        |.jO                         d       S c c}w c c}w # tB        $ r&}-tE        d|jF                   d|-        Y d}-~-5d}-~-ww xY w)zO
    Returns available slots considering multiple shifts per day per user.
    )
userid__inNr   r  r   r  r   )interviewerid__indatentime__gtedatentime__lter   r$  c                 L    | r!| j                         j                         d d S dS )Nr~   r   )r  lower)d_names    rx   	clean_dayz!get_open_slots.<locals>.clean_day  s%    -3v||~##%bq);;ra  r!  r   r)  )r  r  FT)startendzError processing shift : r  r  )
start_timeend_timeavailable_interviewersr  c                     | d   S )Nr   rR  s    rx   <lambda>z get_open_slots.<locals>.<lambda>3  s
    ao ra  r_  )(r   ro   r   r*   rm   rn   r   r  r   r  r   r(   r   r  r   r  r  r   r3  
make_awareget_current_timezoner5  r	   rK  r*  weekoff1weekoff2r  r'  r;  r7  r2  r  rq   r   r   r  	isoformatsortedr  )2r  num_daysslot_duration_minutesscheduled_call_buffer_minutes	now_naive	now_aware	work_calswork_cal_mapwcend_date_limitrH  iidunavailable_slotsbuffer_timedeltaru  r  r  slots_available_per_interviewerslot_timedeltar  
day_offsettarget_datetarget_day_fulltarget_day_abbrday_min_timestart_of_dayinterviewer_id
all_shiftstodays_shiftswc_dayro  w_off1w_off2naive_shift_startshift_startr  	shift_endcurrent_slot_start	remainderadd_minscurrent_slot_endrt  user_bookingsb_startb_endrw   all_available_slotsslotsslotkey_isos2                                                     rx   r  r    s.    II
 &&2E&FI t$L /99 #**2./
 1!==N"**11	%- %	 2 
 h{  -@@Sb@@ )FG M^^
 00$,,-44j(5KL	M ;N&N3sBw&N#&N'<=N< Ho m
 9*#==CCE%..t4#O4 ?#..888:L
 $++KaDL#..h;;=L
 2 Y	N%))."=J M  - #2;;/_,!((,- ! ' H #5>>2"5>>2"vv&66? ??%++  )1(8(8eoo(V%"*"5"5)8+H+H+J#K "'u{{!3J +ij.I II *-[,)G& *<)C)C a *D *&
 !3 9 9<Q QI A~#89#D*i.II* "Q+=+L*n<*'9N'J$ +i7 %*	(9(=(=nb(Q.; &NGU !3U :$4w$>,0	 %&  );NKRR*<EU V
 .>*+=+N(- +i7]H#Y	)m` 5;;= 
S
U 		SD7m--/G11") $U 5 5 7.00#G,
 -g67OPP#G,-EFMMcR		S
S %,,.4MNN] A 'Od ! 3EHH:RsCDs7   )
Q#=
Q(Q-+C-Q-Q-*Q--	R	6R	R	c                    	 t         j                  j                  |dd      }t        j                  j	                  |       }|j
                  }g }|re|j                  d      D cg c]9  }|j                         j                         rt        |j                               ; }}|j                  |      }||dS c c}w # t        $ r} d }~ww xY w)N	Recruiterr   r   r   r   r   r  r  )all_recruitersselected_recruiters)r$   rm   rn   r   rK  recruiteridsrl   r  isdigitr   rq   )	jdidr   
recruitersr  jd_recruitersrS  r  recruiter_idsrw   s	            rx   getRecruitersDatarZ  7  s    \\((9+UX(Y
__  D ) 
 )..s399;&&( CIIK M  #-"3"3="3"I )#6
 	
  s*   A%C '>B>%C >C 	CCCc                 v   	 t         j                  j                  |       }t               d   d   }| d}dt        fd	} ||j                        \  }}d
|j                  |j                  |fi}|j                  |dddd}	 t        j                  |||d      }	|	j                          |	j                         }
t	        d|
        |
j                  di       j                  d      S # t         j                  $ r t	        d|  d       Y yw xY w# t        $ r}t	        d|  d|        Y d}~yd}~ww xY w)zQ
    Send ResumeFile to doc parser API and return docparser_id if successful
    r   zResumeFile z
 not foundNr   	docparserz/api/add-document-to-queue
file_bytesc                 p    | j                  d      ry| j                  d      ry| j                  d      ryy)Ns   %PDF)pdfzapplication/pdfs   )doczapplication/mswords   PK)docxzGapplication/vnd.openxmlformats-officedocument.wordprocessingml.document)unknownzapplication/octet-stream)r<  )r]  s    rx   detect_file_typez2send_resume_to_docparser.<locals>.detect_file_type`  s9      )+  !45.  /d4ra  r  GSSPEC	Hirelinesr8   )r  filetyper   applicationdocumenttype
   )rG  r1  timeoutzDoc parser API response: r1  docparser_idu4   ⚠️ Failed to call doc parser API for ResumeFile r  )rB   rm   rK  r  r   r   bytesr  r  r   r   r  r   rq   )resumefile_idr  base_urlr   rc  file_ext	mime_typerG  r1  r  	resp_jsonrw   s               rx   send_resume_to_docparserrr  S  sZ    ((,,,> {8$[1HJ0
1C5U 5 +;+B+BCHi 	%%{'>'>	JE
  ((" D
==EbI!!#MMO	))56 }}VR(,,^<<K "" M?*56L  D]OSUVWUXYZs*    C, A'D ,"DD	D8D33D8)Sumc                    t        j                         }|r#t        t        |j	                  d            \  }}n|j
                  |j                  }}t        j                  j                  | ||      }|dk(  r|j                  |      }n|dk(  r|r|j                  |      }|j                  d      j                  t        d            }	|	D 
ci c]  }
|
d   |
d	   xs d
 }}
||j
                  k(  xr ||j                  k(  }|rdnd}|j                  dd
      }|j                  dd
      }|j                  dd
      }|j                  dd
      }|j                  dd
      }|j                  dd
      }|j                  dd
      }d }||||||||rdnd
 |||       |||       |||       |||       |||       |||      |dS c c}
w )Nrr  )r   r9  monthrP  r  r   r  profilescounttotalrx  r   zcurrent monthz
last monthPCSLRJCLr   CSWFc                 0    |dk(  ryt        | |z  dz        S )Nr   r  )round)r  rx  s     rx   percentz+getRecritmentDashboardData.<locals>.percent+  s     A:eems*++ra  r  )	submittedprofiledr   sent_clientrejected_clientselected_clientwaiting_feedbacksubmitted_percentageprofiled_percentagerejected_percentagesent_client_percentageselected_client_percentagerejected_client_percentagewaiting_feedback_percentagecomparison_text)r   ro   mapr   rl   r9  ru  rD   rm   rn   r  r  rs  rK  )r   rt  logged_recruiter_idselected_recruitermonth_valuero   r9  ru  qsactivity_countsrO  activity_mapis_current_monthr  r  r  r   r  r  r  r  r  s                         rx   getRecritmentDashboardDatar    s    ,,.C#{0056ehh		e 
	 	 	'	' 
( 
B KYY1Y2	j	 %7YY0Y1 ii/88/" 9 O # 	NS\.Q.L  	/Ucii/ 
 ,    q)Ia(Ha(H""4+K"&&tQ/O"&&tQ/O#''a0, "**,'0a&x;&x;")+x"@&-ox&H&-ox&H'./?'J* ;s   Gc                 2   	 g }t         j                  j                  | j                        j	                  d      }t        t        j                  j                  d| j                   dd      j	                  d      j                  dd	            }|r|D ]  }t        j                  j                  |j                  
      }|j                  |j                  |j                  |j                  |j                  |j                  r|j                  nd|j                  r|j                  j!                  d      nd|j                  r|j                  nd |j"                  r|j"                  nd |j$                  d	        ||fS # t&        $ r} d }~ww xY w)N)r  z
-createdatz(^|,)z(,|$)r   )recruiterids__regexr   r  r   r   r   r   r  )	r   clientidclientr  r  	startdatestartdate_dbjd_idsr   )rE   rm   rn   r   r  r  r   r  rF   rK  r  r  r   r  r  r  r3  r  r   rq   )rb  workspaces_data
workspacesrec_jds	workspacer  rw   s          rx   getWorkspacesr  D  su   &&--	-ENN|\
w--U9<<.X]B^fi-jss  uA  B  I  I  JN  OV  W  X' 	++y/A/A+B&&#,, &		$kk(0009Y__RMVM`M`!4!4!=!=j!Ifh;D;N;NI$7$7TX1:1A1AY--t'..
( 
	  '' s   FF 	FFFc                     	 g }t         j                  j                  | j                  d      }|r/|D ]*  }|j	                  |j
                  |j                  d       , |S # t        $ r} d }~ww xY w)Nr   r   r   r  )rF   rm   rn   r   r  r   r   rq   )rb  clientscompany_clientsr  rw   s        rx   getCompanyClientsr  e  sw     ..//):M:MUX/Y) "KK    s   AA" "	A1+A,,A1c           
         	 g }t         j                  j                  |      }t        j                  j                  |j                        }|j
                  r#|j
                  D cg c]  }t        |       c}ng }t        j                  j                  |d      j                  d      }|D ]V  }|j                  |j                  |j                  |j                  |j                  |j                  |j                   d       X |j                  |j"                  |j$                  |d}	|	S c c}w # t&        $ r}
 d }
~
ww xY w)Nr   r   )r  r   r  )rV  r   r  r  r  r  )widr  r  jds_data)rE   rm   rK  rF   r  r  r   r   rn   r  r  r   r   r  r  r  r  r   r  rq   )rb  r  assigned_jdsr  r  rL  r  r  recjdworkspace_datarw   s              rx   getWorkspaceDatar  y  s    !%%))S)1	##y'9'9#:?H?O?O)*:*:;#e*;UW//((c(BKKLY  	Exx"--!OO! 	 <<kk (($	
 / <2  s+   A&D6 (D1:B6D6 1D6 6	E?E  Ec                 ^   	 t         j                  j                  | d         }g }g }t        j                  j	                  |j
                        j                  dg      }t        |j                  |      }|D ci c]  }|d   |
 }}t        j                  j	                  |j
                  |j                        j                         }	|D ]  }
|j                  |
j                  i       }t        t        |j                  dd	                  }t        t        |j                  d
d	                  }t        t        |dz  |dz  z               }t        |dz        }t        |dz        }dj                  d |j                  dg       D              }dj                  d |j                  dg       D              }t        j                  j	                  |
j                  | d         j                         }|rt        j                  |j                   d      }|j"                  |	j$                  k(  sj|j'                  |
j                  |
j(                  |
j*                  |
j,                  |
j.                  |
j0                  r|
j0                  nd	|t        |j                  dd	            |||||||d       |
j                   dk(  s|j'                  |
j                  |
j(                  |
j*                  |
j,                  |
j.                  |
j0                  r|
j0                  nd	|t        |j                  dd	            ||||||d        |j3                  d d       d}|j4                  rkt7        j8                  |j4                        }d	}|D ]E  }t;        t=        |j?                                     }|dz  }tA        |      |k(  r||z  }>||dz   z  }G |j                  |jB                  |jD                  |jF                  |||dS c c}w # tH        $ r} d }~ww xY w)NrV  r   r   r  r  r  )r   r   exp_strengthr   skill_strengthg333333?g?r  c              3   <   K   | ]  }|j                           y wr   r  r  rv  s     rx   r  z#getJdProfileData.<locals>.<genexpr>  s     %calln%c   matched_skillsc              3   <   K   | ]  }|j                           y wr   r  r  s     rx   r  z#getJdProfileData.<locals>.<genexpr>  s     )kQ!,,.)kr  not_matched_skills)r  r   r   total_experience)r   r)  ro  r*  r|   profile_strengthr  r  r  r  r  overall_strengthcandidate_statusskill_math_strengthexp_math_strengthr   )r   r)  ro  r*  r|   r  r  r  r  r  r  r  r  r  c                     | d   S )Nr  r  r  s    rx   r  z"getJdProfileData.<locals>.<lambda>  s    A.@,A ra  T)r_  r  r   r  )rV  r   r  r  jd_skills_primaryshortlisted_profilesmatched_profiles)%r   rm   rK  r9   rn   r   r   rY   r   r6   r   r   r  r  r   rT   r   r   r   r  r)  ro  r*  r|   rv  sortr  r  r  r  r  r  r  r   r  r  rq   )rr   rb  r   r  r  profilesjd_profile_datar  	match_mapuser_sourcerT  
match_infor  r  r  r  r  r  r  r8  rV  r   r  r  r  r  rw   s                              rx   getJdProfileDatar    s   e??&&(6*:&;!??))I4G4G)HPP]`\aPb 5X[[J (
 $
	 

 nn++i6I6IQZQ]Q]+^cce 3	G"wzz26JuZ^^NA%FGHL z~~6F'J!KLN"5.3*><RUCU)V#WX"%ns&:"; #L3$6 7 XX%cjnnM]_a>b%ccN!$)k*..QegiBj)k!k!))007::HU[L\0]bbdI155i6F6FK##{'7'77(//$ZZ$+$5$5%,%7%7#*#3#3 '@G@P@PG,<,<VW(4,/
?QST0U,V*8)7-?,<+3.A,=1 & >>S($++$ZZ$+$5$5%,%7%7#*#3#3 '@G@P@PG,<,<VW(4,/
?QST0U,V*8)7-?,<.A,=- I3	j 	"A$O))(*;*;<JJ# 	3( a
z?j0"e+N"edl2N	3 ;;NN____ .#7/
 	
_
r  s9   A<P >PF/P <BP EP P 	P,&P''P,c                 0   	 t         j                  j                  | d   d      j                         }|ri }t        j                  j                  | d         }|j                  r|j                  nd|d<   |j                  r|j                  nd|d<   |j                  |d	<   |j                  r|j                  nd|d
<   | d   |d<   |j                  |d<   t        j                  j                  |j                  |j                        j                         }|r|j                  |d<   t        ||j                  d |j                        }d|v rt         j                  j                  |d         }|j                  |_        |j%                          |d   dk(  r#t'        |j                  dd|j                         n*|d   dk(  r"t'        |j                  dd|j                         d|_        |j%                          |S y # t*        $ r} d }~ww xY w)NrV  r   )r   r  r  r   r   r)  r*  r|   r&  r  r1  )r   r   r-  r2  r   r   r  r  r   r  r  r   )r'   rm   rn   r   r9   rK  r)  r*  r|   r&  r+  r6   r   r   r   rX   r   r  rp   rQ   r   rq   )	rr   rb  r  candidate_objrT  r   r8  new_candidaterw   s	            rx   shortlistProfileServicer    s   % ((//hv6FQ/OTTVMoo))Xl-C)DG>E>O>O):):UWM+&<C<L<L(8(8RTM*%%,]]M'"8?gnnBM(#"*6"2M$*7*?*?M,'^^**),,I\I\*]bbdF/5{{m,&}Y5H5Hill[I	) ) 1 1 5 5=9Q 5 R*1**'""$[)S0(D9I),,W{+s2(D9KILLY GNLLN? B  s   HH 	HHHc                    	 t         j                  j                  |       }|j                  }|j                  }|j
                  }t        j                  j                  |       j                         }|s>t        j                  j                  d      j                         }t        j                  }|j                  }i |rv|j                  rj|j                  j                  d      }|D ]J  }	d|	v s|	j                  dd      \  }
}|
j                         }
|j                         }|s@|dk7  sF||
<   L g d}rj                         }n|}t               d	   d
    ddddj                  fd|D               d}t         j                  j                  |       j                         }|st               d	   d
    d}t#        j$                  |d      }|j'                         }|j                  d      dk7  ry |d   d   }|j)                  d|      }i |d   ||r|j*                  nd|r!|j                  rt-        |j                        ndd|||dS |j.                  j)                  d|      }|j0                  |j2                  |j4                  |j6                  ||j8                  |j:                  |j<                  |j>                  xs d|j@                  xs d|r|j*                  nd|r!|j                  rt-        |j                        ndd|||dS # tB        $ r}tE        d|       Y d }~y d }~ww xY w)Nr   r   r   r  r  r   #)r|  r}  r  r  r~  r   r   z#/static/lib/img/social_links_logos/z
            <a style="text-decoration:none; margin:0 5px;" href="{url}" target="_blank">
                <img style="width:34px; padding:3px;" src="{icon}" alt="{platform}" />
            </a>
        z3
        <div id="previewSocialIcons">
            r   c              3   p   K   | ]-  }j                  j                  |d        | d|       / yw)r  z.png)r   iconplatformN)r4  rK  )r  r  footer_iconr  r  s     rx   r  z5get_default_email_template_service.<locals>.<genexpr>i  sL        ""$((37&<z6% # s   36z
        </div>
        )r   z/api/get-default-emailri  )rj  r  r1  
email_bodyz[footer_div])r   r   r  )r  r&  r   company_websiter   )r   template_namer  email_subjectr  template_headingsender_emailsender_labelemail_attachmentemail_attachment_namer&  r   r  r   zEmail template service error:)#r#   rm   rK  r   r  r|   r3   rn   r^  r   r   rl   r  r  r   r  r0   r   r   r   r2  r   rk   r  r   r  r  r  r  r  r  r  r  rq   r   )r   r   r   r  r   r&  brandinglogobranding_logor  r  r  r   all_platformsplatforms_to_showfooter_div_html
email_temp	acert_urlresr1  raw_email_bodyr  rw   r  r  r  s                         @@@rx   "get_default_email_template_servicer  0  sT   }//%%%4||!// ##**Z*@FFH''...;AACH!))L && ,,((..s3E 5$;$(JJsA$6MHc'~~/H))+Cscz14X.5 T , 1 1 3 - "H-g677Z[
WW  !2  	 $++22j2IOOQ
 $;x09::PQI--	26C88:Dxx%*!&\,7N'//PJv,(3;x//8@XEUEUs8#3#34[]$0
 !-#2!.   **22>?S
 --'55$//'55$ * ; ;&33&33 * ; ; Ar%/%E%E%K/78++R4<AQAQ3x//0WY , ).*'
 	
,  -q1s9   C2L, 87L, 0L, 6CL, 
AL, (CL, ,	M5MM)
monthrangec                 h   	 t        j                         }|r#t        t        |j	                  d            \  }}n|j
                  |j                  }}||j
                  k(  r ||j                  k(  r|j                         }nt        ||      d   }	t        |||	      }|t        d      z
  }
t        d      D cg c]  }|
t        |      z    }}t        j                  j                  |       }|
j
                  |j
                  k(  rW|
j                  |j                  k(  r>|j                  |
j
                  |
j                  |
j                  |j                        }nh|j                  t        |
j
                  |
j                  |
j                        t        |j
                  |j                  |j                  	      z        }|d
k(  r|j                  |      }n|dk(  r|r|j                  |      }|j!                  dddd      j#                  t%        d            }|D ci c]  }|j'                  d      dddddddd }}dddddddd}|D ]J  }|d    d|d   dd|d   d}||v s|j)                  |d         }|s4||   |xx   |d   xs dz  cc<   L |D cg c]  }|j'                  d        c}g g g g g g g d!}|D ]:  }|j'                  d      }|D ]"  }|d"k7  s	||   j+                  ||   |          $ < d#|iS c c}w c c}w c c}w # t,        $ r} d }~ww xY w)$Nrr  r      r  r   r   )r9  ru  day__gteday__lte)r9  ru  r  )r9  ru  r  rP  r  r   r9  ru  r-  r  rv  rw  rJ  r   )r  r  r   r  r  r  r  r  r  r   r  r  r  r  )ry  rz  r{  r|  r   r}  r~  02drx  r  )r  r  r  r   r  r  r  r  r  r  )r   ro   r  r   rl   r9  ru  r   r  r   r  rD   rm   rn   r-  r   r  r  rs  r3  rK  r  rq   )r   rt  r  r  r  ro   r9  ru  end_datelast_dayr  r_  r  r  dr  r  rO  r  fieldr  r_  krw   s                           rx   dashBoardDataServicer    s   tllnc;#4#4S#9:KD%((CII%D 388 2xxzH!$.q1HD%2H	r 22
 2Y
 **

 
 $$++j+A ??hmm+
0@0@HNN0R__ &&#!	  B #$**'^^ !"..%\\
B #"56B*$);"45B YYvw~>GGo& H 
  
  JJz" #$#$$%% 
 
 ##$
  	CCf+aGS'93u:c:JKH8#$((^)<=X&u-W1BB-	C 7AAajj,A!! "	

  	;A**Z(C ;<qM((#q)9:;	; z
 	
}
Z
B B(  sU   B8L" :LEL" ,!L*L" 8L" L" ,L,L" 1!L" L" "	L1+L,,L1c                     	 t         j                  j                  | dd      }t         j                  j                  | |      j                         }|r|j                  nd}||fS # t
        $ r} d }~ww xY w)Nr  r   rQ  )r   r|   r   )r$   rm   rn   r^  r   rq   )r   r  hiring_managersuser_objcurrent_user_idrw   s         rx   getHiringManagersDatar  0  sq    ,,--	GW_b-c<<&&)&LRRT)1(++q.. s   A$A' '	A60A11A6c                     	 g }t         j                  j                  |       j                  d      }|D ]  }t	        |      }|j                  |         d|iS # t        $ r} d }~ww xY w)Nr   r  r  )rF   rm   rn   r  rS   r  rq   )r   clientDataLst	clientLstr   r
  rw   s         rx   companyClientLstr  >  su    	NN))I)>GGN	 	+D$T*H  *	+ && s   AA 	A)#A$$A)c                 
   	 |j                  d      }|j                  d      }|dk(  r@t        || t        j                         d      }|j	                          d|j
                  dS |dk(  r|j                  d	      }t        d
|       t        j                  j                  ||       j                         }|sddiS ||_
        |j	                          d|j
                  |j                  dS y # t        $ r}|d }~ww xY w)NrW  r  rX  r   )r   r   	createdatr   r]  )rW  r  r^  clientId	client_idr  errorzClient not foundupdated)rW  r  r   )rK  rF   r   ro   rp   r   r   rm   rn   r   r   rq   )r   rb  rW  client_namer  r  rw   s          rx   addNewClientServicer  N  s   +g&mmJ/ H $",,.	F KKM #"II  H!j1I+i(^^**$ +  df 
 !344%FKKKM #"II  *  s%   A&C2 )AC2  0C2 2	D;C==Dc                     	 |d   }t         j                  j                  |      j                         }|r|d   |_        |j                          y y # t        $ r} d }~ww xY wrf  )rF   rm   rn   r   r   rp   rq   rg  s        rx   changeClientstatusServicer    sc    8$>>((F(388:'1HOMMO   rj  c                     	 t               d   d   }| d}d| d   i}t        j                  ||      }|j                          |j	                         }|S # t        $ r} d }~ww xY w)Nr   r\  z/api/request-prefilldoc_parser_id)r1  )r   r   r   r  r   r   rq   )rr   rn  r   r1  r  rq  rw   s          rx   getDocParsedDatar
    s|    ;x(5
./ Xo6
 ==40!!#MMO	  s   AA 	A& A!!A&)r   CaseWhenIntegerFieldc                    | d   }t        j                         }| j                  d      }| j                  d      }|r$t        j                  |d      j                         n|j                  d      }|r$t        j                  |d      j                         n|}t        j                  |t        j                        }t        j                  |t        j                        }t        j                  j                  |      D 	ci c]8  }	|	j                  |	j                  |	j                  xs dj!                         d	: }
}	t"        j                  j                  |||f
      j%                  dd      j'                  t)        t+        t-        dd      t/                           t)        t+        t-        dd      t/                           t)        t+        t-        dd      t/                           t)        t+        t-        dd      t/                           t)        t+        t-        dd      t/                           t)        t+        t-        dd      t/                           t)        t+        t-        dd      t/                           t)        t+        t-        dd      t/                                 }t1        |j3                  dd            }i }t"        j                  j                  |      j5                  dd      j%                  dd      }|D ]4  }|d   }|
j                  |      }|s|d   dk(  s%|d   |vs-|||d   <   6 t6        j                  j                  |      D ci c]  }|j                  |j8                   }}t:        j                  j                  |      D ci c]%  }|j<                  r|j<                  |j                  ' }}t?        t@              }tB        j                  j                  |      j%                  dd      D ]  }||d      jE                  |d           |j%                         D ch c]  }|D ]  }|  }}}tF        j                  j                  |      j%                  d d!      D ci c]  }|d    |d!    }}tH        j                  j                  |||fd"d#g$      j%                  d d%      }t?        tJ              }t?        d&       }|D ]  }|d    } |j                  |d%         }!|j                  |       }"|"s0d }#|!r|
j                  |!      }$|$r|$d   dk(  r|!}#n|j                  |"      }#|#sf|
|#   d'   }%||%xx   dz  cc<   |j                  |"g       D ]&  }&|j                  |&      }'|'s||%   |'xx   dz  cc<   (  t?        d(       }(t?        d)       })|D ]  }|d   }|
j                  |      }|s|d   dk(  r|d'   }*n|j                  |d         }#|#sA|
|#   d'   }*|D ]  }+|+d*vs|(|*   |+xx   ||+   z  cc<    |j                  |d   g       D ]8  }&|j                  |&      }'|'s|D ]  }+|+d*vs|)|*   |'   |+xx   ||+   z  cc<    :  |jM                         D ]  \  }*},|(|*   d+xx   |,z  cc<    i }-tA        |(      tA        |)      z  D ]x  }*g }.|.jO                  d,di|(|*          |)j                  |*i       jM                         D ]4  \  }/}0d,|/i|0}1||*   j                  |/d-      |1d+<   |.jO                  |1       6 |.|-|*<   z |jQ                  d      |jQ                  d      |-d.S c c}	w c c}w c c}w c c}}w c c}w )/NrI  	from_dateto_daterJ  r   r-  r   r   )r   r   )r   datentime__ranger  r  ry  r  thenoutput_fieldr  CIr  r|  CFr{  r}  )r  screenedclient_interviewinternal_interviewr  waitingr   selectedTr   r  r   	RECRUITERprofileid__inr   r  r   r   r   r   )r   r  r  r  c                       t        t              S r   r   r   r  ra  rx   r  z.RecruitersPerformanceService.<locals>.<lambda>  s    {3/? ra  r   c                       t        t              S r   r"  r  ra  rx   r  z.RecruitersPerformanceService.<locals>.<lambda>>  s    ;s+; ra  c                      t        d       S )Nc                       t        t              S r   r"  r  ra  rx   r  z@RecruitersPerformanceService.<locals>.<lambda>.<locals>.<lambda>?  s    K<L ra  r
   r  ra  rx   r  z.RecruitersPerformanceService.<locals>.<lambda>?  s    4L(M ra  )r  r  sourcedr  r   r  r  r1  ))r   r1  rK  r   r4  r2  r5  r	   r6  r7  r$   rm   rn   r   r   r   upperr:   r  r  r   r  r  r  r  r   r  r6   r   r9   r  r   r:  r   r=  r   r8   r   r  r  r3  )2rr   rI  r1  from_date_strto_date_strr  r  from_dtto_dtr  r  r  profile_idsprofile_recruiter_mappa_owner_qsr  uidr   rv  source_user_mappresume_profile_mapprofile_job_mapcjidsr   job_idsjjobdesc_map	resume_qsresume_sourced_maprecruiter_jd_sourced	resume_idsource_user_idr  recruiter_idsource_userrecruiter_namer(  rT  recruiter_totalsrecruiter_jds	recruiterr  cntfinalrowsr  countsrO  s2                                                     rx   RecruitersPerformanceServicerI    s   
5/CJJLELL-M,,y)K  	-499;#mmm2   	+z2779! 
 y$((3GWdhh/E $$s$3
 	 	
FFVV\r((*
 	
H  		#%0@	A		,	4$Q ?ln]^4$Q ?ln]^"4$Q(GVbVd#ef$T$Dq*IXdXf%ghD4a!@|~^_$tA>\^\]4$Q ?ln]^4$Q ?ln]^ 
 	

	   r~~k~=>K
  		#		+|	,	^	,	   8||C <;&1[>AV+V47!!K.18 &&&5 	
ahhO  ''#'6:: 	


ADD  "#&O	k	*	W	%8
 	+'++AgJ78  /557Ht4HCsHsHGH ''w'7>>tWM 	
$7K  		%u-Sz 
 


 
j	!  %S)&'?@ DdG	(,,Qz];'++I6
",,~6K{62kA-044Z@L!,/7>*a/*%))*b9 	DF"v.H$^4X>!C>	D1D@ ##;< MNM B||C <;&VI044Q{^DL .v6I 	7A55 +A.!A$6.	7 &))!K."= 	BF"v.H B99!),X6q9QqTA9B		B%B6 -224 6	3#I.#5.6 E)*S-??  	"
y)
 	
 (++Ir:@@B 	JBbC 2)<@@QGC	NKK	  i! & ''
3##J/ yh" Is   =]5 ]:*]?^$^
c                    	 g }t         j                  j                  d      j                  d      }|D ]  }t        j                  j                  |j
                  | j                        j                         }d}|r|j                  dk(  rdnd}|j                  |j
                  |j                  |j                  |d        |S # t        $ r} d }~ww xY w)Nr   r  r   
jobboardidr   r   )r   r   r  r   )rG   rm   rn   r  rH   r   r   r   r   r  r   	logo_pathrq   )rb  
job_boardsactive_job_boards	job_boardjob_board_credentialsr   rw   s          rx   getJobboardsrR    s    
$,,3333?HHP* 	I$6$>$>$E$EQZQ]Q]hqh{h{$E$|  %B  %B  %D!F$ 5 < < C\\!!++ 	 	  s   CC
 
	CCCc                    	 t         j                  j                  | d   |      j                         }|r:|j                  |j
                  |j                  |j                  |j                  dS ddddddS # t        $ r} d }~ww xY w)Nzjob-board-idrK  )api_keyr   r[  r   r   r   r   )rT  r   r[  r   
is_enabled)
rH   rm   rn   r   apikeyr   r[  r   r   rq   )rr   r   rQ  rw   s       rx   jobBoardConfigServicerW    s     2 : : A AXVdMepy A z    !B /66099099099.55  
 	
  s   A-A8 0A8 8	BBBc                    	 g }t         j                  j                  | j                  d      }|D ]  }t        j                  j                  |j                        }t        j                  j                  | j                  |d|j                        j                         }|j                  |j                  |j                  |j                  |rdndd        |S # t        $ r} d }~ww xY w)Nr   r  r   )r   r  r   rL  r   r   )r   r   r  selected_jb)rH   rm   rn   r   rG   rK  rL  rI   r   r   r  r   rM  rq   )rb  rL  rN  rQ  job_board_credentialrP  jd_jobboardrw   s           rx   getJDJobboardsr\    s    
 2 : : A AIL_L_gj A k$9 	  ((,,0D0O0O,PI%--44y?R?R]bjm  zC  zF  zF4  G  L  L  NK\\!!++&1ss	 	  s   CC 	C.(C))C.c           
      	   	 t         j                  j                  | d      }g }dddd}|D ]O  }|dxx   dz  cc<   |dxx   |j                  r|j                  ndz  cc<   |j	                  |j
                         Q g d}t        j                  j                  | ||	      j                         |d
<   ddddd}t        j                  j                  | d      j                         }|dxx   |z  cc<   t        j                  j                  | d      }|D ]V  }	|dxx   dz  cc<   |	j                  |	j                  dkD  r|dxx   dz  cc<   :|	j                  dk  sJ|dxx   dz  cc<   X ddddd}
t               }t        j                  j                  | |      }|D ]  }|j                  r|j                  |j                         |j                  dk(  r|j                   dk(  r|
dxx   dz  cc<   V|j                  dk(  r|j                   dk(  r|
dxx   dz  cc<   |j                  dk(  s|j                   dk(  s|
dxx   dz  cc<    t#        |      |
d<   t        j                  j                  | |d      }i }|D ]?  }|j$                  }|j&                  }||vrt               ||<   ||   j                  |       A t         j                  j                  |      D ci c]  }|j
                  |j(                   }}dd g}i }|j+                         D ][  \  }}t,        j                  j                  |!      j/                  |"      j                         }|j1                  |d#      |d$||<   ] t3        j4                         }t7        d%d&d&      D cg c]  }|t9        |'      z
   }}g d(}|D ci c]#  }|j;                  d)      |D ci c]  }|d c}% }}}t=               } |D ]1  }| t=        |j>                  |j@                  |jB                  *      z  } 3 tD        j                  j                  | |+      j                  |       jG                  d,d-d.d/      jI                  tK        d0      1      }!|!D ]0  }"|"d.    d2|"d-   d3d2|"d,   d3}#|"d/   }|#|v s"|"d4   xs d||#   |<   2 |||
||d5}$|$S c c}w c c}w c c}w c c}}w # tN        $ r}% d }%~%ww xY w)6Nr   r  r   )
active_jdstotal_positionscandidates_inprocessr^  r   r_  )r   r   r   )r   r  r  r`  )
to_profileactive_profilesstrenght_above_50strenght_below_50r   ra  r   rb  2   rc  rd  )shortlistedr  r  r  r  r   r   r  r   r  r  rf  F)r   r  profileid__isnullr  ry  E1r  )activitycode__inr   )jd_nameactivity_countr  r.  r  )ry  r  r  ISr|  rz  r{  rJ  )r9  ru  r-  )r   ri  r-  ru  r9  r  rv  )total_profilesrr  r  rm  )	jobs_dataprofiles_datapipeline_datajd_activity_dataprofile_activity_daywise)(r   rm   rn   r  r  r   r   r  r8   r9   rv  r:  r!   r2  r=  r   r   r  r   r  r   r  r:   r   rK  r   r1  r  r   r3  r   r9  ru  r-  rD   r  r  rs  r   rq   )&r   active_job_descr  rn  	active_jdinprocess_statusesro  pending_resumesrb  active_profilerp  shortlisted_candidatesr   regjd_profile_candidatesjd_profile_mapcandrL  r  r  jd_name_mapEXCLUDED_ACTIVITY_CODESrq  r-  rk  r1  r_  last_15_daysACTIVITY_CODESr  r   rr  date_filteranalysis_qsrO  r  r  rw   s&                                         rx   getOverallDashboardCountsr    sw   e!//00:S0Q
  $%
	 ) 	(Il#q(#'(9CVCVI,?,?\]](MM),,'		( -,5,=,=,D,D ) -E -
 %'	 	()  !"!"	
 !..//*C/PVVXl#6#!//00:S0Q- 	<N+,1,&&2!**R/!"56!;6#,,2!"56!;6	< 	
 "%$,,33jSY3Z  	0C&**3??;}}#

c(9k*a/*#%#***;h'1,'#%#***;k*a/*	0 (++A'Bm$ !* 1 1 8 8:X^qv 8 w) 	2DJJEJN*(+u%5!%%j1	2 oo,,F,;
 EE288O
 

 $(+"0"6"6"8 	E;,44;;) < g!8  eg	  '??5"5"0'U#	 

;@R;LMa	q 11MMC "$
 JJz"$HT1W$HH$
  $

 c 	DA1!&&QUUCCK	D &--44 + 5 
 &
ff7FN

(/  
 	  	VCf+aGS'93u:c:JKH~&D 33;>?O;P;UTU(248	V "))/'?
 A
0 N
 %I$
T  s|   D6S$ 9,S$ &CS$ ;S$ B'S$ 2SBS$ )S?S$ 
S#
S-S2CS$ 4S$ 
S$ SS$ $	S3-S..S3c                 Z   t        d       | d   }t        j                         }| j                  d      }| j                  d      }|r$t	        j
                  |d      j                         n|j                  d      }|r$t	        j
                  |d      j                         n|}t        d|d	|       t        j                  j                  |
      D ci c]  }|j                  |j                   }}t        t        j                  j                  |dd      j                  dd            }	t        d|	       |	D 
ch c]  }
|
d   	 }}
t        j                  j                  ||||f      D ci c]  }|j                  |j                    }}t        d|       |	D 
ch c]  }
|
d   	 }}
t        d|       t"        j                  j                  ||      D ci c]'  }|j                  |j$                  j'                         ) }}t        d|       t(        j                  j                  ||      j                  d      j+                  t-        t/        t1        dd      t3                           t-        t/        t1        dd      t3                           t-        t/        t1        dd      t3                           t-        t/        t1        dd      t3                           t-        t/        t1        dd      t3                           t-        t/        t1        dd      t3                           t-        t/        t1        dd      t3                           t-        t/        t1        dd      t3                                  }|D ci c]  }|d   |
 }}t        d!|       t5        t              }t5        t              }|	D ]  }
||
d      j7                  |
d           t5        d"       }t5        d#       }|j9                         D ]  \  }}|j                  |      }|j                  |      }|s,|j                  |i       }t;        |      }|D ]k  }|j                  |d$      }||   |   d%xx   dz  cc<   ||   d%xx   dz  cc<   |s<||   |   d&xx   |j                  d&d'      |z  z  cc<   ||   |   d(xx   |j                  d(d'      |z  z  cc<   ||   |   d)xx   |j                  d)d'      |z  z  cc<   ||   |   d*xx   |j                  d*d'      |z  z  cc<   ||   |   d+xx   |j                  d+d'      |z  z  cc<   ||   |   d,xx   |j                  d,d'      |z  z  cc<   ||   |   d-xx   |j                  d-d'      |z  z  cc<   ||   |   d.xx   |j                  d.d'      |z  z  cc<   n ||   d&xx   |j                  d&d'      z  cc<   ||   d(xx   |j                  d(d'      z  cc<   ||   d)xx   |j                  d)d'      z  cc<   ||   d*xx   |j                  d*d'      z  cc<   ||   d+xx   |j                  d+d'      z  cc<   ||   d,xx   |j                  d,d'      z  cc<   ||   d-xx   |j                  d-d'      z  cc<   ||   d.xx   |j                  d.d'      z  cc<    |j9                         D ]P  \  } }!||    j7                  d/d0i|!       ||    j9                         D ]  \  }"}#||    j7                  d/|"i|#        R t        d1t=        |             t        d2       |j?                  d      |j?                  d      t=        |      d3S c c}w c c}
w c c}w c c}
w c c}w c c}w )4Nz$===== SOURCE PERFORMANCE START =====rI  r  r  rJ  r   r  zDATE RANGE:u   →r   F)r   rg  jobid__isnullr  r   zCANDIDATE QS:)r   r  dateofcreation__rangeu   PROFILE → SOURCE MAP:r7  )r   r  zJOB TITLE MAP:)r   r   ry  r  r  r  r  r  r|  r  r{  r}  )r  r  r  r  r  r  r   r  zACTIVITY MAP:c            
          dddddddddd	S Nr   )	r&  r  r  r  r  r  r  r   r  r  r  ra  rx   r  z*SourcePerformanceService.<locals>.<lambda>  s$    
) ra  c                      t        d       S )Nc            
          dddddddddd	S r  r  r  ra  rx   r  z<SourcePerformanceService.<locals>.<lambda>.<locals>.<lambda>  s$    
7 ra  r
   r  ra  rx   r  z*SourcePerformanceService.<locals>.<lambda>  s    + 
/ 
# ra  z
Unknown JDr&  r  r   r  r  r  r  r  r   r  r  r   zFINAL OUTPUT:z"===== SOURCE PERFORMANCE END =====r'  ) r   r   r1  rK  r   r4  r2  r6   rm   rn   r   r   r  r   r  r9   r  r   r   r  r:   r  r   r  r  r  r   r  r  r  rt  r3  )$rr   rI  r1  r)  r*  r  r  rv  
source_mapcandidate_qsr5  candidate_profile_idsr2  profile_source_mapr7  r8  job_title_mapactivity_qsar  rF  profile_jobssource_totalsjd_rowsr  jobs	source_idr  activity	job_countr(  rT  r   totalsr  rH  s$                                       rx   SourcePerformanceServicer  w  s   	
01
5/CJJLE LL-M,,y)K  	-499;#mmm2   	+z2779! 
 
-E73
 &&&5 	
aggJ  	#e	L	W	%L 
/<(5ABQ{^BB
 ''(	7?S ( 
 	
ajj  

#%78 $00aqz0G0	)G ''#g'F 	
aggmmoM 
 

M* 		#-B	C			4$Q ?ln]^4$Q ?ln]^$T$Dq*IXdXf%gh"4$Q(GVbVd#efD4a!@|~^_$tA>\^\]4$Q ?ln]^4$Q ?ln]^ 
 	

	   0;;!AkNA%;L;	/<( E t$L 8Q{^$++AgJ78   
! 
M  
 
G )..0 $O
D&**:6	!~~i0##J3I	 	hF$((>H L!(+I6!;6,'	2a72 %h/
;x||JXY?Z^g?gg;%h/
;x||JXY?Z^g?gg;%h/0DEVjlmInr{I{{E%h/<[Z[@\`i@ii<%h/0BCx||TfhiGjnwGwwC%h/	:hll9VW>X\e>ee:%h/
;x||JXY?Z^g?gg;%h/
;x||JXY?Z^g?gg;!	h& 	l#J/8<<
A3NN/l#J/8<<
A3NN/l#$89X\\J^`a=bb9l#K0HLLa4PP0l#$678<<HZ\];^^7l#I.(,,y!2LL.l#J/8<<
A3NN/l#J/8<<
A3NN/I$ON (--/ f"

 	 "&///1 	JB&M  b"" 	 
/4;'	
./ ''
3##J/U i C 10 <s$   ^^6^&^#,^# ^(c                 B   	 t         j                  j                  |       }t        j                  j	                  d      }t        |dd       }d }|s.|j	                  d      j                         }|r|j                  }g }|D ]  }d}|r|j                  |k(  rd}n|s|r|j                  |k(  rd}|j                  r t        j                   d|j                   }	nd	}	|j                  |j                  |j                  |	|d
        |S # t        $ r}
 d }
~
ww xY w)Nr   r   r  r  r   r  r   zbranded_resumes/r   )r   r   	thumbnailr  )r#   rm   rK  rJ   rn   getattrr^  r   r  rW   	MEDIA_URLr  r   rq   )r   r   resumetemplatescompany_template_iddefault_template_idr  templates_datatemplater  thumbnail_urlrw   s              rx   getResumeTemplatesr  (  s/   )//%%%3(0077s7C%g/A4H"".55s5KQQS&6&9&9#' 	HH"x{{6I'I(-@X[[TgEg!!#+#5#5"66FxGYGYFZ [ "!!kk *$	# 	,  s   DD 	DDDc                    	 t         j                  j                  | d      j                         }|sy t        j                  j                  |j                        }t        j                  j                  |j                        }|r|j                  nd}t        |d      xs d}g }|j                  rg	 t        j                  |j                        }|D ]A  }t        |t              st        |      dkD  s#|j!                  |j#                                C 	 |j&                  |j(                  |j*                  |j,                  xs dj/                         |j0                  |j2                  |j4                  |j6                  |j8                  |j:                  |j<                  t?        |j&                        |j@                  ||d	}	|	S # t$        $ r g }Y w xY w# t$        $ r}
 d }
~
ww xY w)
Nr   )r   r   r   r   r   --brand-primary-color#2563ebr   )r   r   r   r  r  r  r  rg   r  jobcoder   enc_companyidlogo_urlprimary_colorr  )!r   rm   rn   r   r#   rK  r   r3   r   extract_css_variabler  r  r  r<  rt  r  r  r  rq   r   r   r   r  r  r  r  r  rg   r  r  r   r\   r   )r   jobdescr   r&  branding_cssr  r  skillset_datar  jobdesc_datarw   s              rx   getJobDescApplyPageDatar  U  s   0//((Cs(;@@B//%%):):%;##'''2C2C'D+3x'',\;RS`W` ! # 0 01A1A B) 8D!$-#d)a-#**499;78 MM<<#//52<<>^^^^ ++''))oo"<<)'**5'') 
$ +  ! !.  sN   1G BG 74G ,G ;!G B1G GG GG 	G.(G))G.c                     | sy t        j                  |       d}t        j                  ||       }|r|j                  d      j	                         S d S )Nz\s*:\s*([^;]+);r   )r^  escapesearchgroupr  )css_textvar_namer`  r_  s       rx   r  r    sL    ))H%&o6GIIgx(E%*5;;q>!44ra  c                    	 t         j                  j                  |       j                         }|sy g }t        j                  j                  | dd      }|D ]  }|j                  |j                  t        |j                        |j                  |j                  |j                  |j                  |j                  |j                  |j                  r|j                  nd d	        t        j                  j!                  |       }|r|j"                  nd}t%        |d      xs d	}|j                  |j&                  ||j(                  |d
}|S # t*        $ r}	 d }	~	ww xY w)Nr   r   r   )r   r   
webpublish)	r   enc_idr   rg   r  r  r  r  r  r   r   r  r  )r   r   r  r  r  )r#   rm   rn   r   r   r  r   r\   r   rg   r  r  r  r  r  r3   rK  r   r  r   r   rq   )
rI  r   r  r^  r  r&  r  r  careers_datarw   s
             rx   getCompanyCareersr    s8   )//((C(0557__++cPS+T
 	BOOUU&ruu-KK\\ mm))))(*

"**
 
	 ##''#'6+3x'',\;RS`W` #LL)'' 
  s   0E DE 	E!EE!)CalculateProfileScoringc                    g }t        | fd      } t        t        |       dz
        D ]Q  }| |   j                  |      }| |dz      j                        }|s1|s4||kD  s:|j	                  ||||z
  d       S |rS| rQ| d   j                  |      }t        j                         j                  }	|r|	|kD  r|j	                  ||	|	|z
  d       |S )Nc                 .    | j                        xs dS )Nr   )rK  )rR  	start_keys    rx   r  z calculate_gaps.<locals>.<lambda>  s    AEE),<,A ra  r   r   fromtoyearsr.  )r&  r  r  rK  r  r   ro   r9  )
recordsr  end_keyinclude_current_gapgapsr_  current_end
next_startlast_endcurrent_years
    `        rx   calculate_gapsr    s    DW"ABG3w<!#$ 	ajnnW-QU^''	2
:*{*BKK# #k1 	 w2;??7+||~**x/KK "%0  Kra  c                 4   | r|sy | D cg c]%  }|j                  d      s|j                  d      ' }}|D cg c]%  }|j                  d      s|j                  d      ' }}|r|sy t        |      }t        |      }||kD  r	||||z
  dS y c c}w c c}w )Nr  r  r  )rK  r7  r6  )r  r  rw   edu_end_yearsexp_start_yearslast_edu_yearfirst_job_years          rx   calculate_transition_gapr    s    J.7K155?QUU8_KMK2<RQj@QquuZ(ROR&M)N%! #m3
 	
 ! LRs   BBBBc                 .   t         j                  j                  |       j                         j	                         }|si S |j                  d      |j                  dd      j                         |j                  dd      |j                  dd      j                         |j                  dd      d}t        t        j                  j                  | 	      j                  d
      j                  dd
d            }|D cg c];  }|j                  d      r(|d   j                         d   j                         dv r|= }}t        t        j                  j                  | 	      j                  d
      j                  ddd
d            }t        |d      }t        |d      }t        ||      }t               }	|	j!                  |       }
t"        j                  j                  | 	      j%                  dd      j	                         }t&        j                  j                  | 	      j%                  dd      }t)               }|D ]H  }|s|j+                  d      D ]/  }|j-                  |j                         j/                                1 J d }|r`|j+                  d      D cg c]  }|j                          }}|D cg c]  }|j/                         |vr| }}|rdj1                  |      }t        t2        j                  j                  | 	      j                  d            }t5        |      }|	j7                  |      }|dk  rd}n|dk  rd}n|dk  rd}n
|dk  rd}nd}||k\  rd }nd!}t        t8        j                  j                  | 	      j                  d"            }t5        |      }|dk  rd}n|dk  rd}n|dk  rd}n
|dk  rd}nd}||k\  rd#}nd$}|j;                  ||||||||
||||d%       |S c c}w c c}w c c}w )&Nr   r   r)  r   ro  r*  r   )r   r)  ro  r*  r   r~  r  r  r  r   )BMr   r  r   F)r  Tr  r   r  r  r  ra   r         r~      r  zActive LearnerzNot an Active Learnerr  zActive AchieverzNot an Active Achiever)r  r  education_gapsexperience_gapstransition_gapunused_full_stringlearning_statusscore_resultcertificate_countexpected_certificatesexperience_yearsaward_status)r9   rm   rn   r  r^  rK  r  r  r;   r  r  r(  r<   r  r  r  score_profiler>   r   r=   r:  rl   r=  r  r  r@   r  calculate_experience_yearsr?   r^  )r  rT  r1  r  rw   r  r  r  r  scorerr  primary_recordproject_recordsused_skill_namesrecordr  r  rv  primary_listunused_listr  
cert_count	exp_yearsexpectedr  r  award_countexpected_awardsr  s                                rx    getResume_AnalysisDetailsServicer    s1   oo$$$,335;;=G	 kk$[[b1<<>kk,3KK
B/::<Wb)D   	#		*		*h	/	I 55?q{00215;;=P 	
I  !!	#		*		
Iz8	<	J $!N
 % O
 .N %&F'',L #**11 2 k/k-eeg  &--44 5 k,Tk*  u! <c* < $$U[[]%8%8%:;<<
 +9+?+?+DEa	EE  ,
{{}$44 
 

 !$+!6 ##	#		
	L \"J 11*=I A~	a	a	a X*1 	#			F f+K A~	a	a	a o%(/ 	KK (*(0*$'!)%$   KSh F
s   A P,P	P)r   r   )r~   r#  r#  )NNNN)r  r  F)r  r   r   r  r  r  r	   r  ffmpegr^  pandasr=  django.db.modelsr   r   r   r   r   r   collectionsr   django.utilsr   django.shortcutsr   urllib.parser   r   rest_framework.authtoken.modelsr   	xhtml2pdfr   openpyxlr   openpyxl.stylesr   r   	constantsr   hirelines.metadatar   hirelines.settingsr   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/   r0   r1   r2   r3   r4   r5   r6   r7   r8   r9   r:   r;   r<   r=   r>   r?   r@   rA   rB   rC   rD   rE   rF   rG   rH   rI   rJ   rK   app_api.functions.databaserL   rM   rN   rO   rP   rQ   app_api.functions.mailingrR   django.forms.modelsrS   rT   rU   excel_mappingrV   r   rW   databaserX   jd_profile_matchingrY   voice_comparisionrZ   r[   enc_decr\   ry   r   r   r   r   r  r   r"  rC  rQ  rW  re  r|  r  r   r  r  r  r  r  r  r  r  r  r  rx  r  r  r  r  r  r  r  r  r  r3  r  rK  rU  rd  ri  ro  rz  r  r  r  r  r  r  r  r+  r\  rB  rd  rh  rm  r  r  r  r  r  r  r  r	  r  r  rZ  rr  rs  r  r  r  r  r  r  r  calendarr  r  r  r  r  r  r
  r  r  r  rI  rR  rW  r\  r  r  r  r  r  r  "app_api.functions.profile_strengthr  r  r  r  r  ra  rx   <module>r     s0   	     
    	  * * # 4 4  # " % * 1  " ( + ( ' '3 3 3 3 3 3 3 3 3 3 3 3 3h  0 - @ 3  $ ; C !>ZzGT*'TRj.b"J+\+\>	(5hl^,j3l*Z4@_D<dN8 
HV:z2jGTPf,?D@dVr	<:z:z&^BBJaH'T*5peP0 *DTlPl;|l^nb3l# "$	qOj8.z ! OdB("JfR&R~D   {x
 ,d	( = <Vx662fPnb*Z1h5*X G:2`ra  