§
    s�’j�  ã                  ó,   — d dl mZ  G d„ d¦  «        ZdS )é    )Úannotationsc                  ó   — e Zd ZdZdd„ZdS )ÚBasePostgresPilotMixinz'Legacy employee work log queries mixin.ÚreturnÚstrc                 ó   — dS )z5SQL fallback query using the legacy pilot log source.uÿ  
            SELECT
                COALESCE(employee_code, CONCAT('EMP-', employee_id::text), 'EMP-UNKNOWN') AS employee_code,
                COALESCE(employee_name, 'ChÆ°a cáº­p nháº­t') AS employee_name,
                COALESCE(role_title, 'ChÆ°a cáº­p nháº­t') AS role_title,
                COALESCE(agent_role, role_group, 'Theo dÃµi pilot') AS agent_role,
                COALESCE(project_code, '') AS project_code,
                COALESCE(project_name, 'ChÆ°a gÃ¡n dá»± Ã¡n') AS project_name,
                COALESCE(status, 'Ä�ang theo dÃµi') AS status,
                COALESCE(TO_CHAR(shift_date, 'YYYY-MM-DD'), TO_CHAR(CURRENT_DATE, 'YYYY-MM-DD')) AS shift_date,
                COALESCE(summary, 'ChÆ°a cÃ³ tÃ³m táº¯t ca lÃ m viá»‡c pilot.') AS summary,
                COALESCE(priority, 'Trung bÃ¬nh') AS priority,
                COALESCE(role_group, agent_role, 'ChÆ°a phÃ¢n nhÃ³m') AS role_group,
                COALESCE(next_priority, 'ChÆ°a xÃ¡c Ä‘á»‹nh Æ°u tiÃªn tiáº¿p theo') AS next_priority,
                COALESCE(progress_percent, 0) AS progress_percent,
                COALESCE(completed_count, 0) AS completed_count,
                COALESCE(missing_count, 0) AS missing_count,
                COALESCE(findings::jsonb, '[]'::jsonb) AS findings,
                COALESCE(missing_items::jsonb, '[]'::jsonb) AS missing_items,
                COALESCE(notes::jsonb, '[]'::jsonb) AS notes,
                COALESCE(logs::jsonb, '[]'::jsonb) AS logs
            FROM (
                SELECT
                    base.employee_id,
                    base.project_id,
                    base.employee_code,
                    base.employee_name,
                    base.role_title,
                    base.agent_role,
                    base.project_code,
                    base.project_name,
                    base.status,
                    base.shift_date,
                    base.summary,
                    base.priority,
                    base.role_group,
                    base.next_priority,
                    base.progress_percent,
                    base.completed_count,
                    base.missing_count,
                    summary_lists.findings,
                    summary_lists.missing_items,
                    summary_lists.notes,
                    detail_logs.logs
                FROM (
                    SELECT DISTINCT ON (l.employee_id)
                        l.employee_id,
                        l.project_id,
                        COALESCE(e.employee_code, CONCAT('EMP-', l.employee_id::text)) AS employee_code,
                        COALESCE(e.full_name, 'ChÆ°a cáº­p nháº­t') AS employee_name,
                        COALESCE(e.job_title, 'ChÆ°a cáº­p nháº­t') AS role_title,
                        COALESCE(e.department, l.role_group, 'Theo dÃµi pilot') AS agent_role,
                        COALESCE(p.project_code, '') AS project_code,
                        COALESCE(p.project_name, 'ChÆ°a gÃ¡n dá»± Ã¡n') AS project_name,
                        COALESCE(l.status, 'Ä�ang theo dÃµi') AS status,
                        l.shift_date,
                        COALESCE(l.summary, 'ChÆ°a cÃ³ tÃ³m táº¯t ca lÃ m viá»‡c pilot.') AS summary,
                        COALESCE(l.priority, 'Trung bÃ¬nh') AS priority,
                        COALESCE(l.role_group, 'ChÆ°a phÃ¢n nhÃ³m') AS role_group,
                        COALESCE(l.next_priority, 'ChÆ°a xÃ¡c Ä‘á»‹nh Æ°u tiÃªn tiáº¿p theo') AS next_priority,
                        COALESCE(l.progress_percent, 0) AS progress_percent,
                        COALESCE(l.completed_count, 0) AS completed_count,
                        COALESCE(l.missing_count, 0) AS missing_count
                    FROM employee_pilot_logs l
                    LEFT JOIN employees e ON e.id = l.employee_id
                    LEFT JOIN projects p ON p.id = l.project_id
                    ORDER BY l.employee_id, l.shift_date DESC, l.action_timestamp DESC, l.created_at DESC, l.id DESC
                ) base
                LEFT JOIN LATERAL (
                    SELECT
                        json_agg(DISTINCT finding.value) FILTER (WHERE finding.value IS NOT NULL) AS findings,
                        json_agg(DISTINCT missing_item.value) FILTER (WHERE missing_item.value IS NOT NULL) AS missing_items,
                        json_agg(DISTINCT note_item.value) FILTER (WHERE note_item.value IS NOT NULL) AS notes
                    FROM employee_pilot_logs l
                    LEFT JOIN LATERAL jsonb_array_elements_text(
                        CASE
                            WHEN jsonb_typeof(COALESCE(l.findings::jsonb, '[]'::jsonb)) = 'array' THEN COALESCE(l.findings::jsonb, '[]'::jsonb)
                            ELSE '[]'::jsonb
                        END
                    ) AS finding(value) ON TRUE
                    LEFT JOIN LATERAL jsonb_array_elements_text(
                        CASE
                            WHEN jsonb_typeof(COALESCE(l.missing_items::jsonb, '[]'::jsonb)) = 'array' THEN COALESCE(l.missing_items::jsonb, '[]'::jsonb)
                            ELSE '[]'::jsonb
                        END
                    ) AS missing_item(value) ON TRUE
                    LEFT JOIN LATERAL jsonb_array_elements_text(
                        CASE
                            WHEN jsonb_typeof(COALESCE(l.notes::jsonb, '[]'::jsonb)) = 'array' THEN COALESCE(l.notes::jsonb, '[]'::jsonb)
                            ELSE '[]'::jsonb
                        END
                    ) AS note_item(value) ON TRUE
                    WHERE l.employee_id = base.employee_id
                      AND l.project_id = base.project_id
                      AND l.shift_date = base.shift_date
                ) summary_lists ON TRUE
                LEFT JOIN LATERAL (
                    SELECT jsonb_agg(
                        jsonb_build_object(
                            'timestamp', COALESCE(TO_CHAR(log_item.action_timestamp, 'HH24:MI'), ''),
                            'action', COALESCE(log_item.action, 'Cáº­p nháº­t pilot'),
                            'ai_request', to_jsonb(log_item.ai_request),
                            'ai_result', CASE
                                WHEN jsonb_typeof(COALESCE(log_item.ai_result::jsonb, '[]'::jsonb)) = 'array' THEN COALESCE(log_item.ai_result::jsonb, '[]'::jsonb)
                                ELSE jsonb_build_array(log_item.ai_result::text)
                            END,
                            'findings', CASE
                                WHEN jsonb_typeof(COALESCE(log_item.findings::jsonb, '[]'::jsonb)) = 'array' THEN COALESCE(log_item.findings::jsonb, '[]'::jsonb)
                                ELSE jsonb_build_array(log_item.findings::text)
                            END,
                            'notes', CASE
                                WHEN jsonb_typeof(COALESCE(log_item.notes::jsonb, '[]'::jsonb)) = 'array' THEN COALESCE(log_item.notes::jsonb, '[]'::jsonb)
                                ELSE jsonb_build_array(log_item.notes::text)
                            END
                        )
                        ORDER BY log_item.shift_date DESC, log_item.action_timestamp DESC, log_item.created_at DESC, log_item.id DESC
                    ) AS logs
                    FROM employee_pilot_logs log_item
                    WHERE log_item.employee_id = base.employee_id
                      AND log_item.project_id = base.project_id
                      AND log_item.shift_date = base.shift_date
                ) detail_logs ON TRUE
            ) aggregated
            ORDER BY employee_code
        © r	   ó    ú>C:\Projects\DSCons\app\core\postgres\base_pkg\pilot_queries.pyÚ_employee_pilot_logs_queryz1BasePostgresPilotMixin._employee_pilot_logs_query   s   € ð|ð |r
   N)r   r   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r	   r
   r   r   r      s4   € € € € € Ø1Ð1ð~ð ~ð ~ð ~ð ~ð ~r
   r   N)Ú
__future__r   r   r	   r
   r   ú<module>r      sS   ðØ "Ð "Ð "Ð "Ð "Ð "ðAð Að Að Að Añ Aô Að Að Að Ar
   