-- ============================================================
--  Rēķinu Datubāze — Vaicājumi rēķina formāta izgūšanai
--  MySQL versija
-- ============================================================


-- ============================================================
--  VIEW 1: v_rekina_rindas
--  Rēķina pozīciju rindas ar visiem laukiem
-- ============================================================

CREATE OR REPLACE VIEW v_rekina_rindas AS
SELECT
    r.rekina_id,
    r.rekina_numurs,
    r.datums,
    r.apmaksas_termins,
    r.statuss,

    pas.nosaukums           AS pasutitajs_nosaukums,
    pas.reg_numurs          AS pasutitajs_reg_nr,
    pas.pvn_numurs          AS pasutitajs_pvn_nr,
    pas.adrese              AS pasutitajs_adrese,

    izp.nosaukums           AS izpilditajs_nosaukums,
    izp.reg_numurs          AS izpilditajs_reg_nr,
    izp.adrese              AS izpilditajs_adrese,
    izp.banka               AS izpilditajs_banka,
    izp.konta_numurs        AS izpilditajs_konts,

    pr.nosaukums            AS projekts_nosaukums,
    pr.lieta_numurs         AS projekts_lieta_nr,

    rr.karta_numurs,
    p.kods                  AS pozicija_kods,
    p.nosaukums             AS darba_nosaukums,
    p.mervieniba,
    p.spec_numurs,

    rr.daudzums,
    rr.vienibas_cena,
    rr.summa,
    rr.piezimes

FROM RekinsRindas rr
JOIN Rekini        r   ON r.rekina_id        = rr.rekina_id
JOIN Pasutitaji    pas ON pas.pasutitajs_id   = r.pasutitajs_id
JOIN Izpilditaji   izp ON izp.izpilditajs_id  = r.izpilditajs_id
LEFT JOIN Projekti pr  ON pr.projekts_id     = r.projekts_id
JOIN Pozicijas     p   ON p.pozicija_id      = rr.pozicija_id;


-- ============================================================
--  VIEW 2: v_rekina_kopsavilkums
--  Finanšu kopsavilkums katram rēķinam
-- ============================================================

CREATE OR REPLACE VIEW v_rekina_kopsavilkums AS
SELECT
    r.rekina_id,
    r.rekina_numurs,
    r.datums,
    r.apmaksas_termins,
    r.statuss,

    pas.nosaukums                                                   AS pasutitajs,
    izp.nosaukums                                                   AS izpilditajs,
    pr.nosaukums                                                    AS projekts,

    ROUND(tm.tiesasMaksas, 2)                                       AS `Kopā tiešās izmaksas`,
    ROUND(tm.tiesasMaksas * 0.05, 2)                                AS `Virsizdevumi (5%)`,
    ROUND(tm.tiesasMaksas * 0.05 * 0.50, 2)                        AS `t.sk. darba aizsardzība`,
    ROUND(tm.tiesasMaksas * 0.02, 2)                                AS `Peļņa (2%)`,
    ROUND(tm.tiesasMaksas * 0.2409, 2)                              AS `Darba devēja soc. nodoklis (24.09%)`,
    ROUND(
        tm.tiesasMaksas
        + tm.tiesasMaksas * 0.05
        + tm.tiesasMaksas * 0.02
        + tm.tiesasMaksas * 0.2409,
    2)                                                              AS `Kopā bez PVN`,
    ROUND((
        tm.tiesasMaksas
        + tm.tiesasMaksas * 0.05
        + tm.tiesasMaksas * 0.02
        + tm.tiesasMaksas * 0.2409
    ) * 0.21, 2)                                                    AS `PVN 21%`,
    ROUND((
        tm.tiesasMaksas
        + tm.tiesasMaksas * 0.05
        + tm.tiesasMaksas * 0.02
        + tm.tiesasMaksas * 0.2409
    ) * 1.21, 2)                                                    AS `Pavisam kopā`

