БД: P8PGantt - поддержка заливки прогресса, P8PDataGrif - поддержка сложных заголовков с группами, группировка строк

This commit is contained in:
Mikhail Chechnev 2024-02-03 01:22:12 +03:00
parent 93a73c85ae
commit afb72e475b

View File

@ -51,7 +51,10 @@ create or replace package PKG_P8PANELS_VISUAL as
BORDER boolean, -- Разрешить сортировку BORDER boolean, -- Разрешить сортировку
BFILTER boolean, -- Разрешить отбор BFILTER boolean, -- Разрешить отбор
RCOL_VALS TCOL_VALS, -- Предопределённые значения RCOL_VALS TCOL_VALS, -- Предопределённые значения
SHINT PKG_STD.TSTRING -- Текст всплывающей подсказки SHINT PKG_STD.TSTRING, -- Текст всплывающей подсказки
SPARENT PKG_STD.TSTRING, -- Наименование родительской колонки
BEXPANDABLE boolean, -- Разрешить сокрытие/отображение дочерних колонок
BEXPANDED boolean -- Отобразить/скрыть дочерние колонки
); );
/* Типы данных - коллекция описателей колонок таблицы данных */ /* Типы данных - коллекция описателей колонок таблицы данных */
@ -70,16 +73,30 @@ create or replace package PKG_P8PANELS_VISUAL as
/* Типы данных - строка */ /* Типы данных - строка */
type TROW is record type TROW is record
( (
SGROUP PKG_STD.TSTRING, -- Наименование группы
RCOLS TCOLS -- Колонки RCOLS TCOLS -- Колонки
); );
/* Типы данных - коллекция строк */ /* Типы данных - коллекция строк */
type TROWS is table of TROW; type TROWS is table of TROW;
/* Типы данных - группа */
type TGROUP is record
(
SNAME PKG_STD.TSTRING, -- Наименование
SCAPTION PKG_STD.TSTRING, -- Заголовок
BEXPANDABLE boolean, -- Разрешить сокрытие/отображение дочерних
BEXPANDED boolean -- Отобразить/скрыть дочерние
);
/* Типы данных - коллекция групп */
type TGROUPS is table of TGROUP;
/* Типы данных - таблица данных */ /* Типы данных - таблица данных */
type TDATA_GRID is record type TDATA_GRID is record
( (
RCOL_DEFS TCOL_DEFS, -- Описание колонок RCOL_DEFS TCOL_DEFS, -- Описание колонок
RGROUPS TGROUPS, -- Описание групп
RROWS TROWS -- Данные строк RROWS TROWS -- Данные строк
); );
@ -139,6 +156,7 @@ create or replace package PKG_P8PANELS_VISUAL as
NPROGRESS PKG_STD.TNUMBER := null, -- Прогресс (% готовности) задачи (null - не определен) NPROGRESS PKG_STD.TNUMBER := null, -- Прогресс (% готовности) задачи (null - не определен)
SBG_COLOR PKG_STD.TSTRING := null, -- Цвет заливки задачи (null - использовать цвет по умолчанию из стилей, формат - HTML-цвет, #RRGGBBAA) SBG_COLOR PKG_STD.TSTRING := null, -- Цвет заливки задачи (null - использовать цвет по умолчанию из стилей, формат - HTML-цвет, #RRGGBBAA)
STEXT_COLOR PKG_STD.TSTRING := null, -- Цвет текста заголовка задачи (null - использовать цвет по умолчанию из стилей, формат - HTML-цвет, #RRGGBBAA) STEXT_COLOR PKG_STD.TSTRING := null, -- Цвет текста заголовка задачи (null - использовать цвет по умолчанию из стилей, формат - HTML-цвет, #RRGGBBAA)
SBG_PROGRESS_COLOR PKG_STD.TSTRING := null, -- Цвет заливки прогресса (null - использовать цвет по умолчанию из стилей, формат - HTML-цвет, #RRGGBBAA)
BREAD_ONLY boolean := null, -- Сроки и прогресс задачи только для чтения (null - как указано в описании диаграммы) BREAD_ONLY boolean := null, -- Сроки и прогресс задачи только для чтения (null - как указано в описании диаграммы)
BREAD_ONLY_DATES boolean := null, -- Сроки задачи только для чтения (null - как указано в описании диаграммы) BREAD_ONLY_DATES boolean := null, -- Сроки задачи только для чтения (null - как указано в описании диаграммы)
BREAD_ONLY_PROGRESS boolean := null, -- Прогресс задачи только для чтения (null - как указано в описании диаграммы) BREAD_ONLY_PROGRESS boolean := null, -- Прогресс задачи только для чтения (null - как указано в описании диаграммы)
@ -154,6 +172,7 @@ create or replace package PKG_P8PANELS_VISUAL as
( (
SBG_COLOR PKG_STD.TSTRING := null, -- Цвет заливки задачи (формат - HTML-цвет, #RRGGBBAA) SBG_COLOR PKG_STD.TSTRING := null, -- Цвет заливки задачи (формат - HTML-цвет, #RRGGBBAA)
STEXT_COLOR PKG_STD.TSTRING := null, -- Цвет текста заголовка задачи (формат - HTML-цвет, #RRGGBBAA) STEXT_COLOR PKG_STD.TSTRING := null, -- Цвет текста заголовка задачи (формат - HTML-цвет, #RRGGBBAA)
SBG_PROGRESS_COLOR PKG_STD.TSTRING := null, -- Цвет заливки прогресса (формат - HTML-цвет, #RRGGBBAA)
SDESC PKG_STD.TSTRING -- Описание SDESC PKG_STD.TSTRING -- Описание
); );
@ -252,7 +271,9 @@ create or replace package PKG_P8PANELS_VISUAL as
/* Формирование строки */ /* Формирование строки */
function TROW_MAKE function TROW_MAKE
return TROW; -- Результат работы (
SGROUP in varchar2 := null -- Наименование группы
) return TROW; -- Результат работы
/* Добавление колонки к строке */ /* Добавление колонки к строке */
procedure TROW_ADD_COL procedure TROW_ADD_COL
@ -320,9 +341,23 @@ create or replace package PKG_P8PANELS_VISUAL as
BFILTER in boolean := false, -- Разрешить отбор по колонке BFILTER in boolean := false, -- Разрешить отбор по колонке
RCOL_VALS in TCOL_VALS := null, -- Предопределённые значения колонки RCOL_VALS in TCOL_VALS := null, -- Предопределённые значения колонки
SHINT in varchar2 := null, -- Текст всплывающей подсказки SHINT in varchar2 := null, -- Текст всплывающей подсказки
SPARENT in varchar2 := null, -- Наименование родительской колонки
BEXPANDABLE in boolean := false, -- Разрешить сокрытие/отображение дочерних колонок
BEXPANDED in boolean := true, -- Отобразить/скрыть дочерние колонки
BCLEAR in boolean := false -- Флаг очистки коллекции описаний колонок таблицы данных (false - не очищать, true - очистить коллекцию перед добавлением) BCLEAR in boolean := false -- Флаг очистки коллекции описаний колонок таблицы данных (false - не очищать, true - очистить коллекцию перед добавлением)
); );
/* Добавление описания группы к таблице данных */
procedure TDATA_GRID_ADD_GROUP
(
RDATA_GRID in out nocopy TDATA_GRID, -- Описание таблицы данных
SNAME in varchar2, -- Наименование группы
SCAPTION in varchar2, -- Заголовок группы
BEXPANDABLE in boolean := false, -- Разрешить сокрытие/отображение дочерних
BEXPANDED in boolean := true, -- Отобразить/скрыть дочерние
BCLEAR in boolean := false -- Флаг очистки коллекции описаний групп таблицы данных (false - не очищать, true - очистить коллекцию перед добавлением)
);
/* Добавление описания колонки к таблице данных */ /* Добавление описания колонки к таблице данных */
procedure TDATA_GRID_ADD_ROW procedure TDATA_GRID_ADD_ROW
( (
@ -407,6 +442,7 @@ create or replace package PKG_P8PANELS_VISUAL as
NPROGRESS in number := null, -- Прогресс (% готовности) задачи (null - не определен) NPROGRESS in number := null, -- Прогресс (% готовности) задачи (null - не определен)
SBG_COLOR in varchar2 := null, -- Цвет заливки задачи (null - использовать цвет по умолчанию из стилей, формат - HTML-цвет, #RRGGBBAA) SBG_COLOR in varchar2 := null, -- Цвет заливки задачи (null - использовать цвет по умолчанию из стилей, формат - HTML-цвет, #RRGGBBAA)
STEXT_COLOR in varchar2 := null, -- Цвет текста заголовка задачи (null - использовать цвет по умолчанию из стилей, формат - HTML-цвет, #RRGGBBAA) STEXT_COLOR in varchar2 := null, -- Цвет текста заголовка задачи (null - использовать цвет по умолчанию из стилей, формат - HTML-цвет, #RRGGBBAA)
SBG_PROGRESS_COLOR in varchar2 := null, -- Цвет заливки прогресса (null - использовать цвет по умолчанию из стилей, формат - HTML-цвет, #RRGGBBAA)
BREAD_ONLY in boolean := null, -- Сроки и прогресс задачи только для чтения (null - как указано в описании диаграммы) BREAD_ONLY in boolean := null, -- Сроки и прогресс задачи только для чтения (null - как указано в описании диаграммы)
BREAD_ONLY_DATES in boolean := null, -- Сроки задачи только для чтения (null - как указано в описании диаграммы) BREAD_ONLY_DATES in boolean := null, -- Сроки задачи только для чтения (null - как указано в описании диаграммы)
BREAD_ONLY_PROGRESS in boolean := null -- Прогресс задачи только для чтения (null - как указано в описании диаграммы) BREAD_ONLY_PROGRESS in boolean := null -- Прогресс задачи только для чтения (null - как указано в описании диаграммы)
@ -456,6 +492,7 @@ create or replace package PKG_P8PANELS_VISUAL as
RGANTT in out nocopy TGANTT, -- Описание диаграммы Ганта RGANTT in out nocopy TGANTT, -- Описание диаграммы Ганта
SBG_COLOR in varchar2 := null, -- Цвет заливки задачи (формат - HTML-цвет, #RRGGBBAA) SBG_COLOR in varchar2 := null, -- Цвет заливки задачи (формат - HTML-цвет, #RRGGBBAA)
STEXT_COLOR in varchar2 := null, -- Цвет текста заголовка задачи (формат - HTML-цвет, #RRGGBBAA) STEXT_COLOR in varchar2 := null, -- Цвет текста заголовка задачи (формат - HTML-цвет, #RRGGBBAA)
SBG_PROGRESS_COLOR in varchar2 := null, -- Цвет заливки прогресса (формат - HTML-цвет, #RRGGBBAA)
SDESC in varchar2, -- Описание SDESC in varchar2, -- Описание
BCLEAR in boolean := false -- Флаг очистки коллекции цветов (false - не очищать, true - очистить коллекцию перед добавлением) BCLEAR in boolean := false -- Флаг очистки коллекции цветов (false - не очищать, true - очистить коллекцию перед добавлением)
); );
@ -552,6 +589,7 @@ text="Формат data_grid и gant как в chart"
SRESP_TAG_XDATA constant PKG_STD.TSTRING := 'XDATA'; -- Тэг для корня описания данных SRESP_TAG_XDATA constant PKG_STD.TSTRING := 'XDATA'; -- Тэг для корня описания данных
SRESP_TAG_XROWS constant PKG_STD.TSTRING := 'XROWS'; -- Тэг для строк данных SRESP_TAG_XROWS constant PKG_STD.TSTRING := 'XROWS'; -- Тэг для строк данных
SRESP_TAG_XCOLUMNS_DEF constant PKG_STD.TSTRING := 'XCOLUMNS_DEF'; -- Тэг для описания колонок SRESP_TAG_XCOLUMNS_DEF constant PKG_STD.TSTRING := 'XCOLUMNS_DEF'; -- Тэг для описания колонок
SRESP_TAG_XGROUPS constant PKG_STD.TSTRING := 'XGROUPS'; -- Тэг для описания групп
SRESP_TAG_XGANTT_DEF constant PKG_STD.TSTRING := 'XGANTT_DEF'; -- Тэг для описания заголовка диаграммы Ганта SRESP_TAG_XGANTT_DEF constant PKG_STD.TSTRING := 'XGANTT_DEF'; -- Тэг для описания заголовка диаграммы Ганта
SRESP_TAG_XGANTT_TASKS constant PKG_STD.TSTRING := 'XGANTT_TASKS'; -- Тэг для описания коллекции задач диаграммы Ганта SRESP_TAG_XGANTT_TASKS constant PKG_STD.TSTRING := 'XGANTT_TASKS'; -- Тэг для описания коллекции задач диаграммы Ганта
SRESP_TAG_XCHART constant PKG_STD.TSTRING := 'XCHART'; -- Тэг для описания графика SRESP_TAG_XCHART constant PKG_STD.TSTRING := 'XCHART'; -- Тэг для описания графика
@ -572,6 +610,10 @@ text="Формат data_grid и gant как в chart"
SRESP_ATTR_DESC constant PKG_STD.TSTRING := 'desc'; -- Атрибут для описания SRESP_ATTR_DESC constant PKG_STD.TSTRING := 'desc'; -- Атрибут для описания
SRESP_ATTR_TYPE constant PKG_STD.TSTRING := 'type'; -- Атрибут для типа SRESP_ATTR_TYPE constant PKG_STD.TSTRING := 'type'; -- Атрибут для типа
SRESP_ATTR_HINT constant PKG_STD.TSTRING := 'hint'; -- Атрибут для подсказки SRESP_ATTR_HINT constant PKG_STD.TSTRING := 'hint'; -- Атрибут для подсказки
SRESP_ATTR_GROUP_NAME constant PKG_STD.TSTRING := 'groupName'; -- Атрибут для наименования группы
SRESP_ATTR_PARENT constant PKG_STD.TSTRING := 'parent'; -- Атрибут для ссылки на родителя
SRESP_ATTR_EXPANDABLE constant PKG_STD.TSTRING := 'expandable'; -- Атрибут для доступности действия сокрытия/отображения
SRESP_ATTR_EXPANDED constant PKG_STD.TSTRING := 'expanded'; -- Атрибут для флага сокрытия/отображения
/* Константы - атрибуты ответов (таблица данных) */ /* Константы - атрибуты ответов (таблица данных) */
SRESP_ATTR_DT_ORDER constant PKG_STD.TSTRING := 'order'; -- Атрибут для флага сортировки SRESP_ATTR_DT_ORDER constant PKG_STD.TSTRING := 'order'; -- Атрибут для флага сортировки
@ -587,6 +629,7 @@ text="Формат data_grid и gant как в chart"
SRESP_ATTR_TASK_RO_DATES constant PKG_STD.TSTRING := 'readOnlyDates'; -- Атрибут для флага задачи "даты только для чтения" SRESP_ATTR_TASK_RO_DATES constant PKG_STD.TSTRING := 'readOnlyDates'; -- Атрибут для флага задачи "даты только для чтения"
SRESP_ATTR_TASK_BG_COLOR constant PKG_STD.TSTRING := 'bgColor'; -- Атрибут для цвета заголовка задачи SRESP_ATTR_TASK_BG_COLOR constant PKG_STD.TSTRING := 'bgColor'; -- Атрибут для цвета заголовка задачи
SRESP_ATTR_TASK_TEXT_COLOR constant PKG_STD.TSTRING := 'textColor'; -- Атрибут для цвета текста задачи SRESP_ATTR_TASK_TEXT_COLOR constant PKG_STD.TSTRING := 'textColor'; -- Атрибут для цвета текста задачи
SRESP_ATTR_TASK_BG_PRG_COLOR constant PKG_STD.TSTRING := 'bgProgressColor'; -- Атрибут для цвета прогресса задачи
SRESP_ATTR_TASK_ATTRIBUTES constant PKG_STD.TSTRING := 'taskAttributes'; -- Атрибут для коллекции атрибутов задачи SRESP_ATTR_TASK_ATTRIBUTES constant PKG_STD.TSTRING := 'taskAttributes'; -- Атрибут для коллекции атрибутов задачи
SRESP_ATTR_TASK_COLORS constant PKG_STD.TSTRING := 'taskColors'; -- Атрибут для коллекции цветов задачи SRESP_ATTR_TASK_COLORS constant PKG_STD.TSTRING := 'taskColors'; -- Атрибут для коллекции цветов задачи
@ -695,7 +738,10 @@ text="Формат data_grid и gant как в chart"
BORDER in boolean := false, -- Разрешить сортировку BORDER in boolean := false, -- Разрешить сортировку
BFILTER in boolean := false, -- Разрешить отбор BFILTER in boolean := false, -- Разрешить отбор
RCOL_VALS in TCOL_VALS := null, -- Предопределённые значения RCOL_VALS in TCOL_VALS := null, -- Предопределённые значения
SHINT in varchar2 := null -- Текст всплывающей подсказки SHINT in varchar2 := null, -- Текст всплывающей подсказки
SPARENT in varchar2 := null, -- Наименование родительской колонки
BEXPANDABLE in boolean := false, -- Разрешить сокрытие/отображение дочерних колонок
BEXPANDED in boolean := true -- Отобразить/скрыть дочерние колонки
) return TCOL_DEF -- Результат работы ) return TCOL_DEF -- Результат работы
is is
RRES TCOL_DEF; -- Буфер для результата RRES TCOL_DEF; -- Буфер для результата
@ -711,6 +757,9 @@ text="Формат data_grid и gant как в chart"
RRES.BFILTER := COALESCE(BFILTER, false); RRES.BFILTER := COALESCE(BFILTER, false);
RRES.RCOL_VALS := COALESCE(RCOL_VALS, TCOL_VALS()); RRES.RCOL_VALS := COALESCE(RCOL_VALS, TCOL_VALS());
RRES.SHINT := SHINT; RRES.SHINT := SHINT;
RRES.SPARENT := SPARENT;
RRES.BEXPANDABLE := COALESCE(BEXPANDABLE, false);
RRES.BEXPANDED := COALESCE(BEXPANDED, true);
/* Возвращаем результат */ /* Возвращаем результат */
return RRES; return RRES;
end TCOL_DEF_MAKE; end TCOL_DEF_MAKE;
@ -729,6 +778,9 @@ text="Формат data_grid и gant как в chart"
BFILTER in boolean := false, -- Разрешить отбор BFILTER in boolean := false, -- Разрешить отбор
RCOL_VALS in TCOL_VALS := null, -- Предопределённые значения RCOL_VALS in TCOL_VALS := null, -- Предопределённые значения
SHINT in varchar2 := null, -- Текст всплывающей подсказки SHINT in varchar2 := null, -- Текст всплывающей подсказки
SPARENT in varchar2 := null, -- Наименование родительской колонки
BEXPANDABLE in boolean := false, -- Разрешить сокрытие/отображение дочерних колонок
BEXPANDED in boolean := true, -- Отобразить/скрыть дочерние колонки
BCLEAR in boolean := false -- Флаг очистки коллекции (false - не очищать, true - очистить коллекцию перед добавлением) BCLEAR in boolean := false -- Флаг очистки коллекции (false - не очищать, true - очистить коллекцию перед добавлением)
) )
is is
@ -747,8 +799,11 @@ text="Формат data_grid и gant как в chart"
BVISIBLE => BVISIBLE, BVISIBLE => BVISIBLE,
BORDER => BORDER, BORDER => BORDER,
BFILTER => BFILTER, BFILTER => BFILTER,
RCOL_VALS => RCOL_VALS,
SHINT => SHINT, SHINT => SHINT,
RCOL_VALS => RCOL_VALS); SPARENT => SPARENT,
BEXPANDABLE => BEXPANDABLE,
BEXPANDED => BEXPANDED);
end TCOL_DEFS_ADD; end TCOL_DEFS_ADD;
/* Поиск описания колонки по наименованию */ /* Поиск описания колонки по наименованию */
@ -772,7 +827,7 @@ text="Формат data_grid и gant как в chart"
return null; return null;
end TCOL_DEFS_FIND; end TCOL_DEFS_FIND;
/* Сериализация описания колонки таблицы данных */ /* Сериализация описания колонок таблицы данных */
procedure TCOL_DEFS_TO_XML procedure TCOL_DEFS_TO_XML
( (
RCOL_DEFS in TCOL_DEFS -- Описание колонок таблицы данных RCOL_DEFS in TCOL_DEFS -- Описание колонок таблицы данных
@ -793,6 +848,9 @@ text="Формат data_grid и gant как в chart"
PKG_XFAST.ATTR(SNAME => SRESP_ATTR_DT_ORDER, BVALUE => RCOL_DEFS(I).BORDER); PKG_XFAST.ATTR(SNAME => SRESP_ATTR_DT_ORDER, BVALUE => RCOL_DEFS(I).BORDER);
PKG_XFAST.ATTR(SNAME => SRESP_ATTR_DT_FILTER, BVALUE => RCOL_DEFS(I).BFILTER); PKG_XFAST.ATTR(SNAME => SRESP_ATTR_DT_FILTER, BVALUE => RCOL_DEFS(I).BFILTER);
PKG_XFAST.ATTR(SNAME => SRESP_ATTR_HINT, SVALUE => RCOL_DEFS(I).SHINT); PKG_XFAST.ATTR(SNAME => SRESP_ATTR_HINT, SVALUE => RCOL_DEFS(I).SHINT);
PKG_XFAST.ATTR(SNAME => SRESP_ATTR_PARENT, SVALUE => RCOL_DEFS(I).SPARENT);
PKG_XFAST.ATTR(SNAME => SRESP_ATTR_EXPANDABLE, BVALUE => RCOL_DEFS(I).BEXPANDABLE);
PKG_XFAST.ATTR(SNAME => SRESP_ATTR_EXPANDED, BVALUE => RCOL_DEFS(I).BEXPANDED);
/* Предопределённые значения */ /* Предопределённые значения */
if (RCOL_DEFS(I).RCOL_VALS is not null) and (RCOL_DEFS(I).RCOL_VALS.COUNT > 0) then if (RCOL_DEFS(I).RCOL_VALS is not null) and (RCOL_DEFS(I).RCOL_VALS.COUNT > 0) then
for V in RCOL_DEFS(I).RCOL_VALS.FIRST .. RCOL_DEFS(I).RCOL_VALS.LAST for V in RCOL_DEFS(I).RCOL_VALS.FIRST .. RCOL_DEFS(I).RCOL_VALS.LAST
@ -862,13 +920,85 @@ text="Формат data_grid и gant как в chart"
RCOLS(RCOLS.LAST) := TCOL_MAKE(SNAME => SNAME, SVALUE => SVALUE, NVALUE => NVALUE, DVALUE => DVALUE); RCOLS(RCOLS.LAST) := TCOL_MAKE(SNAME => SNAME, SVALUE => SVALUE, NVALUE => NVALUE, DVALUE => DVALUE);
end TCOLS_ADD; end TCOLS_ADD;
/* Формирование описания группы */
function TGROUP_MAKE
(
SNAME in varchar2, -- Наименование
SCAPTION in varchar2, -- Заголовок
BEXPANDABLE in boolean := true, -- Разрешить сокрытие/отображение дочерних
BEXPANDED in boolean := true -- Отобразить/скрыть дочерние
) return TGROUP -- Результат работы
is
RRES TGROUP; -- Буфер для результата
begin
/* Формируем объект */
RRES.SNAME := SNAME;
RRES.SCAPTION := SCAPTION;
RRES.BEXPANDABLE := COALESCE(BEXPANDABLE, true);
RRES.BEXPANDED := COALESCE(BEXPANDED, true);
/* Возвращаем результат */
return RRES;
end TGROUP_MAKE;
/* Добавление описания группы в коллекцию */
procedure TGROUPS_ADD
(
RGROUPS in out nocopy TGROUPS, -- Коллекция описаний колонок
SNAME in varchar2, -- Наименование
SCAPTION in varchar2, -- Заголовок
BEXPANDABLE in boolean := false, -- Разрешить сокрытие/отображение дочерних
BEXPANDED in boolean := true, -- Отобразить/скрыть дочерние
BCLEAR in boolean := false -- Флаг очистки коллекции (false - не очищать, true - очистить коллекцию перед добавлением)
)
is
begin
/* Инициализируем коллекцию если необходимо */
if ((RGROUPS is null) or (BCLEAR)) then
RGROUPS := TGROUPS();
end if;
/* Добавляем элемент */
RGROUPS.EXTEND();
RGROUPS(RGROUPS.LAST) := TGROUP_MAKE(SNAME => SNAME,
SCAPTION => SCAPTION,
BEXPANDABLE => BEXPANDABLE,
BEXPANDED => BEXPANDED);
end TGROUPS_ADD;
/* Сериализация описания групп таблицы данных */
procedure TGROUPS_TO_XML
(
RGROUPS in TGROUPS -- Описание групп таблицы данных
)
is
begin
/* Обходим группы из коллекции */
if ((RGROUPS is not null) and (RGROUPS.COUNT > 0)) then
for I in RGROUPS.FIRST .. RGROUPS.LAST
loop
/* Открываем описание группы */
PKG_XFAST.DOWN_NODE(SNAME => SRESP_TAG_XGROUPS);
/* Атрибуты группы */
PKG_XFAST.ATTR(SNAME => SRESP_ATTR_NAME, SVALUE => RGROUPS(I).SNAME);
PKG_XFAST.ATTR(SNAME => SRESP_ATTR_CAPTION, SVALUE => RGROUPS(I).SCAPTION);
PKG_XFAST.ATTR(SNAME => SRESP_ATTR_EXPANDABLE, BVALUE => RGROUPS(I).BEXPANDABLE);
PKG_XFAST.ATTR(SNAME => SRESP_ATTR_EXPANDED, BVALUE => RGROUPS(I).BEXPANDED);
/* Закрываем описание группы */
PKG_XFAST.UP();
end loop;
end if;
end TGROUPS_TO_XML;
/* Формирование строки */ /* Формирование строки */
function TROW_MAKE function TROW_MAKE
(
SGROUP in varchar2 := null -- Наименование группы
)
return TROW -- Результат работы return TROW -- Результат работы
is is
RRES TROW; -- Буфер для результата RRES TROW; -- Буфер для результата
begin begin
/* Формируем объект */ /* Формируем объект */
RRES.SGROUP := SGROUP;
RRES.RCOLS := TCOLS(); RRES.RCOLS := TCOLS();
/* Возвращаем результат */ /* Возвращаем результат */
return RRES; return RRES;
@ -959,6 +1089,10 @@ text="Формат data_grid и gant как в chart"
loop loop
/* Открываем строку */ /* Открываем строку */
PKG_XFAST.DOWN_NODE(SNAME => SRESP_TAG_XROWS); PKG_XFAST.DOWN_NODE(SNAME => SRESP_TAG_XROWS);
/* Если указана группа - добавим её */
if (RROWS(I).SGROUP is not null) then
PKG_XFAST.ATTR(SNAME => SRESP_ATTR_GROUP_NAME, SVALUE => RROWS(I).SGROUP);
end if;
/* Обходим колонки строки */ /* Обходим колонки строки */
if ((RROWS(I).RCOLS is not null) and (RROWS(I).RCOLS.COUNT > 0)) then if ((RROWS(I).RCOLS is not null) and (RROWS(I).RCOLS.COUNT > 0)) then
for J in RROWS(I).RCOLS.FIRST .. RROWS(I).RCOLS.LAST for J in RROWS(I).RCOLS.FIRST .. RROWS(I).RCOLS.LAST
@ -1000,6 +1134,7 @@ text="Формат data_grid и gant как в chart"
begin begin
/* Формируем объект */ /* Формируем объект */
RRES.RCOL_DEFS := TCOL_DEFS(); RRES.RCOL_DEFS := TCOL_DEFS();
RRES.RGROUPS := TGROUPS();
RRES.RROWS := TROWS(); RRES.RROWS := TROWS();
/* Возвращаем результат */ /* Возвращаем результат */
return RRES; return RRES;
@ -1030,6 +1165,9 @@ text="Формат data_grid и gant как в chart"
BFILTER in boolean := false, -- Разрешить отбор по колонке BFILTER in boolean := false, -- Разрешить отбор по колонке
RCOL_VALS in TCOL_VALS := null, -- Предопределённые значения колонки RCOL_VALS in TCOL_VALS := null, -- Предопределённые значения колонки
SHINT in varchar2 := null, -- Текст всплывающей подсказки SHINT in varchar2 := null, -- Текст всплывающей подсказки
SPARENT in varchar2 := null, -- Наименование родительской колонки
BEXPANDABLE in boolean := false, -- Разрешить сокрытие/отображение дочерних колонок
BEXPANDED in boolean := true, -- Отобразить/скрыть дочерние колонки
BCLEAR in boolean := false -- Флаг очистки коллекции описаний колонок таблицы данных (false - не очищать, true - очистить коллекцию перед добавлением) BCLEAR in boolean := false -- Флаг очистки коллекции описаний колонок таблицы данных (false - не очищать, true - очистить коллекцию перед добавлением)
) )
is is
@ -1046,9 +1184,33 @@ text="Формат data_grid и gant как в chart"
BFILTER => BFILTER, BFILTER => BFILTER,
RCOL_VALS => RCOL_VALS, RCOL_VALS => RCOL_VALS,
SHINT => SHINT, SHINT => SHINT,
SPARENT => SPARENT,
BEXPANDABLE => BEXPANDABLE,
BEXPANDED => BEXPANDED,
BCLEAR => BCLEAR); BCLEAR => BCLEAR);
end TDATA_GRID_ADD_COL_DEF; end TDATA_GRID_ADD_COL_DEF;
/* Добавление описания группы к таблице данных */
procedure TDATA_GRID_ADD_GROUP
(
RDATA_GRID in out nocopy TDATA_GRID, -- Описание таблицы данных
SNAME in varchar2, -- Наименование группы
SCAPTION in varchar2, -- Заголовок группы
BEXPANDABLE in boolean := false, -- Разрешить сокрытие/отображение дочерних
BEXPANDED in boolean := true, -- Отобразить/скрыть дочерние
BCLEAR in boolean := false -- Флаг очистки коллекции описаний групп таблицы данных (false - не очищать, true - очистить коллекцию перед добавлением)
)
is
begin
/* Формируем описание и добавляем в коллекцию таблицы данных */
TGROUPS_ADD(RGROUPS => RDATA_GRID.RGROUPS,
SNAME => SNAME,
SCAPTION => SCAPTION,
BEXPANDABLE => BEXPANDABLE,
BEXPANDED => BEXPANDED,
BCLEAR => BCLEAR);
end TDATA_GRID_ADD_GROUP;
/* Добавление описания колонки к таблице данных */ /* Добавление описания колонки к таблице данных */
procedure TDATA_GRID_ADD_ROW procedure TDATA_GRID_ADD_ROW
( (
@ -1084,6 +1246,8 @@ text="Формат data_grid и gant как в chart"
if (NINCLUDE_DEF = 1) then if (NINCLUDE_DEF = 1) then
TCOL_DEFS_TO_XML(RCOL_DEFS => RDATA_GRID.RCOL_DEFS); TCOL_DEFS_TO_XML(RCOL_DEFS => RDATA_GRID.RCOL_DEFS);
end if; end if;
/* Формируем описание групп */
TGROUPS_TO_XML(RGROUPS => RDATA_GRID.RGROUPS);
/* Формируем описание строк */ /* Формируем описание строк */
TROWS_TO_XML(RCOL_DEFS => RDATA_GRID.RCOL_DEFS, RROWS => RDATA_GRID.RROWS); TROWS_TO_XML(RCOL_DEFS => RDATA_GRID.RCOL_DEFS, RROWS => RDATA_GRID.RROWS);
/* Закрываем корень */ /* Закрываем корень */
@ -1502,7 +1666,8 @@ text="Формат data_grid и gant как в chart"
( (
RTASK_COLORS in TGANTT_TASK_COLORS, -- Описание цветов задачи диаграммы Ганта RTASK_COLORS in TGANTT_TASK_COLORS, -- Описание цветов задачи диаграммы Ганта
SBG_COLOR in varchar2 := null, -- Цвет заливки задачи (формат - HTML-цвет, #RRGGBBAA) SBG_COLOR in varchar2 := null, -- Цвет заливки задачи (формат - HTML-цвет, #RRGGBBAA)
STEXT_COLOR in varchar2 := null -- Цвет текста заголовка задачи (формат - HTML-цвет, #RRGGBBAA) STEXT_COLOR in varchar2 := null, -- Цвет текста заголовка задачи (формат - HTML-цвет, #RRGGBBAA)
SBG_PROGRESS_COLOR in varchar2 := null -- Цвет заливки прогресса (формат - HTML-цвет, #RRGGBBAA)
) return TGANTT_TASK_COLOR -- Найденное описание цвета (null - если не нашли) ) return TGANTT_TASK_COLOR -- Найденное описание цвета (null - если не нашли)
is is
begin begin
@ -1511,7 +1676,9 @@ text="Формат data_grid и gant как в chart"
for I in RTASK_COLORS.FIRST .. RTASK_COLORS.LAST for I in RTASK_COLORS.FIRST .. RTASK_COLORS.LAST
loop loop
if ((CMP_VC2(V1 => RTASK_COLORS(I).SBG_COLOR, V2 => SBG_COLOR) = 1) and if ((CMP_VC2(V1 => RTASK_COLORS(I).SBG_COLOR, V2 => SBG_COLOR) = 1) and
(CMP_VC2(V1 => RTASK_COLORS(I).STEXT_COLOR, V2 => STEXT_COLOR) = 1)) then (CMP_VC2(V1 => RTASK_COLORS(I).STEXT_COLOR, V2 => STEXT_COLOR) = 1) and
(CMP_VC2(V1 => RTASK_COLORS(I).SBG_PROGRESS_COLOR, V2 => SBG_PROGRESS_COLOR) = 1))
then
return RTASK_COLORS(I); return RTASK_COLORS(I);
end if; end if;
end loop; end loop;
@ -1532,6 +1699,7 @@ text="Формат data_grid и gant как в chart"
NPROGRESS in number := null, -- Прогресс (% готовности) задачи (null - не определен) NPROGRESS in number := null, -- Прогресс (% готовности) задачи (null - не определен)
SBG_COLOR in varchar2 := null, -- Цвет заливки задачи (null - использовать цвет по умолчанию из стилей, формат - HTML-цвет, #RRGGBBAA) SBG_COLOR in varchar2 := null, -- Цвет заливки задачи (null - использовать цвет по умолчанию из стилей, формат - HTML-цвет, #RRGGBBAA)
STEXT_COLOR in varchar2 := null, -- Цвет текста заголовка задачи (null - использовать цвет по умолчанию из стилей, формат - HTML-цвет, #RRGGBBAA) STEXT_COLOR in varchar2 := null, -- Цвет текста заголовка задачи (null - использовать цвет по умолчанию из стилей, формат - HTML-цвет, #RRGGBBAA)
SBG_PROGRESS_COLOR in varchar2 := null, -- Цвет заливки прогресса (null - использовать цвет по умолчанию из стилей, формат - HTML-цвет, #RRGGBBAA)
BREAD_ONLY in boolean := null, -- Сроки и прогресс задачи только для чтения (null - как указано в описании диаграммы) BREAD_ONLY in boolean := null, -- Сроки и прогресс задачи только для чтения (null - как указано в описании диаграммы)
BREAD_ONLY_DATES in boolean := null, -- Сроки задачи только для чтения (null - как указано в описании диаграммы) BREAD_ONLY_DATES in boolean := null, -- Сроки задачи только для чтения (null - как указано в описании диаграммы)
BREAD_ONLY_PROGRESS in boolean := null -- Прогресс задачи только для чтения (null - как указано в описании диаграммы) BREAD_ONLY_PROGRESS in boolean := null -- Прогресс задачи только для чтения (null - как указано в описании диаграммы)
@ -1557,6 +1725,7 @@ text="Формат data_grid и gant как в chart"
RRES.NPROGRESS := NPROGRESS; RRES.NPROGRESS := NPROGRESS;
RRES.SBG_COLOR := SBG_COLOR; RRES.SBG_COLOR := SBG_COLOR;
RRES.STEXT_COLOR := STEXT_COLOR; RRES.STEXT_COLOR := STEXT_COLOR;
RRES.SBG_PROGRESS_COLOR := SBG_PROGRESS_COLOR;
RRES.BREAD_ONLY := BREAD_ONLY; RRES.BREAD_ONLY := BREAD_ONLY;
RRES.BREAD_ONLY_DATES := BREAD_ONLY_DATES; RRES.BREAD_ONLY_DATES := BREAD_ONLY_DATES;
RRES.BREAD_ONLY_PROGRESS := BREAD_ONLY_PROGRESS; RRES.BREAD_ONLY_PROGRESS := BREAD_ONLY_PROGRESS;
@ -1644,6 +1813,9 @@ text="Формат data_grid и gant как в chart"
if (RTASKS(I).STEXT_COLOR is not null) then if (RTASKS(I).STEXT_COLOR is not null) then
PKG_XFAST.ATTR(SNAME => SRESP_ATTR_TASK_TEXT_COLOR, SVALUE => RTASKS(I).STEXT_COLOR); PKG_XFAST.ATTR(SNAME => SRESP_ATTR_TASK_TEXT_COLOR, SVALUE => RTASKS(I).STEXT_COLOR);
end if; end if;
if (RTASKS(I).SBG_PROGRESS_COLOR is not null) then
PKG_XFAST.ATTR(SNAME => SRESP_ATTR_TASK_BG_PRG_COLOR, SVALUE => RTASKS(I).SBG_PROGRESS_COLOR);
end if;
if (RTASKS(I).BREAD_ONLY is not null) then if (RTASKS(I).BREAD_ONLY is not null) then
PKG_XFAST.ATTR(SNAME => SRESP_ATTR_TASK_RO, BVALUE => RTASKS(I).BREAD_ONLY); PKG_XFAST.ATTR(SNAME => SRESP_ATTR_TASK_RO, BVALUE => RTASKS(I).BREAD_ONLY);
end if; end if;
@ -1735,21 +1907,22 @@ text="Формат data_grid и gant как в chart"
RGANTT in out nocopy TGANTT, -- Описание диаграммы Ганта RGANTT in out nocopy TGANTT, -- Описание диаграммы Ганта
SBG_COLOR in varchar2 := null, -- Цвет заливки задачи (формат - HTML-цвет, #RRGGBBAA) SBG_COLOR in varchar2 := null, -- Цвет заливки задачи (формат - HTML-цвет, #RRGGBBAA)
STEXT_COLOR in varchar2 := null, -- Цвет текста заголовка задачи (формат - HTML-цвет, #RRGGBBAA) STEXT_COLOR in varchar2 := null, -- Цвет текста заголовка задачи (формат - HTML-цвет, #RRGGBBAA)
SBG_PROGRESS_COLOR in varchar2 := null, -- Цвет заливки прогресса (формат - HTML-цвет, #RRGGBBAA)
SDESC in varchar2, -- Описание SDESC in varchar2, -- Описание
BCLEAR in boolean := false -- Флаг очистки коллекции цветов (false - не очищать, true - очистить коллекцию перед добавлением) BCLEAR in boolean := false -- Флаг очистки коллекции цветов (false - не очищать, true - очистить коллекцию перед добавлением)
) )
is is
begin begin
/* Проверим параметры */ /* Проверим параметры */
if ((SBG_COLOR is null) and (STEXT_COLOR is null)) then if ((SBG_COLOR is null) and (STEXT_COLOR is null) and (SBG_PROGRESS_COLOR is null)) then
P_EXCEPTION(0, P_EXCEPTION(0,
'Должен быть указан цвет заливки или цвет текста задачи.'); 'Должен быть указан цвет заливки или цвет текста задачи, или цвет заливки прогресса.');
end if; end if;
if (SDESC is null) then if (SDESC is null) then
P_EXCEPTION(0, 'Описание цвета должно быть задано.'); P_EXCEPTION(0, 'Описание цвета должно быть задано.');
end if; end if;
/* Проверим, что такого ещё нет */ /* Проверим, что такого ещё нет */
if (TGANTT_TASK_COLOR_FIND(RTASK_COLORS => RGANTT.RTASK_COLORS, SBG_COLOR => SBG_COLOR, STEXT_COLOR => STEXT_COLOR) if (TGANTT_TASK_COLOR_FIND(RTASK_COLORS => RGANTT.RTASK_COLORS, SBG_COLOR => SBG_COLOR, STEXT_COLOR => STEXT_COLOR, SBG_PROGRESS_COLOR => SBG_PROGRESS_COLOR)
.SDESC is not null) then .SDESC is not null) then
P_EXCEPTION(0, P_EXCEPTION(0,
'Такое описание цвета для задачи диаграммы Ганта уже зарегистрировано.'); 'Такое описание цвета для задачи диаграммы Ганта уже зарегистрировано.');
@ -1762,6 +1935,7 @@ text="Формат data_grid и gant как в chart"
RGANTT.RTASK_COLORS.EXTEND(); RGANTT.RTASK_COLORS.EXTEND();
RGANTT.RTASK_COLORS(RGANTT.RTASK_COLORS.LAST).SBG_COLOR := SBG_COLOR; RGANTT.RTASK_COLORS(RGANTT.RTASK_COLORS.LAST).SBG_COLOR := SBG_COLOR;
RGANTT.RTASK_COLORS(RGANTT.RTASK_COLORS.LAST).STEXT_COLOR := STEXT_COLOR; RGANTT.RTASK_COLORS(RGANTT.RTASK_COLORS.LAST).STEXT_COLOR := STEXT_COLOR;
RGANTT.RTASK_COLORS(RGANTT.RTASK_COLORS.LAST).SBG_PROGRESS_COLOR := SBG_PROGRESS_COLOR;
RGANTT.RTASK_COLORS(RGANTT.RTASK_COLORS.LAST).SDESC := SDESC; RGANTT.RTASK_COLORS(RGANTT.RTASK_COLORS.LAST).SDESC := SDESC;
end TGANTT_ADD_TASK_COLOR; end TGANTT_ADD_TASK_COLOR;