§
    YŸ’jà  ã                  óà   — d dl mZ d dlZd dlmZmZ d dlmZ d dlmZ d dl	m
Z
 d dlmZ d dlmZ d d	lmZ d d
lmZ ddlmZ ddlmZ ddlmZ  ej        d¦  «        Z G d„ dee¦  «        ZdS )é    )ÚannotationsN)ÚdatetimeÚtimezone)ÚAny)ÚPostgresClient)ÚCompanyOperationalStateResponse)ÚEmployeeLogsService)ÚOperationsCaseManagementService)ÚProjectManagementService)ÚRemediationPlanningServiceé   )ÚCompanyStateDelegationsMixin)ÚCompanyStateSafeFetchersMixin)Úmerge_messageszdscons.company_state.corec                  ó.   — e Zd ZdZ	 	 	 	 	 ddd„Zdd„ZdS )ÚCompanyOperationalStateServicezWBuild a consolidated operational state across projects, workforce, and dossier reviews.NÚpostgres_clientúPostgresClient | NoneÚproject_management_serviceúProjectManagementService | NoneÚemployee_logs_serviceúEmployeeLogsService | NoneÚ"operations_case_management_serviceú&OperationsCaseManagementService | NoneÚremediation_planning_serviceú!RemediationPlanningService | NoneÚreturnÚNonec                ó  — |pt          ¦   «         | _        |pt          | j        ¦  «        | _        |pt	          | j        ¦  «        | _        |pt          | j        ¦  «        | _        |pt          | j        ¦  «        | _	        d S ©N)
r   Ú_postgres_clientr   Ú_project_management_servicer	   Ú_employee_logs_servicer
   Ú#_operations_case_management_servicer   Ú_remediation_planning_service)Úselfr   r   r   r   r   s         ú=C:\Projects\DSCons\app\modules\operations\application\core.pyÚ__init__z'CompanyOperationalStateService.__init__   s¡   € ð !0Ð Cµ>Ñ3CÔ3CˆÔà&ð ?Ý'¨Ô(=Ñ>Ô>ð 	Ô(ð '<ð '
Õ?RØÔ!ñ@
ô @
ˆÔ#ð /ð FÝ.¨tÔ/DÑEÔEð 	Ô0ð
 )ð AÝ)¨$Ô*?Ñ@Ô@ð 	Ô*Ð*Ð*ó    r   c                óÀ  ‡ — t          j        t          j        ¦  «                             ¦   «                              dd¦  «        }‰                      ¦   «         }‰                      ¦   «         }‰                      ¦   «         \  }}}}‰  	                    ¦   «         }‰  
                    ¦   «         }	‰                      ¦   «         }
‰                      ¦   «         }ˆ fd„|j        D ¦   «         }‰                      |j        |¦  «        }‰                      |j        ||
j        ¬¦  «        }‰                      |j        ||	j        ¬¦  «        }‰                      |j        ¦  «        }‰                      ||||||j        |	j        |¬¦  «        }‰                      ||||||||	|
|¬¦
  «
        }t)          d„ |D ¦   «         ¦  «        }‰                      |j        |j        ||j        |	j        |