FROM Rekini r
JOIN (
    SELECT rekina_id, SUM(summa) AS tiesasMaksas
    FROM RekinsRindas
    GROUP BY rekina_id
) tm ON tm.rekina_id = r.rekina_id
JOIN Pasutitaji     pas ON pas.pasutitajs_id   = r.pasutitajs_id
JOIN Izpilditaji    izp ON izp.izpilditajs_id  = r.izpilditajs_id
LEFT JOIN Projekti  pr  ON pr.projekts_id     = r.projekts_id;


-- ============================================================
--  QUERY: Pilns rēķins — tāmes formāts ar kopsavilkumu
--
--  MySQL 8.0+ atbalsta WITH (CTE).
--  Ja izmantojat MySQL 5.7, lietojiet versiju zemāk (bez WITH).
-- ============================================================

-- ── MySQL 8.0+ versija (ar CTE) ──────────────────────────────────────────

WITH tiesasMaksas AS (
    SELECT rekina_id, SUM(summa) AS summa
    FROM RekinsRindas
    GROUP BY rekina_id
),
kopsavilkums AS (
    SELECT
        r.rekina_id,
        tm.summa                                                    AS tiesasMaksas,
        ROUND(tm.summa * 0.05,   2)                                 AS virsizdevumi,
        ROUND(tm.summa * 0.05 * 0.50, 2)                           AS darba_aizsardziba,
        ROUND(tm.summa * 0.02,   2)                                 AS pelna,
        ROUND(tm.summa * 0.2409, 2)                                 AS soc_nodoklis,
        ROUND(tm.summa + tm.summa*0.05
              + tm.summa*0.02 + tm.summa*0.2409, 2)                AS kopa_bez_pvn,
        ROUND((tm.summa + tm.summa*0.05
               + tm.summa*0.02 + tm.summa*0.2409) * 0.21, 2)      AS pvn,
        ROUND((tm.summa + tm.summa*0.05
               + tm.summa*0.02 + tm.summa*0.2409) * 1.21, 2)      AS pavisam_kopa
    FROM Rekini r
    JOIN tiesasMaksas tm ON tm.rekina_id = r.rekina_id
)

