/*
* Автор: Борисов Д.Г.
* Дата: 2014-09-24
* Задача: http://jira.softage.ru/jira/browse/SDFO-XX (нет в JIRA)
* Назначение: Изменение представления guid с использование дефисов в НСИ и СЛК
* Изменяются объекты:
		rebuild table FM1_REV_ANALYTICTYPES
		rebuild table FM1_REVISION
        rebuild table MESSAGES_VERSIONS
*/

/*
  ****** Инструкции для SQLPlus (обязательно) ******
  Для печати сообщений:
  DBMS_OUTPUT.put_line('<Message>');
*/
whenever sqlerror exit 1;
set serveroutput on;
set echo off;

declare
	filename      varchar2(256) := 'sfm.database-update.2014-09-24.ChangeGuidType.sql';
	purpose       varchar2(4000) := 'Изменение представления guid с использование дефисов в НСИ и СЛК';
	script_exists number := 0;
begin

	--delete from DB_Update_History where script_name = filename;	commit;
	select count(*)
		into script_exists
		from DB_Update_History
	 where script_name = filename;

	if (script_exists > 0) then
		RAISE_APPLICATION_ERROR(-20001, '"' || filename || '" уже присутствует в базе');
	else
		insert into DB_Update_History
			(script_name, purpose)
		values
			(filename, purpose);
	end if;

	/*
	****** Begin update script ******
	*/
		-- Транзакционный апдейт
		-- execute immediate '';
	/*
	****** End update script ******
	*/
	commit;

exception
	when others then
		rollback;
		raise;
end;
/

	/*
	****** Begin update script ******
	*/
		-- Не транзакционный апдейт
		-- Необходимы свои транзакции, если требуются



ALTER TABLE KFM.MESS_CFM_ANNOUNCE_INFO ADD (
  CONSTRAINT MESS_CFM_ANNOUNCE_INFOPK
  PRIMARY KEY
  (MESS_CFM_ID));

  ALTER TABLE KFM.MESS_CFM_ANNOUNCE_OPER ADD (
  CONSTRAINT MESS_CFM_ANNOUNCE_OPERPK
  PRIMARY KEY
  (MESS_CFM_ID));

  ALTER TABLE KFM.MESS_CFM_ANNOUNCE_SUBJ ADD (
  CONSTRAINT MESS_CFM_ANNOUNCE_SUBJPK
  PRIMARY KEY
  (MESS_CFM_ID));

 /*
*** MESSAGES_VERSIONS
*/
CREATE TABLE KFM.MESSAGES_VERSIONS_TMP
(
  MESS_TYPE      NUMBER                         NOT NULL,
  VERSIONCODE    VARCHAR2(36 CHAR)             NOT NULL,
  BEGINDATE      DATE                           NOT NULL,
  ENDDATE        DATE,
  VERSIONID      INTEGER                        NOT NULL,
  MESSXMLSCHEMA  CLOB,
  OUTERXML       CLOB,
  SHORTNAME      VARCHAR2(100 CHAR),
  STATE          NUMBER,
  XML_SCHEMA     BLOB,
  PRIMARY KEY (VERSIONCODE)
);

COMMENT ON TABLE KFM.MESSAGES_VERSIONS_TMP IS 'Версии сообщений';

COMMENT ON COLUMN KFM.MESSAGES_VERSIONS_TMP.MESS_TYPE IS 'Тип сообщения';

COMMENT ON COLUMN KFM.MESSAGES_VERSIONS_TMP.VERSIONCODE IS 'Код версии';

COMMENT ON COLUMN KFM.MESSAGES_VERSIONS_TMP.BEGINDATE IS 'Дата начала дейстивия версии сообщения';

COMMENT ON COLUMN KFM.MESSAGES_VERSIONS_TMP.ENDDATE IS 'Дата окончания действия версии сообщения';

