БД: P8PGantt - управление видимостью атрибута задачи

This commit is contained in:
Mikhail Chechnev 2024-03-31 22:54:42 +03:00
parent 75f05bfaae
commit 30c75fb079
3 changed files with 44 additions and 9 deletions

View File

@ -11,7 +11,9 @@ create table P8PNL_SMPL_GANTT
NAME varchar2(200) not null, -- Наименование задачи NAME varchar2(200) not null, -- Наименование задачи
DATE_FROM date not null, -- Дата начала задачи DATE_FROM date not null, -- Дата начала задачи
DATE_TO 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_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) constraint C_P8PNL_SMPL_GANTT_UN unique (IDENT, NUMB)
); );

View File

@ -456,15 +456,16 @@ create or replace package body PKG_P8PANELS_SAMPLES as
SNUMB in varchar2, -- Номер задачи SNUMB in varchar2, -- Номер задачи
SNAME in varchar2, -- Наименование задачи SNAME in varchar2, -- Наименование задачи
DDATE_FROM in date, -- Дата начала задачи DDATE_FROM in date, -- Дата начала задачи
DDATE_TO in date -- Дата окончания задачи DDATE_TO in date, -- Дата окончания задачи
NSTATE in number -- Состояние (0 - не выполняется, 1 - выполняется)
) )
is is
begin begin
/* Добавим запись */ /* Добавим запись */
insert into P8PNL_SMPL_GANTT 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 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; end GANTT_BASE_INSERT;
/* Исправление данных в буфере диаграммы Ганта */ /* Исправление данных в буфере диаграммы Ганта */
@ -503,6 +504,10 @@ create or replace package body PKG_P8PANELS_SAMPLES as
NYEAR PKG_STD.TNUMBER; -- Текущий год NYEAR PKG_STD.TNUMBER; -- Текущий год
NMONTH PKG_STD.TNUMBER; -- Месяц начала этапа NMONTH PKG_STD.TNUMBER; -- Месяц начала этапа
DDATE_FROM PKG_STD.TLDATE; -- Дата начала этапа 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 begin
/* Удаляем старые данные из буфера */ /* Удаляем старые данные из буфера */
if (NIDENT is not null) then 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; NMONTH := ST * NSTAGE_LEN - NSTAGE_LEN + 1;
DDATE_FROM := TO_DATE('01.' || NMONTH || '.' || TO_CHAR(NYEAR), 'dd.mm.yyyy'); 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, GANTT_BASE_INSERT(NIDENT => NIDENT,
NTYPE => 0, NTYPE => 0,
SNUMB => TO_CHAR(ST), SNUMB => TO_CHAR(ST),
SNAME => 'Этап ' || TO_CHAR(ST), SNAME => 'Этап ' || TO_CHAR(ST),
DDATE_FROM => DDATE_FROM, 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 for J in 0 .. NSTAGE_LEN - 1
loop 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, GANTT_BASE_INSERT(NIDENT => NIDENT,
NTYPE => 1, NTYPE => 1,
SNUMB => TO_CHAR(ST) || '.' || TO_CHAR(J + 1), SNUMB => TO_CHAR(ST) || '.' || TO_CHAR(J + 1),
SNAME => 'Работа ' || TO_CHAR(J + 1) || ' этапа ' || TO_CHAR(ST), SNAME => 'Работа ' || TO_CHAR(J + 1) || ' этапа ' || TO_CHAR(ST),
DDATE_FROM => ADD_MONTHS(DDATE_FROM, J), DDATE_FROM => DDATE_FROM_J,
DDATE_TO => LAST_DAY(ADD_MONTHS(DDATE_FROM, J + 1) - 1)); DDATE_TO => DDATE_TO_J,
NSTATE => NSTATE);
end loop; end loop;
end loop; end loop;
end GANTT_INIT; 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)) || ' год', RG := PKG_P8PANELS_VISUAL.TGANTT_MAKE(STITLE => 'Задачи на ' || TO_CHAR(EXTRACT(year from sysdate)) || ' год',
NZOOM => PKG_P8PANELS_VISUAL.NGANTT_ZOOM_MONTH); 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, PKG_P8PANELS_VISUAL.TGANTT_ADD_TASK_COLOR(RGANTT => RG,
SBG_COLOR => SBG_COLOR_JOB, SBG_COLOR => SBG_COLOR_JOB,
@ -589,6 +616,7 @@ create or replace package body PKG_P8PANELS_SAMPLES as
SNAME => 'type', SNAME => 'type',
SVALUE => C.TYPE, SVALUE => C.TYPE,
BCLEAR => true); 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); PKG_P8PANELS_VISUAL.TGANTT_ADD_TASK(RGANTT => RG, RTASK => RGT);
end loop; end loop;

View File

@ -125,7 +125,8 @@ create or replace package PKG_P8PANELS_VISUAL as
type TGANTT_TASK_ATTR is record type TGANTT_TASK_ATTR is record
( (
SNAME PKG_STD.TSTRING, -- Наименование 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, -- Описание диаграммы Ганта RGANTT in out nocopy TGANTT, -- Описание диаграммы Ганта
SNAME in varchar2, -- Наименование SNAME in varchar2, -- Наименование
SCAPTION in varchar2, -- Заголовок SCAPTION in varchar2, -- Заголовок
BVISIBLE boolean := true, -- Разрешить отображение
BCLEAR in boolean := false -- Флаг очистки коллекции атрибутов (false - не очищать, true - очистить коллекцию перед добавлением) BCLEAR in boolean := false -- Флаг очистки коллекции атрибутов (false - не очищать, true - очистить коллекцию перед добавлением)
); );
@ -1897,6 +1899,7 @@ text="Формат data_grid и gant как в chart"
RGANTT in out nocopy TGANTT, -- Описание диаграммы Ганта RGANTT in out nocopy TGANTT, -- Описание диаграммы Ганта
SNAME in varchar2, -- Наименование SNAME in varchar2, -- Наименование
SCAPTION in varchar2, -- Заголовок SCAPTION in varchar2, -- Заголовок
BVISIBLE boolean := true, -- Разрешить отображение
BCLEAR in boolean := false -- Флаг очистки коллекции атрибутов (false - не очищать, true - очистить коллекцию перед добавлением) BCLEAR in boolean := false -- Флаг очистки коллекции атрибутов (false - не очищать, true - очистить коллекцию перед добавлением)
) )
is is
@ -1917,6 +1920,7 @@ text="Формат data_grid и gant как в chart"
RGANTT.RTASK_ATTRS.EXTEND(); RGANTT.RTASK_ATTRS.EXTEND();
RGANTT.RTASK_ATTRS(RGANTT.RTASK_ATTRS.LAST).SNAME := SNAME; 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).SCAPTION := SCAPTION;
RGANTT.RTASK_ATTRS(RGANTT.RTASK_ATTRS.LAST).BVISIBLE := BVISIBLE;
end TGANTT_ADD_TASK_ATTR; 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_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_CAPTION, SVALUE => RGANTT.RTASK_ATTRS(I).SCAPTION);
PKG_XFAST.ATTR(SNAME => SRESP_ATTR_VISIBLE, BVALUE => RGANTT.RTASK_ATTRS(I).BVISIBLE);
/* Закрываем динамический атрибут задачи */ /* Закрываем динамический атрибут задачи */
PKG_XFAST.UP(); PKG_XFAST.UP();
end loop; end loop;