o
    +hi                  
   @  s  d dl mZ d dlmZmZmZ d dlmZmZmZ d dl	Z	d dl
mZmZmZ d dlmZ d dlmZmZ e Zeedd	Zd3ddZd4ddZd5d6ddZejdededdddedd edd edd ed!d"d#deddd$fd7d-d.Zejd/edd8d1d2ZdS )9    )annotations)datetimetimezone	timedelta)OptionalDictListN)	APIRouterRequestQuery)HTMLResponse)	templatessb	   )hoursdtOptional[str]returnc                 C  sD   | sd S zt | dd}|tdW S  ty!   |  Y S w )NZz+00:00z%Y-%m-%d %H:%M)r   fromisoformatreplace
astimezoneKSTstrftime	Exception)r   d r   4/var/www/html/bot/app/web/pages/gov/motie/changes.py_to_kst   s   r   namephonestrc                 C  s2   | pd   d|p
d   }t|d S )u>   MOTIE 동일 인물 판정: 이름 + 전화(없으면 빈값). |zutf-8)striphashlibsha1encode	hexdigest)r   r    baser   r   r   _person_key   s   r*   $   snintc                 C  s4   | sdS |   } t| |kr| S | d |d  d S )N-   u   …)r$   len)r,   r-   r   r   r   _shorten!   s   $r2   z/gov/motie/changes)response_class   r0   im  )defaultgele)r5      
   i  )r5   r6   requestr
   daysevent
departmentpositionlimitpagec                   s  t tjt|d  }tdd	d|}|r"|
d|}|r.|dd| d}|r:|dd| d}|jdd	d
d jpHg }	i }
|	D ];}t|d|d}||
vr|t|d|d|d|d|d|d|d|dpg d	|
|< qMt|
 }t|}|}|d | }|| }||| }|r|| d | nd}||krg }td| |||pd|pd|pd||||d
S )u   
    motie_org_events 뷰에서 가져와서 '사람(이름+전화)' 단위로 최신 1건만 보여줌.
    표 컬럼: 일시(KST) / 이름 / 부서/직위 / 이벤트 / 변경 내역 / 상세보기
    )r;   motie_org_events*
valid_from
event_typer=   %r>   Tdesci  r   r    taskchanged_fields)	
person_keylatest_valid_from_kstr   r=   r>   r    rH   rD   rI   r0   zgov/motie/changes.htmlr"   )
r:   rowsr;   r<   r=   r>   r?   r@   pagestotal)r   nowr   utcr   	isoformatr   tableselectgteeqilikeorderr?   executedatar*   getr   listvaluesr1   r   TemplateResponse)r:   r;   r<   r=   r>   r?   r@   sinceqrL   groupedrpkeypeopletotal_people	page_sizestartend	page_rowsrM   r   r   r   motie_changes(   sl   
ri   z/gov/motie/person/{person_key}rJ   c              	     s  t ddjdddd jpg }d\}}|D ]}t|d|d	|kr8|d|d	}} nq|sGt	
d
| |d g ddS t ddd|d	|d urZ|ndjdddd jpig }|D ]}t|d|d< t|d|d< qlddd}g }	t|D ]\}
}|
d t|k r||
d  nd }|	||||d q|r|d nd }t	
d
| |||	ddS ) NrA   z
name,phonerC   TrF   i'  )NNr   r    zgov/motie/person.html)r:   rJ   curtimeline	not_foundmotie_org_hist_coalescedrB   r"   i  _valid_from_kstvalid_to_valid_to_kstadictbOptional[dict]r   
List[dict]c                 S  sT   |sg S g d}g }|D ]}|  || |kr'||| ||  |d q|S )N)r=   r>   r    rH   )fieldbeforeafter)rZ   append)rq   rs   fieldsoutfr   r   r   _changes   s   zmotie_person.<locals>._changesr0   )rj   diffr   F)rq   rr   rs   rt   r   ru   )r   rR   rS   rW   r?   rX   rY   r*   rZ   r   r]   rU   r   	enumerater1   ry   )r:   rJ   evsr   r    ehistra   r}   rk   irj   prevr   r   r   motie_personu   sf   	

 r   )r   r   r   r   )r   r   r    r   r   r!   )r+   )r,   r   r-   r.   r   r!   )r:   r
   r;   r.   r<   r   r=   r   r>   r   r?   r.   r@   r.   )r:   r
   rJ   r!   )
__future__r   r   r   r   typingr   r   r   r%   fastapir	   r
   r   fastapi.responsesr   app.web.depsr   r   routerr   r   r*   r2   rZ   ri   r   r   r   r   r   <module>   s,   



L