COMMENT ON COLUMN KFM.MESSAGES_VERSIONS_TMP.VERSIONID IS 'Идентификатор версии сообщения';

COMMENT ON COLUMN KFM.MESSAGES_VERSIONS_TMP.MESSXMLSCHEMA IS 'XSL преобразование для предварительного просмотра и печати';

COMMENT ON COLUMN KFM.MESSAGES_VERSIONS_TMP.OUTERXML IS 'XSL преобразование для эксопрта во внутернний сегмент';

COMMENT ON COLUMN KFM.MESSAGES_VERSIONS_TMP.SHORTNAME IS 'Краткое наименование для удобства пользователя';

COMMENT ON COLUMN KFM.MESSAGES_VERSIONS_TMP.STATE IS 'Состояние версии сообщения: 1 - обрабатвыается, остальные типы не обрабатываются, действительно для уведомлений';

COMMENT ON COLUMN KFM.MESSAGES_VERSIONS_TMP.XML_SCHEMA IS 'XSD схема для вализации структуры сообщения';

INSERT INTO KFM.MESSAGES_VERSIONS_TMP(MESS_TYPE, VERSIONCODE, BEGINDATE,
   ENDDATE, VERSIONID, MESSXMLSCHEMA,
   OUTERXML, SHORTNAME, STATE)
   SELECT MESS_TYPE, VERSIONCODE, BEGINDATE,
   ENDDATE, VERSIONID, MESSXMLSCHEMA,
   OUTERXML, SHORTNAME, STATE FROM KFM.MESSAGES_VERSIONS;
COMMIT;

ALTER TABLE KFM.MESSAGES_VERSIONS
 DROP PRIMARY KEY CASCADE;

DROP TABLE KFM.MESSAGES_VERSIONS CASCADE CONSTRAINTS;

RENAME MESSAGES_VERSIONS_TMP TO MESSAGES_VERSIONS;

CREATE OR REPLACE PUBLIC SYNONYM MESSAGES_VERSIONS FOR KFM.MESSAGES_VERSIONS;
GRANT DELETE, INSERT, SELECT, UPDATE ON KFM.MESSAGES_VERSIONS TO KFM_ROLE;

ALTER TABLE KFM.DOCUMENT_FIELD ADD (
  CONSTRAINT FK_DF_MESSAGES_VERSIONS
  FOREIGN KEY (VERSIONCODE)
  REFERENCES KFM.MESSAGES_VERSIONS (VERSIONCODE));

/*
*** FM1_REV_ANALYTICTYPES
*/
CREATE TABLE KFM.FM1_REV_ANALYTICTYPES_TMP
(
  FM1_REVISION_GUID  VARCHAR2(36 CHAR)          NOT NULL,
  ANALYTICTYPE       INTEGER                    NOT NULL
);
ALTER TABLE KFM.FM1_REV_ANALYTICTYPES_TMP
ADD CONSTRAINT FM1_REV_ANALYTICTYPES_PK
  PRIMARY KEY (FM1_REVISION_GUID, ANALYTICTYPE);

COMMENT ON TABLE KFM.FM1_REV_ANALYTICTYPES_TMP IS 'Таблица связи справочников с ревизией формы ФМ1';

COMMENT ON COLUMN KFM.FM1_REV_ANALYTICTYPES_TMP.FM1_REVISION_GUID IS 'GUID ревизии ФМ1';

COMMENT ON COLUMN KFM.FM1_REV_ANALYTICTYPES_TMP.ANALYTICTYPE IS 'Идентификатор справочника из ANALYTICTYPES';

INSERT INTO KFM.FM1_REV_ANALYTICTYPES_TMP (FM1_REVISION_GUID, ANALYTICTYPE)
   SELECT
   SUBSTR(FM1_REVISION_GUID,  1, 8) ||
        '-' || SUBSTR(FM1_REVISION_GUID,  9, 4) ||
        '-' || SUBSTR(FM1_REVISION_GUID, 13, 4) ||
        '-' || SUBSTR(FM1_REVISION_GUID, 17, 4) ||
        '-' || SUBSTR(FM1_REVISION_GUID, 21) FM1_REVISION_GUID,
        ANALYTICTYPE FROM KFM.FM1_REV_ANALYTICTYPES;
