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

--- Удаление парента на каталог
ALTER TABLE AKUZ.T_HOSPITAL_DRUG_DEMAND
    DROP CONSTRAINT FK_T_HOSPITAL_REQUEST_CATALOG_T_HOSPITAL_DRUG_DEMAND_HospitalRequestCatalog
GO


--- Таблица для связки новых идентификаторов и старых
CREATE TABLE AKUZ.HOSPITAL_REQUEST_CATALOG_ITEM_DICT
(
    OldCatalogId    UNIQUEIDENTIFIER NOT NULL,
    NewCatalogId    UNIQUEIDENTIFIER,
    IsVital         BIT              NOT NULL,
    DoseView        VARCHAR(8000),
    CMnn            UNIQUEIDENTIFIER,
    CTrn            UNIQUEIDENTIFIER,
    MedicationForms UNIQUEIDENTIFIER,
    BeginDate       DATETIME,
    EndDate         DATETIME
)
GO


-- DECLARE @catalogid UNIQUEIDENTIFIER = '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
GO


--- Удаление данных из каталога
DELETE
FROM AKUZ.T_HOSPITAL_REQUEST_CATALOG
GO


--- Удаление данных из базовой сущности
DELETE i
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
    )
GO


--- Дроп таблицы каталога
DROP TABLE AKUZ.T_HOSPITAL_REQUEST_CATALOG
GO


--- Создание таллицы каталога
CREATE TABLE AKUZ.T_HOSPITAL_REQUEST_CATALOG
(
    HospitalRequestCatalogID UNIQUEIDENTIFIER NOT NULL,
    BeginDate                DATETIME         NOT NULL,
    EndDate                  DATETIME         NOT NULL,
    LpuMain                  UNIQUEIDENTIFIER NOT NULL
)
    ON [PRIMARY]
GO
ALTER TABLE AKUZ.T_HOSPITAL_REQUEST_CATALOG
    ADD CONSTRAINT PK_T_HOSPITAL_REQUEST_CATALOG
        PRIMARY KEY CLUSTERED (HospitalRequestCatalogID) ON [PRIMARY]
GO
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)
GO


--- Создание таблицы айтемов каталога
CREATE TABLE AKUZ.T_HOSPITAL_REQUEST_CATALOG_ITEM
(
    HospitalRequestCatalogItemID UNIQUEIDENTIFIER NOT NULL,
    HospitalRequestCatalog       UNIQUEIDENTIFIER NOT NULL,
    IsVital                      BIT              NOT NULL,
    DoseView                     INT              NULL,
    CMnn                         UNIQUEIDENTIFIER NULL,
    CTrn                         UNIQUEIDENTIFIER NULL,
    MedicationForms              UNIQUEIDENTIFIER NOT NULL
)
    ON [PRIMARY]
GO
ALTER TABLE AKUZ.T_HOSPITAL_REQUEST_CATALOG_ITEM
    ADD CONSTRAINT PK_T_HOSPITAL_REQUEST_CATALOG_ITEM
        PRIMARY KEY CLUSTERED (HospitalRequestCatalogItemID) ON [PRIMARY]
GO
ALTER TABLE AKUZ.T_HOSPITAL_REQUEST_CATALOG_ITEM
    ADD CONSTRAINT FK_T_HOSPITAL_REQUEST_CATALOG_T_HOSPITAL_REQUEST_CATALOG_ITEM_HospitalRequestCatalog
        FOREIGN KEY (HospitalRequestCatalog) REFERENCES AKUZ.T_HOSPITAL_REQUEST_CATALOG (HospitalRequestCatalogID)
GO
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)
GO
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)
GO
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)
GO
ALTER TABLE AKUZ.T_HOSPITAL_REQUEST_CATALOG_ITEM
    ADD CONSTRAINT FK_T_MEDICATION_FORMS_T_HOSPITAL_REQUEST_CATALOG_ITEM_MedicationForms
        FOREIGN KEY (MedicationForms) REFERENCES PHARM.T_MEDICATION_FORMS (MedicationFormsID)
GO


--- Инсерт каталога для всех айтемов
INSERT INTO AKUZ.T_HOSPITAL_REQUEST_CATALOG
    (HospitalRequestCatalogID, BeginDate, EndDate, LpuMain)
SELECT 'd5f7023a-1cb0-4bb7-b014-4ea62781a887',
       MIN(dict.BeginDate),
       MAX(dict.EndDate),
       (
           SELECT TOP 1 LpuId
           FROM akuz.T_LPU_MAIN
       ) AS LpuMain
FROM AKUZ.HOSPITAL_REQUEST_CATALOG_ITEM_DICT dict
HAVING MIN(dict.BeginDate) is not null
GO
--- Инсерт айтемов
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
GO


--- Добавление колонки в парент
ALTER TABLE AKUZ.T_HOSPITAL_DRUG_DEMAND
    ADD
        HospitalRequestCatalogItem UNIQUEIDENTIFIER NULL
GO


--- Обновление колонки в паренте
UPDATE AKUZ.T_HOSPITAL_DRUG_DEMAND
SET
    HospitalRequestCatalogItem = HospitalRequestCatalog
GO
ALTER TABLE AKUZ.T_HOSPITAL_DRUG_DEMAND
    ALTER COLUMN HospitalRequestCatalogItem UNIQUEIDENTIFIER NOT NULL
GO
ALTER TABLE AKUZ.T_HOSPITAL_DRUG_DEMAND
    ADD CONSTRAINT FK_T_HOSPITAL_REQUEST_CATALOG_ITEM_T_HOSPITAL_DRUG_DEMAND_HospitalRequestCatalogItem
        FOREIGN KEY (HospitalRequestCatalogItem) REFERENCES AKUZ.T_HOSPITAL_REQUEST_CATALOG_ITEM (HospitalRequestCatalogItemID)
GO


--- Дроп старой колонки
EXEC dbo.sp_AlterDropColumn '[AKUZ].[T_HOSPITAL_DRUG_DEMAND]', 'HospitalRequestCatalog', 0
GO

--- Дроп колонки для связки
DROP TABLE AKUZ.HOSPITAL_REQUEST_CATALOG_ITEM_DICT
GO


DELETE FROM AKUZ.T_GEN_NUMBERS
WHERE
    EntityID = (
        SELECT EntityID FROM vclib.T_ENTITIES WHERE EntName = 'HOSPITAL_REQUEST_CATALOG'
               )
GO