
    ݦix9              	           d dl m Z  d dlmZ dgddddgdddd	d
dddgdd dddd
dd ddg ddddg ddddg ddddddZ G d d      Zy)    )datetimegetProfileDetailsServiceB   )itemspointsPM
   )set_1set_2
max_points      )minmaxbase_points   )per_item	min_score)sets	deduction)per_short_projectr   )r   min_requiredr   )pythonjavaczc++zc#gorustscalakotlinswiftmysql
postgresqloraclemongodbredissqlitebash
powershellawsazuregcp   )skillspoints_per_skillr   )reactangularvuesveltenodejsexpressnestjsdjangoflaskfastapispringzspring bootlaraveldotnetnextjsnuxtjsgraphqlzrest apidocker
kubernetesjenkinsz	gitlab cizgithub actions)htmlcss
javascript
typescriptjquery	bootstraptailwindzmaterial uiz	chakra uisasslesswebpackvitebabelnpmyarnpnpmeslintprettiergitgithub	bitbucketjsonxmlzresponsive designzcross browser testingg      @tier_1tier_2tier_3)	education
experienceprojectsr0   c                   ^    e Zd Zd ZdedefdZd Zd Zd Zd Z	d	 Z
d
 Zd Zd Zd Zd Zy)CalculateProfileScoringc                    t         | _        t        j                         j                  | _        ddddddd| _        | j                  d   j                         D ]<  }t        |t              sd|v s|d   D ch c]  }|j                          c}|d<   > | j                  d   j                         D ]&  }|d   D ch c]  }|j                          c}|d<   ( y c c}w c c}w )Nr   r   <   r_   r`   ra   certificatesawardsr0   r_   r   r0   )RULESrulesr   nowyearcurrent_yearSECTION_MAXvalues
isinstancedictlower)selfruleitemtierss        ?/home/hirelines/hirelines/app_api/functions/profile_strength.py__init__z CalculateProfileScoring.__init__   s    
$LLN//
 JJ{+224 	ID$%'T/:>w- H$ HW	I
 JJx(//1 	AD15h@Aaggi@DN	A !I As   :C  C%textreturnc                 ~    |j                         j                  dd      j                  dd      j                         S )z5Normalize text for case-insensitive + substring match. -)rr   replacestrip)rs   rz   s     rx   _normalize_textz'CalculateProfileScoring._normalize_text   s1     JJLWS"WS"UW		
    c                     d}|D ][  }t        |t              s|j                  d      }|j                  d      xs | j                  }|sG|sJ|t	        d||z
        z  }] t        d|       |S )Nr   yearfromyeartoyears)rp   rq   getrm   r   print)rs   r`   r   jobstartends         rx   calculate_experience_yearsz2CalculateProfileScoring.calculate_experience_years   su     	-Cc4(GGJ'E''(#8t'8'8CQe,,	- 	ger   c                     t        d|       ||j                  dd      z  }t        d|       t        |j                  dd      ||z
        S )N
item_countr   r   r   r   )r   r   r   )rs   
base_scorer   rt   r   s        rx   apply_deductionz'CalculateProfileScoring.apply_deduction   sH    l:&*a!88	k)$488K+Z)-CDDr   c                 T    t        |t              syt        t        |      |z  |      S )Nr   )rp   listr   len)rs   r   points_per_itemr   s       rx   calculate_capped_item_scorez3CalculateProfileScoring.calculate_capped_item_score   s%    %&3u:/<<r   c                 J   |j                  dg       }t        |t              syd}|D ]  }t        |t              s|j                  d      }t        |t              r|j                         sF|j                         d   j                         }| j                  d   j                         D ]D  }t        |t              rd|vr|d   D ch c]  }|j                          }	}||	v s=||d   z  }F  | j                  d   j                  d|      }
t        ||
      S c c}w )Nr_   r   courser   r	   r   )
r   rp   r   rq   strr   upperrj   ro   r   )rs   profiler_   scoreedur   course_startrt   ru   
rule_itemsr   s              rx   score_educationz'CalculateProfileScoring.score_education  s   KKR0	)T* 	,Cc4(WWX&Ffc*&,,. "<<>!,224L

;/668 ,!$-1D 8<G}EtdjjlE
E:-T(^+E,	,, ZZ,00uE
5*%% Fs   D c                 .   |j                  dg       }t        |t              rt        |      dk(  ry| j                  d   d   d   d   }| j                  d   d   d   d   }g }d}|D ]  }t        |t
              s|j                  d      }|j                  d      xs | j                  }	t        |t              sUt        |	t              sf|	|kD  sl|	|z
  }
|j                  |
       ||
