§
    ­]¶j‘*  ã                  ór
  — d Z ddlmZ ddlmZ ddlmZ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  e¦   «         Z ee¦  «                             ¦   «         j        d         d	z  Zd[d„Ze                     ded¬¦  «        e                     ded¬¦  «        e                     de¬¦  «        d\d„¦   «         ¦   «         ¦   «         Ze                     dd¬¦  «        e                     dd¬¦  «        d]d„¦   «         ¦   «         Ze                     d¦  «        d^d„¦   «         Ze                     de¬ ¦  «        d_d$„¦   «         Ze                     d%e¬ ¦  «        d`d&„¦   «         Ze                     d'e¬ ¦  «        e                     d(ed¬)¦  «        d`d*„¦   «         ¦   «         Ze                     d+e¬ ¦  «        d`d,„¦   «         Ze                     d-e¬ ¦  «        e                     d.e¬ ¦  «        d`d/„¦   «         ¦   «         Z e                     d0e¬ ¦  «        e                     d1e¬ ¦  «        d`d2„¦   «         ¦   «         Z!e                     d3e¬ ¦  «        d`d4„¦   «         Z"e                     d5e¬ ¦  «        e                     d6e¬ ¦  «        d`d7„¦   «         ¦   «         Z#e                     d8e¬ ¦  «        e                     d9e¬ ¦  «        d`d:„¦   «         ¦   «         Z$e                     d;e¬ ¦  «        d`d<„¦   «         Z%e                     d=e¬ ¦  «        d`d>„¦   «         Z&dd?l'Z'e                     d@¦  «        dA„ ¦   «         Z(e                     dBe¬ ¦  «        d`dC„¦   «         Z)e                     dDe¬ ¦  «        d`dE„¦   «         Z*e                     dFe¬ ¦  «        e                     dGe¬ ¦  «        e                     dHe¬ ¦  «        d`dI„¦   «         ¦   «         ¦   «         Z+e                     dJe¬ ¦  «        d`dK„¦   «         Z,e                     dLe¬ ¦  «        e                     dMe¬ ¦  «        d`dN„¦   «         ¦   «         Z-e                     dOe¬ ¦  «        d`dP„¦   «         Z.e                     dQe¬ ¦  «        e                     dRe¬ ¦  «        e                     dSe¬ ¦  «        d`dT„¦   «         ¦   «         ¦   «         Z/e                     dUe¬ ¦  «        e                     dVe¬ ¦  «        d`dW„¦   «         ¦   «         Z0e                     dXe¬ ¦  «        e                     dYe¬ ¦  «        d`dZ„¦   «         ¦   «         Z1d?S )az*Health and static asset routes for DSCons.é    )Úannotations)ÚPath)Ú	APIRouterÚRequestÚResponse)ÚFileResponseÚHTMLResponseÚJSONResponseÚRedirectResponse©ÚHealthResponse)ÚProjectManagementServiceé   ÚstaticÚfilenameÚstrÚreturnr	   c                óh   — t           | z                       d¬¦  «        }t          |ddddœ¬¦  «        S )zSRead one static HTML page from the shared static directory with zero-cache headers.zutf-8)Úencodingú.no-cache, no-store, must-revalidate, max-age=0úno-cacheÚ0©zCache-ControlÚPragmaÚExpires)ÚcontentÚheaders)Ú
STATIC_DIRÚ	read_textr	   )r   r   s     úAC:\Projects\DSCons\app\modules\core\presentation\health_static.pyÚ_read_static_pager!      sJ   € å˜HÑ$×/Ò/¸Ð/ÑAÔA€GÝØàMØ Øð
ð 
ðñ ô ð ó    z/healthF)Úresponse_modelÚinclude_in_schemaz/api/healthz/api/v1/health)r#   r   c                 ó   — t          ¦   «         S )zSimple liveness check endpoint.r   © r"   r    Úhealth_checkr'      s   € õ
 ÑÔÐr"   z/favicon.ico)r$   z/favicon.svgr   c                 ó\   — t           dz  } t          t          | ¦  «        dddddœ¬¦  «        S )z.Serve company favicon with zero-cache headers.zfavicon.svgzimage/svg+xmlr   r   r   r   )Ú
