БД: Панель "Графики проектов" - добавлены проверки на наличие данных в портфеле проектов

This commit is contained in:
Mikhail Chechnev 2024-04-09 19:07:07 +03:00
parent bcf6c674ea
commit 61fabddaba

View File

@ -1564,6 +1564,8 @@ text="Проверить, что для расчётных полей дата-
from PROJECT P from PROJECT P
where P.COMPANY = NCOMPANY where P.COMPANY = NCOMPANY
and P.STATE in (0, 1, 4) and P.STATE in (0, 1, 4)
and P.BEGPLAN is not null
and P.ENDPLAN is not null
union all union all
select min(PS.BEGPLAN) DBEGPLAN, select min(PS.BEGPLAN) DBEGPLAN,
max(PS.ENDPLAN) DENDPLAN max(PS.ENDPLAN) DENDPLAN
@ -1573,110 +1575,119 @@ text="Проверить, что для расчётных полей дата-
and P.STATE in (0, 1, 4) and P.STATE in (0, 1, 4)
and P.RN = PS.PRN and P.RN = PS.PRN
and PS.STATE in (0, 1, 3) and PS.STATE in (0, 1, 3)
and PS.BEGPLAN is not null
and PS.ENDPLAN is not null
and PS.HRN is null); and PS.HRN is null);
/* Инициализируем таблицу данных */ /* Инициализируем таблицу данных */
RDG := PKG_P8PANELS_VISUAL.TDATA_GRID_MAKE(); RDG := PKG_P8PANELS_VISUAL.TDATA_GRID_MAKE();
/* Формируем структуру заголовка */ /* Если есть данные о начале и окончании проектов в портфеле */
PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG, if ((DFROM is not null) and (DTO is not null)) then
SNAME => 'NRN', /* Формируем структуру заголовка */
SCAPTION => 'Рег. номер', PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG,
SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_NUMB, SNAME => 'NRN',
BVISIBLE => false); SCAPTION => 'Рег. номер',
PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG, SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_NUMB,
SNAME => 'SJOB', BVISIBLE => false);
SCAPTION => 'Работы', PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG,
SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_STR); SNAME => 'SJOB',
PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG, SCAPTION => 'Работы',
SNAME => 'SRESP', SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_STR);
SCAPTION => 'Ответственный', PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG,
SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_STR, SNAME => 'SRESP',
BVISIBLE => false); SCAPTION => 'Ответственный',
PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG, SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_STR,
SNAME => 'NSTATE', BVISIBLE => false);
SCAPTION => 'Состояние', PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG,
SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_NUMB, SNAME => 'NSTATE',
BVISIBLE => false); SCAPTION => 'Состояние',
PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG, SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_NUMB,
SNAME => 'DFROM', BVISIBLE => false);
SCAPTION => 'Начало работы', PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG,
SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_DATE, SNAME => 'DFROM',
BVISIBLE => false); SCAPTION => 'Начало работы',
PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG, SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_DATE,
SNAME => 'DTO', BVISIBLE => false);
SCAPTION => 'Окончание работы', PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG,
SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_DATE, SNAME => 'DTO',
BVISIBLE => false); SCAPTION => 'Окончание работы',
for Y in EXTRACT(year from DFROM) .. EXTRACT(year from DTO) SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_DATE,
loop BVISIBLE => false);
SYEAR_COL_NAME := TO_CHAR(Y); for Y in EXTRACT(year from DFROM) .. EXTRACT(year from DTO)
if (Y = EXTRACT(year from sysdate)) then
BEXPANDED := true;
else
BEXPANDED := false;
end if;
PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG,
SNAME => SYEAR_COL_NAME,
SCAPTION => TO_CHAR(Y),
SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_STR,
BEXPANDABLE => true,
BEXPANDED => BEXPANDED);
for M in 1 .. 12
loop loop
DFROM_CUR := TO_DATE('01.' || LPAD(TO_CHAR(M), 2, '0') || '.' || TO_CHAR(Y), 'dd.mm.yyyy'); SYEAR_COL_NAME := TO_CHAR(Y);
DTO_CUR := LAST_DAY(DFROM_CUR); if (Y = EXTRACT(year from sysdate)) then
if ((DFROM_CUR >= DFROM) and (DTO_CUR <= DTO)) then BEXPANDED := true;
PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG, else
SNAME => SYEAR_COL_NAME || '_' || TO_CHAR(M), BEXPANDED := false;
SCAPTION => LPAD(TO_CHAR(M), 2, '0'),
SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_STR,
SPARENT => SYEAR_COL_NAME);
end if; end if;
PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG,
SNAME => SYEAR_COL_NAME,
SCAPTION => TO_CHAR(Y),
SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_STR,
BEXPANDABLE => true,
BEXPANDED => BEXPANDED);
for M in 1 .. 12
loop
DFROM_CUR := TO_DATE('01.' || LPAD(TO_CHAR(M), 2, '0') || '.' || TO_CHAR(Y), 'dd.mm.yyyy');
DTO_CUR := LAST_DAY(DFROM_CUR);
if ((DFROM_CUR >= DFROM) and (DTO_CUR <= DTO)) then
PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG,
SNAME => SYEAR_COL_NAME || '_' || TO_CHAR(M),
SCAPTION => LPAD(TO_CHAR(M), 2, '0'),
SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_STR,
SPARENT => SYEAR_COL_NAME);
end if;
end loop;
end loop; end loop;
end loop; /* Обходим открытые проекты */
/* Обходим открытые проекты */ for PR in (select P.*
for PR in (select P.* from PROJECT P
from PROJECT P where P.COMPANY = NCOMPANY
where P.COMPANY = NCOMPANY and P.STATE in (0, 1, 4)
and P.STATE in (0, 1, 4) and P.BEGPLAN is not null
order by P.BEGPLAN) and P.ENDPLAN is not null
loop order by P.BEGPLAN)
/* Добвим группу для проекта */
SPRJ_GROUP_NAME := PR.RN;
PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_GROUP(RDATA_GRID => RDG,
SNAME => SPRJ_GROUP_NAME,
SCAPTION => PR.CODE || ' - ' || PR.NAME,
BEXPANDABLE => true,
BEXPANDED => true);
/* Обходим этапы проекта */
for ST in (select PS.RN NRN,
trim(PS.NUMB) || ' - ' || PS.NAME SJOB,
COALESCE(AG.AGNABBR, IND.NAME) SRESP,
PS.STATE NSTATE,
PS.BEGPLAN DFROM,
PS.ENDPLAN DTO
from PROJECTSTAGE PS,
AGNLIST AG,
INS_DEPARTMENT IND
where PS.PRN = PR.RN
and PS.STATE in (0, 1, 3)
and PS.HRN is null
and PS.RESPONSIBLE = AG.RN(+)
and PS.SUBDIV_RESP = IND.RN(+)
order by PS.NUMB)
loop loop
/* Инициализируем строку */ /* Добвим группу для проекта */
RDG_ROW := PKG_P8PANELS_VISUAL.TROW_MAKE(SGROUP => SPRJ_GROUP_NAME); SPRJ_GROUP_NAME := PR.RN;
/* Добавляем колонки с данными */ PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_GROUP(RDATA_GRID => RDG,
PKG_P8PANELS_VISUAL.TROW_ADD_COL(RROW => RDG_ROW, SNAME => 'NRN', NVALUE => ST.NRN); SNAME => SPRJ_GROUP_NAME,
PKG_P8PANELS_VISUAL.TROW_ADD_COL(RROW => RDG_ROW, SNAME => 'SJOB', SVALUE => ST.SJOB); SCAPTION => PR.CODE || ' - ' || PR.NAME,
PKG_P8PANELS_VISUAL.TROW_ADD_COL(RROW => RDG_ROW, SNAME => 'SRESP', SVALUE => ST.SRESP); BEXPANDABLE => true,
PKG_P8PANELS_VISUAL.TROW_ADD_COL(RROW => RDG_ROW, SNAME => 'NSTATE', NVALUE => ST.NSTATE); BEXPANDED => true);
PKG_P8PANELS_VISUAL.TROW_ADD_COL(RROW => RDG_ROW, SNAME => 'DFROM', DVALUE => ST.DFROM); /* Обходим этапы проекта */
PKG_P8PANELS_VISUAL.TROW_ADD_COL(RROW => RDG_ROW, SNAME => 'DTO', DVALUE => ST.DTO); for ST in (select PS.RN NRN,
/* Добавим строку для этапа */ trim(PS.NUMB) || ' - ' || PS.NAME SJOB,
PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_ROW(RDATA_GRID => RDG, RROW => RDG_ROW); COALESCE(AG.AGNABBR, IND.NAME) SRESP,
PS.STATE NSTATE,
PS.BEGPLAN DFROM,
PS.ENDPLAN DTO
from PROJECTSTAGE PS,
AGNLIST AG,
INS_DEPARTMENT IND
where PS.PRN = PR.RN
and PS.STATE in (0, 1, 3)
and PS.BEGPLAN is not null
and PS.ENDPLAN is not null
and PS.HRN is null
and PS.RESPONSIBLE = AG.RN(+)
and PS.SUBDIV_RESP = IND.RN(+)
order by PS.NUMB)
loop
/* Инициализируем строку */
RDG_ROW := PKG_P8PANELS_VISUAL.TROW_MAKE(SGROUP => SPRJ_GROUP_NAME);
/* Добавляем колонки с данными */
PKG_P8PANELS_VISUAL.TROW_ADD_COL(RROW => RDG_ROW, SNAME => 'NRN', NVALUE => ST.NRN);
PKG_P8PANELS_VISUAL.TROW_ADD_COL(RROW => RDG_ROW, SNAME => 'SJOB', SVALUE => ST.SJOB);
PKG_P8PANELS_VISUAL.TROW_ADD_COL(RROW => RDG_ROW, SNAME => 'SRESP', SVALUE => ST.SRESP);
PKG_P8PANELS_VISUAL.TROW_ADD_COL(RROW => RDG_ROW, SNAME => 'NSTATE', NVALUE => ST.NSTATE);
PKG_P8PANELS_VISUAL.TROW_ADD_COL(RROW => RDG_ROW, SNAME => 'DFROM', DVALUE => ST.DFROM);
PKG_P8PANELS_VISUAL.TROW_ADD_COL(RROW => RDG_ROW, SNAME => 'DTO', DVALUE => ST.DTO);
/* Добавим строку для этапа */
PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_ROW(RDATA_GRID => RDG, RROW => RDG_ROW);
end loop;
end loop; end loop;
end loop; end if;
/* Сериализуем описание */ /* Сериализуем описание */
COUT := PKG_P8PANELS_VISUAL.TDATA_GRID_TO_XML(RDATA_GRID => RDG, NINCLUDE_DEF => 1); COUT := PKG_P8PANELS_VISUAL.TDATA_GRID_TO_XML(RDATA_GRID => RDG, NINCLUDE_DEF => 1);
end GRAPH; end GRAPH;