Изменения в БД АСИДК, которые необходимо сделать для интеграции кассетниц в БД АСИДК
-------------------------------------------------------------------------------------------

1. Создать таблицы (проблем быть не должно)
2. Добавить в триггеры АСИДК функционал для синхронизации данных
   ВНИМАНИЕ! | тупой импорт триггеров в реальную БД грозит неработоспособностью системы
             | будьте внимательны. Сделайте анализ текущих триггеров и добавьте в них функционал,
             | касающейся интеграции кассетниц в БД АСИДК
-------------------------------------------------------------------------------------------
create table WORK_PERS
 (
  wor_id     NUMBER(6) not null,
  count_cass NUMBER(3) default 0 not null,
  count_cell NUMBER(3) default 0 not null,
  json_cells VARCHAR2(250) default '{cass : []}' not null
 )
 tablespace IDK_DB
  pctfree 10
  pctused 40
  initrans 1
  maxtrans 255
  storage
  (
    initial 516
    minextents 1
    maxextents unlimited
  );
 -- Add comments to the table
 comment on table WORK_PERS
  is 'Таблица работников зарегистрированых в кассетницах';
 -- Add comments to the columns
 comment on column WORK_PERS.wor_id
  is 'Первичный ключ работника';
 comment on column WORK_PERS.count_cass
  is 'Кол-во кассетниц, в которых закреплен работник';
 comment on column WORK_PERS.count_cell
  is 'Кол-во ячеек, закрепленных за работником';
 comment on column WORK_PERS.json_cells
  is 'Закрепленные за работником ячейки в формате JSON';
 -- Create/Recreate primary, unique and foreign key constraints
 alter table WORK_PERS
  add constraint PK_WORK_PERS primary key (WOR_ID)
  using index
  tablespace IDK_DB
  pctfree 10
  initrans 2
  maxtrans 255
  storage
  (
    initial 66K
    minextents 1
    maxextents unlimited
  );
-------------------------------------------------------------------------------------------
create table WORK_SNAP
 (
  wor_id          NUMBER(6) not null,
  up_date         DATE default SYSDATE,
  decrement_count NUMBER(3) default 0,
  ban_active      NUMBER(1) default 0,
  ban_id          NUMBER(1) default 0,
  ban_date        DATE,
  unban_id        NUMBER(1) default 0,
  unban_date      DATE
 )
 tablespace IDK_DB
  pctfree 10
  pctused 40
  initrans 1
  maxtrans 255
  storage
  (
    initial 516
    minextents 1
    maxextents unlimited
  );
 -- Add comments to the table
 comment on table WORK_SNAP
  is 'Таблица работников, в записях которых появились обновления';
 -- Add comments to the columns
 comment on column WORK_SNAP.wor_id
  is 'Первичный ключ работника';
 comment on column WORK_SNAP.up_date
  is 'Дата изменения данных работника';
 comment on column WORK_SNAP.decrement_count
  is 'Кол-во кассетниц не обновивших данные работника, если 0, запись удаляется одним из триггеров';
 comment on column WORK_SNAP.ban_active
  is 'Признак того, что человек НЕ может работать с ИИИ';
 comment on column WORK_SNAP.ban_id
  is 'Тип запрета работы с ИИИ';
 comment on column WORK_SNAP.ban_date
  is 'Дата запрета работы с ИИИ';
 comment on column WORK_SNAP.unban_id
  is 'Тип запрета работы с ИИИ';
 comment on column WORK_SNAP.unban_date
  is 'Дата снятия запрета работы с ИИИ';
 -- Create/Recreate primary, unique and foreign key constraints
 alter table WORK_SNAP
  add constraint PK_WORK_SNAPSHOT primary key (WOR_ID)
  using index
  tablespace IDK_DB
  pctfree 10
  initrans 2
  maxtrans 255
  storage
  (
    initial 66K
    minextents 1
    maxextents unlimited
  );
-------------------------------------------------------------------------------------------
Добавить в триггер АСИДК   IDK.TIB_WORKER   следующие строки (добавить в конец триггера)
###########################################################################################
  ----------------------------------------------------------------
  -- обновление таблицы  IDK.WORK_SNAP
  -- Добавлено 27,01,2015 (Автор Лесных А.В. КуАЭС)
  ----------------------------------------------------------------
  /**/
  If     updating('wor_family')  or updating('wor_name')
      or updating('wor_surname') or updating('wor_doseiku')
      or updating('div_id')      or updating('pos_id')     
   then
     -- Взять из idk.work_pers количество кассетниц в которых закреплен работник

     select  sum(p.count_cass)  into  cass  from  idk.work_pers p  where  p.wor_id=:new.wor_id;

     If cass > 0 then -- есть закрепленные, можно обновить idk.work_snap
       -- выставить флаг, что есть обновления для кассетниц
       select count(s.wor_id) into UsrChk from idk.work_snap s where  s.wor_id=:new.wor_id;
       If UsrChk = 0 then
         insert into idk.work_snap ( wor_id, decrement_count, ban_active ) VALUES ( :new.wor_id, cass,  :new.wor_iii );
       else
         update  idk.work_snap  set  up_date=sysdate, decrement_count=cass, ban_active=:new.wor_iii  where  wor_id=:new.wor_id;
       end If;
     end If;

  end If;
###########################################################################################
-------------------------------------------------------------------------------------------

-------------------------------------------------------------------------------------------
Добавить в триггер АСИДК   IDK.TIB_BAN_HISTORY_ER   следующие строки (добавить в конец триггера)
###########################################################################################
  ----------------------------------------------------------------
  -- обновление таблицы  IDK.WORK_SNAP
  -- Добавлено 27/01/2015 (Автор лесных А.В. КуАЭС)
  ----------------------------------------------------------------
  
  If inserting
    or updating('ban_active') or updating('ban_id') or updating('unban_id')
  then
     -- Взять из idk.work_pers количество кассетниц в которых закреплен работник
     select  sum(p.count_cass)  into  cass  from  idk.work_pers p  where  p.wor_id=:new.wor_id;
     If cass > 0 then -- есть закрепленные, можно обновить idk.work_snap
       -- выставить флаг, что есть обновления для кассетниц

     select count(s.wor_id) into cnt from idk.work_snap s where  s.wor_id=:new.wor_id;
     If cnt = 0 then
         insert into idk.work_snap (
                wor_id, decrement_count,
                ban_active, ban_id, unban_id,
                ban_date, unban_date
             ) VALUES (
                :new.wor_id,
                cass,
                :new.ban_active,
                :new.ban_id,   :new.unban_id,
                :new.ban_date, :new.unban_date
                 );
       else
         update  idk.work_snap
              set
                 up_date=sysdate,
                 decrement_count=cass,
                 ban_active=:new.ban_active,
                 ban_id=:new.ban_id,     unban_id=:new.unban_id,
                 ban_date=:new.ban_date, unban_date=:new.unban_date

              where  wor_id=:new.wor_id;
       end If;
     end If;
  end If;
###########################################################################################
-------------------------------------------------------------------------------------------