media_typer   )r   r   r   )Úfav_paths    r    Úfavicon_router+   &   sD   € õ ˜MÑ)€HÝÝˆH‰ŒØ"àMØ Øð
ð 
ðñ ô ð r"   z/health/readinessr
   c            
     óž  — t           dz                       ¦   «         t           dz                       ¦   «         t           dz                       ¦   «         t           dz                       ¦   «         t           dz                       ¦   «         t           dz                       ¦   «         t           dz                       ¦   «         t           dz                       ¦   «         t           d	z                       ¦   «         d
œ	} ddlm}  |¦   «         }|                     ¦   «         }d}d}|r<	 |                     ¦   «         }n&# t          $ r}t          |¦  «        }Y d}~nd}~ww xY wddi||r|nd|dœt          |  	                    ¦   «         ¦  «        | dœdœ}|d         d         o|d         d         o|r|nd}|rdnd}	t          |	|rdnd|dœ¬¦  «        S )z=Return dependency readiness for PostgreSQL and static assets.ú
index.htmlú
login.htmlúlanding.htmlúreadiness_dashboard.htmlúemployee_logs_dashboard.htmlúequipment_dashboard.htmlú!project_management_dashboard.htmlúdocuments_dashboard.htmlúagent_management_dashboard.html)	ÚindexÚloginÚlandingÚreadiness_dashboardÚemployee_logs_dashboardÚequipment_dashboardÚproject_management_dashboardÚdocuments_dashboardÚagent_management_dashboardr   )ÚBasePostgresClientFNÚreadyT)Úenabledr@   Úerror)r@   Úfiles)ÚapplicationÚpostgresÚstatic_assetsrD   rF   éÈ   i÷  Údegraded)ÚstatusÚchecks)Ústatus_coder   )r   ÚexistsÚ&app.core.postgres.base_pkg.base_clientr?   Ú
is_enabledÚpingÚ	Exceptionr   ÚallÚvaluesr
   )
Ústatic_filesr?   Ú	db_clientÚpostgres_enabledÚpostgres_readyÚpostgres_errorÚexcrJ   Úoverall_readyrK   s
             r    Úreadiness_checkrZ   6   s#  € õ ˜|Ñ+×3Ò3Ñ5Ô5Ý˜|Ñ+×3Ò3Ñ5Ô5Ý Ñ/×7Ò7Ñ9Ô9Ý *Ð-GÑ G×OÒOÑQÔQåÐ7Ñ7ß
