diff --git a/db/P8PNL_SMPL_GANTT.sql b/db/P8PNL_SMPL_GANTT.sql index 254e1cb..7431414 100644 --- a/db/P8PNL_SMPL_GANTT.sql +++ b/db/P8PNL_SMPL_GANTT.sql @@ -11,7 +11,9 @@ create table P8PNL_SMPL_GANTT NAME varchar2(200) not null, -- Наименование задачи DATE_FROM date not null, -- Дата начала задачи DATE_TO date not null, -- Дата окончания задачи + STATE number(1) not null, -- Состояние задачи (0 - не выполняется, 1 - выполняется) constraint C_P8PNL_SMPL_GANTT_RN_PK primary key (RN), - constraint C_P8PNL_SMPL_GANTT_VAL check (TYPE in (0, 1)), + constraint C_P8PNL_SMPL_GANTT_TP_VAL check (TYPE in (0, 1)), + constraint C_P8PNL_SMPL_GANTT_ST_VAL check (STATE in (0, 1)), constraint C_P8PNL_SMPL_GANTT_UN unique (IDENT, NUMB) ); diff --git a/db/PKG_P8PANELS_SAMPLES.pck b/db/PKG_P8PANELS_SAMPLES.pck index a827641..2248b2e 100644 --- a/db/PKG_P8PANELS_SAMPLES.pck +++ b/db/PKG_P8PANELS_SAMPLES.pck @@ -456,15 +456,16 @@ create or replace package body PKG_P8PANELS_SAMPLES as SNUMB in varchar2, -- Номер задачи SNAME in varchar2, -- Наименование задачи DDATE_FROM in date, -- Дата начала задачи - DDATE_TO in date -- Дата окончания задачи + DDATE_TO in date, -- Дата окончания задачи + NSTATE in number -- Состояние (0 - не выполняется, 1 - выполняется) ) is begin /* Добавим запись */ insert into P8PNL_SMPL_GANTT - (RN, IDENT, type, NUMB, name, DATE_FROM, DATE_TO) + (RN, IDENT, type, NUMB, name, DATE_FROM, DATE_TO, STATE) values - (GEN_ID(), NIDENT, NTYPE, SNUMB, SNAME, DDATE_FROM, DDATE_TO); + (GEN_ID(), NIDENT, NTYPE, SNUMB, SNAME, DDATE_FROM, DDATE_TO, NSTATE); end GANTT_BASE_INSERT; /* Исправление данных в буфере диаграммы Ганта */ @@ -503,6 +504,10 @@ create or replace package body PKG_P8PANELS_SAMPLES as NYEAR PKG_STD.TNUMBER; -- Текущий год NMONTH PKG_STD.TNUMBER; -- Месяц начала этапа DDATE_FROM PKG_STD.TLDATE; -- Дата начала этапа + DDATE_TO PKG_STD.TLDATE; -- Дата окончания этапа + DDATE_FROM_J PKG_STD.TLDATE; -- Дата начала работы + DDATE_TO_J PKG_STD.TLDATE; -- Дата окончания работы + NSTATE PKG_STD.TNUMBER; -- Состояние задачи begin /* Удаляем старые данные из буфера */ if (NIDENT is not null) then @@ -519,23 +524,41 @@ create or replace package body PKG_P8PANELS_SAMPLES as /* Сформируем период этапа */ NMONTH := ST * NSTAGE_LEN - NSTAGE_LEN + 1; DDATE_FROM := TO_DATE('01.' || NMONTH || '.' || TO_CHAR(NYEAR), 'dd.mm.yyyy'); + DDATE_TO := LAST_DAY(ADD_MONTHS(DDATE_FROM, NSTAGE_LEN) - 1); + /* Сформируем значение для атриуба "состояние" этапа */ + if (TRUNC(sysdate) between TRUNC(DDATE_FROM) and TRUNC(DDATE_TO)) then + NSTATE := 1; + else + NSTATE := 0; + end if; /* Добавим его в буфер */ GANTT_BASE_INSERT(NIDENT => NIDENT, NTYPE => 0, SNUMB => TO_CHAR(ST), SNAME => 'Этап ' || TO_CHAR(ST), DDATE_FROM => DDATE_FROM, - DDATE_TO => LAST_DAY(ADD_MONTHS(DDATE_FROM, NSTAGE_LEN) - 1)); + DDATE_TO => DDATE_TO, + NSTATE => NSTATE); /* Работы */ for J in 0 .. NSTAGE_LEN - 1 loop + /* Сформируем период работы */ + DDATE_FROM_J := ADD_MONTHS(DDATE_FROM, J); + DDATE_TO_J := LAST_DAY(ADD_MONTHS(DDATE_FROM, J + 1) - 1); + /* Сформируем значение для атриуба "состояние" работы */ + if (TRUNC(sysdate) between TRUNC(DDATE_FROM_J) and TRUNC(DDATE_TO_J)) then + NSTATE := 1; + else + NSTATE := 0; + end if; /* Добавим в буфер */ GANTT_BASE_INSERT(NIDENT => NIDENT, NTYPE => 1, SNUMB => TO_CHAR(ST) || '.' || TO_CHAR(J + 1), SNAME => 'Работа ' || TO_CHAR(J + 1) || ' этапа ' || TO_CHAR(ST), - DDATE_FROM => ADD_MONTHS(DDATE_FROM, J), - DDATE_TO => LAST_DAY(ADD_MONTHS(DDATE_FROM, J + 1) - 1)); + DDATE_FROM => DDATE_FROM_J, + DDATE_TO => DDATE_TO_J, + NSTATE => NSTATE); end loop; end loop; end GANTT_INIT; @@ -559,7 +582,11 @@ create or replace package body PKG_P8PANELS_SAMPLES as RG := PKG_P8PANELS_VISUAL.TGANTT_MAKE(STITLE => 'Задачи на ' || TO_CHAR(EXTRACT(year from sysdate)) || ' год', NZOOM => PKG_P8PANELS_VISUAL.NGANTT_ZOOM_MONTH); /* Добавим динамические атрибуты к задачам */ - PKG_P8PANELS_VISUAL.TGANTT_ADD_TASK_ATTR(RGANTT => RG, SNAME => 'type', SCAPTION => 'Тип'); + PKG_P8PANELS_VISUAL.TGANTT_ADD_TASK_ATTR(RGANTT => RG, SNAME => 'type', SCAPTION => 'Тип', BVISIBLE => true); + PKG_P8PANELS_VISUAL.TGANTT_ADD_TASK_ATTR(RGANTT => RG, + SNAME => 'state', + SCAPTION => 'Состояние', + BVISIBLE => false); /* Добавим описание цветов задач */ PKG_P8PANELS_VISUAL.TGANTT_ADD_TASK_COLOR(RGANTT => RG, SBG_COLOR => SBG_COLOR_JOB, @@ -589,6 +616,7 @@ create or replace package body PKG_P8PANELS_SAMPLES as SNAME => 'type', SVALUE => C.TYPE, BCLEAR => true); + PKG_P8PANELS_VISUAL.TGANTT_TASK_ADD_ATTR_VAL(RGANTT => RG, RTASK => RGT, SNAME => 'state', SVALUE => C.STATE); /* Добавляем задачу в диаграмму */ PKG_P8PANELS_VISUAL.TGANTT_ADD_TASK(RGANTT => RG, RTASK => RGT); end loop; diff --git a/db/PKG_P8PANELS_VISUAL.pck b/db/PKG_P8PANELS_VISUAL.pck index 622636d..cfb03c3 100644 --- a/db/PKG_P8PANELS_VISUAL.pck +++ b/db/PKG_P8PANELS_VISUAL.pck @@ -125,7 +125,8 @@ create or replace package PKG_P8PANELS_VISUAL as type TGANTT_TASK_ATTR is record ( SNAME PKG_STD.TSTRING, -- Наименование - SCAPTION PKG_STD.TSTRING -- Заголовок + SCAPTION PKG_STD.TSTRING, -- Заголовок + BVISIBLE boolean -- Разрешить отображение ); /* Типы данных - коллекция описаний атрибутов задачи для диаграммы Ганта */ @@ -483,6 +484,7 @@ create or replace package PKG_P8PANELS_VISUAL as RGANTT in out nocopy TGANTT, -- Описание диаграммы Ганта SNAME in varchar2, -- Наименование SCAPTION in varchar2, -- Заголовок + BVISIBLE boolean := true, -- Разрешить отображение BCLEAR in boolean := false -- Флаг очистки коллекции атрибутов (false - не очищать, true - очистить коллекцию перед добавлением) ); @@ -1897,6 +1899,7 @@ text="Формат data_grid и gant как в chart" RGANTT in out nocopy TGANTT, -- Описание диаграммы Ганта SNAME in varchar2, -- Наименование SCAPTION in varchar2, -- Заголовок + BVISIBLE boolean := true, -- Разрешить отображение BCLEAR in boolean := false -- Флаг очистки коллекции атрибутов (false - не очищать, true - очистить коллекцию перед добавлением) ) is @@ -1917,6 +1920,7 @@ text="Формат data_grid и gant как в chart" RGANTT.RTASK_ATTRS.EXTEND(); RGANTT.RTASK_ATTRS(RGANTT.RTASK_ATTRS.LAST).SNAME := SNAME; RGANTT.RTASK_ATTRS(RGANTT.RTASK_ATTRS.LAST).SCAPTION := SCAPTION; + RGANTT.RTASK_ATTRS(RGANTT.RTASK_ATTRS.LAST).BVISIBLE := BVISIBLE; end TGANTT_ADD_TASK_ATTR; /* Добавление описания цвета задачи диаграммы Ганта */ @@ -2001,6 +2005,7 @@ text="Формат data_grid и gant как в chart" /* Наполняем его атрибутами */ PKG_XFAST.ATTR(SNAME => SRESP_ATTR_NAME, SVALUE => RGANTT.RTASK_ATTRS(I).SNAME); PKG_XFAST.ATTR(SNAME => SRESP_ATTR_CAPTION, SVALUE => RGANTT.RTASK_ATTRS(I).SCAPTION); + PKG_XFAST.ATTR(SNAME => SRESP_ATTR_VISIBLE, BVALUE => RGANTT.RTASK_ATTRS(I).BVISIBLE); /* Закрываем динамический атрибут задачи */ PKG_XFAST.UP(); end loop;