j        |j        ¦  «        }|d	|||||||||d
œ}‰                      |||	|
||¬¦  «        \  }}‰                      ||¦  «         t3          ||¦  «        }|�||d<   t5          di |¤ŽS )u-   Tráº£ tráº¡ng thÃ¡i váº­n hÃ nh tá»•ng há»£p.z+00:00ÚZc                ó:   •— g | ]}‰                      |¦  «        ‘ŒS © )Ú_build_project_state)Ú.0Úitemr&   s     €r'   ú
<listcomp>zPCompanyOperationalStateService.get_company_operational_state.<locals>.<listcomp>D   s'   ø€ ÐWÐWÐW¸�D×-Ò-¨dÑ3Ô3ÐWÐWÐWr)   )ÚprojectsÚdossier_reviewsÚoperations_blockers)r2   r3   Úoperations_actions)r2   ÚrisksÚblocked_itemsÚbacklogÚ	workforceÚoperations_casesr5   r3   )
Úproject_responseÚemployee_responseÚdossier_responseÚdossier_sourceÚdossier_used_fallbackÚdossier_messageÚoperations_cases_responseÚoperations_actions_responseÚoperations_blockers_responseÚremediation_responsec              3  ó$   K  — | ]}|j         V — Œd S r    )Úused_fallback)r/   r0   s     r'   ú	<genexpr>zOCompanyOperationalStateService.get_company_operational_state.<locals>.<genexpr>g   s%   è è € ÐIÐI°4˜DÔ.ÐIÐIÐIÐIÐIÐIr)   Ú
aggregated)Úgenerated_atÚsourcerF   Úsummaryr2   r6   r7   r8   r9   Úsource_statusÚmessage)rK   rA   rB   rC   rD   r=   NrM   r-   )r   Únowr   ÚutcÚ	isoformatÚreplaceÚ!_safe_get_project_management_dataÚ_safe_get_employee_logsÚ_fetch_dossier_reviewsÚ_safe_list_operations_casesÚ_safe_list_operations_actionsÚ_safe_list_operations_blockersÚ_safe_list_remediation_plansÚitemsÚ_build_risksÚ_build_blocked_itemsÚ_build_backlogÚ_build_workforceÚ_build_summaryÚ_build_source_status_listÚanyÚ_build_response_messagerM   Ú!_build_optional_top_level_payloadÚ!_attach_supported_optional_fieldsr   r   )r&   rI   r;   r<   r=   r>   r?   r@   rA   rB   rC   rD   r2   r6   r7   r8   r9   rK   rL   rF   rM   Úresponse_payloadÚoptional_payloadÚoptional_messageÚfinal_messages   `                        r'   Úget_company_operational_statez<CompanyOperationalStateService.get_company_operational_state7   sä  ø€ å”|¥H¤LÑ1Ô1×;Ò;Ñ=Ô=×EÒEÀhÐPSÑTÔTˆØ×AÒAÑCÔCÐØ ×8Ò8Ñ:Ô:Ðà×'Ò'Ñ)Ô)ñ 	QÐ˜.Ð*?Àð %)×$DÒ$DÑ$FÔ$FÐ!Ø&*×&HÒ&HÑ&JÔ&JÐ#Ø'+×'JÒ'JÑ'LÔ'LÐ$Ø#×@Ò@ÑBÔBÐàWÐWÐWÐWÐ@PÔ@VÐWÑWÔWˆØ×!Ò!Ð"2Ô"8Ð:JÑKÔKˆØ×1Ò1Ø%Ô+Ø,Ø <Ô Bð 2ñ 
ô 
ˆð
 ×%Ò%Ø%Ô+Ø,Ø:Ô@ð &ñ 
ô 
ˆð
 ×)Ò)Ð*;Ô*AÑBÔBˆ	Ø×%Ò%ØØØ'ØØØ6Ô<Ø:Ô@Ø,ð &ñ 	
ô 	
ˆð ×6Ò6Ø-Ø/Ø-Ø)Ø"7Ø+Ø&?Ø(CØ)EØ!5ð 7ñ 
ô 
ˆõ ÐIÐI¸=ÐIÑIÔIÑIÔIˆØ×.Ò.ØÔ$ØÔ%ØØ%Ô-Ø'Ô/Ø(Ô0Ø Ô(ñ
ô 
ˆð )Ø"Ø*ØØ ØØ*ØØ"Ø*Øð,
ð ,
Ðð .2×-SÒ-SØØ&?Ø(CØ)EØ!5Ø-ð .Tñ .
ô .
Ñ*ÐÐ*ð 	×.Ò.Ð/?ÐAQÑRÔRÐRÝ& wÐ0@ÑAÔAˆØÐ$Ø*7Ð˜YÑ'Ý.ÐBÐBÐ1AÐBÐBÐBr)   )NNNNN)r   r   r   r   r   r   r   r   r   r   r   r   )r   r   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__r(   rh   r-   r)   r'   r   r      sg   € € € € € ð bÐað 26ØFJØ<@àØJNð
ð 
ð 
ð 
ð 
ð4TCð TCð TCð TCð TCð TCr)   r   )Ú
__future__r   Úloggingr   r   Útypingr   Úapp.core.postgresr   Úapp.models.schemasr   Ú2app.modules.core.application.employee_logs_servicer	   ÚEapp.modules.operations.application.operations_case_management_servicer
   Ú;app.modules.projects.application.project_management_servicer   Ú9app.modules.core.application.remediation_planning_servicer   Úcore_delegationsr   Úcore_safe_fetchersr   Úhelpersr   Ú	getLoggerÚloggerr   r-   r)   r'   ú<module>r{      sZ  ðØ "Ð "Ð "Ð "Ð "Ð "à €€€Ø 'Ð 'Ð 'Ð 'Ð 'Ð 'Ð 'Ð 'Ø Ð Ð Ð Ð Ð à ,Ð ,Ð ,Ð ,Ð ,Ð ,Ø >Ð >Ð >Ð >Ð >Ð >Ø RÐ RÐ RÐ RÐ RÐ Rðð ð ð ð ð ð aÐ `Ð `Ð `Ð `Ð `Ø `Ð `Ð `Ð `Ð `Ð `à :Ð :Ð :Ð :Ð :Ð :Ø =Ð =Ð =Ð =Ð =Ð =Ø #Ð #Ð #Ð #Ð #Ð #à	ˆÔ	Ð6Ñ	7Ô	7€ðtCð tCð tCð tCð tCØ!Ø ñtCô tCð tCð tCð tCr)   