Š&‰(Œ(Ý *Ð-GÑ G×OÒOÑQÔQåÐ<Ñ<ß
Š&‰(Œ(Ý *Ð-GÑ G×OÒOÑQÔQåÐ:Ñ:ß
Š&‰(Œ(ðð €Lð$ JÐIÐIÐIÐIÐIà"Ð"Ñ$Ô$€IØ ×+Ò+Ñ-Ô-ÐØ€NØ!%€Nàð &ð	&Ø&Ÿ^š^Ñ-Ô-ˆNˆNøÝð 	&ð 	&ð 	&Ý  ™XœXˆNˆNˆNˆNˆNˆNøøøøð	&øøøð   �à'Ø'7ÐB�^�^¸UØ#ð
ð 
õ ˜×,Ò,Ñ.Ô.Ñ/Ô/Ø!ð
ð 
ðð €Fð 	ˆ}Ô˜gÔ&ð 	;Ø�?Ô# GÔ,ð	;à/Ð9ˆ^ˆ^°Tð ð 'Ð/�#�#¨C€KÝØà!.Ð>�g�g°JØð
ð 
ðñ ô ð s   Ä"D7 Ä7
EÅEÅEú/)Úresponse_classÚrequestr   r   c                óÆ   — | j                              dd¦  «                             ¦   «         }|                     d¦  «        rt	          dd¬¦  «        S t          d¦  «        S )zKServe the public corporate landing page at the root domain or redirect ERP.ÚhostÚ zerp.ú/v1/erp/dashboardi.  )ÚurlrK   r/   )r   ÚgetÚlowerÚ
startswithr   r!   )r]   r_   s     r    Úhomepagerf   t   s^   € ð Œ?×Ò˜v rÑ*Ô*×0Ò0Ñ2Ô2€DØ‡‚�vÑÔð JÝÐ$7ÀSÐIÑIÔIÐIÝ˜^Ñ,Ô,Ð,r"   z/landingc                 ó    — t          d¦  «        S )z)Serve the company corporate landing page.r/   ©r!   r&   r"   r    Úlanding_pageri   }   s   € õ ˜^Ñ,Ô,Ð,r"   ra   z/v1/erp/erp)r\   r$   c                 ó    — t          d¦  «        S )z7Serve the main enterprise ERP Command Center dashboard.r-   rh   r&   r"   r    Úerp_dashboardrk   ƒ   s   € õ ˜\Ñ*Ô*Ð*r"   z/v1/erp/loginc                 ó    — t          d¦  «        S )z0Serve the Google Auth and enterprise login page.r.   rh   r&   r"   r    Ú
login_pagerm   Š   s   € õ ˜\Ñ*Ô*Ð*r"   z/v1/erp/dashboard/readinessz/v1/erp/readinessc                 ó    — t          d¦  «        S )z&Serve the dossier readiness dashboard.r0   rh   r&   r"   r    r9   r9   �   ó   € õ Ð7Ñ8Ô8Ð8r"   z/v1/erp/dashboard/employeesz/v1/erp/dashboard/site-diaryc                 ó    — t          d¦  «        S )z7Serve the enterprise HRM and site operations dashboard.r1   rh   r&   r"   r    r:   r:   —   s   € õ Ð;Ñ<Ô<Ð<r"   z/v1/erp/dashboard/equipmentc                 ó    — t          d¦  «        S )zHServe the enterprise machinery, vehicles and fleet management dashboard.r2   rh   r&   r"   r    r;   r;   ž   s   € õ Ð7Ñ8Ô8Ð8r"   z/v1/erp/dashboard/projectsz/v1/erp/dashboard/wbsc                 ó    — t          d¦  «        S )z'Serve the project management dashboard.r3   rh   r&   r"   r    r<   r<   ¤   ó   € õ Ð@ÑAÔAÐAr"   z/v1/erp/dashboard/documentsz/v1/erp/documents-dashboardc                 ó    — t          d¦  «        S )z3Serve the enterprise document management dashboard.r4   rh   r&   r"   r    r=   r=   «   ro   r"   z/v1/erp/dashboard/usersc                 ó    — t          d¦  «        S )z8Serve the user management and role assignment dashboard.zusers_dashboard.htmlrh   r&   r"   r    Úusers_dashboardrv   ²   s   € õ Ð3Ñ4Ô4Ð4r"   z/v1/erp/dashboard/settingsc                 ó    — t          d¦  «        S )z4Serve the enterprise global configuration dashboard.zsettings_dashboard.htmlrh   r&   r"   r    Úsettings_dashboardrx   ¸   ó   € õ Ð6Ñ7Ô7Ð7r"   Nz /v1/erp/settings/lmstudio-modelsc               ƒ  óJ  K  — 	 t          j        ¦   «         4 ƒd{V —†} |                      dd¬¦  «        ƒ d{V —†}|j        dk    rj|                     ¦   «         }g }|                     dg ¦  «        D ]&}|                     |d         |d         dœ¦  «         Œ'd	|d
œcddd¦  «        ƒd{V —† S dg d
œcddd¦  «        ƒd{V —† S # 1 ƒd{V —†swxY w Y   dS # t          $ r>}ddl}|                     d¦  «         	                    d|› �¦  «         dg d
œcY d}~S d}~ww xY w)z=Proxy endpoint to fetch available models from local LMStudio.Nzhttp://127.0.0.1:1234/v1/modelsg       @)ÚtimeoutrG   ÚdataÚid)ÚvalueÚlabelT)ÚsuccessÚmodelsFr   z
dscons.appz!Failed to fetch LMStudio models: )
ÚhttpxÚAsyncClientrc   rK   ÚjsonÚappendrP   ÚloggingÚ	getLoggerrB   )ÚclientÚrespr|   r�   ÚmodelÚer†   s          r    Úget_lmstudio_modelsrŒ   ¿   s2  è è € ð0ÝÔ$Ñ&Ô&ð 		4ð 		4ð 		4ð 		4ð 		4ð 		4ð 		4¨&ØŸšÐ$EÈs˜ÑSÔSÐSÐSÐSÐSÐSÐSˆDØÔ 3Ò&Ð&Ø—y’y‘{”{�Ø�Ø!ŸXšX f¨bÑ1Ô1ð Pð P�Eà—M’M¨E°$¬KÀ%ÈÄ+Ð"NÐ"NÑOÔOÐOÐOØ#'°6Ð:Ð:ð		4ð 		4ð 		4ð 		4ñ 		4ô 		4ð 		4ð 		4ð 		4ð 		4ð 		4ð 		4ð 		4ð 		4ð  %°Ð3Ð3ð		4ð 		4ð 		4ð 		4ñ 		4ô 		4ð 		4ð 		4ð 		4ð 		4ð 		4ð 		4ð 		4ð 		4ð 		4ð 		4ð 		4ð 		4ð 		4ð 		4ð 		4ð 		4ð 		4ð 		4øøøð 		4ð 		4ð 		4ð 		4ð 		4ð 		4øõ ð 0ð 0ð 0ØˆˆˆØ×Ò˜,Ñ'Ô'×-Ò-Ð.UÐRSÐ.UÐ.UÑVÔVÐVØ ¨BÐ/Ð/Ð/Ð/Ð/Ð/Ð/Ð/øøøøð0øøøsM   „C �B CÂC Â0CÂ4C Ã
CÃC ÃCÃC Ã
D"Ã$3DÄD"ÄD"z/v1/erp/dashboard/invoicesc                 ó    — t          d¦  «        S )z<Serve the enterprise e-invoice and tax management dashboard.zinvoices_dashboard.htmlrh   r&   r"   r    Úinvoices_dashboardrŽ   Ó   ry   r"   z/v1/erp/dashboard/bankingc                 ó    — t          d¦  «        S )zIServe the enterprise bank statement parsing and reconciliation dashboard.z%banking_reconciliation_dashboard.htmlrh   r&   r"   r    Ú banking_reconciliation_dashboardr�   Ù   s   € õ ÐDÑEÔEÐEr"   z/v1/erp/dashboard/customersz/v1/erp/dashboard/partnersz/v1/erp/dashboard/vendorsc                 ó    — t          d¦  «        S )zIServe the enterprise customers, partners and vendor management dashboard.zpartners_dashboard.htmlrh   r&   r"   r    Úpartners_dashboardr’   ß   s   € õ
 Ð6Ñ7Ô7Ð7r"   z/v1/erp/dashboard/zalo_crmc                 ó    — t          d¦  «        S )z$Serve the Zalo CRM module dashboard.zzalo_crm_dashboard.htmlrh   r&   r"   r    Úzalo_crm_dashboardr”   ç   ry   r"   z/v1/erp/dashboard/war-roomz/v1/erp/dashboard/financec                 ó    — t          d¦  «        S )zEServe the executive financial war room and cashflow runway dashboard.z!financial_war_room_dashboard.htmlrh   r&   r"   r    Úfinancial_war_room_dashboardr–   í   rs   r"   z#/v1/erp/dashboard/site-diary-mobilec                 ó    — t          d¦  «        S )z9Serve the mobile site diary and material requisition PWA.zsite_diary_mobile.htmlrh   r&   r"   r    Úsite_diary_mobile_pager˜   ô   s   € õ Ð5Ñ6Ô6Ð6r"   z/v1/erp/dashboard/agent-modelsz/v1/erp/dashboard/agentsz/v1/erp/dashboard/dhsc                 ó    — t          d¦  «        S )z]Serve the enterprise AI Agent Management, DeepSeek Harness (DHS) & Model Benchmark dashboard.r5   rh   r&   r"   r    Úagent_models_dashboardrš   ú   s   € õ
 Ð>Ñ?Ô?Ð?r"   z!/v1/erp/dashboard/material-pricesz+/v1/erp/dashboard/material-price-comparisonc                 ó    — t          d¦  «        S )z`Serve the State vs Market Material Price Comparison and Bidding Profit/Loss Benchmark dashboard.zmaterial_price_comparison.htmlrh   r&   r"   r    Úmaterial_price_comparison_pagerœ     ó   € õ Ð=Ñ>Ô>Ð>r"   z!/v1/erp/dashboard/drawing-takeoffz/v1/erp/dashboard/takeoffc                 ó    — t          d¦  «        S )z<Serve the AI Drawing Takeoff & Automated BoQ Extraction Hub.zdrawing_takeoff_dashboard.htmlrh   r&   r"   r    Údrawing_takeoff_pagerŸ   	  r�   r"   )r   r   r   r	   )r   r   )r   r   )r   r
   )r]   r   r   r   )r   r	   )2Ú__doc__Ú
