-- Создать таблу для связки идентификаторов
-- Перенести в нее все данные
-- Дропнуть данные из каталога
-- Дропнуть данные из базовой
-- Дропнуть таблу каталога
-- Создать таблу каталога новую
-- Создать новую айтемов
-- Создать 1 новый каталог
-- перенести в новую таблу айтемы
--  Дропнуть таблицу для связки идентификаторов

--- Удаление парента на каталог
ALTER TABLE akuz.t_hospital_drug_demand
    DROP CONSTRAINT fk_t_hospital_request_catalog_t_hospital_drug_demand_h_ebfc8b6e;


--- Таблица для связки новых идентификаторов и старых
CREATE TABLE akuz.hospital_request_catalog_item_dict
(
    oldcatalogid    uuid    NOT NULL,
    newcatalogid    uuid,
    isvital         BOOLEAN NOT NULL,
    doseview        VARCHAR(8000),
    cmnn            uuid,
    ctrn            uuid,
    medicationforms uuid,
    begindate       TIMESTAMP,
    enddate         TIMESTAMP
);


-- DECLARE @catalogid UUID = 'd5f7023a-1cb0-4bb7-b014-4ea62781a887'
INSERT INTO
    akuz.hospital_request_catalog_item_dict
(oldcatalogid, newcatalogid, isvital, doseview, cmnn, ctrn, medicationforms, begindate, enddate)
SELECT
    i.basedrugrequestitemid,
    'd5f7023a-1cb0-4bb7-b014-4ea62781a887',
    c.isvital,
    c.doseview,
    c.cmnn,
    c.ctrn,
    i.medicationforms,
    i.applistbegindate,
    i.applistenddate
FROM akuz.t_base_drug_request_item i
JOIN akuz.t_hospital_request_catalog c ON i.basedrugrequestitemid = c.basedrugrequestitemid;


--- Удаление данных из каталога
DELETE
FROM akuz.t_hospital_request_catalog;


--- Удаление данных из базовой сущности
DELETE
FROM akuz.t_base_drug_request_item i
WHERE
    EXISTS
    (
        SELECT 1 FROM akuz.hospital_request_catalog_item_dict d WHERE d.oldcatalogid = i.basedrugrequestitemid
    );


--- Дроп таблицы каталога
DROP TABLE akuz.t_hospital_request_catalog;


--- Создание таллицы каталога
CREATE TABLE akuz.t_hospital_request_catalog
(
    hospitalrequestcatalogid uuid      NOT NULL,
    begindate                TIMESTAMP NOT NULL,
    enddate                  TIMESTAMP NOT NULL,
    lpumain                  uuid      NOT NULL
);

-- Alters

ALTER TABLE akuz.t_hospital_request_catalog
    ADD CONSTRAINT pk_t_hospital_request_catalog
        PRIMARY KEY (hospitalrequestcatalogid);
ALTER TABLE akuz.t_hospital_request_catalog
    ADD CONSTRAINT fk_t_lpu_main_t_hospital_request_catalog_lpumain
        FOREIGN KEY (lpumain) REFERENCES akuz.t_lpu_main (lpuid);


--- Создание таблицы айтемов каталога
CREATE TABLE akuz.t_hospital_request_catalog_item
(
    hospitalrequestcatalogitemid uuid    NOT NULL,
    hospitalrequestcatalog       uuid    NOT NULL,
    isvital                      BOOLEAN NOT NULL,
    doseview                     INTEGER NULL,
    cmnn                         uuid    NULL,
    ctrn                         uuid    NULL,
    medicationforms              uuid    NOT NULL
);
ALTER TABLE akuz.t_hospital_request_catalog_item
    ADD CONSTRAINT pk_t_hospital_request_catalog_item
        PRIMARY KEY (hospitalrequestcatalogitemid);
ALTER TABLE akuz.t_hospital_request_catalog_item
    ADD CONSTRAINT fk_t_hospital_request_catalog_t_hospital_request_catal_c00435a1
        FOREIGN KEY (hospitalrequestcatalog) REFERENCES akuz.t_hospital_request_catalog (hospitalrequestcatalogid);
ALTER TABLE akuz.t_hospital_request_catalog_item
    ADD CONSTRAINT fk_s_dlo_doseview_t_hospital_request_catalog_item_doseview
        FOREIGN KEY (doseview) REFERENCES akuz.s_dlo_doseview (id);
ALTER TABLE akuz.t_hospital_request_catalog_item
    ADD CONSTRAINT fk_t_c_mnn_t_hospital_request_catalog_item_cmnn
        FOREIGN KEY (cmnn) REFERENCES pharm.t_c_mnn (cmnnid);
ALTER TABLE akuz.t_hospital_request_catalog_item
    ADD CONSTRAINT fk_t_c_trn_t_hospital_request_catalog_item_ctrn
        FOREIGN KEY (ctrn) REFERENCES pharm.t_c_trn (ctrnid);
ALTER TABLE akuz.t_hospital_request_catalog_item
    ADD CONSTRAINT fk_t_medication_forms_t_hospital_request_catalog_item__85544aa1
        FOREIGN KEY (medicationforms) REFERENCES pharm.t_medication_forms (medicationformsid);


--- Инсерт каталога для всех айтемов
INSERT INTO
    akuz.t_hospital_request_catalog
    (hospitalrequestcatalogid, begindate, enddate, lpumain)
SELECT
    'd5f7023a-1cb0-4bb7-b014-4ea62781a887',
    MIN(dict.begindate),
    MAX(dict.enddate),
    (
        SELECT
            lpuid
        FROM akuz.t_lpu_main
        LIMIT 1
    ) AS lpumain
FROM akuz.hospital_request_catalog_item_dict dict
HAVING MIN(dict.BeginDate) is not null;


--- Инсерт айтемов
INSERT INTO
    akuz.t_hospital_request_catalog_item(hospitalrequestcatalogitemid,
                                         hospitalrequestcatalog,
                                         isvital,
                                         doseview,
                                         cmnn,
                                         ctrn,
                                         medicationforms)
SELECT
    dict.oldcatalogid,
    dict.newcatalogid,
    dict.isvital,
    dict.doseview,
    dict.cmnn,
    dict.ctrn,
    dict.medicationforms
FROM akuz.hospital_request_catalog_item_dict dict;


--- Добавление колонки в парент
ALTER TABLE akuz.t_hospital_drug_demand
    ADD
        hospitalrequestcatalogitem uuid NULL;


--- Обновление колонки в паренте
UPDATE akuz.t_hospital_drug_demand
SET
    hospitalrequestcatalogitem = hospitalrequestcatalog;
ALTER TABLE akuz.t_hospital_drug_demand
    ALTER COLUMN hospitalrequestcatalogitem SET NOT NULL;
ALTER TABLE akuz.t_hospital_drug_demand
    ADD CONSTRAINT fk_t_hospital_request_catalog_item_t_hospital_drug_dem_2c612f31
        FOREIGN KEY (hospitalrequestcatalogitem) REFERENCES akuz.t_hospital_request_catalog_item (hospitalrequestcatalogitemid);


--- Дроп старой колонки
ALTER TABLE akuz.t_hospital_drug_demand
    DROP COLUMN hospitalrequestcatalog;

--- Дроп колонки для связки
DROP TABLE akuz.hospital_request_catalog_item_dict;
DELETE
FROM akuz.t_gen_numbers
WHERE
    entityid = (
        SELECT entityid FROM vclib.t_entities WHERE entname = 'HOSPITAL_REQUEST_CATALOG'
               );