SELECT * FROM (

    -- ── Virsraksts ─────────────────────────────────────────────────────
    SELECT
        'VIRSRAKSTS'            AS rindas_veids,
        NULL                    AS karta_nr,
        NULL                    AS kods,
        pr.nosaukums            AS apraksts,
        NULL                    AS mervieniba,
        NULL                    AS daudzums,
        NULL                    AS vienibas_cena,
        NULL                    AS summa,
        0                       AS sort_key
    FROM Rekini r
    JOIN Projekti pr ON pr.projekts_id = r.projekts_id
    WHERE r.rekina_id = 1

    UNION ALL

    -- ── Metadati: rēķina numurs, datumi ────────────────────────────────
    SELECT
        'META',
        NULL,
        NULL,
        CONCAT('Rēķins: ', r.rekina_numurs,
               '  |  Datums: ', DATE_FORMAT(r.datums, '%d.%m.%Y'),
               '  |  Apmaksāt līdz: ', DATE_FORMAT(r.apmaksas_termins, '%d.%m.%Y'),
               '  |  Statuss: ', r.statuss),
        NULL, NULL, NULL, NULL,
        1
    FROM Rekini r
    WHERE r.rekina_id = 1

    UNION ALL

    -- ── Metadati: pasūtītājs ────────────────────────────────────────────
    SELECT
        'META', NULL, NULL,
        CONCAT('Pasūtītājs: ', pas.nosaukums,
               '  (Reģ. Nr. ', COALESCE(pas.reg_numurs, '—'), ')'),
        NULL, NULL, NULL, NULL,
        2
    FROM Rekini r
    JOIN Pasutitaji pas ON pas.pasutitajs_id = r.pasutitajs_id
    WHERE r.rekina_id = 1

    UNION ALL

    -- ── Metadati: izpildītājs ───────────────────────────────────────────
    SELECT
        'META', NULL, NULL,
        CONCAT('Izpildītājs: ', izp.nosaukums,
               '  (Reģ. Nr. ', COALESCE(izp.reg_numurs, '—'), ')'),
        NULL, NULL, NULL, NULL,
        3
    FROM Rekini r
    JOIN Izpilditaji izp ON izp.izpilditajs_id = r.izpilditajs_id
    WHERE r.rekina_id = 1

    UNION ALL

    -- ── Kolonnu virsraksti ──────────────────────────────────────────────
    SELECT 'HEADER', NULL, 'Izmaksu pozīcija', 'Darba nosaukums',
           'Mēra vienība', NULL, NULL, NULL, 4

    UNION ALL

    -- ── Pozīciju rindas ────────────────────────────────────────────────
    SELECT
        'RINDA',
        rr.karta_numurs,
        p.kods,
        p.nosaukums,
        p.mervieniba,
        rr.daudzums,
        rr.vienibas_cena,
        rr.summa,
        10 + rr.karta_numurs
    FROM RekinsRindas rr
    JOIN Pozicijas p ON p.pozicija_id = rr.pozicija_id
    WHERE rr.rekina_id = 1

    UNION ALL

    -- ── Kopsavilkuma rindas ─────────────────────────────────────────────
    SELECT 'KOPA', NULL, NULL, 'Kopā tiešās izmaksas',                   NULL, NULL, NULL, k.tiesasMaksas,      100 FROM kopsavilkums k WHERE k.rekina_id = 1
    UNION ALL
    SELECT 'KOPA', NULL, NULL, 'Virsizdevumi (5%)',                      NULL, NULL, NULL, k.virsizdevumi,      101 FROM kopsavilkums k WHERE k.rekina_id = 1
    UNION ALL
    SELECT 'KOPA', NULL, NULL, '  t.sk. darba aizsardzība',              NULL, NULL, NULL, k.darba_aizsardziba, 102 FROM kopsavilkums k WHERE k.rekina_id = 1
    UNION ALL
    SELECT 'KOPA', NULL, NULL, 'Peļņa (2%)',                             NULL, NULL, NULL, k.pelna,             103 FROM kopsavilkums k WHERE k.rekina_id = 1
    UNION ALL
    SELECT 'KOPA', NULL, NULL, 'Darba devēja sociālais nodoklis (24.09%)', NULL, NULL, NULL, k.soc_nodoklis,    104 FROM kopsavilkums k WHERE k.rekina_id = 1
    UNION ALL
    SELECT 'KOPA', NULL, NULL, 'Kopā',                                   NULL, NULL, NULL, k.kopa_bez_pvn,      105 FROM kopsavilkums k WHERE k.rekina_id = 1
    UNION ALL
    SELECT 'KOPA', NULL, NULL, 'PVN 21%',                                NULL, NULL, NULL, k.pvn,               106 FROM kopsavilkums k WHERE k.rekina_id = 1
    UNION ALL
    SELECT 'KOPA', NULL, NULL, 'Pavisam kopā',                           NULL, NULL, NULL, k.pavisam_kopa,      107 FROM kopsavilkums k WHERE k.rekina_id = 1

) AS rekina_dati
ORDER BY sort_key;


-- ============================================================
--  MySQL 5.7 versija (bez CTE — subquery vietā)
--  Lietojiet šo, ja jūsu MySQL versija ir vecāka par 8.0
-- ============================================================

