o
    Âh4  ã                   @  sÂ   d dl mZ d dlmZmZ d dlmZmZmZ d dl	m
Z
mZ d dlmZmZ eƒ Zejde
dedd	fddd„ƒZejdededd	edd	dfd dd„ƒZejdedd!d"dd„ƒZdS )#é    )Úannotations)ÚListÚDict)Ú	APIRouterÚRequestÚQuery)ÚHTMLResponseÚJSONResponse)Ú	templatesÚsbz/gov/me/heads)Úresponse_classÚ )ÚdefaultÚrequestr   ÚqÚstrc              	   ƒ  s   zt  d¡ d¡jddd d¡ ¡ jpg }W n ty#   g }Y nw g }|p)d ¡  	¡ }|rˆ|D ]J}| 
d¡| 
d	¡p>d
| 
d¡pDd ¡ pHd| 
d¡| 
d¡pRd ¡ pVd| 
d¡p\d ¡ p`ddœ}d dd„ | ¡ D ƒ¡ 	¡ }|rw||v r|| |¡ q2t d| d||dœ¡S zt  d¡ d¡ d¡ ¡ jp˜g }W n ty¥   g }Y nw i }	|D ]}| 
d¡p²d ¡ }
|
rÀ|	 |
g ¡ |¡ qªd1d d!„‰ t|	 ¡ ƒD ]x}
|	|
 }d2‡ fd%d&„}t||d'd(d
 }|
|
 d)¡rêd*n|
 d+¡rñd,n|
 d-¡rød.nd
| 
d¡pÿd ¡ pd| 
d¡pd ¡ pd| 
d¡pd ¡ pd| 
d¡p#d ¡ p(ddœ}|r?|d d/d„ | ¡ D ƒ¡ 	¡ v rD| |¡ qÌt d| d||dœ¡S )3u¿   í™˜ê²½ë¶€(ME) ë¶€ì„œë³„ ì±…ìž„ìž í‘œ.
    1) me_heads_cur ë·°ê°€ ìžˆìœ¼ë©´ ê·¸ê²ƒì„ ìš°ì„  ì‚¬ìš©
    2) ì—†ìœ¼ë©´ me_org_curì—ì„œ ë¶€ì„œë³„ ë¦¬ë”ë¥¼ ë‹¨ìˆœ íœ´ë¦¬ìŠ¤í‹±ìœ¼ë¡œ ì„ íƒ
    Úme_heads_curz(unit,position,name,phone,task,indent,ordÚordF©Údescéˆ  r   ÚunitÚindentr   Únameu   (ê³µì„)ÚpositionÚphoneÚ-Útask)r   r   r   r   r   r   Ú c                 S  ó   g | ]}t |pd ƒ‘qS ©r   ©r   ©Ú.0Úx© r%   ú//var/www/html/bot/app/web/pages/gov/me/heads.pyÚ
<listcomp>)   ó    z gov_me_heads.<locals>.<listcomp>zgov/me/heads.htmlu   í™˜ê²½ë¶€(ME))r   Úministryr   ÚitemsÚ
me_org_curú#department,position,name,phone,taskéPÃ  Ú
departmentÚposr   ÚreturnÚintc                 S  s†   | pd  ¡ }| d¡rdS | d¡rdS | d¡rdS | d¡r"d	S | d
¡s1| d¡s1| d¡r3dS | d¡r:dS | d¡rAdS dS )Nr   u   ìž¥ê´€éd   u   ì°¨ê´€é_   õ   ì‹¤ìž¥éZ   õ   êµ­ìž¥éU   õ	   ê´€ë¦¬ê´€õ	   ì •ì±…ê´€õ	   ê¸°íšê´€éP   õ   ê³¼ìž¥éF   õ   íŒ€ìž¥é<   é
   ©ÚstripÚendswith)r/   Úpr%   r%   r&   Úguess_rank_scoreD   s   "z&gov_me_heads.<locals>.guess_rank_scoreÚrÚdictÚtuplec                   sd   ˆ |   d¡pdƒ}||   d¡pd ¡ dvrdnd7 }||   d¡p!d ¡ r&dnd7 }||   d¡p0dfS )	Nr   r   r   )r   r   é   r   r   é   ©ÚgetrB   )rF   Ús©rE   r%   r&   ÚscoreS   s   "zgov_me_heads.<locals>.scoreT)ÚkeyÚreverseõ   ì‹¤rJ   õ   êµ­é   )õ   ê³¼õ   íŒ€é   c                 S  r   r    r!   r"   r%   r%   r&   r'   c   r(   N)r/   r   r0   r1   )rF   rG   r0   rH   )r   ÚtableÚselectÚorderÚlimitÚexecuteÚdataÚ	ExceptionrB   ÚlowerrL   ÚjoinÚvaluesÚappendr
   ÚTemplateResponseÚ
setdefaultÚsortedÚkeysrC   )r   r   Úvr*   rP   rF   ÚrowÚhayÚrowsÚby_depÚdepÚcandsrO   Úrecr%   rN   r&   Úgov_me_heads
   sŽ   €þúùÿú
€þûúÿ€
,ú(
€þro   z/gov/me/heads/debugNr2   rl   ú
str | Noner/   r[   r1   c                 Ã  s´   zt  d¡ d¡ d¡ ¡ jpg }W n ty   g }Y nw g }|D ]/}| d¡p+d ¡ }| d¡p4d ¡ }| r>| |vr>q#|rE||vrEq#| 	|¡ t
|ƒ|krR nq#t
|ƒ|dœS )Nr+   r,   r-   r.   r   r   )Úcountrj   )r   rX   rY   r[   r\   r]   r^   rL   rB   rb   Úlen)rl   r/   r[   rj   ÚoutrF   ÚdrD   r%   r%   r&   Úgov_me_heads_debugl   s"   €ÿþÿ$
ru   z/gov/me/heads/target_syncÚapplyÚupdate_existingc                 Ã  sD  d%dd„}d&dd„}zt  d	¡ d
¡ d¡ ¡ jpg }W n ty(   g }Y nw tdd„ |D ƒƒ}zt  d¡ d¡jddd d¡ ¡ jpGg }W n tyT   g }Y nw dd„ |D ƒ}t	dd„ |D ƒdg ƒ}g g }	}
|D ]B}||vrˆ|d7 }|	 
||||ƒ||ƒdœ¡ qo|r±|| }||ƒ}||ƒ}| d¡|ks¤| d¡|kr±|
 
| d¡|||dœ¡ qot|ƒt|ƒt|	ƒt|
ƒdœ}| sÕ|	dd… |d < |
dd… |d!< |S tdt|	ƒd"ƒD ]}|	||d" … }|rót  d¡ |¡ ¡  qÝ|r|
r|
D ]}t  d¡ |d |d |d d#œ¡ d|d ¡ ¡  qüt|	ƒt|
ƒd$œS )'uD   me_org_cur ê¸°ë°˜ìœ¼ë¡œ me_heads_target ìžë™ ë³´ê°•(í…ŒìŠ¤íŠ¸ìš©).r   r   r0   c                 S  s    | pd  ¡ }| d¡rdS | d¡rdS | d¡rdS | d¡r"d	S | d
¡r)dS | d¡s8| d¡s8| d¡r:dS | d¡rAdS | d¡rHdS |dkrNdS dS )Nr   õ   ë³¸ë¶€ìž¥ì‹¤u	   ë³¸ë¶€ìž¥õ	   ìœ„ì›íšŒu	   ìœ„ì›ìž¥õ	   ì‚¬ë¬´êµ­u   ì‚¬ë¬´êµ­ìž¥rR   r4   rS   r6   r8   r9   r:   rU   r<   rV   r>   õ	   ëŒ€ë³€ì¸r   rA   ©r   Úur%   r%   r&   Úguess_expected_pos   s   "z4gov_me_heads_target_sync.<locals>.guess_expected_posr1   c                 S  sP   | pd  ¡ }| d¡rdS | d¡s|dv rdS | d¡rdS | d	¡r&d
S dS )Nr   )rx   r   )rR   )r{   rJ   )r9   r:   rS   ry   rT   )rU   rV   rz   rW   rA   r|   r%   r%   r&   Úguess_indentŽ   s   z.gov_me_heads_target_sync.<locals>.guess_indentr+   r.   r-   c                 S  s0   h | ]}|  d ¡p
d ¡ r|  d ¡pd ¡ ’qS )r.   r   rK   ©r#   rF   r%   r%   r&   Ú	<setcomp>›   s   0 z+gov_me_heads_target_sync.<locals>.<setcomp>Úme_heads_targetzord,unit,expected_pos,indentr   Fr   r   c                 S  s    i | ]}|  d ¡p
d ¡ |“qS )r   r   rK   r€   r%   r%   r&   Ú
<dictcomp>¡   s     z,gov_me_heads_target_sync.<locals>.<dictcomp>c                 S  s   g | ]	}|  d ¡p
d‘qS )r   r   )rL   r€   r%   r%   r&   r'   ¢   s    z,gov_me_heads_target_sync.<locals>.<listcomp>r   rJ   )r   r   Úexpected_posr   r„   r   )Ú
total_depsÚexisting_targetsÚmissing_unitsÚwill_updateNé   Úsample_insertsÚsample_updatesiô  )r   r„   r   )Úapplied_insertsÚapplied_updates)r   r   r0   r   )r   r   r0   r1   )r   rX   rY   r[   r\   r]   r^   re   rZ   Úmaxrb   rL   rr   ÚrangeÚupsertÚupdateÚeq)rv   rw   r~   r   ÚdepsÚ	dep_namesÚtgtÚby_unitÚmax_ordÚinsertsÚupdatesrt   ÚcurÚnew_epÚnew_indÚpreviewÚiÚpartr}   r%   r%   r&   Úgov_me_heads_target_sync~   s\   €

	$ÿ.ÿ

ü€€6r    )r   r   r   r   )rl   rp   r/   rp   r[   r1   )r   r   )rv   r1   rw   r1   )Ú
__future__r   Útypingr   r   Úfastapir   r   r   Úfastapi.responsesr   r	   Úapp.web.depsr
   r   ÚrouterrL   ro   ru   r    r%   r%   r%   r&   Ú<module>   s    a 