z  } |dk(  ry|}|D ]  }||k  s	|dz  } t        d|      S )	Nr`   r   r   r   r   r   r   r   )
r   rp   r   r   rj   rq   rm   intappendr   )rs   r   r`   r   r   company_yearstotal_yearsr   r   r   r   r   yrss                rx   score_experiencez(CalculateProfileScoring.score_experience!  s-   [[r2
*d+s:!/Cjj.v6q9-Hzz,/7:5A 
	%Cc4(GGJ'E''(#8t'8'8C%%*S#*>3;e$$U+u$
	% ! ! 	C\!
	 1e}r   c                    |j                  dg       }t        |t              rt        |      dk(  ry| j                  d   }|d   }|d   }|d   d   }|d   d   }|}d}	|D ]}  }
t        |
t
              s|
j                  d	      }|
j                  d
      xs | j                  }t        |t              sUt        |t              sf||kD  sld}	||z
  }||k  sy||z  } |	syt        ||      S )Nra   r   r   r   r   r   r   F	yearsfromyearstoT)	r   rp   r   r   rj   rq   rm   r   r   )rs   r   ra   rj   r   r   r   r   r   valid_project_foundprojectr   r   r   s                 rx   score_projectsz&CalculateProfileScoring.score_projectsI  s
   ;;z2.(D)S]a-?

:&M*^,!+./BC+&{3	# 	/Ggt,KK,E++i(=D,=,=C%%*S#*>3;&*#e<'..E	/ #9e$$r   c                 <   |j                  dg       }|j                  dg       }t        |      }| j                  |      }t        |t              rt        |      dk(  ry|dk  rd}n|dk  rd}n|dk  rd}n
|d	k  rd}nd
}||k\  ry
||z
  }d
|z
  }t        d|      S )Nrg   r`   r      r      r   r      r   )r   r   r   rp   r   r   )	rs   r   rg   r`   
cert_count	exp_yearsexpectedmissingr   s	            rx   score_certificatesz*CalculateProfileScoring.score_certificatesq  s    {{>26[[r2

 &
33J?	 ,-\1Ba1G >H!^H!^H!^HH ! Z'G1e}r   c                    |j                  dg       }|j                  dg       }t        |      }| j                  |      }|dk(  ry|dk  rd}n|dk  rd}n|dk  rd}n
|d	k  rd}nd
}||k\  ry
d
||z
  z
  }t        d|      S )Nrh   r`   r   r   r   r   r   r   r   r   )r   r   r   r   )rs   r   rh   r`   award_countr   r   r   s           rx   score_awardsz$CalculateProfileScoring.score_awards  s    Xr*[[r2
 &k33J?	 ! >H!^H!^H!^HH (" X+,1e}r   c                    |j                  di       j                  d      xs d}|j                  di       j                  d      xs d}| d| j                         }|j                  d      D ch c]#  }|j                         s|j                         % }}d}dD ]G  }| j                  d   |   }	||	d   z  }
|t        t        |
      |	d   z  |	d	         z  }||
z  }|rF |S  |S c c}w )
Nr0   primaryskillsr~   secondaryskills,r   r[   r1   r   )r   rr   splitr   rj   r   r   )rs   r   primary	secondaryskills_textrw   remaining_skillsr   tier_keyrv   matcheds              rx   score_skillsz$CalculateProfileScoring.score_skills  s   ++h+//@FBKK"-112CDJ	 	9+.446/:/@/@/ES!AGGISS6 	H::h'1D&h7GSGt$677\" E
 '#	 # Ts   3C-	C-c                 `   ddl m}  ||      }| j                  |      | j                  |      | j	                  |      | j                  |      | j                  |      | j                  |      d}i }d}|j                         D ]k  \  }}| j                  |   }	|	r||	z  dz  nd}
t        |
dz        dz  }
t        |
t              r|
j                         rt        |
      n|
}
||
d||<   ||z  }m t        |t              r|j                         rt        |      n|}|t        |      |dS )Nr   r   rf   d   r   )r   
percentage)total_scorer   	breakdown)app_api.functions.servicesr   r   r   r   r   r   r   r   rn   r   rp   float
is_integerround)rs   
profile_idr   r   
raw_scoresr   r   sectionr   r   pctoverall_pcts               rx   score_profilez%CalculateProfileScoring.score_profile  sE   G*:6 --g6//8++G4 33G<''0''0

 	(..0 	!NGU))'2J0:5:%,C cBh-"$C(e49I#c(sC !"Ig
 5 K	!  +5[%*H[McMcMec+&kv ',"
 	
r   N)__name__
__module____qualname__ry   r   r   r   r   r   r   r   r   r   r   r   r    r   rx   rc   rc      sT    A.
C 
C 

E=B&@&P %P$L"X40
r   rc   N)r   r   r   ri   rc   r   r   rx   <module>r      s     ?j U

 #Y
 
 a3
 #$!4	 +,1=. !#3
82 !"7
<8 !$=
sYSc	Lb
 b
r   