/*

SELECT * FROM (

    SELECT 'VIRSRAKSTS' AS rindas_veids, NULL AS karta_nr, NULL AS kods,
           pr.nosaukums AS apraksts, NULL AS mervieniba,
           NULL AS daudzums, NULL AS vienibas_cena, NULL AS summa, 0 AS sort_key
    FROM Rekini r JOIN Projekti pr ON pr.projekts_id = r.projekts_id
    WHERE r.rekina_id = 1

    UNION ALL

    SELECT 'META', NULL, NULL,
           CONCAT('Rēķins: ', r.rekina_numurs,
                  '  |  Datums: ', DATE_FORMAT(r.datums, '%d.%m.%Y'),
                  '  |  Apmaksāt līdz: ', DATE_FORMAT(r.apmaksas_termins, '%d.%m.%Y'),
                  '  |  Statuss: ', r.statuss),
           NULL, NULL, NULL, NULL, 1
    FROM Rekini r WHERE r.rekina_id = 1

    UNION ALL

    SELECT 'META', NULL, NULL,
           CONCAT('Pasūtītājs: ', pas.nosaukums, '  (Reģ. Nr. ', COALESCE(pas.reg_numurs,'—'), ')'),
           NULL, NULL, NULL, NULL, 2
    FROM Rekini r JOIN Pasutitaji pas ON pas.pasutitajs_id = r.pasutitajs_id
    WHERE r.rekina_id = 1

    UNION ALL

    SELECT 'META', NULL, NULL,
           CONCAT('Izpildītājs: ', izp.nosaukums, '  (Reģ. Nr. ', COALESCE(izp.reg_numurs,'—'), ')'),
           NULL, NULL, NULL, NULL, 3
    FROM Rekini r JOIN Izpilditaji izp ON izp.izpilditajs_id = r.izpilditajs_id
    WHERE r.rekina_id = 1

    UNION ALL

    SELECT 'HEADER', NULL, 'Izmaksu pozīcija', 'Darba nosaukums',
           'Mēra vienība', NULL, NULL, NULL, 4

    UNION ALL

    SELECT 'RINDA', rr.karta_numurs, p.kods, p.nosaukums, p.mervieniba,
           rr.daudzums, rr.vienibas_cena, rr.summa, 10 + rr.karta_numurs
    FROM RekinsRindas rr
    JOIN Pozicijas p ON p.pozicija_id = rr.pozicija_id
    WHERE rr.rekina_id = 1

    UNION ALL

    SELECT 'KOPA', NULL, NULL, 'Kopā tiešās izmaksas',                    NULL, NULL, NULL, ROUND(SUM(rr.summa), 2),                                                       100 FROM RekinsRindas rr WHERE rr.rekina_id = 1
    UNION ALL
    SELECT 'KOPA', NULL, NULL, 'Virsizdevumi (5%)',                       NULL, NULL, NULL, ROUND(SUM(rr.summa) * 0.05, 2),                                                101 FROM RekinsRindas rr WHERE rr.rekina_id = 1
    UNION ALL
    SELECT 'KOPA', NULL, NULL, '  t.sk. darba aizsardzība',               NULL, NULL, NULL, ROUND(SUM(rr.summa) * 0.05 * 0.50, 2),                                        102 FROM RekinsRindas rr WHERE rr.rekina_id = 1
    UNION ALL
    SELECT 'KOPA', NULL, NULL, 'Peļņa (2%)',                              NULL, NULL, NULL, ROUND(SUM(rr.summa) * 0.02, 2),                                                103 FROM RekinsRindas rr WHERE rr.rekina_id = 1
    UNION ALL
    SELECT 'KOPA', NULL, NULL, 'Darba devēja sociālais nodoklis (24.09%)',NULL, NULL, NULL, ROUND(SUM(rr.summa) * 0.2409, 2),                                              104 FROM RekinsRindas rr WHERE rr.rekina_id = 1
    UNION ALL
    SELECT 'KOPA', NULL, NULL, 'Kopā',                                    NULL, NULL, NULL, ROUND(SUM(rr.summa) * 1.2909, 2),                                              105 FROM RekinsRindas rr WHERE rr.rekina_id = 1
    UNION ALL
    SELECT 'KOPA', NULL, NULL, 'PVN 21%',                                 NULL, NULL, NULL, ROUND(SUM(rr.summa) * 1.2909 * 0.21, 2),                                      106 FROM RekinsRindas rr WHERE rr.rekina_id = 1
    UNION ALL
    SELECT 'KOPA', NULL, NULL, 'Pavisam kopā',                            NULL, NULL, NULL, ROUND(SUM(rr.summa) * 1.2909 * 1.21, 2),                                      107 FROM RekinsRindas rr WHERE rr.rekina_id = 1

) AS rekina_dati
ORDER BY sort_key;

*/