-- PostgreSQL VIEW un rezultāta atlase.
-- Faila nosaukums ir saskaņots ar prefiksu Demidovs.

CREATE OR REPLACE VIEW v_demidovs_result_1 AS
WITH section_rows AS (
    SELECT
        s.sort_order * 10000 AS row_order,
        s.section_name AS row_title,
        NULL::varchar(30) AS poz_nr,
        NULL::text AS darbu_veids,
        NULL::varchar(30) AS mervien,
        NULL::numeric(12,2) AS daudzums,
        NULL::numeric(12,2) AS cena_ls,
        NULL::numeric(12,2) AS kopejas_izmaksas_ls
    FROM work_sections s
),
subsection_rows AS (
    SELECT
        s.sort_order * 10000 + ss.sort_order * 100 AS row_order,
        ss.subsection_name AS row_title,
        NULL::varchar(30) AS poz_nr,
        NULL::text AS darbu_veids,
        NULL::varchar(30) AS mervien,
        NULL::numeric(12,2) AS daudzums,
        NULL::numeric(12,2) AS cena_ls,
        NULL::numeric(12,2) AS kopejas_izmaksas_ls
    FROM work_subsections ss
    JOIN work_sections s ON s.section_id = ss.section_id
),
item_rows AS (
    SELECT
        s.sort_order * 10000 + ss.sort_order * 100 + i.sort_order AS row_order,
        NULL::text AS row_title,
        CASE
            WHEN i.position_detail IS NOT NULL THEN i.position_code || ' ' || i.position_detail
            ELSE i.position_code
        END AS poz_nr,
        i.work_description AS darbu_veids,
        mu.unit_code AS mervien,
        i.quantity AS daudzums,
        i.price_ls AS cena_ls,
        COALESCE(i.quantity * i.price_ls, 0.00)::numeric(12,2) AS kopejas_izmaksas_ls
    FROM work_items i
    JOIN work_subsections ss ON ss.subsection_id = i.subsection_id
    JOIN work_sections s ON s.section_id = ss.section_id
    JOIN measurement_units mu ON mu.unit_id = i.unit_id
)
SELECT
    row_order,
    row_title,
    poz_nr,
    darbu_veids,
    mervien,
    daudzums,
    cena_ls,
    kopejas_izmaksas_ls
FROM section_rows
UNION ALL
SELECT
    row_order,
    row_title,
    poz_nr,
    darbu_veids,
    mervien,
    daudzums,
    cena_ls,
    kopejas_izmaksas_ls
FROM subsection_rows
UNION ALL
SELECT
    row_order,
    row_title,
    poz_nr,
    darbu_veids,
    mervien,
    daudzums,
    cena_ls,
    kopejas_izmaksas_ls
FROM item_rows
ORDER BY row_order;

COMMENT ON VIEW v_demidovs_result_1 IS 'Skats gala rezultāta attēlošanai formātā, kas ir pēc iespējas tuvāks Excel variantam. Skats apvieno sadaļu rindas, apakšsadaļu rindas un detalizētās darbu pozīcijas vienā sakārtotā rezultātā.';
COMMENT ON COLUMN v_demidovs_result_1.row_order IS 'Tehniskais kārtošanas lauks, kas nosaka rindu secību gala rezultātā.';
COMMENT ON COLUMN v_demidovs_result_1.row_title IS 'Sadaļas vai apakšsadaļas nosaukums. Pozīciju rindām šis lauks ir NULL.';
COMMENT ON COLUMN v_demidovs_result_1.poz_nr IS 'Pozīcijas numurs gala izvadē. Ja ir papildu kods, tas tiek pievienots pie pozīcijas numura.';
COMMENT ON COLUMN v_demidovs_result_1.darbu_veids IS 'Darbu veida apraksts gala izvadē. Sadaļu un apakšsadaļu rindām šis lauks ir NULL.';
COMMENT ON COLUMN v_demidovs_result_1.mervien IS 'Mērvienības saīsinājums, kas ņemts no tabulas measurement_units.';
COMMENT ON COLUMN v_demidovs_result_1.daudzums IS 'Darbu daudzums gala izvadē.';
COMMENT ON COLUMN v_demidovs_result_1.cena_ls IS 'Vienības cena latos, ja tā ir pieejama avota datos.';
COMMENT ON COLUMN v_demidovs_result_1.kopejas_izmaksas_ls IS 'Aprēķinātās kopējās izmaksas latos. Ja cena nav zināma, rezultātā tiek attēlots 0.00.';

SELECT
    row_title,
    poz_nr,
    darbu_veids,
    mervien,
    daudzums,
    cena_ls,
    kopejas_izmaksas_ls
FROM v_demidovs_result_1;