COMMIT;

ALTER TABLE KFM.FM1_REV_ANALYTICTYPES
 DROP PRIMARY KEY CASCADE;

DROP TABLE KFM.FM1_REV_ANALYTICTYPES CASCADE CONSTRAINTS;

RENAME FM1_REV_ANALYTICTYPES_TMP TO FM1_REV_ANALYTICTYPES;

CREATE OR REPLACE PUBLIC SYNONYM FM1_REV_ANALYTICTYPES FOR KFM.FM1_REV_ANALYTICTYPES;
GRANT DELETE, INSERT, SELECT, UPDATE ON KFM.FM1_REV_ANALYTICTYPES TO KFM_ROLE;

/*
*** FM1_REVISION
*/
CREATE TABLE KFM.FM1_REVISION_TMP
(
  FM1_REVISION_GUID  VARCHAR2(36 CHAR),
  FM1_VERSION        INTEGER                    NOT NULL,
  START_DATE         DATE                       NOT NULL,
  END_DATE           DATE,
  PRIMARY KEY (FM1_REVISION_GUID)
);

COMMENT ON TABLE KFM.FM1_REVISION_TMP IS 'Ревизии формы ФМ1';

COMMENT ON COLUMN KFM.FM1_REVISION_TMP.FM1_REVISION_GUID IS 'GUID ревизии ФМ1';

COMMENT ON COLUMN KFM.FM1_REVISION_TMP.FM1_VERSION IS 'Номер версии ФМ1 (1,2,4-текущая)';

COMMENT ON COLUMN KFM.FM1_REVISION_TMP.START_DATE IS 'Дата вступления в силу данного FM1_REVISION_GUID';

COMMENT ON COLUMN KFM.FM1_REVISION_TMP.END_DATE IS 'Дата, после наступления которой СДФО должно отклонять формы ФМ1 с данным FM1_REVISION_GUID';

INSERT INTO KFM.FM1_REVISION_TMP (FM1_REVISION_GUID, FM1_VERSION, START_DATE, END_DATE)
   SELECT
   SUBSTR(FM1_REVISION_GUID,  1, 8) ||
        '-' || SUBSTR(FM1_REVISION_GUID,  9, 4) ||
        '-' || SUBSTR(FM1_REVISION_GUID, 13, 4) ||
        '-' || SUBSTR(FM1_REVISION_GUID, 17, 4) ||
        '-' || SUBSTR(FM1_REVISION_GUID, 21) FM1_REVISION_GUID,
        FM1_VERSION, START_DATE, END_DATE FROM KFM.FM1_REVISION;
COMMIT;

ALTER TABLE KFM.FM1_REVISION
 DROP PRIMARY KEY CASCADE;

DROP TABLE KFM.FM1_REVISION CASCADE CONSTRAINTS;

RENAME FM1_REVISION_TMP TO FM1_REVISION;

CREATE OR REPLACE PUBLIC SYNONYM FM1_REVISION FOR KFM.FM1_REVISION;
GRANT DELETE, INSERT, SELECT, UPDATE ON KFM.FM1_REVISION TO KFM_ROLE;

/*
*** Добавление связей
*/
ALTER TABLE KFM.FM1_REV_ANALYTICTYPES ADD (
  FOREIGN KEY (FM1_REVISION_GUID)
  REFERENCES KFM.FM1_REVISION (FM1_REVISION_GUID),
  FOREIGN KEY (ANALYTICTYPE)
  REFERENCES KFM.ANALYTICTYPES (ANALYTICTYPE));

	/*
	****** End update script ******
	*/
