/*
* Автор: Маркелов С.В.
* Дата: 2014-05-29
* Задача: http://jira.softage.ru/jira/browse/SDFO-317
* Назначение: Импортировать справочник КАТО из таблицы КАТО в новую структуру данных (ANALYTICTYPES, ANALYTICCODES)
* Изменяются объекты: Вствка данных в таблицы: ANALYTICTYPES и ANALYTICCODES
*/

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

declare
  filename      varchar2(256) := 'sfm.database-update.2014-05-29.KATOtoDictionaryTables.sql';
  purpose       varchar2(4000) := 'Импортировать справочник КАТО из таблицы КАТО в новую структуру данных (ANALYTICTYPES, ANALYTICCODES)';
  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 ******
*/
  declare
    level_1 number := 13001;
    level_2 number := 13002;
    level_3 number := 13003;
    level_4 number := 13004;
  begin
-- вставка двух дополнительных уровней
    insert into analytictypes(analytictype, datacode, name) values (level_3, 3003, 'Административно-территориальное деление Республики Казахстан (города, с.о и п.а)');
    insert into analytictypes(analytictype, datacode, name) values (level_4, 3004, 'Административно-территориальное деление Республики Казахстан (аулы,села,поселки)');

-- установка иерархических связей
    update analytictypes set childtype = level_2 where analytictype = level_1;
    update analytictypes set childtype = level_3 where analytictype = level_2;
    update analytictypes set childtype = level_4 where analytictype = level_3;

-- наименования справочников
    update analytictypes set name = 'Административно-территориальное деление Республики Казахстан'
      where analytictype = level_1;

    update analytictypes set name = 'Административно-территориальное деление Республики Казахстан (районы и г.а.)'
      where analytictype = level_2;

-- удалить старые значения справочника
    delete from analyticcodes where analytictype in (level_1, level_2, level_3, level_4, 10006);

-- вставить значения справочника первого уровня - области и города федерального значения
    insert into analyticcodes(analytictype, analyticcode, name)
      select level_1, te, rus_name from kato where ab != '00' and cd = '00' and ef = '00' and hij = '000';

-- вставить значения справочника второго уровня - районы областей и г.а.
    insert into analyticcodes(analytictype, analyticcode, parentcode, name)
      select level_2, TE, TEPARENT, RUS_NAME FROM KATO where ab != '00' and cd != '00' and ef = '00' and hij = '000'
      union
      select level_2, TE, TEPARENT, RUS_NAME from kato where ef = 10 and (ab = 71 or ab = 75); -- районы Алматы и Астаны


-- вставить значения справочника третьего уровня - города, с.о и п.а
    insert into analyticcodes(analytictype, analyticcode, parentcode, name)
      SELECT 13003, TE, TEPARENT, RUS_NAME FROM KATO WHERE ab != '00' and cd != '00' and ef != '00' and hij = '000'
        and ab != 71 and ab !=75;  -- исключить из третьего уровня районы Алматы и Астаны


-- вставить значения справочника четвертого уровня - аулы,села,поселки
    insert into analyticcodes(analytictype, analyticcode, parentcode, name)
      SELECT 13004, TE, TEPARENT, RUS_NAME FROM KATO WHERE ab != '00' and cd != '00' and ef != '00' and hij != '000'
        and SUBSTR(hij, 2, 3) = '00'; -- исключить пятый уровень

-- заполнить короткие названия и названия на казахском
    update analyticcodes set shortname = name where analytictype in (level_1, level_2, level_3, level_4);
    update analyticcodes set name_kz = name where analytictype in (level_1, level_2, level_3, level_4);
    update analyticcodes set shortname_kz = name where analytictype in (level_1, level_2, level_3, level_4);
  end;

-- удаление устаревшего справочника
  delete from analytictypes where datacode = 6;

/*
****** End update script ******
*/
  commit;

  exception
  when others then
  rollback;
  raise;
end;

/
/*
****** Begin update script ******
*/


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