§
    ÔŸ’jà!  ã                  óÂ  — d Z ddlmZ ddlmZ ddlmZmZmZm	Z	 ddl
mZ ddlmZmZ ddlmZ ddlmZ  ed	d
g¬¦  «        Z G d„ de¦  «        Z G d„ de¦  «        Z G d„ de¦  «        Z G d„ de¦  «        Z G d„ de¦  «        Ze                     d¦  «         e	d¬¦  «         e	d¬¦  «         ee¦  «        fd9d „¦   «         Ze                     d!¦  «         ee¦  «        fd:d$„¦   «         Ze                     dd%¬&¦  «         e eg d'¢¦  «        ¦  «        fd;d)„¦   «         Ze                     d*¦  «         e eg d+¢¦  «        ¦  «        fd<d-„¦   «         Ze                      d*¦  «         e ed.d/g¦  «        ¦  «        fd=d0„¦   «         Z!e                     d1d%¬&¦  «         e eg d+¢¦  «        ¦  «        fd>d2„¦   «         Z"e                     d3¦  «         e eg d+¢¦  «        ¦  «        fd?d5„¦   «         Z#e                      d3¦  «         e eg d'¢¦  «        ¦  «        fd@d6„¦   «         Z$e                     d7¦  «         ee¦  «        fdAd8„¦   «         Z%dS )Bz)Project and WBS Management API endpoints.é    )Úannotations)ÚAny)Ú	APIRouterÚDependsÚHTTPExceptionÚQuery)Ú	BaseModel)Úget_current_userÚrequire_role)ÚProjectCrudRepository)ÚAIWbsGeneratorServicez/v1/erp/projectszProject & WBS Management)ÚprefixÚtagsc                  óN  — e Zd ZU dZded<   ded<   dZded<   dZded<   dZded<   d	Zded
<   dZ	ded<   dZ
ded<   dZded<   dZded<   dZded<   dZded<   dZded<   dZded<   dZded<   dZded<   dZded<   dZded<   dZded <   dZded!<   dZd"ed#<   dZd"ed$<   dZd"ed%<   dS )&ÚProjectCreateRequestNú
str | NoneÚproject_codeÚstrÚproject_nameÚclient_nameÚlocationÚdescriptionõ   DÃ¢n dá»¥ng & Háº¡ táº§ngÚproject_typeÚplanningÚstatusÚmediumÚpriorityç        úfloat | NoneÚbudget_amountÚcontract_valueÚ
start_dateÚexpected_end_dateÚproject_manager_idÚnotesÚcontract_numberu   Trá»�n gÃ³iÚcontract_typeé´   ú
int | NoneÚcontract_duration_daysg      $@Úadvance_payment_percentg      @Úretention_percentÚcontract_signing_dateúlist[dict[str, Any]] | NoneÚcontract_schedule_jsonÚ	wbs_itemsÚ
milestones)Ú__name__Ú
__module__Ú__qualname__r   Ú__annotations__r   r   r   r   r   r   r!   r"   r#   r$   r%   r&   r'   r(   r+   r,   r-   r.   r0   r1   r2   © ó    ú8C:\Projects\DSCons\app\api\routers\project_management.pyr   r      s›  € € € € € € Ø#€LÐ#Ð#Ð#Ñ#ØÐÐÑØ"€KÐ"Ð"Ð"Ñ"Ø€HÐÐÐÑØ"€KÐ"Ð"Ð"Ñ"Ø:€LÐ:Ð:Ð:Ñ:Ø#€FÐ#Ð#Ð#Ñ#Ø#€HÐ#Ð#Ð#Ñ#Ø"%€MÐ%Ð%Ð%Ñ%Ø#&€NÐ&Ð&Ð&Ñ&Ø!€JÐ!Ð!Ð!Ñ!Ø$(ÐÐ(Ð(Ð(Ñ(Ø%)ÐÐ)Ð)Ð)Ñ)Ø€EÐÐÐÑØ"&€OÐ&Ð&Ð&Ñ&Ø -€MÐ-Ð-Ð-Ñ-Ø),ÐÐ,Ð,Ð,Ñ,Ø,0ÐÐ0Ð0Ð0Ñ0Ø&)ÐÐ)Ð)Ð)Ñ)Ø(,ÐÐ,Ð,Ð,Ñ,Ø:>ÐÐ>Ð>Ð>Ñ>Ø-1€IÐ1Ð1Ð1Ñ1Ø.2€JÐ2Ð2Ð2Ñ2Ð2Ð2r8   r   c                  óD  — e Zd ZU dZded<   dZded<   dZded<   dZded<   dZded<   dZ	ded<   dZ
ded	<   dZd
ed<   dZd
ed<   dZded<   dZded<   dZded<   dZded<   dZded<   dZded<   dZded<   dZded<   dZded<   dZd
ed<   dZd
ed<   dZded<   dZded<   dS )ÚProjectUpdateRequestNr   r   r   r   r   r   r   r   r    r!   r"   r#   r$   Úactual_end_dater%   r*   Úprogress_percentr&   r'   r(   r+   r,   r-   r.   r/   r0   )r3   r4   r5   r   r6   r   r   r   r   r   r   r!   r"   r#   r$   r<   r%   r=   r&   r'   r(   r+   r,   r-   r.   r0   r7   r8   r9   r;   r;   .   s�  € € € € € € Ø#€LÐ#Ð#Ð#Ñ#Ø"€KÐ"Ð"Ð"Ñ"Ø€HÐÐÐÑØ"€KÐ"Ð"Ð"Ñ"Ø#€LÐ#Ð#Ð#Ñ#Ø€FÐÐÐÑØ€HÐÐÐÑØ"&€MÐ&Ð&Ð&Ñ&Ø#'€NÐ'Ð'Ð'Ñ'Ø!€JÐ!Ð!Ð!Ñ!Ø$(ÐÐ(Ð(Ð(Ñ(Ø"&€OÐ&Ð&Ð&Ñ&Ø%)ÐÐ)Ð)Ð)Ñ)Ø#'ÐÐ'Ð'Ð'Ñ'Ø€EÐÐÐÑØ"&€OÐ&Ð&Ð&Ñ&Ø $€MÐ$Ð$Ð$Ñ$Ø)-ÐÐ-Ð-Ð-Ñ-Ø,0ÐÐ0Ð0Ð0Ñ0Ø&*ÐÐ*Ð*Ð*Ñ*Ø(,ÐÐ,Ð,Ð,Ñ,Ø:>ÐÐ>Ð>Ð>Ñ>Ð>Ð>r8   r;   c                  óè   — e Zd ZU dZded<   ded<   ded<   dZded<   dZded	<   d
Zded<   d
Zded<   d
Z	ded<   dZ
ded<   dZded<   dZded<   dZded<   dZded<   dZded<   dZded<   dZded<   dS )ÚWbsItemCreateRequestNr   Úparent_wbs_idr   Úwbs_codeÚ	task_nameÚtaskÚ	task_typeÚunitr   r    ÚquantityÚunit_price_vndÚtotal_amount_vndr#   Úend_dateé   ÚintÚduration_daysr   r=   Útodor   Úassigned_roleÚ
sort_orderr&   )r3   r4   r5   r@   r6   rD   rE   rF   rG   rH   r#   rI   rL   r=   r   rN   rO   r&   r7   r8   r9   r?   r?   G   s  € € € € € € Ø $€MÐ$Ð$Ð$Ñ$Ø€M€M�MØ€N€N�NØ€IÐÐÐÑØ€DÐÐÐÑØ €HÐ Ð Ð Ñ Ø#&€NÐ&Ð&Ð&Ñ&Ø%(ÐÐ(Ð(Ð(Ñ(Ø!€JÐ!Ð!Ð!Ñ!Ø€HÐÐÐÑØ€MÐÐÐÑØÐÐÐÐÑØ€FÐÐÐÑØ $€MÐ$Ð$Ð$Ñ$Ø€JÐÐÐÑØ€EÐÐÐÑÐÐr8   r?   c                  óÔ   — e Zd ZU dZded<   dZded<   dZded<   dZded<   dZded<   dZ	ded	<   dZ
ded
<   dZded<   dZded<   dZded<   dZded<   dZded<   dZded<   dZded<   dS )ÚWbsItemUpdateRequestNr   rB   rD   rE   r    rF   rG   rH   r#   rI   r*   rL   r=   r   rN   rO   r&   )r3   r4   r5   rB   r6   rD   rE   rF   rG   rH   r#   rI   rL   r=   r   rN   rO   r&   r7   r8   r9   rQ   rQ   Z   s  € € € € € € Ø €IÐ Ð Ð Ñ Ø €IÐ Ð Ð Ñ Ø€DÐÐÐÑØ!€HÐ!Ð!Ð!Ñ!Ø#'€NÐ'Ð'Ð'Ñ'Ø%)ÐÐ)Ð)Ð)Ñ)Ø!€JÐ!Ð!Ð!Ñ!Ø€HÐÐÐÑØ $€MÐ$Ð$Ð$Ñ$Ø#'ÐÐ'Ð'Ð'Ñ'Ø€FÐÐÐÑØ $€MÐ$Ð$Ð$Ñ$Ø!€JÐ!Ð!Ð!Ñ!Ø€EÐÐÐÑÐÐr8   rQ   c                  ó`   — e Zd ZU ded<   dZded<   dZded<   dZd	ed
<   dZded<   dZd	ed<   dS )ÚAIGenerateWbsRequestr   r   r   r   r   Úfloatr"   Nr   r#   r)   rK   rL   Úcontract_schedule_text)	r3   r4   r5   r6   r   r"   r#   rL   rU   r7   r8   r9   rS   rS   k   st   € € € € € € ØÐÐÑØ3€LÐ3Ð3Ð3Ñ3Ø€NÐÐÐÑØ!€JÐ!Ð!Ð!Ñ!Ø€MÐÐÐÑØ)-ÐÐ-Ð-Ð-Ñ-Ð-Ð-r8   rS   Ú N)Údefaultr   r   ÚsearchÚcurrent_userúdict[str, Any]Úreturnúlist[dict[str, Any]]c                óL   — t          ¦   «         }|                     | |¬¦  «        S )u?   Láº¥y danh sÃ¡ch toÃ n bá»™ dá»± Ã¡n kÃ¨m KPI tiáº¿n Ä‘á»™ WBS.)r   rX   )r   Úlist_projects)r   rX   rY   Úrepos       r9   r^   r^   w   s(   € õ !Ñ"Ô"€DØ×Ò V°FÐÑ;Ô;Ð;r8   z/{project_id_or_code}Úproject_id_or_coder   c                ór   — t          ¦   «         }|                     | ¦  «        }|st          dd¬¦  «        ‚|S )uI   Xem chi tiáº¿t dá»± Ã¡n kÃ¨m cÃ¢y WBS, Milestones, Timeline vÃ  Rá»§i ro.é”  u   KhÃ´ng tÃ¬m tháº¥y dá»± Ã¡n©Ústatus_codeÚdetail)r   Úget_project_detailr   )r`   rY   r_   re   s       r9   rf   rf   ‚   sE   € õ !Ñ"Ô"€DØ×$Ò$Ð%7Ñ8Ô8€FØð SÝ¨Ð4QÐRÑRÔRÐRØ€Mr8   éÉ   )rd   )Ú
superadminÚdirectorÚpmÚpayloadc                óp   — t          ¦   «         }|                     |                      d¬¦  «        ¦  «        S )u)   Táº¡o má»›i dá»± Ã¡n kÃ¨m WBS ban Ä‘áº§u.T©Úexclude_none)r   Úcreate_projectÚ
model_dump)rk   rY   r_   s      r9   ro   ro   �   s4   € õ !Ñ"Ô"€DØ×Ò˜w×1Ò1¸tÐ1ÑDÔDÑEÔEÐEr8   z/{project_id})rh   ri   rj   Úsite_engineerÚ
project_idc                ór   — t          ¦   «         }|                     | |                     d¬¦  «        ¦  «        S )u1   Cáº­p nháº­t thÃ´ng tin dá»± Ã¡n & há»£p Ä‘á»“ng.Trm   )r   Úupdate_projectrp   ©rr   rk   rY   r_   s       r9   rt   rt   ›   s6   € õ !Ñ"Ô"€DØ×Ò˜z¨7×+=Ò+=È4Ð+=Ñ+PÔ+PÑQÔQÐQr8   rh   ri   c                ó~   — t          ¦   «         }|                     | ¦  «        }|st          dd¬¦  «        ‚dd| › �dœS )u   XÃ³a dá»± Ã¡n.rb   u4   KhÃ´ng thá»ƒ xÃ³a dá»± Ã¡n hoáº·c khÃ´ng tÃ¬m tháº¥yrc   Úsuccessu   Ä�Ã£ xÃ³a dá»± Ã¡n ©r   Úmessage)r   Údelete_projectr   )rr   rY   r_   Úoks       r9   rz   rz   ¨   s`   € õ !Ñ"Ô"€DØ	×	Ò	˜ZÑ	(Ô	(€BØð 
ÝØÐ$Zð
ñ 
ô 
ð 	
ð  Ð,NÀ*Ð,NÐ,NÐOÐOÐOr8   z/{project_id}/wbsc                ór   — t          ¦   «         }|                     | |                     d¬¦  «        ¦  «        S )u1   ThÃªm má»™t cÃ´ng viá»‡c WBS má»›i vÃ o dá»± Ã¡n.Trm   )r   Úcreate_wbs_itemrp   ru   s       r9   r}   r}   ·   s6   € õ !Ñ"Ô"€DØ×Ò 
¨G×,>Ò,>ÈDÐ,>Ñ,QÔ,QÑRÔRÐRr8   z/wbs/{wbs_id}Úwbs_idc                óœ   — t          ¦   «         }|                     | |                     d¬¦  «        ¦  «        }|st          dd¬¦  «        ‚|S )u;   Cáº­p nháº­t tiáº¿n Ä‘á»™ / tráº¡ng thÃ¡i cÃ´ng viá»‡c WBS.Trm   rb   u#   KhÃ´ng tÃ¬m tháº¥y cÃ´ng viá»‡c WBSrc   )r   Úupdate_wbs_itemrp   r   )r~   rk   rY   r_   Úitems        r9   r€   r€   Ä   sW   € õ !Ñ"Ô"€DØ×Ò ¨×(:Ò(:ÈÐ(:Ñ(MÔ(MÑNÔN€DØð [Ý¨Ð4YÐZÑZÔZÐZØ€Kr8   c                ó~   — t          ¦   «         }|                     | ¦  «        }|st          dd¬¦  «        ‚dd| › �dœS )u   XÃ³a cÃ´ng viá»‡c WBS.rb   u.   KhÃ´ng tÃ¬m tháº¥y cÃ´ng viá»‡c WBS Ä‘á»ƒ xÃ³arc   rw   u   Ä�Ã£ xÃ³a cÃ´ng viá»‡c WBS rx   )r   Údelete_wbs_itemr   )r~   rY   r_   r{   s       r9   rƒ   rƒ   Ô   s`   € õ !Ñ"Ô"€DØ	×	Ò	˜fÑ	%Ô	%€BØð 
ÝØÐ$Tð
ñ 
ô 
ð 	
ð  Ð,RÈ&Ð,RÐ,RÐSÐSÐSr8   z/ai-generate-wbsc                ó�   — t          ¦   «         }|                     | j        | j        | j        | j        | j        | j        ¬¦  «        S )uu   NhÃ¢n viÃªn AI PhÃºc & Tháº£o tá»± Ä‘á»™ng tÃ­nh toÃ¡n Timeline CPM vÃ  phÃ¢n rÃ£ WBS tá»« biá»ƒu giÃ¡ há»£p Ä‘á»“ng.)r   r   r"   r#   rL   rU   )r   Úgenerate_timeline_and_wbsr   r   r"   r#   rL   rU   )rk   rY   Úservices      r9   Úai_generate_wbsr‡   å   sP   € õ $Ñ%Ô%€GØ×,Ò,ØÔ)ØÔ)ØÔ-ØÔ%ØÔ+Ø&Ô=ð -ñ ô ð r8   )r   r   rX   r   rY   rZ   r[   r\   )r`   r   rY   rZ   r[   rZ   )rk   r   rY   rZ   r[   rZ   )rr   r   rk   r;   rY   rZ   r[   rZ   )rr   r   rY   rZ   r[   rZ   )rr   r   rk   r?   rY   rZ   r[   rZ   )r~   r   rk   rQ   rY   rZ   r[   rZ   )r~   r   rY   rZ   r[   rZ   )rk   rS   rY   rZ   r[   rZ   )&Ú__doc__Ú
__future__r   Útypingr   Úfastapir   r   r   r   Úpydanticr	   Úapp.api.routers.authr
   r   Ú)app.core.postgres.project_crud_repositoryr   Ú%app.services.ai_wbs_generator_servicer   Úrouterr   r;   r?   rQ   rS   Úgetr^   rf   Úpostro   Úputrt   Údeleterz   r}   r€   rƒ   r‡   r7   r8   r9   ú<module>r•      sž  ðØ /Ð /à "Ð "Ð "Ð "Ð "Ð "à Ð Ð Ð Ð Ð à <Ð <Ð <Ð <Ð <Ð <Ð <Ð <Ð <Ð <Ð <Ð <Ø Ð Ð Ð Ð Ð à ?Ð ?Ð ?Ð ?Ð ?Ð ?Ð ?Ð ?Ø KÐ KÐ KÐ KÐ KÐ KØ GÐ GÐ GÐ GÐ GÐ Gà	ˆÐ,Ð4NÐ3OÐ	PÑ	PÔ	P€ð3ð 3ð 3ð 3ð 3˜9ñ 3ô 3ð 3ð4?ð ?ð ?ð ?ð ?˜9ñ ?ô ?ð ?ð2ð ð ð ð ˜9ñ ô ð ð&ð ð ð ð ˜9ñ ô ð ð".ð .ð .ð .ð .˜9ñ .ô .ð .ð ‡‚ˆB�„à˜ tÐ,Ñ,Ô,Ø˜ tÐ,Ñ,Ô,Ø#* 7Ð+;Ñ#<Ô#<ð<ð <ð <ð <ñ „ð<ð ‡‚Ð#Ñ$Ô$ð $+ 7Ð+;Ñ#<Ô#<ð	ð 	ð 	ð 	ñ %Ô$ð	ð ‡‚ˆR˜S€Ñ!Ô!ð $+ 7ØˆÐ5Ð5Ð5Ñ6Ô6ñ$ô $ðFð Fð Fð Fñ "Ô!ðFð ‡‚ˆOÑÔð $+ 7ØˆÐFÐFÐFÑGÔGñ$ô $ð	Rð 	Rð 	Rð 	Rñ Ôð	Rð ‡‚ˆÑÔð $+ 7¨<¨<¸ÀzÐ8RÑ+SÔ+SÑ#TÔ#TðPð Pð Pð Pñ  ÔðPð ‡‚Ð ¨c€Ñ2Ô2ð $+ 7ØˆÐFÐFÐFÑGÔGñ$ô $ð	Sð 	Sð 	Sð 	Sñ 3Ô2ð	Sð ‡‚ˆOÑÔð $+ 7ØˆÐFÐFÐFÑGÔGñ$ô $ðð ð ð ñ Ôðð ‡‚ˆÑÔð $+ 7ØˆÐ5Ð5Ð5Ñ6Ô6ñ$ô $ðTð Tð Tð Tñ  ÔðTð  ‡‚ÐÑ Ô ð $+ 7Ð+;Ñ#<Ô#<ðð ð ð ñ !Ô ðð ð r8   