__future__r   Úpathlibr   Úfastapir   r   r   Úfastapi.responsesr   r	   r
   r   Úapp.models.schemasr   Ú;app.modules.projects.application.project_management_servicer   ÚrouterÚ__file__ÚresolveÚparentsr   r!   rc   r'   r+   rZ   rf   ri   rk   rm   r9   r:   r;   r<   r=   rv   rx   r‚   rŒ   rŽ   r�   r’   r”   r–   r˜   rš   rœ   rŸ   r&   r"   r    ú<module>r«      s`  ðØ 0Ð 0à "Ð "Ð "Ð "Ð "Ð "à Ð Ð Ð Ð Ð à 0Ð 0Ð 0Ð 0Ð 0Ð 0Ð 0Ð 0Ð 0Ð 0Ø XÐ XÐ XÐ XÐ XÐ XÐ XÐ XÐ XÐ XÐ XÐ Xà -Ð -Ð -Ð -Ð -Ð -Ø `Ð `Ð `Ð `Ð `Ð `à	ˆ‰Œ€ØˆT�(‰^Œ^×#Ò#Ñ%Ô%Ô-¨aÔ0°8Ñ;€
ð
ð 
ð 
ð 
ð ‡‚ˆI nÈ€ÑNÔNØ‡‚ˆM¨.ÈE€ÑRÔRØ‡‚Ð¨^€Ñ<Ô<ðð ð ñ =Ô<ñ SÔRñ OÔNðð
 ‡‚ˆN¨e€Ñ4Ô4Ø‡‚ˆN¨e€Ñ4Ô4ðð ð ñ 5Ô4ñ 5Ô4ðð ‡‚ÐÑ Ô ð:ð :ð :ñ !Ô ð:ðz ‡‚ˆC €Ñ-Ô-ð-ð -ð -ñ .Ô-ð-ð ‡‚ˆJ |€Ñ4Ô4ð-ð -ð -ñ 5Ô4ð-ð
 ‡‚Ð°€Ñ=Ô=Ø‡‚ˆM¨,È%€ÑPÔPð+ð +ð +ñ QÔPñ >Ô=ð+ð
 ‡‚ˆO¨L€Ñ9Ô9ð+ð +ð +ñ :Ô9ð+ð
 ‡‚Ð)¸,€ÑGÔGØ‡‚Ð°€Ñ=Ô=ð9ð 9ð 9ñ >Ô=ñ HÔGð9ð
 ‡‚Ð)¸,€ÑGÔGØ‡‚Ð*¸<€ÑHÔHð=ð =ð =ñ IÔHñ HÔGð=ð
 ‡‚Ð)¸,€ÑGÔGð9ð 9ð 9ñ HÔGð9ð
 ‡‚Ð(¸€ÑFÔFØ‡‚Ð#°L€ÑAÔAðBð Bð Bñ BÔAñ GÔFðBð
 ‡‚Ð)¸,€ÑGÔGØ‡‚Ð)¸,€ÑGÔGð9ð 9ð 9ñ HÔGñ HÔGð9ð
 ‡‚Ð%°l€ÑCÔCð5ð 5ð 5ñ DÔCð5ð
 ‡‚Ð(¸€ÑFÔFð8ð 8ð 8ñ GÔFð8ð €€€à‡‚Ð.Ñ/Ô/ð0ð 0ñ 0Ô/ð0ð& ‡‚Ð(¸€ÑFÔFð8ð 8ð 8ñ GÔFð8ð
 ‡‚Ð'¸€ÑEÔEðFð Fð Fñ FÔEðFð
 ‡‚Ð)¸,€ÑGÔGØ‡‚Ð(¸€ÑFÔFØ‡‚Ð'¸€ÑEÔEð8ð 8ð 8ñ FÔEñ GÔFñ HÔGð8ð
 ‡‚Ð(¸€ÑFÔFð8ð 8ð 8ñ GÔFð8ð
 ‡‚Ð(¸€ÑFÔFØ‡‚Ð'¸€ÑEÔEðBð Bð Bñ FÔEñ GÔFðBð
 ‡‚Ð1À,€ÑOÔOð7ð 7ð 7ñ PÔOð7ð
 ‡‚Ð,¸\€ÑJÔJØ‡‚Ð&°|€ÑDÔDØ‡‚Ð#°L€ÑAÔAð@ð @ð @ñ BÔAñ EÔDñ KÔJð@ð
 ‡‚Ð/À€ÑMÔMØ‡‚Ð9È,€ÑWÔWð?ð ?ð ?ñ XÔWñ NÔMð?ð
 ‡‚Ð/À€ÑMÔMØ‡‚Ð'¸€ÑEÔEð?ð ?ð ?ñ FÔEñ NÔMð?ð ?ð ?r"   