From 74d7f15563ec2a7e3f6db2b6be7c73ac1b40c97c Mon Sep 17 00:00:00 2001 From: davay-popozhe Date: Wed, 17 Apr 2024 17:40:38 +0300 Subject: [PATCH 01/76] exclude dist/ --- .gitignore | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index a338e5c..d43a13c 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,3 @@ # Dependency directories -node_modules/ \ No newline at end of file +node_modules/ +dist/ \ No newline at end of file From 16cdb32b49203b766de6174d0995fb36e7a1720e Mon Sep 17 00:00:00 2001 From: davay-popozhe Date: Wed, 17 Apr 2024 18:05:01 +0300 Subject: [PATCH 02/76] Revert "exclude dist/" This reverts commit 74d7f15563ec2a7e3f6db2b6be7c73ac1b40c97c. --- .gitignore | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/.gitignore b/.gitignore index d43a13c..a338e5c 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,2 @@ # Dependency directories -node_modules/ -dist/ \ No newline at end of file +node_modules/ \ No newline at end of file From 1cf6a1fc36cc70b0f36fff5f7f3af68b38725792 Mon Sep 17 00:00:00 2001 From: davay-popozhe Date: Wed, 17 Apr 2024 18:06:37 +0300 Subject: [PATCH 03/76] =?UTF-8?q?Revert=20"=D0=9E=D0=B1=D0=BD=D0=BE=D0=B2?= =?UTF-8?q?=D0=BB=D1=91=D0=BD=20=D1=81=D0=B5=D1=80=D0=B2=D0=B5=D1=80=D0=BD?= =?UTF-8?q?=D1=8B=D0=B9=20=D0=BF=D0=B0=D0=BA=D0=B5=D1=82"?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This reverts commit ae7121ac98cee8822cd7c49b1f98617caa5d893f. --- db/PKG_P8PANELS_EQUIPSRV.pck | 685 +++++++++++++---------------------- 1 file changed, 256 insertions(+), 429 deletions(-) diff --git a/db/PKG_P8PANELS_EQUIPSRV.pck b/db/PKG_P8PANELS_EQUIPSRV.pck index 7593cb7..05183ee 100644 --- a/db/PKG_P8PANELS_EQUIPSRV.pck +++ b/db/PKG_P8PANELS_EQUIPSRV.pck @@ -1,80 +1,48 @@ create or replace package PKG_P8PANELS_EQUIPSRV as - /* Получение параметров фильтра по умолчанию */ - procedure GET_DEFAULT_FP + /* Получение значения системного параметра "JuridicalPerson" */ + procedure GET_JUR_PERS_PRM ( - COUT out clob -- XML с параметрами фильтра по умолчанию + CRES out clob -- Значение параметра "JuridicalPerson" (null - если не нашли) ); - /* Формирование строки с кол-вом часов */ function HOURS_STR ( - NHOURS in number -- Кол-во часов - ) return varchar2; -- Результат работы - - /* Отбор документов (ТОиР или Графики ремонтов) по дате */ - procedure SELECT_EQUIPSRV - ( - SBELONG in varchar2, -- Принадлежность к Юр. лицу - SPRODOBJ in varchar2, -- Производственный объект - STECHSERV in varchar2 := null, -- Техническая служба - SRESPDEP in varchar2 := null, -- Ответственное подразделение - STECHNAME in varchar2, -- Наименование объекта ремонта - SSRVKIND in varchar2, -- Код вида ремонта - NYEAR in number, -- Год - NMONTH in number, -- Месяц - NDAY in number := null, -- День - NWORKTYPE in number, -- Тип работы (0 - план, 1 - факт) - NIDENT out number -- Идентификатор буфера подобранных (списка отмеченных записей, null - не найдено) - ); + NHOURS in number -- Кол-во часов + ) return varchar2; /* Выполнение работ по ТОиР */ procedure EQUIPSRV_GRID ( - SBELONG in varchar2, -- Принадлежность к Юр. лицу - SPRODOBJ in varchar2, -- Производственный объект - STECHSERV in varchar2 := null, -- Техническая служба - SRESPDEP in varchar2 := null, -- Ответственное подразделение - NFROMMONTH in number, -- Месяц начала периода - NFROMYEAR in number, -- Год начала периода - NTOMONTH in number, -- Месяц окончания периода - NTOYEAR in number, -- Год окончания периода - COUT out clob -- График проектов + SBELONG in varchar2, -- Принадлежность к Юр. лицу + SPRODOBJ in varchar2, -- Производственный объект + STECHSERV in varchar2, -- Техническая служба + SRESPDEP in varchar2, -- Ответственное подразделение + NFROMMONTH in number, -- Месяц начала периода + NFROMYEAR in number, -- Год начала периода + NTOMONTH in number, -- Месяц окончания периода + NTOYEAR in number, -- Год окончания периода + COUT out clob -- График проектов ); - end PKG_P8PANELS_EQUIPSRV; / create or replace package body PKG_P8PANELS_EQUIPSRV as - /* Получение параметров фильтра по умолчанию */ - procedure GET_DEFAULT_FP + /* Получение значения системного параметра "JuridicalPerson" */ + procedure GET_JUR_PERS_PRM ( - COUT out clob -- XML с параметрами фильтра по умолчанию + CRES out clob -- Значение параметра "JuridicalPerson" (null - если не нашли) ) is NCOMPANY PKG_STD.TREF := GET_SESSION_COMPANY(); -- Рег. номер организации - SJUR_PERS PKG_STD.TSTRING := null; -- Юр. лицо (наименование) - NJUR_PERS PKG_STD.TREF := null; -- Юр. лицо (идентификатор) + SPARAMCODE PKG_STD.TSTRING := 'JuridicalPerson'; -- Код параметра begin - /* Находим юр. лицо */ - FIND_JURPERSONS_MAIN(NFLAG_SMART => 1, NCOMPANY => NCOMPANY, SJUR_PERS => SJUR_PERS, NJUR_PERS => NJUR_PERS); - /* Формируем XML */ - PKG_XFAST.PROLOGUE(ITYPE => PKG_XFAST.CONTENT_); - PKG_XFAST.DOWN_NODE(SNAME => 'DATA'); - PKG_XFAST.DOWN_NODE(SNAME => 'JURPERS'); - PKG_XFAST.VALUE(SVALUE => SJUR_PERS); - PKG_XFAST.UP(); - PKG_XFAST.DOWN_NODE(SNAME => 'MONTH'); - PKG_XFAST.VALUE(NVALUE => EXTRACT(month from sysdate)); - PKG_XFAST.UP(); - PKG_XFAST.DOWN_NODE(SNAME => 'YEAR'); - PKG_XFAST.VALUE(NVALUE => EXTRACT(year from sysdate)); - PKG_XFAST.UP(); - PKG_XFAST.UP(); - /* Сериализуем в clob */ - COUT := PKG_XFAST.SERIALIZE_TO_CLOB(); - PKG_XFAST.EPILOGUE(); - end GET_DEFAULT_FP; + CRES := GET_OPTIONS_STR(SCODE => SPARAMCODE, + NCOMP_VERS => NCOMPANY); + if (CRES is null) then + P_EXCEPTION(0, 'Пользовательский параметр не указан.'); + end if; + end GET_JUR_PERS_PRM; /* Формирование строки с кол-вом часов */ function HOURS_STR @@ -82,136 +50,28 @@ create or replace package body PKG_P8PANELS_EQUIPSRV as NHOURS in number -- Кол-во часов ) return varchar2 -- Строка с кол-вом часов is - SRESULT PKG_STD.TSTRING; -- Строка результат + SRESULT PKG_STD.tSTRING; -- Строка результат begin - if ((mod(NHOURS, 10) = 1) and (mod(NHOURS, 100) != 11)) then + if (MOD(NHOURS, 10) = 1 and MOD(NHOURS, 100) != 11) then SRESULT := NHOURS || ' час'; - elsif (((mod(NHOURS, 10) = 2) and (mod(NHOURS, 100) != 12)) or ((mod(NHOURS, 10) = 3) and (mod(NHOURS, 100) != 13)) or - ((mod(NHOURS, 10) = 4) and (mod(NHOURS, 100) != 14))) then + elsif ((MOD(NHOURS, 10) = 2 and MOD(NHOURS, 100) != 12) + or (MOD(NHOURS, 10) = 3 and MOD(NHOURS, 100) != 13) + or (MOD(NHOURS, 10) = 4 and MOD(NHOURS, 100) != 14)) then SRESULT := NHOURS || ' часа'; else SRESULT := NHOURS || ' часов'; end if; + /* Возвращаем результат */ return SRESULT; end HOURS_STR; - - /* Отбор документов (ТОиР или Графики ремонтов) по дате */ - procedure SELECT_EQUIPSRV - ( - SBELONG in varchar2, -- Принадлежность к Юр. лицу - SPRODOBJ in varchar2, -- Производственный объект - STECHSERV in varchar2 := null, -- Техническая служба - SRESPDEP in varchar2 := null, -- Ответственное подразделение - STECHNAME in varchar2, -- Наименование объекта ремонта - SSRVKIND in varchar2, -- Код вида ремонта - NYEAR in number, -- Год - NMONTH in number, -- Месяц - NDAY in number := null, -- День - NWORKTYPE in number, -- Тип работы (0 - план, 1 - факт) - NIDENT out number -- Идентификатор буфера подобранных (списка отмеченных записей, null - не найдено) - ) - is - NCOMPANY PKG_STD.TREF := GET_SESSION_COMPANY(); -- Рег. номер организации - NSELECTLIST PKG_STD.TREF; -- Рег. номер добавленной записи буфера подобранных - SDATE PKG_STD.TSTRING; -- Строка даты - begin - /* Проверка на дату с днём */ - if (NDAY is not null) then - SDATE := LPAD(TO_CHAR(NDAY), 2, '0') || '.' || LPAD(TO_CHAR(NMONTH), 2, '0') || '.' || NYEAR; - else - SDATE := LPAD(TO_CHAR(NMONTH), 2, '0') || '.' || NYEAR; - end if; - /* Если графики ТОиР */ - if (NWORKTYPE = 0) then - for C in (select T.RN, - T.COMPANY - from EQTCHSRV T, - JURPERSONS J, - EQTECSRVKIND SK, - EQCONFIG C1, - EQCONFIG C2, - INS_DEPARTMENT DS, - INS_DEPARTMENT DR - where T.STATE in (1, 2) - and T.COMPANY = NCOMPANY - and T.JUR_PERS = J.RN - and J.CODE = SBELONG - and T.EQCONFIG = C1.RN - and C1.CODE = SPRODOBJ - and T.DEPTTCSRV = DS.RN - and (DS.CODE = STECHSERV or STECHSERV is null) - and T.DEPTRESP = DR.RN - and (DR.CODE = SRESPDEP or SRESPDEP is null) - and T.EQCONFIG_TECH = C2.RN - and C2.NAME = STECHNAME - and T.EQTECSRVKIND = SK.RN - and SK.CODE = SSRVKIND - and ((NDAY is not null and TO_DATE(SDATE, 'dd.mm.yyyy') between TRUNC(T.DATEPRD_BEG) and - TRUNC(T.DATEPRD_END)) or (NDAY is null and (SDATE = TO_CHAR(T.DATEPRD_BEG, 'mm.yyyy') or - SDATE = TO_CHAR(T.DATEPRD_END, 'mm.yyyy'))))) - loop - /* Сформируем идентификатор буфера */ - if (NIDENT is null) then - NIDENT := GEN_IDENT(); - end if; - /* Добавим подобранное в список отмеченных записей */ - P_SELECTLIST_BASE_INSERT(NIDENT => NIDENT, - NCOMPANY => C.COMPANY, - NDOCUMENT => C.RN, - SUNITCODE => 'EquipTechServices', - SACTIONCODE => null, - NCRN => null, - NDOCUMENT1 => null, - SUNITCODE1 => null, - SACTIONCODE1 => null, - NRN => NSELECTLIST); - end loop; - /* Иначе ремонтные ведомости */ - else - for C in (select T.RN, - T.COMPANY - from EQRPSHEETS T, - JURPERSONS J, - EQTECSRVKIND SK, - EQCONFIG C - where T.STATE in (0, 2, 3) - and T.COMPANY = NCOMPANY - and T.JURPERSONS = J.RN - and J.CODE = SBELONG - and T.EQCONFIG = C.RN - and C.NAME = STECHNAME - and T.TECSRVKIND = SK.RN - and SK.CODE = SSRVKIND - and ((NDAY is not null and TO_DATE(SDATE, 'dd.mm.yyyy') between TRUNC(T.DATEFACT_BEG) and - TRUNC(T.DATEFACT_END)) or (NDAY is null and (SDATE = TO_CHAR(T.DATEFACT_BEG, 'mm.yyyy') or - SDATE = TO_CHAR(T.DATEFACT_END, 'mm.yyyy'))))) - loop - /* Сформируем идентификатор буфера */ - if (NIDENT is null) then - NIDENT := GEN_IDENT(); - end if; - /* Добавим подобранное в список отмеченных записей */ - P_SELECTLIST_BASE_INSERT(NIDENT => NIDENT, - NCOMPANY => C.COMPANY, - NDOCUMENT => C.RN, - SUNITCODE => 'EquipRepairSheets', - SACTIONCODE => null, - NCRN => null, - NDOCUMENT1 => null, - SUNITCODE1 => null, - SACTIONCODE1 => null, - NRN => NSELECTLIST); - end loop; - end if; - end SELECT_EQUIPSRV; /* Выполнение работ по ТОиР */ procedure EQUIPSRV_GRID ( SBELONG in varchar2, -- Принадлежность к Юр. лицу SPRODOBJ in varchar2, -- Производственный объект - STECHSERV in varchar2 := null, -- Техническая служба - SRESPDEP in varchar2 := null, -- Ответственное подразделение + STECHSERV in varchar2, -- Техническая служба + SRESPDEP in varchar2, -- Ответственное подразделение NFROMMONTH in number, -- Месяц начала периода NFROMYEAR in number, -- Год начала периода NTOMONTH in number, -- Месяц окончания периода @@ -226,36 +86,41 @@ create or replace package body PKG_P8PANELS_EQUIPSRV as RDG_ROW0 PKG_P8PANELS_VISUAL.TROW; -- Строка таблицы0 RDG_ROW PKG_P8PANELS_VISUAL.TROW; -- Строка таблицы RDG_ROW2 PKG_P8PANELS_VISUAL.TROW; -- Строка таблицы2 - NCURYEAR PKG_STD.TNUMBER; -- Текущий год - NCURMONTH PKG_STD.TNUMBER; -- Текущий месяц - NTOTALDAYS PKG_STD.TNUMBER; -- Дней в текущем месяце + NCURYEAR PKG_STD.tNUMBER; -- Текущий год + NCURMONTH PKG_STD.tNUMBER; -- Текущий месяц + NTOTALDAYS PKG_STD.tNUMBER; -- Дней в текущем месяце SCURTECHOBJ PKG_STD.TSTRING := null; -- Текущий технический объект SCURTSKCODE PKG_STD.TSTRING := null; -- Текущий вид ремонта - NFROMDATE PKG_STD.TLDATE; -- Дата начала периода - NTODATE PKG_STD.TLDATE; -- Дата конца периода - NMS PKG_STD.TNUMBER; -- Месяц начала в цикле года - NME PKG_STD.TNUMBER; -- Месяц окончания в цикле года - NYEAR_PLAN PKG_STD.TNUMBER; -- Год план - NMONTH_PLAN PKG_STD.TNUMBER; -- Месяц план - NDAY_PLAN PKG_STD.TNUMBER; -- День план - NYEAR_FACT PKG_STD.TNUMBER; -- Год факт - NMONTH_FACT PKG_STD.TNUMBER; -- Месяц факт - NDAY_FACT PKG_STD.TNUMBER; -- День факт + NFROMDATE date := TO_DATE('01.' + || LPAD(TO_CHAR(NFROMMONTH), 2, '0') + || '.' || TO_CHAR(NFROMYEAR), + 'dd.mm.yyyy'); -- Дата начала периода + NTODATE date := LAST_DAY(TO_DATE('01.' + || LPAD(TO_CHAR(NTOMONTH), 2, '0') + || '.' || TO_CHAR(NTOYEAR), + 'dd.mm.yyyy')); -- Дата конца периода + NMS PKG_STD.tNUMBER; -- Месяц начала в цикле года + NME PKG_STD.tNUMBER; -- Месяц окончания в цикле года + NYEAR_PLAN PKG_STD.tNUMBER; -- Год план + NMONTH_PLAN PKG_STD.tNUMBER; -- Месяц план + NDAY_PLAN PKG_STD.tNUMBER; -- День план + NYEAR_FACT PKG_STD.tNUMBER; -- Год факт + NMONTH_FACT PKG_STD.tNUMBER; -- Месяц факт + NDAY_FACT PKG_STD.tNUMBER; -- День факт SPERIODNAME PKG_STD.TSTRING; -- Имя периода SFACT_CLR PKG_STD.TSTRING; -- Цвет закрашивания фактических дат - NROWS PKG_STD.TNUMBER := 0; -- Кол-во строк в курсоре - NWORKPERDAY PKG_STD.TNUMBER(17,2) := null; -- Работы в день - SGROUP_FILLED PKG_STD.TLSTRING; -- Группы, заполненные строками план/факт - SCOLS PKG_STD.TLSTRING; -- Заполнение периодов работ - YM PKG_CONTVALLOC1S.TCONTAINER; -- Коллекция для подсчёта работ за месяц - MCLR PKG_CONTVALLOC1S.TCONTAINER; -- Коллекция для закрашивания месяцев - CR PKG_STD.TSTRING; -- Текущий ключ коллекции MCLR + NROWS PKG_STD.tNUMBER := 0; -- Кол-во строк в курсоре + NWORKPERDAY PKG_STD.tNUMBER(17,2) := null; -- Работы в день + CR PKG_STD.TSTRING; + SGROUP_FILLED PKG_STD.tLSTRING; -- Группы, заполненные строками план/факт + SCOLS PKG_STD.tLSTRING; -- Заполнение периодов работ + YM PKG_CONTVALLOC1S.tCONTAINER; -- Коллекция для подсчёта работ за месяц + MCLR PKG_CONTVALLOC1S.tCONTAINER; -- Коллекция для закрашивания месяцев - /* Курсор с работами ТОиР */ cursor C1 is - select TT.NEQV_RN, - TT.NEQS_RN, - TT.NWRK_RN NRN, + select TT.NEQV_RN, + TT.NEQS_RN, + TT.NWRK_RN NRN, TT.COMPANY NCOMPANY, TT.NAME_WORK SWORKNAME, EC2.CODE STECHOBJCODE, @@ -270,60 +135,63 @@ create or replace package body PKG_P8PANELS_EQUIPSRV as EQJ.DATEFACT_END DDATEFACTEND, EK.CODE STECSRVKINDCODE, EK.NAME STECSRVKINDNAME, - COALESCE(EW.NSUM, (TT.DATEPRD_END - TT.DATEPRD_BEG) * 24) NSUMWORKPLAN, - COALESCE(EWJ.NSUMF, (EQJ.DATEFACT_END - EQJ.DATEFACT_BEG) * 24) NSUMWORKFACT - from (select B.*, - C.RN NWRK_RN, - C.PRN NWRK_PRN, - C.NAME_WORK, - C.DATEPLAN_BEG, - C.DATEPLAN_END, - C.TECSRVKIND, - C.EQCONFIG, - C.DEPTPERF, - C.DEPTTCSRV, - C.RESP_AGN - from (select EQV.RN NEQV_RN, - EQV.COMPANY, - EQV.JUR_PERS, - EQV.STATE, - EQV.DATEPRD_BEG, - EQV.DATEPRD_END, - EQS.RN NEQS_RN - from EQTCHSRV EQV, - DOCLINKS DL, - EQRPSHEETS EQS - where EQV.RN = DL.IN_DOCUMENT(+) - and DL.OUT_UNITCODE(+) = 'EquipRepairSheets' - and DL.OUT_DOCUMENT = EQS.RN(+)) B, + coalesce(EW.NSUM, + (TT.DATEPRD_END - TT.DATEPRD_BEG) * 24) NSUMWORKPLAN, + coalesce(EWJ.NSUMF, + (EQJ.DATEFACT_END - EQJ.DATEFACT_BEG) * 24) NSUMWORKFACT + from + (select B.*, + C.RN nWRK_RN, + C.PRN nWRK_PRN, + C.NAME_WORK, + C.DATEPLAN_BEG, + C.DATEPLAN_END, + C.TECSRVKIND, + C.EQCONFIG, + C.DEPTPERF, + C.DEPTTCSRV, + C.RESP_AGN + from (select EQV.RN nEQV_RN, + EQV.COMPANY, + EQV.JUR_PERS, + EQV.STATE, + EQV.DATEPRD_BEG, + EQV.DATEPRD_END, + EQS.RN nEQS_RN + from EQTCHSRV EQV, -- Графики ТОиР + DOCLINKS DL, + EQRPSHEETS EQS -- Ремонтные ведомости + where EQV.RN = DL.IN_DOCUMENT (+) + and DL.OUT_UNITCODE (+) = 'EquipRepairSheets' + and DL.OUT_DOCUMENT = EQS.RN (+)) B, EQTCHSRWRK C - where B.NEQV_RN = C.PRN(+) - union all - select B.*, - C.RN NWRK_RN, - C.PRN NWRK_PRN, - C.NAME_WORK, - C.DATEPLAN_BEG, - C.DATEPLAN_END, - C.TECSRVKIND, - C.EQCONFIG, - C.DEPTPERF, - null DEPTTCSRV, - C.RESP_AGN - from (select null NEQV_RN, - EQS.COMPANY, - EQS.JURPERSONS JUR_PERS, - EQS.STATE, - EQS.DATEPLAN_BEG, - EQS.DATEPLAN_END, - EQS.RN NEQS_RN - from EQRPSHEETS EQS - where not exists (select 1 - from DOCLINKS DL - where DL.OUT_DOCUMENT = EQS.RN - and DL.IN_UNITCODE = 'EquipTechServices')) B, + where B.nEQV_RN = C.PRN (+) + union all + select B.*, + C.RN nWRK_RN, + C.PRN nWRK_PRN, + C.NAME_WORK, + C.DATEPLAN_BEG, + C.DATEPLAN_END, + C.TECSRVKIND, + C.EQCONFIG, + C.DEPTPERF, + null DEPTTCSRV, + C.RESP_AGN + from (select null nEQV_RN, + EQS.COMPANY, + EQS.JURPERSONS JUR_PERS, + EQS.STATE, + EQS.DATEPLAN_BEG, + EQS.DATEPLAN_END, + EQS.RN nEQS_RN + from EQRPSHEETS EQS -- Ремонтные ведомости + where not exists (select 1 + from DOCLINKS DL + where DL.OUT_DOCUMENT = EQS.RN + and DL.IN_UNITCODE = 'EquipTechServices')) B, EQRPSHWRK C - where B.NEQS_RN = C.PRN(+)) TT, + where B.nEQS_RN = C.PRN (+)) TT, EQTECSRVKIND EK, JURPERSONS JP, EQCONFIG EC1, @@ -332,55 +200,49 @@ create or replace package body PKG_P8PANELS_EQUIPSRV as INS_DEPARTMENT DR, DOCLINKS DL, EQTECSRVJRNL EQJ, - (select T.PRN, - sum(T.WORKTIMEPLAN * T.PERFORM_QUANT) NSUM - from EQTCHSRWRC T - group by T.PRN) EW, - (select T.PRN, - sum(T.WORKTIMEFACT * T.QUANTFACT) NSUMF - from EQTCHSRJRNLWRC T - group by T.PRN) EWJ + (select t.prn, + sum(t.Worktimeplan * t.perform_quant) NSUM + from EQTCHSRWRC t + group by t.prn) EW, + (select t.prn, + sum(t.worktimefact * t.quantfact) NSUMF + from EQTCHSRJRNLWRC t + group by t.prn) EWJ where TT.COMPANY = NCOMPANY - and ((TT.STATE in (1, 2) and NEQV_RN is not null) or (TT.STATE in (0, 2, 3) and NEQV_RN is null)) + and ((TT.state in (1,2) and nEQV_RN is not null) or (TT.state in (0,2,3) and nEQV_RN is null)) and TT.DATEPRD_BEG >= NFROMDATE and TT.DATEPRD_END <= NTODATE and JP.CODE = SBELONG and EC1.CODE = SPRODOBJ and (DS.CODE = STECHSERV or STECHSERV is null) and (DR.CODE = SRESPDEP or SRESPDEP is null) - and TT.EQCONFIG = EC2.RN(+) - and TT.DEPTPERF = DR.RN(+) - and TT.DEPTTCSRV = DS.RN(+) - and TT.NWRK_RN = EW.PRN(+) - and EQJ.RN = EWJ.PRN(+) - and TT.TECSRVKIND = EK.RN(+) - and TT.NWRK_RN = DL.IN_DOCUMENT(+) - and ((DL.OUT_UNITCODE = 'EquipTechServiceJournal' and DL.RN is not null) or - (DL.OUT_UNITCODE is null and DL.RN is null)) - and DL.OUT_DOCUMENT = EQJ.RN(+) - order by EC2.NAME, - EK.CODE; + and TT.EQCONFIG = EC2.RN (+) + and TT.DEPTPERF = DR.RN (+) + and TT.DEPTTCSRV = DS.RN (+) + and TT.NWRK_RN = EW.PRN (+) + and EQJ.RN = EWJ.PRN (+) + and TT.TECSRVKIND = EK.RN (+) + and TT.NWRK_RN = DL.IN_DOCUMENT (+) + and ((DL.OUT_UNITCODE = 'EquipTechServiceJournal' and DL.RN is not null) or (DL.OUT_UNITCODE is null and DL.RN is null)) + and DL.OUT_DOCUMENT = EQJ.RN (+) + order by EC2.NAME, EK.CODE; begin - /* Определим дату начала периода */ - NFROMDATE := TO_DATE('01.' || LPAD(TO_CHAR(NFROMMONTH), 2, '0') || '.' || TO_CHAR(NFROMYEAR), 'dd.mm.yyyy'); - /* Определим дату конца периода */ - NTODATE := LAST_DAY(TO_DATE('01.' || LPAD(TO_CHAR(NTOMONTH), 2, '0') || '.' || TO_CHAR(NTOYEAR), 'dd.mm.yyyy')); /* Инициализируем таблицу данных */ RDG := PKG_P8PANELS_VISUAL.TDATA_GRID_MAKE(); /* Формируем структуру заголовка */ PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG, SNAME => 'STEST', - SCAPTION => 'ТЕСТ', + SCAPTION => 'ТЕСТ', SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_STR); PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG, SNAME => 'SINFO', - SCAPTION => 'Объект ремонта', + SCAPTION => 'Информация', SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_STR); PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG, SNAME => 'SINFO2', SCAPTION => 'Объект ремонта', SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_STR, - SPARENT => 'SINFO'); + SPARENT => 'SINFO'); PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG, SNAME => 'NRN', SCAPTION => 'Рег. номер', @@ -455,15 +317,15 @@ create or replace package body PKG_P8PANELS_EQUIPSRV as SNAME => 'STECSRVKINDNAME', SCAPTION => 'Наименование типа работы', SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_STR, - BVISIBLE => false); - /* Очистка коллекций */ - PKG_CONTVALLOC1S.PURGE(RCONTAINER => YM); - PKG_CONTVALLOC1S.PURGE(RCONTAINER => MCLR); - /* Текущий год */ + BVISIBLE => false); + /* Очистка коллекций */ + PKG_CONTVALLOC1S.PURGE(YM); + PKG_CONTVALLOC1S.PURGE(MCLR); + NCURYEAR := EXTRACT(year from sysdate); - /* Текущий месяц */ - NCURMONTH := EXTRACT(month from sysdate); - /* Цикл по годам периода */ + NCURMONTH := EXTRACT(month from sysdate); + + /* Цикл по годам периода */ for Y in NFROMYEAR .. NTOYEAR loop if (NFROMYEAR = NTOYEAR) then @@ -473,249 +335,220 @@ create or replace package body PKG_P8PANELS_EQUIPSRV as if (Y = NFROMYEAR) then NMS := NFROMMONTH; NME := 12; - elsif ((NFROMYEAR < Y) and (Y < NTOYEAR)) then + elsif (NFROMYEAR < Y and Y < NTOYEAR) then NMS := 1; NME := 12; elsif (Y = NTOYEAR) then NMS := 1; - NME := NTOMONTH; + NME := NTOMONTH; end if; end if; + /* Цикл по месяцам года */ for M in NMS .. NME loop - PKG_CONTVALLOC1S.PUTN(RCONTAINER => YM, SROWID => '_' || TO_CHAR(Y) || '_' || TO_CHAR(M) || '_P', NVALUE => 0); - PKG_CONTVALLOC1S.PUTN(RCONTAINER => YM, SROWID => '_' || TO_CHAR(Y) || '_' || TO_CHAR(M) || '_F', NVALUE => 0); - /* Находим текущий месяц и делаем его развёрнутым по дням */ - if ((Y = NCURYEAR) and (M = NCURMONTH)) then + + PKG_CONTVALLOC1S.PUTN(YM, '_' || TO_CHAR(Y) || '_' || TO_CHAR(M) || '_P', 0); + PKG_CONTVALLOC1S.PUTN(YM, '_' || TO_CHAR(Y) || '_' || TO_CHAR(M) || '_F', 0); + + if (Y = NCURYEAR and M = NCURMONTH) then BEXPANDED := true; else BEXPANDED := false; end if; - PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG, - SNAME => '_' || TO_CHAR(Y) || '_' || TO_CHAR(M), - SCAPTION => LPAD(TO_CHAR(M), 2, '0') || ' ' || TO_CHAR(Y), - SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_STR, + + PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG, + SNAME => '_' || TO_CHAR(Y) || '_' || TO_CHAR(M), + SCAPTION => LPAD(TO_CHAR(M), 2, '0') || ' ' || TO_CHAR(Y), + SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_STR, BEXPANDABLE => true, - BEXPANDED => BEXPANDED); - /* Подсчёт кол-ва дней в месяце */ - NTOTALDAYS := TO_NUMBER(TO_CHAR(LAST_DAY(TO_DATE('01.' || LPAD(TO_CHAR(M), 2, '0') || '.' || TO_CHAR(Y), - 'dd.mm.yyyy')), - 'dd'), - '99'); + BEXPANDED => BEXPANDED); + NTOTALDAYS := to_number(to_char(LAST_DAY(TO_DATE('01.' || LPAD(TO_CHAR(M), 2, '0') || '.' || TO_CHAR(Y), 'dd.mm.yyyy')),'dd'), '99'); /* Цикл по дням месяца */ for D in 1 .. NTOTALDAYS loop PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG, - SNAME => '_' || TO_CHAR(Y) || '_' || TO_CHAR(M) || '_' || - TO_CHAR(D), + SNAME => '_' || TO_CHAR(Y) || '_' || TO_CHAR(M) || '_' || TO_CHAR(D), SCAPTION => TO_CHAR(D, '99'), SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_STR, SPARENT => '_' || TO_CHAR(Y) || '_' || TO_CHAR(M)); end loop; - end loop; + end loop; end loop; - /* Подсчёт кол-ва записей в курсоре */ + + /* Подсчёт кол-ва записей в курсоре */ for Q1 in C1 loop NROWS := NROWS + 1; end loop; + /* Цикл по курсору */ for QQ in C1 loop NROWS := NROWS - 1; - /* Если новый объект ремонта */ - if ((SCURTECHOBJ != QQ.STECHOBJNAME) or (SCURTECHOBJ is null)) then - /* Если строка с трудоёмкостью по объекту ремонта сформирована */ + if (SCURTECHOBJ != QQ.STECHOBJNAME or SCURTECHOBJ is null) then if (RDG_ROW0.RCOLS is not null) then - /* Цикл по годам периода */ + /* Цикл по годам периода */ for Y in NFROMYEAR .. NTOYEAR loop - /* Если отчёт в пределах года */ if (NFROMYEAR = NTOYEAR) then NMS := NFROMMONTH; NME := NTOMONTH; - /* Иначе вычисляем кол-во месяцев в каждом году периода отчёта*/ else if (Y = NFROMYEAR) then NMS := NFROMMONTH; NME := 12; - elsif ((NFROMYEAR < Y) and (Y < NTOYEAR)) then + elsif (NFROMYEAR < Y and Y < NTOYEAR) then NMS := 1; NME := 12; elsif (Y = NTOYEAR) then NMS := 1; - NME := NTOMONTH; + NME := NTOMONTH; end if; end if; - /* Цикл по месяцам года, заполнение трудоёмкости с привязкой к месяцу */ + + /* Цикл по месяцам года */ for M in NMS .. NME loop SPERIODNAME := '_' || TO_CHAR(Y) || '_' || TO_CHAR(M); - PKG_P8PANELS_VISUAL.TROW_ADD_COL(RROW => RDG_ROW0, - SNAME => SPERIODNAME, - SVALUE => 'план: ' || - HOURS_STR(PKG_CONTVALLOC1S.GETN(YM, SPERIODNAME || '_P')) || - ' факт: ' || - HOURS_STR(PKG_CONTVALLOC1S.GETN(YM, SPERIODNAME || '_F'))); - /* Добавление в коллекцию трудоёмкость план */ - PKG_CONTVALLOC1S.PUTN(RCONTAINER => YM, SROWID => SPERIODNAME || '_P', NVALUE => 0); - /* Добавление в коллекцию трудоёмкость факт */ - PKG_CONTVALLOC1S.PUTN(RCONTAINER => YM, SROWID => SPERIODNAME || '_F', NVALUE => 0); - end loop; + PKG_P8PANELS_VISUAL.TROW_ADD_COL(RROW => RDG_ROW0, + SNAME => SPERIODNAME, + SVALUE => 'план: ' || HOURS_STR(PKG_CONTVALLOC1S.GETN(YM, SPERIODNAME || '_P')) || ' факт: ' || HOURS_STR(PKG_CONTVALLOC1S.GETN(YM, SPERIODNAME || '_F'))); + PKG_CONTVALLOC1S.PUTN(YM, SPERIODNAME || '_P', 0); + PKG_CONTVALLOC1S.PUTN(YM, SPERIODNAME || '_F', 0); + end loop; end loop; - /* Добавление строки с трудоёмкостью */ + PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_ROW(RDATA_GRID => RDG, RROW => RDG_ROW0); end if; - /* Добавление группы с объектом ремонта */ - SCURTECHOBJ := QQ.STECHOBJNAME; + SCURTECHOBJ := QQ.STECHOBJNAME; SPRJ_GROUP_NAME := SCURTECHOBJ; PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_GROUP(RDATA_GRID => RDG, SNAME => SPRJ_GROUP_NAME, SCAPTION => QQ.STECHOBJNAME, - BEXPANDABLE => false); + BEXPANDABLE => false); RDG_ROW0 := PKG_P8PANELS_VISUAL.TROW_MAKE(SGROUP => SPRJ_GROUP_NAME); - PKG_P8PANELS_VISUAL.TROW_ADD_COL(RROW => RDG_ROW0, SNAME => 'STEST', SVALUE => SCURTECHOBJ); + PKG_P8PANELS_VISUAL.TROW_ADD_COL(RROW => RDG_ROW0, SNAME => 'STEST', SVALUE => SCURTECHOBJ); end if; /* Формируем имя группы для вида ремонта */ SCURTSKCODE := SCURTECHOBJ || '_' || QQ.STECSRVKINDCODE; /* Если по данной группе еще нет строк плана и факта */ - if (STRIN(SSUBSTR => SCURTSKCODE, SSOURCE => SGROUP_FILLED, SDELIM => ';') = 0) then + if (STRIN(sSUBSTR => SCURTSKCODE, sSOURCE => SGROUP_FILLED, sDELIM => ';') = 0) then /* Добавляем строку плана */ if (RDG_ROW.RCOLS is not null) then PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_ROW(RDATA_GRID => RDG, RROW => RDG_ROW); end if; /* Добавляем строку факта */ if (RDG_ROW2.RCOLS is not null) then - CR := PKG_CONTVALLOC1S.FIRST_(RCONTAINER => MCLR); + CR := PKG_CONTVALLOC1S.FIRST_(MCLR); /* Цикл по коллекции для закрашивания месяцев */ - for Z in 1 .. PKG_CONTVALLOC1S.COUNT_(RCONTAINER => MCLR) + for Z in 1 .. PKG_CONTVALLOC1S.COUNT_(MCLR) loop - PKG_P8PANELS_VISUAL.TROW_ADD_COL(RROW => RDG_ROW2, - SNAME => CR, - SVALUE => PKG_CONTVALLOC1S.GETS(RCONTAINER => MCLR, SROWID => CR)); - CR := PKG_CONTVALLOC1S.NEXT_(RCONTAINER => MCLR, SROWID => CR); + PKG_P8PANELS_VISUAL.TROW_ADD_COL(RROW => RDG_ROW2, SNAME => CR, SVALUE => PKG_CONTVALLOC1S.GETS(MCLR, CR)); + CR := PKG_CONTVALLOC1S.NEXT_(MCLR, CR); end loop; PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_ROW(RDATA_GRID => RDG, RROW => RDG_ROW2); end if; - PKG_CONTVALLOC1S.PURGE(RCONTAINER => MCLR); + PKG_CONTVALLOC1S.PURGE(MCLR); /* Добвим группу для вида ремонта */ SPRJ_GROUP_NAME := SCURTSKCODE; PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_GROUP(RDATA_GRID => RDG, SNAME => SPRJ_GROUP_NAME, SCAPTION => QQ.STECSRVKINDCODE, BEXPANDABLE => false); - /* Строка плана */ - RDG_ROW := PKG_P8PANELS_VISUAL.TROW_MAKE(SGROUP => SPRJ_GROUP_NAME); + RDG_ROW := PKG_P8PANELS_VISUAL.TROW_MAKE(SGROUP => SPRJ_GROUP_NAME); PKG_P8PANELS_VISUAL.TROW_ADD_COL(RROW => RDG_ROW, SNAME => 'STEST', SVALUE => QQ.STECSRVKINDCODE); - PKG_P8PANELS_VISUAL.TROW_ADD_COL(RROW => RDG_ROW, SNAME => 'SINFO2', SVALUE => 'План'); - /* Строка факта */ - RDG_ROW2 := PKG_P8PANELS_VISUAL.TROW_MAKE(SGROUP => SPRJ_GROUP_NAME); + PKG_P8PANELS_VISUAL.TROW_ADD_COL(RROW => RDG_ROW, SNAME => 'SINFO2', SVALUE => 'План'); + RDG_ROW2 := PKG_P8PANELS_VISUAL.TROW_MAKE(SGROUP => SPRJ_GROUP_NAME); PKG_P8PANELS_VISUAL.TROW_ADD_COL(RROW => RDG_ROW2, SNAME => 'SINFO2', SVALUE => 'Факт'); /* Добавляем в заполненные группы */ SGROUP_FILLED := SGROUP_FILLED || SPRJ_GROUP_NAME || ';'; + end if; /* Плановые работы */ if (QQ.NEQV_RN is not null) then - /* Цикл по периоду */ - for X in 0 .. TRUNC(QQ.DDATEPLANEND) - TRUNC(QQ.DDATEPLANBEG) + for x in 0 .. trunc(QQ.DDATEPLANEND) - trunc(QQ.DDATEPLANBEG) loop - NYEAR_PLAN := EXTRACT(year from QQ.DDATEPLANBEG + X); - NMONTH_PLAN := EXTRACT(month from QQ.DDATEPLANBEG + X); - NDAY_PLAN := EXTRACT(day from QQ.DDATEPLANBEG + X); - /* Если первый день периода */ - if (X = 0) then + NYEAR_PLAN := EXTRACT(year from QQ.DDATEPLANBEG + x); + NMONTH_PLAN := EXTRACT(month from QQ.DDATEPLANBEG + x); + NDAY_PLAN := EXTRACT(day from QQ.DDATEPLANBEG + x); + + if (x = 0) then SPERIODNAME := '_' || TO_CHAR(NYEAR_PLAN) || '_' || NMONTH_PLAN; - /* Подсчёт трудоёмкости за месяц */ + if (QQ.NSUMWORKPLAN is not null) then - PKG_CONTVALLOC1S.PUTN(RCONTAINER => YM, - SROWID => SPERIODNAME || '_P', - NVALUE => PKG_CONTVALLOC1S.GETN(RCONTAINER => YM, SROWID => SPERIODNAME || '_P') + - QQ.NSUMWORKPLAN); + PKG_CONTVALLOC1S.PUTN(YM, SPERIODNAME || '_P', PKG_CONTVALLOC1S.GETN(YM, SPERIODNAME || '_P') + QQ.NSUMWORKPLAN); end if; - /* Закрашивание месяца плана синим */ - if (STRIN(SSUBSTR => SPRJ_GROUP_NAME || ' ' || SPERIODNAME || ' PLAN', SSOURCE => SCOLS, SDELIM => ';') = 0) then + + if (STRIN(sSUBSTR => SPRJ_GROUP_NAME || ' ' || SPERIODNAME || ' PLAN', sSOURCE => SCOLS, sDELIM => ';') = 0) then PKG_P8PANELS_VISUAL.TROW_ADD_COL(RROW => RDG_ROW, SNAME => SPERIODNAME, SVALUE => 'blue'); - SCOLS := SCOLS || SPRJ_GROUP_NAME || ' ' || SPERIODNAME || ' PLAN;'; + SCOLS := SCOLS || SPRJ_GROUP_NAME || ' ' || SPERIODNAME || ' PLAN;'; end if; end if; SPERIODNAME := '_' || TO_CHAR(NYEAR_PLAN) || '_' || TO_CHAR(NMONTH_PLAN) || '_' || TO_CHAR(NDAY_PLAN); - /* Закрашивание дня плана синим */ - if (STRIN(SSUBSTR => SPRJ_GROUP_NAME || ' ' || SPERIODNAME || ' PLAN', SSOURCE => SCOLS, SDELIM => ';') = 0) then + if (STRIN(sSUBSTR => SPRJ_GROUP_NAME || ' ' || SPERIODNAME || ' PLAN', sSOURCE => SCOLS, sDELIM => ';') = 0) then PKG_P8PANELS_VISUAL.TROW_ADD_COL(RROW => RDG_ROW, SNAME => SPERIODNAME, SVALUE => 'blue'); - SCOLS := SCOLS || SPRJ_GROUP_NAME || ' ' || SPERIODNAME || ' PLAN;'; - end if; + SCOLS := SCOLS || SPRJ_GROUP_NAME || ' ' || SPERIODNAME || ' PLAN;'; + end if; end loop; end if; + /* Фактические и внеплановые работы */ - if ((QQ.DDATEFACTEND is not null) and (QQ.DDATEFACTBEG is not null)) then - /* Фактические - зелёный, внеплановые - красный */ - if (QQ.NEQV_RN is not null) then + if (QQ.DDATEFACTEND is not null and QQ.DDATEFACTBEG is not null) then + if (QQ.nEQV_RN is not null) then SFACT_CLR := 'green'; else SFACT_CLR := 'red'; - end if; + end if; + NWORKPERDAY := null; - /* Если период не в одном месяце, то считаем трудоёмкость в день */ if (EXTRACT(month from QQ.DDATEFACTBEG) != EXTRACT(month from QQ.DDATEFACTEND)) then - NWORKPERDAY := QQ.NSUMWORKFACT / (ROUND(QQ.DDATEFACTEND - QQ.DDATEFACTBEG) + 1); - NCURMONTH := EXTRACT(month from QQ.DDATEFACTBEG); - end if; - /* Цикл по периоду */ - for X in 0 .. TRUNC(QQ.DDATEFACTEND) - TRUNC(QQ.DDATEFACTBEG) + NWORKPERDAY := QQ.NSUMWORKFACT/(round(QQ.DDATEFACTEND - QQ.DDATEFACTBEG) + 1); + NCURMONTH := EXTRACT(month from QQ.DDATEFACTBEG); + end if; + + for x in 0 .. trunc(QQ.DDATEFACTEND) - trunc(QQ.DDATEFACTBEG) loop - NYEAR_FACT := EXTRACT(year from QQ.DDATEFACTBEG + X); - NMONTH_FACT := EXTRACT(month from QQ.DDATEFACTBEG + X); - NDAY_FACT := EXTRACT(day from QQ.DDATEFACTBEG + X); - /* Если первый день периода или следующий месяц периода */ - if ((X = 0) or (NCURMONTH != NMONTH_FACT)) then - /* Обновляется текущий месяц */ + NYEAR_FACT := EXTRACT(year from QQ.DDATEFACTBEG + x); + NMONTH_FACT := EXTRACT(month from QQ.DDATEFACTBEG + x); + NDAY_FACT := EXTRACT(day from QQ.DDATEFACTBEG + x); + + if (x = 0 or NCURMONTH != NMONTH_FACT) then if (NCURMONTH != NMONTH_FACT) then NCURMONTH := NMONTH_FACT; end if; SPERIODNAME := '_' || TO_CHAR(NYEAR_FACT) || '_' || NMONTH_FACT; - /* Подсчёт трудоёмкости за месяц если период в одном месяце */ - if ((QQ.NSUMWORKFACT is not null) and (NWORKPERDAY is null)) then - PKG_CONTVALLOC1S.PUTN(RCONTAINER => YM, - SROWID => SPERIODNAME || '_F', - NVALUE => PKG_CONTVALLOC1S.GETN(RCONTAINER => YM, SROWID => SPERIODNAME || '_F') + - QQ.NSUMWORKFACT); + + if (QQ.NSUMWORKFACT is not null and NWORKPERDAY is null) then + PKG_CONTVALLOC1S.PUTN(YM, SPERIODNAME || '_F', PKG_CONTVALLOC1S.GETN(YM, SPERIODNAME || '_F') + QQ.NSUMWORKFACT); end if; + /* Добавление в коллекцию окрашивания месяца */ - if (PKG_CONTVALLOC1S.EXISTS_(RCONTAINER => MCLR, SROWID => SPERIODNAME) = false) then - PKG_CONTVALLOC1S.PUTS(RCONTAINER => MCLR, SROWID => SPERIODNAME, SVALUE => SFACT_CLR); + if (PKG_CONTVALLOC1S.EXISTS_(rCONTAINER => MCLR, sROWID => SPERIODNAME) = false) then + PKG_CONTVALLOC1S.PUTS(MCLR, SPERIODNAME, SFACT_CLR); else - /* Если второй цвет для месяца */ if (STRIN(trim(SFACT_CLR), trim(PKG_CONTVALLOC1S.GETS(MCLR, SPERIODNAME))) = 0) then - PKG_CONTVALLOC1S.PUTS(RCONTAINER => MCLR, - SROWID => SPERIODNAME, - SVALUE => PKG_CONTVALLOC1S.GETS(RCONTAINER => MCLR, SROWID => SPERIODNAME) || ' ' || - SFACT_CLR); + PKG_CONTVALLOC1S.PUTS(MCLR, SPERIODNAME, PKG_CONTVALLOC1S.GETS(MCLR, SPERIODNAME) || ' ' || SFACT_CLR); end if; end if; end if; - /* Подсчёт трудоёмкости за месяц если период не в одном месяце */ if (NWORKPERDAY is not null) then - PKG_CONTVALLOC1S.PUTN(RCONTAINER => YM, - SROWID => SPERIODNAME || '_F', - NVALUE => PKG_CONTVALLOC1S.GETN(RCONTAINER => YM, SROWID => SPERIODNAME || '_F') + - NWORKPERDAY); + PKG_CONTVALLOC1S.PUTN(YM, SPERIODNAME || '_F', PKG_CONTVALLOC1S.GETN(YM, SPERIODNAME || '_F') + NWORKPERDAY); end if; SPERIODNAME := '_' || TO_CHAR(NYEAR_FACT) || '_' || TO_CHAR(NMONTH_FACT) || '_' || TO_CHAR(NDAY_FACT); - /* Добавление в коллекцию окрашивания дней факта */ - if (PKG_CONTVALLOC1S.EXISTS_(RCONTAINER => MCLR, SROWID => SPERIODNAME) = false) then - PKG_CONTVALLOC1S.PUTS(RCONTAINER => MCLR, SROWID => SPERIODNAME, SVALUE => SFACT_CLR); + /* Добавление окрашивания дней факта */ + if (PKG_CONTVALLOC1S.EXISTS_(rCONTAINER => MCLR, sROWID => SPERIODNAME) = false) then + PKG_CONTVALLOC1S.PUTS(MCLR, SPERIODNAME, SFACT_CLR); else - /* Если второй цвет для месяца */ - if ((trim(PKG_CONTVALLOC1S.GETS(RCONTAINER => MCLR, SROWID => SPERIODNAME)) = 'green') and - (trim(SFACT_CLR) = 'red')) then - PKG_CONTVALLOC1S.PUTS(RCONTAINER => MCLR, SROWID => SPERIODNAME, SVALUE => SFACT_CLR); + if (trim(PKG_CONTVALLOC1S.GETS(MCLR, SPERIODNAME)) = 'green' and trim(SFACT_CLR) = 'red') then + PKG_CONTVALLOC1S.PUTS(MCLR, SPERIODNAME, SFACT_CLR); end if; - end if; + end if; end loop; - end if; - if ((RDG_ROW0.RCOLS is not null) and (NROWS = 0)) then - /* Цикл по годам периода */ + end if; + + if (RDG_ROW0.RCOLS is not null and NROWS = 0) then + /* Цикл по годам периода */ for Y in NFROMYEAR .. NTOYEAR loop if (NFROMYEAR = NTOYEAR) then @@ -725,51 +558,45 @@ create or replace package body PKG_P8PANELS_EQUIPSRV as if (Y = NFROMYEAR) then NMS := NFROMMONTH; NME := 12; - elsif ((NFROMYEAR < Y) and (Y < NTOYEAR)) then + elsif (NFROMYEAR < Y and Y < NTOYEAR) then NMS := 1; NME := 12; elsif (Y = NTOYEAR) then NMS := 1; - NME := NTOMONTH; + NME := NTOMONTH; end if; end if; + /* Цикл по месяцам года */ for M in NMS .. NME loop SPERIODNAME := '_' || TO_CHAR(Y) || '_' || TO_CHAR(M); - PKG_P8PANELS_VISUAL.TROW_ADD_COL(RROW => RDG_ROW0, - SNAME => SPERIODNAME, - SVALUE => 'план: ' || - HOURS_STR(NHOURS => PKG_CONTVALLOC1S.GETN(RCONTAINER => YM, - SROWID => SPERIODNAME || '_P')) || - ' факт: ' || - HOURS_STR(NHOURS => PKG_CONTVALLOC1S.GETN(RCONTAINER => YM, - SROWID => SPERIODNAME || '_F'))); - end loop; + PKG_P8PANELS_VISUAL.TROW_ADD_COL(RROW => RDG_ROW0, + SNAME => SPERIODNAME, + SVALUE => 'план: ' || HOURS_STR(PKG_CONTVALLOC1S.GETN(YM, SPERIODNAME || '_P')) || ' факт: ' || HOURS_STR(PKG_CONTVALLOC1S.GETN(YM, SPERIODNAME || '_F'))); + end loop; end loop; + PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_ROW(RDATA_GRID => RDG, RROW => RDG_ROW0); end if; - /* План для последней записи */ - if ((RDG_ROW.RCOLS is not null) and (NROWS = 0)) then + /* План для последней записи */ + if (RDG_ROW.RCOLS is not null and NROWS = 0) then PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_ROW(RDATA_GRID => RDG, RROW => RDG_ROW); end if; /* Факт для последней записи */ - if ((RDG_ROW2.RCOLS is not null) and (NROWS = 0)) then - CR := PKG_CONTVALLOC1S.FIRST_(RCONTAINER => MCLR); - for Z in 1 .. PKG_CONTVALLOC1S.COUNT_(RCONTAINER => MCLR) + if (RDG_ROW2.RCOLS is not null and NROWS = 0) then + CR := PKG_CONTVALLOC1S.FIRST_(MCLR); + for Z in 1 .. PKG_CONTVALLOC1S.COUNT_(MCLR) loop - PKG_P8PANELS_VISUAL.TROW_ADD_COL(RROW => RDG_ROW2, - SNAME => CR, - SVALUE => PKG_CONTVALLOC1S.GETS(RCONTAINER => MCLR, SROWID => CR)); - CR := PKG_CONTVALLOC1S.NEXT_(RCONTAINER => MCLR, SROWID => CR); + PKG_P8PANELS_VISUAL.TROW_ADD_COL(RROW => RDG_ROW2, SNAME => CR, SVALUE => PKG_CONTVALLOC1S.GETS(MCLR, CR)); + CR := PKG_CONTVALLOC1S.NEXT_(MCLR, cr); end loop; PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_ROW(RDATA_GRID => RDG, RROW => RDG_ROW2); - end if; + end if; end loop; /* Сериализуем описание */ COUT := PKG_P8PANELS_VISUAL.TDATA_GRID_TO_XML(RDATA_GRID => RDG, NINCLUDE_DEF => 1); - PKG_CONTVALLOC1S.PURGE(RCONTAINER => YM); + PKG_CONTVALLOC1S.PURGE(YM); end EQUIPSRV_GRID; - end PKG_P8PANELS_EQUIPSRV; / From 238ce245b3e71e922fe11c0ca148e312a16f539b Mon Sep 17 00:00:00 2001 From: davay-popozhe Date: Wed, 17 Apr 2024 18:10:54 +0300 Subject: [PATCH 04/76] Revert "exclude dist/" This reverts commit 74d7f15563ec2a7e3f6db2b6be7c73ac1b40c97c. --- db/PKG_P8PANELS_EQUIPSRV.pck | 685 ++++++++++++++++++++++------------- 1 file changed, 429 insertions(+), 256 deletions(-) diff --git a/db/PKG_P8PANELS_EQUIPSRV.pck b/db/PKG_P8PANELS_EQUIPSRV.pck index 05183ee..7593cb7 100644 --- a/db/PKG_P8PANELS_EQUIPSRV.pck +++ b/db/PKG_P8PANELS_EQUIPSRV.pck @@ -1,48 +1,80 @@ create or replace package PKG_P8PANELS_EQUIPSRV as - /* Получение значения системного параметра "JuridicalPerson" */ - procedure GET_JUR_PERS_PRM + /* Получение параметров фильтра по умолчанию */ + procedure GET_DEFAULT_FP ( - CRES out clob -- Значение параметра "JuridicalPerson" (null - если не нашли) + COUT out clob -- XML с параметрами фильтра по умолчанию ); + /* Формирование строки с кол-вом часов */ function HOURS_STR ( - NHOURS in number -- Кол-во часов - ) return varchar2; + NHOURS in number -- Кол-во часов + ) return varchar2; -- Результат работы + + /* Отбор документов (ТОиР или Графики ремонтов) по дате */ + procedure SELECT_EQUIPSRV + ( + SBELONG in varchar2, -- Принадлежность к Юр. лицу + SPRODOBJ in varchar2, -- Производственный объект + STECHSERV in varchar2 := null, -- Техническая служба + SRESPDEP in varchar2 := null, -- Ответственное подразделение + STECHNAME in varchar2, -- Наименование объекта ремонта + SSRVKIND in varchar2, -- Код вида ремонта + NYEAR in number, -- Год + NMONTH in number, -- Месяц + NDAY in number := null, -- День + NWORKTYPE in number, -- Тип работы (0 - план, 1 - факт) + NIDENT out number -- Идентификатор буфера подобранных (списка отмеченных записей, null - не найдено) + ); /* Выполнение работ по ТОиР */ procedure EQUIPSRV_GRID ( - SBELONG in varchar2, -- Принадлежность к Юр. лицу - SPRODOBJ in varchar2, -- Производственный объект - STECHSERV in varchar2, -- Техническая служба - SRESPDEP in varchar2, -- Ответственное подразделение - NFROMMONTH in number, -- Месяц начала периода - NFROMYEAR in number, -- Год начала периода - NTOMONTH in number, -- Месяц окончания периода - NTOYEAR in number, -- Год окончания периода - COUT out clob -- График проектов + SBELONG in varchar2, -- Принадлежность к Юр. лицу + SPRODOBJ in varchar2, -- Производственный объект + STECHSERV in varchar2 := null, -- Техническая служба + SRESPDEP in varchar2 := null, -- Ответственное подразделение + NFROMMONTH in number, -- Месяц начала периода + NFROMYEAR in number, -- Год начала периода + NTOMONTH in number, -- Месяц окончания периода + NTOYEAR in number, -- Год окончания периода + COUT out clob -- График проектов ); + end PKG_P8PANELS_EQUIPSRV; / create or replace package body PKG_P8PANELS_EQUIPSRV as - /* Получение значения системного параметра "JuridicalPerson" */ - procedure GET_JUR_PERS_PRM + /* Получение параметров фильтра по умолчанию */ + procedure GET_DEFAULT_FP ( - CRES out clob -- Значение параметра "JuridicalPerson" (null - если не нашли) + COUT out clob -- XML с параметрами фильтра по умолчанию ) is NCOMPANY PKG_STD.TREF := GET_SESSION_COMPANY(); -- Рег. номер организации - SPARAMCODE PKG_STD.TSTRING := 'JuridicalPerson'; -- Код параметра + SJUR_PERS PKG_STD.TSTRING := null; -- Юр. лицо (наименование) + NJUR_PERS PKG_STD.TREF := null; -- Юр. лицо (идентификатор) begin - CRES := GET_OPTIONS_STR(SCODE => SPARAMCODE, - NCOMP_VERS => NCOMPANY); - if (CRES is null) then - P_EXCEPTION(0, 'Пользовательский параметр не указан.'); - end if; - end GET_JUR_PERS_PRM; + /* Находим юр. лицо */ + FIND_JURPERSONS_MAIN(NFLAG_SMART => 1, NCOMPANY => NCOMPANY, SJUR_PERS => SJUR_PERS, NJUR_PERS => NJUR_PERS); + /* Формируем XML */ + PKG_XFAST.PROLOGUE(ITYPE => PKG_XFAST.CONTENT_); + PKG_XFAST.DOWN_NODE(SNAME => 'DATA'); + PKG_XFAST.DOWN_NODE(SNAME => 'JURPERS'); + PKG_XFAST.VALUE(SVALUE => SJUR_PERS); + PKG_XFAST.UP(); + PKG_XFAST.DOWN_NODE(SNAME => 'MONTH'); + PKG_XFAST.VALUE(NVALUE => EXTRACT(month from sysdate)); + PKG_XFAST.UP(); + PKG_XFAST.DOWN_NODE(SNAME => 'YEAR'); + PKG_XFAST.VALUE(NVALUE => EXTRACT(year from sysdate)); + PKG_XFAST.UP(); + PKG_XFAST.UP(); + /* Сериализуем в clob */ + COUT := PKG_XFAST.SERIALIZE_TO_CLOB(); + PKG_XFAST.EPILOGUE(); + end GET_DEFAULT_FP; /* Формирование строки с кол-вом часов */ function HOURS_STR @@ -50,28 +82,136 @@ create or replace package body PKG_P8PANELS_EQUIPSRV as NHOURS in number -- Кол-во часов ) return varchar2 -- Строка с кол-вом часов is - SRESULT PKG_STD.tSTRING; -- Строка результат + SRESULT PKG_STD.TSTRING; -- Строка результат begin - if (MOD(NHOURS, 10) = 1 and MOD(NHOURS, 100) != 11) then + if ((mod(NHOURS, 10) = 1) and (mod(NHOURS, 100) != 11)) then SRESULT := NHOURS || ' час'; - elsif ((MOD(NHOURS, 10) = 2 and MOD(NHOURS, 100) != 12) - or (MOD(NHOURS, 10) = 3 and MOD(NHOURS, 100) != 13) - or (MOD(NHOURS, 10) = 4 and MOD(NHOURS, 100) != 14)) then + elsif (((mod(NHOURS, 10) = 2) and (mod(NHOURS, 100) != 12)) or ((mod(NHOURS, 10) = 3) and (mod(NHOURS, 100) != 13)) or + ((mod(NHOURS, 10) = 4) and (mod(NHOURS, 100) != 14))) then SRESULT := NHOURS || ' часа'; else SRESULT := NHOURS || ' часов'; end if; - /* Возвращаем результат */ return SRESULT; end HOURS_STR; + + /* Отбор документов (ТОиР или Графики ремонтов) по дате */ + procedure SELECT_EQUIPSRV + ( + SBELONG in varchar2, -- Принадлежность к Юр. лицу + SPRODOBJ in varchar2, -- Производственный объект + STECHSERV in varchar2 := null, -- Техническая служба + SRESPDEP in varchar2 := null, -- Ответственное подразделение + STECHNAME in varchar2, -- Наименование объекта ремонта + SSRVKIND in varchar2, -- Код вида ремонта + NYEAR in number, -- Год + NMONTH in number, -- Месяц + NDAY in number := null, -- День + NWORKTYPE in number, -- Тип работы (0 - план, 1 - факт) + NIDENT out number -- Идентификатор буфера подобранных (списка отмеченных записей, null - не найдено) + ) + is + NCOMPANY PKG_STD.TREF := GET_SESSION_COMPANY(); -- Рег. номер организации + NSELECTLIST PKG_STD.TREF; -- Рег. номер добавленной записи буфера подобранных + SDATE PKG_STD.TSTRING; -- Строка даты + begin + /* Проверка на дату с днём */ + if (NDAY is not null) then + SDATE := LPAD(TO_CHAR(NDAY), 2, '0') || '.' || LPAD(TO_CHAR(NMONTH), 2, '0') || '.' || NYEAR; + else + SDATE := LPAD(TO_CHAR(NMONTH), 2, '0') || '.' || NYEAR; + end if; + /* Если графики ТОиР */ + if (NWORKTYPE = 0) then + for C in (select T.RN, + T.COMPANY + from EQTCHSRV T, + JURPERSONS J, + EQTECSRVKIND SK, + EQCONFIG C1, + EQCONFIG C2, + INS_DEPARTMENT DS, + INS_DEPARTMENT DR + where T.STATE in (1, 2) + and T.COMPANY = NCOMPANY + and T.JUR_PERS = J.RN + and J.CODE = SBELONG + and T.EQCONFIG = C1.RN + and C1.CODE = SPRODOBJ + and T.DEPTTCSRV = DS.RN + and (DS.CODE = STECHSERV or STECHSERV is null) + and T.DEPTRESP = DR.RN + and (DR.CODE = SRESPDEP or SRESPDEP is null) + and T.EQCONFIG_TECH = C2.RN + and C2.NAME = STECHNAME + and T.EQTECSRVKIND = SK.RN + and SK.CODE = SSRVKIND + and ((NDAY is not null and TO_DATE(SDATE, 'dd.mm.yyyy') between TRUNC(T.DATEPRD_BEG) and + TRUNC(T.DATEPRD_END)) or (NDAY is null and (SDATE = TO_CHAR(T.DATEPRD_BEG, 'mm.yyyy') or + SDATE = TO_CHAR(T.DATEPRD_END, 'mm.yyyy'))))) + loop + /* Сформируем идентификатор буфера */ + if (NIDENT is null) then + NIDENT := GEN_IDENT(); + end if; + /* Добавим подобранное в список отмеченных записей */ + P_SELECTLIST_BASE_INSERT(NIDENT => NIDENT, + NCOMPANY => C.COMPANY, + NDOCUMENT => C.RN, + SUNITCODE => 'EquipTechServices', + SACTIONCODE => null, + NCRN => null, + NDOCUMENT1 => null, + SUNITCODE1 => null, + SACTIONCODE1 => null, + NRN => NSELECTLIST); + end loop; + /* Иначе ремонтные ведомости */ + else + for C in (select T.RN, + T.COMPANY + from EQRPSHEETS T, + JURPERSONS J, + EQTECSRVKIND SK, + EQCONFIG C + where T.STATE in (0, 2, 3) + and T.COMPANY = NCOMPANY + and T.JURPERSONS = J.RN + and J.CODE = SBELONG + and T.EQCONFIG = C.RN + and C.NAME = STECHNAME + and T.TECSRVKIND = SK.RN + and SK.CODE = SSRVKIND + and ((NDAY is not null and TO_DATE(SDATE, 'dd.mm.yyyy') between TRUNC(T.DATEFACT_BEG) and + TRUNC(T.DATEFACT_END)) or (NDAY is null and (SDATE = TO_CHAR(T.DATEFACT_BEG, 'mm.yyyy') or + SDATE = TO_CHAR(T.DATEFACT_END, 'mm.yyyy'))))) + loop + /* Сформируем идентификатор буфера */ + if (NIDENT is null) then + NIDENT := GEN_IDENT(); + end if; + /* Добавим подобранное в список отмеченных записей */ + P_SELECTLIST_BASE_INSERT(NIDENT => NIDENT, + NCOMPANY => C.COMPANY, + NDOCUMENT => C.RN, + SUNITCODE => 'EquipRepairSheets', + SACTIONCODE => null, + NCRN => null, + NDOCUMENT1 => null, + SUNITCODE1 => null, + SACTIONCODE1 => null, + NRN => NSELECTLIST); + end loop; + end if; + end SELECT_EQUIPSRV; /* Выполнение работ по ТОиР */ procedure EQUIPSRV_GRID ( SBELONG in varchar2, -- Принадлежность к Юр. лицу SPRODOBJ in varchar2, -- Производственный объект - STECHSERV in varchar2, -- Техническая служба - SRESPDEP in varchar2, -- Ответственное подразделение + STECHSERV in varchar2 := null, -- Техническая служба + SRESPDEP in varchar2 := null, -- Ответственное подразделение NFROMMONTH in number, -- Месяц начала периода NFROMYEAR in number, -- Год начала периода NTOMONTH in number, -- Месяц окончания периода @@ -86,41 +226,36 @@ create or replace package body PKG_P8PANELS_EQUIPSRV as RDG_ROW0 PKG_P8PANELS_VISUAL.TROW; -- Строка таблицы0 RDG_ROW PKG_P8PANELS_VISUAL.TROW; -- Строка таблицы RDG_ROW2 PKG_P8PANELS_VISUAL.TROW; -- Строка таблицы2 - NCURYEAR PKG_STD.tNUMBER; -- Текущий год - NCURMONTH PKG_STD.tNUMBER; -- Текущий месяц - NTOTALDAYS PKG_STD.tNUMBER; -- Дней в текущем месяце + NCURYEAR PKG_STD.TNUMBER; -- Текущий год + NCURMONTH PKG_STD.TNUMBER; -- Текущий месяц + NTOTALDAYS PKG_STD.TNUMBER; -- Дней в текущем месяце SCURTECHOBJ PKG_STD.TSTRING := null; -- Текущий технический объект SCURTSKCODE PKG_STD.TSTRING := null; -- Текущий вид ремонта - NFROMDATE date := TO_DATE('01.' - || LPAD(TO_CHAR(NFROMMONTH), 2, '0') - || '.' || TO_CHAR(NFROMYEAR), - 'dd.mm.yyyy'); -- Дата начала периода - NTODATE date := LAST_DAY(TO_DATE('01.' - || LPAD(TO_CHAR(NTOMONTH), 2, '0') - || '.' || TO_CHAR(NTOYEAR), - 'dd.mm.yyyy')); -- Дата конца периода - NMS PKG_STD.tNUMBER; -- Месяц начала в цикле года - NME PKG_STD.tNUMBER; -- Месяц окончания в цикле года - NYEAR_PLAN PKG_STD.tNUMBER; -- Год план - NMONTH_PLAN PKG_STD.tNUMBER; -- Месяц план - NDAY_PLAN PKG_STD.tNUMBER; -- День план - NYEAR_FACT PKG_STD.tNUMBER; -- Год факт - NMONTH_FACT PKG_STD.tNUMBER; -- Месяц факт - NDAY_FACT PKG_STD.tNUMBER; -- День факт + NFROMDATE PKG_STD.TLDATE; -- Дата начала периода + NTODATE PKG_STD.TLDATE; -- Дата конца периода + NMS PKG_STD.TNUMBER; -- Месяц начала в цикле года + NME PKG_STD.TNUMBER; -- Месяц окончания в цикле года + NYEAR_PLAN PKG_STD.TNUMBER; -- Год план + NMONTH_PLAN PKG_STD.TNUMBER; -- Месяц план + NDAY_PLAN PKG_STD.TNUMBER; -- День план + NYEAR_FACT PKG_STD.TNUMBER; -- Год факт + NMONTH_FACT PKG_STD.TNUMBER; -- Месяц факт + NDAY_FACT PKG_STD.TNUMBER; -- День факт SPERIODNAME PKG_STD.TSTRING; -- Имя периода SFACT_CLR PKG_STD.TSTRING; -- Цвет закрашивания фактических дат - NROWS PKG_STD.tNUMBER := 0; -- Кол-во строк в курсоре - NWORKPERDAY PKG_STD.tNUMBER(17,2) := null; -- Работы в день - CR PKG_STD.TSTRING; - SGROUP_FILLED PKG_STD.tLSTRING; -- Группы, заполненные строками план/факт - SCOLS PKG_STD.tLSTRING; -- Заполнение периодов работ - YM PKG_CONTVALLOC1S.tCONTAINER; -- Коллекция для подсчёта работ за месяц - MCLR PKG_CONTVALLOC1S.tCONTAINER; -- Коллекция для закрашивания месяцев + NROWS PKG_STD.TNUMBER := 0; -- Кол-во строк в курсоре + NWORKPERDAY PKG_STD.TNUMBER(17,2) := null; -- Работы в день + SGROUP_FILLED PKG_STD.TLSTRING; -- Группы, заполненные строками план/факт + SCOLS PKG_STD.TLSTRING; -- Заполнение периодов работ + YM PKG_CONTVALLOC1S.TCONTAINER; -- Коллекция для подсчёта работ за месяц + MCLR PKG_CONTVALLOC1S.TCONTAINER; -- Коллекция для закрашивания месяцев + CR PKG_STD.TSTRING; -- Текущий ключ коллекции MCLR + /* Курсор с работами ТОиР */ cursor C1 is - select TT.NEQV_RN, - TT.NEQS_RN, - TT.NWRK_RN NRN, + select TT.NEQV_RN, + TT.NEQS_RN, + TT.NWRK_RN NRN, TT.COMPANY NCOMPANY, TT.NAME_WORK SWORKNAME, EC2.CODE STECHOBJCODE, @@ -135,63 +270,60 @@ create or replace package body PKG_P8PANELS_EQUIPSRV as EQJ.DATEFACT_END DDATEFACTEND, EK.CODE STECSRVKINDCODE, EK.NAME STECSRVKINDNAME, - coalesce(EW.NSUM, - (TT.DATEPRD_END - TT.DATEPRD_BEG) * 24) NSUMWORKPLAN, - coalesce(EWJ.NSUMF, - (EQJ.DATEFACT_END - EQJ.DATEFACT_BEG) * 24) NSUMWORKFACT - from - (select B.*, - C.RN nWRK_RN, - C.PRN nWRK_PRN, - C.NAME_WORK, - C.DATEPLAN_BEG, - C.DATEPLAN_END, - C.TECSRVKIND, - C.EQCONFIG, - C.DEPTPERF, - C.DEPTTCSRV, - C.RESP_AGN - from (select EQV.RN nEQV_RN, - EQV.COMPANY, - EQV.JUR_PERS, - EQV.STATE, - EQV.DATEPRD_BEG, - EQV.DATEPRD_END, - EQS.RN nEQS_RN - from EQTCHSRV EQV, -- Графики ТОиР - DOCLINKS DL, - EQRPSHEETS EQS -- Ремонтные ведомости - where EQV.RN = DL.IN_DOCUMENT (+) - and DL.OUT_UNITCODE (+) = 'EquipRepairSheets' - and DL.OUT_DOCUMENT = EQS.RN (+)) B, + COALESCE(EW.NSUM, (TT.DATEPRD_END - TT.DATEPRD_BEG) * 24) NSUMWORKPLAN, + COALESCE(EWJ.NSUMF, (EQJ.DATEFACT_END - EQJ.DATEFACT_BEG) * 24) NSUMWORKFACT + from (select B.*, + C.RN NWRK_RN, + C.PRN NWRK_PRN, + C.NAME_WORK, + C.DATEPLAN_BEG, + C.DATEPLAN_END, + C.TECSRVKIND, + C.EQCONFIG, + C.DEPTPERF, + C.DEPTTCSRV, + C.RESP_AGN + from (select EQV.RN NEQV_RN, + EQV.COMPANY, + EQV.JUR_PERS, + EQV.STATE, + EQV.DATEPRD_BEG, + EQV.DATEPRD_END, + EQS.RN NEQS_RN + from EQTCHSRV EQV, + DOCLINKS DL, + EQRPSHEETS EQS + where EQV.RN = DL.IN_DOCUMENT(+) + and DL.OUT_UNITCODE(+) = 'EquipRepairSheets' + and DL.OUT_DOCUMENT = EQS.RN(+)) B, EQTCHSRWRK C - where B.nEQV_RN = C.PRN (+) - union all - select B.*, - C.RN nWRK_RN, - C.PRN nWRK_PRN, - C.NAME_WORK, - C.DATEPLAN_BEG, - C.DATEPLAN_END, - C.TECSRVKIND, - C.EQCONFIG, - C.DEPTPERF, - null DEPTTCSRV, - C.RESP_AGN - from (select null nEQV_RN, - EQS.COMPANY, - EQS.JURPERSONS JUR_PERS, - EQS.STATE, - EQS.DATEPLAN_BEG, - EQS.DATEPLAN_END, - EQS.RN nEQS_RN - from EQRPSHEETS EQS -- Ремонтные ведомости - where not exists (select 1 - from DOCLINKS DL - where DL.OUT_DOCUMENT = EQS.RN - and DL.IN_UNITCODE = 'EquipTechServices')) B, + where B.NEQV_RN = C.PRN(+) + union all + select B.*, + C.RN NWRK_RN, + C.PRN NWRK_PRN, + C.NAME_WORK, + C.DATEPLAN_BEG, + C.DATEPLAN_END, + C.TECSRVKIND, + C.EQCONFIG, + C.DEPTPERF, + null DEPTTCSRV, + C.RESP_AGN + from (select null NEQV_RN, + EQS.COMPANY, + EQS.JURPERSONS JUR_PERS, + EQS.STATE, + EQS.DATEPLAN_BEG, + EQS.DATEPLAN_END, + EQS.RN NEQS_RN + from EQRPSHEETS EQS + where not exists (select 1 + from DOCLINKS DL + where DL.OUT_DOCUMENT = EQS.RN + and DL.IN_UNITCODE = 'EquipTechServices')) B, EQRPSHWRK C - where B.nEQS_RN = C.PRN (+)) TT, + where B.NEQS_RN = C.PRN(+)) TT, EQTECSRVKIND EK, JURPERSONS JP, EQCONFIG EC1, @@ -200,49 +332,55 @@ create or replace package body PKG_P8PANELS_EQUIPSRV as INS_DEPARTMENT DR, DOCLINKS DL, EQTECSRVJRNL EQJ, - (select t.prn, - sum(t.Worktimeplan * t.perform_quant) NSUM - from EQTCHSRWRC t - group by t.prn) EW, - (select t.prn, - sum(t.worktimefact * t.quantfact) NSUMF - from EQTCHSRJRNLWRC t - group by t.prn) EWJ + (select T.PRN, + sum(T.WORKTIMEPLAN * T.PERFORM_QUANT) NSUM + from EQTCHSRWRC T + group by T.PRN) EW, + (select T.PRN, + sum(T.WORKTIMEFACT * T.QUANTFACT) NSUMF + from EQTCHSRJRNLWRC T + group by T.PRN) EWJ where TT.COMPANY = NCOMPANY - and ((TT.state in (1,2) and nEQV_RN is not null) or (TT.state in (0,2,3) and nEQV_RN is null)) + and ((TT.STATE in (1, 2) and NEQV_RN is not null) or (TT.STATE in (0, 2, 3) and NEQV_RN is null)) and TT.DATEPRD_BEG >= NFROMDATE and TT.DATEPRD_END <= NTODATE and JP.CODE = SBELONG and EC1.CODE = SPRODOBJ and (DS.CODE = STECHSERV or STECHSERV is null) and (DR.CODE = SRESPDEP or SRESPDEP is null) - and TT.EQCONFIG = EC2.RN (+) - and TT.DEPTPERF = DR.RN (+) - and TT.DEPTTCSRV = DS.RN (+) - and TT.NWRK_RN = EW.PRN (+) - and EQJ.RN = EWJ.PRN (+) - and TT.TECSRVKIND = EK.RN (+) - and TT.NWRK_RN = DL.IN_DOCUMENT (+) - and ((DL.OUT_UNITCODE = 'EquipTechServiceJournal' and DL.RN is not null) or (DL.OUT_UNITCODE is null and DL.RN is null)) - and DL.OUT_DOCUMENT = EQJ.RN (+) - order by EC2.NAME, EK.CODE; + and TT.EQCONFIG = EC2.RN(+) + and TT.DEPTPERF = DR.RN(+) + and TT.DEPTTCSRV = DS.RN(+) + and TT.NWRK_RN = EW.PRN(+) + and EQJ.RN = EWJ.PRN(+) + and TT.TECSRVKIND = EK.RN(+) + and TT.NWRK_RN = DL.IN_DOCUMENT(+) + and ((DL.OUT_UNITCODE = 'EquipTechServiceJournal' and DL.RN is not null) or + (DL.OUT_UNITCODE is null and DL.RN is null)) + and DL.OUT_DOCUMENT = EQJ.RN(+) + order by EC2.NAME, + EK.CODE; begin + /* Определим дату начала периода */ + NFROMDATE := TO_DATE('01.' || LPAD(TO_CHAR(NFROMMONTH), 2, '0') || '.' || TO_CHAR(NFROMYEAR), 'dd.mm.yyyy'); + /* Определим дату конца периода */ + NTODATE := LAST_DAY(TO_DATE('01.' || LPAD(TO_CHAR(NTOMONTH), 2, '0') || '.' || TO_CHAR(NTOYEAR), 'dd.mm.yyyy')); /* Инициализируем таблицу данных */ RDG := PKG_P8PANELS_VISUAL.TDATA_GRID_MAKE(); /* Формируем структуру заголовка */ PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG, SNAME => 'STEST', - SCAPTION => 'ТЕСТ', + SCAPTION => 'ТЕСТ', SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_STR); PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG, SNAME => 'SINFO', - SCAPTION => 'Информация', + SCAPTION => 'Объект ремонта', SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_STR); PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG, SNAME => 'SINFO2', SCAPTION => 'Объект ремонта', SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_STR, - SPARENT => 'SINFO'); + SPARENT => 'SINFO'); PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG, SNAME => 'NRN', SCAPTION => 'Рег. номер', @@ -317,15 +455,15 @@ create or replace package body PKG_P8PANELS_EQUIPSRV as SNAME => 'STECSRVKINDNAME', SCAPTION => 'Наименование типа работы', SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_STR, - BVISIBLE => false); - /* Очистка коллекций */ - PKG_CONTVALLOC1S.PURGE(YM); - PKG_CONTVALLOC1S.PURGE(MCLR); - + BVISIBLE => false); + /* Очистка коллекций */ + PKG_CONTVALLOC1S.PURGE(RCONTAINER => YM); + PKG_CONTVALLOC1S.PURGE(RCONTAINER => MCLR); + /* Текущий год */ NCURYEAR := EXTRACT(year from sysdate); - NCURMONTH := EXTRACT(month from sysdate); - - /* Цикл по годам периода */ + /* Текущий месяц */ + NCURMONTH := EXTRACT(month from sysdate); + /* Цикл по годам периода */ for Y in NFROMYEAR .. NTOYEAR loop if (NFROMYEAR = NTOYEAR) then @@ -335,220 +473,249 @@ create or replace package body PKG_P8PANELS_EQUIPSRV as if (Y = NFROMYEAR) then NMS := NFROMMONTH; NME := 12; - elsif (NFROMYEAR < Y and Y < NTOYEAR) then + elsif ((NFROMYEAR < Y) and (Y < NTOYEAR)) then NMS := 1; NME := 12; elsif (Y = NTOYEAR) then NMS := 1; - NME := NTOMONTH; + NME := NTOMONTH; end if; end if; - /* Цикл по месяцам года */ for M in NMS .. NME loop - - PKG_CONTVALLOC1S.PUTN(YM, '_' || TO_CHAR(Y) || '_' || TO_CHAR(M) || '_P', 0); - PKG_CONTVALLOC1S.PUTN(YM, '_' || TO_CHAR(Y) || '_' || TO_CHAR(M) || '_F', 0); - - if (Y = NCURYEAR and M = NCURMONTH) then + PKG_CONTVALLOC1S.PUTN(RCONTAINER => YM, SROWID => '_' || TO_CHAR(Y) || '_' || TO_CHAR(M) || '_P', NVALUE => 0); + PKG_CONTVALLOC1S.PUTN(RCONTAINER => YM, SROWID => '_' || TO_CHAR(Y) || '_' || TO_CHAR(M) || '_F', NVALUE => 0); + /* Находим текущий месяц и делаем его развёрнутым по дням */ + if ((Y = NCURYEAR) and (M = NCURMONTH)) then BEXPANDED := true; else BEXPANDED := false; end if; - - PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG, - SNAME => '_' || TO_CHAR(Y) || '_' || TO_CHAR(M), - SCAPTION => LPAD(TO_CHAR(M), 2, '0') || ' ' || TO_CHAR(Y), - SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_STR, + PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG, + SNAME => '_' || TO_CHAR(Y) || '_' || TO_CHAR(M), + SCAPTION => LPAD(TO_CHAR(M), 2, '0') || ' ' || TO_CHAR(Y), + SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_STR, BEXPANDABLE => true, - BEXPANDED => BEXPANDED); - NTOTALDAYS := to_number(to_char(LAST_DAY(TO_DATE('01.' || LPAD(TO_CHAR(M), 2, '0') || '.' || TO_CHAR(Y), 'dd.mm.yyyy')),'dd'), '99'); + BEXPANDED => BEXPANDED); + /* Подсчёт кол-ва дней в месяце */ + NTOTALDAYS := TO_NUMBER(TO_CHAR(LAST_DAY(TO_DATE('01.' || LPAD(TO_CHAR(M), 2, '0') || '.' || TO_CHAR(Y), + 'dd.mm.yyyy')), + 'dd'), + '99'); /* Цикл по дням месяца */ for D in 1 .. NTOTALDAYS loop PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG, - SNAME => '_' || TO_CHAR(Y) || '_' || TO_CHAR(M) || '_' || TO_CHAR(D), + SNAME => '_' || TO_CHAR(Y) || '_' || TO_CHAR(M) || '_' || + TO_CHAR(D), SCAPTION => TO_CHAR(D, '99'), SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_STR, SPARENT => '_' || TO_CHAR(Y) || '_' || TO_CHAR(M)); end loop; - end loop; + end loop; end loop; - - /* Подсчёт кол-ва записей в курсоре */ + /* Подсчёт кол-ва записей в курсоре */ for Q1 in C1 loop NROWS := NROWS + 1; end loop; - /* Цикл по курсору */ for QQ in C1 loop NROWS := NROWS - 1; - if (SCURTECHOBJ != QQ.STECHOBJNAME or SCURTECHOBJ is null) then + /* Если новый объект ремонта */ + if ((SCURTECHOBJ != QQ.STECHOBJNAME) or (SCURTECHOBJ is null)) then + /* Если строка с трудоёмкостью по объекту ремонта сформирована */ if (RDG_ROW0.RCOLS is not null) then - /* Цикл по годам периода */ + /* Цикл по годам периода */ for Y in NFROMYEAR .. NTOYEAR loop + /* Если отчёт в пределах года */ if (NFROMYEAR = NTOYEAR) then NMS := NFROMMONTH; NME := NTOMONTH; + /* Иначе вычисляем кол-во месяцев в каждом году периода отчёта*/ else if (Y = NFROMYEAR) then NMS := NFROMMONTH; NME := 12; - elsif (NFROMYEAR < Y and Y < NTOYEAR) then + elsif ((NFROMYEAR < Y) and (Y < NTOYEAR)) then NMS := 1; NME := 12; elsif (Y = NTOYEAR) then NMS := 1; - NME := NTOMONTH; + NME := NTOMONTH; end if; end if; - - /* Цикл по месяцам года */ + /* Цикл по месяцам года, заполнение трудоёмкости с привязкой к месяцу */ for M in NMS .. NME loop SPERIODNAME := '_' || TO_CHAR(Y) || '_' || TO_CHAR(M); - PKG_P8PANELS_VISUAL.TROW_ADD_COL(RROW => RDG_ROW0, - SNAME => SPERIODNAME, - SVALUE => 'план: ' || HOURS_STR(PKG_CONTVALLOC1S.GETN(YM, SPERIODNAME || '_P')) || ' факт: ' || HOURS_STR(PKG_CONTVALLOC1S.GETN(YM, SPERIODNAME || '_F'))); - PKG_CONTVALLOC1S.PUTN(YM, SPERIODNAME || '_P', 0); - PKG_CONTVALLOC1S.PUTN(YM, SPERIODNAME || '_F', 0); - end loop; + PKG_P8PANELS_VISUAL.TROW_ADD_COL(RROW => RDG_ROW0, + SNAME => SPERIODNAME, + SVALUE => 'план: ' || + HOURS_STR(PKG_CONTVALLOC1S.GETN(YM, SPERIODNAME || '_P')) || + ' факт: ' || + HOURS_STR(PKG_CONTVALLOC1S.GETN(YM, SPERIODNAME || '_F'))); + /* Добавление в коллекцию трудоёмкость план */ + PKG_CONTVALLOC1S.PUTN(RCONTAINER => YM, SROWID => SPERIODNAME || '_P', NVALUE => 0); + /* Добавление в коллекцию трудоёмкость факт */ + PKG_CONTVALLOC1S.PUTN(RCONTAINER => YM, SROWID => SPERIODNAME || '_F', NVALUE => 0); + end loop; end loop; - + /* Добавление строки с трудоёмкостью */ PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_ROW(RDATA_GRID => RDG, RROW => RDG_ROW0); end if; - SCURTECHOBJ := QQ.STECHOBJNAME; + /* Добавление группы с объектом ремонта */ + SCURTECHOBJ := QQ.STECHOBJNAME; SPRJ_GROUP_NAME := SCURTECHOBJ; PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_GROUP(RDATA_GRID => RDG, SNAME => SPRJ_GROUP_NAME, SCAPTION => QQ.STECHOBJNAME, - BEXPANDABLE => false); + BEXPANDABLE => false); RDG_ROW0 := PKG_P8PANELS_VISUAL.TROW_MAKE(SGROUP => SPRJ_GROUP_NAME); - PKG_P8PANELS_VISUAL.TROW_ADD_COL(RROW => RDG_ROW0, SNAME => 'STEST', SVALUE => SCURTECHOBJ); + PKG_P8PANELS_VISUAL.TROW_ADD_COL(RROW => RDG_ROW0, SNAME => 'STEST', SVALUE => SCURTECHOBJ); end if; /* Формируем имя группы для вида ремонта */ SCURTSKCODE := SCURTECHOBJ || '_' || QQ.STECSRVKINDCODE; /* Если по данной группе еще нет строк плана и факта */ - if (STRIN(sSUBSTR => SCURTSKCODE, sSOURCE => SGROUP_FILLED, sDELIM => ';') = 0) then + if (STRIN(SSUBSTR => SCURTSKCODE, SSOURCE => SGROUP_FILLED, SDELIM => ';') = 0) then /* Добавляем строку плана */ if (RDG_ROW.RCOLS is not null) then PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_ROW(RDATA_GRID => RDG, RROW => RDG_ROW); end if; /* Добавляем строку факта */ if (RDG_ROW2.RCOLS is not null) then - CR := PKG_CONTVALLOC1S.FIRST_(MCLR); + CR := PKG_CONTVALLOC1S.FIRST_(RCONTAINER => MCLR); /* Цикл по коллекции для закрашивания месяцев */ - for Z in 1 .. PKG_CONTVALLOC1S.COUNT_(MCLR) + for Z in 1 .. PKG_CONTVALLOC1S.COUNT_(RCONTAINER => MCLR) loop - PKG_P8PANELS_VISUAL.TROW_ADD_COL(RROW => RDG_ROW2, SNAME => CR, SVALUE => PKG_CONTVALLOC1S.GETS(MCLR, CR)); - CR := PKG_CONTVALLOC1S.NEXT_(MCLR, CR); + PKG_P8PANELS_VISUAL.TROW_ADD_COL(RROW => RDG_ROW2, + SNAME => CR, + SVALUE => PKG_CONTVALLOC1S.GETS(RCONTAINER => MCLR, SROWID => CR)); + CR := PKG_CONTVALLOC1S.NEXT_(RCONTAINER => MCLR, SROWID => CR); end loop; PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_ROW(RDATA_GRID => RDG, RROW => RDG_ROW2); end if; - PKG_CONTVALLOC1S.PURGE(MCLR); + PKG_CONTVALLOC1S.PURGE(RCONTAINER => MCLR); /* Добвим группу для вида ремонта */ SPRJ_GROUP_NAME := SCURTSKCODE; PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_GROUP(RDATA_GRID => RDG, SNAME => SPRJ_GROUP_NAME, SCAPTION => QQ.STECSRVKINDCODE, BEXPANDABLE => false); - RDG_ROW := PKG_P8PANELS_VISUAL.TROW_MAKE(SGROUP => SPRJ_GROUP_NAME); + /* Строка плана */ + RDG_ROW := PKG_P8PANELS_VISUAL.TROW_MAKE(SGROUP => SPRJ_GROUP_NAME); PKG_P8PANELS_VISUAL.TROW_ADD_COL(RROW => RDG_ROW, SNAME => 'STEST', SVALUE => QQ.STECSRVKINDCODE); - PKG_P8PANELS_VISUAL.TROW_ADD_COL(RROW => RDG_ROW, SNAME => 'SINFO2', SVALUE => 'План'); - RDG_ROW2 := PKG_P8PANELS_VISUAL.TROW_MAKE(SGROUP => SPRJ_GROUP_NAME); + PKG_P8PANELS_VISUAL.TROW_ADD_COL(RROW => RDG_ROW, SNAME => 'SINFO2', SVALUE => 'План'); + /* Строка факта */ + RDG_ROW2 := PKG_P8PANELS_VISUAL.TROW_MAKE(SGROUP => SPRJ_GROUP_NAME); PKG_P8PANELS_VISUAL.TROW_ADD_COL(RROW => RDG_ROW2, SNAME => 'SINFO2', SVALUE => 'Факт'); /* Добавляем в заполненные группы */ SGROUP_FILLED := SGROUP_FILLED || SPRJ_GROUP_NAME || ';'; - end if; /* Плановые работы */ if (QQ.NEQV_RN is not null) then - for x in 0 .. trunc(QQ.DDATEPLANEND) - trunc(QQ.DDATEPLANBEG) + /* Цикл по периоду */ + for X in 0 .. TRUNC(QQ.DDATEPLANEND) - TRUNC(QQ.DDATEPLANBEG) loop - NYEAR_PLAN := EXTRACT(year from QQ.DDATEPLANBEG + x); - NMONTH_PLAN := EXTRACT(month from QQ.DDATEPLANBEG + x); - NDAY_PLAN := EXTRACT(day from QQ.DDATEPLANBEG + x); - - if (x = 0) then + NYEAR_PLAN := EXTRACT(year from QQ.DDATEPLANBEG + X); + NMONTH_PLAN := EXTRACT(month from QQ.DDATEPLANBEG + X); + NDAY_PLAN := EXTRACT(day from QQ.DDATEPLANBEG + X); + /* Если первый день периода */ + if (X = 0) then SPERIODNAME := '_' || TO_CHAR(NYEAR_PLAN) || '_' || NMONTH_PLAN; - + /* Подсчёт трудоёмкости за месяц */ if (QQ.NSUMWORKPLAN is not null) then - PKG_CONTVALLOC1S.PUTN(YM, SPERIODNAME || '_P', PKG_CONTVALLOC1S.GETN(YM, SPERIODNAME || '_P') + QQ.NSUMWORKPLAN); + PKG_CONTVALLOC1S.PUTN(RCONTAINER => YM, + SROWID => SPERIODNAME || '_P', + NVALUE => PKG_CONTVALLOC1S.GETN(RCONTAINER => YM, SROWID => SPERIODNAME || '_P') + + QQ.NSUMWORKPLAN); end if; - - if (STRIN(sSUBSTR => SPRJ_GROUP_NAME || ' ' || SPERIODNAME || ' PLAN', sSOURCE => SCOLS, sDELIM => ';') = 0) then + /* Закрашивание месяца плана синим */ + if (STRIN(SSUBSTR => SPRJ_GROUP_NAME || ' ' || SPERIODNAME || ' PLAN', SSOURCE => SCOLS, SDELIM => ';') = 0) then PKG_P8PANELS_VISUAL.TROW_ADD_COL(RROW => RDG_ROW, SNAME => SPERIODNAME, SVALUE => 'blue'); - SCOLS := SCOLS || SPRJ_GROUP_NAME || ' ' || SPERIODNAME || ' PLAN;'; + SCOLS := SCOLS || SPRJ_GROUP_NAME || ' ' || SPERIODNAME || ' PLAN;'; end if; end if; SPERIODNAME := '_' || TO_CHAR(NYEAR_PLAN) || '_' || TO_CHAR(NMONTH_PLAN) || '_' || TO_CHAR(NDAY_PLAN); - if (STRIN(sSUBSTR => SPRJ_GROUP_NAME || ' ' || SPERIODNAME || ' PLAN', sSOURCE => SCOLS, sDELIM => ';') = 0) then + /* Закрашивание дня плана синим */ + if (STRIN(SSUBSTR => SPRJ_GROUP_NAME || ' ' || SPERIODNAME || ' PLAN', SSOURCE => SCOLS, SDELIM => ';') = 0) then PKG_P8PANELS_VISUAL.TROW_ADD_COL(RROW => RDG_ROW, SNAME => SPERIODNAME, SVALUE => 'blue'); - SCOLS := SCOLS || SPRJ_GROUP_NAME || ' ' || SPERIODNAME || ' PLAN;'; - end if; + SCOLS := SCOLS || SPRJ_GROUP_NAME || ' ' || SPERIODNAME || ' PLAN;'; + end if; end loop; end if; - /* Фактические и внеплановые работы */ - if (QQ.DDATEFACTEND is not null and QQ.DDATEFACTBEG is not null) then - if (QQ.nEQV_RN is not null) then + if ((QQ.DDATEFACTEND is not null) and (QQ.DDATEFACTBEG is not null)) then + /* Фактические - зелёный, внеплановые - красный */ + if (QQ.NEQV_RN is not null) then SFACT_CLR := 'green'; else SFACT_CLR := 'red'; - end if; - + end if; NWORKPERDAY := null; + /* Если период не в одном месяце, то считаем трудоёмкость в день */ if (EXTRACT(month from QQ.DDATEFACTBEG) != EXTRACT(month from QQ.DDATEFACTEND)) then - NWORKPERDAY := QQ.NSUMWORKFACT/(round(QQ.DDATEFACTEND - QQ.DDATEFACTBEG) + 1); - NCURMONTH := EXTRACT(month from QQ.DDATEFACTBEG); - end if; - - for x in 0 .. trunc(QQ.DDATEFACTEND) - trunc(QQ.DDATEFACTBEG) + NWORKPERDAY := QQ.NSUMWORKFACT / (ROUND(QQ.DDATEFACTEND - QQ.DDATEFACTBEG) + 1); + NCURMONTH := EXTRACT(month from QQ.DDATEFACTBEG); + end if; + /* Цикл по периоду */ + for X in 0 .. TRUNC(QQ.DDATEFACTEND) - TRUNC(QQ.DDATEFACTBEG) loop - NYEAR_FACT := EXTRACT(year from QQ.DDATEFACTBEG + x); - NMONTH_FACT := EXTRACT(month from QQ.DDATEFACTBEG + x); - NDAY_FACT := EXTRACT(day from QQ.DDATEFACTBEG + x); - - if (x = 0 or NCURMONTH != NMONTH_FACT) then + NYEAR_FACT := EXTRACT(year from QQ.DDATEFACTBEG + X); + NMONTH_FACT := EXTRACT(month from QQ.DDATEFACTBEG + X); + NDAY_FACT := EXTRACT(day from QQ.DDATEFACTBEG + X); + /* Если первый день периода или следующий месяц периода */ + if ((X = 0) or (NCURMONTH != NMONTH_FACT)) then + /* Обновляется текущий месяц */ if (NCURMONTH != NMONTH_FACT) then NCURMONTH := NMONTH_FACT; end if; SPERIODNAME := '_' || TO_CHAR(NYEAR_FACT) || '_' || NMONTH_FACT; - - if (QQ.NSUMWORKFACT is not null and NWORKPERDAY is null) then - PKG_CONTVALLOC1S.PUTN(YM, SPERIODNAME || '_F', PKG_CONTVALLOC1S.GETN(YM, SPERIODNAME || '_F') + QQ.NSUMWORKFACT); + /* Подсчёт трудоёмкости за месяц если период в одном месяце */ + if ((QQ.NSUMWORKFACT is not null) and (NWORKPERDAY is null)) then + PKG_CONTVALLOC1S.PUTN(RCONTAINER => YM, + SROWID => SPERIODNAME || '_F', + NVALUE => PKG_CONTVALLOC1S.GETN(RCONTAINER => YM, SROWID => SPERIODNAME || '_F') + + QQ.NSUMWORKFACT); end if; - /* Добавление в коллекцию окрашивания месяца */ - if (PKG_CONTVALLOC1S.EXISTS_(rCONTAINER => MCLR, sROWID => SPERIODNAME) = false) then - PKG_CONTVALLOC1S.PUTS(MCLR, SPERIODNAME, SFACT_CLR); + if (PKG_CONTVALLOC1S.EXISTS_(RCONTAINER => MCLR, SROWID => SPERIODNAME) = false) then + PKG_CONTVALLOC1S.PUTS(RCONTAINER => MCLR, SROWID => SPERIODNAME, SVALUE => SFACT_CLR); else + /* Если второй цвет для месяца */ if (STRIN(trim(SFACT_CLR), trim(PKG_CONTVALLOC1S.GETS(MCLR, SPERIODNAME))) = 0) then - PKG_CONTVALLOC1S.PUTS(MCLR, SPERIODNAME, PKG_CONTVALLOC1S.GETS(MCLR, SPERIODNAME) || ' ' || SFACT_CLR); + PKG_CONTVALLOC1S.PUTS(RCONTAINER => MCLR, + SROWID => SPERIODNAME, + SVALUE => PKG_CONTVALLOC1S.GETS(RCONTAINER => MCLR, SROWID => SPERIODNAME) || ' ' || + SFACT_CLR); end if; end if; end if; + /* Подсчёт трудоёмкости за месяц если период не в одном месяце */ if (NWORKPERDAY is not null) then - PKG_CONTVALLOC1S.PUTN(YM, SPERIODNAME || '_F', PKG_CONTVALLOC1S.GETN(YM, SPERIODNAME || '_F') + NWORKPERDAY); + PKG_CONTVALLOC1S.PUTN(RCONTAINER => YM, + SROWID => SPERIODNAME || '_F', + NVALUE => PKG_CONTVALLOC1S.GETN(RCONTAINER => YM, SROWID => SPERIODNAME || '_F') + + NWORKPERDAY); end if; SPERIODNAME := '_' || TO_CHAR(NYEAR_FACT) || '_' || TO_CHAR(NMONTH_FACT) || '_' || TO_CHAR(NDAY_FACT); - /* Добавление окрашивания дней факта */ - if (PKG_CONTVALLOC1S.EXISTS_(rCONTAINER => MCLR, sROWID => SPERIODNAME) = false) then - PKG_CONTVALLOC1S.PUTS(MCLR, SPERIODNAME, SFACT_CLR); + /* Добавление в коллекцию окрашивания дней факта */ + if (PKG_CONTVALLOC1S.EXISTS_(RCONTAINER => MCLR, SROWID => SPERIODNAME) = false) then + PKG_CONTVALLOC1S.PUTS(RCONTAINER => MCLR, SROWID => SPERIODNAME, SVALUE => SFACT_CLR); else - if (trim(PKG_CONTVALLOC1S.GETS(MCLR, SPERIODNAME)) = 'green' and trim(SFACT_CLR) = 'red') then - PKG_CONTVALLOC1S.PUTS(MCLR, SPERIODNAME, SFACT_CLR); + /* Если второй цвет для месяца */ + if ((trim(PKG_CONTVALLOC1S.GETS(RCONTAINER => MCLR, SROWID => SPERIODNAME)) = 'green') and + (trim(SFACT_CLR) = 'red')) then + PKG_CONTVALLOC1S.PUTS(RCONTAINER => MCLR, SROWID => SPERIODNAME, SVALUE => SFACT_CLR); end if; - end if; + end if; end loop; - end if; - - if (RDG_ROW0.RCOLS is not null and NROWS = 0) then - /* Цикл по годам периода */ + end if; + if ((RDG_ROW0.RCOLS is not null) and (NROWS = 0)) then + /* Цикл по годам периода */ for Y in NFROMYEAR .. NTOYEAR loop if (NFROMYEAR = NTOYEAR) then @@ -558,45 +725,51 @@ create or replace package body PKG_P8PANELS_EQUIPSRV as if (Y = NFROMYEAR) then NMS := NFROMMONTH; NME := 12; - elsif (NFROMYEAR < Y and Y < NTOYEAR) then + elsif ((NFROMYEAR < Y) and (Y < NTOYEAR)) then NMS := 1; NME := 12; elsif (Y = NTOYEAR) then NMS := 1; - NME := NTOMONTH; + NME := NTOMONTH; end if; end if; - /* Цикл по месяцам года */ for M in NMS .. NME loop SPERIODNAME := '_' || TO_CHAR(Y) || '_' || TO_CHAR(M); - PKG_P8PANELS_VISUAL.TROW_ADD_COL(RROW => RDG_ROW0, - SNAME => SPERIODNAME, - SVALUE => 'план: ' || HOURS_STR(PKG_CONTVALLOC1S.GETN(YM, SPERIODNAME || '_P')) || ' факт: ' || HOURS_STR(PKG_CONTVALLOC1S.GETN(YM, SPERIODNAME || '_F'))); - end loop; + PKG_P8PANELS_VISUAL.TROW_ADD_COL(RROW => RDG_ROW0, + SNAME => SPERIODNAME, + SVALUE => 'план: ' || + HOURS_STR(NHOURS => PKG_CONTVALLOC1S.GETN(RCONTAINER => YM, + SROWID => SPERIODNAME || '_P')) || + ' факт: ' || + HOURS_STR(NHOURS => PKG_CONTVALLOC1S.GETN(RCONTAINER => YM, + SROWID => SPERIODNAME || '_F'))); + end loop; end loop; - PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_ROW(RDATA_GRID => RDG, RROW => RDG_ROW0); end if; - /* План для последней записи */ - if (RDG_ROW.RCOLS is not null and NROWS = 0) then + /* План для последней записи */ + if ((RDG_ROW.RCOLS is not null) and (NROWS = 0)) then PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_ROW(RDATA_GRID => RDG, RROW => RDG_ROW); end if; /* Факт для последней записи */ - if (RDG_ROW2.RCOLS is not null and NROWS = 0) then - CR := PKG_CONTVALLOC1S.FIRST_(MCLR); - for Z in 1 .. PKG_CONTVALLOC1S.COUNT_(MCLR) + if ((RDG_ROW2.RCOLS is not null) and (NROWS = 0)) then + CR := PKG_CONTVALLOC1S.FIRST_(RCONTAINER => MCLR); + for Z in 1 .. PKG_CONTVALLOC1S.COUNT_(RCONTAINER => MCLR) loop - PKG_P8PANELS_VISUAL.TROW_ADD_COL(RROW => RDG_ROW2, SNAME => CR, SVALUE => PKG_CONTVALLOC1S.GETS(MCLR, CR)); - CR := PKG_CONTVALLOC1S.NEXT_(MCLR, cr); + PKG_P8PANELS_VISUAL.TROW_ADD_COL(RROW => RDG_ROW2, + SNAME => CR, + SVALUE => PKG_CONTVALLOC1S.GETS(RCONTAINER => MCLR, SROWID => CR)); + CR := PKG_CONTVALLOC1S.NEXT_(RCONTAINER => MCLR, SROWID => CR); end loop; PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_ROW(RDATA_GRID => RDG, RROW => RDG_ROW2); - end if; + end if; end loop; /* Сериализуем описание */ COUT := PKG_P8PANELS_VISUAL.TDATA_GRID_TO_XML(RDATA_GRID => RDG, NINCLUDE_DEF => 1); - PKG_CONTVALLOC1S.PURGE(YM); + PKG_CONTVALLOC1S.PURGE(RCONTAINER => YM); end EQUIPSRV_GRID; + end PKG_P8PANELS_EQUIPSRV; / From 70ec04db2619e4cd2b40dc031fc1882541277b97 Mon Sep 17 00:00:00 2001 From: davay-popozhe Date: Wed, 17 Apr 2024 18:20:32 +0300 Subject: [PATCH 05/76] =?UTF-8?q?Revert=20"WEB=20APP:=20=D0=A1=D0=B2=D0=B5?= =?UTF-8?q?=D0=B6=D0=B0=D1=8F=20=D1=81=D0=B1=D0=BE=D1=80=D0=BA=D0=B0"?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This reverts commit e6d78ee8febbdfd093eb848ab416ab9807bd1403. --- dist/p8-panels.js | 30 ++++-------------------------- 1 file changed, 4 insertions(+), 26 deletions(-) diff --git a/dist/p8-panels.js b/dist/p8-panels.js index d7cd438..3934950 100644 --- a/dist/p8-panels.js +++ b/dist/p8-panels.js @@ -15,7 +15,7 @@ \***********************************/ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { -eval("var map = {\n\t\"./dummy\": \"./app/panels/dummy/index.js\",\n\t\"./dummy/\": \"./app/panels/dummy/index.js\",\n\t\"./dummy/dummy\": \"./app/panels/dummy/dummy.js\",\n\t\"./dummy/dummy.js\": \"./app/panels/dummy/dummy.js\",\n\t\"./dummy/index\": \"./app/panels/dummy/index.js\",\n\t\"./dummy/index.js\": \"./app/panels/dummy/index.js\",\n\t\"./eqs_prfrm\": \"./app/panels/eqs_prfrm/index.js\",\n\t\"./eqs_prfrm/\": \"./app/panels/eqs_prfrm/index.js\",\n\t\"./eqs_prfrm/eqs_prfrm\": \"./app/panels/eqs_prfrm/eqs_prfrm.js\",\n\t\"./eqs_prfrm/eqs_prfrm.js\": \"./app/panels/eqs_prfrm/eqs_prfrm.js\",\n\t\"./eqs_prfrm/index\": \"./app/panels/eqs_prfrm/index.js\",\n\t\"./eqs_prfrm/index.js\": \"./app/panels/eqs_prfrm/index.js\",\n\t\"./eqs_prfrm/layouts\": \"./app/panels/eqs_prfrm/layouts.js\",\n\t\"./eqs_prfrm/layouts.js\": \"./app/panels/eqs_prfrm/layouts.js\",\n\t\"./mech_rec_cost_prod_plans\": \"./app/panels/mech_rec_cost_prod_plans/index.js\",\n\t\"./mech_rec_cost_prod_plans/\": \"./app/panels/mech_rec_cost_prod_plans/index.js\",\n\t\"./mech_rec_cost_prod_plans/datagrids/backend_dg\": \"./app/panels/mech_rec_cost_prod_plans/datagrids/backend_dg.js\",\n\t\"./mech_rec_cost_prod_plans/datagrids/backend_dg.js\": \"./app/panels/mech_rec_cost_prod_plans/datagrids/backend_dg.js\",\n\t\"./mech_rec_cost_prod_plans/datagrids/fcdeliverylistsp\": \"./app/panels/mech_rec_cost_prod_plans/datagrids/fcdeliverylistsp.js\",\n\t\"./mech_rec_cost_prod_plans/datagrids/fcdeliverylistsp.js\": \"./app/panels/mech_rec_cost_prod_plans/datagrids/fcdeliverylistsp.js\",\n\t\"./mech_rec_cost_prod_plans/datagrids/fcroutlst\": \"./app/panels/mech_rec_cost_prod_plans/datagrids/fcroutlst.js\",\n\t\"./mech_rec_cost_prod_plans/datagrids/fcroutlst.js\": \"./app/panels/mech_rec_cost_prod_plans/datagrids/fcroutlst.js\",\n\t\"./mech_rec_cost_prod_plans/datagrids/goodparties\": \"./app/panels/mech_rec_cost_prod_plans/datagrids/goodparties.js\",\n\t\"./mech_rec_cost_prod_plans/datagrids/goodparties.js\": \"./app/panels/mech_rec_cost_prod_plans/datagrids/goodparties.js\",\n\t\"./mech_rec_cost_prod_plans/datagrids/incomefromdeps\": \"./app/panels/mech_rec_cost_prod_plans/datagrids/incomefromdeps.js\",\n\t\"./mech_rec_cost_prod_plans/datagrids/incomefromdeps.js\": \"./app/panels/mech_rec_cost_prod_plans/datagrids/incomefromdeps.js\",\n\t\"./mech_rec_cost_prod_plans/hooks\": \"./app/panels/mech_rec_cost_prod_plans/hooks.js\",\n\t\"./mech_rec_cost_prod_plans/hooks.js\": \"./app/panels/mech_rec_cost_prod_plans/hooks.js\",\n\t\"./mech_rec_cost_prod_plans/index\": \"./app/panels/mech_rec_cost_prod_plans/index.js\",\n\t\"./mech_rec_cost_prod_plans/index.js\": \"./app/panels/mech_rec_cost_prod_plans/index.js\",\n\t\"./mech_rec_cost_prod_plans/mech_rec_cost_prod_plans\": \"./app/panels/mech_rec_cost_prod_plans/mech_rec_cost_prod_plans.js\",\n\t\"./mech_rec_cost_prod_plans/mech_rec_cost_prod_plans.js\": \"./app/panels/mech_rec_cost_prod_plans/mech_rec_cost_prod_plans.js\",\n\t\"./prj_fin\": \"./app/panels/prj_fin/index.js\",\n\t\"./prj_fin/\": \"./app/panels/prj_fin/index.js\",\n\t\"./prj_fin/index\": \"./app/panels/prj_fin/index.js\",\n\t\"./prj_fin/index.js\": \"./app/panels/prj_fin/index.js\",\n\t\"./prj_fin/layouts\": \"./app/panels/prj_fin/layouts.js\",\n\t\"./prj_fin/layouts.js\": \"./app/panels/prj_fin/layouts.js\",\n\t\"./prj_fin/prj_fin\": \"./app/panels/prj_fin/prj_fin.js\",\n\t\"./prj_fin/prj_fin.js\": \"./app/panels/prj_fin/prj_fin.js\",\n\t\"./prj_fin/projects\": \"./app/panels/prj_fin/projects.js\",\n\t\"./prj_fin/projects.js\": \"./app/panels/prj_fin/projects.js\",\n\t\"./prj_fin/stage_arts\": \"./app/panels/prj_fin/stage_arts.js\",\n\t\"./prj_fin/stage_arts.js\": \"./app/panels/prj_fin/stage_arts.js\",\n\t\"./prj_fin/stage_contracts\": \"./app/panels/prj_fin/stage_contracts.js\",\n\t\"./prj_fin/stage_contracts.js\": \"./app/panels/prj_fin/stage_contracts.js\",\n\t\"./prj_fin/stages\": \"./app/panels/prj_fin/stages.js\",\n\t\"./prj_fin/stages.js\": \"./app/panels/prj_fin/stages.js\",\n\t\"./prj_graph\": \"./app/panels/prj_graph/index.js\",\n\t\"./prj_graph/\": \"./app/panels/prj_graph/index.js\",\n\t\"./prj_graph/index\": \"./app/panels/prj_graph/index.js\",\n\t\"./prj_graph/index.js\": \"./app/panels/prj_graph/index.js\",\n\t\"./prj_graph/layouts\": \"./app/panels/prj_graph/layouts.js\",\n\t\"./prj_graph/layouts.js\": \"./app/panels/prj_graph/layouts.js\",\n\t\"./prj_graph/prj_graph\": \"./app/panels/prj_graph/prj_graph.js\",\n\t\"./prj_graph/prj_graph.js\": \"./app/panels/prj_graph/prj_graph.js\",\n\t\"./prj_help\": \"./app/panels/prj_help/index.js\",\n\t\"./prj_help/\": \"./app/panels/prj_help/index.js\",\n\t\"./prj_help/img/211.png\": \"./app/panels/prj_help/img/211.png\",\n\t\"./prj_help/img/212.png\": \"./app/panels/prj_help/img/212.png\",\n\t\"./prj_help/img/213.png\": \"./app/panels/prj_help/img/213.png\",\n\t\"./prj_help/img/214.png\": \"./app/panels/prj_help/img/214.png\",\n\t\"./prj_help/img/215.png\": \"./app/panels/prj_help/img/215.png\",\n\t\"./prj_help/img/221.png\": \"./app/panels/prj_help/img/221.png\",\n\t\"./prj_help/img/222.png\": \"./app/panels/prj_help/img/222.png\",\n\t\"./prj_help/img/223.png\": \"./app/panels/prj_help/img/223.png\",\n\t\"./prj_help/img/231.png\": \"./app/panels/prj_help/img/231.png\",\n\t\"./prj_help/img/232.png\": \"./app/panels/prj_help/img/232.png\",\n\t\"./prj_help/img/241.png\": \"./app/panels/prj_help/img/241.png\",\n\t\"./prj_help/img/242.png\": \"./app/panels/prj_help/img/242.png\",\n\t\"./prj_help/img/243.png\": \"./app/panels/prj_help/img/243.png\",\n\t\"./prj_help/img/244.png\": \"./app/panels/prj_help/img/244.png\",\n\t\"./prj_help/img/245.png\": \"./app/panels/prj_help/img/245.png\",\n\t\"./prj_help/img/31.png\": \"./app/panels/prj_help/img/31.png\",\n\t\"./prj_help/img/32.png\": \"./app/panels/prj_help/img/32.png\",\n\t\"./prj_help/img/33.png\": \"./app/panels/prj_help/img/33.png\",\n\t\"./prj_help/img/34.png\": \"./app/panels/prj_help/img/34.png\",\n\t\"./prj_help/img/35.png\": \"./app/panels/prj_help/img/35.png\",\n\t\"./prj_help/img/36.png\": \"./app/panels/prj_help/img/36.png\",\n\t\"./prj_help/img/411.png\": \"./app/panels/prj_help/img/411.png\",\n\t\"./prj_help/img/412.png\": \"./app/panels/prj_help/img/412.png\",\n\t\"./prj_help/img/421.png\": \"./app/panels/prj_help/img/421.png\",\n\t\"./prj_help/img/422.png\": \"./app/panels/prj_help/img/422.png\",\n\t\"./prj_help/img/431.png\": \"./app/panels/prj_help/img/431.png\",\n\t\"./prj_help/img/432.png\": \"./app/panels/prj_help/img/432.png\",\n\t\"./prj_help/img/433.png\": \"./app/panels/prj_help/img/433.png\",\n\t\"./prj_help/img/434.png\": \"./app/panels/prj_help/img/434.png\",\n\t\"./prj_help/img/441.png\": \"./app/panels/prj_help/img/441.png\",\n\t\"./prj_help/img/442.png\": \"./app/panels/prj_help/img/442.png\",\n\t\"./prj_help/img/443.png\": \"./app/panels/prj_help/img/443.png\",\n\t\"./prj_help/img/444.png\": \"./app/panels/prj_help/img/444.png\",\n\t\"./prj_help/img/451.png\": \"./app/panels/prj_help/img/451.png\",\n\t\"./prj_help/img/461.png\": \"./app/panels/prj_help/img/461.png\",\n\t\"./prj_help/img/471.png\": \"./app/panels/prj_help/img/471.png\",\n\t\"./prj_help/img/711.png\": \"./app/panels/prj_help/img/711.png\",\n\t\"./prj_help/img/721.png\": \"./app/panels/prj_help/img/721.png\",\n\t\"./prj_help/img/722.png\": \"./app/panels/prj_help/img/722.png\",\n\t\"./prj_help/img/723.png\": \"./app/panels/prj_help/img/723.png\",\n\t\"./prj_help/img/741.png\": \"./app/panels/prj_help/img/741.png\",\n\t\"./prj_help/index\": \"./app/panels/prj_help/index.js\",\n\t\"./prj_help/index.js\": \"./app/panels/prj_help/index.js\",\n\t\"./prj_help/prj_help\": \"./app/panels/prj_help/prj_help.js\",\n\t\"./prj_help/prj_help.js\": \"./app/panels/prj_help/prj_help.js\",\n\t\"./prj_jobs\": \"./app/panels/prj_jobs/index.js\",\n\t\"./prj_jobs/\": \"./app/panels/prj_jobs/index.js\",\n\t\"./prj_jobs/index\": \"./app/panels/prj_jobs/index.js\",\n\t\"./prj_jobs/index.js\": \"./app/panels/prj_jobs/index.js\",\n\t\"./prj_jobs/lab_fact_rpt_dtl\": \"./app/panels/prj_jobs/lab_fact_rpt_dtl.js\",\n\t\"./prj_jobs/lab_fact_rpt_dtl.js\": \"./app/panels/prj_jobs/lab_fact_rpt_dtl.js\",\n\t\"./prj_jobs/lab_plan_fot_dtl\": \"./app/panels/prj_jobs/lab_plan_fot_dtl.js\",\n\t\"./prj_jobs/lab_plan_fot_dtl.js\": \"./app/panels/prj_jobs/lab_plan_fot_dtl.js\",\n\t\"./prj_jobs/lab_plan_jobs_dtl\": \"./app/panels/prj_jobs/lab_plan_jobs_dtl.js\",\n\t\"./prj_jobs/lab_plan_jobs_dtl.js\": \"./app/panels/prj_jobs/lab_plan_jobs_dtl.js\",\n\t\"./prj_jobs/layouts\": \"./app/panels/prj_jobs/layouts.js\",\n\t\"./prj_jobs/layouts.js\": \"./app/panels/prj_jobs/layouts.js\",\n\t\"./prj_jobs/prj_jobs\": \"./app/panels/prj_jobs/prj_jobs.js\",\n\t\"./prj_jobs/prj_jobs.js\": \"./app/panels/prj_jobs/prj_jobs.js\",\n\t\"./prj_jobs/res_mon\": \"./app/panels/prj_jobs/res_mon.js\",\n\t\"./prj_jobs/res_mon.js\": \"./app/panels/prj_jobs/res_mon.js\",\n\t\"./samples\": \"./app/panels/samples/index.js\",\n\t\"./samples/\": \"./app/panels/samples/index.js\",\n\t\"./samples/chart\": \"./app/panels/samples/chart.js\",\n\t\"./samples/chart.js\": \"./app/panels/samples/chart.js\",\n\t\"./samples/data_grid\": \"./app/panels/samples/data_grid.js\",\n\t\"./samples/data_grid.js\": \"./app/panels/samples/data_grid.js\",\n\t\"./samples/gantt\": \"./app/panels/samples/gantt.js\",\n\t\"./samples/gantt.js\": \"./app/panels/samples/gantt.js\",\n\t\"./samples/index\": \"./app/panels/samples/index.js\",\n\t\"./samples/index.js\": \"./app/panels/samples/index.js\",\n\t\"./samples/loader\": \"./app/panels/samples/loader.js\",\n\t\"./samples/loader.js\": \"./app/panels/samples/loader.js\",\n\t\"./samples/messages\": \"./app/panels/samples/messages.js\",\n\t\"./samples/messages.js\": \"./app/panels/samples/messages.js\",\n\t\"./samples/mui\": \"./app/panels/samples/mui.js\",\n\t\"./samples/mui.js\": \"./app/panels/samples/mui.js\",\n\t\"./samples/p8online\": \"./app/panels/samples/p8online.js\",\n\t\"./samples/p8online.js\": \"./app/panels/samples/p8online.js\",\n\t\"./samples/samples\": \"./app/panels/samples/samples.js\",\n\t\"./samples/samples.js\": \"./app/panels/samples/samples.js\"\n};\n\n\nfunction webpackContext(req) {\n\tvar id = webpackContextResolve(req);\n\treturn __webpack_require__(id);\n}\nfunction webpackContextResolve(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t}\n\treturn map[req];\n}\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = \"./app/panels sync recursive ^\\\\.\\\\/.*$\";\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/panels/_sync_^\\.\\/.*$?"); +eval("var map = {\n\t\"./dummy\": \"./app/panels/dummy/index.js\",\n\t\"./dummy/\": \"./app/panels/dummy/index.js\",\n\t\"./dummy/dummy\": \"./app/panels/dummy/dummy.js\",\n\t\"./dummy/dummy.js\": \"./app/panels/dummy/dummy.js\",\n\t\"./dummy/index\": \"./app/panels/dummy/index.js\",\n\t\"./dummy/index.js\": \"./app/panels/dummy/index.js\",\n\t\"./eqs_prfrm\": \"./app/panels/eqs_prfrm/index.js\",\n\t\"./eqs_prfrm/\": \"./app/panels/eqs_prfrm/index.js\",\n\t\"./eqs_prfrm/eqs_prfrm\": \"./app/panels/eqs_prfrm/eqs_prfrm.js\",\n\t\"./eqs_prfrm/eqs_prfrm.js\": \"./app/panels/eqs_prfrm/eqs_prfrm.js\",\n\t\"./eqs_prfrm/index\": \"./app/panels/eqs_prfrm/index.js\",\n\t\"./eqs_prfrm/index.js\": \"./app/panels/eqs_prfrm/index.js\",\n\t\"./eqs_prfrm/layouts\": \"./app/panels/eqs_prfrm/layouts.js\",\n\t\"./eqs_prfrm/layouts.js\": \"./app/panels/eqs_prfrm/layouts.js\",\n\t\"./mech_rec_cost_prod_plans\": \"./app/panels/mech_rec_cost_prod_plans/index.js\",\n\t\"./mech_rec_cost_prod_plans/\": \"./app/panels/mech_rec_cost_prod_plans/index.js\",\n\t\"./mech_rec_cost_prod_plans/datagrids/backend_dg\": \"./app/panels/mech_rec_cost_prod_plans/datagrids/backend_dg.js\",\n\t\"./mech_rec_cost_prod_plans/datagrids/backend_dg.js\": \"./app/panels/mech_rec_cost_prod_plans/datagrids/backend_dg.js\",\n\t\"./mech_rec_cost_prod_plans/datagrids/fcdeliverylistsp\": \"./app/panels/mech_rec_cost_prod_plans/datagrids/fcdeliverylistsp.js\",\n\t\"./mech_rec_cost_prod_plans/datagrids/fcdeliverylistsp.js\": \"./app/panels/mech_rec_cost_prod_plans/datagrids/fcdeliverylistsp.js\",\n\t\"./mech_rec_cost_prod_plans/datagrids/fcroutlst\": \"./app/panels/mech_rec_cost_prod_plans/datagrids/fcroutlst.js\",\n\t\"./mech_rec_cost_prod_plans/datagrids/fcroutlst.js\": \"./app/panels/mech_rec_cost_prod_plans/datagrids/fcroutlst.js\",\n\t\"./mech_rec_cost_prod_plans/datagrids/goodparties\": \"./app/panels/mech_rec_cost_prod_plans/datagrids/goodparties.js\",\n\t\"./mech_rec_cost_prod_plans/datagrids/goodparties.js\": \"./app/panels/mech_rec_cost_prod_plans/datagrids/goodparties.js\",\n\t\"./mech_rec_cost_prod_plans/datagrids/incomefromdeps\": \"./app/panels/mech_rec_cost_prod_plans/datagrids/incomefromdeps.js\",\n\t\"./mech_rec_cost_prod_plans/datagrids/incomefromdeps.js\": \"./app/panels/mech_rec_cost_prod_plans/datagrids/incomefromdeps.js\",\n\t\"./mech_rec_cost_prod_plans/hooks\": \"./app/panels/mech_rec_cost_prod_plans/hooks.js\",\n\t\"./mech_rec_cost_prod_plans/hooks.js\": \"./app/panels/mech_rec_cost_prod_plans/hooks.js\",\n\t\"./mech_rec_cost_prod_plans/index\": \"./app/panels/mech_rec_cost_prod_plans/index.js\",\n\t\"./mech_rec_cost_prod_plans/index.js\": \"./app/panels/mech_rec_cost_prod_plans/index.js\",\n\t\"./mech_rec_cost_prod_plans/mech_rec_cost_prod_plans\": \"./app/panels/mech_rec_cost_prod_plans/mech_rec_cost_prod_plans.js\",\n\t\"./mech_rec_cost_prod_plans/mech_rec_cost_prod_plans.js\": \"./app/panels/mech_rec_cost_prod_plans/mech_rec_cost_prod_plans.js\",\n\t\"./prj_fin\": \"./app/panels/prj_fin/index.js\",\n\t\"./prj_fin/\": \"./app/panels/prj_fin/index.js\",\n\t\"./prj_fin/index\": \"./app/panels/prj_fin/index.js\",\n\t\"./prj_fin/index.js\": \"./app/panels/prj_fin/index.js\",\n\t\"./prj_fin/layouts\": \"./app/panels/prj_fin/layouts.js\",\n\t\"./prj_fin/layouts.js\": \"./app/panels/prj_fin/layouts.js\",\n\t\"./prj_fin/prj_fin\": \"./app/panels/prj_fin/prj_fin.js\",\n\t\"./prj_fin/prj_fin.js\": \"./app/panels/prj_fin/prj_fin.js\",\n\t\"./prj_fin/projects\": \"./app/panels/prj_fin/projects.js\",\n\t\"./prj_fin/projects.js\": \"./app/panels/prj_fin/projects.js\",\n\t\"./prj_fin/stage_arts\": \"./app/panels/prj_fin/stage_arts.js\",\n\t\"./prj_fin/stage_arts.js\": \"./app/panels/prj_fin/stage_arts.js\",\n\t\"./prj_fin/stage_contracts\": \"./app/panels/prj_fin/stage_contracts.js\",\n\t\"./prj_fin/stage_contracts.js\": \"./app/panels/prj_fin/stage_contracts.js\",\n\t\"./prj_fin/stages\": \"./app/panels/prj_fin/stages.js\",\n\t\"./prj_fin/stages.js\": \"./app/panels/prj_fin/stages.js\",\n\t\"./prj_graph\": \"./app/panels/prj_graph/index.js\",\n\t\"./prj_graph/\": \"./app/panels/prj_graph/index.js\",\n\t\"./prj_graph/index\": \"./app/panels/prj_graph/index.js\",\n\t\"./prj_graph/index.js\": \"./app/panels/prj_graph/index.js\",\n\t\"./prj_graph/layouts\": \"./app/panels/prj_graph/layouts.js\",\n\t\"./prj_graph/layouts.js\": \"./app/panels/prj_graph/layouts.js\",\n\t\"./prj_graph/prj_graph\": \"./app/panels/prj_graph/prj_graph.js\",\n\t\"./prj_graph/prj_graph.js\": \"./app/panels/prj_graph/prj_graph.js\",\n\t\"./prj_help\": \"./app/panels/prj_help/index.js\",\n\t\"./prj_help/\": \"./app/panels/prj_help/index.js\",\n\t\"./prj_help/img/211.png\": \"./app/panels/prj_help/img/211.png\",\n\t\"./prj_help/img/212.png\": \"./app/panels/prj_help/img/212.png\",\n\t\"./prj_help/img/213.png\": \"./app/panels/prj_help/img/213.png\",\n\t\"./prj_help/img/214.png\": \"./app/panels/prj_help/img/214.png\",\n\t\"./prj_help/img/215.png\": \"./app/panels/prj_help/img/215.png\",\n\t\"./prj_help/img/221.png\": \"./app/panels/prj_help/img/221.png\",\n\t\"./prj_help/img/222.png\": \"./app/panels/prj_help/img/222.png\",\n\t\"./prj_help/img/223.png\": \"./app/panels/prj_help/img/223.png\",\n\t\"./prj_help/img/231.png\": \"./app/panels/prj_help/img/231.png\",\n\t\"./prj_help/img/232.png\": \"./app/panels/prj_help/img/232.png\",\n\t\"./prj_help/img/241.png\": \"./app/panels/prj_help/img/241.png\",\n\t\"./prj_help/img/242.png\": \"./app/panels/prj_help/img/242.png\",\n\t\"./prj_help/img/243.png\": \"./app/panels/prj_help/img/243.png\",\n\t\"./prj_help/img/244.png\": \"./app/panels/prj_help/img/244.png\",\n\t\"./prj_help/img/245.png\": \"./app/panels/prj_help/img/245.png\",\n\t\"./prj_help/img/31.png\": \"./app/panels/prj_help/img/31.png\",\n\t\"./prj_help/img/32.png\": \"./app/panels/prj_help/img/32.png\",\n\t\"./prj_help/img/33.png\": \"./app/panels/prj_help/img/33.png\",\n\t\"./prj_help/img/34.png\": \"./app/panels/prj_help/img/34.png\",\n\t\"./prj_help/img/35.png\": \"./app/panels/prj_help/img/35.png\",\n\t\"./prj_help/img/36.png\": \"./app/panels/prj_help/img/36.png\",\n\t\"./prj_help/img/411.png\": \"./app/panels/prj_help/img/411.png\",\n\t\"./prj_help/img/412.png\": \"./app/panels/prj_help/img/412.png\",\n\t\"./prj_help/img/421.png\": \"./app/panels/prj_help/img/421.png\",\n\t\"./prj_help/img/422.png\": \"./app/panels/prj_help/img/422.png\",\n\t\"./prj_help/img/431.png\": \"./app/panels/prj_help/img/431.png\",\n\t\"./prj_help/img/432.png\": \"./app/panels/prj_help/img/432.png\",\n\t\"./prj_help/img/433.png\": \"./app/panels/prj_help/img/433.png\",\n\t\"./prj_help/img/434.png\": \"./app/panels/prj_help/img/434.png\",\n\t\"./prj_help/img/441.png\": \"./app/panels/prj_help/img/441.png\",\n\t\"./prj_help/img/442.png\": \"./app/panels/prj_help/img/442.png\",\n\t\"./prj_help/img/443.png\": \"./app/panels/prj_help/img/443.png\",\n\t\"./prj_help/img/444.png\": \"./app/panels/prj_help/img/444.png\",\n\t\"./prj_help/img/451.png\": \"./app/panels/prj_help/img/451.png\",\n\t\"./prj_help/img/461.png\": \"./app/panels/prj_help/img/461.png\",\n\t\"./prj_help/img/471.png\": \"./app/panels/prj_help/img/471.png\",\n\t\"./prj_help/img/711.png\": \"./app/panels/prj_help/img/711.png\",\n\t\"./prj_help/img/721.png\": \"./app/panels/prj_help/img/721.png\",\n\t\"./prj_help/img/722.png\": \"./app/panels/prj_help/img/722.png\",\n\t\"./prj_help/img/723.png\": \"./app/panels/prj_help/img/723.png\",\n\t\"./prj_help/img/741.png\": \"./app/panels/prj_help/img/741.png\",\n\t\"./prj_help/index\": \"./app/panels/prj_help/index.js\",\n\t\"./prj_help/index.js\": \"./app/panels/prj_help/index.js\",\n\t\"./prj_help/prj_help\": \"./app/panels/prj_help/prj_help.js\",\n\t\"./prj_help/prj_help.js\": \"./app/panels/prj_help/prj_help.js\",\n\t\"./prj_jobs\": \"./app/panels/prj_jobs/index.js\",\n\t\"./prj_jobs/\": \"./app/panels/prj_jobs/index.js\",\n\t\"./prj_jobs/index\": \"./app/panels/prj_jobs/index.js\",\n\t\"./prj_jobs/index.js\": \"./app/panels/prj_jobs/index.js\",\n\t\"./prj_jobs/lab_plan_fot_dtl\": \"./app/panels/prj_jobs/lab_plan_fot_dtl.js\",\n\t\"./prj_jobs/lab_plan_fot_dtl.js\": \"./app/panels/prj_jobs/lab_plan_fot_dtl.js\",\n\t\"./prj_jobs/lab_plan_jobs_dtl\": \"./app/panels/prj_jobs/lab_plan_jobs_dtl.js\",\n\t\"./prj_jobs/lab_plan_jobs_dtl.js\": \"./app/panels/prj_jobs/lab_plan_jobs_dtl.js\",\n\t\"./prj_jobs/prj_jobs\": \"./app/panels/prj_jobs/prj_jobs.js\",\n\t\"./prj_jobs/prj_jobs.js\": \"./app/panels/prj_jobs/prj_jobs.js\",\n\t\"./prj_jobs/res_mon\": \"./app/panels/prj_jobs/res_mon.js\",\n\t\"./prj_jobs/res_mon.js\": \"./app/panels/prj_jobs/res_mon.js\",\n\t\"./samples\": \"./app/panels/samples/index.js\",\n\t\"./samples/\": \"./app/panels/samples/index.js\",\n\t\"./samples/chart\": \"./app/panels/samples/chart.js\",\n\t\"./samples/chart.js\": \"./app/panels/samples/chart.js\",\n\t\"./samples/data_grid\": \"./app/panels/samples/data_grid.js\",\n\t\"./samples/data_grid.js\": \"./app/panels/samples/data_grid.js\",\n\t\"./samples/gantt\": \"./app/panels/samples/gantt.js\",\n\t\"./samples/gantt.js\": \"./app/panels/samples/gantt.js\",\n\t\"./samples/index\": \"./app/panels/samples/index.js\",\n\t\"./samples/index.js\": \"./app/panels/samples/index.js\",\n\t\"./samples/loader\": \"./app/panels/samples/loader.js\",\n\t\"./samples/loader.js\": \"./app/panels/samples/loader.js\",\n\t\"./samples/messages\": \"./app/panels/samples/messages.js\",\n\t\"./samples/messages.js\": \"./app/panels/samples/messages.js\",\n\t\"./samples/mui\": \"./app/panels/samples/mui.js\",\n\t\"./samples/mui.js\": \"./app/panels/samples/mui.js\",\n\t\"./samples/p8online\": \"./app/panels/samples/p8online.js\",\n\t\"./samples/p8online.js\": \"./app/panels/samples/p8online.js\",\n\t\"./samples/samples\": \"./app/panels/samples/samples.js\",\n\t\"./samples/samples.js\": \"./app/panels/samples/samples.js\"\n};\n\n\nfunction webpackContext(req) {\n\tvar id = webpackContextResolve(req);\n\treturn __webpack_require__(id);\n}\nfunction webpackContextResolve(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t}\n\treturn map[req];\n}\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = \"./app/panels sync recursive ^\\\\.\\\\/.*$\";\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/panels/_sync_^\\.\\/.*$?"); /***/ }), @@ -3759,17 +3759,6 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac /***/ }), -/***/ "./app/panels/prj_jobs/lab_fact_rpt_dtl.js": -/*!*************************************************!*\ - !*** ./app/panels/prj_jobs/lab_fact_rpt_dtl.js ***! - \*************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ LabFactRptDtl: () => (/* binding */ LabFactRptDtl)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! prop-types */ \"./node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_13___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_13__);\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Dialog/Dialog.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/DialogTitle/DialogTitle.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/DialogContent/DialogContent.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/DialogActions/DialogActions.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Button/Button.js\");\n/* harmony import */ var _context_backend__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../context/backend */ \"./app/context/backend.js\");\n/* harmony import */ var _context_application__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../context/application */ \"./app/context/application.js\");\n/* harmony import */ var _core_utils__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../core/utils */ \"./app/core/utils.js\");\n/* harmony import */ var _app_text__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../../app.text */ \"./app.text.js\");\n/* harmony import */ var _config_wrapper__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../config_wrapper */ \"./app/config_wrapper.js\");\n/* harmony import */ var _components_p8p_data_grid__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../../components/p8p_data_grid */ \"./app/components/p8p_data_grid.js\");\n/* harmony import */ var _layouts__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./layouts */ \"./app/panels/prj_jobs/layouts.js\");\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n/*\r\n Парус 8 - Панели мониторинга - ПУП - Работы проектов\r\n Компонент панели: Детализация фактической трудоёмкости по \"Планам и отчетам подразделений\"\r\n*/\n\n//---------------------\n//Подключение библиотек\n//---------------------\n\n //Классы React\n //Контроль свойств компонента\n //Интерфейсные элементы\n //Контекст взаимодействия с сервером\n //Контекст приложения\n //Вспомогательные функции\n //Текстовые ресурсы\n //Подключение компонентов к настройкам приложения\n //Таблица данных\n //Дополнительная разметка и вёрстка клиентских элементов\n\n//-----------\n//Тело модуля\n//-----------\n\n//Детализация фактической трудоёмкости по \"Планам и отчетам подразделений\"\nconst LabFactRptDtl = ({\n periodId,\n title,\n onHide\n}) => {\n //Состояние таблицы детализации плановой трудоёмкости по графику\n const [factRptDtl, setFactRptDtl] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({\n dataLoaded: false,\n columnsDef: [],\n orders: [],\n rows: [],\n reload: true,\n pageNumber: 1,\n morePages: true\n });\n\n //Подключение к контексту приложения\n const {\n configSystemPageSize\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_application__WEBPACK_IMPORTED_MODULE_2__[\"ApplicationСtx\"]);\n\n //Подключение к контексту взаимодействия с сервером\n const {\n executeStored,\n SERV_DATA_TYPE_CLOB\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_backend__WEBPACK_IMPORTED_MODULE_1__[\"BackEndСtx\"]);\n\n //Загрузка детализации фактической трудоёмкости по отчетам для ресурса\n const loadFactRptDtl = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async () => {\n if (factRptDtl.reload) {\n const data = await executeStored({\n stored: \"PKG_P8PANELS_PROJECTS.JB_PERIODS_LIST_FACT_RPT\",\n args: {\n NJB_PERIODS: periodId,\n CORDERS: {\n VALUE: (0,_core_utils__WEBPACK_IMPORTED_MODULE_3__.object2Base64XML)(factRptDtl.orders, {\n arrayNodeName: \"orders\"\n }),\n SDATA_TYPE: SERV_DATA_TYPE_CLOB\n },\n NPAGE_NUMBER: factRptDtl.pageNumber,\n NPAGE_SIZE: configSystemPageSize,\n NINCLUDE_DEF: factRptDtl.dataLoaded ? 0 : 1\n },\n respArg: \"COUT\"\n });\n setFactRptDtl(pv => ({\n ...pv,\n columnsDef: data.XCOLUMNS_DEF ? [...data.XCOLUMNS_DEF] : pv.columnsDef,\n rows: pv.pageNumber == 1 ? [...(data.XROWS || [])] : [...pv.rows, ...(data.XROWS || [])],\n dataLoaded: true,\n reload: false,\n morePages: (data.XROWS || []).length >= configSystemPageSize\n }));\n }\n }, [periodId, factRptDtl.reload, factRptDtl.orders, factRptDtl.dataLoaded, factRptDtl.pageNumber, executeStored, configSystemPageSize, SERV_DATA_TYPE_CLOB]);\n\n //При изменении состояния сортировки в детализации факта по \"Планам и отчетам в подразделении\"\n const handlePlanJobsDtlDGOrderChanged = ({\n orders\n }) => setFactRptDtl(pv => ({\n ...pv,\n orders,\n pageNumber: 1,\n reload: true\n }));\n\n //При изменении количества отображаемых страниц в факта по \"Планам и отчетам в подразделении\"\n const handlePlanJobsDtlDGPagesCountChanged = () => setFactRptDtl(pv => ({\n ...pv,\n pageNumber: pv.pageNumber + 1,\n reload: true\n }));\n\n //При необходимости обновить данные\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n loadFactRptDtl();\n }, [factRptDtl.reload, loadFactRptDtl]);\n\n //Генерация содержимого\n return factRptDtl.dataLoaded ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_8__[\"default\"], {\n open: true,\n onClose: onHide,\n fullWidth: true,\n maxWidth: \"xl\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_9__[\"default\"], null, title), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_10__[\"default\"], null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_components_p8p_data_grid__WEBPACK_IMPORTED_MODULE_6__.P8PDataGrid, _extends({}, _config_wrapper__WEBPACK_IMPORTED_MODULE_5__.P8P_DATA_GRID_CONFIG_PROPS, {\n columnsDef: factRptDtl.columnsDef,\n rows: factRptDtl.rows,\n size: _components_p8p_data_grid__WEBPACK_IMPORTED_MODULE_6__.P8P_DATA_GRID_SIZE.SMALL,\n morePages: factRptDtl.morePages,\n reloading: factRptDtl.reload,\n valueFormatter: _layouts__WEBPACK_IMPORTED_MODULE_7__.factRptDtlValueFormatter,\n headCellRender: _layouts__WEBPACK_IMPORTED_MODULE_7__.factRptDtlHeadCellRender,\n onOrderChanged: handlePlanJobsDtlDGOrderChanged,\n onPagesCountChanged: handlePlanJobsDtlDGPagesCountChanged\n }))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_11__[\"default\"], null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_12__[\"default\"], {\n onClick: onHide\n }, _app_text__WEBPACK_IMPORTED_MODULE_4__.BUTTONS.CLOSE))) : null;\n};\n\n//Контроль свойств - Детализация фактической трудоёмкости по \"Планам и отчетам подразделений\"\nLabFactRptDtl.propTypes = {\n periodId: (prop_types__WEBPACK_IMPORTED_MODULE_13___default().number).isRequired,\n title: (prop_types__WEBPACK_IMPORTED_MODULE_13___default().string).isRequired,\n onHide: (prop_types__WEBPACK_IMPORTED_MODULE_13___default().func).isRequired\n};\n\n//----------------\n//Интерфейс модуля\n//----------------\n\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/panels/prj_jobs/lab_fact_rpt_dtl.js?"); - -/***/ }), - /***/ "./app/panels/prj_jobs/lab_plan_fot_dtl.js": /*!*************************************************!*\ !*** ./app/panels/prj_jobs/lab_plan_fot_dtl.js ***! @@ -3788,18 +3777,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ LabPlanJobsDtl: () => (/* binding */ LabPlanJobsDtl)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! prop-types */ \"./node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_13___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_13__);\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Dialog/Dialog.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/DialogTitle/DialogTitle.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/DialogContent/DialogContent.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/DialogActions/DialogActions.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Button/Button.js\");\n/* harmony import */ var _context_backend__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../context/backend */ \"./app/context/backend.js\");\n/* harmony import */ var _context_application__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../context/application */ \"./app/context/application.js\");\n/* harmony import */ var _core_utils__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../core/utils */ \"./app/core/utils.js\");\n/* harmony import */ var _app_text__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../../app.text */ \"./app.text.js\");\n/* harmony import */ var _config_wrapper__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../config_wrapper */ \"./app/config_wrapper.js\");\n/* harmony import */ var _components_p8p_data_grid__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../../components/p8p_data_grid */ \"./app/components/p8p_data_grid.js\");\n/* harmony import */ var _layouts__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./layouts */ \"./app/panels/prj_jobs/layouts.js\");\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n/*\r\n Парус 8 - Панели мониторинга - ПУП - Работы проектов\r\n Компонент панели: Детализация плановой трудоёмкости по графику\r\n*/\n\n//---------------------\n//Подключение библиотек\n//---------------------\n\n //Классы React\n //Контроль свойств компонента\n //Интерфейсные элементы\n //Контекст взаимодействия с сервером\n //Контекст приложения\n //Вспомогательные функции\n //Текстовые ресурсы\n //Подключение компонентов к настройкам приложения\n //Таблица данных\n //Дополнительная разметка и вёрстка клиентских элементов\n\n//------------------------------------\n//Вспомогательные функции и компоненты\n//------------------------------------\n\n//-----------\n//Тело модуля\n//-----------\n\n//Детализация плановой трудоёмкости по графику\nconst LabPlanJobsDtl = ({\n periodId,\n title,\n onHide,\n onProjectClick\n}) => {\n //Состояние таблицы детализации плановой трудоёмкости по графику\n const [planJobsDtl, setPlanJobsDtl] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({\n dataLoaded: false,\n columnsDef: [],\n orders: [],\n rows: [],\n reload: true,\n pageNumber: 1,\n morePages: true\n });\n\n //Подключение к контексту приложения\n const {\n configSystemPageSize\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_application__WEBPACK_IMPORTED_MODULE_2__[\"ApplicationСtx\"]);\n\n //Подключение к контексту взаимодействия с сервером\n const {\n executeStored,\n SERV_DATA_TYPE_CLOB\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_backend__WEBPACK_IMPORTED_MODULE_1__[\"BackEndСtx\"]);\n\n //Загрузка детализации плановой трудоёмкости по графику для ресурса\n const loadPlanJobsDtl = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async () => {\n if (planJobsDtl.reload) {\n const data = await executeStored({\n stored: \"PKG_P8PANELS_PROJECTS.JB_PERIODS_LIST_PLAN_JOBS\",\n args: {\n NJB_PERIODS: periodId,\n CORDERS: {\n VALUE: (0,_core_utils__WEBPACK_IMPORTED_MODULE_3__.object2Base64XML)(planJobsDtl.orders, {\n arrayNodeName: \"orders\"\n }),\n SDATA_TYPE: SERV_DATA_TYPE_CLOB\n },\n NPAGE_NUMBER: planJobsDtl.pageNumber,\n NPAGE_SIZE: configSystemPageSize,\n NINCLUDE_DEF: planJobsDtl.dataLoaded ? 0 : 1\n },\n respArg: \"COUT\"\n });\n setPlanJobsDtl(pv => ({\n ...pv,\n columnsDef: data.XCOLUMNS_DEF ? [...data.XCOLUMNS_DEF] : pv.columnsDef,\n rows: pv.pageNumber == 1 ? [...(data.XROWS || [])] : [...pv.rows, ...(data.XROWS || [])],\n dataLoaded: true,\n reload: false,\n morePages: (data.XROWS || []).length >= configSystemPageSize\n }));\n }\n }, [periodId, planJobsDtl.reload, planJobsDtl.orders, planJobsDtl.dataLoaded, planJobsDtl.pageNumber, executeStored, configSystemPageSize, SERV_DATA_TYPE_CLOB]);\n\n //При изменении состояния сортировки в детализации плановой трудоёмкости по графику\n const handlePlanJobsDtlDGOrderChanged = ({\n orders\n }) => setPlanJobsDtl(pv => ({\n ...pv,\n orders,\n pageNumber: 1,\n reload: true\n }));\n\n //При изменении количества отображаемых страниц в детализации плановой трудоёмкости по графику\n const handlePlanJobsDtlDGPagesCountChanged = () => setPlanJobsDtl(pv => ({\n ...pv,\n pageNumber: pv.pageNumber + 1,\n reload: true\n }));\n\n //При нажатии на проект в таблице детализаци\n const handleProjectClick = ({\n sender\n }) => onProjectClick ? onProjectClick({\n sender\n }) : null;\n\n //При необходимости обновить данные\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n loadPlanJobsDtl();\n }, [planJobsDtl.reload, loadPlanJobsDtl]);\n\n //Генерация содержимого\n return planJobsDtl.dataLoaded ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_8__[\"default\"], {\n open: true,\n onClose: onHide,\n fullWidth: true,\n maxWidth: \"xl\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_9__[\"default\"], null, title), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_10__[\"default\"], null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_components_p8p_data_grid__WEBPACK_IMPORTED_MODULE_6__.P8PDataGrid, _extends({}, _config_wrapper__WEBPACK_IMPORTED_MODULE_5__.P8P_DATA_GRID_CONFIG_PROPS, {\n columnsDef: planJobsDtl.columnsDef,\n rows: planJobsDtl.rows,\n size: _components_p8p_data_grid__WEBPACK_IMPORTED_MODULE_6__.P8P_DATA_GRID_SIZE.SMALL,\n morePages: planJobsDtl.morePages,\n reloading: planJobsDtl.reload,\n valueFormatter: _layouts__WEBPACK_IMPORTED_MODULE_7__.planJobsDtlValueFormatter,\n headCellRender: _layouts__WEBPACK_IMPORTED_MODULE_7__.planJobsDtlHeadCellRender,\n dataCellRender: prms => (0,_layouts__WEBPACK_IMPORTED_MODULE_7__.planJobsDtlDataCellRender)({\n ...prms,\n onProjectClick: handleProjectClick\n }),\n onOrderChanged: handlePlanJobsDtlDGOrderChanged,\n onPagesCountChanged: handlePlanJobsDtlDGPagesCountChanged\n }))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_11__[\"default\"], null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_12__[\"default\"], {\n onClick: onHide\n }, _app_text__WEBPACK_IMPORTED_MODULE_4__.BUTTONS.CLOSE))) : null;\n};\n\n//Контроль свойств - Детализация плановой трудоёмкости по графику\nLabPlanJobsDtl.propTypes = {\n periodId: (prop_types__WEBPACK_IMPORTED_MODULE_13___default().number).isRequired,\n title: (prop_types__WEBPACK_IMPORTED_MODULE_13___default().string).isRequired,\n onHide: (prop_types__WEBPACK_IMPORTED_MODULE_13___default().func).isRequired,\n onProjectClick: (prop_types__WEBPACK_IMPORTED_MODULE_13___default().func)\n};\n\n//----------------\n//Интерфейс модуля\n//----------------\n\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/panels/prj_jobs/lab_plan_jobs_dtl.js?"); - -/***/ }), - -/***/ "./app/panels/prj_jobs/layouts.js": -/*!****************************************!*\ - !*** ./app/panels/prj_jobs/layouts.js ***! - \****************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ factRptDtlHeadCellRender: () => (/* binding */ factRptDtlHeadCellRender),\n/* harmony export */ factRptDtlValueFormatter: () => (/* binding */ factRptDtlValueFormatter),\n/* harmony export */ periodsDataCellRender: () => (/* binding */ periodsDataCellRender),\n/* harmony export */ planJobsDtlDataCellRender: () => (/* binding */ planJobsDtlDataCellRender),\n/* harmony export */ planJobsDtlHeadCellRender: () => (/* binding */ planJobsDtlHeadCellRender),\n/* harmony export */ planJobsDtlValueFormatter: () => (/* binding */ planJobsDtlValueFormatter),\n/* harmony export */ taskAttributeRenderer: () => (/* binding */ taskAttributeRenderer)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Stack/Stack.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Icon/Icon.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Link/Link.js\");\n/* harmony import */ var _core_utils__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../core/utils */ \"./app/core/utils.js\");\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n/*\r\n Парус 8 - Панели мониторинга - ПУП - Экономика проектов\r\n Дополнительная разметка и вёрстка клиентских элементов\r\n*/\n\n//---------------------\n//Подключение библиотек\n//---------------------\n\n //Классы React\n //Интерфейсные компоненты\n //Вспомогательные функции\n\n//-----------\n//Тело модуля\n//-----------\n\n//Формирование значения для колонки \"Состояние\" этапа\nconst formatStageStatusValue = value => {\n const [text, icon] = value == 0 ? [\"Зарегистрирован\", \"app_registration\"] : value == 1 ? [\"Открыт\", \"lock_open\"] : value == 2 ? [\"Закрыт\", \"lock_outline\"] : value == 3 ? [\"Согласован\", \"thumb_up_alt\"] : value == 4 ? [\"Исполнение прекращено\", \"block\"] : [\"Остановлен\", \"do_not_disturb_on\"];\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n direction: \"row\",\n gap: 0.5,\n alignItems: \"center\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n title: text\n }, icon), text);\n};\n\n//Формирование значения для колонки \"Состояние\" работы\nconst formatJobStatusValue = (value, addText = false, justifyContent = null) => {\n const [text, icon] = value == 0 ? [\"Не начата\", \"not_started\"] : value == 1 ? [\"Выполняется\", \"loop\"] : value == 2 ? [\"Выполнена\", \"task_alt\"] : value == 3 ? [\"Остановлена\", \"do_not_disturb_on\"] : [\"Отменена\", \"cancel\"];\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_2__[\"default\"], _extends({\n direction: \"row\",\n gap: 0.5,\n alignItems: \"center\"\n }, justifyContent ? {\n justifyContent\n } : {}), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n title: text\n }, icon), addText == true ? text : null);\n};\n\n//Генерация кастомных представлений атрибутов задачи в редакторе\nconst taskAttributeRenderer = ({\n task,\n attribute\n}) => {\n switch (attribute.name) {\n case \"type\":\n return task.type === 1 ? \"Этап проекта\" : \"Работа проекта\";\n case \"state\":\n return task.type === 1 ? formatStageStatusValue(task[attribute.name]) : formatJobStatusValue(task[attribute.name], true);\n default:\n return null;\n }\n};\n\n//Форматирование значений колонок в таблице детализации трудоёмкости по графику\nconst planJobsDtlValueFormatter = ({\n value,\n columnDef\n}) => {\n switch (columnDef.name) {\n case \"NJOB_STATE\":\n return formatJobStatusValue(value, false, \"center\");\n case \"DJOB_BEG\":\n case \"DJOB_END\":\n return (0,_core_utils__WEBPACK_IMPORTED_MODULE_1__.formatDateRF)(value);\n }\n return value;\n};\n\n//Генерация представления ячейки заголовка в таблице детализации трудоёмкости по графику\nconst planJobsDtlHeadCellRender = ({\n columnDef\n}) => {\n switch (columnDef.name) {\n case \"NJOB_STATE\":\n return {\n stackProps: {\n justifyContent: \"center\"\n },\n cellProps: {\n align: \"center\"\n }\n };\n }\n};\n\n//Генерация представления ячейки c данными в таблице детализации трудоёмкости по графику\nconst planJobsDtlDataCellRender = ({\n row,\n columnDef,\n onProjectClick\n}) => {\n switch (columnDef.name) {\n case \"SPRJ\":\n return {\n data: row[columnDef.name] ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n component: \"button\",\n variant: \"body2\",\n align: \"left\",\n underline: \"hover\",\n onClick: () => onProjectClick ? onProjectClick({\n sender: row\n }) : null\n }, row[columnDef.name]) : row[columnDef.name]\n };\n }\n};\n\n//Форматирование значений колонок в таблице детализации трудоёмкости по отчетам\nconst factRptDtlValueFormatter = ({\n value,\n columnDef\n}) => {\n switch (columnDef.name) {\n case \"NJOB_STATE\":\n return formatJobStatusValue(value, false, \"center\");\n case \"DJOB_BEG\":\n case \"DJOB_END\":\n return (0,_core_utils__WEBPACK_IMPORTED_MODULE_1__.formatDateRF)(value);\n }\n return value;\n};\n\n//Генерация представления ячейки заголовка в таблице детализации трудоёмкости по отчетам\nconst factRptDtlHeadCellRender = ({\n columnDef\n}) => {\n switch (columnDef.name) {\n case \"NJOB_STATE\":\n return {\n stackProps: {\n justifyContent: \"center\"\n },\n cellProps: {\n align: \"center\"\n }\n };\n }\n};\n\n//Генерация представления ячейки c данными в таблице периодов балансировки\nconst periodsDataCellRender = ({\n row,\n columnDef,\n onLabPlanFOTClick,\n onLabFactRptClick,\n onLabPlanJobsClick\n}) => {\n switch (columnDef.name) {\n case \"NLAB_PLAN_FOT\":\n case \"NLAB_FACT_RPT\":\n case \"NLAB_PLAN_JOBS\":\n return {\n data: row[columnDef.name] ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n component: \"button\",\n variant: \"body2\",\n align: \"left\",\n underline: \"hover\",\n onClick: () => columnDef.name === \"NLAB_PLAN_FOT\" ? onLabPlanFOTClick ? onLabPlanFOTClick({\n sender: row\n }) : null : columnDef.name === \"NLAB_FACT_RPT\" ? onLabFactRptClick ? onLabFactRptClick({\n sender: row\n }) : null : columnDef.name === \"NLAB_PLAN_JOBS\" ? onLabPlanJobsClick ? onLabPlanJobsClick({\n sender: row\n }) : null : null\n }, row[columnDef.name]) : row[columnDef.name]\n };\n case \"NLAB_DIFF_RPT_FOT\":\n return {\n data: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n style: {\n color: row[columnDef.name] <= 0 ? \"green\" : \"red\"\n }\n }, row[columnDef.name])\n };\n case \"NLAB_DIFF_JOBS_FOT\":\n return {\n data: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n direction: \"row\",\n gap: 0.5,\n alignItems: \"center\",\n justifyContent: \"right\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n style: {\n color: row[columnDef.name] <= 0 ? \"green\" : \"red\"\n }\n }, row[columnDef.name]), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n sx: {\n color: row[columnDef.name] <= 0 ? \"green\" : \"red\"\n }\n }, row[columnDef.name] <= 0 ? \"done\" : \"error\"))\n };\n }\n};\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/panels/prj_jobs/layouts.js?"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ LabPlanJobsDtl: () => (/* binding */ LabPlanJobsDtl)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! prop-types */ \"./node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_15___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_15__);\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Stack/Stack.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Icon/Icon.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Link/Link.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Dialog/Dialog.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/DialogTitle/DialogTitle.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/DialogContent/DialogContent.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/DialogActions/DialogActions.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Button/Button.js\");\n/* harmony import */ var _context_backend__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../context/backend */ \"./app/context/backend.js\");\n/* harmony import */ var _context_application__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../context/application */ \"./app/context/application.js\");\n/* harmony import */ var _core_utils__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../core/utils */ \"./app/core/utils.js\");\n/* harmony import */ var _app_text__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../../app.text */ \"./app.text.js\");\n/* harmony import */ var _config_wrapper__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../config_wrapper */ \"./app/config_wrapper.js\");\n/* harmony import */ var _components_p8p_data_grid__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../../components/p8p_data_grid */ \"./app/components/p8p_data_grid.js\");\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n/*\r\n Парус 8 - Панели мониторинга - ПУП - Работы проектов\r\n Компонент панели: Детализация плановой трудоёмкости по графику\r\n*/\n\n//---------------------\n//Подключение библиотек\n//---------------------\n\n //Классы React\n //Контроль свойств компонента\n //Интерфейсные элементы\n //Контекст взаимодействия с сервером\n //Контекст приложения\n //Вспомогательные функции\n //Текстовые ресурсы\n //Подключение компонентов к настройкам приложения\n //Таблица данных\n\n//------------------------------------\n//Вспомогательные функции и компоненты\n//------------------------------------\n\n//Формирование значения для колонки \"Состояние\" этапа\nconst formatJobStatusValue = value => {\n const [text, icon] = value == 0 ? [\"Не начата\", \"not_started\"] : value == 1 ? [\"Выполняется\", \"loop\"] : value == 2 ? [\"Выполнена\", \"task_alt\"] : value == 3 ? [\"Остановлена\", \"do_not_disturb_on\"] : [\"Отменена\", \"cancel\"];\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_7__[\"default\"], {\n direction: \"row\",\n gap: 0.5,\n alignItems: \"center\",\n justifyContent: \"center\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_8__[\"default\"], {\n title: text\n }, icon));\n};\n\n//Форматирование значений колонок в таблице детализации трудоёмкости по графику\nconst planJobsDtlValueFormatter = ({\n value,\n columnDef\n}) => {\n switch (columnDef.name) {\n case \"NJOB_STATE\":\n return formatJobStatusValue(value);\n case \"DJOB_BEG\":\n case \"DJOB_END\":\n return (0,_core_utils__WEBPACK_IMPORTED_MODULE_3__.formatDateRF)(value);\n }\n return value;\n};\n\n//Генерация представления ячейки заголовка в таблице детализации трудоёмкости по графику\nconst planJobsDtlHeadCellRender = ({\n columnDef\n}) => {\n switch (columnDef.name) {\n case \"NJOB_STATE\":\n return {\n stackProps: {\n justifyContent: \"center\"\n },\n cellProps: {\n align: \"center\"\n }\n };\n }\n};\n\n//Генерация представления ячейки c данными в таблице детализации трудоёмкости по графику\nconst planJobsDtlDataCellRender = ({\n row,\n columnDef,\n onProjectClick\n}) => {\n switch (columnDef.name) {\n case \"SPRJ\":\n return {\n data: row[columnDef.name] ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_9__[\"default\"], {\n component: \"button\",\n variant: \"body2\",\n align: \"left\",\n underline: \"hover\",\n onClick: () => onProjectClick ? onProjectClick({\n sender: row\n }) : null\n }, row[columnDef.name]) : row[columnDef.name]\n };\n case \"NSTATE\":\n return {\n cellProps: {\n align: \"center\"\n },\n data: formatJobStatusValue(row[columnDef.name])\n };\n }\n};\n\n//-----------\n//Тело модуля\n//-----------\n\n//Детализация плановой трудоёмкости по графику\nconst LabPlanJobsDtl = ({\n periodId,\n title,\n onHide,\n onProjectClick\n}) => {\n //Состояние таблицы детализации плановой трудоёмкости по графику\n const [planJobsDtl, setPlanJobsDtl] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({\n dataLoaded: false,\n columnsDef: [],\n orders: [],\n rows: [],\n reload: true,\n pageNumber: 1,\n morePages: true\n });\n\n //Подключение к контексту приложения\n const {\n configSystemPageSize\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_application__WEBPACK_IMPORTED_MODULE_2__[\"ApplicationСtx\"]);\n\n //Подключение к контексту взаимодействия с сервером\n const {\n executeStored,\n SERV_DATA_TYPE_CLOB\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_backend__WEBPACK_IMPORTED_MODULE_1__[\"BackEndСtx\"]);\n\n //Загрузка детализации плановой трудоёмкости по ФОТ для ресурса\n const loadPlanFOTDtl = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async () => {\n if (planJobsDtl.reload) {\n const data = await executeStored({\n stored: \"PKG_P8PANELS_PROJECTS.JB_PERIODS_LIST_PLAN_JOBS\",\n args: {\n NJB_PERIODS: periodId,\n CORDERS: {\n VALUE: (0,_core_utils__WEBPACK_IMPORTED_MODULE_3__.object2Base64XML)(planJobsDtl.orders, {\n arrayNodeName: \"orders\"\n }),\n SDATA_TYPE: SERV_DATA_TYPE_CLOB\n },\n NPAGE_NUMBER: planJobsDtl.pageNumber,\n NPAGE_SIZE: configSystemPageSize,\n NINCLUDE_DEF: planJobsDtl.dataLoaded ? 0 : 1\n },\n respArg: \"COUT\"\n });\n setPlanJobsDtl(pv => ({\n ...pv,\n columnsDef: data.XCOLUMNS_DEF ? [...data.XCOLUMNS_DEF] : pv.columnsDef,\n rows: pv.pageNumber == 1 ? [...(data.XROWS || [])] : [...pv.rows, ...(data.XROWS || [])],\n dataLoaded: true,\n reload: false,\n morePages: (data.XROWS || []).length >= configSystemPageSize\n }));\n }\n }, [periodId, planJobsDtl.reload, planJobsDtl.orders, planJobsDtl.dataLoaded, planJobsDtl.pageNumber, executeStored, configSystemPageSize, SERV_DATA_TYPE_CLOB]);\n\n //При изменении состояния сортировки в детализации плана ФОТ по строке ресурса\n const handlePlanJobsDtlDGOrderChanged = ({\n orders\n }) => setPlanJobsDtl(pv => ({\n ...pv,\n orders,\n pageNumber: 1,\n reload: true\n }));\n\n //При изменении количества отображаемых страниц в в детализации плана ФОТ по строке ресурса\n const handlePlanJobsDtlDGPagesCountChanged = () => setPlanJobsDtl(pv => ({\n ...pv,\n pageNumber: pv.pageNumber + 1,\n reload: true\n }));\n\n //При нажатии на проект в таблице детализацц\n const handleProjectClick = ({\n sender\n }) => onProjectClick ? onProjectClick({\n sender\n }) : null;\n\n //При необходимости обновить данные\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n loadPlanFOTDtl();\n }, [planJobsDtl.reload, loadPlanFOTDtl]);\n\n //Генерация содержимого\n return planJobsDtl.dataLoaded ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_10__[\"default\"], {\n open: true,\n onClose: onHide,\n fullWidth: true,\n maxWidth: \"xl\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_11__[\"default\"], null, title), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_12__[\"default\"], null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_components_p8p_data_grid__WEBPACK_IMPORTED_MODULE_6__.P8PDataGrid, _extends({}, _config_wrapper__WEBPACK_IMPORTED_MODULE_5__.P8P_DATA_GRID_CONFIG_PROPS, {\n columnsDef: planJobsDtl.columnsDef,\n rows: planJobsDtl.rows,\n size: _components_p8p_data_grid__WEBPACK_IMPORTED_MODULE_6__.P8P_DATA_GRID_SIZE.SMALL,\n morePages: planJobsDtl.morePages,\n reloading: planJobsDtl.reload,\n valueFormatter: planJobsDtlValueFormatter,\n headCellRender: planJobsDtlHeadCellRender,\n dataCellRender: prms => planJobsDtlDataCellRender({\n ...prms,\n onProjectClick: handleProjectClick\n }),\n onOrderChanged: handlePlanJobsDtlDGOrderChanged,\n onPagesCountChanged: handlePlanJobsDtlDGPagesCountChanged\n }))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_13__[\"default\"], null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_14__[\"default\"], {\n onClick: onHide\n }, _app_text__WEBPACK_IMPORTED_MODULE_4__.BUTTONS.CLOSE))) : null;\n};\n\n//Контроль свойств - Детализация плановой трудоёмкости по графику\nLabPlanJobsDtl.propTypes = {\n periodId: (prop_types__WEBPACK_IMPORTED_MODULE_15___default().number).isRequired,\n title: (prop_types__WEBPACK_IMPORTED_MODULE_15___default().string).isRequired,\n onHide: (prop_types__WEBPACK_IMPORTED_MODULE_15___default().func).isRequired,\n onProjectClick: (prop_types__WEBPACK_IMPORTED_MODULE_15___default().func)\n};\n\n//----------------\n//Интерфейс модуля\n//----------------\n\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/panels/prj_jobs/lab_plan_jobs_dtl.js?"); /***/ }), @@ -3810,7 +3788,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ PrjJobs: () => (/* binding */ PrjJobs)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! prop-types */ \"./node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_15___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_15__);\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/List/List.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/ListItemButton/ListItemButton.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/ListItemIcon/ListItemIcon.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Icon/Icon.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/ListItemText/ListItemText.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Typography/Typography.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Box/Box.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Fab/Fab.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Drawer/Drawer.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Grid/Grid.js\");\n/* harmony import */ var _context_backend__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../context/backend */ \"./app/context/backend.js\");\n/* harmony import */ var _context_messaging__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../context/messaging */ \"./app/context/messaging.js\");\n/* harmony import */ var _context_application__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../context/application */ \"./app/context/application.js\");\n/* harmony import */ var _core_utils__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../core/utils */ \"./app/core/utils.js\");\n/* harmony import */ var _config_wrapper__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../config_wrapper */ \"./app/config_wrapper.js\");\n/* harmony import */ var _components_p8p_gantt__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../../components/p8p_gantt */ \"./app/components/p8p_gantt.js\");\n/* harmony import */ var _res_mon__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./res_mon */ \"./app/panels/prj_jobs/res_mon.js\");\n/* harmony import */ var _layouts__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./layouts */ \"./app/panels/prj_jobs/layouts.js\");\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n/*\r\n Парус 8 - Панели мониторинга - ПУП - Работы проектов\r\n Панель мониторинга: Корневая панель работ проектов\r\n*/\n\n//---------------------\n//Подключение библиотек\n//---------------------\n\n //Классы React\n //Контроль свойств компонента\n //Интерфейсные элементы\n //Контекст взаимодействия с сервером\n //Контекст сообщений\n //Контекст приложения\n //Вспомогательные функции\n //Подключение компонентов к настройкам приложения\n //Диаграмма Ганта\n //Монитор ресурсов\n //Дополнительная разметка и вёрстка клиентских элементов\n\n//---------\n//Константы\n//---------\n\n//Высота диаграммы Ганта\nconst GANTT_HEIGHT = \"75vh\";\n\n//Ширина диаграммы Ганта\nconst GANTT_WIDTH = \"98vw\";\n\n//Стили\nconst STYLES = {\n PROJECTS_LIST_SAVE_BUTTON: {\n backgroundColor: \"orange\"\n },\n PROJECTS_LIST_ITEM_NOJOBS: {\n backgroundColor: \"#ff000045\"\n },\n PROJECTS_LIST_ITEM_PRIMARY: {\n wordWrap: \"break-word\"\n },\n PROJECTS_LIST_ITEM_SECONDARY: {\n wordWrap: \"break-word\",\n fontSize: \"0.5rem\",\n textTransform: \"uppercase\"\n },\n PROJECTS_LIST_ITEM_SECONDARY_NOJOBS: {\n color: \"red\"\n },\n PROJECTS_LIST_ITEM_SECONDARY_NOEDIT: {\n color: \"gray\"\n },\n PROJECTS_LIST_ITEM_SECONDARY_CHANGED: {\n color: \"green\"\n },\n PROJECTS_BUTTON: {\n position: \"absolute\"\n },\n PROJECTS_DRAWER: {\n width: \"250px\",\n flexShrink: 0,\n [`& .MuiDrawer-paper`]: {\n width: \"250px\",\n boxSizing: \"border-box\"\n }\n },\n GANTT_CONTAINER: {\n height: GANTT_HEIGHT,\n width: GANTT_WIDTH\n },\n GANTT_TITLE: {\n paddingLeft: \"100px\",\n paddingRight: \"120px\"\n },\n PERIODS_BUTTON: {\n position: \"absolute\",\n right: \"20px\"\n },\n PERIODS_DRAWER: {\n width: \"1200px\",\n flexShrink: 0,\n [`& .MuiDrawer-paper`]: {\n width: \"1200px\",\n boxSizing: \"border-box\"\n }\n }\n};\n\n//------------------------------------\n//Вспомогательные функции и компоненты\n//------------------------------------\n\n//Список проектов\nconst ProjectsList = ({\n projects = [],\n selectedProject,\n onClick\n} = {}) => {\n //Подключение к контексту сообщений\n const {\n InlineMsgErr\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_messaging__WEBPACK_IMPORTED_MODULE_2__[\"MessagingСtx\"]);\n\n //Генерация содержимого\n return projects.length > 0 ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_9__[\"default\"], null, projects.map(p => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_10__[\"default\"], {\n key: p.NRN,\n sx: p.NJOBS == 0 ? STYLES.PROJECTS_LIST_ITEM_NOJOBS : null,\n selected: p.NRN === selectedProject,\n onClick: () => onClick ? onClick(p) : null\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_11__[\"default\"], null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_12__[\"default\"], {\n title: p.NEDITABLE == 1 ? \"Можно редактировать\" : \"Редактирование недоступно\"\n }, p.NEDITABLE == 1 ? \"edit\" : \"edit_off\")), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_13__[\"default\"], {\n primary: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_14__[\"default\"], {\n sx: STYLES.PROJECTS_LIST_ITEM_PRIMARY\n }, p.SNAME),\n secondary: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_14__[\"default\"], {\n sx: {\n ...STYLES.PROJECTS_LIST_ITEM_SECONDARY,\n ...(p.NJOBS == 0 ? STYLES.PROJECTS_LIST_ITEM_SECONDARY_NOJOBS : p.NCHANGED == 1 ? STYLES.PROJECTS_LIST_ITEM_SECONDARY_CHANGED : STYLES.PROJECTS_LIST_ITEM_SECONDARY_NOEDIT)\n }\n }, p.NJOBS == 1 ? p.NEDITABLE == 1 ? p.NCHANGED == 1 ? \"Изменён\" : \"Не изменён\" : \"Редактирование недоступно\" : \"Работы не определены\")\n })))) : /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(InlineMsgErr, {\n okBtn: false,\n text: \"Нет доступных проектов\"\n });\n};\n\n//Контроль свойств - Список проектов\nProjectsList.propTypes = {\n projects: (prop_types__WEBPACK_IMPORTED_MODULE_15___default().array),\n selectedProject: (prop_types__WEBPACK_IMPORTED_MODULE_15___default().number),\n onClick: (prop_types__WEBPACK_IMPORTED_MODULE_15___default().func)\n};\n\n//-----------\n//Тело модуля\n//-----------\n\n//Корневая панель работ проектов\nconst PrjJobs = () => {\n //Собственное состояние\n let [state, setState] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({\n needSave: false,\n showProjectsList: false,\n showPeriodsList: false,\n init: false,\n dateBegin: null,\n dateFact: null,\n durationMeas: null,\n labMeas: null,\n resourceStatus: null,\n ident: null,\n projects: [],\n projectsLoaded: false,\n selectedProjectJobsLoaded: false,\n selectedProject: null,\n selectedProjectDocRn: null,\n selectedProjectGanttDef: {},\n selectedProjectTasks: []\n });\n\n //Подключение к контексту приложения\n const {\n pOnlineShowDocument\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_application__WEBPACK_IMPORTED_MODULE_3__[\"ApplicationСtx\"]);\n\n //Подключение к контексту сообщений\n const {\n InlineMsgInfo\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_messaging__WEBPACK_IMPORTED_MODULE_2__[\"MessagingСtx\"]);\n\n //Подключение к контексту взаимодействия с сервером\n const {\n executeStored\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_backend__WEBPACK_IMPORTED_MODULE_1__[\"BackEndСtx\"]);\n\n //Загрузка списка проектов\n const loadProjects = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async (force = false) => {\n if (!state.projectsLoaded || force) {\n const data = await executeStored({\n stored: \"PKG_P8PANELS_PROJECTS.JB_PRJCTS_LIST\",\n args: {\n NIDENT: state.ident\n },\n respArg: \"COUT\",\n isArray: name => name === \"XPROJECTS\"\n });\n setState(pv => ({\n ...pv,\n projectsLoaded: true,\n projects: [...(data?.XPROJECTS || [])]\n }));\n }\n }, [executeStored, state.ident, state.projectsLoaded]);\n\n //Загрузка списка работ проекта\n const loadProjectJobs = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async (tasksOnly = false) => {\n const data = await executeStored({\n stored: \"PKG_P8PANELS_PROJECTS.JB_JOBS_LIST\",\n args: {\n NIDENT: state.ident,\n NPRN: state.selectedProject,\n NINCLUDE_DEF: tasksOnly === false ? 1 : 0\n },\n attributeValueProcessor: (name, val) => name == \"numb\" ? undefined : [\"start\", \"end\"].includes(name) ? (0,_core_utils__WEBPACK_IMPORTED_MODULE_4__.formatDateJSONDateOnly)(val) : val,\n respArg: \"COUT\"\n });\n setState(pv => ({\n ...pv,\n selectedProjectJobsLoaded: true,\n selectedProjectGanttDef: tasksOnly === true ? {\n ...pv.selectedProjectGanttDef\n } : data.XGANTT_DEF ? {\n ...data.XGANTT_DEF\n } : {},\n selectedProjectTasks: [...data.XGANTT_TASKS]\n }));\n }, [executeStored, state.ident, state.selectedProject]);\n\n //Изменение работы в графике\n const modifyJob = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async (job, dateFrom, dateTo, dateBegin, dateFact, durationMeas) => {\n let data = null;\n try {\n data = await executeStored({\n stored: \"PKG_P8PANELS_PROJECTS.JB_JOBS_MODIFY_PERIOD\",\n args: {\n NJB_JOBS: job,\n DDATE_FROM: dateFrom,\n DDATE_TO: dateTo,\n DBEGIN: dateBegin,\n DFACT: dateFact,\n NDURATION_MEAS: durationMeas\n }\n });\n if (data?.NRESOURCE_STATUS != -1) {\n setState(pv => ({\n ...pv,\n resourceStatus: data.NRESOURCE_STATUS,\n needSave: true\n }));\n loadProjects(true);\n }\n } finally {\n loadProjectJobs(true);\n }\n }, [executeStored, loadProjectJobs, loadProjects]);\n\n //Сохранение буфера балансировки в проекты\n const saveProjects = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async () => {\n const data = await executeStored({\n stored: \"PKG_P8PANELS_PROJECTS.JB_SAVE\",\n args: {\n NIDENT: state.ident\n },\n respArg: \"COUT\"\n });\n setState(pv => ({\n ...pv,\n needSave: false,\n projects: [...(data?.XPROJECTS || [])]\n }));\n }, [executeStored, state.ident]);\n\n //Инициализация данных балансировки\n const initJobs = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async () => {\n if (!state.init) {\n const data = await executeStored({\n stored: \"PKG_P8PANELS_PROJECTS.JB_INIT\",\n args: {\n DBEGIN: state.dateBegin ? new Date(state.dateBegin) : null,\n DFACT: state.dateFact ? new Date(state.dateFact) : null,\n NDURATION_MEAS: state.durationMeas,\n SLAB_MEAS: state.labMeas,\n NIDENT: state.ident\n }\n });\n setState(pv => ({\n ...pv,\n init: true,\n dateBegin: data.DBEGIN,\n dateFact: data.DFACT,\n durationMeas: data.NDURATION_MEAS,\n labMeas: data.SLAB_MEAS,\n resourceStatus: data.NRESOURCE_STATUS,\n ident: data.NIDENT\n }));\n }\n }, [state.init, state.dateBegin, state.dateFact, state.durationMeas, state.labMeas, state.ident, executeStored]);\n\n //Грузим список проектов при смене идентификатора процесса\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n if (state.ident) loadProjects();\n }, [state.ident, loadProjects]);\n\n //При смене выбранного проекта\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n if (state.selectedProject) loadProjectJobs(false);\n }, [state.selectedProject, loadProjectJobs]);\n\n //При подключении компонента к странице\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n initJobs();\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n //Выбор проекта\n const selectPoject = (project, projectDocRn) => {\n setState(pv => ({\n ...pv,\n selectedProject: project,\n selectedProjectDocRn: projectDocRn,\n selectedProjectJobsLoaded: false,\n selectedProjectTasks: [],\n selectedProjectGanttDef: {},\n showProjectsList: false\n }));\n };\n\n //Сброс выбора проекта\n const unselectProject = () => setState(pv => ({\n ...pv,\n selectedProjectJobsLoaded: false,\n selectedProject: null,\n selectedProjectDocRn: null,\n selectedProjectTasks: [],\n selectedProjectGanttDef: {},\n showProjectsList: false\n }));\n\n //Обработка нажатия на элемент в списке проектов\n const handleProjectClick = project => {\n if (state.selectedProject != project.NRN) selectPoject(project.NRN, project.NPROJECT);else unselectProject();\n };\n\n //Отработка нажатия на заголовок плана-графика\n const handleTitleClick = () => state.selectedProjectDocRn ? pOnlineShowDocument({\n unitCode: \"Projects\",\n document: state.selectedProjectDocRn\n }) : null;\n\n //Обработка измненения сроков задачи в диаграмме Гантта\n const handleTaskDatesChange = ({\n task,\n start,\n end,\n isMain\n }) => {\n if (isMain) modifyJob(task.rn, new Date(start), new Date(end), new Date(state.dateBegin), new Date(state.dateFact), state.durationMeas);\n };\n\n //Обработка нажатия на сохранение данных в проект\n const handleSaveToProjectsClick = () => saveProjects();\n\n //Обработка нажатия на проект в таблице детализации трудоёмкости по плану-графику монитора ресурсов\n const handlePlanJobsDtlProjectClick = ({\n sender\n }) => {\n setState(pv => ({\n ...pv,\n showPeriodsList: false\n }));\n if (state.selectedProject != sender.NJB_PRJCTS) selectPoject(sender.NJB_PRJCTS, sender.NPROJECT);\n };\n\n //Генерация содержимого\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_16__[\"default\"], {\n p: 2\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_17__[\"default\"], {\n variant: \"extended\",\n sx: STYLES.PROJECTS_BUTTON,\n onClick: () => setState(pv => ({\n ...pv,\n showProjectsList: !pv.showProjectsList\n }))\n }, \"\\u041F\\u0440\\u043E\\u0435\\u043A\\u0442\\u044B\", state.needSave ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), null, \"\\xA0\\xA0\", /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_12__[\"default\"], {\n sx: {\n color: \"orange\"\n }\n }, \"save\")) : null), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_18__[\"default\"], {\n anchor: \"left\",\n open: state.showProjectsList,\n onClose: () => setState(pv => ({\n ...pv,\n showProjectsList: false\n })),\n sx: STYLES.PROJECTS_DRAWER\n }, state.projectsLoaded ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), null, state.needSave ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_9__[\"default\"], null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_10__[\"default\"], {\n sx: STYLES.PROJECTS_LIST_SAVE_BUTTON,\n onClick: handleSaveToProjectsClick\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_11__[\"default\"], null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_12__[\"default\"], null, \"save\")), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_13__[\"default\"], {\n primary: \"\\u0421\\u043E\\u0445\\u0440\\u0430\\u043D\\u0438\\u0442\\u044C\",\n secondary: \"\\u041F\\u0435\\u0440\\u0435\\u043D\\u0441\\u0442\\u0438 \\u0438\\u0437\\u043C\\u0435\\u043D\\u0435\\u043D\\u0438\\u044F \\u0432 \\u043F\\u0440\\u043E\\u0435\\u043A\\u0442\\u044B\"\n }))) : null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(ProjectsList, {\n projects: state.projects,\n selectedProject: state.selectedProject,\n onClick: handleProjectClick\n })) : null), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_17__[\"default\"], {\n variant: \"extended\",\n sx: STYLES.PERIODS_BUTTON,\n onClick: () => setState(pv => ({\n ...pv,\n showPeriodsList: !pv.showPeriodsList\n }))\n }, \"\\u0420\\u0435\\u0441\\u0443\\u0440\\u0441\\u044B\", [0, 1].includes(state.resourceStatus) ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), null, \"\\xA0\\xA0\", /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_12__[\"default\"], {\n sx: {\n color: state.resourceStatus === 0 ? \"green\" : \"red\"\n }\n }, state.resourceStatus === 0 ? \"done\" : \"error\")) : null), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_18__[\"default\"], {\n anchor: \"right\",\n open: state.showPeriodsList,\n onClose: () => setState(pv => ({\n ...pv,\n showPeriodsList: false\n })),\n sx: STYLES.PERIODS_DRAWER\n }, state.ident ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_res_mon__WEBPACK_IMPORTED_MODULE_7__.ResMon, {\n ident: state.ident,\n onPlanJobsDtlProjectClick: handlePlanJobsDtlProjectClick\n }) : null), state.init == true ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_19__[\"default\"], {\n container: true,\n spacing: 1\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_19__[\"default\"], {\n item: true,\n xs: 12\n }, state.selectedProjectJobsLoaded ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_16__[\"default\"], {\n sx: STYLES.GANTT_CONTAINER,\n p: 1\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_components_p8p_gantt__WEBPACK_IMPORTED_MODULE_6__.P8PGantt, _extends({}, _config_wrapper__WEBPACK_IMPORTED_MODULE_5__.P8P_GANTT_CONFIG_PROPS, state.selectedProjectGanttDef, {\n height: GANTT_HEIGHT,\n titleStyle: STYLES.GANTT_TITLE,\n onTitleClick: handleTitleClick,\n tasks: state.selectedProjectTasks,\n onTaskDatesChange: handleTaskDatesChange,\n taskAttributeRenderer: _layouts__WEBPACK_IMPORTED_MODULE_8__.taskAttributeRenderer\n }))) : !state.selectedProject ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(InlineMsgInfo, {\n okBtn: false,\n text: \"Укажите проект для отображения его плана-графика\"\n }) : null)) : null);\n};\n\n//----------------\n//Интерфейс модуля\n//----------------\n\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/panels/prj_jobs/prj_jobs.js?"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ PrjJobs: () => (/* binding */ PrjJobs)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! prop-types */ \"./node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_15___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_15__);\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Stack/Stack.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Icon/Icon.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/List/List.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/ListItemButton/ListItemButton.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/ListItemIcon/ListItemIcon.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/ListItemText/ListItemText.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Typography/Typography.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Box/Box.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Fab/Fab.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Drawer/Drawer.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Grid/Grid.js\");\n/* harmony import */ var _context_backend__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../context/backend */ \"./app/context/backend.js\");\n/* harmony import */ var _context_messaging__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../context/messaging */ \"./app/context/messaging.js\");\n/* harmony import */ var _context_application__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../context/application */ \"./app/context/application.js\");\n/* harmony import */ var _core_utils__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../core/utils */ \"./app/core/utils.js\");\n/* harmony import */ var _config_wrapper__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../config_wrapper */ \"./app/config_wrapper.js\");\n/* harmony import */ var _components_p8p_gantt__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../../components/p8p_gantt */ \"./app/components/p8p_gantt.js\");\n/* harmony import */ var _res_mon__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./res_mon */ \"./app/panels/prj_jobs/res_mon.js\");\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n/*\r\n Парус 8 - Панели мониторинга - ПУП - Работы проектов\r\n Панель мониторинга: Корневая панель работ проектов\r\n*/\n\n//---------------------\n//Подключение библиотек\n//---------------------\n\n //Классы React\n //Контроль свойств компонента\n //Интерфейсные элементы\n //Контекст взаимодействия с сервером\n //Контекст сообщений\n //Контекст приложения\n //Вспомогательные функции\n //Подключение компонентов к настройкам приложения\n //Диаграмма Ганта\n //Монитор ресурсов\n\n//---------\n//Константы\n//---------\n\n//Высота диаграммы Ганта\nconst GANTT_HEIGHT = \"75vh\";\n\n//Ширина диаграммы Ганта\nconst GANTT_WIDTH = \"98vw\";\n\n//Стили\nconst STYLES = {\n PROJECTS_LIST_SAVE_BUTTON: {\n backgroundColor: \"orange\"\n },\n PROJECTS_LIST_ITEM_NOJOBS: {\n backgroundColor: \"#ff000045\"\n },\n PROJECTS_LIST_ITEM_PRIMARY: {\n wordWrap: \"break-word\"\n },\n PROJECTS_LIST_ITEM_SECONDARY: {\n wordWrap: \"break-word\",\n fontSize: \"0.5rem\",\n textTransform: \"uppercase\"\n },\n PROJECTS_LIST_ITEM_SECONDARY_NOJOBS: {\n color: \"red\"\n },\n PROJECTS_LIST_ITEM_SECONDARY_NOEDIT: {\n color: \"gray\"\n },\n PROJECTS_LIST_ITEM_SECONDARY_CHANGED: {\n color: \"green\"\n },\n PROJECTS_BUTTON: {\n position: \"absolute\"\n },\n PROJECTS_DRAWER: {\n width: \"250px\",\n flexShrink: 0,\n [`& .MuiDrawer-paper`]: {\n width: \"250px\",\n boxSizing: \"border-box\"\n }\n },\n GANTT_CONTAINER: {\n height: GANTT_HEIGHT,\n width: GANTT_WIDTH\n },\n GANTT_TITLE: {\n paddingLeft: \"100px\",\n paddingRight: \"120px\"\n },\n PERIODS_BUTTON: {\n position: \"absolute\",\n right: \"20px\"\n },\n PERIODS_DRAWER: {\n width: \"1000px\",\n flexShrink: 0,\n [`& .MuiDrawer-paper`]: {\n width: \"1000px\",\n boxSizing: \"border-box\"\n }\n }\n};\n\n//------------------------------------\n//Вспомогательные функции и компоненты\n//------------------------------------\n\n//Формирование значения для колонки \"Состояние\" этапа\nconst formatStageStatusValue = value => {\n const [text, icon] = value == 0 ? [\"Зарегистрирован\", \"app_registration\"] : value == 1 ? [\"Открыт\", \"lock_open\"] : value == 2 ? [\"Закрыт\", \"lock_outline\"] : value == 3 ? [\"Согласован\", \"thumb_up_alt\"] : value == 4 ? [\"Исполнение прекращено\", \"block\"] : [\"Остановлен\", \"do_not_disturb_on\"];\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_8__[\"default\"], {\n direction: \"row\",\n gap: 0.5,\n alignItems: \"center\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_9__[\"default\"], {\n title: text\n }, icon), text);\n};\n\n//Формирование значения для колонки \"Состояние\" работы\nconst formatJobStatusValue = value => {\n const [text, icon] = value == 0 ? [\"Не начата\", \"not_started\"] : value == 1 ? [\"Выполняется\", \"loop\"] : value == 2 ? [\"Выполнена\", \"task_alt\"] : value == 3 ? [\"Остановлена\", \"do_not_disturb_on\"] : [\"Отменена\", \"cancel\"];\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_8__[\"default\"], {\n direction: \"row\",\n gap: 0.5,\n alignItems: \"center\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_9__[\"default\"], {\n title: text\n }, icon), text);\n};\n\n//Список проектов\nconst ProjectsList = ({\n projects = [],\n selectedProject,\n onClick\n} = {}) => {\n //Подключение к контексту сообщений\n const {\n InlineMsgErr\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_messaging__WEBPACK_IMPORTED_MODULE_2__[\"MessagingСtx\"]);\n\n //Генерация содержимого\n return projects.length > 0 ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_10__[\"default\"], null, projects.map(p => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_11__[\"default\"], {\n key: p.NRN,\n sx: p.NJOBS == 0 ? STYLES.PROJECTS_LIST_ITEM_NOJOBS : null,\n selected: p.NRN === selectedProject,\n onClick: () => onClick ? onClick(p) : null\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_12__[\"default\"], null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_9__[\"default\"], {\n title: p.NEDITABLE == 1 ? \"Можно редактировать\" : \"Редактирование недоступно\"\n }, p.NEDITABLE == 1 ? \"edit\" : \"edit_off\")), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_13__[\"default\"], {\n primary: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_14__[\"default\"], {\n sx: STYLES.PROJECTS_LIST_ITEM_PRIMARY\n }, p.SNAME),\n secondary: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_14__[\"default\"], {\n sx: {\n ...STYLES.PROJECTS_LIST_ITEM_SECONDARY,\n ...(p.NJOBS == 0 ? STYLES.PROJECTS_LIST_ITEM_SECONDARY_NOJOBS : p.NCHANGED == 1 ? STYLES.PROJECTS_LIST_ITEM_SECONDARY_CHANGED : STYLES.PROJECTS_LIST_ITEM_SECONDARY_NOEDIT)\n }\n }, p.NJOBS == 1 ? p.NEDITABLE == 1 ? p.NCHANGED == 1 ? \"Изменён\" : \"Не изменён\" : \"Редактирование недоступно\" : \"Работы не определены\")\n })))) : /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(InlineMsgErr, {\n okBtn: false,\n text: \"Нет доступных проектов\"\n });\n};\n\n//Контроль свойств - Список проектов\nProjectsList.propTypes = {\n projects: (prop_types__WEBPACK_IMPORTED_MODULE_15___default().array),\n selectedProject: (prop_types__WEBPACK_IMPORTED_MODULE_15___default().number),\n onClick: (prop_types__WEBPACK_IMPORTED_MODULE_15___default().func)\n};\n\n//-----------\n//Тело модуля\n//-----------\n\n//Корневая панель работ проектов\nconst PrjJobs = () => {\n //Собственное состояние\n let [state, setState] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({\n needSave: false,\n showProjectsList: false,\n showPeriodsList: false,\n init: false,\n dateBegin: null,\n dateFact: null,\n durationMeas: null,\n labMeas: null,\n resourceStatus: null,\n ident: null,\n projects: [],\n projectsLoaded: false,\n selectedProjectJobsLoaded: false,\n selectedProject: null,\n selectedProjectDocRn: null,\n selectedProjectGanttDef: {},\n selectedProjectTasks: []\n });\n\n //Подключение к контексту приложения\n const {\n pOnlineShowDocument\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_application__WEBPACK_IMPORTED_MODULE_3__[\"ApplicationСtx\"]);\n\n //Подключение к контексту сообщений\n const {\n InlineMsgInfo\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_messaging__WEBPACK_IMPORTED_MODULE_2__[\"MessagingСtx\"]);\n\n //Подключение к контексту взаимодействия с сервером\n const {\n executeStored\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_backend__WEBPACK_IMPORTED_MODULE_1__[\"BackEndСtx\"]);\n\n //Загрузка списка проектов\n const loadProjects = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async (force = false) => {\n if (!state.projectsLoaded || force) {\n const data = await executeStored({\n stored: \"PKG_P8PANELS_PROJECTS.JB_PRJCTS_LIST\",\n args: {\n NIDENT: state.ident\n },\n respArg: \"COUT\",\n isArray: name => name === \"XPROJECTS\"\n });\n setState(pv => ({\n ...pv,\n projectsLoaded: true,\n projects: [...(data?.XPROJECTS || [])]\n }));\n }\n }, [executeStored, state.ident, state.projectsLoaded]);\n\n //Загрузка списка работ проекта\n const loadProjectJobs = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async (tasksOnly = false) => {\n const data = await executeStored({\n stored: \"PKG_P8PANELS_PROJECTS.JB_JOBS_LIST\",\n args: {\n NIDENT: state.ident,\n NPRN: state.selectedProject,\n NINCLUDE_DEF: tasksOnly === false ? 1 : 0\n },\n attributeValueProcessor: (name, val) => name == \"numb\" ? undefined : [\"start\", \"end\"].includes(name) ? (0,_core_utils__WEBPACK_IMPORTED_MODULE_4__.formatDateJSONDateOnly)(val) : val,\n respArg: \"COUT\"\n });\n setState(pv => ({\n ...pv,\n selectedProjectJobsLoaded: true,\n selectedProjectGanttDef: tasksOnly === true ? {\n ...pv.selectedProjectGanttDef\n } : data.XGANTT_DEF ? {\n ...data.XGANTT_DEF\n } : {},\n selectedProjectTasks: [...data.XGANTT_TASKS]\n }));\n }, [executeStored, state.ident, state.selectedProject]);\n\n //Изменение работы в графике\n const modifyJob = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async (job, dateFrom, dateTo, dateBegin, dateFact, durationMeas) => {\n let data = null;\n try {\n data = await executeStored({\n stored: \"PKG_P8PANELS_PROJECTS.JB_JOBS_MODIFY_PERIOD\",\n args: {\n NJB_JOBS: job,\n DDATE_FROM: dateFrom,\n DDATE_TO: dateTo,\n DBEGIN: dateBegin,\n DFACT: dateFact,\n NDURATION_MEAS: durationMeas\n }\n });\n if (data?.NRESOURCE_STATUS != -1) {\n setState(pv => ({\n ...pv,\n resourceStatus: data.NRESOURCE_STATUS,\n needSave: true\n }));\n loadProjects(true);\n }\n } finally {\n loadProjectJobs(true);\n }\n }, [executeStored, loadProjectJobs, loadProjects]);\n\n //Сохранение буфера балансировки в проекты\n const saveProjects = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async () => {\n const data = await executeStored({\n stored: \"PKG_P8PANELS_PROJECTS.JB_SAVE\",\n args: {\n NIDENT: state.ident\n },\n respArg: \"COUT\"\n });\n setState(pv => ({\n ...pv,\n needSave: false,\n projects: [...(data?.XPROJECTS || [])]\n }));\n }, [executeStored, state.ident]);\n\n //Инициализация данных балансировки\n const initJobs = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async () => {\n if (!state.init) {\n const data = await executeStored({\n stored: \"PKG_P8PANELS_PROJECTS.JB_INIT\",\n args: {\n DBEGIN: state.dateBegin ? new Date(state.dateBegin) : null,\n DFACT: state.dateFact ? new Date(state.dateFact) : null,\n NDURATION_MEAS: state.durationMeas,\n SLAB_MEAS: state.labMeas,\n NIDENT: state.ident\n }\n });\n setState(pv => ({\n ...pv,\n init: true,\n dateBegin: data.DBEGIN,\n dateFact: data.DFACT,\n durationMeas: data.NDURATION_MEAS,\n labMeas: data.SLAB_MEAS,\n resourceStatus: data.NRESOURCE_STATUS,\n ident: data.NIDENT\n }));\n }\n }, [state.init, state.dateBegin, state.dateFact, state.durationMeas, state.labMeas, state.ident, executeStored]);\n\n //Грузим список проектов при смене идентификатора процесса\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n if (state.ident) loadProjects();\n }, [state.ident, loadProjects]);\n\n //При смене выбранного проекта\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n if (state.selectedProject) loadProjectJobs(false);\n }, [state.selectedProject, loadProjectJobs]);\n\n //При подключении компонента к странице\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n initJobs();\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n //Выбор проекта\n const selectPoject = (project, projectDocRn) => {\n setState(pv => ({\n ...pv,\n selectedProject: project,\n selectedProjectDocRn: projectDocRn,\n selectedProjectJobsLoaded: false,\n selectedProjectTasks: [],\n selectedProjectGanttDef: {},\n showProjectsList: false\n }));\n };\n\n //Сброс выбора проекта\n const unselectProject = () => setState(pv => ({\n ...pv,\n selectedProjectJobsLoaded: false,\n selectedProject: null,\n selectedProjectDocRn: null,\n selectedProjectTasks: [],\n selectedProjectGanttDef: {},\n showProjectsList: false\n }));\n\n //Обработка нажатия на элемент в списке проектов\n const handleProjectClick = project => {\n if (state.selectedProject != project.NRN) selectPoject(project.NRN, project.NPROJECT);else unselectProject();\n };\n\n //Отработка нажатия на заголовок плана-графика\n const handleTitleClick = () => state.selectedProjectDocRn ? pOnlineShowDocument({\n unitCode: \"Projects\",\n document: state.selectedProjectDocRn\n }) : null;\n\n //Обработка измненения сроков задачи в диаграмме Гантта\n const handleTaskDatesChange = ({\n task,\n start,\n end,\n isMain\n }) => {\n if (isMain) modifyJob(task.rn, new Date(start), new Date(end), new Date(state.dateBegin), new Date(state.dateFact), state.durationMeas);\n };\n\n //Генерация кастомных представлений атрибутов задачи в редакторе\n const taskAttributeRenderer = ({\n task,\n attribute\n }) => {\n switch (attribute.name) {\n case \"type\":\n return task.type === 1 ? \"Этап проекта\" : \"Работа проекта\";\n case \"state\":\n return task.type === 1 ? formatStageStatusValue(task[attribute.name]) : formatJobStatusValue(task[attribute.name]);\n default:\n return null;\n }\n };\n\n //Обработка нажатия на сохранение данных в проект\n const handleSaveToProjectsClick = () => saveProjects();\n\n //Обработка нажатия на проект в таблице детализации трудоёмкости по плану-графику монитора ресурсов\n const handlePlanJobsDtlProjectClick = ({\n sender\n }) => {\n setState(pv => ({\n ...pv,\n showPeriodsList: false\n }));\n if (state.selectedProject != sender.NJB_PRJCTS) selectPoject(sender.NJB_PRJCTS, sender.NPROJECT);\n };\n\n //Генерация содержимого\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_16__[\"default\"], {\n p: 2\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_17__[\"default\"], {\n variant: \"extended\",\n sx: STYLES.PROJECTS_BUTTON,\n onClick: () => setState(pv => ({\n ...pv,\n showProjectsList: !pv.showProjectsList\n }))\n }, \"\\u041F\\u0440\\u043E\\u0435\\u043A\\u0442\\u044B\", state.needSave ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), null, \"\\xA0\\xA0\", /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_9__[\"default\"], {\n sx: {\n color: \"orange\"\n }\n }, \"save\")) : null), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_18__[\"default\"], {\n anchor: \"left\",\n open: state.showProjectsList,\n onClose: () => setState(pv => ({\n ...pv,\n showProjectsList: false\n })),\n sx: STYLES.PROJECTS_DRAWER\n }, state.projectsLoaded ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), null, state.needSave ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_10__[\"default\"], null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_11__[\"default\"], {\n sx: STYLES.PROJECTS_LIST_SAVE_BUTTON,\n onClick: handleSaveToProjectsClick\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_12__[\"default\"], null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_9__[\"default\"], null, \"save\")), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_13__[\"default\"], {\n primary: \"\\u0421\\u043E\\u0445\\u0440\\u0430\\u043D\\u0438\\u0442\\u044C\",\n secondary: \"\\u041F\\u0435\\u0440\\u0435\\u043D\\u0441\\u0442\\u0438 \\u0438\\u0437\\u043C\\u0435\\u043D\\u0435\\u043D\\u0438\\u044F \\u0432 \\u043F\\u0440\\u043E\\u0435\\u043A\\u0442\\u044B\"\n }))) : null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(ProjectsList, {\n projects: state.projects,\n selectedProject: state.selectedProject,\n onClick: handleProjectClick\n })) : null), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_17__[\"default\"], {\n variant: \"extended\",\n sx: STYLES.PERIODS_BUTTON,\n onClick: () => setState(pv => ({\n ...pv,\n showPeriodsList: !pv.showPeriodsList\n }))\n }, \"\\u0420\\u0435\\u0441\\u0443\\u0440\\u0441\\u044B\", [0, 1].includes(state.resourceStatus) ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), null, \"\\xA0\\xA0\", /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_9__[\"default\"], {\n sx: {\n color: state.resourceStatus === 0 ? \"green\" : \"red\"\n }\n }, state.resourceStatus === 0 ? \"done\" : \"error\")) : null), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_18__[\"default\"], {\n anchor: \"right\",\n open: state.showPeriodsList,\n onClose: () => setState(pv => ({\n ...pv,\n showPeriodsList: false\n })),\n sx: STYLES.PERIODS_DRAWER\n }, state.ident ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_res_mon__WEBPACK_IMPORTED_MODULE_7__.ResMon, {\n ident: state.ident,\n onPlanJobsDtlProjectClick: handlePlanJobsDtlProjectClick\n }) : null), state.init == true ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_19__[\"default\"], {\n container: true,\n spacing: 1\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_19__[\"default\"], {\n item: true,\n xs: 12\n }, state.selectedProjectJobsLoaded ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_16__[\"default\"], {\n sx: STYLES.GANTT_CONTAINER,\n p: 1\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_components_p8p_gantt__WEBPACK_IMPORTED_MODULE_6__.P8PGantt, _extends({}, _config_wrapper__WEBPACK_IMPORTED_MODULE_5__.P8P_GANTT_CONFIG_PROPS, state.selectedProjectGanttDef, {\n height: GANTT_HEIGHT,\n titleStyle: STYLES.GANTT_TITLE,\n onTitleClick: handleTitleClick,\n tasks: state.selectedProjectTasks,\n onTaskDatesChange: handleTaskDatesChange,\n taskAttributeRenderer: taskAttributeRenderer\n }))) : !state.selectedProject ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(InlineMsgInfo, {\n okBtn: false,\n text: \"Укажите проект для отображения его плана-графика\"\n }) : null)) : null);\n};\n\n//----------------\n//Интерфейс модуля\n//----------------\n\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/panels/prj_jobs/prj_jobs.js?"); /***/ }), @@ -3821,7 +3799,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ ResMon: () => (/* binding */ ResMon)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! prop-types */ \"./node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_10___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_10__);\n/* harmony import */ var _context_backend__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../context/backend */ \"./app/context/backend.js\");\n/* harmony import */ var _context_application__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../context/application */ \"./app/context/application.js\");\n/* harmony import */ var _core_utils__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../core/utils */ \"./app/core/utils.js\");\n/* harmony import */ var _config_wrapper__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../config_wrapper */ \"./app/config_wrapper.js\");\n/* harmony import */ var _components_p8p_data_grid__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../components/p8p_data_grid */ \"./app/components/p8p_data_grid.js\");\n/* harmony import */ var _lab_plan_fot_dtl__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./lab_plan_fot_dtl */ \"./app/panels/prj_jobs/lab_plan_fot_dtl.js\");\n/* harmony import */ var _lab_fact_rpt_dtl__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./lab_fact_rpt_dtl */ \"./app/panels/prj_jobs/lab_fact_rpt_dtl.js\");\n/* harmony import */ var _lab_plan_jobs_dtl__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./lab_plan_jobs_dtl */ \"./app/panels/prj_jobs/lab_plan_jobs_dtl.js\");\n/* harmony import */ var _layouts__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./layouts */ \"./app/panels/prj_jobs/layouts.js\");\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n/*\r\n Парус 8 - Панели мониторинга - ПУП - Работы проектов\r\n Компонент панели: Монитор ресурсов\r\n*/\n\n//---------------------\n//Подключение библиотек\n//---------------------\n\n //Классы React\n //Контроль свойств компонента\n //Контекст взаимодействия с сервером\n //Контекст приложения\n //Вспомогательные функции\n //Подключение компонентов к настройкам приложения\n //Таблица данных\n //Детализация плановой трудоёмкости по ФОТ\n //Детализация фактической трудоёмкости по \"Планам и отчетам подразделений\"\n //Детализация плановой трудоёмкости по графику\n //Дополнительная разметка и вёрстка клиентских элементов\n\n//-----------\n//Тело модуля\n//-----------\n\n//Монитор ресурсов\nconst ResMon = ({\n ident,\n onPlanJobsDtlProjectClick\n}) => {\n //Собственное состояние\n const [state, setState] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({\n displayPlanFOTDtl: null,\n titlePlanFOTDtl: null,\n displayFactRptDtl: null,\n titleFactRptDtl: null,\n displayPlanJobsDtl: null,\n titlePlanJobsDtl: null\n });\n\n //Состояние таблицы периодов монитора ресурсов\n const [peridos, setPeriods] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({\n dataLoaded: false,\n columnsDef: [],\n orders: [],\n rows: [],\n reload: true,\n pageNumber: 1,\n morePages: true\n });\n\n //Подключение к контексту приложения\n const {\n configSystemPageSize\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_application__WEBPACK_IMPORTED_MODULE_2__[\"ApplicationСtx\"]);\n\n //Подключение к контексту взаимодействия с сервером\n const {\n executeStored,\n SERV_DATA_TYPE_CLOB\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_backend__WEBPACK_IMPORTED_MODULE_1__[\"BackEndСtx\"]);\n\n //Загрузка данных монитора балансировки периодов с сервера\n const loadPeriods = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async () => {\n if (peridos.reload) {\n const data = await executeStored({\n stored: \"PKG_P8PANELS_PROJECTS.JB_PERIODS_LIST\",\n args: {\n NIDENT: ident,\n CORDERS: {\n VALUE: (0,_core_utils__WEBPACK_IMPORTED_MODULE_3__.object2Base64XML)(peridos.orders, {\n arrayNodeName: \"orders\"\n }),\n SDATA_TYPE: SERV_DATA_TYPE_CLOB\n },\n NPAGE_NUMBER: peridos.pageNumber,\n NPAGE_SIZE: configSystemPageSize,\n NINCLUDE_DEF: peridos.dataLoaded ? 0 : 1\n },\n attributeValueProcessor: (name, val) => name == \"SPERIOD\" ? undefined : val,\n respArg: \"COUT\"\n });\n setPeriods(pv => ({\n ...pv,\n columnsDef: data.XCOLUMNS_DEF ? [...data.XCOLUMNS_DEF] : pv.columnsDef,\n rows: pv.pageNumber == 1 ? [...(data.XROWS || [])] : [...pv.rows, ...(data.XROWS || [])],\n dataLoaded: true,\n reload: false,\n morePages: (data.XROWS || []).length >= configSystemPageSize\n }));\n }\n }, [ident, peridos.reload, peridos.orders, peridos.dataLoaded, peridos.pageNumber, executeStored, configSystemPageSize, SERV_DATA_TYPE_CLOB]);\n\n //При сокрытии детализации\n const handleHideDtl = () => setState(pv => ({\n ...pv,\n displayPlanFOTDtl: null,\n titlePlanFOTDtl: null,\n displayFactRptDtl: null,\n titleFactRptDtl: null,\n displayPlanJobsDtl: null,\n titlePlanJobsDtl: null\n }));\n\n //При нажатии на плановую трудоёмкость по ФОТ\n const handleLabPlanFOTClick = ({\n sender\n }) => setState(pv => ({\n ...pv,\n displayPlanFOTDtl: sender.NRN,\n titlePlanFOTDtl: `${sender.SPERIOD} - ${sender.SINS_DEPARTMENT} - ${sender.SFCMANPOWER} - ${sender.NLAB_PLAN_FOT}`\n }));\n\n //При нажатии на фактическую трудоёмкость по отчетам\n const handleLabFactRptClick = ({\n sender\n }) => setState(pv => ({\n ...pv,\n displayFactRptDtl: sender.NRN,\n titleFactRptDtl: `${sender.SPERIOD} - ${sender.SINS_DEPARTMENT} - ${sender.SFCMANPOWER} - ${sender.NLAB_FACT_RPT}`\n }));\n\n //При нажатии на проект в списке детализации плановой трудоёмкости по графику\n const handleLabPlanJobsClick = ({\n sender\n }) => setState(pv => ({\n ...pv,\n displayPlanJobsDtl: sender.NRN,\n titlePlanJobsDtl: `${sender.SPERIOD} - ${sender.SINS_DEPARTMENT} - ${sender.SFCMANPOWER} - ${sender.NLAB_PLAN_JOBS}`\n }));\n\n //При изменении состояния сортировки в таблице периодов балансировки\n const handlePeriodsOrderChanged = ({\n orders\n }) => setPeriods(pv => ({\n ...pv,\n orders,\n pageNumber: 1,\n reload: true\n }));\n\n //При изменении количества отображаемых страниц в таблице периодов балансировки\n const handlePeriodsPagesCountChanged = () => setPeriods(pv => ({\n ...pv,\n pageNumber: pv.pageNumber + 1,\n reload: true\n }));\n\n //При нажатии на проект в таблице детализации трудоёмкости по плану-графику\n const handlePlanJobsDtlProjectClick = ({\n sender\n }) => onPlanJobsDtlProjectClick ? onPlanJobsDtlProjectClick({\n sender\n }) : null;\n\n //При необходимости обновить данные\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n loadPeriods();\n }, [peridos.reload, loadPeriods]);\n\n //Генерация содержимого\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), null, peridos.dataLoaded ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_components_p8p_data_grid__WEBPACK_IMPORTED_MODULE_5__.P8PDataGrid, _extends({}, _config_wrapper__WEBPACK_IMPORTED_MODULE_4__.P8P_DATA_GRID_CONFIG_PROPS, {\n columnsDef: peridos.columnsDef,\n rows: peridos.rows,\n size: _components_p8p_data_grid__WEBPACK_IMPORTED_MODULE_5__.P8P_DATA_GRID_SIZE.SMALL,\n morePages: peridos.morePages,\n reloading: peridos.reload,\n onOrderChanged: handlePeriodsOrderChanged,\n onPagesCountChanged: handlePeriodsPagesCountChanged,\n dataCellRender: prms => (0,_layouts__WEBPACK_IMPORTED_MODULE_9__.periodsDataCellRender)({\n ...prms,\n onLabPlanFOTClick: handleLabPlanFOTClick,\n onLabFactRptClick: handleLabFactRptClick,\n onLabPlanJobsClick: handleLabPlanJobsClick\n })\n })) : null, state.displayPlanFOTDtl ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_lab_plan_fot_dtl__WEBPACK_IMPORTED_MODULE_6__.LabPlanFOTDtl, {\n periodId: state.displayPlanFOTDtl,\n title: state.titlePlanFOTDtl,\n onHide: handleHideDtl\n }) : null, state.displayFactRptDtl ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_lab_fact_rpt_dtl__WEBPACK_IMPORTED_MODULE_7__.LabFactRptDtl, {\n periodId: state.displayFactRptDtl,\n title: state.titleFactRptDtl,\n onHide: handleHideDtl\n }) : null, state.displayPlanJobsDtl ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_lab_plan_jobs_dtl__WEBPACK_IMPORTED_MODULE_8__.LabPlanJobsDtl, {\n periodId: state.displayPlanJobsDtl,\n title: state.titlePlanJobsDtl,\n onHide: handleHideDtl,\n onProjectClick: handlePlanJobsDtlProjectClick\n }) : null);\n};\n\n//Контроль свойств - Монитор ресурсов\nResMon.propTypes = {\n ident: (prop_types__WEBPACK_IMPORTED_MODULE_10___default().number).isRequired,\n onPlanJobsDtlProjectClick: (prop_types__WEBPACK_IMPORTED_MODULE_10___default().func)\n};\n\n//----------------\n//Интерфейс модуля\n//----------------\n\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/panels/prj_jobs/res_mon.js?"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ ResMon: () => (/* binding */ ResMon)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! prop-types */ \"./node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_11___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_11__);\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Link/Link.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Stack/Stack.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Icon/Icon.js\");\n/* harmony import */ var _context_backend__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../context/backend */ \"./app/context/backend.js\");\n/* harmony import */ var _context_application__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../context/application */ \"./app/context/application.js\");\n/* harmony import */ var _core_utils__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../core/utils */ \"./app/core/utils.js\");\n/* harmony import */ var _config_wrapper__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../config_wrapper */ \"./app/config_wrapper.js\");\n/* harmony import */ var _components_p8p_data_grid__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../components/p8p_data_grid */ \"./app/components/p8p_data_grid.js\");\n/* harmony import */ var _lab_plan_fot_dtl__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./lab_plan_fot_dtl */ \"./app/panels/prj_jobs/lab_plan_fot_dtl.js\");\n/* harmony import */ var _lab_plan_jobs_dtl__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./lab_plan_jobs_dtl */ \"./app/panels/prj_jobs/lab_plan_jobs_dtl.js\");\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n/*\r\n Парус 8 - Панели мониторинга - ПУП - Работы проектов\r\n Компонент панели: Монитор ресурсов\r\n*/\n\n//---------------------\n//Подключение библиотек\n//---------------------\n\n //Классы React\n //Контроль свойств компонента\n //Интерфейсные элементы\n //Контекст взаимодействия с сервером\n //Контекст приложения\n //Вспомогательные функции\n //Подключение компонентов к настройкам приложения\n //Таблица данных\n //Детализация плановой трудоёмкости по ФОТ\n //Детализация плановой трудоёмкости по графику\n\n//------------------------------------\n//Вспомогательные функции и компоненты\n//------------------------------------\n\n//Генерация представления ячейки c данными в таблице периодов балансировки\nconst periodsDataCellRender = ({\n row,\n columnDef,\n onLabPlanFOTClick,\n onLabPlanJobsClick\n}) => {\n switch (columnDef.name) {\n case \"NLAB_PLAN_FOT\":\n return {\n data: row[columnDef.name] ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_8__[\"default\"], {\n component: \"button\",\n variant: \"body2\",\n align: \"left\",\n underline: \"hover\",\n onClick: () => onLabPlanFOTClick ? onLabPlanFOTClick({\n sender: row\n }) : null\n }, row[columnDef.name]) : row[columnDef.name]\n };\n case \"NLAB_DIFF_RPT_FOT\":\n return {\n data: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n style: {\n color: row[columnDef.name] <= 0 ? \"green\" : \"red\"\n }\n }, row[columnDef.name])\n };\n case \"NLAB_PLAN_JOBS\":\n return {\n data: row[columnDef.name] ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_8__[\"default\"], {\n component: \"button\",\n variant: \"body2\",\n align: \"left\",\n underline: \"hover\",\n onClick: () => onLabPlanJobsClick ? onLabPlanJobsClick({\n sender: row\n }) : null\n }, row[columnDef.name]) : row[columnDef.name]\n };\n case \"NLAB_DIFF_JOBS_FOT\":\n return {\n data: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_9__[\"default\"], {\n direction: \"row\",\n gap: 0.5,\n alignItems: \"center\",\n justifyContent: \"right\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n style: {\n color: row[columnDef.name] <= 0 ? \"green\" : \"red\"\n }\n }, row[columnDef.name]), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_10__[\"default\"], {\n sx: {\n color: row[columnDef.name] <= 0 ? \"green\" : \"red\"\n }\n }, row[columnDef.name] <= 0 ? \"done\" : \"error\"))\n };\n }\n};\n\n//-----------\n//Тело модуля\n//-----------\n\n//Монитор ресурсов\nconst ResMon = ({\n ident,\n onPlanJobsDtlProjectClick\n}) => {\n //Собственное состояние\n const [state, setState] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({\n displayPlanFOTDtl: null,\n titlePlanFOTDtl: null,\n displayPlanJobsDtl: null,\n titlePlanJobsDtl: null\n });\n\n //Состояние таблицы периодов монитора ресурсов\n const [peridos, setPeriods] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({\n dataLoaded: false,\n columnsDef: [],\n orders: [],\n rows: [],\n reload: true,\n pageNumber: 1,\n morePages: true\n });\n\n //Подключение к контексту приложения\n const {\n configSystemPageSize\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_application__WEBPACK_IMPORTED_MODULE_2__[\"ApplicationСtx\"]);\n\n //Подключение к контексту взаимодействия с сервером\n const {\n executeStored,\n SERV_DATA_TYPE_CLOB\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_backend__WEBPACK_IMPORTED_MODULE_1__[\"BackEndСtx\"]);\n\n //Загрузка данных монитора балансировки периодов с сервера\n const loadPeriods = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async () => {\n if (peridos.reload) {\n const data = await executeStored({\n stored: \"PKG_P8PANELS_PROJECTS.JB_PERIODS_LIST\",\n args: {\n NIDENT: ident,\n CORDERS: {\n VALUE: (0,_core_utils__WEBPACK_IMPORTED_MODULE_3__.object2Base64XML)(peridos.orders, {\n arrayNodeName: \"orders\"\n }),\n SDATA_TYPE: SERV_DATA_TYPE_CLOB\n },\n NPAGE_NUMBER: peridos.pageNumber,\n NPAGE_SIZE: configSystemPageSize,\n NINCLUDE_DEF: peridos.dataLoaded ? 0 : 1\n },\n attributeValueProcessor: (name, val) => name == \"SPERIOD\" ? undefined : val,\n respArg: \"COUT\"\n });\n setPeriods(pv => ({\n ...pv,\n columnsDef: data.XCOLUMNS_DEF ? [...data.XCOLUMNS_DEF] : pv.columnsDef,\n rows: pv.pageNumber == 1 ? [...(data.XROWS || [])] : [...pv.rows, ...(data.XROWS || [])],\n dataLoaded: true,\n reload: false,\n morePages: (data.XROWS || []).length >= configSystemPageSize\n }));\n }\n }, [ident, peridos.reload, peridos.orders, peridos.dataLoaded, peridos.pageNumber, executeStored, configSystemPageSize, SERV_DATA_TYPE_CLOB]);\n\n //При сокрытии детализации\n const handleHideDtl = () => setState(pv => ({\n ...pv,\n displayPlanFOTDtl: null,\n titlePlanFOTDtl: null,\n displayPlanJobsDtl: null,\n titlePlanJobsDtl: null\n }));\n\n //При нажатии на плановую трудоёмкость по ФОТ\n const handleLabPlanFOTClick = ({\n sender\n }) => setState(pv => ({\n ...pv,\n displayPlanFOTDtl: sender.NRN,\n titlePlanFOTDtl: `${sender.SPERIOD} - ${sender.SINS_DEPARTMENT} - ${sender.SFCMANPOWER} - ${sender.NLAB_PLAN_FOT}`\n }));\n\n //При нажатии на проект в списке детализации плановой трудоёмкости по графику\n const handleLabPlanJobsClick = ({\n sender\n }) => setState(pv => ({\n ...pv,\n displayPlanJobsDtl: sender.NRN,\n titlePlanJobsDtl: `${sender.SPERIOD} - ${sender.SINS_DEPARTMENT} - ${sender.SFCMANPOWER} - ${sender.NLAB_PLAN_JOBS}`\n }));\n\n //При изменении состояния сортировки в таблице периодов балансировки\n const handlePeriodsOrderChanged = ({\n orders\n }) => setPeriods(pv => ({\n ...pv,\n orders,\n pageNumber: 1,\n reload: true\n }));\n\n //При изменении количества отображаемых страниц в таблице периодов балансировки\n const handlePeriodsPagesCountChanged = () => setPeriods(pv => ({\n ...pv,\n pageNumber: pv.pageNumber + 1,\n reload: true\n }));\n\n //При нажатии на проект в таблице детализации трудоёмкости по плану-графику\n const handlePlanJobsDtlProjectClick = ({\n sender\n }) => onPlanJobsDtlProjectClick ? onPlanJobsDtlProjectClick({\n sender\n }) : null;\n\n //При необходимости обновить данные\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n loadPeriods();\n }, [peridos.reload, loadPeriods]);\n\n //Генерация содержимого\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), null, peridos.dataLoaded ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_components_p8p_data_grid__WEBPACK_IMPORTED_MODULE_5__.P8PDataGrid, _extends({}, _config_wrapper__WEBPACK_IMPORTED_MODULE_4__.P8P_DATA_GRID_CONFIG_PROPS, {\n columnsDef: peridos.columnsDef,\n rows: peridos.rows,\n size: _components_p8p_data_grid__WEBPACK_IMPORTED_MODULE_5__.P8P_DATA_GRID_SIZE.SMALL,\n morePages: peridos.morePages,\n reloading: peridos.reload,\n onOrderChanged: handlePeriodsOrderChanged,\n onPagesCountChanged: handlePeriodsPagesCountChanged,\n dataCellRender: prms => periodsDataCellRender({\n ...prms,\n onLabPlanFOTClick: handleLabPlanFOTClick,\n onLabPlanJobsClick: handleLabPlanJobsClick\n })\n })) : null, state.displayPlanFOTDtl ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_lab_plan_fot_dtl__WEBPACK_IMPORTED_MODULE_6__.LabPlanFOTDtl, {\n periodId: state.displayPlanFOTDtl,\n title: state.titlePlanFOTDtl,\n onHide: handleHideDtl\n }) : null, state.displayPlanJobsDtl ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_lab_plan_jobs_dtl__WEBPACK_IMPORTED_MODULE_7__.LabPlanJobsDtl, {\n periodId: state.displayPlanJobsDtl,\n title: state.titlePlanJobsDtl,\n onHide: handleHideDtl,\n onProjectClick: handlePlanJobsDtlProjectClick\n }) : null);\n};\n\n//Контроль свойств - Монитор ресурсов\nResMon.propTypes = {\n ident: (prop_types__WEBPACK_IMPORTED_MODULE_11___default().number).isRequired,\n onPlanJobsDtlProjectClick: (prop_types__WEBPACK_IMPORTED_MODULE_11___default().func)\n};\n\n//----------------\n//Интерфейс модуля\n//----------------\n\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/panels/prj_jobs/res_mon.js?"); /***/ }), From afbfb45475bcf5a812743a4cc80001822462aeb9 Mon Sep 17 00:00:00 2001 From: davay-popozhe Date: Wed, 17 Apr 2024 19:04:03 +0300 Subject: [PATCH 06/76] =?UTF-8?q?=D0=A6=D0=98=D0=A2=D0=9A-791=20+=20=D0=A6?= =?UTF-8?q?=D0=98=D0=A2=D0=9A-834?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- dist/p8-panels.js | 34 ++++++++++++++++++++++++++++------ 1 file changed, 28 insertions(+), 6 deletions(-) diff --git a/dist/p8-panels.js b/dist/p8-panels.js index 3934950..88fb56f 100644 --- a/dist/p8-panels.js +++ b/dist/p8-panels.js @@ -15,7 +15,7 @@ \***********************************/ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { -eval("var map = {\n\t\"./dummy\": \"./app/panels/dummy/index.js\",\n\t\"./dummy/\": \"./app/panels/dummy/index.js\",\n\t\"./dummy/dummy\": \"./app/panels/dummy/dummy.js\",\n\t\"./dummy/dummy.js\": \"./app/panels/dummy/dummy.js\",\n\t\"./dummy/index\": \"./app/panels/dummy/index.js\",\n\t\"./dummy/index.js\": \"./app/panels/dummy/index.js\",\n\t\"./eqs_prfrm\": \"./app/panels/eqs_prfrm/index.js\",\n\t\"./eqs_prfrm/\": \"./app/panels/eqs_prfrm/index.js\",\n\t\"./eqs_prfrm/eqs_prfrm\": \"./app/panels/eqs_prfrm/eqs_prfrm.js\",\n\t\"./eqs_prfrm/eqs_prfrm.js\": \"./app/panels/eqs_prfrm/eqs_prfrm.js\",\n\t\"./eqs_prfrm/index\": \"./app/panels/eqs_prfrm/index.js\",\n\t\"./eqs_prfrm/index.js\": \"./app/panels/eqs_prfrm/index.js\",\n\t\"./eqs_prfrm/layouts\": \"./app/panels/eqs_prfrm/layouts.js\",\n\t\"./eqs_prfrm/layouts.js\": \"./app/panels/eqs_prfrm/layouts.js\",\n\t\"./mech_rec_cost_prod_plans\": \"./app/panels/mech_rec_cost_prod_plans/index.js\",\n\t\"./mech_rec_cost_prod_plans/\": \"./app/panels/mech_rec_cost_prod_plans/index.js\",\n\t\"./mech_rec_cost_prod_plans/datagrids/backend_dg\": \"./app/panels/mech_rec_cost_prod_plans/datagrids/backend_dg.js\",\n\t\"./mech_rec_cost_prod_plans/datagrids/backend_dg.js\": \"./app/panels/mech_rec_cost_prod_plans/datagrids/backend_dg.js\",\n\t\"./mech_rec_cost_prod_plans/datagrids/fcdeliverylistsp\": \"./app/panels/mech_rec_cost_prod_plans/datagrids/fcdeliverylistsp.js\",\n\t\"./mech_rec_cost_prod_plans/datagrids/fcdeliverylistsp.js\": \"./app/panels/mech_rec_cost_prod_plans/datagrids/fcdeliverylistsp.js\",\n\t\"./mech_rec_cost_prod_plans/datagrids/fcroutlst\": \"./app/panels/mech_rec_cost_prod_plans/datagrids/fcroutlst.js\",\n\t\"./mech_rec_cost_prod_plans/datagrids/fcroutlst.js\": \"./app/panels/mech_rec_cost_prod_plans/datagrids/fcroutlst.js\",\n\t\"./mech_rec_cost_prod_plans/datagrids/goodparties\": \"./app/panels/mech_rec_cost_prod_plans/datagrids/goodparties.js\",\n\t\"./mech_rec_cost_prod_plans/datagrids/goodparties.js\": \"./app/panels/mech_rec_cost_prod_plans/datagrids/goodparties.js\",\n\t\"./mech_rec_cost_prod_plans/datagrids/incomefromdeps\": \"./app/panels/mech_rec_cost_prod_plans/datagrids/incomefromdeps.js\",\n\t\"./mech_rec_cost_prod_plans/datagrids/incomefromdeps.js\": \"./app/panels/mech_rec_cost_prod_plans/datagrids/incomefromdeps.js\",\n\t\"./mech_rec_cost_prod_plans/hooks\": \"./app/panels/mech_rec_cost_prod_plans/hooks.js\",\n\t\"./mech_rec_cost_prod_plans/hooks.js\": \"./app/panels/mech_rec_cost_prod_plans/hooks.js\",\n\t\"./mech_rec_cost_prod_plans/index\": \"./app/panels/mech_rec_cost_prod_plans/index.js\",\n\t\"./mech_rec_cost_prod_plans/index.js\": \"./app/panels/mech_rec_cost_prod_plans/index.js\",\n\t\"./mech_rec_cost_prod_plans/mech_rec_cost_prod_plans\": \"./app/panels/mech_rec_cost_prod_plans/mech_rec_cost_prod_plans.js\",\n\t\"./mech_rec_cost_prod_plans/mech_rec_cost_prod_plans.js\": \"./app/panels/mech_rec_cost_prod_plans/mech_rec_cost_prod_plans.js\",\n\t\"./prj_fin\": \"./app/panels/prj_fin/index.js\",\n\t\"./prj_fin/\": \"./app/panels/prj_fin/index.js\",\n\t\"./prj_fin/index\": \"./app/panels/prj_fin/index.js\",\n\t\"./prj_fin/index.js\": \"./app/panels/prj_fin/index.js\",\n\t\"./prj_fin/layouts\": \"./app/panels/prj_fin/layouts.js\",\n\t\"./prj_fin/layouts.js\": \"./app/panels/prj_fin/layouts.js\",\n\t\"./prj_fin/prj_fin\": \"./app/panels/prj_fin/prj_fin.js\",\n\t\"./prj_fin/prj_fin.js\": \"./app/panels/prj_fin/prj_fin.js\",\n\t\"./prj_fin/projects\": \"./app/panels/prj_fin/projects.js\",\n\t\"./prj_fin/projects.js\": \"./app/panels/prj_fin/projects.js\",\n\t\"./prj_fin/stage_arts\": \"./app/panels/prj_fin/stage_arts.js\",\n\t\"./prj_fin/stage_arts.js\": \"./app/panels/prj_fin/stage_arts.js\",\n\t\"./prj_fin/stage_contracts\": \"./app/panels/prj_fin/stage_contracts.js\",\n\t\"./prj_fin/stage_contracts.js\": \"./app/panels/prj_fin/stage_contracts.js\",\n\t\"./prj_fin/stages\": \"./app/panels/prj_fin/stages.js\",\n\t\"./prj_fin/stages.js\": \"./app/panels/prj_fin/stages.js\",\n\t\"./prj_graph\": \"./app/panels/prj_graph/index.js\",\n\t\"./prj_graph/\": \"./app/panels/prj_graph/index.js\",\n\t\"./prj_graph/index\": \"./app/panels/prj_graph/index.js\",\n\t\"./prj_graph/index.js\": \"./app/panels/prj_graph/index.js\",\n\t\"./prj_graph/layouts\": \"./app/panels/prj_graph/layouts.js\",\n\t\"./prj_graph/layouts.js\": \"./app/panels/prj_graph/layouts.js\",\n\t\"./prj_graph/prj_graph\": \"./app/panels/prj_graph/prj_graph.js\",\n\t\"./prj_graph/prj_graph.js\": \"./app/panels/prj_graph/prj_graph.js\",\n\t\"./prj_help\": \"./app/panels/prj_help/index.js\",\n\t\"./prj_help/\": \"./app/panels/prj_help/index.js\",\n\t\"./prj_help/img/211.png\": \"./app/panels/prj_help/img/211.png\",\n\t\"./prj_help/img/212.png\": \"./app/panels/prj_help/img/212.png\",\n\t\"./prj_help/img/213.png\": \"./app/panels/prj_help/img/213.png\",\n\t\"./prj_help/img/214.png\": \"./app/panels/prj_help/img/214.png\",\n\t\"./prj_help/img/215.png\": \"./app/panels/prj_help/img/215.png\",\n\t\"./prj_help/img/221.png\": \"./app/panels/prj_help/img/221.png\",\n\t\"./prj_help/img/222.png\": \"./app/panels/prj_help/img/222.png\",\n\t\"./prj_help/img/223.png\": \"./app/panels/prj_help/img/223.png\",\n\t\"./prj_help/img/231.png\": \"./app/panels/prj_help/img/231.png\",\n\t\"./prj_help/img/232.png\": \"./app/panels/prj_help/img/232.png\",\n\t\"./prj_help/img/241.png\": \"./app/panels/prj_help/img/241.png\",\n\t\"./prj_help/img/242.png\": \"./app/panels/prj_help/img/242.png\",\n\t\"./prj_help/img/243.png\": \"./app/panels/prj_help/img/243.png\",\n\t\"./prj_help/img/244.png\": \"./app/panels/prj_help/img/244.png\",\n\t\"./prj_help/img/245.png\": \"./app/panels/prj_help/img/245.png\",\n\t\"./prj_help/img/31.png\": \"./app/panels/prj_help/img/31.png\",\n\t\"./prj_help/img/32.png\": \"./app/panels/prj_help/img/32.png\",\n\t\"./prj_help/img/33.png\": \"./app/panels/prj_help/img/33.png\",\n\t\"./prj_help/img/34.png\": \"./app/panels/prj_help/img/34.png\",\n\t\"./prj_help/img/35.png\": \"./app/panels/prj_help/img/35.png\",\n\t\"./prj_help/img/36.png\": \"./app/panels/prj_help/img/36.png\",\n\t\"./prj_help/img/411.png\": \"./app/panels/prj_help/img/411.png\",\n\t\"./prj_help/img/412.png\": \"./app/panels/prj_help/img/412.png\",\n\t\"./prj_help/img/421.png\": \"./app/panels/prj_help/img/421.png\",\n\t\"./prj_help/img/422.png\": \"./app/panels/prj_help/img/422.png\",\n\t\"./prj_help/img/431.png\": \"./app/panels/prj_help/img/431.png\",\n\t\"./prj_help/img/432.png\": \"./app/panels/prj_help/img/432.png\",\n\t\"./prj_help/img/433.png\": \"./app/panels/prj_help/img/433.png\",\n\t\"./prj_help/img/434.png\": \"./app/panels/prj_help/img/434.png\",\n\t\"./prj_help/img/441.png\": \"./app/panels/prj_help/img/441.png\",\n\t\"./prj_help/img/442.png\": \"./app/panels/prj_help/img/442.png\",\n\t\"./prj_help/img/443.png\": \"./app/panels/prj_help/img/443.png\",\n\t\"./prj_help/img/444.png\": \"./app/panels/prj_help/img/444.png\",\n\t\"./prj_help/img/451.png\": \"./app/panels/prj_help/img/451.png\",\n\t\"./prj_help/img/461.png\": \"./app/panels/prj_help/img/461.png\",\n\t\"./prj_help/img/471.png\": \"./app/panels/prj_help/img/471.png\",\n\t\"./prj_help/img/711.png\": \"./app/panels/prj_help/img/711.png\",\n\t\"./prj_help/img/721.png\": \"./app/panels/prj_help/img/721.png\",\n\t\"./prj_help/img/722.png\": \"./app/panels/prj_help/img/722.png\",\n\t\"./prj_help/img/723.png\": \"./app/panels/prj_help/img/723.png\",\n\t\"./prj_help/img/741.png\": \"./app/panels/prj_help/img/741.png\",\n\t\"./prj_help/index\": \"./app/panels/prj_help/index.js\",\n\t\"./prj_help/index.js\": \"./app/panels/prj_help/index.js\",\n\t\"./prj_help/prj_help\": \"./app/panels/prj_help/prj_help.js\",\n\t\"./prj_help/prj_help.js\": \"./app/panels/prj_help/prj_help.js\",\n\t\"./prj_jobs\": \"./app/panels/prj_jobs/index.js\",\n\t\"./prj_jobs/\": \"./app/panels/prj_jobs/index.js\",\n\t\"./prj_jobs/index\": \"./app/panels/prj_jobs/index.js\",\n\t\"./prj_jobs/index.js\": \"./app/panels/prj_jobs/index.js\",\n\t\"./prj_jobs/lab_plan_fot_dtl\": \"./app/panels/prj_jobs/lab_plan_fot_dtl.js\",\n\t\"./prj_jobs/lab_plan_fot_dtl.js\": \"./app/panels/prj_jobs/lab_plan_fot_dtl.js\",\n\t\"./prj_jobs/lab_plan_jobs_dtl\": \"./app/panels/prj_jobs/lab_plan_jobs_dtl.js\",\n\t\"./prj_jobs/lab_plan_jobs_dtl.js\": \"./app/panels/prj_jobs/lab_plan_jobs_dtl.js\",\n\t\"./prj_jobs/prj_jobs\": \"./app/panels/prj_jobs/prj_jobs.js\",\n\t\"./prj_jobs/prj_jobs.js\": \"./app/panels/prj_jobs/prj_jobs.js\",\n\t\"./prj_jobs/res_mon\": \"./app/panels/prj_jobs/res_mon.js\",\n\t\"./prj_jobs/res_mon.js\": \"./app/panels/prj_jobs/res_mon.js\",\n\t\"./samples\": \"./app/panels/samples/index.js\",\n\t\"./samples/\": \"./app/panels/samples/index.js\",\n\t\"./samples/chart\": \"./app/panels/samples/chart.js\",\n\t\"./samples/chart.js\": \"./app/panels/samples/chart.js\",\n\t\"./samples/data_grid\": \"./app/panels/samples/data_grid.js\",\n\t\"./samples/data_grid.js\": \"./app/panels/samples/data_grid.js\",\n\t\"./samples/gantt\": \"./app/panels/samples/gantt.js\",\n\t\"./samples/gantt.js\": \"./app/panels/samples/gantt.js\",\n\t\"./samples/index\": \"./app/panels/samples/index.js\",\n\t\"./samples/index.js\": \"./app/panels/samples/index.js\",\n\t\"./samples/loader\": \"./app/panels/samples/loader.js\",\n\t\"./samples/loader.js\": \"./app/panels/samples/loader.js\",\n\t\"./samples/messages\": \"./app/panels/samples/messages.js\",\n\t\"./samples/messages.js\": \"./app/panels/samples/messages.js\",\n\t\"./samples/mui\": \"./app/panels/samples/mui.js\",\n\t\"./samples/mui.js\": \"./app/panels/samples/mui.js\",\n\t\"./samples/p8online\": \"./app/panels/samples/p8online.js\",\n\t\"./samples/p8online.js\": \"./app/panels/samples/p8online.js\",\n\t\"./samples/samples\": \"./app/panels/samples/samples.js\",\n\t\"./samples/samples.js\": \"./app/panels/samples/samples.js\"\n};\n\n\nfunction webpackContext(req) {\n\tvar id = webpackContextResolve(req);\n\treturn __webpack_require__(id);\n}\nfunction webpackContextResolve(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t}\n\treturn map[req];\n}\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = \"./app/panels sync recursive ^\\\\.\\\\/.*$\";\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/panels/_sync_^\\.\\/.*$?"); +eval("var map = {\n\t\"./dummy\": \"./app/panels/dummy/index.js\",\n\t\"./dummy/\": \"./app/panels/dummy/index.js\",\n\t\"./dummy/dummy\": \"./app/panels/dummy/dummy.js\",\n\t\"./dummy/dummy.js\": \"./app/panels/dummy/dummy.js\",\n\t\"./dummy/index\": \"./app/panels/dummy/index.js\",\n\t\"./dummy/index.js\": \"./app/panels/dummy/index.js\",\n\t\"./eqs_prfrm\": \"./app/panels/eqs_prfrm/index.js\",\n\t\"./eqs_prfrm/\": \"./app/panels/eqs_prfrm/index.js\",\n\t\"./eqs_prfrm/eqs_prfrm\": \"./app/panels/eqs_prfrm/eqs_prfrm.js\",\n\t\"./eqs_prfrm/eqs_prfrm.js\": \"./app/panels/eqs_prfrm/eqs_prfrm.js\",\n\t\"./eqs_prfrm/index\": \"./app/panels/eqs_prfrm/index.js\",\n\t\"./eqs_prfrm/index.js\": \"./app/panels/eqs_prfrm/index.js\",\n\t\"./eqs_prfrm/layouts\": \"./app/panels/eqs_prfrm/layouts.js\",\n\t\"./eqs_prfrm/layouts.js\": \"./app/panels/eqs_prfrm/layouts.js\",\n\t\"./mech_rec_cost_prod_plans\": \"./app/panels/mech_rec_cost_prod_plans/index.js\",\n\t\"./mech_rec_cost_prod_plans/\": \"./app/panels/mech_rec_cost_prod_plans/index.js\",\n\t\"./mech_rec_cost_prod_plans/datagrids/backend_dg\": \"./app/panels/mech_rec_cost_prod_plans/datagrids/backend_dg.js\",\n\t\"./mech_rec_cost_prod_plans/datagrids/backend_dg.js\": \"./app/panels/mech_rec_cost_prod_plans/datagrids/backend_dg.js\",\n\t\"./mech_rec_cost_prod_plans/datagrids/fcdeliverylistsp\": \"./app/panels/mech_rec_cost_prod_plans/datagrids/fcdeliverylistsp.js\",\n\t\"./mech_rec_cost_prod_plans/datagrids/fcdeliverylistsp.js\": \"./app/panels/mech_rec_cost_prod_plans/datagrids/fcdeliverylistsp.js\",\n\t\"./mech_rec_cost_prod_plans/datagrids/fcroutlst\": \"./app/panels/mech_rec_cost_prod_plans/datagrids/fcroutlst.js\",\n\t\"./mech_rec_cost_prod_plans/datagrids/fcroutlst.js\": \"./app/panels/mech_rec_cost_prod_plans/datagrids/fcroutlst.js\",\n\t\"./mech_rec_cost_prod_plans/datagrids/goodparties\": \"./app/panels/mech_rec_cost_prod_plans/datagrids/goodparties.js\",\n\t\"./mech_rec_cost_prod_plans/datagrids/goodparties.js\": \"./app/panels/mech_rec_cost_prod_plans/datagrids/goodparties.js\",\n\t\"./mech_rec_cost_prod_plans/datagrids/incomefromdeps\": \"./app/panels/mech_rec_cost_prod_plans/datagrids/incomefromdeps.js\",\n\t\"./mech_rec_cost_prod_plans/datagrids/incomefromdeps.js\": \"./app/panels/mech_rec_cost_prod_plans/datagrids/incomefromdeps.js\",\n\t\"./mech_rec_cost_prod_plans/hooks\": \"./app/panels/mech_rec_cost_prod_plans/hooks.js\",\n\t\"./mech_rec_cost_prod_plans/hooks.js\": \"./app/panels/mech_rec_cost_prod_plans/hooks.js\",\n\t\"./mech_rec_cost_prod_plans/index\": \"./app/panels/mech_rec_cost_prod_plans/index.js\",\n\t\"./mech_rec_cost_prod_plans/index.js\": \"./app/panels/mech_rec_cost_prod_plans/index.js\",\n\t\"./mech_rec_cost_prod_plans/mech_rec_cost_prod_plans\": \"./app/panels/mech_rec_cost_prod_plans/mech_rec_cost_prod_plans.js\",\n\t\"./mech_rec_cost_prod_plans/mech_rec_cost_prod_plans.js\": \"./app/panels/mech_rec_cost_prod_plans/mech_rec_cost_prod_plans.js\",\n\t\"./prj_fin\": \"./app/panels/prj_fin/index.js\",\n\t\"./prj_fin/\": \"./app/panels/prj_fin/index.js\",\n\t\"./prj_fin/index\": \"./app/panels/prj_fin/index.js\",\n\t\"./prj_fin/index.js\": \"./app/panels/prj_fin/index.js\",\n\t\"./prj_fin/layouts\": \"./app/panels/prj_fin/layouts.js\",\n\t\"./prj_fin/layouts.js\": \"./app/panels/prj_fin/layouts.js\",\n\t\"./prj_fin/prj_fin\": \"./app/panels/prj_fin/prj_fin.js\",\n\t\"./prj_fin/prj_fin.js\": \"./app/panels/prj_fin/prj_fin.js\",\n\t\"./prj_fin/projects\": \"./app/panels/prj_fin/projects.js\",\n\t\"./prj_fin/projects.js\": \"./app/panels/prj_fin/projects.js\",\n\t\"./prj_fin/stage_arts\": \"./app/panels/prj_fin/stage_arts.js\",\n\t\"./prj_fin/stage_arts.js\": \"./app/panels/prj_fin/stage_arts.js\",\n\t\"./prj_fin/stage_contracts\": \"./app/panels/prj_fin/stage_contracts.js\",\n\t\"./prj_fin/stage_contracts.js\": \"./app/panels/prj_fin/stage_contracts.js\",\n\t\"./prj_fin/stages\": \"./app/panels/prj_fin/stages.js\",\n\t\"./prj_fin/stages.js\": \"./app/panels/prj_fin/stages.js\",\n\t\"./prj_graph\": \"./app/panels/prj_graph/index.js\",\n\t\"./prj_graph/\": \"./app/panels/prj_graph/index.js\",\n\t\"./prj_graph/index\": \"./app/panels/prj_graph/index.js\",\n\t\"./prj_graph/index.js\": \"./app/panels/prj_graph/index.js\",\n\t\"./prj_graph/layouts\": \"./app/panels/prj_graph/layouts.js\",\n\t\"./prj_graph/layouts.js\": \"./app/panels/prj_graph/layouts.js\",\n\t\"./prj_graph/prj_graph\": \"./app/panels/prj_graph/prj_graph.js\",\n\t\"./prj_graph/prj_graph.js\": \"./app/panels/prj_graph/prj_graph.js\",\n\t\"./prj_help\": \"./app/panels/prj_help/index.js\",\n\t\"./prj_help/\": \"./app/panels/prj_help/index.js\",\n\t\"./prj_help/img/211.png\": \"./app/panels/prj_help/img/211.png\",\n\t\"./prj_help/img/212.png\": \"./app/panels/prj_help/img/212.png\",\n\t\"./prj_help/img/213.png\": \"./app/panels/prj_help/img/213.png\",\n\t\"./prj_help/img/214.png\": \"./app/panels/prj_help/img/214.png\",\n\t\"./prj_help/img/215.png\": \"./app/panels/prj_help/img/215.png\",\n\t\"./prj_help/img/221.png\": \"./app/panels/prj_help/img/221.png\",\n\t\"./prj_help/img/222.png\": \"./app/panels/prj_help/img/222.png\",\n\t\"./prj_help/img/223.png\": \"./app/panels/prj_help/img/223.png\",\n\t\"./prj_help/img/231.png\": \"./app/panels/prj_help/img/231.png\",\n\t\"./prj_help/img/232.png\": \"./app/panels/prj_help/img/232.png\",\n\t\"./prj_help/img/241.png\": \"./app/panels/prj_help/img/241.png\",\n\t\"./prj_help/img/242.png\": \"./app/panels/prj_help/img/242.png\",\n\t\"./prj_help/img/243.png\": \"./app/panels/prj_help/img/243.png\",\n\t\"./prj_help/img/244.png\": \"./app/panels/prj_help/img/244.png\",\n\t\"./prj_help/img/245.png\": \"./app/panels/prj_help/img/245.png\",\n\t\"./prj_help/img/31.png\": \"./app/panels/prj_help/img/31.png\",\n\t\"./prj_help/img/32.png\": \"./app/panels/prj_help/img/32.png\",\n\t\"./prj_help/img/33.png\": \"./app/panels/prj_help/img/33.png\",\n\t\"./prj_help/img/34.png\": \"./app/panels/prj_help/img/34.png\",\n\t\"./prj_help/img/35.png\": \"./app/panels/prj_help/img/35.png\",\n\t\"./prj_help/img/36.png\": \"./app/panels/prj_help/img/36.png\",\n\t\"./prj_help/img/411.png\": \"./app/panels/prj_help/img/411.png\",\n\t\"./prj_help/img/412.png\": \"./app/panels/prj_help/img/412.png\",\n\t\"./prj_help/img/421.png\": \"./app/panels/prj_help/img/421.png\",\n\t\"./prj_help/img/422.png\": \"./app/panels/prj_help/img/422.png\",\n\t\"./prj_help/img/431.png\": \"./app/panels/prj_help/img/431.png\",\n\t\"./prj_help/img/432.png\": \"./app/panels/prj_help/img/432.png\",\n\t\"./prj_help/img/433.png\": \"./app/panels/prj_help/img/433.png\",\n\t\"./prj_help/img/434.png\": \"./app/panels/prj_help/img/434.png\",\n\t\"./prj_help/img/441.png\": \"./app/panels/prj_help/img/441.png\",\n\t\"./prj_help/img/442.png\": \"./app/panels/prj_help/img/442.png\",\n\t\"./prj_help/img/443.png\": \"./app/panels/prj_help/img/443.png\",\n\t\"./prj_help/img/444.png\": \"./app/panels/prj_help/img/444.png\",\n\t\"./prj_help/img/451.png\": \"./app/panels/prj_help/img/451.png\",\n\t\"./prj_help/img/461.png\": \"./app/panels/prj_help/img/461.png\",\n\t\"./prj_help/img/471.png\": \"./app/panels/prj_help/img/471.png\",\n\t\"./prj_help/img/711.png\": \"./app/panels/prj_help/img/711.png\",\n\t\"./prj_help/img/721.png\": \"./app/panels/prj_help/img/721.png\",\n\t\"./prj_help/img/722.png\": \"./app/panels/prj_help/img/722.png\",\n\t\"./prj_help/img/723.png\": \"./app/panels/prj_help/img/723.png\",\n\t\"./prj_help/img/741.png\": \"./app/panels/prj_help/img/741.png\",\n\t\"./prj_help/index\": \"./app/panels/prj_help/index.js\",\n\t\"./prj_help/index.js\": \"./app/panels/prj_help/index.js\",\n\t\"./prj_help/prj_help\": \"./app/panels/prj_help/prj_help.js\",\n\t\"./prj_help/prj_help.js\": \"./app/panels/prj_help/prj_help.js\",\n\t\"./prj_jobs\": \"./app/panels/prj_jobs/index.js\",\n\t\"./prj_jobs/\": \"./app/panels/prj_jobs/index.js\",\n\t\"./prj_jobs/index\": \"./app/panels/prj_jobs/index.js\",\n\t\"./prj_jobs/index.js\": \"./app/panels/prj_jobs/index.js\",\n\t\"./prj_jobs/lab_fact_rpt_dtl\": \"./app/panels/prj_jobs/lab_fact_rpt_dtl.js\",\n\t\"./prj_jobs/lab_fact_rpt_dtl.js\": \"./app/panels/prj_jobs/lab_fact_rpt_dtl.js\",\n\t\"./prj_jobs/lab_plan_fot_dtl\": \"./app/panels/prj_jobs/lab_plan_fot_dtl.js\",\n\t\"./prj_jobs/lab_plan_fot_dtl.js\": \"./app/panels/prj_jobs/lab_plan_fot_dtl.js\",\n\t\"./prj_jobs/lab_plan_jobs_dtl\": \"./app/panels/prj_jobs/lab_plan_jobs_dtl.js\",\n\t\"./prj_jobs/lab_plan_jobs_dtl.js\": \"./app/panels/prj_jobs/lab_plan_jobs_dtl.js\",\n\t\"./prj_jobs/layouts\": \"./app/panels/prj_jobs/layouts.js\",\n\t\"./prj_jobs/layouts.js\": \"./app/panels/prj_jobs/layouts.js\",\n\t\"./prj_jobs/prj_jobs\": \"./app/panels/prj_jobs/prj_jobs.js\",\n\t\"./prj_jobs/prj_jobs.js\": \"./app/panels/prj_jobs/prj_jobs.js\",\n\t\"./prj_jobs/res_mon\": \"./app/panels/prj_jobs/res_mon.js\",\n\t\"./prj_jobs/res_mon.js\": \"./app/panels/prj_jobs/res_mon.js\",\n\t\"./samples\": \"./app/panels/samples/index.js\",\n\t\"./samples/\": \"./app/panels/samples/index.js\",\n\t\"./samples/chart\": \"./app/panels/samples/chart.js\",\n\t\"./samples/chart.js\": \"./app/panels/samples/chart.js\",\n\t\"./samples/data_grid\": \"./app/panels/samples/data_grid.js\",\n\t\"./samples/data_grid.js\": \"./app/panels/samples/data_grid.js\",\n\t\"./samples/gantt\": \"./app/panels/samples/gantt.js\",\n\t\"./samples/gantt.js\": \"./app/panels/samples/gantt.js\",\n\t\"./samples/index\": \"./app/panels/samples/index.js\",\n\t\"./samples/index.js\": \"./app/panels/samples/index.js\",\n\t\"./samples/loader\": \"./app/panels/samples/loader.js\",\n\t\"./samples/loader.js\": \"./app/panels/samples/loader.js\",\n\t\"./samples/messages\": \"./app/panels/samples/messages.js\",\n\t\"./samples/messages.js\": \"./app/panels/samples/messages.js\",\n\t\"./samples/mui\": \"./app/panels/samples/mui.js\",\n\t\"./samples/mui.js\": \"./app/panels/samples/mui.js\",\n\t\"./samples/p8online\": \"./app/panels/samples/p8online.js\",\n\t\"./samples/p8online.js\": \"./app/panels/samples/p8online.js\",\n\t\"./samples/samples\": \"./app/panels/samples/samples.js\",\n\t\"./samples/samples.js\": \"./app/panels/samples/samples.js\"\n};\n\n\nfunction webpackContext(req) {\n\tvar id = webpackContextResolve(req);\n\treturn __webpack_require__(id);\n}\nfunction webpackContextResolve(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t}\n\treturn map[req];\n}\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = \"./app/panels sync recursive ^\\\\.\\\\/.*$\";\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/panels/_sync_^\\.\\/.*$?"); /***/ }), @@ -3502,7 +3502,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ EqsPrfrm: () => (/* binding */ EqsPrfrm)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Dialog/Dialog.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/DialogTitle/DialogTitle.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/IconButton/IconButton.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Icon/Icon.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/DialogContent/DialogContent.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Paper/Paper.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Box/Box.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/FormControl/FormControl.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/InputLabel/InputLabel.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/OutlinedInput/OutlinedInput.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/InputAdornment/InputAdornment.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/FormHelperText/FormHelperText.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Grid/Grid.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Select/Select.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_22__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/MenuItem/MenuItem.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_23__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/DialogActions/DialogActions.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_24__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Button/Button.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_25__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Link/Link.js\");\n/* harmony import */ var _components_p8p_data_grid__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../components/p8p_data_grid */ \"./app/components/p8p_data_grid.js\");\n/* harmony import */ var _config_wrapper__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../config_wrapper */ \"./app/config_wrapper.js\");\n/* harmony import */ var _context_backend__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../context/backend */ \"./app/context/backend.js\");\n/* harmony import */ var _context_application__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../context/application */ \"./app/context/application.js\");\n/* harmony import */ var _context_messaging__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../context/messaging */ \"./app/context/messaging.js\");\n/* harmony import */ var _layouts__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./layouts */ \"./app/panels/eqs_prfrm/layouts.js\");\n/* harmony import */ var _app_text__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../../../app.text */ \"./app.text.js\");\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n/*\r\n Парус 8 - Панели мониторинга - ТОиР - Выполнение работ\r\n Панель мониторинга: Корневая панель выполнения работ\r\n*/\n\n//---------------------\n//Подключение библиотек\n//---------------------\n\n //Классы React\n\n //Таблица данных\n //Подключение компонентов к настройкам приложения\n //Контекст взаимодействия с сервером\n //Контекст приложения\n //Контекст сообщений\n //Дополнительная разметка и вёрстка клиентских элементов\n //Тектовые ресурсы и константы\n\n//-----------\n//Тело модуля\n//-----------\n\n//Корневая панель выполнения работ\nconst EqsPrfrm = () => {\n //Собственное состояние - таблица данных\n const [dataGrid, setDataGrid] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({\n dataLoaded: false,\n columnsDef: [],\n groups: [],\n rows: [],\n reload: false\n });\n\n // Состояние информации о трудоёмкости\n const [info, setInfo] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({\n cntP: 0,\n sumP: 0,\n cntF: 0,\n sumF: 0\n });\n\n // Состояние фильтра (для отладки)\n // const [filter, setFilter] = useState({\n // belong: \"Демопример\",\n // prodObj: \"Карьер\",\n // techServ: \"\",\n // respDep: \"\",\n // fromMonth: 1,\n // fromYear: 2024,\n // toMonth: 12,\n // toYear: 2024\n // });\n\n // Состояние фильтра\n const [filter, setFilter] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({\n belong: \"\",\n prodObj: \"\",\n techServ: \"\",\n respDep: \"\",\n fromMonth: 1,\n fromYear: 1990,\n toMonth: 1,\n toYear: 1990\n });\n // Состояние открытия фильтра\n const [filterOpen, setFilterOpen] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(true);\n // Состояние данных по умолчанию для фильтра (true - для отладки)\n const [defaultLoaded, setDefaultLoaded] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(false);\n // Состояние хранения копии фильтра\n const [filterCopy, setFilterCopy] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({\n ...filter\n });\n // Состояние ограничения редактирования фильтра\n const [filterLock, setFilterLock] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(false);\n\n // Состояние ячейки заголовка даты (по раскрытию/скрытию)\n const [activeRef, setActiveRef] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)();\n // Состояние актуальности ссылки на ячейку\n const [refIsDeprecated, setRidFlag] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(true);\n\n //Подключение к контексту приложения\n const {\n pOnlineShowDictionary,\n pOnlineShowUnit\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_application__WEBPACK_IMPORTED_MODULE_4__[\"ApplicationСtx\"]);\n\n //Подключение к контексту взаимодействия с сервером\n const {\n executeStored\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_backend__WEBPACK_IMPORTED_MODULE_3__[\"BackEndСtx\"]);\n\n //Подключение к контексту сообщений\n const {\n showMsgErr\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_messaging__WEBPACK_IMPORTED_MODULE_5__[\"MessagingСtx\"]);\n\n //Загрузка данных таблицы с сервера\n const loadData = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async () => {\n if (dataGrid.reload) {\n const data = await executeStored({\n stored: \"PKG_P8PANELS_EQUIPSRV.EQUIPSRV_GRID\",\n args: {\n SBELONG: filter.belong,\n SPRODOBJ: filter.prodObj,\n STECHSERV: filter.techServ,\n SRESPDEP: filter.respDep,\n NFROMMONTH: filter.fromMonth,\n NFROMYEAR: filter.fromYear,\n NTOMONTH: filter.toMonth,\n NTOYEAR: filter.toYear\n },\n respArg: \"COUT\",\n attributeValueProcessor: (name, val) => [\"caption\", \"name\", \"parent\"].includes(name) ? undefined : val\n });\n let cP = 0;\n let sP = 0;\n let cF = 0;\n let sF = 0;\n let properties = [];\n if (data.XROWS != null) {\n data.XROWS.map(row => {\n properties = [];\n Object.entries(row).forEach(([key, value]) => properties.push({\n name: key,\n data: value\n }));\n let info2 = properties.find(element => {\n return element.name === \"SINFO2\";\n });\n if (info2 != undefined) {\n if (info2.data == \"План\") {\n properties.map(p => {\n if (_layouts__WEBPACK_IMPORTED_MODULE_6__.DAY_NAME_REG_EXP.test(p.name)) cP = cP + 1;\n });\n } else if (info2.data == \"Факт\") {\n properties.map(p => {\n if (_layouts__WEBPACK_IMPORTED_MODULE_6__.DAY_NAME_REG_EXP.test(p.name)) cF = cF + 1;\n });\n }\n } else {\n properties.map(p => {\n if (_layouts__WEBPACK_IMPORTED_MODULE_6__.MONTH_NAME_REG_EXP.test(p.name)) {\n let str = p.data;\n let m = [];\n let i = 0;\n while ((m = _layouts__WEBPACK_IMPORTED_MODULE_6__.DIGITS_REG_EXP.exec(str)) != null) {\n if (i == 0) sP = sP + Number(m[0].replace(\",\", \".\"));else {\n sF = sF + Number(m[0].replace(\",\", \".\"));\n }\n i++;\n }\n }\n });\n }\n });\n }\n setInfo({\n cntP: cP,\n sumP: sP,\n cntF: cF,\n sumF: sF\n });\n setDataGrid(pv => ({\n ...pv,\n columnsDef: data.XCOLUMNS_DEF ? [...data.XCOLUMNS_DEF] : pv.columnsDef,\n rows: [...(data.XROWS || [])],\n groups: [...(data.XGROUPS || [])],\n dataLoaded: true,\n reload: false\n }));\n }\n }, [dataGrid.reload, filter, executeStored]);\n\n //Загрузка значений фильра по умолчанию\n const loadDefaultFilter = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async () => {\n const data = await executeStored({\n stored: \"PKG_P8PANELS_EQUIPSRV.GET_DEFAULT_FP\",\n respArg: \"COUT\"\n });\n setFilter(pv => ({\n ...pv,\n belong: data.JURPERS,\n fromMonth: data.MONTH,\n fromYear: data.YEAR,\n toMonth: data.MONTH,\n toYear: data.YEAR\n }));\n setDefaultLoaded(true);\n }, [executeStored]);\n\n //пользовательский параметр JuridicalPerson системы\n // const getJurPers = useCallback(async () => {\n // const data = await executeStored({\n // stored: \"PKG_P8PANELS_EQUIPSRV.GET_JUR_PERS_PRM\",\n // respArg: \"CRES\"\n // });\n // setFilter(pv => ({ ...pv, belong: data }));\n // }, [executeStored]);\n\n // Отбор документа (ТОиР или Ремонтных ведомостей) по ячейке даты\n const showEquipSrv = async ({\n date,\n workType,\n info\n }) => {\n const [techName, servKind] = info.split(\"_\");\n let type;\n if (workType == \"План\") type = 0;else type = 1;\n let [year, month, day] = date.substring(1).split(\"_\");\n\n //if (day == undefined) day = null;\n\n const data = await executeStored({\n stored: \"PKG_P8PANELS_EQUIPSRV.SELECT_EQUIPSRV\",\n args: {\n SBELONG: filter.belong,\n SPRODOBJ: filter.prodObj,\n STECHSERV: filter.techServ ? filter.techServ : null,\n SRESPDEP: filter.respDep ? filter.respDep : null,\n STECHNAME: techName,\n SSRVKIND: servKind,\n NYEAR: Number(year),\n NMONTH: Number(month),\n NDAY: day ? Number(day) : null,\n NWORKTYPE: type\n }\n });\n if (data.NIDENT) {\n if (type == 0) pOnlineShowUnit({\n unitCode: \"EquipTechServices\",\n inputParameters: [{\n name: \"in_SelectList_Ident\",\n value: data.NIDENT\n }]\n });else pOnlineShowUnit({\n unitCode: \"EquipRepairSheets\",\n inputParameters: [{\n name: \"in_Ident\",\n value: data.NIDENT\n }]\n });\n } else showMsgErr(_app_text__WEBPACK_IMPORTED_MODULE_7__.TEXTS.NO_DATA_FOUND);\n };\n\n // Открыть фильтр\n const openFilter = () => {\n setFilterOpen(true);\n };\n\n // Закрыть фильтр\n const closeFilter = e => {\n if (filterLock && e != undefined) setFilter(filterCopy);\n setFilterOpen(false);\n };\n\n // Очистить фильтр\n const clearFilter = () => {\n setFilter({\n belong: \"\",\n prodObj: \"\",\n techServ: \"\",\n respDep: \"\",\n fromMonth: \"\",\n fromYear: \"\",\n toMonth: \"\",\n toYear: \"\"\n });\n };\n\n // Отработка события скрытия/раскрытия ячейки даты\n const handleClick = (e, ref) => {\n const curCell = ref.current;\n if (e.target.type == \"button\" || e.target.offsetParent.type == \"button\") {\n setActiveRef(curCell);\n setRidFlag(false);\n }\n };\n\n // При необходимости обновить данные таблицы\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n loadData();\n }, [loadData, dataGrid.reload]);\n\n // При открытом фильтре\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n if (filterOpen) {\n {\n setFilterCopy({\n ...filter\n });\n if (!defaultLoaded) loadDefaultFilter();\n }\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [filterOpen]);\n\n // При нажатии скрытии/раскрытии ячейки даты, фокус на неё\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n if (!refIsDeprecated) {\n if (activeRef) {\n var cellRect = activeRef.getBoundingClientRect();\n //console.log(window.scrollX + cellRect.left + activeRef.clientWidth / 2 - window.innerWidth / 2);\n window.scrollTo(window.scrollX + cellRect.left + activeRef.clientWidth / 2 - window.innerWidth / 2, 0);\n setRidFlag(true);\n }\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [refIsDeprecated]);\n let yearArray = [];\n const monthArray = [\"Январь\", \"Февраль\", \"Март\", \"Апрель\", \"Май\", \"Июнь\", \"Июль\", \"Август\", \"Сентябрь\", \"Октябрь\", \"Ноябрь\", \"Декабрь\"];\n let today = new Date();\n\n // Получение списка лет\n const getYearArray = () => {\n for (let i = 1990; i <= today.getFullYear(); i++) {\n yearArray.push(i);\n }\n };\n\n //Генерация содержимого\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", null, getYearArray(), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_8__[\"default\"], {\n open: filterOpen,\n onClose: closeFilter\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_9__[\"default\"], null, \"\\u0424\\u0438\\u043B\\u044C\\u0442\\u0440 \\u043E\\u0442\\u0431\\u043E\\u0440\\u0430\"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_10__[\"default\"], {\n \"aria-label\": \"close\",\n onClick: closeFilter,\n sx: {\n position: \"absolute\",\n right: 8,\n top: 8,\n color: theme => theme.palette.grey[500]\n }\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_11__[\"default\"], null, \"close\")), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_12__[\"default\"], null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_13__[\"default\"], null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_14__[\"default\"], {\n component: \"section\",\n sx: {\n p: 1\n }\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_15__[\"default\"], {\n readOnly: true,\n fullWidth: true,\n variant: \"outlined\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_16__[\"default\"], {\n htmlFor: \"belong-outlined\"\n }, \"\\u041F\\u0440\\u0438\\u043D\\u0430\\u0434\\u043B\\u0435\\u0436\\u043D\\u043E\\u0441\\u0442\\u044C\"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_17__[\"default\"], {\n error: filter.belong ? false : true,\n id: \"belong-outlined\",\n value: filter.belong,\n endAdornment: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_18__[\"default\"], {\n position: \"end\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_10__[\"default\"], {\n \"aria-label\": \"belong select\",\n onClick: () => {\n pOnlineShowDictionary({\n unitCode: \"JuridicalPersons\",\n callBack: res => res.success === true ? setFilter(pv => ({\n ...pv,\n belong: res.outParameters.out_CODE\n })) : null\n });\n },\n edge: \"end\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_11__[\"default\"], null, \"list\"))),\n \"aria-describedby\": \"belong-outlined-helper-text\",\n label: \"\\u041F\\u0440\\u0438\\u043D\\u0430\\u0434\\u043B\\u0435\\u0436\\u043D\\u043E\\u0441\\u0442\\u044C\"\n }), filter.belong ? null : /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_19__[\"default\"], {\n id: \"belong-outlined-helper-text\",\n sx: {\n color: \"red\"\n }\n }, \"*\\u041E\\u0431\\u044F\\u0437\\u0430\\u0442\\u0435\\u043B\\u044C\\u043D\\u043E\\u0435 \\u043F\\u043E\\u043B\\u0435\"))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_14__[\"default\"], {\n component: \"section\",\n sx: {\n p: 1\n }\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_15__[\"default\"], {\n readOnly: true,\n fullWidth: true\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_16__[\"default\"], {\n htmlFor: \"prodObj-outlined\"\n }, \"\\u041F\\u0440\\u043E\\u0438\\u0437\\u0432\\u043E\\u0434\\u0441\\u0442\\u0432\\u0435\\u043D\\u043D\\u044B\\u0439 \\u043E\\u0431\\u044A\\u0435\\u043A\\u0442\"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_17__[\"default\"], {\n error: filter.prodObj ? false : true,\n id: \"prodObj-outlined\",\n value: filter.prodObj,\n endAdornment: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_18__[\"default\"], {\n position: \"end\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_10__[\"default\"], {\n \"aria-label\": \"prodObj select\",\n onClick: () => {\n pOnlineShowDictionary({\n unitCode: \"EquipConfiguration\",\n callBack: res => res.success === true ? setFilter(pv => ({\n ...pv,\n prodObj: res.outParameters.out_CODE\n })) : null\n });\n },\n edge: \"end\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_11__[\"default\"], null, \"list\"))),\n \"aria-describedby\": \"prodObj-outlined-helper-text\",\n label: \"\\u041F\\u0440\\u043E\\u0438\\u0437\\u0432\\u043E\\u0434\\u0441\\u0442\\u0432\\u0435\\u043D\\u043D\\u044B\\u0439 \\u043E\\u0431\\u044A\\u0435\\u043A\\u0442\"\n }), filter.prodObj ? null : /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_19__[\"default\"], {\n id: \"prodObj-outlined-helper-text\",\n sx: {\n color: \"red\"\n }\n }, \"*\\u041E\\u0431\\u044F\\u0437\\u0430\\u0442\\u0435\\u043B\\u044C\\u043D\\u043E\\u0435 \\u043F\\u043E\\u043B\\u0435\"))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_14__[\"default\"], {\n component: \"section\",\n sx: {\n p: 1\n }\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_15__[\"default\"], {\n readOnly: true,\n fullWidth: true\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_16__[\"default\"], {\n htmlFor: \"techServ-outlined\"\n }, \"\\u0422\\u0435\\u0445\\u043D\\u0438\\u0447\\u0435\\u0441\\u043A\\u0430\\u044F \\u0441\\u043B\\u0443\\u0436\\u0431\\u0430\"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_17__[\"default\"], {\n id: \"techServ-outlined\",\n value: filter.techServ,\n endAdornment: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_18__[\"default\"], {\n position: \"end\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_10__[\"default\"], {\n \"aria-label\": \"techServ select\",\n onClick: () => {\n pOnlineShowDictionary({\n unitCode: \"INS_DEPARTMENT\",\n callBack: res => res.success === true ? setFilter(pv => ({\n ...pv,\n techServ: res.outParameters.out_CODE\n })) : null\n });\n },\n edge: \"end\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_11__[\"default\"], null, \"list\"))),\n label: \"\\u0422\\u0435\\u0445\\u043D\\u0438\\u0447\\u0435\\u0441\\u043A\\u0430\\u044F \\u0441\\u043B\\u0443\\u0436\\u0431\\u0430\"\n }))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_14__[\"default\"], {\n component: \"section\",\n sx: {\n p: 1\n }\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_15__[\"default\"], {\n readOnly: true,\n fullWidth: true\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_16__[\"default\"], {\n htmlFor: \"respDep-outlined\"\n }, \"\\u041E\\u0442\\u0432\\u0435\\u0442\\u0441\\u0442\\u0432\\u0435\\u043D\\u043D\\u043E\\u0435 \\u043F\\u043E\\u0434\\u0440\\u0430\\u0437\\u0434\\u0435\\u043B\\u0435\\u043D\\u0438\\u0435\"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_17__[\"default\"], {\n id: \"respDep-outlined\",\n value: filter.respDep,\n endAdornment: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_18__[\"default\"], {\n position: \"end\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_10__[\"default\"], {\n \"aria-label\": \"respDep select\",\n onClick: () => {\n pOnlineShowDictionary({\n unitCode: \"INS_DEPARTMENT\",\n callBack: res => res.success === true ? setFilter(pv => ({\n ...pv,\n respDep: res.outParameters.out_CODE\n })) : null\n });\n },\n edge: \"end\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_11__[\"default\"], null, \"list\"))),\n label: \"\\u041E\\u0442\\u0432\\u0435\\u0442\\u0441\\u0442\\u0432\\u0435\\u043D\\u043D\\u043E\\u0435 \\u043F\\u043E\\u0434\\u0440\\u0430\\u0437\\u0434\\u0435\\u043B\\u0435\\u043D\\u0438\\u0435\"\n }))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_14__[\"default\"], {\n component: \"section\",\n sx: {\n p: 1\n }\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_20__[\"default\"], {\n container: true,\n spacing: 2\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_20__[\"default\"], {\n textAlign: \"center\",\n item: true,\n xs: 4\n }, \"\\u041D\\u0430\\u0447\\u0430\\u043B\\u043E \\u043F\\u0435\\u0440\\u0438\\u043E\\u0434\\u0430:\"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_20__[\"default\"], {\n item: true,\n xs: 4\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_15__[\"default\"], {\n fullWidth: true\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_16__[\"default\"], {\n id: \"from-month-select-label\"\n }, \"\\u041C\\u0435\\u0441\\u044F\\u0446\"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_21__[\"default\"], {\n error: filter.fromMonth ? false : true,\n labelId: \"from-month-select-label\",\n id: \"from-month-select\",\n value: filter.fromMonth,\n \"aria-describedby\": \"from-month-select-helper-text\",\n label: \"\\u041C\\u0435\\u0441\\u044F\\u0446\",\n onChange: e => setFilter(pv => ({\n ...pv,\n fromMonth: e.target.value\n }))\n }, monthArray.map((item, i) => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_22__[\"default\"], {\n key: i + 1,\n value: i + 1\n }, item))), filter.fromMonth ? null : /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_19__[\"default\"], {\n id: \"from-month-select-helper-text\",\n sx: {\n color: \"red\"\n }\n }, \"*\\u041E\\u0431\\u044F\\u0437\\u0430\\u0442\\u0435\\u043B\\u044C\\u043D\\u043E\\u0435 \\u043F\\u043E\\u043B\\u0435\"))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_20__[\"default\"], {\n item: true,\n xs: 4\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_15__[\"default\"], {\n fullWidth: true\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_16__[\"default\"], {\n id: \"from-year-select-label\"\n }, \"\\u0413\\u043E\\u0434\"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_21__[\"default\"], {\n error: filter.fromYear ? false : true,\n labelId: \"from-year-select-label\",\n id: \"from-year-select\",\n value: filter.fromYear,\n \"aria-describedby\": \"from-year-select-helper-text\",\n label: \"\\u0413\\u043E\\u0434\",\n onChange: e => setFilter(pv => ({\n ...pv,\n fromYear: e.target.value\n }))\n }, yearArray.map((item, i) => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_22__[\"default\"], {\n key: i,\n value: item\n }, item))), filter.fromYear ? null : /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_19__[\"default\"], {\n id: \"from-year-select-helper-text\",\n sx: {\n color: \"red\"\n }\n }, \"*\\u041E\\u0431\\u044F\\u0437\\u0430\\u0442\\u0435\\u043B\\u044C\\u043D\\u043E\\u0435 \\u043F\\u043E\\u043B\\u0435\"))))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_14__[\"default\"], {\n component: \"section\",\n sx: {\n p: 1\n }\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_20__[\"default\"], {\n container: true,\n spacing: 2\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_20__[\"default\"], {\n textAlign: \"center\",\n item: true,\n xs: 4\n }, \"\\u041A\\u043E\\u043D\\u0435\\u0446 \\u043F\\u0435\\u0440\\u0438\\u043E\\u0434\\u0430:\"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_20__[\"default\"], {\n item: true,\n xs: 4\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_15__[\"default\"], {\n fullWidth: true\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_16__[\"default\"], {\n id: \"to-month-select-label\"\n }, \"\\u041C\\u0435\\u0441\\u044F\\u0446\"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_21__[\"default\"], {\n error: filter.toMonth ? false : true,\n labelId: \"to-month-select-label\",\n id: \"to-month-select\",\n value: filter.toMonth,\n \"aria-describedby\": \"to-month-select-helper-text\",\n label: \"\\u041C\\u0435\\u0441\\u044F\\u0446\",\n onChange: e => setFilter(pv => ({\n ...pv,\n toMonth: e.target.value\n }))\n }, monthArray.map((item, i) => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_22__[\"default\"], {\n key: i + 1,\n value: i + 1\n }, item))), filter.toMonth ? null : /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_19__[\"default\"], {\n id: \"to-month-select-helper-text\",\n sx: {\n color: \"red\"\n }\n }, \"*\\u041E\\u0431\\u044F\\u0437\\u0430\\u0442\\u0435\\u043B\\u044C\\u043D\\u043E\\u0435 \\u043F\\u043E\\u043B\\u0435\"))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_20__[\"default\"], {\n item: true,\n xs: 4\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_15__[\"default\"], {\n fullWidth: true\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_16__[\"default\"], {\n id: \"to-year-select-label\"\n }, \"\\u0413\\u043E\\u0434\"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_21__[\"default\"], {\n error: filter.toYear ? false : true,\n labelId: \"to-year-select-label\",\n id: \"to-year-select\",\n value: filter.toYear,\n \"aria-describedby\": \"to-year-select-helper-text\",\n label: \"\\u0413\\u043E\\u0434\",\n onChange: e => setFilter(pv => ({\n ...pv,\n toYear: e.target.value\n }))\n }, yearArray.map((item, i) => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_22__[\"default\"], {\n key: i,\n value: item\n }, item))), filter.toYear ? null : /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_19__[\"default\"], {\n id: \"to-year-select-helper-text\",\n sx: {\n color: \"red\"\n }\n }, \"*\\u041E\\u0431\\u044F\\u0437\\u0430\\u0442\\u0435\\u043B\\u044C\\u043D\\u043E\\u0435 \\u043F\\u043E\\u043B\\u0435\"))))))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_23__[\"default\"], null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_24__[\"default\"], {\n variant: \"contained\",\n disabled: filter.belong && filter.prodObj && filter.fromMonth && filter.fromYear && filter.toMonth && filter.toYear ? false : true,\n onClick: () => {\n setFilterLock(true);\n setDataGrid({\n reload: true\n });\n closeFilter();\n }\n }, \"\\u0421\\u0444\\u043E\\u0440\\u043C\\u0438\\u0440\\u043E\\u0432\\u0430\\u0442\\u044C\"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_24__[\"default\"], {\n variant: \"contained\",\n onClick: clearFilter\n }, \"\\u041E\\u0447\\u0438\\u0441\\u0442\\u0438\\u0442\\u044C\"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_24__[\"default\"], {\n variant: \"contained\",\n onClick: () => {\n setFilter(filterCopy);\n }\n }, \"\\u041E\\u0442\\u043C\\u0435\\u043D\\u0430\"))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_25__[\"default\"], {\n component: \"button\",\n variant: \"body2\",\n textAlign: \"left\",\n onClick: openFilter\n }, \"\\u0424\\u0438\\u043B\\u044C\\u0442\\u0440 \\u043E\\u0442\\u0431\\u043E\\u0440\\u0430: \", filter.belong ? `Принадлежность: ${filter.belong}` : \"\", \" \", filter.prodObj ? `Производственный объект: ${filter.prodObj}` : \"\", \" \", filter.techServ ? `Техническая служба: ${filter.techServ}` : \"\", \" \", filter.respDep ? `Ответственное подразделение: ${filter.respDep}` : \"\", \" \", filter.fromMonth && filter.fromYear ? `Начало периода: ${filter.fromMonth < 10 ? \"0\" + filter.fromMonth : filter.fromMonth}.${filter.fromYear}` : \"\", \" \", filter.toMonth && filter.toYear ? `Конец периода: ${filter.toMonth < 10 ? \"0\" + filter.toMonth : filter.toMonth}.${filter.toYear}` : \"\"), dataGrid.dataLoaded ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_13__[\"default\"], {\n variant: \"outlined\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_20__[\"default\"], {\n container: true,\n spacing: 1\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_20__[\"default\"], {\n item: true,\n xs: 12\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_14__[\"default\"], {\n p: 1\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_components_p8p_data_grid__WEBPACK_IMPORTED_MODULE_1__.P8PDataGrid, _extends({}, _config_wrapper__WEBPACK_IMPORTED_MODULE_2__.P8P_DATA_GRID_CONFIG_PROPS, {\n columnsDef: dataGrid.columnsDef,\n groups: dataGrid.groups,\n rows: dataGrid.rows,\n size: _components_p8p_data_grid__WEBPACK_IMPORTED_MODULE_1__.P8P_DATA_GRID_SIZE.LARGE,\n reloading: dataGrid.reload,\n headCellRender: prms => (0,_layouts__WEBPACK_IMPORTED_MODULE_6__.headCellRender)({\n ...prms\n }, handleClick, filter.techServ, info.cntP, info.sumP, info.cntF, info.sumF),\n dataCellRender: prms => (0,_layouts__WEBPACK_IMPORTED_MODULE_6__.dataCellRender)({\n ...prms\n }, showEquipSrv),\n groupCellRender: prms => (0,_layouts__WEBPACK_IMPORTED_MODULE_6__.groupCellRender)({\n ...prms\n }),\n showCellRightBorder: true\n })))))) : null);\n};\n\n//----------------\n//Интерфейс модуля\n//----------------\n\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/panels/eqs_prfrm/eqs_prfrm.js?"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ EqsPrfrm: () => (/* binding */ EqsPrfrm)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Dialog/Dialog.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/DialogTitle/DialogTitle.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/IconButton/IconButton.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Icon/Icon.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/DialogContent/DialogContent.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Paper/Paper.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Box/Box.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/FormControl/FormControl.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/InputLabel/InputLabel.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/OutlinedInput/OutlinedInput.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/InputAdornment/InputAdornment.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Grid/Grid.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/FormHelperText/FormHelperText.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Link/Link.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Select/Select.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/MenuItem/MenuItem.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_22__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/DialogActions/DialogActions.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_23__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Button/Button.js\");\n/* harmony import */ var _components_p8p_data_grid__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../components/p8p_data_grid */ \"./app/components/p8p_data_grid.js\");\n/* harmony import */ var _config_wrapper__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../config_wrapper */ \"./app/config_wrapper.js\");\n/* harmony import */ var _context_backend__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../context/backend */ \"./app/context/backend.js\");\n/* harmony import */ var _context_application__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../context/application */ \"./app/context/application.js\");\n/* harmony import */ var _layouts__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./layouts */ \"./app/panels/eqs_prfrm/layouts.js\");\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n/*\r\n Парус 8 - Панели мониторинга - ТОиР - Выполнение работ\r\n Панель мониторинга: Корневая панель выполнения работ\r\n*/\n\n//---------------------\n//Подключение библиотек\n//---------------------\n\n //Классы React\n\n //Таблица данных\n //Подключение компонентов к настройкам приложения\n //Контекст взаимодействия с сервером\n //Контекст приложения\n //Дополнительная разметка и вёрстка клиентских элементов\n\n//-----------\n//Тело модуля\n//-----------\n\n//Корневая панель выполнения работ\nconst EqsPrfrm = () => {\n //Собственное состояние - таблица данных\n const [dataGrid, setDataGrid] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({\n dataLoaded: false,\n columnsDef: [],\n groups: [],\n rows: [],\n reload: false\n });\n const [filter, setFilter] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({\n belong: \"Демопример\",\n prodObj: \"К2\",\n techServ: \"\",\n respDep: \"\",\n fromMonth: 1,\n fromYear: 2024,\n toMonth: 12,\n toYear: 2024\n });\n\n // const [filter, setFilter] = useState({\n // belong: \"\",\n // prodObj: \"\",\n // techServ: \"\",\n // respDep: \"\",\n // fromMonth: \"\",\n // fromYear: \"\",\n // toMonth: \"\",\n // toYear: \"\"});\n\n const [info, setInfo] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({\n cntP: 0,\n sumP: 0,\n cntF: 0,\n sumF: 0\n });\n\n //Подключение к контексту приложения\n const {\n pOnlineShowDictionary\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_application__WEBPACK_IMPORTED_MODULE_4__[\"ApplicationСtx\"]);\n const [filterOpen, setFilterOpen] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(false);\n const [filterCopy, setFilterCopy] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({\n ...filter\n });\n const [filterLock, setFilterLock] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(false);\n const openFilter = () => {\n setFilterOpen(true);\n };\n const closeFilter = e => {\n if (filterLock && e != undefined) setFilter(filterCopy);\n setFilterOpen(false);\n };\n const clearFilter = () => {\n setFilter({\n belong: \"\",\n prodObj: \"\",\n techServ: \"\",\n respDep: \"\",\n fromMonth: \"\",\n fromYear: \"\",\n toMonth: \"\",\n toYear: \"\"\n });\n };\n let yearArray = [];\n let today = new Date();\n const getYearArray = () => {\n for (let i = 1990; i <= today.getFullYear(); i++) {\n yearArray.push(i);\n }\n };\n const monthArray = [\"Январь\", \"Февраль\", \"Март\", \"Апрель\", \"Май\", \"Июнь\", \"Июль\", \"Август\", \"Сентябрь\", \"Октябрь\", \"Ноябрь\", \"Декабрь\"];\n\n //Подключение к контексту взаимодействия с сервером\n const {\n executeStored\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_backend__WEBPACK_IMPORTED_MODULE_3__[\"BackEndСtx\"]);\n\n //Загрузка данных таблицы с сервера\n const loadData = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async () => {\n if (dataGrid.reload) {\n const data = await executeStored({\n stored: \"PKG_P8PANELS_EQUIPSRV.EQUIPSRV_GRID\",\n args: {\n SBELONG: filter.belong,\n SPRODOBJ: filter.prodObj,\n STECHSERV: filter.techServ,\n SRESPDEP: filter.respDep,\n NFROMMONTH: filter.fromMonth,\n NFROMYEAR: filter.fromYear,\n NTOMONTH: filter.toMonth,\n NTOYEAR: filter.toYear\n },\n respArg: \"COUT\",\n attributeValueProcessor: (name, val) => [\"caption\", \"name\", \"parent\"].includes(name) ? undefined : val\n });\n let cP = 0;\n let sP = 0;\n let cF = 0;\n let sF = 0;\n let properties = [];\n if (data.XROWS != null) {\n data.XROWS.map(row => {\n properties = [];\n Object.entries(row).forEach(([key, value]) => properties.push({\n name: key,\n data: value\n }));\n if (properties[1].data == \"Факт\" || properties[2].data == \"План\") {\n if (properties[2].data == \"План\") {\n properties.map(p => {\n if (_layouts__WEBPACK_IMPORTED_MODULE_5__.DAY_NAME_REG_EXP.test(p.name)) cP = cP + 1;\n });\n } else if (properties[1].data == \"Факт\") {\n properties.map(p => {\n if (_layouts__WEBPACK_IMPORTED_MODULE_5__.DAY_NAME_REG_EXP.test(p.name)) cF = cF + 1;\n });\n }\n } else {\n properties.map(p => {\n if (_layouts__WEBPACK_IMPORTED_MODULE_5__.MONTH_NAME_REG_EXP.test(p.name)) {\n let str = p.data;\n let m = [];\n let i = 0;\n while ((m = _layouts__WEBPACK_IMPORTED_MODULE_5__.DIGITS_REG_EXP.exec(str)) != null) {\n if (i == 0) sP = sP + Number(m[0].replace(\",\", \".\"));else {\n sF = sF + Number(m[0].replace(\",\", \".\"));\n }\n i++;\n }\n }\n });\n }\n });\n }\n setInfo({\n cntP: cP,\n sumP: sP,\n cntF: cF,\n sumF: sF\n });\n setDataGrid(pv => ({\n ...pv,\n columnsDef: data.XCOLUMNS_DEF ? [...data.XCOLUMNS_DEF] : pv.columnsDef,\n rows: [...(data.XROWS || [])],\n groups: [...(data.XGROUPS || [])],\n dataLoaded: true,\n reload: false\n }));\n }\n }, [dataGrid.reload, filter, executeStored]);\n\n //пользовательский параметр JuridicalPerson системы\n const getJurPers = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async () => {\n const data = await executeStored({\n stored: \"PKG_P8PANELS_EQUIPSRV.GET_JUR_PERS_PRM\",\n respArg: \"CRES\"\n });\n setFilter(pv => ({\n ...pv,\n belong: data\n }));\n }, [executeStored]);\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n if (filterOpen) {\n setFilterCopy({\n ...filter\n });\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [filterOpen]);\n\n //При необходимости обновить данные таблицы\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n loadData();\n }, [loadData, dataGrid.reload]);\n\n //Генерация содержимого\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", null, getYearArray(), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n open: filterOpen,\n onClose: closeFilter\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_7__[\"default\"], null, \"\\u0424\\u0438\\u043B\\u044C\\u0442\\u0440 \\u043E\\u0442\\u0431\\u043E\\u0440\\u0430\"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_8__[\"default\"], {\n \"aria-label\": \"close\",\n onClick: closeFilter,\n sx: {\n position: \"absolute\",\n right: 8,\n top: 8,\n color: theme => theme.palette.grey[500]\n }\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_9__[\"default\"], null, \"close\")), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_10__[\"default\"], null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_11__[\"default\"], null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_12__[\"default\"], {\n component: \"section\",\n sx: {\n p: 1\n }\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_13__[\"default\"], {\n readOnly: true,\n fullWidth: true,\n variant: \"outlined\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_14__[\"default\"], {\n htmlFor: \"belong-outlined\"\n }, \"\\u041F\\u0440\\u0438\\u043D\\u0430\\u0434\\u043B\\u0435\\u0436\\u043D\\u043E\\u0441\\u0442\\u044C\"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_15__[\"default\"], {\n error: filter.belong ? false : true,\n id: \"belong-outlined\",\n value: filter.belong,\n endAdornment: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_16__[\"default\"], {\n position: \"end\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_8__[\"default\"], {\n \"aria-label\": \"belong select\",\n onClick: () => {\n pOnlineShowDictionary({\n unitCode: \"JuridicalPersons\",\n callBack: res => res.success === true ? setFilter(pv => ({\n ...pv,\n belong: res.outParameters.out_CODE\n })) : null\n });\n },\n edge: \"end\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_9__[\"default\"], null, \"list\"))),\n \"aria-describedby\": \"belong-outlined-helper-text\",\n label: \"\\u041F\\u0440\\u0438\\u043D\\u0430\\u0434\\u043B\\u0435\\u0436\\u043D\\u043E\\u0441\\u0442\\u044C\"\n }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_17__[\"default\"], {\n container: true\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_17__[\"default\"], {\n item: true,\n xs: 6\n }, filter.belong ? null : /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_18__[\"default\"], {\n id: \"belong-outlined-helper-text\",\n sx: {\n color: \"red\"\n }\n }, \"*\\u041E\\u0431\\u044F\\u0437\\u0430\\u0442\\u0435\\u043B\\u044C\\u043D\\u043E\\u0435 \\u043F\\u043E\\u043B\\u0435\")), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_17__[\"default\"], {\n item: true,\n xs: 6,\n sx: {\n textAlign: \"end\"\n }\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_19__[\"default\"], {\n component: \"button\",\n variant: \"body2\",\n id: \"belong-outlined-link-btn\",\n sx: {\n fontSize: \"0.75rem\",\n marginRight: \"35px\"\n },\n onClick: getJurPers\n }, \"\\u0417\\u043D\\u0430\\u0447\\u0435\\u043D\\u0438\\u0435 \\u043F\\u043E \\u0443\\u043C\\u043E\\u043B\\u0447\\u0430\\u043D\\u0438\\u044E\"))))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_12__[\"default\"], {\n component: \"section\",\n sx: {\n p: 1\n }\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_13__[\"default\"], {\n readOnly: true,\n fullWidth: true\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_14__[\"default\"], {\n htmlFor: \"prodObj-outlined\"\n }, \"\\u041F\\u0440\\u043E\\u0438\\u0437\\u0432\\u043E\\u0434\\u0441\\u0442\\u0432\\u0435\\u043D\\u043D\\u044B\\u0439 \\u043E\\u0431\\u044A\\u0435\\u043A\\u0442\"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_15__[\"default\"], {\n error: filter.prodObj ? false : true,\n id: \"prodObj-outlined\",\n value: filter.prodObj,\n endAdornment: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_16__[\"default\"], {\n position: \"end\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_8__[\"default\"], {\n \"aria-label\": \"prodObj select\",\n onClick: () => {\n pOnlineShowDictionary({\n unitCode: \"EquipConfiguration\",\n callBack: res => res.success === true ? setFilter(pv => ({\n ...pv,\n prodObj: res.outParameters.out_CODE\n })) : null\n });\n },\n edge: \"end\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_9__[\"default\"], null, \"list\"))),\n \"aria-describedby\": \"prodObj-outlined-helper-text\",\n label: \"\\u041F\\u0440\\u043E\\u0438\\u0437\\u0432\\u043E\\u0434\\u0441\\u0442\\u0432\\u0435\\u043D\\u043D\\u044B\\u0439 \\u043E\\u0431\\u044A\\u0435\\u043A\\u0442\"\n }), filter.prodObj ? null : /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_18__[\"default\"], {\n id: \"prodObj-outlined-helper-text\",\n sx: {\n color: \"red\"\n }\n }, \"*\\u041E\\u0431\\u044F\\u0437\\u0430\\u0442\\u0435\\u043B\\u044C\\u043D\\u043E\\u0435 \\u043F\\u043E\\u043B\\u0435\"))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_12__[\"default\"], {\n component: \"section\",\n sx: {\n p: 1\n }\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_13__[\"default\"], {\n readOnly: true,\n fullWidth: true\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_14__[\"default\"], {\n htmlFor: \"techServ-outlined\"\n }, \"\\u0422\\u0435\\u0445\\u043D\\u0438\\u0447\\u0435\\u0441\\u043A\\u0430\\u044F \\u0441\\u043B\\u0443\\u0436\\u0431\\u0430\"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_15__[\"default\"], {\n id: \"techServ-outlined\",\n value: filter.techServ,\n endAdornment: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_16__[\"default\"], {\n position: \"end\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_8__[\"default\"], {\n \"aria-label\": \"techServ select\",\n onClick: () => {\n pOnlineShowDictionary({\n unitCode: \"INS_DEPARTMENT\",\n callBack: res => res.success === true ? setFilter(pv => ({\n ...pv,\n techServ: res.outParameters.out_CODE\n })) : null\n });\n },\n edge: \"end\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_9__[\"default\"], null, \"list\"))),\n label: \"\\u0422\\u0435\\u0445\\u043D\\u0438\\u0447\\u0435\\u0441\\u043A\\u0430\\u044F \\u0441\\u043B\\u0443\\u0436\\u0431\\u0430\"\n }))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_12__[\"default\"], {\n component: \"section\",\n sx: {\n p: 1\n }\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_13__[\"default\"], {\n readOnly: true,\n fullWidth: true\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_14__[\"default\"], {\n htmlFor: \"respDep-outlined\"\n }, \"\\u041E\\u0442\\u0432\\u0435\\u0442\\u0441\\u0442\\u0432\\u0435\\u043D\\u043D\\u043E\\u0435 \\u043F\\u043E\\u0434\\u0440\\u0430\\u0437\\u0434\\u0435\\u043B\\u0435\\u043D\\u0438\\u0435\"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_15__[\"default\"], {\n id: \"respDep-outlined\",\n value: filter.respDep,\n endAdornment: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_16__[\"default\"], {\n position: \"end\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_8__[\"default\"], {\n \"aria-label\": \"respDep select\",\n onClick: () => {\n pOnlineShowDictionary({\n unitCode: \"INS_DEPARTMENT\",\n callBack: res => res.success === true ? setFilter(pv => ({\n ...pv,\n respDep: res.outParameters.out_CODE\n })) : null\n });\n },\n edge: \"end\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_9__[\"default\"], null, \"list\"))),\n label: \"\\u041E\\u0442\\u0432\\u0435\\u0442\\u0441\\u0442\\u0432\\u0435\\u043D\\u043D\\u043E\\u0435 \\u043F\\u043E\\u0434\\u0440\\u0430\\u0437\\u0434\\u0435\\u043B\\u0435\\u043D\\u0438\\u0435\"\n }))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_12__[\"default\"], {\n component: \"section\",\n sx: {\n p: 1\n }\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_17__[\"default\"], {\n container: true,\n spacing: 2\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_17__[\"default\"], {\n textAlign: \"center\",\n item: true,\n xs: 4\n }, \"\\u041D\\u0430\\u0447\\u0430\\u043B\\u043E \\u043F\\u0435\\u0440\\u0438\\u043E\\u0434\\u0430:\"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_17__[\"default\"], {\n item: true,\n xs: 4\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_13__[\"default\"], {\n fullWidth: true\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_14__[\"default\"], {\n id: \"from-month-select-label\"\n }, \"\\u041C\\u0435\\u0441\\u044F\\u0446\"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_20__[\"default\"], {\n error: filter.fromMonth ? false : true,\n labelId: \"from-month-select-label\",\n id: \"from-month-select\",\n value: filter.fromMonth,\n \"aria-describedby\": \"from-month-select-helper-text\",\n label: \"\\u041C\\u0435\\u0441\\u044F\\u0446\",\n onChange: e => setFilter(pv => ({\n ...pv,\n fromMonth: e.target.value\n }))\n }, monthArray.map((item, i) => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_21__[\"default\"], {\n key: i + 1,\n value: i + 1\n }, item))), filter.fromMonth ? null : /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_18__[\"default\"], {\n id: \"from-month-select-helper-text\",\n sx: {\n color: \"red\"\n }\n }, \"*\\u041E\\u0431\\u044F\\u0437\\u0430\\u0442\\u0435\\u043B\\u044C\\u043D\\u043E\\u0435 \\u043F\\u043E\\u043B\\u0435\"))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_17__[\"default\"], {\n item: true,\n xs: 4\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_13__[\"default\"], {\n fullWidth: true\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_14__[\"default\"], {\n id: \"from-year-select-label\"\n }, \"\\u0413\\u043E\\u0434\"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_20__[\"default\"], {\n error: filter.fromYear ? false : true,\n labelId: \"from-year-select-label\",\n id: \"from-year-select\",\n value: filter.fromYear,\n \"aria-describedby\": \"from-year-select-helper-text\",\n label: \"\\u0413\\u043E\\u0434\",\n onChange: e => setFilter(pv => ({\n ...pv,\n fromYear: e.target.value\n }))\n }, yearArray.map((item, i) => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_21__[\"default\"], {\n key: i,\n value: item\n }, item))), filter.fromYear ? null : /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_18__[\"default\"], {\n id: \"from-year-select-helper-text\",\n sx: {\n color: \"red\"\n }\n }, \"*\\u041E\\u0431\\u044F\\u0437\\u0430\\u0442\\u0435\\u043B\\u044C\\u043D\\u043E\\u0435 \\u043F\\u043E\\u043B\\u0435\"))))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_12__[\"default\"], {\n component: \"section\",\n sx: {\n p: 1\n }\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_17__[\"default\"], {\n container: true,\n spacing: 2\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_17__[\"default\"], {\n textAlign: \"center\",\n item: true,\n xs: 4\n }, \"\\u041A\\u043E\\u043D\\u0435\\u0446 \\u043F\\u0435\\u0440\\u0438\\u043E\\u0434\\u0430:\"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_17__[\"default\"], {\n item: true,\n xs: 4\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_13__[\"default\"], {\n fullWidth: true\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_14__[\"default\"], {\n id: \"to-month-select-label\"\n }, \"\\u041C\\u0435\\u0441\\u044F\\u0446\"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_20__[\"default\"], {\n error: filter.toMonth ? false : true,\n labelId: \"to-month-select-label\",\n id: \"to-month-select\",\n value: filter.toMonth,\n \"aria-describedby\": \"to-month-select-helper-text\",\n label: \"\\u041C\\u0435\\u0441\\u044F\\u0446\",\n onChange: e => setFilter(pv => ({\n ...pv,\n toMonth: e.target.value\n }))\n }, monthArray.map((item, i) => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_21__[\"default\"], {\n key: i + 1,\n value: i + 1\n }, item))), filter.toMonth ? null : /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_18__[\"default\"], {\n id: \"to-month-select-helper-text\",\n sx: {\n color: \"red\"\n }\n }, \"*\\u041E\\u0431\\u044F\\u0437\\u0430\\u0442\\u0435\\u043B\\u044C\\u043D\\u043E\\u0435 \\u043F\\u043E\\u043B\\u0435\"))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_17__[\"default\"], {\n item: true,\n xs: 4\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_13__[\"default\"], {\n fullWidth: true\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_14__[\"default\"], {\n id: \"to-year-select-label\"\n }, \"\\u0413\\u043E\\u0434\"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_20__[\"default\"], {\n error: filter.toYear ? false : true,\n labelId: \"to-year-select-label\",\n id: \"to-year-select\",\n value: filter.toYear,\n \"aria-describedby\": \"to-year-select-helper-text\",\n label: \"\\u0413\\u043E\\u0434\",\n onChange: e => setFilter(pv => ({\n ...pv,\n toYear: e.target.value\n }))\n }, yearArray.map((item, i) => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_21__[\"default\"], {\n key: i,\n value: item\n }, item))), filter.toYear ? null : /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_18__[\"default\"], {\n id: \"to-year-select-helper-text\",\n sx: {\n color: \"red\"\n }\n }, \"*\\u041E\\u0431\\u044F\\u0437\\u0430\\u0442\\u0435\\u043B\\u044C\\u043D\\u043E\\u0435 \\u043F\\u043E\\u043B\\u0435\"))))))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_22__[\"default\"], null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_23__[\"default\"], {\n variant: \"contained\",\n disabled: filter.belong && filter.prodObj && filter.fromMonth && filter.fromYear && filter.toMonth && filter.toYear ? false : true,\n onClick: () => {\n setFilterLock(true);\n setDataGrid({\n reload: true\n });\n closeFilter();\n }\n }, \"\\u0421\\u0444\\u043E\\u0440\\u043C\\u0438\\u0440\\u043E\\u0432\\u0430\\u0442\\u044C \\u043E\\u0442\\u0447\\u0451\\u0442\"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_23__[\"default\"], {\n variant: \"contained\",\n onClick: clearFilter\n }, \"\\u041E\\u0447\\u0438\\u0441\\u0442\\u0438\\u0442\\u044C \\u0444\\u0438\\u043B\\u044C\\u0442\\u0440\"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_23__[\"default\"], {\n variant: \"contained\",\n onClick: () => {\n setFilter(filterCopy);\n }\n }, \"\\u041E\\u0442\\u043C\\u0435\\u043D\\u0438\\u0442\\u044C \\u0438\\u0437\\u043C\\u0435\\u043D\\u0435\\u043D\\u0438\\u044F\"))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_19__[\"default\"], {\n component: \"button\",\n variant: \"body2\",\n textAlign: \"left\",\n onClick: openFilter\n }, \"\\u0424\\u0438\\u043B\\u044C\\u0442\\u0440 \\u043E\\u0442\\u0431\\u043E\\u0440\\u0430: \", filter.belong ? `Принадлежность: ${filter.belong}` : \"\", \" \", filter.prodObj ? `Производственный объект: ${filter.prodObj}` : \"\", \" \", filter.techServ ? `Техническая служба: ${filter.techServ}` : \"\", \" \", filter.respDep ? `Ответственное подразделение: ${filter.respDep}` : \"\", \" \", filter.fromMonth && filter.fromYear ? `Начало периода: ${filter.fromMonth < 10 ? \"0\" + filter.fromMonth : filter.fromMonth}.${filter.fromYear}` : \"\", \" \", filter.toMonth && filter.toYear ? `Конец периода: ${filter.toMonth < 10 ? \"0\" + filter.toMonth : filter.toMonth}.${filter.toYear}` : \"\"), dataGrid.dataLoaded ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_11__[\"default\"], {\n variant: \"outlined\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_17__[\"default\"], {\n container: true,\n spacing: 1\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_17__[\"default\"], {\n item: true,\n xs: 12\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_12__[\"default\"], {\n p: 1\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_components_p8p_data_grid__WEBPACK_IMPORTED_MODULE_1__.P8PDataGrid, _extends({}, _config_wrapper__WEBPACK_IMPORTED_MODULE_2__.P8P_DATA_GRID_CONFIG_PROPS, {\n columnsDef: dataGrid.columnsDef,\n groups: dataGrid.groups,\n rows: dataGrid.rows,\n size: _components_p8p_data_grid__WEBPACK_IMPORTED_MODULE_1__.P8P_DATA_GRID_SIZE.LARGE,\n reloading: dataGrid.reload,\n headCellRender: prms => (0,_layouts__WEBPACK_IMPORTED_MODULE_5__.headCellRender)({\n ...prms\n }, filter.techServ, info.cntP, info.sumP, info.cntF, info.sumF),\n dataCellRender: prms => (0,_layouts__WEBPACK_IMPORTED_MODULE_5__.dataCellRender)({\n ...prms\n }),\n groupCellRender: prms => (0,_layouts__WEBPACK_IMPORTED_MODULE_5__.groupCellRender)({\n ...prms\n }),\n showCellRightBorder: true\n })))))) : null);\n};\n\n//----------------\n//Интерфейс модуля\n//----------------\n\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/panels/eqs_prfrm/eqs_prfrm.js?"); /***/ }), @@ -3524,7 +3524,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ DAY_NAME_REG_EXP: () => (/* binding */ DAY_NAME_REG_EXP),\n/* harmony export */ DIGITS_REG_EXP: () => (/* binding */ DIGITS_REG_EXP),\n/* harmony export */ MONTH_NAME_REG_EXP: () => (/* binding */ MONTH_NAME_REG_EXP),\n/* harmony export */ dataCellRender: () => (/* binding */ dataCellRender),\n/* harmony export */ groupCellRender: () => (/* binding */ groupCellRender),\n/* harmony export */ headCellRender: () => (/* binding */ headCellRender)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Stack/Stack.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Grid/Grid.js\");\n/*\r\n Парус 8 - \r\n Дополнительная разметка и вёрстка клиентских элементов\r\n*/\n\n//---------------------\n//Подключение библиотек\n//---------------------\n\n //Классы React\n\n\n//---------\n//Константы\n//---------\n\n//Шаблон чисел и имён ячеек дат\nconst DIGITS_REG_EXP = /\\d+,?\\d*/g;\nconst MONTH_NAME_REG_EXP = /_\\d{4}_\\d{1,2}/;\nconst DAY_NAME_REG_EXP = /_\\d{4}_\\d{1,2}_\\d{1,2}/;\nlet curParent = \"\";\nlet x = 0;\n\n//-----------\n//Тело модуля\n//-----------\n\nconst formatDate = date => {\n const [year, month, day] = date.substring(1).split(\"_\");\n let nd;\n if (day == null) nd = `${month < 10 ? \"0\" + month : month}.${year}`;else nd = `${day < 10 ? \"0\" + day : day}.${month < 10 ? \"0\" + month : month}.${year}`;\n return nd;\n};\n\n// eslint-disable-next-line no-unused-vars\nconst headCellRender = ({\n columnDef\n}, hClick, podr, cntP, sumP, cntF, sumF) => {\n let cellStyle = {\n border: \"1px solid rgba(0, 0, 0)\",\n textAlign: \"center\"\n };\n let cellProps = {};\n let stackStyle = {};\n let data = columnDef.caption;\n if (columnDef.expandable) {\n const ref = /*#__PURE__*/(0,react__WEBPACK_IMPORTED_MODULE_0__.createRef)();\n cellStyle = {\n ...cellStyle,\n padding: \"5px\"\n };\n cellProps = {\n ...cellProps,\n ref: ref,\n onClick: e => {\n hClick(e, ref);\n }\n };\n stackStyle = {\n flexDirection: \"column\"\n };\n }\n if (columnDef.name == \"STEST\") cellStyle = {\n display: \"none\"\n };\n if (columnDef.name == \"SINFO\" || columnDef.name == \"SINFO2\") {\n cellProps = {\n colSpan: 2\n };\n if (columnDef.name == \"SINFO\") cellProps = {\n ...cellProps,\n rowSpan: 2\n };\n //if (columnDef.name == \"SINFO\") {\n //cellStyle = { display: \"none\" };\n // cellStyle = { ...cellStyle, padding: \"unset\" };\n // data = (\n // \n // \n // \n // Подразделение:\n // \n // \n // {podr}\n // \n // \n // Кол-во ремонтов, план:\n // \n // \n // {cntP}\n // \n // \n // Трудоемкость, час. план:\n // \n // \n // {sumP}\n // \n // \n // Кол-во ремонтов, факт:\n // \n // \n // {cntF}\n // \n // \n // Трудоемкость, час. факт:\n // \n // \n // {sumF}\n // \n // \n // \n // );\n //}\n }\n\n if (columnDef.name == \"SINFO2\") cellStyle = {\n display: \"none\"\n };\n if (columnDef.visible && DAY_NAME_REG_EXP.test(columnDef.name)) {\n cellStyle = {\n ...cellStyle,\n padding: \"5px\",\n minWidth: \"25px\",\n maxWidth: \"25px\"\n };\n stackStyle = {\n justifyContent: \"center\"\n };\n }\n return {\n cellStyle,\n cellProps,\n stackStyle,\n data\n };\n};\nconst dataCellRender = ({\n row,\n columnDef\n}, showEquipSrv) => {\n let cellStyle = {\n padding: \"2px\",\n border: \"1px solid rgba(0, 0, 0) !important\",\n textAlign: \"center\"\n };\n let cellProps = {};\n let data = \" \";\n if (row[\"SINFO2\"] == undefined) {\n if (columnDef.name == \"STEST\") {\n cellProps = {\n colSpan: 2\n };\n cellStyle = {\n ...cellStyle,\n textAlign: \"right\",\n fontWeight: \"bold\"\n };\n }\n if (columnDef.name == \"SINFO2\") cellStyle = {\n display: \"none\"\n };\n if (columnDef.parent == \"\" && columnDef.expandable == true && columnDef.expanded == false) {\n curParent = columnDef.name;\n return {\n cellStyle: {\n ...cellStyle,\n height: \"25px\"\n },\n data\n };\n } else if (columnDef.name != \"SINFO2\" && columnDef.parent != \"\" && columnDef.expandable == false && columnDef.expanded == true) {\n if (columnDef.name.endsWith(\"_1\")) {\n curParent = columnDef.parent;\n const [year, month] = curParent.substring(1).split(\"_\");\n x = new Date(year, month, 0).getDate();\n cellProps = {\n colSpan: x\n };\n data = row[curParent];\n return {\n cellStyle,\n cellProps,\n data\n };\n } else {\n cellStyle = {\n display: \"none\"\n };\n }\n }\n }\n if (columnDef.name == \"STEST\" && row[\"SINFO2\"] == \"План\") {\n cellStyle = {\n ...cellStyle\n };\n cellProps = {\n rowSpan: 2\n };\n }\n if (columnDef.name == \"STEST\" && row[\"SINFO2\"] == \"Факт\") {\n cellStyle = {\n display: \"none\"\n };\n }\n switch (row[columnDef.name]) {\n case \"blue\":\n cellStyle = {\n ...cellStyle,\n backgroundColor: \"lightblue\",\n border: \"1px solid rgba(0, 0, 0) !important\"\n };\n cellProps = {\n title: formatDate(columnDef.name),\n onClick: () => {\n showEquipSrv({\n date: columnDef.name,\n workType: row[\"SINFO2\"],\n info: row[\"groupName\"]\n });\n }\n };\n return {\n cellStyle,\n cellProps,\n data\n };\n case \"green\":\n cellStyle = {\n ...cellStyle,\n backgroundColor: \"green\",\n border: \"1px solid rgba(0, 0, 0) !important\"\n };\n cellProps = {\n title: formatDate(columnDef.name),\n onClick: () => {\n showEquipSrv({\n date: columnDef.name,\n workType: row[\"SINFO2\"],\n info: row[\"groupName\"]\n });\n }\n };\n return {\n cellStyle,\n cellProps,\n data\n };\n case \"red\":\n cellStyle = {\n ...cellStyle,\n backgroundColor: \"crimson\",\n border: \"1px solid rgba(0, 0, 0) !important\"\n };\n cellProps = {\n title: formatDate(columnDef.name),\n onClick: () => {\n showEquipSrv({\n date: columnDef.name,\n workType: row[\"SINFO2\"],\n info: row[\"groupName\"]\n });\n }\n };\n return {\n cellStyle,\n cellProps,\n data\n };\n case \"green red\":\n case \"red green\":\n cellStyle = {\n ...cellStyle,\n padding: \"unset\"\n };\n cellProps = {\n title: formatDate(columnDef.name)\n };\n data = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_1__[\"default\"], {\n sx: {\n justifyContent: \"center\"\n },\n direction: \"row\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n container: true,\n maxHeight: \"100%\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n item: true,\n xs: 6,\n sx: {\n backgroundColor: \"green\"\n },\n onClick: () => showEquipSrv({\n date: columnDef.name,\n workType: row[\"SINFO2\"],\n info: row[\"groupName\"]\n })\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"p\", {\n style: {\n display: \"none\"\n }\n }, \"g\")), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n item: true,\n xs: 6,\n sx: {\n backgroundColor: \"crimson\"\n },\n onClick: () => showEquipSrv({\n date: columnDef.name,\n workType: row[\"SINFO2\"],\n info: row[\"groupName\"]\n })\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"p\", {\n style: {\n display: \"none\"\n }\n }, \"r\"))));\n }\n return {\n cellStyle,\n cellProps\n };\n};\nconst groupCellRender = () => {\n let cellStyle = {\n display: \"none\"\n };\n return {\n cellStyle\n };\n};\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/panels/eqs_prfrm/layouts.js?"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ DAY_NAME_REG_EXP: () => (/* binding */ DAY_NAME_REG_EXP),\n/* harmony export */ DIGITS_REG_EXP: () => (/* binding */ DIGITS_REG_EXP),\n/* harmony export */ MONTH_NAME_REG_EXP: () => (/* binding */ MONTH_NAME_REG_EXP),\n/* harmony export */ dataCellRender: () => (/* binding */ dataCellRender),\n/* harmony export */ groupCellRender: () => (/* binding */ groupCellRender),\n/* harmony export */ headCellRender: () => (/* binding */ headCellRender)\n/* harmony export */ });\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Stack/Stack.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Grid/Grid.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/*\r\n Парус 8 - \r\n Дополнительная разметка и вёрстка клиентских элементов\r\n*/\n\n//---------------------\n//Подключение библиотек\n//---------------------\n\n\n //Классы React\n\n//---------\n//Константы\n//---------\n\n//Шаблон чисел и имён ячеек дат\nconst DIGITS_REG_EXP = /\\d+,?\\d*/g;\nconst MONTH_NAME_REG_EXP = /_\\d{4}_\\d{1,2}/;\nconst DAY_NAME_REG_EXP = /_\\d{4}_\\d{1,2}_\\d{1,2}/;\nlet curParent = \"\";\nlet x = 0;\n\n//-----------\n//Тело модуля\n//-----------\nconst formatDate = date => {\n const [year, month, day] = date.substring(1).split(\"_\");\n let nd;\n if (day == null) nd = `${month < 10 ? \"0\" + month : month}.${year}`;else nd = `${day < 10 ? \"0\" + day : day}.${month < 10 ? \"0\" + month : month}.${year}`;\n return nd;\n};\nconst headCellRender = ({\n columnDef\n}, podr, cntP, sumP, cntF, sumF) => {\n let cellStyle = {\n border: \"1px solid rgba(0, 0, 0)\",\n textAlign: \"center\"\n };\n let cellProps = {};\n let data = columnDef.caption;\n if (columnDef.expandable) {\n // поменять расположение + для развёртывания\n }\n if (columnDef.name == \"STEST\") cellStyle = {\n display: \"none\"\n };\n if (columnDef.name == \"SINFO\" || columnDef.name == \"SINFO2\") {\n cellProps = {\n colSpan: 2\n };\n if (columnDef.name == \"SINFO\") {\n cellStyle = {\n ...cellStyle,\n padding: \"unset\"\n };\n data = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_1__[\"default\"], {\n sx: {\n justifyContent: \"center\"\n },\n direction: \"row\",\n width: 300\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n container: true\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n item: true,\n xs: 4\n }, \"\\u041F\\u043E\\u0434\\u0440\\u0430\\u0437\\u0434\\u0435\\u043B\\u0435\\u043D\\u0438\\u0435:\"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n item: true,\n xs: 8\n }, podr), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n item: true,\n xs: 4\n }, \"\\u041A\\u043E\\u043B-\\u0432\\u043E \\u0440\\u0435\\u043C\\u043E\\u043D\\u0442\\u043E\\u0432, \\u043F\\u043B\\u0430\\u043D:\"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n item: true,\n xs: 2\n }, cntP), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n item: true,\n xs: 4\n }, \"\\u0422\\u0440\\u0443\\u0434\\u043E\\u0435\\u043C\\u043A\\u043E\\u0441\\u0442\\u044C, \\u0447\\u0430\\u0441. \\u043F\\u043B\\u0430\\u043D:\"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n item: true,\n xs: 2\n }, sumP), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n item: true,\n xs: 4\n }, \"\\u041A\\u043E\\u043B-\\u0432\\u043E \\u0440\\u0435\\u043C\\u043E\\u043D\\u0442\\u043E\\u0432, \\u0444\\u0430\\u043A\\u0442:\"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n item: true,\n xs: 2\n }, cntF), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n item: true,\n xs: 4\n }, \"\\u0422\\u0440\\u0443\\u0434\\u043E\\u0435\\u043C\\u043A\\u043E\\u0441\\u0442\\u044C, \\u0447\\u0430\\u0441. \\u0444\\u0430\\u043A\\u0442:\"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n item: true,\n xs: 2\n }, sumF)));\n }\n }\n if (columnDef.visible && DAY_NAME_REG_EXP.test(columnDef.name)) {\n cellStyle = {\n ...cellStyle,\n paddingLeft: \"5px\",\n paddingRight: \"5px\",\n minWidth: \"25px\",\n maxWidth: \"25px\"\n };\n }\n return {\n cellStyle,\n cellProps,\n data\n };\n};\nconst dataCellRender = ({\n row,\n columnDef\n}) => {\n let cellStyle = {\n padding: \"2px\",\n border: \"1px solid rgba(0, 0, 0)\",\n textAlign: \"center\"\n };\n let cellProps = {};\n let data = \" \";\n if (row[\"SINFO2\"] == undefined) {\n if (columnDef.name == \"STEST\") cellProps = {\n colSpan: 2\n };\n if (columnDef.name == \"SINFO2\") cellStyle = {\n display: \"none\"\n };\n if (columnDef.parent == \"\" && columnDef.expandable == true && columnDef.expanded == false) {\n curParent = columnDef.name;\n return {\n cellStyle: {\n ...cellStyle,\n height: \"25px\"\n },\n data\n };\n } else if (columnDef.name != \"SINFO2\" && columnDef.parent != \"\" && columnDef.expandable == false && columnDef.expanded == true) {\n if (columnDef.name.endsWith(\"_1\")) {\n curParent = columnDef.parent;\n const [year, month] = curParent.substring(1).split(\"_\");\n x = new Date(year, month, 0).getDate();\n cellProps = {\n colSpan: x\n };\n data = row[curParent];\n return {\n cellStyle,\n cellProps,\n data\n };\n } else {\n cellStyle = {\n display: \"none\"\n };\n }\n }\n }\n if (columnDef.name == \"STEST\" && row[\"SINFO2\"] == \"План\") {\n cellStyle = {\n ...cellStyle\n };\n cellProps = {\n rowSpan: 2\n };\n }\n if (columnDef.name == \"STEST\" && row[\"SINFO2\"] == \"Факт\") {\n cellStyle = {\n display: \"none\"\n };\n }\n switch (row[columnDef.name]) {\n case \"blue\":\n cellStyle = {\n ...cellStyle,\n backgroundColor: \"royalblue\",\n border: \"1px solid rgba(0, 0, 0)\"\n };\n cellProps = {\n title: formatDate(columnDef.name)\n };\n return {\n cellStyle,\n cellProps,\n data\n };\n case \"green\":\n cellStyle = {\n ...cellStyle,\n backgroundColor: \"lawngreen\",\n border: \"1px solid rgba(0, 0, 0)\"\n };\n cellProps = {\n title: formatDate(columnDef.name)\n };\n return {\n cellStyle,\n cellProps,\n data\n };\n case \"red\":\n cellStyle = {\n ...cellStyle,\n backgroundColor: \"crimson\",\n border: \"1px solid rgba(0, 0, 0)\"\n };\n cellProps = {\n title: formatDate(columnDef.name)\n };\n return {\n cellStyle,\n cellProps,\n data\n };\n case \"green red\":\n case \"red green\":\n cellStyle = {\n ...cellStyle,\n padding: \"unset\"\n };\n cellProps = {\n title: formatDate(columnDef.name)\n };\n data = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_1__[\"default\"], {\n sx: {\n justifyContent: \"center\"\n },\n direction: \"row\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n container: true,\n maxHeight: \"100%\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n item: true,\n xs: 6,\n sx: {\n backgroundColor: \"lawngreen\"\n }\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"p\", {\n style: {\n display: \"none\"\n }\n }, \"g\")), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n item: true,\n xs: 6,\n sx: {\n backgroundColor: \"crimson\"\n }\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"p\", {\n style: {\n display: \"none\"\n }\n }, \"r\"))));\n }\n return {\n cellStyle,\n cellProps\n };\n};\nconst groupCellRender = () => {\n let cellStyle = {\n display: \"none\"\n };\n return {\n cellStyle\n };\n};\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/panels/eqs_prfrm/layouts.js?"); /***/ }), @@ -3759,6 +3759,17 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac /***/ }), +/***/ "./app/panels/prj_jobs/lab_fact_rpt_dtl.js": +/*!*************************************************!*\ + !*** ./app/panels/prj_jobs/lab_fact_rpt_dtl.js ***! + \*************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ LabFactRptDtl: () => (/* binding */ LabFactRptDtl)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! prop-types */ \"./node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_13___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_13__);\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Dialog/Dialog.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/DialogTitle/DialogTitle.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/DialogContent/DialogContent.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/DialogActions/DialogActions.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Button/Button.js\");\n/* harmony import */ var _context_backend__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../context/backend */ \"./app/context/backend.js\");\n/* harmony import */ var _context_application__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../context/application */ \"./app/context/application.js\");\n/* harmony import */ var _core_utils__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../core/utils */ \"./app/core/utils.js\");\n/* harmony import */ var _app_text__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../../app.text */ \"./app.text.js\");\n/* harmony import */ var _config_wrapper__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../config_wrapper */ \"./app/config_wrapper.js\");\n/* harmony import */ var _components_p8p_data_grid__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../../components/p8p_data_grid */ \"./app/components/p8p_data_grid.js\");\n/* harmony import */ var _layouts__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./layouts */ \"./app/panels/prj_jobs/layouts.js\");\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n/*\r\n Парус 8 - Панели мониторинга - ПУП - Работы проектов\r\n Компонент панели: Детализация фактической трудоёмкости по \"Планам и отчетам подразделений\"\r\n*/\n\n//---------------------\n//Подключение библиотек\n//---------------------\n\n //Классы React\n //Контроль свойств компонента\n //Интерфейсные элементы\n //Контекст взаимодействия с сервером\n //Контекст приложения\n //Вспомогательные функции\n //Текстовые ресурсы\n //Подключение компонентов к настройкам приложения\n //Таблица данных\n //Дополнительная разметка и вёрстка клиентских элементов\n\n//-----------\n//Тело модуля\n//-----------\n\n//Детализация фактической трудоёмкости по \"Планам и отчетам подразделений\"\nconst LabFactRptDtl = ({\n periodId,\n title,\n onHide\n}) => {\n //Состояние таблицы детализации плановой трудоёмкости по графику\n const [factRptDtl, setFactRptDtl] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({\n dataLoaded: false,\n columnsDef: [],\n orders: [],\n rows: [],\n reload: true,\n pageNumber: 1,\n morePages: true\n });\n\n //Подключение к контексту приложения\n const {\n configSystemPageSize\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_application__WEBPACK_IMPORTED_MODULE_2__[\"ApplicationСtx\"]);\n\n //Подключение к контексту взаимодействия с сервером\n const {\n executeStored,\n SERV_DATA_TYPE_CLOB\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_backend__WEBPACK_IMPORTED_MODULE_1__[\"BackEndСtx\"]);\n\n //Загрузка детализации фактической трудоёмкости по отчетам для ресурса\n const loadFactRptDtl = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async () => {\n if (factRptDtl.reload) {\n const data = await executeStored({\n stored: \"PKG_P8PANELS_PROJECTS.JB_PERIODS_LIST_FACT_RPT\",\n args: {\n NJB_PERIODS: periodId,\n CORDERS: {\n VALUE: (0,_core_utils__WEBPACK_IMPORTED_MODULE_3__.object2Base64XML)(factRptDtl.orders, {\n arrayNodeName: \"orders\"\n }),\n SDATA_TYPE: SERV_DATA_TYPE_CLOB\n },\n NPAGE_NUMBER: factRptDtl.pageNumber,\n NPAGE_SIZE: configSystemPageSize,\n NINCLUDE_DEF: factRptDtl.dataLoaded ? 0 : 1\n },\n respArg: \"COUT\"\n });\n setFactRptDtl(pv => ({\n ...pv,\n columnsDef: data.XCOLUMNS_DEF ? [...data.XCOLUMNS_DEF] : pv.columnsDef,\n rows: pv.pageNumber == 1 ? [...(data.XROWS || [])] : [...pv.rows, ...(data.XROWS || [])],\n dataLoaded: true,\n reload: false,\n morePages: (data.XROWS || []).length >= configSystemPageSize\n }));\n }\n }, [periodId, factRptDtl.reload, factRptDtl.orders, factRptDtl.dataLoaded, factRptDtl.pageNumber, executeStored, configSystemPageSize, SERV_DATA_TYPE_CLOB]);\n\n //При изменении состояния сортировки в детализации факта по \"Планам и отчетам в подразделении\"\n const handlePlanJobsDtlDGOrderChanged = ({\n orders\n }) => setFactRptDtl(pv => ({\n ...pv,\n orders,\n pageNumber: 1,\n reload: true\n }));\n\n //При изменении количества отображаемых страниц в факта по \"Планам и отчетам в подразделении\"\n const handlePlanJobsDtlDGPagesCountChanged = () => setFactRptDtl(pv => ({\n ...pv,\n pageNumber: pv.pageNumber + 1,\n reload: true\n }));\n\n //При необходимости обновить данные\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n loadFactRptDtl();\n }, [factRptDtl.reload, loadFactRptDtl]);\n\n //Генерация содержимого\n return factRptDtl.dataLoaded ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_8__[\"default\"], {\n open: true,\n onClose: onHide,\n fullWidth: true,\n maxWidth: \"xl\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_9__[\"default\"], null, title), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_10__[\"default\"], null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_components_p8p_data_grid__WEBPACK_IMPORTED_MODULE_6__.P8PDataGrid, _extends({}, _config_wrapper__WEBPACK_IMPORTED_MODULE_5__.P8P_DATA_GRID_CONFIG_PROPS, {\n columnsDef: factRptDtl.columnsDef,\n rows: factRptDtl.rows,\n size: _components_p8p_data_grid__WEBPACK_IMPORTED_MODULE_6__.P8P_DATA_GRID_SIZE.SMALL,\n morePages: factRptDtl.morePages,\n reloading: factRptDtl.reload,\n valueFormatter: _layouts__WEBPACK_IMPORTED_MODULE_7__.factRptDtlValueFormatter,\n headCellRender: _layouts__WEBPACK_IMPORTED_MODULE_7__.factRptDtlHeadCellRender,\n onOrderChanged: handlePlanJobsDtlDGOrderChanged,\n onPagesCountChanged: handlePlanJobsDtlDGPagesCountChanged\n }))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_11__[\"default\"], null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_12__[\"default\"], {\n onClick: onHide\n }, _app_text__WEBPACK_IMPORTED_MODULE_4__.BUTTONS.CLOSE))) : null;\n};\n\n//Контроль свойств - Детализация фактической трудоёмкости по \"Планам и отчетам подразделений\"\nLabFactRptDtl.propTypes = {\n periodId: (prop_types__WEBPACK_IMPORTED_MODULE_13___default().number).isRequired,\n title: (prop_types__WEBPACK_IMPORTED_MODULE_13___default().string).isRequired,\n onHide: (prop_types__WEBPACK_IMPORTED_MODULE_13___default().func).isRequired\n};\n\n//----------------\n//Интерфейс модуля\n//----------------\n\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/panels/prj_jobs/lab_fact_rpt_dtl.js?"); + +/***/ }), + /***/ "./app/panels/prj_jobs/lab_plan_fot_dtl.js": /*!*************************************************!*\ !*** ./app/panels/prj_jobs/lab_plan_fot_dtl.js ***! @@ -3777,7 +3788,18 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ LabPlanJobsDtl: () => (/* binding */ LabPlanJobsDtl)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! prop-types */ \"./node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_15___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_15__);\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Stack/Stack.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Icon/Icon.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Link/Link.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Dialog/Dialog.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/DialogTitle/DialogTitle.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/DialogContent/DialogContent.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/DialogActions/DialogActions.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Button/Button.js\");\n/* harmony import */ var _context_backend__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../context/backend */ \"./app/context/backend.js\");\n/* harmony import */ var _context_application__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../context/application */ \"./app/context/application.js\");\n/* harmony import */ var _core_utils__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../core/utils */ \"./app/core/utils.js\");\n/* harmony import */ var _app_text__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../../app.text */ \"./app.text.js\");\n/* harmony import */ var _config_wrapper__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../config_wrapper */ \"./app/config_wrapper.js\");\n/* harmony import */ var _components_p8p_data_grid__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../../components/p8p_data_grid */ \"./app/components/p8p_data_grid.js\");\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n/*\r\n Парус 8 - Панели мониторинга - ПУП - Работы проектов\r\n Компонент панели: Детализация плановой трудоёмкости по графику\r\n*/\n\n//---------------------\n//Подключение библиотек\n//---------------------\n\n //Классы React\n //Контроль свойств компонента\n //Интерфейсные элементы\n //Контекст взаимодействия с сервером\n //Контекст приложения\n //Вспомогательные функции\n //Текстовые ресурсы\n //Подключение компонентов к настройкам приложения\n //Таблица данных\n\n//------------------------------------\n//Вспомогательные функции и компоненты\n//------------------------------------\n\n//Формирование значения для колонки \"Состояние\" этапа\nconst formatJobStatusValue = value => {\n const [text, icon] = value == 0 ? [\"Не начата\", \"not_started\"] : value == 1 ? [\"Выполняется\", \"loop\"] : value == 2 ? [\"Выполнена\", \"task_alt\"] : value == 3 ? [\"Остановлена\", \"do_not_disturb_on\"] : [\"Отменена\", \"cancel\"];\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_7__[\"default\"], {\n direction: \"row\",\n gap: 0.5,\n alignItems: \"center\",\n justifyContent: \"center\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_8__[\"default\"], {\n title: text\n }, icon));\n};\n\n//Форматирование значений колонок в таблице детализации трудоёмкости по графику\nconst planJobsDtlValueFormatter = ({\n value,\n columnDef\n}) => {\n switch (columnDef.name) {\n case \"NJOB_STATE\":\n return formatJobStatusValue(value);\n case \"DJOB_BEG\":\n case \"DJOB_END\":\n return (0,_core_utils__WEBPACK_IMPORTED_MODULE_3__.formatDateRF)(value);\n }\n return value;\n};\n\n//Генерация представления ячейки заголовка в таблице детализации трудоёмкости по графику\nconst planJobsDtlHeadCellRender = ({\n columnDef\n}) => {\n switch (columnDef.name) {\n case \"NJOB_STATE\":\n return {\n stackProps: {\n justifyContent: \"center\"\n },\n cellProps: {\n align: \"center\"\n }\n };\n }\n};\n\n//Генерация представления ячейки c данными в таблице детализации трудоёмкости по графику\nconst planJobsDtlDataCellRender = ({\n row,\n columnDef,\n onProjectClick\n}) => {\n switch (columnDef.name) {\n case \"SPRJ\":\n return {\n data: row[columnDef.name] ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_9__[\"default\"], {\n component: \"button\",\n variant: \"body2\",\n align: \"left\",\n underline: \"hover\",\n onClick: () => onProjectClick ? onProjectClick({\n sender: row\n }) : null\n }, row[columnDef.name]) : row[columnDef.name]\n };\n case \"NSTATE\":\n return {\n cellProps: {\n align: \"center\"\n },\n data: formatJobStatusValue(row[columnDef.name])\n };\n }\n};\n\n//-----------\n//Тело модуля\n//-----------\n\n//Детализация плановой трудоёмкости по графику\nconst LabPlanJobsDtl = ({\n periodId,\n title,\n onHide,\n onProjectClick\n}) => {\n //Состояние таблицы детализации плановой трудоёмкости по графику\n const [planJobsDtl, setPlanJobsDtl] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({\n dataLoaded: false,\n columnsDef: [],\n orders: [],\n rows: [],\n reload: true,\n pageNumber: 1,\n morePages: true\n });\n\n //Подключение к контексту приложения\n const {\n configSystemPageSize\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_application__WEBPACK_IMPORTED_MODULE_2__[\"ApplicationСtx\"]);\n\n //Подключение к контексту взаимодействия с сервером\n const {\n executeStored,\n SERV_DATA_TYPE_CLOB\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_backend__WEBPACK_IMPORTED_MODULE_1__[\"BackEndСtx\"]);\n\n //Загрузка детализации плановой трудоёмкости по ФОТ для ресурса\n const loadPlanFOTDtl = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async () => {\n if (planJobsDtl.reload) {\n const data = await executeStored({\n stored: \"PKG_P8PANELS_PROJECTS.JB_PERIODS_LIST_PLAN_JOBS\",\n args: {\n NJB_PERIODS: periodId,\n CORDERS: {\n VALUE: (0,_core_utils__WEBPACK_IMPORTED_MODULE_3__.object2Base64XML)(planJobsDtl.orders, {\n arrayNodeName: \"orders\"\n }),\n SDATA_TYPE: SERV_DATA_TYPE_CLOB\n },\n NPAGE_NUMBER: planJobsDtl.pageNumber,\n NPAGE_SIZE: configSystemPageSize,\n NINCLUDE_DEF: planJobsDtl.dataLoaded ? 0 : 1\n },\n respArg: \"COUT\"\n });\n setPlanJobsDtl(pv => ({\n ...pv,\n columnsDef: data.XCOLUMNS_DEF ? [...data.XCOLUMNS_DEF] : pv.columnsDef,\n rows: pv.pageNumber == 1 ? [...(data.XROWS || [])] : [...pv.rows, ...(data.XROWS || [])],\n dataLoaded: true,\n reload: false,\n morePages: (data.XROWS || []).length >= configSystemPageSize\n }));\n }\n }, [periodId, planJobsDtl.reload, planJobsDtl.orders, planJobsDtl.dataLoaded, planJobsDtl.pageNumber, executeStored, configSystemPageSize, SERV_DATA_TYPE_CLOB]);\n\n //При изменении состояния сортировки в детализации плана ФОТ по строке ресурса\n const handlePlanJobsDtlDGOrderChanged = ({\n orders\n }) => setPlanJobsDtl(pv => ({\n ...pv,\n orders,\n pageNumber: 1,\n reload: true\n }));\n\n //При изменении количества отображаемых страниц в в детализации плана ФОТ по строке ресурса\n const handlePlanJobsDtlDGPagesCountChanged = () => setPlanJobsDtl(pv => ({\n ...pv,\n pageNumber: pv.pageNumber + 1,\n reload: true\n }));\n\n //При нажатии на проект в таблице детализацц\n const handleProjectClick = ({\n sender\n }) => onProjectClick ? onProjectClick({\n sender\n }) : null;\n\n //При необходимости обновить данные\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n loadPlanFOTDtl();\n }, [planJobsDtl.reload, loadPlanFOTDtl]);\n\n //Генерация содержимого\n return planJobsDtl.dataLoaded ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_10__[\"default\"], {\n open: true,\n onClose: onHide,\n fullWidth: true,\n maxWidth: \"xl\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_11__[\"default\"], null, title), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_12__[\"default\"], null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_components_p8p_data_grid__WEBPACK_IMPORTED_MODULE_6__.P8PDataGrid, _extends({}, _config_wrapper__WEBPACK_IMPORTED_MODULE_5__.P8P_DATA_GRID_CONFIG_PROPS, {\n columnsDef: planJobsDtl.columnsDef,\n rows: planJobsDtl.rows,\n size: _components_p8p_data_grid__WEBPACK_IMPORTED_MODULE_6__.P8P_DATA_GRID_SIZE.SMALL,\n morePages: planJobsDtl.morePages,\n reloading: planJobsDtl.reload,\n valueFormatter: planJobsDtlValueFormatter,\n headCellRender: planJobsDtlHeadCellRender,\n dataCellRender: prms => planJobsDtlDataCellRender({\n ...prms,\n onProjectClick: handleProjectClick\n }),\n onOrderChanged: handlePlanJobsDtlDGOrderChanged,\n onPagesCountChanged: handlePlanJobsDtlDGPagesCountChanged\n }))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_13__[\"default\"], null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_14__[\"default\"], {\n onClick: onHide\n }, _app_text__WEBPACK_IMPORTED_MODULE_4__.BUTTONS.CLOSE))) : null;\n};\n\n//Контроль свойств - Детализация плановой трудоёмкости по графику\nLabPlanJobsDtl.propTypes = {\n periodId: (prop_types__WEBPACK_IMPORTED_MODULE_15___default().number).isRequired,\n title: (prop_types__WEBPACK_IMPORTED_MODULE_15___default().string).isRequired,\n onHide: (prop_types__WEBPACK_IMPORTED_MODULE_15___default().func).isRequired,\n onProjectClick: (prop_types__WEBPACK_IMPORTED_MODULE_15___default().func)\n};\n\n//----------------\n//Интерфейс модуля\n//----------------\n\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/panels/prj_jobs/lab_plan_jobs_dtl.js?"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ LabPlanJobsDtl: () => (/* binding */ LabPlanJobsDtl)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! prop-types */ \"./node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_13___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_13__);\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Dialog/Dialog.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/DialogTitle/DialogTitle.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/DialogContent/DialogContent.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/DialogActions/DialogActions.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Button/Button.js\");\n/* harmony import */ var _context_backend__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../context/backend */ \"./app/context/backend.js\");\n/* harmony import */ var _context_application__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../context/application */ \"./app/context/application.js\");\n/* harmony import */ var _core_utils__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../core/utils */ \"./app/core/utils.js\");\n/* harmony import */ var _app_text__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../../app.text */ \"./app.text.js\");\n/* harmony import */ var _config_wrapper__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../config_wrapper */ \"./app/config_wrapper.js\");\n/* harmony import */ var _components_p8p_data_grid__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../../components/p8p_data_grid */ \"./app/components/p8p_data_grid.js\");\n/* harmony import */ var _layouts__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./layouts */ \"./app/panels/prj_jobs/layouts.js\");\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n/*\r\n Парус 8 - Панели мониторинга - ПУП - Работы проектов\r\n Компонент панели: Детализация плановой трудоёмкости по графику\r\n*/\n\n//---------------------\n//Подключение библиотек\n//---------------------\n\n //Классы React\n //Контроль свойств компонента\n //Интерфейсные элементы\n //Контекст взаимодействия с сервером\n //Контекст приложения\n //Вспомогательные функции\n //Текстовые ресурсы\n //Подключение компонентов к настройкам приложения\n //Таблица данных\n //Дополнительная разметка и вёрстка клиентских элементов\n\n//------------------------------------\n//Вспомогательные функции и компоненты\n//------------------------------------\n\n//-----------\n//Тело модуля\n//-----------\n\n//Детализация плановой трудоёмкости по графику\nconst LabPlanJobsDtl = ({\n periodId,\n title,\n onHide,\n onProjectClick\n}) => {\n //Состояние таблицы детализации плановой трудоёмкости по графику\n const [planJobsDtl, setPlanJobsDtl] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({\n dataLoaded: false,\n columnsDef: [],\n orders: [],\n rows: [],\n reload: true,\n pageNumber: 1,\n morePages: true\n });\n\n //Подключение к контексту приложения\n const {\n configSystemPageSize\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_application__WEBPACK_IMPORTED_MODULE_2__[\"ApplicationСtx\"]);\n\n //Подключение к контексту взаимодействия с сервером\n const {\n executeStored,\n SERV_DATA_TYPE_CLOB\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_backend__WEBPACK_IMPORTED_MODULE_1__[\"BackEndСtx\"]);\n\n //Загрузка детализации плановой трудоёмкости по графику для ресурса\n const loadPlanJobsDtl = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async () => {\n if (planJobsDtl.reload) {\n const data = await executeStored({\n stored: \"PKG_P8PANELS_PROJECTS.JB_PERIODS_LIST_PLAN_JOBS\",\n args: {\n NJB_PERIODS: periodId,\n CORDERS: {\n VALUE: (0,_core_utils__WEBPACK_IMPORTED_MODULE_3__.object2Base64XML)(planJobsDtl.orders, {\n arrayNodeName: \"orders\"\n }),\n SDATA_TYPE: SERV_DATA_TYPE_CLOB\n },\n NPAGE_NUMBER: planJobsDtl.pageNumber,\n NPAGE_SIZE: configSystemPageSize,\n NINCLUDE_DEF: planJobsDtl.dataLoaded ? 0 : 1\n },\n respArg: \"COUT\"\n });\n setPlanJobsDtl(pv => ({\n ...pv,\n columnsDef: data.XCOLUMNS_DEF ? [...data.XCOLUMNS_DEF] : pv.columnsDef,\n rows: pv.pageNumber == 1 ? [...(data.XROWS || [])] : [...pv.rows, ...(data.XROWS || [])],\n dataLoaded: true,\n reload: false,\n morePages: (data.XROWS || []).length >= configSystemPageSize\n }));\n }\n }, [periodId, planJobsDtl.reload, planJobsDtl.orders, planJobsDtl.dataLoaded, planJobsDtl.pageNumber, executeStored, configSystemPageSize, SERV_DATA_TYPE_CLOB]);\n\n //При изменении состояния сортировки в детализации плановой трудоёмкости по графику\n const handlePlanJobsDtlDGOrderChanged = ({\n orders\n }) => setPlanJobsDtl(pv => ({\n ...pv,\n orders,\n pageNumber: 1,\n reload: true\n }));\n\n //При изменении количества отображаемых страниц в детализации плановой трудоёмкости по графику\n const handlePlanJobsDtlDGPagesCountChanged = () => setPlanJobsDtl(pv => ({\n ...pv,\n pageNumber: pv.pageNumber + 1,\n reload: true\n }));\n\n //При нажатии на проект в таблице детализаци\n const handleProjectClick = ({\n sender\n }) => onProjectClick ? onProjectClick({\n sender\n }) : null;\n\n //При необходимости обновить данные\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n loadPlanJobsDtl();\n }, [planJobsDtl.reload, loadPlanJobsDtl]);\n\n //Генерация содержимого\n return planJobsDtl.dataLoaded ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_8__[\"default\"], {\n open: true,\n onClose: onHide,\n fullWidth: true,\n maxWidth: \"xl\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_9__[\"default\"], null, title), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_10__[\"default\"], null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_components_p8p_data_grid__WEBPACK_IMPORTED_MODULE_6__.P8PDataGrid, _extends({}, _config_wrapper__WEBPACK_IMPORTED_MODULE_5__.P8P_DATA_GRID_CONFIG_PROPS, {\n columnsDef: planJobsDtl.columnsDef,\n rows: planJobsDtl.rows,\n size: _components_p8p_data_grid__WEBPACK_IMPORTED_MODULE_6__.P8P_DATA_GRID_SIZE.SMALL,\n morePages: planJobsDtl.morePages,\n reloading: planJobsDtl.reload,\n valueFormatter: _layouts__WEBPACK_IMPORTED_MODULE_7__.planJobsDtlValueFormatter,\n headCellRender: _layouts__WEBPACK_IMPORTED_MODULE_7__.planJobsDtlHeadCellRender,\n dataCellRender: prms => (0,_layouts__WEBPACK_IMPORTED_MODULE_7__.planJobsDtlDataCellRender)({\n ...prms,\n onProjectClick: handleProjectClick\n }),\n onOrderChanged: handlePlanJobsDtlDGOrderChanged,\n onPagesCountChanged: handlePlanJobsDtlDGPagesCountChanged\n }))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_11__[\"default\"], null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_12__[\"default\"], {\n onClick: onHide\n }, _app_text__WEBPACK_IMPORTED_MODULE_4__.BUTTONS.CLOSE))) : null;\n};\n\n//Контроль свойств - Детализация плановой трудоёмкости по графику\nLabPlanJobsDtl.propTypes = {\n periodId: (prop_types__WEBPACK_IMPORTED_MODULE_13___default().number).isRequired,\n title: (prop_types__WEBPACK_IMPORTED_MODULE_13___default().string).isRequired,\n onHide: (prop_types__WEBPACK_IMPORTED_MODULE_13___default().func).isRequired,\n onProjectClick: (prop_types__WEBPACK_IMPORTED_MODULE_13___default().func)\n};\n\n//----------------\n//Интерфейс модуля\n//----------------\n\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/panels/prj_jobs/lab_plan_jobs_dtl.js?"); + +/***/ }), + +/***/ "./app/panels/prj_jobs/layouts.js": +/*!****************************************!*\ + !*** ./app/panels/prj_jobs/layouts.js ***! + \****************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ factRptDtlHeadCellRender: () => (/* binding */ factRptDtlHeadCellRender),\n/* harmony export */ factRptDtlValueFormatter: () => (/* binding */ factRptDtlValueFormatter),\n/* harmony export */ periodsDataCellRender: () => (/* binding */ periodsDataCellRender),\n/* harmony export */ planJobsDtlDataCellRender: () => (/* binding */ planJobsDtlDataCellRender),\n/* harmony export */ planJobsDtlHeadCellRender: () => (/* binding */ planJobsDtlHeadCellRender),\n/* harmony export */ planJobsDtlValueFormatter: () => (/* binding */ planJobsDtlValueFormatter),\n/* harmony export */ taskAttributeRenderer: () => (/* binding */ taskAttributeRenderer)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Stack/Stack.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Icon/Icon.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Link/Link.js\");\n/* harmony import */ var _core_utils__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../core/utils */ \"./app/core/utils.js\");\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n/*\r\n Парус 8 - Панели мониторинга - ПУП - Экономика проектов\r\n Дополнительная разметка и вёрстка клиентских элементов\r\n*/\n\n//---------------------\n//Подключение библиотек\n//---------------------\n\n //Классы React\n //Интерфейсные компоненты\n //Вспомогательные функции\n\n//-----------\n//Тело модуля\n//-----------\n\n//Формирование значения для колонки \"Состояние\" этапа\nconst formatStageStatusValue = value => {\n const [text, icon] = value == 0 ? [\"Зарегистрирован\", \"app_registration\"] : value == 1 ? [\"Открыт\", \"lock_open\"] : value == 2 ? [\"Закрыт\", \"lock_outline\"] : value == 3 ? [\"Согласован\", \"thumb_up_alt\"] : value == 4 ? [\"Исполнение прекращено\", \"block\"] : [\"Остановлен\", \"do_not_disturb_on\"];\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n direction: \"row\",\n gap: 0.5,\n alignItems: \"center\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n title: text\n }, icon), text);\n};\n\n//Формирование значения для колонки \"Состояние\" работы\nconst formatJobStatusValue = (value, addText = false, justifyContent = null) => {\n const [text, icon] = value == 0 ? [\"Не начата\", \"not_started\"] : value == 1 ? [\"Выполняется\", \"loop\"] : value == 2 ? [\"Выполнена\", \"task_alt\"] : value == 3 ? [\"Остановлена\", \"do_not_disturb_on\"] : [\"Отменена\", \"cancel\"];\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_2__[\"default\"], _extends({\n direction: \"row\",\n gap: 0.5,\n alignItems: \"center\"\n }, justifyContent ? {\n justifyContent\n } : {}), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n title: text\n }, icon), addText == true ? text : null);\n};\n\n//Генерация кастомных представлений атрибутов задачи в редакторе\nconst taskAttributeRenderer = ({\n task,\n attribute\n}) => {\n switch (attribute.name) {\n case \"type\":\n return task.type === 1 ? \"Этап проекта\" : \"Работа проекта\";\n case \"state\":\n return task.type === 1 ? formatStageStatusValue(task[attribute.name]) : formatJobStatusValue(task[attribute.name], true);\n default:\n return null;\n }\n};\n\n//Форматирование значений колонок в таблице детализации трудоёмкости по графику\nconst planJobsDtlValueFormatter = ({\n value,\n columnDef\n}) => {\n switch (columnDef.name) {\n case \"NJOB_STATE\":\n return formatJobStatusValue(value, false, \"center\");\n case \"DJOB_BEG\":\n case \"DJOB_END\":\n return (0,_core_utils__WEBPACK_IMPORTED_MODULE_1__.formatDateRF)(value);\n }\n return value;\n};\n\n//Генерация представления ячейки заголовка в таблице детализации трудоёмкости по графику\nconst planJobsDtlHeadCellRender = ({\n columnDef\n}) => {\n switch (columnDef.name) {\n case \"NJOB_STATE\":\n return {\n stackProps: {\n justifyContent: \"center\"\n },\n cellProps: {\n align: \"center\"\n }\n };\n }\n};\n\n//Генерация представления ячейки c данными в таблице детализации трудоёмкости по графику\nconst planJobsDtlDataCellRender = ({\n row,\n columnDef,\n onProjectClick\n}) => {\n switch (columnDef.name) {\n case \"SPRJ\":\n return {\n data: row[columnDef.name] ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n component: \"button\",\n variant: \"body2\",\n align: \"left\",\n underline: \"hover\",\n onClick: () => onProjectClick ? onProjectClick({\n sender: row\n }) : null\n }, row[columnDef.name]) : row[columnDef.name]\n };\n }\n};\n\n//Форматирование значений колонок в таблице детализации трудоёмкости по отчетам\nconst factRptDtlValueFormatter = ({\n value,\n columnDef\n}) => {\n switch (columnDef.name) {\n case \"NJOB_STATE\":\n return formatJobStatusValue(value, false, \"center\");\n case \"DJOB_BEG\":\n case \"DJOB_END\":\n return (0,_core_utils__WEBPACK_IMPORTED_MODULE_1__.formatDateRF)(value);\n }\n return value;\n};\n\n//Генерация представления ячейки заголовка в таблице детализации трудоёмкости по отчетам\nconst factRptDtlHeadCellRender = ({\n columnDef\n}) => {\n switch (columnDef.name) {\n case \"NJOB_STATE\":\n return {\n stackProps: {\n justifyContent: \"center\"\n },\n cellProps: {\n align: \"center\"\n }\n };\n }\n};\n\n//Генерация представления ячейки c данными в таблице периодов балансировки\nconst periodsDataCellRender = ({\n row,\n columnDef,\n onLabPlanFOTClick,\n onLabFactRptClick,\n onLabPlanJobsClick\n}) => {\n switch (columnDef.name) {\n case \"NLAB_PLAN_FOT\":\n case \"NLAB_FACT_RPT\":\n case \"NLAB_PLAN_JOBS\":\n return {\n data: row[columnDef.name] ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n component: \"button\",\n variant: \"body2\",\n align: \"left\",\n underline: \"hover\",\n onClick: () => columnDef.name === \"NLAB_PLAN_FOT\" ? onLabPlanFOTClick ? onLabPlanFOTClick({\n sender: row\n }) : null : columnDef.name === \"NLAB_FACT_RPT\" ? onLabFactRptClick ? onLabFactRptClick({\n sender: row\n }) : null : columnDef.name === \"NLAB_PLAN_JOBS\" ? onLabPlanJobsClick ? onLabPlanJobsClick({\n sender: row\n }) : null : null\n }, row[columnDef.name]) : row[columnDef.name]\n };\n case \"NLAB_DIFF_RPT_FOT\":\n return {\n data: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n style: {\n color: row[columnDef.name] <= 0 ? \"green\" : \"red\"\n }\n }, row[columnDef.name])\n };\n case \"NLAB_DIFF_JOBS_FOT\":\n return {\n data: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n direction: \"row\",\n gap: 0.5,\n alignItems: \"center\",\n justifyContent: \"right\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n style: {\n color: row[columnDef.name] <= 0 ? \"green\" : \"red\"\n }\n }, row[columnDef.name]), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n sx: {\n color: row[columnDef.name] <= 0 ? \"green\" : \"red\"\n }\n }, row[columnDef.name] <= 0 ? \"done\" : \"error\"))\n };\n }\n};\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/panels/prj_jobs/layouts.js?"); /***/ }), @@ -3788,7 +3810,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ PrjJobs: () => (/* binding */ PrjJobs)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! prop-types */ \"./node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_15___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_15__);\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Stack/Stack.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Icon/Icon.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/List/List.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/ListItemButton/ListItemButton.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/ListItemIcon/ListItemIcon.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/ListItemText/ListItemText.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Typography/Typography.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Box/Box.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Fab/Fab.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Drawer/Drawer.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Grid/Grid.js\");\n/* harmony import */ var _context_backend__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../context/backend */ \"./app/context/backend.js\");\n/* harmony import */ var _context_messaging__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../context/messaging */ \"./app/context/messaging.js\");\n/* harmony import */ var _context_application__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../context/application */ \"./app/context/application.js\");\n/* harmony import */ var _core_utils__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../core/utils */ \"./app/core/utils.js\");\n/* harmony import */ var _config_wrapper__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../config_wrapper */ \"./app/config_wrapper.js\");\n/* harmony import */ var _components_p8p_gantt__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../../components/p8p_gantt */ \"./app/components/p8p_gantt.js\");\n/* harmony import */ var _res_mon__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./res_mon */ \"./app/panels/prj_jobs/res_mon.js\");\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n/*\r\n Парус 8 - Панели мониторинга - ПУП - Работы проектов\r\n Панель мониторинга: Корневая панель работ проектов\r\n*/\n\n//---------------------\n//Подключение библиотек\n//---------------------\n\n //Классы React\n //Контроль свойств компонента\n //Интерфейсные элементы\n //Контекст взаимодействия с сервером\n //Контекст сообщений\n //Контекст приложения\n //Вспомогательные функции\n //Подключение компонентов к настройкам приложения\n //Диаграмма Ганта\n //Монитор ресурсов\n\n//---------\n//Константы\n//---------\n\n//Высота диаграммы Ганта\nconst GANTT_HEIGHT = \"75vh\";\n\n//Ширина диаграммы Ганта\nconst GANTT_WIDTH = \"98vw\";\n\n//Стили\nconst STYLES = {\n PROJECTS_LIST_SAVE_BUTTON: {\n backgroundColor: \"orange\"\n },\n PROJECTS_LIST_ITEM_NOJOBS: {\n backgroundColor: \"#ff000045\"\n },\n PROJECTS_LIST_ITEM_PRIMARY: {\n wordWrap: \"break-word\"\n },\n PROJECTS_LIST_ITEM_SECONDARY: {\n wordWrap: \"break-word\",\n fontSize: \"0.5rem\",\n textTransform: \"uppercase\"\n },\n PROJECTS_LIST_ITEM_SECONDARY_NOJOBS: {\n color: \"red\"\n },\n PROJECTS_LIST_ITEM_SECONDARY_NOEDIT: {\n color: \"gray\"\n },\n PROJECTS_LIST_ITEM_SECONDARY_CHANGED: {\n color: \"green\"\n },\n PROJECTS_BUTTON: {\n position: \"absolute\"\n },\n PROJECTS_DRAWER: {\n width: \"250px\",\n flexShrink: 0,\n [`& .MuiDrawer-paper`]: {\n width: \"250px\",\n boxSizing: \"border-box\"\n }\n },\n GANTT_CONTAINER: {\n height: GANTT_HEIGHT,\n width: GANTT_WIDTH\n },\n GANTT_TITLE: {\n paddingLeft: \"100px\",\n paddingRight: \"120px\"\n },\n PERIODS_BUTTON: {\n position: \"absolute\",\n right: \"20px\"\n },\n PERIODS_DRAWER: {\n width: \"1000px\",\n flexShrink: 0,\n [`& .MuiDrawer-paper`]: {\n width: \"1000px\",\n boxSizing: \"border-box\"\n }\n }\n};\n\n//------------------------------------\n//Вспомогательные функции и компоненты\n//------------------------------------\n\n//Формирование значения для колонки \"Состояние\" этапа\nconst formatStageStatusValue = value => {\n const [text, icon] = value == 0 ? [\"Зарегистрирован\", \"app_registration\"] : value == 1 ? [\"Открыт\", \"lock_open\"] : value == 2 ? [\"Закрыт\", \"lock_outline\"] : value == 3 ? [\"Согласован\", \"thumb_up_alt\"] : value == 4 ? [\"Исполнение прекращено\", \"block\"] : [\"Остановлен\", \"do_not_disturb_on\"];\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_8__[\"default\"], {\n direction: \"row\",\n gap: 0.5,\n alignItems: \"center\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_9__[\"default\"], {\n title: text\n }, icon), text);\n};\n\n//Формирование значения для колонки \"Состояние\" работы\nconst formatJobStatusValue = value => {\n const [text, icon] = value == 0 ? [\"Не начата\", \"not_started\"] : value == 1 ? [\"Выполняется\", \"loop\"] : value == 2 ? [\"Выполнена\", \"task_alt\"] : value == 3 ? [\"Остановлена\", \"do_not_disturb_on\"] : [\"Отменена\", \"cancel\"];\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_8__[\"default\"], {\n direction: \"row\",\n gap: 0.5,\n alignItems: \"center\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_9__[\"default\"], {\n title: text\n }, icon), text);\n};\n\n//Список проектов\nconst ProjectsList = ({\n projects = [],\n selectedProject,\n onClick\n} = {}) => {\n //Подключение к контексту сообщений\n const {\n InlineMsgErr\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_messaging__WEBPACK_IMPORTED_MODULE_2__[\"MessagingСtx\"]);\n\n //Генерация содержимого\n return projects.length > 0 ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_10__[\"default\"], null, projects.map(p => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_11__[\"default\"], {\n key: p.NRN,\n sx: p.NJOBS == 0 ? STYLES.PROJECTS_LIST_ITEM_NOJOBS : null,\n selected: p.NRN === selectedProject,\n onClick: () => onClick ? onClick(p) : null\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_12__[\"default\"], null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_9__[\"default\"], {\n title: p.NEDITABLE == 1 ? \"Можно редактировать\" : \"Редактирование недоступно\"\n }, p.NEDITABLE == 1 ? \"edit\" : \"edit_off\")), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_13__[\"default\"], {\n primary: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_14__[\"default\"], {\n sx: STYLES.PROJECTS_LIST_ITEM_PRIMARY\n }, p.SNAME),\n secondary: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_14__[\"default\"], {\n sx: {\n ...STYLES.PROJECTS_LIST_ITEM_SECONDARY,\n ...(p.NJOBS == 0 ? STYLES.PROJECTS_LIST_ITEM_SECONDARY_NOJOBS : p.NCHANGED == 1 ? STYLES.PROJECTS_LIST_ITEM_SECONDARY_CHANGED : STYLES.PROJECTS_LIST_ITEM_SECONDARY_NOEDIT)\n }\n }, p.NJOBS == 1 ? p.NEDITABLE == 1 ? p.NCHANGED == 1 ? \"Изменён\" : \"Не изменён\" : \"Редактирование недоступно\" : \"Работы не определены\")\n })))) : /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(InlineMsgErr, {\n okBtn: false,\n text: \"Нет доступных проектов\"\n });\n};\n\n//Контроль свойств - Список проектов\nProjectsList.propTypes = {\n projects: (prop_types__WEBPACK_IMPORTED_MODULE_15___default().array),\n selectedProject: (prop_types__WEBPACK_IMPORTED_MODULE_15___default().number),\n onClick: (prop_types__WEBPACK_IMPORTED_MODULE_15___default().func)\n};\n\n//-----------\n//Тело модуля\n//-----------\n\n//Корневая панель работ проектов\nconst PrjJobs = () => {\n //Собственное состояние\n let [state, setState] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({\n needSave: false,\n showProjectsList: false,\n showPeriodsList: false,\n init: false,\n dateBegin: null,\n dateFact: null,\n durationMeas: null,\n labMeas: null,\n resourceStatus: null,\n ident: null,\n projects: [],\n projectsLoaded: false,\n selectedProjectJobsLoaded: false,\n selectedProject: null,\n selectedProjectDocRn: null,\n selectedProjectGanttDef: {},\n selectedProjectTasks: []\n });\n\n //Подключение к контексту приложения\n const {\n pOnlineShowDocument\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_application__WEBPACK_IMPORTED_MODULE_3__[\"ApplicationСtx\"]);\n\n //Подключение к контексту сообщений\n const {\n InlineMsgInfo\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_messaging__WEBPACK_IMPORTED_MODULE_2__[\"MessagingСtx\"]);\n\n //Подключение к контексту взаимодействия с сервером\n const {\n executeStored\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_backend__WEBPACK_IMPORTED_MODULE_1__[\"BackEndСtx\"]);\n\n //Загрузка списка проектов\n const loadProjects = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async (force = false) => {\n if (!state.projectsLoaded || force) {\n const data = await executeStored({\n stored: \"PKG_P8PANELS_PROJECTS.JB_PRJCTS_LIST\",\n args: {\n NIDENT: state.ident\n },\n respArg: \"COUT\",\n isArray: name => name === \"XPROJECTS\"\n });\n setState(pv => ({\n ...pv,\n projectsLoaded: true,\n projects: [...(data?.XPROJECTS || [])]\n }));\n }\n }, [executeStored, state.ident, state.projectsLoaded]);\n\n //Загрузка списка работ проекта\n const loadProjectJobs = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async (tasksOnly = false) => {\n const data = await executeStored({\n stored: \"PKG_P8PANELS_PROJECTS.JB_JOBS_LIST\",\n args: {\n NIDENT: state.ident,\n NPRN: state.selectedProject,\n NINCLUDE_DEF: tasksOnly === false ? 1 : 0\n },\n attributeValueProcessor: (name, val) => name == \"numb\" ? undefined : [\"start\", \"end\"].includes(name) ? (0,_core_utils__WEBPACK_IMPORTED_MODULE_4__.formatDateJSONDateOnly)(val) : val,\n respArg: \"COUT\"\n });\n setState(pv => ({\n ...pv,\n selectedProjectJobsLoaded: true,\n selectedProjectGanttDef: tasksOnly === true ? {\n ...pv.selectedProjectGanttDef\n } : data.XGANTT_DEF ? {\n ...data.XGANTT_DEF\n } : {},\n selectedProjectTasks: [...data.XGANTT_TASKS]\n }));\n }, [executeStored, state.ident, state.selectedProject]);\n\n //Изменение работы в графике\n const modifyJob = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async (job, dateFrom, dateTo, dateBegin, dateFact, durationMeas) => {\n let data = null;\n try {\n data = await executeStored({\n stored: \"PKG_P8PANELS_PROJECTS.JB_JOBS_MODIFY_PERIOD\",\n args: {\n NJB_JOBS: job,\n DDATE_FROM: dateFrom,\n DDATE_TO: dateTo,\n DBEGIN: dateBegin,\n DFACT: dateFact,\n NDURATION_MEAS: durationMeas\n }\n });\n if (data?.NRESOURCE_STATUS != -1) {\n setState(pv => ({\n ...pv,\n resourceStatus: data.NRESOURCE_STATUS,\n needSave: true\n }));\n loadProjects(true);\n }\n } finally {\n loadProjectJobs(true);\n }\n }, [executeStored, loadProjectJobs, loadProjects]);\n\n //Сохранение буфера балансировки в проекты\n const saveProjects = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async () => {\n const data = await executeStored({\n stored: \"PKG_P8PANELS_PROJECTS.JB_SAVE\",\n args: {\n NIDENT: state.ident\n },\n respArg: \"COUT\"\n });\n setState(pv => ({\n ...pv,\n needSave: false,\n projects: [...(data?.XPROJECTS || [])]\n }));\n }, [executeStored, state.ident]);\n\n //Инициализация данных балансировки\n const initJobs = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async () => {\n if (!state.init) {\n const data = await executeStored({\n stored: \"PKG_P8PANELS_PROJECTS.JB_INIT\",\n args: {\n DBEGIN: state.dateBegin ? new Date(state.dateBegin) : null,\n DFACT: state.dateFact ? new Date(state.dateFact) : null,\n NDURATION_MEAS: state.durationMeas,\n SLAB_MEAS: state.labMeas,\n NIDENT: state.ident\n }\n });\n setState(pv => ({\n ...pv,\n init: true,\n dateBegin: data.DBEGIN,\n dateFact: data.DFACT,\n durationMeas: data.NDURATION_MEAS,\n labMeas: data.SLAB_MEAS,\n resourceStatus: data.NRESOURCE_STATUS,\n ident: data.NIDENT\n }));\n }\n }, [state.init, state.dateBegin, state.dateFact, state.durationMeas, state.labMeas, state.ident, executeStored]);\n\n //Грузим список проектов при смене идентификатора процесса\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n if (state.ident) loadProjects();\n }, [state.ident, loadProjects]);\n\n //При смене выбранного проекта\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n if (state.selectedProject) loadProjectJobs(false);\n }, [state.selectedProject, loadProjectJobs]);\n\n //При подключении компонента к странице\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n initJobs();\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n //Выбор проекта\n const selectPoject = (project, projectDocRn) => {\n setState(pv => ({\n ...pv,\n selectedProject: project,\n selectedProjectDocRn: projectDocRn,\n selectedProjectJobsLoaded: false,\n selectedProjectTasks: [],\n selectedProjectGanttDef: {},\n showProjectsList: false\n }));\n };\n\n //Сброс выбора проекта\n const unselectProject = () => setState(pv => ({\n ...pv,\n selectedProjectJobsLoaded: false,\n selectedProject: null,\n selectedProjectDocRn: null,\n selectedProjectTasks: [],\n selectedProjectGanttDef: {},\n showProjectsList: false\n }));\n\n //Обработка нажатия на элемент в списке проектов\n const handleProjectClick = project => {\n if (state.selectedProject != project.NRN) selectPoject(project.NRN, project.NPROJECT);else unselectProject();\n };\n\n //Отработка нажатия на заголовок плана-графика\n const handleTitleClick = () => state.selectedProjectDocRn ? pOnlineShowDocument({\n unitCode: \"Projects\",\n document: state.selectedProjectDocRn\n }) : null;\n\n //Обработка измненения сроков задачи в диаграмме Гантта\n const handleTaskDatesChange = ({\n task,\n start,\n end,\n isMain\n }) => {\n if (isMain) modifyJob(task.rn, new Date(start), new Date(end), new Date(state.dateBegin), new Date(state.dateFact), state.durationMeas);\n };\n\n //Генерация кастомных представлений атрибутов задачи в редакторе\n const taskAttributeRenderer = ({\n task,\n attribute\n }) => {\n switch (attribute.name) {\n case \"type\":\n return task.type === 1 ? \"Этап проекта\" : \"Работа проекта\";\n case \"state\":\n return task.type === 1 ? formatStageStatusValue(task[attribute.name]) : formatJobStatusValue(task[attribute.name]);\n default:\n return null;\n }\n };\n\n //Обработка нажатия на сохранение данных в проект\n const handleSaveToProjectsClick = () => saveProjects();\n\n //Обработка нажатия на проект в таблице детализации трудоёмкости по плану-графику монитора ресурсов\n const handlePlanJobsDtlProjectClick = ({\n sender\n }) => {\n setState(pv => ({\n ...pv,\n showPeriodsList: false\n }));\n if (state.selectedProject != sender.NJB_PRJCTS) selectPoject(sender.NJB_PRJCTS, sender.NPROJECT);\n };\n\n //Генерация содержимого\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_16__[\"default\"], {\n p: 2\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_17__[\"default\"], {\n variant: \"extended\",\n sx: STYLES.PROJECTS_BUTTON,\n onClick: () => setState(pv => ({\n ...pv,\n showProjectsList: !pv.showProjectsList\n }))\n }, \"\\u041F\\u0440\\u043E\\u0435\\u043A\\u0442\\u044B\", state.needSave ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), null, \"\\xA0\\xA0\", /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_9__[\"default\"], {\n sx: {\n color: \"orange\"\n }\n }, \"save\")) : null), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_18__[\"default\"], {\n anchor: \"left\",\n open: state.showProjectsList,\n onClose: () => setState(pv => ({\n ...pv,\n showProjectsList: false\n })),\n sx: STYLES.PROJECTS_DRAWER\n }, state.projectsLoaded ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), null, state.needSave ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_10__[\"default\"], null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_11__[\"default\"], {\n sx: STYLES.PROJECTS_LIST_SAVE_BUTTON,\n onClick: handleSaveToProjectsClick\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_12__[\"default\"], null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_9__[\"default\"], null, \"save\")), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_13__[\"default\"], {\n primary: \"\\u0421\\u043E\\u0445\\u0440\\u0430\\u043D\\u0438\\u0442\\u044C\",\n secondary: \"\\u041F\\u0435\\u0440\\u0435\\u043D\\u0441\\u0442\\u0438 \\u0438\\u0437\\u043C\\u0435\\u043D\\u0435\\u043D\\u0438\\u044F \\u0432 \\u043F\\u0440\\u043E\\u0435\\u043A\\u0442\\u044B\"\n }))) : null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(ProjectsList, {\n projects: state.projects,\n selectedProject: state.selectedProject,\n onClick: handleProjectClick\n })) : null), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_17__[\"default\"], {\n variant: \"extended\",\n sx: STYLES.PERIODS_BUTTON,\n onClick: () => setState(pv => ({\n ...pv,\n showPeriodsList: !pv.showPeriodsList\n }))\n }, \"\\u0420\\u0435\\u0441\\u0443\\u0440\\u0441\\u044B\", [0, 1].includes(state.resourceStatus) ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), null, \"\\xA0\\xA0\", /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_9__[\"default\"], {\n sx: {\n color: state.resourceStatus === 0 ? \"green\" : \"red\"\n }\n }, state.resourceStatus === 0 ? \"done\" : \"error\")) : null), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_18__[\"default\"], {\n anchor: \"right\",\n open: state.showPeriodsList,\n onClose: () => setState(pv => ({\n ...pv,\n showPeriodsList: false\n })),\n sx: STYLES.PERIODS_DRAWER\n }, state.ident ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_res_mon__WEBPACK_IMPORTED_MODULE_7__.ResMon, {\n ident: state.ident,\n onPlanJobsDtlProjectClick: handlePlanJobsDtlProjectClick\n }) : null), state.init == true ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_19__[\"default\"], {\n container: true,\n spacing: 1\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_19__[\"default\"], {\n item: true,\n xs: 12\n }, state.selectedProjectJobsLoaded ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_16__[\"default\"], {\n sx: STYLES.GANTT_CONTAINER,\n p: 1\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_components_p8p_gantt__WEBPACK_IMPORTED_MODULE_6__.P8PGantt, _extends({}, _config_wrapper__WEBPACK_IMPORTED_MODULE_5__.P8P_GANTT_CONFIG_PROPS, state.selectedProjectGanttDef, {\n height: GANTT_HEIGHT,\n titleStyle: STYLES.GANTT_TITLE,\n onTitleClick: handleTitleClick,\n tasks: state.selectedProjectTasks,\n onTaskDatesChange: handleTaskDatesChange,\n taskAttributeRenderer: taskAttributeRenderer\n }))) : !state.selectedProject ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(InlineMsgInfo, {\n okBtn: false,\n text: \"Укажите проект для отображения его плана-графика\"\n }) : null)) : null);\n};\n\n//----------------\n//Интерфейс модуля\n//----------------\n\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/panels/prj_jobs/prj_jobs.js?"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ PrjJobs: () => (/* binding */ PrjJobs)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! prop-types */ \"./node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_15___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_15__);\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/List/List.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/ListItemButton/ListItemButton.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/ListItemIcon/ListItemIcon.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Icon/Icon.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/ListItemText/ListItemText.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Typography/Typography.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Box/Box.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Fab/Fab.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Drawer/Drawer.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Grid/Grid.js\");\n/* harmony import */ var _context_backend__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../context/backend */ \"./app/context/backend.js\");\n/* harmony import */ var _context_messaging__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../context/messaging */ \"./app/context/messaging.js\");\n/* harmony import */ var _context_application__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../context/application */ \"./app/context/application.js\");\n/* harmony import */ var _core_utils__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../core/utils */ \"./app/core/utils.js\");\n/* harmony import */ var _config_wrapper__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../config_wrapper */ \"./app/config_wrapper.js\");\n/* harmony import */ var _components_p8p_gantt__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../../components/p8p_gantt */ \"./app/components/p8p_gantt.js\");\n/* harmony import */ var _res_mon__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./res_mon */ \"./app/panels/prj_jobs/res_mon.js\");\n/* harmony import */ var _layouts__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./layouts */ \"./app/panels/prj_jobs/layouts.js\");\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n/*\r\n Парус 8 - Панели мониторинга - ПУП - Работы проектов\r\n Панель мониторинга: Корневая панель работ проектов\r\n*/\n\n//---------------------\n//Подключение библиотек\n//---------------------\n\n //Классы React\n //Контроль свойств компонента\n //Интерфейсные элементы\n //Контекст взаимодействия с сервером\n //Контекст сообщений\n //Контекст приложения\n //Вспомогательные функции\n //Подключение компонентов к настройкам приложения\n //Диаграмма Ганта\n //Монитор ресурсов\n //Дополнительная разметка и вёрстка клиентских элементов\n\n//---------\n//Константы\n//---------\n\n//Высота диаграммы Ганта\nconst GANTT_HEIGHT = \"75vh\";\n\n//Ширина диаграммы Ганта\nconst GANTT_WIDTH = \"98vw\";\n\n//Стили\nconst STYLES = {\n PROJECTS_LIST_SAVE_BUTTON: {\n backgroundColor: \"orange\"\n },\n PROJECTS_LIST_ITEM_NOJOBS: {\n backgroundColor: \"#ff000045\"\n },\n PROJECTS_LIST_ITEM_PRIMARY: {\n wordWrap: \"break-word\"\n },\n PROJECTS_LIST_ITEM_SECONDARY: {\n wordWrap: \"break-word\",\n fontSize: \"0.5rem\",\n textTransform: \"uppercase\"\n },\n PROJECTS_LIST_ITEM_SECONDARY_NOJOBS: {\n color: \"red\"\n },\n PROJECTS_LIST_ITEM_SECONDARY_NOEDIT: {\n color: \"gray\"\n },\n PROJECTS_LIST_ITEM_SECONDARY_CHANGED: {\n color: \"green\"\n },\n PROJECTS_BUTTON: {\n position: \"absolute\"\n },\n PROJECTS_DRAWER: {\n width: \"250px\",\n flexShrink: 0,\n [`& .MuiDrawer-paper`]: {\n width: \"250px\",\n boxSizing: \"border-box\"\n }\n },\n GANTT_CONTAINER: {\n height: GANTT_HEIGHT,\n width: GANTT_WIDTH\n },\n GANTT_TITLE: {\n paddingLeft: \"100px\",\n paddingRight: \"120px\"\n },\n PERIODS_BUTTON: {\n position: \"absolute\",\n right: \"20px\"\n },\n PERIODS_DRAWER: {\n width: \"1200px\",\n flexShrink: 0,\n [`& .MuiDrawer-paper`]: {\n width: \"1200px\",\n boxSizing: \"border-box\"\n }\n }\n};\n\n//------------------------------------\n//Вспомогательные функции и компоненты\n//------------------------------------\n\n//Список проектов\nconst ProjectsList = ({\n projects = [],\n selectedProject,\n onClick\n} = {}) => {\n //Подключение к контексту сообщений\n const {\n InlineMsgErr\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_messaging__WEBPACK_IMPORTED_MODULE_2__[\"MessagingСtx\"]);\n\n //Генерация содержимого\n return projects.length > 0 ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_9__[\"default\"], null, projects.map(p => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_10__[\"default\"], {\n key: p.NRN,\n sx: p.NJOBS == 0 ? STYLES.PROJECTS_LIST_ITEM_NOJOBS : null,\n selected: p.NRN === selectedProject,\n onClick: () => onClick ? onClick(p) : null\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_11__[\"default\"], null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_12__[\"default\"], {\n title: p.NEDITABLE == 1 ? \"Можно редактировать\" : \"Редактирование недоступно\"\n }, p.NEDITABLE == 1 ? \"edit\" : \"edit_off\")), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_13__[\"default\"], {\n primary: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_14__[\"default\"], {\n sx: STYLES.PROJECTS_LIST_ITEM_PRIMARY\n }, p.SNAME),\n secondary: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_14__[\"default\"], {\n sx: {\n ...STYLES.PROJECTS_LIST_ITEM_SECONDARY,\n ...(p.NJOBS == 0 ? STYLES.PROJECTS_LIST_ITEM_SECONDARY_NOJOBS : p.NCHANGED == 1 ? STYLES.PROJECTS_LIST_ITEM_SECONDARY_CHANGED : STYLES.PROJECTS_LIST_ITEM_SECONDARY_NOEDIT)\n }\n }, p.NJOBS == 1 ? p.NEDITABLE == 1 ? p.NCHANGED == 1 ? \"Изменён\" : \"Не изменён\" : \"Редактирование недоступно\" : \"Работы не определены\")\n })))) : /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(InlineMsgErr, {\n okBtn: false,\n text: \"Нет доступных проектов\"\n });\n};\n\n//Контроль свойств - Список проектов\nProjectsList.propTypes = {\n projects: (prop_types__WEBPACK_IMPORTED_MODULE_15___default().array),\n selectedProject: (prop_types__WEBPACK_IMPORTED_MODULE_15___default().number),\n onClick: (prop_types__WEBPACK_IMPORTED_MODULE_15___default().func)\n};\n\n//-----------\n//Тело модуля\n//-----------\n\n//Корневая панель работ проектов\nconst PrjJobs = () => {\n //Собственное состояние\n let [state, setState] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({\n needSave: false,\n showProjectsList: false,\n showPeriodsList: false,\n init: false,\n dateBegin: null,\n dateFact: null,\n durationMeas: null,\n labMeas: null,\n resourceStatus: null,\n ident: null,\n projects: [],\n projectsLoaded: false,\n selectedProjectJobsLoaded: false,\n selectedProject: null,\n selectedProjectDocRn: null,\n selectedProjectGanttDef: {},\n selectedProjectTasks: []\n });\n\n //Подключение к контексту приложения\n const {\n pOnlineShowDocument\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_application__WEBPACK_IMPORTED_MODULE_3__[\"ApplicationСtx\"]);\n\n //Подключение к контексту сообщений\n const {\n InlineMsgInfo\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_messaging__WEBPACK_IMPORTED_MODULE_2__[\"MessagingСtx\"]);\n\n //Подключение к контексту взаимодействия с сервером\n const {\n executeStored\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_backend__WEBPACK_IMPORTED_MODULE_1__[\"BackEndСtx\"]);\n\n //Загрузка списка проектов\n const loadProjects = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async (force = false) => {\n if (!state.projectsLoaded || force) {\n const data = await executeStored({\n stored: \"PKG_P8PANELS_PROJECTS.JB_PRJCTS_LIST\",\n args: {\n NIDENT: state.ident\n },\n respArg: \"COUT\",\n isArray: name => name === \"XPROJECTS\"\n });\n setState(pv => ({\n ...pv,\n projectsLoaded: true,\n projects: [...(data?.XPROJECTS || [])]\n }));\n }\n }, [executeStored, state.ident, state.projectsLoaded]);\n\n //Загрузка списка работ проекта\n const loadProjectJobs = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async (tasksOnly = false) => {\n const data = await executeStored({\n stored: \"PKG_P8PANELS_PROJECTS.JB_JOBS_LIST\",\n args: {\n NIDENT: state.ident,\n NPRN: state.selectedProject,\n NINCLUDE_DEF: tasksOnly === false ? 1 : 0\n },\n attributeValueProcessor: (name, val) => name == \"numb\" ? undefined : [\"start\", \"end\"].includes(name) ? (0,_core_utils__WEBPACK_IMPORTED_MODULE_4__.formatDateJSONDateOnly)(val) : val,\n respArg: \"COUT\"\n });\n setState(pv => ({\n ...pv,\n selectedProjectJobsLoaded: true,\n selectedProjectGanttDef: tasksOnly === true ? {\n ...pv.selectedProjectGanttDef\n } : data.XGANTT_DEF ? {\n ...data.XGANTT_DEF\n } : {},\n selectedProjectTasks: [...data.XGANTT_TASKS]\n }));\n }, [executeStored, state.ident, state.selectedProject]);\n\n //Изменение работы в графике\n const modifyJob = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async (job, dateFrom, dateTo, dateBegin, dateFact, durationMeas) => {\n let data = null;\n try {\n data = await executeStored({\n stored: \"PKG_P8PANELS_PROJECTS.JB_JOBS_MODIFY_PERIOD\",\n args: {\n NJB_JOBS: job,\n DDATE_FROM: dateFrom,\n DDATE_TO: dateTo,\n DBEGIN: dateBegin,\n DFACT: dateFact,\n NDURATION_MEAS: durationMeas\n }\n });\n if (data?.NRESOURCE_STATUS != -1) {\n setState(pv => ({\n ...pv,\n resourceStatus: data.NRESOURCE_STATUS,\n needSave: true\n }));\n loadProjects(true);\n }\n } finally {\n loadProjectJobs(true);\n }\n }, [executeStored, loadProjectJobs, loadProjects]);\n\n //Сохранение буфера балансировки в проекты\n const saveProjects = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async () => {\n const data = await executeStored({\n stored: \"PKG_P8PANELS_PROJECTS.JB_SAVE\",\n args: {\n NIDENT: state.ident\n },\n respArg: \"COUT\"\n });\n setState(pv => ({\n ...pv,\n needSave: false,\n projects: [...(data?.XPROJECTS || [])]\n }));\n }, [executeStored, state.ident]);\n\n //Инициализация данных балансировки\n const initJobs = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async () => {\n if (!state.init) {\n const data = await executeStored({\n stored: \"PKG_P8PANELS_PROJECTS.JB_INIT\",\n args: {\n DBEGIN: state.dateBegin ? new Date(state.dateBegin) : null,\n DFACT: state.dateFact ? new Date(state.dateFact) : null,\n NDURATION_MEAS: state.durationMeas,\n SLAB_MEAS: state.labMeas,\n NIDENT: state.ident\n }\n });\n setState(pv => ({\n ...pv,\n init: true,\n dateBegin: data.DBEGIN,\n dateFact: data.DFACT,\n durationMeas: data.NDURATION_MEAS,\n labMeas: data.SLAB_MEAS,\n resourceStatus: data.NRESOURCE_STATUS,\n ident: data.NIDENT\n }));\n }\n }, [state.init, state.dateBegin, state.dateFact, state.durationMeas, state.labMeas, state.ident, executeStored]);\n\n //Грузим список проектов при смене идентификатора процесса\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n if (state.ident) loadProjects();\n }, [state.ident, loadProjects]);\n\n //При смене выбранного проекта\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n if (state.selectedProject) loadProjectJobs(false);\n }, [state.selectedProject, loadProjectJobs]);\n\n //При подключении компонента к странице\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n initJobs();\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n //Выбор проекта\n const selectPoject = (project, projectDocRn) => {\n setState(pv => ({\n ...pv,\n selectedProject: project,\n selectedProjectDocRn: projectDocRn,\n selectedProjectJobsLoaded: false,\n selectedProjectTasks: [],\n selectedProjectGanttDef: {},\n showProjectsList: false\n }));\n };\n\n //Сброс выбора проекта\n const unselectProject = () => setState(pv => ({\n ...pv,\n selectedProjectJobsLoaded: false,\n selectedProject: null,\n selectedProjectDocRn: null,\n selectedProjectTasks: [],\n selectedProjectGanttDef: {},\n showProjectsList: false\n }));\n\n //Обработка нажатия на элемент в списке проектов\n const handleProjectClick = project => {\n if (state.selectedProject != project.NRN) selectPoject(project.NRN, project.NPROJECT);else unselectProject();\n };\n\n //Отработка нажатия на заголовок плана-графика\n const handleTitleClick = () => state.selectedProjectDocRn ? pOnlineShowDocument({\n unitCode: \"Projects\",\n document: state.selectedProjectDocRn\n }) : null;\n\n //Обработка измненения сроков задачи в диаграмме Гантта\n const handleTaskDatesChange = ({\n task,\n start,\n end,\n isMain\n }) => {\n if (isMain) modifyJob(task.rn, new Date(start), new Date(end), new Date(state.dateBegin), new Date(state.dateFact), state.durationMeas);\n };\n\n //Обработка нажатия на сохранение данных в проект\n const handleSaveToProjectsClick = () => saveProjects();\n\n //Обработка нажатия на проект в таблице детализации трудоёмкости по плану-графику монитора ресурсов\n const handlePlanJobsDtlProjectClick = ({\n sender\n }) => {\n setState(pv => ({\n ...pv,\n showPeriodsList: false\n }));\n if (state.selectedProject != sender.NJB_PRJCTS) selectPoject(sender.NJB_PRJCTS, sender.NPROJECT);\n };\n\n //Генерация содержимого\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_16__[\"default\"], {\n p: 2\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_17__[\"default\"], {\n variant: \"extended\",\n sx: STYLES.PROJECTS_BUTTON,\n onClick: () => setState(pv => ({\n ...pv,\n showProjectsList: !pv.showProjectsList\n }))\n }, \"\\u041F\\u0440\\u043E\\u0435\\u043A\\u0442\\u044B\", state.needSave ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), null, \"\\xA0\\xA0\", /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_12__[\"default\"], {\n sx: {\n color: \"orange\"\n }\n }, \"save\")) : null), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_18__[\"default\"], {\n anchor: \"left\",\n open: state.showProjectsList,\n onClose: () => setState(pv => ({\n ...pv,\n showProjectsList: false\n })),\n sx: STYLES.PROJECTS_DRAWER\n }, state.projectsLoaded ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), null, state.needSave ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_9__[\"default\"], null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_10__[\"default\"], {\n sx: STYLES.PROJECTS_LIST_SAVE_BUTTON,\n onClick: handleSaveToProjectsClick\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_11__[\"default\"], null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_12__[\"default\"], null, \"save\")), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_13__[\"default\"], {\n primary: \"\\u0421\\u043E\\u0445\\u0440\\u0430\\u043D\\u0438\\u0442\\u044C\",\n secondary: \"\\u041F\\u0435\\u0440\\u0435\\u043D\\u0441\\u0442\\u0438 \\u0438\\u0437\\u043C\\u0435\\u043D\\u0435\\u043D\\u0438\\u044F \\u0432 \\u043F\\u0440\\u043E\\u0435\\u043A\\u0442\\u044B\"\n }))) : null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(ProjectsList, {\n projects: state.projects,\n selectedProject: state.selectedProject,\n onClick: handleProjectClick\n })) : null), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_17__[\"default\"], {\n variant: \"extended\",\n sx: STYLES.PERIODS_BUTTON,\n onClick: () => setState(pv => ({\n ...pv,\n showPeriodsList: !pv.showPeriodsList\n }))\n }, \"\\u0420\\u0435\\u0441\\u0443\\u0440\\u0441\\u044B\", [0, 1].includes(state.resourceStatus) ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), null, \"\\xA0\\xA0\", /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_12__[\"default\"], {\n sx: {\n color: state.resourceStatus === 0 ? \"green\" : \"red\"\n }\n }, state.resourceStatus === 0 ? \"done\" : \"error\")) : null), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_18__[\"default\"], {\n anchor: \"right\",\n open: state.showPeriodsList,\n onClose: () => setState(pv => ({\n ...pv,\n showPeriodsList: false\n })),\n sx: STYLES.PERIODS_DRAWER\n }, state.ident ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_res_mon__WEBPACK_IMPORTED_MODULE_7__.ResMon, {\n ident: state.ident,\n onPlanJobsDtlProjectClick: handlePlanJobsDtlProjectClick\n }) : null), state.init == true ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_19__[\"default\"], {\n container: true,\n spacing: 1\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_19__[\"default\"], {\n item: true,\n xs: 12\n }, state.selectedProjectJobsLoaded ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_16__[\"default\"], {\n sx: STYLES.GANTT_CONTAINER,\n p: 1\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_components_p8p_gantt__WEBPACK_IMPORTED_MODULE_6__.P8PGantt, _extends({}, _config_wrapper__WEBPACK_IMPORTED_MODULE_5__.P8P_GANTT_CONFIG_PROPS, state.selectedProjectGanttDef, {\n height: GANTT_HEIGHT,\n titleStyle: STYLES.GANTT_TITLE,\n onTitleClick: handleTitleClick,\n tasks: state.selectedProjectTasks,\n onTaskDatesChange: handleTaskDatesChange,\n taskAttributeRenderer: _layouts__WEBPACK_IMPORTED_MODULE_8__.taskAttributeRenderer\n }))) : !state.selectedProject ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(InlineMsgInfo, {\n okBtn: false,\n text: \"Укажите проект для отображения его плана-графика\"\n }) : null)) : null);\n};\n\n//----------------\n//Интерфейс модуля\n//----------------\n\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/panels/prj_jobs/prj_jobs.js?"); /***/ }), @@ -3799,7 +3821,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ ResMon: () => (/* binding */ ResMon)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! prop-types */ \"./node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_11___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_11__);\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Link/Link.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Stack/Stack.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Icon/Icon.js\");\n/* harmony import */ var _context_backend__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../context/backend */ \"./app/context/backend.js\");\n/* harmony import */ var _context_application__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../context/application */ \"./app/context/application.js\");\n/* harmony import */ var _core_utils__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../core/utils */ \"./app/core/utils.js\");\n/* harmony import */ var _config_wrapper__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../config_wrapper */ \"./app/config_wrapper.js\");\n/* harmony import */ var _components_p8p_data_grid__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../components/p8p_data_grid */ \"./app/components/p8p_data_grid.js\");\n/* harmony import */ var _lab_plan_fot_dtl__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./lab_plan_fot_dtl */ \"./app/panels/prj_jobs/lab_plan_fot_dtl.js\");\n/* harmony import */ var _lab_plan_jobs_dtl__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./lab_plan_jobs_dtl */ \"./app/panels/prj_jobs/lab_plan_jobs_dtl.js\");\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n/*\r\n Парус 8 - Панели мониторинга - ПУП - Работы проектов\r\n Компонент панели: Монитор ресурсов\r\n*/\n\n//---------------------\n//Подключение библиотек\n//---------------------\n\n //Классы React\n //Контроль свойств компонента\n //Интерфейсные элементы\n //Контекст взаимодействия с сервером\n //Контекст приложения\n //Вспомогательные функции\n //Подключение компонентов к настройкам приложения\n //Таблица данных\n //Детализация плановой трудоёмкости по ФОТ\n //Детализация плановой трудоёмкости по графику\n\n//------------------------------------\n//Вспомогательные функции и компоненты\n//------------------------------------\n\n//Генерация представления ячейки c данными в таблице периодов балансировки\nconst periodsDataCellRender = ({\n row,\n columnDef,\n onLabPlanFOTClick,\n onLabPlanJobsClick\n}) => {\n switch (columnDef.name) {\n case \"NLAB_PLAN_FOT\":\n return {\n data: row[columnDef.name] ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_8__[\"default\"], {\n component: \"button\",\n variant: \"body2\",\n align: \"left\",\n underline: \"hover\",\n onClick: () => onLabPlanFOTClick ? onLabPlanFOTClick({\n sender: row\n }) : null\n }, row[columnDef.name]) : row[columnDef.name]\n };\n case \"NLAB_DIFF_RPT_FOT\":\n return {\n data: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n style: {\n color: row[columnDef.name] <= 0 ? \"green\" : \"red\"\n }\n }, row[columnDef.name])\n };\n case \"NLAB_PLAN_JOBS\":\n return {\n data: row[columnDef.name] ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_8__[\"default\"], {\n component: \"button\",\n variant: \"body2\",\n align: \"left\",\n underline: \"hover\",\n onClick: () => onLabPlanJobsClick ? onLabPlanJobsClick({\n sender: row\n }) : null\n }, row[columnDef.name]) : row[columnDef.name]\n };\n case \"NLAB_DIFF_JOBS_FOT\":\n return {\n data: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_9__[\"default\"], {\n direction: \"row\",\n gap: 0.5,\n alignItems: \"center\",\n justifyContent: \"right\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n style: {\n color: row[columnDef.name] <= 0 ? \"green\" : \"red\"\n }\n }, row[columnDef.name]), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_10__[\"default\"], {\n sx: {\n color: row[columnDef.name] <= 0 ? \"green\" : \"red\"\n }\n }, row[columnDef.name] <= 0 ? \"done\" : \"error\"))\n };\n }\n};\n\n//-----------\n//Тело модуля\n//-----------\n\n//Монитор ресурсов\nconst ResMon = ({\n ident,\n onPlanJobsDtlProjectClick\n}) => {\n //Собственное состояние\n const [state, setState] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({\n displayPlanFOTDtl: null,\n titlePlanFOTDtl: null,\n displayPlanJobsDtl: null,\n titlePlanJobsDtl: null\n });\n\n //Состояние таблицы периодов монитора ресурсов\n const [peridos, setPeriods] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({\n dataLoaded: false,\n columnsDef: [],\n orders: [],\n rows: [],\n reload: true,\n pageNumber: 1,\n morePages: true\n });\n\n //Подключение к контексту приложения\n const {\n configSystemPageSize\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_application__WEBPACK_IMPORTED_MODULE_2__[\"ApplicationСtx\"]);\n\n //Подключение к контексту взаимодействия с сервером\n const {\n executeStored,\n SERV_DATA_TYPE_CLOB\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_backend__WEBPACK_IMPORTED_MODULE_1__[\"BackEndСtx\"]);\n\n //Загрузка данных монитора балансировки периодов с сервера\n const loadPeriods = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async () => {\n if (peridos.reload) {\n const data = await executeStored({\n stored: \"PKG_P8PANELS_PROJECTS.JB_PERIODS_LIST\",\n args: {\n NIDENT: ident,\n CORDERS: {\n VALUE: (0,_core_utils__WEBPACK_IMPORTED_MODULE_3__.object2Base64XML)(peridos.orders, {\n arrayNodeName: \"orders\"\n }),\n SDATA_TYPE: SERV_DATA_TYPE_CLOB\n },\n NPAGE_NUMBER: peridos.pageNumber,\n NPAGE_SIZE: configSystemPageSize,\n NINCLUDE_DEF: peridos.dataLoaded ? 0 : 1\n },\n attributeValueProcessor: (name, val) => name == \"SPERIOD\" ? undefined : val,\n respArg: \"COUT\"\n });\n setPeriods(pv => ({\n ...pv,\n columnsDef: data.XCOLUMNS_DEF ? [...data.XCOLUMNS_DEF] : pv.columnsDef,\n rows: pv.pageNumber == 1 ? [...(data.XROWS || [])] : [...pv.rows, ...(data.XROWS || [])],\n dataLoaded: true,\n reload: false,\n morePages: (data.XROWS || []).length >= configSystemPageSize\n }));\n }\n }, [ident, peridos.reload, peridos.orders, peridos.dataLoaded, peridos.pageNumber, executeStored, configSystemPageSize, SERV_DATA_TYPE_CLOB]);\n\n //При сокрытии детализации\n const handleHideDtl = () => setState(pv => ({\n ...pv,\n displayPlanFOTDtl: null,\n titlePlanFOTDtl: null,\n displayPlanJobsDtl: null,\n titlePlanJobsDtl: null\n }));\n\n //При нажатии на плановую трудоёмкость по ФОТ\n const handleLabPlanFOTClick = ({\n sender\n }) => setState(pv => ({\n ...pv,\n displayPlanFOTDtl: sender.NRN,\n titlePlanFOTDtl: `${sender.SPERIOD} - ${sender.SINS_DEPARTMENT} - ${sender.SFCMANPOWER} - ${sender.NLAB_PLAN_FOT}`\n }));\n\n //При нажатии на проект в списке детализации плановой трудоёмкости по графику\n const handleLabPlanJobsClick = ({\n sender\n }) => setState(pv => ({\n ...pv,\n displayPlanJobsDtl: sender.NRN,\n titlePlanJobsDtl: `${sender.SPERIOD} - ${sender.SINS_DEPARTMENT} - ${sender.SFCMANPOWER} - ${sender.NLAB_PLAN_JOBS}`\n }));\n\n //При изменении состояния сортировки в таблице периодов балансировки\n const handlePeriodsOrderChanged = ({\n orders\n }) => setPeriods(pv => ({\n ...pv,\n orders,\n pageNumber: 1,\n reload: true\n }));\n\n //При изменении количества отображаемых страниц в таблице периодов балансировки\n const handlePeriodsPagesCountChanged = () => setPeriods(pv => ({\n ...pv,\n pageNumber: pv.pageNumber + 1,\n reload: true\n }));\n\n //При нажатии на проект в таблице детализации трудоёмкости по плану-графику\n const handlePlanJobsDtlProjectClick = ({\n sender\n }) => onPlanJobsDtlProjectClick ? onPlanJobsDtlProjectClick({\n sender\n }) : null;\n\n //При необходимости обновить данные\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n loadPeriods();\n }, [peridos.reload, loadPeriods]);\n\n //Генерация содержимого\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), null, peridos.dataLoaded ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_components_p8p_data_grid__WEBPACK_IMPORTED_MODULE_5__.P8PDataGrid, _extends({}, _config_wrapper__WEBPACK_IMPORTED_MODULE_4__.P8P_DATA_GRID_CONFIG_PROPS, {\n columnsDef: peridos.columnsDef,\n rows: peridos.rows,\n size: _components_p8p_data_grid__WEBPACK_IMPORTED_MODULE_5__.P8P_DATA_GRID_SIZE.SMALL,\n morePages: peridos.morePages,\n reloading: peridos.reload,\n onOrderChanged: handlePeriodsOrderChanged,\n onPagesCountChanged: handlePeriodsPagesCountChanged,\n dataCellRender: prms => periodsDataCellRender({\n ...prms,\n onLabPlanFOTClick: handleLabPlanFOTClick,\n onLabPlanJobsClick: handleLabPlanJobsClick\n })\n })) : null, state.displayPlanFOTDtl ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_lab_plan_fot_dtl__WEBPACK_IMPORTED_MODULE_6__.LabPlanFOTDtl, {\n periodId: state.displayPlanFOTDtl,\n title: state.titlePlanFOTDtl,\n onHide: handleHideDtl\n }) : null, state.displayPlanJobsDtl ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_lab_plan_jobs_dtl__WEBPACK_IMPORTED_MODULE_7__.LabPlanJobsDtl, {\n periodId: state.displayPlanJobsDtl,\n title: state.titlePlanJobsDtl,\n onHide: handleHideDtl,\n onProjectClick: handlePlanJobsDtlProjectClick\n }) : null);\n};\n\n//Контроль свойств - Монитор ресурсов\nResMon.propTypes = {\n ident: (prop_types__WEBPACK_IMPORTED_MODULE_11___default().number).isRequired,\n onPlanJobsDtlProjectClick: (prop_types__WEBPACK_IMPORTED_MODULE_11___default().func)\n};\n\n//----------------\n//Интерфейс модуля\n//----------------\n\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/panels/prj_jobs/res_mon.js?"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ ResMon: () => (/* binding */ ResMon)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! prop-types */ \"./node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_10___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_10__);\n/* harmony import */ var _context_backend__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../context/backend */ \"./app/context/backend.js\");\n/* harmony import */ var _context_application__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../context/application */ \"./app/context/application.js\");\n/* harmony import */ var _core_utils__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../core/utils */ \"./app/core/utils.js\");\n/* harmony import */ var _config_wrapper__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../config_wrapper */ \"./app/config_wrapper.js\");\n/* harmony import */ var _components_p8p_data_grid__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../components/p8p_data_grid */ \"./app/components/p8p_data_grid.js\");\n/* harmony import */ var _lab_plan_fot_dtl__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./lab_plan_fot_dtl */ \"./app/panels/prj_jobs/lab_plan_fot_dtl.js\");\n/* harmony import */ var _lab_fact_rpt_dtl__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./lab_fact_rpt_dtl */ \"./app/panels/prj_jobs/lab_fact_rpt_dtl.js\");\n/* harmony import */ var _lab_plan_jobs_dtl__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./lab_plan_jobs_dtl */ \"./app/panels/prj_jobs/lab_plan_jobs_dtl.js\");\n/* harmony import */ var _layouts__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./layouts */ \"./app/panels/prj_jobs/layouts.js\");\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n/*\r\n Парус 8 - Панели мониторинга - ПУП - Работы проектов\r\n Компонент панели: Монитор ресурсов\r\n*/\n\n//---------------------\n//Подключение библиотек\n//---------------------\n\n //Классы React\n //Контроль свойств компонента\n //Контекст взаимодействия с сервером\n //Контекст приложения\n //Вспомогательные функции\n //Подключение компонентов к настройкам приложения\n //Таблица данных\n //Детализация плановой трудоёмкости по ФОТ\n //Детализация фактической трудоёмкости по \"Планам и отчетам подразделений\"\n //Детализация плановой трудоёмкости по графику\n //Дополнительная разметка и вёрстка клиентских элементов\n\n//-----------\n//Тело модуля\n//-----------\n\n//Монитор ресурсов\nconst ResMon = ({\n ident,\n onPlanJobsDtlProjectClick\n}) => {\n //Собственное состояние\n const [state, setState] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({\n displayPlanFOTDtl: null,\n titlePlanFOTDtl: null,\n displayFactRptDtl: null,\n titleFactRptDtl: null,\n displayPlanJobsDtl: null,\n titlePlanJobsDtl: null\n });\n\n //Состояние таблицы периодов монитора ресурсов\n const [peridos, setPeriods] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({\n dataLoaded: false,\n columnsDef: [],\n orders: [],\n rows: [],\n reload: true,\n pageNumber: 1,\n morePages: true\n });\n\n //Подключение к контексту приложения\n const {\n configSystemPageSize\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_application__WEBPACK_IMPORTED_MODULE_2__[\"ApplicationСtx\"]);\n\n //Подключение к контексту взаимодействия с сервером\n const {\n executeStored,\n SERV_DATA_TYPE_CLOB\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_backend__WEBPACK_IMPORTED_MODULE_1__[\"BackEndСtx\"]);\n\n //Загрузка данных монитора балансировки периодов с сервера\n const loadPeriods = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async () => {\n if (peridos.reload) {\n const data = await executeStored({\n stored: \"PKG_P8PANELS_PROJECTS.JB_PERIODS_LIST\",\n args: {\n NIDENT: ident,\n CORDERS: {\n VALUE: (0,_core_utils__WEBPACK_IMPORTED_MODULE_3__.object2Base64XML)(peridos.orders, {\n arrayNodeName: \"orders\"\n }),\n SDATA_TYPE: SERV_DATA_TYPE_CLOB\n },\n NPAGE_NUMBER: peridos.pageNumber,\n NPAGE_SIZE: configSystemPageSize,\n NINCLUDE_DEF: peridos.dataLoaded ? 0 : 1\n },\n attributeValueProcessor: (name, val) => name == \"SPERIOD\" ? undefined : val,\n respArg: \"COUT\"\n });\n setPeriods(pv => ({\n ...pv,\n columnsDef: data.XCOLUMNS_DEF ? [...data.XCOLUMNS_DEF] : pv.columnsDef,\n rows: pv.pageNumber == 1 ? [...(data.XROWS || [])] : [...pv.rows, ...(data.XROWS || [])],\n dataLoaded: true,\n reload: false,\n morePages: (data.XROWS || []).length >= configSystemPageSize\n }));\n }\n }, [ident, peridos.reload, peridos.orders, peridos.dataLoaded, peridos.pageNumber, executeStored, configSystemPageSize, SERV_DATA_TYPE_CLOB]);\n\n //При сокрытии детализации\n const handleHideDtl = () => setState(pv => ({\n ...pv,\n displayPlanFOTDtl: null,\n titlePlanFOTDtl: null,\n displayFactRptDtl: null,\n titleFactRptDtl: null,\n displayPlanJobsDtl: null,\n titlePlanJobsDtl: null\n }));\n\n //При нажатии на плановую трудоёмкость по ФОТ\n const handleLabPlanFOTClick = ({\n sender\n }) => setState(pv => ({\n ...pv,\n displayPlanFOTDtl: sender.NRN,\n titlePlanFOTDtl: `${sender.SPERIOD} - ${sender.SINS_DEPARTMENT} - ${sender.SFCMANPOWER} - ${sender.NLAB_PLAN_FOT}`\n }));\n\n //При нажатии на фактическую трудоёмкость по отчетам\n const handleLabFactRptClick = ({\n sender\n }) => setState(pv => ({\n ...pv,\n displayFactRptDtl: sender.NRN,\n titleFactRptDtl: `${sender.SPERIOD} - ${sender.SINS_DEPARTMENT} - ${sender.SFCMANPOWER} - ${sender.NLAB_FACT_RPT}`\n }));\n\n //При нажатии на проект в списке детализации плановой трудоёмкости по графику\n const handleLabPlanJobsClick = ({\n sender\n }) => setState(pv => ({\n ...pv,\n displayPlanJobsDtl: sender.NRN,\n titlePlanJobsDtl: `${sender.SPERIOD} - ${sender.SINS_DEPARTMENT} - ${sender.SFCMANPOWER} - ${sender.NLAB_PLAN_JOBS}`\n }));\n\n //При изменении состояния сортировки в таблице периодов балансировки\n const handlePeriodsOrderChanged = ({\n orders\n }) => setPeriods(pv => ({\n ...pv,\n orders,\n pageNumber: 1,\n reload: true\n }));\n\n //При изменении количества отображаемых страниц в таблице периодов балансировки\n const handlePeriodsPagesCountChanged = () => setPeriods(pv => ({\n ...pv,\n pageNumber: pv.pageNumber + 1,\n reload: true\n }));\n\n //При нажатии на проект в таблице детализации трудоёмкости по плану-графику\n const handlePlanJobsDtlProjectClick = ({\n sender\n }) => onPlanJobsDtlProjectClick ? onPlanJobsDtlProjectClick({\n sender\n }) : null;\n\n //При необходимости обновить данные\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n loadPeriods();\n }, [peridos.reload, loadPeriods]);\n\n //Генерация содержимого\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), null, peridos.dataLoaded ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_components_p8p_data_grid__WEBPACK_IMPORTED_MODULE_5__.P8PDataGrid, _extends({}, _config_wrapper__WEBPACK_IMPORTED_MODULE_4__.P8P_DATA_GRID_CONFIG_PROPS, {\n columnsDef: peridos.columnsDef,\n rows: peridos.rows,\n size: _components_p8p_data_grid__WEBPACK_IMPORTED_MODULE_5__.P8P_DATA_GRID_SIZE.SMALL,\n morePages: peridos.morePages,\n reloading: peridos.reload,\n onOrderChanged: handlePeriodsOrderChanged,\n onPagesCountChanged: handlePeriodsPagesCountChanged,\n dataCellRender: prms => (0,_layouts__WEBPACK_IMPORTED_MODULE_9__.periodsDataCellRender)({\n ...prms,\n onLabPlanFOTClick: handleLabPlanFOTClick,\n onLabFactRptClick: handleLabFactRptClick,\n onLabPlanJobsClick: handleLabPlanJobsClick\n })\n })) : null, state.displayPlanFOTDtl ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_lab_plan_fot_dtl__WEBPACK_IMPORTED_MODULE_6__.LabPlanFOTDtl, {\n periodId: state.displayPlanFOTDtl,\n title: state.titlePlanFOTDtl,\n onHide: handleHideDtl\n }) : null, state.displayFactRptDtl ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_lab_fact_rpt_dtl__WEBPACK_IMPORTED_MODULE_7__.LabFactRptDtl, {\n periodId: state.displayFactRptDtl,\n title: state.titleFactRptDtl,\n onHide: handleHideDtl\n }) : null, state.displayPlanJobsDtl ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_lab_plan_jobs_dtl__WEBPACK_IMPORTED_MODULE_8__.LabPlanJobsDtl, {\n periodId: state.displayPlanJobsDtl,\n title: state.titlePlanJobsDtl,\n onHide: handleHideDtl,\n onProjectClick: handlePlanJobsDtlProjectClick\n }) : null);\n};\n\n//Контроль свойств - Монитор ресурсов\nResMon.propTypes = {\n ident: (prop_types__WEBPACK_IMPORTED_MODULE_10___default().number).isRequired,\n onPlanJobsDtlProjectClick: (prop_types__WEBPACK_IMPORTED_MODULE_10___default().func)\n};\n\n//----------------\n//Интерфейс модуля\n//----------------\n\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/panels/prj_jobs/res_mon.js?"); /***/ }), From 761237c110700fbbd0abb880cc313ba6830dd26a Mon Sep 17 00:00:00 2001 From: Mikhail Chechnev Date: Thu, 18 Apr 2024 12:48:07 +0300 Subject: [PATCH 07/76] =?UTF-8?q?WEB=20APP:=20=20=D0=9F=D0=B0=D0=BD=D0=B5?= =?UTF-8?q?=D0=BB=D1=8C=20"=D0=A0=D0=B0=D0=B1=D0=BE=D1=82=D1=8B=20=D0=BF?= =?UTF-8?q?=D1=80=D0=BE=D0=B5=D0=BA=D1=82=D0=BE=D0=B2"=20-=20=D0=BE=D1=82?= =?UTF-8?q?=D0=BE=D0=B1=D1=80=D0=B0=D0=B6=D0=B5=D0=BD=D0=B8=D0=B5=20=D0=BF?= =?UTF-8?q?=D0=B0=D1=80=D0=B0=D0=BC=D0=B5=D1=82=D1=80=D0=BE=D0=B2=20=D0=B8?= =?UTF-8?q?=D0=BD=D0=B8=D1=86=D0=B8=D0=B0=D0=BB=D0=B8=D0=B7=D0=B0=D1=86?= =?UTF-8?q?=D0=B8=D0=B8=20=D0=BF=D0=B0=D0=BD=D0=B5=D0=BB=D0=B8=20=D0=B8=20?= =?UTF-8?q?=D0=B4=D0=B8=D0=B0=D0=BB=D0=BE=D0=B3=20=D0=BF=D0=B5=D1=80=D0=B5?= =?UTF-8?q?=D1=84=D0=BE=D1=80=D0=BC=D0=B8=D1=80=D0=BE=D0=B2=D0=B0=D0=BD?= =?UTF-8?q?=D0=B8=D1=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/panels/prj_jobs/prj_jobs.js | 177 ++++++++++++++++++++++++++++---- 1 file changed, 159 insertions(+), 18 deletions(-) diff --git a/app/panels/prj_jobs/prj_jobs.js b/app/panels/prj_jobs/prj_jobs.js index 696d436..f414caa 100644 --- a/app/panels/prj_jobs/prj_jobs.js +++ b/app/panels/prj_jobs/prj_jobs.js @@ -9,13 +9,34 @@ import React, { useContext, useState, useCallback, useEffect } from "react"; //Классы React import PropTypes from "prop-types"; //Контроль свойств компонента -import { Drawer, Fab, Box, Grid, List, ListItemButton, ListItemText, ListItemIcon, Icon, Typography } from "@mui/material"; //Интерфейсные элементы +import { + Drawer, + Fab, + Box, + Grid, + List, + ListItemButton, + ListItemText, + ListItemIcon, + Icon, + Typography, + Divider, + ListItem, + Button, + Dialog, + DialogContent, + DialogActions, + TextField, + DialogTitle +} from "@mui/material"; //Интерфейсные элементы import { BackEndСtx } from "../../context/backend"; //Контекст взаимодействия с сервером import { MessagingСtx } from "../../context/messaging"; //Контекст сообщений import { ApplicationСtx } from "../../context/application"; //Контекст приложения import { formatDateJSONDateOnly } from "../../core/utils"; //Вспомогательные функции import { P8P_GANTT_CONFIG_PROPS } from "../../config_wrapper"; //Подключение компонентов к настройкам приложения import { P8PGantt } from "../../components/p8p_gantt"; //Диаграмма Ганта +import { formatDateRF } from "../../core/utils"; //Вспомогательные функции +import { BUTTONS } from "../../../app.text"; //Текстовые ресурсы и константы import { ResMon } from "./res_mon"; //Монитор ресурсов import { taskAttributeRenderer } from "./layouts"; //Дополнительная разметка и вёрстка клиентских элементов @@ -31,7 +52,6 @@ const GANTT_WIDTH = "98vw"; //Стили const STYLES = { - PROJECTS_LIST_SAVE_BUTTON: { backgroundColor: "orange" }, PROJECTS_LIST_ITEM_NOJOBS: { backgroundColor: "#ff000045" }, PROJECTS_LIST_ITEM_PRIMARY: { wordWrap: "break-word" }, PROJECTS_LIST_ITEM_SECONDARY: { wordWrap: "break-word", fontSize: "0.5rem", textTransform: "uppercase" }, @@ -46,10 +66,77 @@ const STYLES = { PERIODS_DRAWER: { width: "1200px", flexShrink: 0, [`& .MuiDrawer-paper`]: { width: "1200px", boxSizing: "border-box" } } }; +//Единицы измерения длительности +const DURATION_MEAS = { + 0: "День", + 1: "Неделя", + 2: "Декада", + 3: "Месяц", + 4: "Квартал", + 5: "Год" +}; + //------------------------------------ //Вспомогательные функции и компоненты //------------------------------------ +//Диалог параметров инициализации панели +const InitDialog = ({ dateBegin, dateFact, onOk, onCancel }) => { + //Собственное состояние - значения с-по + const [values, setValues] = useState({ dateBegin: formatDateJSONDateOnly(dateBegin), dateFact: formatDateJSONDateOnly(dateFact) }); + + //Отработка воода значения в фильтр + const handleValueTextFieldChanged = e => setValues(prev => ({ ...prev, [e.target.name]: e.target.value })); + + //Генерация содержимого + return ( + (onCancel ? onCancel() : null)} + > + Параметры инициализации + + + + + + + + + + ); +}; + +//Контроль свойств - Диалог параметров инициализации панели +InitDialog.propTypes = { + dateBegin: PropTypes.instanceOf(Date).isRequired, + dateFact: PropTypes.instanceOf(Date).isRequired, + onOk: PropTypes.func, + onCancel: PropTypes.func +}; + //Список проектов const ProjectsList = ({ projects = [], selectedProject, onClick } = {}) => { //Подключение к контексту сообщений @@ -132,7 +219,8 @@ const PrjJobs = () => { selectedProject: null, selectedProjectDocRn: null, selectedProjectGanttDef: {}, - selectedProjectTasks: [] + selectedProjectTasks: [], + showInitDialog: false }); //Подключение к контексту приложения @@ -216,8 +304,8 @@ const PrjJobs = () => { const data = await executeStored({ stored: "PKG_P8PANELS_PROJECTS.JB_INIT", args: { - DBEGIN: state.dateBegin ? new Date(state.dateBegin) : null, - DFACT: state.dateFact ? new Date(state.dateFact) : null, + DBEGIN: state.dateBegin ? state.dateBegin : null, + DFACT: state.dateFact ? state.dateFact : null, NDURATION_MEAS: state.durationMeas, SLAB_MEAS: state.labMeas, NIDENT: state.ident @@ -226,8 +314,9 @@ const PrjJobs = () => { setState(pv => ({ ...pv, init: true, - dateBegin: data.DBEGIN, - dateFact: data.DFACT, + reInit: false, + dateBegin: new Date(data.DBEGIN), + dateFact: new Date(data.DFACT), durationMeas: data.NDURATION_MEAS, labMeas: data.SLAB_MEAS, resourceStatus: data.NRESOURCE_STATUS, @@ -246,11 +335,10 @@ const PrjJobs = () => { if (state.selectedProject) loadProjectJobs(false); }, [state.selectedProject, loadProjectJobs]); - //При подключении компонента к странице + //При изменении флага инициализации useEffect(() => { initJobs(); - // eslint-disable-next-line react-hooks/exhaustive-deps - }, []); + }, [state.init, initJobs]); //Выбор проекта const selectPoject = (project, projectDocRn) => { @@ -292,6 +380,16 @@ const PrjJobs = () => { if (isMain) modifyJob(task.rn, new Date(start), new Date(end), new Date(state.dateBegin), new Date(state.dateFact), state.durationMeas); }; + //Отработка нажатия на отображения диалога параметров инициализации панели + const handleShowInitDialogClick = () => setState(pv => ({ ...pv, showInitDialog: true })); + + //Отработка нажатия на "ОК" в диалоге параметров инициализации панели + const handleOKInitDialogClick = values => + setState(pv => ({ ...pv, dateBegin: values.dateBegin, dateFact: values.dateFact, showInitDialog: false, init: false })); + + //Отработка нажатия на "Отмена" в диалоге параметров инициализации панели + const handleCancelInitDialogClick = () => setState(pv => ({ ...pv, showInitDialog: false })); + //Обработка нажатия на сохранение данных в проект const handleSaveToProjectsClick = () => saveProjects(); @@ -304,6 +402,14 @@ const PrjJobs = () => { //Генерация содержимого return ( + {state.showInitDialog ? ( + + ) : null} setState(pv => ({ ...pv, showProjectsList: !pv.showProjectsList }))}> Проекты {state.needSave ? ( @@ -321,15 +427,50 @@ const PrjJobs = () => { > {state.projectsLoaded ? ( <> + + + + Начало: + {formatDateRF(state.dateBegin)} +
+ Факт на: + {formatDateRF(state.dateFact)} +
+ Длительность: + {DURATION_MEAS[state.durationMeas]} +
+ Трудоёмкость: + {state.labMeas} + + } + /> +
+ + + +
+ {state.needSave ? ( - - - - save - - - - + <> + + + + + + + ) : null} From 4b01736bdd179c1b364f05d12c95f8b3aa338733 Mon Sep 17 00:00:00 2001 From: Mikhail Chechnev Date: Thu, 18 Apr 2024 12:48:45 +0300 Subject: [PATCH 08/76] =?UTF-8?q?WEB=20APP:=20=D0=A1=D0=B2=D0=B5=D0=B6?= =?UTF-8?q?=D0=B0=D1=8F=20=D1=81=D0=B1=D0=BE=D1=80=D0=BA=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- dist/p8-panels.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/dist/p8-panels.js b/dist/p8-panels.js index 88fb56f..b7133de 100644 --- a/dist/p8-panels.js +++ b/dist/p8-panels.js @@ -3502,7 +3502,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ EqsPrfrm: () => (/* binding */ EqsPrfrm)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Dialog/Dialog.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/DialogTitle/DialogTitle.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/IconButton/IconButton.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Icon/Icon.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/DialogContent/DialogContent.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Paper/Paper.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Box/Box.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/FormControl/FormControl.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/InputLabel/InputLabel.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/OutlinedInput/OutlinedInput.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/InputAdornment/InputAdornment.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Grid/Grid.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/FormHelperText/FormHelperText.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Link/Link.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Select/Select.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/MenuItem/MenuItem.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_22__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/DialogActions/DialogActions.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_23__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Button/Button.js\");\n/* harmony import */ var _components_p8p_data_grid__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../components/p8p_data_grid */ \"./app/components/p8p_data_grid.js\");\n/* harmony import */ var _config_wrapper__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../config_wrapper */ \"./app/config_wrapper.js\");\n/* harmony import */ var _context_backend__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../context/backend */ \"./app/context/backend.js\");\n/* harmony import */ var _context_application__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../context/application */ \"./app/context/application.js\");\n/* harmony import */ var _layouts__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./layouts */ \"./app/panels/eqs_prfrm/layouts.js\");\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n/*\r\n Парус 8 - Панели мониторинга - ТОиР - Выполнение работ\r\n Панель мониторинга: Корневая панель выполнения работ\r\n*/\n\n//---------------------\n//Подключение библиотек\n//---------------------\n\n //Классы React\n\n //Таблица данных\n //Подключение компонентов к настройкам приложения\n //Контекст взаимодействия с сервером\n //Контекст приложения\n //Дополнительная разметка и вёрстка клиентских элементов\n\n//-----------\n//Тело модуля\n//-----------\n\n//Корневая панель выполнения работ\nconst EqsPrfrm = () => {\n //Собственное состояние - таблица данных\n const [dataGrid, setDataGrid] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({\n dataLoaded: false,\n columnsDef: [],\n groups: [],\n rows: [],\n reload: false\n });\n const [filter, setFilter] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({\n belong: \"Демопример\",\n prodObj: \"К2\",\n techServ: \"\",\n respDep: \"\",\n fromMonth: 1,\n fromYear: 2024,\n toMonth: 12,\n toYear: 2024\n });\n\n // const [filter, setFilter] = useState({\n // belong: \"\",\n // prodObj: \"\",\n // techServ: \"\",\n // respDep: \"\",\n // fromMonth: \"\",\n // fromYear: \"\",\n // toMonth: \"\",\n // toYear: \"\"});\n\n const [info, setInfo] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({\n cntP: 0,\n sumP: 0,\n cntF: 0,\n sumF: 0\n });\n\n //Подключение к контексту приложения\n const {\n pOnlineShowDictionary\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_application__WEBPACK_IMPORTED_MODULE_4__[\"ApplicationСtx\"]);\n const [filterOpen, setFilterOpen] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(false);\n const [filterCopy, setFilterCopy] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({\n ...filter\n });\n const [filterLock, setFilterLock] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(false);\n const openFilter = () => {\n setFilterOpen(true);\n };\n const closeFilter = e => {\n if (filterLock && e != undefined) setFilter(filterCopy);\n setFilterOpen(false);\n };\n const clearFilter = () => {\n setFilter({\n belong: \"\",\n prodObj: \"\",\n techServ: \"\",\n respDep: \"\",\n fromMonth: \"\",\n fromYear: \"\",\n toMonth: \"\",\n toYear: \"\"\n });\n };\n let yearArray = [];\n let today = new Date();\n const getYearArray = () => {\n for (let i = 1990; i <= today.getFullYear(); i++) {\n yearArray.push(i);\n }\n };\n const monthArray = [\"Январь\", \"Февраль\", \"Март\", \"Апрель\", \"Май\", \"Июнь\", \"Июль\", \"Август\", \"Сентябрь\", \"Октябрь\", \"Ноябрь\", \"Декабрь\"];\n\n //Подключение к контексту взаимодействия с сервером\n const {\n executeStored\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_backend__WEBPACK_IMPORTED_MODULE_3__[\"BackEndСtx\"]);\n\n //Загрузка данных таблицы с сервера\n const loadData = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async () => {\n if (dataGrid.reload) {\n const data = await executeStored({\n stored: \"PKG_P8PANELS_EQUIPSRV.EQUIPSRV_GRID\",\n args: {\n SBELONG: filter.belong,\n SPRODOBJ: filter.prodObj,\n STECHSERV: filter.techServ,\n SRESPDEP: filter.respDep,\n NFROMMONTH: filter.fromMonth,\n NFROMYEAR: filter.fromYear,\n NTOMONTH: filter.toMonth,\n NTOYEAR: filter.toYear\n },\n respArg: \"COUT\",\n attributeValueProcessor: (name, val) => [\"caption\", \"name\", \"parent\"].includes(name) ? undefined : val\n });\n let cP = 0;\n let sP = 0;\n let cF = 0;\n let sF = 0;\n let properties = [];\n if (data.XROWS != null) {\n data.XROWS.map(row => {\n properties = [];\n Object.entries(row).forEach(([key, value]) => properties.push({\n name: key,\n data: value\n }));\n if (properties[1].data == \"Факт\" || properties[2].data == \"План\") {\n if (properties[2].data == \"План\") {\n properties.map(p => {\n if (_layouts__WEBPACK_IMPORTED_MODULE_5__.DAY_NAME_REG_EXP.test(p.name)) cP = cP + 1;\n });\n } else if (properties[1].data == \"Факт\") {\n properties.map(p => {\n if (_layouts__WEBPACK_IMPORTED_MODULE_5__.DAY_NAME_REG_EXP.test(p.name)) cF = cF + 1;\n });\n }\n } else {\n properties.map(p => {\n if (_layouts__WEBPACK_IMPORTED_MODULE_5__.MONTH_NAME_REG_EXP.test(p.name)) {\n let str = p.data;\n let m = [];\n let i = 0;\n while ((m = _layouts__WEBPACK_IMPORTED_MODULE_5__.DIGITS_REG_EXP.exec(str)) != null) {\n if (i == 0) sP = sP + Number(m[0].replace(\",\", \".\"));else {\n sF = sF + Number(m[0].replace(\",\", \".\"));\n }\n i++;\n }\n }\n });\n }\n });\n }\n setInfo({\n cntP: cP,\n sumP: sP,\n cntF: cF,\n sumF: sF\n });\n setDataGrid(pv => ({\n ...pv,\n columnsDef: data.XCOLUMNS_DEF ? [...data.XCOLUMNS_DEF] : pv.columnsDef,\n rows: [...(data.XROWS || [])],\n groups: [...(data.XGROUPS || [])],\n dataLoaded: true,\n reload: false\n }));\n }\n }, [dataGrid.reload, filter, executeStored]);\n\n //пользовательский параметр JuridicalPerson системы\n const getJurPers = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async () => {\n const data = await executeStored({\n stored: \"PKG_P8PANELS_EQUIPSRV.GET_JUR_PERS_PRM\",\n respArg: \"CRES\"\n });\n setFilter(pv => ({\n ...pv,\n belong: data\n }));\n }, [executeStored]);\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n if (filterOpen) {\n setFilterCopy({\n ...filter\n });\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [filterOpen]);\n\n //При необходимости обновить данные таблицы\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n loadData();\n }, [loadData, dataGrid.reload]);\n\n //Генерация содержимого\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", null, getYearArray(), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n open: filterOpen,\n onClose: closeFilter\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_7__[\"default\"], null, \"\\u0424\\u0438\\u043B\\u044C\\u0442\\u0440 \\u043E\\u0442\\u0431\\u043E\\u0440\\u0430\"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_8__[\"default\"], {\n \"aria-label\": \"close\",\n onClick: closeFilter,\n sx: {\n position: \"absolute\",\n right: 8,\n top: 8,\n color: theme => theme.palette.grey[500]\n }\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_9__[\"default\"], null, \"close\")), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_10__[\"default\"], null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_11__[\"default\"], null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_12__[\"default\"], {\n component: \"section\",\n sx: {\n p: 1\n }\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_13__[\"default\"], {\n readOnly: true,\n fullWidth: true,\n variant: \"outlined\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_14__[\"default\"], {\n htmlFor: \"belong-outlined\"\n }, \"\\u041F\\u0440\\u0438\\u043D\\u0430\\u0434\\u043B\\u0435\\u0436\\u043D\\u043E\\u0441\\u0442\\u044C\"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_15__[\"default\"], {\n error: filter.belong ? false : true,\n id: \"belong-outlined\",\n value: filter.belong,\n endAdornment: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_16__[\"default\"], {\n position: \"end\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_8__[\"default\"], {\n \"aria-label\": \"belong select\",\n onClick: () => {\n pOnlineShowDictionary({\n unitCode: \"JuridicalPersons\",\n callBack: res => res.success === true ? setFilter(pv => ({\n ...pv,\n belong: res.outParameters.out_CODE\n })) : null\n });\n },\n edge: \"end\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_9__[\"default\"], null, \"list\"))),\n \"aria-describedby\": \"belong-outlined-helper-text\",\n label: \"\\u041F\\u0440\\u0438\\u043D\\u0430\\u0434\\u043B\\u0435\\u0436\\u043D\\u043E\\u0441\\u0442\\u044C\"\n }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_17__[\"default\"], {\n container: true\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_17__[\"default\"], {\n item: true,\n xs: 6\n }, filter.belong ? null : /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_18__[\"default\"], {\n id: \"belong-outlined-helper-text\",\n sx: {\n color: \"red\"\n }\n }, \"*\\u041E\\u0431\\u044F\\u0437\\u0430\\u0442\\u0435\\u043B\\u044C\\u043D\\u043E\\u0435 \\u043F\\u043E\\u043B\\u0435\")), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_17__[\"default\"], {\n item: true,\n xs: 6,\n sx: {\n textAlign: \"end\"\n }\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_19__[\"default\"], {\n component: \"button\",\n variant: \"body2\",\n id: \"belong-outlined-link-btn\",\n sx: {\n fontSize: \"0.75rem\",\n marginRight: \"35px\"\n },\n onClick: getJurPers\n }, \"\\u0417\\u043D\\u0430\\u0447\\u0435\\u043D\\u0438\\u0435 \\u043F\\u043E \\u0443\\u043C\\u043E\\u043B\\u0447\\u0430\\u043D\\u0438\\u044E\"))))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_12__[\"default\"], {\n component: \"section\",\n sx: {\n p: 1\n }\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_13__[\"default\"], {\n readOnly: true,\n fullWidth: true\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_14__[\"default\"], {\n htmlFor: \"prodObj-outlined\"\n }, \"\\u041F\\u0440\\u043E\\u0438\\u0437\\u0432\\u043E\\u0434\\u0441\\u0442\\u0432\\u0435\\u043D\\u043D\\u044B\\u0439 \\u043E\\u0431\\u044A\\u0435\\u043A\\u0442\"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_15__[\"default\"], {\n error: filter.prodObj ? false : true,\n id: \"prodObj-outlined\",\n value: filter.prodObj,\n endAdornment: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_16__[\"default\"], {\n position: \"end\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_8__[\"default\"], {\n \"aria-label\": \"prodObj select\",\n onClick: () => {\n pOnlineShowDictionary({\n unitCode: \"EquipConfiguration\",\n callBack: res => res.success === true ? setFilter(pv => ({\n ...pv,\n prodObj: res.outParameters.out_CODE\n })) : null\n });\n },\n edge: \"end\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_9__[\"default\"], null, \"list\"))),\n \"aria-describedby\": \"prodObj-outlined-helper-text\",\n label: \"\\u041F\\u0440\\u043E\\u0438\\u0437\\u0432\\u043E\\u0434\\u0441\\u0442\\u0432\\u0435\\u043D\\u043D\\u044B\\u0439 \\u043E\\u0431\\u044A\\u0435\\u043A\\u0442\"\n }), filter.prodObj ? null : /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_18__[\"default\"], {\n id: \"prodObj-outlined-helper-text\",\n sx: {\n color: \"red\"\n }\n }, \"*\\u041E\\u0431\\u044F\\u0437\\u0430\\u0442\\u0435\\u043B\\u044C\\u043D\\u043E\\u0435 \\u043F\\u043E\\u043B\\u0435\"))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_12__[\"default\"], {\n component: \"section\",\n sx: {\n p: 1\n }\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_13__[\"default\"], {\n readOnly: true,\n fullWidth: true\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_14__[\"default\"], {\n htmlFor: \"techServ-outlined\"\n }, \"\\u0422\\u0435\\u0445\\u043D\\u0438\\u0447\\u0435\\u0441\\u043A\\u0430\\u044F \\u0441\\u043B\\u0443\\u0436\\u0431\\u0430\"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_15__[\"default\"], {\n id: \"techServ-outlined\",\n value: filter.techServ,\n endAdornment: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_16__[\"default\"], {\n position: \"end\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_8__[\"default\"], {\n \"aria-label\": \"techServ select\",\n onClick: () => {\n pOnlineShowDictionary({\n unitCode: \"INS_DEPARTMENT\",\n callBack: res => res.success === true ? setFilter(pv => ({\n ...pv,\n techServ: res.outParameters.out_CODE\n })) : null\n });\n },\n edge: \"end\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_9__[\"default\"], null, \"list\"))),\n label: \"\\u0422\\u0435\\u0445\\u043D\\u0438\\u0447\\u0435\\u0441\\u043A\\u0430\\u044F \\u0441\\u043B\\u0443\\u0436\\u0431\\u0430\"\n }))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_12__[\"default\"], {\n component: \"section\",\n sx: {\n p: 1\n }\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_13__[\"default\"], {\n readOnly: true,\n fullWidth: true\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_14__[\"default\"], {\n htmlFor: \"respDep-outlined\"\n }, \"\\u041E\\u0442\\u0432\\u0435\\u0442\\u0441\\u0442\\u0432\\u0435\\u043D\\u043D\\u043E\\u0435 \\u043F\\u043E\\u0434\\u0440\\u0430\\u0437\\u0434\\u0435\\u043B\\u0435\\u043D\\u0438\\u0435\"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_15__[\"default\"], {\n id: \"respDep-outlined\",\n value: filter.respDep,\n endAdornment: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_16__[\"default\"], {\n position: \"end\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_8__[\"default\"], {\n \"aria-label\": \"respDep select\",\n onClick: () => {\n pOnlineShowDictionary({\n unitCode: \"INS_DEPARTMENT\",\n callBack: res => res.success === true ? setFilter(pv => ({\n ...pv,\n respDep: res.outParameters.out_CODE\n })) : null\n });\n },\n edge: \"end\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_9__[\"default\"], null, \"list\"))),\n label: \"\\u041E\\u0442\\u0432\\u0435\\u0442\\u0441\\u0442\\u0432\\u0435\\u043D\\u043D\\u043E\\u0435 \\u043F\\u043E\\u0434\\u0440\\u0430\\u0437\\u0434\\u0435\\u043B\\u0435\\u043D\\u0438\\u0435\"\n }))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_12__[\"default\"], {\n component: \"section\",\n sx: {\n p: 1\n }\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_17__[\"default\"], {\n container: true,\n spacing: 2\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_17__[\"default\"], {\n textAlign: \"center\",\n item: true,\n xs: 4\n }, \"\\u041D\\u0430\\u0447\\u0430\\u043B\\u043E \\u043F\\u0435\\u0440\\u0438\\u043E\\u0434\\u0430:\"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_17__[\"default\"], {\n item: true,\n xs: 4\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_13__[\"default\"], {\n fullWidth: true\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_14__[\"default\"], {\n id: \"from-month-select-label\"\n }, \"\\u041C\\u0435\\u0441\\u044F\\u0446\"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_20__[\"default\"], {\n error: filter.fromMonth ? false : true,\n labelId: \"from-month-select-label\",\n id: \"from-month-select\",\n value: filter.fromMonth,\n \"aria-describedby\": \"from-month-select-helper-text\",\n label: \"\\u041C\\u0435\\u0441\\u044F\\u0446\",\n onChange: e => setFilter(pv => ({\n ...pv,\n fromMonth: e.target.value\n }))\n }, monthArray.map((item, i) => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_21__[\"default\"], {\n key: i + 1,\n value: i + 1\n }, item))), filter.fromMonth ? null : /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_18__[\"default\"], {\n id: \"from-month-select-helper-text\",\n sx: {\n color: \"red\"\n }\n }, \"*\\u041E\\u0431\\u044F\\u0437\\u0430\\u0442\\u0435\\u043B\\u044C\\u043D\\u043E\\u0435 \\u043F\\u043E\\u043B\\u0435\"))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_17__[\"default\"], {\n item: true,\n xs: 4\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_13__[\"default\"], {\n fullWidth: true\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_14__[\"default\"], {\n id: \"from-year-select-label\"\n }, \"\\u0413\\u043E\\u0434\"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_20__[\"default\"], {\n error: filter.fromYear ? false : true,\n labelId: \"from-year-select-label\",\n id: \"from-year-select\",\n value: filter.fromYear,\n \"aria-describedby\": \"from-year-select-helper-text\",\n label: \"\\u0413\\u043E\\u0434\",\n onChange: e => setFilter(pv => ({\n ...pv,\n fromYear: e.target.value\n }))\n }, yearArray.map((item, i) => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_21__[\"default\"], {\n key: i,\n value: item\n }, item))), filter.fromYear ? null : /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_18__[\"default\"], {\n id: \"from-year-select-helper-text\",\n sx: {\n color: \"red\"\n }\n }, \"*\\u041E\\u0431\\u044F\\u0437\\u0430\\u0442\\u0435\\u043B\\u044C\\u043D\\u043E\\u0435 \\u043F\\u043E\\u043B\\u0435\"))))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_12__[\"default\"], {\n component: \"section\",\n sx: {\n p: 1\n }\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_17__[\"default\"], {\n container: true,\n spacing: 2\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_17__[\"default\"], {\n textAlign: \"center\",\n item: true,\n xs: 4\n }, \"\\u041A\\u043E\\u043D\\u0435\\u0446 \\u043F\\u0435\\u0440\\u0438\\u043E\\u0434\\u0430:\"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_17__[\"default\"], {\n item: true,\n xs: 4\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_13__[\"default\"], {\n fullWidth: true\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_14__[\"default\"], {\n id: \"to-month-select-label\"\n }, \"\\u041C\\u0435\\u0441\\u044F\\u0446\"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_20__[\"default\"], {\n error: filter.toMonth ? false : true,\n labelId: \"to-month-select-label\",\n id: \"to-month-select\",\n value: filter.toMonth,\n \"aria-describedby\": \"to-month-select-helper-text\",\n label: \"\\u041C\\u0435\\u0441\\u044F\\u0446\",\n onChange: e => setFilter(pv => ({\n ...pv,\n toMonth: e.target.value\n }))\n }, monthArray.map((item, i) => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_21__[\"default\"], {\n key: i + 1,\n value: i + 1\n }, item))), filter.toMonth ? null : /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_18__[\"default\"], {\n id: \"to-month-select-helper-text\",\n sx: {\n color: \"red\"\n }\n }, \"*\\u041E\\u0431\\u044F\\u0437\\u0430\\u0442\\u0435\\u043B\\u044C\\u043D\\u043E\\u0435 \\u043F\\u043E\\u043B\\u0435\"))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_17__[\"default\"], {\n item: true,\n xs: 4\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_13__[\"default\"], {\n fullWidth: true\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_14__[\"default\"], {\n id: \"to-year-select-label\"\n }, \"\\u0413\\u043E\\u0434\"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_20__[\"default\"], {\n error: filter.toYear ? false : true,\n labelId: \"to-year-select-label\",\n id: \"to-year-select\",\n value: filter.toYear,\n \"aria-describedby\": \"to-year-select-helper-text\",\n label: \"\\u0413\\u043E\\u0434\",\n onChange: e => setFilter(pv => ({\n ...pv,\n toYear: e.target.value\n }))\n }, yearArray.map((item, i) => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_21__[\"default\"], {\n key: i,\n value: item\n }, item))), filter.toYear ? null : /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_18__[\"default\"], {\n id: \"to-year-select-helper-text\",\n sx: {\n color: \"red\"\n }\n }, \"*\\u041E\\u0431\\u044F\\u0437\\u0430\\u0442\\u0435\\u043B\\u044C\\u043D\\u043E\\u0435 \\u043F\\u043E\\u043B\\u0435\"))))))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_22__[\"default\"], null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_23__[\"default\"], {\n variant: \"contained\",\n disabled: filter.belong && filter.prodObj && filter.fromMonth && filter.fromYear && filter.toMonth && filter.toYear ? false : true,\n onClick: () => {\n setFilterLock(true);\n setDataGrid({\n reload: true\n });\n closeFilter();\n }\n }, \"\\u0421\\u0444\\u043E\\u0440\\u043C\\u0438\\u0440\\u043E\\u0432\\u0430\\u0442\\u044C \\u043E\\u0442\\u0447\\u0451\\u0442\"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_23__[\"default\"], {\n variant: \"contained\",\n onClick: clearFilter\n }, \"\\u041E\\u0447\\u0438\\u0441\\u0442\\u0438\\u0442\\u044C \\u0444\\u0438\\u043B\\u044C\\u0442\\u0440\"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_23__[\"default\"], {\n variant: \"contained\",\n onClick: () => {\n setFilter(filterCopy);\n }\n }, \"\\u041E\\u0442\\u043C\\u0435\\u043D\\u0438\\u0442\\u044C \\u0438\\u0437\\u043C\\u0435\\u043D\\u0435\\u043D\\u0438\\u044F\"))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_19__[\"default\"], {\n component: \"button\",\n variant: \"body2\",\n textAlign: \"left\",\n onClick: openFilter\n }, \"\\u0424\\u0438\\u043B\\u044C\\u0442\\u0440 \\u043E\\u0442\\u0431\\u043E\\u0440\\u0430: \", filter.belong ? `Принадлежность: ${filter.belong}` : \"\", \" \", filter.prodObj ? `Производственный объект: ${filter.prodObj}` : \"\", \" \", filter.techServ ? `Техническая служба: ${filter.techServ}` : \"\", \" \", filter.respDep ? `Ответственное подразделение: ${filter.respDep}` : \"\", \" \", filter.fromMonth && filter.fromYear ? `Начало периода: ${filter.fromMonth < 10 ? \"0\" + filter.fromMonth : filter.fromMonth}.${filter.fromYear}` : \"\", \" \", filter.toMonth && filter.toYear ? `Конец периода: ${filter.toMonth < 10 ? \"0\" + filter.toMonth : filter.toMonth}.${filter.toYear}` : \"\"), dataGrid.dataLoaded ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_11__[\"default\"], {\n variant: \"outlined\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_17__[\"default\"], {\n container: true,\n spacing: 1\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_17__[\"default\"], {\n item: true,\n xs: 12\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_12__[\"default\"], {\n p: 1\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_components_p8p_data_grid__WEBPACK_IMPORTED_MODULE_1__.P8PDataGrid, _extends({}, _config_wrapper__WEBPACK_IMPORTED_MODULE_2__.P8P_DATA_GRID_CONFIG_PROPS, {\n columnsDef: dataGrid.columnsDef,\n groups: dataGrid.groups,\n rows: dataGrid.rows,\n size: _components_p8p_data_grid__WEBPACK_IMPORTED_MODULE_1__.P8P_DATA_GRID_SIZE.LARGE,\n reloading: dataGrid.reload,\n headCellRender: prms => (0,_layouts__WEBPACK_IMPORTED_MODULE_5__.headCellRender)({\n ...prms\n }, filter.techServ, info.cntP, info.sumP, info.cntF, info.sumF),\n dataCellRender: prms => (0,_layouts__WEBPACK_IMPORTED_MODULE_5__.dataCellRender)({\n ...prms\n }),\n groupCellRender: prms => (0,_layouts__WEBPACK_IMPORTED_MODULE_5__.groupCellRender)({\n ...prms\n }),\n showCellRightBorder: true\n })))))) : null);\n};\n\n//----------------\n//Интерфейс модуля\n//----------------\n\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/panels/eqs_prfrm/eqs_prfrm.js?"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ EqsPrfrm: () => (/* binding */ EqsPrfrm)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Dialog/Dialog.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/DialogTitle/DialogTitle.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/IconButton/IconButton.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Icon/Icon.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/DialogContent/DialogContent.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Paper/Paper.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Box/Box.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/FormControl/FormControl.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/InputLabel/InputLabel.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/OutlinedInput/OutlinedInput.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/InputAdornment/InputAdornment.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/FormHelperText/FormHelperText.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Grid/Grid.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Select/Select.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_22__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/MenuItem/MenuItem.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_23__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/DialogActions/DialogActions.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_24__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Button/Button.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_25__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Link/Link.js\");\n/* harmony import */ var _components_p8p_data_grid__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../components/p8p_data_grid */ \"./app/components/p8p_data_grid.js\");\n/* harmony import */ var _config_wrapper__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../config_wrapper */ \"./app/config_wrapper.js\");\n/* harmony import */ var _context_backend__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../context/backend */ \"./app/context/backend.js\");\n/* harmony import */ var _context_application__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../context/application */ \"./app/context/application.js\");\n/* harmony import */ var _context_messaging__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../context/messaging */ \"./app/context/messaging.js\");\n/* harmony import */ var _layouts__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./layouts */ \"./app/panels/eqs_prfrm/layouts.js\");\n/* harmony import */ var _app_text__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../../../app.text */ \"./app.text.js\");\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n/*\r\n Парус 8 - Панели мониторинга - ТОиР - Выполнение работ\r\n Панель мониторинга: Корневая панель выполнения работ\r\n*/\n\n//---------------------\n//Подключение библиотек\n//---------------------\n\n //Классы React\n\n //Таблица данных\n //Подключение компонентов к настройкам приложения\n //Контекст взаимодействия с сервером\n //Контекст приложения\n //Контекст сообщений\n //Дополнительная разметка и вёрстка клиентских элементов\n //Тектовые ресурсы и константы\n\n//-----------\n//Тело модуля\n//-----------\n\n//Корневая панель выполнения работ\nconst EqsPrfrm = () => {\n //Собственное состояние - таблица данных\n const [dataGrid, setDataGrid] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({\n dataLoaded: false,\n columnsDef: [],\n groups: [],\n rows: [],\n reload: false\n });\n\n // Состояние информации о трудоёмкости\n const [info, setInfo] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({\n cntP: 0,\n sumP: 0,\n cntF: 0,\n sumF: 0\n });\n\n // Состояние фильтра (для отладки)\n // const [filter, setFilter] = useState({\n // belong: \"Демопример\",\n // prodObj: \"Карьер\",\n // techServ: \"\",\n // respDep: \"\",\n // fromMonth: 1,\n // fromYear: 2024,\n // toMonth: 12,\n // toYear: 2024\n // });\n\n // Состояние фильтра\n const [filter, setFilter] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({\n belong: \"\",\n prodObj: \"\",\n techServ: \"\",\n respDep: \"\",\n fromMonth: 1,\n fromYear: 1990,\n toMonth: 1,\n toYear: 1990\n });\n // Состояние открытия фильтра\n const [filterOpen, setFilterOpen] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(true);\n // Состояние данных по умолчанию для фильтра (true - для отладки)\n const [defaultLoaded, setDefaultLoaded] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(false);\n // Состояние хранения копии фильтра\n const [filterCopy, setFilterCopy] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({\n ...filter\n });\n // Состояние ограничения редактирования фильтра\n const [filterLock, setFilterLock] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(false);\n\n // Состояние ячейки заголовка даты (по раскрытию/скрытию)\n const [activeRef, setActiveRef] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)();\n // Состояние актуальности ссылки на ячейку\n const [refIsDeprecated, setRidFlag] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(true);\n\n //Подключение к контексту приложения\n const {\n pOnlineShowDictionary,\n pOnlineShowUnit\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_application__WEBPACK_IMPORTED_MODULE_4__[\"ApplicationСtx\"]);\n\n //Подключение к контексту взаимодействия с сервером\n const {\n executeStored\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_backend__WEBPACK_IMPORTED_MODULE_3__[\"BackEndСtx\"]);\n\n //Подключение к контексту сообщений\n const {\n showMsgErr\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_messaging__WEBPACK_IMPORTED_MODULE_5__[\"MessagingСtx\"]);\n\n //Загрузка данных таблицы с сервера\n const loadData = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async () => {\n if (dataGrid.reload) {\n const data = await executeStored({\n stored: \"PKG_P8PANELS_EQUIPSRV.EQUIPSRV_GRID\",\n args: {\n SBELONG: filter.belong,\n SPRODOBJ: filter.prodObj,\n STECHSERV: filter.techServ,\n SRESPDEP: filter.respDep,\n NFROMMONTH: filter.fromMonth,\n NFROMYEAR: filter.fromYear,\n NTOMONTH: filter.toMonth,\n NTOYEAR: filter.toYear\n },\n respArg: \"COUT\",\n attributeValueProcessor: (name, val) => [\"caption\", \"name\", \"parent\"].includes(name) ? undefined : val\n });\n let cP = 0;\n let sP = 0;\n let cF = 0;\n let sF = 0;\n let properties = [];\n if (data.XROWS != null) {\n data.XROWS.map(row => {\n properties = [];\n Object.entries(row).forEach(([key, value]) => properties.push({\n name: key,\n data: value\n }));\n let info2 = properties.find(element => {\n return element.name === \"SINFO2\";\n });\n if (info2 != undefined) {\n if (info2.data == \"План\") {\n properties.map(p => {\n if (_layouts__WEBPACK_IMPORTED_MODULE_6__.DAY_NAME_REG_EXP.test(p.name)) cP = cP + 1;\n });\n } else if (info2.data == \"Факт\") {\n properties.map(p => {\n if (_layouts__WEBPACK_IMPORTED_MODULE_6__.DAY_NAME_REG_EXP.test(p.name)) cF = cF + 1;\n });\n }\n } else {\n properties.map(p => {\n if (_layouts__WEBPACK_IMPORTED_MODULE_6__.MONTH_NAME_REG_EXP.test(p.name)) {\n let str = p.data;\n let m = [];\n let i = 0;\n while ((m = _layouts__WEBPACK_IMPORTED_MODULE_6__.DIGITS_REG_EXP.exec(str)) != null) {\n if (i == 0) sP = sP + Number(m[0].replace(\",\", \".\"));else {\n sF = sF + Number(m[0].replace(\",\", \".\"));\n }\n i++;\n }\n }\n });\n }\n });\n }\n setInfo({\n cntP: cP,\n sumP: sP,\n cntF: cF,\n sumF: sF\n });\n setDataGrid(pv => ({\n ...pv,\n columnsDef: data.XCOLUMNS_DEF ? [...data.XCOLUMNS_DEF] : pv.columnsDef,\n rows: [...(data.XROWS || [])],\n groups: [...(data.XGROUPS || [])],\n dataLoaded: true,\n reload: false\n }));\n }\n }, [dataGrid.reload, filter, executeStored]);\n\n //Загрузка значений фильра по умолчанию\n const loadDefaultFilter = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async () => {\n const data = await executeStored({\n stored: \"PKG_P8PANELS_EQUIPSRV.GET_DEFAULT_FP\",\n respArg: \"COUT\"\n });\n setFilter(pv => ({\n ...pv,\n belong: data.JURPERS,\n fromMonth: data.MONTH,\n fromYear: data.YEAR,\n toMonth: data.MONTH,\n toYear: data.YEAR\n }));\n setDefaultLoaded(true);\n }, [executeStored]);\n\n //пользовательский параметр JuridicalPerson системы\n // const getJurPers = useCallback(async () => {\n // const data = await executeStored({\n // stored: \"PKG_P8PANELS_EQUIPSRV.GET_JUR_PERS_PRM\",\n // respArg: \"CRES\"\n // });\n // setFilter(pv => ({ ...pv, belong: data }));\n // }, [executeStored]);\n\n // Отбор документа (ТОиР или Ремонтных ведомостей) по ячейке даты\n const showEquipSrv = async ({\n date,\n workType,\n info\n }) => {\n const [techName, servKind] = info.split(\"_\");\n let type;\n if (workType == \"План\") type = 0;else type = 1;\n let [year, month, day] = date.substring(1).split(\"_\");\n\n //if (day == undefined) day = null;\n\n const data = await executeStored({\n stored: \"PKG_P8PANELS_EQUIPSRV.SELECT_EQUIPSRV\",\n args: {\n SBELONG: filter.belong,\n SPRODOBJ: filter.prodObj,\n STECHSERV: filter.techServ ? filter.techServ : null,\n SRESPDEP: filter.respDep ? filter.respDep : null,\n STECHNAME: techName,\n SSRVKIND: servKind,\n NYEAR: Number(year),\n NMONTH: Number(month),\n NDAY: day ? Number(day) : null,\n NWORKTYPE: type\n }\n });\n if (data.NIDENT) {\n if (type == 0) pOnlineShowUnit({\n unitCode: \"EquipTechServices\",\n inputParameters: [{\n name: \"in_SelectList_Ident\",\n value: data.NIDENT\n }]\n });else pOnlineShowUnit({\n unitCode: \"EquipRepairSheets\",\n inputParameters: [{\n name: \"in_Ident\",\n value: data.NIDENT\n }]\n });\n } else showMsgErr(_app_text__WEBPACK_IMPORTED_MODULE_7__.TEXTS.NO_DATA_FOUND);\n };\n\n // Открыть фильтр\n const openFilter = () => {\n setFilterOpen(true);\n };\n\n // Закрыть фильтр\n const closeFilter = e => {\n if (filterLock && e != undefined) setFilter(filterCopy);\n setFilterOpen(false);\n };\n\n // Очистить фильтр\n const clearFilter = () => {\n setFilter({\n belong: \"\",\n prodObj: \"\",\n techServ: \"\",\n respDep: \"\",\n fromMonth: \"\",\n fromYear: \"\",\n toMonth: \"\",\n toYear: \"\"\n });\n };\n\n // Отработка события скрытия/раскрытия ячейки даты\n const handleClick = (e, ref) => {\n const curCell = ref.current;\n if (e.target.type == \"button\" || e.target.offsetParent.type == \"button\") {\n setActiveRef(curCell);\n setRidFlag(false);\n }\n };\n\n // При необходимости обновить данные таблицы\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n loadData();\n }, [loadData, dataGrid.reload]);\n\n // При открытом фильтре\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n if (filterOpen) {\n {\n setFilterCopy({\n ...filter\n });\n if (!defaultLoaded) loadDefaultFilter();\n }\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [filterOpen]);\n\n // При нажатии скрытии/раскрытии ячейки даты, фокус на неё\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n if (!refIsDeprecated) {\n if (activeRef) {\n var cellRect = activeRef.getBoundingClientRect();\n //console.log(window.scrollX + cellRect.left + activeRef.clientWidth / 2 - window.innerWidth / 2);\n window.scrollTo(window.scrollX + cellRect.left + activeRef.clientWidth / 2 - window.innerWidth / 2, 0);\n setRidFlag(true);\n }\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [refIsDeprecated]);\n let yearArray = [];\n const monthArray = [\"Январь\", \"Февраль\", \"Март\", \"Апрель\", \"Май\", \"Июнь\", \"Июль\", \"Август\", \"Сентябрь\", \"Октябрь\", \"Ноябрь\", \"Декабрь\"];\n let today = new Date();\n\n // Получение списка лет\n const getYearArray = () => {\n for (let i = 1990; i <= today.getFullYear(); i++) {\n yearArray.push(i);\n }\n };\n\n //Генерация содержимого\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", null, getYearArray(), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_8__[\"default\"], {\n open: filterOpen,\n onClose: closeFilter\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_9__[\"default\"], null, \"\\u0424\\u0438\\u043B\\u044C\\u0442\\u0440 \\u043E\\u0442\\u0431\\u043E\\u0440\\u0430\"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_10__[\"default\"], {\n \"aria-label\": \"close\",\n onClick: closeFilter,\n sx: {\n position: \"absolute\",\n right: 8,\n top: 8,\n color: theme => theme.palette.grey[500]\n }\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_11__[\"default\"], null, \"close\")), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_12__[\"default\"], null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_13__[\"default\"], null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_14__[\"default\"], {\n component: \"section\",\n sx: {\n p: 1\n }\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_15__[\"default\"], {\n readOnly: true,\n fullWidth: true,\n variant: \"outlined\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_16__[\"default\"], {\n htmlFor: \"belong-outlined\"\n }, \"\\u041F\\u0440\\u0438\\u043D\\u0430\\u0434\\u043B\\u0435\\u0436\\u043D\\u043E\\u0441\\u0442\\u044C\"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_17__[\"default\"], {\n error: filter.belong ? false : true,\n id: \"belong-outlined\",\n value: filter.belong,\n endAdornment: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_18__[\"default\"], {\n position: \"end\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_10__[\"default\"], {\n \"aria-label\": \"belong select\",\n onClick: () => {\n pOnlineShowDictionary({\n unitCode: \"JuridicalPersons\",\n callBack: res => res.success === true ? setFilter(pv => ({\n ...pv,\n belong: res.outParameters.out_CODE\n })) : null\n });\n },\n edge: \"end\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_11__[\"default\"], null, \"list\"))),\n \"aria-describedby\": \"belong-outlined-helper-text\",\n label: \"\\u041F\\u0440\\u0438\\u043D\\u0430\\u0434\\u043B\\u0435\\u0436\\u043D\\u043E\\u0441\\u0442\\u044C\"\n }), filter.belong ? null : /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_19__[\"default\"], {\n id: \"belong-outlined-helper-text\",\n sx: {\n color: \"red\"\n }\n }, \"*\\u041E\\u0431\\u044F\\u0437\\u0430\\u0442\\u0435\\u043B\\u044C\\u043D\\u043E\\u0435 \\u043F\\u043E\\u043B\\u0435\"))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_14__[\"default\"], {\n component: \"section\",\n sx: {\n p: 1\n }\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_15__[\"default\"], {\n readOnly: true,\n fullWidth: true\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_16__[\"default\"], {\n htmlFor: \"prodObj-outlined\"\n }, \"\\u041F\\u0440\\u043E\\u0438\\u0437\\u0432\\u043E\\u0434\\u0441\\u0442\\u0432\\u0435\\u043D\\u043D\\u044B\\u0439 \\u043E\\u0431\\u044A\\u0435\\u043A\\u0442\"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_17__[\"default\"], {\n error: filter.prodObj ? false : true,\n id: \"prodObj-outlined\",\n value: filter.prodObj,\n endAdornment: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_18__[\"default\"], {\n position: \"end\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_10__[\"default\"], {\n \"aria-label\": \"prodObj select\",\n onClick: () => {\n pOnlineShowDictionary({\n unitCode: \"EquipConfiguration\",\n callBack: res => res.success === true ? setFilter(pv => ({\n ...pv,\n prodObj: res.outParameters.out_CODE\n })) : null\n });\n },\n edge: \"end\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_11__[\"default\"], null, \"list\"))),\n \"aria-describedby\": \"prodObj-outlined-helper-text\",\n label: \"\\u041F\\u0440\\u043E\\u0438\\u0437\\u0432\\u043E\\u0434\\u0441\\u0442\\u0432\\u0435\\u043D\\u043D\\u044B\\u0439 \\u043E\\u0431\\u044A\\u0435\\u043A\\u0442\"\n }), filter.prodObj ? null : /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_19__[\"default\"], {\n id: \"prodObj-outlined-helper-text\",\n sx: {\n color: \"red\"\n }\n }, \"*\\u041E\\u0431\\u044F\\u0437\\u0430\\u0442\\u0435\\u043B\\u044C\\u043D\\u043E\\u0435 \\u043F\\u043E\\u043B\\u0435\"))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_14__[\"default\"], {\n component: \"section\",\n sx: {\n p: 1\n }\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_15__[\"default\"], {\n readOnly: true,\n fullWidth: true\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_16__[\"default\"], {\n htmlFor: \"techServ-outlined\"\n }, \"\\u0422\\u0435\\u0445\\u043D\\u0438\\u0447\\u0435\\u0441\\u043A\\u0430\\u044F \\u0441\\u043B\\u0443\\u0436\\u0431\\u0430\"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_17__[\"default\"], {\n id: \"techServ-outlined\",\n value: filter.techServ,\n endAdornment: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_18__[\"default\"], {\n position: \"end\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_10__[\"default\"], {\n \"aria-label\": \"techServ select\",\n onClick: () => {\n pOnlineShowDictionary({\n unitCode: \"INS_DEPARTMENT\",\n callBack: res => res.success === true ? setFilter(pv => ({\n ...pv,\n techServ: res.outParameters.out_CODE\n })) : null\n });\n },\n edge: \"end\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_11__[\"default\"], null, \"list\"))),\n label: \"\\u0422\\u0435\\u0445\\u043D\\u0438\\u0447\\u0435\\u0441\\u043A\\u0430\\u044F \\u0441\\u043B\\u0443\\u0436\\u0431\\u0430\"\n }))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_14__[\"default\"], {\n component: \"section\",\n sx: {\n p: 1\n }\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_15__[\"default\"], {\n readOnly: true,\n fullWidth: true\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_16__[\"default\"], {\n htmlFor: \"respDep-outlined\"\n }, \"\\u041E\\u0442\\u0432\\u0435\\u0442\\u0441\\u0442\\u0432\\u0435\\u043D\\u043D\\u043E\\u0435 \\u043F\\u043E\\u0434\\u0440\\u0430\\u0437\\u0434\\u0435\\u043B\\u0435\\u043D\\u0438\\u0435\"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_17__[\"default\"], {\n id: \"respDep-outlined\",\n value: filter.respDep,\n endAdornment: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_18__[\"default\"], {\n position: \"end\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_10__[\"default\"], {\n \"aria-label\": \"respDep select\",\n onClick: () => {\n pOnlineShowDictionary({\n unitCode: \"INS_DEPARTMENT\",\n callBack: res => res.success === true ? setFilter(pv => ({\n ...pv,\n respDep: res.outParameters.out_CODE\n })) : null\n });\n },\n edge: \"end\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_11__[\"default\"], null, \"list\"))),\n label: \"\\u041E\\u0442\\u0432\\u0435\\u0442\\u0441\\u0442\\u0432\\u0435\\u043D\\u043D\\u043E\\u0435 \\u043F\\u043E\\u0434\\u0440\\u0430\\u0437\\u0434\\u0435\\u043B\\u0435\\u043D\\u0438\\u0435\"\n }))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_14__[\"default\"], {\n component: \"section\",\n sx: {\n p: 1\n }\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_20__[\"default\"], {\n container: true,\n spacing: 2\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_20__[\"default\"], {\n textAlign: \"center\",\n item: true,\n xs: 4\n }, \"\\u041D\\u0430\\u0447\\u0430\\u043B\\u043E \\u043F\\u0435\\u0440\\u0438\\u043E\\u0434\\u0430:\"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_20__[\"default\"], {\n item: true,\n xs: 4\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_15__[\"default\"], {\n fullWidth: true\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_16__[\"default\"], {\n id: \"from-month-select-label\"\n }, \"\\u041C\\u0435\\u0441\\u044F\\u0446\"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_21__[\"default\"], {\n error: filter.fromMonth ? false : true,\n labelId: \"from-month-select-label\",\n id: \"from-month-select\",\n value: filter.fromMonth,\n \"aria-describedby\": \"from-month-select-helper-text\",\n label: \"\\u041C\\u0435\\u0441\\u044F\\u0446\",\n onChange: e => setFilter(pv => ({\n ...pv,\n fromMonth: e.target.value\n }))\n }, monthArray.map((item, i) => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_22__[\"default\"], {\n key: i + 1,\n value: i + 1\n }, item))), filter.fromMonth ? null : /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_19__[\"default\"], {\n id: \"from-month-select-helper-text\",\n sx: {\n color: \"red\"\n }\n }, \"*\\u041E\\u0431\\u044F\\u0437\\u0430\\u0442\\u0435\\u043B\\u044C\\u043D\\u043E\\u0435 \\u043F\\u043E\\u043B\\u0435\"))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_20__[\"default\"], {\n item: true,\n xs: 4\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_15__[\"default\"], {\n fullWidth: true\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_16__[\"default\"], {\n id: \"from-year-select-label\"\n }, \"\\u0413\\u043E\\u0434\"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_21__[\"default\"], {\n error: filter.fromYear ? false : true,\n labelId: \"from-year-select-label\",\n id: \"from-year-select\",\n value: filter.fromYear,\n \"aria-describedby\": \"from-year-select-helper-text\",\n label: \"\\u0413\\u043E\\u0434\",\n onChange: e => setFilter(pv => ({\n ...pv,\n fromYear: e.target.value\n }))\n }, yearArray.map((item, i) => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_22__[\"default\"], {\n key: i,\n value: item\n }, item))), filter.fromYear ? null : /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_19__[\"default\"], {\n id: \"from-year-select-helper-text\",\n sx: {\n color: \"red\"\n }\n }, \"*\\u041E\\u0431\\u044F\\u0437\\u0430\\u0442\\u0435\\u043B\\u044C\\u043D\\u043E\\u0435 \\u043F\\u043E\\u043B\\u0435\"))))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_14__[\"default\"], {\n component: \"section\",\n sx: {\n p: 1\n }\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_20__[\"default\"], {\n container: true,\n spacing: 2\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_20__[\"default\"], {\n textAlign: \"center\",\n item: true,\n xs: 4\n }, \"\\u041A\\u043E\\u043D\\u0435\\u0446 \\u043F\\u0435\\u0440\\u0438\\u043E\\u0434\\u0430:\"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_20__[\"default\"], {\n item: true,\n xs: 4\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_15__[\"default\"], {\n fullWidth: true\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_16__[\"default\"], {\n id: \"to-month-select-label\"\n }, \"\\u041C\\u0435\\u0441\\u044F\\u0446\"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_21__[\"default\"], {\n error: filter.toMonth ? false : true,\n labelId: \"to-month-select-label\",\n id: \"to-month-select\",\n value: filter.toMonth,\n \"aria-describedby\": \"to-month-select-helper-text\",\n label: \"\\u041C\\u0435\\u0441\\u044F\\u0446\",\n onChange: e => setFilter(pv => ({\n ...pv,\n toMonth: e.target.value\n }))\n }, monthArray.map((item, i) => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_22__[\"default\"], {\n key: i + 1,\n value: i + 1\n }, item))), filter.toMonth ? null : /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_19__[\"default\"], {\n id: \"to-month-select-helper-text\",\n sx: {\n color: \"red\"\n }\n }, \"*\\u041E\\u0431\\u044F\\u0437\\u0430\\u0442\\u0435\\u043B\\u044C\\u043D\\u043E\\u0435 \\u043F\\u043E\\u043B\\u0435\"))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_20__[\"default\"], {\n item: true,\n xs: 4\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_15__[\"default\"], {\n fullWidth: true\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_16__[\"default\"], {\n id: \"to-year-select-label\"\n }, \"\\u0413\\u043E\\u0434\"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_21__[\"default\"], {\n error: filter.toYear ? false : true,\n labelId: \"to-year-select-label\",\n id: \"to-year-select\",\n value: filter.toYear,\n \"aria-describedby\": \"to-year-select-helper-text\",\n label: \"\\u0413\\u043E\\u0434\",\n onChange: e => setFilter(pv => ({\n ...pv,\n toYear: e.target.value\n }))\n }, yearArray.map((item, i) => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_22__[\"default\"], {\n key: i,\n value: item\n }, item))), filter.toYear ? null : /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_19__[\"default\"], {\n id: \"to-year-select-helper-text\",\n sx: {\n color: \"red\"\n }\n }, \"*\\u041E\\u0431\\u044F\\u0437\\u0430\\u0442\\u0435\\u043B\\u044C\\u043D\\u043E\\u0435 \\u043F\\u043E\\u043B\\u0435\"))))))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_23__[\"default\"], null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_24__[\"default\"], {\n variant: \"contained\",\n disabled: filter.belong && filter.prodObj && filter.fromMonth && filter.fromYear && filter.toMonth && filter.toYear ? false : true,\n onClick: () => {\n setFilterLock(true);\n setDataGrid({\n reload: true\n });\n closeFilter();\n }\n }, \"\\u0421\\u0444\\u043E\\u0440\\u043C\\u0438\\u0440\\u043E\\u0432\\u0430\\u0442\\u044C\"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_24__[\"default\"], {\n variant: \"contained\",\n onClick: clearFilter\n }, \"\\u041E\\u0447\\u0438\\u0441\\u0442\\u0438\\u0442\\u044C\"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_24__[\"default\"], {\n variant: \"contained\",\n onClick: () => {\n setFilter(filterCopy);\n }\n }, \"\\u041E\\u0442\\u043C\\u0435\\u043D\\u0430\"))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_25__[\"default\"], {\n component: \"button\",\n variant: \"body2\",\n textAlign: \"left\",\n onClick: openFilter\n }, \"\\u0424\\u0438\\u043B\\u044C\\u0442\\u0440 \\u043E\\u0442\\u0431\\u043E\\u0440\\u0430: \", filter.belong ? `Принадлежность: ${filter.belong}` : \"\", \" \", filter.prodObj ? `Производственный объект: ${filter.prodObj}` : \"\", \" \", filter.techServ ? `Техническая служба: ${filter.techServ}` : \"\", \" \", filter.respDep ? `Ответственное подразделение: ${filter.respDep}` : \"\", \" \", filter.fromMonth && filter.fromYear ? `Начало периода: ${filter.fromMonth < 10 ? \"0\" + filter.fromMonth : filter.fromMonth}.${filter.fromYear}` : \"\", \" \", filter.toMonth && filter.toYear ? `Конец периода: ${filter.toMonth < 10 ? \"0\" + filter.toMonth : filter.toMonth}.${filter.toYear}` : \"\"), dataGrid.dataLoaded ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_13__[\"default\"], {\n variant: \"outlined\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_20__[\"default\"], {\n container: true,\n spacing: 1\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_20__[\"default\"], {\n item: true,\n xs: 12\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_14__[\"default\"], {\n p: 1\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_components_p8p_data_grid__WEBPACK_IMPORTED_MODULE_1__.P8PDataGrid, _extends({}, _config_wrapper__WEBPACK_IMPORTED_MODULE_2__.P8P_DATA_GRID_CONFIG_PROPS, {\n columnsDef: dataGrid.columnsDef,\n groups: dataGrid.groups,\n rows: dataGrid.rows,\n size: _components_p8p_data_grid__WEBPACK_IMPORTED_MODULE_1__.P8P_DATA_GRID_SIZE.LARGE,\n reloading: dataGrid.reload,\n headCellRender: prms => (0,_layouts__WEBPACK_IMPORTED_MODULE_6__.headCellRender)({\n ...prms\n }, handleClick, filter.techServ, info.cntP, info.sumP, info.cntF, info.sumF),\n dataCellRender: prms => (0,_layouts__WEBPACK_IMPORTED_MODULE_6__.dataCellRender)({\n ...prms\n }, showEquipSrv),\n groupCellRender: prms => (0,_layouts__WEBPACK_IMPORTED_MODULE_6__.groupCellRender)({\n ...prms\n }),\n showCellRightBorder: true\n })))))) : null);\n};\n\n//----------------\n//Интерфейс модуля\n//----------------\n\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/panels/eqs_prfrm/eqs_prfrm.js?"); /***/ }), @@ -3524,7 +3524,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ DAY_NAME_REG_EXP: () => (/* binding */ DAY_NAME_REG_EXP),\n/* harmony export */ DIGITS_REG_EXP: () => (/* binding */ DIGITS_REG_EXP),\n/* harmony export */ MONTH_NAME_REG_EXP: () => (/* binding */ MONTH_NAME_REG_EXP),\n/* harmony export */ dataCellRender: () => (/* binding */ dataCellRender),\n/* harmony export */ groupCellRender: () => (/* binding */ groupCellRender),\n/* harmony export */ headCellRender: () => (/* binding */ headCellRender)\n/* harmony export */ });\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Stack/Stack.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Grid/Grid.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/*\r\n Парус 8 - \r\n Дополнительная разметка и вёрстка клиентских элементов\r\n*/\n\n//---------------------\n//Подключение библиотек\n//---------------------\n\n\n //Классы React\n\n//---------\n//Константы\n//---------\n\n//Шаблон чисел и имён ячеек дат\nconst DIGITS_REG_EXP = /\\d+,?\\d*/g;\nconst MONTH_NAME_REG_EXP = /_\\d{4}_\\d{1,2}/;\nconst DAY_NAME_REG_EXP = /_\\d{4}_\\d{1,2}_\\d{1,2}/;\nlet curParent = \"\";\nlet x = 0;\n\n//-----------\n//Тело модуля\n//-----------\nconst formatDate = date => {\n const [year, month, day] = date.substring(1).split(\"_\");\n let nd;\n if (day == null) nd = `${month < 10 ? \"0\" + month : month}.${year}`;else nd = `${day < 10 ? \"0\" + day : day}.${month < 10 ? \"0\" + month : month}.${year}`;\n return nd;\n};\nconst headCellRender = ({\n columnDef\n}, podr, cntP, sumP, cntF, sumF) => {\n let cellStyle = {\n border: \"1px solid rgba(0, 0, 0)\",\n textAlign: \"center\"\n };\n let cellProps = {};\n let data = columnDef.caption;\n if (columnDef.expandable) {\n // поменять расположение + для развёртывания\n }\n if (columnDef.name == \"STEST\") cellStyle = {\n display: \"none\"\n };\n if (columnDef.name == \"SINFO\" || columnDef.name == \"SINFO2\") {\n cellProps = {\n colSpan: 2\n };\n if (columnDef.name == \"SINFO\") {\n cellStyle = {\n ...cellStyle,\n padding: \"unset\"\n };\n data = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_1__[\"default\"], {\n sx: {\n justifyContent: \"center\"\n },\n direction: \"row\",\n width: 300\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n container: true\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n item: true,\n xs: 4\n }, \"\\u041F\\u043E\\u0434\\u0440\\u0430\\u0437\\u0434\\u0435\\u043B\\u0435\\u043D\\u0438\\u0435:\"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n item: true,\n xs: 8\n }, podr), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n item: true,\n xs: 4\n }, \"\\u041A\\u043E\\u043B-\\u0432\\u043E \\u0440\\u0435\\u043C\\u043E\\u043D\\u0442\\u043E\\u0432, \\u043F\\u043B\\u0430\\u043D:\"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n item: true,\n xs: 2\n }, cntP), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n item: true,\n xs: 4\n }, \"\\u0422\\u0440\\u0443\\u0434\\u043E\\u0435\\u043C\\u043A\\u043E\\u0441\\u0442\\u044C, \\u0447\\u0430\\u0441. \\u043F\\u043B\\u0430\\u043D:\"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n item: true,\n xs: 2\n }, sumP), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n item: true,\n xs: 4\n }, \"\\u041A\\u043E\\u043B-\\u0432\\u043E \\u0440\\u0435\\u043C\\u043E\\u043D\\u0442\\u043E\\u0432, \\u0444\\u0430\\u043A\\u0442:\"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n item: true,\n xs: 2\n }, cntF), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n item: true,\n xs: 4\n }, \"\\u0422\\u0440\\u0443\\u0434\\u043E\\u0435\\u043C\\u043A\\u043E\\u0441\\u0442\\u044C, \\u0447\\u0430\\u0441. \\u0444\\u0430\\u043A\\u0442:\"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n item: true,\n xs: 2\n }, sumF)));\n }\n }\n if (columnDef.visible && DAY_NAME_REG_EXP.test(columnDef.name)) {\n cellStyle = {\n ...cellStyle,\n paddingLeft: \"5px\",\n paddingRight: \"5px\",\n minWidth: \"25px\",\n maxWidth: \"25px\"\n };\n }\n return {\n cellStyle,\n cellProps,\n data\n };\n};\nconst dataCellRender = ({\n row,\n columnDef\n}) => {\n let cellStyle = {\n padding: \"2px\",\n border: \"1px solid rgba(0, 0, 0)\",\n textAlign: \"center\"\n };\n let cellProps = {};\n let data = \" \";\n if (row[\"SINFO2\"] == undefined) {\n if (columnDef.name == \"STEST\") cellProps = {\n colSpan: 2\n };\n if (columnDef.name == \"SINFO2\") cellStyle = {\n display: \"none\"\n };\n if (columnDef.parent == \"\" && columnDef.expandable == true && columnDef.expanded == false) {\n curParent = columnDef.name;\n return {\n cellStyle: {\n ...cellStyle,\n height: \"25px\"\n },\n data\n };\n } else if (columnDef.name != \"SINFO2\" && columnDef.parent != \"\" && columnDef.expandable == false && columnDef.expanded == true) {\n if (columnDef.name.endsWith(\"_1\")) {\n curParent = columnDef.parent;\n const [year, month] = curParent.substring(1).split(\"_\");\n x = new Date(year, month, 0).getDate();\n cellProps = {\n colSpan: x\n };\n data = row[curParent];\n return {\n cellStyle,\n cellProps,\n data\n };\n } else {\n cellStyle = {\n display: \"none\"\n };\n }\n }\n }\n if (columnDef.name == \"STEST\" && row[\"SINFO2\"] == \"План\") {\n cellStyle = {\n ...cellStyle\n };\n cellProps = {\n rowSpan: 2\n };\n }\n if (columnDef.name == \"STEST\" && row[\"SINFO2\"] == \"Факт\") {\n cellStyle = {\n display: \"none\"\n };\n }\n switch (row[columnDef.name]) {\n case \"blue\":\n cellStyle = {\n ...cellStyle,\n backgroundColor: \"royalblue\",\n border: \"1px solid rgba(0, 0, 0)\"\n };\n cellProps = {\n title: formatDate(columnDef.name)\n };\n return {\n cellStyle,\n cellProps,\n data\n };\n case \"green\":\n cellStyle = {\n ...cellStyle,\n backgroundColor: \"lawngreen\",\n border: \"1px solid rgba(0, 0, 0)\"\n };\n cellProps = {\n title: formatDate(columnDef.name)\n };\n return {\n cellStyle,\n cellProps,\n data\n };\n case \"red\":\n cellStyle = {\n ...cellStyle,\n backgroundColor: \"crimson\",\n border: \"1px solid rgba(0, 0, 0)\"\n };\n cellProps = {\n title: formatDate(columnDef.name)\n };\n return {\n cellStyle,\n cellProps,\n data\n };\n case \"green red\":\n case \"red green\":\n cellStyle = {\n ...cellStyle,\n padding: \"unset\"\n };\n cellProps = {\n title: formatDate(columnDef.name)\n };\n data = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_1__[\"default\"], {\n sx: {\n justifyContent: \"center\"\n },\n direction: \"row\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n container: true,\n maxHeight: \"100%\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n item: true,\n xs: 6,\n sx: {\n backgroundColor: \"lawngreen\"\n }\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"p\", {\n style: {\n display: \"none\"\n }\n }, \"g\")), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n item: true,\n xs: 6,\n sx: {\n backgroundColor: \"crimson\"\n }\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"p\", {\n style: {\n display: \"none\"\n }\n }, \"r\"))));\n }\n return {\n cellStyle,\n cellProps\n };\n};\nconst groupCellRender = () => {\n let cellStyle = {\n display: \"none\"\n };\n return {\n cellStyle\n };\n};\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/panels/eqs_prfrm/layouts.js?"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ DAY_NAME_REG_EXP: () => (/* binding */ DAY_NAME_REG_EXP),\n/* harmony export */ DIGITS_REG_EXP: () => (/* binding */ DIGITS_REG_EXP),\n/* harmony export */ MONTH_NAME_REG_EXP: () => (/* binding */ MONTH_NAME_REG_EXP),\n/* harmony export */ dataCellRender: () => (/* binding */ dataCellRender),\n/* harmony export */ groupCellRender: () => (/* binding */ groupCellRender),\n/* harmony export */ headCellRender: () => (/* binding */ headCellRender)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Stack/Stack.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Grid/Grid.js\");\n/*\r\n Парус 8 - \r\n Дополнительная разметка и вёрстка клиентских элементов\r\n*/\n\n//---------------------\n//Подключение библиотек\n//---------------------\n\n //Классы React\n\n\n//---------\n//Константы\n//---------\n\n//Шаблон чисел и имён ячеек дат\nconst DIGITS_REG_EXP = /\\d+,?\\d*/g;\nconst MONTH_NAME_REG_EXP = /_\\d{4}_\\d{1,2}/;\nconst DAY_NAME_REG_EXP = /_\\d{4}_\\d{1,2}_\\d{1,2}/;\nlet curParent = \"\";\nlet x = 0;\n\n//-----------\n//Тело модуля\n//-----------\n\nconst formatDate = date => {\n const [year, month, day] = date.substring(1).split(\"_\");\n let nd;\n if (day == null) nd = `${month < 10 ? \"0\" + month : month}.${year}`;else nd = `${day < 10 ? \"0\" + day : day}.${month < 10 ? \"0\" + month : month}.${year}`;\n return nd;\n};\n\n// eslint-disable-next-line no-unused-vars\nconst headCellRender = ({\n columnDef\n}, hClick, podr, cntP, sumP, cntF, sumF) => {\n let cellStyle = {\n border: \"1px solid rgba(0, 0, 0)\",\n textAlign: \"center\"\n };\n let cellProps = {};\n let stackStyle = {};\n let data = columnDef.caption;\n if (columnDef.expandable) {\n const ref = /*#__PURE__*/(0,react__WEBPACK_IMPORTED_MODULE_0__.createRef)();\n cellStyle = {\n ...cellStyle,\n padding: \"5px\"\n };\n cellProps = {\n ...cellProps,\n ref: ref,\n onClick: e => {\n hClick(e, ref);\n }\n };\n stackStyle = {\n flexDirection: \"column\"\n };\n }\n if (columnDef.name == \"STEST\") cellStyle = {\n display: \"none\"\n };\n if (columnDef.name == \"SINFO\" || columnDef.name == \"SINFO2\") {\n cellProps = {\n colSpan: 2\n };\n if (columnDef.name == \"SINFO\") cellProps = {\n ...cellProps,\n rowSpan: 2\n };\n //if (columnDef.name == \"SINFO\") {\n //cellStyle = { display: \"none\" };\n // cellStyle = { ...cellStyle, padding: \"unset\" };\n // data = (\n // \n // \n // \n // Подразделение:\n // \n // \n // {podr}\n // \n // \n // Кол-во ремонтов, план:\n // \n // \n // {cntP}\n // \n // \n // Трудоемкость, час. план:\n // \n // \n // {sumP}\n // \n // \n // Кол-во ремонтов, факт:\n // \n // \n // {cntF}\n // \n // \n // Трудоемкость, час. факт:\n // \n // \n // {sumF}\n // \n // \n // \n // );\n //}\n }\n\n if (columnDef.name == \"SINFO2\") cellStyle = {\n display: \"none\"\n };\n if (columnDef.visible && DAY_NAME_REG_EXP.test(columnDef.name)) {\n cellStyle = {\n ...cellStyle,\n padding: \"5px\",\n minWidth: \"25px\",\n maxWidth: \"25px\"\n };\n stackStyle = {\n justifyContent: \"center\"\n };\n }\n return {\n cellStyle,\n cellProps,\n stackStyle,\n data\n };\n};\nconst dataCellRender = ({\n row,\n columnDef\n}, showEquipSrv) => {\n let cellStyle = {\n padding: \"2px\",\n border: \"1px solid rgba(0, 0, 0) !important\",\n textAlign: \"center\"\n };\n let cellProps = {};\n let data = \" \";\n if (row[\"SINFO2\"] == undefined) {\n if (columnDef.name == \"STEST\") {\n cellProps = {\n colSpan: 2\n };\n cellStyle = {\n ...cellStyle,\n textAlign: \"right\",\n fontWeight: \"bold\"\n };\n }\n if (columnDef.name == \"SINFO2\") cellStyle = {\n display: \"none\"\n };\n if (columnDef.parent == \"\" && columnDef.expandable == true && columnDef.expanded == false) {\n curParent = columnDef.name;\n return {\n cellStyle: {\n ...cellStyle,\n height: \"25px\"\n },\n data\n };\n } else if (columnDef.name != \"SINFO2\" && columnDef.parent != \"\" && columnDef.expandable == false && columnDef.expanded == true) {\n if (columnDef.name.endsWith(\"_1\")) {\n curParent = columnDef.parent;\n const [year, month] = curParent.substring(1).split(\"_\");\n x = new Date(year, month, 0).getDate();\n cellProps = {\n colSpan: x\n };\n data = row[curParent];\n return {\n cellStyle,\n cellProps,\n data\n };\n } else {\n cellStyle = {\n display: \"none\"\n };\n }\n }\n }\n if (columnDef.name == \"STEST\" && row[\"SINFO2\"] == \"План\") {\n cellStyle = {\n ...cellStyle\n };\n cellProps = {\n rowSpan: 2\n };\n }\n if (columnDef.name == \"STEST\" && row[\"SINFO2\"] == \"Факт\") {\n cellStyle = {\n display: \"none\"\n };\n }\n switch (row[columnDef.name]) {\n case \"blue\":\n cellStyle = {\n ...cellStyle,\n backgroundColor: \"lightblue\",\n border: \"1px solid rgba(0, 0, 0) !important\"\n };\n cellProps = {\n title: formatDate(columnDef.name),\n onClick: () => {\n showEquipSrv({\n date: columnDef.name,\n workType: row[\"SINFO2\"],\n info: row[\"groupName\"]\n });\n }\n };\n return {\n cellStyle,\n cellProps,\n data\n };\n case \"green\":\n cellStyle = {\n ...cellStyle,\n backgroundColor: \"green\",\n border: \"1px solid rgba(0, 0, 0) !important\"\n };\n cellProps = {\n title: formatDate(columnDef.name),\n onClick: () => {\n showEquipSrv({\n date: columnDef.name,\n workType: row[\"SINFO2\"],\n info: row[\"groupName\"]\n });\n }\n };\n return {\n cellStyle,\n cellProps,\n data\n };\n case \"red\":\n cellStyle = {\n ...cellStyle,\n backgroundColor: \"crimson\",\n border: \"1px solid rgba(0, 0, 0) !important\"\n };\n cellProps = {\n title: formatDate(columnDef.name),\n onClick: () => {\n showEquipSrv({\n date: columnDef.name,\n workType: row[\"SINFO2\"],\n info: row[\"groupName\"]\n });\n }\n };\n return {\n cellStyle,\n cellProps,\n data\n };\n case \"green red\":\n case \"red green\":\n cellStyle = {\n ...cellStyle,\n padding: \"unset\"\n };\n cellProps = {\n title: formatDate(columnDef.name)\n };\n data = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_1__[\"default\"], {\n sx: {\n justifyContent: \"center\"\n },\n direction: \"row\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n container: true,\n maxHeight: \"100%\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n item: true,\n xs: 6,\n sx: {\n backgroundColor: \"green\"\n },\n onClick: () => showEquipSrv({\n date: columnDef.name,\n workType: row[\"SINFO2\"],\n info: row[\"groupName\"]\n })\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"p\", {\n style: {\n display: \"none\"\n }\n }, \"g\")), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n item: true,\n xs: 6,\n sx: {\n backgroundColor: \"crimson\"\n },\n onClick: () => showEquipSrv({\n date: columnDef.name,\n workType: row[\"SINFO2\"],\n info: row[\"groupName\"]\n })\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"p\", {\n style: {\n display: \"none\"\n }\n }, \"r\"))));\n }\n return {\n cellStyle,\n cellProps\n };\n};\nconst groupCellRender = () => {\n let cellStyle = {\n display: \"none\"\n };\n return {\n cellStyle\n };\n};\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/panels/eqs_prfrm/layouts.js?"); /***/ }), @@ -3810,7 +3810,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ PrjJobs: () => (/* binding */ PrjJobs)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! prop-types */ \"./node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_15___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_15__);\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/List/List.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/ListItemButton/ListItemButton.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/ListItemIcon/ListItemIcon.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Icon/Icon.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/ListItemText/ListItemText.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Typography/Typography.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Box/Box.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Fab/Fab.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Drawer/Drawer.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Grid/Grid.js\");\n/* harmony import */ var _context_backend__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../context/backend */ \"./app/context/backend.js\");\n/* harmony import */ var _context_messaging__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../context/messaging */ \"./app/context/messaging.js\");\n/* harmony import */ var _context_application__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../context/application */ \"./app/context/application.js\");\n/* harmony import */ var _core_utils__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../core/utils */ \"./app/core/utils.js\");\n/* harmony import */ var _config_wrapper__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../config_wrapper */ \"./app/config_wrapper.js\");\n/* harmony import */ var _components_p8p_gantt__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../../components/p8p_gantt */ \"./app/components/p8p_gantt.js\");\n/* harmony import */ var _res_mon__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./res_mon */ \"./app/panels/prj_jobs/res_mon.js\");\n/* harmony import */ var _layouts__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./layouts */ \"./app/panels/prj_jobs/layouts.js\");\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n/*\r\n Парус 8 - Панели мониторинга - ПУП - Работы проектов\r\n Панель мониторинга: Корневая панель работ проектов\r\n*/\n\n//---------------------\n//Подключение библиотек\n//---------------------\n\n //Классы React\n //Контроль свойств компонента\n //Интерфейсные элементы\n //Контекст взаимодействия с сервером\n //Контекст сообщений\n //Контекст приложения\n //Вспомогательные функции\n //Подключение компонентов к настройкам приложения\n //Диаграмма Ганта\n //Монитор ресурсов\n //Дополнительная разметка и вёрстка клиентских элементов\n\n//---------\n//Константы\n//---------\n\n//Высота диаграммы Ганта\nconst GANTT_HEIGHT = \"75vh\";\n\n//Ширина диаграммы Ганта\nconst GANTT_WIDTH = \"98vw\";\n\n//Стили\nconst STYLES = {\n PROJECTS_LIST_SAVE_BUTTON: {\n backgroundColor: \"orange\"\n },\n PROJECTS_LIST_ITEM_NOJOBS: {\n backgroundColor: \"#ff000045\"\n },\n PROJECTS_LIST_ITEM_PRIMARY: {\n wordWrap: \"break-word\"\n },\n PROJECTS_LIST_ITEM_SECONDARY: {\n wordWrap: \"break-word\",\n fontSize: \"0.5rem\",\n textTransform: \"uppercase\"\n },\n PROJECTS_LIST_ITEM_SECONDARY_NOJOBS: {\n color: \"red\"\n },\n PROJECTS_LIST_ITEM_SECONDARY_NOEDIT: {\n color: \"gray\"\n },\n PROJECTS_LIST_ITEM_SECONDARY_CHANGED: {\n color: \"green\"\n },\n PROJECTS_BUTTON: {\n position: \"absolute\"\n },\n PROJECTS_DRAWER: {\n width: \"250px\",\n flexShrink: 0,\n [`& .MuiDrawer-paper`]: {\n width: \"250px\",\n boxSizing: \"border-box\"\n }\n },\n GANTT_CONTAINER: {\n height: GANTT_HEIGHT,\n width: GANTT_WIDTH\n },\n GANTT_TITLE: {\n paddingLeft: \"100px\",\n paddingRight: \"120px\"\n },\n PERIODS_BUTTON: {\n position: \"absolute\",\n right: \"20px\"\n },\n PERIODS_DRAWER: {\n width: \"1200px\",\n flexShrink: 0,\n [`& .MuiDrawer-paper`]: {\n width: \"1200px\",\n boxSizing: \"border-box\"\n }\n }\n};\n\n//------------------------------------\n//Вспомогательные функции и компоненты\n//------------------------------------\n\n//Список проектов\nconst ProjectsList = ({\n projects = [],\n selectedProject,\n onClick\n} = {}) => {\n //Подключение к контексту сообщений\n const {\n InlineMsgErr\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_messaging__WEBPACK_IMPORTED_MODULE_2__[\"MessagingСtx\"]);\n\n //Генерация содержимого\n return projects.length > 0 ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_9__[\"default\"], null, projects.map(p => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_10__[\"default\"], {\n key: p.NRN,\n sx: p.NJOBS == 0 ? STYLES.PROJECTS_LIST_ITEM_NOJOBS : null,\n selected: p.NRN === selectedProject,\n onClick: () => onClick ? onClick(p) : null\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_11__[\"default\"], null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_12__[\"default\"], {\n title: p.NEDITABLE == 1 ? \"Можно редактировать\" : \"Редактирование недоступно\"\n }, p.NEDITABLE == 1 ? \"edit\" : \"edit_off\")), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_13__[\"default\"], {\n primary: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_14__[\"default\"], {\n sx: STYLES.PROJECTS_LIST_ITEM_PRIMARY\n }, p.SNAME),\n secondary: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_14__[\"default\"], {\n sx: {\n ...STYLES.PROJECTS_LIST_ITEM_SECONDARY,\n ...(p.NJOBS == 0 ? STYLES.PROJECTS_LIST_ITEM_SECONDARY_NOJOBS : p.NCHANGED == 1 ? STYLES.PROJECTS_LIST_ITEM_SECONDARY_CHANGED : STYLES.PROJECTS_LIST_ITEM_SECONDARY_NOEDIT)\n }\n }, p.NJOBS == 1 ? p.NEDITABLE == 1 ? p.NCHANGED == 1 ? \"Изменён\" : \"Не изменён\" : \"Редактирование недоступно\" : \"Работы не определены\")\n })))) : /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(InlineMsgErr, {\n okBtn: false,\n text: \"Нет доступных проектов\"\n });\n};\n\n//Контроль свойств - Список проектов\nProjectsList.propTypes = {\n projects: (prop_types__WEBPACK_IMPORTED_MODULE_15___default().array),\n selectedProject: (prop_types__WEBPACK_IMPORTED_MODULE_15___default().number),\n onClick: (prop_types__WEBPACK_IMPORTED_MODULE_15___default().func)\n};\n\n//-----------\n//Тело модуля\n//-----------\n\n//Корневая панель работ проектов\nconst PrjJobs = () => {\n //Собственное состояние\n let [state, setState] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({\n needSave: false,\n showProjectsList: false,\n showPeriodsList: false,\n init: false,\n dateBegin: null,\n dateFact: null,\n durationMeas: null,\n labMeas: null,\n resourceStatus: null,\n ident: null,\n projects: [],\n projectsLoaded: false,\n selectedProjectJobsLoaded: false,\n selectedProject: null,\n selectedProjectDocRn: null,\n selectedProjectGanttDef: {},\n selectedProjectTasks: []\n });\n\n //Подключение к контексту приложения\n const {\n pOnlineShowDocument\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_application__WEBPACK_IMPORTED_MODULE_3__[\"ApplicationСtx\"]);\n\n //Подключение к контексту сообщений\n const {\n InlineMsgInfo\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_messaging__WEBPACK_IMPORTED_MODULE_2__[\"MessagingСtx\"]);\n\n //Подключение к контексту взаимодействия с сервером\n const {\n executeStored\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_backend__WEBPACK_IMPORTED_MODULE_1__[\"BackEndСtx\"]);\n\n //Загрузка списка проектов\n const loadProjects = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async (force = false) => {\n if (!state.projectsLoaded || force) {\n const data = await executeStored({\n stored: \"PKG_P8PANELS_PROJECTS.JB_PRJCTS_LIST\",\n args: {\n NIDENT: state.ident\n },\n respArg: \"COUT\",\n isArray: name => name === \"XPROJECTS\"\n });\n setState(pv => ({\n ...pv,\n projectsLoaded: true,\n projects: [...(data?.XPROJECTS || [])]\n }));\n }\n }, [executeStored, state.ident, state.projectsLoaded]);\n\n //Загрузка списка работ проекта\n const loadProjectJobs = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async (tasksOnly = false) => {\n const data = await executeStored({\n stored: \"PKG_P8PANELS_PROJECTS.JB_JOBS_LIST\",\n args: {\n NIDENT: state.ident,\n NPRN: state.selectedProject,\n NINCLUDE_DEF: tasksOnly === false ? 1 : 0\n },\n attributeValueProcessor: (name, val) => name == \"numb\" ? undefined : [\"start\", \"end\"].includes(name) ? (0,_core_utils__WEBPACK_IMPORTED_MODULE_4__.formatDateJSONDateOnly)(val) : val,\n respArg: \"COUT\"\n });\n setState(pv => ({\n ...pv,\n selectedProjectJobsLoaded: true,\n selectedProjectGanttDef: tasksOnly === true ? {\n ...pv.selectedProjectGanttDef\n } : data.XGANTT_DEF ? {\n ...data.XGANTT_DEF\n } : {},\n selectedProjectTasks: [...data.XGANTT_TASKS]\n }));\n }, [executeStored, state.ident, state.selectedProject]);\n\n //Изменение работы в графике\n const modifyJob = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async (job, dateFrom, dateTo, dateBegin, dateFact, durationMeas) => {\n let data = null;\n try {\n data = await executeStored({\n stored: \"PKG_P8PANELS_PROJECTS.JB_JOBS_MODIFY_PERIOD\",\n args: {\n NJB_JOBS: job,\n DDATE_FROM: dateFrom,\n DDATE_TO: dateTo,\n DBEGIN: dateBegin,\n DFACT: dateFact,\n NDURATION_MEAS: durationMeas\n }\n });\n if (data?.NRESOURCE_STATUS != -1) {\n setState(pv => ({\n ...pv,\n resourceStatus: data.NRESOURCE_STATUS,\n needSave: true\n }));\n loadProjects(true);\n }\n } finally {\n loadProjectJobs(true);\n }\n }, [executeStored, loadProjectJobs, loadProjects]);\n\n //Сохранение буфера балансировки в проекты\n const saveProjects = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async () => {\n const data = await executeStored({\n stored: \"PKG_P8PANELS_PROJECTS.JB_SAVE\",\n args: {\n NIDENT: state.ident\n },\n respArg: \"COUT\"\n });\n setState(pv => ({\n ...pv,\n needSave: false,\n projects: [...(data?.XPROJECTS || [])]\n }));\n }, [executeStored, state.ident]);\n\n //Инициализация данных балансировки\n const initJobs = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async () => {\n if (!state.init) {\n const data = await executeStored({\n stored: \"PKG_P8PANELS_PROJECTS.JB_INIT\",\n args: {\n DBEGIN: state.dateBegin ? new Date(state.dateBegin) : null,\n DFACT: state.dateFact ? new Date(state.dateFact) : null,\n NDURATION_MEAS: state.durationMeas,\n SLAB_MEAS: state.labMeas,\n NIDENT: state.ident\n }\n });\n setState(pv => ({\n ...pv,\n init: true,\n dateBegin: data.DBEGIN,\n dateFact: data.DFACT,\n durationMeas: data.NDURATION_MEAS,\n labMeas: data.SLAB_MEAS,\n resourceStatus: data.NRESOURCE_STATUS,\n ident: data.NIDENT\n }));\n }\n }, [state.init, state.dateBegin, state.dateFact, state.durationMeas, state.labMeas, state.ident, executeStored]);\n\n //Грузим список проектов при смене идентификатора процесса\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n if (state.ident) loadProjects();\n }, [state.ident, loadProjects]);\n\n //При смене выбранного проекта\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n if (state.selectedProject) loadProjectJobs(false);\n }, [state.selectedProject, loadProjectJobs]);\n\n //При подключении компонента к странице\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n initJobs();\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n //Выбор проекта\n const selectPoject = (project, projectDocRn) => {\n setState(pv => ({\n ...pv,\n selectedProject: project,\n selectedProjectDocRn: projectDocRn,\n selectedProjectJobsLoaded: false,\n selectedProjectTasks: [],\n selectedProjectGanttDef: {},\n showProjectsList: false\n }));\n };\n\n //Сброс выбора проекта\n const unselectProject = () => setState(pv => ({\n ...pv,\n selectedProjectJobsLoaded: false,\n selectedProject: null,\n selectedProjectDocRn: null,\n selectedProjectTasks: [],\n selectedProjectGanttDef: {},\n showProjectsList: false\n }));\n\n //Обработка нажатия на элемент в списке проектов\n const handleProjectClick = project => {\n if (state.selectedProject != project.NRN) selectPoject(project.NRN, project.NPROJECT);else unselectProject();\n };\n\n //Отработка нажатия на заголовок плана-графика\n const handleTitleClick = () => state.selectedProjectDocRn ? pOnlineShowDocument({\n unitCode: \"Projects\",\n document: state.selectedProjectDocRn\n }) : null;\n\n //Обработка измненения сроков задачи в диаграмме Гантта\n const handleTaskDatesChange = ({\n task,\n start,\n end,\n isMain\n }) => {\n if (isMain) modifyJob(task.rn, new Date(start), new Date(end), new Date(state.dateBegin), new Date(state.dateFact), state.durationMeas);\n };\n\n //Обработка нажатия на сохранение данных в проект\n const handleSaveToProjectsClick = () => saveProjects();\n\n //Обработка нажатия на проект в таблице детализации трудоёмкости по плану-графику монитора ресурсов\n const handlePlanJobsDtlProjectClick = ({\n sender\n }) => {\n setState(pv => ({\n ...pv,\n showPeriodsList: false\n }));\n if (state.selectedProject != sender.NJB_PRJCTS) selectPoject(sender.NJB_PRJCTS, sender.NPROJECT);\n };\n\n //Генерация содержимого\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_16__[\"default\"], {\n p: 2\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_17__[\"default\"], {\n variant: \"extended\",\n sx: STYLES.PROJECTS_BUTTON,\n onClick: () => setState(pv => ({\n ...pv,\n showProjectsList: !pv.showProjectsList\n }))\n }, \"\\u041F\\u0440\\u043E\\u0435\\u043A\\u0442\\u044B\", state.needSave ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), null, \"\\xA0\\xA0\", /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_12__[\"default\"], {\n sx: {\n color: \"orange\"\n }\n }, \"save\")) : null), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_18__[\"default\"], {\n anchor: \"left\",\n open: state.showProjectsList,\n onClose: () => setState(pv => ({\n ...pv,\n showProjectsList: false\n })),\n sx: STYLES.PROJECTS_DRAWER\n }, state.projectsLoaded ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), null, state.needSave ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_9__[\"default\"], null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_10__[\"default\"], {\n sx: STYLES.PROJECTS_LIST_SAVE_BUTTON,\n onClick: handleSaveToProjectsClick\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_11__[\"default\"], null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_12__[\"default\"], null, \"save\")), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_13__[\"default\"], {\n primary: \"\\u0421\\u043E\\u0445\\u0440\\u0430\\u043D\\u0438\\u0442\\u044C\",\n secondary: \"\\u041F\\u0435\\u0440\\u0435\\u043D\\u0441\\u0442\\u0438 \\u0438\\u0437\\u043C\\u0435\\u043D\\u0435\\u043D\\u0438\\u044F \\u0432 \\u043F\\u0440\\u043E\\u0435\\u043A\\u0442\\u044B\"\n }))) : null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(ProjectsList, {\n projects: state.projects,\n selectedProject: state.selectedProject,\n onClick: handleProjectClick\n })) : null), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_17__[\"default\"], {\n variant: \"extended\",\n sx: STYLES.PERIODS_BUTTON,\n onClick: () => setState(pv => ({\n ...pv,\n showPeriodsList: !pv.showPeriodsList\n }))\n }, \"\\u0420\\u0435\\u0441\\u0443\\u0440\\u0441\\u044B\", [0, 1].includes(state.resourceStatus) ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), null, \"\\xA0\\xA0\", /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_12__[\"default\"], {\n sx: {\n color: state.resourceStatus === 0 ? \"green\" : \"red\"\n }\n }, state.resourceStatus === 0 ? \"done\" : \"error\")) : null), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_18__[\"default\"], {\n anchor: \"right\",\n open: state.showPeriodsList,\n onClose: () => setState(pv => ({\n ...pv,\n showPeriodsList: false\n })),\n sx: STYLES.PERIODS_DRAWER\n }, state.ident ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_res_mon__WEBPACK_IMPORTED_MODULE_7__.ResMon, {\n ident: state.ident,\n onPlanJobsDtlProjectClick: handlePlanJobsDtlProjectClick\n }) : null), state.init == true ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_19__[\"default\"], {\n container: true,\n spacing: 1\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_19__[\"default\"], {\n item: true,\n xs: 12\n }, state.selectedProjectJobsLoaded ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_16__[\"default\"], {\n sx: STYLES.GANTT_CONTAINER,\n p: 1\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_components_p8p_gantt__WEBPACK_IMPORTED_MODULE_6__.P8PGantt, _extends({}, _config_wrapper__WEBPACK_IMPORTED_MODULE_5__.P8P_GANTT_CONFIG_PROPS, state.selectedProjectGanttDef, {\n height: GANTT_HEIGHT,\n titleStyle: STYLES.GANTT_TITLE,\n onTitleClick: handleTitleClick,\n tasks: state.selectedProjectTasks,\n onTaskDatesChange: handleTaskDatesChange,\n taskAttributeRenderer: _layouts__WEBPACK_IMPORTED_MODULE_8__.taskAttributeRenderer\n }))) : !state.selectedProject ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(InlineMsgInfo, {\n okBtn: false,\n text: \"Укажите проект для отображения его плана-графика\"\n }) : null)) : null);\n};\n\n//----------------\n//Интерфейс модуля\n//----------------\n\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/panels/prj_jobs/prj_jobs.js?"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ PrjJobs: () => (/* binding */ PrjJobs)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! prop-types */ \"./node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_16___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_16__);\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Dialog/Dialog.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/DialogTitle/DialogTitle.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/DialogContent/DialogContent.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/TextField/TextField.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/DialogActions/DialogActions.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Button/Button.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/List/List.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/ListItemButton/ListItemButton.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/ListItemIcon/ListItemIcon.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Icon/Icon.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/ListItemText/ListItemText.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_22__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Typography/Typography.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_23__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Box/Box.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_24__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Fab/Fab.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_25__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Drawer/Drawer.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_26__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/ListItem/ListItem.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_27__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Divider/Divider.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_28__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Grid/Grid.js\");\n/* harmony import */ var _context_backend__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../context/backend */ \"./app/context/backend.js\");\n/* harmony import */ var _context_messaging__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../context/messaging */ \"./app/context/messaging.js\");\n/* harmony import */ var _context_application__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../context/application */ \"./app/context/application.js\");\n/* harmony import */ var _core_utils__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../core/utils */ \"./app/core/utils.js\");\n/* harmony import */ var _config_wrapper__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../config_wrapper */ \"./app/config_wrapper.js\");\n/* harmony import */ var _components_p8p_gantt__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../../components/p8p_gantt */ \"./app/components/p8p_gantt.js\");\n/* harmony import */ var _app_text__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../../../app.text */ \"./app.text.js\");\n/* harmony import */ var _res_mon__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./res_mon */ \"./app/panels/prj_jobs/res_mon.js\");\n/* harmony import */ var _layouts__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./layouts */ \"./app/panels/prj_jobs/layouts.js\");\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n/*\r\n Парус 8 - Панели мониторинга - ПУП - Работы проектов\r\n Панель мониторинга: Корневая панель работ проектов\r\n*/\n\n//---------------------\n//Подключение библиотек\n//---------------------\n\n //Классы React\n //Контроль свойств компонента\n //Интерфейсные элементы\n //Контекст взаимодействия с сервером\n //Контекст сообщений\n //Контекст приложения\n //Вспомогательные функции\n //Подключение компонентов к настройкам приложения\n //Диаграмма Ганта\n //Вспомогательные функции\n //Текстовые ресурсы и константы\n //Монитор ресурсов\n //Дополнительная разметка и вёрстка клиентских элементов\n\n//---------\n//Константы\n//---------\n\n//Высота диаграммы Ганта\nconst GANTT_HEIGHT = \"75vh\";\n\n//Ширина диаграммы Ганта\nconst GANTT_WIDTH = \"98vw\";\n\n//Стили\nconst STYLES = {\n PROJECTS_LIST_ITEM_NOJOBS: {\n backgroundColor: \"#ff000045\"\n },\n PROJECTS_LIST_ITEM_PRIMARY: {\n wordWrap: \"break-word\"\n },\n PROJECTS_LIST_ITEM_SECONDARY: {\n wordWrap: \"break-word\",\n fontSize: \"0.5rem\",\n textTransform: \"uppercase\"\n },\n PROJECTS_LIST_ITEM_SECONDARY_NOJOBS: {\n color: \"red\"\n },\n PROJECTS_LIST_ITEM_SECONDARY_NOEDIT: {\n color: \"gray\"\n },\n PROJECTS_LIST_ITEM_SECONDARY_CHANGED: {\n color: \"green\"\n },\n PROJECTS_BUTTON: {\n position: \"absolute\"\n },\n PROJECTS_DRAWER: {\n width: \"250px\",\n flexShrink: 0,\n [`& .MuiDrawer-paper`]: {\n width: \"250px\",\n boxSizing: \"border-box\"\n }\n },\n GANTT_CONTAINER: {\n height: GANTT_HEIGHT,\n width: GANTT_WIDTH\n },\n GANTT_TITLE: {\n paddingLeft: \"100px\",\n paddingRight: \"120px\"\n },\n PERIODS_BUTTON: {\n position: \"absolute\",\n right: \"20px\"\n },\n PERIODS_DRAWER: {\n width: \"1200px\",\n flexShrink: 0,\n [`& .MuiDrawer-paper`]: {\n width: \"1200px\",\n boxSizing: \"border-box\"\n }\n }\n};\n\n//Единицы измерения длительности\nconst DURATION_MEAS = {\n 0: \"День\",\n 1: \"Неделя\",\n 2: \"Декада\",\n 3: \"Месяц\",\n 4: \"Квартал\",\n 5: \"Год\"\n};\n\n//------------------------------------\n//Вспомогательные функции и компоненты\n//------------------------------------\n\n//Диалог параметров инициализации панели\nconst InitDialog = ({\n dateBegin,\n dateFact,\n onOk,\n onCancel\n}) => {\n //Собственное состояние - значения с-по\n const [values, setValues] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({\n dateBegin: (0,_core_utils__WEBPACK_IMPORTED_MODULE_4__.formatDateJSONDateOnly)(dateBegin),\n dateFact: (0,_core_utils__WEBPACK_IMPORTED_MODULE_4__.formatDateJSONDateOnly)(dateFact)\n });\n\n //Отработка воода значения в фильтр\n const handleValueTextFieldChanged = e => setValues(prev => ({\n ...prev,\n [e.target.name]: e.target.value\n }));\n\n //Генерация содержимого\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_10__[\"default\"], {\n open: true,\n \"aria-labelledby\": \"init-dialog-title\",\n \"aria-describedby\": \"init-dialog-description\",\n onClose: () => onCancel ? onCancel() : null\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_11__[\"default\"], null, \"\\u041F\\u0430\\u0440\\u0430\\u043C\\u0435\\u0442\\u0440\\u044B \\u0438\\u043D\\u0438\\u0446\\u0438\\u0430\\u043B\\u0438\\u0437\\u0430\\u0446\\u0438\\u0438\"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_12__[\"default\"], null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_13__[\"default\"], {\n style: {\n padding: \"10px\"\n },\n name: \"dateBegin\",\n type: \"date\",\n value: values.dateBegin,\n onChange: handleValueTextFieldChanged,\n label: \"\\u041D\\u0430\\u0447\\u0430\\u043B\\u043E (\\u0431\\u0443\\u0434\\u0435\\u0442 \\u0438\\u0441\\u043F\\u043E\\u043B\\u044C\\u0437\\u043E\\u0432\\u0430\\u043D \\u043F\\u0435\\u0440\\u0432\\u044B\\u0439 \\u0434\\u0435\\u043D\\u044C \\u043C\\u0435\\u0441\\u044F\\u0446\\u0430)\",\n variant: \"standard\",\n fullWidth: true\n }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_13__[\"default\"], {\n style: {\n padding: \"10px\"\n },\n name: \"dateFact\",\n type: \"date\",\n value: values.dateFact,\n onChange: handleValueTextFieldChanged,\n label: \"\\u0424\\u0430\\u043A\\u0442 \\u043D\\u0430 (\\u0431\\u0443\\u0434\\u0435\\u0442 \\u0438\\u0441\\u043F\\u043E\\u043B\\u044C\\u0437\\u043E\\u0432\\u0430\\u043D \\u043F\\u043E\\u0441\\u043B\\u0435\\u0434\\u043D\\u0438\\u0439 \\u0434\\u0435\\u043D\\u044C \\u043C\\u0435\\u0441\\u044F\\u0446\\u0430)\",\n variant: \"standard\",\n fullWidth: true\n })), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_14__[\"default\"], null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_15__[\"default\"], {\n onClick: () => onOk ? onOk({\n dateBegin: new Date(values.dateBegin),\n dateFact: new Date(values.dateFact)\n }) : null\n }, _app_text__WEBPACK_IMPORTED_MODULE_7__.BUTTONS.OK), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_15__[\"default\"], {\n onClick: () => onCancel ? onCancel() : null\n }, _app_text__WEBPACK_IMPORTED_MODULE_7__.BUTTONS.CANCEL)));\n};\n\n//Контроль свойств - Диалог параметров инициализации панели\nInitDialog.propTypes = {\n dateBegin: prop_types__WEBPACK_IMPORTED_MODULE_16___default().instanceOf(Date).isRequired,\n dateFact: prop_types__WEBPACK_IMPORTED_MODULE_16___default().instanceOf(Date).isRequired,\n onOk: (prop_types__WEBPACK_IMPORTED_MODULE_16___default().func),\n onCancel: (prop_types__WEBPACK_IMPORTED_MODULE_16___default().func)\n};\n\n//Список проектов\nconst ProjectsList = ({\n projects = [],\n selectedProject,\n onClick\n} = {}) => {\n //Подключение к контексту сообщений\n const {\n InlineMsgErr\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_messaging__WEBPACK_IMPORTED_MODULE_2__[\"MessagingСtx\"]);\n\n //Генерация содержимого\n return projects.length > 0 ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_17__[\"default\"], null, projects.map(p => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_18__[\"default\"], {\n key: p.NRN,\n sx: p.NJOBS == 0 ? STYLES.PROJECTS_LIST_ITEM_NOJOBS : null,\n selected: p.NRN === selectedProject,\n onClick: () => onClick ? onClick(p) : null\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_19__[\"default\"], null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_20__[\"default\"], {\n title: p.NEDITABLE == 1 ? \"Можно редактировать\" : \"Редактирование недоступно\"\n }, p.NEDITABLE == 1 ? \"edit\" : \"edit_off\")), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_21__[\"default\"], {\n primary: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_22__[\"default\"], {\n sx: STYLES.PROJECTS_LIST_ITEM_PRIMARY\n }, p.SNAME),\n secondary: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_22__[\"default\"], {\n sx: {\n ...STYLES.PROJECTS_LIST_ITEM_SECONDARY,\n ...(p.NJOBS == 0 ? STYLES.PROJECTS_LIST_ITEM_SECONDARY_NOJOBS : p.NCHANGED == 1 ? STYLES.PROJECTS_LIST_ITEM_SECONDARY_CHANGED : STYLES.PROJECTS_LIST_ITEM_SECONDARY_NOEDIT)\n }\n }, p.NJOBS == 1 ? p.NEDITABLE == 1 ? p.NCHANGED == 1 ? \"Изменён\" : \"Не изменён\" : \"Редактирование недоступно\" : \"Работы не определены\")\n })))) : /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(InlineMsgErr, {\n okBtn: false,\n text: \"Нет доступных проектов\"\n });\n};\n\n//Контроль свойств - Список проектов\nProjectsList.propTypes = {\n projects: (prop_types__WEBPACK_IMPORTED_MODULE_16___default().array),\n selectedProject: (prop_types__WEBPACK_IMPORTED_MODULE_16___default().number),\n onClick: (prop_types__WEBPACK_IMPORTED_MODULE_16___default().func)\n};\n\n//-----------\n//Тело модуля\n//-----------\n\n//Корневая панель работ проектов\nconst PrjJobs = () => {\n //Собственное состояние\n let [state, setState] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({\n needSave: false,\n showProjectsList: false,\n showPeriodsList: false,\n init: false,\n dateBegin: null,\n dateFact: null,\n durationMeas: null,\n labMeas: null,\n resourceStatus: null,\n ident: null,\n projects: [],\n projectsLoaded: false,\n selectedProjectJobsLoaded: false,\n selectedProject: null,\n selectedProjectDocRn: null,\n selectedProjectGanttDef: {},\n selectedProjectTasks: [],\n showInitDialog: false\n });\n\n //Подключение к контексту приложения\n const {\n pOnlineShowDocument\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_application__WEBPACK_IMPORTED_MODULE_3__[\"ApplicationСtx\"]);\n\n //Подключение к контексту сообщений\n const {\n InlineMsgInfo\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_messaging__WEBPACK_IMPORTED_MODULE_2__[\"MessagingСtx\"]);\n\n //Подключение к контексту взаимодействия с сервером\n const {\n executeStored\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_backend__WEBPACK_IMPORTED_MODULE_1__[\"BackEndСtx\"]);\n\n //Загрузка списка проектов\n const loadProjects = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async (force = false) => {\n if (!state.projectsLoaded || force) {\n const data = await executeStored({\n stored: \"PKG_P8PANELS_PROJECTS.JB_PRJCTS_LIST\",\n args: {\n NIDENT: state.ident\n },\n respArg: \"COUT\",\n isArray: name => name === \"XPROJECTS\"\n });\n setState(pv => ({\n ...pv,\n projectsLoaded: true,\n projects: [...(data?.XPROJECTS || [])]\n }));\n }\n }, [executeStored, state.ident, state.projectsLoaded]);\n\n //Загрузка списка работ проекта\n const loadProjectJobs = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async (tasksOnly = false) => {\n const data = await executeStored({\n stored: \"PKG_P8PANELS_PROJECTS.JB_JOBS_LIST\",\n args: {\n NIDENT: state.ident,\n NPRN: state.selectedProject,\n NINCLUDE_DEF: tasksOnly === false ? 1 : 0\n },\n attributeValueProcessor: (name, val) => name == \"numb\" ? undefined : [\"start\", \"end\"].includes(name) ? (0,_core_utils__WEBPACK_IMPORTED_MODULE_4__.formatDateJSONDateOnly)(val) : val,\n respArg: \"COUT\"\n });\n setState(pv => ({\n ...pv,\n selectedProjectJobsLoaded: true,\n selectedProjectGanttDef: tasksOnly === true ? {\n ...pv.selectedProjectGanttDef\n } : data.XGANTT_DEF ? {\n ...data.XGANTT_DEF\n } : {},\n selectedProjectTasks: [...data.XGANTT_TASKS]\n }));\n }, [executeStored, state.ident, state.selectedProject]);\n\n //Изменение работы в графике\n const modifyJob = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async (job, dateFrom, dateTo, dateBegin, dateFact, durationMeas) => {\n let data = null;\n try {\n data = await executeStored({\n stored: \"PKG_P8PANELS_PROJECTS.JB_JOBS_MODIFY_PERIOD\",\n args: {\n NJB_JOBS: job,\n DDATE_FROM: dateFrom,\n DDATE_TO: dateTo,\n DBEGIN: dateBegin,\n DFACT: dateFact,\n NDURATION_MEAS: durationMeas\n }\n });\n if (data?.NRESOURCE_STATUS != -1) {\n setState(pv => ({\n ...pv,\n resourceStatus: data.NRESOURCE_STATUS,\n needSave: true\n }));\n loadProjects(true);\n }\n } finally {\n loadProjectJobs(true);\n }\n }, [executeStored, loadProjectJobs, loadProjects]);\n\n //Сохранение буфера балансировки в проекты\n const saveProjects = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async () => {\n const data = await executeStored({\n stored: \"PKG_P8PANELS_PROJECTS.JB_SAVE\",\n args: {\n NIDENT: state.ident\n },\n respArg: \"COUT\"\n });\n setState(pv => ({\n ...pv,\n needSave: false,\n projects: [...(data?.XPROJECTS || [])]\n }));\n }, [executeStored, state.ident]);\n\n //Инициализация данных балансировки\n const initJobs = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async () => {\n if (!state.init) {\n const data = await executeStored({\n stored: \"PKG_P8PANELS_PROJECTS.JB_INIT\",\n args: {\n DBEGIN: state.dateBegin ? state.dateBegin : null,\n DFACT: state.dateFact ? state.dateFact : null,\n NDURATION_MEAS: state.durationMeas,\n SLAB_MEAS: state.labMeas,\n NIDENT: state.ident\n }\n });\n setState(pv => ({\n ...pv,\n init: true,\n reInit: false,\n dateBegin: new Date(data.DBEGIN),\n dateFact: new Date(data.DFACT),\n durationMeas: data.NDURATION_MEAS,\n labMeas: data.SLAB_MEAS,\n resourceStatus: data.NRESOURCE_STATUS,\n ident: data.NIDENT\n }));\n }\n }, [state.init, state.dateBegin, state.dateFact, state.durationMeas, state.labMeas, state.ident, executeStored]);\n\n //Грузим список проектов при смене идентификатора процесса\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n if (state.ident) loadProjects();\n }, [state.ident, loadProjects]);\n\n //При смене выбранного проекта\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n if (state.selectedProject) loadProjectJobs(false);\n }, [state.selectedProject, loadProjectJobs]);\n\n //При изменении флага инициализации\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n initJobs();\n }, [state.init, initJobs]);\n\n //Выбор проекта\n const selectPoject = (project, projectDocRn) => {\n setState(pv => ({\n ...pv,\n selectedProject: project,\n selectedProjectDocRn: projectDocRn,\n selectedProjectJobsLoaded: false,\n selectedProjectTasks: [],\n selectedProjectGanttDef: {},\n showProjectsList: false\n }));\n };\n\n //Сброс выбора проекта\n const unselectProject = () => setState(pv => ({\n ...pv,\n selectedProjectJobsLoaded: false,\n selectedProject: null,\n selectedProjectDocRn: null,\n selectedProjectTasks: [],\n selectedProjectGanttDef: {},\n showProjectsList: false\n }));\n\n //Обработка нажатия на элемент в списке проектов\n const handleProjectClick = project => {\n if (state.selectedProject != project.NRN) selectPoject(project.NRN, project.NPROJECT);else unselectProject();\n };\n\n //Отработка нажатия на заголовок плана-графика\n const handleTitleClick = () => state.selectedProjectDocRn ? pOnlineShowDocument({\n unitCode: \"Projects\",\n document: state.selectedProjectDocRn\n }) : null;\n\n //Обработка измненения сроков задачи в диаграмме Гантта\n const handleTaskDatesChange = ({\n task,\n start,\n end,\n isMain\n }) => {\n if (isMain) modifyJob(task.rn, new Date(start), new Date(end), new Date(state.dateBegin), new Date(state.dateFact), state.durationMeas);\n };\n\n //Отработка нажатия на отображения диалога параметров инициализации панели\n const handleShowInitDialogClick = () => setState(pv => ({\n ...pv,\n showInitDialog: true\n }));\n\n //Отработка нажатия на \"ОК\" в диалоге параметров инициализации панели\n const handleOKInitDialogClick = values => setState(pv => ({\n ...pv,\n dateBegin: values.dateBegin,\n dateFact: values.dateFact,\n showInitDialog: false,\n init: false\n }));\n\n //Отработка нажатия на \"Отмена\" в диалоге параметров инициализации панели\n const handleCancelInitDialogClick = () => setState(pv => ({\n ...pv,\n showInitDialog: false\n }));\n\n //Обработка нажатия на сохранение данных в проект\n const handleSaveToProjectsClick = () => saveProjects();\n\n //Обработка нажатия на проект в таблице детализации трудоёмкости по плану-графику монитора ресурсов\n const handlePlanJobsDtlProjectClick = ({\n sender\n }) => {\n setState(pv => ({\n ...pv,\n showPeriodsList: false\n }));\n if (state.selectedProject != sender.NJB_PRJCTS) selectPoject(sender.NJB_PRJCTS, sender.NPROJECT);\n };\n\n //Генерация содержимого\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_23__[\"default\"], {\n p: 2\n }, state.showInitDialog ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(InitDialog, {\n dateBegin: state.dateBegin,\n dateFact: state.dateFact,\n onOk: handleOKInitDialogClick,\n onCancel: handleCancelInitDialogClick\n }) : null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_24__[\"default\"], {\n variant: \"extended\",\n sx: STYLES.PROJECTS_BUTTON,\n onClick: () => setState(pv => ({\n ...pv,\n showProjectsList: !pv.showProjectsList\n }))\n }, \"\\u041F\\u0440\\u043E\\u0435\\u043A\\u0442\\u044B\", state.needSave ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), null, \"\\xA0\\xA0\", /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_20__[\"default\"], {\n sx: {\n color: \"orange\"\n }\n }, \"save\")) : null), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_25__[\"default\"], {\n anchor: \"left\",\n open: state.showProjectsList,\n onClose: () => setState(pv => ({\n ...pv,\n showProjectsList: false\n })),\n sx: STYLES.PROJECTS_DRAWER\n }, state.projectsLoaded ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_17__[\"default\"], null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_26__[\"default\"], null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_21__[\"default\"], {\n secondary: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"b\", null, \"\\u041D\\u0430\\u0447\\u0430\\u043B\\u043E: \"), (0,_core_utils__WEBPACK_IMPORTED_MODULE_4__.formatDateRF)(state.dateBegin), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"br\", null), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"b\", null, \"\\u0424\\u0430\\u043A\\u0442 \\u043D\\u0430: \"), (0,_core_utils__WEBPACK_IMPORTED_MODULE_4__.formatDateRF)(state.dateFact), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"br\", null), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"b\", null, \"\\u0414\\u043B\\u0438\\u0442\\u0435\\u043B\\u044C\\u043D\\u043E\\u0441\\u0442\\u044C: \"), DURATION_MEAS[state.durationMeas], /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"br\", null), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"b\", null, \"\\u0422\\u0440\\u0443\\u0434\\u043E\\u0451\\u043C\\u043A\\u043E\\u0441\\u0442\\u044C: \"), state.labMeas)\n })), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_26__[\"default\"], null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_15__[\"default\"], {\n fullWidth: true,\n variant: \"contained\",\n startIcon: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_20__[\"default\"], null, \"refresh\"),\n onClick: handleShowInitDialogClick\n }, \"\\u041F\\u0435\\u0440\\u0435\\u0444\\u043E\\u0440\\u043C\\u0438\\u0440\\u043E\\u0432\\u0430\\u0442\\u044C...\"))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_27__[\"default\"], null), state.needSave ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_17__[\"default\"], null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_26__[\"default\"], null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_15__[\"default\"], {\n fullWidth: true,\n color: \"warning\",\n variant: \"contained\",\n startIcon: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_20__[\"default\"], null, \"save\"),\n onClick: handleSaveToProjectsClick\n }, \"\\u0421\\u043E\\u0445\\u0440\\u0430\\u043D\\u0438\\u0442\\u044C\"))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_27__[\"default\"], null)) : null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(ProjectsList, {\n projects: state.projects,\n selectedProject: state.selectedProject,\n onClick: handleProjectClick\n })) : null), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_24__[\"default\"], {\n variant: \"extended\",\n sx: STYLES.PERIODS_BUTTON,\n onClick: () => setState(pv => ({\n ...pv,\n showPeriodsList: !pv.showPeriodsList\n }))\n }, \"\\u0420\\u0435\\u0441\\u0443\\u0440\\u0441\\u044B\", [0, 1].includes(state.resourceStatus) ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), null, \"\\xA0\\xA0\", /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_20__[\"default\"], {\n sx: {\n color: state.resourceStatus === 0 ? \"green\" : \"red\"\n }\n }, state.resourceStatus === 0 ? \"done\" : \"error\")) : null), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_25__[\"default\"], {\n anchor: \"right\",\n open: state.showPeriodsList,\n onClose: () => setState(pv => ({\n ...pv,\n showPeriodsList: false\n })),\n sx: STYLES.PERIODS_DRAWER\n }, state.ident ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_res_mon__WEBPACK_IMPORTED_MODULE_8__.ResMon, {\n ident: state.ident,\n onPlanJobsDtlProjectClick: handlePlanJobsDtlProjectClick\n }) : null), state.init == true ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_28__[\"default\"], {\n container: true,\n spacing: 1\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_28__[\"default\"], {\n item: true,\n xs: 12\n }, state.selectedProjectJobsLoaded ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_23__[\"default\"], {\n sx: STYLES.GANTT_CONTAINER,\n p: 1\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_components_p8p_gantt__WEBPACK_IMPORTED_MODULE_6__.P8PGantt, _extends({}, _config_wrapper__WEBPACK_IMPORTED_MODULE_5__.P8P_GANTT_CONFIG_PROPS, state.selectedProjectGanttDef, {\n height: GANTT_HEIGHT,\n titleStyle: STYLES.GANTT_TITLE,\n onTitleClick: handleTitleClick,\n tasks: state.selectedProjectTasks,\n onTaskDatesChange: handleTaskDatesChange,\n taskAttributeRenderer: _layouts__WEBPACK_IMPORTED_MODULE_9__.taskAttributeRenderer\n }))) : !state.selectedProject ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(InlineMsgInfo, {\n okBtn: false,\n text: \"Укажите проект для отображения его плана-графика\"\n }) : null)) : null);\n};\n\n//----------------\n//Интерфейс модуля\n//----------------\n\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/panels/prj_jobs/prj_jobs.js?"); /***/ }), From 08c9459f40101adaef522182e01bbae0ff812c0b Mon Sep 17 00:00:00 2001 From: Mikhail Chechnev Date: Thu, 18 Apr 2024 18:21:44 +0300 Subject: [PATCH 09/76] =?UTF-8?q?=D0=91=D0=94:=20=D0=9F=D0=B0=D0=BD=D0=B5?= =?UTF-8?q?=D0=BB=D1=8C=20"=D0=A0=D0=B0=D0=B1=D0=BE=D1=82=D1=8B=20=D0=BF?= =?UTF-8?q?=D1=80=D0=BE=D0=B5=D0=BA=D1=82=D0=BE=D0=B2"=20-=20=D0=BA=D0=BE?= =?UTF-8?q?=D1=80=D1=80=D0=B5=D0=BA=D1=82=D0=BD=D0=B0=D1=8F=20=D0=B8=D0=BD?= =?UTF-8?q?=D0=B8=D1=86=D0=B8=D0=B0=D0=BB=D0=B8=D0=B7=D0=B0=D1=86=D0=B8?= =?UTF-8?q?=D1=8F=20=D0=B4=D0=B0=D1=82=D1=8B=20=D0=BD=D0=B0=D1=87=D0=B0?= =?UTF-8?q?=D0=BB=D0=B0=20=D0=BC=D0=BE=D0=BD=D0=B8=D1=82=D0=BE=D1=80=D0=B8?= =?UTF-8?q?=D0=BD=D0=B3=D0=B0=20(=D0=BF=D0=BE=20=D1=82=D0=B5=D0=BA=D1=83?= =?UTF-8?q?=D1=89=D0=B5=D0=B9=20=D1=81=D0=B8=D1=81=D1=82=D0=B5=D0=BC=D0=BD?= =?UTF-8?q?=D0=BE=D0=B9)=20=D0=B8=20=D0=B4=D0=B0=D1=82=D1=8B=20=D1=84?= =?UTF-8?q?=D0=B0=D0=BA=D1=82=D0=B0=20(=D0=BF=D0=BE=20"=D0=9F=D0=BB=D0=B0?= =?UTF-8?q?=D0=BD=D0=B0=D0=BC=20=D0=B8=20=D0=BE=D1=82=D1=87=D0=B5=D1=82?= =?UTF-8?q?=D0=B0=D0=BC=20=D0=BF=D0=BE=D0=B4=D1=80=D0=B0=D0=B7=D0=B4=D0=B5?= =?UTF-8?q?=D0=BB=D0=B5=D0=BD=D0=B8=D0=B9")?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- db/PKG_P8PANELS_PROJECTS.pck | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/db/PKG_P8PANELS_PROJECTS.pck b/db/PKG_P8PANELS_PROJECTS.pck index 0e70042..4be75bf 100644 --- a/db/PKG_P8PANELS_PROJECTS.pck +++ b/db/PKG_P8PANELS_PROJECTS.pck @@ -6123,10 +6123,20 @@ text="Проверить, что для расчётных полей дата- if (DBEGIN is null) then DBEGIN := TRUNC(sysdate, 'yyyy'); else - DBEGIN := TRUNC(DBEGIN, 'yyyy'); + DBEGIN := TRUNC(DBEGIN, 'mm'); end if; /* Обработаем дату факта */ - DFACT := TO_DATE('01.01.2022', 'DD.MM.YYYY'); + if (DFACT is null) then + select LAST_DAY(TRUNC(COALESCE(max(ENP.ENDDATE), DBEGIN), 'mm')) + into DFACT + from PRJDEPLAN T, + ENPERIOD ENP + where T.COMPANY = NCOMPANY + and T.STATE = 2 + and T.PERIOD = ENP.RN; + else + DFACT := LAST_DAY(TRUNC(DFACT, 'mm')); + end if; /* Обработаем единицу измерения длительности (пока - она всегда должна быть "день", по умолчанию) */ NDURATION_MEAS := NJB_DURATION_MEAS; /* Обработаем единицу измерения трудоёмкости (пока - она всегда должна быть "ч/ч", по умолчанию) */ From d51f8b5e09dfc2c3b564348b81db761dd39b3a85 Mon Sep 17 00:00:00 2001 From: Mikhail Chechnev Date: Fri, 19 Apr 2024 21:41:21 +0300 Subject: [PATCH 10/76] =?UTF-8?q?WEB=20APP:=20=D0=9F=D0=B0=D0=BD=D0=B5?= =?UTF-8?q?=D0=BB=D1=8C=20"=D0=A0=D0=B0=D0=B1=D0=BE=D1=82=D1=8B=20=D0=BF?= =?UTF-8?q?=D1=80=D0=BE=D0=B5=D0=BA=D1=82=D0=BE=D0=B2"=20-=20=D1=80=D0=B0?= =?UTF-8?q?=D0=B7=D0=B4=D0=B5=D0=BB=D0=B5=D0=BD=D0=B8=D0=B5=20=D0=BD=D0=B0?= =?UTF-8?q?=20=D0=BA=D0=BE=D0=BC=D0=BF=D0=BE=D0=BD=D0=B5=D0=BD=D1=82=D1=8B?= =?UTF-8?q?=20=D0=B3=D0=BB=D0=B0=D0=B2=D0=BD=D0=BE=D0=B9=20=D1=81=D1=82?= =?UTF-8?q?=D1=80=D0=B0=D0=BD=D0=B8=D1=86=D1=8B,=20=D0=BA=D0=BE=D1=80?= =?UTF-8?q?=D1=80=D0=B5=D0=BA=D1=82=D0=B8=D1=80=D0=BE=D0=B2=D0=BA=D0=B0=20?= =?UTF-8?q?=D1=81=D0=B5=D1=80=D0=B2=D0=B5=D1=80=D0=BD=D1=8B=D1=85=20=D0=B2?= =?UTF-8?q?=D1=8B=D0=B7=D0=BE=D0=B2=D0=BE=D0=B2=20=D0=B4=D0=B5=D1=82=D0=B0?= =?UTF-8?q?=D0=BB=D0=B8=D0=B7=D0=B0=D1=86=D0=B8=D0=B9=20=D0=BF=D0=BE=D0=B4?= =?UTF-8?q?=20=D0=B8=D0=B7=D0=BC=D0=B5=D0=BD=D0=B5=D0=BD=D0=B8=D1=8F=20?= =?UTF-8?q?=D0=BF=D0=B0=D0=BA=D0=B5=D1=82=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/panels/prj_jobs/lab_fact_rpt_dtl.js | 2 +- app/panels/prj_jobs/lab_plan_fot_dtl.js | 2 +- app/panels/prj_jobs/lab_plan_jobs_dtl.js | 2 +- app/panels/prj_jobs/prj_jobs.js | 138 +++++++++++++---------- 4 files changed, 82 insertions(+), 62 deletions(-) diff --git a/app/panels/prj_jobs/lab_fact_rpt_dtl.js b/app/panels/prj_jobs/lab_fact_rpt_dtl.js index 7716c3c..f443384 100644 --- a/app/panels/prj_jobs/lab_fact_rpt_dtl.js +++ b/app/panels/prj_jobs/lab_fact_rpt_dtl.js @@ -45,7 +45,7 @@ const LabFactRptDtl = ({ periodId, title, onHide }) => { const loadFactRptDtl = useCallback(async () => { if (factRptDtl.reload) { const data = await executeStored({ - stored: "PKG_P8PANELS_PROJECTS.JB_PERIODS_LIST_FACT_RPT", + stored: "PKG_P8PANELS_PROJECTS.JB_PERIODS_FACT_RPT_LIST", args: { NJB_PERIODS: periodId, CORDERS: { VALUE: object2Base64XML(factRptDtl.orders, { arrayNodeName: "orders" }), SDATA_TYPE: SERV_DATA_TYPE_CLOB }, diff --git a/app/panels/prj_jobs/lab_plan_fot_dtl.js b/app/panels/prj_jobs/lab_plan_fot_dtl.js index 37027eb..520360b 100644 --- a/app/panels/prj_jobs/lab_plan_fot_dtl.js +++ b/app/panels/prj_jobs/lab_plan_fot_dtl.js @@ -44,7 +44,7 @@ const LabPlanFOTDtl = ({ periodId, title, onHide }) => { const loadPlanFOTDtl = useCallback(async () => { if (planFOTDtl.reload) { const data = await executeStored({ - stored: "PKG_P8PANELS_PROJECTS.JB_PERIODS_LIST_PLAN_FOT", + stored: "PKG_P8PANELS_PROJECTS.JB_PERIODS_PLAN_FOT_LIST", args: { NJB_PERIODS: periodId, CORDERS: { VALUE: object2Base64XML(planFOTDtl.orders, { arrayNodeName: "orders" }), SDATA_TYPE: SERV_DATA_TYPE_CLOB }, diff --git a/app/panels/prj_jobs/lab_plan_jobs_dtl.js b/app/panels/prj_jobs/lab_plan_jobs_dtl.js index 1c77aa7..251dd68 100644 --- a/app/panels/prj_jobs/lab_plan_jobs_dtl.js +++ b/app/panels/prj_jobs/lab_plan_jobs_dtl.js @@ -49,7 +49,7 @@ const LabPlanJobsDtl = ({ periodId, title, onHide, onProjectClick }) => { const loadPlanJobsDtl = useCallback(async () => { if (planJobsDtl.reload) { const data = await executeStored({ - stored: "PKG_P8PANELS_PROJECTS.JB_PERIODS_LIST_PLAN_JOBS", + stored: "PKG_P8PANELS_PROJECTS.JB_PERIODS_PLAN_JOBS_LIST", args: { NJB_PERIODS: periodId, CORDERS: { VALUE: object2Base64XML(planJobsDtl.orders, { arrayNodeName: "orders" }), SDATA_TYPE: SERV_DATA_TYPE_CLOB }, diff --git a/app/panels/prj_jobs/prj_jobs.js b/app/panels/prj_jobs/prj_jobs.js index f414caa..307e578 100644 --- a/app/panels/prj_jobs/prj_jobs.js +++ b/app/panels/prj_jobs/prj_jobs.js @@ -66,22 +66,12 @@ const STYLES = { PERIODS_DRAWER: { width: "1200px", flexShrink: 0, [`& .MuiDrawer-paper`]: { width: "1200px", boxSizing: "border-box" } } }; -//Единицы измерения длительности -const DURATION_MEAS = { - 0: "День", - 1: "Неделя", - 2: "Декада", - 3: "Месяц", - 4: "Квартал", - 5: "Год" -}; - //------------------------------------ //Вспомогательные функции и компоненты //------------------------------------ //Диалог параметров инициализации панели -const InitDialog = ({ dateBegin, dateFact, onOk, onCancel }) => { +const InitPrmsDialog = ({ dateBegin, dateFact, onOk, onCancel }) => { //Собственное состояние - значения с-по const [values, setValues] = useState({ dateBegin: formatDateJSONDateOnly(dateBegin), dateFact: formatDateJSONDateOnly(dateFact) }); @@ -130,13 +120,72 @@ const InitDialog = ({ dateBegin, dateFact, onOk, onCancel }) => { }; //Контроль свойств - Диалог параметров инициализации панели -InitDialog.propTypes = { +InitPrmsDialog.propTypes = { dateBegin: PropTypes.instanceOf(Date).isRequired, dateFact: PropTypes.instanceOf(Date).isRequired, onOk: PropTypes.func, onCancel: PropTypes.func }; +//Область параметров инициализации панели +const InitPrmsArea = ({ dateBegin, dateFact, durationMeasCode, labMeasCode, onClick }) => { + return ( + + + + Начало: + {formatDateRF(dateBegin)} +
+ Факт на: + {formatDateRF(dateFact)} +
+ Длительность: + {durationMeasCode} +
+ Трудоёмкость: + {labMeasCode} + + } + /> +
+ + + +
+ ); +}; + +//Контроль свойств - Область параметров инициализации панели +InitPrmsArea.propTypes = { + dateBegin: PropTypes.instanceOf(Date), + dateFact: PropTypes.instanceOf(Date), + durationMeasCode: PropTypes.string, + labMeasCode: PropTypes.string, + onClick: PropTypes.func +}; + +//Область сохранения изменений +const SaveChangesArea = ({ onClick }) => { + return ( + + + + + + ); +}; + +//Контроль свойств - Область сохранения изменений +SaveChangesArea.propTypes = { + onClick: PropTypes.func +}; + //Список проектов const ProjectsList = ({ projects = [], selectedProject, onClick } = {}) => { //Подключение к контексту сообщений @@ -210,7 +259,9 @@ const PrjJobs = () => { dateBegin: null, dateFact: null, durationMeas: null, + durationMeasCode: null, labMeas: null, + labMeasCode: null, resourceStatus: null, ident: null, projects: [], @@ -270,12 +321,12 @@ const PrjJobs = () => { //Изменение работы в графике const modifyJob = useCallback( - async (job, dateFrom, dateTo, dateBegin, dateFact, durationMeas) => { + async (job, dateFrom, dateTo) => { let data = null; try { data = await executeStored({ stored: "PKG_P8PANELS_PROJECTS.JB_JOBS_MODIFY_PERIOD", - args: { NJB_JOBS: job, DDATE_FROM: dateFrom, DDATE_TO: dateTo, DBEGIN: dateBegin, DFACT: dateFact, NDURATION_MEAS: durationMeas } + args: { NJB_JOBS: job, DDATE_FROM: dateFrom, DDATE_TO: dateTo } }); if (data?.NRESOURCE_STATUS != -1) { setState(pv => ({ ...pv, resourceStatus: data.NRESOURCE_STATUS, needSave: true })); @@ -306,8 +357,6 @@ const PrjJobs = () => { args: { DBEGIN: state.dateBegin ? state.dateBegin : null, DFACT: state.dateFact ? state.dateFact : null, - NDURATION_MEAS: state.durationMeas, - SLAB_MEAS: state.labMeas, NIDENT: state.ident } }); @@ -318,12 +367,14 @@ const PrjJobs = () => { dateBegin: new Date(data.DBEGIN), dateFact: new Date(data.DFACT), durationMeas: data.NDURATION_MEAS, - labMeas: data.SLAB_MEAS, + durationMeasCode: data.SDURATION_MEAS, + labMeas: data.NLAB_MEAS, + labMeasCode: data.SLAB_MEAS, resourceStatus: data.NRESOURCE_STATUS, ident: data.NIDENT })); } - }, [state.init, state.dateBegin, state.dateFact, state.durationMeas, state.labMeas, state.ident, executeStored]); + }, [state.init, state.dateBegin, state.dateFact, state.ident, executeStored]); //Грузим список проектов при смене идентификатора процесса useEffect(() => { @@ -377,7 +428,7 @@ const PrjJobs = () => { //Обработка измненения сроков задачи в диаграмме Гантта const handleTaskDatesChange = ({ task, start, end, isMain }) => { - if (isMain) modifyJob(task.rn, new Date(start), new Date(end), new Date(state.dateBegin), new Date(state.dateFact), state.durationMeas); + if (isMain) modifyJob(task.rn, new Date(start), new Date(end)); }; //Отработка нажатия на отображения диалога параметров инициализации панели @@ -403,7 +454,7 @@ const PrjJobs = () => { return ( {state.showInitDialog ? ( - { > {state.projectsLoaded ? ( <> - - - - Начало: - {formatDateRF(state.dateBegin)} -
- Факт на: - {formatDateRF(state.dateFact)} -
- Длительность: - {DURATION_MEAS[state.durationMeas]} -
- Трудоёмкость: - {state.labMeas} - - } - /> -
- - - -
+ {state.needSave ? ( <> - - - - - + ) : null} From 224d16858302847398fe59900b871aed87c1af49 Mon Sep 17 00:00:00 2001 From: Mikhail Chechnev Date: Fri, 19 Apr 2024 21:46:31 +0300 Subject: [PATCH 11/76] =?UTF-8?q?=D0=91=D0=94:=20=D0=9F=D0=B0=D0=BD=D0=B5?= =?UTF-8?q?=D0=BB=D1=8C=20"=D0=A0=D0=B0=D0=B1=D0=BE=D1=82=D1=8B=20=D0=BF?= =?UTF-8?q?=D1=80=D0=BE=D0=B5=D0=BA=D1=82=D0=BE=D0=B2"=20-=20=D0=BF=D0=B5?= =?UTF-8?q?=D1=80=D0=B5=D1=81=D1=87=D0=B5=D1=82=20=D0=B4=D0=B5=D1=82=D0=B0?= =?UTF-8?q?=D0=BB=D0=B8=D0=B7=D0=B0=D1=86=D0=B8=D0=B9=20=D0=B2=20=D0=B5?= =?UTF-8?q?=D0=B4=D0=B8=D0=BD=D0=B8=D1=86=D1=8B=20=D0=B8=D0=B7=D0=BC=D0=B5?= =?UTF-8?q?=D1=80=D0=B5=D0=BD=D0=B8=D1=8F=20=D0=BF=D0=B0=D0=BD=D0=B5=D0=BB?= =?UTF-8?q?=D0=B8,=20=D0=BA=D0=B0=D0=BD=D0=B0=D0=BB=D0=B8=D0=B7=D0=B0?= =?UTF-8?q?=D1=86=D0=B8=D1=8F=20=D0=B0=D0=BB=D0=B3=D0=BE=D1=80=D0=B8=D1=82?= =?UTF-8?q?=D0=BC=D0=BE=D0=B2=20=D1=84=D0=BE=D1=80=D0=BC=D0=B8=D1=80=D0=BE?= =?UTF-8?q?=D0=B2=D0=B0=D0=BD=D0=B8=D1=8F=20=D0=B4=D0=B5=D1=82=D0=B0=D0=BB?= =?UTF-8?q?=D0=B8=D0=B7=D0=B0=D1=86=D0=B8=D0=B9,=20=D0=B1=D1=83=D1=84?= =?UTF-8?q?=D0=B5=D1=80=20=D0=BF=D0=B0=D1=80=D0=B0=D0=BC=D0=B5=D1=82=D1=80?= =?UTF-8?q?=D0=BE=D0=B2=20=D1=84=D0=BE=D1=80=D0=BC=D0=B8=D1=80=D0=BE=D0=B2?= =?UTF-8?q?=D0=B0=D0=BD=D0=B8=D1=8F=20=D0=BF=D0=B0=D0=BD=D0=B5=D0=BB=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- db/P8PNL_JB_PRMS.sql | 19 + db/PKG_P8PANELS_PROJECTS.pck | 1409 +++++++++++++++++++--------------- 2 files changed, 813 insertions(+), 615 deletions(-) create mode 100644 db/P8PNL_JB_PRMS.sql diff --git a/db/P8PNL_JB_PRMS.sql b/db/P8PNL_JB_PRMS.sql new file mode 100644 index 0000000..459c429 --- /dev/null +++ b/db/P8PNL_JB_PRMS.sql @@ -0,0 +1,19 @@ +/* + Парус 8 - Панели мониторинга - ПУП - Балансировка планов-графиков проектов + Параметры балансировки +*/ +create table P8PNL_JB_PRMS +( + RN number(17) not null, -- Рег. номер записи + IDENT number(17) not null, -- Идентификатор процесса + DATE_BEGIN date not null, -- Дата начала периода балансировки + DATE_FACT date not null, -- Факт по состоянию на + DURATION_MEAS number(1) not null, -- Единица измерения длительности (0 - день, 1 - неделя, 2 - декада, 3 - месяц, 4 - квартал, 5 - год) + DURATION_MEAS_CODE varchar2(40) not null, -- Единица измерения длительности (мнемокод) + LAB_MEAS number(17) not null, -- Единица измерения трудоёмкости + LAB_MEAS_CODE varchar2(40) not null, -- Единица измерения трудоёмкости (мнемокод) + constraint C_P8PNL_JB_PRMS_RN_PK primary key (RN), + constraint C_P8PNL_JB_PRMS_LAB_MEAS_FK foreign key (LAB_MEAS) references DICMUNTS (RN) on delete cascade, + constraint C_P8PNL_JB_PRMS_DUR_MEAS_VAL check (DURATION_MEAS in (0, 1, 2, 3, 4, 5)), + constraint C_P8PNL_JB_PRMS_UN unique (IDENT) +); diff --git a/db/PKG_P8PANELS_PROJECTS.pck b/db/PKG_P8PANELS_PROJECTS.pck index 4be75bf..850336a 100644 --- a/db/PKG_P8PANELS_PROJECTS.pck +++ b/db/PKG_P8PANELS_PROJECTS.pck @@ -365,9 +365,6 @@ create or replace package PKG_P8PANELS_PROJECTS as NJB_JOBS in number, -- Рег. номер записи балансируемой работы/этапа DDATE_FROM in date, -- Новая дата начала DDATE_TO in date, -- Новая дата окончания - DBEGIN in date, -- Дата начала периода мониторинга загрузки ресурсов - DFACT in date, -- Факт по состоянию на - NDURATION_MEAS in number, -- Единица измерения длительности (0 - день, 1 - неделя, 2 - декада, 3 - месяц, 4 - квартал, 5 - год) NRESOURCE_STATUS out number -- Состояние ресурсов (0 - без отклонений, 1 - есть отклонения, -1 - ничего не изменяли) ); @@ -381,18 +378,7 @@ create or replace package PKG_P8PANELS_PROJECTS as ); /* Получение списка для детализации трудоёмкости по ФОТ периода балансировки */ - procedure JB_PERIODS_LIST_PLAN_FOT - ( - NJB_PERIODS in number, -- Рег. номер записи периода в буфере балансировки - NPAGE_NUMBER in number, -- Номер страницы (игнорируется при NPAGE_SIZE=0) - NPAGE_SIZE in number, -- Количество записей на странице (0 - все) - CORDERS in clob, -- Сортировки - NINCLUDE_DEF in number, -- Признак включения описания колонок таблицы в ответ - COUT out clob -- Сериализованная таблица данных - ); - - /* Получение списка для детализации трудоёмкости периода балансировки по текущему состоянию графика */ - procedure JB_PERIODS_LIST_PLAN_JOBS + procedure JB_PERIODS_PLAN_FOT_LIST ( NJB_PERIODS in number, -- Рег. номер записи периода в буфере балансировки NPAGE_NUMBER in number, -- Номер страницы (игнорируется при NPAGE_SIZE=0) @@ -403,7 +389,18 @@ create or replace package PKG_P8PANELS_PROJECTS as ); /* Получение списка для детализации фактической трудоёмкости периода балансировки по "Планам и отчетам подразделений" */ - procedure JB_PERIODS_LIST_FACT_RPT + procedure JB_PERIODS_FACT_RPT_LIST + ( + NJB_PERIODS in number, -- Рег. номер записи периода в буфере балансировки + NPAGE_NUMBER in number, -- Номер страницы (игнорируется при NPAGE_SIZE=0) + NPAGE_SIZE in number, -- Количество записей на странице (0 - все) + CORDERS in clob, -- Сортировки + NINCLUDE_DEF in number, -- Признак включения описания колонок таблицы в ответ + COUT out clob -- Сериализованная таблица данных + ); + + /* Получение списка для детализации трудоёмкости периода балансировки по текущему состоянию графика */ + procedure JB_PERIODS_PLAN_JOBS_LIST ( NJB_PERIODS in number, -- Рег. номер записи периода в буфере балансировки NPAGE_NUMBER in number, -- Номер страницы (игнорируется при NPAGE_SIZE=0) @@ -417,7 +414,6 @@ create or replace package PKG_P8PANELS_PROJECTS as procedure JB_PERIODS_RECALC ( NIDENT in number, -- Идентификатор процесса - DBEGIN in date, -- Дата начала периода мониторинга загрузки ресурсов NINITIAL in number, -- Признак первоначального рассчёта (0 - пересчёт, 1 - первоначальный рассчёт) NRESOURCE_STATUS out number -- Состояние ресурсов (0 - без отклонений, 1 - есть отклонения) ); @@ -449,44 +445,30 @@ create or replace package PKG_P8PANELS_PROJECTS as /* Формирование исходных данных для балансировки планов-графиков работ */ procedure JB_INIT ( - DBEGIN in out date, -- Дата начала периода мониторинга загрузки ресурсов - DFACT in out date, -- Факт по состоянию на - NDURATION_MEAS in out number, -- Единица измерения длительности (0 - день, 1 - неделя, 2 - декада, 3 - месяц, 4 - квартал, 5 - год) - SLAB_MEAS in out varchar2, -- Единица измерения трудоёмкости - NIDENT in out number, -- Идентификатор процесса (null - сгенерировать новый, !null - удалить старые данные и пересоздать с указанным идентификатором) - NRESOURCE_STATUS out number -- Состояние ресурсов (0 - без отклонений, 1 - есть отклонения) + DBEGIN in out date, -- Дата начала периода мониторинга загрузки ресурсов + DFACT in out date, -- Факт по состоянию на + NDURATION_MEAS out number, -- Единица измерения длительности (0 - день, 1 - неделя, 2 - декада, 3 - месяц, 4 - квартал, 5 - год) + SDURATION_MEAS out varchar2, -- Единица измерения длительности (мнемокод) + NLAB_MEAS out number, -- Единица измерения трудоёмкости + SLAB_MEAS out varchar2, -- Единица измерения трудоёмкости (мнемокод) + NIDENT in out number, -- Идентификатор процесса (null - сгенерировать новый, !null - удалить старые данные и пересоздать с указанным идентификатором) + NRESOURCE_STATUS out number -- Состояние ресурсов (0 - без отклонений, 1 - есть отклонения) ); end PKG_P8PANELS_PROJECTS; / create or replace package body PKG_P8PANELS_PROJECTS as -/* -TODO: owner="root" created="25.10.2023" -text="Пересчёт единиц измерения в мониторе плана-графика" -*/ - -/* -TODO: owner="root" created="25.10.2023" -text="Буфер для хранения параметров балансировки и читать их оттуда для вызовов JB_JOBS_MODIFY_PERIOD, JB_JOBS_PERIODS_RECALC" -*/ - /* TODO: owner="root" created="25.10.2023" text="Права доступа в мониторе ресурвов при балансировке планов-графиков" */ -/* -TODO: owner="root" created="25.10.2023" -text="Вынести расчте плановой трудоёмкости по графику (и всех её причендалов) в отдельную функцию (и), чтобы можно было включить её в динамический запрос и вернуть сортировку по полям трудоёмкости в JB_PERIODS_LIST_PLAN_JOBS" -*/ - /* TODO: owner="root" created="25.10.2023" text="Проверить, что для расчётных полей дата-гридов отключена сортировка - иначе получается ошибка, т.к. поля нет в SQL-запросе" */ - /* Константы - предопределённые значения */ SYES constant PKG_STD.TSTRING := 'Да'; -- Да NDAYS_LEFT_LIMIT constant PKG_STD.TNUMBER := 30; -- Лимит отстатка дней для контроля сроков @@ -495,6 +477,7 @@ text="Проверить, что для расчётных полей дата- NGANTT_TASK_CAPTION_LEN constant PKG_STD.TNUMBER := 50; -- Предельная длина (знаков) метки задачи при отображении диаграммы Ганта NJB_DURATION_MEAS constant PKG_STD.TNUMBER := 0; -- Единица измерения длительности по умолчанию для интерфейса балансировки работ (0 - день, 1 - неделя, 2 - декада, 3 - месяц, 4 - квартал, 5 - год) SJB_LAB_MEAS constant PKG_STD.TSTRING := 'Ч/Ч'; -- Единица измерения трудоёмкости по умолчанию для интерфейса балансировки работ + SLAB_MEAS_HOURS constant PKG_STD.TSTRING := 'Ч/Ч'; -- Единица измерения трудоёмкости в человеко/часах /* Константы - дополнительные свойства */ SDP_SECON_RESP constant PKG_STD.TSTRING := 'ПУП.SECON_RESP'; -- Ответственный экономист проекта @@ -1066,7 +1049,7 @@ text="Проверить, что для расчётных полей дата- begin /* Читаем фильтры */ RF := PKG_P8PANELS_VISUAL.TFILTERS_FROM_XML(CFILTERS => CFILTERS); - /* Читем сортировки */ + /* Читаем сортировки */ RO := PKG_P8PANELS_VISUAL.TORDERS_FROM_XML(CORDERS => CORDERS); /* Преобразуем номер и размер страницы в номер строк с и по */ PKG_P8PANELS_VISUAL.UTL_ROWS_LIMITS_CALC(NPAGE_NUMBER => NPAGE_NUMBER, @@ -2595,7 +2578,7 @@ text="Проверить, что для расчётных полей дата- FIND_FPDARTCL_CODE(NFLAG_SMART => 1, NCOMPANY => NCOMPANY, SCODE => SFPDARTCL_REALIZ, NRN => NFPDARTCL_REALIZ); /* Читаем фильтры */ RF := PKG_P8PANELS_VISUAL.TFILTERS_FROM_XML(CFILTERS => CFILTERS); - /* Читем сортировки */ + /* Читаем сортировки */ RO := PKG_P8PANELS_VISUAL.TORDERS_FROM_XML(CORDERS => CORDERS); /* Преобразуем номер и размер страницы в номер строк с и по */ PKG_P8PANELS_VISUAL.UTL_ROWS_LIMITS_CALC(NPAGE_NUMBER => NPAGE_NUMBER, @@ -3905,7 +3888,7 @@ text="Проверить, что для расчётных полей дата- begin /* Читаем фильтры */ RF := PKG_P8PANELS_VISUAL.TFILTERS_FROM_XML(CFILTERS => CFILTERS); - /* Читем сортировки */ + /* Читаем сортировки */ RO := PKG_P8PANELS_VISUAL.TORDERS_FROM_XML(CORDERS => CORDERS); /* Преобразуем номер и размер страницы в номер строк с и по */ PKG_P8PANELS_VISUAL.UTL_ROWS_LIMITS_CALC(NPAGE_NUMBER => NPAGE_NUMBER, @@ -4359,6 +4342,85 @@ text="Проверить, что для расчётных полей дата- return LAST_DAY(DRES); end JB_GET_END; + /* Получение мнемокода единицы измерения длительности */ + function JB_GET_DURATION_MEAS_CODE + ( + NDURATION_MEAS in number -- Единица измерения длительности (0 - день, 1 - неделя, 2 - декада, 3 - месяц, 4 - квартал, 5 - год) + ) return varchar2 -- Мнемокод единицы измерения длительности + is + begin + /* Результат от указанного кода ЕИ длительности */ + case NDURATION_MEAS + /* Известные ЕИ */ + when 0 then + return 'День'; + when 1 then + return 'Неделя'; + when 2 then + return 'Декада'; + when 3 then + return 'Месяц'; + when 4 then + return 'Квартал'; + when 5 then + return 'Год'; + /* Неизвестная ЕИ */ + else + P_EXCEPTION(0, + 'Единица измерения длительности "%s" не поддерживается.', + COALESCE(TO_CHAR(NDURATION_MEAS), '<НЕ УКАЗАНА>')); + end case; + end JB_GET_DURATION_MEAS_CODE; + + /* Базовое добавление параметров балансировки */ + procedure JB_PRMS_BASE_INSERT + ( + NIDENT in number, -- Идентификатор процесса + DDATE_BEGIN in date, -- Дата начала периода балансировки + DDATE_FACT in date, -- Факт по состоянию на + NDURATION_MEAS in number, -- Единица измерения длительности (0 - день, 1 - неделя, 2 - декада, 3 - месяц, 4 - квартал, 5 - год) + SDURATION_MEAS_CODE in varchar2, -- Единица измерения длительности (мнемокод) + NLAB_MEAS in number, -- Единица измерения трудоёмкости + SLAB_MEAS_CODE in varchar2, -- Единица измерения трудоёмкости (мнемокод) + NRN out number -- Рег. номер записи + ) + is + begin + /* Сформируем рег. номер */ + NRN := GEN_ID(); + /* Добавим запись */ + insert into P8PNL_JB_PRMS + (RN, IDENT, DATE_BEGIN, DATE_FACT, DURATION_MEAS, DURATION_MEAS_CODE, LAB_MEAS, LAB_MEAS_CODE) + values + (NRN, NIDENT, DDATE_BEGIN, DDATE_FACT, NDURATION_MEAS, SDURATION_MEAS_CODE, NLAB_MEAS, SLAB_MEAS_CODE); + end JB_PRMS_BASE_INSERT; + + /* Очистка параметров балансировки */ + procedure JB_PRMS_CLEAN + ( + NIDENT in number -- Идентификатор процесса + ) + is + begin + /* Удаляем периоды балансировки */ + delete from P8PNL_JB_PRMS T where T.IDENT = NIDENT; + end JB_PRMS_CLEAN; + + /* Считывание записи параметров балансировки работ */ + function JB_PRMS_GET + ( + NIDENT in number -- Идентификатор процесса + ) return P8PNL_JB_PRMS%rowtype -- Запись параметров + is + RRES P8PNL_JB_PRMS%rowtype; -- Буфер для результата + begin + select P.* into RRES from P8PNL_JB_PRMS P where P.IDENT = NIDENT; + return RRES; + exception + when NO_DATA_FOUND then + PKG_MSG.RECORD_NOT_FOUND(NFLAG_SMART => 0, NDOCUMENT => NIDENT, SUNIT_TABLE => 'P8PNL_JB_PRMS'); + end JB_PRMS_GET; + /* Считывание записи проекта из буфера балансировки работ */ function JB_PRJCTS_GET ( @@ -4543,24 +4605,25 @@ text="Проверить, что для расчётных полей дата- (NJB_JOBS, NIDENT, NPRN, NHRN, NSOURCE, SNUMB, SNAME, DDATE_FROM, DDATE_TO, NDURATION, SEXECUTOR, NSTAGE, NEDITABLE); end JB_JOBS_BASE_INSERT; - /* Базовое изменением сроков работы в буфере балансировки */ + /* Базовое изменение сроков работы в буфере балансировки */ procedure JB_JOBS_BASE_MODIFY_PERIOD ( - NJB_JOBS in number, -- Рег. номер записи балансируемой работы/этапа - NDELTA in number, -- Изменение срока работы - NCHANGE_FLAG in number, -- Флаг изменения данных (1 - изменять дату начала, 2 - изменять дату окончания) - DFACT in date, -- Факт по состоянию на - NDURATION_MEAS in number -- Единица измерения длительности (0 - день, 1 - неделя, 2 - декада, 3 - месяц, 4 - квартал, 5 - год) + NJB_JOBS in number, -- Рег. номер записи балансируемой работы/этапа + NDELTA in number, -- Изменение срока работы + NCHANGE_FLAG in number -- Флаг изменения данных (1 - изменять дату начала, 2 - изменять дату окончания) ) is - RJ PROJECTJOB%rowtype; -- Запись работы в проекте - RS PROJECTSTAGE%rowtype; -- Запись этапа в проекте - RJB_J P8PNL_JB_JOBS%rowtype; -- Запись работы в буфере балансировки - DDATE_FROM_NEW PKG_STD.TLDATE; -- Новая дата начала работы - DDATE_TO_NEW PKG_STD.TLDATE; -- Новая дата окончания работы + RJ PROJECTJOB%rowtype; -- Запись работы в проекте + RS PROJECTSTAGE%rowtype; -- Запись этапа в проекте + RJB_J P8PNL_JB_JOBS%rowtype; -- Запись работы в буфере балансировки + RJB_PRMS P8PNL_JB_PRMS%rowtype; -- Параметры балансировки + DDATE_FROM_NEW PKG_STD.TLDATE; -- Новая дата начала работы + DDATE_TO_NEW PKG_STD.TLDATE; -- Новая дата окончания работы begin /* Считаем работу из буфера */ RJB_J := JB_JOBS_GET(NJB_JOBS => NJB_JOBS); + /* Считаем параметры балансировки */ + RJB_PRMS := JB_PRMS_GET(NIDENT => RJB_J.IDENT); /* Считаем работу проекта */ RJ := JOBS_GET(NRN => RJB_J.SOURCE); /* Проверки - работа должна быть привязана к этапу */ @@ -4589,27 +4652,27 @@ text="Проверить, что для расчётных полей дата- P_PROJECTJOB_GET_OFFSET_DATE(NCOMPANY => RJ.COMPANY, DSRC_DATE => DDATE_FROM_NEW, NOFFSET => RJ.DURATION_P, - NOFFSET_MEAS => NDURATION_MEAS, + NOFFSET_MEAS => RJB_PRMS.DURATION_MEAS, DDEST_DATE => DDATE_TO_NEW); else DDATE_TO_NEW := RJB_J.DATE_TO + NDELTA; P_PROJECTJOB_GET_OFFSET_DATE(NCOMPANY => RJ.COMPANY, DSRC_DATE => DDATE_TO_NEW, NOFFSET => -RJ.DURATION_P, - NOFFSET_MEAS => NDURATION_MEAS, + NOFFSET_MEAS => RJB_PRMS.DURATION_MEAS, DDEST_DATE => DDATE_FROM_NEW); end if; /* Проверки - дата начала работы не должна быть меньше даты факта */ - if ((NCHANGE_FLAG = 1) and (DDATE_FROM_NEW <= DFACT)) then + if ((NCHANGE_FLAG = 1) and (DDATE_FROM_NEW <= RJB_PRMS.DATE_FACT)) then P_EXCEPTION(0, 'Работа не может начинаться раньше даты "Факт по состоянию на" (%s).', - TO_CHAR(DFACT, 'DD.MM.YYYY')); + TO_CHAR(RJB_PRMS.DATE_FACT, 'DD.MM.YYYY')); end if; /* Проверки - дата окончания работы не должна быть меньше даты факта */ - if ((NCHANGE_FLAG = 2) and (DDATE_TO_NEW <= DFACT)) then + if ((NCHANGE_FLAG = 2) and (DDATE_TO_NEW <= RJB_PRMS.DATE_FACT)) then P_EXCEPTION(0, 'Работа не может заканчиваться раньше даты "Факт по состоянию на" (%s).', - TO_CHAR(DFACT, 'DD.MM.YYYY')); + TO_CHAR(RJB_PRMS.DATE_FACT, 'DD.MM.YYYY')); end if; /* Проверки - дата окончания работы не должна быть больше даты окончания этапа */ if ((NCHANGE_FLAG = 2) and (DDATE_TO_NEW >= RS.ENDPLAN)) then @@ -4632,11 +4695,7 @@ text="Проверить, что для расчётных полей дата- where PRV.IDENT = RJB_J.IDENT and PRV.JB_JOBS = RJB_J.RN)) loop - JB_JOBS_BASE_MODIFY_PERIOD(NJB_JOBS => C.RN, - NDELTA => NDELTA, - NCHANGE_FLAG => NCHANGE_FLAG, - DFACT => DFACT, - NDURATION_MEAS => NDURATION_MEAS); + JB_JOBS_BASE_MODIFY_PERIOD(NJB_JOBS => C.RN, NDELTA => NDELTA, NCHANGE_FLAG => NCHANGE_FLAG); end loop; end JB_JOBS_BASE_MODIFY_PERIOD; @@ -4646,9 +4705,6 @@ text="Проверить, что для расчётных полей дата- NJB_JOBS in number, -- Рег. номер записи балансируемой работы/этапа DDATE_FROM in date, -- Новая дата начала DDATE_TO in date, -- Новая дата окончания - DBEGIN in date, -- Дата начала периода мониторинга загрузки ресурсов - DFACT in date, -- Факт по состоянию на - NDURATION_MEAS in number, -- Единица измерения длительности (0 - день, 1 - неделя, 2 - декада, 3 - месяц, 4 - квартал, 5 - год) NRESOURCE_STATUS out number -- Состояние ресурсов (0 - без отклонений, 1 - есть отклонения, -1 - ничего не изменяли) ) is @@ -4691,13 +4747,11 @@ text="Проверить, что для расчётных полей дата- /* Изменяем работы */ JB_JOBS_BASE_MODIFY_PERIOD(NJB_JOBS => RJB_J.RN, NDELTA => NDELTA, - NCHANGE_FLAG => NCHANGE_FLAG, - DFACT => DFACT, - NDURATION_MEAS => NDURATION_MEAS); + NCHANGE_FLAG => NCHANGE_FLAG); /* Выставим признак изменений в проекте */ JB_PRJCTS_SET_CHANGED(NJB_PRJCTS => RJB_P.RN, NCHANGED => 1); /* Выполним пересчёт монитора */ - JB_PERIODS_RECALC(NIDENT => RJB_P.IDENT, DBEGIN => DBEGIN, NINITIAL => 0, NRESOURCE_STATUS => NRESOURCE_STATUS); + JB_PERIODS_RECALC(NIDENT => RJB_P.IDENT, NINITIAL => 0, NRESOURCE_STATUS => NRESOURCE_STATUS); else /* Ничего не изменили */ NRESOURCE_STATUS := -1; @@ -4949,19 +5003,22 @@ text="Проверить, что для расчётных полей дата- PKG_MSG.RECORD_NOT_FOUND(NFLAG_SMART => 0, NDOCUMENT => NJB_PERIODS, SUNIT_TABLE => 'P8PNL_JB_PERIODS'); end JB_PERIODS_GET; - /* Получение списка для детализации трудоёмкости по ФОТ периода балансировки */ - procedure JB_PERIODS_LIST_PLAN_FOT + /* Формирование и расчет списка для детализации трудоёмкости по ФОТ периода балансировки */ + procedure JB_PERIODS_PLAN_FOT_BUILD ( NJB_PERIODS in number, -- Рег. номер записи периода в буфере балансировки - NPAGE_NUMBER in number, -- Номер страницы (игнорируется при NPAGE_SIZE=0) - NPAGE_SIZE in number, -- Количество записей на странице (0 - все) - CORDERS in clob, -- Сортировки - NINCLUDE_DEF in number, -- Признак включения описания колонок таблицы в ответ - COUT out clob -- Сериализованная таблица данных + NMODE in number := 0, -- Режим (0 - список для клиента, 1 - только расчёты) + NPAGE_NUMBER in number := 0, -- Номер страницы (игнорируется при NPAGE_SIZE=0 и NMODE = 1) + NPAGE_SIZE in number := 0, -- Количество записей на странице (0 - все, игнорируется при NMODE = 1) + CORDERS in clob := null, -- Сортировки (игнорируется при NMODE = 1) + NINCLUDE_DEF in number := 1, -- Признак включения описания колонок таблицы в ответ (игнорируется при NMODE = 1) + NLAB_PLAN_FOT out number, -- Плановая трудоёмкость согласно ФОТ + COUT out clob -- Сериализованная таблица данных (заполняется только при NMODE = 0) ) is NCOMPANY PKG_STD.TREF := GET_SESSION_COMPANY(); -- Организация сеанса RPRD P8PNL_JB_PERIODS%rowtype; -- Запись детализируемого периода + RJB_PRMS P8PNL_JB_PRMS%rowtype; -- Параметры балансировки RO PKG_P8PANELS_VISUAL.TORDERS; -- Сортировки RDG PKG_P8PANELS_VISUAL.TDATA_GRID; -- Описание таблицы RDG_ROW PKG_P8PANELS_VISUAL.TROW; -- Строка таблицы @@ -4969,36 +5026,54 @@ text="Проверить, что для расчётных полей дата- ICURSOR integer; -- Курсор для исполнения запроса NROW_FROM PKG_STD.TREF; -- Номер строки с NROW_TO PKG_STD.TREF; -- Номер строки по + NPERS_LAB PKG_STD.TLNUMBER; -- Трудоёмкость текущего сотрудника + NLAB_MEAS_HOURS PKG_STD.TREF; -- Рег. номер ЕИ трудоёмкости для человеко/часов begin + /* Определим рег. номер ЕИ трудоёскости для человеко/часов */ + FIND_DICMUNTS_BY_MNEMO(NFLAG_SMART => 0, + NCOMPANY => NCOMPANY, + SMEAS_MNEMO => SLAB_MEAS_HOURS, + NRN => NLAB_MEAS_HOURS); + /* Инициализируем сумму плановой трудоёмкости по ФОТ */ + NLAB_PLAN_FOT := 0; /* Считаем детализируемую запись периода */ RPRD := JB_PERIODS_GET(NJB_PERIODS => NJB_PERIODS); - /* Читем сортировки */ - RO := PKG_P8PANELS_VISUAL.TORDERS_FROM_XML(CORDERS => CORDERS); - /* Преобразуем номер и размер страницы в номер строк с и по */ - PKG_P8PANELS_VISUAL.UTL_ROWS_LIMITS_CALC(NPAGE_NUMBER => NPAGE_NUMBER, - NPAGE_SIZE => NPAGE_SIZE, - NROW_FROM => NROW_FROM, - NROW_TO => NROW_TO); - /* Инициализируем таблицу данных */ - RDG := PKG_P8PANELS_VISUAL.TDATA_GRID_MAKE(); - /* Добавляем в таблицу описание колонок */ - PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG, - SNAME => 'NRN', - SCAPTION => 'Рег. номер исполнения должности', - SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_NUMB, - BVISIBLE => false); - PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG, - SNAME => 'SPERSON', - SCAPTION => 'Сотрудник', - SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_STR, - BORDER => true, - BFILTER => false); - PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG, - SNAME => 'NLAB_PLAN_FOT', - SCAPTION => 'Трудоёмкость', - SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_NUMB, - BORDER => false, - BFILTER => false); + /* Считаем параметры балансировки */ + RJB_PRMS := JB_PRMS_GET(NIDENT => RPRD.IDENT); + /* Если не формируем данные для клиента */ + if (NMODE = 1) then + /* Преобразуем номер и размер страницы в номер строк с и по - нам нужны все записи */ + PKG_P8PANELS_VISUAL.UTL_ROWS_LIMITS_CALC(NPAGE_NUMBER => 0, + NPAGE_SIZE => 0, + NROW_FROM => NROW_FROM, + NROW_TO => NROW_TO); + else + /* Будем строить курсор по параметрам - читаем сортировки */ + RO := PKG_P8PANELS_VISUAL.TORDERS_FROM_XML(CORDERS => CORDERS); + /* Преобразуем номер и размер страницы в номер строк с и по */ + PKG_P8PANELS_VISUAL.UTL_ROWS_LIMITS_CALC(NPAGE_NUMBER => NPAGE_NUMBER, + NPAGE_SIZE => NPAGE_SIZE, + NROW_FROM => NROW_FROM, + NROW_TO => NROW_TO); + /* Инициализируем таблицу данных */ + RDG := PKG_P8PANELS_VISUAL.TDATA_GRID_MAKE(); + /* Добавляем в таблицу описание колонок */ + PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG, + SNAME => 'NRN', + SCAPTION => 'Рег. номер исполнения должности', + SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_NUMB, + BVISIBLE => false); + PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG, + SNAME => 'SPERSON', + SCAPTION => 'Сотрудник', + SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_STR, + BORDER => true); + PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG, + SNAME => 'NLAB_PLAN_FOT', + SCAPTION => 'Трудоёмкость (' || RJB_PRMS.LAB_MEAS_CODE || ')', + SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_NUMB, + BORDER => true); + end if; /* Обходим данные */ begin /* Добавляем подсказку совместимости */ @@ -5054,19 +5129,31 @@ text="Проверить, что для расчётных полей дата- /* Обходим выбранные записи */ while (PKG_SQL_DML.FETCH_ROWS(ICURSOR => ICURSOR) > 0) loop - /* Добавляем колонки с данными */ - PKG_P8PANELS_VISUAL.TROW_ADD_CUR_COLN(RROW => RDG_ROW, - SNAME => 'NRN', - ICURSOR => ICURSOR, - NPOSITION => 1, - BCLEAR => true); - PKG_P8PANELS_VISUAL.TROW_ADD_CUR_COLS(RROW => RDG_ROW, SNAME => 'SPERSON', ICURSOR => ICURSOR, NPOSITION => 2); - PKG_P8PANELS_VISUAL.TROW_ADD_CUR_COLN(RROW => RDG_ROW, - SNAME => 'NLAB_PLAN_FOT', - ICURSOR => ICURSOR, - NPOSITION => 3); - /* Добавляем строку в таблицу */ - PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_ROW(RDATA_GRID => RDG, RROW => RDG_ROW); + /* Вычислим трудоёмкость по ФОТ (в ЕИ параметров инициализации панели переводим из ч/ч, т.к. мы считали из графика среднемесячное количество часов) */ + PKG_SQL_DML.COLUMN_VALUE_NUM(ICURSOR => ICURSOR, IPOSITION => 3, NVALUE => NPERS_LAB); + NPERS_LAB := F_DICMUNTS_BASE_RECALC_QUANT(NFLAG_SMART => 0, + NCOMPANY => NCOMPANY, + NUMEAS_FROM => NLAB_MEAS_HOURS, + NQUANT_FROM => NPERS_LAB, + NUMEAS_TO => RJB_PRMS.LAB_MEAS); + /* Накопим сумму в буфере результата */ + NLAB_PLAN_FOT := NLAB_PLAN_FOT + NPERS_LAB; + /* При формировании списка для клиента */ + if (NMODE = 0) then + /* Добавляем колонки с данными */ + PKG_P8PANELS_VISUAL.TROW_ADD_CUR_COLN(RROW => RDG_ROW, + SNAME => 'NRN', + ICURSOR => ICURSOR, + NPOSITION => 1, + BCLEAR => true); + PKG_P8PANELS_VISUAL.TROW_ADD_CUR_COLS(RROW => RDG_ROW, + SNAME => 'SPERSON', + ICURSOR => ICURSOR, + NPOSITION => 2); + PKG_P8PANELS_VISUAL.TROW_ADD_COL(RROW => RDG_ROW, SNAME => 'NLAB_PLAN_FOT', NVALUE => NPERS_LAB); + /* Добавляем строку в таблицу */ + PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_ROW(RDATA_GRID => RDG, RROW => RDG_ROW); + end if; end loop; /* Освобождаем курсор */ PKG_SQL_DML.CLOSE_CURSOR(ICURSOR => ICURSOR); @@ -5075,58 +5162,359 @@ text="Проверить, что для расчётных полей дата- PKG_SQL_DML.CLOSE_CURSOR(ICURSOR => ICURSOR); raise; end; - /* Сериализуем описание */ - COUT := PKG_P8PANELS_VISUAL.TDATA_GRID_TO_XML(RDATA_GRID => RDG, NINCLUDE_DEF => NINCLUDE_DEF); - end JB_PERIODS_LIST_PLAN_FOT; + /* При формировании списка для клиента */ + if (NMODE = 0) then + /* Сериализуем описание */ + COUT := PKG_P8PANELS_VISUAL.TDATA_GRID_TO_XML(RDATA_GRID => RDG, NINCLUDE_DEF => NINCLUDE_DEF); + end if; + end JB_PERIODS_PLAN_FOT_BUILD; - /* Получение плановой трудоёмкости по ФОТ для периода балансировки (в часах) */ - function JB_PERIODS_GET_PLAN_FOT + /* Получение списка для детализации трудоёмкости по ФОТ периода балансировки */ + procedure JB_PERIODS_PLAN_FOT_LIST ( - NCOMPANY in number, -- Рег. номер организации - DDATE_FROM in date, -- Начало - DDATE_TO in date, -- Окончание - NINS_DEPARTMENT in number, -- Рег. номер штатного подразделения - NFCMANPOWER in number -- Рег. номер трудового ресурса + NJB_PERIODS in number, -- Рег. номер записи периода в буфере балансировки + NPAGE_NUMBER in number, -- Номер страницы (игнорируется при NPAGE_SIZE=0) + NPAGE_SIZE in number, -- Количество записей на странице (0 - все) + CORDERS in clob, -- Сортировки + NINCLUDE_DEF in number, -- Признак включения описания колонок таблицы в ответ + COUT out clob -- Сериализованная таблица данных + ) + is + NTMP PKG_STD.TLNUMBER; -- Буфер для рассчетов + begin + /* Сформируем список детализации по ФОТ */ + JB_PERIODS_PLAN_FOT_BUILD(NJB_PERIODS => NJB_PERIODS, + NMODE => 0, + NPAGE_NUMBER => NPAGE_NUMBER, + NPAGE_SIZE => NPAGE_SIZE, + CORDERS => CORDERS, + NINCLUDE_DEF => NINCLUDE_DEF, + NLAB_PLAN_FOT => NTMP, + COUT => COUT); + end JB_PERIODS_PLAN_FOT_LIST; + + /* Расчет плановой трудоёмкости по ФОТ для периода балансировки (в часах) */ + function JB_PERIODS_PLAN_FOT_CALC + ( + NJB_PERIODS in number -- Рег. номер записи периода в буфере балансировки ) return number -- Плановая трудоёмкость по ФОТ (в часах) is NRES PKG_STD.TLNUMBER; -- Плановая трудоёмкость по ФОТ + CTMP clob; -- Буфер для вычислений begin - /* Обойдем подходящие исполнения и просуммируем среднемесячную численность часов */ - select sum(SH.AVG_HOURS) - into NRES - from CLNPSPFM FM, - CLNPSDEP PSD, - PRPROF PROF, - CLNPSPFMHS FMH, - SLSCHEDULE SH - where FM.COMPANY = NCOMPANY - and FM.DEPTRN = NINS_DEPARTMENT - and FM.PSDEPRN = PSD.RN - and PSD.PRPROF = PROF.RN - and PROF.RN in (select MP.PRPROF from FCMANPOWER MP where MP.RN = NFCMANPOWER) - and ((FM.BEGENG between DDATE_FROM and DDATE_TO) or (FM.ENDENG between DDATE_FROM and DDATE_TO) or - ((FM.BEGENG < DDATE_FROM) and (COALESCE(FM.ENDENG, DDATE_TO + 1) > DDATE_TO))) - and FM.RN = FMH.PRN - and ((FMH.DO_ACT_FROM between DDATE_FROM and DDATE_TO) or (FMH.DO_ACT_TO between DDATE_FROM and DDATE_TO) or - ((FMH.DO_ACT_FROM < DDATE_FROM) and (COALESCE(FMH.DO_ACT_TO, DDATE_TO + 1) > DDATE_TO))) - and FMH.SCHEDULE = SH.RN; + /* Рассчитаем плановую трудоемкость по ФОТ */ + JB_PERIODS_PLAN_FOT_BUILD(NJB_PERIODS => NJB_PERIODS, NMODE => 1, NLAB_PLAN_FOT => NRES, COUT => CTMP); /* Вернём собранный результат */ - return COALESCE(NRES, 0); - end JB_PERIODS_GET_PLAN_FOT; - - /* Получение списка для детализации трудоёмкости периода балансировки по текущему состоянию графика */ - procedure JB_PERIODS_LIST_PLAN_JOBS + return NRES; + end JB_PERIODS_PLAN_FOT_CALC; + + /* Формирование и расчёт списка для детализации фактической трудоёмкости периода балансировки по "Планам и отчетам подразделений" */ + procedure JB_PERIODS_FACT_RPT_BUILD ( NJB_PERIODS in number, -- Рег. номер записи периода в буфере балансировки - NPAGE_NUMBER in number, -- Номер страницы (игнорируется при NPAGE_SIZE=0) - NPAGE_SIZE in number, -- Количество записей на странице (0 - все) - CORDERS in clob, -- Сортировки - NINCLUDE_DEF in number, -- Признак включения описания колонок таблицы в ответ - COUT out clob -- Сериализованная таблица данных + NMODE in number := 0, -- Режим (0 - список для клиента, 1 - только расчёты) + NPAGE_NUMBER in number := 0, -- Номер страницы (игнорируется при NPAGE_SIZE=0 и NMODE = 1) + NPAGE_SIZE in number := 0, -- Количество записей на странице (0 - все, игнорируется при NMODE = 1) + CORDERS in clob := null, -- Сортировки (игнорируется при NMODE = 1) + NINCLUDE_DEF in number := 1, -- Признак включения описания колонок таблицы в ответ (игнорируется при NMODE = 1) + NLAB_FACT_RPT out number, -- Фактическая трудоёмкость согласно "Планам и отчетам подразделений" + COUT out clob -- Сериализованная таблица данных (заполняется только при NMODE = 0) + ) + is + NCOMPANY PKG_STD.TREF := GET_SESSION_COMPANY(); -- Организация сеанса + RPRD P8PNL_JB_PERIODS%rowtype; -- Запись детализируемого периода + RJB_PRMS P8PNL_JB_PRMS%rowtype; -- Параметры балансировки + RO PKG_P8PANELS_VISUAL.TORDERS; -- Сортировки + RDG PKG_P8PANELS_VISUAL.TDATA_GRID; -- Описание таблицы + RDG_ROW PKG_P8PANELS_VISUAL.TROW; -- Строка таблицы + CSQL clob; -- Буфер для запроса + ICURSOR integer; -- Курсор для исполнения запроса + NROW_FROM PKG_STD.TREF; -- Номер строки с + NROW_TO PKG_STD.TREF; -- Номер строки по + DJOB_BEG PKG_STD.TLDATE; -- Дата начала текущей работы согласно проекту + DJOB_END PKG_STD.TLDATE; -- Дата окончания текущей работы согласно проекту + NJOB_DUR PKG_STD.TLNUMBER; -- Длительнось текущей работы согласно проекту + NJOB_LAB PKG_STD.TLNUMBER; -- Трудоёмкость текущей работы согласно отчету + NJOB_LAB_MEAS PKG_STD.TREF; -- ЕИ трудоемкости текущей работы согласно проекту + begin + /* Инициализируем сумму фактической трудоёмкости согласно "Планам и отчетам подразделений" */ + NLAB_FACT_RPT := 0; + /* Считаем детализируемую запись периода */ + RPRD := JB_PERIODS_GET(NJB_PERIODS => NJB_PERIODS); + /* Считаем параметры балансировки */ + RJB_PRMS := JB_PRMS_GET(NIDENT => RPRD.IDENT); + /* Если не формируем данные для клиента */ + if (NMODE = 1) then + /* Преобразуем номер и размер страницы в номер строк с и по - нам нужны все записи */ + PKG_P8PANELS_VISUAL.UTL_ROWS_LIMITS_CALC(NPAGE_NUMBER => 0, + NPAGE_SIZE => 0, + NROW_FROM => NROW_FROM, + NROW_TO => NROW_TO); + else + /* Будем строить курсор по параметрам - читаем сортировки */ + RO := PKG_P8PANELS_VISUAL.TORDERS_FROM_XML(CORDERS => CORDERS); + /* Преобразуем номер и размер страницы в номер строк с и по */ + PKG_P8PANELS_VISUAL.UTL_ROWS_LIMITS_CALC(NPAGE_NUMBER => NPAGE_NUMBER, + NPAGE_SIZE => NPAGE_SIZE, + NROW_FROM => NROW_FROM, + NROW_TO => NROW_TO); + /* Инициализируем таблицу данных */ + RDG := PKG_P8PANELS_VISUAL.TDATA_GRID_MAKE(); + /* Добавляем в таблицу описание колонок */ + PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG, + SNAME => 'NRN', + SCAPTION => 'Рег. номер трудового ресурса отчета', + SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_NUMB, + BVISIBLE => false); + PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG, + SNAME => 'SPRJDEPLAN', + SCAPTION => 'Документ', + SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_STR, + BORDER => true); + PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG, + SNAME => 'SPRJ', + SCAPTION => 'Проект', + SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_STR, + BORDER => true); + PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG, + SNAME => 'SSTG_JOB', + SCAPTION => 'Этап-работа', + SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_STR, + BORDER => true); + PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG, + SNAME => 'SJOB_NAME', + SCAPTION => 'Наим. работы', + SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_STR, + BORDER => true); + PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG, + SNAME => 'NJOB_STATE', + SCAPTION => 'Сост. работы', + SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_NUMB, + BORDER => true); + PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG, + SNAME => 'DJOB_BEG', + SCAPTION => 'Начало работы', + SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_DATE, + BORDER => true); + PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG, + SNAME => 'DJOB_END', + SCAPTION => 'Окончание работы', + SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_DATE, + BORDER => true); + PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG, + SNAME => 'NJOB_DUR', + SCAPTION => 'Длительн. работы (' || RJB_PRMS.DURATION_MEAS_CODE || ')', + SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_NUMB); + PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG, + SNAME => 'SPERSON', + SCAPTION => 'Сотрудник', + SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_STR, + BORDER => true); + PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG, + SNAME => 'NLAB', + SCAPTION => 'Труд. (' || RJB_PRMS.LAB_MEAS_CODE || ')', + SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_NUMB, + BORDER => true); + end if; + /* Обходим данные */ + begin + /* Добавляем подсказку совместимости */ + CSQL := PKG_SQL_BUILD.COMPATIBLE(SSQL => CSQL); + /* Обходим закрытые планы и отчеты подразеделений, подходящие по параметрам */ + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => 'select *'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' from (select D.*,'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => PKG_SQL_BUILD.SQLROWNUM() || ' NROW'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' from (select MP.RN NRN,'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' DT.DOCCODE || '', '' || trim(T.DOCPREF) || ''/'' || trim(T.DOCNUMB) || '', '' || TO_CHAR(T.DOCDATE, ''dd.mm.yyyy'') SPRJDEPLAN,'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' P.CODE || ''-'' || P.NAME_USL SPRJ,'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' trim(COALESCE(PS.NUMB, ''Б/Э'')) || ''-'' || trim(PJ.NUMB) SSTG_JOB,'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' PJ.NAME SJOB_NAME,'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' PJ.STATE NJOB_STATE,'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' PJ.BEGPLAN DJOB_BEG,'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' PJ.ENDPLAN DJOB_END,'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' F_CLNPERSONS_FORMAT_CODE(FMP.COMPANY, FMP.CODE) SPERSON,'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' MP.LABOUR_F NLAB,'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' PJMP.UMEAS NLAB_MEAS'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' from PRJDEPLAN T,'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' DOCTYPES DT,'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' ENPERIOD PR,'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' PRJDEPLANMANPOW MP'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' left outer join CLNPSPFM FM on MP.CLNPSPFM = FM.RN'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' left outer join CLNPERSONS FMP on FM.PERSRN = FMP.RN,'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' PROJECT P,'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' PROJECTJOB PJ'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' left outer join PROJECTSTAGE PS on PJ.PROJECTSTAGE = PS.RN,'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' PROJECTJOBMANPOW PJMP'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' where T.COMPANY = :NCOMPANY'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' and T.STATE = 2'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' and T.PERIOD = PR.RN'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' and T.DOCTYPE = DT.RN'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' and T.SUBDIV = :NINS_DEPARTMENT'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' and ((PR.STARTDATE between :DDATE_FROM and :DDATE_TO) or (PR.ENDDATE between :DDATE_FROM and :DDATE_TO) or'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' ((PR.STARTDATE < :DDATE_FROM) and (PR.ENDDATE > :DDATE_TO)))'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' and MP.PRN in (select PJ.RN from PRJDEPPLANJOB PJ where PJ.PRN = T.RN)'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' and MP.PROJECTJOBMANPOW = PJMP.RN'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' and PJMP.FCMANPOWER = :NFCMANPOWER'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' and PJMP.PRN = PJ.RN'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' and PJ.PRN = P.RN %ORDER_BY%) D) F'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' where F.NROW between :NROW_FROM and :NROW_TO'); + /* Учтём сортировки */ + PKG_P8PANELS_VISUAL.TORDERS_SET_QUERY(RDATA_GRID => RDG, RORDERS => RO, SPATTERN => '%ORDER_BY%', CSQL => CSQL); + /* Разбираем его */ + ICURSOR := PKG_SQL_DML.OPEN_CURSOR(SWHAT => 'SELECT'); + PKG_SQL_DML.PARSE(ICURSOR => ICURSOR, SQUERY => CSQL); + /* Делаем подстановку параметров */ + PKG_SQL_DML.BIND_VARIABLE_NUM(ICURSOR => ICURSOR, SNAME => 'NCOMPANY', NVALUE => NCOMPANY); + PKG_SQL_DML.BIND_VARIABLE_NUM(ICURSOR => ICURSOR, SNAME => 'NINS_DEPARTMENT', NVALUE => RPRD.INS_DEPARTMENT); + PKG_SQL_DML.BIND_VARIABLE_NUM(ICURSOR => ICURSOR, SNAME => 'NFCMANPOWER', NVALUE => RPRD.FCMANPOWER); + PKG_SQL_DML.BIND_VARIABLE_DATE(ICURSOR => ICURSOR, SNAME => 'DDATE_FROM', DVALUE => RPRD.DATE_FROM); + PKG_SQL_DML.BIND_VARIABLE_DATE(ICURSOR => ICURSOR, SNAME => 'DDATE_TO', DVALUE => RPRD.DATE_TO); + PKG_SQL_DML.BIND_VARIABLE_NUM(ICURSOR => ICURSOR, SNAME => 'NROW_FROM', NVALUE => NROW_FROM); + PKG_SQL_DML.BIND_VARIABLE_NUM(ICURSOR => ICURSOR, SNAME => 'NROW_TO', NVALUE => NROW_TO); + /* Описываем структуру записи курсора */ + PKG_SQL_DML.DEFINE_COLUMN_NUM(ICURSOR => ICURSOR, IPOSITION => 1); + PKG_SQL_DML.DEFINE_COLUMN_STR(ICURSOR => ICURSOR, IPOSITION => 2); + PKG_SQL_DML.DEFINE_COLUMN_STR(ICURSOR => ICURSOR, IPOSITION => 3); + PKG_SQL_DML.DEFINE_COLUMN_STR(ICURSOR => ICURSOR, IPOSITION => 4); + PKG_SQL_DML.DEFINE_COLUMN_STR(ICURSOR => ICURSOR, IPOSITION => 5); + PKG_SQL_DML.DEFINE_COLUMN_NUM(ICURSOR => ICURSOR, IPOSITION => 6); + PKG_SQL_DML.DEFINE_COLUMN_DATE(ICURSOR => ICURSOR, IPOSITION => 7); + PKG_SQL_DML.DEFINE_COLUMN_DATE(ICURSOR => ICURSOR, IPOSITION => 8); + PKG_SQL_DML.DEFINE_COLUMN_STR(ICURSOR => ICURSOR, IPOSITION => 9); + PKG_SQL_DML.DEFINE_COLUMN_NUM(ICURSOR => ICURSOR, IPOSITION => 10); + PKG_SQL_DML.DEFINE_COLUMN_NUM(ICURSOR => ICURSOR, IPOSITION => 11); + PKG_SQL_DML.DEFINE_COLUMN_NUM(ICURSOR => ICURSOR, IPOSITION => 12); + /* Делаем выборку */ + if (PKG_SQL_DML.EXECUTE(ICURSOR => ICURSOR) = 0) then + null; + end if; + /* Обходим выбранные записи */ + while (PKG_SQL_DML.FETCH_ROWS(ICURSOR => ICURSOR) > 0) + loop + /* Вычислим длительость работы в ЕИ панели */ + PKG_SQL_DML.COLUMN_VALUE_DATE(ICURSOR => ICURSOR, IPOSITION => 7, DVALUE => DJOB_BEG); + PKG_SQL_DML.COLUMN_VALUE_DATE(ICURSOR => ICURSOR, IPOSITION => 8, DVALUE => DJOB_END); + P_PROJECTJOB_GET_DURATION(NCOMPANY => NCOMPANY, + DBEG_DATE => DJOB_BEG, + DEND_DATE => DJOB_END, + NDURATION_MEAS => RJB_PRMS.DURATION_MEAS, + NDURATION => NJOB_DUR); + /* Вычислим трудоёмкость работ в ЕИ панели */ + PKG_SQL_DML.COLUMN_VALUE_NUM(ICURSOR => ICURSOR, IPOSITION => 10, NVALUE => NJOB_LAB); + PKG_SQL_DML.COLUMN_VALUE_NUM(ICURSOR => ICURSOR, IPOSITION => 11, NVALUE => NJOB_LAB_MEAS); + NJOB_LAB := F_DICMUNTS_BASE_RECALC_QUANT(NFLAG_SMART => 0, + NCOMPANY => NCOMPANY, + NUMEAS_FROM => NJOB_LAB_MEAS, + NQUANT_FROM => NJOB_LAB, + NUMEAS_TO => RJB_PRMS.LAB_MEAS); + /* Накопим сумму в буфере результата */ + NLAB_FACT_RPT := NLAB_FACT_RPT + NJOB_LAB; + /* При формировании списка для клиента */ + if (NMODE = 0) then + /* Добавляем колонки с данными */ + PKG_P8PANELS_VISUAL.TROW_ADD_CUR_COLN(RROW => RDG_ROW, + SNAME => 'NRN', + ICURSOR => ICURSOR, + NPOSITION => 1, + BCLEAR => true); + PKG_P8PANELS_VISUAL.TROW_ADD_CUR_COLS(RROW => RDG_ROW, + SNAME => 'SPRJDEPLAN', + ICURSOR => ICURSOR, + NPOSITION => 2); + PKG_P8PANELS_VISUAL.TROW_ADD_CUR_COLS(RROW => RDG_ROW, SNAME => 'SPRJ', ICURSOR => ICURSOR, NPOSITION => 3); + PKG_P8PANELS_VISUAL.TROW_ADD_CUR_COLS(RROW => RDG_ROW, + SNAME => 'SSTG_JOB', + ICURSOR => ICURSOR, + NPOSITION => 4); + PKG_P8PANELS_VISUAL.TROW_ADD_CUR_COLS(RROW => RDG_ROW, + SNAME => 'SJOB_NAME', + ICURSOR => ICURSOR, + NPOSITION => 5); + PKG_P8PANELS_VISUAL.TROW_ADD_CUR_COLN(RROW => RDG_ROW, + SNAME => 'NJOB_STATE', + ICURSOR => ICURSOR, + NPOSITION => 6); + PKG_P8PANELS_VISUAL.TROW_ADD_COL(RROW => RDG_ROW, SNAME => 'DJOB_BEG', DVALUE => DJOB_BEG); + PKG_P8PANELS_VISUAL.TROW_ADD_COL(RROW => RDG_ROW, SNAME => 'DJOB_END', DVALUE => DJOB_END); + PKG_P8PANELS_VISUAL.TROW_ADD_COL(RROW => RDG_ROW, SNAME => 'NJOB_DUR', NVALUE => NJOB_DUR); + PKG_P8PANELS_VISUAL.TROW_ADD_CUR_COLS(RROW => RDG_ROW, + SNAME => 'SPERSON', + ICURSOR => ICURSOR, + NPOSITION => 9); + PKG_P8PANELS_VISUAL.TROW_ADD_COL(RROW => RDG_ROW, SNAME => 'NLAB', NVALUE => NJOB_LAB); + /* Добавляем строку в таблицу */ + PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_ROW(RDATA_GRID => RDG, RROW => RDG_ROW); + end if; + end loop; + /* Освобождаем курсор */ + PKG_SQL_DML.CLOSE_CURSOR(ICURSOR => ICURSOR); + exception + when others then + PKG_SQL_DML.CLOSE_CURSOR(ICURSOR => ICURSOR); + raise; + end; + /* При формировании списка для клиента */ + if (NMODE = 0) then + /* Сериализуем описание */ + COUT := PKG_P8PANELS_VISUAL.TDATA_GRID_TO_XML(RDATA_GRID => RDG, NINCLUDE_DEF => NINCLUDE_DEF); + end if; + end JB_PERIODS_FACT_RPT_BUILD; + + /* Получение списка для детализации фактической трудоёмкости периода балансировки по "Планам и отчетам подразделений" */ + procedure JB_PERIODS_FACT_RPT_LIST + ( + NJB_PERIODS in number, -- Рег. номер записи периода в буфере балансировки + NPAGE_NUMBER in number, -- Номер страницы (игнорируется при NPAGE_SIZE=0) + NPAGE_SIZE in number, -- Количество записей на странице (0 - все) + CORDERS in clob, -- Сортировки + NINCLUDE_DEF in number, -- Признак включения описания колонок таблицы в ответ + COUT out clob -- Сериализованная таблица данных + ) + is + NTMP PKG_STD.TLNUMBER; -- Буфер для рассчетов + begin + /* Сформируем список детализации по "Планам и отчетам подразделений" */ + JB_PERIODS_FACT_RPT_BUILD(NJB_PERIODS => NJB_PERIODS, + NMODE => 0, + NPAGE_NUMBER => NPAGE_NUMBER, + NPAGE_SIZE => NPAGE_SIZE, + CORDERS => CORDERS, + NINCLUDE_DEF => NINCLUDE_DEF, + NLAB_FACT_RPT => NTMP, + COUT => COUT); + end JB_PERIODS_FACT_RPT_LIST; + + /* Расчёт фактической трудоёмкости трудового ресурса по "Планам и отчетам подразделеий" для периода балансировки */ + function JB_PERIODS_FACT_RPT_CALC + ( + NJB_PERIODS in number -- Рег. номер записи периода в буфере балансировки + ) return number -- Фактическая трудоёмкость трудового ресурса по "Планам и отчетам подразделеий" + is + NRES PKG_STD.TLNUMBER; -- Буфер для результата + CTMP clob; -- Буфер для вычислений + begin + /* Рассчитаем фактическую трудоемкость по "Планам и отчетам подразделений" */ + JB_PERIODS_FACT_RPT_BUILD(NJB_PERIODS => NJB_PERIODS, NMODE => 1, NLAB_FACT_RPT => NRES, COUT => CTMP); + /* Вернём собранный результат */ + return NRES; + end JB_PERIODS_FACT_RPT_CALC; + + /* Формирование и расчёт списка для детализации трудоёмкости периода балансировки по текущему состоянию графика */ + procedure JB_PERIODS_PLAN_JOBS_BUILD + ( + NJB_PERIODS in number, -- Рег. номер записи периода в буфере балансировки + NMODE in number := 0, -- Режим (0 - список для клиента, 1 - только расчёты) + NPAGE_NUMBER in number := 0, -- Номер страницы (игнорируется при NPAGE_SIZE=0 и NMODE = 1) + NPAGE_SIZE in number := 0, -- Количество записей на странице (0 - все, игнорируется при NMODE = 1) + CORDERS in clob := null, -- Сортировки (игнорируется при NMODE = 1) + NINCLUDE_DEF in number := 1, -- Признак включения описания колонок таблицы в ответ (игнорируется при NMODE = 1) + NLAB_PLAN_JOB out number, -- Плановая трудоёмкость согласно графика + COUT out clob -- Сериализованная таблица данных (заполняется только при NMODE = 0) ) is NCOMPANY PKG_STD.TREF := GET_SESSION_COMPANY(); -- Организация сеанса RPRD P8PNL_JB_PERIODS%rowtype; -- Запись детализируемого периода + RJB_PRMS P8PNL_JB_PRMS%rowtype; -- Параметры балансировки RO PKG_P8PANELS_VISUAL.TORDERS; -- Сортировки RDG PKG_P8PANELS_VISUAL.TDATA_GRID; -- Описание таблицы RDG_ROW PKG_P8PANELS_VISUAL.TROW; -- Строка таблицы @@ -5139,97 +5527,97 @@ text="Проверить, что для расчётных полей дата- DJOB_BEG PKG_STD.TLDATE; -- Дата начала текущей работы согласно плану-груфику DJOB_END PKG_STD.TLDATE; -- Дата окончания текущей работы согласно плану-груфику NJOB_DUR PKG_STD.TLNUMBER; -- Длительнось текущей работы согласно плану-груфику + NMP_LAB_MEAS PKG_STD.TREF; -- ЕИ трудоёмкости трудового ресурса согласно проекта NMP_LAB PKG_STD.TLNUMBER; -- Трудоёмкость трудового ресурса в текущей работе согласно проекта NMP_LAB_ONE PKG_STD.TLNUMBER; -- Трудоёмкость (за единицу длительности) трудового ресурса в текущей работе согласно проекта NMP_LAB_PLAN PKG_STD.TLNUMBER; -- Трудоёмкость трудового ресурса в текущей работе согласно плана-графика begin + /* Инициализируем сумму плановой трудоёмкости согласно графика */ + NLAB_PLAN_JOB := 0; /* Считаем детализируемую запись периода */ RPRD := JB_PERIODS_GET(NJB_PERIODS => NJB_PERIODS); - /* Читем сортировки */ - RO := PKG_P8PANELS_VISUAL.TORDERS_FROM_XML(CORDERS => CORDERS); - /* Преобразуем номер и размер страницы в номер строк с и по */ - PKG_P8PANELS_VISUAL.UTL_ROWS_LIMITS_CALC(NPAGE_NUMBER => NPAGE_NUMBER, - NPAGE_SIZE => NPAGE_SIZE, - NROW_FROM => NROW_FROM, - NROW_TO => NROW_TO); - /* Инициализируем таблицу данных */ - RDG := PKG_P8PANELS_VISUAL.TDATA_GRID_MAKE(); - /* Добавляем в таблицу описание колонок */ - PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG, - SNAME => 'NRN', - SCAPTION => 'Рег. номер работы в буфере балансировки', - SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_NUMB, - BVISIBLE => false); - PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG, - SNAME => 'NPROJECT', - SCAPTION => 'Рег. номер проекта', - SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_NUMB, - BVISIBLE => false); - PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG, - SNAME => 'NJB_PRJCTS', - SCAPTION => 'Рег. номер буфера балансировки проекта', - SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_NUMB, - BVISIBLE => false); - PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG, - SNAME => 'SPRJ', - SCAPTION => 'Проект', - SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_STR, - BORDER => true, - BFILTER => false); - PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG, - SNAME => 'SSTG_JOB', - SCAPTION => 'Этап-работа', - SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_STR, - BORDER => true, - BFILTER => false); - PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG, - SNAME => 'SJOB_NAME', - SCAPTION => 'Наим. работы', - SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_STR, - BORDER => true, - BFILTER => false); - PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG, - SNAME => 'NJOB_STATE', - SCAPTION => 'Сост. работы', - SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_NUMB, - BORDER => true, - BFILTER => false); - PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG, - SNAME => 'DJOB_BEG', - SCAPTION => 'Начало работы', - SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_DATE, - BORDER => true, - BFILTER => false); - PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG, - SNAME => 'DJOB_END', - SCAPTION => 'Окончание работы', - SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_DATE, - BORDER => true, - BFILTER => false); - PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG, - SNAME => 'NJOB_DUR', - SCAPTION => 'Длительн. работы', - SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_NUMB, - BORDER => false, - BFILTER => false); - PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG, - SNAME => 'NMP_LAB', - SCAPTION => 'Труд.', - SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_NUMB, - BORDER => false, - BFILTER => false); - PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG, - SNAME => 'NMP_LAB_ONE', - SCAPTION => 'Труд. (в ед. длит.)', - SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_NUMB, - BORDER => false, - BFILTER => false); - PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG, - SNAME => 'NMP_LAB_PLAN', - SCAPTION => 'Труд. (план, график)', - SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_NUMB, - BORDER => false, - BFILTER => false); + /* Считаем параметры балансировки */ + RJB_PRMS := JB_PRMS_GET(NIDENT => RPRD.IDENT); + /* Если не формируем данные для клиента */ + if (NMODE = 1) then + /* Преобразуем номер и размер страницы в номер строк с и по - нам нужны все записи */ + PKG_P8PANELS_VISUAL.UTL_ROWS_LIMITS_CALC(NPAGE_NUMBER => 0, + NPAGE_SIZE => 0, + NROW_FROM => NROW_FROM, + NROW_TO => NROW_TO); + else + /* Будем строить курсор по параметрам - читаем сортировки */ + RO := PKG_P8PANELS_VISUAL.TORDERS_FROM_XML(CORDERS => CORDERS); + /* Преобразуем номер и размер страницы в номер строк с и по */ + PKG_P8PANELS_VISUAL.UTL_ROWS_LIMITS_CALC(NPAGE_NUMBER => NPAGE_NUMBER, + NPAGE_SIZE => NPAGE_SIZE, + NROW_FROM => NROW_FROM, + NROW_TO => NROW_TO); + /* Инициализируем таблицу данных */ + RDG := PKG_P8PANELS_VISUAL.TDATA_GRID_MAKE(); + /* Добавляем в таблицу описание колонок */ + PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG, + SNAME => 'NRN', + SCAPTION => 'Рег. номер работы в буфере балансировки', + SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_NUMB, + BVISIBLE => false); + PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG, + SNAME => 'NPROJECT', + SCAPTION => 'Рег. номер проекта', + SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_NUMB, + BVISIBLE => false); + PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG, + SNAME => 'NJB_PRJCTS', + SCAPTION => 'Рег. номер буфера балансировки проекта', + SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_NUMB, + BVISIBLE => false); + PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG, + SNAME => 'SPRJ', + SCAPTION => 'Проект', + SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_STR, + BORDER => true); + PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG, + SNAME => 'SSTG_JOB', + SCAPTION => 'Этап-работа', + SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_STR, + BORDER => true); + PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG, + SNAME => 'SJOB_NAME', + SCAPTION => 'Наим. работы', + SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_STR, + BORDER => true); + PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG, + SNAME => 'NJOB_STATE', + SCAPTION => 'Сост. работы', + SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_NUMB, + BORDER => true); + PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG, + SNAME => 'DJOB_BEG', + SCAPTION => 'Начало работы', + SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_DATE, + BORDER => true); + PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG, + SNAME => 'DJOB_END', + SCAPTION => 'Окончание работы', + SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_DATE, + BORDER => true); + PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG, + SNAME => 'NJOB_DUR', + SCAPTION => 'Длительн. работы (' || RJB_PRMS.DURATION_MEAS_CODE || ')', + SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_NUMB); + PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG, + SNAME => 'NMP_LAB', + SCAPTION => 'Труд. (' || RJB_PRMS.LAB_MEAS_CODE || ')', + SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_NUMB); + PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG, + SNAME => 'NMP_LAB_ONE', + SCAPTION => 'Труд. (в ед. длит., ' || RJB_PRMS.LAB_MEAS_CODE || ')', + SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_NUMB); + PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG, + SNAME => 'NMP_LAB_PLAN', + SCAPTION => 'Труд. (план, график, ' || RJB_PRMS.LAB_MEAS_CODE || ')', + SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_NUMB); + end if; /* Обходим данные */ begin /* Добавляем подсказку совместимости */ @@ -5238,7 +5626,7 @@ text="Проверить, что для расчётных полей дата- PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => 'select *'); PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' from (select D.*,'); PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => PKG_SQL_BUILD.SQLROWNUM() || ' NROW'); - PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' from (select JB.RN NRN,'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' from (select JB.RN NRN,'); PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' P.RN NPROJECT,'); PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' JBP.RN NJB_PRJCTS,'); PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' P.CODE || ''-'' || P.NAME_USL SPRJ,'); @@ -5247,7 +5635,8 @@ text="Проверить, что для расчётных полей дата- PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' PJ.STATE NJOB_STATE,'); PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' JB.DATE_FROM DJOB_BEG,'); PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' JB.DATE_TO DJOB_END,'); - PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' PJMP.LABOUR_P NLABOUR_P'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' PJMP.LABOUR_P NLABOUR_P,'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' PJMP.UMEAS NLABOUR_P_UMEAS'); PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' from P8PNL_JB_JOBS JB,'); PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' P8PNL_JB_PRJCTS JBP,'); PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' PROJECTJOB PJ'); @@ -5292,6 +5681,7 @@ text="Проверить, что для расчётных полей дата- PKG_SQL_DML.DEFINE_COLUMN_DATE(ICURSOR => ICURSOR, IPOSITION => 9); PKG_SQL_DML.DEFINE_COLUMN_NUM(ICURSOR => ICURSOR, IPOSITION => 10); PKG_SQL_DML.DEFINE_COLUMN_NUM(ICURSOR => ICURSOR, IPOSITION => 11); + PKG_SQL_DML.DEFINE_COLUMN_NUM(ICURSOR => ICURSOR, IPOSITION => 12); /* Делаем выборку */ if (PKG_SQL_DML.EXECUTE(ICURSOR => ICURSOR) = 0) then null; @@ -5299,16 +5689,22 @@ text="Проверить, что для расчётных полей дата- /* Обходим выбранные записи */ while (PKG_SQL_DML.FETCH_ROWS(ICURSOR => ICURSOR) > 0) loop - /* Вычислим трудоёмкость в датлизируемом периоде по буферу балансировки */ + /* Вычислим длительность и трудоёмкость в датлизируемом периоде по буферу балансировки (в ЕИ панели) */ PKG_SQL_DML.COLUMN_VALUE_DATE(ICURSOR => ICURSOR, IPOSITION => 8, DVALUE => DJOB_BEG); PKG_SQL_DML.COLUMN_VALUE_DATE(ICURSOR => ICURSOR, IPOSITION => 9, DVALUE => DJOB_END); PKG_SQL_DML.COLUMN_VALUE_NUM(ICURSOR => ICURSOR, IPOSITION => 10, NVALUE => NMP_LAB); + PKG_SQL_DML.COLUMN_VALUE_NUM(ICURSOR => ICURSOR, IPOSITION => 11, NVALUE => NMP_LAB_MEAS); P_PROJECTJOB_GET_DURATION(NCOMPANY => NCOMPANY, DBEG_DATE => DJOB_BEG, DEND_DATE => DJOB_END, - NDURATION_MEAS => NJB_DURATION_MEAS, + NDURATION_MEAS => RJB_PRMS.DURATION_MEAS, NDURATION => NJOB_DUR); - DBEG := RPRD.DATE_FROM; + NMP_LAB := F_DICMUNTS_BASE_RECALC_QUANT(NFLAG_SMART => 0, + NCOMPANY => NCOMPANY, + NUMEAS_FROM => NMP_LAB_MEAS, + NQUANT_FROM => NMP_LAB, + NUMEAS_TO => RJB_PRMS.LAB_MEAS); + DBEG := RPRD.DATE_FROM; if (DJOB_BEG > RPRD.DATE_FROM) then DBEG := DJOB_BEG; end if; @@ -5320,37 +5716,48 @@ text="Проверить, что для расчётных полей дата- NMP_LAB_ONE := ROUND(NMP_LAB / (DJOB_END - DJOB_BEG), 3); else NMP_LAB_ONE := ROUND(NMP_LAB, 3); - end if; + end if; NMP_LAB_PLAN := ROUND((DEND - DBEG) * NMP_LAB_ONE, 3); - /* Добавляем колонки с данными */ - PKG_P8PANELS_VISUAL.TROW_ADD_CUR_COLN(RROW => RDG_ROW, - SNAME => 'NRN', - ICURSOR => ICURSOR, - NPOSITION => 1, - BCLEAR => true); - PKG_P8PANELS_VISUAL.TROW_ADD_CUR_COLN(RROW => RDG_ROW, SNAME => 'NPROJECT', ICURSOR => ICURSOR, NPOSITION => 2); - PKG_P8PANELS_VISUAL.TROW_ADD_CUR_COLN(RROW => RDG_ROW, - SNAME => 'NJB_PRJCTS', - ICURSOR => ICURSOR, - NPOSITION => 3); - PKG_P8PANELS_VISUAL.TROW_ADD_CUR_COLS(RROW => RDG_ROW, SNAME => 'SPRJ', ICURSOR => ICURSOR, NPOSITION => 4); - PKG_P8PANELS_VISUAL.TROW_ADD_CUR_COLS(RROW => RDG_ROW, SNAME => 'SSTG_JOB', ICURSOR => ICURSOR, NPOSITION => 5); - PKG_P8PANELS_VISUAL.TROW_ADD_CUR_COLS(RROW => RDG_ROW, - SNAME => 'SJOB_NAME', - ICURSOR => ICURSOR, - NPOSITION => 6); - PKG_P8PANELS_VISUAL.TROW_ADD_CUR_COLN(RROW => RDG_ROW, - SNAME => 'NJOB_STATE', - ICURSOR => ICURSOR, - NPOSITION => 7); - PKG_P8PANELS_VISUAL.TROW_ADD_COL(RROW => RDG_ROW, SNAME => 'DJOB_BEG', DVALUE => DJOB_BEG); - PKG_P8PANELS_VISUAL.TROW_ADD_COL(RROW => RDG_ROW, SNAME => 'DJOB_END', DVALUE => DJOB_END); - PKG_P8PANELS_VISUAL.TROW_ADD_COL(RROW => RDG_ROW, SNAME => 'NJOB_DUR', NVALUE => NJOB_DUR); - PKG_P8PANELS_VISUAL.TROW_ADD_COL(RROW => RDG_ROW, SNAME => 'NMP_LAB', NVALUE => NMP_LAB); - PKG_P8PANELS_VISUAL.TROW_ADD_COL(RROW => RDG_ROW, SNAME => 'NMP_LAB_ONE', NVALUE => NMP_LAB_ONE); - PKG_P8PANELS_VISUAL.TROW_ADD_COL(RROW => RDG_ROW, SNAME => 'NMP_LAB_PLAN', NVALUE => NMP_LAB_PLAN); - /* Добавляем строку в таблицу */ - PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_ROW(RDATA_GRID => RDG, RROW => RDG_ROW); + /* Накопим сумму в буфере результата */ + NLAB_PLAN_JOB := NLAB_PLAN_JOB + NMP_LAB_PLAN; + /* При формировании списка для клиента */ + if (NMODE = 0) then + /* Добавляем колонки с данными */ + PKG_P8PANELS_VISUAL.TROW_ADD_CUR_COLN(RROW => RDG_ROW, + SNAME => 'NRN', + ICURSOR => ICURSOR, + NPOSITION => 1, + BCLEAR => true); + PKG_P8PANELS_VISUAL.TROW_ADD_CUR_COLN(RROW => RDG_ROW, + SNAME => 'NPROJECT', + ICURSOR => ICURSOR, + NPOSITION => 2); + PKG_P8PANELS_VISUAL.TROW_ADD_CUR_COLN(RROW => RDG_ROW, + SNAME => 'NJB_PRJCTS', + ICURSOR => ICURSOR, + NPOSITION => 3); + PKG_P8PANELS_VISUAL.TROW_ADD_CUR_COLS(RROW => RDG_ROW, SNAME => 'SPRJ', ICURSOR => ICURSOR, NPOSITION => 4); + PKG_P8PANELS_VISUAL.TROW_ADD_CUR_COLS(RROW => RDG_ROW, + SNAME => 'SSTG_JOB', + ICURSOR => ICURSOR, + NPOSITION => 5); + PKG_P8PANELS_VISUAL.TROW_ADD_CUR_COLS(RROW => RDG_ROW, + SNAME => 'SJOB_NAME', + ICURSOR => ICURSOR, + NPOSITION => 6); + PKG_P8PANELS_VISUAL.TROW_ADD_CUR_COLN(RROW => RDG_ROW, + SNAME => 'NJOB_STATE', + ICURSOR => ICURSOR, + NPOSITION => 7); + PKG_P8PANELS_VISUAL.TROW_ADD_COL(RROW => RDG_ROW, SNAME => 'DJOB_BEG', DVALUE => DJOB_BEG); + PKG_P8PANELS_VISUAL.TROW_ADD_COL(RROW => RDG_ROW, SNAME => 'DJOB_END', DVALUE => DJOB_END); + PKG_P8PANELS_VISUAL.TROW_ADD_COL(RROW => RDG_ROW, SNAME => 'NJOB_DUR', NVALUE => NJOB_DUR); + PKG_P8PANELS_VISUAL.TROW_ADD_COL(RROW => RDG_ROW, SNAME => 'NMP_LAB', NVALUE => NMP_LAB); + PKG_P8PANELS_VISUAL.TROW_ADD_COL(RROW => RDG_ROW, SNAME => 'NMP_LAB_ONE', NVALUE => NMP_LAB_ONE); + PKG_P8PANELS_VISUAL.TROW_ADD_COL(RROW => RDG_ROW, SNAME => 'NMP_LAB_PLAN', NVALUE => NMP_LAB_PLAN); + /* Добавляем строку в таблицу */ + PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_ROW(RDATA_GRID => RDG, RROW => RDG_ROW); + end if; end loop; /* Освобождаем курсор */ PKG_SQL_DML.CLOSE_CURSOR(ICURSOR => ICURSOR); @@ -5359,308 +5766,69 @@ text="Проверить, что для расчётных полей дата- PKG_SQL_DML.CLOSE_CURSOR(ICURSOR => ICURSOR); raise; end; - /* Сериализуем описание */ - COUT := PKG_P8PANELS_VISUAL.TDATA_GRID_TO_XML(RDATA_GRID => RDG, NINCLUDE_DEF => NINCLUDE_DEF); - end JB_PERIODS_LIST_PLAN_JOBS; + /* При формировании списка для клиента */ + if (NMODE = 0) then + /* Сериализуем описание */ + COUT := PKG_P8PANELS_VISUAL.TDATA_GRID_TO_XML(RDATA_GRID => RDG, NINCLUDE_DEF => NINCLUDE_DEF); + end if; + end JB_PERIODS_PLAN_JOBS_BUILD; - /* Получение плановой трудоёмкости по текущему состоянию графиков в буфере балансировки для периода балансировки */ - function JB_PERIODS_GET_PLAN_JOBS + /* Получение списка для детализации трудоёмкости периода балансировки по текущему состоянию графика */ + procedure JB_PERIODS_PLAN_JOBS_LIST ( - NIDENT in number, -- Идентификатор процесса - DDATE_FROM in date, -- Начало - DDATE_TO in date, -- Окончание - NINS_DEPARTMENT in number, -- Рег. номер штатного подразделения - NFCMANPOWER in number -- Рег. номер трудового ресурса + NJB_PERIODS in number, -- Рег. номер записи периода в буфере балансировки + NPAGE_NUMBER in number, -- Номер страницы (игнорируется при NPAGE_SIZE=0) + NPAGE_SIZE in number, -- Количество записей на странице (0 - все) + CORDERS in clob, -- Сортировки + NINCLUDE_DEF in number, -- Признак включения описания колонок таблицы в ответ + COUT out clob -- Сериализованная таблица данных + ) + is + NTMP PKG_STD.TLNUMBER; -- Буфер для рассчетов + begin + /* Сформируем список детализации по текущему состоянию плана-графика */ + JB_PERIODS_PLAN_JOBS_BUILD(NJB_PERIODS => NJB_PERIODS, + NMODE => 0, + NPAGE_NUMBER => NPAGE_NUMBER, + NPAGE_SIZE => NPAGE_SIZE, + CORDERS => CORDERS, + NINCLUDE_DEF => NINCLUDE_DEF, + NLAB_PLAN_JOB => NTMP, + COUT => COUT); + end JB_PERIODS_PLAN_JOBS_LIST; + + /* Расчёт плановой трудоёмкости по текущему состоянию графиков в буфере балансировки для периода балансировки */ + function JB_PERIODS_PLAN_JOBS_CALC + ( + NJB_PERIODS in number -- Рег. номер записи периода в буфере балансировки ) return number -- Плановая трудоёмкость по текущему состоянию графиков в буфере балансировки is NRES PKG_STD.TLNUMBER; -- Буфер для результата - NPLAN_JOB PKG_STD.TLNUMBER; -- Плановая трудоёмкость текущей работы согласно графика - DBEG PKG_STD.TLDATE; -- Дата начала для расчёта трудоёмкости текущей работы - DEND PKG_STD.TLDATE; -- Дата окончания для расчёта трудоёмкости текущей работы + CTMP clob; -- Буфер для вычислений begin - /* Обходим все работы в буфере подходящие по условиям */ - for C in (select JB.*, - PJMP.LABOUR_P - from P8PNL_JB_JOBS JB, - PROJECTJOB PJ, - PROJECTJOBMANPOW PJMP - where JB.IDENT = NIDENT - and JB.STAGE = 0 - and JB.SOURCE = PJ.RN - and PJ.RN = PJMP.PRN - and PJMP.FCMANPOWER = NFCMANPOWER - and PJMP.SUBDIV = NINS_DEPARTMENT - and ((JB.DATE_FROM between DDATE_FROM and DDATE_TO) or (JB.DATE_TO between DDATE_FROM and DDATE_TO) or - ((JB.DATE_FROM < DDATE_FROM) and (JB.DATE_TO > DDATE_TO)))) - loop - /* Вычислим трудоёмкость по графику для попавшейся работы */ - DBEG := DDATE_FROM; - if (C.DATE_FROM > DDATE_FROM) then - DBEG := C.DATE_FROM; - end if; - DEND := DDATE_TO; - if (C.DATE_TO < DDATE_TO) then - DEND := C.DATE_TO; - end if; - if (C.LABOUR_P <> 0) then - if (C.DATE_TO - C.DATE_FROM <> 0) then - NPLAN_JOB := ROUND((DEND - DBEG) * (C.LABOUR_P / (C.DATE_TO - C.DATE_FROM)), 3); - else - NPLAN_JOB := ROUND((DEND - DBEG) * C.LABOUR_P, 3); - end if; - else - NPLAN_JOB := 0; - end if; - /* Накопим сумму в буфере результата */ - NRES := COALESCE(NRES, 0) + NPLAN_JOB; - end loop; - /* Вернём собранный результат */ - return COALESCE(NRES, 0); - end JB_PERIODS_GET_PLAN_JOBS; + /* Рассчитаем плановую трудоёмкость по текущему состоянию графиков */ + JB_PERIODS_PLAN_JOBS_BUILD(NJB_PERIODS => NJB_PERIODS, NMODE => 1, NLAB_PLAN_JOB => NRES, COUT => CTMP); + /* Вернём результат */ + return NRES; + end JB_PERIODS_PLAN_JOBS_CALC; - /* Получение списка для детализации фактической трудоёмкости периода балансировки по "Планам и отчетам подразделений" */ - procedure JB_PERIODS_LIST_FACT_RPT + /* Установка трудоемкостей в записи периода балансировки работ */ + procedure JB_PERIODS_SET_LAB ( - NJB_PERIODS in number, -- Рег. номер записи периода в буфере балансировки - NPAGE_NUMBER in number, -- Номер страницы (игнорируется при NPAGE_SIZE=0) - NPAGE_SIZE in number, -- Количество записей на странице (0 - все) - CORDERS in clob, -- Сортировки - NINCLUDE_DEF in number, -- Признак включения описания колонок таблицы в ответ - COUT out clob -- Сериализованная таблица данных - ) + NJB_PERIODS in number, -- Рег. номер записи периода балансировки + NLAB_PLAN_FOT in number, -- Плановая трудоёмкость по ФОТ + NLAB_FACT_RPT in number, -- Фактическая трудоёмкость по "Планам и отчетам подразделений" + NLAB_PLAN_JOBS in number -- Плановая трудоёмкость по плану-графику + ) is - NCOMPANY PKG_STD.TREF := GET_SESSION_COMPANY(); -- Организация сеанса - RPRD P8PNL_JB_PERIODS%rowtype; -- Запись детализируемого периода - RO PKG_P8PANELS_VISUAL.TORDERS; -- Сортировки - RDG PKG_P8PANELS_VISUAL.TDATA_GRID; -- Описание таблицы - RDG_ROW PKG_P8PANELS_VISUAL.TROW; -- Строка таблицы - CSQL clob; -- Буфер для запроса - ICURSOR integer; -- Курсор для исполнения запроса - NROW_FROM PKG_STD.TREF; -- Номер строки с - NROW_TO PKG_STD.TREF; -- Номер строки по - DJOB_BEG PKG_STD.TLDATE; -- Дата начала текущей работы согласно плану-груфику - DJOB_END PKG_STD.TLDATE; -- Дата окончания текущей работы согласно плану-груфику - NJOB_DUR PKG_STD.TLNUMBER; -- Длительнось текущей работы согласно плану-груфику begin - /* Считаем детализируемую запись периода */ - RPRD := JB_PERIODS_GET(NJB_PERIODS => NJB_PERIODS); - /* Читем сортировки */ - RO := PKG_P8PANELS_VISUAL.TORDERS_FROM_XML(CORDERS => CORDERS); - /* Преобразуем номер и размер страницы в номер строк с и по */ - PKG_P8PANELS_VISUAL.UTL_ROWS_LIMITS_CALC(NPAGE_NUMBER => NPAGE_NUMBER, - NPAGE_SIZE => NPAGE_SIZE, - NROW_FROM => NROW_FROM, - NROW_TO => NROW_TO); - /* Инициализируем таблицу данных */ - RDG := PKG_P8PANELS_VISUAL.TDATA_GRID_MAKE(); - /* Добавляем в таблицу описание колонок */ - PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG, - SNAME => 'NRN', - SCAPTION => 'Рег. номер трудового ресурса отчета', - SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_NUMB, - BVISIBLE => false); - PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG, - SNAME => 'SPRJDEPLAN', - SCAPTION => 'Документ', - SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_STR, - BVISIBLE => true, - BORDER => false); - PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG, - SNAME => 'SPRJ', - SCAPTION => 'Проект', - SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_STR, - BORDER => true); - PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG, - SNAME => 'SSTG_JOB', - SCAPTION => 'Этап-работа', - SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_STR, - BORDER => true); - PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG, - SNAME => 'SJOB_NAME', - SCAPTION => 'Наим. работы', - SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_STR, - BORDER => true); - PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG, - SNAME => 'NJOB_STATE', - SCAPTION => 'Сост. работы', - SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_NUMB, - BORDER => true); - PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG, - SNAME => 'DJOB_BEG', - SCAPTION => 'Начало работы', - SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_DATE, - BORDER => true); - PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG, - SNAME => 'DJOB_END', - SCAPTION => 'Окончание работы', - SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_DATE, - BORDER => true); - PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG, - SNAME => 'NJOB_DUR', - SCAPTION => 'Длительн. работы', - SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_NUMB, - BORDER => false); - PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG, - SNAME => 'SPERSON', - SCAPTION => 'Сотрудник', - SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_STR, - BORDER => true); - PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG, - SNAME => 'NLAB', - SCAPTION => 'Труд.', - SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_NUMB, - BORDER => false); - /* Обходим данные */ - begin - /* Добавляем подсказку совместимости */ - CSQL := PKG_SQL_BUILD.COMPATIBLE(SSQL => CSQL); - /* Формируем запрос */ - PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => 'select *'); - PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' from (select D.*,'); - PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => PKG_SQL_BUILD.SQLROWNUM() || ' NROW'); - PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' from (select MP.RN NRN,'); - PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' DT.DOCCODE || '', '' || trim(T.DOCPREF) || ''/'' || trim(T.DOCNUMB) || '', '' || TO_CHAR(T.DOCDATE, ''dd.mm.yyyy'') SPRJDEPLAN,'); - PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' P.CODE || ''-'' || P.NAME_USL SPRJ,'); - PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' trim(COALESCE(PS.NUMB, ''Б/Э'')) || ''-'' || trim(PJ.NUMB) SSTG_JOB,'); - PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' PJ.NAME SJOB_NAME,'); - PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' PJ.STATE NJOB_STATE,'); - PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' PJ.BEGPLAN DJOB_BEG,'); - PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' PJ.ENDPLAN DJOB_END,'); - PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' F_CLNPERSONS_FORMAT_CODE(FMP.COMPANY, FMP.CODE) SPERSON,'); - PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' MP.LABOUR_F NLAB'); - PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' from PRJDEPLAN T,'); - PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' DOCTYPES DT,'); - PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' ENPERIOD PR,'); - PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' PRJDEPLANMANPOW MP,'); - PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' PROJECT P,'); - PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' PROJECTSTAGE PS,'); - PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' PROJECTJOB PJ,'); - PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' PROJECTJOBMANPOW PJMP,'); - PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' CLNPSPFM FM,'); - PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' CLNPERSONS FMP'); - PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' where T.COMPANY = :NCOMPANY'); - PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' and T.STATE = 2'); - PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' and T.PERIOD = PR.RN'); - PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' and T.DOCTYPE = DT.RN'); - PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' and T.SUBDIV = :NINS_DEPARTMENT'); - PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' and ((PR.STARTDATE between :DDATE_FROM and :DDATE_TO) or (PR.ENDDATE between :DDATE_FROM and :DDATE_TO) or'); - PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' ((PR.STARTDATE < :DDATE_FROM) and (PR.ENDDATE > :DDATE_TO)))'); - PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' and MP.PRN in (select PJ.RN from PRJDEPPLANJOB PJ where PJ.PRN = T.RN)'); - PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' and MP.PROJECTJOBMANPOW = PJMP.RN'); - PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' and MP.CLNPSPFM = FM.RN(+)'); - PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' and FM.PERSRN = FMP.RN(+)'); - PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' and PJMP.FCMANPOWER = :NFCMANPOWER'); - PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' and PJMP.PRN = PJ.RN'); - PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' and PJ.PRN = P.RN'); - PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' and PJ.PROJECTSTAGE = PS.RN(+) %ORDER_BY%) D) F'); - PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' where F.NROW between :NROW_FROM and :NROW_TO'); - /* Учтём сортировки */ - PKG_P8PANELS_VISUAL.TORDERS_SET_QUERY(RDATA_GRID => RDG, RORDERS => RO, SPATTERN => '%ORDER_BY%', CSQL => CSQL); - /* Разбираем его */ - ICURSOR := PKG_SQL_DML.OPEN_CURSOR(SWHAT => 'SELECT'); - PKG_SQL_DML.PARSE(ICURSOR => ICURSOR, SQUERY => CSQL); - /* Делаем подстановку параметров */ - PKG_SQL_DML.BIND_VARIABLE_NUM(ICURSOR => ICURSOR, SNAME => 'NCOMPANY', NVALUE => NCOMPANY); - PKG_SQL_DML.BIND_VARIABLE_NUM(ICURSOR => ICURSOR, SNAME => 'NINS_DEPARTMENT', NVALUE => RPRD.INS_DEPARTMENT); - PKG_SQL_DML.BIND_VARIABLE_NUM(ICURSOR => ICURSOR, SNAME => 'NFCMANPOWER', NVALUE => RPRD.FCMANPOWER); - PKG_SQL_DML.BIND_VARIABLE_DATE(ICURSOR => ICURSOR, SNAME => 'DDATE_FROM', DVALUE => RPRD.DATE_FROM); - PKG_SQL_DML.BIND_VARIABLE_DATE(ICURSOR => ICURSOR, SNAME => 'DDATE_TO', DVALUE => RPRD.DATE_TO); - PKG_SQL_DML.BIND_VARIABLE_NUM(ICURSOR => ICURSOR, SNAME => 'NROW_FROM', NVALUE => NROW_FROM); - PKG_SQL_DML.BIND_VARIABLE_NUM(ICURSOR => ICURSOR, SNAME => 'NROW_TO', NVALUE => NROW_TO); - /* Описываем структуру записи курсора */ - PKG_SQL_DML.DEFINE_COLUMN_NUM(ICURSOR => ICURSOR, IPOSITION => 1); - PKG_SQL_DML.DEFINE_COLUMN_STR(ICURSOR => ICURSOR, IPOSITION => 2); - PKG_SQL_DML.DEFINE_COLUMN_STR(ICURSOR => ICURSOR, IPOSITION => 3); - PKG_SQL_DML.DEFINE_COLUMN_STR(ICURSOR => ICURSOR, IPOSITION => 4); - PKG_SQL_DML.DEFINE_COLUMN_STR(ICURSOR => ICURSOR, IPOSITION => 5); - PKG_SQL_DML.DEFINE_COLUMN_NUM(ICURSOR => ICURSOR, IPOSITION => 6); - PKG_SQL_DML.DEFINE_COLUMN_DATE(ICURSOR => ICURSOR, IPOSITION => 7); - PKG_SQL_DML.DEFINE_COLUMN_DATE(ICURSOR => ICURSOR, IPOSITION => 8); - PKG_SQL_DML.DEFINE_COLUMN_STR(ICURSOR => ICURSOR, IPOSITION => 9); - PKG_SQL_DML.DEFINE_COLUMN_NUM(ICURSOR => ICURSOR, IPOSITION => 10); - PKG_SQL_DML.DEFINE_COLUMN_NUM(ICURSOR => ICURSOR, IPOSITION => 11); - /* Делаем выборку */ - if (PKG_SQL_DML.EXECUTE(ICURSOR => ICURSOR) = 0) then - null; - end if; - /* Обходим выбранные записи */ - while (PKG_SQL_DML.FETCH_ROWS(ICURSOR => ICURSOR) > 0) - loop - /* Вычислим длительость работы в ЕИ панели */ - PKG_SQL_DML.COLUMN_VALUE_DATE(ICURSOR => ICURSOR, IPOSITION => 7, DVALUE => DJOB_BEG); - PKG_SQL_DML.COLUMN_VALUE_DATE(ICURSOR => ICURSOR, IPOSITION => 8, DVALUE => DJOB_END); - P_PROJECTJOB_GET_DURATION(NCOMPANY => NCOMPANY, - DBEG_DATE => DJOB_BEG, - DEND_DATE => DJOB_END, - NDURATION_MEAS => NJB_DURATION_MEAS, - NDURATION => NJOB_DUR); - /* Добавляем колонки с данными */ - PKG_P8PANELS_VISUAL.TROW_ADD_CUR_COLN(RROW => RDG_ROW, - SNAME => 'NRN', - ICURSOR => ICURSOR, - NPOSITION => 1, - BCLEAR => true); - PKG_P8PANELS_VISUAL.TROW_ADD_CUR_COLS(RROW => RDG_ROW, SNAME => 'SPRJDEPLAN', ICURSOR => ICURSOR, NPOSITION => 2); - PKG_P8PANELS_VISUAL.TROW_ADD_CUR_COLS(RROW => RDG_ROW, SNAME => 'SPRJ', ICURSOR => ICURSOR, NPOSITION => 3); - PKG_P8PANELS_VISUAL.TROW_ADD_CUR_COLS(RROW => RDG_ROW, SNAME => 'SSTG_JOB', ICURSOR => ICURSOR, NPOSITION => 4); - PKG_P8PANELS_VISUAL.TROW_ADD_CUR_COLS(RROW => RDG_ROW, - SNAME => 'SJOB_NAME', - ICURSOR => ICURSOR, - NPOSITION => 5); - PKG_P8PANELS_VISUAL.TROW_ADD_CUR_COLN(RROW => RDG_ROW, - SNAME => 'NJOB_STATE', - ICURSOR => ICURSOR, - NPOSITION => 6); - PKG_P8PANELS_VISUAL.TROW_ADD_COL(RROW => RDG_ROW, SNAME => 'DJOB_BEG', DVALUE => DJOB_BEG); - PKG_P8PANELS_VISUAL.TROW_ADD_COL(RROW => RDG_ROW, SNAME => 'DJOB_END', DVALUE => DJOB_END); - PKG_P8PANELS_VISUAL.TROW_ADD_COL(RROW => RDG_ROW, SNAME => 'NJOB_DUR', NVALUE => NJOB_DUR); - PKG_P8PANELS_VISUAL.TROW_ADD_CUR_COLS(RROW => RDG_ROW, SNAME => 'SPERSON', ICURSOR => ICURSOR, NPOSITION => 9); - PKG_P8PANELS_VISUAL.TROW_ADD_CUR_COLN(RROW => RDG_ROW, SNAME => 'NLAB', ICURSOR => ICURSOR, NPOSITION => 10); - /* Добавляем строку в таблицу */ - PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_ROW(RDATA_GRID => RDG, RROW => RDG_ROW); - end loop; - /* Освобождаем курсор */ - PKG_SQL_DML.CLOSE_CURSOR(ICURSOR => ICURSOR); - exception - when others then - PKG_SQL_DML.CLOSE_CURSOR(ICURSOR => ICURSOR); - raise; - end; - /* Сериализуем описание */ - COUT := PKG_P8PANELS_VISUAL.TDATA_GRID_TO_XML(RDATA_GRID => RDG, NINCLUDE_DEF => NINCLUDE_DEF); - end JB_PERIODS_LIST_FACT_RPT; - - /* Получение фактической трудоёмкости трудового ресурса по "Планам и отчетам подразделеий" для периода балансировки */ - function JB_PERIODS_GET_FACT_RPT - ( - NCOMPANY in number, -- Рег. номер организации - DDATE_FROM in date, -- Начало - DDATE_TO in date, -- Окончание - NINS_DEPARTMENT in number, -- Рег. номер штатного подразделения - NFCMANPOWER in number -- Рег. номер трудового ресурса - ) return number -- Фактическая трудоёмкость трудового ресурса по "Планам и отчетам подразделеий" - is - NRES PKG_STD.TLNUMBER; -- Буфер для результата - begin - /* Суммируем фактические трудоёмкости из закрытых планов и отчетов подразеделений подходящим по параметрам */ - select sum(MP.LABOUR_F) - into NRES - from PRJDEPLAN T, - ENPERIOD P, - PRJDEPLANMANPOW MP, - PROJECTJOBMANPOW PJMP - where T.COMPANY = NCOMPANY - and T.STATE = 2 - and T.PERIOD = P.RN - and T.SUBDIV = NINS_DEPARTMENT - and ((P.STARTDATE between DDATE_FROM and DDATE_TO) or (P.ENDDATE between DDATE_FROM and DDATE_TO) or - ((P.STARTDATE < DDATE_FROM) and (P.ENDDATE > DDATE_TO))) - and MP.PRN in (select PJ.RN from PRJDEPPLANJOB PJ where PJ.PRN = T.RN) - and MP.PROJECTJOBMANPOW = PJMP.RN - and PJMP.FCMANPOWER = NFCMANPOWER; - /* Вернём собранный результат */ - return COALESCE(NRES, 0); - end JB_PERIODS_GET_FACT_RPT; + /* Установим трудоёмкости */ + update P8PNL_JB_PERIODS T + set T.LAB_PLAN_FOT = NLAB_PLAN_FOT, + T.LAB_FACT_RPT = NLAB_FACT_RPT, + T.LAB_PLAN_JOBS = NLAB_PLAN_JOBS + where T.RN = NJB_PERIODS; + end JB_PERIODS_SET_LAB; /* Базовое добавление периода балансировки работ */ procedure JB_PERIODS_BASE_INSERT @@ -5716,22 +5884,23 @@ text="Проверить, что для расчётных полей дата- /* Пересчёт периодов балансировки */ procedure JB_PERIODS_RECALC ( - NIDENT in number, -- Идентификатор процесса - DBEGIN in date, -- Дата начала периода мониторинга загрузки ресурсов - NINITIAL in number, -- Признак первоначального рассчёта (0 - пересчёт, 1 - первоначальный рассчёт) - NRESOURCE_STATUS out number -- Состояние ресурсов (0 - без отклонений, 1 - есть отклонения) + NIDENT in number, -- Идентификатор процесса + NINITIAL in number, -- Признак первоначального рассчёта (0 - пересчёт, 1 - первоначальный рассчёт) + NRESOURCE_STATUS out number -- Состояние ресурсов (0 - без отклонений, 1 - есть отклонения) ) is - NCOMPANY PKG_STD.TREF := GET_SESSION_COMPANY(); -- Организация сеанса - DJB_BEG PKG_STD.TLDATE; -- Дата начала периода балансировки - DJB_END PKG_STD.TLDATE; -- Дата окончания периода балансировки - DBEG PKG_STD.TLDATE; -- Дата начала текущего месяца периода балансировки - DEND PKG_STD.TLDATE; -- Дата окончания текущего месяца периода балансировки - NJB_PERIODS PKG_STD.TREF; -- Рег. номер добавленного периода балансировки - NLAB_PLAN_FOT PKG_STD.TLNUMBER; -- Плановая трудоёмкость по ФОТ для текущего месяца периода балансировки - NLAB_FACT_RPT PKG_STD.TLNUMBER; -- Фактическая трудоёмкость по "Планам и отчетам подразделений" для текущего месяца периода балансировки - NLAB_PLAN_JOBS PKG_STD.TLNUMBER; -- Плановая трудоёмкость по плану-графику в буфере для текущего месяца периода балансировки + RJB_PRMS P8PNL_JB_PRMS%rowtype; -- Параметры балансировки + DJB_BEG PKG_STD.TLDATE; -- Дата начала периода балансировки + DJB_END PKG_STD.TLDATE; -- Дата окончания периода балансировки + DBEG PKG_STD.TLDATE; -- Дата начала текущего месяца периода балансировки + DEND PKG_STD.TLDATE; -- Дата окончания текущего месяца периода балансировки + NJB_PERIODS PKG_STD.TREF; -- Рег. номер добавленного периода балансировки + NLAB_PLAN_FOT PKG_STD.TLNUMBER; -- Плановая трудоёмкость по ФОТ для текущего месяца периода балансировки + NLAB_FACT_RPT PKG_STD.TLNUMBER; -- Фактическая трудоёмкость по "Планам и отчетам подразделений" для текущего месяца периода балансировки + NLAB_PLAN_JOBS PKG_STD.TLNUMBER; -- Плановая трудоёмкость по плану-графику в буфере для текущего месяца периода балансировки begin + /* Считаем параметры балансировки */ + RJB_PRMS := JB_PRMS_GET(NIDENT => NIDENT); /* Подчистка при перерасчёте */ if (NINITIAL = 0) then JB_PERIODS_CLEAN(NIDENT => NIDENT); @@ -5739,7 +5908,7 @@ text="Проверить, что для расчётных полей дата- /* Скажем, что нет отклонений */ NRESOURCE_STATUS := 0; /* Определим период балансировки */ - DJB_BEG := DBEGIN; + DJB_BEG := RJB_PRMS.DATE_BEGIN; DJB_END := JB_GET_END(NIDENT => NIDENT); /* Сформируем записи периодов балансировки */ for I in 0 .. FLOOR(MONTHS_BETWEEN(DJB_END, DJB_BEG)) @@ -5762,34 +5931,27 @@ text="Проверить, что для расчётных полей дата- group by JMP.FCMANPOWER, JMP.SUBDIV) loop - /* Рассчитаем трудоёмкость по ФОТ (в часах) */ - NLAB_PLAN_FOT := JB_PERIODS_GET_PLAN_FOT(NCOMPANY => NCOMPANY, - DDATE_FROM => DBEG, - DDATE_TO => DEND, - NINS_DEPARTMENT => D.SUBDIV, - NFCMANPOWER => D.FCMANPOWER); - /* Рассчитаем трудоемкость по "Планам и отчетам подразделений" */ - NLAB_FACT_RPT := JB_PERIODS_GET_FACT_RPT(NCOMPANY => NCOMPANY, - DDATE_FROM => DBEG, - DDATE_TO => DEND, - NINS_DEPARTMENT => D.SUBDIV, - NFCMANPOWER => D.FCMANPOWER); - /* Рассчитаем трудоёмкость по работам графика */ - NLAB_PLAN_JOBS := JB_PERIODS_GET_PLAN_JOBS(NIDENT => NIDENT, - DDATE_FROM => DBEG, - DDATE_TO => DEND, - NINS_DEPARTMENT => D.SUBDIV, - NFCMANPOWER => D.FCMANPOWER); /* Добавим запись периода балансировки */ JB_PERIODS_BASE_INSERT(NIDENT => NIDENT, DDATE_FROM => DBEG, DDATE_TO => DEND, NINS_DEPARTMENT => D.SUBDIV, NFCMANPOWER => D.FCMANPOWER, - NLAB_PLAN_FOT => NLAB_PLAN_FOT, - NLAB_FACT_RPT => NLAB_FACT_RPT, - NLAB_PLAN_JOBS => NLAB_PLAN_JOBS, + NLAB_PLAN_FOT => 0, + NLAB_FACT_RPT => 0, + NLAB_PLAN_JOBS => 0, NJB_PERIODS => NJB_PERIODS); + /* Рассчитаем трудоёмкость по ФОТ (в часах) */ + NLAB_PLAN_FOT := JB_PERIODS_PLAN_FOT_CALC(NJB_PERIODS => NJB_PERIODS); + /* Рассчитаем трудоемкость по "Планам и отчетам подразделений" */ + NLAB_FACT_RPT := JB_PERIODS_FACT_RPT_CALC(NJB_PERIODS => NJB_PERIODS); + /* Рассчитаем трудоёмкость по работам графика */ + NLAB_PLAN_JOBS := JB_PERIODS_PLAN_JOBS_CALC(NJB_PERIODS => NJB_PERIODS); + /* Сохраним расчёты */ + JB_PERIODS_SET_LAB(NJB_PERIODS => NJB_PERIODS, + NLAB_PLAN_FOT => NLAB_PLAN_FOT, + NLAB_FACT_RPT => NLAB_FACT_RPT, + NLAB_PLAN_JOBS => NLAB_PLAN_JOBS); /* Если плановая трудоёмкость по работам графика превысила ФОТ - значит с ресурсами всё плохо */ if (NLAB_PLAN_JOBS > NLAB_PLAN_FOT) then NRESOURCE_STATUS := 1; @@ -5809,6 +5971,7 @@ text="Проверить, что для расчётных полей дата- COUT out clob -- Сериализованная таблица данных ) is + RJB_PRMS P8PNL_JB_PRMS%rowtype; -- Параметры балансировки RO PKG_P8PANELS_VISUAL.TORDERS; -- Сортировки RDG PKG_P8PANELS_VISUAL.TDATA_GRID; -- Описание таблицы RDG_ROW PKG_P8PANELS_VISUAL.TROW; -- Строка таблицы @@ -5817,7 +5980,9 @@ text="Проверить, что для расчётных полей дата- NROW_FROM PKG_STD.TREF; -- Номер строки с NROW_TO PKG_STD.TREF; -- Номер строки по begin - /* Читем сортировки */ + /* Считаем параметры балансировки */ + RJB_PRMS := JB_PRMS_GET(NIDENT => NIDENT); + /* Читаем сортировки */ RO := PKG_P8PANELS_VISUAL.TORDERS_FROM_XML(CORDERS => CORDERS); /* Преобразуем номер и размер страницы в номер строк с и по */ PKG_P8PANELS_VISUAL.UTL_ROWS_LIMITS_CALC(NPAGE_NUMBER => NPAGE_NUMBER, @@ -5852,33 +6017,33 @@ text="Проверить, что для расчётных полей дата- BFILTER => false); PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG, SNAME => 'NLAB_PLAN_FOT', - SCAPTION => 'Труд. (план, ФОТ)', + SCAPTION => 'Труд. (план, ФОТ, ' || RJB_PRMS.LAB_MEAS_CODE || ')', SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_NUMB, BORDER => true, BFILTER => false); PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG, SNAME => 'NLAB_FACT_RPT', - SCAPTION => 'Труд. (факт, отчёт)', + SCAPTION => 'Труд. (факт, отчёт, ' || RJB_PRMS.LAB_MEAS_CODE || ')', SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_NUMB, BVISIBLE => true, BORDER => true, BFILTER => false); PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG, SNAME => 'NLAB_DIFF_RPT_FOT', - SCAPTION => 'Отклон. (факт-план)', + SCAPTION => 'Отклон. (факт-план, ' || RJB_PRMS.LAB_MEAS_CODE || ')', SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_NUMB, BVISIBLE => true, BORDER => true, BFILTER => false); PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG, SNAME => 'NLAB_PLAN_JOBS', - SCAPTION => 'Труд. (план, график)', + SCAPTION => 'Труд. (план, график, ' || RJB_PRMS.LAB_MEAS_CODE || ')', SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_NUMB, BORDER => true, BFILTER => false); PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG, SNAME => 'NLAB_DIFF_JOBS_FOT', - SCAPTION => 'Отклон. (график-план)', + SCAPTION => 'Отклон. (график-план, ' || RJB_PRMS.LAB_MEAS_CODE || ')', SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_NUMB, BORDER => true, BFILTER => false); @@ -5989,6 +6154,8 @@ text="Проверить, что для расчётных полей дата- ) is begin + /* Удаляем параметры балансировки */ + JB_PRMS_CLEAN(NIDENT => NIDENT); /* Удаляем список предшествующих работ */ delete from P8PNL_JB_JOBSPREV T where T.IDENT = NIDENT; /* Удаляем список работ */ @@ -6101,8 +6268,10 @@ text="Проверить, что для расчётных полей дата- ( DBEGIN in out date, -- Дата начала периода мониторинга загрузки ресурсов DFACT in out date, -- Факт по состоянию на - NDURATION_MEAS in out number, -- Единица измерения длительности (0 - день, 1 - неделя, 2 - декада, 3 - месяц, 4 - квартал, 5 - год) - SLAB_MEAS in out varchar2, -- Единица измерения трудоёмкости + NDURATION_MEAS out number, -- Единица измерения длительности (0 - день, 1 - неделя, 2 - декада, 3 - месяц, 4 - квартал, 5 - год) + SDURATION_MEAS out varchar2, -- Единица измерения длительности (мнемокод) + NLAB_MEAS out number, -- Единица измерения трудоёмкости + SLAB_MEAS out varchar2, -- Единица измерения трудоёмкости (мнемокод) NIDENT in out number, -- Идентификатор процесса (null - сгенерировать новый, !null - удалить старые данные и пересоздать с указанным идентификатором) NRESOURCE_STATUS out number -- Состояние ресурсов (0 - без отклонений, 1 - есть отклонения) ) @@ -6117,7 +6286,7 @@ text="Проверить, что для расчётных полей дата- RH_JB_JOBS_PREV P8PNL_JB_JOBS%rowtype; -- Запись предшествующей работы в иехархии балансируемых NDURATION P8PNL_JB_JOBS.DURATION%type; -- Длительност текущей работы/этапа NEDITABLE PKG_STD.TREF; -- Признак возможности редактирования работы - NLAB_MEAS PKG_STD.TREF; -- Рег. номер выбранной для рассчётов единицы измерения трудоёмкости + NPRMS PKG_STD.TREF; -- Рег. номер записи параметров балансировки begin /* Обработаем дату начала периода мониторинга загрузки ресурсов */ if (DBEGIN is null) then @@ -6128,7 +6297,7 @@ text="Проверить, что для расчётных полей дата- /* Обработаем дату факта */ if (DFACT is null) then select LAST_DAY(TRUNC(COALESCE(max(ENP.ENDDATE), DBEGIN), 'mm')) - into DFACT + into DFACT from PRJDEPLAN T, ENPERIOD ENP where T.COMPANY = NCOMPANY @@ -6139,6 +6308,7 @@ text="Проверить, что для расчётных полей дата- end if; /* Обработаем единицу измерения длительности (пока - она всегда должна быть "день", по умолчанию) */ NDURATION_MEAS := NJB_DURATION_MEAS; + SDURATION_MEAS := JB_GET_DURATION_MEAS_CODE(NDURATION_MEAS => NDURATION_MEAS); /* Обработаем единицу измерения трудоёмкости (пока - она всегда должна быть "ч/ч", по умолчанию) */ SLAB_MEAS := SJB_LAB_MEAS; FIND_DICMUNTS_BY_MNEMO(NFLAG_SMART => 0, NCOMPANY => NCOMPANY, SMEAS_MNEMO => SLAB_MEAS, NRN => NLAB_MEAS); @@ -6148,6 +6318,15 @@ text="Проверить, что для расчётных полей дата- else JB_CLEAN(NIDENT => NIDENT); end if; + /* Сохраняем параметры балансировки */ + JB_PRMS_BASE_INSERT(NIDENT => NIDENT, + DDATE_BEGIN => DBEGIN, + DDATE_FACT => DFACT, + NDURATION_MEAS => NDURATION_MEAS, + SDURATION_MEAS_CODE => SDURATION_MEAS, + NLAB_MEAS => NLAB_MEAS, + SLAB_MEAS_CODE => SLAB_MEAS, + NRN => NPRMS); /* Обходим проекты */ for PRJ in (select P.RN NRN, COALESCE((select 1 @@ -6306,7 +6485,7 @@ text="Проверить, что для расчётных полей дата- end loop; end loop; /* Сформируем данные монитора загрузки ресурсов */ - JB_PERIODS_RECALC(NIDENT => NIDENT, DBEGIN => DBEGIN, NINITIAL => 1, NRESOURCE_STATUS => NRESOURCE_STATUS); + JB_PERIODS_RECALC(NIDENT => NIDENT, NINITIAL => 1, NRESOURCE_STATUS => NRESOURCE_STATUS); end JB_INIT; end PKG_P8PANELS_PROJECTS; From 52c6cb126cf638d77e5ddb877ece0c6025dee320 Mon Sep 17 00:00:00 2001 From: Mikhail Chechnev Date: Fri, 19 Apr 2024 21:46:51 +0300 Subject: [PATCH 12/76] =?UTF-8?q?WEB=20APP:=20=D0=A1=D0=B2=D0=B5=D0=B6?= =?UTF-8?q?=D0=B0=D1=8F=20=D1=81=D0=B1=D0=BE=D1=80=D0=BA=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- dist/p8-panels.js | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/dist/p8-panels.js b/dist/p8-panels.js index b7133de..1c111c6 100644 --- a/dist/p8-panels.js +++ b/dist/p8-panels.js @@ -3766,7 +3766,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ LabFactRptDtl: () => (/* binding */ LabFactRptDtl)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! prop-types */ \"./node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_13___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_13__);\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Dialog/Dialog.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/DialogTitle/DialogTitle.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/DialogContent/DialogContent.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/DialogActions/DialogActions.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Button/Button.js\");\n/* harmony import */ var _context_backend__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../context/backend */ \"./app/context/backend.js\");\n/* harmony import */ var _context_application__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../context/application */ \"./app/context/application.js\");\n/* harmony import */ var _core_utils__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../core/utils */ \"./app/core/utils.js\");\n/* harmony import */ var _app_text__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../../app.text */ \"./app.text.js\");\n/* harmony import */ var _config_wrapper__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../config_wrapper */ \"./app/config_wrapper.js\");\n/* harmony import */ var _components_p8p_data_grid__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../../components/p8p_data_grid */ \"./app/components/p8p_data_grid.js\");\n/* harmony import */ var _layouts__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./layouts */ \"./app/panels/prj_jobs/layouts.js\");\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n/*\r\n Парус 8 - Панели мониторинга - ПУП - Работы проектов\r\n Компонент панели: Детализация фактической трудоёмкости по \"Планам и отчетам подразделений\"\r\n*/\n\n//---------------------\n//Подключение библиотек\n//---------------------\n\n //Классы React\n //Контроль свойств компонента\n //Интерфейсные элементы\n //Контекст взаимодействия с сервером\n //Контекст приложения\n //Вспомогательные функции\n //Текстовые ресурсы\n //Подключение компонентов к настройкам приложения\n //Таблица данных\n //Дополнительная разметка и вёрстка клиентских элементов\n\n//-----------\n//Тело модуля\n//-----------\n\n//Детализация фактической трудоёмкости по \"Планам и отчетам подразделений\"\nconst LabFactRptDtl = ({\n periodId,\n title,\n onHide\n}) => {\n //Состояние таблицы детализации плановой трудоёмкости по графику\n const [factRptDtl, setFactRptDtl] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({\n dataLoaded: false,\n columnsDef: [],\n orders: [],\n rows: [],\n reload: true,\n pageNumber: 1,\n morePages: true\n });\n\n //Подключение к контексту приложения\n const {\n configSystemPageSize\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_application__WEBPACK_IMPORTED_MODULE_2__[\"ApplicationСtx\"]);\n\n //Подключение к контексту взаимодействия с сервером\n const {\n executeStored,\n SERV_DATA_TYPE_CLOB\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_backend__WEBPACK_IMPORTED_MODULE_1__[\"BackEndСtx\"]);\n\n //Загрузка детализации фактической трудоёмкости по отчетам для ресурса\n const loadFactRptDtl = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async () => {\n if (factRptDtl.reload) {\n const data = await executeStored({\n stored: \"PKG_P8PANELS_PROJECTS.JB_PERIODS_LIST_FACT_RPT\",\n args: {\n NJB_PERIODS: periodId,\n CORDERS: {\n VALUE: (0,_core_utils__WEBPACK_IMPORTED_MODULE_3__.object2Base64XML)(factRptDtl.orders, {\n arrayNodeName: \"orders\"\n }),\n SDATA_TYPE: SERV_DATA_TYPE_CLOB\n },\n NPAGE_NUMBER: factRptDtl.pageNumber,\n NPAGE_SIZE: configSystemPageSize,\n NINCLUDE_DEF: factRptDtl.dataLoaded ? 0 : 1\n },\n respArg: \"COUT\"\n });\n setFactRptDtl(pv => ({\n ...pv,\n columnsDef: data.XCOLUMNS_DEF ? [...data.XCOLUMNS_DEF] : pv.columnsDef,\n rows: pv.pageNumber == 1 ? [...(data.XROWS || [])] : [...pv.rows, ...(data.XROWS || [])],\n dataLoaded: true,\n reload: false,\n morePages: (data.XROWS || []).length >= configSystemPageSize\n }));\n }\n }, [periodId, factRptDtl.reload, factRptDtl.orders, factRptDtl.dataLoaded, factRptDtl.pageNumber, executeStored, configSystemPageSize, SERV_DATA_TYPE_CLOB]);\n\n //При изменении состояния сортировки в детализации факта по \"Планам и отчетам в подразделении\"\n const handlePlanJobsDtlDGOrderChanged = ({\n orders\n }) => setFactRptDtl(pv => ({\n ...pv,\n orders,\n pageNumber: 1,\n reload: true\n }));\n\n //При изменении количества отображаемых страниц в факта по \"Планам и отчетам в подразделении\"\n const handlePlanJobsDtlDGPagesCountChanged = () => setFactRptDtl(pv => ({\n ...pv,\n pageNumber: pv.pageNumber + 1,\n reload: true\n }));\n\n //При необходимости обновить данные\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n loadFactRptDtl();\n }, [factRptDtl.reload, loadFactRptDtl]);\n\n //Генерация содержимого\n return factRptDtl.dataLoaded ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_8__[\"default\"], {\n open: true,\n onClose: onHide,\n fullWidth: true,\n maxWidth: \"xl\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_9__[\"default\"], null, title), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_10__[\"default\"], null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_components_p8p_data_grid__WEBPACK_IMPORTED_MODULE_6__.P8PDataGrid, _extends({}, _config_wrapper__WEBPACK_IMPORTED_MODULE_5__.P8P_DATA_GRID_CONFIG_PROPS, {\n columnsDef: factRptDtl.columnsDef,\n rows: factRptDtl.rows,\n size: _components_p8p_data_grid__WEBPACK_IMPORTED_MODULE_6__.P8P_DATA_GRID_SIZE.SMALL,\n morePages: factRptDtl.morePages,\n reloading: factRptDtl.reload,\n valueFormatter: _layouts__WEBPACK_IMPORTED_MODULE_7__.factRptDtlValueFormatter,\n headCellRender: _layouts__WEBPACK_IMPORTED_MODULE_7__.factRptDtlHeadCellRender,\n onOrderChanged: handlePlanJobsDtlDGOrderChanged,\n onPagesCountChanged: handlePlanJobsDtlDGPagesCountChanged\n }))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_11__[\"default\"], null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_12__[\"default\"], {\n onClick: onHide\n }, _app_text__WEBPACK_IMPORTED_MODULE_4__.BUTTONS.CLOSE))) : null;\n};\n\n//Контроль свойств - Детализация фактической трудоёмкости по \"Планам и отчетам подразделений\"\nLabFactRptDtl.propTypes = {\n periodId: (prop_types__WEBPACK_IMPORTED_MODULE_13___default().number).isRequired,\n title: (prop_types__WEBPACK_IMPORTED_MODULE_13___default().string).isRequired,\n onHide: (prop_types__WEBPACK_IMPORTED_MODULE_13___default().func).isRequired\n};\n\n//----------------\n//Интерфейс модуля\n//----------------\n\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/panels/prj_jobs/lab_fact_rpt_dtl.js?"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ LabFactRptDtl: () => (/* binding */ LabFactRptDtl)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! prop-types */ \"./node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_13___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_13__);\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Dialog/Dialog.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/DialogTitle/DialogTitle.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/DialogContent/DialogContent.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/DialogActions/DialogActions.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Button/Button.js\");\n/* harmony import */ var _context_backend__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../context/backend */ \"./app/context/backend.js\");\n/* harmony import */ var _context_application__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../context/application */ \"./app/context/application.js\");\n/* harmony import */ var _core_utils__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../core/utils */ \"./app/core/utils.js\");\n/* harmony import */ var _app_text__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../../app.text */ \"./app.text.js\");\n/* harmony import */ var _config_wrapper__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../config_wrapper */ \"./app/config_wrapper.js\");\n/* harmony import */ var _components_p8p_data_grid__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../../components/p8p_data_grid */ \"./app/components/p8p_data_grid.js\");\n/* harmony import */ var _layouts__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./layouts */ \"./app/panels/prj_jobs/layouts.js\");\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n/*\r\n Парус 8 - Панели мониторинга - ПУП - Работы проектов\r\n Компонент панели: Детализация фактической трудоёмкости по \"Планам и отчетам подразделений\"\r\n*/\n\n//---------------------\n//Подключение библиотек\n//---------------------\n\n //Классы React\n //Контроль свойств компонента\n //Интерфейсные элементы\n //Контекст взаимодействия с сервером\n //Контекст приложения\n //Вспомогательные функции\n //Текстовые ресурсы\n //Подключение компонентов к настройкам приложения\n //Таблица данных\n //Дополнительная разметка и вёрстка клиентских элементов\n\n//-----------\n//Тело модуля\n//-----------\n\n//Детализация фактической трудоёмкости по \"Планам и отчетам подразделений\"\nconst LabFactRptDtl = ({\n periodId,\n title,\n onHide\n}) => {\n //Состояние таблицы детализации плановой трудоёмкости по графику\n const [factRptDtl, setFactRptDtl] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({\n dataLoaded: false,\n columnsDef: [],\n orders: [],\n rows: [],\n reload: true,\n pageNumber: 1,\n morePages: true\n });\n\n //Подключение к контексту приложения\n const {\n configSystemPageSize\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_application__WEBPACK_IMPORTED_MODULE_2__[\"ApplicationСtx\"]);\n\n //Подключение к контексту взаимодействия с сервером\n const {\n executeStored,\n SERV_DATA_TYPE_CLOB\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_backend__WEBPACK_IMPORTED_MODULE_1__[\"BackEndСtx\"]);\n\n //Загрузка детализации фактической трудоёмкости по отчетам для ресурса\n const loadFactRptDtl = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async () => {\n if (factRptDtl.reload) {\n const data = await executeStored({\n stored: \"PKG_P8PANELS_PROJECTS.JB_PERIODS_FACT_RPT_LIST\",\n args: {\n NJB_PERIODS: periodId,\n CORDERS: {\n VALUE: (0,_core_utils__WEBPACK_IMPORTED_MODULE_3__.object2Base64XML)(factRptDtl.orders, {\n arrayNodeName: \"orders\"\n }),\n SDATA_TYPE: SERV_DATA_TYPE_CLOB\n },\n NPAGE_NUMBER: factRptDtl.pageNumber,\n NPAGE_SIZE: configSystemPageSize,\n NINCLUDE_DEF: factRptDtl.dataLoaded ? 0 : 1\n },\n respArg: \"COUT\"\n });\n setFactRptDtl(pv => ({\n ...pv,\n columnsDef: data.XCOLUMNS_DEF ? [...data.XCOLUMNS_DEF] : pv.columnsDef,\n rows: pv.pageNumber == 1 ? [...(data.XROWS || [])] : [...pv.rows, ...(data.XROWS || [])],\n dataLoaded: true,\n reload: false,\n morePages: (data.XROWS || []).length >= configSystemPageSize\n }));\n }\n }, [periodId, factRptDtl.reload, factRptDtl.orders, factRptDtl.dataLoaded, factRptDtl.pageNumber, executeStored, configSystemPageSize, SERV_DATA_TYPE_CLOB]);\n\n //При изменении состояния сортировки в детализации факта по \"Планам и отчетам в подразделении\"\n const handlePlanJobsDtlDGOrderChanged = ({\n orders\n }) => setFactRptDtl(pv => ({\n ...pv,\n orders,\n pageNumber: 1,\n reload: true\n }));\n\n //При изменении количества отображаемых страниц в факта по \"Планам и отчетам в подразделении\"\n const handlePlanJobsDtlDGPagesCountChanged = () => setFactRptDtl(pv => ({\n ...pv,\n pageNumber: pv.pageNumber + 1,\n reload: true\n }));\n\n //При необходимости обновить данные\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n loadFactRptDtl();\n }, [factRptDtl.reload, loadFactRptDtl]);\n\n //Генерация содержимого\n return factRptDtl.dataLoaded ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_8__[\"default\"], {\n open: true,\n onClose: onHide,\n fullWidth: true,\n maxWidth: \"xl\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_9__[\"default\"], null, title), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_10__[\"default\"], null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_components_p8p_data_grid__WEBPACK_IMPORTED_MODULE_6__.P8PDataGrid, _extends({}, _config_wrapper__WEBPACK_IMPORTED_MODULE_5__.P8P_DATA_GRID_CONFIG_PROPS, {\n columnsDef: factRptDtl.columnsDef,\n rows: factRptDtl.rows,\n size: _components_p8p_data_grid__WEBPACK_IMPORTED_MODULE_6__.P8P_DATA_GRID_SIZE.SMALL,\n morePages: factRptDtl.morePages,\n reloading: factRptDtl.reload,\n valueFormatter: _layouts__WEBPACK_IMPORTED_MODULE_7__.factRptDtlValueFormatter,\n headCellRender: _layouts__WEBPACK_IMPORTED_MODULE_7__.factRptDtlHeadCellRender,\n onOrderChanged: handlePlanJobsDtlDGOrderChanged,\n onPagesCountChanged: handlePlanJobsDtlDGPagesCountChanged\n }))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_11__[\"default\"], null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_12__[\"default\"], {\n onClick: onHide\n }, _app_text__WEBPACK_IMPORTED_MODULE_4__.BUTTONS.CLOSE))) : null;\n};\n\n//Контроль свойств - Детализация фактической трудоёмкости по \"Планам и отчетам подразделений\"\nLabFactRptDtl.propTypes = {\n periodId: (prop_types__WEBPACK_IMPORTED_MODULE_13___default().number).isRequired,\n title: (prop_types__WEBPACK_IMPORTED_MODULE_13___default().string).isRequired,\n onHide: (prop_types__WEBPACK_IMPORTED_MODULE_13___default().func).isRequired\n};\n\n//----------------\n//Интерфейс модуля\n//----------------\n\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/panels/prj_jobs/lab_fact_rpt_dtl.js?"); /***/ }), @@ -3777,7 +3777,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ LabPlanFOTDtl: () => (/* binding */ LabPlanFOTDtl)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! prop-types */ \"./node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_12___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_12__);\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Dialog/Dialog.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/DialogTitle/DialogTitle.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/DialogContent/DialogContent.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/DialogActions/DialogActions.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Button/Button.js\");\n/* harmony import */ var _context_backend__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../context/backend */ \"./app/context/backend.js\");\n/* harmony import */ var _context_application__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../context/application */ \"./app/context/application.js\");\n/* harmony import */ var _core_utils__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../core/utils */ \"./app/core/utils.js\");\n/* harmony import */ var _app_text__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../../app.text */ \"./app.text.js\");\n/* harmony import */ var _config_wrapper__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../config_wrapper */ \"./app/config_wrapper.js\");\n/* harmony import */ var _components_p8p_data_grid__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../../components/p8p_data_grid */ \"./app/components/p8p_data_grid.js\");\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n/*\r\n Парус 8 - Панели мониторинга - ПУП - Работы проектов\r\n Компонент панели: Детализация плановой трудоёмкости по ФОТ\r\n*/\n\n//---------------------\n//Подключение библиотек\n//---------------------\n\n //Классы React\n //Контроль свойств компонента\n //Интерфейсные элементы\n //Контекст взаимодействия с сервером\n //Контекст приложения\n //Вспомогательные функции\n //Текстовые ресурсы\n //Подключение компонентов к настройкам приложения\n //Таблица данных\n\n//-----------\n//Тело модуля\n//-----------\n\n//Детализация плановой трудоёмкости по ФОТ\nconst LabPlanFOTDtl = ({\n periodId,\n title,\n onHide\n}) => {\n //Состояние таблицы детализации плановой трудоёмкости по ФОТ ресурса\n const [planFOTDtl, setPlanFOTDtl] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({\n dataLoaded: false,\n columnsDef: [],\n orders: [],\n rows: [],\n reload: true,\n pageNumber: 1,\n morePages: true\n });\n\n //Подключение к контексту приложения\n const {\n configSystemPageSize\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_application__WEBPACK_IMPORTED_MODULE_2__[\"ApplicationСtx\"]);\n\n //Подключение к контексту взаимодействия с сервером\n const {\n executeStored,\n SERV_DATA_TYPE_CLOB\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_backend__WEBPACK_IMPORTED_MODULE_1__[\"BackEndСtx\"]);\n\n //Загрузка детализации плановой трудоёмкости по ФОТ для ресурса\n const loadPlanFOTDtl = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async () => {\n if (planFOTDtl.reload) {\n const data = await executeStored({\n stored: \"PKG_P8PANELS_PROJECTS.JB_PERIODS_LIST_PLAN_FOT\",\n args: {\n NJB_PERIODS: periodId,\n CORDERS: {\n VALUE: (0,_core_utils__WEBPACK_IMPORTED_MODULE_3__.object2Base64XML)(planFOTDtl.orders, {\n arrayNodeName: \"orders\"\n }),\n SDATA_TYPE: SERV_DATA_TYPE_CLOB\n },\n NPAGE_NUMBER: planFOTDtl.pageNumber,\n NPAGE_SIZE: configSystemPageSize,\n NINCLUDE_DEF: planFOTDtl.dataLoaded ? 0 : 1\n },\n respArg: \"COUT\"\n });\n setPlanFOTDtl(pv => ({\n ...pv,\n columnsDef: data.XCOLUMNS_DEF ? [...data.XCOLUMNS_DEF] : pv.columnsDef,\n rows: pv.pageNumber == 1 ? [...(data.XROWS || [])] : [...pv.rows, ...(data.XROWS || [])],\n dataLoaded: true,\n reload: false,\n morePages: (data.XROWS || []).length >= configSystemPageSize\n }));\n }\n }, [periodId, planFOTDtl.reload, planFOTDtl.orders, planFOTDtl.dataLoaded, planFOTDtl.pageNumber, executeStored, configSystemPageSize, SERV_DATA_TYPE_CLOB]);\n\n //При изменении состояния сортировки в детализации плана ФОТ по строке ресурса\n const handlePlanFOTDtlDGOrderChanged = ({\n orders\n }) => setPlanFOTDtl(pv => ({\n ...pv,\n orders,\n pageNumber: 1,\n reload: true\n }));\n\n //При изменении количества отображаемых страниц в в детализации плана ФОТ по строке ресурса\n const handlePlanFOTDtlDGPagesCountChanged = () => setPlanFOTDtl(pv => ({\n ...pv,\n pageNumber: pv.pageNumber + 1,\n reload: true\n }));\n\n //При необходимости обновить данные\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n loadPlanFOTDtl();\n }, [planFOTDtl.reload, loadPlanFOTDtl]);\n\n //Генерация содержимого\n return planFOTDtl.dataLoaded ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_7__[\"default\"], {\n open: true,\n onClose: onHide\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_8__[\"default\"], null, title), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_9__[\"default\"], null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_components_p8p_data_grid__WEBPACK_IMPORTED_MODULE_6__.P8PDataGrid, _extends({}, _config_wrapper__WEBPACK_IMPORTED_MODULE_5__.P8P_DATA_GRID_CONFIG_PROPS, {\n columnsDef: planFOTDtl.columnsDef,\n rows: planFOTDtl.rows,\n size: _components_p8p_data_grid__WEBPACK_IMPORTED_MODULE_6__.P8P_DATA_GRID_SIZE.SMALL,\n morePages: planFOTDtl.morePages,\n reloading: planFOTDtl.reload,\n onOrderChanged: handlePlanFOTDtlDGOrderChanged,\n onPagesCountChanged: handlePlanFOTDtlDGPagesCountChanged\n }))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_10__[\"default\"], null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_11__[\"default\"], {\n onClick: onHide\n }, _app_text__WEBPACK_IMPORTED_MODULE_4__.BUTTONS.CLOSE))) : null;\n};\n\n//Контроль свойств - Детализация плановой трудоёмкости по ФОТ\nLabPlanFOTDtl.propTypes = {\n periodId: (prop_types__WEBPACK_IMPORTED_MODULE_12___default().number).isRequired,\n title: (prop_types__WEBPACK_IMPORTED_MODULE_12___default().string).isRequired,\n onHide: (prop_types__WEBPACK_IMPORTED_MODULE_12___default().func).isRequired\n};\n\n//----------------\n//Интерфейс модуля\n//----------------\n\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/panels/prj_jobs/lab_plan_fot_dtl.js?"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ LabPlanFOTDtl: () => (/* binding */ LabPlanFOTDtl)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! prop-types */ \"./node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_12___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_12__);\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Dialog/Dialog.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/DialogTitle/DialogTitle.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/DialogContent/DialogContent.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/DialogActions/DialogActions.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Button/Button.js\");\n/* harmony import */ var _context_backend__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../context/backend */ \"./app/context/backend.js\");\n/* harmony import */ var _context_application__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../context/application */ \"./app/context/application.js\");\n/* harmony import */ var _core_utils__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../core/utils */ \"./app/core/utils.js\");\n/* harmony import */ var _app_text__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../../app.text */ \"./app.text.js\");\n/* harmony import */ var _config_wrapper__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../config_wrapper */ \"./app/config_wrapper.js\");\n/* harmony import */ var _components_p8p_data_grid__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../../components/p8p_data_grid */ \"./app/components/p8p_data_grid.js\");\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n/*\r\n Парус 8 - Панели мониторинга - ПУП - Работы проектов\r\n Компонент панели: Детализация плановой трудоёмкости по ФОТ\r\n*/\n\n//---------------------\n//Подключение библиотек\n//---------------------\n\n //Классы React\n //Контроль свойств компонента\n //Интерфейсные элементы\n //Контекст взаимодействия с сервером\n //Контекст приложения\n //Вспомогательные функции\n //Текстовые ресурсы\n //Подключение компонентов к настройкам приложения\n //Таблица данных\n\n//-----------\n//Тело модуля\n//-----------\n\n//Детализация плановой трудоёмкости по ФОТ\nconst LabPlanFOTDtl = ({\n periodId,\n title,\n onHide\n}) => {\n //Состояние таблицы детализации плановой трудоёмкости по ФОТ ресурса\n const [planFOTDtl, setPlanFOTDtl] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({\n dataLoaded: false,\n columnsDef: [],\n orders: [],\n rows: [],\n reload: true,\n pageNumber: 1,\n morePages: true\n });\n\n //Подключение к контексту приложения\n const {\n configSystemPageSize\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_application__WEBPACK_IMPORTED_MODULE_2__[\"ApplicationСtx\"]);\n\n //Подключение к контексту взаимодействия с сервером\n const {\n executeStored,\n SERV_DATA_TYPE_CLOB\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_backend__WEBPACK_IMPORTED_MODULE_1__[\"BackEndСtx\"]);\n\n //Загрузка детализации плановой трудоёмкости по ФОТ для ресурса\n const loadPlanFOTDtl = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async () => {\n if (planFOTDtl.reload) {\n const data = await executeStored({\n stored: \"PKG_P8PANELS_PROJECTS.JB_PERIODS_PLAN_FOT_LIST\",\n args: {\n NJB_PERIODS: periodId,\n CORDERS: {\n VALUE: (0,_core_utils__WEBPACK_IMPORTED_MODULE_3__.object2Base64XML)(planFOTDtl.orders, {\n arrayNodeName: \"orders\"\n }),\n SDATA_TYPE: SERV_DATA_TYPE_CLOB\n },\n NPAGE_NUMBER: planFOTDtl.pageNumber,\n NPAGE_SIZE: configSystemPageSize,\n NINCLUDE_DEF: planFOTDtl.dataLoaded ? 0 : 1\n },\n respArg: \"COUT\"\n });\n setPlanFOTDtl(pv => ({\n ...pv,\n columnsDef: data.XCOLUMNS_DEF ? [...data.XCOLUMNS_DEF] : pv.columnsDef,\n rows: pv.pageNumber == 1 ? [...(data.XROWS || [])] : [...pv.rows, ...(data.XROWS || [])],\n dataLoaded: true,\n reload: false,\n morePages: (data.XROWS || []).length >= configSystemPageSize\n }));\n }\n }, [periodId, planFOTDtl.reload, planFOTDtl.orders, planFOTDtl.dataLoaded, planFOTDtl.pageNumber, executeStored, configSystemPageSize, SERV_DATA_TYPE_CLOB]);\n\n //При изменении состояния сортировки в детализации плана ФОТ по строке ресурса\n const handlePlanFOTDtlDGOrderChanged = ({\n orders\n }) => setPlanFOTDtl(pv => ({\n ...pv,\n orders,\n pageNumber: 1,\n reload: true\n }));\n\n //При изменении количества отображаемых страниц в в детализации плана ФОТ по строке ресурса\n const handlePlanFOTDtlDGPagesCountChanged = () => setPlanFOTDtl(pv => ({\n ...pv,\n pageNumber: pv.pageNumber + 1,\n reload: true\n }));\n\n //При необходимости обновить данные\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n loadPlanFOTDtl();\n }, [planFOTDtl.reload, loadPlanFOTDtl]);\n\n //Генерация содержимого\n return planFOTDtl.dataLoaded ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_7__[\"default\"], {\n open: true,\n onClose: onHide\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_8__[\"default\"], null, title), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_9__[\"default\"], null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_components_p8p_data_grid__WEBPACK_IMPORTED_MODULE_6__.P8PDataGrid, _extends({}, _config_wrapper__WEBPACK_IMPORTED_MODULE_5__.P8P_DATA_GRID_CONFIG_PROPS, {\n columnsDef: planFOTDtl.columnsDef,\n rows: planFOTDtl.rows,\n size: _components_p8p_data_grid__WEBPACK_IMPORTED_MODULE_6__.P8P_DATA_GRID_SIZE.SMALL,\n morePages: planFOTDtl.morePages,\n reloading: planFOTDtl.reload,\n onOrderChanged: handlePlanFOTDtlDGOrderChanged,\n onPagesCountChanged: handlePlanFOTDtlDGPagesCountChanged\n }))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_10__[\"default\"], null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_11__[\"default\"], {\n onClick: onHide\n }, _app_text__WEBPACK_IMPORTED_MODULE_4__.BUTTONS.CLOSE))) : null;\n};\n\n//Контроль свойств - Детализация плановой трудоёмкости по ФОТ\nLabPlanFOTDtl.propTypes = {\n periodId: (prop_types__WEBPACK_IMPORTED_MODULE_12___default().number).isRequired,\n title: (prop_types__WEBPACK_IMPORTED_MODULE_12___default().string).isRequired,\n onHide: (prop_types__WEBPACK_IMPORTED_MODULE_12___default().func).isRequired\n};\n\n//----------------\n//Интерфейс модуля\n//----------------\n\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/panels/prj_jobs/lab_plan_fot_dtl.js?"); /***/ }), @@ -3788,7 +3788,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ LabPlanJobsDtl: () => (/* binding */ LabPlanJobsDtl)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! prop-types */ \"./node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_13___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_13__);\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Dialog/Dialog.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/DialogTitle/DialogTitle.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/DialogContent/DialogContent.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/DialogActions/DialogActions.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Button/Button.js\");\n/* harmony import */ var _context_backend__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../context/backend */ \"./app/context/backend.js\");\n/* harmony import */ var _context_application__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../context/application */ \"./app/context/application.js\");\n/* harmony import */ var _core_utils__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../core/utils */ \"./app/core/utils.js\");\n/* harmony import */ var _app_text__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../../app.text */ \"./app.text.js\");\n/* harmony import */ var _config_wrapper__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../config_wrapper */ \"./app/config_wrapper.js\");\n/* harmony import */ var _components_p8p_data_grid__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../../components/p8p_data_grid */ \"./app/components/p8p_data_grid.js\");\n/* harmony import */ var _layouts__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./layouts */ \"./app/panels/prj_jobs/layouts.js\");\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n/*\r\n Парус 8 - Панели мониторинга - ПУП - Работы проектов\r\n Компонент панели: Детализация плановой трудоёмкости по графику\r\n*/\n\n//---------------------\n//Подключение библиотек\n//---------------------\n\n //Классы React\n //Контроль свойств компонента\n //Интерфейсные элементы\n //Контекст взаимодействия с сервером\n //Контекст приложения\n //Вспомогательные функции\n //Текстовые ресурсы\n //Подключение компонентов к настройкам приложения\n //Таблица данных\n //Дополнительная разметка и вёрстка клиентских элементов\n\n//------------------------------------\n//Вспомогательные функции и компоненты\n//------------------------------------\n\n//-----------\n//Тело модуля\n//-----------\n\n//Детализация плановой трудоёмкости по графику\nconst LabPlanJobsDtl = ({\n periodId,\n title,\n onHide,\n onProjectClick\n}) => {\n //Состояние таблицы детализации плановой трудоёмкости по графику\n const [planJobsDtl, setPlanJobsDtl] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({\n dataLoaded: false,\n columnsDef: [],\n orders: [],\n rows: [],\n reload: true,\n pageNumber: 1,\n morePages: true\n });\n\n //Подключение к контексту приложения\n const {\n configSystemPageSize\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_application__WEBPACK_IMPORTED_MODULE_2__[\"ApplicationСtx\"]);\n\n //Подключение к контексту взаимодействия с сервером\n const {\n executeStored,\n SERV_DATA_TYPE_CLOB\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_backend__WEBPACK_IMPORTED_MODULE_1__[\"BackEndСtx\"]);\n\n //Загрузка детализации плановой трудоёмкости по графику для ресурса\n const loadPlanJobsDtl = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async () => {\n if (planJobsDtl.reload) {\n const data = await executeStored({\n stored: \"PKG_P8PANELS_PROJECTS.JB_PERIODS_LIST_PLAN_JOBS\",\n args: {\n NJB_PERIODS: periodId,\n CORDERS: {\n VALUE: (0,_core_utils__WEBPACK_IMPORTED_MODULE_3__.object2Base64XML)(planJobsDtl.orders, {\n arrayNodeName: \"orders\"\n }),\n SDATA_TYPE: SERV_DATA_TYPE_CLOB\n },\n NPAGE_NUMBER: planJobsDtl.pageNumber,\n NPAGE_SIZE: configSystemPageSize,\n NINCLUDE_DEF: planJobsDtl.dataLoaded ? 0 : 1\n },\n respArg: \"COUT\"\n });\n setPlanJobsDtl(pv => ({\n ...pv,\n columnsDef: data.XCOLUMNS_DEF ? [...data.XCOLUMNS_DEF] : pv.columnsDef,\n rows: pv.pageNumber == 1 ? [...(data.XROWS || [])] : [...pv.rows, ...(data.XROWS || [])],\n dataLoaded: true,\n reload: false,\n morePages: (data.XROWS || []).length >= configSystemPageSize\n }));\n }\n }, [periodId, planJobsDtl.reload, planJobsDtl.orders, planJobsDtl.dataLoaded, planJobsDtl.pageNumber, executeStored, configSystemPageSize, SERV_DATA_TYPE_CLOB]);\n\n //При изменении состояния сортировки в детализации плановой трудоёмкости по графику\n const handlePlanJobsDtlDGOrderChanged = ({\n orders\n }) => setPlanJobsDtl(pv => ({\n ...pv,\n orders,\n pageNumber: 1,\n reload: true\n }));\n\n //При изменении количества отображаемых страниц в детализации плановой трудоёмкости по графику\n const handlePlanJobsDtlDGPagesCountChanged = () => setPlanJobsDtl(pv => ({\n ...pv,\n pageNumber: pv.pageNumber + 1,\n reload: true\n }));\n\n //При нажатии на проект в таблице детализаци\n const handleProjectClick = ({\n sender\n }) => onProjectClick ? onProjectClick({\n sender\n }) : null;\n\n //При необходимости обновить данные\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n loadPlanJobsDtl();\n }, [planJobsDtl.reload, loadPlanJobsDtl]);\n\n //Генерация содержимого\n return planJobsDtl.dataLoaded ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_8__[\"default\"], {\n open: true,\n onClose: onHide,\n fullWidth: true,\n maxWidth: \"xl\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_9__[\"default\"], null, title), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_10__[\"default\"], null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_components_p8p_data_grid__WEBPACK_IMPORTED_MODULE_6__.P8PDataGrid, _extends({}, _config_wrapper__WEBPACK_IMPORTED_MODULE_5__.P8P_DATA_GRID_CONFIG_PROPS, {\n columnsDef: planJobsDtl.columnsDef,\n rows: planJobsDtl.rows,\n size: _components_p8p_data_grid__WEBPACK_IMPORTED_MODULE_6__.P8P_DATA_GRID_SIZE.SMALL,\n morePages: planJobsDtl.morePages,\n reloading: planJobsDtl.reload,\n valueFormatter: _layouts__WEBPACK_IMPORTED_MODULE_7__.planJobsDtlValueFormatter,\n headCellRender: _layouts__WEBPACK_IMPORTED_MODULE_7__.planJobsDtlHeadCellRender,\n dataCellRender: prms => (0,_layouts__WEBPACK_IMPORTED_MODULE_7__.planJobsDtlDataCellRender)({\n ...prms,\n onProjectClick: handleProjectClick\n }),\n onOrderChanged: handlePlanJobsDtlDGOrderChanged,\n onPagesCountChanged: handlePlanJobsDtlDGPagesCountChanged\n }))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_11__[\"default\"], null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_12__[\"default\"], {\n onClick: onHide\n }, _app_text__WEBPACK_IMPORTED_MODULE_4__.BUTTONS.CLOSE))) : null;\n};\n\n//Контроль свойств - Детализация плановой трудоёмкости по графику\nLabPlanJobsDtl.propTypes = {\n periodId: (prop_types__WEBPACK_IMPORTED_MODULE_13___default().number).isRequired,\n title: (prop_types__WEBPACK_IMPORTED_MODULE_13___default().string).isRequired,\n onHide: (prop_types__WEBPACK_IMPORTED_MODULE_13___default().func).isRequired,\n onProjectClick: (prop_types__WEBPACK_IMPORTED_MODULE_13___default().func)\n};\n\n//----------------\n//Интерфейс модуля\n//----------------\n\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/panels/prj_jobs/lab_plan_jobs_dtl.js?"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ LabPlanJobsDtl: () => (/* binding */ LabPlanJobsDtl)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! prop-types */ \"./node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_13___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_13__);\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Dialog/Dialog.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/DialogTitle/DialogTitle.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/DialogContent/DialogContent.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/DialogActions/DialogActions.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Button/Button.js\");\n/* harmony import */ var _context_backend__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../context/backend */ \"./app/context/backend.js\");\n/* harmony import */ var _context_application__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../context/application */ \"./app/context/application.js\");\n/* harmony import */ var _core_utils__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../core/utils */ \"./app/core/utils.js\");\n/* harmony import */ var _app_text__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../../app.text */ \"./app.text.js\");\n/* harmony import */ var _config_wrapper__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../config_wrapper */ \"./app/config_wrapper.js\");\n/* harmony import */ var _components_p8p_data_grid__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../../components/p8p_data_grid */ \"./app/components/p8p_data_grid.js\");\n/* harmony import */ var _layouts__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./layouts */ \"./app/panels/prj_jobs/layouts.js\");\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n/*\r\n Парус 8 - Панели мониторинга - ПУП - Работы проектов\r\n Компонент панели: Детализация плановой трудоёмкости по графику\r\n*/\n\n//---------------------\n//Подключение библиотек\n//---------------------\n\n //Классы React\n //Контроль свойств компонента\n //Интерфейсные элементы\n //Контекст взаимодействия с сервером\n //Контекст приложения\n //Вспомогательные функции\n //Текстовые ресурсы\n //Подключение компонентов к настройкам приложения\n //Таблица данных\n //Дополнительная разметка и вёрстка клиентских элементов\n\n//------------------------------------\n//Вспомогательные функции и компоненты\n//------------------------------------\n\n//-----------\n//Тело модуля\n//-----------\n\n//Детализация плановой трудоёмкости по графику\nconst LabPlanJobsDtl = ({\n periodId,\n title,\n onHide,\n onProjectClick\n}) => {\n //Состояние таблицы детализации плановой трудоёмкости по графику\n const [planJobsDtl, setPlanJobsDtl] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({\n dataLoaded: false,\n columnsDef: [],\n orders: [],\n rows: [],\n reload: true,\n pageNumber: 1,\n morePages: true\n });\n\n //Подключение к контексту приложения\n const {\n configSystemPageSize\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_application__WEBPACK_IMPORTED_MODULE_2__[\"ApplicationСtx\"]);\n\n //Подключение к контексту взаимодействия с сервером\n const {\n executeStored,\n SERV_DATA_TYPE_CLOB\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_backend__WEBPACK_IMPORTED_MODULE_1__[\"BackEndСtx\"]);\n\n //Загрузка детализации плановой трудоёмкости по графику для ресурса\n const loadPlanJobsDtl = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async () => {\n if (planJobsDtl.reload) {\n const data = await executeStored({\n stored: \"PKG_P8PANELS_PROJECTS.JB_PERIODS_PLAN_JOBS_LIST\",\n args: {\n NJB_PERIODS: periodId,\n CORDERS: {\n VALUE: (0,_core_utils__WEBPACK_IMPORTED_MODULE_3__.object2Base64XML)(planJobsDtl.orders, {\n arrayNodeName: \"orders\"\n }),\n SDATA_TYPE: SERV_DATA_TYPE_CLOB\n },\n NPAGE_NUMBER: planJobsDtl.pageNumber,\n NPAGE_SIZE: configSystemPageSize,\n NINCLUDE_DEF: planJobsDtl.dataLoaded ? 0 : 1\n },\n respArg: \"COUT\"\n });\n setPlanJobsDtl(pv => ({\n ...pv,\n columnsDef: data.XCOLUMNS_DEF ? [...data.XCOLUMNS_DEF] : pv.columnsDef,\n rows: pv.pageNumber == 1 ? [...(data.XROWS || [])] : [...pv.rows, ...(data.XROWS || [])],\n dataLoaded: true,\n reload: false,\n morePages: (data.XROWS || []).length >= configSystemPageSize\n }));\n }\n }, [periodId, planJobsDtl.reload, planJobsDtl.orders, planJobsDtl.dataLoaded, planJobsDtl.pageNumber, executeStored, configSystemPageSize, SERV_DATA_TYPE_CLOB]);\n\n //При изменении состояния сортировки в детализации плановой трудоёмкости по графику\n const handlePlanJobsDtlDGOrderChanged = ({\n orders\n }) => setPlanJobsDtl(pv => ({\n ...pv,\n orders,\n pageNumber: 1,\n reload: true\n }));\n\n //При изменении количества отображаемых страниц в детализации плановой трудоёмкости по графику\n const handlePlanJobsDtlDGPagesCountChanged = () => setPlanJobsDtl(pv => ({\n ...pv,\n pageNumber: pv.pageNumber + 1,\n reload: true\n }));\n\n //При нажатии на проект в таблице детализаци\n const handleProjectClick = ({\n sender\n }) => onProjectClick ? onProjectClick({\n sender\n }) : null;\n\n //При необходимости обновить данные\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n loadPlanJobsDtl();\n }, [planJobsDtl.reload, loadPlanJobsDtl]);\n\n //Генерация содержимого\n return planJobsDtl.dataLoaded ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_8__[\"default\"], {\n open: true,\n onClose: onHide,\n fullWidth: true,\n maxWidth: \"xl\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_9__[\"default\"], null, title), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_10__[\"default\"], null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_components_p8p_data_grid__WEBPACK_IMPORTED_MODULE_6__.P8PDataGrid, _extends({}, _config_wrapper__WEBPACK_IMPORTED_MODULE_5__.P8P_DATA_GRID_CONFIG_PROPS, {\n columnsDef: planJobsDtl.columnsDef,\n rows: planJobsDtl.rows,\n size: _components_p8p_data_grid__WEBPACK_IMPORTED_MODULE_6__.P8P_DATA_GRID_SIZE.SMALL,\n morePages: planJobsDtl.morePages,\n reloading: planJobsDtl.reload,\n valueFormatter: _layouts__WEBPACK_IMPORTED_MODULE_7__.planJobsDtlValueFormatter,\n headCellRender: _layouts__WEBPACK_IMPORTED_MODULE_7__.planJobsDtlHeadCellRender,\n dataCellRender: prms => (0,_layouts__WEBPACK_IMPORTED_MODULE_7__.planJobsDtlDataCellRender)({\n ...prms,\n onProjectClick: handleProjectClick\n }),\n onOrderChanged: handlePlanJobsDtlDGOrderChanged,\n onPagesCountChanged: handlePlanJobsDtlDGPagesCountChanged\n }))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_11__[\"default\"], null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_12__[\"default\"], {\n onClick: onHide\n }, _app_text__WEBPACK_IMPORTED_MODULE_4__.BUTTONS.CLOSE))) : null;\n};\n\n//Контроль свойств - Детализация плановой трудоёмкости по графику\nLabPlanJobsDtl.propTypes = {\n periodId: (prop_types__WEBPACK_IMPORTED_MODULE_13___default().number).isRequired,\n title: (prop_types__WEBPACK_IMPORTED_MODULE_13___default().string).isRequired,\n onHide: (prop_types__WEBPACK_IMPORTED_MODULE_13___default().func).isRequired,\n onProjectClick: (prop_types__WEBPACK_IMPORTED_MODULE_13___default().func)\n};\n\n//----------------\n//Интерфейс модуля\n//----------------\n\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/panels/prj_jobs/lab_plan_jobs_dtl.js?"); /***/ }), @@ -3810,7 +3810,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ PrjJobs: () => (/* binding */ PrjJobs)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! prop-types */ \"./node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_16___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_16__);\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Dialog/Dialog.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/DialogTitle/DialogTitle.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/DialogContent/DialogContent.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/TextField/TextField.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/DialogActions/DialogActions.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Button/Button.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/List/List.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/ListItemButton/ListItemButton.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/ListItemIcon/ListItemIcon.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Icon/Icon.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/ListItemText/ListItemText.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_22__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Typography/Typography.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_23__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Box/Box.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_24__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Fab/Fab.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_25__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Drawer/Drawer.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_26__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/ListItem/ListItem.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_27__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Divider/Divider.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_28__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Grid/Grid.js\");\n/* harmony import */ var _context_backend__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../context/backend */ \"./app/context/backend.js\");\n/* harmony import */ var _context_messaging__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../context/messaging */ \"./app/context/messaging.js\");\n/* harmony import */ var _context_application__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../context/application */ \"./app/context/application.js\");\n/* harmony import */ var _core_utils__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../core/utils */ \"./app/core/utils.js\");\n/* harmony import */ var _config_wrapper__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../config_wrapper */ \"./app/config_wrapper.js\");\n/* harmony import */ var _components_p8p_gantt__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../../components/p8p_gantt */ \"./app/components/p8p_gantt.js\");\n/* harmony import */ var _app_text__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../../../app.text */ \"./app.text.js\");\n/* harmony import */ var _res_mon__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./res_mon */ \"./app/panels/prj_jobs/res_mon.js\");\n/* harmony import */ var _layouts__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./layouts */ \"./app/panels/prj_jobs/layouts.js\");\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n/*\r\n Парус 8 - Панели мониторинга - ПУП - Работы проектов\r\n Панель мониторинга: Корневая панель работ проектов\r\n*/\n\n//---------------------\n//Подключение библиотек\n//---------------------\n\n //Классы React\n //Контроль свойств компонента\n //Интерфейсные элементы\n //Контекст взаимодействия с сервером\n //Контекст сообщений\n //Контекст приложения\n //Вспомогательные функции\n //Подключение компонентов к настройкам приложения\n //Диаграмма Ганта\n //Вспомогательные функции\n //Текстовые ресурсы и константы\n //Монитор ресурсов\n //Дополнительная разметка и вёрстка клиентских элементов\n\n//---------\n//Константы\n//---------\n\n//Высота диаграммы Ганта\nconst GANTT_HEIGHT = \"75vh\";\n\n//Ширина диаграммы Ганта\nconst GANTT_WIDTH = \"98vw\";\n\n//Стили\nconst STYLES = {\n PROJECTS_LIST_ITEM_NOJOBS: {\n backgroundColor: \"#ff000045\"\n },\n PROJECTS_LIST_ITEM_PRIMARY: {\n wordWrap: \"break-word\"\n },\n PROJECTS_LIST_ITEM_SECONDARY: {\n wordWrap: \"break-word\",\n fontSize: \"0.5rem\",\n textTransform: \"uppercase\"\n },\n PROJECTS_LIST_ITEM_SECONDARY_NOJOBS: {\n color: \"red\"\n },\n PROJECTS_LIST_ITEM_SECONDARY_NOEDIT: {\n color: \"gray\"\n },\n PROJECTS_LIST_ITEM_SECONDARY_CHANGED: {\n color: \"green\"\n },\n PROJECTS_BUTTON: {\n position: \"absolute\"\n },\n PROJECTS_DRAWER: {\n width: \"250px\",\n flexShrink: 0,\n [`& .MuiDrawer-paper`]: {\n width: \"250px\",\n boxSizing: \"border-box\"\n }\n },\n GANTT_CONTAINER: {\n height: GANTT_HEIGHT,\n width: GANTT_WIDTH\n },\n GANTT_TITLE: {\n paddingLeft: \"100px\",\n paddingRight: \"120px\"\n },\n PERIODS_BUTTON: {\n position: \"absolute\",\n right: \"20px\"\n },\n PERIODS_DRAWER: {\n width: \"1200px\",\n flexShrink: 0,\n [`& .MuiDrawer-paper`]: {\n width: \"1200px\",\n boxSizing: \"border-box\"\n }\n }\n};\n\n//Единицы измерения длительности\nconst DURATION_MEAS = {\n 0: \"День\",\n 1: \"Неделя\",\n 2: \"Декада\",\n 3: \"Месяц\",\n 4: \"Квартал\",\n 5: \"Год\"\n};\n\n//------------------------------------\n//Вспомогательные функции и компоненты\n//------------------------------------\n\n//Диалог параметров инициализации панели\nconst InitDialog = ({\n dateBegin,\n dateFact,\n onOk,\n onCancel\n}) => {\n //Собственное состояние - значения с-по\n const [values, setValues] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({\n dateBegin: (0,_core_utils__WEBPACK_IMPORTED_MODULE_4__.formatDateJSONDateOnly)(dateBegin),\n dateFact: (0,_core_utils__WEBPACK_IMPORTED_MODULE_4__.formatDateJSONDateOnly)(dateFact)\n });\n\n //Отработка воода значения в фильтр\n const handleValueTextFieldChanged = e => setValues(prev => ({\n ...prev,\n [e.target.name]: e.target.value\n }));\n\n //Генерация содержимого\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_10__[\"default\"], {\n open: true,\n \"aria-labelledby\": \"init-dialog-title\",\n \"aria-describedby\": \"init-dialog-description\",\n onClose: () => onCancel ? onCancel() : null\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_11__[\"default\"], null, \"\\u041F\\u0430\\u0440\\u0430\\u043C\\u0435\\u0442\\u0440\\u044B \\u0438\\u043D\\u0438\\u0446\\u0438\\u0430\\u043B\\u0438\\u0437\\u0430\\u0446\\u0438\\u0438\"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_12__[\"default\"], null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_13__[\"default\"], {\n style: {\n padding: \"10px\"\n },\n name: \"dateBegin\",\n type: \"date\",\n value: values.dateBegin,\n onChange: handleValueTextFieldChanged,\n label: \"\\u041D\\u0430\\u0447\\u0430\\u043B\\u043E (\\u0431\\u0443\\u0434\\u0435\\u0442 \\u0438\\u0441\\u043F\\u043E\\u043B\\u044C\\u0437\\u043E\\u0432\\u0430\\u043D \\u043F\\u0435\\u0440\\u0432\\u044B\\u0439 \\u0434\\u0435\\u043D\\u044C \\u043C\\u0435\\u0441\\u044F\\u0446\\u0430)\",\n variant: \"standard\",\n fullWidth: true\n }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_13__[\"default\"], {\n style: {\n padding: \"10px\"\n },\n name: \"dateFact\",\n type: \"date\",\n value: values.dateFact,\n onChange: handleValueTextFieldChanged,\n label: \"\\u0424\\u0430\\u043A\\u0442 \\u043D\\u0430 (\\u0431\\u0443\\u0434\\u0435\\u0442 \\u0438\\u0441\\u043F\\u043E\\u043B\\u044C\\u0437\\u043E\\u0432\\u0430\\u043D \\u043F\\u043E\\u0441\\u043B\\u0435\\u0434\\u043D\\u0438\\u0439 \\u0434\\u0435\\u043D\\u044C \\u043C\\u0435\\u0441\\u044F\\u0446\\u0430)\",\n variant: \"standard\",\n fullWidth: true\n })), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_14__[\"default\"], null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_15__[\"default\"], {\n onClick: () => onOk ? onOk({\n dateBegin: new Date(values.dateBegin),\n dateFact: new Date(values.dateFact)\n }) : null\n }, _app_text__WEBPACK_IMPORTED_MODULE_7__.BUTTONS.OK), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_15__[\"default\"], {\n onClick: () => onCancel ? onCancel() : null\n }, _app_text__WEBPACK_IMPORTED_MODULE_7__.BUTTONS.CANCEL)));\n};\n\n//Контроль свойств - Диалог параметров инициализации панели\nInitDialog.propTypes = {\n dateBegin: prop_types__WEBPACK_IMPORTED_MODULE_16___default().instanceOf(Date).isRequired,\n dateFact: prop_types__WEBPACK_IMPORTED_MODULE_16___default().instanceOf(Date).isRequired,\n onOk: (prop_types__WEBPACK_IMPORTED_MODULE_16___default().func),\n onCancel: (prop_types__WEBPACK_IMPORTED_MODULE_16___default().func)\n};\n\n//Список проектов\nconst ProjectsList = ({\n projects = [],\n selectedProject,\n onClick\n} = {}) => {\n //Подключение к контексту сообщений\n const {\n InlineMsgErr\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_messaging__WEBPACK_IMPORTED_MODULE_2__[\"MessagingСtx\"]);\n\n //Генерация содержимого\n return projects.length > 0 ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_17__[\"default\"], null, projects.map(p => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_18__[\"default\"], {\n key: p.NRN,\n sx: p.NJOBS == 0 ? STYLES.PROJECTS_LIST_ITEM_NOJOBS : null,\n selected: p.NRN === selectedProject,\n onClick: () => onClick ? onClick(p) : null\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_19__[\"default\"], null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_20__[\"default\"], {\n title: p.NEDITABLE == 1 ? \"Можно редактировать\" : \"Редактирование недоступно\"\n }, p.NEDITABLE == 1 ? \"edit\" : \"edit_off\")), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_21__[\"default\"], {\n primary: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_22__[\"default\"], {\n sx: STYLES.PROJECTS_LIST_ITEM_PRIMARY\n }, p.SNAME),\n secondary: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_22__[\"default\"], {\n sx: {\n ...STYLES.PROJECTS_LIST_ITEM_SECONDARY,\n ...(p.NJOBS == 0 ? STYLES.PROJECTS_LIST_ITEM_SECONDARY_NOJOBS : p.NCHANGED == 1 ? STYLES.PROJECTS_LIST_ITEM_SECONDARY_CHANGED : STYLES.PROJECTS_LIST_ITEM_SECONDARY_NOEDIT)\n }\n }, p.NJOBS == 1 ? p.NEDITABLE == 1 ? p.NCHANGED == 1 ? \"Изменён\" : \"Не изменён\" : \"Редактирование недоступно\" : \"Работы не определены\")\n })))) : /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(InlineMsgErr, {\n okBtn: false,\n text: \"Нет доступных проектов\"\n });\n};\n\n//Контроль свойств - Список проектов\nProjectsList.propTypes = {\n projects: (prop_types__WEBPACK_IMPORTED_MODULE_16___default().array),\n selectedProject: (prop_types__WEBPACK_IMPORTED_MODULE_16___default().number),\n onClick: (prop_types__WEBPACK_IMPORTED_MODULE_16___default().func)\n};\n\n//-----------\n//Тело модуля\n//-----------\n\n//Корневая панель работ проектов\nconst PrjJobs = () => {\n //Собственное состояние\n let [state, setState] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({\n needSave: false,\n showProjectsList: false,\n showPeriodsList: false,\n init: false,\n dateBegin: null,\n dateFact: null,\n durationMeas: null,\n labMeas: null,\n resourceStatus: null,\n ident: null,\n projects: [],\n projectsLoaded: false,\n selectedProjectJobsLoaded: false,\n selectedProject: null,\n selectedProjectDocRn: null,\n selectedProjectGanttDef: {},\n selectedProjectTasks: [],\n showInitDialog: false\n });\n\n //Подключение к контексту приложения\n const {\n pOnlineShowDocument\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_application__WEBPACK_IMPORTED_MODULE_3__[\"ApplicationСtx\"]);\n\n //Подключение к контексту сообщений\n const {\n InlineMsgInfo\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_messaging__WEBPACK_IMPORTED_MODULE_2__[\"MessagingСtx\"]);\n\n //Подключение к контексту взаимодействия с сервером\n const {\n executeStored\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_backend__WEBPACK_IMPORTED_MODULE_1__[\"BackEndСtx\"]);\n\n //Загрузка списка проектов\n const loadProjects = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async (force = false) => {\n if (!state.projectsLoaded || force) {\n const data = await executeStored({\n stored: \"PKG_P8PANELS_PROJECTS.JB_PRJCTS_LIST\",\n args: {\n NIDENT: state.ident\n },\n respArg: \"COUT\",\n isArray: name => name === \"XPROJECTS\"\n });\n setState(pv => ({\n ...pv,\n projectsLoaded: true,\n projects: [...(data?.XPROJECTS || [])]\n }));\n }\n }, [executeStored, state.ident, state.projectsLoaded]);\n\n //Загрузка списка работ проекта\n const loadProjectJobs = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async (tasksOnly = false) => {\n const data = await executeStored({\n stored: \"PKG_P8PANELS_PROJECTS.JB_JOBS_LIST\",\n args: {\n NIDENT: state.ident,\n NPRN: state.selectedProject,\n NINCLUDE_DEF: tasksOnly === false ? 1 : 0\n },\n attributeValueProcessor: (name, val) => name == \"numb\" ? undefined : [\"start\", \"end\"].includes(name) ? (0,_core_utils__WEBPACK_IMPORTED_MODULE_4__.formatDateJSONDateOnly)(val) : val,\n respArg: \"COUT\"\n });\n setState(pv => ({\n ...pv,\n selectedProjectJobsLoaded: true,\n selectedProjectGanttDef: tasksOnly === true ? {\n ...pv.selectedProjectGanttDef\n } : data.XGANTT_DEF ? {\n ...data.XGANTT_DEF\n } : {},\n selectedProjectTasks: [...data.XGANTT_TASKS]\n }));\n }, [executeStored, state.ident, state.selectedProject]);\n\n //Изменение работы в графике\n const modifyJob = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async (job, dateFrom, dateTo, dateBegin, dateFact, durationMeas) => {\n let data = null;\n try {\n data = await executeStored({\n stored: \"PKG_P8PANELS_PROJECTS.JB_JOBS_MODIFY_PERIOD\",\n args: {\n NJB_JOBS: job,\n DDATE_FROM: dateFrom,\n DDATE_TO: dateTo,\n DBEGIN: dateBegin,\n DFACT: dateFact,\n NDURATION_MEAS: durationMeas\n }\n });\n if (data?.NRESOURCE_STATUS != -1) {\n setState(pv => ({\n ...pv,\n resourceStatus: data.NRESOURCE_STATUS,\n needSave: true\n }));\n loadProjects(true);\n }\n } finally {\n loadProjectJobs(true);\n }\n }, [executeStored, loadProjectJobs, loadProjects]);\n\n //Сохранение буфера балансировки в проекты\n const saveProjects = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async () => {\n const data = await executeStored({\n stored: \"PKG_P8PANELS_PROJECTS.JB_SAVE\",\n args: {\n NIDENT: state.ident\n },\n respArg: \"COUT\"\n });\n setState(pv => ({\n ...pv,\n needSave: false,\n projects: [...(data?.XPROJECTS || [])]\n }));\n }, [executeStored, state.ident]);\n\n //Инициализация данных балансировки\n const initJobs = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async () => {\n if (!state.init) {\n const data = await executeStored({\n stored: \"PKG_P8PANELS_PROJECTS.JB_INIT\",\n args: {\n DBEGIN: state.dateBegin ? state.dateBegin : null,\n DFACT: state.dateFact ? state.dateFact : null,\n NDURATION_MEAS: state.durationMeas,\n SLAB_MEAS: state.labMeas,\n NIDENT: state.ident\n }\n });\n setState(pv => ({\n ...pv,\n init: true,\n reInit: false,\n dateBegin: new Date(data.DBEGIN),\n dateFact: new Date(data.DFACT),\n durationMeas: data.NDURATION_MEAS,\n labMeas: data.SLAB_MEAS,\n resourceStatus: data.NRESOURCE_STATUS,\n ident: data.NIDENT\n }));\n }\n }, [state.init, state.dateBegin, state.dateFact, state.durationMeas, state.labMeas, state.ident, executeStored]);\n\n //Грузим список проектов при смене идентификатора процесса\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n if (state.ident) loadProjects();\n }, [state.ident, loadProjects]);\n\n //При смене выбранного проекта\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n if (state.selectedProject) loadProjectJobs(false);\n }, [state.selectedProject, loadProjectJobs]);\n\n //При изменении флага инициализации\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n initJobs();\n }, [state.init, initJobs]);\n\n //Выбор проекта\n const selectPoject = (project, projectDocRn) => {\n setState(pv => ({\n ...pv,\n selectedProject: project,\n selectedProjectDocRn: projectDocRn,\n selectedProjectJobsLoaded: false,\n selectedProjectTasks: [],\n selectedProjectGanttDef: {},\n showProjectsList: false\n }));\n };\n\n //Сброс выбора проекта\n const unselectProject = () => setState(pv => ({\n ...pv,\n selectedProjectJobsLoaded: false,\n selectedProject: null,\n selectedProjectDocRn: null,\n selectedProjectTasks: [],\n selectedProjectGanttDef: {},\n showProjectsList: false\n }));\n\n //Обработка нажатия на элемент в списке проектов\n const handleProjectClick = project => {\n if (state.selectedProject != project.NRN) selectPoject(project.NRN, project.NPROJECT);else unselectProject();\n };\n\n //Отработка нажатия на заголовок плана-графика\n const handleTitleClick = () => state.selectedProjectDocRn ? pOnlineShowDocument({\n unitCode: \"Projects\",\n document: state.selectedProjectDocRn\n }) : null;\n\n //Обработка измненения сроков задачи в диаграмме Гантта\n const handleTaskDatesChange = ({\n task,\n start,\n end,\n isMain\n }) => {\n if (isMain) modifyJob(task.rn, new Date(start), new Date(end), new Date(state.dateBegin), new Date(state.dateFact), state.durationMeas);\n };\n\n //Отработка нажатия на отображения диалога параметров инициализации панели\n const handleShowInitDialogClick = () => setState(pv => ({\n ...pv,\n showInitDialog: true\n }));\n\n //Отработка нажатия на \"ОК\" в диалоге параметров инициализации панели\n const handleOKInitDialogClick = values => setState(pv => ({\n ...pv,\n dateBegin: values.dateBegin,\n dateFact: values.dateFact,\n showInitDialog: false,\n init: false\n }));\n\n //Отработка нажатия на \"Отмена\" в диалоге параметров инициализации панели\n const handleCancelInitDialogClick = () => setState(pv => ({\n ...pv,\n showInitDialog: false\n }));\n\n //Обработка нажатия на сохранение данных в проект\n const handleSaveToProjectsClick = () => saveProjects();\n\n //Обработка нажатия на проект в таблице детализации трудоёмкости по плану-графику монитора ресурсов\n const handlePlanJobsDtlProjectClick = ({\n sender\n }) => {\n setState(pv => ({\n ...pv,\n showPeriodsList: false\n }));\n if (state.selectedProject != sender.NJB_PRJCTS) selectPoject(sender.NJB_PRJCTS, sender.NPROJECT);\n };\n\n //Генерация содержимого\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_23__[\"default\"], {\n p: 2\n }, state.showInitDialog ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(InitDialog, {\n dateBegin: state.dateBegin,\n dateFact: state.dateFact,\n onOk: handleOKInitDialogClick,\n onCancel: handleCancelInitDialogClick\n }) : null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_24__[\"default\"], {\n variant: \"extended\",\n sx: STYLES.PROJECTS_BUTTON,\n onClick: () => setState(pv => ({\n ...pv,\n showProjectsList: !pv.showProjectsList\n }))\n }, \"\\u041F\\u0440\\u043E\\u0435\\u043A\\u0442\\u044B\", state.needSave ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), null, \"\\xA0\\xA0\", /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_20__[\"default\"], {\n sx: {\n color: \"orange\"\n }\n }, \"save\")) : null), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_25__[\"default\"], {\n anchor: \"left\",\n open: state.showProjectsList,\n onClose: () => setState(pv => ({\n ...pv,\n showProjectsList: false\n })),\n sx: STYLES.PROJECTS_DRAWER\n }, state.projectsLoaded ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_17__[\"default\"], null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_26__[\"default\"], null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_21__[\"default\"], {\n secondary: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"b\", null, \"\\u041D\\u0430\\u0447\\u0430\\u043B\\u043E: \"), (0,_core_utils__WEBPACK_IMPORTED_MODULE_4__.formatDateRF)(state.dateBegin), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"br\", null), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"b\", null, \"\\u0424\\u0430\\u043A\\u0442 \\u043D\\u0430: \"), (0,_core_utils__WEBPACK_IMPORTED_MODULE_4__.formatDateRF)(state.dateFact), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"br\", null), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"b\", null, \"\\u0414\\u043B\\u0438\\u0442\\u0435\\u043B\\u044C\\u043D\\u043E\\u0441\\u0442\\u044C: \"), DURATION_MEAS[state.durationMeas], /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"br\", null), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"b\", null, \"\\u0422\\u0440\\u0443\\u0434\\u043E\\u0451\\u043C\\u043A\\u043E\\u0441\\u0442\\u044C: \"), state.labMeas)\n })), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_26__[\"default\"], null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_15__[\"default\"], {\n fullWidth: true,\n variant: \"contained\",\n startIcon: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_20__[\"default\"], null, \"refresh\"),\n onClick: handleShowInitDialogClick\n }, \"\\u041F\\u0435\\u0440\\u0435\\u0444\\u043E\\u0440\\u043C\\u0438\\u0440\\u043E\\u0432\\u0430\\u0442\\u044C...\"))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_27__[\"default\"], null), state.needSave ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_17__[\"default\"], null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_26__[\"default\"], null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_15__[\"default\"], {\n fullWidth: true,\n color: \"warning\",\n variant: \"contained\",\n startIcon: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_20__[\"default\"], null, \"save\"),\n onClick: handleSaveToProjectsClick\n }, \"\\u0421\\u043E\\u0445\\u0440\\u0430\\u043D\\u0438\\u0442\\u044C\"))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_27__[\"default\"], null)) : null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(ProjectsList, {\n projects: state.projects,\n selectedProject: state.selectedProject,\n onClick: handleProjectClick\n })) : null), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_24__[\"default\"], {\n variant: \"extended\",\n sx: STYLES.PERIODS_BUTTON,\n onClick: () => setState(pv => ({\n ...pv,\n showPeriodsList: !pv.showPeriodsList\n }))\n }, \"\\u0420\\u0435\\u0441\\u0443\\u0440\\u0441\\u044B\", [0, 1].includes(state.resourceStatus) ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), null, \"\\xA0\\xA0\", /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_20__[\"default\"], {\n sx: {\n color: state.resourceStatus === 0 ? \"green\" : \"red\"\n }\n }, state.resourceStatus === 0 ? \"done\" : \"error\")) : null), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_25__[\"default\"], {\n anchor: \"right\",\n open: state.showPeriodsList,\n onClose: () => setState(pv => ({\n ...pv,\n showPeriodsList: false\n })),\n sx: STYLES.PERIODS_DRAWER\n }, state.ident ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_res_mon__WEBPACK_IMPORTED_MODULE_8__.ResMon, {\n ident: state.ident,\n onPlanJobsDtlProjectClick: handlePlanJobsDtlProjectClick\n }) : null), state.init == true ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_28__[\"default\"], {\n container: true,\n spacing: 1\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_28__[\"default\"], {\n item: true,\n xs: 12\n }, state.selectedProjectJobsLoaded ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_23__[\"default\"], {\n sx: STYLES.GANTT_CONTAINER,\n p: 1\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_components_p8p_gantt__WEBPACK_IMPORTED_MODULE_6__.P8PGantt, _extends({}, _config_wrapper__WEBPACK_IMPORTED_MODULE_5__.P8P_GANTT_CONFIG_PROPS, state.selectedProjectGanttDef, {\n height: GANTT_HEIGHT,\n titleStyle: STYLES.GANTT_TITLE,\n onTitleClick: handleTitleClick,\n tasks: state.selectedProjectTasks,\n onTaskDatesChange: handleTaskDatesChange,\n taskAttributeRenderer: _layouts__WEBPACK_IMPORTED_MODULE_9__.taskAttributeRenderer\n }))) : !state.selectedProject ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(InlineMsgInfo, {\n okBtn: false,\n text: \"Укажите проект для отображения его плана-графика\"\n }) : null)) : null);\n};\n\n//----------------\n//Интерфейс модуля\n//----------------\n\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/panels/prj_jobs/prj_jobs.js?"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ PrjJobs: () => (/* binding */ PrjJobs)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! prop-types */ \"./node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_16___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_16__);\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Dialog/Dialog.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/DialogTitle/DialogTitle.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/DialogContent/DialogContent.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/TextField/TextField.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/DialogActions/DialogActions.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Button/Button.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/List/List.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/ListItem/ListItem.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/ListItemText/ListItemText.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Icon/Icon.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/ListItemButton/ListItemButton.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_22__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/ListItemIcon/ListItemIcon.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_23__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Typography/Typography.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_24__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Box/Box.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_25__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Fab/Fab.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_26__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Drawer/Drawer.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_27__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Divider/Divider.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_28__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Grid/Grid.js\");\n/* harmony import */ var _context_backend__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../context/backend */ \"./app/context/backend.js\");\n/* harmony import */ var _context_messaging__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../context/messaging */ \"./app/context/messaging.js\");\n/* harmony import */ var _context_application__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../context/application */ \"./app/context/application.js\");\n/* harmony import */ var _core_utils__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../core/utils */ \"./app/core/utils.js\");\n/* harmony import */ var _config_wrapper__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../config_wrapper */ \"./app/config_wrapper.js\");\n/* harmony import */ var _components_p8p_gantt__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../../components/p8p_gantt */ \"./app/components/p8p_gantt.js\");\n/* harmony import */ var _app_text__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../../../app.text */ \"./app.text.js\");\n/* harmony import */ var _res_mon__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./res_mon */ \"./app/panels/prj_jobs/res_mon.js\");\n/* harmony import */ var _layouts__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./layouts */ \"./app/panels/prj_jobs/layouts.js\");\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n/*\r\n Парус 8 - Панели мониторинга - ПУП - Работы проектов\r\n Панель мониторинга: Корневая панель работ проектов\r\n*/\n\n//---------------------\n//Подключение библиотек\n//---------------------\n\n //Классы React\n //Контроль свойств компонента\n //Интерфейсные элементы\n //Контекст взаимодействия с сервером\n //Контекст сообщений\n //Контекст приложения\n //Вспомогательные функции\n //Подключение компонентов к настройкам приложения\n //Диаграмма Ганта\n //Вспомогательные функции\n //Текстовые ресурсы и константы\n //Монитор ресурсов\n //Дополнительная разметка и вёрстка клиентских элементов\n\n//---------\n//Константы\n//---------\n\n//Высота диаграммы Ганта\nconst GANTT_HEIGHT = \"75vh\";\n\n//Ширина диаграммы Ганта\nconst GANTT_WIDTH = \"98vw\";\n\n//Стили\nconst STYLES = {\n PROJECTS_LIST_ITEM_NOJOBS: {\n backgroundColor: \"#ff000045\"\n },\n PROJECTS_LIST_ITEM_PRIMARY: {\n wordWrap: \"break-word\"\n },\n PROJECTS_LIST_ITEM_SECONDARY: {\n wordWrap: \"break-word\",\n fontSize: \"0.5rem\",\n textTransform: \"uppercase\"\n },\n PROJECTS_LIST_ITEM_SECONDARY_NOJOBS: {\n color: \"red\"\n },\n PROJECTS_LIST_ITEM_SECONDARY_NOEDIT: {\n color: \"gray\"\n },\n PROJECTS_LIST_ITEM_SECONDARY_CHANGED: {\n color: \"green\"\n },\n PROJECTS_BUTTON: {\n position: \"absolute\"\n },\n PROJECTS_DRAWER: {\n width: \"250px\",\n flexShrink: 0,\n [`& .MuiDrawer-paper`]: {\n width: \"250px\",\n boxSizing: \"border-box\"\n }\n },\n GANTT_CONTAINER: {\n height: GANTT_HEIGHT,\n width: GANTT_WIDTH\n },\n GANTT_TITLE: {\n paddingLeft: \"100px\",\n paddingRight: \"120px\"\n },\n PERIODS_BUTTON: {\n position: \"absolute\",\n right: \"20px\"\n },\n PERIODS_DRAWER: {\n width: \"1200px\",\n flexShrink: 0,\n [`& .MuiDrawer-paper`]: {\n width: \"1200px\",\n boxSizing: \"border-box\"\n }\n }\n};\n\n//------------------------------------\n//Вспомогательные функции и компоненты\n//------------------------------------\n\n//Диалог параметров инициализации панели\nconst InitPrmsDialog = ({\n dateBegin,\n dateFact,\n onOk,\n onCancel\n}) => {\n //Собственное состояние - значения с-по\n const [values, setValues] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({\n dateBegin: (0,_core_utils__WEBPACK_IMPORTED_MODULE_4__.formatDateJSONDateOnly)(dateBegin),\n dateFact: (0,_core_utils__WEBPACK_IMPORTED_MODULE_4__.formatDateJSONDateOnly)(dateFact)\n });\n\n //Отработка воода значения в фильтр\n const handleValueTextFieldChanged = e => setValues(prev => ({\n ...prev,\n [e.target.name]: e.target.value\n }));\n\n //Генерация содержимого\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_10__[\"default\"], {\n open: true,\n \"aria-labelledby\": \"init-dialog-title\",\n \"aria-describedby\": \"init-dialog-description\",\n onClose: () => onCancel ? onCancel() : null\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_11__[\"default\"], null, \"\\u041F\\u0430\\u0440\\u0430\\u043C\\u0435\\u0442\\u0440\\u044B \\u0438\\u043D\\u0438\\u0446\\u0438\\u0430\\u043B\\u0438\\u0437\\u0430\\u0446\\u0438\\u0438\"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_12__[\"default\"], null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_13__[\"default\"], {\n style: {\n padding: \"10px\"\n },\n name: \"dateBegin\",\n type: \"date\",\n value: values.dateBegin,\n onChange: handleValueTextFieldChanged,\n label: \"\\u041D\\u0430\\u0447\\u0430\\u043B\\u043E (\\u0431\\u0443\\u0434\\u0435\\u0442 \\u0438\\u0441\\u043F\\u043E\\u043B\\u044C\\u0437\\u043E\\u0432\\u0430\\u043D \\u043F\\u0435\\u0440\\u0432\\u044B\\u0439 \\u0434\\u0435\\u043D\\u044C \\u043C\\u0435\\u0441\\u044F\\u0446\\u0430)\",\n variant: \"standard\",\n fullWidth: true\n }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_13__[\"default\"], {\n style: {\n padding: \"10px\"\n },\n name: \"dateFact\",\n type: \"date\",\n value: values.dateFact,\n onChange: handleValueTextFieldChanged,\n label: \"\\u0424\\u0430\\u043A\\u0442 \\u043D\\u0430 (\\u0431\\u0443\\u0434\\u0435\\u0442 \\u0438\\u0441\\u043F\\u043E\\u043B\\u044C\\u0437\\u043E\\u0432\\u0430\\u043D \\u043F\\u043E\\u0441\\u043B\\u0435\\u0434\\u043D\\u0438\\u0439 \\u0434\\u0435\\u043D\\u044C \\u043C\\u0435\\u0441\\u044F\\u0446\\u0430)\",\n variant: \"standard\",\n fullWidth: true\n })), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_14__[\"default\"], null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_15__[\"default\"], {\n onClick: () => onOk ? onOk({\n dateBegin: new Date(values.dateBegin),\n dateFact: new Date(values.dateFact)\n }) : null\n }, _app_text__WEBPACK_IMPORTED_MODULE_7__.BUTTONS.OK), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_15__[\"default\"], {\n onClick: () => onCancel ? onCancel() : null\n }, _app_text__WEBPACK_IMPORTED_MODULE_7__.BUTTONS.CANCEL)));\n};\n\n//Контроль свойств - Диалог параметров инициализации панели\nInitPrmsDialog.propTypes = {\n dateBegin: prop_types__WEBPACK_IMPORTED_MODULE_16___default().instanceOf(Date).isRequired,\n dateFact: prop_types__WEBPACK_IMPORTED_MODULE_16___default().instanceOf(Date).isRequired,\n onOk: (prop_types__WEBPACK_IMPORTED_MODULE_16___default().func),\n onCancel: (prop_types__WEBPACK_IMPORTED_MODULE_16___default().func)\n};\n\n//Область параметров инициализации панели\nconst InitPrmsArea = ({\n dateBegin,\n dateFact,\n durationMeasCode,\n labMeasCode,\n onClick\n}) => {\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_17__[\"default\"], null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_18__[\"default\"], null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_19__[\"default\"], {\n secondary: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"b\", null, \"\\u041D\\u0430\\u0447\\u0430\\u043B\\u043E: \"), (0,_core_utils__WEBPACK_IMPORTED_MODULE_4__.formatDateRF)(dateBegin), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"br\", null), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"b\", null, \"\\u0424\\u0430\\u043A\\u0442 \\u043D\\u0430: \"), (0,_core_utils__WEBPACK_IMPORTED_MODULE_4__.formatDateRF)(dateFact), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"br\", null), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"b\", null, \"\\u0414\\u043B\\u0438\\u0442\\u0435\\u043B\\u044C\\u043D\\u043E\\u0441\\u0442\\u044C: \"), durationMeasCode, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"br\", null), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"b\", null, \"\\u0422\\u0440\\u0443\\u0434\\u043E\\u0451\\u043C\\u043A\\u043E\\u0441\\u0442\\u044C: \"), labMeasCode)\n })), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_18__[\"default\"], null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_15__[\"default\"], {\n fullWidth: true,\n variant: \"contained\",\n startIcon: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_20__[\"default\"], null, \"refresh\"),\n onClick: onClick ? onClick : null\n }, \"\\u041F\\u0435\\u0440\\u0435\\u0444\\u043E\\u0440\\u043C\\u0438\\u0440\\u043E\\u0432\\u0430\\u0442\\u044C...\")));\n};\n\n//Контроль свойств - Область параметров инициализации панели\nInitPrmsArea.propTypes = {\n dateBegin: prop_types__WEBPACK_IMPORTED_MODULE_16___default().instanceOf(Date),\n dateFact: prop_types__WEBPACK_IMPORTED_MODULE_16___default().instanceOf(Date),\n durationMeasCode: (prop_types__WEBPACK_IMPORTED_MODULE_16___default().string),\n labMeasCode: (prop_types__WEBPACK_IMPORTED_MODULE_16___default().string),\n onClick: (prop_types__WEBPACK_IMPORTED_MODULE_16___default().func)\n};\n\n//Область сохранения изменений\nconst SaveChangesArea = ({\n onClick\n}) => {\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_17__[\"default\"], null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_18__[\"default\"], null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_15__[\"default\"], {\n fullWidth: true,\n color: \"warning\",\n variant: \"contained\",\n startIcon: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_20__[\"default\"], null, \"save\"),\n onClick: onClick\n }, \"\\u0421\\u043E\\u0445\\u0440\\u0430\\u043D\\u0438\\u0442\\u044C\")));\n};\n\n//Контроль свойств - Область сохранения изменений\nSaveChangesArea.propTypes = {\n onClick: (prop_types__WEBPACK_IMPORTED_MODULE_16___default().func)\n};\n\n//Список проектов\nconst ProjectsList = ({\n projects = [],\n selectedProject,\n onClick\n} = {}) => {\n //Подключение к контексту сообщений\n const {\n InlineMsgErr\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_messaging__WEBPACK_IMPORTED_MODULE_2__[\"MessagingСtx\"]);\n\n //Генерация содержимого\n return projects.length > 0 ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_17__[\"default\"], null, projects.map(p => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_21__[\"default\"], {\n key: p.NRN,\n sx: p.NJOBS == 0 ? STYLES.PROJECTS_LIST_ITEM_NOJOBS : null,\n selected: p.NRN === selectedProject,\n onClick: () => onClick ? onClick(p) : null\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_22__[\"default\"], null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_20__[\"default\"], {\n title: p.NEDITABLE == 1 ? \"Можно редактировать\" : \"Редактирование недоступно\"\n }, p.NEDITABLE == 1 ? \"edit\" : \"edit_off\")), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_19__[\"default\"], {\n primary: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_23__[\"default\"], {\n sx: STYLES.PROJECTS_LIST_ITEM_PRIMARY\n }, p.SNAME),\n secondary: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_23__[\"default\"], {\n sx: {\n ...STYLES.PROJECTS_LIST_ITEM_SECONDARY,\n ...(p.NJOBS == 0 ? STYLES.PROJECTS_LIST_ITEM_SECONDARY_NOJOBS : p.NCHANGED == 1 ? STYLES.PROJECTS_LIST_ITEM_SECONDARY_CHANGED : STYLES.PROJECTS_LIST_ITEM_SECONDARY_NOEDIT)\n }\n }, p.NJOBS == 1 ? p.NEDITABLE == 1 ? p.NCHANGED == 1 ? \"Изменён\" : \"Не изменён\" : \"Редактирование недоступно\" : \"Работы не определены\")\n })))) : /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(InlineMsgErr, {\n okBtn: false,\n text: \"Нет доступных проектов\"\n });\n};\n\n//Контроль свойств - Список проектов\nProjectsList.propTypes = {\n projects: (prop_types__WEBPACK_IMPORTED_MODULE_16___default().array),\n selectedProject: (prop_types__WEBPACK_IMPORTED_MODULE_16___default().number),\n onClick: (prop_types__WEBPACK_IMPORTED_MODULE_16___default().func)\n};\n\n//-----------\n//Тело модуля\n//-----------\n\n//Корневая панель работ проектов\nconst PrjJobs = () => {\n //Собственное состояние\n let [state, setState] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({\n needSave: false,\n showProjectsList: false,\n showPeriodsList: false,\n init: false,\n dateBegin: null,\n dateFact: null,\n durationMeas: null,\n durationMeasCode: null,\n labMeas: null,\n labMeasCode: null,\n resourceStatus: null,\n ident: null,\n projects: [],\n projectsLoaded: false,\n selectedProjectJobsLoaded: false,\n selectedProject: null,\n selectedProjectDocRn: null,\n selectedProjectGanttDef: {},\n selectedProjectTasks: [],\n showInitDialog: false\n });\n\n //Подключение к контексту приложения\n const {\n pOnlineShowDocument\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_application__WEBPACK_IMPORTED_MODULE_3__[\"ApplicationСtx\"]);\n\n //Подключение к контексту сообщений\n const {\n InlineMsgInfo\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_messaging__WEBPACK_IMPORTED_MODULE_2__[\"MessagingСtx\"]);\n\n //Подключение к контексту взаимодействия с сервером\n const {\n executeStored\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_backend__WEBPACK_IMPORTED_MODULE_1__[\"BackEndСtx\"]);\n\n //Загрузка списка проектов\n const loadProjects = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async (force = false) => {\n if (!state.projectsLoaded || force) {\n const data = await executeStored({\n stored: \"PKG_P8PANELS_PROJECTS.JB_PRJCTS_LIST\",\n args: {\n NIDENT: state.ident\n },\n respArg: \"COUT\",\n isArray: name => name === \"XPROJECTS\"\n });\n setState(pv => ({\n ...pv,\n projectsLoaded: true,\n projects: [...(data?.XPROJECTS || [])]\n }));\n }\n }, [executeStored, state.ident, state.projectsLoaded]);\n\n //Загрузка списка работ проекта\n const loadProjectJobs = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async (tasksOnly = false) => {\n const data = await executeStored({\n stored: \"PKG_P8PANELS_PROJECTS.JB_JOBS_LIST\",\n args: {\n NIDENT: state.ident,\n NPRN: state.selectedProject,\n NINCLUDE_DEF: tasksOnly === false ? 1 : 0\n },\n attributeValueProcessor: (name, val) => name == \"numb\" ? undefined : [\"start\", \"end\"].includes(name) ? (0,_core_utils__WEBPACK_IMPORTED_MODULE_4__.formatDateJSONDateOnly)(val) : val,\n respArg: \"COUT\"\n });\n setState(pv => ({\n ...pv,\n selectedProjectJobsLoaded: true,\n selectedProjectGanttDef: tasksOnly === true ? {\n ...pv.selectedProjectGanttDef\n } : data.XGANTT_DEF ? {\n ...data.XGANTT_DEF\n } : {},\n selectedProjectTasks: [...data.XGANTT_TASKS]\n }));\n }, [executeStored, state.ident, state.selectedProject]);\n\n //Изменение работы в графике\n const modifyJob = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async (job, dateFrom, dateTo) => {\n let data = null;\n try {\n data = await executeStored({\n stored: \"PKG_P8PANELS_PROJECTS.JB_JOBS_MODIFY_PERIOD\",\n args: {\n NJB_JOBS: job,\n DDATE_FROM: dateFrom,\n DDATE_TO: dateTo\n }\n });\n if (data?.NRESOURCE_STATUS != -1) {\n setState(pv => ({\n ...pv,\n resourceStatus: data.NRESOURCE_STATUS,\n needSave: true\n }));\n loadProjects(true);\n }\n } finally {\n loadProjectJobs(true);\n }\n }, [executeStored, loadProjectJobs, loadProjects]);\n\n //Сохранение буфера балансировки в проекты\n const saveProjects = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async () => {\n const data = await executeStored({\n stored: \"PKG_P8PANELS_PROJECTS.JB_SAVE\",\n args: {\n NIDENT: state.ident\n },\n respArg: \"COUT\"\n });\n setState(pv => ({\n ...pv,\n needSave: false,\n projects: [...(data?.XPROJECTS || [])]\n }));\n }, [executeStored, state.ident]);\n\n //Инициализация данных балансировки\n const initJobs = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async () => {\n if (!state.init) {\n const data = await executeStored({\n stored: \"PKG_P8PANELS_PROJECTS.JB_INIT\",\n args: {\n DBEGIN: state.dateBegin ? state.dateBegin : null,\n DFACT: state.dateFact ? state.dateFact : null,\n NIDENT: state.ident\n }\n });\n setState(pv => ({\n ...pv,\n init: true,\n reInit: false,\n dateBegin: new Date(data.DBEGIN),\n dateFact: new Date(data.DFACT),\n durationMeas: data.NDURATION_MEAS,\n durationMeasCode: data.SDURATION_MEAS,\n labMeas: data.NLAB_MEAS,\n labMeasCode: data.SLAB_MEAS,\n resourceStatus: data.NRESOURCE_STATUS,\n ident: data.NIDENT\n }));\n }\n }, [state.init, state.dateBegin, state.dateFact, state.ident, executeStored]);\n\n //Грузим список проектов при смене идентификатора процесса\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n if (state.ident) loadProjects();\n }, [state.ident, loadProjects]);\n\n //При смене выбранного проекта\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n if (state.selectedProject) loadProjectJobs(false);\n }, [state.selectedProject, loadProjectJobs]);\n\n //При изменении флага инициализации\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n initJobs();\n }, [state.init, initJobs]);\n\n //Выбор проекта\n const selectPoject = (project, projectDocRn) => {\n setState(pv => ({\n ...pv,\n selectedProject: project,\n selectedProjectDocRn: projectDocRn,\n selectedProjectJobsLoaded: false,\n selectedProjectTasks: [],\n selectedProjectGanttDef: {},\n showProjectsList: false\n }));\n };\n\n //Сброс выбора проекта\n const unselectProject = () => setState(pv => ({\n ...pv,\n selectedProjectJobsLoaded: false,\n selectedProject: null,\n selectedProjectDocRn: null,\n selectedProjectTasks: [],\n selectedProjectGanttDef: {},\n showProjectsList: false\n }));\n\n //Обработка нажатия на элемент в списке проектов\n const handleProjectClick = project => {\n if (state.selectedProject != project.NRN) selectPoject(project.NRN, project.NPROJECT);else unselectProject();\n };\n\n //Отработка нажатия на заголовок плана-графика\n const handleTitleClick = () => state.selectedProjectDocRn ? pOnlineShowDocument({\n unitCode: \"Projects\",\n document: state.selectedProjectDocRn\n }) : null;\n\n //Обработка измненения сроков задачи в диаграмме Гантта\n const handleTaskDatesChange = ({\n task,\n start,\n end,\n isMain\n }) => {\n if (isMain) modifyJob(task.rn, new Date(start), new Date(end));\n };\n\n //Отработка нажатия на отображения диалога параметров инициализации панели\n const handleShowInitDialogClick = () => setState(pv => ({\n ...pv,\n showInitDialog: true\n }));\n\n //Отработка нажатия на \"ОК\" в диалоге параметров инициализации панели\n const handleOKInitDialogClick = values => setState(pv => ({\n ...pv,\n dateBegin: values.dateBegin,\n dateFact: values.dateFact,\n showInitDialog: false,\n init: false\n }));\n\n //Отработка нажатия на \"Отмена\" в диалоге параметров инициализации панели\n const handleCancelInitDialogClick = () => setState(pv => ({\n ...pv,\n showInitDialog: false\n }));\n\n //Обработка нажатия на сохранение данных в проект\n const handleSaveToProjectsClick = () => saveProjects();\n\n //Обработка нажатия на проект в таблице детализации трудоёмкости по плану-графику монитора ресурсов\n const handlePlanJobsDtlProjectClick = ({\n sender\n }) => {\n setState(pv => ({\n ...pv,\n showPeriodsList: false\n }));\n if (state.selectedProject != sender.NJB_PRJCTS) selectPoject(sender.NJB_PRJCTS, sender.NPROJECT);\n };\n\n //Генерация содержимого\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_24__[\"default\"], {\n p: 2\n }, state.showInitDialog ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(InitPrmsDialog, {\n dateBegin: state.dateBegin,\n dateFact: state.dateFact,\n onOk: handleOKInitDialogClick,\n onCancel: handleCancelInitDialogClick\n }) : null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_25__[\"default\"], {\n variant: \"extended\",\n sx: STYLES.PROJECTS_BUTTON,\n onClick: () => setState(pv => ({\n ...pv,\n showProjectsList: !pv.showProjectsList\n }))\n }, \"\\u041F\\u0440\\u043E\\u0435\\u043A\\u0442\\u044B\", state.needSave ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), null, \"\\xA0\\xA0\", /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_20__[\"default\"], {\n sx: {\n color: \"orange\"\n }\n }, \"save\")) : null), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_26__[\"default\"], {\n anchor: \"left\",\n open: state.showProjectsList,\n onClose: () => setState(pv => ({\n ...pv,\n showProjectsList: false\n })),\n sx: STYLES.PROJECTS_DRAWER\n }, state.projectsLoaded ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(InitPrmsArea, {\n dateBegin: state.dateBegin,\n dateFact: state.dateFact,\n durationMeasCode: state.durationMeasCode,\n labMeasCode: state.labMeasCode,\n onClick: handleShowInitDialogClick\n }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_27__[\"default\"], null), state.needSave ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(SaveChangesArea, {\n onClick: handleSaveToProjectsClick\n }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_27__[\"default\"], null)) : null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(ProjectsList, {\n projects: state.projects,\n selectedProject: state.selectedProject,\n onClick: handleProjectClick\n })) : null), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_25__[\"default\"], {\n variant: \"extended\",\n sx: STYLES.PERIODS_BUTTON,\n onClick: () => setState(pv => ({\n ...pv,\n showPeriodsList: !pv.showPeriodsList\n }))\n }, \"\\u0420\\u0435\\u0441\\u0443\\u0440\\u0441\\u044B\", [0, 1].includes(state.resourceStatus) ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), null, \"\\xA0\\xA0\", /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_20__[\"default\"], {\n sx: {\n color: state.resourceStatus === 0 ? \"green\" : \"red\"\n }\n }, state.resourceStatus === 0 ? \"done\" : \"error\")) : null), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_26__[\"default\"], {\n anchor: \"right\",\n open: state.showPeriodsList,\n onClose: () => setState(pv => ({\n ...pv,\n showPeriodsList: false\n })),\n sx: STYLES.PERIODS_DRAWER\n }, state.ident ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_res_mon__WEBPACK_IMPORTED_MODULE_8__.ResMon, {\n ident: state.ident,\n onPlanJobsDtlProjectClick: handlePlanJobsDtlProjectClick\n }) : null), state.init == true ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_28__[\"default\"], {\n container: true,\n spacing: 1\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_28__[\"default\"], {\n item: true,\n xs: 12\n }, state.selectedProjectJobsLoaded ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_24__[\"default\"], {\n sx: STYLES.GANTT_CONTAINER,\n p: 1\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_components_p8p_gantt__WEBPACK_IMPORTED_MODULE_6__.P8PGantt, _extends({}, _config_wrapper__WEBPACK_IMPORTED_MODULE_5__.P8P_GANTT_CONFIG_PROPS, state.selectedProjectGanttDef, {\n height: GANTT_HEIGHT,\n titleStyle: STYLES.GANTT_TITLE,\n onTitleClick: handleTitleClick,\n tasks: state.selectedProjectTasks,\n onTaskDatesChange: handleTaskDatesChange,\n taskAttributeRenderer: _layouts__WEBPACK_IMPORTED_MODULE_9__.taskAttributeRenderer\n }))) : !state.selectedProject ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(InlineMsgInfo, {\n okBtn: false,\n text: \"Укажите проект для отображения его плана-графика\"\n }) : null)) : null);\n};\n\n//----------------\n//Интерфейс модуля\n//----------------\n\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/panels/prj_jobs/prj_jobs.js?"); /***/ }), From b16922360f36117b8ef3f68a8e078422ad72d6f1 Mon Sep 17 00:00:00 2001 From: Mikhail Chechnev Date: Mon, 22 Apr 2024 23:13:04 +0300 Subject: [PATCH 13/76] =?UTF-8?q?=D0=91=D0=94:=20=D0=9F=D0=B0=D0=BD=D0=B5?= =?UTF-8?q?=D0=BB=D1=8C=20"=D0=A0=D0=B0=D0=B1=D0=BE=D1=82=D1=8B=20=D0=BF?= =?UTF-8?q?=D1=80=D0=BE=D0=B5=D0=BA=D1=82=D0=BE=D0=B2"=20-=20=D0=BA=D0=BE?= =?UTF-8?q?=D0=BD=D1=82=D1=80=D0=BE=D0=BB=D1=8C=20=D0=BF=D1=80=D0=B0=D0=B2?= =?UTF-8?q?=20=D0=B4=D0=BE=D1=81=D1=82=D1=83=D0=BF=D0=B0=20=D0=B2=20=D0=BC?= =?UTF-8?q?=D0=BE=D0=BD=D0=B8=D1=82=D0=BE=D1=80=D0=B5=20=D1=80=D0=B5=D1=81?= =?UTF-8?q?=D1=83=D1=80=D1=81=D0=BE=D0=B2=20=D0=B8=20=D0=B4=D0=B5=D1=82?= =?UTF-8?q?=D0=B0=D0=BB=D0=B8=D0=B7=D0=B0=D1=86=D0=B8=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- db/PKG_P8PANELS_BASE.pck | 61 +++++++++++++++++++- db/PKG_P8PANELS_PROJECTS.pck | 104 ++++++++++++++++++++++++++--------- 2 files changed, 137 insertions(+), 28 deletions(-) diff --git a/db/PKG_P8PANELS_BASE.pck b/db/PKG_P8PANELS_BASE.pck index 6f151d5..2a54068 100644 --- a/db/PKG_P8PANELS_BASE.pck +++ b/db/PKG_P8PANELS_BASE.pck @@ -1,7 +1,11 @@ create or replace package PKG_P8PANELS_BASE as /*Константы - Типовой постфикс тега для массива (при переводе XML -> JSON) */ - SXML_ALWAYS_ARRAY_POSTFIX constant PKG_STD.TSTRING := '__SYSTEM__ARRAY__'; + SXML_ALWAYS_ARRAY_POSTFIX constant PKG_STD.TSTRING := '__SYSTEM__ARRAY__'; + + /* Константы - признаки наличия доступа */ + NACCESS_YES constant number(1) := 1; -- Доступ есть + NACCESS_NO constant number(1) := 0; -- Доступа нет /* Конвертация строки в число */ function UTL_S2N @@ -15,6 +19,14 @@ create or replace package PKG_P8PANELS_BASE as SVALUE in varchar2 -- Конвертируемое строковое значение ) return date; -- Конвертированная дата + /* Проверка доступности документа */ + function UTL_DOC_ACCESS_CHECK + ( + NCOMPANY in number, -- Рег. номер организации + SUNIT_CODE in varchar2, -- Код раздела + NDOCUMENT in number -- Рег. номер документа + ) return number; -- Флаг доступности (см. константы NACCESS_*) + /* Базовое исполнение действий */ procedure PROCESS ( @@ -132,6 +144,53 @@ create or replace package body PKG_P8PANELS_BASE as P_EXCEPTION(0, 'Неверный формат даты (%s).', SVALUE); end UTL_S2D; + /* Проверка доступности документа */ + function UTL_DOC_ACCESS_CHECK + ( + NCOMPANY in number, -- Рег. номер организации + SUNIT_CODE in varchar2, -- Код раздела + NDOCUMENT in number -- Рег. номер документа + ) return number -- Флаг доступности (см. константы NACCESS_*) + is + NRES PKG_STD.TNUMBER; -- Буфер для результата + NVERSION PKG_STD.TREF; -- Рег. номер версии + NCATALOG PKG_STD.TREF; -- Рег. номер каталога + NJUR_PERS PKG_STD.TREF; -- Рег. номер юридической принадлежности + NHIERARCHY PKG_STD.TREF; -- Рег. номер ирерархии + BTMP boolean; -- Буфер для расчетов + NTMP PKG_STD.TNUMBER; -- Буфер для расчетов + begin + /* Считаем стандартную атрибутику */ + PKG_DOCUMENT.GET_ATTRS(NFLAG_SMART => 0, + SUNITCODE => SUNIT_CODE, + NDOCUMENT => NDOCUMENT, + BFOUND => BTMP, + NCOMPANY => NTMP, + NVERSION => NVERSION, + NCATALOG => NCATALOG, + NJUR_PERS => NJUR_PERS, + NHIERARCHY => NHIERARCHY); + /* Проверким доступ */ + PKG_ENV.SMART_ACCESS(NCOMPANY => NCOMPANY, + NVERSION => NVERSION, + NCATALOG => NCATALOG, + NJUR_PERS => NJUR_PERS, + NHIERARCHY => NHIERARCHY, + SUNIT => SUNIT_CODE, + SACTION => null, + NRESULT => NRES); + /* Вернём результат */ + if (NRES = 1) then + return NACCESS_YES; + else + return NACCESS_NO; + end if; + exception + /* В случае ошибки - доступ закрыт */ + when others then + return NACCESS_NO; + end UTL_DOC_ACCESS_CHECK; + /* Формирование сообщения об отсутствии значения */ function MSG_NO_DATA_MAKE ( diff --git a/db/PKG_P8PANELS_PROJECTS.pck b/db/PKG_P8PANELS_PROJECTS.pck index 850336a..7795123 100644 --- a/db/PKG_P8PANELS_PROJECTS.pck +++ b/db/PKG_P8PANELS_PROJECTS.pck @@ -459,31 +459,26 @@ end PKG_P8PANELS_PROJECTS; / create or replace package body PKG_P8PANELS_PROJECTS as -/* -TODO: owner="root" created="25.10.2023" -text="Права доступа в мониторе ресурвов при балансировке планов-графиков" -*/ - -/* -TODO: owner="root" created="25.10.2023" -text="Проверить, что для расчётных полей дата-гридов отключена сортировка - иначе получается ошибка, т.к. поля нет в SQL-запросе" -*/ + /* + TODO: owner="root" created="25.10.2023" + text="Проверить, что для расчётных полей дата-гридов отключена сортировка - иначе получается ошибка, т.к. поля нет в SQL-запросе" + */ /* Константы - предопределённые значения */ - SYES constant PKG_STD.TSTRING := 'Да'; -- Да - NDAYS_LEFT_LIMIT constant PKG_STD.TNUMBER := 30; -- Лимит отстатка дней для контроля сроков - SFPDARTCL_REALIZ constant PKG_STD.TSTRING := '14 Цена без НДС'; -- Мнемокод статьи калькуляции для учёта реализации - SFPDARTCL_SELF_COST constant PKG_STD.TSTRING := '10 Себестоимость'; -- Мнемокод статьи калькуляции для учёта себестоимости - NGANTT_TASK_CAPTION_LEN constant PKG_STD.TNUMBER := 50; -- Предельная длина (знаков) метки задачи при отображении диаграммы Ганта - NJB_DURATION_MEAS constant PKG_STD.TNUMBER := 0; -- Единица измерения длительности по умолчанию для интерфейса балансировки работ (0 - день, 1 - неделя, 2 - декада, 3 - месяц, 4 - квартал, 5 - год) - SJB_LAB_MEAS constant PKG_STD.TSTRING := 'Ч/Ч'; -- Единица измерения трудоёмкости по умолчанию для интерфейса балансировки работ - SLAB_MEAS_HOURS constant PKG_STD.TSTRING := 'Ч/Ч'; -- Единица измерения трудоёмкости в человеко/часах + SYES constant PKG_STD.TSTRING := 'Да'; -- Да + NDAYS_LEFT_LIMIT constant PKG_STD.TNUMBER := 30; -- Лимит отстатка дней для контроля сроков + SFPDARTCL_REALIZ constant PKG_STD.TSTRING := '14 Цена без НДС'; -- Мнемокод статьи калькуляции для учёта реализации + SFPDARTCL_SELF_COST constant PKG_STD.TSTRING := '10 Себестоимость'; -- Мнемокод статьи калькуляции для учёта себестоимости + NGANTT_TASK_CAPTION_LEN constant PKG_STD.TNUMBER := 50; -- Предельная длина (знаков) метки задачи при отображении диаграммы Ганта + NJB_DURATION_MEAS constant PKG_STD.TNUMBER := 0; -- Единица измерения длительности по умолчанию для интерфейса балансировки работ (0 - день, 1 - неделя, 2 - декада, 3 - месяц, 4 - квартал, 5 - год) + SJB_LAB_MEAS constant PKG_STD.TSTRING := 'Ч/Ч'; -- Единица измерения трудоёмкости по умолчанию для интерфейса балансировки работ + SLAB_MEAS_HOURS constant PKG_STD.TSTRING := 'Ч/Ч'; -- Единица измерения трудоёмкости в человеко/часах /* Константы - дополнительные свойства */ - SDP_SECON_RESP constant PKG_STD.TSTRING := 'ПУП.SECON_RESP'; -- Ответственный экономист проекта - SDP_STAX_GROUP constant PKG_STD.TSTRING := 'ПУП.TAX_GROUP'; -- Налоговая группа проекта - SDP_SCTL_COST constant PKG_STD.TSTRING := 'ПУП.CTL_COST'; -- Принзнак необходимости контроля факт. затрат по статье калькуляции - SDP_SCTL_CONTR constant PKG_STD.TSTRING := 'ПУП.CTL_CONTR'; -- Принзнак необходимости контроля контрактации по статье калькуляции + SDP_SECON_RESP constant PKG_STD.TSTRING := 'ПУП.SECON_RESP'; -- Ответственный экономист проекта + SDP_STAX_GROUP constant PKG_STD.TSTRING := 'ПУП.TAX_GROUP'; -- Налоговая группа проекта + SDP_SCTL_COST constant PKG_STD.TSTRING := 'ПУП.CTL_COST'; -- Принзнак необходимости контроля факт. затрат по статье калькуляции + SDP_SCTL_CONTR constant PKG_STD.TSTRING := 'ПУП.CTL_CONTR'; -- Принзнак необходимости контроля контрактации по статье калькуляции /* Считывание наименование подразделения по рег. номеру */ function UTL_INS_DEPARTMENT_GET_NAME @@ -1345,7 +1340,7 @@ text="Проверить, что для расчётных полей дата- PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' and P.CURNAMES = CN.RN'); PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' and exists (select null from V_USERPRIV UP where UP."CATALOG" = P.CRN)'); PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' and exists (select null from V_USERPRIV UP where UP.JUR_PERS = P.JUR_PERS and UP.UNITCODE = ' || PKG_SQL_BUILD.WRAP_STR(SVALUE => 'Projects') || ')'); - PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' and P.RN in (select ID from COND_BROKER_IDSMART where IDENT = :NIDENT) %ORDER_BY%) D) F'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' and P.RN in (select ID from COND_BROKER_IDSMART where IDENT = :NIDENT) %ORDER_BY%) D) F'); PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' where F.NROW between :NROW_FROM and :NROW_TO'); /* Учтём сортировки */ PKG_P8PANELS_VISUAL.TORDERS_SET_QUERY(RDATA_GRID => RDG, RORDERS => RO, SPATTERN => '%ORDER_BY%', CSQL => CSQL); @@ -5102,7 +5097,9 @@ text="Проверить, что для расчётных полей дата- PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' and FM.RN = FMH.PRN'); PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' and ((FMH.DO_ACT_FROM between :DDATE_FROM and :DDATE_TO) or (FMH.DO_ACT_TO between :DDATE_FROM and :DDATE_TO) or'); PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' ((FMH.DO_ACT_FROM < :DDATE_FROM) and (COALESCE(FMH.DO_ACT_TO, :DDATE_TO + 1) > :DDATE_TO)))'); - PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' and FMH.SCHEDULE = SH.RN %ORDER_BY%) D) F'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' and FMH.SCHEDULE = SH.RN'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' and ' || PKG_SQL_BUILD.PKG_NAME(SNAME => 'PKG_P8PANELS_BASE.UTL_DOC_ACCESS_CHECK') ||'(FM.COMPANY, ' || PKG_SQL_BUILD.WRAP_STR(SVALUE => 'ClientPostPerform') || ', FM.RN) = 1'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' %ORDER_BY%) D) F'); PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' where F.NROW between :NROW_FROM and :NROW_TO'); /* Учтём сортировки */ PKG_P8PANELS_VISUAL.TORDERS_SET_QUERY(RDATA_GRID => RDG, RORDERS => RO, SPATTERN => '%ORDER_BY%', CSQL => CSQL); @@ -5356,7 +5353,10 @@ text="Проверить, что для расчётных полей дата- PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' and MP.PROJECTJOBMANPOW = PJMP.RN'); PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' and PJMP.FCMANPOWER = :NFCMANPOWER'); PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' and PJMP.PRN = PJ.RN'); - PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' and PJ.PRN = P.RN %ORDER_BY%) D) F'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' and PJ.PRN = P.RN'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' and exists (select null from V_USERPRIV UP where UP."CATALOG" = T.CRN)'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' and exists (select null from V_USERPRIV UP where UP.JUR_PERS = T.JUR_PERS and UP.UNITCODE = ' || PKG_SQL_BUILD.WRAP_STR(SVALUE => 'ProjectDepartmentPlans') || ')'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' %ORDER_BY%) D) F'); PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' where F.NROW between :NROW_FROM and :NROW_TO'); /* Учтём сортировки */ PKG_P8PANELS_VISUAL.TORDERS_SET_QUERY(RDATA_GRID => RDG, RORDERS => RO, SPATTERN => '%ORDER_BY%', CSQL => CSQL); @@ -5653,7 +5653,10 @@ text="Проверить, что для расчётных полей дата- PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' and PJMP.FCMANPOWER = :NFCMANPOWER'); PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' and PJMP.SUBDIV = :NINS_DEPARTMENT'); PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' and ((JB.DATE_FROM between :DDATE_FROM and :DDATE_TO) or (JB.DATE_TO between :DDATE_FROM and :DDATE_TO) or'); - PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' ((JB.DATE_FROM < :DDATE_FROM) and (JB.DATE_TO > :DDATE_TO))) %ORDER_BY%) D) F'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' ((JB.DATE_FROM < :DDATE_FROM) and (JB.DATE_TO > :DDATE_TO)))'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' and exists (select null from V_USERPRIV UP where UP."CATALOG" = P.CRN)'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' and exists (select null from V_USERPRIV UP where UP.JUR_PERS = P.JUR_PERS and UP.UNITCODE = ' || PKG_SQL_BUILD.WRAP_STR(SVALUE => 'Projects') || ')'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' %ORDER_BY%) D) F'); PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' where F.NROW between :NROW_FROM and :NROW_TO'); /* Учтём сортировки */ PKG_P8PANELS_VISUAL.TORDERS_SET_QUERY(RDATA_GRID => RDG, RORDERS => RO, SPATTERN => '%ORDER_BY%', CSQL => CSQL); @@ -5928,6 +5931,46 @@ text="Проверить, что для расчётных полей дата- and JB.SOURCE = J.RN and J.RN = JMP.PRN and JMP.SUBDIV is not null + and exists (select null from V_USERPRIV UP where UP.CATALOG = J.CRN) + and exists (select null + from V_USERPRIV UP + where UP.JUR_PERS = J.JUR_PERS + and UP.UNITCODE = 'Projects') + and exists (select null + from UNITLIST UL + where UL.UNITCODE = 'INS_DEPARTMENT' + and UL.CHECK_ACCESS_HIER = 0 + and exists (select /*+ INDEX(UP I_USERPRIV_COMPANY_ROLEID) */ + null + from USERPRIV UP + where UP.COMPANY = JMP.COMPANY + and UP.UNITCODE = 'INS_DEPARTMENT' + and UP.ROLEID in (select /*+ INDEX(UR I_USERROLES_AUTHID_FK) */ + UR.ROLEID + from USERROLES UR + where UR.AUTHID = UTILIZER) + union all + select /*+ INDEX(UP I_USERPRIV_COMPANY_AUTHID) */ + null + from USERPRIV UP + where UP.COMPANY = JMP.COMPANY + and UP.UNITCODE = 'INS_DEPARTMENT' + and UP.AUTHID = UTILIZER) + union all + select /*+ INDEX(UP I_USERPRIV_HIERARCHY_ROLEID) */ + null + from USERPRIV UP + where UP.HIERARCHY = JMP.SUBDIV + and UP.ROLEID in (select /*+ INDEX(UR I_USERROLES_AUTHID_FK) */ + UR.ROLEID + from USERROLES UR + where UR.AUTHID = UTILIZER) + union all + select /*+ INDEX(UP I_USERPRIV_HIERARCHY_AUTHID) */ + null + from USERPRIV UP + where UP.HIERARCHY = JMP.SUBDIV + and UP.AUTHID = UTILIZER) group by JMP.FCMANPOWER, JMP.SUBDIV) loop @@ -6069,7 +6112,9 @@ text="Проверить, что для расчётных полей дата- PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' FCMANPOWER MP'); PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' where P.IDENT = :NIDENT'); PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' and P.INS_DEPARTMENT = INSD.RN'); - PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' and P.FCMANPOWER = MP.RN %ORDER_BY%) D) F'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' and P.FCMANPOWER = MP.RN'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' and ' || PKG_SQL_BUILD.PKG_NAME(SNAME => 'PKG_P8PANELS_BASE.UTL_DOC_ACCESS_CHECK') ||'(INSD.COMPANY, ' || PKG_SQL_BUILD.WRAP_STR(SVALUE => 'INS_DEPARTMENT') || ', INSD.RN) = 1'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' %ORDER_BY%) D) F'); PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' where F.NROW between :NROW_FROM and :NROW_TO'); /* Учтём сортировки */ PKG_P8PANELS_VISUAL.TORDERS_SET_QUERY(RDATA_GRID => RDG, RORDERS => RO, SPATTERN => '%ORDER_BY%', CSQL => CSQL); @@ -6302,7 +6347,12 @@ text="Проверить, что для расчётных полей дата- ENPERIOD ENP where T.COMPANY = NCOMPANY and T.STATE = 2 - and T.PERIOD = ENP.RN; + and T.PERIOD = ENP.RN + and exists (select null from V_USERPRIV UP where UP.CATALOG = T.CRN) + and exists (select null + from V_USERPRIV UP + where UP.JUR_PERS = T.JUR_PERS + and UP.UNITCODE = 'ProjectDepartmentPlans'); else DFACT := LAST_DAY(TRUNC(DFACT, 'mm')); end if; From e0f4269d8fa389345be0d48ff82af09422235d61 Mon Sep 17 00:00:00 2001 From: Mikhail Chechnev Date: Tue, 23 Apr 2024 18:55:30 +0300 Subject: [PATCH 14/76] =?UTF-8?q?=D0=91=D0=94:=20=D0=9F=D0=B0=D0=BD=D0=B5?= =?UTF-8?q?=D0=BB=D0=B8=20=D0=BF=D1=80=D0=BE=D0=B5=D0=BA=D1=82=D0=BE=D0=B2?= =?UTF-8?q?=20-=20=D1=83=D0=B4=D0=B0=D0=BB=D0=B5=D0=BD=D1=8B=20=D1=80?= =?UTF-8?q?=D0=B5=D0=B0=D0=BB=D0=B8=D0=B7=D0=BE=D0=B2=D0=B0=D0=BD=D0=BD?= =?UTF-8?q?=D1=8B=D0=B5=20to-do=20=D0=B8=D0=B7=20=D0=BA=D0=BE=D0=BC=D0=BC?= =?UTF-8?q?=D0=B5=D0=BD=D1=82=D0=B0=D1=80=D0=B8=D0=B5=D0=B2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- db/PKG_P8PANELS_PROJECTS.pck | 5 ----- 1 file changed, 5 deletions(-) diff --git a/db/PKG_P8PANELS_PROJECTS.pck b/db/PKG_P8PANELS_PROJECTS.pck index 7795123..88c1733 100644 --- a/db/PKG_P8PANELS_PROJECTS.pck +++ b/db/PKG_P8PANELS_PROJECTS.pck @@ -459,11 +459,6 @@ end PKG_P8PANELS_PROJECTS; / create or replace package body PKG_P8PANELS_PROJECTS as - /* - TODO: owner="root" created="25.10.2023" - text="Проверить, что для расчётных полей дата-гридов отключена сортировка - иначе получается ошибка, т.к. поля нет в SQL-запросе" - */ - /* Константы - предопределённые значения */ SYES constant PKG_STD.TSTRING := 'Да'; -- Да NDAYS_LEFT_LIMIT constant PKG_STD.TNUMBER := 30; -- Лимит отстатка дней для контроля сроков From cd4649bb96e5e32b04d97cc3a9ec8881fe0e2d91 Mon Sep 17 00:00:00 2001 From: Mikhail Chechnev Date: Wed, 24 Apr 2024 13:04:18 +0300 Subject: [PATCH 15/76] =?UTF-8?q?WEB=20APP:=20=D0=A6=D0=98=D0=A2=D0=9A-801?= =?UTF-8?q?=20-=20=D0=BF=D1=80=D0=B8=D0=B2=D0=B5=D0=B4=D0=B5=D0=BD=D0=B8?= =?UTF-8?q?=D0=B5=20=D0=BF=D0=B0=D1=80=D0=B0=D0=BC=D0=B5=D1=82=D1=80=D0=BE?= =?UTF-8?q?=D0=B2=20=D0=BC=D0=B5=D1=82=D0=BE=D0=B4=D0=BE=D0=B2=20=D0=B2?= =?UTF-8?q?=D1=8B=D0=B7=D0=BE=D0=B2=D0=B0=20=D1=88=D1=82=D0=B0=D1=82=D0=BD?= =?UTF-8?q?=D1=8B=D1=85=20=D1=80=D0=B0=D0=B7=D0=B4=D0=B5=D0=BB=D0=BE=D0=B2?= =?UTF-8?q?=20=D0=BA=20=D1=80=D0=B5=D0=BB=D0=B8=D0=B7=D1=83=20"=D0=BC?= =?UTF-8?q?=D0=B0=D1=80=D1=82=202024"?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/panels/prj_fin/projects.js | 6 +++--- app/panels/prj_fin/stage_arts.js | 2 +- app/panels/prj_fin/stage_contracts.js | 4 ++-- app/panels/prj_fin/stages.js | 5 ++--- 4 files changed, 8 insertions(+), 9 deletions(-) diff --git a/app/panels/prj_fin/projects.js b/app/panels/prj_fin/projects.js index ba4c6fb..9855e07 100644 --- a/app/panels/prj_fin/projects.js +++ b/app/panels/prj_fin/projects.js @@ -144,12 +144,12 @@ const Projects = () => { }; //Отображение детализации точки графика затрат - const showCostNotesChartDetail = async ({ unitCode, year, month }) => { + const showCostNotesChartDetail = async ({ year, month }) => { const data = await executeStored({ stored: "PKG_P8PANELS_PROJECTS.CHART_FCCOSTNOTES_SELECT_COST", args: { NYEAR: year, NMONTH: month } }); - if (data.NIDENT) pOnlineShowUnit({ unitCode, inputParameters: [{ name: "in_SelectList_Ident", value: data.NIDENT }] }); + if (data.NIDENT) pOnlineShowUnit({ unitCode: "CostNotes", inputParameters: [{ name: "in_IDENT", value: data.NIDENT }] }); else showMsgErr(TEXTS.NO_DATA_FOUND); }; @@ -178,7 +178,7 @@ const Projects = () => { pageNumber: 1, reload: true })); - if (item.SUNITCODE && item.NYEAR && item.NMONTH) showCostNotesChartDetail({ unitCode: item.SUNITCODE, year: item.NYEAR, month: item.NMONTH }); + if (item.SUNITCODE == "CostNotes" && item.NYEAR && item.NMONTH) showCostNotesChartDetail({ year: item.NYEAR, month: item.NMONTH }); }; //При необходимости обновить данные diff --git a/app/panels/prj_fin/stage_arts.js b/app/panels/prj_fin/stage_arts.js index 37103c3..ca9d06b 100644 --- a/app/panels/prj_fin/stage_arts.js +++ b/app/panels/prj_fin/stage_arts.js @@ -71,7 +71,7 @@ const StageArts = ({ stage, filters }) => { stored: "PKG_P8PANELS_PROJECTS.STAGE_ARTS_SELECT_COST_FACT", args: { NSTAGE: stage, NFPDARTCL: sender.NRN } }); - if (data.NIDENT) pOnlineShowUnit({ unitCode: "CostNotes", inputParameters: [{ name: "in_SelectList_Ident", value: data.NIDENT }] }); + if (data.NIDENT) pOnlineShowUnit({ unitCode: "CostNotes", inputParameters: [{ name: "in_IDENT", value: data.NIDENT }] }); else showMsgErr(TEXTS.NO_DATA_FOUND); }; diff --git a/app/panels/prj_fin/stage_contracts.js b/app/panels/prj_fin/stage_contracts.js index c3395e6..dddc3fb 100644 --- a/app/panels/prj_fin/stage_contracts.js +++ b/app/panels/prj_fin/stage_contracts.js @@ -92,7 +92,7 @@ const StageContracts = ({ stage, filters }) => { stored: "PKG_P8PANELS_PROJECTS.STAGE_CONTRACTS_SELECT_PAY_IN", args: { NPROJECTSTAGEPF: sender.NRN } }); - if (data.NIDENT) pOnlineShowUnit({ unitCode: "PaymentAccountsIn", inputParameters: [{ name: "in_SelectList_Ident", value: data.NIDENT }] }); + if (data.NIDENT) pOnlineShowUnit({ unitCode: "PaymentAccountsIn", inputParameters: [{ name: "in_IDENT", value: data.NIDENT }] }); else showMsgErr(TEXTS.NO_DATA_FOUND); }; @@ -112,7 +112,7 @@ const StageContracts = ({ stage, filters }) => { stored: "PKG_P8PANELS_PROJECTS.STAGE_CONTRACTS_SELECT_ININV", args: { NPROJECTSTAGEPF: sender.NRN } }); - if (data.NIDENT) pOnlineShowUnit({ unitCode: "IncomingInvoices", inputParameters: [{ name: "in_SelectList_Ident", value: data.NIDENT }] }); + if (data.NIDENT) pOnlineShowUnit({ unitCode: "IncomingInvoices", inputParameters: [{ name: "in_IDENT", value: data.NIDENT }] }); else showMsgErr(TEXTS.NO_DATA_FOUND); }; diff --git a/app/panels/prj_fin/stages.js b/app/panels/prj_fin/stages.js index 32b836e..9fec2da 100644 --- a/app/panels/prj_fin/stages.js +++ b/app/panels/prj_fin/stages.js @@ -106,7 +106,7 @@ const Stages = ({ project, projectName, filters }) => { stored: "PKG_P8PANELS_PROJECTS.STAGES_SELECT_COST_FACT", args: { NRN: sender.NRN } }); - if (data.NIDENT) pOnlineShowUnit({ unitCode: "CostNotes", inputParameters: [{ name: "in_SelectList_Ident", value: data.NIDENT }] }); + if (data.NIDENT) pOnlineShowUnit({ unitCode: "CostNotes", inputParameters: [{ name: "in_IDENT", value: data.NIDENT }] }); else showMsgErr(TEXTS.NO_DATA_FOUND); }; @@ -116,8 +116,7 @@ const Stages = ({ project, projectName, filters }) => { stored: "PKG_P8PANELS_PROJECTS.STAGES_SELECT_SUMM_REALIZ", args: { NRN: sender.NRN } }); - if (data.NIDENT) - pOnlineShowUnit({ unitCode: "GoodsTransInvoicesToConsumers", inputParameters: [{ name: "in_SelectList_Ident", value: data.NIDENT }] }); + if (data.NIDENT) pOnlineShowUnit({ unitCode: "GoodsTransInvoicesToConsumers", inputParameters: [{ name: "in_IDENT", value: data.NIDENT }] }); else showMsgErr(TEXTS.NO_DATA_FOUND); }; From 97b8cfbf78c41a46792491257c4d11377c9a38df Mon Sep 17 00:00:00 2001 From: Mikhail Chechnev Date: Wed, 24 Apr 2024 13:04:41 +0300 Subject: [PATCH 16/76] =?UTF-8?q?WEB=20APP:=20=D0=A1=D0=B2=D0=B5=D0=B6?= =?UTF-8?q?=D0=B0=D1=8F=20=D1=81=D0=B1=D0=BE=D1=80=D0=BA=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- dist/p8-panels.js | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/dist/p8-panels.js b/dist/p8-panels.js index 1c111c6..14876b9 100644 --- a/dist/p8-panels.js +++ b/dist/p8-panels.js @@ -3656,7 +3656,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ Projects: () => (/* binding */ Projects)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Box/Box.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Grid/Grid.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Paper/Paper.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Fab/Fab.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Icon/Icon.js\");\n/* harmony import */ var _core_utils__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../core/utils */ \"./app/core/utils.js\");\n/* harmony import */ var _app_text__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../../app.text */ \"./app.text.js\");\n/* harmony import */ var _components_p8p_data_grid__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../components/p8p_data_grid */ \"./app/components/p8p_data_grid.js\");\n/* harmony import */ var _components_p8p_fullscreen_dialog__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../components/p8p_fullscreen_dialog */ \"./app/components/p8p_fullscreen_dialog.js\");\n/* harmony import */ var _components_p8p_chart__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../components/p8p_chart */ \"./app/components/p8p_chart.js\");\n/* harmony import */ var _context_backend__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../../context/backend */ \"./app/context/backend.js\");\n/* harmony import */ var _context_application__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../../context/application */ \"./app/context/application.js\");\n/* harmony import */ var _context_messaging__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../../context/messaging */ \"./app/context/messaging.js\");\n/* harmony import */ var _config_wrapper__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../../config_wrapper */ \"./app/config_wrapper.js\");\n/* harmony import */ var _layouts__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./layouts */ \"./app/panels/prj_fin/layouts.js\");\n/* harmony import */ var _stages__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./stages */ \"./app/panels/prj_fin/stages.js\");\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n/*\r\n Парус 8 - Панели мониторинга - ПУП - Экономика проектов\r\n Панель мониторинга: Список проктов\r\n*/\n\n//---------------------\n//Подключение библиотек\n//---------------------\n\n //Классы React\n //Интерфейсные компоненты\n //Вспомогательные процедуры и функции\n //Тектовые ресурсы и константы\n //Таблица данных\n //Полноэкранный диалог\n //График\n //Контекст взаимодействия с сервером\n //Контекст приложения\n //Контекст сообщений\n //Подключение компонентов к настройкам приложения\n //Дополнительная разметка и вёрстка клиентских элементов\n //Список этапов проекта\n\n//---------\n//Константы\n//---------\n\n//Стили\nconst STYLES = {\n CHART: {\n maxHeight: \"300px\",\n display: \"flex\",\n justifyContent: \"center\"\n },\n CHART_PAPER: {\n height: \"100%\"\n },\n CHART_FAB: {\n position: \"absolute\",\n top: 80,\n left: 16\n }\n};\n\n//-----------\n//Тело модуля\n//-----------\n\n//Список проектов\nconst Projects = () => {\n //Собственное состояние\n const [projectsDataGrid, setProjectsDataGrid] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({\n dataLoaded: false,\n columnsDef: [],\n filters: null,\n orders: null,\n rows: [],\n reload: true,\n pageNumber: 1,\n morePages: true,\n selectedProject: null,\n stagesFilters: []\n });\n\n //Состояния графиков\n const [showCharts, setShowCharts] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(true);\n const [problemsChart, setProblemsChart] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({\n loaded: false,\n labels: [],\n datasets: []\n });\n const [customersChart, setCustomersChart] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({\n loaded: false,\n labels: [],\n datasets: []\n });\n const [costNotesChart, setCostNotesChart] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({\n loaded: false,\n labels: [],\n datasets: []\n });\n\n //Подключение к контексту взаимодействия с сервером\n const {\n executeStored,\n SERV_DATA_TYPE_CLOB\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_backend__WEBPACK_IMPORTED_MODULE_6__[\"BackEndСtx\"]);\n\n //Подключение к контексту приложения\n const {\n pOnlineShowDocument,\n pOnlineShowUnit,\n configSystemPageSize\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_application__WEBPACK_IMPORTED_MODULE_7__[\"ApplicationСtx\"]);\n\n //Подключение к контексту сообщений\n const {\n showMsgErr\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_messaging__WEBPACK_IMPORTED_MODULE_8__[\"MessagingСtx\"]);\n\n //Загрузка данных проектов с сервера\n const loadProjects = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async () => {\n if (projectsDataGrid.reload) {\n const data = await executeStored({\n stored: \"PKG_P8PANELS_PROJECTS.LIST\",\n args: {\n CFILTERS: {\n VALUE: (0,_core_utils__WEBPACK_IMPORTED_MODULE_1__.object2Base64XML)(projectsDataGrid.filters, {\n arrayNodeName: \"filters\"\n }),\n SDATA_TYPE: SERV_DATA_TYPE_CLOB\n },\n CORDERS: {\n VALUE: (0,_core_utils__WEBPACK_IMPORTED_MODULE_1__.object2Base64XML)(projectsDataGrid.orders, {\n arrayNodeName: \"orders\"\n }),\n SDATA_TYPE: SERV_DATA_TYPE_CLOB\n },\n NPAGE_NUMBER: projectsDataGrid.pageNumber,\n NPAGE_SIZE: configSystemPageSize,\n NINCLUDE_DEF: projectsDataGrid.dataLoaded ? 0 : 1\n },\n attributeValueProcessor: (name, val) => name == \"SGOVCNTRID\" ? undefined : val,\n respArg: \"COUT\"\n });\n setProjectsDataGrid(pv => ({\n ...pv,\n columnsDef: data.XCOLUMNS_DEF ? [...data.XCOLUMNS_DEF] : pv.columnsDef,\n rows: pv.pageNumber == 1 ? [...(data.XROWS || [])] : [...pv.rows, ...(data.XROWS || [])],\n dataLoaded: true,\n reload: false,\n morePages: (data.XROWS || []).length >= configSystemPageSize\n }));\n }\n }, [projectsDataGrid.reload, projectsDataGrid.filters, projectsDataGrid.orders, projectsDataGrid.dataLoaded, projectsDataGrid.pageNumber, executeStored, configSystemPageSize, SERV_DATA_TYPE_CLOB]);\n\n //Получение данных графиков\n const loadChartData = async () => {\n const problemsChart = await executeStored({\n stored: \"PKG_P8PANELS_PROJECTS.CHART_PROBLEMS\",\n respArg: \"COUT\"\n });\n setProblemsChart(pv => ({\n ...pv,\n loaded: true,\n ...problemsChart.XCHART\n }));\n const customersChart = await executeStored({\n stored: \"PKG_P8PANELS_PROJECTS.CHART_CUSTOMERS\",\n respArg: \"COUT\"\n });\n setCustomersChart(pv => ({\n ...pv,\n loaded: true,\n ...customersChart.XCHART\n }));\n const costNotesChart = await executeStored({\n stored: \"PKG_P8PANELS_PROJECTS.CHART_FCCOSTNOTES\",\n respArg: \"COUT\"\n });\n setCostNotesChart(pv => ({\n ...pv,\n loaded: true,\n ...costNotesChart.XCHART\n }));\n };\n\n //Отображение журнала платежей по этапу проекта\n const showPayNotes = async ({\n sender,\n direction\n }) => {\n const data = await executeStored({\n stored: \"PKG_P8PANELS_PROJECTS.SELECT_FIN\",\n args: {\n NRN: sender.NRN,\n NDIRECTION: direction\n }\n });\n if (data.NIDENT) pOnlineShowUnit({\n unitCode: \"PayNotes\",\n inputParameters: [{\n name: \"in_SelectList_Ident\",\n value: data.NIDENT\n }]\n });else showMsgErr(_app_text__WEBPACK_IMPORTED_MODULE_2__.TEXTS.NO_DATA_FOUND);\n };\n\n //Отображение детализации точки графика затрат\n const showCostNotesChartDetail = async ({\n unitCode,\n year,\n month\n }) => {\n const data = await executeStored({\n stored: \"PKG_P8PANELS_PROJECTS.CHART_FCCOSTNOTES_SELECT_COST\",\n args: {\n NYEAR: year,\n NMONTH: month\n }\n });\n if (data.NIDENT) pOnlineShowUnit({\n unitCode,\n inputParameters: [{\n name: \"in_SelectList_Ident\",\n value: data.NIDENT\n }]\n });else showMsgErr(_app_text__WEBPACK_IMPORTED_MODULE_2__.TEXTS.NO_DATA_FOUND);\n };\n\n //Отображение этапов проекта\n const showStages = ({\n sender,\n filters = []\n } = {}) => setProjectsDataGrid(pv => ({\n ...pv,\n selectedProject: {\n ...sender\n },\n stagesFilters: [...filters]\n }));\n\n //При изменении состояния фильтра\n const handleFilterChanged = ({\n filters\n }) => setProjectsDataGrid(pv => ({\n ...pv,\n filters: [...filters],\n pageNumber: 1,\n reload: true\n }));\n\n //При изменении состояния сортировки\n const handleOrderChanged = ({\n orders\n }) => setProjectsDataGrid(pv => ({\n ...pv,\n orders: [...orders],\n pageNumber: 1,\n reload: true\n }));\n\n //При изменении количества отображаемых страниц\n const handlePagesCountChanged = () => setProjectsDataGrid(pv => ({\n ...pv,\n pageNumber: pv.pageNumber + 1,\n reload: true\n }));\n\n //При закрытии списка этапов проекта\n const handleStagesClose = () => setProjectsDataGrid(pv => ({\n ...pv,\n selectedProject: null,\n stagesFilters: []\n }));\n\n //Отработка нажатия на график\n const handleChartClick = ({\n item\n }) => {\n if (item.SFILTER && item.SFILTER_VALUE) setProjectsDataGrid(pv => ({\n ...pv,\n filters: [{\n name: item.SFILTER,\n from: item.SFILTER_VALUE\n }],\n pageNumber: 1,\n reload: true\n }));\n if (item.SUNITCODE && item.NYEAR && item.NMONTH) showCostNotesChartDetail({\n unitCode: item.SUNITCODE,\n year: item.NYEAR,\n month: item.NMONTH\n });\n };\n\n //При необходимости обновить данные\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n loadProjects();\n }, [projectsDataGrid.reload, loadProjects]);\n\n //При подключении к странице\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n loadChartData();\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n //Генерация содержимого\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_12__[\"default\"], {\n p: 1\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_13__[\"default\"], {\n container: true,\n spacing: 1\n }, showCharts ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_13__[\"default\"], {\n item: true,\n xs: 4\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_14__[\"default\"], {\n elevation: 3,\n sx: STYLES.CHART_PAPER\n }, problemsChart.loaded ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_components_p8p_chart__WEBPACK_IMPORTED_MODULE_5__.P8PChart, _extends({}, problemsChart, {\n onClick: handleChartClick,\n style: STYLES.CHART\n })) : null)), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_13__[\"default\"], {\n item: true,\n xs: 4\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_14__[\"default\"], {\n elevation: 3,\n sx: STYLES.CHART_PAPER\n }, customersChart.loaded ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_components_p8p_chart__WEBPACK_IMPORTED_MODULE_5__.P8PChart, _extends({}, customersChart, {\n onClick: handleChartClick,\n style: STYLES.CHART\n })) : null)), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_13__[\"default\"], {\n item: true,\n xs: 4\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_14__[\"default\"], {\n elevation: 3,\n sx: STYLES.CHART_PAPER\n }, costNotesChart.loaded ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_components_p8p_chart__WEBPACK_IMPORTED_MODULE_5__.P8PChart, _extends({}, costNotesChart, {\n onClick: handleChartClick,\n style: STYLES.CHART\n })) : null))) : null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_13__[\"default\"], {\n item: true,\n xs: 12\n }, projectsDataGrid.dataLoaded ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_components_p8p_data_grid__WEBPACK_IMPORTED_MODULE_3__.P8PDataGrid, _extends({}, _config_wrapper__WEBPACK_IMPORTED_MODULE_9__.P8P_DATA_GRID_CONFIG_PROPS, {\n columnsDef: projectsDataGrid.columnsDef,\n rows: projectsDataGrid.rows,\n size: _components_p8p_data_grid__WEBPACK_IMPORTED_MODULE_3__.P8P_DATA_GRID_SIZE.SMALL,\n filtersInitial: projectsDataGrid.filters,\n morePages: projectsDataGrid.morePages,\n reloading: projectsDataGrid.reload,\n expandable: true,\n headCellRender: _layouts__WEBPACK_IMPORTED_MODULE_10__.headCellRender,\n dataCellRender: prms => (0,_layouts__WEBPACK_IMPORTED_MODULE_10__.dataCellRender)({\n ...prms,\n panelUnit: _layouts__WEBPACK_IMPORTED_MODULE_10__.PANEL_UNITS.PROJECTS,\n showStages\n }),\n rowExpandRender: prms => (0,_layouts__WEBPACK_IMPORTED_MODULE_10__.rowExpandRender)({\n ...prms,\n panelUnit: _layouts__WEBPACK_IMPORTED_MODULE_10__.PANEL_UNITS.PROJECTS,\n pOnlineShowDocument,\n showPayNotes,\n showStages\n }),\n valueFormatter: prms => (0,_layouts__WEBPACK_IMPORTED_MODULE_10__.valueFormatter)({\n ...prms,\n panelUnit: _layouts__WEBPACK_IMPORTED_MODULE_10__.PANEL_UNITS.PROJECTS\n }),\n onOrderChanged: handleOrderChanged,\n onFilterChanged: handleFilterChanged,\n onPagesCountChanged: handlePagesCountChanged\n })) : null, projectsDataGrid.selectedProject ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_components_p8p_fullscreen_dialog__WEBPACK_IMPORTED_MODULE_4__.P8PFullScreenDialog, {\n title: `Этапы проекта \"${projectsDataGrid.selectedProject.SNAME_USL}\"`,\n onClose: handleStagesClose\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_stages__WEBPACK_IMPORTED_MODULE_11__.Stages, {\n project: projectsDataGrid.selectedProject.NRN,\n projectName: projectsDataGrid.selectedProject.SNAME_USL,\n filters: projectsDataGrid.stagesFilters\n })) : null)), problemsChart.loaded || customersChart.loaded || costNotesChart.loaded ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_15__[\"default\"], {\n size: \"small\",\n color: \"secondary\",\n sx: STYLES.CHART_FAB,\n onClick: () => setShowCharts(!showCharts)\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_16__[\"default\"], null, showCharts ? \"expand_less\" : \"expand_more\")) : null);\n};\n\n//----------------\n//Интерфейс модуля\n//----------------\n\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/panels/prj_fin/projects.js?"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ Projects: () => (/* binding */ Projects)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Box/Box.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Grid/Grid.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Paper/Paper.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Fab/Fab.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Icon/Icon.js\");\n/* harmony import */ var _core_utils__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../core/utils */ \"./app/core/utils.js\");\n/* harmony import */ var _app_text__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../../app.text */ \"./app.text.js\");\n/* harmony import */ var _components_p8p_data_grid__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../components/p8p_data_grid */ \"./app/components/p8p_data_grid.js\");\n/* harmony import */ var _components_p8p_fullscreen_dialog__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../components/p8p_fullscreen_dialog */ \"./app/components/p8p_fullscreen_dialog.js\");\n/* harmony import */ var _components_p8p_chart__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../components/p8p_chart */ \"./app/components/p8p_chart.js\");\n/* harmony import */ var _context_backend__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../../context/backend */ \"./app/context/backend.js\");\n/* harmony import */ var _context_application__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../../context/application */ \"./app/context/application.js\");\n/* harmony import */ var _context_messaging__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../../context/messaging */ \"./app/context/messaging.js\");\n/* harmony import */ var _config_wrapper__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../../config_wrapper */ \"./app/config_wrapper.js\");\n/* harmony import */ var _layouts__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./layouts */ \"./app/panels/prj_fin/layouts.js\");\n/* harmony import */ var _stages__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./stages */ \"./app/panels/prj_fin/stages.js\");\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n/*\r\n Парус 8 - Панели мониторинга - ПУП - Экономика проектов\r\n Панель мониторинга: Список проктов\r\n*/\n\n//---------------------\n//Подключение библиотек\n//---------------------\n\n //Классы React\n //Интерфейсные компоненты\n //Вспомогательные процедуры и функции\n //Тектовые ресурсы и константы\n //Таблица данных\n //Полноэкранный диалог\n //График\n //Контекст взаимодействия с сервером\n //Контекст приложения\n //Контекст сообщений\n //Подключение компонентов к настройкам приложения\n //Дополнительная разметка и вёрстка клиентских элементов\n //Список этапов проекта\n\n//---------\n//Константы\n//---------\n\n//Стили\nconst STYLES = {\n CHART: {\n maxHeight: \"300px\",\n display: \"flex\",\n justifyContent: \"center\"\n },\n CHART_PAPER: {\n height: \"100%\"\n },\n CHART_FAB: {\n position: \"absolute\",\n top: 80,\n left: 16\n }\n};\n\n//-----------\n//Тело модуля\n//-----------\n\n//Список проектов\nconst Projects = () => {\n //Собственное состояние\n const [projectsDataGrid, setProjectsDataGrid] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({\n dataLoaded: false,\n columnsDef: [],\n filters: null,\n orders: null,\n rows: [],\n reload: true,\n pageNumber: 1,\n morePages: true,\n selectedProject: null,\n stagesFilters: []\n });\n\n //Состояния графиков\n const [showCharts, setShowCharts] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(true);\n const [problemsChart, setProblemsChart] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({\n loaded: false,\n labels: [],\n datasets: []\n });\n const [customersChart, setCustomersChart] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({\n loaded: false,\n labels: [],\n datasets: []\n });\n const [costNotesChart, setCostNotesChart] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({\n loaded: false,\n labels: [],\n datasets: []\n });\n\n //Подключение к контексту взаимодействия с сервером\n const {\n executeStored,\n SERV_DATA_TYPE_CLOB\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_backend__WEBPACK_IMPORTED_MODULE_6__[\"BackEndСtx\"]);\n\n //Подключение к контексту приложения\n const {\n pOnlineShowDocument,\n pOnlineShowUnit,\n configSystemPageSize\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_application__WEBPACK_IMPORTED_MODULE_7__[\"ApplicationСtx\"]);\n\n //Подключение к контексту сообщений\n const {\n showMsgErr\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_messaging__WEBPACK_IMPORTED_MODULE_8__[\"MessagingСtx\"]);\n\n //Загрузка данных проектов с сервера\n const loadProjects = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async () => {\n if (projectsDataGrid.reload) {\n const data = await executeStored({\n stored: \"PKG_P8PANELS_PROJECTS.LIST\",\n args: {\n CFILTERS: {\n VALUE: (0,_core_utils__WEBPACK_IMPORTED_MODULE_1__.object2Base64XML)(projectsDataGrid.filters, {\n arrayNodeName: \"filters\"\n }),\n SDATA_TYPE: SERV_DATA_TYPE_CLOB\n },\n CORDERS: {\n VALUE: (0,_core_utils__WEBPACK_IMPORTED_MODULE_1__.object2Base64XML)(projectsDataGrid.orders, {\n arrayNodeName: \"orders\"\n }),\n SDATA_TYPE: SERV_DATA_TYPE_CLOB\n },\n NPAGE_NUMBER: projectsDataGrid.pageNumber,\n NPAGE_SIZE: configSystemPageSize,\n NINCLUDE_DEF: projectsDataGrid.dataLoaded ? 0 : 1\n },\n attributeValueProcessor: (name, val) => name == \"SGOVCNTRID\" ? undefined : val,\n respArg: \"COUT\"\n });\n setProjectsDataGrid(pv => ({\n ...pv,\n columnsDef: data.XCOLUMNS_DEF ? [...data.XCOLUMNS_DEF] : pv.columnsDef,\n rows: pv.pageNumber == 1 ? [...(data.XROWS || [])] : [...pv.rows, ...(data.XROWS || [])],\n dataLoaded: true,\n reload: false,\n morePages: (data.XROWS || []).length >= configSystemPageSize\n }));\n }\n }, [projectsDataGrid.reload, projectsDataGrid.filters, projectsDataGrid.orders, projectsDataGrid.dataLoaded, projectsDataGrid.pageNumber, executeStored, configSystemPageSize, SERV_DATA_TYPE_CLOB]);\n\n //Получение данных графиков\n const loadChartData = async () => {\n const problemsChart = await executeStored({\n stored: \"PKG_P8PANELS_PROJECTS.CHART_PROBLEMS\",\n respArg: \"COUT\"\n });\n setProblemsChart(pv => ({\n ...pv,\n loaded: true,\n ...problemsChart.XCHART\n }));\n const customersChart = await executeStored({\n stored: \"PKG_P8PANELS_PROJECTS.CHART_CUSTOMERS\",\n respArg: \"COUT\"\n });\n setCustomersChart(pv => ({\n ...pv,\n loaded: true,\n ...customersChart.XCHART\n }));\n const costNotesChart = await executeStored({\n stored: \"PKG_P8PANELS_PROJECTS.CHART_FCCOSTNOTES\",\n respArg: \"COUT\"\n });\n setCostNotesChart(pv => ({\n ...pv,\n loaded: true,\n ...costNotesChart.XCHART\n }));\n };\n\n //Отображение журнала платежей по этапу проекта\n const showPayNotes = async ({\n sender,\n direction\n }) => {\n const data = await executeStored({\n stored: \"PKG_P8PANELS_PROJECTS.SELECT_FIN\",\n args: {\n NRN: sender.NRN,\n NDIRECTION: direction\n }\n });\n if (data.NIDENT) pOnlineShowUnit({\n unitCode: \"PayNotes\",\n inputParameters: [{\n name: \"in_SelectList_Ident\",\n value: data.NIDENT\n }]\n });else showMsgErr(_app_text__WEBPACK_IMPORTED_MODULE_2__.TEXTS.NO_DATA_FOUND);\n };\n\n //Отображение детализации точки графика затрат\n const showCostNotesChartDetail = async ({\n year,\n month\n }) => {\n const data = await executeStored({\n stored: \"PKG_P8PANELS_PROJECTS.CHART_FCCOSTNOTES_SELECT_COST\",\n args: {\n NYEAR: year,\n NMONTH: month\n }\n });\n if (data.NIDENT) pOnlineShowUnit({\n unitCode: \"CostNotes\",\n inputParameters: [{\n name: \"in_IDENT\",\n value: data.NIDENT\n }]\n });else showMsgErr(_app_text__WEBPACK_IMPORTED_MODULE_2__.TEXTS.NO_DATA_FOUND);\n };\n\n //Отображение этапов проекта\n const showStages = ({\n sender,\n filters = []\n } = {}) => setProjectsDataGrid(pv => ({\n ...pv,\n selectedProject: {\n ...sender\n },\n stagesFilters: [...filters]\n }));\n\n //При изменении состояния фильтра\n const handleFilterChanged = ({\n filters\n }) => setProjectsDataGrid(pv => ({\n ...pv,\n filters: [...filters],\n pageNumber: 1,\n reload: true\n }));\n\n //При изменении состояния сортировки\n const handleOrderChanged = ({\n orders\n }) => setProjectsDataGrid(pv => ({\n ...pv,\n orders: [...orders],\n pageNumber: 1,\n reload: true\n }));\n\n //При изменении количества отображаемых страниц\n const handlePagesCountChanged = () => setProjectsDataGrid(pv => ({\n ...pv,\n pageNumber: pv.pageNumber + 1,\n reload: true\n }));\n\n //При закрытии списка этапов проекта\n const handleStagesClose = () => setProjectsDataGrid(pv => ({\n ...pv,\n selectedProject: null,\n stagesFilters: []\n }));\n\n //Отработка нажатия на график\n const handleChartClick = ({\n item\n }) => {\n if (item.SFILTER && item.SFILTER_VALUE) setProjectsDataGrid(pv => ({\n ...pv,\n filters: [{\n name: item.SFILTER,\n from: item.SFILTER_VALUE\n }],\n pageNumber: 1,\n reload: true\n }));\n if (item.SUNITCODE == \"CostNotes\" && item.NYEAR && item.NMONTH) showCostNotesChartDetail({\n year: item.NYEAR,\n month: item.NMONTH\n });\n };\n\n //При необходимости обновить данные\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n loadProjects();\n }, [projectsDataGrid.reload, loadProjects]);\n\n //При подключении к странице\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n loadChartData();\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n //Генерация содержимого\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_12__[\"default\"], {\n p: 1\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_13__[\"default\"], {\n container: true,\n spacing: 1\n }, showCharts ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_13__[\"default\"], {\n item: true,\n xs: 4\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_14__[\"default\"], {\n elevation: 3,\n sx: STYLES.CHART_PAPER\n }, problemsChart.loaded ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_components_p8p_chart__WEBPACK_IMPORTED_MODULE_5__.P8PChart, _extends({}, problemsChart, {\n onClick: handleChartClick,\n style: STYLES.CHART\n })) : null)), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_13__[\"default\"], {\n item: true,\n xs: 4\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_14__[\"default\"], {\n elevation: 3,\n sx: STYLES.CHART_PAPER\n }, customersChart.loaded ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_components_p8p_chart__WEBPACK_IMPORTED_MODULE_5__.P8PChart, _extends({}, customersChart, {\n onClick: handleChartClick,\n style: STYLES.CHART\n })) : null)), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_13__[\"default\"], {\n item: true,\n xs: 4\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_14__[\"default\"], {\n elevation: 3,\n sx: STYLES.CHART_PAPER\n }, costNotesChart.loaded ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_components_p8p_chart__WEBPACK_IMPORTED_MODULE_5__.P8PChart, _extends({}, costNotesChart, {\n onClick: handleChartClick,\n style: STYLES.CHART\n })) : null))) : null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_13__[\"default\"], {\n item: true,\n xs: 12\n }, projectsDataGrid.dataLoaded ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_components_p8p_data_grid__WEBPACK_IMPORTED_MODULE_3__.P8PDataGrid, _extends({}, _config_wrapper__WEBPACK_IMPORTED_MODULE_9__.P8P_DATA_GRID_CONFIG_PROPS, {\n columnsDef: projectsDataGrid.columnsDef,\n rows: projectsDataGrid.rows,\n size: _components_p8p_data_grid__WEBPACK_IMPORTED_MODULE_3__.P8P_DATA_GRID_SIZE.SMALL,\n filtersInitial: projectsDataGrid.filters,\n morePages: projectsDataGrid.morePages,\n reloading: projectsDataGrid.reload,\n expandable: true,\n headCellRender: _layouts__WEBPACK_IMPORTED_MODULE_10__.headCellRender,\n dataCellRender: prms => (0,_layouts__WEBPACK_IMPORTED_MODULE_10__.dataCellRender)({\n ...prms,\n panelUnit: _layouts__WEBPACK_IMPORTED_MODULE_10__.PANEL_UNITS.PROJECTS,\n showStages\n }),\n rowExpandRender: prms => (0,_layouts__WEBPACK_IMPORTED_MODULE_10__.rowExpandRender)({\n ...prms,\n panelUnit: _layouts__WEBPACK_IMPORTED_MODULE_10__.PANEL_UNITS.PROJECTS,\n pOnlineShowDocument,\n showPayNotes,\n showStages\n }),\n valueFormatter: prms => (0,_layouts__WEBPACK_IMPORTED_MODULE_10__.valueFormatter)({\n ...prms,\n panelUnit: _layouts__WEBPACK_IMPORTED_MODULE_10__.PANEL_UNITS.PROJECTS\n }),\n onOrderChanged: handleOrderChanged,\n onFilterChanged: handleFilterChanged,\n onPagesCountChanged: handlePagesCountChanged\n })) : null, projectsDataGrid.selectedProject ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_components_p8p_fullscreen_dialog__WEBPACK_IMPORTED_MODULE_4__.P8PFullScreenDialog, {\n title: `Этапы проекта \"${projectsDataGrid.selectedProject.SNAME_USL}\"`,\n onClose: handleStagesClose\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_stages__WEBPACK_IMPORTED_MODULE_11__.Stages, {\n project: projectsDataGrid.selectedProject.NRN,\n projectName: projectsDataGrid.selectedProject.SNAME_USL,\n filters: projectsDataGrid.stagesFilters\n })) : null)), problemsChart.loaded || customersChart.loaded || costNotesChart.loaded ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_15__[\"default\"], {\n size: \"small\",\n color: \"secondary\",\n sx: STYLES.CHART_FAB,\n onClick: () => setShowCharts(!showCharts)\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_16__[\"default\"], null, showCharts ? \"expand_less\" : \"expand_more\")) : null);\n};\n\n//----------------\n//Интерфейс модуля\n//----------------\n\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/panels/prj_fin/projects.js?"); /***/ }), @@ -3667,7 +3667,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ StageArts: () => (/* binding */ StageArts)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! prop-types */ \"./node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_10___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_10__);\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Box/Box.js\");\n/* harmony import */ var _core_utils__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../core/utils */ \"./app/core/utils.js\");\n/* harmony import */ var _app_text__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../../app.text */ \"./app.text.js\");\n/* harmony import */ var _components_p8p_data_grid__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../components/p8p_data_grid */ \"./app/components/p8p_data_grid.js\");\n/* harmony import */ var _context_backend__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../context/backend */ \"./app/context/backend.js\");\n/* harmony import */ var _context_application__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../context/application */ \"./app/context/application.js\");\n/* harmony import */ var _context_messaging__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../../context/messaging */ \"./app/context/messaging.js\");\n/* harmony import */ var _config_wrapper__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../../config_wrapper */ \"./app/config_wrapper.js\");\n/* harmony import */ var _layouts__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./layouts */ \"./app/panels/prj_fin/layouts.js\");\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n/*\r\n Парус 8 - Панели мониторинга - ПУП - Экономика проектов\r\n Панель мониторинга: Калькуляция этапа проекта\r\n*/\n\n//---------------------\n//Подключение библиотек\n//---------------------\n\n //Классы React\n //Контроль свойств компонента\n //Интерфейсные компоненты\n //Вспомогательные процедуры и функции\n //Тектовые ресурсы и константы\n //Таблица данных\n //Контекст взаимодействия с сервером\n //Контекст приложения\n //Контекст сообщений\n //Подключение компонентов к настройкам приложения\n //Дополнительная разметка и вёрстка клиентских элементов\n\n//-----------\n//Тело модуля\n//-----------\n\n//Калькуляция этапа проекта\nconst StageArts = ({\n stage,\n filters\n}) => {\n //Собственное состояние\n const [stageArtsDataGrid, setStageArtsDataGrid] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({\n dataLoaded: false,\n columnsDef: [],\n filters: [...filters],\n rows: [],\n reload: true\n });\n\n //Подключение к контексту взаимодействия с сервером\n const {\n executeStored,\n SERV_DATA_TYPE_CLOB\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_backend__WEBPACK_IMPORTED_MODULE_4__[\"BackEndСtx\"]);\n\n //Подключение к контексту приложения\n const {\n pOnlineShowUnit\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_application__WEBPACK_IMPORTED_MODULE_5__[\"ApplicationСtx\"]);\n\n //Подключение к контексту сообщений\n const {\n showMsgErr\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_messaging__WEBPACK_IMPORTED_MODULE_6__[\"MessagingСtx\"]);\n\n //Загрузка данных калькуляции этапа с сервера\n const loadStageArts = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async () => {\n if (stageArtsDataGrid.reload) {\n const data = await executeStored({\n stored: \"PKG_P8PANELS_PROJECTS.STAGE_ARTS_LIST\",\n args: {\n NSTAGE: stage,\n CFILTERS: {\n VALUE: (0,_core_utils__WEBPACK_IMPORTED_MODULE_1__.object2Base64XML)(stageArtsDataGrid.filters, {\n arrayNodeName: \"filters\"\n }),\n SDATA_TYPE: SERV_DATA_TYPE_CLOB\n },\n NINCLUDE_DEF: stageArtsDataGrid.dataLoaded ? 0 : 1\n },\n respArg: \"COUT\"\n });\n setStageArtsDataGrid(pv => ({\n ...pv,\n columnsDef: data.XCOLUMNS_DEF ? [...data.XCOLUMNS_DEF] : pv.columnsDef,\n rows: [...(data.XROWS || [])],\n dataLoaded: true,\n reload: false\n }));\n }\n }, [stage, stageArtsDataGrid.reload, stageArtsDataGrid.filters, stageArtsDataGrid.dataLoaded, executeStored, SERV_DATA_TYPE_CLOB]);\n\n //Отображение журнала затрат по статье калькуляции\n const showCostNotes = async ({\n sender\n }) => {\n const data = await executeStored({\n stored: \"PKG_P8PANELS_PROJECTS.STAGE_ARTS_SELECT_COST_FACT\",\n args: {\n NSTAGE: stage,\n NFPDARTCL: sender.NRN\n }\n });\n if (data.NIDENT) pOnlineShowUnit({\n unitCode: \"CostNotes\",\n inputParameters: [{\n name: \"in_SelectList_Ident\",\n value: data.NIDENT\n }]\n });else showMsgErr(_app_text__WEBPACK_IMPORTED_MODULE_2__.TEXTS.NO_DATA_FOUND);\n };\n\n //Отображение договоров по статье калькуляции\n const showContracts = async ({\n sender\n }) => {\n const data = await executeStored({\n stored: \"PKG_P8PANELS_PROJECTS.STAGE_ARTS_SELECT_CONTR\",\n args: {\n NSTAGE: stage,\n NFPDARTCL: sender.NRN\n }\n });\n if (data.NIDENT) pOnlineShowUnit({\n unitCode: \"Contracts\",\n inputParameters: [{\n name: \"in_Ident\",\n value: data.NIDENT\n }]\n });else showMsgErr(_app_text__WEBPACK_IMPORTED_MODULE_2__.TEXTS.NO_DATA_FOUND);\n };\n\n //При изменении состояния фильтра\n const handleFilterChanged = ({\n filters\n }) => setStageArtsDataGrid(pv => ({\n ...pv,\n filters,\n reload: true\n }));\n\n //При необходимости обновить данные\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n loadStageArts();\n }, [stageArtsDataGrid.reload, loadStageArts]);\n\n //Генерация содержимого\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_9__[\"default\"], {\n pt: 2\n }, stageArtsDataGrid.dataLoaded ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_components_p8p_data_grid__WEBPACK_IMPORTED_MODULE_3__.P8PDataGrid, _extends({}, _config_wrapper__WEBPACK_IMPORTED_MODULE_7__.P8P_DATA_GRID_CONFIG_PROPS, {\n columnsDef: stageArtsDataGrid.columnsDef,\n filtersInitial: filters,\n rows: stageArtsDataGrid.rows,\n size: _components_p8p_data_grid__WEBPACK_IMPORTED_MODULE_3__.P8P_DATA_GRID_SIZE.SMALL,\n morePages: false,\n reloading: stageArtsDataGrid.reload,\n dataCellRender: prms => (0,_layouts__WEBPACK_IMPORTED_MODULE_8__.dataCellRender)({\n ...prms,\n panelUnit: _layouts__WEBPACK_IMPORTED_MODULE_8__.PANEL_UNITS.PROJECT_STAGE_ARTS,\n showCostNotes,\n showContracts\n }),\n valueFormatter: _layouts__WEBPACK_IMPORTED_MODULE_8__.valueFormatter,\n onFilterChanged: handleFilterChanged\n })) : null);\n};\n\n//Контроль свойств - Калькуляция этапа проекта\nStageArts.propTypes = {\n stage: (prop_types__WEBPACK_IMPORTED_MODULE_10___default().number).isRequired,\n filters: prop_types__WEBPACK_IMPORTED_MODULE_10___default().arrayOf(_components_p8p_data_grid__WEBPACK_IMPORTED_MODULE_3__.P8P_DATA_GRID_FILTER_SHAPE)\n};\n\n//----------------\n//Интерфейс модуля\n//----------------\n\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/panels/prj_fin/stage_arts.js?"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ StageArts: () => (/* binding */ StageArts)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! prop-types */ \"./node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_10___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_10__);\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Box/Box.js\");\n/* harmony import */ var _core_utils__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../core/utils */ \"./app/core/utils.js\");\n/* harmony import */ var _app_text__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../../app.text */ \"./app.text.js\");\n/* harmony import */ var _components_p8p_data_grid__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../components/p8p_data_grid */ \"./app/components/p8p_data_grid.js\");\n/* harmony import */ var _context_backend__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../context/backend */ \"./app/context/backend.js\");\n/* harmony import */ var _context_application__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../context/application */ \"./app/context/application.js\");\n/* harmony import */ var _context_messaging__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../../context/messaging */ \"./app/context/messaging.js\");\n/* harmony import */ var _config_wrapper__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../../config_wrapper */ \"./app/config_wrapper.js\");\n/* harmony import */ var _layouts__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./layouts */ \"./app/panels/prj_fin/layouts.js\");\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n/*\r\n Парус 8 - Панели мониторинга - ПУП - Экономика проектов\r\n Панель мониторинга: Калькуляция этапа проекта\r\n*/\n\n//---------------------\n//Подключение библиотек\n//---------------------\n\n //Классы React\n //Контроль свойств компонента\n //Интерфейсные компоненты\n //Вспомогательные процедуры и функции\n //Тектовые ресурсы и константы\n //Таблица данных\n //Контекст взаимодействия с сервером\n //Контекст приложения\n //Контекст сообщений\n //Подключение компонентов к настройкам приложения\n //Дополнительная разметка и вёрстка клиентских элементов\n\n//-----------\n//Тело модуля\n//-----------\n\n//Калькуляция этапа проекта\nconst StageArts = ({\n stage,\n filters\n}) => {\n //Собственное состояние\n const [stageArtsDataGrid, setStageArtsDataGrid] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({\n dataLoaded: false,\n columnsDef: [],\n filters: [...filters],\n rows: [],\n reload: true\n });\n\n //Подключение к контексту взаимодействия с сервером\n const {\n executeStored,\n SERV_DATA_TYPE_CLOB\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_backend__WEBPACK_IMPORTED_MODULE_4__[\"BackEndСtx\"]);\n\n //Подключение к контексту приложения\n const {\n pOnlineShowUnit\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_application__WEBPACK_IMPORTED_MODULE_5__[\"ApplicationСtx\"]);\n\n //Подключение к контексту сообщений\n const {\n showMsgErr\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_messaging__WEBPACK_IMPORTED_MODULE_6__[\"MessagingСtx\"]);\n\n //Загрузка данных калькуляции этапа с сервера\n const loadStageArts = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async () => {\n if (stageArtsDataGrid.reload) {\n const data = await executeStored({\n stored: \"PKG_P8PANELS_PROJECTS.STAGE_ARTS_LIST\",\n args: {\n NSTAGE: stage,\n CFILTERS: {\n VALUE: (0,_core_utils__WEBPACK_IMPORTED_MODULE_1__.object2Base64XML)(stageArtsDataGrid.filters, {\n arrayNodeName: \"filters\"\n }),\n SDATA_TYPE: SERV_DATA_TYPE_CLOB\n },\n NINCLUDE_DEF: stageArtsDataGrid.dataLoaded ? 0 : 1\n },\n respArg: \"COUT\"\n });\n setStageArtsDataGrid(pv => ({\n ...pv,\n columnsDef: data.XCOLUMNS_DEF ? [...data.XCOLUMNS_DEF] : pv.columnsDef,\n rows: [...(data.XROWS || [])],\n dataLoaded: true,\n reload: false\n }));\n }\n }, [stage, stageArtsDataGrid.reload, stageArtsDataGrid.filters, stageArtsDataGrid.dataLoaded, executeStored, SERV_DATA_TYPE_CLOB]);\n\n //Отображение журнала затрат по статье калькуляции\n const showCostNotes = async ({\n sender\n }) => {\n const data = await executeStored({\n stored: \"PKG_P8PANELS_PROJECTS.STAGE_ARTS_SELECT_COST_FACT\",\n args: {\n NSTAGE: stage,\n NFPDARTCL: sender.NRN\n }\n });\n if (data.NIDENT) pOnlineShowUnit({\n unitCode: \"CostNotes\",\n inputParameters: [{\n name: \"in_IDENT\",\n value: data.NIDENT\n }]\n });else showMsgErr(_app_text__WEBPACK_IMPORTED_MODULE_2__.TEXTS.NO_DATA_FOUND);\n };\n\n //Отображение договоров по статье калькуляции\n const showContracts = async ({\n sender\n }) => {\n const data = await executeStored({\n stored: \"PKG_P8PANELS_PROJECTS.STAGE_ARTS_SELECT_CONTR\",\n args: {\n NSTAGE: stage,\n NFPDARTCL: sender.NRN\n }\n });\n if (data.NIDENT) pOnlineShowUnit({\n unitCode: \"Contracts\",\n inputParameters: [{\n name: \"in_Ident\",\n value: data.NIDENT\n }]\n });else showMsgErr(_app_text__WEBPACK_IMPORTED_MODULE_2__.TEXTS.NO_DATA_FOUND);\n };\n\n //При изменении состояния фильтра\n const handleFilterChanged = ({\n filters\n }) => setStageArtsDataGrid(pv => ({\n ...pv,\n filters,\n reload: true\n }));\n\n //При необходимости обновить данные\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n loadStageArts();\n }, [stageArtsDataGrid.reload, loadStageArts]);\n\n //Генерация содержимого\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_9__[\"default\"], {\n pt: 2\n }, stageArtsDataGrid.dataLoaded ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_components_p8p_data_grid__WEBPACK_IMPORTED_MODULE_3__.P8PDataGrid, _extends({}, _config_wrapper__WEBPACK_IMPORTED_MODULE_7__.P8P_DATA_GRID_CONFIG_PROPS, {\n columnsDef: stageArtsDataGrid.columnsDef,\n filtersInitial: filters,\n rows: stageArtsDataGrid.rows,\n size: _components_p8p_data_grid__WEBPACK_IMPORTED_MODULE_3__.P8P_DATA_GRID_SIZE.SMALL,\n morePages: false,\n reloading: stageArtsDataGrid.reload,\n dataCellRender: prms => (0,_layouts__WEBPACK_IMPORTED_MODULE_8__.dataCellRender)({\n ...prms,\n panelUnit: _layouts__WEBPACK_IMPORTED_MODULE_8__.PANEL_UNITS.PROJECT_STAGE_ARTS,\n showCostNotes,\n showContracts\n }),\n valueFormatter: _layouts__WEBPACK_IMPORTED_MODULE_8__.valueFormatter,\n onFilterChanged: handleFilterChanged\n })) : null);\n};\n\n//Контроль свойств - Калькуляция этапа проекта\nStageArts.propTypes = {\n stage: (prop_types__WEBPACK_IMPORTED_MODULE_10___default().number).isRequired,\n filters: prop_types__WEBPACK_IMPORTED_MODULE_10___default().arrayOf(_components_p8p_data_grid__WEBPACK_IMPORTED_MODULE_3__.P8P_DATA_GRID_FILTER_SHAPE)\n};\n\n//----------------\n//Интерфейс модуля\n//----------------\n\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/panels/prj_fin/stage_arts.js?"); /***/ }), @@ -3678,7 +3678,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ StageContracts: () => (/* binding */ StageContracts)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! prop-types */ \"./node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_10___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_10__);\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Box/Box.js\");\n/* harmony import */ var _core_utils__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../core/utils */ \"./app/core/utils.js\");\n/* harmony import */ var _app_text__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../../app.text */ \"./app.text.js\");\n/* harmony import */ var _components_p8p_data_grid__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../components/p8p_data_grid */ \"./app/components/p8p_data_grid.js\");\n/* harmony import */ var _context_backend__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../context/backend */ \"./app/context/backend.js\");\n/* harmony import */ var _context_application__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../context/application */ \"./app/context/application.js\");\n/* harmony import */ var _context_messaging__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../../context/messaging */ \"./app/context/messaging.js\");\n/* harmony import */ var _config_wrapper__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../../config_wrapper */ \"./app/config_wrapper.js\");\n/* harmony import */ var _layouts__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./layouts */ \"./app/panels/prj_fin/layouts.js\");\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n/*\r\n Парус 8 - Панели мониторинга - ПУП - Экономика проектов\r\n Панель мониторинга: Договоры с соисполнителями этапа проекта\r\n*/\n\n//---------------------\n//Подключение библиотек\n//---------------------\n\n //Классы React\n //Контроль свойств компонента\n //Интерфейсные компоненты\n //Вспомогательные процедуры и функции\n //Тектовые ресурсы и константы\n //Таблица данных\n //Контекст взаимодействия с сервером\n //Контекст приложения\n //Контекст сообщений\n //Подключение компонентов к настройкам приложения\n //Дополнительная разметка и вёрстка клиентских элементов\n\n//-----------\n//Тело модуля\n//-----------\n\n//Договоры с соисполнителями этапа проекта\nconst StageContracts = ({\n stage,\n filters\n}) => {\n //Собственное состояние\n const [stageContractsDataGrid, setStageContractsDataGrid] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({\n dataLoaded: false,\n columnsDef: [],\n filters: [...filters],\n orders: null,\n rows: [],\n reload: true,\n pageNumber: 1,\n morePages: true\n });\n\n //Подключение к контексту взаимодействия с сервером\n const {\n executeStored,\n SERV_DATA_TYPE_CLOB\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_backend__WEBPACK_IMPORTED_MODULE_4__[\"BackEndСtx\"]);\n\n //Подключение к контексту приложения\n const {\n pOnlineShowDocument,\n pOnlineShowUnit,\n configSystemPageSize\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_application__WEBPACK_IMPORTED_MODULE_5__[\"ApplicationСtx\"]);\n\n //Подключение к контексту сообщений\n const {\n showMsgErr\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_messaging__WEBPACK_IMPORTED_MODULE_6__[\"MessagingСtx\"]);\n\n //Загрузка данных этапов с сервера\n const loadStageContracts = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async () => {\n if (stageContractsDataGrid.reload) {\n const data = await executeStored({\n stored: \"PKG_P8PANELS_PROJECTS.STAGE_CONTRACTS_LIST\",\n args: {\n NSTAGE: stage,\n CFILTERS: {\n VALUE: (0,_core_utils__WEBPACK_IMPORTED_MODULE_1__.object2Base64XML)(stageContractsDataGrid.filters, {\n arrayNodeName: \"filters\"\n }),\n SDATA_TYPE: SERV_DATA_TYPE_CLOB\n },\n CORDERS: {\n VALUE: (0,_core_utils__WEBPACK_IMPORTED_MODULE_1__.object2Base64XML)(stageContractsDataGrid.orders, {\n arrayNodeName: \"orders\"\n }),\n SDATA_TYPE: SERV_DATA_TYPE_CLOB\n },\n NPAGE_NUMBER: stageContractsDataGrid.pageNumber,\n NPAGE_SIZE: configSystemPageSize,\n NINCLUDE_DEF: stageContractsDataGrid.dataLoaded ? 0 : 1\n },\n attributeValueProcessor: (name, val) => name == \"SGOVCNTRID\" ? undefined : val,\n respArg: \"COUT\"\n });\n setStageContractsDataGrid(pv => ({\n ...pv,\n columnsDef: data.XCOLUMNS_DEF ? [...data.XCOLUMNS_DEF] : pv.columnsDef,\n rows: pv.pageNumber == 1 ? [...(data.XROWS || [])] : [...pv.rows, ...(data.XROWS || [])],\n dataLoaded: true,\n reload: false,\n morePages: (data.XROWS || []).length >= configSystemPageSize\n }));\n }\n }, [stage, stageContractsDataGrid.reload, stageContractsDataGrid.filters, stageContractsDataGrid.orders, stageContractsDataGrid.dataLoaded, stageContractsDataGrid.pageNumber, executeStored, configSystemPageSize, SERV_DATA_TYPE_CLOB]);\n\n //Отображение выходящих счетов на оплату от соисполнителя этапа\n const showPaymentAccountsIn = async ({\n sender\n }) => {\n const data = await executeStored({\n stored: \"PKG_P8PANELS_PROJECTS.STAGE_CONTRACTS_SELECT_PAY_IN\",\n args: {\n NPROJECTSTAGEPF: sender.NRN\n }\n });\n if (data.NIDENT) pOnlineShowUnit({\n unitCode: \"PaymentAccountsIn\",\n inputParameters: [{\n name: \"in_SelectList_Ident\",\n value: data.NIDENT\n }]\n });else showMsgErr(_app_text__WEBPACK_IMPORTED_MODULE_2__.TEXTS.NO_DATA_FOUND);\n };\n\n //Отображение фактических платежей соисполнителю этапа\n const showPayNotes = async ({\n sender\n }) => {\n const data = await executeStored({\n stored: \"PKG_P8PANELS_PROJECTS.STAGE_CONTRACTS_SELECT_FIN_OUT\",\n args: {\n NPROJECTSTAGEPF: sender.NRN\n }\n });\n if (data.NIDENT) pOnlineShowUnit({\n unitCode: \"PayNotes\",\n inputParameters: [{\n name: \"in_SelectList_Ident\",\n value: data.NIDENT\n }]\n });else showMsgErr(_app_text__WEBPACK_IMPORTED_MODULE_2__.TEXTS.NO_DATA_FOUND);\n };\n\n //Отображение приходных накладных от соисполнителя этапа\n const showIncomingInvoices = async ({\n sender\n }) => {\n const data = await executeStored({\n stored: \"PKG_P8PANELS_PROJECTS.STAGE_CONTRACTS_SELECT_ININV\",\n args: {\n NPROJECTSTAGEPF: sender.NRN\n }\n });\n if (data.NIDENT) pOnlineShowUnit({\n unitCode: \"IncomingInvoices\",\n inputParameters: [{\n name: \"in_SelectList_Ident\",\n value: data.NIDENT\n }]\n });else showMsgErr(_app_text__WEBPACK_IMPORTED_MODULE_2__.TEXTS.NO_DATA_FOUND);\n };\n\n //При изменении состояния фильтра\n const handleFilterChanged = ({\n filters\n }) => setStageContractsDataGrid(pv => ({\n ...pv,\n filters,\n pageNumber: 1,\n reload: true\n }));\n\n //При изменении состояния сортировки\n const handleOrderChanged = ({\n orders\n }) => setStageContractsDataGrid(pv => ({\n ...pv,\n orders,\n pageNumber: 1,\n reload: true\n }));\n\n //При изменении количества отображаемых страниц\n const handlePagesCountChanged = () => setStageContractsDataGrid(pv => ({\n ...pv,\n pageNumber: pv.pageNumber + 1,\n reload: true\n }));\n\n //При необходимости обновить данные\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n loadStageContracts();\n }, [stageContractsDataGrid.reload, loadStageContracts]);\n\n //Генерация содержимого\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_9__[\"default\"], {\n pt: 2\n }, stageContractsDataGrid.dataLoaded ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_components_p8p_data_grid__WEBPACK_IMPORTED_MODULE_3__.P8PDataGrid, _extends({}, _config_wrapper__WEBPACK_IMPORTED_MODULE_7__.P8P_DATA_GRID_CONFIG_PROPS, {\n columnsDef: stageContractsDataGrid.columnsDef,\n filtersInitial: filters,\n rows: stageContractsDataGrid.rows,\n size: _components_p8p_data_grid__WEBPACK_IMPORTED_MODULE_3__.P8P_DATA_GRID_SIZE.SMALL,\n morePages: stageContractsDataGrid.morePages,\n reloading: stageContractsDataGrid.reload,\n expandable: true,\n dataCellRender: prms => (0,_layouts__WEBPACK_IMPORTED_MODULE_8__.dataCellRender)({\n ...prms,\n panelUnit: _layouts__WEBPACK_IMPORTED_MODULE_8__.PANEL_UNITS.PROJECT_STAGE_CONTRACTS,\n pOnlineShowDocument\n }),\n rowExpandRender: prms => (0,_layouts__WEBPACK_IMPORTED_MODULE_8__.rowExpandRender)({\n ...prms,\n panelUnit: _layouts__WEBPACK_IMPORTED_MODULE_8__.PANEL_UNITS.PROJECT_STAGE_CONTRACTS,\n pOnlineShowDocument,\n showPaymentAccountsIn,\n showPayNotes,\n showIncomingInvoices\n }),\n valueFormatter: _layouts__WEBPACK_IMPORTED_MODULE_8__.valueFormatter,\n onOrderChanged: handleOrderChanged,\n onFilterChanged: handleFilterChanged,\n onPagesCountChanged: handlePagesCountChanged\n })) : null);\n};\n\n//Контроль свойств - Договоры с соисполнителями этапа проекта\nStageContracts.propTypes = {\n stage: (prop_types__WEBPACK_IMPORTED_MODULE_10___default().number).isRequired,\n filters: prop_types__WEBPACK_IMPORTED_MODULE_10___default().arrayOf(_components_p8p_data_grid__WEBPACK_IMPORTED_MODULE_3__.P8P_DATA_GRID_FILTER_SHAPE)\n};\n\n//----------------\n//Интерфейс модуля\n//----------------\n\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/panels/prj_fin/stage_contracts.js?"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ StageContracts: () => (/* binding */ StageContracts)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! prop-types */ \"./node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_10___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_10__);\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Box/Box.js\");\n/* harmony import */ var _core_utils__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../core/utils */ \"./app/core/utils.js\");\n/* harmony import */ var _app_text__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../../app.text */ \"./app.text.js\");\n/* harmony import */ var _components_p8p_data_grid__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../components/p8p_data_grid */ \"./app/components/p8p_data_grid.js\");\n/* harmony import */ var _context_backend__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../context/backend */ \"./app/context/backend.js\");\n/* harmony import */ var _context_application__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../context/application */ \"./app/context/application.js\");\n/* harmony import */ var _context_messaging__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../../context/messaging */ \"./app/context/messaging.js\");\n/* harmony import */ var _config_wrapper__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../../config_wrapper */ \"./app/config_wrapper.js\");\n/* harmony import */ var _layouts__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./layouts */ \"./app/panels/prj_fin/layouts.js\");\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n/*\r\n Парус 8 - Панели мониторинга - ПУП - Экономика проектов\r\n Панель мониторинга: Договоры с соисполнителями этапа проекта\r\n*/\n\n//---------------------\n//Подключение библиотек\n//---------------------\n\n //Классы React\n //Контроль свойств компонента\n //Интерфейсные компоненты\n //Вспомогательные процедуры и функции\n //Тектовые ресурсы и константы\n //Таблица данных\n //Контекст взаимодействия с сервером\n //Контекст приложения\n //Контекст сообщений\n //Подключение компонентов к настройкам приложения\n //Дополнительная разметка и вёрстка клиентских элементов\n\n//-----------\n//Тело модуля\n//-----------\n\n//Договоры с соисполнителями этапа проекта\nconst StageContracts = ({\n stage,\n filters\n}) => {\n //Собственное состояние\n const [stageContractsDataGrid, setStageContractsDataGrid] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({\n dataLoaded: false,\n columnsDef: [],\n filters: [...filters],\n orders: null,\n rows: [],\n reload: true,\n pageNumber: 1,\n morePages: true\n });\n\n //Подключение к контексту взаимодействия с сервером\n const {\n executeStored,\n SERV_DATA_TYPE_CLOB\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_backend__WEBPACK_IMPORTED_MODULE_4__[\"BackEndСtx\"]);\n\n //Подключение к контексту приложения\n const {\n pOnlineShowDocument,\n pOnlineShowUnit,\n configSystemPageSize\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_application__WEBPACK_IMPORTED_MODULE_5__[\"ApplicationСtx\"]);\n\n //Подключение к контексту сообщений\n const {\n showMsgErr\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_messaging__WEBPACK_IMPORTED_MODULE_6__[\"MessagingСtx\"]);\n\n //Загрузка данных этапов с сервера\n const loadStageContracts = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async () => {\n if (stageContractsDataGrid.reload) {\n const data = await executeStored({\n stored: \"PKG_P8PANELS_PROJECTS.STAGE_CONTRACTS_LIST\",\n args: {\n NSTAGE: stage,\n CFILTERS: {\n VALUE: (0,_core_utils__WEBPACK_IMPORTED_MODULE_1__.object2Base64XML)(stageContractsDataGrid.filters, {\n arrayNodeName: \"filters\"\n }),\n SDATA_TYPE: SERV_DATA_TYPE_CLOB\n },\n CORDERS: {\n VALUE: (0,_core_utils__WEBPACK_IMPORTED_MODULE_1__.object2Base64XML)(stageContractsDataGrid.orders, {\n arrayNodeName: \"orders\"\n }),\n SDATA_TYPE: SERV_DATA_TYPE_CLOB\n },\n NPAGE_NUMBER: stageContractsDataGrid.pageNumber,\n NPAGE_SIZE: configSystemPageSize,\n NINCLUDE_DEF: stageContractsDataGrid.dataLoaded ? 0 : 1\n },\n attributeValueProcessor: (name, val) => name == \"SGOVCNTRID\" ? undefined : val,\n respArg: \"COUT\"\n });\n setStageContractsDataGrid(pv => ({\n ...pv,\n columnsDef: data.XCOLUMNS_DEF ? [...data.XCOLUMNS_DEF] : pv.columnsDef,\n rows: pv.pageNumber == 1 ? [...(data.XROWS || [])] : [...pv.rows, ...(data.XROWS || [])],\n dataLoaded: true,\n reload: false,\n morePages: (data.XROWS || []).length >= configSystemPageSize\n }));\n }\n }, [stage, stageContractsDataGrid.reload, stageContractsDataGrid.filters, stageContractsDataGrid.orders, stageContractsDataGrid.dataLoaded, stageContractsDataGrid.pageNumber, executeStored, configSystemPageSize, SERV_DATA_TYPE_CLOB]);\n\n //Отображение выходящих счетов на оплату от соисполнителя этапа\n const showPaymentAccountsIn = async ({\n sender\n }) => {\n const data = await executeStored({\n stored: \"PKG_P8PANELS_PROJECTS.STAGE_CONTRACTS_SELECT_PAY_IN\",\n args: {\n NPROJECTSTAGEPF: sender.NRN\n }\n });\n if (data.NIDENT) pOnlineShowUnit({\n unitCode: \"PaymentAccountsIn\",\n inputParameters: [{\n name: \"in_IDENT\",\n value: data.NIDENT\n }]\n });else showMsgErr(_app_text__WEBPACK_IMPORTED_MODULE_2__.TEXTS.NO_DATA_FOUND);\n };\n\n //Отображение фактических платежей соисполнителю этапа\n const showPayNotes = async ({\n sender\n }) => {\n const data = await executeStored({\n stored: \"PKG_P8PANELS_PROJECTS.STAGE_CONTRACTS_SELECT_FIN_OUT\",\n args: {\n NPROJECTSTAGEPF: sender.NRN\n }\n });\n if (data.NIDENT) pOnlineShowUnit({\n unitCode: \"PayNotes\",\n inputParameters: [{\n name: \"in_SelectList_Ident\",\n value: data.NIDENT\n }]\n });else showMsgErr(_app_text__WEBPACK_IMPORTED_MODULE_2__.TEXTS.NO_DATA_FOUND);\n };\n\n //Отображение приходных накладных от соисполнителя этапа\n const showIncomingInvoices = async ({\n sender\n }) => {\n const data = await executeStored({\n stored: \"PKG_P8PANELS_PROJECTS.STAGE_CONTRACTS_SELECT_ININV\",\n args: {\n NPROJECTSTAGEPF: sender.NRN\n }\n });\n if (data.NIDENT) pOnlineShowUnit({\n unitCode: \"IncomingInvoices\",\n inputParameters: [{\n name: \"in_IDENT\",\n value: data.NIDENT\n }]\n });else showMsgErr(_app_text__WEBPACK_IMPORTED_MODULE_2__.TEXTS.NO_DATA_FOUND);\n };\n\n //При изменении состояния фильтра\n const handleFilterChanged = ({\n filters\n }) => setStageContractsDataGrid(pv => ({\n ...pv,\n filters,\n pageNumber: 1,\n reload: true\n }));\n\n //При изменении состояния сортировки\n const handleOrderChanged = ({\n orders\n }) => setStageContractsDataGrid(pv => ({\n ...pv,\n orders,\n pageNumber: 1,\n reload: true\n }));\n\n //При изменении количества отображаемых страниц\n const handlePagesCountChanged = () => setStageContractsDataGrid(pv => ({\n ...pv,\n pageNumber: pv.pageNumber + 1,\n reload: true\n }));\n\n //При необходимости обновить данные\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n loadStageContracts();\n }, [stageContractsDataGrid.reload, loadStageContracts]);\n\n //Генерация содержимого\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_9__[\"default\"], {\n pt: 2\n }, stageContractsDataGrid.dataLoaded ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_components_p8p_data_grid__WEBPACK_IMPORTED_MODULE_3__.P8PDataGrid, _extends({}, _config_wrapper__WEBPACK_IMPORTED_MODULE_7__.P8P_DATA_GRID_CONFIG_PROPS, {\n columnsDef: stageContractsDataGrid.columnsDef,\n filtersInitial: filters,\n rows: stageContractsDataGrid.rows,\n size: _components_p8p_data_grid__WEBPACK_IMPORTED_MODULE_3__.P8P_DATA_GRID_SIZE.SMALL,\n morePages: stageContractsDataGrid.morePages,\n reloading: stageContractsDataGrid.reload,\n expandable: true,\n dataCellRender: prms => (0,_layouts__WEBPACK_IMPORTED_MODULE_8__.dataCellRender)({\n ...prms,\n panelUnit: _layouts__WEBPACK_IMPORTED_MODULE_8__.PANEL_UNITS.PROJECT_STAGE_CONTRACTS,\n pOnlineShowDocument\n }),\n rowExpandRender: prms => (0,_layouts__WEBPACK_IMPORTED_MODULE_8__.rowExpandRender)({\n ...prms,\n panelUnit: _layouts__WEBPACK_IMPORTED_MODULE_8__.PANEL_UNITS.PROJECT_STAGE_CONTRACTS,\n pOnlineShowDocument,\n showPaymentAccountsIn,\n showPayNotes,\n showIncomingInvoices\n }),\n valueFormatter: _layouts__WEBPACK_IMPORTED_MODULE_8__.valueFormatter,\n onOrderChanged: handleOrderChanged,\n onFilterChanged: handleFilterChanged,\n onPagesCountChanged: handlePagesCountChanged\n })) : null);\n};\n\n//Контроль свойств - Договоры с соисполнителями этапа проекта\nStageContracts.propTypes = {\n stage: (prop_types__WEBPACK_IMPORTED_MODULE_10___default().number).isRequired,\n filters: prop_types__WEBPACK_IMPORTED_MODULE_10___default().arrayOf(_components_p8p_data_grid__WEBPACK_IMPORTED_MODULE_3__.P8P_DATA_GRID_FILTER_SHAPE)\n};\n\n//----------------\n//Интерфейс модуля\n//----------------\n\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/panels/prj_fin/stage_contracts.js?"); /***/ }), @@ -3689,7 +3689,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ Stages: () => (/* binding */ Stages)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! prop-types */ \"./node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_13___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_13__);\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Box/Box.js\");\n/* harmony import */ var _core_utils__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../core/utils */ \"./app/core/utils.js\");\n/* harmony import */ var _app_text__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../../app.text */ \"./app.text.js\");\n/* harmony import */ var _components_p8p_data_grid__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../components/p8p_data_grid */ \"./app/components/p8p_data_grid.js\");\n/* harmony import */ var _components_p8p_fullscreen_dialog__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../components/p8p_fullscreen_dialog */ \"./app/components/p8p_fullscreen_dialog.js\");\n/* harmony import */ var _stage_arts__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./stage_arts */ \"./app/panels/prj_fin/stage_arts.js\");\n/* harmony import */ var _stage_contracts__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./stage_contracts */ \"./app/panels/prj_fin/stage_contracts.js\");\n/* harmony import */ var _context_backend__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../../context/backend */ \"./app/context/backend.js\");\n/* harmony import */ var _context_application__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../../context/application */ \"./app/context/application.js\");\n/* harmony import */ var _context_messaging__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../../context/messaging */ \"./app/context/messaging.js\");\n/* harmony import */ var _config_wrapper__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ../../config_wrapper */ \"./app/config_wrapper.js\");\n/* harmony import */ var _layouts__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./layouts */ \"./app/panels/prj_fin/layouts.js\");\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n/*\r\n Парус 8 - Панели мониторинга - ПУП - Экономика проектов\r\n Панель мониторинга: Список этапов проекта\r\n*/\n\n//---------------------\n//Подключение библиотек\n//---------------------\n\n //Классы React\n //Контроль свойств компонента\n //Интерфейсные компоненты\n //Вспомогательные процедуры и функции\n //Тектовые ресурсы и константы\n //Таблица данных\n //Полноэкранный диалог\n //Калькуляция этапа проекта\n //Договоры с соисполнителями этапа проекта\n //Контекст взаимодействия с сервером\n //Контекст приложения\n //Контекст сообщений\n //Подключение компонентов к настройкам приложения\n //Дополнительная разметка и вёрстка клиентских элементов\n\n//-----------\n//Тело модуля\n//-----------\n\n//Список этапов проекта\nconst Stages = ({\n project,\n projectName,\n filters\n}) => {\n //Собственное состояние\n const [stagesDataGrid, setStagesDataGrid] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({\n dataLoaded: false,\n columnsDef: [],\n filters: [...filters],\n orders: null,\n rows: [],\n reload: true,\n pageNumber: 1,\n morePages: true,\n selectedStageNumb: null,\n showStageArts: null,\n stageArtsFilters: [],\n showStageContracts: null,\n stageContractsFilters: []\n });\n\n //Подключение к контексту взаимодействия с сервером\n const {\n executeStored,\n SERV_DATA_TYPE_CLOB\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_backend__WEBPACK_IMPORTED_MODULE_7__[\"BackEndСtx\"]);\n\n //Подключение к контексту приложения\n const {\n pOnlineShowDocument,\n pOnlineShowUnit,\n configSystemPageSize\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_application__WEBPACK_IMPORTED_MODULE_8__[\"ApplicationСtx\"]);\n\n //Подключение к контексту сообщений\n const {\n showMsgErr\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_messaging__WEBPACK_IMPORTED_MODULE_9__[\"MessagingСtx\"]);\n\n //Загрузка данных этапов с сервера\n const loadStages = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async () => {\n if (stagesDataGrid.reload) {\n const data = await executeStored({\n stored: \"PKG_P8PANELS_PROJECTS.STAGES_LIST\",\n args: {\n NPRN: project,\n CFILTERS: {\n VALUE: (0,_core_utils__WEBPACK_IMPORTED_MODULE_1__.object2Base64XML)(stagesDataGrid.filters, {\n arrayNodeName: \"filters\"\n }),\n SDATA_TYPE: SERV_DATA_TYPE_CLOB\n },\n CORDERS: {\n VALUE: (0,_core_utils__WEBPACK_IMPORTED_MODULE_1__.object2Base64XML)(stagesDataGrid.orders, {\n arrayNodeName: \"orders\"\n }),\n SDATA_TYPE: SERV_DATA_TYPE_CLOB\n },\n NPAGE_NUMBER: stagesDataGrid.pageNumber,\n NPAGE_SIZE: configSystemPageSize,\n NINCLUDE_DEF: stagesDataGrid.dataLoaded ? 0 : 1\n },\n respArg: \"COUT\"\n });\n setStagesDataGrid(pv => ({\n ...pv,\n columnsDef: data.XCOLUMNS_DEF ? [...data.XCOLUMNS_DEF] : pv.columnsDef,\n rows: pv.pageNumber == 1 ? [...(data.XROWS || [])] : [...pv.rows, ...(data.XROWS || [])],\n dataLoaded: true,\n reload: false,\n morePages: (data.XROWS || []).length >= configSystemPageSize\n }));\n }\n }, [project, stagesDataGrid.reload, stagesDataGrid.filters, stagesDataGrid.orders, stagesDataGrid.dataLoaded, stagesDataGrid.pageNumber, executeStored, configSystemPageSize, SERV_DATA_TYPE_CLOB]);\n\n //Отображение журнала платежей по этапу проекта\n const showPayNotes = async ({\n sender,\n direction\n }) => {\n const data = await executeStored({\n stored: \"PKG_P8PANELS_PROJECTS.STAGES_SELECT_FIN\",\n args: {\n NRN: sender.NRN,\n NDIRECTION: direction\n }\n });\n if (data.NIDENT) pOnlineShowUnit({\n unitCode: \"PayNotes\",\n inputParameters: [{\n name: \"in_SelectList_Ident\",\n value: data.NIDENT\n }]\n });else showMsgErr(_app_text__WEBPACK_IMPORTED_MODULE_2__.TEXTS.NO_DATA_FOUND);\n };\n\n //Отображение журнала затрат по этапу проекта\n const showCostNotes = async ({\n sender\n }) => {\n const data = await executeStored({\n stored: \"PKG_P8PANELS_PROJECTS.STAGES_SELECT_COST_FACT\",\n args: {\n NRN: sender.NRN\n }\n });\n if (data.NIDENT) pOnlineShowUnit({\n unitCode: \"CostNotes\",\n inputParameters: [{\n name: \"in_SelectList_Ident\",\n value: data.NIDENT\n }]\n });else showMsgErr(_app_text__WEBPACK_IMPORTED_MODULE_2__.TEXTS.NO_DATA_FOUND);\n };\n\n //Отображение расходных накладных на отпуск потребителям по этапу проекта\n const showGoodsTransInvoicesToConsumers = async ({\n sender\n }) => {\n const data = await executeStored({\n stored: \"PKG_P8PANELS_PROJECTS.STAGES_SELECT_SUMM_REALIZ\",\n args: {\n NRN: sender.NRN\n }\n });\n if (data.NIDENT) pOnlineShowUnit({\n unitCode: \"GoodsTransInvoicesToConsumers\",\n inputParameters: [{\n name: \"in_SelectList_Ident\",\n value: data.NIDENT\n }]\n });else showMsgErr(_app_text__WEBPACK_IMPORTED_MODULE_2__.TEXTS.NO_DATA_FOUND);\n };\n\n //Отображение статей калькуляции по этапу проекта\n const showStageArts = ({\n sender,\n filters = []\n } = {}) => setStagesDataGrid(pv => ({\n ...pv,\n showStageArts: sender.NRN,\n selectedStageNumb: sender.SNUMB,\n stageArtsFilters: [...filters]\n }));\n\n //Отображение договоров с соисполнителями по этапу проекта\n const showContracts = ({\n sender,\n filters = []\n } = {}) => setStagesDataGrid(pv => ({\n ...pv,\n showStageContracts: sender.NRN,\n selectedStageNumb: sender.SNUMB,\n stageContractsFilters: [...filters]\n }));\n\n //При изменении состояния фильтра\n const handleFilterChanged = ({\n filters\n }) => setStagesDataGrid(pv => ({\n ...pv,\n filters,\n pageNumber: 1,\n reload: true\n }));\n\n //При изменении состояния сортировки\n const handleOrderChanged = ({\n orders\n }) => setStagesDataGrid(pv => ({\n ...pv,\n orders,\n pageNumber: 1,\n reload: true\n }));\n\n //При изменении количества отображаемых страниц\n const handlePagesCountChanged = () => setStagesDataGrid(pv => ({\n ...pv,\n pageNumber: pv.pageNumber + 1,\n reload: true\n }));\n\n //При закрытии списка договоров этапа\n const handleStageContractsClose = () => setStagesDataGrid(pv => ({\n ...pv,\n showStageContracts: null,\n stageContractsFilters: []\n }));\n\n //При закрытии калькуляции этапа\n const handleStageArtsClose = () => setStagesDataGrid(pv => ({\n ...pv,\n showStageArts: null,\n stageArtsFilters: []\n }));\n\n //При необходимости обновить данные\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n loadStages();\n }, [stagesDataGrid.reload, loadStages]);\n\n //Генерация содержимого\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_12__[\"default\"], {\n pt: 2\n }, stagesDataGrid.dataLoaded ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_components_p8p_data_grid__WEBPACK_IMPORTED_MODULE_3__.P8PDataGrid, _extends({}, _config_wrapper__WEBPACK_IMPORTED_MODULE_10__.P8P_DATA_GRID_CONFIG_PROPS, {\n columnsDef: stagesDataGrid.columnsDef,\n filtersInitial: filters,\n rows: stagesDataGrid.rows,\n size: _components_p8p_data_grid__WEBPACK_IMPORTED_MODULE_3__.P8P_DATA_GRID_SIZE.SMALL,\n morePages: stagesDataGrid.morePages,\n reloading: stagesDataGrid.reload,\n expandable: true,\n headCellRender: _layouts__WEBPACK_IMPORTED_MODULE_11__.headCellRender,\n dataCellRender: prms => (0,_layouts__WEBPACK_IMPORTED_MODULE_11__.dataCellRender)({\n ...prms,\n panelUnit: _layouts__WEBPACK_IMPORTED_MODULE_11__.PANEL_UNITS.PROJECT_STAGES,\n showStageArts,\n showContracts\n }),\n rowExpandRender: prms => (0,_layouts__WEBPACK_IMPORTED_MODULE_11__.rowExpandRender)({\n ...prms,\n panelUnit: _layouts__WEBPACK_IMPORTED_MODULE_11__.PANEL_UNITS.PROJECT_STAGES,\n pOnlineShowDocument,\n showStageArts,\n showContracts,\n showPayNotes,\n showCostNotes,\n showGoodsTransInvoicesToConsumers\n }),\n valueFormatter: prms => (0,_layouts__WEBPACK_IMPORTED_MODULE_11__.valueFormatter)({\n ...prms,\n panelUnit: _layouts__WEBPACK_IMPORTED_MODULE_11__.PANEL_UNITS.PROJECT_STAGES\n }),\n onOrderChanged: handleOrderChanged,\n onFilterChanged: handleFilterChanged,\n onPagesCountChanged: handlePagesCountChanged\n })) : null, stagesDataGrid.showStageContracts ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_components_p8p_fullscreen_dialog__WEBPACK_IMPORTED_MODULE_4__.P8PFullScreenDialog, {\n title: `Договоры этапа \"${stagesDataGrid.selectedStageNumb}\" проекта \"${projectName}\"`,\n onClose: handleStageContractsClose\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_stage_contracts__WEBPACK_IMPORTED_MODULE_6__.StageContracts, {\n stage: stagesDataGrid.showStageContracts,\n filters: stagesDataGrid.stageContractsFilters\n })) : null, stagesDataGrid.showStageArts ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_components_p8p_fullscreen_dialog__WEBPACK_IMPORTED_MODULE_4__.P8PFullScreenDialog, {\n title: `Калькуляция этапа \"${stagesDataGrid.selectedStageNumb}\" проекта \"${projectName}\"`,\n onClose: handleStageArtsClose\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_stage_arts__WEBPACK_IMPORTED_MODULE_5__.StageArts, {\n stage: stagesDataGrid.showStageArts,\n filters: stagesDataGrid.stageArtsFilters\n })) : null);\n};\n\n//Контроль свойств - Список этапов проекта\nStages.propTypes = {\n project: (prop_types__WEBPACK_IMPORTED_MODULE_13___default().number).isRequired,\n projectName: (prop_types__WEBPACK_IMPORTED_MODULE_13___default().string).isRequired,\n filters: prop_types__WEBPACK_IMPORTED_MODULE_13___default().arrayOf(_components_p8p_data_grid__WEBPACK_IMPORTED_MODULE_3__.P8P_DATA_GRID_FILTER_SHAPE)\n};\n\n//----------------\n//Интерфейс модуля\n//----------------\n\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/panels/prj_fin/stages.js?"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ Stages: () => (/* binding */ Stages)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! prop-types */ \"./node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_13___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_13__);\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Box/Box.js\");\n/* harmony import */ var _core_utils__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../core/utils */ \"./app/core/utils.js\");\n/* harmony import */ var _app_text__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../../app.text */ \"./app.text.js\");\n/* harmony import */ var _components_p8p_data_grid__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../components/p8p_data_grid */ \"./app/components/p8p_data_grid.js\");\n/* harmony import */ var _components_p8p_fullscreen_dialog__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../components/p8p_fullscreen_dialog */ \"./app/components/p8p_fullscreen_dialog.js\");\n/* harmony import */ var _stage_arts__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./stage_arts */ \"./app/panels/prj_fin/stage_arts.js\");\n/* harmony import */ var _stage_contracts__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./stage_contracts */ \"./app/panels/prj_fin/stage_contracts.js\");\n/* harmony import */ var _context_backend__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../../context/backend */ \"./app/context/backend.js\");\n/* harmony import */ var _context_application__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../../context/application */ \"./app/context/application.js\");\n/* harmony import */ var _context_messaging__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../../context/messaging */ \"./app/context/messaging.js\");\n/* harmony import */ var _config_wrapper__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ../../config_wrapper */ \"./app/config_wrapper.js\");\n/* harmony import */ var _layouts__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./layouts */ \"./app/panels/prj_fin/layouts.js\");\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n/*\r\n Парус 8 - Панели мониторинга - ПУП - Экономика проектов\r\n Панель мониторинга: Список этапов проекта\r\n*/\n\n//---------------------\n//Подключение библиотек\n//---------------------\n\n //Классы React\n //Контроль свойств компонента\n //Интерфейсные компоненты\n //Вспомогательные процедуры и функции\n //Тектовые ресурсы и константы\n //Таблица данных\n //Полноэкранный диалог\n //Калькуляция этапа проекта\n //Договоры с соисполнителями этапа проекта\n //Контекст взаимодействия с сервером\n //Контекст приложения\n //Контекст сообщений\n //Подключение компонентов к настройкам приложения\n //Дополнительная разметка и вёрстка клиентских элементов\n\n//-----------\n//Тело модуля\n//-----------\n\n//Список этапов проекта\nconst Stages = ({\n project,\n projectName,\n filters\n}) => {\n //Собственное состояние\n const [stagesDataGrid, setStagesDataGrid] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({\n dataLoaded: false,\n columnsDef: [],\n filters: [...filters],\n orders: null,\n rows: [],\n reload: true,\n pageNumber: 1,\n morePages: true,\n selectedStageNumb: null,\n showStageArts: null,\n stageArtsFilters: [],\n showStageContracts: null,\n stageContractsFilters: []\n });\n\n //Подключение к контексту взаимодействия с сервером\n const {\n executeStored,\n SERV_DATA_TYPE_CLOB\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_backend__WEBPACK_IMPORTED_MODULE_7__[\"BackEndСtx\"]);\n\n //Подключение к контексту приложения\n const {\n pOnlineShowDocument,\n pOnlineShowUnit,\n configSystemPageSize\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_application__WEBPACK_IMPORTED_MODULE_8__[\"ApplicationСtx\"]);\n\n //Подключение к контексту сообщений\n const {\n showMsgErr\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_messaging__WEBPACK_IMPORTED_MODULE_9__[\"MessagingСtx\"]);\n\n //Загрузка данных этапов с сервера\n const loadStages = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async () => {\n if (stagesDataGrid.reload) {\n const data = await executeStored({\n stored: \"PKG_P8PANELS_PROJECTS.STAGES_LIST\",\n args: {\n NPRN: project,\n CFILTERS: {\n VALUE: (0,_core_utils__WEBPACK_IMPORTED_MODULE_1__.object2Base64XML)(stagesDataGrid.filters, {\n arrayNodeName: \"filters\"\n }),\n SDATA_TYPE: SERV_DATA_TYPE_CLOB\n },\n CORDERS: {\n VALUE: (0,_core_utils__WEBPACK_IMPORTED_MODULE_1__.object2Base64XML)(stagesDataGrid.orders, {\n arrayNodeName: \"orders\"\n }),\n SDATA_TYPE: SERV_DATA_TYPE_CLOB\n },\n NPAGE_NUMBER: stagesDataGrid.pageNumber,\n NPAGE_SIZE: configSystemPageSize,\n NINCLUDE_DEF: stagesDataGrid.dataLoaded ? 0 : 1\n },\n respArg: \"COUT\"\n });\n setStagesDataGrid(pv => ({\n ...pv,\n columnsDef: data.XCOLUMNS_DEF ? [...data.XCOLUMNS_DEF] : pv.columnsDef,\n rows: pv.pageNumber == 1 ? [...(data.XROWS || [])] : [...pv.rows, ...(data.XROWS || [])],\n dataLoaded: true,\n reload: false,\n morePages: (data.XROWS || []).length >= configSystemPageSize\n }));\n }\n }, [project, stagesDataGrid.reload, stagesDataGrid.filters, stagesDataGrid.orders, stagesDataGrid.dataLoaded, stagesDataGrid.pageNumber, executeStored, configSystemPageSize, SERV_DATA_TYPE_CLOB]);\n\n //Отображение журнала платежей по этапу проекта\n const showPayNotes = async ({\n sender,\n direction\n }) => {\n const data = await executeStored({\n stored: \"PKG_P8PANELS_PROJECTS.STAGES_SELECT_FIN\",\n args: {\n NRN: sender.NRN,\n NDIRECTION: direction\n }\n });\n if (data.NIDENT) pOnlineShowUnit({\n unitCode: \"PayNotes\",\n inputParameters: [{\n name: \"in_SelectList_Ident\",\n value: data.NIDENT\n }]\n });else showMsgErr(_app_text__WEBPACK_IMPORTED_MODULE_2__.TEXTS.NO_DATA_FOUND);\n };\n\n //Отображение журнала затрат по этапу проекта\n const showCostNotes = async ({\n sender\n }) => {\n const data = await executeStored({\n stored: \"PKG_P8PANELS_PROJECTS.STAGES_SELECT_COST_FACT\",\n args: {\n NRN: sender.NRN\n }\n });\n if (data.NIDENT) pOnlineShowUnit({\n unitCode: \"CostNotes\",\n inputParameters: [{\n name: \"in_IDENT\",\n value: data.NIDENT\n }]\n });else showMsgErr(_app_text__WEBPACK_IMPORTED_MODULE_2__.TEXTS.NO_DATA_FOUND);\n };\n\n //Отображение расходных накладных на отпуск потребителям по этапу проекта\n const showGoodsTransInvoicesToConsumers = async ({\n sender\n }) => {\n const data = await executeStored({\n stored: \"PKG_P8PANELS_PROJECTS.STAGES_SELECT_SUMM_REALIZ\",\n args: {\n NRN: sender.NRN\n }\n });\n if (data.NIDENT) pOnlineShowUnit({\n unitCode: \"GoodsTransInvoicesToConsumers\",\n inputParameters: [{\n name: \"in_IDENT\",\n value: data.NIDENT\n }]\n });else showMsgErr(_app_text__WEBPACK_IMPORTED_MODULE_2__.TEXTS.NO_DATA_FOUND);\n };\n\n //Отображение статей калькуляции по этапу проекта\n const showStageArts = ({\n sender,\n filters = []\n } = {}) => setStagesDataGrid(pv => ({\n ...pv,\n showStageArts: sender.NRN,\n selectedStageNumb: sender.SNUMB,\n stageArtsFilters: [...filters]\n }));\n\n //Отображение договоров с соисполнителями по этапу проекта\n const showContracts = ({\n sender,\n filters = []\n } = {}) => setStagesDataGrid(pv => ({\n ...pv,\n showStageContracts: sender.NRN,\n selectedStageNumb: sender.SNUMB,\n stageContractsFilters: [...filters]\n }));\n\n //При изменении состояния фильтра\n const handleFilterChanged = ({\n filters\n }) => setStagesDataGrid(pv => ({\n ...pv,\n filters,\n pageNumber: 1,\n reload: true\n }));\n\n //При изменении состояния сортировки\n const handleOrderChanged = ({\n orders\n }) => setStagesDataGrid(pv => ({\n ...pv,\n orders,\n pageNumber: 1,\n reload: true\n }));\n\n //При изменении количества отображаемых страниц\n const handlePagesCountChanged = () => setStagesDataGrid(pv => ({\n ...pv,\n pageNumber: pv.pageNumber + 1,\n reload: true\n }));\n\n //При закрытии списка договоров этапа\n const handleStageContractsClose = () => setStagesDataGrid(pv => ({\n ...pv,\n showStageContracts: null,\n stageContractsFilters: []\n }));\n\n //При закрытии калькуляции этапа\n const handleStageArtsClose = () => setStagesDataGrid(pv => ({\n ...pv,\n showStageArts: null,\n stageArtsFilters: []\n }));\n\n //При необходимости обновить данные\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n loadStages();\n }, [stagesDataGrid.reload, loadStages]);\n\n //Генерация содержимого\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_12__[\"default\"], {\n pt: 2\n }, stagesDataGrid.dataLoaded ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_components_p8p_data_grid__WEBPACK_IMPORTED_MODULE_3__.P8PDataGrid, _extends({}, _config_wrapper__WEBPACK_IMPORTED_MODULE_10__.P8P_DATA_GRID_CONFIG_PROPS, {\n columnsDef: stagesDataGrid.columnsDef,\n filtersInitial: filters,\n rows: stagesDataGrid.rows,\n size: _components_p8p_data_grid__WEBPACK_IMPORTED_MODULE_3__.P8P_DATA_GRID_SIZE.SMALL,\n morePages: stagesDataGrid.morePages,\n reloading: stagesDataGrid.reload,\n expandable: true,\n headCellRender: _layouts__WEBPACK_IMPORTED_MODULE_11__.headCellRender,\n dataCellRender: prms => (0,_layouts__WEBPACK_IMPORTED_MODULE_11__.dataCellRender)({\n ...prms,\n panelUnit: _layouts__WEBPACK_IMPORTED_MODULE_11__.PANEL_UNITS.PROJECT_STAGES,\n showStageArts,\n showContracts\n }),\n rowExpandRender: prms => (0,_layouts__WEBPACK_IMPORTED_MODULE_11__.rowExpandRender)({\n ...prms,\n panelUnit: _layouts__WEBPACK_IMPORTED_MODULE_11__.PANEL_UNITS.PROJECT_STAGES,\n pOnlineShowDocument,\n showStageArts,\n showContracts,\n showPayNotes,\n showCostNotes,\n showGoodsTransInvoicesToConsumers\n }),\n valueFormatter: prms => (0,_layouts__WEBPACK_IMPORTED_MODULE_11__.valueFormatter)({\n ...prms,\n panelUnit: _layouts__WEBPACK_IMPORTED_MODULE_11__.PANEL_UNITS.PROJECT_STAGES\n }),\n onOrderChanged: handleOrderChanged,\n onFilterChanged: handleFilterChanged,\n onPagesCountChanged: handlePagesCountChanged\n })) : null, stagesDataGrid.showStageContracts ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_components_p8p_fullscreen_dialog__WEBPACK_IMPORTED_MODULE_4__.P8PFullScreenDialog, {\n title: `Договоры этапа \"${stagesDataGrid.selectedStageNumb}\" проекта \"${projectName}\"`,\n onClose: handleStageContractsClose\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_stage_contracts__WEBPACK_IMPORTED_MODULE_6__.StageContracts, {\n stage: stagesDataGrid.showStageContracts,\n filters: stagesDataGrid.stageContractsFilters\n })) : null, stagesDataGrid.showStageArts ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_components_p8p_fullscreen_dialog__WEBPACK_IMPORTED_MODULE_4__.P8PFullScreenDialog, {\n title: `Калькуляция этапа \"${stagesDataGrid.selectedStageNumb}\" проекта \"${projectName}\"`,\n onClose: handleStageArtsClose\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_stage_arts__WEBPACK_IMPORTED_MODULE_5__.StageArts, {\n stage: stagesDataGrid.showStageArts,\n filters: stagesDataGrid.stageArtsFilters\n })) : null);\n};\n\n//Контроль свойств - Список этапов проекта\nStages.propTypes = {\n project: (prop_types__WEBPACK_IMPORTED_MODULE_13___default().number).isRequired,\n projectName: (prop_types__WEBPACK_IMPORTED_MODULE_13___default().string).isRequired,\n filters: prop_types__WEBPACK_IMPORTED_MODULE_13___default().arrayOf(_components_p8p_data_grid__WEBPACK_IMPORTED_MODULE_3__.P8P_DATA_GRID_FILTER_SHAPE)\n};\n\n//----------------\n//Интерфейс модуля\n//----------------\n\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/panels/prj_fin/stages.js?"); /***/ }), From f4912d20f2e3321153512a3d155bc95ff2c910a3 Mon Sep 17 00:00:00 2001 From: Mikhail Chechnev Date: Wed, 24 Apr 2024 15:02:54 +0300 Subject: [PATCH 17/76] =?UTF-8?q?WEB=20APP:=20=D0=A1=D0=B2=D0=B5=D0=B6?= =?UTF-8?q?=D0=B0=D1=8F=20=D1=81=D0=B1=D0=BE=D1=80=D0=BA=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- dist/p8-panels.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/dist/p8-panels.js b/dist/p8-panels.js index 14876b9..7fa2530 100644 --- a/dist/p8-panels.js +++ b/dist/p8-panels.js @@ -3502,7 +3502,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ EqsPrfrm: () => (/* binding */ EqsPrfrm)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Dialog/Dialog.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/DialogTitle/DialogTitle.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/IconButton/IconButton.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Icon/Icon.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/DialogContent/DialogContent.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Paper/Paper.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Box/Box.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/FormControl/FormControl.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/InputLabel/InputLabel.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/OutlinedInput/OutlinedInput.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/InputAdornment/InputAdornment.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/FormHelperText/FormHelperText.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Grid/Grid.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Select/Select.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_22__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/MenuItem/MenuItem.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_23__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/DialogActions/DialogActions.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_24__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Button/Button.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_25__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Link/Link.js\");\n/* harmony import */ var _components_p8p_data_grid__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../components/p8p_data_grid */ \"./app/components/p8p_data_grid.js\");\n/* harmony import */ var _config_wrapper__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../config_wrapper */ \"./app/config_wrapper.js\");\n/* harmony import */ var _context_backend__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../context/backend */ \"./app/context/backend.js\");\n/* harmony import */ var _context_application__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../context/application */ \"./app/context/application.js\");\n/* harmony import */ var _context_messaging__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../context/messaging */ \"./app/context/messaging.js\");\n/* harmony import */ var _layouts__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./layouts */ \"./app/panels/eqs_prfrm/layouts.js\");\n/* harmony import */ var _app_text__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../../../app.text */ \"./app.text.js\");\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n/*\r\n Парус 8 - Панели мониторинга - ТОиР - Выполнение работ\r\n Панель мониторинга: Корневая панель выполнения работ\r\n*/\n\n//---------------------\n//Подключение библиотек\n//---------------------\n\n //Классы React\n\n //Таблица данных\n //Подключение компонентов к настройкам приложения\n //Контекст взаимодействия с сервером\n //Контекст приложения\n //Контекст сообщений\n //Дополнительная разметка и вёрстка клиентских элементов\n //Тектовые ресурсы и константы\n\n//-----------\n//Тело модуля\n//-----------\n\n//Корневая панель выполнения работ\nconst EqsPrfrm = () => {\n //Собственное состояние - таблица данных\n const [dataGrid, setDataGrid] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({\n dataLoaded: false,\n columnsDef: [],\n groups: [],\n rows: [],\n reload: false\n });\n\n // Состояние информации о трудоёмкости\n const [info, setInfo] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({\n cntP: 0,\n sumP: 0,\n cntF: 0,\n sumF: 0\n });\n\n // Состояние фильтра (для отладки)\n // const [filter, setFilter] = useState({\n // belong: \"Демопример\",\n // prodObj: \"Карьер\",\n // techServ: \"\",\n // respDep: \"\",\n // fromMonth: 1,\n // fromYear: 2024,\n // toMonth: 12,\n // toYear: 2024\n // });\n\n // Состояние фильтра\n const [filter, setFilter] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({\n belong: \"\",\n prodObj: \"\",\n techServ: \"\",\n respDep: \"\",\n fromMonth: 1,\n fromYear: 1990,\n toMonth: 1,\n toYear: 1990\n });\n // Состояние открытия фильтра\n const [filterOpen, setFilterOpen] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(true);\n // Состояние данных по умолчанию для фильтра (true - для отладки)\n const [defaultLoaded, setDefaultLoaded] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(false);\n // Состояние хранения копии фильтра\n const [filterCopy, setFilterCopy] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({\n ...filter\n });\n // Состояние ограничения редактирования фильтра\n const [filterLock, setFilterLock] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(false);\n\n // Состояние ячейки заголовка даты (по раскрытию/скрытию)\n const [activeRef, setActiveRef] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)();\n // Состояние актуальности ссылки на ячейку\n const [refIsDeprecated, setRidFlag] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(true);\n\n //Подключение к контексту приложения\n const {\n pOnlineShowDictionary,\n pOnlineShowUnit\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_application__WEBPACK_IMPORTED_MODULE_4__[\"ApplicationСtx\"]);\n\n //Подключение к контексту взаимодействия с сервером\n const {\n executeStored\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_backend__WEBPACK_IMPORTED_MODULE_3__[\"BackEndСtx\"]);\n\n //Подключение к контексту сообщений\n const {\n showMsgErr\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_messaging__WEBPACK_IMPORTED_MODULE_5__[\"MessagingСtx\"]);\n\n //Загрузка данных таблицы с сервера\n const loadData = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async () => {\n if (dataGrid.reload) {\n const data = await executeStored({\n stored: \"PKG_P8PANELS_EQUIPSRV.EQUIPSRV_GRID\",\n args: {\n SBELONG: filter.belong,\n SPRODOBJ: filter.prodObj,\n STECHSERV: filter.techServ,\n SRESPDEP: filter.respDep,\n NFROMMONTH: filter.fromMonth,\n NFROMYEAR: filter.fromYear,\n NTOMONTH: filter.toMonth,\n NTOYEAR: filter.toYear\n },\n respArg: \"COUT\",\n attributeValueProcessor: (name, val) => [\"caption\", \"name\", \"parent\"].includes(name) ? undefined : val\n });\n let cP = 0;\n let sP = 0;\n let cF = 0;\n let sF = 0;\n let properties = [];\n if (data.XROWS != null) {\n data.XROWS.map(row => {\n properties = [];\n Object.entries(row).forEach(([key, value]) => properties.push({\n name: key,\n data: value\n }));\n let info2 = properties.find(element => {\n return element.name === \"SINFO2\";\n });\n if (info2 != undefined) {\n if (info2.data == \"План\") {\n properties.map(p => {\n if (_layouts__WEBPACK_IMPORTED_MODULE_6__.DAY_NAME_REG_EXP.test(p.name)) cP = cP + 1;\n });\n } else if (info2.data == \"Факт\") {\n properties.map(p => {\n if (_layouts__WEBPACK_IMPORTED_MODULE_6__.DAY_NAME_REG_EXP.test(p.name)) cF = cF + 1;\n });\n }\n } else {\n properties.map(p => {\n if (_layouts__WEBPACK_IMPORTED_MODULE_6__.MONTH_NAME_REG_EXP.test(p.name)) {\n let str = p.data;\n let m = [];\n let i = 0;\n while ((m = _layouts__WEBPACK_IMPORTED_MODULE_6__.DIGITS_REG_EXP.exec(str)) != null) {\n if (i == 0) sP = sP + Number(m[0].replace(\",\", \".\"));else {\n sF = sF + Number(m[0].replace(\",\", \".\"));\n }\n i++;\n }\n }\n });\n }\n });\n }\n setInfo({\n cntP: cP,\n sumP: sP,\n cntF: cF,\n sumF: sF\n });\n setDataGrid(pv => ({\n ...pv,\n columnsDef: data.XCOLUMNS_DEF ? [...data.XCOLUMNS_DEF] : pv.columnsDef,\n rows: [...(data.XROWS || [])],\n groups: [...(data.XGROUPS || [])],\n dataLoaded: true,\n reload: false\n }));\n }\n }, [dataGrid.reload, filter, executeStored]);\n\n //Загрузка значений фильра по умолчанию\n const loadDefaultFilter = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async () => {\n const data = await executeStored({\n stored: \"PKG_P8PANELS_EQUIPSRV.GET_DEFAULT_FP\",\n respArg: \"COUT\"\n });\n setFilter(pv => ({\n ...pv,\n belong: data.JURPERS,\n fromMonth: data.MONTH,\n fromYear: data.YEAR,\n toMonth: data.MONTH,\n toYear: data.YEAR\n }));\n setDefaultLoaded(true);\n }, [executeStored]);\n\n //пользовательский параметр JuridicalPerson системы\n // const getJurPers = useCallback(async () => {\n // const data = await executeStored({\n // stored: \"PKG_P8PANELS_EQUIPSRV.GET_JUR_PERS_PRM\",\n // respArg: \"CRES\"\n // });\n // setFilter(pv => ({ ...pv, belong: data }));\n // }, [executeStored]);\n\n // Отбор документа (ТОиР или Ремонтных ведомостей) по ячейке даты\n const showEquipSrv = async ({\n date,\n workType,\n info\n }) => {\n const [techName, servKind] = info.split(\"_\");\n let type;\n if (workType == \"План\") type = 0;else type = 1;\n let [year, month, day] = date.substring(1).split(\"_\");\n\n //if (day == undefined) day = null;\n\n const data = await executeStored({\n stored: \"PKG_P8PANELS_EQUIPSRV.SELECT_EQUIPSRV\",\n args: {\n SBELONG: filter.belong,\n SPRODOBJ: filter.prodObj,\n STECHSERV: filter.techServ ? filter.techServ : null,\n SRESPDEP: filter.respDep ? filter.respDep : null,\n STECHNAME: techName,\n SSRVKIND: servKind,\n NYEAR: Number(year),\n NMONTH: Number(month),\n NDAY: day ? Number(day) : null,\n NWORKTYPE: type\n }\n });\n if (data.NIDENT) {\n if (type == 0) pOnlineShowUnit({\n unitCode: \"EquipTechServices\",\n inputParameters: [{\n name: \"in_SelectList_Ident\",\n value: data.NIDENT\n }]\n });else pOnlineShowUnit({\n unitCode: \"EquipRepairSheets\",\n inputParameters: [{\n name: \"in_Ident\",\n value: data.NIDENT\n }]\n });\n } else showMsgErr(_app_text__WEBPACK_IMPORTED_MODULE_7__.TEXTS.NO_DATA_FOUND);\n };\n\n // Открыть фильтр\n const openFilter = () => {\n setFilterOpen(true);\n };\n\n // Закрыть фильтр\n const closeFilter = e => {\n if (filterLock && e != undefined) setFilter(filterCopy);\n setFilterOpen(false);\n };\n\n // Очистить фильтр\n const clearFilter = () => {\n setFilter({\n belong: \"\",\n prodObj: \"\",\n techServ: \"\",\n respDep: \"\",\n fromMonth: \"\",\n fromYear: \"\",\n toMonth: \"\",\n toYear: \"\"\n });\n };\n\n // Отработка события скрытия/раскрытия ячейки даты\n const handleClick = (e, ref) => {\n const curCell = ref.current;\n if (e.target.type == \"button\" || e.target.offsetParent.type == \"button\") {\n setActiveRef(curCell);\n setRidFlag(false);\n }\n };\n\n // При необходимости обновить данные таблицы\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n loadData();\n }, [loadData, dataGrid.reload]);\n\n // При открытом фильтре\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n if (filterOpen) {\n {\n setFilterCopy({\n ...filter\n });\n if (!defaultLoaded) loadDefaultFilter();\n }\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [filterOpen]);\n\n // При нажатии скрытии/раскрытии ячейки даты, фокус на неё\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n if (!refIsDeprecated) {\n if (activeRef) {\n var cellRect = activeRef.getBoundingClientRect();\n //console.log(window.scrollX + cellRect.left + activeRef.clientWidth / 2 - window.innerWidth / 2);\n window.scrollTo(window.scrollX + cellRect.left + activeRef.clientWidth / 2 - window.innerWidth / 2, 0);\n setRidFlag(true);\n }\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [refIsDeprecated]);\n let yearArray = [];\n const monthArray = [\"Январь\", \"Февраль\", \"Март\", \"Апрель\", \"Май\", \"Июнь\", \"Июль\", \"Август\", \"Сентябрь\", \"Октябрь\", \"Ноябрь\", \"Декабрь\"];\n let today = new Date();\n\n // Получение списка лет\n const getYearArray = () => {\n for (let i = 1990; i <= today.getFullYear(); i++) {\n yearArray.push(i);\n }\n };\n\n //Генерация содержимого\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", null, getYearArray(), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_8__[\"default\"], {\n open: filterOpen,\n onClose: closeFilter\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_9__[\"default\"], null, \"\\u0424\\u0438\\u043B\\u044C\\u0442\\u0440 \\u043E\\u0442\\u0431\\u043E\\u0440\\u0430\"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_10__[\"default\"], {\n \"aria-label\": \"close\",\n onClick: closeFilter,\n sx: {\n position: \"absolute\",\n right: 8,\n top: 8,\n color: theme => theme.palette.grey[500]\n }\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_11__[\"default\"], null, \"close\")), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_12__[\"default\"], null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_13__[\"default\"], null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_14__[\"default\"], {\n component: \"section\",\n sx: {\n p: 1\n }\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_15__[\"default\"], {\n readOnly: true,\n fullWidth: true,\n variant: \"outlined\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_16__[\"default\"], {\n htmlFor: \"belong-outlined\"\n }, \"\\u041F\\u0440\\u0438\\u043D\\u0430\\u0434\\u043B\\u0435\\u0436\\u043D\\u043E\\u0441\\u0442\\u044C\"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_17__[\"default\"], {\n error: filter.belong ? false : true,\n id: \"belong-outlined\",\n value: filter.belong,\n endAdornment: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_18__[\"default\"], {\n position: \"end\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_10__[\"default\"], {\n \"aria-label\": \"belong select\",\n onClick: () => {\n pOnlineShowDictionary({\n unitCode: \"JuridicalPersons\",\n callBack: res => res.success === true ? setFilter(pv => ({\n ...pv,\n belong: res.outParameters.out_CODE\n })) : null\n });\n },\n edge: \"end\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_11__[\"default\"], null, \"list\"))),\n \"aria-describedby\": \"belong-outlined-helper-text\",\n label: \"\\u041F\\u0440\\u0438\\u043D\\u0430\\u0434\\u043B\\u0435\\u0436\\u043D\\u043E\\u0441\\u0442\\u044C\"\n }), filter.belong ? null : /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_19__[\"default\"], {\n id: \"belong-outlined-helper-text\",\n sx: {\n color: \"red\"\n }\n }, \"*\\u041E\\u0431\\u044F\\u0437\\u0430\\u0442\\u0435\\u043B\\u044C\\u043D\\u043E\\u0435 \\u043F\\u043E\\u043B\\u0435\"))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_14__[\"default\"], {\n component: \"section\",\n sx: {\n p: 1\n }\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_15__[\"default\"], {\n readOnly: true,\n fullWidth: true\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_16__[\"default\"], {\n htmlFor: \"prodObj-outlined\"\n }, \"\\u041F\\u0440\\u043E\\u0438\\u0437\\u0432\\u043E\\u0434\\u0441\\u0442\\u0432\\u0435\\u043D\\u043D\\u044B\\u0439 \\u043E\\u0431\\u044A\\u0435\\u043A\\u0442\"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_17__[\"default\"], {\n error: filter.prodObj ? false : true,\n id: \"prodObj-outlined\",\n value: filter.prodObj,\n endAdornment: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_18__[\"default\"], {\n position: \"end\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_10__[\"default\"], {\n \"aria-label\": \"prodObj select\",\n onClick: () => {\n pOnlineShowDictionary({\n unitCode: \"EquipConfiguration\",\n callBack: res => res.success === true ? setFilter(pv => ({\n ...pv,\n prodObj: res.outParameters.out_CODE\n })) : null\n });\n },\n edge: \"end\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_11__[\"default\"], null, \"list\"))),\n \"aria-describedby\": \"prodObj-outlined-helper-text\",\n label: \"\\u041F\\u0440\\u043E\\u0438\\u0437\\u0432\\u043E\\u0434\\u0441\\u0442\\u0432\\u0435\\u043D\\u043D\\u044B\\u0439 \\u043E\\u0431\\u044A\\u0435\\u043A\\u0442\"\n }), filter.prodObj ? null : /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_19__[\"default\"], {\n id: \"prodObj-outlined-helper-text\",\n sx: {\n color: \"red\"\n }\n }, \"*\\u041E\\u0431\\u044F\\u0437\\u0430\\u0442\\u0435\\u043B\\u044C\\u043D\\u043E\\u0435 \\u043F\\u043E\\u043B\\u0435\"))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_14__[\"default\"], {\n component: \"section\",\n sx: {\n p: 1\n }\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_15__[\"default\"], {\n readOnly: true,\n fullWidth: true\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_16__[\"default\"], {\n htmlFor: \"techServ-outlined\"\n }, \"\\u0422\\u0435\\u0445\\u043D\\u0438\\u0447\\u0435\\u0441\\u043A\\u0430\\u044F \\u0441\\u043B\\u0443\\u0436\\u0431\\u0430\"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_17__[\"default\"], {\n id: \"techServ-outlined\",\n value: filter.techServ,\n endAdornment: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_18__[\"default\"], {\n position: \"end\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_10__[\"default\"], {\n \"aria-label\": \"techServ select\",\n onClick: () => {\n pOnlineShowDictionary({\n unitCode: \"INS_DEPARTMENT\",\n callBack: res => res.success === true ? setFilter(pv => ({\n ...pv,\n techServ: res.outParameters.out_CODE\n })) : null\n });\n },\n edge: \"end\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_11__[\"default\"], null, \"list\"))),\n label: \"\\u0422\\u0435\\u0445\\u043D\\u0438\\u0447\\u0435\\u0441\\u043A\\u0430\\u044F \\u0441\\u043B\\u0443\\u0436\\u0431\\u0430\"\n }))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_14__[\"default\"], {\n component: \"section\",\n sx: {\n p: 1\n }\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_15__[\"default\"], {\n readOnly: true,\n fullWidth: true\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_16__[\"default\"], {\n htmlFor: \"respDep-outlined\"\n }, \"\\u041E\\u0442\\u0432\\u0435\\u0442\\u0441\\u0442\\u0432\\u0435\\u043D\\u043D\\u043E\\u0435 \\u043F\\u043E\\u0434\\u0440\\u0430\\u0437\\u0434\\u0435\\u043B\\u0435\\u043D\\u0438\\u0435\"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_17__[\"default\"], {\n id: \"respDep-outlined\",\n value: filter.respDep,\n endAdornment: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_18__[\"default\"], {\n position: \"end\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_10__[\"default\"], {\n \"aria-label\": \"respDep select\",\n onClick: () => {\n pOnlineShowDictionary({\n unitCode: \"INS_DEPARTMENT\",\n callBack: res => res.success === true ? setFilter(pv => ({\n ...pv,\n respDep: res.outParameters.out_CODE\n })) : null\n });\n },\n edge: \"end\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_11__[\"default\"], null, \"list\"))),\n label: \"\\u041E\\u0442\\u0432\\u0435\\u0442\\u0441\\u0442\\u0432\\u0435\\u043D\\u043D\\u043E\\u0435 \\u043F\\u043E\\u0434\\u0440\\u0430\\u0437\\u0434\\u0435\\u043B\\u0435\\u043D\\u0438\\u0435\"\n }))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_14__[\"default\"], {\n component: \"section\",\n sx: {\n p: 1\n }\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_20__[\"default\"], {\n container: true,\n spacing: 2\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_20__[\"default\"], {\n textAlign: \"center\",\n item: true,\n xs: 4\n }, \"\\u041D\\u0430\\u0447\\u0430\\u043B\\u043E \\u043F\\u0435\\u0440\\u0438\\u043E\\u0434\\u0430:\"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_20__[\"default\"], {\n item: true,\n xs: 4\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_15__[\"default\"], {\n fullWidth: true\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_16__[\"default\"], {\n id: \"from-month-select-label\"\n }, \"\\u041C\\u0435\\u0441\\u044F\\u0446\"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_21__[\"default\"], {\n error: filter.fromMonth ? false : true,\n labelId: \"from-month-select-label\",\n id: \"from-month-select\",\n value: filter.fromMonth,\n \"aria-describedby\": \"from-month-select-helper-text\",\n label: \"\\u041C\\u0435\\u0441\\u044F\\u0446\",\n onChange: e => setFilter(pv => ({\n ...pv,\n fromMonth: e.target.value\n }))\n }, monthArray.map((item, i) => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_22__[\"default\"], {\n key: i + 1,\n value: i + 1\n }, item))), filter.fromMonth ? null : /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_19__[\"default\"], {\n id: \"from-month-select-helper-text\",\n sx: {\n color: \"red\"\n }\n }, \"*\\u041E\\u0431\\u044F\\u0437\\u0430\\u0442\\u0435\\u043B\\u044C\\u043D\\u043E\\u0435 \\u043F\\u043E\\u043B\\u0435\"))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_20__[\"default\"], {\n item: true,\n xs: 4\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_15__[\"default\"], {\n fullWidth: true\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_16__[\"default\"], {\n id: \"from-year-select-label\"\n }, \"\\u0413\\u043E\\u0434\"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_21__[\"default\"], {\n error: filter.fromYear ? false : true,\n labelId: \"from-year-select-label\",\n id: \"from-year-select\",\n value: filter.fromYear,\n \"aria-describedby\": \"from-year-select-helper-text\",\n label: \"\\u0413\\u043E\\u0434\",\n onChange: e => setFilter(pv => ({\n ...pv,\n fromYear: e.target.value\n }))\n }, yearArray.map((item, i) => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_22__[\"default\"], {\n key: i,\n value: item\n }, item))), filter.fromYear ? null : /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_19__[\"default\"], {\n id: \"from-year-select-helper-text\",\n sx: {\n color: \"red\"\n }\n }, \"*\\u041E\\u0431\\u044F\\u0437\\u0430\\u0442\\u0435\\u043B\\u044C\\u043D\\u043E\\u0435 \\u043F\\u043E\\u043B\\u0435\"))))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_14__[\"default\"], {\n component: \"section\",\n sx: {\n p: 1\n }\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_20__[\"default\"], {\n container: true,\n spacing: 2\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_20__[\"default\"], {\n textAlign: \"center\",\n item: true,\n xs: 4\n }, \"\\u041A\\u043E\\u043D\\u0435\\u0446 \\u043F\\u0435\\u0440\\u0438\\u043E\\u0434\\u0430:\"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_20__[\"default\"], {\n item: true,\n xs: 4\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_15__[\"default\"], {\n fullWidth: true\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_16__[\"default\"], {\n id: \"to-month-select-label\"\n }, \"\\u041C\\u0435\\u0441\\u044F\\u0446\"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_21__[\"default\"], {\n error: filter.toMonth ? false : true,\n labelId: \"to-month-select-label\",\n id: \"to-month-select\",\n value: filter.toMonth,\n \"aria-describedby\": \"to-month-select-helper-text\",\n label: \"\\u041C\\u0435\\u0441\\u044F\\u0446\",\n onChange: e => setFilter(pv => ({\n ...pv,\n toMonth: e.target.value\n }))\n }, monthArray.map((item, i) => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_22__[\"default\"], {\n key: i + 1,\n value: i + 1\n }, item))), filter.toMonth ? null : /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_19__[\"default\"], {\n id: \"to-month-select-helper-text\",\n sx: {\n color: \"red\"\n }\n }, \"*\\u041E\\u0431\\u044F\\u0437\\u0430\\u0442\\u0435\\u043B\\u044C\\u043D\\u043E\\u0435 \\u043F\\u043E\\u043B\\u0435\"))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_20__[\"default\"], {\n item: true,\n xs: 4\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_15__[\"default\"], {\n fullWidth: true\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_16__[\"default\"], {\n id: \"to-year-select-label\"\n }, \"\\u0413\\u043E\\u0434\"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_21__[\"default\"], {\n error: filter.toYear ? false : true,\n labelId: \"to-year-select-label\",\n id: \"to-year-select\",\n value: filter.toYear,\n \"aria-describedby\": \"to-year-select-helper-text\",\n label: \"\\u0413\\u043E\\u0434\",\n onChange: e => setFilter(pv => ({\n ...pv,\n toYear: e.target.value\n }))\n }, yearArray.map((item, i) => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_22__[\"default\"], {\n key: i,\n value: item\n }, item))), filter.toYear ? null : /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_19__[\"default\"], {\n id: \"to-year-select-helper-text\",\n sx: {\n color: \"red\"\n }\n }, \"*\\u041E\\u0431\\u044F\\u0437\\u0430\\u0442\\u0435\\u043B\\u044C\\u043D\\u043E\\u0435 \\u043F\\u043E\\u043B\\u0435\"))))))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_23__[\"default\"], null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_24__[\"default\"], {\n variant: \"contained\",\n disabled: filter.belong && filter.prodObj && filter.fromMonth && filter.fromYear && filter.toMonth && filter.toYear ? false : true,\n onClick: () => {\n setFilterLock(true);\n setDataGrid({\n reload: true\n });\n closeFilter();\n }\n }, \"\\u0421\\u0444\\u043E\\u0440\\u043C\\u0438\\u0440\\u043E\\u0432\\u0430\\u0442\\u044C\"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_24__[\"default\"], {\n variant: \"contained\",\n onClick: clearFilter\n }, \"\\u041E\\u0447\\u0438\\u0441\\u0442\\u0438\\u0442\\u044C\"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_24__[\"default\"], {\n variant: \"contained\",\n onClick: () => {\n setFilter(filterCopy);\n }\n }, \"\\u041E\\u0442\\u043C\\u0435\\u043D\\u0430\"))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_25__[\"default\"], {\n component: \"button\",\n variant: \"body2\",\n textAlign: \"left\",\n onClick: openFilter\n }, \"\\u0424\\u0438\\u043B\\u044C\\u0442\\u0440 \\u043E\\u0442\\u0431\\u043E\\u0440\\u0430: \", filter.belong ? `Принадлежность: ${filter.belong}` : \"\", \" \", filter.prodObj ? `Производственный объект: ${filter.prodObj}` : \"\", \" \", filter.techServ ? `Техническая служба: ${filter.techServ}` : \"\", \" \", filter.respDep ? `Ответственное подразделение: ${filter.respDep}` : \"\", \" \", filter.fromMonth && filter.fromYear ? `Начало периода: ${filter.fromMonth < 10 ? \"0\" + filter.fromMonth : filter.fromMonth}.${filter.fromYear}` : \"\", \" \", filter.toMonth && filter.toYear ? `Конец периода: ${filter.toMonth < 10 ? \"0\" + filter.toMonth : filter.toMonth}.${filter.toYear}` : \"\"), dataGrid.dataLoaded ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_13__[\"default\"], {\n variant: \"outlined\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_20__[\"default\"], {\n container: true,\n spacing: 1\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_20__[\"default\"], {\n item: true,\n xs: 12\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_14__[\"default\"], {\n p: 1\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_components_p8p_data_grid__WEBPACK_IMPORTED_MODULE_1__.P8PDataGrid, _extends({}, _config_wrapper__WEBPACK_IMPORTED_MODULE_2__.P8P_DATA_GRID_CONFIG_PROPS, {\n columnsDef: dataGrid.columnsDef,\n groups: dataGrid.groups,\n rows: dataGrid.rows,\n size: _components_p8p_data_grid__WEBPACK_IMPORTED_MODULE_1__.P8P_DATA_GRID_SIZE.LARGE,\n reloading: dataGrid.reload,\n headCellRender: prms => (0,_layouts__WEBPACK_IMPORTED_MODULE_6__.headCellRender)({\n ...prms\n }, handleClick, filter.techServ, info.cntP, info.sumP, info.cntF, info.sumF),\n dataCellRender: prms => (0,_layouts__WEBPACK_IMPORTED_MODULE_6__.dataCellRender)({\n ...prms\n }, showEquipSrv),\n groupCellRender: prms => (0,_layouts__WEBPACK_IMPORTED_MODULE_6__.groupCellRender)({\n ...prms\n }),\n showCellRightBorder: true\n })))))) : null);\n};\n\n//----------------\n//Интерфейс модуля\n//----------------\n\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/panels/eqs_prfrm/eqs_prfrm.js?"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ EqsPrfrm: () => (/* binding */ EqsPrfrm)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Dialog/Dialog.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/DialogTitle/DialogTitle.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/IconButton/IconButton.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Icon/Icon.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/DialogContent/DialogContent.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Paper/Paper.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Box/Box.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/FormControl/FormControl.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/InputLabel/InputLabel.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/OutlinedInput/OutlinedInput.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/InputAdornment/InputAdornment.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/FormHelperText/FormHelperText.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Grid/Grid.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Select/Select.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_22__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/MenuItem/MenuItem.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_23__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/DialogActions/DialogActions.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_24__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Button/Button.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_25__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Link/Link.js\");\n/* harmony import */ var _components_p8p_data_grid__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../components/p8p_data_grid */ \"./app/components/p8p_data_grid.js\");\n/* harmony import */ var _config_wrapper__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../config_wrapper */ \"./app/config_wrapper.js\");\n/* harmony import */ var _context_backend__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../context/backend */ \"./app/context/backend.js\");\n/* harmony import */ var _context_application__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../context/application */ \"./app/context/application.js\");\n/* harmony import */ var _context_messaging__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../context/messaging */ \"./app/context/messaging.js\");\n/* harmony import */ var _layouts__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./layouts */ \"./app/panels/eqs_prfrm/layouts.js\");\n/* harmony import */ var _app_text__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../../../app.text */ \"./app.text.js\");\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n/*\r\n Парус 8 - Панели мониторинга - ТОиР - Выполнение работ\r\n Панель мониторинга: Корневая панель выполнения работ\r\n*/\n\n//---------------------\n//Подключение библиотек\n//---------------------\n\n //Классы React\n\n //Таблица данных\n //Подключение компонентов к настройкам приложения\n //Контекст взаимодействия с сервером\n //Контекст приложения\n //Контекст сообщений\n //Дополнительная разметка и вёрстка клиентских элементов\n //Тектовые ресурсы и константы\n\n//-----------\n//Тело модуля\n//-----------\n\n//Корневая панель выполнения работ\nconst EqsPrfrm = () => {\n //Собственное состояние - таблица данных\n const [dataGrid, setDataGrid] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({\n dataLoaded: false,\n columnsDef: [],\n groups: [],\n rows: [],\n reload: false\n });\n\n // Состояние информации о трудоёмкости\n const [info, setInfo] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({\n cntP: 0,\n sumP: 0,\n cntF: 0,\n sumF: 0\n });\n\n // Состояние фильтра\n const [filter, setFilter] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({\n belong: \"\",\n prodObj: \"\",\n techServ: \"\",\n respDep: \"\",\n fromMonth: 1,\n fromYear: 1990,\n toMonth: 1,\n toYear: 1990\n });\n // Состояние открытия фильтра\n const [filterOpen, setFilterOpen] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(true);\n // Состояние данных по умолчанию для фильтра\n const [defaultLoaded, setDefaultLoaded] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(false);\n // Состояние хранения копии фильтра\n const [filterCopy, setFilterCopy] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({\n ...filter\n });\n // Состояние ограничения редактирования фильтра\n const [filterLock, setFilterLock] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(false);\n\n // Состояние ячейки заголовка даты (по раскрытию/скрытию)\n const [activeRef, setActiveRef] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)();\n // Состояние актуальности ссылки на ячейку\n const [refIsDeprecated, setRidFlag] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(true);\n\n //Подключение к контексту приложения\n const {\n pOnlineShowDictionary,\n pOnlineShowUnit\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_application__WEBPACK_IMPORTED_MODULE_4__[\"ApplicationСtx\"]);\n\n //Подключение к контексту взаимодействия с сервером\n const {\n executeStored\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_backend__WEBPACK_IMPORTED_MODULE_3__[\"BackEndСtx\"]);\n\n //Подключение к контексту сообщений\n const {\n showMsgErr\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_messaging__WEBPACK_IMPORTED_MODULE_5__[\"MessagingСtx\"]);\n\n //Загрузка данных таблицы с сервера\n const loadData = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async () => {\n if (dataGrid.reload) {\n const data = await executeStored({\n stored: \"PKG_P8PANELS_EQUIPSRV.EQUIPSRV_GRID\",\n args: {\n SBELONG: filter.belong,\n SPRODOBJ: filter.prodObj,\n STECHSERV: filter.techServ,\n SRESPDEP: filter.respDep,\n NFROMMONTH: filter.fromMonth,\n NFROMYEAR: filter.fromYear,\n NTOMONTH: filter.toMonth,\n NTOYEAR: filter.toYear\n },\n respArg: \"COUT\",\n attributeValueProcessor: (name, val) => [\"caption\", \"name\", \"parent\"].includes(name) ? undefined : val\n });\n let cP = 0;\n let sP = 0;\n let cF = 0;\n let sF = 0;\n let properties = [];\n if (data.XROWS != null) {\n data.XROWS.map(row => {\n properties = [];\n Object.entries(row).forEach(([key, value]) => properties.push({\n name: key,\n data: value\n }));\n let info2 = properties.find(element => {\n return element.name === \"SINFO2\";\n });\n if (info2 != undefined) {\n if (info2.data == \"План\") {\n properties.map(p => {\n if (_layouts__WEBPACK_IMPORTED_MODULE_6__.DAY_NAME_REG_EXP.test(p.name)) cP = cP + 1;\n });\n } else if (info2.data == \"Факт\") {\n properties.map(p => {\n if (_layouts__WEBPACK_IMPORTED_MODULE_6__.DAY_NAME_REG_EXP.test(p.name)) cF = cF + 1;\n });\n }\n } else {\n properties.map(p => {\n if (_layouts__WEBPACK_IMPORTED_MODULE_6__.MONTH_NAME_REG_EXP.test(p.name)) {\n let str = p.data;\n let m = [];\n let i = 0;\n while ((m = _layouts__WEBPACK_IMPORTED_MODULE_6__.DIGITS_REG_EXP.exec(str)) != null) {\n if (i == 0) sP = sP + Number(m[0].replace(\",\", \".\"));else {\n sF = sF + Number(m[0].replace(\",\", \".\"));\n }\n i++;\n }\n }\n });\n }\n });\n }\n setInfo({\n cntP: cP,\n sumP: sP,\n cntF: cF,\n sumF: sF\n });\n setDataGrid(pv => ({\n ...pv,\n columnsDef: data.XCOLUMNS_DEF ? [...data.XCOLUMNS_DEF] : pv.columnsDef,\n rows: [...(data.XROWS || [])],\n groups: [...(data.XGROUPS || [])],\n dataLoaded: true,\n reload: false\n }));\n }\n }, [dataGrid.reload, filter, executeStored]);\n\n //Загрузка значений фильра по умолчанию\n const loadDefaultFilter = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async () => {\n const data = await executeStored({\n stored: \"PKG_P8PANELS_EQUIPSRV.GET_DEFAULT_FP\",\n respArg: \"COUT\"\n });\n setFilter(pv => ({\n ...pv,\n belong: data.JURPERS,\n fromMonth: 1,\n fromYear: data.YEAR,\n toMonth: 12,\n toYear: data.YEAR\n }));\n setDefaultLoaded(true);\n }, [executeStored]);\n\n // Отбор документа (ТОиР или Ремонтных ведомостей) по ячейке даты\n const showEquipSrv = async ({\n date,\n workType,\n info\n }) => {\n const [techName, servKind] = info.split(\"_\");\n let type;\n if (workType == \"План\") type = 0;else type = 1;\n let [year, month, day] = date.substring(1).split(\"_\");\n\n //if (day == undefined) day = null;\n\n const data = await executeStored({\n stored: \"PKG_P8PANELS_EQUIPSRV.SELECT_EQUIPSRV\",\n args: {\n SBELONG: filter.belong,\n SPRODOBJ: filter.prodObj,\n STECHSERV: filter.techServ ? filter.techServ : null,\n SRESPDEP: filter.respDep ? filter.respDep : null,\n STECHNAME: techName,\n SSRVKIND: servKind,\n NYEAR: Number(year),\n NMONTH: Number(month),\n NDAY: day ? Number(day) : null,\n NWORKTYPE: type\n }\n });\n if (data.NIDENT) {\n if (type == 0) pOnlineShowUnit({\n unitCode: \"EquipTechServices\",\n inputParameters: [{\n name: \"in_SelectList_Ident\",\n value: data.NIDENT\n }]\n });else pOnlineShowUnit({\n unitCode: \"EquipRepairSheets\",\n inputParameters: [{\n name: \"in_Ident\",\n value: data.NIDENT\n }]\n });\n } else showMsgErr(_app_text__WEBPACK_IMPORTED_MODULE_7__.TEXTS.NO_DATA_FOUND);\n };\n\n // Открыть фильтр\n const openFilter = () => {\n setFilterOpen(true);\n };\n\n // Закрыть фильтр\n const closeFilter = e => {\n if (filterLock && e != undefined) setFilter(filterCopy);\n setFilterOpen(false);\n };\n\n // Очистить фильтр\n const clearFilter = () => {\n setFilter({\n belong: \"\",\n prodObj: \"\",\n techServ: \"\",\n respDep: \"\",\n fromMonth: \"\",\n fromYear: \"\",\n toMonth: \"\",\n toYear: \"\"\n });\n };\n\n // Отработка события скрытия/раскрытия ячейки даты\n const handleClick = (e, ref) => {\n const curCell = ref.current;\n if (e.target.type == \"button\" || e.target.offsetParent.type == \"button\") {\n setActiveRef(curCell);\n setRidFlag(false);\n }\n };\n\n // При необходимости обновить данные таблицы\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n loadData();\n }, [loadData, dataGrid.reload]);\n\n // При открытом фильтре\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n if (filterOpen) {\n {\n setFilterCopy({\n ...filter\n });\n if (!defaultLoaded) loadDefaultFilter();\n }\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [filterOpen]);\n\n // При нажатии скрытии/раскрытии ячейки даты, фокус на неё\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n if (!refIsDeprecated) {\n if (activeRef) {\n var cellRect = activeRef.getBoundingClientRect();\n window.scrollTo(window.scrollX + cellRect.left + activeRef.clientWidth / 2 - window.innerWidth / 2, 0);\n setRidFlag(true);\n }\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [refIsDeprecated]);\n let yearArray = [];\n const monthArray = [\"Январь\", \"Февраль\", \"Март\", \"Апрель\", \"Май\", \"Июнь\", \"Июль\", \"Август\", \"Сентябрь\", \"Октябрь\", \"Ноябрь\", \"Декабрь\"];\n let today = new Date();\n\n // Получение списка лет\n const getYearArray = () => {\n for (let i = 1990; i <= today.getFullYear(); i++) {\n yearArray.push(i);\n }\n };\n\n //Генерация содержимого\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", null, getYearArray(), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_8__[\"default\"], {\n open: filterOpen,\n onClose: closeFilter\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_9__[\"default\"], null, \"\\u0424\\u0438\\u043B\\u044C\\u0442\\u0440 \\u043E\\u0442\\u0431\\u043E\\u0440\\u0430\"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_10__[\"default\"], {\n \"aria-label\": \"close\",\n onClick: closeFilter,\n sx: {\n position: \"absolute\",\n right: 8,\n top: 8,\n color: theme => theme.palette.grey[500]\n }\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_11__[\"default\"], null, \"close\")), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_12__[\"default\"], null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_13__[\"default\"], null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_14__[\"default\"], {\n component: \"section\",\n sx: {\n p: 1\n }\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_15__[\"default\"], {\n readOnly: true,\n fullWidth: true,\n variant: \"outlined\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_16__[\"default\"], {\n htmlFor: \"belong-outlined\"\n }, \"\\u041F\\u0440\\u0438\\u043D\\u0430\\u0434\\u043B\\u0435\\u0436\\u043D\\u043E\\u0441\\u0442\\u044C\"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_17__[\"default\"], {\n error: filter.belong ? false : true,\n id: \"belong-outlined\",\n value: filter.belong,\n endAdornment: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_18__[\"default\"], {\n position: \"end\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_10__[\"default\"], {\n \"aria-label\": \"belong select\",\n onClick: () => {\n pOnlineShowDictionary({\n unitCode: \"JuridicalPersons\",\n callBack: res => res.success === true ? setFilter(pv => ({\n ...pv,\n belong: res.outParameters.out_CODE\n })) : null\n });\n },\n edge: \"end\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_11__[\"default\"], null, \"list\"))),\n \"aria-describedby\": \"belong-outlined-helper-text\",\n label: \"\\u041F\\u0440\\u0438\\u043D\\u0430\\u0434\\u043B\\u0435\\u0436\\u043D\\u043E\\u0441\\u0442\\u044C\"\n }), filter.belong ? null : /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_19__[\"default\"], {\n id: \"belong-outlined-helper-text\",\n sx: {\n color: \"red\"\n }\n }, \"*\\u041E\\u0431\\u044F\\u0437\\u0430\\u0442\\u0435\\u043B\\u044C\\u043D\\u043E\\u0435 \\u043F\\u043E\\u043B\\u0435\"))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_14__[\"default\"], {\n component: \"section\",\n sx: {\n p: 1\n }\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_15__[\"default\"], {\n readOnly: true,\n fullWidth: true\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_16__[\"default\"], {\n htmlFor: \"prodObj-outlined\"\n }, \"\\u041F\\u0440\\u043E\\u0438\\u0437\\u0432\\u043E\\u0434\\u0441\\u0442\\u0432\\u0435\\u043D\\u043D\\u044B\\u0439 \\u043E\\u0431\\u044A\\u0435\\u043A\\u0442\"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_17__[\"default\"], {\n error: filter.prodObj ? false : true,\n id: \"prodObj-outlined\",\n value: filter.prodObj,\n endAdornment: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_18__[\"default\"], {\n position: \"end\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_10__[\"default\"], {\n \"aria-label\": \"prodObj select\",\n onClick: () => {\n pOnlineShowDictionary({\n unitCode: \"EquipConfiguration\",\n callBack: res => res.success === true ? setFilter(pv => ({\n ...pv,\n prodObj: res.outParameters.out_CODE\n })) : null\n });\n },\n edge: \"end\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_11__[\"default\"], null, \"list\"))),\n \"aria-describedby\": \"prodObj-outlined-helper-text\",\n label: \"\\u041F\\u0440\\u043E\\u0438\\u0437\\u0432\\u043E\\u0434\\u0441\\u0442\\u0432\\u0435\\u043D\\u043D\\u044B\\u0439 \\u043E\\u0431\\u044A\\u0435\\u043A\\u0442\"\n }), filter.prodObj ? null : /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_19__[\"default\"], {\n id: \"prodObj-outlined-helper-text\",\n sx: {\n color: \"red\"\n }\n }, \"*\\u041E\\u0431\\u044F\\u0437\\u0430\\u0442\\u0435\\u043B\\u044C\\u043D\\u043E\\u0435 \\u043F\\u043E\\u043B\\u0435\"))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_14__[\"default\"], {\n component: \"section\",\n sx: {\n p: 1\n }\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_15__[\"default\"], {\n readOnly: true,\n fullWidth: true\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_16__[\"default\"], {\n htmlFor: \"techServ-outlined\"\n }, \"\\u0422\\u0435\\u0445\\u043D\\u0438\\u0447\\u0435\\u0441\\u043A\\u0430\\u044F \\u0441\\u043B\\u0443\\u0436\\u0431\\u0430\"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_17__[\"default\"], {\n id: \"techServ-outlined\",\n value: filter.techServ,\n endAdornment: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_18__[\"default\"], {\n position: \"end\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_10__[\"default\"], {\n \"aria-label\": \"techServ select\",\n onClick: () => {\n pOnlineShowDictionary({\n unitCode: \"INS_DEPARTMENT\",\n callBack: res => res.success === true ? setFilter(pv => ({\n ...pv,\n techServ: res.outParameters.out_CODE\n })) : null\n });\n },\n edge: \"end\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_11__[\"default\"], null, \"list\"))),\n label: \"\\u0422\\u0435\\u0445\\u043D\\u0438\\u0447\\u0435\\u0441\\u043A\\u0430\\u044F \\u0441\\u043B\\u0443\\u0436\\u0431\\u0430\"\n }))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_14__[\"default\"], {\n component: \"section\",\n sx: {\n p: 1\n }\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_15__[\"default\"], {\n readOnly: true,\n fullWidth: true\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_16__[\"default\"], {\n htmlFor: \"respDep-outlined\"\n }, \"\\u041E\\u0442\\u0432\\u0435\\u0442\\u0441\\u0442\\u0432\\u0435\\u043D\\u043D\\u043E\\u0435 \\u043F\\u043E\\u0434\\u0440\\u0430\\u0437\\u0434\\u0435\\u043B\\u0435\\u043D\\u0438\\u0435\"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_17__[\"default\"], {\n id: \"respDep-outlined\",\n value: filter.respDep,\n endAdornment: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_18__[\"default\"], {\n position: \"end\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_10__[\"default\"], {\n \"aria-label\": \"respDep select\",\n onClick: () => {\n pOnlineShowDictionary({\n unitCode: \"INS_DEPARTMENT\",\n callBack: res => res.success === true ? setFilter(pv => ({\n ...pv,\n respDep: res.outParameters.out_CODE\n })) : null\n });\n },\n edge: \"end\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_11__[\"default\"], null, \"list\"))),\n label: \"\\u041E\\u0442\\u0432\\u0435\\u0442\\u0441\\u0442\\u0432\\u0435\\u043D\\u043D\\u043E\\u0435 \\u043F\\u043E\\u0434\\u0440\\u0430\\u0437\\u0434\\u0435\\u043B\\u0435\\u043D\\u0438\\u0435\"\n }))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_14__[\"default\"], {\n component: \"section\",\n sx: {\n p: 1\n }\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_20__[\"default\"], {\n container: true,\n spacing: 2\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_20__[\"default\"], {\n textAlign: \"center\",\n item: true,\n xs: 4\n }, \"\\u041D\\u0430\\u0447\\u0430\\u043B\\u043E \\u043F\\u0435\\u0440\\u0438\\u043E\\u0434\\u0430:\"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_20__[\"default\"], {\n item: true,\n xs: 4\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_15__[\"default\"], {\n fullWidth: true\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_16__[\"default\"], {\n id: \"from-month-select-label\"\n }, \"\\u041C\\u0435\\u0441\\u044F\\u0446\"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_21__[\"default\"], {\n error: filter.fromMonth ? false : true,\n labelId: \"from-month-select-label\",\n id: \"from-month-select\",\n value: filter.fromMonth,\n \"aria-describedby\": \"from-month-select-helper-text\",\n label: \"\\u041C\\u0435\\u0441\\u044F\\u0446\",\n onChange: e => setFilter(pv => ({\n ...pv,\n fromMonth: e.target.value\n }))\n }, monthArray.map((item, i) => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_22__[\"default\"], {\n key: i + 1,\n value: i + 1\n }, item))), filter.fromMonth ? null : /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_19__[\"default\"], {\n id: \"from-month-select-helper-text\",\n sx: {\n color: \"red\"\n }\n }, \"*\\u041E\\u0431\\u044F\\u0437\\u0430\\u0442\\u0435\\u043B\\u044C\\u043D\\u043E\\u0435 \\u043F\\u043E\\u043B\\u0435\"))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_20__[\"default\"], {\n item: true,\n xs: 4\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_15__[\"default\"], {\n fullWidth: true\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_16__[\"default\"], {\n id: \"from-year-select-label\"\n }, \"\\u0413\\u043E\\u0434\"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_21__[\"default\"], {\n error: filter.fromYear ? false : true,\n labelId: \"from-year-select-label\",\n id: \"from-year-select\",\n value: filter.fromYear,\n \"aria-describedby\": \"from-year-select-helper-text\",\n label: \"\\u0413\\u043E\\u0434\",\n onChange: e => setFilter(pv => ({\n ...pv,\n fromYear: e.target.value\n }))\n }, yearArray.map((item, i) => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_22__[\"default\"], {\n key: i,\n value: item\n }, item))), filter.fromYear ? null : /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_19__[\"default\"], {\n id: \"from-year-select-helper-text\",\n sx: {\n color: \"red\"\n }\n }, \"*\\u041E\\u0431\\u044F\\u0437\\u0430\\u0442\\u0435\\u043B\\u044C\\u043D\\u043E\\u0435 \\u043F\\u043E\\u043B\\u0435\"))))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_14__[\"default\"], {\n component: \"section\",\n sx: {\n p: 1\n }\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_20__[\"default\"], {\n container: true,\n spacing: 2\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_20__[\"default\"], {\n textAlign: \"center\",\n item: true,\n xs: 4\n }, \"\\u041A\\u043E\\u043D\\u0435\\u0446 \\u043F\\u0435\\u0440\\u0438\\u043E\\u0434\\u0430:\"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_20__[\"default\"], {\n item: true,\n xs: 4\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_15__[\"default\"], {\n fullWidth: true\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_16__[\"default\"], {\n id: \"to-month-select-label\"\n }, \"\\u041C\\u0435\\u0441\\u044F\\u0446\"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_21__[\"default\"], {\n error: filter.toMonth ? false : true,\n labelId: \"to-month-select-label\",\n id: \"to-month-select\",\n value: filter.toMonth,\n \"aria-describedby\": \"to-month-select-helper-text\",\n label: \"\\u041C\\u0435\\u0441\\u044F\\u0446\",\n onChange: e => setFilter(pv => ({\n ...pv,\n toMonth: e.target.value\n }))\n }, monthArray.map((item, i) => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_22__[\"default\"], {\n key: i + 1,\n value: i + 1\n }, item))), filter.toMonth ? null : /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_19__[\"default\"], {\n id: \"to-month-select-helper-text\",\n sx: {\n color: \"red\"\n }\n }, \"*\\u041E\\u0431\\u044F\\u0437\\u0430\\u0442\\u0435\\u043B\\u044C\\u043D\\u043E\\u0435 \\u043F\\u043E\\u043B\\u0435\"))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_20__[\"default\"], {\n item: true,\n xs: 4\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_15__[\"default\"], {\n fullWidth: true\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_16__[\"default\"], {\n id: \"to-year-select-label\"\n }, \"\\u0413\\u043E\\u0434\"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_21__[\"default\"], {\n error: filter.toYear ? false : true,\n labelId: \"to-year-select-label\",\n id: \"to-year-select\",\n value: filter.toYear,\n \"aria-describedby\": \"to-year-select-helper-text\",\n label: \"\\u0413\\u043E\\u0434\",\n onChange: e => setFilter(pv => ({\n ...pv,\n toYear: e.target.value\n }))\n }, yearArray.map((item, i) => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_22__[\"default\"], {\n key: i,\n value: item\n }, item))), filter.toYear ? null : /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_19__[\"default\"], {\n id: \"to-year-select-helper-text\",\n sx: {\n color: \"red\"\n }\n }, \"*\\u041E\\u0431\\u044F\\u0437\\u0430\\u0442\\u0435\\u043B\\u044C\\u043D\\u043E\\u0435 \\u043F\\u043E\\u043B\\u0435\"))))))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_23__[\"default\"], null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_24__[\"default\"], {\n variant: \"contained\",\n disabled: filter.belong && filter.prodObj && filter.fromMonth && filter.fromYear && filter.toMonth && filter.toYear ? false : true,\n onClick: () => {\n setFilterLock(true);\n setDataGrid({\n reload: true\n });\n closeFilter();\n }\n }, \"\\u0421\\u0444\\u043E\\u0440\\u043C\\u0438\\u0440\\u043E\\u0432\\u0430\\u0442\\u044C\"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_24__[\"default\"], {\n variant: \"contained\",\n onClick: clearFilter\n }, \"\\u041E\\u0447\\u0438\\u0441\\u0442\\u0438\\u0442\\u044C\"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_24__[\"default\"], {\n variant: \"contained\",\n onClick: () => {\n setFilter(filterCopy);\n }\n }, \"\\u041E\\u0442\\u043C\\u0435\\u043D\\u0430\"))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_25__[\"default\"], {\n component: \"button\",\n variant: \"body2\",\n textAlign: \"left\",\n onClick: openFilter\n }, \"\\u0424\\u0438\\u043B\\u044C\\u0442\\u0440 \\u043E\\u0442\\u0431\\u043E\\u0440\\u0430: \", filter.belong ? `Принадлежность: ${filter.belong}` : \"\", \" \", filter.prodObj ? `Производственный объект: ${filter.prodObj}` : \"\", \" \", filter.techServ ? `Техническая служба: ${filter.techServ}` : \"\", \" \", filter.respDep ? `Ответственное подразделение: ${filter.respDep}` : \"\", \" \", filter.fromMonth && filter.fromYear ? `Начало периода: ${filter.fromMonth < 10 ? \"0\" + filter.fromMonth : filter.fromMonth}.${filter.fromYear}` : \"\", \" \", filter.toMonth && filter.toYear ? `Конец периода: ${filter.toMonth < 10 ? \"0\" + filter.toMonth : filter.toMonth}.${filter.toYear}` : \"\"), dataGrid.dataLoaded ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_13__[\"default\"], {\n variant: \"outlined\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_20__[\"default\"], {\n container: true,\n spacing: 1\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_20__[\"default\"], {\n item: true,\n xs: 12\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_14__[\"default\"], {\n p: 1\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_components_p8p_data_grid__WEBPACK_IMPORTED_MODULE_1__.P8PDataGrid, _extends({}, _config_wrapper__WEBPACK_IMPORTED_MODULE_2__.P8P_DATA_GRID_CONFIG_PROPS, {\n columnsDef: dataGrid.columnsDef,\n groups: dataGrid.groups,\n rows: dataGrid.rows,\n size: _components_p8p_data_grid__WEBPACK_IMPORTED_MODULE_1__.P8P_DATA_GRID_SIZE.LARGE,\n reloading: dataGrid.reload,\n headCellRender: prms => (0,_layouts__WEBPACK_IMPORTED_MODULE_6__.headCellRender)({\n ...prms\n }, handleClick, filter.techServ, info.cntP, info.sumP, info.cntF, info.sumF),\n dataCellRender: prms => (0,_layouts__WEBPACK_IMPORTED_MODULE_6__.dataCellRender)({\n ...prms\n }, showEquipSrv),\n groupCellRender: prms => (0,_layouts__WEBPACK_IMPORTED_MODULE_6__.groupCellRender)({\n ...prms\n }),\n showCellRightBorder: true\n })))))) : null);\n};\n\n//----------------\n//Интерфейс модуля\n//----------------\n\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/panels/eqs_prfrm/eqs_prfrm.js?"); /***/ }), @@ -3524,7 +3524,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ DAY_NAME_REG_EXP: () => (/* binding */ DAY_NAME_REG_EXP),\n/* harmony export */ DIGITS_REG_EXP: () => (/* binding */ DIGITS_REG_EXP),\n/* harmony export */ MONTH_NAME_REG_EXP: () => (/* binding */ MONTH_NAME_REG_EXP),\n/* harmony export */ dataCellRender: () => (/* binding */ dataCellRender),\n/* harmony export */ groupCellRender: () => (/* binding */ groupCellRender),\n/* harmony export */ headCellRender: () => (/* binding */ headCellRender)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Stack/Stack.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Grid/Grid.js\");\n/*\r\n Парус 8 - \r\n Дополнительная разметка и вёрстка клиентских элементов\r\n*/\n\n//---------------------\n//Подключение библиотек\n//---------------------\n\n //Классы React\n\n\n//---------\n//Константы\n//---------\n\n//Шаблон чисел и имён ячеек дат\nconst DIGITS_REG_EXP = /\\d+,?\\d*/g;\nconst MONTH_NAME_REG_EXP = /_\\d{4}_\\d{1,2}/;\nconst DAY_NAME_REG_EXP = /_\\d{4}_\\d{1,2}_\\d{1,2}/;\nlet curParent = \"\";\nlet x = 0;\n\n//-----------\n//Тело модуля\n//-----------\n\nconst formatDate = date => {\n const [year, month, day] = date.substring(1).split(\"_\");\n let nd;\n if (day == null) nd = `${month < 10 ? \"0\" + month : month}.${year}`;else nd = `${day < 10 ? \"0\" + day : day}.${month < 10 ? \"0\" + month : month}.${year}`;\n return nd;\n};\n\n// eslint-disable-next-line no-unused-vars\nconst headCellRender = ({\n columnDef\n}, hClick, podr, cntP, sumP, cntF, sumF) => {\n let cellStyle = {\n border: \"1px solid rgba(0, 0, 0)\",\n textAlign: \"center\"\n };\n let cellProps = {};\n let stackStyle = {};\n let data = columnDef.caption;\n if (columnDef.expandable) {\n const ref = /*#__PURE__*/(0,react__WEBPACK_IMPORTED_MODULE_0__.createRef)();\n cellStyle = {\n ...cellStyle,\n padding: \"5px\"\n };\n cellProps = {\n ...cellProps,\n ref: ref,\n onClick: e => {\n hClick(e, ref);\n }\n };\n stackStyle = {\n flexDirection: \"column\"\n };\n }\n if (columnDef.name == \"STEST\") cellStyle = {\n display: \"none\"\n };\n if (columnDef.name == \"SINFO\" || columnDef.name == \"SINFO2\") {\n cellProps = {\n colSpan: 2\n };\n if (columnDef.name == \"SINFO\") cellProps = {\n ...cellProps,\n rowSpan: 2\n };\n //if (columnDef.name == \"SINFO\") {\n //cellStyle = { display: \"none\" };\n // cellStyle = { ...cellStyle, padding: \"unset\" };\n // data = (\n // \n // \n // \n // Подразделение:\n // \n // \n // {podr}\n // \n // \n // Кол-во ремонтов, план:\n // \n // \n // {cntP}\n // \n // \n // Трудоемкость, час. план:\n // \n // \n // {sumP}\n // \n // \n // Кол-во ремонтов, факт:\n // \n // \n // {cntF}\n // \n // \n // Трудоемкость, час. факт:\n // \n // \n // {sumF}\n // \n // \n // \n // );\n //}\n }\n\n if (columnDef.name == \"SINFO2\") cellStyle = {\n display: \"none\"\n };\n if (columnDef.visible && DAY_NAME_REG_EXP.test(columnDef.name)) {\n cellStyle = {\n ...cellStyle,\n padding: \"5px\",\n minWidth: \"25px\",\n maxWidth: \"25px\"\n };\n stackStyle = {\n justifyContent: \"center\"\n };\n }\n return {\n cellStyle,\n cellProps,\n stackStyle,\n data\n };\n};\nconst dataCellRender = ({\n row,\n columnDef\n}, showEquipSrv) => {\n let cellStyle = {\n padding: \"2px\",\n border: \"1px solid rgba(0, 0, 0) !important\",\n textAlign: \"center\"\n };\n let cellProps = {};\n let data = \" \";\n if (row[\"SINFO2\"] == undefined) {\n if (columnDef.name == \"STEST\") {\n cellProps = {\n colSpan: 2\n };\n cellStyle = {\n ...cellStyle,\n textAlign: \"right\",\n fontWeight: \"bold\"\n };\n }\n if (columnDef.name == \"SINFO2\") cellStyle = {\n display: \"none\"\n };\n if (columnDef.parent == \"\" && columnDef.expandable == true && columnDef.expanded == false) {\n curParent = columnDef.name;\n return {\n cellStyle: {\n ...cellStyle,\n height: \"25px\"\n },\n data\n };\n } else if (columnDef.name != \"SINFO2\" && columnDef.parent != \"\" && columnDef.expandable == false && columnDef.expanded == true) {\n if (columnDef.name.endsWith(\"_1\")) {\n curParent = columnDef.parent;\n const [year, month] = curParent.substring(1).split(\"_\");\n x = new Date(year, month, 0).getDate();\n cellProps = {\n colSpan: x\n };\n data = row[curParent];\n return {\n cellStyle,\n cellProps,\n data\n };\n } else {\n cellStyle = {\n display: \"none\"\n };\n }\n }\n }\n if (columnDef.name == \"STEST\" && row[\"SINFO2\"] == \"План\") {\n cellStyle = {\n ...cellStyle\n };\n cellProps = {\n rowSpan: 2\n };\n }\n if (columnDef.name == \"STEST\" && row[\"SINFO2\"] == \"Факт\") {\n cellStyle = {\n display: \"none\"\n };\n }\n switch (row[columnDef.name]) {\n case \"blue\":\n cellStyle = {\n ...cellStyle,\n backgroundColor: \"lightblue\",\n border: \"1px solid rgba(0, 0, 0) !important\"\n };\n cellProps = {\n title: formatDate(columnDef.name),\n onClick: () => {\n showEquipSrv({\n date: columnDef.name,\n workType: row[\"SINFO2\"],\n info: row[\"groupName\"]\n });\n }\n };\n return {\n cellStyle,\n cellProps,\n data\n };\n case \"green\":\n cellStyle = {\n ...cellStyle,\n backgroundColor: \"green\",\n border: \"1px solid rgba(0, 0, 0) !important\"\n };\n cellProps = {\n title: formatDate(columnDef.name),\n onClick: () => {\n showEquipSrv({\n date: columnDef.name,\n workType: row[\"SINFO2\"],\n info: row[\"groupName\"]\n });\n }\n };\n return {\n cellStyle,\n cellProps,\n data\n };\n case \"red\":\n cellStyle = {\n ...cellStyle,\n backgroundColor: \"crimson\",\n border: \"1px solid rgba(0, 0, 0) !important\"\n };\n cellProps = {\n title: formatDate(columnDef.name),\n onClick: () => {\n showEquipSrv({\n date: columnDef.name,\n workType: row[\"SINFO2\"],\n info: row[\"groupName\"]\n });\n }\n };\n return {\n cellStyle,\n cellProps,\n data\n };\n case \"green red\":\n case \"red green\":\n cellStyle = {\n ...cellStyle,\n padding: \"unset\"\n };\n cellProps = {\n title: formatDate(columnDef.name)\n };\n data = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_1__[\"default\"], {\n sx: {\n justifyContent: \"center\"\n },\n direction: \"row\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n container: true,\n maxHeight: \"100%\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n item: true,\n xs: 6,\n sx: {\n backgroundColor: \"green\"\n },\n onClick: () => showEquipSrv({\n date: columnDef.name,\n workType: row[\"SINFO2\"],\n info: row[\"groupName\"]\n })\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"p\", {\n style: {\n display: \"none\"\n }\n }, \"g\")), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n item: true,\n xs: 6,\n sx: {\n backgroundColor: \"crimson\"\n },\n onClick: () => showEquipSrv({\n date: columnDef.name,\n workType: row[\"SINFO2\"],\n info: row[\"groupName\"]\n })\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"p\", {\n style: {\n display: \"none\"\n }\n }, \"r\"))));\n }\n return {\n cellStyle,\n cellProps\n };\n};\nconst groupCellRender = () => {\n let cellStyle = {\n display: \"none\"\n };\n return {\n cellStyle\n };\n};\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/panels/eqs_prfrm/layouts.js?"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ DAY_NAME_REG_EXP: () => (/* binding */ DAY_NAME_REG_EXP),\n/* harmony export */ DIGITS_REG_EXP: () => (/* binding */ DIGITS_REG_EXP),\n/* harmony export */ MONTH_NAME_REG_EXP: () => (/* binding */ MONTH_NAME_REG_EXP),\n/* harmony export */ dataCellRender: () => (/* binding */ dataCellRender),\n/* harmony export */ groupCellRender: () => (/* binding */ groupCellRender),\n/* harmony export */ headCellRender: () => (/* binding */ headCellRender)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Stack/Stack.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Grid/Grid.js\");\n/*\r\n Парус 8 - \r\n Дополнительная разметка и вёрстка клиентских элементов\r\n*/\n\n//---------------------\n//Подключение библиотек\n//---------------------\n\n //Классы React\n\n\n//---------\n//Константы\n//---------\n\n//Шаблон чисел и имён ячеек дат\nconst DIGITS_REG_EXP = /\\d+,?\\d*/g;\nconst MONTH_NAME_REG_EXP = /_\\d{4}_\\d{1,2}/;\nconst DAY_NAME_REG_EXP = /_\\d{4}_\\d{1,2}_\\d{1,2}/;\nlet curParent = \"\";\nlet x = 0;\n\n//-----------\n//Тело модуля\n//-----------\n\nconst formatDate = date => {\n const [year, month, day] = date.substring(1).split(\"_\");\n let nd;\n if (day == null) nd = `${month < 10 ? \"0\" + month : month}.${year}`;else nd = `${day < 10 ? \"0\" + day : day}.${month < 10 ? \"0\" + month : month}.${year}`;\n return nd;\n};\n\n// eslint-disable-next-line no-unused-vars\nconst headCellRender = ({\n columnDef\n}, hClick, podr, cntP, sumP, cntF, sumF) => {\n let cellStyle = {\n border: \"1px solid rgba(0, 0, 0)\",\n textAlign: \"center\"\n };\n let cellProps = {};\n let stackStyle = {};\n let data = columnDef.caption;\n if (columnDef.expandable) {\n const ref = /*#__PURE__*/(0,react__WEBPACK_IMPORTED_MODULE_0__.createRef)();\n cellStyle = {\n ...cellStyle,\n padding: \"5px\"\n };\n cellProps = {\n ...cellProps,\n ref: ref,\n onClick: e => {\n hClick(e, ref);\n }\n };\n stackStyle = {\n flexDirection: \"column\"\n };\n }\n if (columnDef.name == \"SOBJINFO\") cellStyle = {\n display: \"none\"\n };\n if (columnDef.name == \"SINFO\" || columnDef.name == \"SWRKTYPE\") {\n cellProps = {\n colSpan: 2\n };\n if (columnDef.name == \"SINFO\") cellProps = {\n ...cellProps,\n rowSpan: 2\n };\n }\n if (columnDef.name == \"SWRKTYPE\") cellStyle = {\n display: \"none\"\n };\n if (columnDef.visible && DAY_NAME_REG_EXP.test(columnDef.name)) {\n cellStyle = {\n ...cellStyle,\n padding: \"5px\",\n minWidth: \"25px\",\n maxWidth: \"25px\"\n };\n stackStyle = {\n justifyContent: \"center\"\n };\n }\n return {\n cellStyle,\n cellProps,\n stackStyle,\n data\n };\n};\nconst dataCellRender = ({\n row,\n columnDef\n}, showEquipSrv) => {\n let cellStyle = {\n padding: \"2px\",\n border: \"1px solid rgba(0, 0, 0) !important\",\n textAlign: \"center\"\n };\n let cellProps = {};\n let data = \" \";\n if (row[\"SWRKTYPE\"] == undefined) {\n if (columnDef.name == \"SOBJINFO\") {\n cellProps = {\n colSpan: 2\n };\n cellStyle = {\n ...cellStyle,\n textAlign: \"right\",\n fontWeight: \"bold\"\n };\n }\n if (columnDef.name == \"SWRKTYPE\") cellStyle = {\n display: \"none\"\n };\n if (columnDef.parent == \"\" && columnDef.expandable == true && columnDef.expanded == false) {\n curParent = columnDef.name;\n return {\n cellStyle: {\n ...cellStyle,\n height: \"25px\"\n },\n data\n };\n } else if (columnDef.name != \"SWRKTYPE\" && columnDef.parent != \"\" && columnDef.expandable == false && columnDef.expanded == true) {\n if (columnDef.name.endsWith(\"_1\")) {\n curParent = columnDef.parent;\n const [year, month] = curParent.substring(1).split(\"_\");\n x = new Date(year, month, 0).getDate();\n cellProps = {\n colSpan: x\n };\n data = row[curParent];\n return {\n cellStyle,\n cellProps,\n data\n };\n } else {\n cellStyle = {\n display: \"none\"\n };\n }\n }\n }\n if (columnDef.name == \"SOBJINFO\" && row[\"SWRKTYPE\"] == \"План\") {\n cellStyle = {\n ...cellStyle\n };\n cellProps = {\n rowSpan: 2\n };\n }\n if (columnDef.name == \"SOBJINFO\" && row[\"SWRKTYPE\"] == \"Факт\") {\n cellStyle = {\n display: \"none\"\n };\n }\n switch (row[columnDef.name]) {\n case \"blue\":\n cellStyle = {\n ...cellStyle,\n cursor: \"pointer\",\n backgroundColor: \"lightblue\",\n border: \"1px solid rgba(0, 0, 0) !important\"\n };\n cellProps = {\n title: formatDate(columnDef.name),\n onClick: () => {\n showEquipSrv({\n date: columnDef.name,\n workType: row[\"SWRKTYPE\"],\n info: row[\"groupName\"]\n });\n }\n };\n return {\n cellStyle,\n cellProps,\n data\n };\n case \"green\":\n cellStyle = {\n ...cellStyle,\n cursor: \"pointer\",\n backgroundColor: \"green\",\n border: \"1px solid rgba(0, 0, 0) !important\"\n };\n cellProps = {\n title: formatDate(columnDef.name),\n onClick: () => {\n showEquipSrv({\n date: columnDef.name,\n workType: row[\"SWRKTYPE\"],\n info: row[\"groupName\"]\n });\n }\n };\n return {\n cellStyle,\n cellProps,\n data\n };\n case \"red\":\n cellStyle = {\n ...cellStyle,\n cursor: \"pointer\",\n backgroundColor: \"crimson\",\n border: \"1px solid rgba(0, 0, 0) !important\"\n };\n cellProps = {\n title: formatDate(columnDef.name),\n onClick: () => {\n showEquipSrv({\n date: columnDef.name,\n workType: row[\"SWRKTYPE\"],\n info: row[\"groupName\"]\n });\n }\n };\n return {\n cellStyle,\n cellProps,\n data\n };\n case \"green red\":\n case \"red green\":\n cellStyle = {\n ...cellStyle,\n padding: \"unset\"\n };\n cellProps = {\n title: formatDate(columnDef.name)\n };\n data = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_1__[\"default\"], {\n sx: {\n justifyContent: \"center\"\n },\n direction: \"row\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n container: true,\n maxHeight: \"100%\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n item: true,\n xs: 6,\n sx: {\n cursor: \"pointer\",\n backgroundColor: \"green\"\n },\n onClick: () => showEquipSrv({\n date: columnDef.name,\n workType: row[\"SWRKTYPE\"],\n info: row[\"groupName\"]\n })\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"p\", {\n style: {\n display: \"none\"\n }\n }, \"g\")), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n item: true,\n xs: 6,\n sx: {\n cursor: \"pointer\",\n backgroundColor: \"crimson\"\n },\n onClick: () => showEquipSrv({\n date: columnDef.name,\n workType: row[\"SWRKTYPE\"],\n info: row[\"groupName\"]\n })\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"p\", {\n style: {\n display: \"none\"\n }\n }, \"r\"))));\n }\n return {\n cellStyle,\n cellProps\n };\n};\nconst groupCellRender = () => {\n let cellStyle = {\n display: \"none\"\n };\n return {\n cellStyle\n };\n};\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/panels/eqs_prfrm/layouts.js?"); /***/ }), From f0a00a31c269058783211f98f86b5b03f5070505 Mon Sep 17 00:00:00 2001 From: Dollerino Date: Thu, 25 Apr 2024 18:38:26 +0300 Subject: [PATCH 18/76] =?UTF-8?q?=D0=A6=D0=98=D0=A2=D0=9A-835=20-=20=D0=94?= =?UTF-8?q?=D0=BE=D1=80=D0=B0=D0=B1=D0=BE=D1=82=D0=BA=D0=B0=20=D0=BF=D0=B0?= =?UTF-8?q?=D0=BD=D0=B5=D0=BB=D0=B8=20"=D0=9F=D1=80=D0=BE=D0=B8=D0=B7?= =?UTF-8?q?=D0=B2=D0=BE=D0=B4=D1=81=D1=82=D0=B2=D0=B5=D0=BD=D0=BD=D0=B0?= =?UTF-8?q?=D1=8F=20=D0=BF=D1=80=D0=BE=D0=B3=D1=80=D0=B0=D0=BC=D0=BC=D0=B0?= =?UTF-8?q?"?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- db/PKG_P8PANELS_MECHREC.pck | 560 +++++++++++++++++++----------------- 1 file changed, 293 insertions(+), 267 deletions(-) diff --git a/db/PKG_P8PANELS_MECHREC.pck b/db/PKG_P8PANELS_MECHREC.pck index 74354d9..02ae678 100644 --- a/db/PKG_P8PANELS_MECHREC.pck +++ b/db/PKG_P8PANELS_MECHREC.pck @@ -88,7 +88,7 @@ create or replace package body PKG_P8PANELS_MECHREC as STASK_ATTR_DL constant PKG_STD.TSTRING := 'detail_list'; -- Связанные документы STASK_ATTR_TYPE constant PKG_STD.TSTRING := 'type'; -- Тип (0 - Деталь, 1 - Изделие/сборочная единица) STASK_ATTR_MEAS constant PKG_STD.TSTRING := 'meas'; -- Единица измнения - + /* Инциализация списка маршрутных листов (с иерархией) */ procedure UTL_FCROUTLST_IDENT_INIT ( @@ -141,7 +141,7 @@ create or replace package body PKG_P8PANELS_MECHREC as PUT_FCROUTLST(NIDENT => NIDENT, NFCROUTLST => RLST.RN); end loop; end UTL_FCROUTLST_IDENT_INIT; - + /* Проверка наличия связанных маршрутных листов */ function LINK_FCROUTLST_CHECK ( @@ -174,7 +174,7 @@ create or replace package body PKG_P8PANELS_MECHREC as /* Возвращаем результат */ return NRESULT; end LINK_FCROUTLST_CHECK; - + /* Проверка наличия связанных приходов из подразделений */ function LINK_INCOMEFROMDEPS_CHECK ( @@ -228,7 +228,7 @@ create or replace package body PKG_P8PANELS_MECHREC as P_SELECTLIST_CLEAR(NIDENT => NFCROUTLST_IDENT); raise; end LINK_INCOMEFROMDEPS_CHECK; - + /* Получение таблицы ПиП на основании маршрутного листа, связанных со спецификацией плана */ procedure INCOMEFROMDEPS_DG_GET ( @@ -444,7 +444,7 @@ create or replace package body PKG_P8PANELS_MECHREC as P_SELECTLIST_CLEAR(NIDENT => NFCROUTLST_IDENT); raise; end INCOMEFROMDEPS_DG_GET; - + /* Получение таблицы строк комплектации на основании маршрутного листа */ procedure FCDELIVERYLISTSP_DG_GET ( @@ -632,7 +632,7 @@ create or replace package body PKG_P8PANELS_MECHREC as /* Сериализуем описание */ COUT := PKG_P8PANELS_VISUAL.TDATA_GRID_TO_XML(RDATA_GRID => RDG, NINCLUDE_DEF => NINCLUDE_DEF); end FCDELIVERYLISTSP_DG_GET; - + /* Получение таблицы товарных запасов на основании маршрутного листа */ procedure GOODSPARTIES_DG_GET ( @@ -840,7 +840,7 @@ create or replace package body PKG_P8PANELS_MECHREC as /* Сериализуем описание */ COUT := PKG_P8PANELS_VISUAL.TDATA_GRID_TO_XML(RDATA_GRID => RDG, NINCLUDE_DEF => NINCLUDE_DEF); end GOODSPARTIES_DG_GET; - + /* Получение таблицы маршрутных листов, связанных со спецификацией плана (по детали) */ procedure FCROUTLST_DG_BY_DTL ( @@ -1038,7 +1038,7 @@ create or replace package body PKG_P8PANELS_MECHREC as /* Сериализуем описание */ COUT := PKG_P8PANELS_VISUAL.TDATA_GRID_TO_XML(RDATA_GRID => RDG, NINCLUDE_DEF => NINCLUDE_DEF); end FCROUTLST_DG_BY_DTL; - + /* Получение таблицы маршрутных листов, связанных со спецификацией плана (по изделию) */ procedure FCROUTLST_DG_BY_PRDCT ( @@ -1223,7 +1223,7 @@ create or replace package body PKG_P8PANELS_MECHREC as /* Сериализуем описание */ COUT := PKG_P8PANELS_VISUAL.TDATA_GRID_TO_XML(RDATA_GRID => RDG, NINCLUDE_DEF => NINCLUDE_DEF); end FCROUTLST_DG_BY_PRDCT; - + /* Получение таблицы маршрутных листов, связанных со спецификацией плана (для приходов) */ procedure FCROUTLST_DG_BY_DEPS ( @@ -1329,7 +1329,7 @@ create or replace package body PKG_P8PANELS_MECHREC as PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' P.DREL_DATE,'); PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' P.NREL_QUANT,'); PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' P.NQUANT_FACT,'); - PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' case when (P.NT_SHT_PLAN <> 0) then P.NLABOUR_FACT / P.NT_SHT_PLAN * 100 else 0 end NPROCENT'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' case when (P.NT_SHT_PLAN <> 0) then ROUND(P.NLABOUR_FACT / P.NT_SHT_PLAN * 100, 3) else 0 end NPROCENT'); PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' from (select T.RN NRN,'); PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' T.DOCPREF SDOCPREF,'); PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' T.DOCNUMB SDOCNUMB,'); @@ -1361,7 +1361,7 @@ create or replace package body PKG_P8PANELS_MECHREC as PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' and exists (select ' || PKG_SQL_BUILD.SET_HINT(SHINT => 'INDEX(UP I_USERPRIV_CATALOG_ROLEID)') || ' null'); PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' from USERPRIV UP'); PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' where UP."CATALOG" = T.CRN'); - PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' and UP.ROLEID in (select ' || PKG_SQL_BUILD.SET_HINT(SHINT => 'INDEX(UR I_USERROLES_AUTHID_FK)') || ' UR.ROLEID'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' and UP.ROLEID in (select ' || PKG_SQL_BUILD.SET_HINT(SHINT => 'INDEX(UR I_USERROLES_AUTHID_FK)') || ' UR.ROLEID'); PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' from USERROLES UR'); PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' where UR.AUTHID = UTILIZER())'); PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' union all'); @@ -1373,7 +1373,7 @@ create or replace package body PKG_P8PANELS_MECHREC as PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' from USERPRIV UP'); PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' where UP.JUR_PERS = T.JUR_PERS'); PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' and UP.UNITCODE = ' || PKG_SQL_BUILD.WRAP_STR(SVALUE => 'CostRouteLists')); - PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' and UP.ROLEID in (select ' || PKG_SQL_BUILD.SET_HINT(SHINT => 'INDEX(UR I_USERROLES_AUTHID_FK)') || ' UR.ROLEID'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' and UP.ROLEID in (select ' || PKG_SQL_BUILD.SET_HINT(SHINT => 'INDEX(UR I_USERROLES_AUTHID_FK)') || ' UR.ROLEID'); PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' from USERROLES UR'); PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' where UR.AUTHID = UTILIZER())'); PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' union all'); @@ -1449,7 +1449,7 @@ create or replace package body PKG_P8PANELS_MECHREC as /* Сериализуем описание */ COUT := PKG_P8PANELS_VISUAL.TDATA_GRID_TO_XML(RDATA_GRID => RDG, NINCLUDE_DEF => NINCLUDE_DEF); end FCROUTLST_DG_BY_DEPS; - + /* Получение таблицы маршрутных листов, связанных со спецификацией плана с учетом типа */ procedure FCROUTLST_DG_GET ( @@ -1497,174 +1497,7 @@ create or replace package body PKG_P8PANELS_MECHREC as 'Не определен тип получения таблицы маршрутных листов.'); end case; end FCROUTLST_DG_GET; - - /* Формирование характеристик спецификации в Ганте */ - procedure MAKE_GANT_ITEM - ( - NDEFRESLIZ in number, -- Дефицит запуска - NREL_FACT in number, -- Выпуск факт - NDEFSTART in number, -- Дефицит выпуска - NMAIN_QUANT in number, -- Выпуск - STASK_BG_COLOR out varchar2, -- Цвет заливки спецификации - STASK_BG_PROGRESS_COLOR out varchar2, -- Цвет заливки прогресса спецификации - STASK_TEXT_COLOR in out varchar2, -- Цвет текста - NTASK_PROGRESS out number -- Прогресс спецификации - ) - is - begin - /* Если дефицит запуска <> 0 */ - if (NDEFRESLIZ <> 0) then - /* Если дефицит выпуска = 0 */ - if (NDEFSTART = 0) then - /* Полностью зеленый */ - STASK_BG_COLOR := SBG_COLOR_GREEN; - STASK_TEXT_COLOR := STEXT_COLOR_GREY; - STASK_BG_PROGRESS_COLOR := null; - NTASK_PROGRESS := null; - else - /* Полностью красный */ - STASK_BG_COLOR := SBG_COLOR_RED; - STASK_BG_PROGRESS_COLOR := null; - NTASK_PROGRESS := null; - end if; - else - /* Если дефицит выпуска = 0 */ - if (NDEFSTART = 0) then - /* Полностью зеленый */ - STASK_BG_COLOR := SBG_COLOR_GREEN; - STASK_TEXT_COLOR := STEXT_COLOR_GREY; - STASK_BG_PROGRESS_COLOR := null; - NTASK_PROGRESS := null; - else - /* Если дефицит запуска = 0 и выпуск факт = 0 */ - if ((NDEFRESLIZ = 0) and (NREL_FACT = 0)) then - /* Полностью жёлтый */ - STASK_BG_COLOR := SBG_COLOR_YELLOW; - STASK_BG_PROGRESS_COLOR := null; - NTASK_PROGRESS := null; - end if; - /* Если дефицит запуска = 0 и выпуск факт <> 0 */ - if ((NDEFRESLIZ = 0) and (NREL_FACT <> 0)) then - /* Частично зелёный, прогресс жёлтый */ - STASK_BG_COLOR := SBG_COLOR_GREEN; - STASK_BG_PROGRESS_COLOR := SBG_COLOR_YELLOW; - STASK_TEXT_COLOR := STEXT_COLOR_GREY; - NTASK_PROGRESS := ROUND(NREL_FACT / NMAIN_QUANT * 100); - end if; - end if; - end if; - end MAKE_GANT_ITEM; - - /* Считывание максимального уровня иерархии плана по каталогу */ - function PRODPLAN_MAX_LEVEL_GET - ( - NCRN in number -- Рег. номер каталога планов - ) return number -- Максимальный уровень иерархии - is - NRESULT PKG_STD.TNUMBER; -- Максимальный уровень иерархии - begin - /* Считываем максимальный уровень */ - begin - select max(level) - into NRESULT - from (select T.RN, - T.UP_LEVEL - from FCPRODPLAN P, - FCPRODPLANSP T, - FINSTATE FS - where P.CRN = NCRN - and P.CATEGORY = NFCPRODPLAN_CATEGORY - and P.STATUS = NFCPRODPLAN_STATUS - and FS.RN = P.TYPE - and FS.CODE = SFCPRODPLAN_TYPE - and exists (select /*+ INDEX(UP I_USERPRIV_JUR_PERS_ROLEID) */ - null - from USERPRIV UP - where UP.JUR_PERS = P.JUR_PERS - and UP.UNITCODE = 'CostProductPlans' - and UP.ROLEID in (select /*+ INDEX(UR I_USERROLES_AUTHID_FK) */ - UR.ROLEID - from USERROLES UR - where UR.AUTHID = UTILIZER()) - union all - select /*+ INDEX(UP I_USERPRIV_JUR_PERS_AUTHID) */ - null - from USERPRIV UP - where UP.JUR_PERS = P.JUR_PERS - and UP.UNITCODE = 'CostProductPlans' - and UP.AUTHID = UTILIZER()) - and T.PRN = P.RN - and T.MAIN_QUANT > 0) TMP - connect by prior TMP.RN = TMP.UP_LEVEL - start with TMP.UP_LEVEL is null; - exception - when others then - NRESULT := null; - end; - /* Возвращаем результат */ - return NRESULT; - end PRODPLAN_MAX_LEVEL_GET; - - /* Определение дат спецификации плана */ - procedure FCPRODPLANSP_DATES_GET - ( - DREP_DATE in date, -- Дата запуска спецификации - DREP_DATE_TO in date, -- Дата выпуска спецификации - DINCL_DATE in date, -- Дата включения в план спецификации - NHAVE_LINK in number := 0, -- Наличие связей с "Маршрутный лист" или "Приход из подразделения" - DDATE_FROM out date, -- Итоговая дата запуска спецификации - DDATE_TO out date, -- Итоговая дата выпуска спецификации - STASK_BG_COLOR out varchar2, -- Цвет элемента - STASK_BG_PROGRESS_COLOR out varchar2, -- Цвет прогресса элемента - STASK_TEXT_COLOR out varchar2, -- Цвет текста элемента - NTASK_PROGRESS out number -- Прогресс элемента - ) - is - begin - /* Проициниализируем цвет и прогресс */ - STASK_BG_COLOR := null; - STASK_TEXT_COLOR := null; - STASK_BG_PROGRESS_COLOR := null; - NTASK_PROGRESS := null; - /* Если даты запуска и выпуска пусты */ - if ((DREP_DATE is null) and (DREP_DATE_TO is null)) then - /* Указываем дату включения в план */ - DDATE_FROM := DINCL_DATE; - DDATE_TO := DINCL_DATE; - else - /* Указываем даты исходя из дат запуска/выпуска */ - DDATE_FROM := COALESCE(DREP_DATE, DREP_DATE_TO); - DDATE_TO := COALESCE(DREP_DATE_TO, DREP_DATE); - end if; - /* Если одна из дат не указана */ - if ((DREP_DATE is null) or (DREP_DATE_TO is null)) then - /* Если спецификация также не имеет связей */ - if (NHAVE_LINK = 0) then - /* Закрашиваем в черный */ - STASK_BG_COLOR := SBG_COLOR_BLACK; - STASK_TEXT_COLOR := STEXT_COLOR_ORANGE; - NTASK_PROGRESS := null; - end if; - end if; - /* Если нет связанных документов */ - if (NHAVE_LINK = 0) then - /* Если дата запуска меньше текущей даты */ - if (DREP_DATE <= sysdate) then - /* Закрашиваем в красный */ - STASK_BG_COLOR := SBG_COLOR_RED; - STASK_TEXT_COLOR := null; - NTASK_PROGRESS := null; - end if; - /* Если дата больше текущей даты */ - if (DREP_DATE > sysdate) then - /* Закрашиваем в серый */ - STASK_BG_COLOR := SBG_COLOR_GREY; - STASK_TEXT_COLOR := null; - NTASK_PROGRESS := null; - end if; - end if; - end FCPRODPLANSP_DATES_GET; - + /* Получение списка спецификаций планов и отчетов производства изделий для диаграммы Ганта */ procedure FCPRODPLANSP_GET ( @@ -1690,6 +1523,7 @@ create or replace package body PKG_P8PANELS_MECHREC as SDETAIL_LIST PKG_STD.TSTRING; -- Ссылки на детализацию SPLAN_TITLE PKG_STD.TSTRING; -- Заголовок плана NCOMPANY PKG_STD.TREF := GET_SESSION_COMPANY(); -- Организация сеанса + NTASK_CLASS PKG_STD.TNUMBER; -- Класс задачи /* Объединение значений в строковое представление */ function MAKE_INFO @@ -1710,6 +1544,79 @@ create or replace package body PKG_P8PANELS_MECHREC as return SRESULT; end MAKE_INFO; + /* Считывание максимального уровня иерархии плана по каталогу */ + function PRODPLAN_MAX_LEVEL_GET + ( + NCRN in number -- Рег. номер каталога планов + ) return number -- Максимальный уровень иерархии + is + NRESULT PKG_STD.TNUMBER; -- Максимальный уровень иерархии + begin + /* Считываем максимальный уровень */ + begin + select max(level) + into NRESULT + from (select T.RN, + T.UP_LEVEL + from FCPRODPLAN P, + FCPRODPLANSP T, + FINSTATE FS + where P.CRN = NCRN + and P.CATEGORY = NFCPRODPLAN_CATEGORY + and P.STATUS = NFCPRODPLAN_STATUS + and FS.RN = P.TYPE + and FS.CODE = SFCPRODPLAN_TYPE + and exists (select /*+ INDEX(UP I_USERPRIV_JUR_PERS_ROLEID) */ + null + from USERPRIV UP + where UP.JUR_PERS = P.JUR_PERS + and UP.UNITCODE = 'CostProductPlans' + and UP.ROLEID in (select /*+ INDEX(UR I_USERROLES_AUTHID_FK) */ + UR.ROLEID + from USERROLES UR + where UR.AUTHID = UTILIZER()) + union all + select /*+ INDEX(UP I_USERPRIV_JUR_PERS_AUTHID) */ + null + from USERPRIV UP + where UP.JUR_PERS = P.JUR_PERS + and UP.UNITCODE = 'CostProductPlans' + and UP.AUTHID = UTILIZER()) + and T.PRN = P.RN + and T.MAIN_QUANT > 0) TMP + connect by prior TMP.RN = TMP.UP_LEVEL + start with TMP.UP_LEVEL is null; + exception + when others then + NRESULT := null; + end; + /* Возвращаем результат */ + return NRESULT; + end PRODPLAN_MAX_LEVEL_GET; + + /* Определение дат спецификации плана */ + procedure FCPRODPLANSP_DATES_GET + ( + DREP_DATE in date, -- Дата запуска спецификации + DREP_DATE_TO in date, -- Дата выпуска спецификации + DINCL_DATE in date, -- Дата включения в план спецификации + DDATE_FROM out date, -- Итоговая дата запуска спецификации + DDATE_TO out date -- Итоговая дата выпуска спецификации + ) + is + begin + /* Если даты запуска и выпуска пусты */ + if ((DREP_DATE is null) and (DREP_DATE_TO is null)) then + /* Указываем дату включения в план */ + DDATE_FROM := DINCL_DATE; + DDATE_TO := DINCL_DATE; + else + /* Указываем даты исходя из дат запуска/выпуска */ + DDATE_FROM := COALESCE(DREP_DATE, DREP_DATE_TO); + DDATE_TO := COALESCE(DREP_DATE_TO, DREP_DATE); + end if; + end FCPRODPLANSP_DATES_GET; + /* Инициализация динамических атрибутов */ procedure TASK_ATTRS_INIT ( @@ -1739,41 +1646,8 @@ create or replace package body PKG_P8PANELS_MECHREC as SCAPTION => 'Единица измерения'); end TASK_ATTRS_INIT; - /* Инициализация цветов */ - procedure TASK_COLORS_INIT - ( - RG in out PKG_P8PANELS_VISUAL.TGANTT -- Описание диаграммы Ганта - ) - is - begin - /* Добавим описание цветов */ - PKG_P8PANELS_VISUAL.TGANTT_ADD_TASK_COLOR(RGANTT => RG, - SBG_COLOR => SBG_COLOR_RED, - SDESC => 'Для спецификаций планов и отчетов производства изделий с «Дефицит запуска» != 0 или ' || - 'не имеющих связей с разделами «Маршрутный лист» или «Приход из подразделения», а также «Дата запуска» меньше текущей.'); - PKG_P8PANELS_VISUAL.TGANTT_ADD_TASK_COLOR(RGANTT => RG, - SBG_COLOR => SBG_COLOR_YELLOW, - SDESC => 'Для спецификаций планов и отчетов производства изделий с «Дефицит запуска» = 0 и «Выпуск факт» = 0.'); - PKG_P8PANELS_VISUAL.TGANTT_ADD_TASK_COLOR(RGANTT => RG, - SBG_COLOR => SBG_COLOR_GREEN, - STEXT_COLOR => STEXT_COLOR_GREY, - SDESC => 'Для спецификаций планов и отчетов производства изделий с «Дефицит выпуска» = 0.'); - PKG_P8PANELS_VISUAL.TGANTT_ADD_TASK_COLOR(RGANTT => RG, - SBG_COLOR => SBG_COLOR_GREEN, - SBG_PROGRESS_COLOR => SBG_COLOR_YELLOW, - STEXT_COLOR => STEXT_COLOR_GREY, - SDESC => 'Для спецификаций планов и отчетов производства изделий с «Дефицит запуска» = 0 и «Выпуск факт» != 0. '); - PKG_P8PANELS_VISUAL.TGANTT_ADD_TASK_COLOR(RGANTT => RG, - SBG_COLOR => SBG_COLOR_BLACK, - STEXT_COLOR => STEXT_COLOR_ORANGE, - SDESC => 'Для спецификаций планов и отчетов производства изделий с пустыми «Дата запуска» и «Дата выпуска» и не имеющих связей с разделами «Маршрутный лист» или «Приход из подразделения».'); - PKG_P8PANELS_VISUAL.TGANTT_ADD_TASK_COLOR(RGANTT => RG, - SBG_COLOR => SBG_COLOR_GREY, - SDESC => 'Для спецификаций планов и отчетов производства изделий не имеющих связей с разделами «Маршрутный лист» или «Приход из подразделения», а также «Дата запуска» больше текущей.'); - end TASK_COLORS_INIT; - /* Заполнение значений динамических атрибутов */ - procedure FILL_TASK_ATTRS + procedure TASK_ATTRS_FILL ( RG in PKG_P8PANELS_VISUAL.TGANTT, -- Описание диаграммы Ганта RGT in out nocopy PKG_P8PANELS_VISUAL.TGANTT_TASK, -- Описание задачи для диаграммы @@ -1817,8 +1691,112 @@ create or replace package body PKG_P8PANELS_MECHREC as RTASK => RGT, SNAME => STASK_ATTR_MEAS, SVALUE => SMEAS); - end FILL_TASK_ATTRS; - + end TASK_ATTRS_FILL; + + /* Инициализация цветов */ + procedure TASK_COLORS_INIT + ( + RG in out PKG_P8PANELS_VISUAL.TGANTT -- Описание диаграммы Ганта + ) + is + begin + /* Добавим описание цветов */ + PKG_P8PANELS_VISUAL.TGANTT_ADD_TASK_COLOR(RGANTT => RG, + SBG_COLOR => SBG_COLOR_RED, + SDESC => 'Для спецификаций планов и отчетов производства изделий с «Дефицит запуска» != 0 или ' || + 'не имеющих связей с разделами «Маршрутный лист» или «Приход из подразделения», а также «Дата запуска» меньше текущей.'); + PKG_P8PANELS_VISUAL.TGANTT_ADD_TASK_COLOR(RGANTT => RG, + SBG_COLOR => SBG_COLOR_YELLOW, + SDESC => 'Для спецификаций планов и отчетов производства изделий с «Дефицит запуска» = 0 и «Выпуск факт» = 0.'); + PKG_P8PANELS_VISUAL.TGANTT_ADD_TASK_COLOR(RGANTT => RG, + SBG_COLOR => SBG_COLOR_GREEN, + STEXT_COLOR => STEXT_COLOR_GREY, + SDESC => 'Для спецификаций планов и отчетов производства изделий с «Дефицит выпуска» = 0.'); + PKG_P8PANELS_VISUAL.TGANTT_ADD_TASK_COLOR(RGANTT => RG, + SBG_COLOR => SBG_COLOR_GREEN, + SBG_PROGRESS_COLOR => SBG_COLOR_YELLOW, + STEXT_COLOR => STEXT_COLOR_GREY, + SDESC => 'Для спецификаций планов и отчетов производства изделий с «Дефицит запуска» = 0 и «Выпуск факт» != 0. '); + PKG_P8PANELS_VISUAL.TGANTT_ADD_TASK_COLOR(RGANTT => RG, + SBG_COLOR => SBG_COLOR_BLACK, + STEXT_COLOR => STEXT_COLOR_ORANGE, + SDESC => 'Для спецификаций планов и отчетов производства изделий с пустыми «Дата запуска» и «Дата выпуска» и не имеющих связей с разделами «Маршрутный лист» или «Приход из подразделения».'); + PKG_P8PANELS_VISUAL.TGANTT_ADD_TASK_COLOR(RGANTT => RG, + SBG_COLOR => SBG_COLOR_GREY, + SDESC => 'Для спецификаций планов и отчетов производства изделий не имеющих связей с разделами «Маршрутный лист» или «Приход из подразделения», а также «Дата запуска» больше текущей.'); + end TASK_COLORS_INIT; + + /* Опеределение класса задачи */ + function GET_TASK_CLASS + ( + NDEFRESLIZ in number, -- Дефицит запуска + NREL_FACT in number, -- Выпуск факт + NDEFSTART in number, -- Дефицит выпуска + DREP_DATE in date, -- Дата запуска спецификации + DREP_DATE_TO in date, -- Дата выпуска спецификации + NHAVE_LINK in number := 0 -- Наличие связей с "Маршрутный лист" или "Приход из подразделения" + ) return number -- Класс задачи + is + NTASK_CLASS PKG_STD.TNUMBER; -- Класс задачи + begin + /* + Описание классов: + 0 - Без дефицита выпуска (последующий цвет "Зеленый") + 1 - С частичным дефицитом выпуска (последующий цвет "Желто-зелеый") + 2 - С полным дефицитом выпуска (последующий цвет "Желтый") + 3 - С дефицитом запуска или датой меньше текущей (последующий цвет "Красный") + 4 - Дата анализа еще не наступила (последующий цвет "Серый") + 5 - Задача без связи (последующий цвет "Черный") + */ + /* Если одна из дат не указана */ + if ((DREP_DATE is null) or (DREP_DATE_TO is null)) then + /* Если спецификация также не имеет связей */ + if (NHAVE_LINK = 0) then + NTASK_CLASS := 5; + end if; + else + /* Если нет связанных документов */ + if (NHAVE_LINK = 0) then + /* Если дата запуска меньше текущей даты */ + if (DREP_DATE <= sysdate) then + NTASK_CLASS := 3; + end if; + /* Если дата больше текущей даты */ + if (DREP_DATE > sysdate) then + NTASK_CLASS := 4; + end if; + end if; + end if; + /* Если класс не определен */ + if (NTASK_CLASS is null) then + /* Если дефицит запуска <> 0 */ + if (NDEFRESLIZ <> 0) then + /* Если дефицит выпуска = 0 */ + if (NDEFSTART = 0) then + NTASK_CLASS := 0; + else + NTASK_CLASS := 3; + end if; + else + /* Если дефицит выпуска = 0 */ + if (NDEFSTART = 0) then + NTASK_CLASS := 0; + else + /* Если дефицит запуска = 0 и выпуск факт = 0 */ + if ((NDEFRESLIZ = 0) and (NREL_FACT = 0)) then + NTASK_CLASS := 2; + end if; + /* Если дефицит запуска = 0 и выпуск факт <> 0 */ + if ((NDEFRESLIZ = 0) and (NREL_FACT <> 0)) then + NTASK_CLASS := 1; + end if; + end if; + end if; + end if; + /* Возвращаем результат */ + return NTASK_CLASS; + end GET_TASK_CLASS; + /* Получение типа задачи */ procedure GET_TASK_TYPE ( @@ -1826,26 +1804,25 @@ create or replace package body PKG_P8PANELS_MECHREC as SSORT_FIELD in varchar2, -- Тип сортировки NFCPRODPLAN in number, -- Рег. номер плана NFCPRODPLANSP in number, -- Рег. номер спецификации плана - STASK_BG_COLOR in varchar2, -- Цвет заливки задачи - STASK_BG_PROGRESS_COLOR in varchar2, -- Цвет заливки прогресса + NTASK_CLASS in number, -- Класс задачи NTYPE out number, -- Тип задачи (0/1 - для "Дата выпуска", 2/3/4 - для "Дата выпуска") SDETAIL_LIST out varchar2 -- Ссылки на детализацию ) is begin - /* + /* Описание типов: - 0 - Маршрутные листы с развертыванием товарных запасов + 0 - Маршрутные листы с развертыванием товарных запасов 1 - Маршрутные листы с развертыванием комплектаций 2 - Приход из подразделений 3 - Приход из подразделений и маршрутные листы 4 - Маршрутные листы - null - Нет детализации + null - Нет детализации */ /* Исходим сортировка по "Дата запуска" */ if (SSORT_FIELD = 'DREP_DATE') then /* Если цвет - красный */ - if (STASK_BG_COLOR = SBG_COLOR_RED) then + if (NTASK_CLASS = 3) then /* Проверяем деталь или изделие */ begin select 1 @@ -1874,10 +1851,10 @@ create or replace package body PKG_P8PANELS_MECHREC as SDETAIL_LIST := null; end if; else - /* Если цвет зеленый */ - if (STASK_BG_COLOR = SBG_COLOR_GREEN) then - /* Если полностью зеленый */ - if (STASK_BG_PROGRESS_COLOR is null) then + /* Исходим от класса */ + case + /* Закрашен зеленым */ + when (NTASK_CLASS = 0) then /* Проверяем наличией связей с приходов из подразделений */ if (LINK_INCOMEFROMDEPS_CHECK(NCOMPANY => NCOMPANY, NFCPRODPLANSP => NFCPRODPLANSP, NSTATE => 2) = 0) then /* Указываем, что приходов из подразделений нет */ @@ -1888,9 +1865,8 @@ create or replace package body PKG_P8PANELS_MECHREC as SDETAIL_LIST := 'Приход из подразделений'; NTYPE := 2; end if; - end if; - /* Если желтно-зеленый */ - if (STASK_BG_PROGRESS_COLOR = SBG_COLOR_YELLOW) then + /* Закрашен желто-зеленым */ + when (NTASK_CLASS = 1) then /* Проверяем наличией связей с приходов из подразделений */ if (LINK_INCOMEFROMDEPS_CHECK(NCOMPANY => NCOMPANY, NFCPRODPLANSP => NFCPRODPLANSP) = 0) then /* Указываем, что приходов из подразделений нет */ @@ -1901,10 +1877,8 @@ create or replace package body PKG_P8PANELS_MECHREC as SDETAIL_LIST := 'Приход из подразделений'; NTYPE := 3; end if; - end if; - else - /* Если цвет полностью желтый или красный */ - if ((STASK_BG_COLOR = SBG_COLOR_YELLOW) or (STASK_BG_COLOR = SBG_COLOR_RED)) then + /* Закрашен желтым или красным */ + when ((NTASK_CLASS = 2) or (NTASK_CLASS = 3)) then /* Проверяем наличие связей с маршрутными листами */ if (LINK_FCROUTLST_CHECK(NCOMPANY => NCOMPANY, NFCPRODPLANSP => NFCPRODPLANSP, NSTATE => 1) = 0) then /* Указываем, что маршрутных листов нет */ @@ -1915,14 +1889,64 @@ create or replace package body PKG_P8PANELS_MECHREC as SDETAIL_LIST := 'Маршрутные листы'; NTYPE := 4; end if; + /* Класс не поддерживается */ else - /* Для данных критериев ничего не выводится */ + /* Для данных классов ничего не выводится */ NTYPE := null; SDETAIL_LIST := null; - end if; - end if; + end case; end if; end GET_TASK_TYPE; + + /* Формирование цветовых характеристик для задачи */ + procedure GET_TASK_COLORS + ( + NTASK_CLASS in number, -- Класс задачи + STASK_BG_COLOR out varchar2, -- Цвет заливки спецификации + STASK_BG_PROGRESS_COLOR out varchar2, -- Цвет заливки прогресса спецификации + STASK_TEXT_COLOR in out varchar2 -- Цвет текста + ) + is + begin + /* Исходим от класса задачи */ + case NTASK_CLASS + /* Полностью зеленый */ + when 0 then + STASK_BG_COLOR := SBG_COLOR_GREEN; + STASK_TEXT_COLOR := STEXT_COLOR_GREY; + STASK_BG_PROGRESS_COLOR := null; + /* Частично зелёный, прогресс жёлтый */ + when 1 then + STASK_BG_COLOR := SBG_COLOR_GREEN; + STASK_BG_PROGRESS_COLOR := SBG_COLOR_YELLOW; + STASK_TEXT_COLOR := STEXT_COLOR_GREY; + /* Полностью жёлтый */ + when 2 then + STASK_BG_COLOR := SBG_COLOR_YELLOW; + STASK_TEXT_COLOR := null; + STASK_BG_PROGRESS_COLOR := null; + /* Полностью красный */ + when 3 then + STASK_BG_COLOR := SBG_COLOR_RED; + STASK_TEXT_COLOR := null; + STASK_BG_PROGRESS_COLOR := null; + /* Полностью серый */ + when 4 then + STASK_BG_COLOR := SBG_COLOR_GREY; + STASK_TEXT_COLOR := null; + STASK_BG_PROGRESS_COLOR := null; + /* Полностью черный */ + when 5 then + STASK_BG_COLOR := SBG_COLOR_BLACK; + STASK_TEXT_COLOR := STEXT_COLOR_ORANGE; + STASK_BG_PROGRESS_COLOR := null; + else + /* Не определено */ + STASK_BG_COLOR := null; + STASK_TEXT_COLOR := null; + STASK_BG_PROGRESS_COLOR := null; + end case; + end GET_TASK_COLORS; begin /* Определяем заголовок плана */ FIND_ACATALOG_RN(NFLAG_SMART => 0, @@ -2020,28 +2044,31 @@ create or replace package body PKG_P8PANELS_MECHREC as SNOMEN_NAME => C.SNOMEN_NAME, SSUBDIV_DLVR => C.SSUBDIV_DLVR, NMAIN_QUANT => C.NMAIN_QUANT); + /* Определяем класс задачи */ + NTASK_CLASS := GET_TASK_CLASS(NDEFRESLIZ => C.NDEFRESLIZ, + NREL_FACT => C.NREL_FACT, + NDEFSTART => C.NDEFSTART, + DREP_DATE => C.DREP_DATE, + DREP_DATE_TO => C.DREP_DATE_TO, + NHAVE_LINK => COALESCE(C.NHAVE_LINK, 0)); /* Инициализируем даты и цвет (если необходимо) */ - FCPRODPLANSP_DATES_GET(DREP_DATE => C.DREP_DATE, - DREP_DATE_TO => C.DREP_DATE_TO, - DINCL_DATE => C.DINCL_DATE, - NHAVE_LINK => COALESCE(C.NHAVE_LINK, 0), - DDATE_FROM => DDATE_FROM, - DDATE_TO => DDATE_TO, - STASK_BG_COLOR => STASK_BG_COLOR, - STASK_BG_PROGRESS_COLOR => STASK_BG_PROGRESS_COLOR, - STASK_TEXT_COLOR => STASK_TEXT_COLOR, - NTASK_PROGRESS => NTASK_PROGRESS); - /* Если цвет изначально не указан и требуется анализирование */ - if (STASK_BG_COLOR is null) then - /* Формирование характеристик элемента ганта */ - MAKE_GANT_ITEM(NDEFRESLIZ => C.NDEFRESLIZ, - NREL_FACT => C.NREL_FACT, - NDEFSTART => C.NDEFSTART, - NMAIN_QUANT => C.NMAIN_QUANT, - STASK_BG_COLOR => STASK_BG_COLOR, - STASK_BG_PROGRESS_COLOR => STASK_BG_PROGRESS_COLOR, - STASK_TEXT_COLOR => STASK_TEXT_COLOR, - NTASK_PROGRESS => NTASK_PROGRESS); + FCPRODPLANSP_DATES_GET(DREP_DATE => C.DREP_DATE, + DREP_DATE_TO => C.DREP_DATE_TO, + DINCL_DATE => C.DINCL_DATE, + DDATE_FROM => DDATE_FROM, + DDATE_TO => DDATE_TO); + /* Формирование характеристик элемента ганта */ + GET_TASK_COLORS(NTASK_CLASS => NTASK_CLASS, + STASK_BG_COLOR => STASK_BG_COLOR, + STASK_BG_PROGRESS_COLOR => STASK_BG_PROGRESS_COLOR, + STASK_TEXT_COLOR => STASK_TEXT_COLOR); + /* Если класс задачи "1" */ + if (NTASK_CLASS = 1) then + /* Определяем пропорции прогресса */ + NTASK_PROGRESS := ROUND(C.NREL_FACT / C.NMAIN_QUANT * 100); + else + /* Не требуется */ + NTASK_PROGRESS := null; end if; /* Сформируем основную спецификацию */ RGT := PKG_P8PANELS_VISUAL.TGANTT_TASK_MAKE(NRN => C.NRN, @@ -2058,16 +2085,15 @@ create or replace package body PKG_P8PANELS_MECHREC as BREAD_ONLY_DATES => true, BREAD_ONLY_PROGRESS => true); /* Определяем тип и ссылки на детализацию */ - GET_TASK_TYPE(NCOMPANY => NCOMPANY, - SSORT_FIELD => SSORT_FIELD, - NFCPRODPLAN => C.NPRN, - NFCPRODPLANSP => C.NRN, - STASK_BG_COLOR => STASK_BG_COLOR, - STASK_BG_PROGRESS_COLOR => STASK_BG_PROGRESS_COLOR, - NTYPE => NTYPE, - SDETAIL_LIST => SDETAIL_LIST); + GET_TASK_TYPE(NCOMPANY => NCOMPANY, + SSORT_FIELD => SSORT_FIELD, + NFCPRODPLAN => C.NPRN, + NFCPRODPLANSP => C.NRN, + NTASK_CLASS => NTASK_CLASS, + NTYPE => NTYPE, + SDETAIL_LIST => SDETAIL_LIST); /* Заполним значение динамических атрибутов */ - FILL_TASK_ATTRS(RG => RG, + TASK_ATTRS_FILL(RG => RG, RGT => RGT, NSTART_FACT => C.NSTART_FACT, NMAIN_QUANT => C.NMAIN_QUANT, From 44069b0bc91fb0392aed8c4015c4297ea508ee82 Mon Sep 17 00:00:00 2001 From: Mikhail Chechnev Date: Sat, 4 May 2024 14:04:08 +0300 Subject: [PATCH 19/76] =?UTF-8?q?=D0=91=D0=94:=20P8PDataGrid=20-=20=D0=BF?= =?UTF-8?q?=D0=BE=D0=B4=D0=B4=D0=B5=D1=80=D0=B6=D0=BA=D0=B0=20=D1=84=D0=B8?= =?UTF-8?q?=D0=BA=D1=81=D0=B8=D1=80=D0=BE=D0=B2=D0=B0=D0=BD=D0=BD=D1=8B?= =?UTF-8?q?=D1=85=20=D0=B7=D0=B0=D0=B3=D0=BE=D0=BB=D0=BE=D0=B2=D0=BA=D0=B0?= =?UTF-8?q?=20=D0=B8=20=D0=BA=D0=BE=D0=BB=D0=BE=D0=BD=D0=BE=D0=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- db/PKG_P8PANELS_VISUAL.pck | 105 ++++++++++++++++++++++++++----------- 1 file changed, 74 insertions(+), 31 deletions(-) diff --git a/db/PKG_P8PANELS_VISUAL.pck b/db/PKG_P8PANELS_VISUAL.pck index cfb03c3..c1580f2 100644 --- a/db/PKG_P8PANELS_VISUAL.pck +++ b/db/PKG_P8PANELS_VISUAL.pck @@ -54,7 +54,8 @@ create or replace package PKG_P8PANELS_VISUAL as SHINT PKG_STD.TSTRING, -- Текст всплывающей подсказки SPARENT PKG_STD.TSTRING, -- Наименование родительской колонки BEXPANDABLE boolean, -- Разрешить сокрытие/отображение дочерних колонок - BEXPANDED boolean -- Отобразить/скрыть дочерние колонки + BEXPANDED boolean, -- Отобразить/скрыть дочерние колонки + NWIDTH PKG_STD.TNUMBER -- Ширина колонки (обязательно для фиксированных) ); /* Типы данных - коллекция описателей колонок таблицы данных */ @@ -95,9 +96,11 @@ create or replace package PKG_P8PANELS_VISUAL as /* Типы данных - таблица данных */ type TDATA_GRID is record ( - RCOL_DEFS TCOL_DEFS, -- Описание колонок - RGROUPS TGROUPS, -- Описание групп - RROWS TROWS -- Данные строк + BFIXED_HEADER boolean, -- Зафиксировать заголовок + NFIXED_COLUMNS PKG_STD.TNUMBER, -- Количество фиксированных колонок + RCOL_DEFS TCOL_DEFS, -- Описание колонок + RGROUPS TGROUPS, -- Описание групп + RROWS TROWS -- Данные строк ); /* Типы данных - фильтр */ @@ -319,7 +322,10 @@ create or replace package PKG_P8PANELS_VISUAL as /* Формирование таблицы данных */ function TDATA_GRID_MAKE - return TDATA_GRID; -- Результат работы + ( + BFIXED_HEADER in boolean := false, -- Зафиксировать заголовок + NFIXED_COLUMNS in number := 0 -- Количество фиксированных колонок + ) return TDATA_GRID; -- Результат работы /* Поиск описания колонки в таблице данных по наименованию */ function TDATA_GRID_FIND_COL_DEF @@ -345,6 +351,7 @@ create or replace package PKG_P8PANELS_VISUAL as SPARENT in varchar2 := null, -- Наименование родительской колонки BEXPANDABLE in boolean := false, -- Разрешить сокрытие/отображение дочерних колонок BEXPANDED in boolean := true, -- Отобразить/скрыть дочерние колонки + NWIDTH in number := null, -- Ширина колонки (обязательно для фиксированных) BCLEAR in boolean := false -- Флаг очистки коллекции описаний колонок таблицы данных (false - не очищать, true - очистить коллекцию перед добавлением) ); @@ -595,27 +602,31 @@ text="Формат data_grid и gant как в chart" SRESP_TAG_XGANTT_DEF constant PKG_STD.TSTRING := 'XGANTT_DEF'; -- Тэг для описания заголовка диаграммы Ганта SRESP_TAG_XGANTT_TASKS constant PKG_STD.TSTRING := 'XGANTT_TASKS'; -- Тэг для описания коллекции задач диаграммы Ганта SRESP_TAG_XCHART constant PKG_STD.TSTRING := 'XCHART'; -- Тэг для описания графика + SRESP_TAG_XDATA_GRID constant PKG_STD.TSTRING := 'XDATA_GRID'; -- Тэг для описания таблицы данных /* Константы - атрибуты ответов (универсальные) */ - SRESP_ATTR_NAME constant PKG_STD.TSTRING := 'name'; -- Атрибут для наименования - SRESP_ATTR_CAPTION constant PKG_STD.TSTRING := 'caption'; -- Атрибут для подписи - SRESP_ATTR_DATA_TYPE constant PKG_STD.TSTRING := 'dataType'; -- Атрибут для типа данных - SRESP_ATTR_VISIBLE constant PKG_STD.TSTRING := 'visible'; -- Атрибут для флага видимости - SRESP_ATTR_TITLE constant PKG_STD.TSTRING := 'title'; -- Атрибут для заголовка - SRESP_ATTR_ZOOM constant PKG_STD.TSTRING := 'zoom'; -- Атрибут для масштаба - SRESP_ATTR_ID constant PKG_STD.TSTRING := 'id'; -- Атрибут для идентификатора - SRESP_ATTR_START constant PKG_STD.TSTRING := 'start'; -- Атрибут для даты начала - SRESP_ATTR_END constant PKG_STD.TSTRING := 'end'; -- Атрибут для даты окончания - SRESP_ATTR_RN constant PKG_STD.TSTRING := 'rn'; -- Атрибут для рег. номера - SRESP_ATTR_NUMB constant PKG_STD.TSTRING := 'numb'; -- Атрибут для номера - SRESP_ATTR_FULL_NAME constant PKG_STD.TSTRING := 'fullName'; -- Атрибут для полного наименования - SRESP_ATTR_DESC constant PKG_STD.TSTRING := 'desc'; -- Атрибут для описания - SRESP_ATTR_TYPE constant PKG_STD.TSTRING := 'type'; -- Атрибут для типа - 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_NAME constant PKG_STD.TSTRING := 'name'; -- Атрибут для наименования + SRESP_ATTR_CAPTION constant PKG_STD.TSTRING := 'caption'; -- Атрибут для подписи + SRESP_ATTR_DATA_TYPE constant PKG_STD.TSTRING := 'dataType'; -- Атрибут для типа данных + SRESP_ATTR_VISIBLE constant PKG_STD.TSTRING := 'visible'; -- Атрибут для флага видимости + SRESP_ATTR_TITLE constant PKG_STD.TSTRING := 'title'; -- Атрибут для заголовка + SRESP_ATTR_ZOOM constant PKG_STD.TSTRING := 'zoom'; -- Атрибут для масштаба + SRESP_ATTR_ID constant PKG_STD.TSTRING := 'id'; -- Атрибут для идентификатора + SRESP_ATTR_START constant PKG_STD.TSTRING := 'start'; -- Атрибут для даты начала + SRESP_ATTR_END constant PKG_STD.TSTRING := 'end'; -- Атрибут для даты окончания + SRESP_ATTR_RN constant PKG_STD.TSTRING := 'rn'; -- Атрибут для рег. номера + SRESP_ATTR_NUMB constant PKG_STD.TSTRING := 'numb'; -- Атрибут для номера + SRESP_ATTR_FULL_NAME constant PKG_STD.TSTRING := 'fullName'; -- Атрибут для полного наименования + SRESP_ATTR_DESC constant PKG_STD.TSTRING := 'desc'; -- Атрибут для описания + SRESP_ATTR_TYPE constant PKG_STD.TSTRING := 'type'; -- Атрибут для типа + 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_FIXED_HEADER constant PKG_STD.TSTRING := 'fixedHeader'; -- Атрибут для флага фиксации заголовка + SRESP_ATTR_FIXED_COLUMNS constant PKG_STD.TSTRING := 'fixedColumns'; -- Атрибут для количества фиксированных колонок + SRESP_ATTR_WIDTH constant PKG_STD.TSTRING := 'width'; -- Атрибут для ширины /* Константы - атрибуты ответов (таблица данных) */ SRESP_ATTR_DT_ORDER constant PKG_STD.TSTRING := 'order'; -- Атрибут для флага сортировки @@ -743,7 +754,8 @@ text="Формат data_grid и gant как в chart" SHINT in varchar2 := null, -- Текст всплывающей подсказки SPARENT in varchar2 := null, -- Наименование родительской колонки BEXPANDABLE in boolean := false, -- Разрешить сокрытие/отображение дочерних колонок - BEXPANDED in boolean := true -- Отобразить/скрыть дочерние колонки + BEXPANDED in boolean := true, -- Отобразить/скрыть дочерние колонки + NWIDTH in number := null -- Ширина колонки (обязательно для фиксированных) ) return TCOL_DEF -- Результат работы is RRES TCOL_DEF; -- Буфер для результата @@ -762,6 +774,7 @@ text="Формат data_grid и gant как в chart" RRES.SPARENT := SPARENT; RRES.BEXPANDABLE := COALESCE(BEXPANDABLE, false); RRES.BEXPANDED := COALESCE(BEXPANDED, true); + RRES.NWIDTH := NWIDTH; /* Возвращаем результат */ return RRES; end TCOL_DEF_MAKE; @@ -783,6 +796,7 @@ text="Формат data_grid и gant как в chart" SPARENT in varchar2 := null, -- Наименование родительской колонки BEXPANDABLE in boolean := false, -- Разрешить сокрытие/отображение дочерних колонок BEXPANDED in boolean := true, -- Отобразить/скрыть дочерние колонки + NWIDTH in number := null, -- Ширина колонки (обязательно для фиксированных) BCLEAR in boolean := false -- Флаг очистки коллекции (false - не очищать, true - очистить коллекцию перед добавлением) ) is @@ -805,7 +819,8 @@ text="Формат data_grid и gant как в chart" SHINT => SHINT, SPARENT => SPARENT, BEXPANDABLE => BEXPANDABLE, - BEXPANDED => BEXPANDED); + BEXPANDED => BEXPANDED, + NWIDTH => NWIDTH); end TCOL_DEFS_ADD; /* Поиск описания колонки по наименованию */ @@ -853,6 +868,9 @@ text="Формат data_grid и gant как в chart" 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).NWIDTH is not null) then + PKG_XFAST.ATTR(SNAME => SRESP_ATTR_WIDTH, NVALUE => RCOL_DEFS(I).NWIDTH); + end if; /* Предопределённые значения */ 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 @@ -1148,14 +1166,19 @@ text="Формат data_grid и gant как в chart" /* Формирование таблицы данных */ function TDATA_GRID_MAKE - return TDATA_GRID -- Результат работы + ( + BFIXED_HEADER in boolean := false, -- Зафиксировать заголовок + NFIXED_COLUMNS in number := 0 -- Количество фиксированных колонок + ) return TDATA_GRID -- Результат работы is - RRES TDATA_GRID; -- Буфер для результата + RRES TDATA_GRID; -- Буфер для результата begin /* Формируем объект */ - RRES.RCOL_DEFS := TCOL_DEFS(); - RRES.RGROUPS := TGROUPS(); - RRES.RROWS := TROWS(); + RRES.BFIXED_HEADER := COALESCE(BFIXED_HEADER, false); + RRES.NFIXED_COLUMNS := COALESCE(NFIXED_COLUMNS, 0); + RRES.RCOL_DEFS := TCOL_DEFS(); + RRES.RGROUPS := TGROUPS(); + RRES.RROWS := TROWS(); /* Возвращаем результат */ return RRES; end TDATA_GRID_MAKE; @@ -1188,6 +1211,7 @@ text="Формат data_grid и gant как в chart" SPARENT in varchar2 := null, -- Наименование родительской колонки BEXPANDABLE in boolean := false, -- Разрешить сокрытие/отображение дочерних колонок BEXPANDED in boolean := true, -- Отобразить/скрыть дочерние колонки + NWIDTH in number := null, -- Ширина колонки (обязательно для фиксированных) BCLEAR in boolean := false -- Флаг очистки коллекции описаний колонок таблицы данных (false - не очищать, true - очистить коллекцию перед добавлением) ) is @@ -1207,6 +1231,7 @@ text="Формат data_grid и gant как в chart" SPARENT => SPARENT, BEXPANDABLE => BEXPANDABLE, BEXPANDED => BEXPANDED, + NWIDTH => NWIDTH, BCLEAR => BCLEAR); end TDATA_GRID_ADD_COL_DEF; @@ -1249,6 +1274,18 @@ text="Формат data_grid и gant как в chart" RDATA_GRID.RROWS(RDATA_GRID.RROWS.LAST) := RROW; end TDATA_GRID_ADD_ROW; + /* Сериализация описания таблицы данных */ + procedure TDATA_GRID_DEF_TO_XML + ( + RDATA_GRID in TDATA_GRID -- Описание таблицы данных + ) + is + begin + /* Cтатические атрибуты заголовка */ + PKG_XFAST.ATTR(SNAME => SRESP_ATTR_FIXED_HEADER, BVALUE => RDATA_GRID.BFIXED_HEADER); + PKG_XFAST.ATTR(SNAME => SRESP_ATTR_FIXED_COLUMNS, NVALUE => RDATA_GRID.NFIXED_COLUMNS); + end TDATA_GRID_DEF_TO_XML; + /* Сериализация таблицы данных */ function TDATA_GRID_TO_XML ( @@ -1262,6 +1299,12 @@ text="Формат data_grid и gant как в chart" PKG_XFAST.PROLOGUE(ITYPE => PKG_XFAST.CONTENT_); /* Открываем корень */ PKG_XFAST.DOWN_NODE(SNAME => SRESP_TAG_XDATA); + /* Открываем таблицу данных */ + PKG_XFAST.DOWN_NODE(SNAME => SRESP_TAG_XDATA_GRID); + /* Формируем описание таблицы данных */ + TDATA_GRID_DEF_TO_XML(RDATA_GRID => RDATA_GRID); + /* Закрываем таблицу данных */ + PKG_XFAST.UP(); /* Если необходимо включить описание колонок */ if (NINCLUDE_DEF = 1) then TCOL_DEFS_TO_XML(RCOL_DEFS => RDATA_GRID.RCOL_DEFS); From 4b5938e3b15dbf45f01731f3881e600778dc5ed5 Mon Sep 17 00:00:00 2001 From: Mikhail Chechnev Date: Sat, 4 May 2024 14:17:24 +0300 Subject: [PATCH 20/76] =?UTF-8?q?WEB=20APP:=20P8PDataGrid=20-=20=D0=BF?= =?UTF-8?q?=D0=BE=D0=B4=D0=B4=D0=B5=D1=80=D0=B6=D0=BA=D0=B0=20=D1=84=D0=B8?= =?UTF-8?q?=D0=BA=D1=81=D0=B8=D1=80=D0=BE=D0=B2=D0=B0=D0=BD=D0=BD=D1=8B?= =?UTF-8?q?=D1=85=20=D0=B7=D0=B0=D0=B3=D0=BE=D0=BB=D0=BE=D0=B2=D0=BA=D0=B0?= =?UTF-8?q?=20=D0=B8=20=D0=BA=D0=BE=D0=BB=D0=BE=D0=BD=D0=BE=D0=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/components/p8p_data_grid.js | 6 + app/components/p8p_table.js | 164 ++++++++++++++++++++-------- app/components/p8p_table_reducer.js | 62 ++++++++--- 3 files changed, 174 insertions(+), 58 deletions(-) diff --git a/app/components/p8p_data_grid.js b/app/components/p8p_data_grid.js index 7ccfd73..51c1416 100644 --- a/app/components/p8p_data_grid.js +++ b/app/components/p8p_data_grid.js @@ -35,6 +35,8 @@ const P8PDataGrid = ({ groups, rows, size, + fixedHeader = false, + fixedColumns = 0, morePages = false, reloading, expandable, @@ -111,6 +113,8 @@ const P8PDataGrid = ({ orders={orders} filters={filters} size={size || P8P_DATA_GRID_SIZE.MEDIUM} + fixedHeader={fixedHeader} + fixedColumns={fixedColumns} morePages={morePages} reloading={reloading} expandable={expandable} @@ -147,6 +151,8 @@ P8PDataGrid.propTypes = { groups: PropTypes.array, rows: PropTypes.array.isRequired, size: PropTypes.string, + fixedHeader: PropTypes.bool, + fixedColumns: PropTypes.number, morePages: PropTypes.bool, reloading: PropTypes.bool.isRequired, expandable: PropTypes.bool, diff --git a/app/components/p8p_table.js b/app/components/p8p_table.js index b81947d..9d77a0a 100644 --- a/app/components/p8p_table.js +++ b/app/components/p8p_table.js @@ -33,6 +33,7 @@ import { Container, Link } from "@mui/material"; //Интерфейсные компоненты +import { useTheme } from "@mui/material/styles"; //Взаимодействие со стилями MUI import { P8PAppInlineError } from "./p8p_app_message"; //Встраиваемое сообщение об ошибке import { P8P_TABLE_AT, HEADER_INITIAL_STATE, hasValue, p8pTableReducer } from "./p8p_table_reducer"; //Редьюсер состояния @@ -85,9 +86,30 @@ const STYLES = { TABLE: { with: "100%" }, + TABLE_HEAD_STICKY: { + position: "sticky", + top: 0, + zIndex: 1000 + }, + TABLE_HEAD_CELL_STICKY: (theme, left) => ({ + position: "sticky", + left, + backgroundColor: theme.palette.background.default, + zIndex: 1000 + }), TABLE_ROW: { "&:last-child td, &:last-child th": { border: 0 } }, + TABLE_CELL_STICKY: (theme, left) => ({ + position: "sticky", + left, + backgroundColor: theme.palette.background.default, + zIndex: 500 + }), + TABLE_CELL_EXPAND_CONTROL: { + minWidth: "60px", + maxWidth: "60px" + }, TABLE_CELL_EXPAND_CONTAINER: { paddingBottom: 0, paddingTop: 0 @@ -95,6 +117,10 @@ const STYLES = { TABLE_CELL_GROUP_HEADER: { backgroundColor: "lightgray" }, + TABLE_CELL_GROUP_HEADER_STICKY: { + position: "sticky", + left: 0 + }, TABLE_COLUMN_STACK: { alignItems: "center" }, @@ -460,6 +486,8 @@ const P8PTable = ({ orders, filters, size, + fixedHeader = false, + fixedColumns = 0, morePages = false, reloading, expandable, @@ -501,6 +529,9 @@ const P8PTable = ({ //Собственное состояние - колонка с отображаемой подсказкой const [displayHintColumn, setDisplayHintColumn] = useState(null); + //Стили + const theme = useTheme(); + //Описание фильтруемой колонки const filterColumnDef = filterColumn ? columnsDef.find(columnDef => columnDef.name == filterColumn) || null : null; @@ -516,12 +547,12 @@ const P8PTable = ({ : ["", ""]; //Формирование заголовка таблицы - const setHeader = ({ columnsDef, expandable, objectsCopier }) => - dispatchHeaderAction({ type: P8P_TABLE_AT.SET_HEADER, payload: { columnsDef, expandable, objectsCopier } }); + const setHeader = ({ columnsDef, expandable, fixedColumns, objectsCopier }) => + dispatchHeaderAction({ type: P8P_TABLE_AT.SET_HEADER, payload: { columnsDef, expandable, fixedColumns, objectsCopier } }); //Сворачивание/разворачивание уровня заголовка таблицы const toggleHeaderExpand = ({ columnName, objectsCopier }) => - dispatchHeaderAction({ type: P8P_TABLE_AT.TOGGLE_HEADER_EXPAND, payload: { columnName, expandable, objectsCopier } }); + dispatchHeaderAction({ type: P8P_TABLE_AT.TOGGLE_HEADER_EXPAND, payload: { columnName, expandable, fixedColumns, objectsCopier } }); //Выравнивание в зависимости от типа данных const getAlignByDataType = ({ dataType, hasChild }) => @@ -621,38 +652,46 @@ const P8PTable = ({ //При изменении описания колонок useEffect(() => { - setHeader({ columnsDef, expandable, objectsCopier }); - }, [columnsDef, expandable, objectsCopier]); + setHeader({ columnsDef, expandable, fixedColumns, objectsCopier }); + }, [columnsDef, expandable, fixedColumns, objectsCopier]); //Генерация заголовка группы const renderGroupCell = group => { let customRender = {}; if (groupCellRender) customRender = groupCellRender({ columnsDef: header.columnsDef, group }) || {}; - return ( + return header.displayDataColumns.map((columnDef, i) => ( - - {group.expandable ? ( - { - setExpandedGroups(pv => ({ ...pv, ...{ [group.name]: !pv[group.name] } })); - }} - > - {expandedGroups[group.name] ? "indeterminate_check_box" : "add_box"} - - ) : null} - {customRender.data ? customRender.data : group.caption} - + {i == 0 ? ( + + {group.expandable ? ( + { + setExpandedGroups(pv => ({ ...pv, ...{ [group.name]: !pv[group.name] } })); + }} + > + {expandedGroups[group.name] ? "indeterminate_check_box" : "add_box"} + + ) : null} + {customRender.data ? customRender.data : group.caption} + + ) : null} - ); + )); }; //Генерация содержимого return ( - <> +
{displayHintColumn ? ( ) : null} @@ -684,13 +723,22 @@ const P8PTable = ({ valueFormatter={valueFormatter} /> ) : null} - - - - {header.displayLevels.map(level => ( +
+ + {header.displayLevels.map((level, i) => ( - {expandable && rowExpandRender ? : null} + {expandable && rowExpandRender && i == 0 ? ( + + ) : null} {header.displayLevelsColumns[level].map((columnDef, j) => { let customRender = {}; if (headCellRender) customRender = headCellRender({ columnDef }) || {}; @@ -698,7 +746,11 @@ const P8PTable = ({ {expandable && rowExpandRender ? ( - + handleExpandClick(i)}> {expanded[i] === true ? "keyboard_arrow_down" : "keyboard_arrow_right"} @@ -766,7 +825,13 @@ const P8PTable = ({ {customRender.data @@ -780,7 +845,15 @@ const P8PTable = ({ {expandable && rowExpandRender && expanded[i] === true ? ( - + {rowExpandRender({ columnsDef, row })} @@ -800,19 +873,19 @@ const P8PTable = ({ : null}
- {rows.length == 0 ? ( - noDataFoundText && !reloading ? ( - - ) : null - ) : morePages ? ( - - - - ) : null}
- + {rows.length == 0 ? ( + noDataFoundText && !reloading ? ( + + ) : null + ) : morePages ? ( + + + + ) : null} +
); }; @@ -829,7 +902,8 @@ P8PTable.propTypes = { values: PropTypes.array, parent: PropTypes.string, expandable: PropTypes.bool.isRequired, - expanded: PropTypes.bool.isRequired + expanded: PropTypes.bool.isRequired, + width: PropTypes.number }) ).isRequired, groups: PropTypes.arrayOf( @@ -849,6 +923,8 @@ P8PTable.propTypes = { ).isRequired, filters: PropTypes.arrayOf(P8P_TABLE_FILTER_SHAPE).isRequired, size: PropTypes.string, + fixedHeader: PropTypes.bool, + fixedColumns: PropTypes.number, morePages: PropTypes.bool, reloading: PropTypes.bool.isRequired, expandable: PropTypes.bool, diff --git a/app/components/p8p_table_reducer.js b/app/components/p8p_table_reducer.js index 9dc4721..9d2a10a 100644 --- a/app/components/p8p_table_reducer.js +++ b/app/components/p8p_table_reducer.js @@ -19,7 +19,8 @@ const HEADER_INITIAL_STATE = () => ({ displayLevels: [], displayLevelsColumns: {}, displayDataColumnsCount: 0, - displayDataColumns: [] + displayDataColumns: [], + displayFixedColumnsCount: 0 }); //Состояние описания ячейки заголовка таблицы по умолчанию @@ -28,6 +29,8 @@ const HEADER_COLUMN_INITIAL_STATE = ({ columnDef, objectsCopier }) => { if (!hasValue(tmp.parent)) tmp.parent = ""; if (!hasValue(tmp.expandable)) tmp.expandable = false; if (!hasValue(tmp.expanded)) tmp.expanded = true; + if (!hasValue(tmp.fixed)) tmp.fixed = false; + if (!hasValue(tmp.fixedLeft)) tmp.fixedLeft = 0; return tmp; }; @@ -55,8 +58,23 @@ const getDisplayColumnColSpan = (displayTree, columnDef) => { } else return 1; }; +//Определения признака зафиксированности колонки +const getFixedColumns = (displayTree, parentFixed, parentLeft, fixedColumns) => { + if (fixedColumns) { + let left = parentLeft; + displayTree.forEach((columnDef, i) => { + left += columnDef.width; + if ((columnDef.level == 1 && i + 1 <= fixedColumns) || (columnDef.level > 1 && parentFixed)) { + columnDef.fixed = true; + columnDef.fixedLeft = left - columnDef.width; + } else columnDef.fixed = false; + if (columnDef.hasChild) getFixedColumns(columnDef.child, columnDef.fixed, columnDef.fixedLeft, fixedColumns); + }); + } +}; + //Формирование дерева отображаемых элементов заголовка -const buildDisplayTree = (columnsDef, parent, level) => { +const buildDisplayTree = (columnsDef, parent, level, expandable, fixedColumns) => { const baseBuild = (columnsDef, parent, level) => { let maxLevel = level - 1; const res = columnsDef @@ -77,6 +95,7 @@ const buildDisplayTree = (columnsDef, parent, level) => { }; const [displayTree, maxLevel] = baseBuild(columnsDef, parent, level); getDisplayColumnRowSpan(displayTree, maxLevel); + getFixedColumns(displayTree, false, expandable ? 60 : 0, fixedColumns); return [displayTree, maxLevel]; }; @@ -106,28 +125,41 @@ const buildDisplayDataColumns = (displayTree, expandable) => { return [displayDataColumns, displayDataColumns.length + (expandable === true ? 1 : 0)]; }; +//Подсчёт количества отображаемых фиксированных колонок +const getDisplayFixedColumnsCount = displayTree => { + let res = 0; + const traverseTree = displayTree => { + displayTree.forEach(columnDef => (columnDef.hasChild ? traverseTree(columnDef.child) : columnDef.fixed ? res++ : null)); + }; + traverseTree(displayTree); + return res; +}; + //Формирование описания отображаемых колонок -const buildDisplay = ({ columnsDef, expandable }) => { +const buildDisplay = ({ columnsDef, expandable, fixedColumns }) => { //Сформируем дерево отображаемых колонок заголовка - const [displayTree, maxLevel] = buildDisplayTree(columnsDef, "", 1); + const [displayTree, maxLevel] = buildDisplayTree(columnsDef, "", 1, expandable, fixedColumns); //Вытянем дерево в удобные для рендеринга структуры const [displayLevels, displayLevelsColumns] = buildDisplayLevelsColumns(displayTree, maxLevel); //Сформируем отображаемые колонки данных const [displayDataColumns, displayDataColumnsCount] = buildDisplayDataColumns(displayTree, expandable); + //Подсчитаем количество отображаемых фиксированных колонок + const displayFixedColumnsCount = getDisplayFixedColumnsCount(displayTree); //Вернём результат - return [displayLevels, displayLevelsColumns, displayDataColumns, displayDataColumnsCount]; + return [displayLevels, displayLevelsColumns, displayDataColumns, displayDataColumnsCount, displayFixedColumnsCount]; }; //Формирование описания заголовка -const buildHeaderDef = ({ columnsDef, expandable, objectsCopier }) => { +const buildHeaderDef = ({ columnsDef, expandable, fixedColumns, objectsCopier }) => { //Инициализируем результат const res = HEADER_INITIAL_STATE(); //Инициализируем внутренне описание колонок и поместим его в результат columnsDef.forEach(columnDef => res.columnsDef.push(HEADER_COLUMN_INITIAL_STATE({ columnDef, objectsCopier }))); //Добавим в результат сведения об отображаемых данных - [res.displayLevels, res.displayLevelsColumns, res.displayDataColumns, res.displayDataColumnsCount] = buildDisplay({ + [res.displayLevels, res.displayLevelsColumns, res.displayDataColumns, res.displayDataColumnsCount, res.displayFixedColumnsCount] = buildDisplay({ columnsDef: res.columnsDef, - expandable + expandable, + fixedColumns }); //Сформируем дерево отображаемых колонок заголовка //const [displayTree, maxLevel] = buildDisplayTree(res.columnsDef, "", 1); @@ -147,19 +179,20 @@ const buildHeaderDef = ({ columnsDef, expandable, objectsCopier }) => { const handlers = { //Формирование заголовка [P8P_TABLE_AT.SET_HEADER]: (state, { payload }) => { - const { columnsDef, expandable, objectsCopier } = payload; + const { columnsDef, expandable, fixedColumns, objectsCopier } = payload; return { ...state, - ...buildHeaderDef({ columnsDef, expandable, objectsCopier }) + ...buildHeaderDef({ columnsDef, expandable, fixedColumns, objectsCopier }) }; }, [P8P_TABLE_AT.TOGGLE_HEADER_EXPAND]: (state, { payload }) => { - const { columnName, expandable, objectsCopier } = payload; + const { columnName, expandable, fixedColumns, objectsCopier } = payload; const columnsDef = objectsCopier(state.columnsDef); columnsDef.forEach(columnDef => (columnDef.name == columnName ? (columnDef.expanded = !columnDef.expanded) : null)); - const [displayLevels, displayLevelsColumns, displayDataColumns, displayDataColumnsCount] = buildDisplay({ + const [displayLevels, displayLevelsColumns, displayDataColumns, displayDataColumnsCount, displayFixedColumnsCount] = buildDisplay({ columnsDef, - expandable + expandable, + fixedColumns }); //const [displayTree, maxLevel] = buildDisplayTree(columnsDef, "", 1); //const [displayLevels, displayLevelsColumns] = buildDisplayLevelsColumns(displayTree, maxLevel); @@ -170,7 +203,8 @@ const handlers = { displayLevels, displayLevelsColumns, displayDataColumns, - displayDataColumnsCount + displayDataColumnsCount, + displayFixedColumnsCount }; }, //Обработчик по умолчанию From 383a05c3e701077c0c2f25181ff8087a2ce8cae8 Mon Sep 17 00:00:00 2001 From: Mikhail Chechnev Date: Sat, 4 May 2024 14:18:57 +0300 Subject: [PATCH 21/76] =?UTF-8?q?WEB=20APP:=20P8PDataGrid=20-=20=D1=83?= =?UTF-8?q?=D0=B4=D0=B0=D0=BB=D0=B5=D0=BD=D1=8B=20=D0=BD=D0=B5=D0=B7=D0=BD?= =?UTF-8?q?=D0=B0=D1=87=D0=B8=D0=BC=D1=8B=D0=B5=20=D0=BA=D0=BE=D0=BC=D0=BC?= =?UTF-8?q?=D0=B5=D0=BD=D1=82=D0=B0=D1=80=D0=B8=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/components/p8p_table_reducer.js | 9 --------- 1 file changed, 9 deletions(-) diff --git a/app/components/p8p_table_reducer.js b/app/components/p8p_table_reducer.js index 9d2a10a..10e23be 100644 --- a/app/components/p8p_table_reducer.js +++ b/app/components/p8p_table_reducer.js @@ -161,12 +161,6 @@ const buildHeaderDef = ({ columnsDef, expandable, fixedColumns, objectsCopier }) expandable, fixedColumns }); - //Сформируем дерево отображаемых колонок заголовка - //const [displayTree, maxLevel] = buildDisplayTree(res.columnsDef, "", 1); - //Вытянем дерево в удобные для рендеринга структуры - //[res.displayLevels, res.displayLevelsColumns] = buildDisplayLevelsColumns(displayTree, maxLevel); - //Сформируем отображаемые колонки данных - //[res.displayDataColumns, res.displayDataColumnsCount] = buildDisplayDataColumns(displayTree, expandable); //Вернём результат return res; }; @@ -194,9 +188,6 @@ const handlers = { expandable, fixedColumns }); - //const [displayTree, maxLevel] = buildDisplayTree(columnsDef, "", 1); - //const [displayLevels, displayLevelsColumns] = buildDisplayLevelsColumns(displayTree, maxLevel); - //const [displayDataColumns, displayDataColumnsCount] = buildDisplayDataColumns(displayTree, expandable); return { ...state, columnsDef, From bea65e4a8a46b79a4c9ce5238eb6fef25a09b85d Mon Sep 17 00:00:00 2001 From: Mikhail Chechnev Date: Sat, 4 May 2024 14:34:27 +0300 Subject: [PATCH 22/76] =?UTF-8?q?=D0=91=D0=94:=20=20=D0=9F=D0=B0=D0=BD?= =?UTF-8?q?=D0=B5=D0=BB=D1=8C=20"=D0=93=D1=80=D0=B0=D1=84=D0=B8=D0=BA?= =?UTF-8?q?=D0=B8=20=D0=BF=D1=80=D0=BE=D0=B5=D0=BA=D1=82=D0=BE=D0=B2"=20-?= =?UTF-8?q?=20=20=D1=84=D0=B8=D0=BA=D1=81=D0=B8=D1=80=D0=BE=D0=B2=D0=B0?= =?UTF-8?q?=D0=BD=D0=BD=D1=8B=D0=B9=20=D0=B7=D0=B0=D0=B3=D0=BE=D0=BB=D0=BE?= =?UTF-8?q?=D0=B2=D0=BE=D0=BA=20=D0=B8=20=D0=BA=D0=BE=D0=BB=D0=BE=D0=BD?= =?UTF-8?q?=D0=BA=D0=B0=20=D1=80=D0=B0=D0=B1=D0=BE=D1=82,=20=D0=BF=D0=B0?= =?UTF-8?q?=D0=BD=D0=B5=D0=BB=D1=8C=20"=D0=AD=D0=BA=D0=BE=D0=BD=D0=BE?= =?UTF-8?q?=D0=BC=D0=B8=D0=BA=D0=B0=20=D0=BF=D1=80=D0=BE=D0=B5=D0=BA=D1=82?= =?UTF-8?q?=D0=BE=D0=B2"=20-=20=D0=B8=D1=81=D0=BF=D1=80=D0=B0=D0=B2=D0=BB?= =?UTF-8?q?=D0=B5=D0=BD=D0=B0=20=D0=BE=D1=88=D0=B8=D0=B1=D0=BA=D0=B0=20?= =?UTF-8?q?=D0=BE=D0=BA=D1=80=D1=83=D0=B3=D0=BB=D0=B5=D0=BD=D0=B8=D1=8F=20?= =?UTF-8?q?=D0=BA=D0=BE=D0=BB=D0=B8=D1=87=D0=B5=D1=81=D1=82=D0=B2=D0=B0=20?= =?UTF-8?q?=D0=BE=D1=81=D1=82=D0=B0=D0=B2=D1=88=D0=B8=D1=85=D1=81=D1=8F=20?= =?UTF-8?q?=D0=B4=D0=BD=D0=B5=D0=B9=20=D0=BF=D1=80=D0=BE=D0=B5=D0=BA=D1=82?= =?UTF-8?q?=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- db/PKG_P8PANELS_PROJECTS.pck | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/db/PKG_P8PANELS_PROJECTS.pck b/db/PKG_P8PANELS_PROJECTS.pck index 88c1733..960779a 100644 --- a/db/PKG_P8PANELS_PROJECTS.pck +++ b/db/PKG_P8PANELS_PROJECTS.pck @@ -1563,7 +1563,7 @@ create or replace package body PKG_P8PANELS_PROJECTS as and PS.ENDPLAN is not null and PS.HRN is null); /* Инициализируем таблицу данных */ - RDG := PKG_P8PANELS_VISUAL.TDATA_GRID_MAKE(); + RDG := PKG_P8PANELS_VISUAL.TDATA_GRID_MAKE(BFIXED_HEADER => true, NFIXED_COLUMNS => 1); /* Если есть данные о начале и окончании проектов в портфеле */ if ((DFROM is not null) and (DTO is not null)) then /* Формируем структуру заголовка */ @@ -1575,7 +1575,8 @@ create or replace package body PKG_P8PANELS_PROJECTS as PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG, SNAME => 'SJOB', SCAPTION => 'Работы', - SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_STR); + SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_STR, + NWIDTH => 300); PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG, SNAME => 'SRESP', SCAPTION => 'Ответственный', @@ -2394,7 +2395,7 @@ create or replace package body PKG_P8PANELS_PROJECTS as RSTG := STAGES_GET(NRN => NRN); /* Вернём остаток дней */ if (RSTG.ENDPLAN is not null) then - return RSTG.ENDPLAN - sysdate; + return ROUND(RSTG.ENDPLAN - sysdate); else return null; end if; From 3a87e4125d554076cef1af7c1e2a92104282084b Mon Sep 17 00:00:00 2001 From: Mikhail Chechnev Date: Sat, 4 May 2024 15:14:14 +0300 Subject: [PATCH 23/76] =?UTF-8?q?WEB=20APP:=20=20=D0=9F=D0=B0=D0=BD=D0=B5?= =?UTF-8?q?=D0=BB=D1=8C=20"=D0=93=D1=80=D0=B0=D1=84=D0=B8=D0=BA=D0=B8=20?= =?UTF-8?q?=D0=BF=D1=80=D0=BE=D0=B5=D0=BA=D1=82=D0=BE=D0=B2"=20-=20=D1=84?= =?UTF-8?q?=D0=B8=D0=BA=D1=81=D0=B8=D1=80=D0=BE=D0=B2=D0=B0=D0=BD=D0=BD?= =?UTF-8?q?=D1=8B=D0=B9=20=D0=B7=D0=B0=D0=B3=D0=BE=D0=BB=D0=BE=D0=B2=D0=BE?= =?UTF-8?q?=D0=BA=20=D0=B8=20=D0=BA=D0=BE=D0=BB=D0=BE=D0=BD=D0=BA=D0=B0=20?= =?UTF-8?q?=D1=80=D0=B0=D0=B1=D0=BE=D1=82,=20=D0=BF=D0=BE=D1=80=D1=8F?= =?UTF-8?q?=D0=B4=D0=BE=D0=BA=20=D0=B2=20=D1=81=D1=82=D0=B8=D0=BB=D1=8F?= =?UTF-8?q?=D1=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/panels/prj_graph/layouts.js | 42 +++++++++++++++++++++---------- app/panels/prj_graph/prj_graph.js | 24 +++++++++++++++--- 2 files changed, 50 insertions(+), 16 deletions(-) diff --git a/app/panels/prj_graph/layouts.js b/app/panels/prj_graph/layouts.js index 0ccc943..11ef118 100644 --- a/app/panels/prj_graph/layouts.js +++ b/app/panels/prj_graph/layouts.js @@ -18,6 +18,23 @@ import { formatDateRF } from "../../core/utils"; //Вспомогательны //Шаблон имени ячейки месяца const MONTH_COLUMN_REG_EXP = /[0-9]{4}_[0-9]{1,2}/; +//Стили +const STYLES = { + GROUP_CELL: { padding: "2px" }, + GROUP_CELL_LINK: { textOverflow: "ellipsis", overflow: "hidden", whiteSpace: "pre", minWidth: "800px", maxWidth: "800px" }, + MONTH_CELL: { padding: "2px", maxWidth: "30px", overflow: "visible", fontSize: "smaller", whiteSpace: "nowrap" }, + MONTH_CELL_FILLED: state => ({ backgroundColor: state == 0 ? "lightyellow" : state == 1 ? "lightgreen" : "lightblue", cursor: "pointer" }), + JOB_CELL: { + padding: "2px", + paddingLeft: "10px", + maxWidth: "300px", + textOverflow: "ellipsis", + overflow: "hidden", + whiteSpace: "pre", + fontSize: "smaller" + } +}; + //----------- //Тело модуля //----------- @@ -46,9 +63,16 @@ const formatStageItemValue = (state, text) => { //Генерация представления ячейки заголовка группы export const groupCellRender = ({ group, pOnlineShowDocument }) => ({ - cellStyle: { padding: "2px" }, + cellStyle: STYLES.GROUP_CELL, data: ( - pOnlineShowDocument({ unitCode: "Projects", document: group.name })}> + pOnlineShowDocument({ unitCode: "Projects", document: group.name })} + > {group.caption} ) @@ -67,14 +91,14 @@ export const dataCellRender = ({ row, columnDef, pOnlineShowDocument }) => { let data = null; if ((dF <= mF && dT >= mT) || (dF >= mF && dF <= mT) || (dT >= mF && dT <= mT)) { if (year == dF.getFullYear() && month == dF.getMonth() + 1) data = formatStageItemValue(row.NSTATE, row.SRESP); - cellStyle = { backgroundColor: row.NSTATE == 0 ? "lightyellow" : row.NSTATE == 1 ? "lightgreen" : "lightblue", cursor: "pointer" }; + cellStyle = STYLES.MONTH_CELL_FILLED(row.NSTATE); cellProps = { title: `${formatDateRF(dF)} - ${formatDateRF(dT)}`, onClick: () => pOnlineShowDocument({ unitCode: "ProjectsStages", document: row.NRN }) }; } return { - cellStyle: { padding: "2px", maxWidth: "30px", overflow: "visible", fontSize: "smaller", whiteSpace: "nowrap", ...cellStyle }, + cellStyle: { ...STYLES.MONTH_CELL, ...cellStyle }, cellProps, data }; @@ -83,15 +107,7 @@ export const dataCellRender = ({ row, columnDef, pOnlineShowDocument }) => { case "SJOB": return { cellProps: { title: row[columnDef.name] }, - cellStyle: { - padding: "2px", - paddingLeft: "10px", - maxWidth: "300px", - textOverflow: "ellipsis", - overflow: "hidden", - whiteSpace: "pre", - fontSize: "smaller" - } + cellStyle: STYLES.JOB_CELL }; } }; diff --git a/app/panels/prj_graph/prj_graph.js b/app/panels/prj_graph/prj_graph.js index 7d9da52..1fc4f99 100644 --- a/app/panels/prj_graph/prj_graph.js +++ b/app/panels/prj_graph/prj_graph.js @@ -15,6 +15,15 @@ import { ApplicationСtx } from "../../context/application"; //Контекст import { BackEndСtx } from "../../context/backend"; //Контекст взаимодействия с сервером import { dataCellRender, groupCellRender } from "./layouts"; //Дополнительная разметка и вёрстка клиентских элементов +//--------- +//Константы +//--------- + +//Стили +const STYLES = { + DATA_GRID_CONTAINER: { minWidth: "95vw", maxWidth: "95vw", minHeight: "87vh", maxHeight: "87vh" } +}; + //----------- //Тело модуля //----------- @@ -27,7 +36,9 @@ const PrjGraph = () => { columnsDef: [], groups: [], rows: [], - reload: true + reload: true, + fixedHeader: false, + fixedColumns: 0 }); //Подключение к контексту приложения @@ -42,6 +53,8 @@ const PrjGraph = () => { const data = await executeStored({ stored: "PKG_P8PANELS_PROJECTS.GRAPH", args: {}, respArg: "COUT" }); setdataGrid(pv => ({ ...pv, + fixedHeader: data.XDATA_GRID.fixedHeader, + fixedColumns: data.XDATA_GRID.fixedColumns, columnsDef: data.XCOLUMNS_DEF ? [...data.XCOLUMNS_DEF] : pv.columnsDef, rows: [...(data.XROWS || [])], groups: [...(data.XGROUPS || [])], @@ -61,7 +74,7 @@ const PrjGraph = () => {
- + {dataGrid.dataLoaded ? ( { rows={dataGrid.rows} size={P8P_DATA_GRID_SIZE.LARGE} reloading={dataGrid.reload} + fixedHeader={dataGrid.fixedHeader} + fixedColumns={dataGrid.fixedColumns} dataCellRender={prms => dataCellRender({ ...prms, pOnlineShowDocument })} groupCellRender={prms => groupCellRender({ ...prms, pOnlineShowDocument })} - containerComponentProps={{ elevation: 6, sx: { overflowX: "visible" } }} + containerComponentProps={{ + elevation: 3, + sx: STYLES.DATA_GRID_CONTAINER + }} /> ) : null} From 55e98dcad0524edf718c64d8f98e2d89847d0aca Mon Sep 17 00:00:00 2001 From: Mikhail Chechnev Date: Sat, 4 May 2024 15:22:43 +0300 Subject: [PATCH 24/76] =?UTF-8?q?=D0=91=D0=94:=20=D0=9F=D1=80=D0=B8=D0=BC?= =?UTF-8?q?=D0=B5=D1=80=D1=8B=20=D0=B4=D0=BB=D1=8F=20=D1=80=D0=B0=D0=B7?= =?UTF-8?q?=D1=80=D0=B0=D0=B1=D0=BE=D1=82=D1=87=D0=B8=D0=BA=D0=BE=D0=B2=20?= =?UTF-8?q?-=20=D0=BF=D1=80=D0=B8=D0=BC=D0=B5=D1=80=20=D1=82=D0=B0=D0=B1?= =?UTF-8?q?=D0=BB=D0=B8=D1=86=D1=8B=20=D0=B4=D0=B0=D0=BD=D0=BD=D1=8B=D1=85?= =?UTF-8?q?=20=D0=B4=D0=BE=D0=BF=D0=BE=D0=BB=D0=BD=D0=B5=D0=BD=20=D1=84?= =?UTF-8?q?=D0=B8=D0=BA=D1=81=D0=B8=D1=80=D0=BE=D0=B2=D0=B0=D0=BD=D0=BD?= =?UTF-8?q?=D1=8B=D0=BC=D0=B8=20=D0=BA=D0=BE=D0=BB=D0=BE=D0=BD=D0=BA=D0=B0?= =?UTF-8?q?=D0=BC=D0=B8=20=D0=B8=20=D0=B7=D0=B0=D0=B3=D0=BE=D0=BB=D0=BE?= =?UTF-8?q?=D0=B2=D0=BA=D0=BE=D0=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- db/PKG_P8PANELS_SAMPLES.pck | 30 ++++++++++++++++++++++++------ 1 file changed, 24 insertions(+), 6 deletions(-) diff --git a/db/PKG_P8PANELS_SAMPLES.pck b/db/PKG_P8PANELS_SAMPLES.pck index 2248b2e..1f7e228 100644 --- a/db/PKG_P8PANELS_SAMPLES.pck +++ b/db/PKG_P8PANELS_SAMPLES.pck @@ -255,7 +255,7 @@ create or replace package body PKG_P8PANELS_SAMPLES as NROW_FROM => NROW_FROM, NROW_TO => NROW_TO); /* Инициализируем таблицу данных */ - RDG := PKG_P8PANELS_VISUAL.TDATA_GRID_MAKE(); + RDG := PKG_P8PANELS_VISUAL.TDATA_GRID_MAKE(BFIXED_HEADER => true, NFIXED_COLUMNS => 2); /* Описываем колонки таблицы данных */ PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG, SNAME => 'SAGNABBR', @@ -264,7 +264,8 @@ create or replace package body PKG_P8PANELS_SAMPLES as SCOND_FROM => 'AgentAbbr', BVISIBLE => true, BORDER => true, - BFILTER => true); + BFILTER => true, + NWIDTH => 150); PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG, SNAME => 'SAGNINFO', SCAPTION => 'Сведения', @@ -272,7 +273,8 @@ create or replace package body PKG_P8PANELS_SAMPLES as BVISIBLE => true, BORDER => false, BFILTER => false, - BEXPANDABLE => true); + BEXPANDABLE => true, + NWIDTH => 300); PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG, SNAME => 'SAGNNAME', SCAPTION => 'Наименование', @@ -281,7 +283,8 @@ create or replace package body PKG_P8PANELS_SAMPLES as BVISIBLE => true, BORDER => true, BFILTER => true, - SPARENT => 'SAGNINFO'); + SPARENT => 'SAGNINFO', + NWIDTH => 200); PKG_P8PANELS_VISUAL.TCOL_VALS_ADD(RCOL_VALS => RAGN_TYPES, NVALUE => 0); PKG_P8PANELS_VISUAL.TCOL_VALS_ADD(RCOL_VALS => RAGN_TYPES, NVALUE => 1); PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG, @@ -293,12 +296,21 @@ create or replace package body PKG_P8PANELS_SAMPLES as BORDER => true, BFILTER => true, SPARENT => 'SAGNINFO', + NWIDTH => 100, RCOL_VALS => RAGN_TYPES, SHINT => 'В Системе бывают контрагенты двух типов:
' || 'Юридическое лицо - организация, которая имеет в собственности, хозяйственном ведении ' || 'или оперативном управлении обособленное имущество, отвечает по своим обязательствам этим имуществом, может от своего ' || 'имени приобретать и осуществлять имущественные и личные неимущественные права, отвечать по своим обязанностям.
' || 'Физическое лицо - субъект правовых отношений, представляющий собой одного человека.'); + PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG, + SNAME => 'SFULLNAME', + SCAPTION => 'Полное наименование', + SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_STR); + PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG, + SNAME => 'SAGNIDNUMB', + SCAPTION => 'ИНН', + SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_STR); /* Обходим данные */ begin /* Добавляем подсказку совместимости */ @@ -309,7 +321,9 @@ create or replace package body PKG_P8PANELS_SAMPLES as PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => PKG_SQL_BUILD.SQLROWNUM() || ' NROW'); PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' from (select AG.AGNABBR SAGNABBR,'); PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' AG.AGNNAME SAGNNAME,'); - PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' AG.AGNTYPE NAGNTYPE'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' AG.AGNTYPE NAGNTYPE,'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' AG.FULLNAME SFULLNAME,'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' AG.AGNIDNUMB SAGNIDNUMB'); PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' from AGNLIST AG'); PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' where exists (select ' || PKG_SQL_BUILD.SET_HINT(SHINT => 'INDEX(UP I_USERPRIV_CATALOG_ROLEID)') || ' null'); PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' from USERPRIV UP'); @@ -341,7 +355,9 @@ create or replace package body PKG_P8PANELS_SAMPLES as PKG_SQL_DML.DEFINE_COLUMN_STR(ICURSOR => ICURSOR, IPOSITION => 1); PKG_SQL_DML.DEFINE_COLUMN_STR(ICURSOR => ICURSOR, IPOSITION => 2); PKG_SQL_DML.DEFINE_COLUMN_NUM(ICURSOR => ICURSOR, IPOSITION => 3); - PKG_SQL_DML.DEFINE_COLUMN_NUM(ICURSOR => ICURSOR, IPOSITION => 4); + PKG_SQL_DML.DEFINE_COLUMN_STR(ICURSOR => ICURSOR, IPOSITION => 4); + PKG_SQL_DML.DEFINE_COLUMN_STR(ICURSOR => ICURSOR, IPOSITION => 5); + PKG_SQL_DML.DEFINE_COLUMN_NUM(ICURSOR => ICURSOR, IPOSITION => 6); /* Делаем выборку */ if (PKG_SQL_DML.EXECUTE(ICURSOR => ICURSOR) = 0) then null; @@ -374,6 +390,8 @@ create or replace package body PKG_P8PANELS_SAMPLES as PKG_P8PANELS_VISUAL.TROW_ADD_COL(RROW => RDG_ROW, SNAME => 'SAGNINFO', SVALUE => SAGNINFO); PKG_P8PANELS_VISUAL.TROW_ADD_COL(RROW => RDG_ROW, SNAME => 'SAGNNAME', SVALUE => SAGNNAME); PKG_P8PANELS_VISUAL.TROW_ADD_COL(RROW => RDG_ROW, SNAME => 'NAGNTYPE', NVALUE => NAGNTYPE); + PKG_P8PANELS_VISUAL.TROW_ADD_CUR_COLS(RROW => RDG_ROW, SNAME => 'SFULLNAME', ICURSOR => ICURSOR, NPOSITION => 4); + PKG_P8PANELS_VISUAL.TROW_ADD_CUR_COLS(RROW => RDG_ROW, SNAME => 'SAGNIDNUMB', ICURSOR => ICURSOR, NPOSITION => 5); /* Добавляем строку в таблицу */ PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_ROW(RDATA_GRID => RDG, RROW => RDG_ROW); end loop; From 6ffd82e8649cc1a7cbf13480887504347fbd3030 Mon Sep 17 00:00:00 2001 From: Mikhail Chechnev Date: Sat, 4 May 2024 15:23:27 +0300 Subject: [PATCH 25/76] =?UTF-8?q?WEB=20APP:=20=D0=9F=D1=80=D0=B8=D0=BC?= =?UTF-8?q?=D0=B5=D1=80=D1=8B=20=D0=B4=D0=BB=D1=8F=20=D1=80=D0=B0=D0=B7?= =?UTF-8?q?=D1=80=D0=B0=D0=B1=D0=BE=D1=82=D1=87=D0=B8=D0=BA=D0=BE=D0=B2=20?= =?UTF-8?q?-=20=D0=BF=D1=80=D0=B8=D0=BC=D0=B5=D1=80=20=D1=82=D0=B0=D0=B1?= =?UTF-8?q?=D0=BB=D0=B8=D1=86=D1=8B=20=D0=B4=D0=B0=D0=BD=D0=BD=D1=8B=D1=85?= =?UTF-8?q?=20=D0=B4=D0=BE=D0=BF=D0=BE=D0=BB=D0=BD=D0=B5=D0=BD=20=D1=84?= =?UTF-8?q?=D0=B8=D0=BA=D1=81=D0=B8=D1=80=D0=BE=D0=B2=D0=B0=D0=BD=D0=BD?= =?UTF-8?q?=D1=8B=D0=BC=D0=B8=20=D0=BA=D0=BE=D0=BB=D0=BE=D0=BD=D0=BA=D0=B0?= =?UTF-8?q?=D0=BC=D0=B8=20=D0=B8=20=D0=B7=D0=B0=D0=B3=D0=BE=D0=BB=D0=BE?= =?UTF-8?q?=D0=B2=D0=BA=D0=BE=D0=BC,=20=D1=80=D0=B0=D0=B7=D0=B2=D0=BE?= =?UTF-8?q?=D1=80=D0=B0=D1=87=D0=B8=D0=B2=D0=B0=D1=8E=D1=89=D0=B5=D0=B9?= =?UTF-8?q?=D1=81=D1=8F=20=D0=BE=D0=B1=D0=BB=D0=B0=D1=81=D1=82=D1=8C=D1=8E?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/panels/samples/data_grid.js | 27 +++++++++++++++++++++++---- 1 file changed, 23 insertions(+), 4 deletions(-) diff --git a/app/panels/samples/data_grid.js b/app/panels/samples/data_grid.js index 8041cb7..c5b9bc3 100644 --- a/app/panels/samples/data_grid.js +++ b/app/panels/samples/data_grid.js @@ -9,11 +9,12 @@ import React, { useState, useContext, useCallback, useEffect } from "react"; //Классы React import PropTypes from "prop-types"; //Контроль свойств компонента -import { Typography, Grid, Stack, Icon, Box } from "@mui/material"; //Интерфейсные элементы +import { Typography, Grid, Stack, Icon, Box, Button } from "@mui/material"; //Интерфейсные элементы import { object2Base64XML } from "../../core/utils"; //Вспомогательные процедуры и функции import { P8PDataGrid, P8P_DATA_GRID_SIZE } from "../../components/p8p_data_grid"; //Таблица данных import { P8P_DATA_GRID_CONFIG_PROPS } from "../../config_wrapper"; //Подключение компонентов к настройкам приложения import { BackEndСtx } from "../../context/backend"; //Контекст взаимодействия с сервером +import { ApplicationСtx } from "../../context/application"; //Контекст приложения //--------- //Константы @@ -25,7 +26,8 @@ const DATA_GRID_PAGE_SIZE = 5; //Стили const STYLES = { CONTAINER: { textAlign: "center", paddingTop: "20px" }, - TITLE: { paddingBottom: "15px" } + TITLE: { paddingBottom: "15px" }, + DATA_GRID_CONTAINER: { maxWidth: 700, maxHeight: 500, minHeight: 500 } }; //--------------------------------------------- @@ -93,12 +95,17 @@ const DataGrid = ({ title }) => { rows: [], reload: true, pageNumber: 1, - morePages: true + morePages: true, + fixedHeader: false, + fixedColumns: 0 }); //Подключение к контексту взаимодействия с сервером const { executeStored, SERV_DATA_TYPE_CLOB } = useContext(BackEndСtx); + //Подключение к контексту приложения + const { pOnlineShowDocument } = useContext(ApplicationСtx); + //Загрузка данных таблицы с сервера const loadData = useCallback(async () => { if (dataGrid.reload) { @@ -115,6 +122,8 @@ const DataGrid = ({ title }) => { }); setdataGrid(pv => ({ ...pv, + fixedHeader: data.XDATA_GRID.fixedHeader, + fixedColumns: data.XDATA_GRID.fixedColumns, columnsDef: data.XCOLUMNS_DEF ? [...data.XCOLUMNS_DEF] : pv.columnsDef, rows: pv.pageNumber == 1 ? [...(data.XROWS || [])] : [...pv.rows, ...(data.XROWS || [])], groups: data.XGROUPS @@ -138,6 +147,9 @@ const DataGrid = ({ title }) => { //При изменении количества отображаемых страниц const handlePagesCountChanged = () => setdataGrid(pv => ({ ...pv, pageNumber: pv.pageNumber + 1, reload: true })); + //При нажатии на копку контрагента + const handleAgnButtonClicked = agnCode => pOnlineShowDocument({ unitCode: "AGNLIST", document: agnCode, inRnParameter: "in_AGNABBR" }); + //При необходимости обновить данные таблицы useEffect(() => { loadData(); @@ -151,14 +163,17 @@ const DataGrid = ({ title }) => { - + {dataGrid.dataLoaded ? ( { onOrderChanged={handleOrderChanged} onFilterChanged={handleFilterChanged} onPagesCountChanged={handlePagesCountChanged} + expandable={true} + rowExpandRender={({ row }) => ( + + )} /> ) : null} From 2aa3d515e5714f4d321a56bcfa8ec94c3d7bd0f8 Mon Sep 17 00:00:00 2001 From: Mikhail Chechnev Date: Sat, 4 May 2024 15:23:52 +0300 Subject: [PATCH 26/76] =?UTF-8?q?WEB=20APP:=20=D0=A1=D0=B2=D0=B5=D0=B6?= =?UTF-8?q?=D0=B0=D1=8F=20=D1=81=D0=B1=D0=BE=D1=80=D0=BA=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- dist/p8-panels.js | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/dist/p8-panels.js b/dist/p8-panels.js index 7fa2530..c94a160 100644 --- a/dist/p8-panels.js +++ b/dist/p8-panels.js @@ -3304,7 +3304,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ P8PDataGrid: () => (/* binding */ P8PDataGrid),\n/* harmony export */ P8P_DATA_GRID_DATA_TYPE: () => (/* binding */ P8P_DATA_GRID_DATA_TYPE),\n/* harmony export */ P8P_DATA_GRID_FILTER_SHAPE: () => (/* binding */ P8P_DATA_GRID_FILTER_SHAPE),\n/* harmony export */ P8P_DATA_GRID_SIZE: () => (/* binding */ P8P_DATA_GRID_SIZE)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! prop-types */ \"./node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var _p8p_table__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./p8p_table */ \"./app/components/p8p_table.js\");\n/*\r\n Парус 8 - Панели мониторинга\r\n Компонент: Таблица данных\r\n*/\n\n//---------------------\n//Подключение библиотек\n//---------------------\n\n //Классы React\n //Контроль свойств компонента\n //Таблица\n\n//---------\n//Константы\n//---------\n\n//Размеры отступов\nconst P8P_DATA_GRID_SIZE = _p8p_table__WEBPACK_IMPORTED_MODULE_1__.P8P_TABLE_SIZE;\n\n//Типы данных\nconst P8P_DATA_GRID_DATA_TYPE = _p8p_table__WEBPACK_IMPORTED_MODULE_1__.P8P_TABLE_DATA_TYPE;\n\n//Формат фильтра\nconst P8P_DATA_GRID_FILTER_SHAPE = _p8p_table__WEBPACK_IMPORTED_MODULE_1__.P8P_TABLE_FILTER_SHAPE;\n\n//-----------\n//Тело модуля\n//-----------\n\n//Таблица данных\nconst P8PDataGrid = ({\n columnsDef,\n filtersInitial,\n groups,\n rows,\n size,\n morePages = false,\n reloading,\n expandable,\n orderAscMenuItemCaption,\n orderDescMenuItemCaption,\n filterMenuItemCaption,\n valueFilterCaption,\n valueFromFilterCaption,\n valueToFilterCaption,\n okFilterBtnCaption,\n clearFilterBtnCaption,\n cancelFilterBtnCaption,\n morePagesBtnCaption,\n noDataFoundText,\n headCellRender,\n dataCellRender,\n groupCellRender,\n rowExpandRender,\n valueFormatter,\n containerComponent,\n containerComponentProps,\n onOrderChanged,\n onFilterChanged,\n onPagesCountChanged,\n objectsCopier\n}) => {\n //Собственное состояние - сортировки\n const [orders, setOrders] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)([]);\n\n //Собственное состояние - фильтры\n const [filters, setFilters] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(filtersInitial || []);\n\n //При изменении состояния сортировки\n const handleOrderChanged = ({\n columnName,\n direction\n }) => {\n let newOrders = objectsCopier(orders);\n const curOrder = newOrders.find(o => o.name == columnName);\n if (direction == null && curOrder) newOrders.splice(newOrders.indexOf(curOrder), 1);\n if (direction != null && !curOrder) newOrders.push({\n name: columnName,\n direction\n });\n if (direction != null && curOrder) curOrder.direction = direction;\n setOrders(newOrders);\n if (onOrderChanged) onOrderChanged({\n orders: newOrders\n });\n };\n\n //При изменении состояния фильтра\n const handleFilterChanged = ({\n columnName,\n from,\n to\n }) => {\n let newFilters = objectsCopier(filters);\n let curFilter = newFilters.find(f => f.name == columnName);\n if (from == null && to == null && curFilter) newFilters.splice(newFilters.indexOf(curFilter), 1);\n if ((from != null || to != null) && !curFilter) newFilters.push({\n name: columnName,\n from,\n to\n });\n if ((from != null || to != null) && curFilter) {\n curFilter.from = from;\n curFilter.to = to;\n }\n setFilters(newFilters);\n if (onFilterChanged) onFilterChanged({\n filters: newFilters\n });\n };\n\n //При изменении количества отображаемых страниц\n const handlePagesCountChanged = () => {\n if (onPagesCountChanged) onPagesCountChanged();\n };\n\n //При изменении списка установленных извне фильтров\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n setFilters(filtersInitial || []);\n }, [filtersInitial]);\n\n //Генерация содержимого\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_p8p_table__WEBPACK_IMPORTED_MODULE_1__.P8PTable, {\n columnsDef: columnsDef,\n groups: groups,\n rows: rows,\n orders: orders,\n filters: filters,\n size: size || P8P_DATA_GRID_SIZE.MEDIUM,\n morePages: morePages,\n reloading: reloading,\n expandable: expandable,\n orderAscMenuItemCaption: orderAscMenuItemCaption,\n orderDescMenuItemCaption: orderDescMenuItemCaption,\n filterMenuItemCaption: filterMenuItemCaption,\n valueFilterCaption: valueFilterCaption,\n valueFromFilterCaption: valueFromFilterCaption,\n valueToFilterCaption: valueToFilterCaption,\n okFilterBtnCaption: okFilterBtnCaption,\n clearFilterBtnCaption: clearFilterBtnCaption,\n cancelFilterBtnCaption: cancelFilterBtnCaption,\n morePagesBtnCaption: morePagesBtnCaption,\n noDataFoundText: noDataFoundText,\n headCellRender: headCellRender,\n dataCellRender: dataCellRender,\n groupCellRender: groupCellRender,\n rowExpandRender: rowExpandRender,\n valueFormatter: valueFormatter,\n objectsCopier: objectsCopier,\n containerComponent: containerComponent,\n containerComponentProps: containerComponentProps,\n onOrderChanged: handleOrderChanged,\n onFilterChanged: handleFilterChanged,\n onPagesCountChanged: handlePagesCountChanged\n });\n};\n\n//Контроль свойств - Таблица данных\nP8PDataGrid.propTypes = {\n columnsDef: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().array).isRequired,\n filtersInitial: prop_types__WEBPACK_IMPORTED_MODULE_2___default().arrayOf(P8P_DATA_GRID_FILTER_SHAPE),\n groups: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().array),\n rows: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().array).isRequired,\n size: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().string),\n morePages: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().bool),\n reloading: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().bool).isRequired,\n expandable: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().bool),\n orderAscMenuItemCaption: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().string).isRequired,\n orderDescMenuItemCaption: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().string).isRequired,\n filterMenuItemCaption: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().string).isRequired,\n valueFilterCaption: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().string).isRequired,\n valueFromFilterCaption: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().string).isRequired,\n valueToFilterCaption: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().string).isRequired,\n okFilterBtnCaption: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().string).isRequired,\n clearFilterBtnCaption: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().string).isRequired,\n cancelFilterBtnCaption: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().string).isRequired,\n morePagesBtnCaption: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().string).isRequired,\n noDataFoundText: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().string),\n headCellRender: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().func),\n dataCellRender: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().func),\n groupCellRender: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().func),\n rowExpandRender: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().func),\n valueFormatter: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().func),\n containerComponent: prop_types__WEBPACK_IMPORTED_MODULE_2___default().oneOfType([(prop_types__WEBPACK_IMPORTED_MODULE_2___default().elementType), (prop_types__WEBPACK_IMPORTED_MODULE_2___default().string)]),\n containerComponentProps: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().object),\n onOrderChanged: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().func),\n onFilterChanged: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().func),\n onPagesCountChanged: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().func),\n objectsCopier: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().func).isRequired\n};\n\n//----------------\n//Интерфейс модуля\n//----------------\n\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/components/p8p_data_grid.js?"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ P8PDataGrid: () => (/* binding */ P8PDataGrid),\n/* harmony export */ P8P_DATA_GRID_DATA_TYPE: () => (/* binding */ P8P_DATA_GRID_DATA_TYPE),\n/* harmony export */ P8P_DATA_GRID_FILTER_SHAPE: () => (/* binding */ P8P_DATA_GRID_FILTER_SHAPE),\n/* harmony export */ P8P_DATA_GRID_SIZE: () => (/* binding */ P8P_DATA_GRID_SIZE)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! prop-types */ \"./node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var _p8p_table__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./p8p_table */ \"./app/components/p8p_table.js\");\n/*\r\n Парус 8 - Панели мониторинга\r\n Компонент: Таблица данных\r\n*/\n\n//---------------------\n//Подключение библиотек\n//---------------------\n\n //Классы React\n //Контроль свойств компонента\n //Таблица\n\n//---------\n//Константы\n//---------\n\n//Размеры отступов\nconst P8P_DATA_GRID_SIZE = _p8p_table__WEBPACK_IMPORTED_MODULE_1__.P8P_TABLE_SIZE;\n\n//Типы данных\nconst P8P_DATA_GRID_DATA_TYPE = _p8p_table__WEBPACK_IMPORTED_MODULE_1__.P8P_TABLE_DATA_TYPE;\n\n//Формат фильтра\nconst P8P_DATA_GRID_FILTER_SHAPE = _p8p_table__WEBPACK_IMPORTED_MODULE_1__.P8P_TABLE_FILTER_SHAPE;\n\n//-----------\n//Тело модуля\n//-----------\n\n//Таблица данных\nconst P8PDataGrid = ({\n columnsDef,\n filtersInitial,\n groups,\n rows,\n size,\n fixedHeader = false,\n fixedColumns = 0,\n morePages = false,\n reloading,\n expandable,\n orderAscMenuItemCaption,\n orderDescMenuItemCaption,\n filterMenuItemCaption,\n valueFilterCaption,\n valueFromFilterCaption,\n valueToFilterCaption,\n okFilterBtnCaption,\n clearFilterBtnCaption,\n cancelFilterBtnCaption,\n morePagesBtnCaption,\n noDataFoundText,\n headCellRender,\n dataCellRender,\n groupCellRender,\n rowExpandRender,\n valueFormatter,\n containerComponent,\n containerComponentProps,\n onOrderChanged,\n onFilterChanged,\n onPagesCountChanged,\n objectsCopier\n}) => {\n //Собственное состояние - сортировки\n const [orders, setOrders] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)([]);\n\n //Собственное состояние - фильтры\n const [filters, setFilters] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(filtersInitial || []);\n\n //При изменении состояния сортировки\n const handleOrderChanged = ({\n columnName,\n direction\n }) => {\n let newOrders = objectsCopier(orders);\n const curOrder = newOrders.find(o => o.name == columnName);\n if (direction == null && curOrder) newOrders.splice(newOrders.indexOf(curOrder), 1);\n if (direction != null && !curOrder) newOrders.push({\n name: columnName,\n direction\n });\n if (direction != null && curOrder) curOrder.direction = direction;\n setOrders(newOrders);\n if (onOrderChanged) onOrderChanged({\n orders: newOrders\n });\n };\n\n //При изменении состояния фильтра\n const handleFilterChanged = ({\n columnName,\n from,\n to\n }) => {\n let newFilters = objectsCopier(filters);\n let curFilter = newFilters.find(f => f.name == columnName);\n if (from == null && to == null && curFilter) newFilters.splice(newFilters.indexOf(curFilter), 1);\n if ((from != null || to != null) && !curFilter) newFilters.push({\n name: columnName,\n from,\n to\n });\n if ((from != null || to != null) && curFilter) {\n curFilter.from = from;\n curFilter.to = to;\n }\n setFilters(newFilters);\n if (onFilterChanged) onFilterChanged({\n filters: newFilters\n });\n };\n\n //При изменении количества отображаемых страниц\n const handlePagesCountChanged = () => {\n if (onPagesCountChanged) onPagesCountChanged();\n };\n\n //При изменении списка установленных извне фильтров\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n setFilters(filtersInitial || []);\n }, [filtersInitial]);\n\n //Генерация содержимого\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_p8p_table__WEBPACK_IMPORTED_MODULE_1__.P8PTable, {\n columnsDef: columnsDef,\n groups: groups,\n rows: rows,\n orders: orders,\n filters: filters,\n size: size || P8P_DATA_GRID_SIZE.MEDIUM,\n fixedHeader: fixedHeader,\n fixedColumns: fixedColumns,\n morePages: morePages,\n reloading: reloading,\n expandable: expandable,\n orderAscMenuItemCaption: orderAscMenuItemCaption,\n orderDescMenuItemCaption: orderDescMenuItemCaption,\n filterMenuItemCaption: filterMenuItemCaption,\n valueFilterCaption: valueFilterCaption,\n valueFromFilterCaption: valueFromFilterCaption,\n valueToFilterCaption: valueToFilterCaption,\n okFilterBtnCaption: okFilterBtnCaption,\n clearFilterBtnCaption: clearFilterBtnCaption,\n cancelFilterBtnCaption: cancelFilterBtnCaption,\n morePagesBtnCaption: morePagesBtnCaption,\n noDataFoundText: noDataFoundText,\n headCellRender: headCellRender,\n dataCellRender: dataCellRender,\n groupCellRender: groupCellRender,\n rowExpandRender: rowExpandRender,\n valueFormatter: valueFormatter,\n objectsCopier: objectsCopier,\n containerComponent: containerComponent,\n containerComponentProps: containerComponentProps,\n onOrderChanged: handleOrderChanged,\n onFilterChanged: handleFilterChanged,\n onPagesCountChanged: handlePagesCountChanged\n });\n};\n\n//Контроль свойств - Таблица данных\nP8PDataGrid.propTypes = {\n columnsDef: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().array).isRequired,\n filtersInitial: prop_types__WEBPACK_IMPORTED_MODULE_2___default().arrayOf(P8P_DATA_GRID_FILTER_SHAPE),\n groups: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().array),\n rows: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().array).isRequired,\n size: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().string),\n fixedHeader: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().bool),\n fixedColumns: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().number),\n morePages: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().bool),\n reloading: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().bool).isRequired,\n expandable: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().bool),\n orderAscMenuItemCaption: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().string).isRequired,\n orderDescMenuItemCaption: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().string).isRequired,\n filterMenuItemCaption: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().string).isRequired,\n valueFilterCaption: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().string).isRequired,\n valueFromFilterCaption: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().string).isRequired,\n valueToFilterCaption: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().string).isRequired,\n okFilterBtnCaption: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().string).isRequired,\n clearFilterBtnCaption: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().string).isRequired,\n cancelFilterBtnCaption: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().string).isRequired,\n morePagesBtnCaption: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().string).isRequired,\n noDataFoundText: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().string),\n headCellRender: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().func),\n dataCellRender: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().func),\n groupCellRender: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().func),\n rowExpandRender: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().func),\n valueFormatter: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().func),\n containerComponent: prop_types__WEBPACK_IMPORTED_MODULE_2___default().oneOfType([(prop_types__WEBPACK_IMPORTED_MODULE_2___default().elementType), (prop_types__WEBPACK_IMPORTED_MODULE_2___default().string)]),\n containerComponentProps: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().object),\n onOrderChanged: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().func),\n onFilterChanged: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().func),\n onPagesCountChanged: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().func),\n objectsCopier: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().func).isRequired\n};\n\n//----------------\n//Интерфейс модуля\n//----------------\n\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/components/p8p_data_grid.js?"); /***/ }), @@ -3348,7 +3348,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ P8PTable: () => (/* binding */ P8PTable),\n/* harmony export */ P8P_TABLE_DATA_TYPE: () => (/* binding */ P8P_TABLE_DATA_TYPE),\n/* harmony export */ P8P_TABLE_FILTER_SHAPE: () => (/* binding */ P8P_TABLE_FILTER_SHAPE),\n/* harmony export */ P8P_TABLE_SIZE: () => (/* binding */ P8P_TABLE_SIZE)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! prop-types */ \"./node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/IconButton/IconButton.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Icon/Icon.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/MenuItem/MenuItem.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Divider/Divider.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Menu/Menu.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Dialog/Dialog.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/DialogTitle/DialogTitle.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/DialogContent/DialogContent.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/DialogActions/DialogActions.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Button/Button.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/TextField/TextField.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Stack/Stack.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Chip/Chip.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/TableCell/TableCell.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/TableContainer/TableContainer.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Paper/Paper.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Table/Table.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/TableHead/TableHead.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_22__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/TableRow/TableRow.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_23__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Link/Link.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_24__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/TableBody/TableBody.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_25__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Container/Container.js\");\n/* harmony import */ var _p8p_app_message__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./p8p_app_message */ \"./app/components/p8p_app_message.js\");\n/* harmony import */ var _p8p_table_reducer__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./p8p_table_reducer */ \"./app/components/p8p_table_reducer.js\");\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n/*\r\n Парус 8 - Панели мониторинга\r\n Компонент: Таблица\r\n*/\n\n//---------------------\n//Подключение библиотек\n//---------------------\n\n //Классы React\n //Контроль свойств компонента\n //Интерфейсные компоненты\n //Встраиваемое сообщение об ошибке\n //Редьюсер состояния\n\n//---------\n//Константы\n//---------\n\n//Размеры отступов\nconst P8P_TABLE_SIZE = {\n SMALL: \"small\",\n MEDIUM: \"medium\"\n};\n\n//Типы данных\nconst P8P_TABLE_DATA_TYPE = {\n STR: \"STR\",\n NUMB: \"NUMB\",\n DATE: \"DATE\"\n};\n\n//Направления сортировки\nconst P8P_TABLE_COLUMN_ORDER_DIRECTIONS = {\n ASC: \"ASC\",\n DESC: \"DESC\"\n};\n\n//Действия панели инструментов столбца\nconst P8P_TABLE_COLUMN_TOOL_BAR_ACTIONS = {\n ORDER_TOGGLE: \"ORDER_TOGGLE\",\n FILTER_TOGGLE: \"FILTER_TOGGLE\",\n EXPAND_TOGGLE: \"EXPAND_TOGGLE\"\n};\n\n//Действия меню столбца\nconst P8P_TABLE_COLUMN_MENU_ACTIONS = {\n ORDER_ASC: \"ORDER_ASC\",\n ORDER_DESC: \"ORDER_DESC\",\n FILTER: \"FILTER\"\n};\n\n//Структура элемента описания фильтра\nconst P8P_TABLE_FILTER_SHAPE = prop_types__WEBPACK_IMPORTED_MODULE_3___default().shape({\n name: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().string).isRequired,\n from: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().any),\n to: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().any)\n});\n\n//Стили\nconst STYLES = {\n TABLE: {\n with: \"100%\"\n },\n TABLE_ROW: {\n \"&:last-child td, &:last-child th\": {\n border: 0\n }\n },\n TABLE_CELL_EXPAND_CONTAINER: {\n paddingBottom: 0,\n paddingTop: 0\n },\n TABLE_CELL_GROUP_HEADER: {\n backgroundColor: \"lightgray\"\n },\n TABLE_COLUMN_STACK: {\n alignItems: \"center\"\n },\n TABLE_COLUMN_MENU_ITEM_ICON: {\n paddingRight: \"10px\"\n },\n FILTER_CHIP: {\n alignItems: \"center\"\n },\n MORE_BUTTON_CONTAINER: {\n with: \"100%\",\n textAlign: \"center\",\n padding: \"5px\"\n }\n};\n\n//--------------------------------\n//Вспомогательные классы и функции\n//--------------------------------\n\n//Панель инструментов столбца (левая)\nconst P8PTableColumnToolBarLeft = ({\n columnDef,\n onItemClick\n}) => {\n //Кнопка развёртывания/свёртывания\n let expButton = null;\n if (columnDef.expandable) expButton = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n onClick: () => onItemClick ? onItemClick(P8P_TABLE_COLUMN_TOOL_BAR_ACTIONS.EXPAND_TOGGLE, columnDef.name) : null\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_5__[\"default\"], null, columnDef.expanded ? \"indeterminate_check_box\" : \"add_box\"));\n\n //Генерация содержимого\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), null, expButton);\n};\n\n//Контроль свойств - Панель инструментов столбца (левая)\nP8PTableColumnToolBarLeft.propTypes = {\n columnDef: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().object).isRequired,\n onItemClick: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().func)\n};\n\n//Панель инструментов столбца (правая)\nconst P8PTableColumnToolBarRight = ({\n columnDef,\n orders,\n filters,\n onItemClick\n}) => {\n //Кнопка сортировки\n const order = orders.find(o => o.name == columnDef.name);\n let orderButton = null;\n if (order) orderButton = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n onClick: () => onItemClick ? onItemClick(P8P_TABLE_COLUMN_TOOL_BAR_ACTIONS.ORDER_TOGGLE, columnDef.name) : null\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_5__[\"default\"], null, order.direction === P8P_TABLE_COLUMN_ORDER_DIRECTIONS.ASC ? \"arrow_upward\" : \"arrow_downward\"));\n\n //Кнопка фильтрации\n const filter = filters.find(f => f.name == columnDef.name);\n let filterButton = null;\n if ((0,_p8p_table_reducer__WEBPACK_IMPORTED_MODULE_2__.hasValue)(filter?.from) || (0,_p8p_table_reducer__WEBPACK_IMPORTED_MODULE_2__.hasValue)(filter?.to)) filterButton = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n onClick: () => onItemClick ? onItemClick(P8P_TABLE_COLUMN_TOOL_BAR_ACTIONS.FILTER_TOGGLE, columnDef.name) : null\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_5__[\"default\"], null, \"filter_alt\"));\n\n //Генерация содержимого\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), null, orderButton, filterButton);\n};\n\n//Контроль свойств - Панель инструментов столбца (правая)\nP8PTableColumnToolBarRight.propTypes = {\n columnDef: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().object).isRequired,\n orders: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().array).isRequired,\n filters: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().array).isRequired,\n onItemClick: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().func)\n};\n\n//Меню столбца\nconst P8PTableColumnMenu = ({\n columnDef,\n orderAscItemCaption,\n orderDescItemCaption,\n filterItemCaption,\n onItemClick\n}) => {\n //Собственное состояние\n const [anchorEl, setAnchorEl] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(null);\n\n //Флаг отображения\n const open = Boolean(anchorEl);\n\n //По нажатию на открытие меню\n const handleMenuButtonClick = event => {\n setAnchorEl(event.currentTarget);\n };\n\n //По нажатию на пункт меню\n const handleMenuItemClick = (event, index, action, columnName) => {\n if (onItemClick) onItemClick(action, columnName);\n setAnchorEl(null);\n };\n\n //При закрытии меню\n const handleMenuClose = () => {\n setAnchorEl(null);\n };\n\n //Формирование списка элементов меню в зависимости от описания колонки таблицы\n const menuItems = [];\n if (columnDef.order === true) {\n menuItems.push( /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n key: \"orderAsc\",\n onClick: (event, index) => handleMenuItemClick(event, index, P8P_TABLE_COLUMN_MENU_ACTIONS.ORDER_ASC, columnDef.name)\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_5__[\"default\"], {\n sx: STYLES.TABLE_COLUMN_MENU_ITEM_ICON\n }, \"arrow_upward\"), orderAscItemCaption));\n menuItems.push( /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n key: \"orderDesc\",\n onClick: (event, index) => handleMenuItemClick(event, index, P8P_TABLE_COLUMN_MENU_ACTIONS.ORDER_DESC, columnDef.name)\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_5__[\"default\"], {\n sx: STYLES.TABLE_COLUMN_MENU_ITEM_ICON\n }, \"arrow_downward\"), orderDescItemCaption));\n }\n if (columnDef.filter === true) {\n if (menuItems.length > 0) menuItems.push( /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_7__[\"default\"], {\n key: \"divider\",\n sx: {\n my: 0.5\n }\n }));\n menuItems.push( /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n key: \"filter\",\n onClick: (event, index) => handleMenuItemClick(event, index, P8P_TABLE_COLUMN_MENU_ACTIONS.FILTER, columnDef.name)\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_5__[\"default\"], {\n sx: STYLES.TABLE_COLUMN_MENU_ITEM_ICON\n }, \"filter_alt\"), filterItemCaption));\n }\n\n //Генерация содержимого\n return menuItems.length > 0 ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n id: `${columnDef.name}_menu_button`,\n \"aria-haspopup\": \"true\",\n onClick: handleMenuButtonClick\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_5__[\"default\"], null, \"more_vert\")), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_8__[\"default\"], {\n id: `${columnDef.name}_menu`,\n anchorEl: anchorEl,\n open: open,\n onClose: handleMenuClose\n }, menuItems)) : null;\n};\n\n//Контроль свойств - Меню столбца\nP8PTableColumnMenu.propTypes = {\n columnDef: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().object).isRequired,\n orderAscItemCaption: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().string).isRequired,\n orderDescItemCaption: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().string).isRequired,\n filterItemCaption: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().string).isRequired,\n onItemClick: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().func)\n};\n\n//Диалог подсказки\nconst P8PTableColumnHintDialog = ({\n columnDef,\n okBtnCaption,\n onOk\n}) => {\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_9__[\"default\"], {\n open: true,\n \"aria-labelledby\": \"filter-dialog-title\",\n \"aria-describedby\": \"filter-dialog-description\",\n onClose: () => onOk ? onOk() : null\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_10__[\"default\"], {\n id: \"filter-dialog-title\"\n }, columnDef.caption), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_11__[\"default\"], null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n dangerouslySetInnerHTML: {\n __html: columnDef.hint\n }\n })), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_12__[\"default\"], null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_13__[\"default\"], {\n onClick: () => onOk ? onOk() : null\n }, okBtnCaption)));\n};\n\n//Контроль свойств - Диалог подсказки\nP8PTableColumnHintDialog.propTypes = {\n columnDef: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().object).isRequired,\n okBtnCaption: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().string).isRequired,\n onOk: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().func)\n};\n\n//Диалог фильтра\nconst P8PTableColumnFilterDialog = ({\n columnDef,\n from,\n to,\n valueCaption,\n valueFromCaption,\n valueToCaption,\n okBtnCaption,\n clearBtnCaption,\n cancelBtnCaption,\n valueFormatter,\n onOk,\n onClear,\n onCancel\n}) => {\n //Собственное состояние - значения с-по\n const [filterValues, setFilterValues] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({\n from,\n to\n });\n\n //Отработка воода значения в фильтр\n const handleFilterTextFieldChanged = e => {\n setFilterValues(prev => ({\n ...prev,\n [e.target.name]: e.target.value\n }));\n };\n\n //Элементы ввода значений фильтра\n let inputs = null;\n if (Array.isArray(columnDef.values) && columnDef.values.length > 0) {\n inputs = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_14__[\"default\"], {\n name: \"from\",\n fullWidth: true,\n select: true,\n label: valueCaption,\n variant: \"standard\",\n value: filterValues.from,\n onChange: handleFilterTextFieldChanged\n }, columnDef.values.map((v, i) => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n key: i,\n value: v\n }, valueFormatter ? valueFormatter({\n value: v,\n columnDef\n }) : v)));\n } else {\n switch (columnDef.dataType) {\n case P8P_TABLE_DATA_TYPE.STR:\n {\n inputs = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_14__[\"default\"], {\n name: \"from\",\n fullWidth: true,\n InputLabelProps: {\n shrink: true\n },\n value: filterValues.from,\n onChange: handleFilterTextFieldChanged,\n label: valueCaption,\n variant: \"standard\"\n });\n break;\n }\n case P8P_TABLE_DATA_TYPE.NUMB:\n case P8P_TABLE_DATA_TYPE.DATE:\n {\n inputs = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_14__[\"default\"], {\n name: \"from\",\n InputLabelProps: {\n shrink: true\n },\n type: columnDef.dataType == P8P_TABLE_DATA_TYPE.NUMB ? \"number\" : \"date\",\n value: filterValues.from,\n onChange: handleFilterTextFieldChanged,\n label: valueFromCaption,\n variant: \"standard\"\n }), \"\\xA0\", /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_14__[\"default\"], {\n name: \"to\",\n InputLabelProps: {\n shrink: true\n },\n type: columnDef.dataType == P8P_TABLE_DATA_TYPE.NUMB ? \"number\" : \"date\",\n value: filterValues.to,\n onChange: handleFilterTextFieldChanged,\n label: valueToCaption,\n variant: \"standard\"\n }));\n break;\n }\n }\n }\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_9__[\"default\"], {\n open: true,\n \"aria-labelledby\": \"filter-dialog-title\",\n \"aria-describedby\": \"filter-dialog-description\",\n onClose: () => onCancel ? onCancel(columnDef.name) : null\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_10__[\"default\"], {\n id: \"filter-dialog-title\"\n }, columnDef.caption), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_11__[\"default\"], null, inputs), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_12__[\"default\"], null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_13__[\"default\"], {\n onClick: () => onOk ? onOk(columnDef.name, filterValues.from, filterValues.to) : null\n }, okBtnCaption), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_13__[\"default\"], {\n onClick: () => onClear ? onClear(columnDef.name) : null,\n variant: \"secondary\"\n }, clearBtnCaption), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_13__[\"default\"], {\n onClick: () => onCancel ? onCancel(columnDef.name) : null\n }, cancelBtnCaption)));\n};\n\n//Контроль свойств - Диалог фильтра\nP8PTableColumnFilterDialog.propTypes = {\n columnDef: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().object).isRequired,\n from: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().any),\n to: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().any),\n valueCaption: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().string).isRequired,\n valueFromCaption: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().string).isRequired,\n valueToCaption: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().string).isRequired,\n okBtnCaption: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().string).isRequired,\n clearBtnCaption: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().string).isRequired,\n cancelBtnCaption: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().string).isRequired,\n valueFormatter: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().func),\n onOk: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().func),\n onClear: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().func),\n onCancel: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().func)\n};\n\n//Сводный фильтр\nconst P8PTableFiltersChips = ({\n filters,\n columnsDef,\n valueFromCaption,\n valueToCaption,\n onFilterChipClick,\n onFilterChipDelete,\n valueFormatter\n}) => {\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_15__[\"default\"], {\n direction: \"row\",\n spacing: 1,\n pb: 2\n }, filters.map((filter, i) => {\n const columnDef = columnsDef.find(columnDef => columnDef.name == filter.name);\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_16__[\"default\"], {\n key: i,\n label: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_15__[\"default\"], {\n direction: \"row\",\n sx: STYLES.FILTER_CHIP\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"strong\", null, columnDef.caption), \":\\xA0\", (0,_p8p_table_reducer__WEBPACK_IMPORTED_MODULE_2__.hasValue)(filter.from) && !columnDef.values && columnDef.dataType != P8P_TABLE_DATA_TYPE.STR ? `${valueFromCaption.toLowerCase()} ` : null, (0,_p8p_table_reducer__WEBPACK_IMPORTED_MODULE_2__.hasValue)(filter.from) ? valueFormatter ? valueFormatter({\n value: filter.from,\n columnDef\n }) : filter.from : null, (0,_p8p_table_reducer__WEBPACK_IMPORTED_MODULE_2__.hasValue)(filter.to) && !columnDef.values && columnDef.dataType != P8P_TABLE_DATA_TYPE.STR ? ` ${valueToCaption.toLowerCase()} ` : null, (0,_p8p_table_reducer__WEBPACK_IMPORTED_MODULE_2__.hasValue)(filter.to) ? valueFormatter ? valueFormatter({\n value: filter.to,\n columnDef\n }) : filter.to : null),\n variant: \"outlined\",\n onClick: () => onFilterChipClick ? onFilterChipClick(columnDef.name) : null,\n onDelete: () => onFilterChipDelete ? onFilterChipDelete(columnDef.name) : null\n });\n }));\n};\n\n//Контроль свойств - Сводный фильтр\nP8PTableFiltersChips.propTypes = {\n filters: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().array).isRequired,\n columnsDef: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().array).isRequired,\n valueFromCaption: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().string).isRequired,\n valueToCaption: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().string).isRequired,\n onFilterChipClick: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().func),\n onFilterChipDelete: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().func),\n valueFormatter: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().func)\n};\n\n//-----------\n//Тело модуля\n//-----------\n\n//Таблица\nconst P8PTable = ({\n columnsDef,\n groups,\n rows,\n orders,\n filters,\n size,\n morePages = false,\n reloading,\n expandable,\n orderAscMenuItemCaption,\n orderDescMenuItemCaption,\n filterMenuItemCaption,\n valueFilterCaption,\n valueFromFilterCaption,\n valueToFilterCaption,\n okFilterBtnCaption,\n clearFilterBtnCaption,\n cancelFilterBtnCaption,\n morePagesBtnCaption,\n noDataFoundText,\n headCellRender,\n dataCellRender,\n groupCellRender,\n rowExpandRender,\n valueFormatter,\n onOrderChanged,\n onFilterChanged,\n onPagesCountChanged,\n objectsCopier,\n containerComponent,\n containerComponentProps\n}) => {\n //Собственное состояние - описание заголовка\n const [header, dispatchHeaderAction] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useReducer)(_p8p_table_reducer__WEBPACK_IMPORTED_MODULE_2__.p8pTableReducer, (0,_p8p_table_reducer__WEBPACK_IMPORTED_MODULE_2__.HEADER_INITIAL_STATE)());\n\n //Собственное состояние - фильтруемая колонка\n const [filterColumn, setFilterColumn] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(null);\n\n //Собственное состояние - развёрнутые строки\n const [expanded, setExpanded] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({});\n\n //Собственное состояния - развёрнутые группы\n const [expandedGroups, setExpandedGroups] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({});\n\n //Собственное состояние - колонка с отображаемой подсказкой\n const [displayHintColumn, setDisplayHintColumn] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(null);\n\n //Описание фильтруемой колонки\n const filterColumnDef = filterColumn ? columnsDef.find(columnDef => columnDef.name == filterColumn) || null : null;\n\n //Описание колонки с отображаемой подсказкой\n const displayHintColumnDef = displayHintColumn ? columnsDef.find(columnDef => columnDef.name == displayHintColumn) || null : null;\n\n //Значения фильтра фильтруемой колонки\n const [filterColumnFrom, filterColumnTo] = filterColumn ? (() => {\n const filter = filters.find(filter => filter.name == filterColumn);\n return filter ? [filter.from == null ? \"\" : filter.from, filter.to == null ? \"\" : filter.to] : [\"\", \"\"];\n })() : [\"\", \"\"];\n\n //Формирование заголовка таблицы\n const setHeader = ({\n columnsDef,\n expandable,\n objectsCopier\n }) => dispatchHeaderAction({\n type: _p8p_table_reducer__WEBPACK_IMPORTED_MODULE_2__.P8P_TABLE_AT.SET_HEADER,\n payload: {\n columnsDef,\n expandable,\n objectsCopier\n }\n });\n\n //Сворачивание/разворачивание уровня заголовка таблицы\n const toggleHeaderExpand = ({\n columnName,\n objectsCopier\n }) => dispatchHeaderAction({\n type: _p8p_table_reducer__WEBPACK_IMPORTED_MODULE_2__.P8P_TABLE_AT.TOGGLE_HEADER_EXPAND,\n payload: {\n columnName,\n expandable,\n objectsCopier\n }\n });\n\n //Выравнивание в зависимости от типа данных\n const getAlignByDataType = ({\n dataType,\n hasChild\n }) => dataType === P8P_TABLE_DATA_TYPE.DATE || hasChild ? \"center\" : dataType === P8P_TABLE_DATA_TYPE.NUMB ? \"right\" : \"left\";\n\n //Упорядочение содержимого в зависимости от типа данных\n const getJustifyContentByDataType = ({\n dataType,\n hasChild\n }) => dataType === P8P_TABLE_DATA_TYPE.DATE || hasChild ? \"center\" : dataType === P8P_TABLE_DATA_TYPE.NUMB ? \"flex-end\" : \"flex-start\";\n\n //Отработка нажатия на элемент пункта меню\n const handleToolBarItemClick = (action, columnName) => {\n switch (action) {\n case P8P_TABLE_COLUMN_TOOL_BAR_ACTIONS.ORDER_TOGGLE:\n {\n const colOrder = orders.find(o => o.name == columnName);\n const newDirection = colOrder?.direction == P8P_TABLE_COLUMN_ORDER_DIRECTIONS.ASC ? P8P_TABLE_COLUMN_ORDER_DIRECTIONS.DESC : colOrder?.direction == P8P_TABLE_COLUMN_ORDER_DIRECTIONS.DESC ? null : P8P_TABLE_COLUMN_ORDER_DIRECTIONS.ASC;\n if (onOrderChanged) onOrderChanged({\n columnName,\n direction: newDirection\n });\n break;\n }\n case P8P_TABLE_COLUMN_TOOL_BAR_ACTIONS.FILTER_TOGGLE:\n setFilterColumn(columnName);\n break;\n case P8P_TABLE_COLUMN_TOOL_BAR_ACTIONS.EXPAND_TOGGLE:\n toggleHeaderExpand({\n columnName,\n objectsCopier\n });\n break;\n }\n };\n\n //Отработка нажатия на пункты меню\n const handleMenuItemClick = (action, columnName) => {\n switch (action) {\n case P8P_TABLE_COLUMN_MENU_ACTIONS.ORDER_ASC:\n onOrderChanged({\n columnName,\n direction: P8P_TABLE_COLUMN_ORDER_DIRECTIONS.ASC\n });\n break;\n case P8P_TABLE_COLUMN_MENU_ACTIONS.ORDER_DESC:\n onOrderChanged({\n columnName,\n direction: P8P_TABLE_COLUMN_ORDER_DIRECTIONS.DESC\n });\n break;\n case P8P_TABLE_COLUMN_MENU_ACTIONS.FILTER:\n setFilterColumn(columnName);\n break;\n }\n };\n\n //Отработка ввода значения фильтра колонки\n const handleFilterOk = (columnName, from, to) => {\n if (onFilterChanged) onFilterChanged({\n columnName,\n from: from === \"\" ? null : from,\n to: to === \"\" ? null : to\n });\n setFilterColumn(null);\n };\n\n //Отработка очистки значения фильтра колонки\n const handleFilterClear = columnName => {\n if (onFilterChanged) onFilterChanged({\n columnName,\n from: null,\n to: null\n });\n setFilterColumn(null);\n };\n\n //Отработка отмены ввода значения фильтра колонки\n const handleFilterCancel = () => {\n setFilterColumn(null);\n };\n\n //Отработка нажатия на элемент сводного фильтра\n const handleFilterChipClick = columnName => setFilterColumn(columnName);\n\n //Отработка удаления элемента сводного фильтра\n const handleFilterChipDelete = columnName => onFilterChanged ? onFilterChanged({\n columnName,\n from: null,\n to: null\n }) : null;\n\n //Отработка нажатия на кнопку догрузки страницы\n const handleMorePagesBtnClick = () => {\n if (onPagesCountChanged) onPagesCountChanged();\n };\n\n //Отработка нажатия на элемент отображения подсказки по колонке\n const handleColumnShowHintClick = columnName => setDisplayHintColumn(columnName);\n\n //Отработка сокрытия подсказки по колонке\n const handleHintOk = () => setDisplayHintColumn(null);\n\n //Отработка нажатия на кнопку раскрытия элемента\n const handleExpandClick = rowIndex => {\n if (expanded[rowIndex] === true) setExpanded(pv => {\n let res = {\n ...pv\n };\n delete res[rowIndex];\n return res;\n });else setExpanded(pv => ({\n ...pv,\n [rowIndex]: true\n }));\n };\n\n //При перезагрузке данных\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n if (reloading) setExpanded({});\n }, [reloading]);\n\n //При изменении описания колонок\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n setHeader({\n columnsDef,\n expandable,\n objectsCopier\n });\n }, [columnsDef, expandable, objectsCopier]);\n\n //Генерация заголовка группы\n const renderGroupCell = group => {\n let customRender = {};\n if (groupCellRender) customRender = groupCellRender({\n columnsDef: header.columnsDef,\n group\n }) || {};\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_17__[\"default\"], _extends({\n colSpan: header.displayDataColumnsCount,\n sx: {\n ...STYLES.TABLE_CELL_GROUP_HEADER,\n ...customRender.cellStyle\n }\n }, customRender.cellProps), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_15__[\"default\"], {\n direction: \"row\",\n sx: STYLES.TABLE_COLUMN_STACK\n }, group.expandable ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n onClick: () => {\n setExpandedGroups(pv => ({\n ...pv,\n ...{\n [group.name]: !pv[group.name]\n }\n }));\n }\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_5__[\"default\"], null, expandedGroups[group.name] ? \"indeterminate_check_box\" : \"add_box\")) : null, customRender.data ? customRender.data : group.caption));\n };\n\n //Генерация содержимого\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), null, displayHintColumn ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(P8PTableColumnHintDialog, {\n columnDef: displayHintColumnDef,\n okBtnCaption: okFilterBtnCaption,\n onOk: handleHintOk\n }) : null, filterColumn ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(P8PTableColumnFilterDialog, {\n columnDef: filterColumnDef,\n from: filterColumnFrom,\n to: filterColumnTo,\n valueCaption: valueFilterCaption,\n valueFromCaption: valueFromFilterCaption,\n valueToCaption: valueToFilterCaption,\n okBtnCaption: okFilterBtnCaption,\n clearBtnCaption: clearFilterBtnCaption,\n cancelBtnCaption: cancelFilterBtnCaption,\n valueFormatter: valueFormatter,\n onOk: handleFilterOk,\n onClear: handleFilterClear,\n onCancel: handleFilterCancel\n }) : null, Array.isArray(filters) && filters.length > 0 ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(P8PTableFiltersChips, {\n filters: filters,\n columnsDef: columnsDef,\n valueFromCaption: valueFromFilterCaption,\n valueToCaption: valueToFilterCaption,\n onFilterChipClick: handleFilterChipClick,\n onFilterChipDelete: handleFilterChipDelete,\n valueFormatter: valueFormatter\n }) : null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_18__[\"default\"], _extends({\n component: containerComponent ? containerComponent : _mui_material__WEBPACK_IMPORTED_MODULE_19__[\"default\"]\n }, containerComponentProps ? containerComponentProps : {}), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_20__[\"default\"], {\n sx: STYLES.TABLE,\n size: size || P8P_TABLE_SIZE.MEDIUM\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_21__[\"default\"], null, header.displayLevels.map(level => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_22__[\"default\"], {\n key: level\n }, expandable && rowExpandRender ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_17__[\"default\"], {\n key: \"head-cell-expand-control\",\n align: \"center\"\n }) : null, header.displayLevelsColumns[level].map((columnDef, j) => {\n let customRender = {};\n if (headCellRender) customRender = headCellRender({\n columnDef\n }) || {};\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_17__[\"default\"], _extends({\n key: `head-cell-${j}`,\n align: getAlignByDataType(columnDef),\n sx: {\n ...customRender.cellStyle\n },\n rowSpan: columnDef.rowSpan,\n colSpan: columnDef.colSpan\n }, customRender.cellProps), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_15__[\"default\"], _extends({\n direction: \"row\",\n justifyContent: getJustifyContentByDataType(columnDef),\n sx: {\n ...STYLES.TABLE_COLUMN_STACK,\n ...customRender.stackStyle\n }\n }, customRender.stackProps), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(P8PTableColumnToolBarLeft, {\n columnDef: columnDef,\n onItemClick: handleToolBarItemClick\n }), customRender.data ? customRender.data : columnDef.hint ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_23__[\"default\"], {\n component: \"button\",\n variant: \"body2\",\n align: \"left\",\n underline: \"always\",\n onClick: () => handleColumnShowHintClick(columnDef.name)\n }, columnDef.caption) : columnDef.caption, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(P8PTableColumnToolBarRight, {\n columnDef: columnDef,\n orders: orders,\n filters: filters,\n onItemClick: handleToolBarItemClick\n }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(P8PTableColumnMenu, {\n columnDef: columnDef,\n orderAscItemCaption: orderAscMenuItemCaption,\n orderDescItemCaption: orderDescMenuItemCaption,\n filterItemCaption: filterMenuItemCaption,\n onItemClick: handleMenuItemClick\n })));\n })))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_24__[\"default\"], null, rows.length > 0 ? (Array.isArray(groups) && groups.length > 0 ? groups : [{}]).map((group, g) => {\n const rowsView = rows.map((row, i) => !group?.name || group?.name == row.groupName ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), {\n key: `data-${i}`\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_22__[\"default\"], {\n key: `data-row-${i}`,\n sx: STYLES.TABLE_ROW\n }, expandable && rowExpandRender ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_17__[\"default\"], {\n key: `data-cell-expand-control-${i}`,\n align: \"center\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n onClick: () => handleExpandClick(i)\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_5__[\"default\"], null, expanded[i] === true ? \"keyboard_arrow_down\" : \"keyboard_arrow_right\"))) : null, header.displayDataColumns.map((columnDef, j) => {\n let customRender = {};\n if (dataCellRender) customRender = dataCellRender({\n row,\n columnDef\n }) || {};\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_17__[\"default\"], _extends({\n key: `data-cell-${j}`,\n align: getAlignByDataType(columnDef),\n sx: {\n ...customRender.cellStyle\n }\n }, customRender.cellProps), customRender.data ? customRender.data : valueFormatter ? valueFormatter({\n value: row[columnDef.name],\n columnDef\n }) : row[columnDef.name]);\n })), expandable && rowExpandRender && expanded[i] === true ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_22__[\"default\"], {\n key: `data-row-expand-${i}`\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_17__[\"default\"], {\n sx: STYLES.TABLE_CELL_EXPAND_CONTAINER,\n colSpan: header.displayDataColumnsCount\n }, rowExpandRender({\n columnsDef,\n row\n }))) : null) : null);\n return !group?.name ? rowsView : /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), {\n key: `group-${g}`\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_22__[\"default\"], {\n key: `group-header-${g}`\n }, renderGroupCell(group)), !group.expandable || expandedGroups[group.name] === true ? rowsView : null);\n }) : null)), rows.length == 0 ? noDataFoundText && !reloading ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_p8p_app_message__WEBPACK_IMPORTED_MODULE_1__.P8PAppInlineError, {\n text: noDataFoundText\n }) : null : morePages ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_25__[\"default\"], {\n style: STYLES.MORE_BUTTON_CONTAINER\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_13__[\"default\"], {\n fullWidth: true,\n onClick: handleMorePagesBtnClick\n }, morePagesBtnCaption)) : null));\n};\n\n//Контроль свойств - Таблица\nP8PTable.propTypes = {\n columnsDef: prop_types__WEBPACK_IMPORTED_MODULE_3___default().arrayOf(prop_types__WEBPACK_IMPORTED_MODULE_3___default().shape({\n name: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().string).isRequired,\n caption: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().string).isRequired,\n order: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().bool).isRequired,\n filter: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().bool).isRequired,\n dataType: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().string).isRequired,\n visible: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().bool).isRequired,\n values: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().array),\n parent: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().string),\n expandable: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().bool).isRequired,\n expanded: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().bool).isRequired\n })).isRequired,\n groups: prop_types__WEBPACK_IMPORTED_MODULE_3___default().arrayOf(prop_types__WEBPACK_IMPORTED_MODULE_3___default().shape({\n name: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().string).isRequired,\n caption: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().string).isRequired,\n expandable: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().bool).isRequired,\n expanded: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().bool).isRequired\n })),\n rows: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().array).isRequired,\n orders: prop_types__WEBPACK_IMPORTED_MODULE_3___default().arrayOf(prop_types__WEBPACK_IMPORTED_MODULE_3___default().shape({\n name: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().string).isRequired,\n direction: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().string).isRequired\n })).isRequired,\n filters: prop_types__WEBPACK_IMPORTED_MODULE_3___default().arrayOf(P8P_TABLE_FILTER_SHAPE).isRequired,\n size: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().string),\n morePages: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().bool),\n reloading: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().bool).isRequired,\n expandable: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().bool),\n orderAscMenuItemCaption: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().string).isRequired,\n orderDescMenuItemCaption: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().string).isRequired,\n filterMenuItemCaption: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().string).isRequired,\n valueFilterCaption: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().string).isRequired,\n valueFromFilterCaption: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().string).isRequired,\n valueToFilterCaption: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().string).isRequired,\n okFilterBtnCaption: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().string).isRequired,\n clearFilterBtnCaption: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().string).isRequired,\n cancelFilterBtnCaption: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().string).isRequired,\n morePagesBtnCaption: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().string).isRequired,\n noDataFoundText: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().string),\n headCellRender: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().func),\n dataCellRender: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().func),\n groupCellRender: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().func),\n rowExpandRender: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().func),\n valueFormatter: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().func),\n onOrderChanged: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().func),\n onFilterChanged: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().func),\n onPagesCountChanged: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().func),\n objectsCopier: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().func).isRequired,\n containerComponent: prop_types__WEBPACK_IMPORTED_MODULE_3___default().oneOfType([(prop_types__WEBPACK_IMPORTED_MODULE_3___default().elementType), (prop_types__WEBPACK_IMPORTED_MODULE_3___default().string)]),\n containerComponentProps: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().object)\n};\n\n//----------------\n//Интерфейс модуля\n//----------------\n\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/components/p8p_table.js?"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ P8PTable: () => (/* binding */ P8PTable),\n/* harmony export */ P8P_TABLE_DATA_TYPE: () => (/* binding */ P8P_TABLE_DATA_TYPE),\n/* harmony export */ P8P_TABLE_FILTER_SHAPE: () => (/* binding */ P8P_TABLE_FILTER_SHAPE),\n/* harmony export */ P8P_TABLE_SIZE: () => (/* binding */ P8P_TABLE_SIZE)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! prop-types */ \"./node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/IconButton/IconButton.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Icon/Icon.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/MenuItem/MenuItem.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Divider/Divider.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Menu/Menu.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Dialog/Dialog.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/DialogTitle/DialogTitle.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/DialogContent/DialogContent.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/DialogActions/DialogActions.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Button/Button.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/TextField/TextField.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Stack/Stack.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Chip/Chip.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/TableCell/TableCell.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/TableContainer/TableContainer.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Paper/Paper.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Table/Table.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_22__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/TableHead/TableHead.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_23__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/TableRow/TableRow.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_24__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Link/Link.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_25__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/TableBody/TableBody.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_26__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Container/Container.js\");\n/* harmony import */ var _mui_material_styles__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! @mui/material/styles */ \"./node_modules/@mui/material/styles/useTheme.js\");\n/* harmony import */ var _p8p_app_message__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./p8p_app_message */ \"./app/components/p8p_app_message.js\");\n/* harmony import */ var _p8p_table_reducer__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./p8p_table_reducer */ \"./app/components/p8p_table_reducer.js\");\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n/*\r\n Парус 8 - Панели мониторинга\r\n Компонент: Таблица\r\n*/\n\n//---------------------\n//Подключение библиотек\n//---------------------\n\n //Классы React\n //Контроль свойств компонента\n //Интерфейсные компоненты\n //Взаимодействие со стилями MUI\n //Встраиваемое сообщение об ошибке\n //Редьюсер состояния\n\n//---------\n//Константы\n//---------\n\n//Размеры отступов\nconst P8P_TABLE_SIZE = {\n SMALL: \"small\",\n MEDIUM: \"medium\"\n};\n\n//Типы данных\nconst P8P_TABLE_DATA_TYPE = {\n STR: \"STR\",\n NUMB: \"NUMB\",\n DATE: \"DATE\"\n};\n\n//Направления сортировки\nconst P8P_TABLE_COLUMN_ORDER_DIRECTIONS = {\n ASC: \"ASC\",\n DESC: \"DESC\"\n};\n\n//Действия панели инструментов столбца\nconst P8P_TABLE_COLUMN_TOOL_BAR_ACTIONS = {\n ORDER_TOGGLE: \"ORDER_TOGGLE\",\n FILTER_TOGGLE: \"FILTER_TOGGLE\",\n EXPAND_TOGGLE: \"EXPAND_TOGGLE\"\n};\n\n//Действия меню столбца\nconst P8P_TABLE_COLUMN_MENU_ACTIONS = {\n ORDER_ASC: \"ORDER_ASC\",\n ORDER_DESC: \"ORDER_DESC\",\n FILTER: \"FILTER\"\n};\n\n//Структура элемента описания фильтра\nconst P8P_TABLE_FILTER_SHAPE = prop_types__WEBPACK_IMPORTED_MODULE_3___default().shape({\n name: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().string).isRequired,\n from: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().any),\n to: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().any)\n});\n\n//Стили\nconst STYLES = {\n TABLE: {\n with: \"100%\"\n },\n TABLE_HEAD_STICKY: {\n position: \"sticky\",\n top: 0,\n zIndex: 1000\n },\n TABLE_HEAD_CELL_STICKY: (theme, left) => ({\n position: \"sticky\",\n left,\n backgroundColor: theme.palette.background.default,\n zIndex: 1000\n }),\n TABLE_ROW: {\n \"&:last-child td, &:last-child th\": {\n border: 0\n }\n },\n TABLE_CELL_STICKY: (theme, left) => ({\n position: \"sticky\",\n left,\n backgroundColor: theme.palette.background.default,\n zIndex: 500\n }),\n TABLE_CELL_EXPAND_CONTROL: {\n minWidth: \"60px\",\n maxWidth: \"60px\"\n },\n TABLE_CELL_EXPAND_CONTAINER: {\n paddingBottom: 0,\n paddingTop: 0\n },\n TABLE_CELL_GROUP_HEADER: {\n backgroundColor: \"lightgray\"\n },\n TABLE_CELL_GROUP_HEADER_STICKY: {\n position: \"sticky\",\n left: 0\n },\n TABLE_COLUMN_STACK: {\n alignItems: \"center\"\n },\n TABLE_COLUMN_MENU_ITEM_ICON: {\n paddingRight: \"10px\"\n },\n FILTER_CHIP: {\n alignItems: \"center\"\n },\n MORE_BUTTON_CONTAINER: {\n with: \"100%\",\n textAlign: \"center\",\n padding: \"5px\"\n }\n};\n\n//--------------------------------\n//Вспомогательные классы и функции\n//--------------------------------\n\n//Панель инструментов столбца (левая)\nconst P8PTableColumnToolBarLeft = ({\n columnDef,\n onItemClick\n}) => {\n //Кнопка развёртывания/свёртывания\n let expButton = null;\n if (columnDef.expandable) expButton = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n onClick: () => onItemClick ? onItemClick(P8P_TABLE_COLUMN_TOOL_BAR_ACTIONS.EXPAND_TOGGLE, columnDef.name) : null\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_5__[\"default\"], null, columnDef.expanded ? \"indeterminate_check_box\" : \"add_box\"));\n\n //Генерация содержимого\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), null, expButton);\n};\n\n//Контроль свойств - Панель инструментов столбца (левая)\nP8PTableColumnToolBarLeft.propTypes = {\n columnDef: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().object).isRequired,\n onItemClick: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().func)\n};\n\n//Панель инструментов столбца (правая)\nconst P8PTableColumnToolBarRight = ({\n columnDef,\n orders,\n filters,\n onItemClick\n}) => {\n //Кнопка сортировки\n const order = orders.find(o => o.name == columnDef.name);\n let orderButton = null;\n if (order) orderButton = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n onClick: () => onItemClick ? onItemClick(P8P_TABLE_COLUMN_TOOL_BAR_ACTIONS.ORDER_TOGGLE, columnDef.name) : null\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_5__[\"default\"], null, order.direction === P8P_TABLE_COLUMN_ORDER_DIRECTIONS.ASC ? \"arrow_upward\" : \"arrow_downward\"));\n\n //Кнопка фильтрации\n const filter = filters.find(f => f.name == columnDef.name);\n let filterButton = null;\n if ((0,_p8p_table_reducer__WEBPACK_IMPORTED_MODULE_2__.hasValue)(filter?.from) || (0,_p8p_table_reducer__WEBPACK_IMPORTED_MODULE_2__.hasValue)(filter?.to)) filterButton = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n onClick: () => onItemClick ? onItemClick(P8P_TABLE_COLUMN_TOOL_BAR_ACTIONS.FILTER_TOGGLE, columnDef.name) : null\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_5__[\"default\"], null, \"filter_alt\"));\n\n //Генерация содержимого\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), null, orderButton, filterButton);\n};\n\n//Контроль свойств - Панель инструментов столбца (правая)\nP8PTableColumnToolBarRight.propTypes = {\n columnDef: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().object).isRequired,\n orders: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().array).isRequired,\n filters: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().array).isRequired,\n onItemClick: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().func)\n};\n\n//Меню столбца\nconst P8PTableColumnMenu = ({\n columnDef,\n orderAscItemCaption,\n orderDescItemCaption,\n filterItemCaption,\n onItemClick\n}) => {\n //Собственное состояние\n const [anchorEl, setAnchorEl] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(null);\n\n //Флаг отображения\n const open = Boolean(anchorEl);\n\n //По нажатию на открытие меню\n const handleMenuButtonClick = event => {\n setAnchorEl(event.currentTarget);\n };\n\n //По нажатию на пункт меню\n const handleMenuItemClick = (event, index, action, columnName) => {\n if (onItemClick) onItemClick(action, columnName);\n setAnchorEl(null);\n };\n\n //При закрытии меню\n const handleMenuClose = () => {\n setAnchorEl(null);\n };\n\n //Формирование списка элементов меню в зависимости от описания колонки таблицы\n const menuItems = [];\n if (columnDef.order === true) {\n menuItems.push( /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n key: \"orderAsc\",\n onClick: (event, index) => handleMenuItemClick(event, index, P8P_TABLE_COLUMN_MENU_ACTIONS.ORDER_ASC, columnDef.name)\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_5__[\"default\"], {\n sx: STYLES.TABLE_COLUMN_MENU_ITEM_ICON\n }, \"arrow_upward\"), orderAscItemCaption));\n menuItems.push( /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n key: \"orderDesc\",\n onClick: (event, index) => handleMenuItemClick(event, index, P8P_TABLE_COLUMN_MENU_ACTIONS.ORDER_DESC, columnDef.name)\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_5__[\"default\"], {\n sx: STYLES.TABLE_COLUMN_MENU_ITEM_ICON\n }, \"arrow_downward\"), orderDescItemCaption));\n }\n if (columnDef.filter === true) {\n if (menuItems.length > 0) menuItems.push( /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_7__[\"default\"], {\n key: \"divider\",\n sx: {\n my: 0.5\n }\n }));\n menuItems.push( /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n key: \"filter\",\n onClick: (event, index) => handleMenuItemClick(event, index, P8P_TABLE_COLUMN_MENU_ACTIONS.FILTER, columnDef.name)\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_5__[\"default\"], {\n sx: STYLES.TABLE_COLUMN_MENU_ITEM_ICON\n }, \"filter_alt\"), filterItemCaption));\n }\n\n //Генерация содержимого\n return menuItems.length > 0 ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n id: `${columnDef.name}_menu_button`,\n \"aria-haspopup\": \"true\",\n onClick: handleMenuButtonClick\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_5__[\"default\"], null, \"more_vert\")), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_8__[\"default\"], {\n id: `${columnDef.name}_menu`,\n anchorEl: anchorEl,\n open: open,\n onClose: handleMenuClose\n }, menuItems)) : null;\n};\n\n//Контроль свойств - Меню столбца\nP8PTableColumnMenu.propTypes = {\n columnDef: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().object).isRequired,\n orderAscItemCaption: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().string).isRequired,\n orderDescItemCaption: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().string).isRequired,\n filterItemCaption: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().string).isRequired,\n onItemClick: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().func)\n};\n\n//Диалог подсказки\nconst P8PTableColumnHintDialog = ({\n columnDef,\n okBtnCaption,\n onOk\n}) => {\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_9__[\"default\"], {\n open: true,\n \"aria-labelledby\": \"filter-dialog-title\",\n \"aria-describedby\": \"filter-dialog-description\",\n onClose: () => onOk ? onOk() : null\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_10__[\"default\"], {\n id: \"filter-dialog-title\"\n }, columnDef.caption), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_11__[\"default\"], null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n dangerouslySetInnerHTML: {\n __html: columnDef.hint\n }\n })), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_12__[\"default\"], null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_13__[\"default\"], {\n onClick: () => onOk ? onOk() : null\n }, okBtnCaption)));\n};\n\n//Контроль свойств - Диалог подсказки\nP8PTableColumnHintDialog.propTypes = {\n columnDef: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().object).isRequired,\n okBtnCaption: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().string).isRequired,\n onOk: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().func)\n};\n\n//Диалог фильтра\nconst P8PTableColumnFilterDialog = ({\n columnDef,\n from,\n to,\n valueCaption,\n valueFromCaption,\n valueToCaption,\n okBtnCaption,\n clearBtnCaption,\n cancelBtnCaption,\n valueFormatter,\n onOk,\n onClear,\n onCancel\n}) => {\n //Собственное состояние - значения с-по\n const [filterValues, setFilterValues] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({\n from,\n to\n });\n\n //Отработка воода значения в фильтр\n const handleFilterTextFieldChanged = e => {\n setFilterValues(prev => ({\n ...prev,\n [e.target.name]: e.target.value\n }));\n };\n\n //Элементы ввода значений фильтра\n let inputs = null;\n if (Array.isArray(columnDef.values) && columnDef.values.length > 0) {\n inputs = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_14__[\"default\"], {\n name: \"from\",\n fullWidth: true,\n select: true,\n label: valueCaption,\n variant: \"standard\",\n value: filterValues.from,\n onChange: handleFilterTextFieldChanged\n }, columnDef.values.map((v, i) => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n key: i,\n value: v\n }, valueFormatter ? valueFormatter({\n value: v,\n columnDef\n }) : v)));\n } else {\n switch (columnDef.dataType) {\n case P8P_TABLE_DATA_TYPE.STR:\n {\n inputs = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_14__[\"default\"], {\n name: \"from\",\n fullWidth: true,\n InputLabelProps: {\n shrink: true\n },\n value: filterValues.from,\n onChange: handleFilterTextFieldChanged,\n label: valueCaption,\n variant: \"standard\"\n });\n break;\n }\n case P8P_TABLE_DATA_TYPE.NUMB:\n case P8P_TABLE_DATA_TYPE.DATE:\n {\n inputs = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_14__[\"default\"], {\n name: \"from\",\n InputLabelProps: {\n shrink: true\n },\n type: columnDef.dataType == P8P_TABLE_DATA_TYPE.NUMB ? \"number\" : \"date\",\n value: filterValues.from,\n onChange: handleFilterTextFieldChanged,\n label: valueFromCaption,\n variant: \"standard\"\n }), \"\\xA0\", /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_14__[\"default\"], {\n name: \"to\",\n InputLabelProps: {\n shrink: true\n },\n type: columnDef.dataType == P8P_TABLE_DATA_TYPE.NUMB ? \"number\" : \"date\",\n value: filterValues.to,\n onChange: handleFilterTextFieldChanged,\n label: valueToCaption,\n variant: \"standard\"\n }));\n break;\n }\n }\n }\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_9__[\"default\"], {\n open: true,\n \"aria-labelledby\": \"filter-dialog-title\",\n \"aria-describedby\": \"filter-dialog-description\",\n onClose: () => onCancel ? onCancel(columnDef.name) : null\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_10__[\"default\"], {\n id: \"filter-dialog-title\"\n }, columnDef.caption), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_11__[\"default\"], null, inputs), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_12__[\"default\"], null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_13__[\"default\"], {\n onClick: () => onOk ? onOk(columnDef.name, filterValues.from, filterValues.to) : null\n }, okBtnCaption), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_13__[\"default\"], {\n onClick: () => onClear ? onClear(columnDef.name) : null,\n variant: \"secondary\"\n }, clearBtnCaption), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_13__[\"default\"], {\n onClick: () => onCancel ? onCancel(columnDef.name) : null\n }, cancelBtnCaption)));\n};\n\n//Контроль свойств - Диалог фильтра\nP8PTableColumnFilterDialog.propTypes = {\n columnDef: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().object).isRequired,\n from: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().any),\n to: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().any),\n valueCaption: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().string).isRequired,\n valueFromCaption: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().string).isRequired,\n valueToCaption: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().string).isRequired,\n okBtnCaption: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().string).isRequired,\n clearBtnCaption: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().string).isRequired,\n cancelBtnCaption: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().string).isRequired,\n valueFormatter: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().func),\n onOk: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().func),\n onClear: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().func),\n onCancel: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().func)\n};\n\n//Сводный фильтр\nconst P8PTableFiltersChips = ({\n filters,\n columnsDef,\n valueFromCaption,\n valueToCaption,\n onFilterChipClick,\n onFilterChipDelete,\n valueFormatter\n}) => {\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_15__[\"default\"], {\n direction: \"row\",\n spacing: 1,\n pb: 2\n }, filters.map((filter, i) => {\n const columnDef = columnsDef.find(columnDef => columnDef.name == filter.name);\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_16__[\"default\"], {\n key: i,\n label: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_15__[\"default\"], {\n direction: \"row\",\n sx: STYLES.FILTER_CHIP\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"strong\", null, columnDef.caption), \":\\xA0\", (0,_p8p_table_reducer__WEBPACK_IMPORTED_MODULE_2__.hasValue)(filter.from) && !columnDef.values && columnDef.dataType != P8P_TABLE_DATA_TYPE.STR ? `${valueFromCaption.toLowerCase()} ` : null, (0,_p8p_table_reducer__WEBPACK_IMPORTED_MODULE_2__.hasValue)(filter.from) ? valueFormatter ? valueFormatter({\n value: filter.from,\n columnDef\n }) : filter.from : null, (0,_p8p_table_reducer__WEBPACK_IMPORTED_MODULE_2__.hasValue)(filter.to) && !columnDef.values && columnDef.dataType != P8P_TABLE_DATA_TYPE.STR ? ` ${valueToCaption.toLowerCase()} ` : null, (0,_p8p_table_reducer__WEBPACK_IMPORTED_MODULE_2__.hasValue)(filter.to) ? valueFormatter ? valueFormatter({\n value: filter.to,\n columnDef\n }) : filter.to : null),\n variant: \"outlined\",\n onClick: () => onFilterChipClick ? onFilterChipClick(columnDef.name) : null,\n onDelete: () => onFilterChipDelete ? onFilterChipDelete(columnDef.name) : null\n });\n }));\n};\n\n//Контроль свойств - Сводный фильтр\nP8PTableFiltersChips.propTypes = {\n filters: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().array).isRequired,\n columnsDef: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().array).isRequired,\n valueFromCaption: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().string).isRequired,\n valueToCaption: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().string).isRequired,\n onFilterChipClick: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().func),\n onFilterChipDelete: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().func),\n valueFormatter: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().func)\n};\n\n//-----------\n//Тело модуля\n//-----------\n\n//Таблица\nconst P8PTable = ({\n columnsDef,\n groups,\n rows,\n orders,\n filters,\n size,\n fixedHeader = false,\n fixedColumns = 0,\n morePages = false,\n reloading,\n expandable,\n orderAscMenuItemCaption,\n orderDescMenuItemCaption,\n filterMenuItemCaption,\n valueFilterCaption,\n valueFromFilterCaption,\n valueToFilterCaption,\n okFilterBtnCaption,\n clearFilterBtnCaption,\n cancelFilterBtnCaption,\n morePagesBtnCaption,\n noDataFoundText,\n headCellRender,\n dataCellRender,\n groupCellRender,\n rowExpandRender,\n valueFormatter,\n onOrderChanged,\n onFilterChanged,\n onPagesCountChanged,\n objectsCopier,\n containerComponent,\n containerComponentProps\n}) => {\n //Собственное состояние - описание заголовка\n const [header, dispatchHeaderAction] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useReducer)(_p8p_table_reducer__WEBPACK_IMPORTED_MODULE_2__.p8pTableReducer, (0,_p8p_table_reducer__WEBPACK_IMPORTED_MODULE_2__.HEADER_INITIAL_STATE)());\n\n //Собственное состояние - фильтруемая колонка\n const [filterColumn, setFilterColumn] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(null);\n\n //Собственное состояние - развёрнутые строки\n const [expanded, setExpanded] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({});\n\n //Собственное состояния - развёрнутые группы\n const [expandedGroups, setExpandedGroups] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({});\n\n //Собственное состояние - колонка с отображаемой подсказкой\n const [displayHintColumn, setDisplayHintColumn] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(null);\n\n //Стили\n const theme = (0,_mui_material_styles__WEBPACK_IMPORTED_MODULE_17__[\"default\"])();\n\n //Описание фильтруемой колонки\n const filterColumnDef = filterColumn ? columnsDef.find(columnDef => columnDef.name == filterColumn) || null : null;\n\n //Описание колонки с отображаемой подсказкой\n const displayHintColumnDef = displayHintColumn ? columnsDef.find(columnDef => columnDef.name == displayHintColumn) || null : null;\n\n //Значения фильтра фильтруемой колонки\n const [filterColumnFrom, filterColumnTo] = filterColumn ? (() => {\n const filter = filters.find(filter => filter.name == filterColumn);\n return filter ? [filter.from == null ? \"\" : filter.from, filter.to == null ? \"\" : filter.to] : [\"\", \"\"];\n })() : [\"\", \"\"];\n\n //Формирование заголовка таблицы\n const setHeader = ({\n columnsDef,\n expandable,\n fixedColumns,\n objectsCopier\n }) => dispatchHeaderAction({\n type: _p8p_table_reducer__WEBPACK_IMPORTED_MODULE_2__.P8P_TABLE_AT.SET_HEADER,\n payload: {\n columnsDef,\n expandable,\n fixedColumns,\n objectsCopier\n }\n });\n\n //Сворачивание/разворачивание уровня заголовка таблицы\n const toggleHeaderExpand = ({\n columnName,\n objectsCopier\n }) => dispatchHeaderAction({\n type: _p8p_table_reducer__WEBPACK_IMPORTED_MODULE_2__.P8P_TABLE_AT.TOGGLE_HEADER_EXPAND,\n payload: {\n columnName,\n expandable,\n fixedColumns,\n objectsCopier\n }\n });\n\n //Выравнивание в зависимости от типа данных\n const getAlignByDataType = ({\n dataType,\n hasChild\n }) => dataType === P8P_TABLE_DATA_TYPE.DATE || hasChild ? \"center\" : dataType === P8P_TABLE_DATA_TYPE.NUMB ? \"right\" : \"left\";\n\n //Упорядочение содержимого в зависимости от типа данных\n const getJustifyContentByDataType = ({\n dataType,\n hasChild\n }) => dataType === P8P_TABLE_DATA_TYPE.DATE || hasChild ? \"center\" : dataType === P8P_TABLE_DATA_TYPE.NUMB ? \"flex-end\" : \"flex-start\";\n\n //Отработка нажатия на элемент пункта меню\n const handleToolBarItemClick = (action, columnName) => {\n switch (action) {\n case P8P_TABLE_COLUMN_TOOL_BAR_ACTIONS.ORDER_TOGGLE:\n {\n const colOrder = orders.find(o => o.name == columnName);\n const newDirection = colOrder?.direction == P8P_TABLE_COLUMN_ORDER_DIRECTIONS.ASC ? P8P_TABLE_COLUMN_ORDER_DIRECTIONS.DESC : colOrder?.direction == P8P_TABLE_COLUMN_ORDER_DIRECTIONS.DESC ? null : P8P_TABLE_COLUMN_ORDER_DIRECTIONS.ASC;\n if (onOrderChanged) onOrderChanged({\n columnName,\n direction: newDirection\n });\n break;\n }\n case P8P_TABLE_COLUMN_TOOL_BAR_ACTIONS.FILTER_TOGGLE:\n setFilterColumn(columnName);\n break;\n case P8P_TABLE_COLUMN_TOOL_BAR_ACTIONS.EXPAND_TOGGLE:\n toggleHeaderExpand({\n columnName,\n objectsCopier\n });\n break;\n }\n };\n\n //Отработка нажатия на пункты меню\n const handleMenuItemClick = (action, columnName) => {\n switch (action) {\n case P8P_TABLE_COLUMN_MENU_ACTIONS.ORDER_ASC:\n onOrderChanged({\n columnName,\n direction: P8P_TABLE_COLUMN_ORDER_DIRECTIONS.ASC\n });\n break;\n case P8P_TABLE_COLUMN_MENU_ACTIONS.ORDER_DESC:\n onOrderChanged({\n columnName,\n direction: P8P_TABLE_COLUMN_ORDER_DIRECTIONS.DESC\n });\n break;\n case P8P_TABLE_COLUMN_MENU_ACTIONS.FILTER:\n setFilterColumn(columnName);\n break;\n }\n };\n\n //Отработка ввода значения фильтра колонки\n const handleFilterOk = (columnName, from, to) => {\n if (onFilterChanged) onFilterChanged({\n columnName,\n from: from === \"\" ? null : from,\n to: to === \"\" ? null : to\n });\n setFilterColumn(null);\n };\n\n //Отработка очистки значения фильтра колонки\n const handleFilterClear = columnName => {\n if (onFilterChanged) onFilterChanged({\n columnName,\n from: null,\n to: null\n });\n setFilterColumn(null);\n };\n\n //Отработка отмены ввода значения фильтра колонки\n const handleFilterCancel = () => {\n setFilterColumn(null);\n };\n\n //Отработка нажатия на элемент сводного фильтра\n const handleFilterChipClick = columnName => setFilterColumn(columnName);\n\n //Отработка удаления элемента сводного фильтра\n const handleFilterChipDelete = columnName => onFilterChanged ? onFilterChanged({\n columnName,\n from: null,\n to: null\n }) : null;\n\n //Отработка нажатия на кнопку догрузки страницы\n const handleMorePagesBtnClick = () => {\n if (onPagesCountChanged) onPagesCountChanged();\n };\n\n //Отработка нажатия на элемент отображения подсказки по колонке\n const handleColumnShowHintClick = columnName => setDisplayHintColumn(columnName);\n\n //Отработка сокрытия подсказки по колонке\n const handleHintOk = () => setDisplayHintColumn(null);\n\n //Отработка нажатия на кнопку раскрытия элемента\n const handleExpandClick = rowIndex => {\n if (expanded[rowIndex] === true) setExpanded(pv => {\n let res = {\n ...pv\n };\n delete res[rowIndex];\n return res;\n });else setExpanded(pv => ({\n ...pv,\n [rowIndex]: true\n }));\n };\n\n //При перезагрузке данных\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n if (reloading) setExpanded({});\n }, [reloading]);\n\n //При изменении описания колонок\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n setHeader({\n columnsDef,\n expandable,\n fixedColumns,\n objectsCopier\n });\n }, [columnsDef, expandable, fixedColumns, objectsCopier]);\n\n //Генерация заголовка группы\n const renderGroupCell = group => {\n let customRender = {};\n if (groupCellRender) customRender = groupCellRender({\n columnsDef: header.columnsDef,\n group\n }) || {};\n return header.displayDataColumns.map((columnDef, i) => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_18__[\"default\"], _extends({\n key: `group-header-cell-${i}`\n }, customRender.cellProps, {\n sx: {\n ...STYLES.TABLE_CELL_GROUP_HEADER,\n ...customRender.cellStyle,\n ...(columnDef.width ? {\n minWidth: columnDef.width,\n maxWidth: columnDef.width\n } : {}),\n ...(i == 0 && fixedColumns ? STYLES.TABLE_CELL_GROUP_HEADER_STICKY : {})\n },\n colSpan: expandable && rowExpandRender ? 2 : 1\n }), i == 0 ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_15__[\"default\"], {\n direction: \"row\",\n sx: STYLES.TABLE_COLUMN_STACK\n }, group.expandable ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n onClick: () => {\n setExpandedGroups(pv => ({\n ...pv,\n ...{\n [group.name]: !pv[group.name]\n }\n }));\n }\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_5__[\"default\"], null, expandedGroups[group.name] ? \"indeterminate_check_box\" : \"add_box\")) : null, customRender.data ? customRender.data : group.caption) : null));\n };\n\n //Генерация содержимого\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", null, displayHintColumn ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(P8PTableColumnHintDialog, {\n columnDef: displayHintColumnDef,\n okBtnCaption: okFilterBtnCaption,\n onOk: handleHintOk\n }) : null, filterColumn ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(P8PTableColumnFilterDialog, {\n columnDef: filterColumnDef,\n from: filterColumnFrom,\n to: filterColumnTo,\n valueCaption: valueFilterCaption,\n valueFromCaption: valueFromFilterCaption,\n valueToCaption: valueToFilterCaption,\n okBtnCaption: okFilterBtnCaption,\n clearBtnCaption: clearFilterBtnCaption,\n cancelBtnCaption: cancelFilterBtnCaption,\n valueFormatter: valueFormatter,\n onOk: handleFilterOk,\n onClear: handleFilterClear,\n onCancel: handleFilterCancel\n }) : null, Array.isArray(filters) && filters.length > 0 ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(P8PTableFiltersChips, {\n filters: filters,\n columnsDef: columnsDef,\n valueFromCaption: valueFromFilterCaption,\n valueToCaption: valueToFilterCaption,\n onFilterChipClick: handleFilterChipClick,\n onFilterChipDelete: handleFilterChipDelete,\n valueFormatter: valueFormatter\n }) : null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_19__[\"default\"], _extends({\n component: containerComponent ? containerComponent : _mui_material__WEBPACK_IMPORTED_MODULE_20__[\"default\"]\n }, containerComponentProps ? containerComponentProps : {}), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_21__[\"default\"], {\n stickyHeader: fixedHeader,\n sx: STYLES.TABLE,\n size: size || P8P_TABLE_SIZE.MEDIUM\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_22__[\"default\"], {\n sx: fixedHeader ? STYLES.TABLE_HEAD_STICKY : {}\n }, header.displayLevels.map((level, i) => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_23__[\"default\"], {\n key: level\n }, expandable && rowExpandRender && i == 0 ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_18__[\"default\"], {\n key: \"head-cell-expand-control\",\n align: \"center\",\n sx: {\n ...STYLES.TABLE_CELL_EXPAND_CONTROL,\n ...(fixedColumns ? STYLES.TABLE_HEAD_CELL_STICKY(theme, 0) : {})\n },\n rowSpan: header.displayLevelsColumns[level][0].rowSpan\n }) : null, header.displayLevelsColumns[level].map((columnDef, j) => {\n let customRender = {};\n if (headCellRender) customRender = headCellRender({\n columnDef\n }) || {};\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_18__[\"default\"], _extends({\n key: `head-cell-${j}`,\n align: getAlignByDataType(columnDef),\n sx: {\n ...customRender.cellStyle,\n ...(columnDef.width ? {\n minWidth: columnDef.width,\n maxWidth: columnDef.width\n } : {}),\n ...(columnDef.fixed ? STYLES.TABLE_HEAD_CELL_STICKY(theme, columnDef.fixedLeft) : {})\n },\n rowSpan: columnDef.rowSpan,\n colSpan: columnDef.colSpan\n }, customRender.cellProps), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_15__[\"default\"], _extends({\n direction: \"row\",\n justifyContent: getJustifyContentByDataType(columnDef),\n sx: {\n ...STYLES.TABLE_COLUMN_STACK,\n ...customRender.stackStyle\n }\n }, customRender.stackProps), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(P8PTableColumnToolBarLeft, {\n columnDef: columnDef,\n onItemClick: handleToolBarItemClick\n }), customRender.data ? customRender.data : columnDef.hint ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_24__[\"default\"], {\n component: \"button\",\n variant: \"body2\",\n align: \"left\",\n underline: \"always\",\n onClick: () => handleColumnShowHintClick(columnDef.name)\n }, columnDef.caption) : columnDef.caption, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(P8PTableColumnToolBarRight, {\n columnDef: columnDef,\n orders: orders,\n filters: filters,\n onItemClick: handleToolBarItemClick\n }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(P8PTableColumnMenu, {\n columnDef: columnDef,\n orderAscItemCaption: orderAscMenuItemCaption,\n orderDescItemCaption: orderDescMenuItemCaption,\n filterItemCaption: filterMenuItemCaption,\n onItemClick: handleMenuItemClick\n })));\n })))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_25__[\"default\"], null, rows.length > 0 ? (Array.isArray(groups) && groups.length > 0 ? groups : [{}]).map((group, g) => {\n const rowsView = rows.map((row, i) => !group?.name || group?.name == row.groupName ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), {\n key: `data-${i}`\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_23__[\"default\"], {\n key: `data-row-${i}`,\n sx: STYLES.TABLE_ROW\n }, expandable && rowExpandRender ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_18__[\"default\"], {\n key: `data-cell-expand-control-${i}`,\n align: \"center\",\n sx: {\n ...STYLES.TABLE_CELL_EXPAND_CONTROL,\n ...(fixedColumns ? STYLES.TABLE_CELL_STICKY(theme, 0) : {})\n }\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n onClick: () => handleExpandClick(i)\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_5__[\"default\"], null, expanded[i] === true ? \"keyboard_arrow_down\" : \"keyboard_arrow_right\"))) : null, header.displayDataColumns.map((columnDef, j) => {\n let customRender = {};\n if (dataCellRender) customRender = dataCellRender({\n row,\n columnDef\n }) || {};\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_18__[\"default\"], _extends({\n key: `data-cell-${j}`,\n align: getAlignByDataType(columnDef),\n sx: {\n ...customRender.cellStyle,\n ...(columnDef.width ? {\n minWidth: columnDef.width,\n maxWidth: columnDef.width\n } : {}),\n ...(columnDef.fixed ? STYLES.TABLE_CELL_STICKY(theme, columnDef.fixedLeft) : {})\n }\n }, customRender.cellProps), customRender.data ? customRender.data : valueFormatter ? valueFormatter({\n value: row[columnDef.name],\n columnDef\n }) : row[columnDef.name]);\n })), expandable && rowExpandRender && expanded[i] === true ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_23__[\"default\"], {\n key: `data-row-expand-${i}`\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_18__[\"default\"], {\n sx: {\n ...STYLES.TABLE_CELL_EXPAND_CONTAINER,\n ...(fixedColumns ? STYLES.TABLE_CELL_STICKY(theme, 0) : {})\n },\n colSpan: fixedColumns ? header.displayFixedColumnsCount + 1 : header.displayDataColumnsCount\n }, rowExpandRender({\n columnsDef,\n row\n }))) : null) : null);\n return !group?.name ? rowsView : /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), {\n key: `group-${g}`\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_23__[\"default\"], {\n key: `group-header-${g}`\n }, renderGroupCell(group)), !group.expandable || expandedGroups[group.name] === true ? rowsView : null);\n }) : null))), rows.length == 0 ? noDataFoundText && !reloading ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_p8p_app_message__WEBPACK_IMPORTED_MODULE_1__.P8PAppInlineError, {\n text: noDataFoundText\n }) : null : morePages ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_26__[\"default\"], {\n style: STYLES.MORE_BUTTON_CONTAINER\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_13__[\"default\"], {\n fullWidth: true,\n onClick: handleMorePagesBtnClick\n }, morePagesBtnCaption)) : null);\n};\n\n//Контроль свойств - Таблица\nP8PTable.propTypes = {\n columnsDef: prop_types__WEBPACK_IMPORTED_MODULE_3___default().arrayOf(prop_types__WEBPACK_IMPORTED_MODULE_3___default().shape({\n name: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().string).isRequired,\n caption: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().string).isRequired,\n order: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().bool).isRequired,\n filter: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().bool).isRequired,\n dataType: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().string).isRequired,\n visible: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().bool).isRequired,\n values: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().array),\n parent: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().string),\n expandable: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().bool).isRequired,\n expanded: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().bool).isRequired,\n width: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().number)\n })).isRequired,\n groups: prop_types__WEBPACK_IMPORTED_MODULE_3___default().arrayOf(prop_types__WEBPACK_IMPORTED_MODULE_3___default().shape({\n name: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().string).isRequired,\n caption: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().string).isRequired,\n expandable: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().bool).isRequired,\n expanded: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().bool).isRequired\n })),\n rows: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().array).isRequired,\n orders: prop_types__WEBPACK_IMPORTED_MODULE_3___default().arrayOf(prop_types__WEBPACK_IMPORTED_MODULE_3___default().shape({\n name: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().string).isRequired,\n direction: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().string).isRequired\n })).isRequired,\n filters: prop_types__WEBPACK_IMPORTED_MODULE_3___default().arrayOf(P8P_TABLE_FILTER_SHAPE).isRequired,\n size: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().string),\n fixedHeader: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().bool),\n fixedColumns: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().number),\n morePages: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().bool),\n reloading: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().bool).isRequired,\n expandable: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().bool),\n orderAscMenuItemCaption: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().string).isRequired,\n orderDescMenuItemCaption: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().string).isRequired,\n filterMenuItemCaption: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().string).isRequired,\n valueFilterCaption: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().string).isRequired,\n valueFromFilterCaption: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().string).isRequired,\n valueToFilterCaption: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().string).isRequired,\n okFilterBtnCaption: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().string).isRequired,\n clearFilterBtnCaption: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().string).isRequired,\n cancelFilterBtnCaption: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().string).isRequired,\n morePagesBtnCaption: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().string).isRequired,\n noDataFoundText: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().string),\n headCellRender: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().func),\n dataCellRender: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().func),\n groupCellRender: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().func),\n rowExpandRender: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().func),\n valueFormatter: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().func),\n onOrderChanged: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().func),\n onFilterChanged: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().func),\n onPagesCountChanged: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().func),\n objectsCopier: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().func).isRequired,\n containerComponent: prop_types__WEBPACK_IMPORTED_MODULE_3___default().oneOfType([(prop_types__WEBPACK_IMPORTED_MODULE_3___default().elementType), (prop_types__WEBPACK_IMPORTED_MODULE_3___default().string)]),\n containerComponentProps: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().object)\n};\n\n//----------------\n//Интерфейс модуля\n//----------------\n\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/components/p8p_table.js?"); /***/ }), @@ -3359,7 +3359,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ HEADER_INITIAL_STATE: () => (/* binding */ HEADER_INITIAL_STATE),\n/* harmony export */ P8P_TABLE_AT: () => (/* binding */ P8P_TABLE_AT),\n/* harmony export */ hasValue: () => (/* binding */ hasValue),\n/* harmony export */ p8pTableReducer: () => (/* binding */ p8pTableReducer)\n/* harmony export */ });\n/*\r\n Парус 8 - Панели мониторинга\r\n Компонент: Таблица - редьюсер состояния\r\n*/\n\n//---------\n//Константы\n//---------\n\n//Типы действий\nconst P8P_TABLE_AT = {\n SET_HEADER: \"SET_HEADER\",\n //Установка заголовка таблицы\n TOGGLE_HEADER_EXPAND: \"TOGGLE_HEADER_EXPAND\" //Сворачивание/разворачивание уровня заголовка\n};\n\n//Состояние заголовка таблицы по умолчанию\nconst HEADER_INITIAL_STATE = () => ({\n columnsDef: [],\n displayLevels: [],\n displayLevelsColumns: {},\n displayDataColumnsCount: 0,\n displayDataColumns: []\n});\n\n//Состояние описания ячейки заголовка таблицы по умолчанию\nconst HEADER_COLUMN_INITIAL_STATE = ({\n columnDef,\n objectsCopier\n}) => {\n const tmp = objectsCopier(columnDef);\n if (!hasValue(tmp.parent)) tmp.parent = \"\";\n if (!hasValue(tmp.expandable)) tmp.expandable = false;\n if (!hasValue(tmp.expanded)) tmp.expanded = true;\n return tmp;\n};\n\n//--------------------------------\n//Вспомогательные классы и функции\n//--------------------------------\n\n//Проверка существования значения\nconst hasValue = value => typeof value !== \"undefined\" && value !== undefined && value !== null && value !== \"\";\n\n//Определение высоты (в уровнях) ячейки заголовка\nconst getDisplayColumnRowSpan = (displayTree, maxLevel) => {\n displayTree.forEach(columnDef => {\n columnDef.rowSpan = columnDef.hasChild ? maxLevel - columnDef.childMaxLevel + 1 : maxLevel - columnDef.level + 1;\n if (columnDef.hasChild) getDisplayColumnRowSpan(columnDef.child, maxLevel);\n });\n};\n\n//Определение ширины (в колонках) ячейки заголовка\nconst getDisplayColumnColSpan = (displayTree, columnDef) => {\n if (columnDef.hasChild) {\n let colSpan = 0;\n displayTree.forEach(cD => cD.parent == columnDef.name ? colSpan += getDisplayColumnColSpan(cD.child, cD) : null);\n return colSpan;\n } else return 1;\n};\n\n//Формирование дерева отображаемых элементов заголовка\nconst buildDisplayTree = (columnsDef, parent, level) => {\n const baseBuild = (columnsDef, parent, level) => {\n let maxLevel = level - 1;\n const res = columnsDef.filter(columnDef => columnDef.parent == parent && columnDef.visible).map(columnDef => {\n const [child, childMaxLevel] = columnDef.expanded ? baseBuild(columnsDef, columnDef.name, level + 1) : [[], level];\n if (childMaxLevel > maxLevel) maxLevel = childMaxLevel;\n const res = {\n ...columnDef,\n child,\n hasChild: child.length > 0 ? true : false,\n level,\n childMaxLevel: child.length > 0 ? childMaxLevel : 0\n };\n return {\n ...res,\n colSpan: getDisplayColumnColSpan(child, res),\n rowSpan: 1\n };\n });\n return [res, maxLevel];\n };\n const [displayTree, maxLevel] = baseBuild(columnsDef, parent, level);\n getDisplayColumnRowSpan(displayTree, maxLevel);\n return [displayTree, maxLevel];\n};\n\n//Формирование коллекции отображаемых колонок уровня\nconst buildDisplayLevelsColumns = (displayTree, maxLevel) => {\n const extractLevel = (displayTree, level) => {\n let res = [];\n displayTree.forEach(columnDef => {\n if (columnDef.level == level) res.push(columnDef);\n if (columnDef.hasChild) res = res.concat(extractLevel(columnDef.child, level));\n });\n return res;\n };\n const displayLevels = [...Array(maxLevel).keys()].map(i => i + 1);\n const displayLevelsColumns = {};\n displayLevels.forEach(level => displayLevelsColumns[level] = extractLevel(displayTree, level));\n return [displayLevels, displayLevelsColumns];\n};\n\n//Формирование коллекции отображаемых колонок данных\nconst buildDisplayDataColumns = (displayTree, expandable) => {\n const displayDataColumns = [];\n const traverseTree = displayTree => {\n displayTree.forEach(columnDef => !columnDef.hasChild ? displayDataColumns.push(columnDef) : traverseTree(columnDef.child));\n };\n traverseTree(displayTree);\n return [displayDataColumns, displayDataColumns.length + (expandable === true ? 1 : 0)];\n};\n\n//Формирование описания отображаемых колонок\nconst buildDisplay = ({\n columnsDef,\n expandable\n}) => {\n //Сформируем дерево отображаемых колонок заголовка\n const [displayTree, maxLevel] = buildDisplayTree(columnsDef, \"\", 1);\n //Вытянем дерево в удобные для рендеринга структуры\n const [displayLevels, displayLevelsColumns] = buildDisplayLevelsColumns(displayTree, maxLevel);\n //Сформируем отображаемые колонки данных\n const [displayDataColumns, displayDataColumnsCount] = buildDisplayDataColumns(displayTree, expandable);\n //Вернём результат\n return [displayLevels, displayLevelsColumns, displayDataColumns, displayDataColumnsCount];\n};\n\n//Формирование описания заголовка\nconst buildHeaderDef = ({\n columnsDef,\n expandable,\n objectsCopier\n}) => {\n //Инициализируем результат\n const res = HEADER_INITIAL_STATE();\n //Инициализируем внутренне описание колонок и поместим его в результат\n columnsDef.forEach(columnDef => res.columnsDef.push(HEADER_COLUMN_INITIAL_STATE({\n columnDef,\n objectsCopier\n })));\n //Добавим в результат сведения об отображаемых данных\n [res.displayLevels, res.displayLevelsColumns, res.displayDataColumns, res.displayDataColumnsCount] = buildDisplay({\n columnsDef: res.columnsDef,\n expandable\n });\n //Сформируем дерево отображаемых колонок заголовка\n //const [displayTree, maxLevel] = buildDisplayTree(res.columnsDef, \"\", 1);\n //Вытянем дерево в удобные для рендеринга структуры\n //[res.displayLevels, res.displayLevelsColumns] = buildDisplayLevelsColumns(displayTree, maxLevel);\n //Сформируем отображаемые колонки данных\n //[res.displayDataColumns, res.displayDataColumnsCount] = buildDisplayDataColumns(displayTree, expandable);\n //Вернём результат\n return res;\n};\n\n//-----------\n//Тело модуля\n//-----------\n\n//Обработчики действий\nconst handlers = {\n //Формирование заголовка\n [P8P_TABLE_AT.SET_HEADER]: (state, {\n payload\n }) => {\n const {\n columnsDef,\n expandable,\n objectsCopier\n } = payload;\n return {\n ...state,\n ...buildHeaderDef({\n columnsDef,\n expandable,\n objectsCopier\n })\n };\n },\n [P8P_TABLE_AT.TOGGLE_HEADER_EXPAND]: (state, {\n payload\n }) => {\n const {\n columnName,\n expandable,\n objectsCopier\n } = payload;\n const columnsDef = objectsCopier(state.columnsDef);\n columnsDef.forEach(columnDef => columnDef.name == columnName ? columnDef.expanded = !columnDef.expanded : null);\n const [displayLevels, displayLevelsColumns, displayDataColumns, displayDataColumnsCount] = buildDisplay({\n columnsDef,\n expandable\n });\n //const [displayTree, maxLevel] = buildDisplayTree(columnsDef, \"\", 1);\n //const [displayLevels, displayLevelsColumns] = buildDisplayLevelsColumns(displayTree, maxLevel);\n //const [displayDataColumns, displayDataColumnsCount] = buildDisplayDataColumns(displayTree, expandable);\n return {\n ...state,\n columnsDef,\n displayLevels,\n displayLevelsColumns,\n displayDataColumns,\n displayDataColumnsCount\n };\n },\n //Обработчик по умолчанию\n DEFAULT: state => state\n};\n\n//----------------\n//Интерфейс модуля\n//----------------\n\n//Константы\n\n\n//Редьюсер состояния\nconst p8pTableReducer = (state, action) => {\n //Подберём обработчик\n const handle = handlers[action.type] || handlers.DEFAULT;\n //Исполним его\n return handle(state, action);\n};\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/components/p8p_table_reducer.js?"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ HEADER_INITIAL_STATE: () => (/* binding */ HEADER_INITIAL_STATE),\n/* harmony export */ P8P_TABLE_AT: () => (/* binding */ P8P_TABLE_AT),\n/* harmony export */ hasValue: () => (/* binding */ hasValue),\n/* harmony export */ p8pTableReducer: () => (/* binding */ p8pTableReducer)\n/* harmony export */ });\n/*\r\n Парус 8 - Панели мониторинга\r\n Компонент: Таблица - редьюсер состояния\r\n*/\n\n//---------\n//Константы\n//---------\n\n//Типы действий\nconst P8P_TABLE_AT = {\n SET_HEADER: \"SET_HEADER\",\n //Установка заголовка таблицы\n TOGGLE_HEADER_EXPAND: \"TOGGLE_HEADER_EXPAND\" //Сворачивание/разворачивание уровня заголовка\n};\n\n//Состояние заголовка таблицы по умолчанию\nconst HEADER_INITIAL_STATE = () => ({\n columnsDef: [],\n displayLevels: [],\n displayLevelsColumns: {},\n displayDataColumnsCount: 0,\n displayDataColumns: [],\n displayFixedColumnsCount: 0\n});\n\n//Состояние описания ячейки заголовка таблицы по умолчанию\nconst HEADER_COLUMN_INITIAL_STATE = ({\n columnDef,\n objectsCopier\n}) => {\n const tmp = objectsCopier(columnDef);\n if (!hasValue(tmp.parent)) tmp.parent = \"\";\n if (!hasValue(tmp.expandable)) tmp.expandable = false;\n if (!hasValue(tmp.expanded)) tmp.expanded = true;\n if (!hasValue(tmp.fixed)) tmp.fixed = false;\n if (!hasValue(tmp.fixedLeft)) tmp.fixedLeft = 0;\n return tmp;\n};\n\n//--------------------------------\n//Вспомогательные классы и функции\n//--------------------------------\n\n//Проверка существования значения\nconst hasValue = value => typeof value !== \"undefined\" && value !== undefined && value !== null && value !== \"\";\n\n//Определение высоты (в уровнях) ячейки заголовка\nconst getDisplayColumnRowSpan = (displayTree, maxLevel) => {\n displayTree.forEach(columnDef => {\n columnDef.rowSpan = columnDef.hasChild ? maxLevel - columnDef.childMaxLevel + 1 : maxLevel - columnDef.level + 1;\n if (columnDef.hasChild) getDisplayColumnRowSpan(columnDef.child, maxLevel);\n });\n};\n\n//Определение ширины (в колонках) ячейки заголовка\nconst getDisplayColumnColSpan = (displayTree, columnDef) => {\n if (columnDef.hasChild) {\n let colSpan = 0;\n displayTree.forEach(cD => cD.parent == columnDef.name ? colSpan += getDisplayColumnColSpan(cD.child, cD) : null);\n return colSpan;\n } else return 1;\n};\n\n//Определения признака зафиксированности колонки\nconst getFixedColumns = (displayTree, parentFixed, parentLeft, fixedColumns) => {\n if (fixedColumns) {\n let left = parentLeft;\n displayTree.forEach((columnDef, i) => {\n left += columnDef.width;\n if (columnDef.level == 1 && i + 1 <= fixedColumns || columnDef.level > 1 && parentFixed) {\n columnDef.fixed = true;\n columnDef.fixedLeft = left - columnDef.width;\n } else columnDef.fixed = false;\n if (columnDef.hasChild) getFixedColumns(columnDef.child, columnDef.fixed, columnDef.fixedLeft, fixedColumns);\n });\n }\n};\n\n//Формирование дерева отображаемых элементов заголовка\nconst buildDisplayTree = (columnsDef, parent, level, expandable, fixedColumns) => {\n const baseBuild = (columnsDef, parent, level) => {\n let maxLevel = level - 1;\n const res = columnsDef.filter(columnDef => columnDef.parent == parent && columnDef.visible).map(columnDef => {\n const [child, childMaxLevel] = columnDef.expanded ? baseBuild(columnsDef, columnDef.name, level + 1) : [[], level];\n if (childMaxLevel > maxLevel) maxLevel = childMaxLevel;\n const res = {\n ...columnDef,\n child,\n hasChild: child.length > 0 ? true : false,\n level,\n childMaxLevel: child.length > 0 ? childMaxLevel : 0\n };\n return {\n ...res,\n colSpan: getDisplayColumnColSpan(child, res),\n rowSpan: 1\n };\n });\n return [res, maxLevel];\n };\n const [displayTree, maxLevel] = baseBuild(columnsDef, parent, level);\n getDisplayColumnRowSpan(displayTree, maxLevel);\n getFixedColumns(displayTree, false, expandable ? 60 : 0, fixedColumns);\n return [displayTree, maxLevel];\n};\n\n//Формирование коллекции отображаемых колонок уровня\nconst buildDisplayLevelsColumns = (displayTree, maxLevel) => {\n const extractLevel = (displayTree, level) => {\n let res = [];\n displayTree.forEach(columnDef => {\n if (columnDef.level == level) res.push(columnDef);\n if (columnDef.hasChild) res = res.concat(extractLevel(columnDef.child, level));\n });\n return res;\n };\n const displayLevels = [...Array(maxLevel).keys()].map(i => i + 1);\n const displayLevelsColumns = {};\n displayLevels.forEach(level => displayLevelsColumns[level] = extractLevel(displayTree, level));\n return [displayLevels, displayLevelsColumns];\n};\n\n//Формирование коллекции отображаемых колонок данных\nconst buildDisplayDataColumns = (displayTree, expandable) => {\n const displayDataColumns = [];\n const traverseTree = displayTree => {\n displayTree.forEach(columnDef => !columnDef.hasChild ? displayDataColumns.push(columnDef) : traverseTree(columnDef.child));\n };\n traverseTree(displayTree);\n return [displayDataColumns, displayDataColumns.length + (expandable === true ? 1 : 0)];\n};\n\n//Подсчёт количества отображаемых фиксированных колонок\nconst getDisplayFixedColumnsCount = displayTree => {\n let res = 0;\n const traverseTree = displayTree => {\n displayTree.forEach(columnDef => columnDef.hasChild ? traverseTree(columnDef.child) : columnDef.fixed ? res++ : null);\n };\n traverseTree(displayTree);\n return res;\n};\n\n//Формирование описания отображаемых колонок\nconst buildDisplay = ({\n columnsDef,\n expandable,\n fixedColumns\n}) => {\n //Сформируем дерево отображаемых колонок заголовка\n const [displayTree, maxLevel] = buildDisplayTree(columnsDef, \"\", 1, expandable, fixedColumns);\n //Вытянем дерево в удобные для рендеринга структуры\n const [displayLevels, displayLevelsColumns] = buildDisplayLevelsColumns(displayTree, maxLevel);\n //Сформируем отображаемые колонки данных\n const [displayDataColumns, displayDataColumnsCount] = buildDisplayDataColumns(displayTree, expandable);\n //Подсчитаем количество отображаемых фиксированных колонок\n const displayFixedColumnsCount = getDisplayFixedColumnsCount(displayTree);\n //Вернём результат\n return [displayLevels, displayLevelsColumns, displayDataColumns, displayDataColumnsCount, displayFixedColumnsCount];\n};\n\n//Формирование описания заголовка\nconst buildHeaderDef = ({\n columnsDef,\n expandable,\n fixedColumns,\n objectsCopier\n}) => {\n //Инициализируем результат\n const res = HEADER_INITIAL_STATE();\n //Инициализируем внутренне описание колонок и поместим его в результат\n columnsDef.forEach(columnDef => res.columnsDef.push(HEADER_COLUMN_INITIAL_STATE({\n columnDef,\n objectsCopier\n })));\n //Добавим в результат сведения об отображаемых данных\n [res.displayLevels, res.displayLevelsColumns, res.displayDataColumns, res.displayDataColumnsCount, res.displayFixedColumnsCount] = buildDisplay({\n columnsDef: res.columnsDef,\n expandable,\n fixedColumns\n });\n //Вернём результат\n return res;\n};\n\n//-----------\n//Тело модуля\n//-----------\n\n//Обработчики действий\nconst handlers = {\n //Формирование заголовка\n [P8P_TABLE_AT.SET_HEADER]: (state, {\n payload\n }) => {\n const {\n columnsDef,\n expandable,\n fixedColumns,\n objectsCopier\n } = payload;\n return {\n ...state,\n ...buildHeaderDef({\n columnsDef,\n expandable,\n fixedColumns,\n objectsCopier\n })\n };\n },\n [P8P_TABLE_AT.TOGGLE_HEADER_EXPAND]: (state, {\n payload\n }) => {\n const {\n columnName,\n expandable,\n fixedColumns,\n objectsCopier\n } = payload;\n const columnsDef = objectsCopier(state.columnsDef);\n columnsDef.forEach(columnDef => columnDef.name == columnName ? columnDef.expanded = !columnDef.expanded : null);\n const [displayLevels, displayLevelsColumns, displayDataColumns, displayDataColumnsCount, displayFixedColumnsCount] = buildDisplay({\n columnsDef,\n expandable,\n fixedColumns\n });\n return {\n ...state,\n columnsDef,\n displayLevels,\n displayLevelsColumns,\n displayDataColumns,\n displayDataColumnsCount,\n displayFixedColumnsCount\n };\n },\n //Обработчик по умолчанию\n DEFAULT: state => state\n};\n\n//----------------\n//Интерфейс модуля\n//----------------\n\n//Константы\n\n\n//Редьюсер состояния\nconst p8pTableReducer = (state, action) => {\n //Подберём обработчик\n const handle = handlers[action.type] || handlers.DEFAULT;\n //Исполним его\n return handle(state, action);\n};\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/components/p8p_table_reducer.js?"); /***/ }), @@ -3711,7 +3711,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ dataCellRender: () => (/* binding */ dataCellRender),\n/* harmony export */ groupCellRender: () => (/* binding */ groupCellRender)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Stack/Stack.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Icon/Icon.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Link/Link.js\");\n/* harmony import */ var _core_utils__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../core/utils */ \"./app/core/utils.js\");\n/*\r\n Парус 8 - Панели мониторинга - ПУП - Графики проектов\r\n Дополнительная разметка и вёрстка клиентских элементов\r\n*/\n\n//---------------------\n//Подключение библиотек\n//---------------------\n\n //Классы React\n //Интерфейсные компоненты\n //Вспомогательные процедуры и функции\n\n//---------\n//Константы\n//---------\n\n//Шаблон имени ячейки месяца\nconst MONTH_COLUMN_REG_EXP = /[0-9]{4}_[0-9]{1,2}/;\n\n//-----------\n//Тело модуля\n//-----------\n\n//Формирование значения для плашки этапа\nconst formatStageItemValue = (state, text) => {\n const [stateText, icon] = state == 0 ? [\"Зарегистрирован\", \"app_registration\"] : state == 1 ? [\"Открыт\", \"lock_open\"] : state == 2 ? [\"Закрыт\", \"lock_outline\"] : state == 3 ? [\"Согласован\", \"thumb_up_alt\"] : state == 4 ? [\"Исполнение прекращено\", \"block\"] : [\"Остановлен\", \"do_not_disturb_on\"];\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n direction: \"row\",\n gap: 0.5,\n alignItems: \"center\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n title: stateText\n }, icon), text);\n};\n\n//Генерация представления ячейки заголовка группы\nconst groupCellRender = ({\n group,\n pOnlineShowDocument\n}) => ({\n cellStyle: {\n padding: \"2px\"\n },\n data: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n component: \"button\",\n variant: \"body2\",\n align: \"left\",\n onClick: () => pOnlineShowDocument({\n unitCode: \"Projects\",\n document: group.name\n })\n }, group.caption)\n});\n\n//Генерация представления ячейки c данными\nconst dataCellRender = ({\n row,\n columnDef,\n pOnlineShowDocument\n}) => {\n if (MONTH_COLUMN_REG_EXP.test(columnDef.name)) {\n const dF = new Date(row.DFROM);\n const dT = new Date(row.DTO);\n const [year, month] = columnDef.name.split(\"_\");\n const mF = new Date(year, month - 1, 1);\n const mT = new Date(year, month, 0);\n let cellStyle = {};\n let cellProps = {};\n let data = null;\n if (dF <= mF && dT >= mT || dF >= mF && dF <= mT || dT >= mF && dT <= mT) {\n if (year == dF.getFullYear() && month == dF.getMonth() + 1) data = formatStageItemValue(row.NSTATE, row.SRESP);\n cellStyle = {\n backgroundColor: row.NSTATE == 0 ? \"lightyellow\" : row.NSTATE == 1 ? \"lightgreen\" : \"lightblue\",\n cursor: \"pointer\"\n };\n cellProps = {\n title: `${(0,_core_utils__WEBPACK_IMPORTED_MODULE_1__.formatDateRF)(dF)} - ${(0,_core_utils__WEBPACK_IMPORTED_MODULE_1__.formatDateRF)(dT)}`,\n onClick: () => pOnlineShowDocument({\n unitCode: \"ProjectsStages\",\n document: row.NRN\n })\n };\n }\n return {\n cellStyle: {\n padding: \"2px\",\n maxWidth: \"30px\",\n overflow: \"visible\",\n fontSize: \"smaller\",\n whiteSpace: \"nowrap\",\n ...cellStyle\n },\n cellProps,\n data\n };\n }\n switch (columnDef.name) {\n case \"SJOB\":\n return {\n cellProps: {\n title: row[columnDef.name]\n },\n cellStyle: {\n padding: \"2px\",\n paddingLeft: \"10px\",\n maxWidth: \"300px\",\n textOverflow: \"ellipsis\",\n overflow: \"hidden\",\n whiteSpace: \"pre\",\n fontSize: \"smaller\"\n }\n };\n }\n};\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/panels/prj_graph/layouts.js?"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ dataCellRender: () => (/* binding */ dataCellRender),\n/* harmony export */ groupCellRender: () => (/* binding */ groupCellRender)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Stack/Stack.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Icon/Icon.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Link/Link.js\");\n/* harmony import */ var _core_utils__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../core/utils */ \"./app/core/utils.js\");\n/*\r\n Парус 8 - Панели мониторинга - ПУП - Графики проектов\r\n Дополнительная разметка и вёрстка клиентских элементов\r\n*/\n\n//---------------------\n//Подключение библиотек\n//---------------------\n\n //Классы React\n //Интерфейсные компоненты\n //Вспомогательные процедуры и функции\n\n//---------\n//Константы\n//---------\n\n//Шаблон имени ячейки месяца\nconst MONTH_COLUMN_REG_EXP = /[0-9]{4}_[0-9]{1,2}/;\n\n//Стили\nconst STYLES = {\n GROUP_CELL: {\n padding: \"2px\"\n },\n GROUP_CELL_LINK: {\n textOverflow: \"ellipsis\",\n overflow: \"hidden\",\n whiteSpace: \"pre\",\n minWidth: \"800px\",\n maxWidth: \"800px\"\n },\n MONTH_CELL: {\n padding: \"2px\",\n maxWidth: \"30px\",\n overflow: \"visible\",\n fontSize: \"smaller\",\n whiteSpace: \"nowrap\"\n },\n MONTH_CELL_FILLED: state => ({\n backgroundColor: state == 0 ? \"lightyellow\" : state == 1 ? \"lightgreen\" : \"lightblue\",\n cursor: \"pointer\"\n }),\n JOB_CELL: {\n padding: \"2px\",\n paddingLeft: \"10px\",\n maxWidth: \"300px\",\n textOverflow: \"ellipsis\",\n overflow: \"hidden\",\n whiteSpace: \"pre\",\n fontSize: \"smaller\"\n }\n};\n\n//-----------\n//Тело модуля\n//-----------\n\n//Формирование значения для плашки этапа\nconst formatStageItemValue = (state, text) => {\n const [stateText, icon] = state == 0 ? [\"Зарегистрирован\", \"app_registration\"] : state == 1 ? [\"Открыт\", \"lock_open\"] : state == 2 ? [\"Закрыт\", \"lock_outline\"] : state == 3 ? [\"Согласован\", \"thumb_up_alt\"] : state == 4 ? [\"Исполнение прекращено\", \"block\"] : [\"Остановлен\", \"do_not_disturb_on\"];\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n direction: \"row\",\n gap: 0.5,\n alignItems: \"center\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n title: stateText\n }, icon), text);\n};\n\n//Генерация представления ячейки заголовка группы\nconst groupCellRender = ({\n group,\n pOnlineShowDocument\n}) => ({\n cellStyle: STYLES.GROUP_CELL,\n data: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n component: \"button\",\n variant: \"body2\",\n align: \"left\",\n sx: STYLES.GROUP_CELL_LINK,\n title: group.caption,\n onClick: () => pOnlineShowDocument({\n unitCode: \"Projects\",\n document: group.name\n })\n }, group.caption)\n});\n\n//Генерация представления ячейки c данными\nconst dataCellRender = ({\n row,\n columnDef,\n pOnlineShowDocument\n}) => {\n if (MONTH_COLUMN_REG_EXP.test(columnDef.name)) {\n const dF = new Date(row.DFROM);\n const dT = new Date(row.DTO);\n const [year, month] = columnDef.name.split(\"_\");\n const mF = new Date(year, month - 1, 1);\n const mT = new Date(year, month, 0);\n let cellStyle = {};\n let cellProps = {};\n let data = null;\n if (dF <= mF && dT >= mT || dF >= mF && dF <= mT || dT >= mF && dT <= mT) {\n if (year == dF.getFullYear() && month == dF.getMonth() + 1) data = formatStageItemValue(row.NSTATE, row.SRESP);\n cellStyle = STYLES.MONTH_CELL_FILLED(row.NSTATE);\n cellProps = {\n title: `${(0,_core_utils__WEBPACK_IMPORTED_MODULE_1__.formatDateRF)(dF)} - ${(0,_core_utils__WEBPACK_IMPORTED_MODULE_1__.formatDateRF)(dT)}`,\n onClick: () => pOnlineShowDocument({\n unitCode: \"ProjectsStages\",\n document: row.NRN\n })\n };\n }\n return {\n cellStyle: {\n ...STYLES.MONTH_CELL,\n ...cellStyle\n },\n cellProps,\n data\n };\n }\n switch (columnDef.name) {\n case \"SJOB\":\n return {\n cellProps: {\n title: row[columnDef.name]\n },\n cellStyle: STYLES.JOB_CELL\n };\n }\n};\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/panels/prj_graph/layouts.js?"); /***/ }), @@ -3722,7 +3722,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ PrjGraph: () => (/* binding */ PrjGraph)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Grid/Grid.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Box/Box.js\");\n/* harmony import */ var _components_p8p_data_grid__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../components/p8p_data_grid */ \"./app/components/p8p_data_grid.js\");\n/* harmony import */ var _config_wrapper__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../config_wrapper */ \"./app/config_wrapper.js\");\n/* harmony import */ var _context_application__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../context/application */ \"./app/context/application.js\");\n/* harmony import */ var _context_backend__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../context/backend */ \"./app/context/backend.js\");\n/* harmony import */ var _layouts__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./layouts */ \"./app/panels/prj_graph/layouts.js\");\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n/*\r\n Парус 8 - Панели мониторинга - ПУП - Графики проектов\r\n Панель мониторинга: Корневая панель графиков проекта\r\n*/\n\n//---------------------\n//Подключение библиотек\n//---------------------\n\n //Классы React\n //Интерфейсные элементы\n //Таблица данных\n //Подключение компонентов к настройкам приложения\n //Контекст приложения\n //Контекст взаимодействия с сервером\n //Дополнительная разметка и вёрстка клиентских элементов\n\n//-----------\n//Тело модуля\n//-----------\n\n//Графики проектов\nconst PrjGraph = () => {\n //Собственное состояние - таблица данных\n const [dataGrid, setdataGrid] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({\n dataLoaded: false,\n columnsDef: [],\n groups: [],\n rows: [],\n reload: true\n });\n\n //Подключение к контексту приложения\n const {\n pOnlineShowDocument\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_application__WEBPACK_IMPORTED_MODULE_3__[\"ApplicationСtx\"]);\n\n //Подключение к контексту взаимодействия с сервером\n const {\n executeStored\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_backend__WEBPACK_IMPORTED_MODULE_4__[\"BackEndСtx\"]);\n\n //Загрузка данных таблицы с сервера\n const loadData = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async () => {\n if (dataGrid.reload) {\n const data = await executeStored({\n stored: \"PKG_P8PANELS_PROJECTS.GRAPH\",\n args: {},\n respArg: \"COUT\"\n });\n setdataGrid(pv => ({\n ...pv,\n columnsDef: data.XCOLUMNS_DEF ? [...data.XCOLUMNS_DEF] : pv.columnsDef,\n rows: [...(data.XROWS || [])],\n groups: [...(data.XGROUPS || [])],\n dataLoaded: true,\n reload: false\n }));\n }\n }, [dataGrid.reload, executeStored]);\n\n //При необходимости обновить данные таблицы\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n loadData();\n }, [dataGrid.reload, loadData]);\n\n //Генерация содержимого\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n container: true,\n spacing: 1\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n item: true,\n xs: 12\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_7__[\"default\"], {\n p: 5\n }, dataGrid.dataLoaded ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_components_p8p_data_grid__WEBPACK_IMPORTED_MODULE_1__.P8PDataGrid, _extends({}, _config_wrapper__WEBPACK_IMPORTED_MODULE_2__.P8P_DATA_GRID_CONFIG_PROPS, {\n columnsDef: dataGrid.columnsDef,\n groups: dataGrid.groups,\n rows: dataGrid.rows,\n size: _components_p8p_data_grid__WEBPACK_IMPORTED_MODULE_1__.P8P_DATA_GRID_SIZE.LARGE,\n reloading: dataGrid.reload,\n dataCellRender: prms => (0,_layouts__WEBPACK_IMPORTED_MODULE_5__.dataCellRender)({\n ...prms,\n pOnlineShowDocument\n }),\n groupCellRender: prms => (0,_layouts__WEBPACK_IMPORTED_MODULE_5__.groupCellRender)({\n ...prms,\n pOnlineShowDocument\n }),\n containerComponentProps: {\n elevation: 6,\n sx: {\n overflowX: \"visible\"\n }\n }\n })) : null))));\n};\n\n//----------------\n//Интерфейс модуля\n//----------------\n\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/panels/prj_graph/prj_graph.js?"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ PrjGraph: () => (/* binding */ PrjGraph)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Grid/Grid.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Box/Box.js\");\n/* harmony import */ var _components_p8p_data_grid__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../components/p8p_data_grid */ \"./app/components/p8p_data_grid.js\");\n/* harmony import */ var _config_wrapper__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../config_wrapper */ \"./app/config_wrapper.js\");\n/* harmony import */ var _context_application__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../context/application */ \"./app/context/application.js\");\n/* harmony import */ var _context_backend__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../context/backend */ \"./app/context/backend.js\");\n/* harmony import */ var _layouts__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./layouts */ \"./app/panels/prj_graph/layouts.js\");\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n/*\r\n Парус 8 - Панели мониторинга - ПУП - Графики проектов\r\n Панель мониторинга: Корневая панель графиков проекта\r\n*/\n\n//---------------------\n//Подключение библиотек\n//---------------------\n\n //Классы React\n //Интерфейсные элементы\n //Таблица данных\n //Подключение компонентов к настройкам приложения\n //Контекст приложения\n //Контекст взаимодействия с сервером\n //Дополнительная разметка и вёрстка клиентских элементов\n\n//---------\n//Константы\n//---------\n\n//Стили\nconst STYLES = {\n DATA_GRID_CONTAINER: {\n minWidth: \"95vw\",\n maxWidth: \"95vw\",\n minHeight: \"87vh\",\n maxHeight: \"87vh\"\n }\n};\n\n//-----------\n//Тело модуля\n//-----------\n\n//Графики проектов\nconst PrjGraph = () => {\n //Собственное состояние - таблица данных\n const [dataGrid, setdataGrid] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({\n dataLoaded: false,\n columnsDef: [],\n groups: [],\n rows: [],\n reload: true,\n fixedHeader: false,\n fixedColumns: 0\n });\n\n //Подключение к контексту приложения\n const {\n pOnlineShowDocument\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_application__WEBPACK_IMPORTED_MODULE_3__[\"ApplicationСtx\"]);\n\n //Подключение к контексту взаимодействия с сервером\n const {\n executeStored\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_backend__WEBPACK_IMPORTED_MODULE_4__[\"BackEndСtx\"]);\n\n //Загрузка данных таблицы с сервера\n const loadData = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async () => {\n if (dataGrid.reload) {\n const data = await executeStored({\n stored: \"PKG_P8PANELS_PROJECTS.GRAPH\",\n args: {},\n respArg: \"COUT\"\n });\n setdataGrid(pv => ({\n ...pv,\n fixedHeader: data.XDATA_GRID.fixedHeader,\n fixedColumns: data.XDATA_GRID.fixedColumns,\n columnsDef: data.XCOLUMNS_DEF ? [...data.XCOLUMNS_DEF] : pv.columnsDef,\n rows: [...(data.XROWS || [])],\n groups: [...(data.XGROUPS || [])],\n dataLoaded: true,\n reload: false\n }));\n }\n }, [dataGrid.reload, executeStored]);\n\n //При необходимости обновить данные таблицы\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n loadData();\n }, [dataGrid.reload, loadData]);\n\n //Генерация содержимого\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n container: true,\n spacing: 1\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n item: true,\n xs: 12\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_7__[\"default\"], {\n pt: 1,\n display: \"flex\",\n justifyContent: \"center\",\n alignItems: \"center\"\n }, dataGrid.dataLoaded ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_components_p8p_data_grid__WEBPACK_IMPORTED_MODULE_1__.P8PDataGrid, _extends({}, _config_wrapper__WEBPACK_IMPORTED_MODULE_2__.P8P_DATA_GRID_CONFIG_PROPS, {\n columnsDef: dataGrid.columnsDef,\n groups: dataGrid.groups,\n rows: dataGrid.rows,\n size: _components_p8p_data_grid__WEBPACK_IMPORTED_MODULE_1__.P8P_DATA_GRID_SIZE.LARGE,\n reloading: dataGrid.reload,\n fixedHeader: dataGrid.fixedHeader,\n fixedColumns: dataGrid.fixedColumns,\n dataCellRender: prms => (0,_layouts__WEBPACK_IMPORTED_MODULE_5__.dataCellRender)({\n ...prms,\n pOnlineShowDocument\n }),\n groupCellRender: prms => (0,_layouts__WEBPACK_IMPORTED_MODULE_5__.groupCellRender)({\n ...prms,\n pOnlineShowDocument\n }),\n containerComponentProps: {\n elevation: 3,\n sx: STYLES.DATA_GRID_CONTAINER\n }\n })) : null))));\n};\n\n//----------------\n//Интерфейс модуля\n//----------------\n\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/panels/prj_graph/prj_graph.js?"); /***/ }), @@ -3843,7 +3843,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ DataGrid: () => (/* binding */ DataGrid),\n/* harmony export */ groupCellRender: () => (/* binding */ groupCellRender)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! prop-types */ \"./node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_10___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_10__);\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Stack/Stack.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Icon/Icon.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Typography/Typography.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Grid/Grid.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Box/Box.js\");\n/* harmony import */ var _core_utils__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../core/utils */ \"./app/core/utils.js\");\n/* harmony import */ var _components_p8p_data_grid__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../components/p8p_data_grid */ \"./app/components/p8p_data_grid.js\");\n/* harmony import */ var _config_wrapper__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../config_wrapper */ \"./app/config_wrapper.js\");\n/* harmony import */ var _context_backend__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../context/backend */ \"./app/context/backend.js\");\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n/*\r\n Парус 8 - Панели мониторинга - Примеры для разработчиков\r\n Пример: Таблица данных \"P8PDataGrid\"\r\n*/\n\n//---------------------\n//Подключение библиотек\n//---------------------\n\n //Классы React\n //Контроль свойств компонента\n //Интерфейсные элементы\n //Вспомогательные процедуры и функции\n //Таблица данных\n //Подключение компонентов к настройкам приложения\n //Контекст взаимодействия с сервером\n\n//---------\n//Константы\n//---------\n\n//Размер страницы данных\nconst DATA_GRID_PAGE_SIZE = 5;\n\n//Стили\nconst STYLES = {\n CONTAINER: {\n textAlign: \"center\",\n paddingTop: \"20px\"\n },\n TITLE: {\n paddingBottom: \"15px\"\n }\n};\n\n//---------------------------------------------\n//Вспомогательные функции форматирования данных\n//---------------------------------------------\n\n//Формирование значения для колонки \"Тип контрагента\"\nconst formatAgentTypeValue = (value, addText = false) => {\n const [text, icon] = value == 0 ? [\"Юридическое лицо\", \"business\"] : [\"Физическое лицо\", \"person\"];\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_5__[\"default\"], {\n direction: \"row\",\n gap: 0.5,\n alignItems: \"center\",\n justifyContent: \"center\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n title: text\n }, icon), addText == true ? text : null);\n};\n\n//Форматирование значений колонок\nconst valueFormatter = ({\n value,\n columnDef\n}) => {\n switch (columnDef.name) {\n case \"NAGNTYPE\":\n return formatAgentTypeValue(value, true);\n }\n return value;\n};\n\n//Генерация представления ячейки c данными\nconst dataCellRender = ({\n row,\n columnDef\n}) => {\n switch (columnDef.name) {\n case \"NAGNTYPE\":\n return {\n cellProps: {\n align: \"center\"\n },\n data: formatAgentTypeValue(row[columnDef.name], false)\n };\n }\n};\n\n//Генерация представления ячейки заголовка\nconst headCellRender = ({\n columnDef\n}) => {\n switch (columnDef.name) {\n case \"NAGNTYPE\":\n return {\n stackProps: {\n justifyContent: \"center\"\n },\n cellProps: {\n align: \"center\"\n }\n };\n }\n};\n\n//Генерация представления ячейки заголовка группы\nconst groupCellRender = () => ({\n cellStyle: {\n padding: \"2px\"\n }\n});\n\n//-----------\n//Тело модуля\n//-----------\n\n//Пример: Таблица данных \"P8PDataGrid\"\nconst DataGrid = ({\n title\n}) => {\n //Собственное состояние - таблица данных\n const [dataGrid, setdataGrid] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({\n dataLoaded: false,\n columnsDef: [],\n filters: null,\n orders: null,\n groups: [],\n rows: [],\n reload: true,\n pageNumber: 1,\n morePages: true\n });\n\n //Подключение к контексту взаимодействия с сервером\n const {\n executeStored,\n SERV_DATA_TYPE_CLOB\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_backend__WEBPACK_IMPORTED_MODULE_4__[\"BackEndСtx\"]);\n\n //Загрузка данных таблицы с сервера\n const loadData = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async () => {\n if (dataGrid.reload) {\n const data = await executeStored({\n stored: \"PKG_P8PANELS_SAMPLES.DATA_GRID\",\n args: {\n CFILTERS: {\n VALUE: (0,_core_utils__WEBPACK_IMPORTED_MODULE_1__.object2Base64XML)(dataGrid.filters, {\n arrayNodeName: \"filters\"\n }),\n SDATA_TYPE: SERV_DATA_TYPE_CLOB\n },\n CORDERS: {\n VALUE: (0,_core_utils__WEBPACK_IMPORTED_MODULE_1__.object2Base64XML)(dataGrid.orders, {\n arrayNodeName: \"orders\"\n }),\n SDATA_TYPE: SERV_DATA_TYPE_CLOB\n },\n NPAGE_NUMBER: dataGrid.pageNumber,\n NPAGE_SIZE: DATA_GRID_PAGE_SIZE,\n NINCLUDE_DEF: dataGrid.dataLoaded ? 0 : 1\n },\n respArg: \"COUT\"\n });\n setdataGrid(pv => ({\n ...pv,\n columnsDef: data.XCOLUMNS_DEF ? [...data.XCOLUMNS_DEF] : pv.columnsDef,\n rows: pv.pageNumber == 1 ? [...(data.XROWS || [])] : [...pv.rows, ...(data.XROWS || [])],\n groups: data.XGROUPS ? pv.pageNumber == 1 ? [...data.XGROUPS] : [...pv.groups, ...data.XGROUPS.filter(g => !pv.groups.find(pg => pg.name == g.name))] : [...pv.groups],\n dataLoaded: true,\n reload: false,\n morePages: (data.XROWS || []).length >= DATA_GRID_PAGE_SIZE\n }));\n }\n }, [dataGrid.reload, dataGrid.filters, dataGrid.orders, dataGrid.dataLoaded, dataGrid.pageNumber, executeStored, SERV_DATA_TYPE_CLOB]);\n\n //При изменении состояния фильтра\n const handleFilterChanged = ({\n filters\n }) => setdataGrid(pv => ({\n ...pv,\n filters: [...filters],\n pageNumber: 1,\n reload: true\n }));\n\n //При изменении состояния сортировки\n const handleOrderChanged = ({\n orders\n }) => setdataGrid(pv => ({\n ...pv,\n orders: [...orders],\n pageNumber: 1,\n reload: true\n }));\n\n //При изменении количества отображаемых страниц\n const handlePagesCountChanged = () => setdataGrid(pv => ({\n ...pv,\n pageNumber: pv.pageNumber + 1,\n reload: true\n }));\n\n //При необходимости обновить данные таблицы\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n loadData();\n }, [dataGrid.reload, loadData]);\n\n //Генерация содержимого\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n style: STYLES.CONTAINER\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_7__[\"default\"], {\n sx: STYLES.TITLE,\n variant: \"h6\"\n }, title), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_8__[\"default\"], {\n container: true,\n spacing: 1,\n pt: 5\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_8__[\"default\"], {\n item: true,\n xs: 12\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_9__[\"default\"], {\n p: 5\n }, dataGrid.dataLoaded ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_components_p8p_data_grid__WEBPACK_IMPORTED_MODULE_2__.P8PDataGrid, _extends({}, _config_wrapper__WEBPACK_IMPORTED_MODULE_3__.P8P_DATA_GRID_CONFIG_PROPS, {\n columnsDef: dataGrid.columnsDef,\n groups: dataGrid.groups,\n rows: dataGrid.rows,\n size: _components_p8p_data_grid__WEBPACK_IMPORTED_MODULE_2__.P8P_DATA_GRID_SIZE.LARGE,\n filtersInitial: dataGrid.filters,\n morePages: dataGrid.morePages,\n reloading: dataGrid.reload,\n valueFormatter: valueFormatter,\n headCellRender: headCellRender,\n dataCellRender: dataCellRender,\n groupCellRender: groupCellRender,\n onOrderChanged: handleOrderChanged,\n onFilterChanged: handleFilterChanged,\n onPagesCountChanged: handlePagesCountChanged\n })) : null))));\n};\n\n//Контроль свойств - Пример: Таблица данных \"P8PDataGrid\"\nDataGrid.propTypes = {\n title: (prop_types__WEBPACK_IMPORTED_MODULE_10___default().string).isRequired\n};\n\n//----------------\n//Интерфейс модуля\n//----------------\n\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/panels/samples/data_grid.js?"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ DataGrid: () => (/* binding */ DataGrid),\n/* harmony export */ groupCellRender: () => (/* binding */ groupCellRender)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! prop-types */ \"./node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_12___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_12__);\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Stack/Stack.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Icon/Icon.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Typography/Typography.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Grid/Grid.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Box/Box.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Button/Button.js\");\n/* harmony import */ var _core_utils__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../core/utils */ \"./app/core/utils.js\");\n/* harmony import */ var _components_p8p_data_grid__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../components/p8p_data_grid */ \"./app/components/p8p_data_grid.js\");\n/* harmony import */ var _config_wrapper__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../config_wrapper */ \"./app/config_wrapper.js\");\n/* harmony import */ var _context_backend__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../context/backend */ \"./app/context/backend.js\");\n/* harmony import */ var _context_application__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../context/application */ \"./app/context/application.js\");\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n/*\r\n Парус 8 - Панели мониторинга - Примеры для разработчиков\r\n Пример: Таблица данных \"P8PDataGrid\"\r\n*/\n\n//---------------------\n//Подключение библиотек\n//---------------------\n\n //Классы React\n //Контроль свойств компонента\n //Интерфейсные элементы\n //Вспомогательные процедуры и функции\n //Таблица данных\n //Подключение компонентов к настройкам приложения\n //Контекст взаимодействия с сервером\n //Контекст приложения\n\n//---------\n//Константы\n//---------\n\n//Размер страницы данных\nconst DATA_GRID_PAGE_SIZE = 5;\n\n//Стили\nconst STYLES = {\n CONTAINER: {\n textAlign: \"center\",\n paddingTop: \"20px\"\n },\n TITLE: {\n paddingBottom: \"15px\"\n },\n DATA_GRID_CONTAINER: {\n maxWidth: 700,\n maxHeight: 500,\n minHeight: 500\n }\n};\n\n//---------------------------------------------\n//Вспомогательные функции форматирования данных\n//---------------------------------------------\n\n//Формирование значения для колонки \"Тип контрагента\"\nconst formatAgentTypeValue = (value, addText = false) => {\n const [text, icon] = value == 0 ? [\"Юридическое лицо\", \"business\"] : [\"Физическое лицо\", \"person\"];\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n direction: \"row\",\n gap: 0.5,\n alignItems: \"center\",\n justifyContent: \"center\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_7__[\"default\"], {\n title: text\n }, icon), addText == true ? text : null);\n};\n\n//Форматирование значений колонок\nconst valueFormatter = ({\n value,\n columnDef\n}) => {\n switch (columnDef.name) {\n case \"NAGNTYPE\":\n return formatAgentTypeValue(value, true);\n }\n return value;\n};\n\n//Генерация представления ячейки c данными\nconst dataCellRender = ({\n row,\n columnDef\n}) => {\n switch (columnDef.name) {\n case \"NAGNTYPE\":\n return {\n cellProps: {\n align: \"center\"\n },\n data: formatAgentTypeValue(row[columnDef.name], false)\n };\n }\n};\n\n//Генерация представления ячейки заголовка\nconst headCellRender = ({\n columnDef\n}) => {\n switch (columnDef.name) {\n case \"NAGNTYPE\":\n return {\n stackProps: {\n justifyContent: \"center\"\n },\n cellProps: {\n align: \"center\"\n }\n };\n }\n};\n\n//Генерация представления ячейки заголовка группы\nconst groupCellRender = () => ({\n cellStyle: {\n padding: \"2px\"\n }\n});\n\n//-----------\n//Тело модуля\n//-----------\n\n//Пример: Таблица данных \"P8PDataGrid\"\nconst DataGrid = ({\n title\n}) => {\n //Собственное состояние - таблица данных\n const [dataGrid, setdataGrid] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({\n dataLoaded: false,\n columnsDef: [],\n filters: null,\n orders: null,\n groups: [],\n rows: [],\n reload: true,\n pageNumber: 1,\n morePages: true,\n fixedHeader: false,\n fixedColumns: 0\n });\n\n //Подключение к контексту взаимодействия с сервером\n const {\n executeStored,\n SERV_DATA_TYPE_CLOB\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_backend__WEBPACK_IMPORTED_MODULE_4__[\"BackEndСtx\"]);\n\n //Подключение к контексту приложения\n const {\n pOnlineShowDocument\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_application__WEBPACK_IMPORTED_MODULE_5__[\"ApplicationСtx\"]);\n\n //Загрузка данных таблицы с сервера\n const loadData = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async () => {\n if (dataGrid.reload) {\n const data = await executeStored({\n stored: \"PKG_P8PANELS_SAMPLES.DATA_GRID\",\n args: {\n CFILTERS: {\n VALUE: (0,_core_utils__WEBPACK_IMPORTED_MODULE_1__.object2Base64XML)(dataGrid.filters, {\n arrayNodeName: \"filters\"\n }),\n SDATA_TYPE: SERV_DATA_TYPE_CLOB\n },\n CORDERS: {\n VALUE: (0,_core_utils__WEBPACK_IMPORTED_MODULE_1__.object2Base64XML)(dataGrid.orders, {\n arrayNodeName: \"orders\"\n }),\n SDATA_TYPE: SERV_DATA_TYPE_CLOB\n },\n NPAGE_NUMBER: dataGrid.pageNumber,\n NPAGE_SIZE: DATA_GRID_PAGE_SIZE,\n NINCLUDE_DEF: dataGrid.dataLoaded ? 0 : 1\n },\n respArg: \"COUT\"\n });\n setdataGrid(pv => ({\n ...pv,\n fixedHeader: data.XDATA_GRID.fixedHeader,\n fixedColumns: data.XDATA_GRID.fixedColumns,\n columnsDef: data.XCOLUMNS_DEF ? [...data.XCOLUMNS_DEF] : pv.columnsDef,\n rows: pv.pageNumber == 1 ? [...(data.XROWS || [])] : [...pv.rows, ...(data.XROWS || [])],\n groups: data.XGROUPS ? pv.pageNumber == 1 ? [...data.XGROUPS] : [...pv.groups, ...data.XGROUPS.filter(g => !pv.groups.find(pg => pg.name == g.name))] : [...pv.groups],\n dataLoaded: true,\n reload: false,\n morePages: (data.XROWS || []).length >= DATA_GRID_PAGE_SIZE\n }));\n }\n }, [dataGrid.reload, dataGrid.filters, dataGrid.orders, dataGrid.dataLoaded, dataGrid.pageNumber, executeStored, SERV_DATA_TYPE_CLOB]);\n\n //При изменении состояния фильтра\n const handleFilterChanged = ({\n filters\n }) => setdataGrid(pv => ({\n ...pv,\n filters: [...filters],\n pageNumber: 1,\n reload: true\n }));\n\n //При изменении состояния сортировки\n const handleOrderChanged = ({\n orders\n }) => setdataGrid(pv => ({\n ...pv,\n orders: [...orders],\n pageNumber: 1,\n reload: true\n }));\n\n //При изменении количества отображаемых страниц\n const handlePagesCountChanged = () => setdataGrid(pv => ({\n ...pv,\n pageNumber: pv.pageNumber + 1,\n reload: true\n }));\n\n //При нажатии на копку контрагента\n const handleAgnButtonClicked = agnCode => pOnlineShowDocument({\n unitCode: \"AGNLIST\",\n document: agnCode,\n inRnParameter: \"in_AGNABBR\"\n });\n\n //При необходимости обновить данные таблицы\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n loadData();\n }, [dataGrid.reload, loadData]);\n\n //Генерация содержимого\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n style: STYLES.CONTAINER\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_8__[\"default\"], {\n sx: STYLES.TITLE,\n variant: \"h6\"\n }, title), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_9__[\"default\"], {\n container: true,\n spacing: 1,\n pt: 5\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_9__[\"default\"], {\n item: true,\n xs: 12\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_10__[\"default\"], {\n p: 5,\n display: \"flex\",\n justifyContent: \"center\",\n alignItems: \"center\"\n }, dataGrid.dataLoaded ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_components_p8p_data_grid__WEBPACK_IMPORTED_MODULE_2__.P8PDataGrid, _extends({}, _config_wrapper__WEBPACK_IMPORTED_MODULE_3__.P8P_DATA_GRID_CONFIG_PROPS, {\n containerComponentProps: {\n elevation: 6,\n style: STYLES.DATA_GRID_CONTAINER\n },\n columnsDef: dataGrid.columnsDef,\n groups: dataGrid.groups,\n rows: dataGrid.rows,\n size: _components_p8p_data_grid__WEBPACK_IMPORTED_MODULE_2__.P8P_DATA_GRID_SIZE.LARGE,\n fixedHeader: dataGrid.fixedHeader,\n fixedColumns: dataGrid.fixedColumns,\n filtersInitial: dataGrid.filters,\n morePages: dataGrid.morePages,\n reloading: dataGrid.reload,\n valueFormatter: valueFormatter,\n headCellRender: headCellRender,\n dataCellRender: dataCellRender,\n groupCellRender: groupCellRender,\n onOrderChanged: handleOrderChanged,\n onFilterChanged: handleFilterChanged,\n onPagesCountChanged: handlePagesCountChanged,\n expandable: true,\n rowExpandRender: ({\n row\n }) => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_11__[\"default\"], {\n onClick: () => handleAgnButtonClicked(row.SAGNABBR)\n }, \"\\u041F\\u043E\\u043A\\u0430\\u0437\\u0430\\u0442\\u044C \\u0432 \\u0440\\u0430\\u0437\\u0434\\u0435\\u043B\\u0435\")\n })) : null))));\n};\n\n//Контроль свойств - Пример: Таблица данных \"P8PDataGrid\"\nDataGrid.propTypes = {\n title: (prop_types__WEBPACK_IMPORTED_MODULE_12___default().string).isRequired\n};\n\n//----------------\n//Интерфейс модуля\n//----------------\n\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/panels/samples/data_grid.js?"); /***/ }), From 7cf105b23630f2c692fdd6ec51f915ea571f0c4f Mon Sep 17 00:00:00 2001 From: Dollerino Date: Mon, 6 May 2024 16:20:24 +0300 Subject: [PATCH 27/76] =?UTF-8?q?=D0=A6=D0=98=D0=A2=D0=9A-842=20-=20=D0=94?= =?UTF-8?q?=D0=BE=D1=80=D0=B0=D0=B1=D0=BE=D1=82=D0=BA=D0=B0=20=D0=BF=D0=B0?= =?UTF-8?q?=D0=BD=D0=B5=D0=BB=D0=B8=20"=D0=9F=D1=80=D0=BE=D0=B8=D0=B7?= =?UTF-8?q?=D0=B2=D0=BE=D0=B4=D1=81=D1=82=D0=B2=D0=B5=D0=BD=D0=BD=D0=B0?= =?UTF-8?q?=D1=8F=20=D0=BF=D1=80=D0=BE=D0=B3=D1=80=D0=B0=D0=BC=D0=BC=D0=B0?= =?UTF-8?q?"?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- db/PKG_P8PANELS_MECHREC.pck | 102 ++++++++++++++++++++---------------- 1 file changed, 57 insertions(+), 45 deletions(-) diff --git a/db/PKG_P8PANELS_MECHREC.pck b/db/PKG_P8PANELS_MECHREC.pck index 02ae678..fd78580 100644 --- a/db/PKG_P8PANELS_MECHREC.pck +++ b/db/PKG_P8PANELS_MECHREC.pck @@ -1524,6 +1524,7 @@ create or replace package body PKG_P8PANELS_MECHREC as SPLAN_TITLE PKG_STD.TSTRING; -- Заголовок плана NCOMPANY PKG_STD.TREF := GET_SESSION_COMPANY(); -- Организация сеанса NTASK_CLASS PKG_STD.TNUMBER; -- Класс задачи + NLEVEL_FILTER PKG_STD.TNUMBER; -- Уровень для фильтра /* Объединение значений в строковое представление */ function MAKE_INFO @@ -1547,49 +1548,58 @@ create or replace package body PKG_P8PANELS_MECHREC as /* Считывание максимального уровня иерархии плана по каталогу */ function PRODPLAN_MAX_LEVEL_GET ( - NCRN in number -- Рег. номер каталога планов - ) return number -- Максимальный уровень иерархии + NCRN in number -- Рег. номер каталога планов + ) return number -- Максимальный уровень иерархии is - NRESULT PKG_STD.TNUMBER; -- Максимальный уровень иерархии + NRESULT PKG_STD.TNUMBER := 1; -- Максимальный уровень иерархии + NTOTAL PKG_STD.TNUMBER := 0; -- Сумма документов по проверяемому уровню begin - /* Считываем максимальный уровень */ - begin - select max(level) - into NRESULT - from (select T.RN, - T.UP_LEVEL - from FCPRODPLAN P, - FCPRODPLANSP T, - FINSTATE FS - where P.CRN = NCRN - and P.CATEGORY = NFCPRODPLAN_CATEGORY - and P.STATUS = NFCPRODPLAN_STATUS - and FS.RN = P.TYPE - and FS.CODE = SFCPRODPLAN_TYPE - and exists (select /*+ INDEX(UP I_USERPRIV_JUR_PERS_ROLEID) */ - null - from USERPRIV UP - where UP.JUR_PERS = P.JUR_PERS - and UP.UNITCODE = 'CostProductPlans' - and UP.ROLEID in (select /*+ INDEX(UR I_USERROLES_AUTHID_FK) */ - UR.ROLEID - from USERROLES UR - where UR.AUTHID = UTILIZER()) - union all - select /*+ INDEX(UP I_USERPRIV_JUR_PERS_AUTHID) */ - null - from USERPRIV UP - where UP.JUR_PERS = P.JUR_PERS - and UP.UNITCODE = 'CostProductPlans' - and UP.AUTHID = UTILIZER()) - and T.PRN = P.RN - and T.MAIN_QUANT > 0) TMP - connect by prior TMP.RN = TMP.UP_LEVEL - start with TMP.UP_LEVEL is null; - exception - when others then - NRESULT := null; - end; + /* Цикл по уровням каталога планов */ + for REC in (select level, + count(TMP.RN) COUNT_DOCS + from (select T.RN, + T.UP_LEVEL + from FCPRODPLAN P, + FCPRODPLANSP T, + FINSTATE FS + where P.CRN = NCRN + and P.CATEGORY = NFCPRODPLAN_CATEGORY + and P.STATUS = NFCPRODPLAN_STATUS + and FS.RN = P.TYPE + and FS.CODE = SFCPRODPLAN_TYPE + and exists (select /*+ INDEX(UP I_USERPRIV_JUR_PERS_ROLEID) */ + null + from USERPRIV UP + where UP.JUR_PERS = P.JUR_PERS + and UP.UNITCODE = 'CostProductPlans' + and UP.ROLEID in (select /*+ INDEX(UR I_USERROLES_AUTHID_FK) */ + UR.ROLEID + from USERROLES UR + where UR.AUTHID = UTILIZER()) + union all + select /*+ INDEX(UP I_USERPRIV_JUR_PERS_AUTHID) */ + null + from USERPRIV UP + where UP.JUR_PERS = P.JUR_PERS + and UP.UNITCODE = 'CostProductPlans' + and UP.AUTHID = UTILIZER()) + and T.PRN = P.RN + and T.MAIN_QUANT > 0) TMP + connect by prior TMP.RN = TMP.UP_LEVEL + start with TMP.UP_LEVEL is null + group by level + order by level) + loop + /* Получаем количество задач с учетом текущего уровня */ + NTOTAL := NTOTAL + REC.COUNT_DOCS; + /* Если сумма документов по текущему уровню превышает максимальное количество задач */ + if (NTOTAL >= NMAX_TASKS) then + /* Выходим из цикла */ + exit; + end if; + /* Указываем текущий уровень */ + NRESULT := REC.LEVEL; + end loop; /* Возвращаем результат */ return NRESULT; end PRODPLAN_MAX_LEVEL_GET; @@ -1620,7 +1630,7 @@ create or replace package body PKG_P8PANELS_MECHREC as /* Инициализация динамических атрибутов */ procedure TASK_ATTRS_INIT ( - RG in out PKG_P8PANELS_VISUAL.TGANTT -- Описание диаграммы Ганта + RG in out nocopy PKG_P8PANELS_VISUAL.TGANTT -- Описание диаграммы Ганта ) is begin @@ -1696,7 +1706,7 @@ create or replace package body PKG_P8PANELS_MECHREC as /* Инициализация цветов */ procedure TASK_COLORS_INIT ( - RG in out PKG_P8PANELS_VISUAL.TGANTT -- Описание диаграммы Ганта + RG in out nocopy PKG_P8PANELS_VISUAL.TGANTT -- Описание диаграммы Ганта ) is begin @@ -1966,6 +1976,8 @@ create or replace package body PKG_P8PANELS_MECHREC as TASK_COLORS_INIT(RG => RG); /* Определяем максимальный уровень иерархии */ NMAX_LEVEL := PRODPLAN_MAX_LEVEL_GET(NCRN => NCRN); + /* Определяем уровень фильтра */ + NLEVEL_FILTER := COALESCE(NLEVEL, NMAX_LEVEL); /* Обходим данные */ for C in (select TMP.*, level NTASK_LEVEL @@ -2034,7 +2046,7 @@ create or replace package body PKG_P8PANELS_MECHREC as and FM.RN = T.MATRES and D.RN = FM.NOMENCLATURE and D.UMEAS_MAIN = DM.RN) TMP - where ((NLEVEL is null) or ((NLEVEL is not null) and (level <= NLEVEL))) + where level <= NLEVEL_FILTER connect by prior TMP.NRN = TMP.NUP_LEVEL start with TMP.NUP_LEVEL is null order siblings by TMP.DORDER_DATE asc) @@ -2108,7 +2120,7 @@ create or replace package body PKG_P8PANELS_MECHREC as where T.PRN = C.NPRN and T.UP_LEVEL = C.NRN and T.MAIN_QUANT > 0 - and ((NLEVEL is null) or ((NLEVEL is not null) and (NLEVEL >= C.NTASK_LEVEL + 1)))) + and NLEVEL_FILTER >= C.NTASK_LEVEL + 1) loop /* Добавляем зависимости */ PKG_P8PANELS_VISUAL.TGANTT_TASK_ADD_DEPENDENCY(RTASK => RGT, NDEPENDENCY => LINK.RN); From b533b7ce427075f13d29d049a471f3cf53d01b04 Mon Sep 17 00:00:00 2001 From: Dollerino Date: Mon, 6 May 2024 16:23:17 +0300 Subject: [PATCH 28/76] =?UTF-8?q?=D0=A6=D0=98=D0=A2=D0=9A-842=20-=20=D0=94?= =?UTF-8?q?=D0=BE=D1=80=D0=B0=D0=B1=D0=BE=D1=82=D0=BA=D0=B0=20=D0=BF=D0=B0?= =?UTF-8?q?=D0=BD=D0=B5=D0=BB=D0=B8=20"=D0=9F=D1=80=D0=BE=D0=B8=D0=B7?= =?UTF-8?q?=D0=B2=D0=BE=D0=B4=D1=81=D1=82=D0=B2=D0=B5=D0=BD=D0=BD=D0=B0?= =?UTF-8?q?=D1=8F=20=D0=BF=D1=80=D0=BE=D0=B3=D1=80=D0=B0=D0=BC=D0=BC=D0=B0?= =?UTF-8?q?"?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- db/PKG_P8PANELS_MECHREC.pck | 1 + 1 file changed, 1 insertion(+) diff --git a/db/PKG_P8PANELS_MECHREC.pck b/db/PKG_P8PANELS_MECHREC.pck index fd78580..750ee08 100644 --- a/db/PKG_P8PANELS_MECHREC.pck +++ b/db/PKG_P8PANELS_MECHREC.pck @@ -79,6 +79,7 @@ create or replace package body PKG_P8PANELS_MECHREC as NFCPRODPLAN_CATEGORY constant PKG_STD.TNUMBER := 1; -- Категория планов "Производственная программа" NFCPRODPLAN_STATUS constant PKG_STD.TNUMBER := 2; -- Статус планов "Утвержден" SFCPRODPLAN_TYPE constant PKG_STD.TSTRING := 'План'; -- Тип планов (мнемокод состояния) + NMAX_TASKS constant PKG_STD.TNUMBER := 10000; -- Максимальное количество отображаемых задач /* Константы - дополнительные атрибуты */ STASK_ATTR_START_FACT constant PKG_STD.TSTRING := 'start_fact'; -- Запущено From 54a9d560965b1506443b49a066ab36c438a2ba39 Mon Sep 17 00:00:00 2001 From: Dollerino Date: Tue, 7 May 2024 17:37:23 +0300 Subject: [PATCH 29/76] =?UTF-8?q?=D0=A6=D0=98=D0=A2=D0=9A-835=20-=20=D0=94?= =?UTF-8?q?=D0=BE=D1=80=D0=B0=D0=B1=D0=BE=D1=82=D0=BA=D0=B0=20=D0=BF=D0=B0?= =?UTF-8?q?=D0=BD=D0=B5=D0=BB=D0=B8=20"=D0=9F=D1=80=D0=BE=D0=B8=D0=B7?= =?UTF-8?q?=D0=B2=D0=BE=D0=B4=D1=81=D1=82=D0=B2=D0=B5=D0=BD=D0=BD=D0=B0?= =?UTF-8?q?=D1=8F=20=D0=BF=D1=80=D0=BE=D0=B3=D1=80=D0=B0=D0=BC=D0=BC=D0=B0?= =?UTF-8?q?"?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- db/PKG_P8PANELS_MECHREC.pck | 142 ++++++++++++++++++------------------ 1 file changed, 70 insertions(+), 72 deletions(-) diff --git a/db/PKG_P8PANELS_MECHREC.pck b/db/PKG_P8PANELS_MECHREC.pck index 750ee08..2a98f26 100644 --- a/db/PKG_P8PANELS_MECHREC.pck +++ b/db/PKG_P8PANELS_MECHREC.pck @@ -81,6 +81,22 @@ create or replace package body PKG_P8PANELS_MECHREC as SFCPRODPLAN_TYPE constant PKG_STD.TSTRING := 'План'; -- Тип планов (мнемокод состояния) NMAX_TASKS constant PKG_STD.TNUMBER := 10000; -- Максимальное количество отображаемых задач + /* Константы - классы задач плана ("Производственная программа") */ + NCLASS_WO_DEFICIT constant PKG_STD.TNUMBER := 0; -- Без дефицита выпуска + NCLASS_PART_DEFICIT constant PKG_STD.TNUMBER := 1; -- С частичным дефицитом выпуска + NCLASS_FULL_DEFICIT constant PKG_STD.TNUMBER := 2; -- С полным дефицитом выпуска + NCLASS_WITH_DEFICIT constant PKG_STD.TNUMBER := 3; -- С дефицитом запуска или датой меньше текущей + NCLASS_FUTURE_DATE constant PKG_STD.TNUMBER := 4; -- Дата анализа еще не наступила + NCLASS_WO_LINKS constant PKG_STD.TNUMBER := 5; -- Задача без связи + + /* Константы - типы задач плана, содержание детализации ("Производственная программа") */ + NTASK_TYPE_RL_WITH_GP constant PKG_STD.TNUMBER := 0; -- Маршрутные листы с развертыванием товарных запасов + NTASK_TYPE_RL_WITH_DL constant PKG_STD.TNUMBER := 1; -- Маршрутные листы с развертыванием комплектаций + NTASK_TYPE_INC_DEPS constant PKG_STD.TNUMBER := 2; -- Приход из подразделений + NTASK_TYPE_INC_DEPS_RL constant PKG_STD.TNUMBER := 3; -- Приход из подразделений и маршрутные листы + NTASK_TYPE_RL constant PKG_STD.TNUMBER := 4; -- Маршрутные листы + NTASK_TYPE_EMPTY constant PKG_STD.TNUMBER := null; -- Нет детализации + /* Константы - дополнительные атрибуты */ STASK_ATTR_START_FACT constant PKG_STD.TSTRING := 'start_fact'; -- Запущено STASK_ATTR_MAIN_QUANT constant PKG_STD.TSTRING := 'main_quant'; -- Количество план @@ -273,7 +289,7 @@ create or replace package body PKG_P8PANELS_MECHREC as SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_STR, BVISIBLE => true); /* Если тип = 3, то необходимо включать состояние */ - if (NTYPE = 3) then + if (NTYPE = NTASK_TYPE_INC_DEPS_RL) then PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG, SNAME => 'SDOC_STATE', SCAPTION => 'Состояние', @@ -404,7 +420,7 @@ create or replace package body PKG_P8PANELS_MECHREC as ICURSOR => ICURSOR, NPOSITION => 2); /* Если тип = 3, то необходимо включать состояние */ - if (NTYPE = 3) then + if (NTYPE = NTASK_TYPE_INC_DEPS_RL) then PKG_P8PANELS_VISUAL.TROW_ADD_CUR_COLS(RROW => RDG_ROW, SNAME => 'SDOC_STATE', ICURSOR => ICURSOR, @@ -1455,7 +1471,7 @@ create or replace package body PKG_P8PANELS_MECHREC as procedure FCROUTLST_DG_GET ( NFCPRODPLANSP in number, -- Рег. номер связанной спецификации плана - NTYPE in number, -- Тип спецификации плана (0 - Деталь, 1 - Изделие/сборочная единица, 3/4 - ПиП) + NTYPE in number, -- Тип спецификации плана (см. константы NTASK_TYPE_*) NPAGE_NUMBER in number, -- Номер страницы (игнорируется при NPAGE_SIZE=0) NPAGE_SIZE in number, -- Количество записей на странице (0 - все) CORDERS in clob, -- Сортировки @@ -1467,7 +1483,7 @@ create or replace package body PKG_P8PANELS_MECHREC as /* Выбираем сборку таблицы, исходя из типа спецификации плана */ case /* Деталь */ - when (NTYPE = 0) then + when (NTYPE = NTASK_TYPE_RL_WITH_GP) then /* Получаем таблицу по детали */ FCROUTLST_DG_BY_DTL(NFCPRODPLANSP => NFCPRODPLANSP, NPAGE_NUMBER => NPAGE_NUMBER, @@ -1476,7 +1492,7 @@ create or replace package body PKG_P8PANELS_MECHREC as NINCLUDE_DEF => NINCLUDE_DEF, COUT => COUT); /* Изделие/сборочная единица */ - when (NTYPE = 1) then + when (NTYPE = NTASK_TYPE_RL_WITH_DL) then /* Получаем таблицу по изделию */ FCROUTLST_DG_BY_PRDCT(NFCPRODPLANSP => NFCPRODPLANSP, NPAGE_NUMBER => NPAGE_NUMBER, @@ -1485,7 +1501,7 @@ create or replace package body PKG_P8PANELS_MECHREC as NINCLUDE_DEF => NINCLUDE_DEF, COUT => COUT); /* Для приходов из подразделений */ - when ((NTYPE = 3) or (NTYPE = 4)) then + when ((NTYPE = NTASK_TYPE_INC_DEPS_RL) or (NTYPE = NTASK_TYPE_RL)) then /* Получаем таблицу по приходу */ FCROUTLST_DG_BY_DEPS(NFCPRODPLANSP => NFCPRODPLANSP, NPAGE_NUMBER => NPAGE_NUMBER, @@ -1520,11 +1536,11 @@ create or replace package body PKG_P8PANELS_MECHREC as DDATE_FROM PKG_STD.TLDATE; -- Дата запуска спецификации DDATE_TO PKG_STD.TLDATE; -- Дата выпуска спецификации STASK_CAPTION PKG_STD.TSTRING; -- Описание задачи в Ганте - NTYPE PKG_STD.TNUMBER; -- Тип задачи (0/1 - для "Дата выпуска", 2/3/4 - для "Дата выпуска") + NTYPE PKG_STD.TNUMBER; -- Тип задачи (см. константы NTASK_TYPE_*) SDETAIL_LIST PKG_STD.TSTRING; -- Ссылки на детализацию SPLAN_TITLE PKG_STD.TSTRING; -- Заголовок плана NCOMPANY PKG_STD.TREF := GET_SESSION_COMPANY(); -- Организация сеанса - NTASK_CLASS PKG_STD.TNUMBER; -- Класс задачи + NTASK_CLASS PKG_STD.TNUMBER; -- Класс задачи (см. константы NCLASS_*) NLEVEL_FILTER PKG_STD.TNUMBER; -- Уровень для фильтра /* Объединение значений в строковое представление */ @@ -1666,7 +1682,7 @@ create or replace package body PKG_P8PANELS_MECHREC as NMAIN_QUANT in number, -- Выпуск NREL_FACT in number, -- Выпуск факт DREP_DATE_TO in date, -- Дата выпуска - NTYPE in number, -- Тип (0 - Деталь, 1 - Изделие/сборочная единица) + NTYPE in number, -- Тип (см. константы NTASK_TYPE_*) SDETAIL_LIST in varchar2, -- Ссылки на детализацию SMEAS in varchar2 -- Единица измерения ) @@ -1748,33 +1764,24 @@ create or replace package body PKG_P8PANELS_MECHREC as NHAVE_LINK in number := 0 -- Наличие связей с "Маршрутный лист" или "Приход из подразделения" ) return number -- Класс задачи is - NTASK_CLASS PKG_STD.TNUMBER; -- Класс задачи + NTASK_CLASS PKG_STD.TNUMBER; -- Класс задачи (см. константы NCLASS*) begin - /* - Описание классов: - 0 - Без дефицита выпуска (последующий цвет "Зеленый") - 1 - С частичным дефицитом выпуска (последующий цвет "Желто-зелеый") - 2 - С полным дефицитом выпуска (последующий цвет "Желтый") - 3 - С дефицитом запуска или датой меньше текущей (последующий цвет "Красный") - 4 - Дата анализа еще не наступила (последующий цвет "Серый") - 5 - Задача без связи (последующий цвет "Черный") - */ /* Если одна из дат не указана */ if ((DREP_DATE is null) or (DREP_DATE_TO is null)) then /* Если спецификация также не имеет связей */ if (NHAVE_LINK = 0) then - NTASK_CLASS := 5; + NTASK_CLASS := NCLASS_WO_LINKS; end if; else /* Если нет связанных документов */ if (NHAVE_LINK = 0) then /* Если дата запуска меньше текущей даты */ if (DREP_DATE <= sysdate) then - NTASK_CLASS := 3; + NTASK_CLASS := NCLASS_WITH_DEFICIT; end if; /* Если дата больше текущей даты */ if (DREP_DATE > sysdate) then - NTASK_CLASS := 4; + NTASK_CLASS := NCLASS_FUTURE_DATE; end if; end if; end if; @@ -1784,22 +1791,22 @@ create or replace package body PKG_P8PANELS_MECHREC as if (NDEFRESLIZ <> 0) then /* Если дефицит выпуска = 0 */ if (NDEFSTART = 0) then - NTASK_CLASS := 0; + NTASK_CLASS := NCLASS_WO_DEFICIT; else - NTASK_CLASS := 3; + NTASK_CLASS := NCLASS_WITH_DEFICIT; end if; else /* Если дефицит выпуска = 0 */ if (NDEFSTART = 0) then - NTASK_CLASS := 0; + NTASK_CLASS := NCLASS_WO_DEFICIT; else /* Если дефицит запуска = 0 и выпуск факт = 0 */ if ((NDEFRESLIZ = 0) and (NREL_FACT = 0)) then - NTASK_CLASS := 2; + NTASK_CLASS := NCLASS_FULL_DEFICIT; end if; /* Если дефицит запуска = 0 и выпуск факт <> 0 */ if ((NDEFRESLIZ = 0) and (NREL_FACT <> 0)) then - NTASK_CLASS := 1; + NTASK_CLASS := NCLASS_PART_DEFICIT; end if; end if; end if; @@ -1815,28 +1822,19 @@ create or replace package body PKG_P8PANELS_MECHREC as SSORT_FIELD in varchar2, -- Тип сортировки NFCPRODPLAN in number, -- Рег. номер плана NFCPRODPLANSP in number, -- Рег. номер спецификации плана - NTASK_CLASS in number, -- Класс задачи - NTYPE out number, -- Тип задачи (0/1 - для "Дата выпуска", 2/3/4 - для "Дата выпуска") + NTASK_CLASS in number, -- Класс задачи (см. константы NCLASS_*) + NTYPE out number, -- Тип задачи (см. константы NTASK_TYPE_*) SDETAIL_LIST out varchar2 -- Ссылки на детализацию ) is begin - /* - Описание типов: - 0 - Маршрутные листы с развертыванием товарных запасов - 1 - Маршрутные листы с развертыванием комплектаций - 2 - Приход из подразделений - 3 - Приход из подразделений и маршрутные листы - 4 - Маршрутные листы - null - Нет детализации - */ /* Исходим сортировка по "Дата запуска" */ if (SSORT_FIELD = 'DREP_DATE') then - /* Если цвет - красный */ - if (NTASK_CLASS = 3) then + /* Если класс "С дефицитом запуска или датой меньше текущей" */ + if (NTASK_CLASS = NCLASS_WITH_DEFICIT) then /* Проверяем деталь или изделие */ begin - select 1 + select NTASK_TYPE_RL_WITH_DL into NTYPE from DUAL where exists (select null @@ -1845,65 +1843,65 @@ create or replace package body PKG_P8PANELS_MECHREC as and SP.UP_LEVEL = NFCPRODPLANSP); exception when others then - NTYPE := 0; + NTYPE := NTASK_TYPE_RL_WITH_GP; end; /* Проверяем наличие связей с маршрутными листами */ if (LINK_FCROUTLST_CHECK(NCOMPANY => NCOMPANY, NFCPRODPLANSP => NFCPRODPLANSP, NSTATE => 0) = 0) then /* Указываем, что маршрутных листов нет */ SDETAIL_LIST := 'Нет маршрутных листов'; - NTYPE := null; + NTYPE := NTASK_TYPE_EMPTY; else /* Указываем, что маршрутные листы есть */ SDETAIL_LIST := 'Маршрутные листы'; end if; else /* Не отображаем информацию о маршрутных листах */ - NTYPE := null; + NTYPE := NTASK_TYPE_EMPTY; SDETAIL_LIST := null; end if; else /* Исходим от класса */ case - /* Закрашен зеленым */ - when (NTASK_CLASS = 0) then + /* Если класс "Без дефицита выпуска" */ + when (NTASK_CLASS = NCLASS_WO_DEFICIT) then /* Проверяем наличией связей с приходов из подразделений */ if (LINK_INCOMEFROMDEPS_CHECK(NCOMPANY => NCOMPANY, NFCPRODPLANSP => NFCPRODPLANSP, NSTATE => 2) = 0) then /* Указываем, что приходов из подразделений нет */ SDETAIL_LIST := 'Нет приходов из подразделений'; - NTYPE := null; + NTYPE := NTASK_TYPE_EMPTY; else /* Указываем, что приходы из подразделений есть */ SDETAIL_LIST := 'Приход из подразделений'; - NTYPE := 2; + NTYPE := NTASK_TYPE_INC_DEPS; end if; - /* Закрашен желто-зеленым */ - when (NTASK_CLASS = 1) then + /* Если класс "С частичным дефицитом выпуска" */ + when (NTASK_CLASS = NCLASS_PART_DEFICIT) then /* Проверяем наличией связей с приходов из подразделений */ if (LINK_INCOMEFROMDEPS_CHECK(NCOMPANY => NCOMPANY, NFCPRODPLANSP => NFCPRODPLANSP) = 0) then /* Указываем, что приходов из подразделений нет */ SDETAIL_LIST := 'Нет приходов из подразделений'; - NTYPE := null; + NTYPE := NTASK_TYPE_EMPTY; else /* Указываем, что приходы из подразделений есть */ SDETAIL_LIST := 'Приход из подразделений'; - NTYPE := 3; + NTYPE := NTASK_TYPE_INC_DEPS_RL; end if; - /* Закрашен желтым или красным */ - when ((NTASK_CLASS = 2) or (NTASK_CLASS = 3)) then + /* Если класс "С дефицитом запуска или датой меньше текущей" или "С полным дефицитом выпуска" */ + when ((NTASK_CLASS = NCLASS_FULL_DEFICIT) or (NTASK_CLASS = NCLASS_WITH_DEFICIT)) then /* Проверяем наличие связей с маршрутными листами */ if (LINK_FCROUTLST_CHECK(NCOMPANY => NCOMPANY, NFCPRODPLANSP => NFCPRODPLANSP, NSTATE => 1) = 0) then /* Указываем, что маршрутных листов нет */ SDETAIL_LIST := 'Нет маршрутных листов'; - NTYPE := null; + NTYPE := NTASK_TYPE_EMPTY; else /* Указываем, что маршрутные листы есть */ SDETAIL_LIST := 'Маршрутные листы'; - NTYPE := 4; + NTYPE := NTASK_TYPE_RL; end if; /* Класс не поддерживается */ else /* Для данных классов ничего не выводится */ - NTYPE := null; + NTYPE := NTASK_TYPE_EMPTY; SDETAIL_LIST := null; end case; end if; @@ -1912,7 +1910,7 @@ create or replace package body PKG_P8PANELS_MECHREC as /* Формирование цветовых характеристик для задачи */ procedure GET_TASK_COLORS ( - NTASK_CLASS in number, -- Класс задачи + NTASK_CLASS in number, -- Класс задачи (см. константы NCLASS_*) STASK_BG_COLOR out varchar2, -- Цвет заливки спецификации STASK_BG_PROGRESS_COLOR out varchar2, -- Цвет заливки прогресса спецификации STASK_TEXT_COLOR in out varchar2 -- Цвет текста @@ -1921,33 +1919,33 @@ create or replace package body PKG_P8PANELS_MECHREC as begin /* Исходим от класса задачи */ case NTASK_CLASS - /* Полностью зеленый */ - when 0 then + /* Без дефицита выпуска */ + when NCLASS_WO_DEFICIT then STASK_BG_COLOR := SBG_COLOR_GREEN; STASK_TEXT_COLOR := STEXT_COLOR_GREY; STASK_BG_PROGRESS_COLOR := null; - /* Частично зелёный, прогресс жёлтый */ - when 1 then + /* С частичным дефицитом выпуска */ + when NCLASS_PART_DEFICIT then STASK_BG_COLOR := SBG_COLOR_GREEN; STASK_BG_PROGRESS_COLOR := SBG_COLOR_YELLOW; STASK_TEXT_COLOR := STEXT_COLOR_GREY; - /* Полностью жёлтый */ - when 2 then + /* С полным дефицитом выпуска */ + when NCLASS_FULL_DEFICIT then STASK_BG_COLOR := SBG_COLOR_YELLOW; STASK_TEXT_COLOR := null; STASK_BG_PROGRESS_COLOR := null; - /* Полностью красный */ - when 3 then + /* С дефицитом запуска или датой меньше текущей */ + when NCLASS_WITH_DEFICIT then STASK_BG_COLOR := SBG_COLOR_RED; STASK_TEXT_COLOR := null; STASK_BG_PROGRESS_COLOR := null; - /* Полностью серый */ - when 4 then + /* Дата анализа еще не наступила */ + when NCLASS_FUTURE_DATE then STASK_BG_COLOR := SBG_COLOR_GREY; STASK_TEXT_COLOR := null; STASK_BG_PROGRESS_COLOR := null; - /* Полностью черный */ - when 5 then + /* Задача без связи */ + when NCLASS_WO_LINKS then STASK_BG_COLOR := SBG_COLOR_BLACK; STASK_TEXT_COLOR := STEXT_COLOR_ORANGE; STASK_BG_PROGRESS_COLOR := null; @@ -2075,8 +2073,8 @@ create or replace package body PKG_P8PANELS_MECHREC as STASK_BG_COLOR => STASK_BG_COLOR, STASK_BG_PROGRESS_COLOR => STASK_BG_PROGRESS_COLOR, STASK_TEXT_COLOR => STASK_TEXT_COLOR); - /* Если класс задачи "1" */ - if (NTASK_CLASS = 1) then + /* Если класс задачи "С частичным дефицитом выпуска" */ + if (NTASK_CLASS = NCLASS_PART_DEFICIT) then /* Определяем пропорции прогресса */ NTASK_PROGRESS := ROUND(C.NREL_FACT / C.NMAIN_QUANT * 100); else From 140e255904633576c9134d858f64111a168275d8 Mon Sep 17 00:00:00 2001 From: Dollerino Date: Wed, 8 May 2024 15:50:34 +0300 Subject: [PATCH 30/76] =?UTF-8?q?=D0=A6=D0=98=D0=A2=D0=9A-826,=20=D0=A6?= =?UTF-8?q?=D0=98=D0=A2=D0=9A-827,=20=D0=A6=D0=98=D0=A2=D0=9A-828,=20?= =?UTF-8?q?=D0=A6=D0=98=D0=A2=D0=9A-841=20-=20=D0=94=D0=BE=D0=B1=D0=B0?= =?UTF-8?q?=D0=B2=D0=BB=D0=B5=D0=BD=D0=B8=D0=B5=20=D0=BD=D0=BE=D0=B2=D1=8B?= =?UTF-8?q?=D1=85=20=D0=BF=D0=B0=D0=BD=D0=B5=D0=BB=D0=B5=D0=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/panels/mech_rec_assembly_mon/backend.js | 341 +++++++++ .../mech_rec_assembly_mon/blocks/cardBlock.js | 102 +++ .../blocks/cardDetail.js | 289 ++++++++ .../elements/progressBox.js | 76 ++ app/panels/mech_rec_assembly_mon/hooks.js | 27 + app/panels/mech_rec_assembly_mon/index.js | 16 + .../mech_rec_assembly_mon.js | 226 ++++++ .../mech_rec_assembly_mon/styles/themes.js | 66 ++ .../mech_rec_cost_jobs_manage/backend.js | 337 +++++++++ .../mech_rec_cost_jobs_manage/fcjobssp.js | 422 +++++++++++ app/panels/mech_rec_cost_jobs_manage/hooks.js | 23 + app/panels/mech_rec_cost_jobs_manage/index.js | 16 + .../mech_rec_cost_jobs_manage.js | 206 ++++++ app/panels/mech_rec_dept_cost_jobs/index.js | 16 + .../mech_rec_dept_cost_jobs.js | 153 ++++ .../fcroutlst.js | 328 +++++++++ .../fcroutlstord.js | 124 ++++ .../mech_rec_dept_cost_prod_plans/hooks.js | 23 + .../incomefromdeps.js | 120 +++ .../mech_rec_dept_cost_prod_plans/index.js | 16 + .../mech_rec_dept_cost_prod_plans.js | 445 +++++++++++ db/PKG_P8PANELS_MECHREC.pck | 695 +++++++++++++++++- p8panels.config | 44 ++ 23 files changed, 4107 insertions(+), 4 deletions(-) create mode 100644 app/panels/mech_rec_assembly_mon/backend.js create mode 100644 app/panels/mech_rec_assembly_mon/blocks/cardBlock.js create mode 100644 app/panels/mech_rec_assembly_mon/blocks/cardDetail.js create mode 100644 app/panels/mech_rec_assembly_mon/elements/progressBox.js create mode 100644 app/panels/mech_rec_assembly_mon/hooks.js create mode 100644 app/panels/mech_rec_assembly_mon/index.js create mode 100644 app/panels/mech_rec_assembly_mon/mech_rec_assembly_mon.js create mode 100644 app/panels/mech_rec_assembly_mon/styles/themes.js create mode 100644 app/panels/mech_rec_cost_jobs_manage/backend.js create mode 100644 app/panels/mech_rec_cost_jobs_manage/fcjobssp.js create mode 100644 app/panels/mech_rec_cost_jobs_manage/hooks.js create mode 100644 app/panels/mech_rec_cost_jobs_manage/index.js create mode 100644 app/panels/mech_rec_cost_jobs_manage/mech_rec_cost_jobs_manage.js create mode 100644 app/panels/mech_rec_dept_cost_jobs/index.js create mode 100644 app/panels/mech_rec_dept_cost_jobs/mech_rec_dept_cost_jobs.js create mode 100644 app/panels/mech_rec_dept_cost_prod_plans/fcroutlst.js create mode 100644 app/panels/mech_rec_dept_cost_prod_plans/fcroutlstord.js create mode 100644 app/panels/mech_rec_dept_cost_prod_plans/hooks.js create mode 100644 app/panels/mech_rec_dept_cost_prod_plans/incomefromdeps.js create mode 100644 app/panels/mech_rec_dept_cost_prod_plans/index.js create mode 100644 app/panels/mech_rec_dept_cost_prod_plans/mech_rec_dept_cost_prod_plans.js diff --git a/app/panels/mech_rec_assembly_mon/backend.js b/app/panels/mech_rec_assembly_mon/backend.js new file mode 100644 index 0000000..59f1cda --- /dev/null +++ b/app/panels/mech_rec_assembly_mon/backend.js @@ -0,0 +1,341 @@ +//--------------------- +//Подключение библиотек +//--------------------- + +import { useState, useCallback, useEffect, useContext } from "react"; //Классы React +import { BackEndСtx } from "../../context/backend"; //Контекст взаимодействия с сервером +import { object2Base64XML } from "../../core/utils"; //Вспомогательные функции + +//--------- +//Константы +//--------- + +//Размер страницы данных +const DATA_GRID_PAGE_SIZE = 10; + +//----------- +//Тело модуля +//----------- + +//Хук для основной таблицы панели +const useMechRecAssemblyMon = () => { + //Собственное состояние + let [state, setState] = useState({ + init: false, + showPlanList: false, + planCtlgs: [], + planCtlgsLoaded: false, + selectedPlanCtlg: { NRN: null, SNAME: null, NMIN_YEAR: null, NMAX_YEAR: null }, + plans: [], + plansLoaded: false, + selectedPlan: { NRN: null, SNUMB: null, NPROGRESS: null, SDETAIL: null, NYEAR: null } + }); + + //Подключение к контексту взаимодействия с сервером + const { executeStored } = useContext(BackEndСtx); + + //Инициализация каталогов планов + const initPlanCtlgs = useCallback(async () => { + if (!state.init) { + const data = await executeStored({ + stored: "PKG_P8PANELS_MECHREC.FCPRODPLAN_CTLG_INIT", + args: {}, + respArg: "COUT", + isArray: name => name === "XFCPRODPLAN_CRNS" + }); + setState(pv => ({ ...pv, init: true, planCtlgs: [...(data?.XFCPRODPLAN_CRNS || [])], planCtlgsLoaded: true })); + } + // eslint-disable-next-line react-hooks/exhaustive-deps + }, [state.init, executeStored]); + + //Получение информации о планах каталога + const loadPlans = useCallback( + async NCRN => { + if (NCRN) { + const data = await executeStored({ + stored: "PKG_P8PANELS_MECHREC.FCPRODPLAN_GET", + args: { NCRN: NCRN }, + respArg: "COUT", + isArray: name => name === "XFCPRODPLAN_INFO" + }); + setState(pv => ({ ...pv, init: true, plans: [...(data?.XFCPRODPLAN_INFO || [])], plansLoaded: true })); + } + // eslint-disable-next-line react-hooks/exhaustive-deps + }, + [executeStored] + ); + + //Выбор каталога планов + const selectPlan = project => { + setState(pv => ({ + ...pv, + selectedPlanCtlg: project, + showPlanList: false + })); + }; + + //Сброс выбора каталога планов + const unselectPlan = () => + setState(pv => ({ + ...pv, + selectedPlanCtlg: { NRN: null, SNAME: null, NMIN_YEAR: null, NMAX_YEAR: null }, + showPlanList: false + })); + + //При подключении компонента к странице + useEffect(() => { + initPlanCtlgs(); + // eslint-disable-next-line react-hooks/exhaustive-deps + }, []); + + //При изменении каталога + useEffect(() => { + //Если каталог выбран + if (state.selectedPlanCtlg) { + loadPlans(state.selectedPlanCtlg.NRN); + } else { + setState(pv => ({ ...pv, plans: [], plansLoaded: false })); + } + // eslint-disable-next-line react-hooks/exhaustive-deps + }, [state.selectedPlanCtlg]); + + return [state, setState, selectPlan, unselectPlan]; +}; + +//Хук для информации по производственным составам +const useCostProductComposition = nProdPlan => { + //Собственное состояние + let [costProductComposition, setCostProductComposition] = useState({ + init: false, + showPlanList: false, + products: [], + selectedProduct: null + }); + + //Подключение к контексту взаимодействия с сервером + const { executeStored } = useContext(BackEndСtx); + + //Инициализация производственных составов + const initCostProductComposition = useCallback(async () => { + if (!costProductComposition.init) { + const data = await executeStored({ + stored: "PKG_P8PANELS_MECHREC.FCPRODCMP_DETAILS_GET", + args: { NFCPRODPLAN: nProdPlan }, + respArg: "COUT", + isArray: name => name === "XFCPRODCMP" + }); + setCostProductComposition(pv => ({ ...pv, init: true, products: [...(data?.XFCPRODCMP || [])], productsLoaded: true })); + } + // eslint-disable-next-line react-hooks/exhaustive-deps + }, [costProductComposition.init, executeStored]); + + //При подключении компонента к странице + useEffect(() => { + initCostProductComposition(); + // eslint-disable-next-line react-hooks/exhaustive-deps + }, []); + + return [costProductComposition, setCostProductComposition]; +}; + +//Хук для таблицы маршрутных листов +const useCostRouteLists = (plan, product) => { + //Собственное состояние - таблица данных + const [costRouteLists, setCostRouteLists] = useState({ + dataLoaded: false, + columnsDef: [], + orders: null, + rows: [], + reload: true, + pageNumber: 1, + morePages: true, + selectedProduct: null + }); + + //Подключение к контексту взаимодействия с сервером + const { executeStored, SERV_DATA_TYPE_CLOB } = useContext(BackEndСtx); + + //Загрузка данных таблицы с сервера + const loadData = useCallback( + async () => { + if (costRouteLists.reload) { + const data = await executeStored({ + stored: "PKG_P8PANELS_MECHREC.FCROUTLST_MON_DG_GET", + args: { + NPRODCMPSP: product, + NFCPRODPLAN: plan, + CORDERS: { VALUE: object2Base64XML(costRouteLists.orders, { arrayNodeName: "orders" }), SDATA_TYPE: SERV_DATA_TYPE_CLOB }, + NPAGE_NUMBER: costRouteLists.pageNumber, + NPAGE_SIZE: DATA_GRID_PAGE_SIZE, + NINCLUDE_DEF: costRouteLists.dataLoaded ? 0 : 1 + }, + respArg: "COUT" + }); + setCostRouteLists(pv => ({ + ...pv, + columnsDef: data.XCOLUMNS_DEF ? [...data.XCOLUMNS_DEF] : pv.columnsDef, + rows: pv.pageNumber == 1 ? [...(data.XROWS || [])] : [...pv.rows, ...(data.XROWS || [])], + dataLoaded: true, + reload: false, + morePages: (data.XROWS || []).length >= DATA_GRID_PAGE_SIZE + })); + } + }, + // eslint-disable-next-line react-hooks/exhaustive-deps + [costRouteLists.reload, costRouteLists.orders, costRouteLists.dataLoaded, costRouteLists.pageNumber, executeStored, SERV_DATA_TYPE_CLOB] + ); + + //При изменении продукта + useEffect(() => { + //Если продукт указан + if (product) { + //Принудительно обновляем состояние + setCostRouteLists(pv => ({ + ...pv, + dataLoaded: false, + columnsDef: [], + orders: null, + rows: [], + reload: true, + pageNumber: 1, + morePages: true, + selectedProduct: null + })); + //Загружаем данные с учетом выбранного продукта + loadData(); + } + // eslint-disable-next-line react-hooks/exhaustive-deps + }, [product]); + + //При необходимости обновить данные таблицы + useEffect(() => { + //Если продукт указан и необходимо стандартное обновление + if (product) { + loadData(); + } + // eslint-disable-next-line react-hooks/exhaustive-deps + }, [costRouteLists.reload, loadData]); + + //При изменении плана + useEffect(() => { + setCostRouteLists(pv => ({ + ...pv, + dataLoaded: false, + columnsDef: [], + orders: null, + rows: [], + reload: true, + pageNumber: 1, + morePages: true, + selectedProduct: null + })); + // eslint-disable-next-line react-hooks/exhaustive-deps + }, [plan]); + + return [costRouteLists, setCostRouteLists]; +}; + +//Хук для таблицы комплектовочных ведомостей +const useCostDeliverySheets = (plan, product) => { + //Собственное состояние - таблица данных + const [costDeliverySheets, setCostDeliverySheets] = useState({ + dataLoaded: false, + columnsDef: [], + orders: null, + rows: [], + reload: true, + pageNumber: 1, + morePages: true, + selectedProduct: null + }); + + //Подключение к контексту взаимодействия с сервером + const { executeStored, SERV_DATA_TYPE_CLOB } = useContext(BackEndСtx); + + //Загрузка данных таблицы с сервера + const loadData = useCallback( + async () => { + if (costDeliverySheets.reload) { + const data = await executeStored({ + stored: "PKG_P8PANELS_MECHREC.FCDELIVSH_DG_GET", + args: { + NPRODCMPSP: product, + NFCPRODPLAN: plan, + CORDERS: { VALUE: object2Base64XML(costDeliverySheets.orders, { arrayNodeName: "orders" }), SDATA_TYPE: SERV_DATA_TYPE_CLOB }, + NPAGE_NUMBER: costDeliverySheets.pageNumber, + NPAGE_SIZE: DATA_GRID_PAGE_SIZE, + NINCLUDE_DEF: costDeliverySheets.dataLoaded ? 0 : 1 + }, + respArg: "COUT" + }); + setCostDeliverySheets(pv => ({ + ...pv, + columnsDef: data.XCOLUMNS_DEF ? [...data.XCOLUMNS_DEF] : pv.columnsDef, + rows: pv.pageNumber == 1 ? [...(data.XROWS || [])] : [...pv.rows, ...(data.XROWS || [])], + dataLoaded: true, + reload: false, + morePages: (data.XROWS || []).length >= DATA_GRID_PAGE_SIZE + })); + } + }, + // eslint-disable-next-line react-hooks/exhaustive-deps + [ + costDeliverySheets.reload, + costDeliverySheets.orders, + costDeliverySheets.dataLoaded, + costDeliverySheets.pageNumber, + executeStored, + SERV_DATA_TYPE_CLOB + ] + ); + + //При изменении продукта + useEffect(() => { + //Если продукт указан + if (product) { + //Принудительно обновляем состояние + setCostDeliverySheets(pv => ({ + ...pv, + dataLoaded: false, + columnsDef: [], + orders: null, + rows: [], + reload: true, + pageNumber: 1, + morePages: true + })); + //Загружаем данные с учетом выбранного продукта + loadData(); + } + // eslint-disable-next-line react-hooks/exhaustive-deps + }, [product]); + + //При необходимости обновить данные таблицы + useEffect(() => { + //Если продукт указан и необходимо стандартное обновление + if (product) { + loadData(); + } + // eslint-disable-next-line react-hooks/exhaustive-deps + }, [costDeliverySheets.reload, loadData]); + + //При изменении плана + useEffect(() => { + setCostDeliverySheets(pv => ({ + ...pv, + dataLoaded: false, + columnsDef: [], + orders: null, + rows: [], + reload: true, + pageNumber: 1, + morePages: true, + selectedProduct: null + })); + // eslint-disable-next-line react-hooks/exhaustive-deps + }, [plan]); + + return [costDeliverySheets, setCostDeliverySheets]; +}; + +export { useMechRecAssemblyMon, useCostProductComposition, useCostRouteLists, useCostDeliverySheets }; diff --git a/app/panels/mech_rec_assembly_mon/blocks/cardBlock.js b/app/panels/mech_rec_assembly_mon/blocks/cardBlock.js new file mode 100644 index 0000000..fc1d05d --- /dev/null +++ b/app/panels/mech_rec_assembly_mon/blocks/cardBlock.js @@ -0,0 +1,102 @@ +/* + Парус 8 - Панели мониторинга - ПУП - Мониторинг сборки изделий + Панель мониторинга: Информация об объекте +*/ + +//--------------------- +//Подключение библиотек +//--------------------- + +import React from "react"; //Классы React +import PropTypes from "prop-types"; //Контроль свойств компонента +import { Typography, Box, ImageList, ImageListItem } from "@mui/material"; //Интерфейсные элементы +import { ProgressBox } from "../elements/progressBox"; //Блок информации по прогрессу объекта + +//--------- +//Константы +//--------- + +//Стили +const STYLES = { + PLAN_INFO: { + display: "flex", + justifyContent: "center", + alignItems: "center", + flexDirection: "column", + gap: "24px", + border: "1px solid", + borderRadius: "25px" + } +}; + +//------------------------------------ +//Вспомогательные функции и компоненты +//------------------------------------ + +//Картинка объекта +const CardImage = ({ card }) => { + return ( + + + + {"Image + {/* {"Image */} + + + + ); +}; + +//Контроль свойств - Заголовок первого уровня +CardImage.propTypes = { + card: PropTypes.object +}; + +//----------- +//Тело модуля +//----------- + +//Информация об объекте +const CardBlock = ({ card, handleCardClick }) => { + return ( + handleCardClick(card)}> + + + + Номер борта + + {card.SNUMB} + + + + + Год выпуска: + + + {card.NYEAR} + + + + ); +}; + +//Контроль свойств - Заголовок первого уровня +CardBlock.propTypes = { + card: PropTypes.object, + handleCardClick: PropTypes.func +}; + +//---------------- +//Интерфейс модуля +//---------------- + +export { CardBlock }; diff --git a/app/panels/mech_rec_assembly_mon/blocks/cardDetail.js b/app/panels/mech_rec_assembly_mon/blocks/cardDetail.js new file mode 100644 index 0000000..3304045 --- /dev/null +++ b/app/panels/mech_rec_assembly_mon/blocks/cardDetail.js @@ -0,0 +1,289 @@ +/* + Парус 8 - Панели мониторинга - ПУП - Мониторинг сборки изделий + Панель мониторинга: Детализация по объекту +*/ + +//--------------------- +//Подключение библиотек +//--------------------- + +import React from "react"; //Классы React +import PropTypes from "prop-types"; //Контроль свойств компонента +import { Box, Grid, Container, Button, Typography } from "@mui/material"; //Интерфейсные элементы +import { ProgressBox } from "../elements/progressBox"; //Блок информации по прогрессу объекта +import { P8PDataGrid, P8P_DATA_GRID_SIZE } from "../../../components/p8p_data_grid"; //Таблица данных +import { P8P_DATA_GRID_CONFIG_PROPS } from "../../../config_wrapper"; //Подключение компонентов к настройкам приложения +import { useCostProductComposition, useCostRouteLists, useCostDeliverySheets } from "../backend"; //Компоненты панели + +//--------- +//Константы +//--------- + +//Стили +const STYLES = { + TABLE_INFO_MAIN: { + display: "flex", + justifyContent: "center", + alignItems: "center", + flexDirection: "column", + border: "1px solid", + borderRadius: "25px", + height: "35vh" + }, + TABLE_INFO_SUB: { + margin: "21.6px 0px", + maxHeight: "100%", + overflow: "auto", + textAlign: "center", + width: "100%" + }, + DETAIL_INFO: { + display: "flex", + justifyContent: "space-around", + alignItems: "center", + border: "1px solid", + borderRadius: "25px", + height: "17vh" + }, + PRODUCT_SELECTOR: { + display: "flex", + justifyContent: "center", + alignItems: "center", + flexDirection: "column", + border: "1px solid", + borderRadius: "25px", + height: "53vh", + marginTop: "16px" + }, + PLAN_INFO_MAIN: { + display: "flex", + flexDirection: "column", + gap: "16px" + }, + PLAN_INFO_SUB: { + display: "flex", + justifyContent: "space-between", + width: "280px", + borderBottom: "1px solid" + } +}; + +//------------------------------------ +//Вспомогательные функции и компоненты +//------------------------------------ + +//Информация об объекте +const CardDetailInfo = ({ cardInfo }) => { + return ( + <> + + + + Номер борта: + + {cardInfo.SNUMB} + + + + Год выпуска: + + {cardInfo.NYEAR} + + + + + ); +}; + +//Контроль свойств - Информация об объекте +CardDetailInfo.propTypes = { + cardInfo: PropTypes.object +}; + +//Детали объекта +const CardSelector = ({ products, setCostProductComposition }) => { + //При выборе детали в SVG + const handleProductClick = product => { + setCostProductComposition(pv => ({ ...pv, selectedProduct: product })); + }; + + return ( + <> + + {products.map(el => ( + + ))} + + + ); +}; + +//Контроль свойств - Детали объекта +CardSelector.propTypes = { + products: PropTypes.array, + setCostProductComposition: PropTypes.func +}; + +//Генерация представления ячейки заголовка +const headCellRender = ({ columnDef }) => { + //Описываем общий стиль + let cellStyle = { padding: "2px 5px", fontSize: "12px", textAlign: "center", lineHeight: "1rem" }; + let stackProps = { justifyContent: "center" }; + //Дополнительные свойства + switch (columnDef.name) { + case "NREMN_LABOUR": + //Добавляем максимальную ширину + cellStyle = { ...cellStyle, maxWidth: "90px" }; + break; + case "NDEFICIT": + //Добавляем максимальную ширину + cellStyle = { ...cellStyle, maxWidth: "55px" }; + break; + case "NAPPLICABILITY": + //Добавляем максимальную ширину + cellStyle = { ...cellStyle, maxWidth: "90px" }; + break; + default: + break; + } + return { + stackProps, + cellStyle + }; +}; + +//Генерация заливки строки исходя от значений +const dataCellRender = ({ row, columnDef }) => { + //Описываем общий стиль + let cellStyle = { padding: "2px 5px", fontSize: "12px" }; + //Для всех кроме содержания и номенклатуры добавляем выравнивание + switch (columnDef.name) { + case "SOPERATION": + break; + case "SNOMEN": + break; + default: + //Добавляем выравнивание + cellStyle = { ...cellStyle, textAlign: "center" }; + break; + } + return { + cellStyle, + data: row[columnDef] + }; +}; + +//----------- +//Тело модуля +//----------- + +//Детализация по объекту +const CardDetail = ({ card, handleBackClick }) => { + //Собственное состояние - данные производственных составов SVG + const [costProductComposition, setCostProductComposition] = useCostProductComposition(card.NRN); + //Собственное состояние - таблица данных маршрутных листов + const [costRouteLists, setCostRouteLists] = useCostRouteLists(card.NRN, costProductComposition.selectedProduct); + //Собственное состояние - таблица данных комплектовочных ведомостей + const [сostDeliverySheets, setСostDeliverySheets] = useCostDeliverySheets(card.NRN, costProductComposition.selectedProduct); + + //При изменении состояния сортировки маршрутных листов + const costRouteListsOrderChanged = ({ orders }) => setCostRouteLists(pv => ({ ...pv, orders: [...orders], pageNumber: 1, reload: true })); + + //При изменении количества отображаемых страниц маршрутных листов + const costRouteListsPagesCountChanged = () => setCostRouteLists(pv => ({ ...pv, pageNumber: pv.pageNumber + 1, reload: true })); + + //При изменении состояния сортировки комплектовочных ведомостей + const СostDeliverySheetsOrderChanged = ({ orders }) => setСostDeliverySheets(pv => ({ ...pv, orders: [...orders], pageNumber: 1, reload: true })); + + //При изменении количества отображаемых страниц комплектовочных ведомостей + const СostDeliverySheetsPagesCountChanged = () => setСostDeliverySheets(pv => ({ ...pv, pageNumber: pv.pageNumber + 1, reload: true })); + + return ( + + + + + + + {!costRouteLists.dataLoaded ? ( + Выберите агрегат самолёта, чтобы увидеть информацию + ) : costRouteLists.rows.length === 0 ? ( + Нет данных по МК + ) : ( + <> + Маршрутная карта + + + )} + + + + + {!сostDeliverySheets.dataLoaded ? ( + Выберите агрегат самолёта, чтобы увидеть информацию + ) : сostDeliverySheets.rows.length === 0 ? ( + Нет данных по КВ + ) : ( + <> + Дефицит по КВ + + + )} + + + + + + + + + + + + + + ); +}; + +//Контроль свойств - Детализация по объекту +CardDetail.propTypes = { + card: PropTypes.object, + handleBackClick: PropTypes.func +}; + +//---------------- +//Интерфейс модуля +//---------------- + +export { CardDetail }; diff --git a/app/panels/mech_rec_assembly_mon/elements/progressBox.js b/app/panels/mech_rec_assembly_mon/elements/progressBox.js new file mode 100644 index 0000000..ea8b511 --- /dev/null +++ b/app/panels/mech_rec_assembly_mon/elements/progressBox.js @@ -0,0 +1,76 @@ +/* + Парус 8 - Панели мониторинга - ПУП - Мониторинг сборки изделий + Панель мониторинга: Блок информации по прогрессу объекта +*/ + +//--------------------- +//Подключение библиотек +//--------------------- + +import React from "react"; //Классы React +import PropTypes from "prop-types"; //Контроль свойств компонента +import { Typography, Box } from "@mui/material"; //Интерфейсные элементы + +//--------- +//Константы +//--------- + +//Стили +const STYLES = { + PROGRESS_INFO: { + display: "flex", + justifyContent: "center", + alignItems: "center", + flexDirection: "column", + margin: "0px 32px", + borderRadius: "50%" + } +}; + +//------------------------------------ +//Вспомогательные функции и компоненты +//------------------------------------ + +//----------- +//Тело модуля +//----------- + +//Детализация по объекту + +//Блок информации по прогрессу объекта +const ProgressBox = ({ prms }) => { + //Инициализируем цвет тени + let boxShadow = null; + //Определяем цвет тени + switch (true) { + case prms.NPROGRESS >= 70: + boxShadow = "0 0 30px #21d21e66"; + break; + case prms.NPROGRESS >= 40: + boxShadow = "0 0 30px #fddd3566"; + break; + case prms.NPROGRESS >= 10: + boxShadow = "0 0 30px #ea5c4966"; + break; + default: + boxShadow = "0 0 30px #d3d3d3"; + } + //Возвращаем блок + return ( + + {`${prms.NPROGRESS}%`} + {prms.SDETAIL} + + ); +}; + +//Контроль свойств - Блок информации по прогрессу объекта +ProgressBox.propTypes = { + prms: PropTypes.object +}; + +//---------------- +//Интерфейс модуля +//---------------- + +export { ProgressBox }; diff --git a/app/panels/mech_rec_assembly_mon/hooks.js b/app/panels/mech_rec_assembly_mon/hooks.js new file mode 100644 index 0000000..136c16c --- /dev/null +++ b/app/panels/mech_rec_assembly_mon/hooks.js @@ -0,0 +1,27 @@ +/* + Парус 8 - Панели мониторинга - ПУП - Мониторинг сборки изделий + Кастомные хуки +*/ + +//--------------------- +//Подключение библиотек +//--------------------- + +import React from "react"; //Классы React + +//----------- +//Тело модуля +//----------- + +//Клиентский отбор каталогов по поисковой фразе и наличию планов +export const useFilteredPlanCtlgs = (planCtlgs, filter) => { + const filteredPlanCtlgs = React.useMemo(() => { + return planCtlgs.filter( + catalog => + catalog.SNAME.toString().toLowerCase().includes(filter.ctlgName) && + (filter.haveDocs ? catalog.NCOUNT_DOCS > 0 : catalog.NCOUNT_DOCS >= 0) + ); + }, [planCtlgs, filter]); + + return filteredPlanCtlgs; +}; diff --git a/app/panels/mech_rec_assembly_mon/index.js b/app/panels/mech_rec_assembly_mon/index.js new file mode 100644 index 0000000..083b5ff --- /dev/null +++ b/app/panels/mech_rec_assembly_mon/index.js @@ -0,0 +1,16 @@ +/* + Парус 8 - Панели мониторинга - ПУП - Мониторинг сборки изделий + Панель мониторинга: Точка входа +*/ + +//--------------------- +//Подключение библиотек +//--------------------- + +import { MechRecAssemblyMon } from "./mech_rec_assembly_mon"; //Корневая панель мониторинга сборки изделий + +//---------------- +//Интерфейс модуля +//---------------- + +export const RootClass = MechRecAssemblyMon; diff --git a/app/panels/mech_rec_assembly_mon/mech_rec_assembly_mon.js b/app/panels/mech_rec_assembly_mon/mech_rec_assembly_mon.js new file mode 100644 index 0000000..2d51675 --- /dev/null +++ b/app/panels/mech_rec_assembly_mon/mech_rec_assembly_mon.js @@ -0,0 +1,226 @@ +/* + Парус 8 - Панели мониторинга - ПУП - Мониторинг сборки изделий + Панель мониторинга: Корневая панель мониторинга сборки изделий +*/ + +//--------------------- +//Подключение библиотек +//--------------------- + +import React, { useState, useContext } from "react"; //Классы React +import PropTypes from "prop-types"; //Контроль свойств компонента +import { + Drawer, + Fab, + Box, + List, + ListItemButton, + ListItemText, + Typography, + Grid, + TextField, + FormGroup, + FormControlLabel, + Checkbox, + Container +} from "@mui/material"; //Интерфейсные элементы +import { ThemeProvider } from "@mui/material/styles"; //Подключение темы +import { MessagingСtx } from "../../context/messaging"; //Контекст сообщений +import { CardBlock } from "./blocks/cardBlock"; //Информация об объекте +import { CardDetail } from "./blocks/cardDetail"; //Детализация по объекту +import { theme } from "./styles/themes.js"; //Стиль темы +import { useFilteredPlanCtlgs } from "./hooks"; //Вспомогательные хуки +import { useMechRecAssemblyMon } from "./backend"; //Хук корневой панели мониторинга сборки изделий + +//--------- +//Константы +//--------- + +//Стили +const STYLES = { + PLANS_FINDER: { marginTop: "10px", marginLeft: "10px", width: "93%" }, + PLANS_CHECKBOX_HAVEDOCS: { alignContent: "space-around" }, + PLANS_LIST_ITEM_ZERODOCS: { backgroundColor: "#ebecec" }, + PLANS_LIST_ITEM_PRIMARY: { wordWrap: "break-word" }, + PLANS_LIST_ITEM_SECONDARY: { wordWrap: "break-word", fontSize: "0.6rem", textTransform: "uppercase" }, + PLANS_BUTTON: { position: "absolute" }, + PLANS_DRAWER: { + width: "350px", + display: "inline-block", + flexShrink: 0, + [`& .MuiDrawer-paper`]: { width: "350px", display: "inline-block", boxSizing: "border-box" } + } +}; + +//------------------------------------ +//Вспомогательные функции и компоненты +//------------------------------------ + +//Склонения для документов +const DECLINATIONS = ["план", "плана", "планов"]; + +//Форматирование для отображения количества документов +const formatCountDocs = nCountDocs => { + //Получаем последнюю цифру в значении + let num = (nCountDocs % 100) % 10; + //Документов + if (nCountDocs > 10 && nCountDocs < 20) return `${nCountDocs} ${DECLINATIONS[2]}`; + //Документа + if (num > 1 && num < 5) return `${nCountDocs} ${DECLINATIONS[1]}`; + //Документ + if (num == 1) return `${nCountDocs} ${DECLINATIONS[0]}`; + //Документов + return `${nCountDocs} ${DECLINATIONS[2]}`; +}; + +//Список каталогов планов +const PlanCtlgsList = ({ planCtlgs = [], selectedPlanCtlg, filter, setFilter, onClick } = {}) => { + //Генерация содержимого + return ( +
+ { + setFilter(pv => ({ ...pv, ctlgName: event.target.value })); + }} + > + + setFilter(pv => ({ ...pv, haveDocs: event.target.checked }))} />} + label="Только с планами" + labelPlacement="end" + /> + + + {planCtlgs.map(p => ( + (onClick ? onClick({ NRN: p.NRN, SNAME: p.SNAME, NMIN_YEAR: p.NMIN_YEAR, NMAX_YEAR: p.NMAX_YEAR }) : null)} + > + {p.SNAME}} + secondary={{formatCountDocs(p.NCOUNT_DOCS)}} + /> + + ))} + +
+ ); +}; + +//Контроль свойств - Список каталогов планов +PlanCtlgsList.propTypes = { + planCtlgs: PropTypes.array, + selectedPlanCtlg: PropTypes.number, + onClick: PropTypes.func, + filter: PropTypes.object, + setFilter: PropTypes.func +}; + +//----------- +//Тело модуля +//----------- + +//Корневая панель мониторинга сборки изделий +const MechRecAssemblyMon = () => { + //Собственное состояние + const [state, setState, selectPlan, unselectPlan] = useMechRecAssemblyMon(); + + //Состояние для фильтра каталогов + const [filter, setFilter] = useState({ ctlgName: "", haveDocs: false }); + + //Массив отфильтрованных каталогов + const filteredPlanCtgls = useFilteredPlanCtlgs(state.planCtlgs, filter); + + //Подключение к контексту сообщений + const { InlineMsgInfo } = useContext(MessagingСtx); + + //Обработка нажатия на элемент в списке каталогов планов + const handleProjectClick = project => { + if (state.selectedPlanCtlg.NRN != project.NRN) selectPlan(project); + else unselectPlan(); + }; + + //Обработка нажатия на карточку объекта + const handleCardClick = plan => { + setState(pv => ({ + ...pv, + selectedPlan: { NRN: plan.NRN, SNUMB: plan.SNUMB, NPROGRESS: plan.NPROGRESS, SDETAIL: plan.SDETAIL, NYEAR: plan.NYEAR } + })); + }; + + //Обработка нажатия на кнопку "Назад" + const handleBackClick = () => { + setState(pv => ({ ...pv, selectedPlan: { NRN: null, SNUMB: null, NPROGRESS: null, SDETAIL: null, NYEAR: null } })); + }; + + //Генерация содержимого + return ( + + + setState(pv => ({ ...pv, showPlanList: !pv.showPlanList }))}> + Программы + + setState(pv => ({ ...pv, showPlanList: false }))} + sx={STYLES.PLANS_DRAWER} + > + + + {state.init == true ? ( + state.selectedPlanCtlg.NRN ? ( + <> + + {`${state.selectedPlanCtlg.SNAME} на ${state.selectedPlanCtlg.NMIN_YEAR}г. - ${state.selectedPlanCtlg.NMAX_YEAR}г.`} + + {state.plansLoaded == true ? ( + state.selectedPlan.NRN ? ( + + ) : ( + + + {state.plans.map(el => ( + = 5 ? 2.4 : 12 / state.plans.length} + key={el.NRN} + display="flex" + justifyContent="center" + > + + + ))} + + + ) + ) : null} + + ) : ( + + ) + ) : null} + + + ); +}; + +//---------------- +//Интерфейс модуля +//---------------- + +export { MechRecAssemblyMon }; diff --git a/app/panels/mech_rec_assembly_mon/styles/themes.js b/app/panels/mech_rec_assembly_mon/styles/themes.js new file mode 100644 index 0000000..37818ee --- /dev/null +++ b/app/panels/mech_rec_assembly_mon/styles/themes.js @@ -0,0 +1,66 @@ +import { createTheme } from "@mui/material/styles"; //Интерфейсные элементы + +//Описание темы +const theme = createTheme({ + palette: { + text: { + secondary: { fontColor: "rgba(0, 0, 0, 0.298)" } + } + }, + typography: { + h1: { + fontSize: "40px", + fontWeight: 400, + textAlign: "center" + }, + h2: { + fontSize: "40px", + fontWeight: 700, + textAlign: "center" + }, + h3: { + fontSize: "30px", + fontWeight: 700, + textAlign: "center" + }, + h4: { + fontSize: "16px", + fontWeight: 400, + textAlign: "center" + }, + subtitle1: { + fontSize: "30px", + fontWeight: 400, + textAlign: "center" + }, + subtitle2: { + fontSize: "20px", + fontWeight: 700, + textAlign: "center" + }, + UDO_body1: { + fontSize: "14px", + fontWeight: 400, + textAlign: "center", + wordWrap: "break-word", + letterSpacing: "0.00938em", + lineHeight: "1.5" + }, + UDO_body2: { + fontSize: "12px", + fontWeight: 400, + whiteSpace: "pre-line", + textAlign: "center", + wordWrap: "break-word", + letterSpacing: "0.00938em", + lineHeight: "1.5" + }, + body3: { + fontSize: "9px", + whiteSpace: "pre-line", + textAlign: "center" + } + } +}); + +export { theme }; diff --git a/app/panels/mech_rec_cost_jobs_manage/backend.js b/app/panels/mech_rec_cost_jobs_manage/backend.js new file mode 100644 index 0000000..ee013e8 --- /dev/null +++ b/app/panels/mech_rec_cost_jobs_manage/backend.js @@ -0,0 +1,337 @@ +//--------------------- +//Подключение библиотек +//--------------------- + +import { useState, useCallback, useEffect, useContext } from "react"; //Классы React +import { BackEndСtx } from "../../context/backend"; //Контекст взаимодействия с сервером +import { object2Base64XML } from "../../core/utils"; //Вспомогательные функции + +//--------- +//Константы +//--------- + +//Размер страницы данных +const DATA_GRID_PAGE_SIZE = 5; +const DATA_GRID_PAGE_FCEQUIPMENT = 10; + +//--------------------------------------------- +//Вспомогательные функции форматирования данных +//--------------------------------------------- + +//Переиницализация выбранных значений строк (необходимо при сортировке или добавлении записей строк) +const updatingSelected = (rows, selectedRows) => { + //Если полученный массив строк не пустой + if (rows.length > 0 && selectedRows.length > 0) { + //Устанавливаем выбор там, где он был установлен + let updatedRows = rows.map(item => { + if (selectedRows.includes(item.NRN)) { + return { ...item, NSELECT: 1 }; + } else { + return item; + } + }); + return updatedRows; + } + //Возвращаем + return rows; +}; + +//----------- +//Тело модуля +//----------- + +//Хук для таблицы маршрутных листов +const useCostRouteLists = (task, processIdent) => { + //Собственное состояние - таблица данных + const [costRouteLists, setCostRouteLists] = useState({ + task: null, + dataLoaded: false, + columnsDef: [], + orders: null, + rows: [], + selectedRows: [], + reload: true, + pageNumber: 1, + morePages: true + }); + + //Подключение к контексту взаимодействия с сервером + const { executeStored, SERV_DATA_TYPE_CLOB } = useContext(BackEndСtx); + + //Загрузка данных таблицы с сервера + const loadData = useCallback(async () => { + if (costRouteLists.reload) { + const data = await executeStored({ + stored: "PKG_P8PANELS_MECHREC.FCJOBSSP_FCROUTLST_DG_GET", + args: { + NFCJOBS: task, + CORDERS: { VALUE: object2Base64XML(costRouteLists.orders, { arrayNodeName: "orders" }), SDATA_TYPE: SERV_DATA_TYPE_CLOB }, + NPAGE_NUMBER: costRouteLists.pageNumber, + NPAGE_SIZE: DATA_GRID_PAGE_SIZE, + NINCLUDE_DEF: costRouteLists.dataLoaded ? 0 : 1 + }, + respArg: "COUT", + attributeValueProcessor: (name, val) => (["NSELECT"].includes(name) ? val === 1 : val) + }); + setCostRouteLists(pv => ({ + ...pv, + task: task, + columnsDef: data.XCOLUMNS_DEF ? [...data.XCOLUMNS_DEF] : pv.columnsDef, + rows: + pv.pageNumber == 1 + ? updatingSelected([...(data.XROWS || [])], costRouteLists.selectedRows) + : updatingSelected([...pv.rows, ...(data.XROWS || [])], costRouteLists.selectedRows), + dataLoaded: true, + reload: false, + morePages: (data.XROWS || []).length >= DATA_GRID_PAGE_SIZE + })); + } + // eslint-disable-next-line react-hooks/exhaustive-deps + }, [ + costRouteLists.reload, + costRouteLists.filters, + costRouteLists.orders, + costRouteLists.dataLoaded, + costRouteLists.pageNumber, + executeStored, + SERV_DATA_TYPE_CLOB + ]); + + //Добавление/удаление записи в селектлисте + const modifySelectList = useCallback( + async prms => { + try { + if (prms.NSELECT) { + await executeStored({ + stored: "PKG_P8PANELS_MECHREC.SELECTLIST_FCROUTLST_ADD", + args: { NIDENT: processIdent, NFCROUTLST: prms.NFCROUTLST } + }); + } else { + await executeStored({ + stored: "PKG_P8PANELS_MECHREC.SELECTLIST_FCROUTLST_DEL", + args: { NIDENT: processIdent, NFCROUTLST: prms.NFCROUTLST } + }); + } + } catch (e) { + throw new Error(e.message); + } + }, + // eslint-disable-next-line react-hooks/exhaustive-deps + [executeStored] + ); + + //При необходимости обновить данные таблицы + useEffect(() => { + loadData(); + }, [costRouteLists.reload, loadData]); + + //При изменении сменного задания + useEffect(() => { + setCostRouteLists(pv => ({ + ...pv, + dataLoaded: false, + columnsDef: [], + orders: null, + rows: [], + selectedRows: [], + reload: true, + pageNumber: 1, + morePages: true + })); + // eslint-disable-next-line react-hooks/exhaustive-deps + }, [task]); + + return [costRouteLists, setCostRouteLists, modifySelectList]; +}; + +//Хук для таблицы операций +const useCostJobsSpecs = (task, fcroutlstList, processIdent) => { + //Собственное состояние - таблица данных + const [costJobsSpecs, setCostJobsSpecs] = useState({ + task: null, + dataLoaded: false, + columnsDef: [], + orders: null, + rows: [], + selectedRows: [], + reload: true, + pageNumber: 1, + morePages: true + }); + + //Подключение к контексту взаимодействия с сервером + const { executeStored, SERV_DATA_TYPE_CLOB } = useContext(BackEndСtx); + + //Загрузка данных таблицы с сервера + const loadData = useCallback(async () => { + if (costJobsSpecs.reload) { + const data = await executeStored({ + stored: "PKG_P8PANELS_MECHREC.FCJOBSSP_DG_GET", + args: { + NFCJOBS: task, + NIDENT: processIdent, + //SFCROUTLST_LIST: fcroutlstList.join(","), + CORDERS: { VALUE: object2Base64XML(costJobsSpecs.orders, { arrayNodeName: "orders" }), SDATA_TYPE: SERV_DATA_TYPE_CLOB }, + NPAGE_NUMBER: costJobsSpecs.pageNumber, + NPAGE_SIZE: DATA_GRID_PAGE_SIZE, + NINCLUDE_DEF: costJobsSpecs.dataLoaded ? 0 : 1 + }, + respArg: "COUT", + attributeValueProcessor: (name, val) => (["NSELECT"].includes(name) ? val === 1 : val) + }); + setCostJobsSpecs(pv => ({ + ...pv, + task: task, + columnsDef: data.XCOLUMNS_DEF ? [...data.XCOLUMNS_DEF] : pv.columnsDef, + rows: + pv.pageNumber == 1 + ? updatingSelected([...(data.XROWS || [])], costJobsSpecs.selectedRows) + : updatingSelected([...pv.rows, ...(data.XROWS || [])], costJobsSpecs.selectedRows), + dataLoaded: true, + reload: false, + morePages: (data.XROWS || []).length >= DATA_GRID_PAGE_SIZE + })); + } + // eslint-disable-next-line react-hooks/exhaustive-deps + }, [ + costJobsSpecs.reload, + costJobsSpecs.filters, + costJobsSpecs.orders, + costJobsSpecs.dataLoaded, + costJobsSpecs.pageNumber, + executeStored, + SERV_DATA_TYPE_CLOB + ]); + + //Выдача задания + const issueCostJobsSpecs = useCallback( + async prms => { + try { + await executeStored({ + stored: "PKG_P8PANELS_MECHREC.FCJOBSSP_ISSUE", + args: { NFCJOBS: prms.NFCJOBS, SFCJOBSSP_LIST: prms.SFCJOBSSP_LIST } + }); + } catch (e) { + throw new Error(e.message); + } + }, + [executeStored] + ); + + //При необходимости обновить данные таблицы + useEffect(() => { + loadData(); + }, [costJobsSpecs.reload, loadData]); + + //При изменении сменного задания + useEffect(() => { + setCostJobsSpecs(pv => ({ + ...pv, + dataLoaded: false, + columnsDef: [], + orders: null, + rows: [], + selectedRows: [], + reload: true, + pageNumber: 1, + morePages: true + })); + }, [task, fcroutlstList]); + + return [costJobsSpecs, setCostJobsSpecs, issueCostJobsSpecs]; +}; + +//Хук для таблицы рабочих центров +const useCostEquipment = () => { + //Собственное состояние - таблица данных + const [costEquipment, setCostEquipment] = useState({ + dataLoaded: false, + columnsDef: [], + orders: null, + rows: [], + selectedRows: [], + selectedLoaded: false, + reload: true, + pageNumber: 1, + morePages: true + }); + + //Подключение к контексту взаимодействия с сервером + const { executeStored, SERV_DATA_TYPE_CLOB } = useContext(BackEndСtx); + + //Загрузка данных таблицы с сервера + const loadData = useCallback(async () => { + if (costEquipment.reload) { + const data = await executeStored({ + stored: "PKG_P8PANELS_MECHREC.FCEQUIPMENT_DG_GET", + args: { + CORDERS: { VALUE: object2Base64XML(costEquipment.orders, { arrayNodeName: "orders" }), SDATA_TYPE: SERV_DATA_TYPE_CLOB }, + NPAGE_NUMBER: costEquipment.pageNumber, + NPAGE_SIZE: DATA_GRID_PAGE_FCEQUIPMENT, + NINCLUDE_DEF: costEquipment.dataLoaded ? 0 : 1 + }, + respArg: "COUT", + attributeValueProcessor: (name, val) => (["NSELECT"].includes(name) ? val === 1 : val) + }); + setCostEquipment(pv => ({ + ...pv, + columnsDef: data.XCOLUMNS_DEF ? [...data.XCOLUMNS_DEF] : pv.columnsDef, + rows: + pv.pageNumber == 1 + ? updatingSelected([...(data.XROWS || [])], costEquipment.selectedRows) + : updatingSelected([...pv.rows, ...(data.XROWS || [])], costEquipment.selectedRows), + dataLoaded: true, + reload: false, + morePages: (data.XROWS || []).length >= DATA_GRID_PAGE_FCEQUIPMENT + })); + } + // eslint-disable-next-line react-hooks/exhaustive-deps + }, [ + costEquipment.reload, + costEquipment.filters, + costEquipment.orders, + costEquipment.dataLoaded, + costEquipment.pageNumber, + executeStored, + SERV_DATA_TYPE_CLOB + ]); + + //Включение оборудования в операции + const includeCostEquipment = useCallback( + async prms => { + try { + await executeStored({ + stored: "PKG_P8PANELS_MECHREC.FCJOBSSP_INC_FCEQUIPMENT", + args: { NFCEQUIPMENT: prms.NFCEQUIPMENT, NFCJOBS: prms.NFCJOBS, SFCJOBSSP_LIST: prms.SFCJOBSSP_LIST } + }); + } catch (e) { + throw new Error(e.message); + } + }, + [executeStored] + ); + + //Исключение оборудования из операции + const excludeCostEquipment = useCallback( + async prms => { + try { + await executeStored({ + stored: "PKG_P8PANELS_MECHREC.FCJOBSSP_EXC_FCEQUIPMENT", + args: { NFCEQUIPMENT: prms.NFCEQUIPMENT, NFCJOBS: prms.NFCJOBS, SFCJOBSSP_LIST: prms.SFCJOBSSP_LIST } + }); + } catch (e) { + throw new Error(e.message); + } + }, + [executeStored] + ); + + //При необходимости обновить данные таблицы + useEffect(() => { + loadData(); + }, [costEquipment.reload, loadData]); + + return [costEquipment, setCostEquipment, includeCostEquipment, excludeCostEquipment]; +}; + +export { useCostRouteLists, useCostJobsSpecs, useCostEquipment, updatingSelected }; diff --git a/app/panels/mech_rec_cost_jobs_manage/fcjobssp.js b/app/panels/mech_rec_cost_jobs_manage/fcjobssp.js new file mode 100644 index 0000000..de2c159 --- /dev/null +++ b/app/panels/mech_rec_cost_jobs_manage/fcjobssp.js @@ -0,0 +1,422 @@ +/* + Парус 8 - Панели мониторинга - ПУП - Выдача сменного задания + Компонент панели: Таблица информации об операциях сменного задания +*/ + +//--------------------- +//Подключение библиотек +//--------------------- + +import React from "react"; //Классы React +import PropTypes from "prop-types"; //Контроль свойств компонента +import { Typography, Box, Checkbox, Grid, Icon, Button } from "@mui/material"; //Интерфейсные элементы +import { P8PDataGrid, P8P_DATA_GRID_SIZE } from "../../components/p8p_data_grid"; //Таблица данных +import { P8P_DATA_GRID_CONFIG_PROPS } from "../../config_wrapper"; //Подключение компонентов к настройкам приложения +import { useCostRouteLists, useCostJobsSpecs, useCostEquipment } from "./backend"; //Собственные хуки таблиц + +//--------- +//Константы +//--------- + +const sUnitCostRouteLists = "CostRouteLists"; //Мнемокод раздела маршрутных листов +const sUnitCostJobsSpecs = "CostJobsSpecs"; //Мнемокод раздела операций +const sUnitCostEquipment = "CostEquipment"; //Мнемокод раздела рабочих центров + +//Стили +const STYLES = { + CONTAINER: { textAlign: "center" }, + TABLE: { paddingTop: "15px" }, + TABLE_SUM: { textAlign: "right", paddingTop: "5px", paddingRight: "15px" }, + TABLE_BUTTONS: { display: "flex", justifyContent: "flex-end" }, + CHECK_BOX: { textAlign: "center" }, + OPERATIONS_SEPARATOR: { padding: "3px 0px", backgroundColor: "lightblue" }, + INFORMATION_HALF: { minWidth: "50%", maxWidth: "50%", textAlign: "center" } +}; + +//--------------------------------------------- +//Вспомогательные функции форматирования данных +//--------------------------------------------- + +//Формирование списка отмеченных записей +function selectedReducer(accumulator, current) { + if (current.NSELECT == 1) { + accumulator.push(current.NRN); + } + return accumulator; +} + +//Форматирование значения ячейки +const dataCellRender = ({ row, columnDef, handleSelectChange, sUnit, selectedEquip }) => { + //Инициализируем доступность выбора + let disabled = false; + //Если это рабочие центры + if (sUnit === sUnitCostEquipment) { + //Для колонки выбора + if (columnDef.name === "NSELECT") { + return { + data: ( + + handleSelectChange(row["NRN"], sUnit, row["NCOEFF"] <= row["NLOADING"])} + /> + + ) + }; + } + //Если оборудование загружено + if (row["NCOEFF"] <= row["NLOADING"]) { + //Если поле не поле выбора + if (columnDef.name !== "NSELECT") { + return { + cellStyle: { color: "lightgrey" }, + data: row[columnDef.name] + }; + } + } + } + //Если это операции + if (sUnit === sUnitCostJobsSpecs) { + //Если "Оборудование план" операции сходится с выбранным оборудованием + if (selectedEquip.includes(row["NEQUIP_PLAN"])) { + //Если колонка выбора + if (columnDef.name === "NSELECT") { + return { + cellStyle: { backgroundColor: "#bce0de" }, + data: ( + + handleSelectChange(row["NRN"], sUnit)} + /> + + ) + }; + } else { + return { + cellStyle: { backgroundColor: "#bce0de" }, + data: row[columnDef.name] + }; + } + } + } + //Для колонки выбора + if (columnDef.name === "NSELECT") { + return { + data: ( + + handleSelectChange(row["NRN"], sUnit)} + /> + + ) + }; + } + return { + data: row[columnDef.name] + }; +}; + +//Генерация представления ячейки заголовка группы +export const headCellRender = ({ columnDef }) => { + if (columnDef.name === "NSELECT") { + return { + stackStyle: { padding: "2px", justifyContent: "space-around" }, + data: done + }; + } else { + return { + stackStyle: { padding: "2px" }, + data: columnDef.caption + }; + } +}; + +//----------- +//Тело модуля +//----------- + +//Таблица информации об операциях сменного задания +const CostJobsSpecsDataGrid = ({ task, processIdent, clearSelectlist }) => { + //Собственное состояние - таблица данных маршрутных листов + const [costRouteLists, setCostRouteLists, modifySelectList] = useCostRouteLists(task, processIdent); + + //Собственное состояние - таблица данных операций + const [costJobsSpecs, setCostJobsSpecs, issueCostJobsSpecs] = useCostJobsSpecs(task, costRouteLists.selectedRows, processIdent); + + //Собственное состояние - таблица рабочих центров + const [costEquipment, setCostEquipment, includeCostEquipment, excludeCostEquipment] = useCostEquipment(); + + //При изменении состояния сортировки маршрутных листов + const costRouteListOrderChanged = ({ orders }) => setCostRouteLists(pv => ({ ...pv, orders: [...orders], pageNumber: 1, reload: true })); + + //При изменении количества отображаемых страниц маршрутных листов + const costRouteListPagesCountChanged = () => setCostRouteLists(pv => ({ ...pv, pageNumber: pv.pageNumber + 1, reload: true })); + + //При изменении состояния сортировки операций + const costJobsSpecOrderChanged = ({ orders }) => setCostJobsSpecs(pv => ({ ...pv, orders: [...orders], pageNumber: 1, reload: true })); + + //При изменении количества отображаемых страниц операций + const costJobsSpecPagesCountChanged = () => setCostJobsSpecs(pv => ({ ...pv, pageNumber: pv.pageNumber + 1, reload: true })); + + //При изменении состояния сортировки рабочих центров + const costEquipmentOrderChanged = ({ orders }) => setCostEquipment(pv => ({ ...pv, orders: [...orders], pageNumber: 1, reload: true })); + + //При изменении количества отображаемых страниц рабочих центров + const costEquipmentPagesCountChanged = () => setCostEquipment(pv => ({ ...pv, pageNumber: pv.pageNumber + 1, reload: true })); + + //При включении оборудования в операции + const costJobsSpecIncludeCostEquipment = () => { + //Делаем асинхронно, чтобы при ошибке ничего не обновлять + const includeAsync = async () => { + //Включаем оборудование в операции + try { + await includeCostEquipment({ + NFCEQUIPMENT: costEquipment.selectedRows[0], + NFCJOBS: task, + SFCJOBSSP_LIST: costJobsSpecs.selectedRows.join(";") + }); + //Необходимо обновить все данные + setCostJobsSpecs(pv => ({ ...pv, selectedRows: [], reload: true })); + setCostEquipment(pv => ({ ...pv, selectedRows: [], selectedLoaded: false, reload: true })); + } catch (e) { + throw new Error(e.message); + } + }; + //Включаем оборудование асинхронно + includeAsync(); + }; + + //При исключении оборудования из операции + const costJobsSpecExcludeCostEquipment = () => { + //Делаем асинхронно, чтобы при ошибке ничего не обновлять + const excludeAsync = async () => { + //Включаем оборудование в операции + try { + await excludeCostEquipment({ + NFCEQUIPMENT: costEquipment.selectedRows[0], + NFCJOBS: task, + SFCJOBSSP_LIST: costJobsSpecs.selectedRows.join(";") + }); + //Необходимо обновить данные о маршрутных листах и оборудовании + setCostJobsSpecs(pv => ({ ...pv, selectedRows: [], reload: true })); + setCostEquipment(pv => ({ ...pv, selectedRows: [], reload: true })); + } catch (e) { + throw new Error(e.message); + } + }; + //Исключаем операции асинхронно + excludeAsync(); + }; + + //Выдача задания операции + const costJobsSpecIssue = () => { + //Делаем асинхронно, чтобы при ошибке ничего не обновлять + const issueAsync = async () => { + //Включаем оборудование в операции + try { + await issueCostJobsSpecs({ + NFCJOBS: task, + SFCJOBSSP_LIST: costJobsSpecs.selectedRows.join(";") + }); + //Необходимо обновить данные о маршрутных листах и оборудовании + clearSelectlist(processIdent); + setCostRouteLists(pv => ({ ...pv, selectedRows: [], reload: true })); + setCostEquipment(pv => ({ ...pv, selectedRows: [], reload: true })); + } catch (e) { + throw new Error(e.message); + } + }; + //Выдаем задание асинхронно + issueAsync(); + }; + + //При изменение состояния выбора + const handleSelectChange = (NRN, sUnit, selectedLoaded) => { + //Инициализируем строки таблицы + let rows = []; + //Индекс элемента в массиве + let indexRow = null; + //Исходим от раздела + switch (sUnit) { + //Маршрутные листы + case sUnitCostRouteLists: + //Инициализируем маршрутными листами + rows = costRouteLists.rows; + //Определяем индекс элемента в массиве + indexRow = rows.findIndex(obj => obj.NRN == NRN); + //Изменяем значение выбора + rows[indexRow].NSELECT = !rows[indexRow].NSELECT; + //Добавляем/удаляем маршрутный лист из селектлиста + modifySelectList({ NFCROUTLST: NRN, NSELECT: rows[indexRow].NSELECT }); + //Актуализируем строки + setCostRouteLists(pv => ({ ...pv, rows: rows, selectedRows: rows.reduce(selectedReducer, []) })); + //Выходим + break; + //Операции + case sUnitCostJobsSpecs: + //Инициализируем операциями + rows = costJobsSpecs.rows; + //Определяем индекс элемента в массиве + indexRow = rows.findIndex(obj => obj.NRN == NRN); + //Изменяем значение выбора + rows[indexRow].NSELECT = !rows[indexRow].NSELECT; + //Актуализируем строки + setCostJobsSpecs(pv => ({ ...pv, rows: rows, selectedRows: rows.reduce(selectedReducer, []) })); + //Выходим + break; + //Рабочие центры + case sUnitCostEquipment: + //Инициализируем рабочими центрами + rows = costEquipment.rows; + //Определяем индекс элемента в массиве + indexRow = rows.findIndex(obj => obj.NRN == NRN); + //Изменяем значение выбора + rows[indexRow].NSELECT = !rows[indexRow].NSELECT; + //Актуализируем строки + setCostEquipment(pv => ({ ...pv, rows: rows, selectedRows: rows.reduce(selectedReducer, []), selectedLoaded: selectedLoaded })); + //Выходим + break; + default: + return; + } + }; + + //Генерация содержимого + return ( +
+ + + Маршрутные листы + {costRouteLists.dataLoaded ? ( + <> + + + + + dataCellRender({ ...prms, handleSelectChange, sUnit: sUnitCostRouteLists })} + headCellRender={prms => headCellRender({ ...prms })} + /> + {costRouteLists.selectedRows.length > 0 ? ( + <> + Операции выбранных маршрутных листов + + dataCellRender({ + ...prms, + handleSelectChange, + sUnit: sUnitCostJobsSpecs, + selectedEquip: costEquipment.selectedRows + }) + } + headCellRender={prms => headCellRender({ ...prms })} + /> + + ) : null} + + + ) : null} + + + Рабочие центры + {costEquipment.dataLoaded ? ( + <> + + + + + + + + + dataCellRender({ + ...prms, + handleSelectChange, + sUnit: sUnitCostEquipment, + selectedEquip: costEquipment.selectedRows + }) + } + headCellRender={prms => headCellRender({ ...prms })} + /> + + + ) : null} + + +
+ ); +}; + +//Контроль свойств - Таблица информации об операциях сменного задания +CostJobsSpecsDataGrid.propTypes = { + task: PropTypes.number.isRequired, + processIdent: PropTypes.number, + clearSelectlist: PropTypes.func +}; + +//---------------- +//Интерфейс модуля +//---------------- + +export { CostJobsSpecsDataGrid }; diff --git a/app/panels/mech_rec_cost_jobs_manage/hooks.js b/app/panels/mech_rec_cost_jobs_manage/hooks.js new file mode 100644 index 0000000..76b4637 --- /dev/null +++ b/app/panels/mech_rec_cost_jobs_manage/hooks.js @@ -0,0 +1,23 @@ +/* + Парус 8 - Панели мониторинга - ПУП - Выдача сменного задания + Кастомные хуки +*/ + +//--------------------- +//Подключение библиотек +//--------------------- + +import React from "react"; //Классы React + +//----------- +//Тело модуля +//----------- + +//Клиентский отбор сменных заданий по поисковой фразе +export const useFilteredFcjobs = (jobs, filter) => { + const filteredJobs = React.useMemo(() => { + return jobs.filter(catalog => catalog.SDOC_INFO.toString().toLowerCase().includes(filter.jobName)); + }, [jobs, filter]); + + return filteredJobs; +}; diff --git a/app/panels/mech_rec_cost_jobs_manage/index.js b/app/panels/mech_rec_cost_jobs_manage/index.js new file mode 100644 index 0000000..4e787b9 --- /dev/null +++ b/app/panels/mech_rec_cost_jobs_manage/index.js @@ -0,0 +1,16 @@ +/* + Парус 8 - Панели мониторинга - ПУП - Выдача сменного задания + Панель мониторинга: Точка входа +*/ + +//--------------------- +//Подключение библиотек +//--------------------- + +import { MechRecCostJobs } from "./mech_rec_cost_jobs_manage"; //Корневая панель выдачи сменного задания + +//---------------- +//Интерфейс модуля +//---------------- + +export const RootClass = MechRecCostJobs; diff --git a/app/panels/mech_rec_cost_jobs_manage/mech_rec_cost_jobs_manage.js b/app/panels/mech_rec_cost_jobs_manage/mech_rec_cost_jobs_manage.js new file mode 100644 index 0000000..84ffc8b --- /dev/null +++ b/app/panels/mech_rec_cost_jobs_manage/mech_rec_cost_jobs_manage.js @@ -0,0 +1,206 @@ +/* + Парус 8 - Панели мониторинга - ПУП - Выдача сменного задания + Панель мониторинга: Корневая панель выдачи сменного задания +*/ + +//--------------------- +//Подключение библиотек +//--------------------- + +import React, { useContext, useState, useCallback, useEffect } from "react"; //Классы React +import PropTypes from "prop-types"; //Контроль свойств компонента +import { Drawer, Fab, Box, List, ListItemButton, ListItemText, Typography, TextField } from "@mui/material"; //Интерфейсные элементы +import { BackEndСtx } from "../../context/backend"; //Контекст взаимодействия с сервером +import { MessagingСtx } from "../../context/messaging"; //Контекст сообщений +import { useFilteredFcjobs } from "./hooks"; //Вспомогательные хуки +import { CostJobsSpecsDataGrid } from "./fcjobssp"; //Собственные хуки таблиц + +//--------- +//Константы +//--------- + +//Стили +const STYLES = { + JOBS_FINDER: { marginTop: "10px", marginLeft: "10px", width: "93%" }, + JOBS_LIST_ITEM_PRIMARY: { wordWrap: "break-word" }, + JOBS_BUTTON: { position: "absolute" }, + JOBS_DRAWER: { + width: "350px", + display: "inline-block", + flexShrink: 0, + [`& .MuiDrawer-paper`]: { width: "350px", display: "inline-block", boxSizing: "border-box" } + }, + CONTAINER: { margin: "5px 0px", textAlign: "center" } +}; + +//------------------------------------ +//Вспомогательные функции и компоненты +//------------------------------------ + +//Список сменных заданий +const JobList = ({ jobs = [], selectedJob, filter, setFilter, onClick } = {}) => { + //Генерация содержимого + return ( +
+ { + setFilter(pv => ({ ...pv, jobName: event.target.value })); + }} + > + + {jobs.map(p => ( + (onClick ? onClick(p) : null)}> + {p.SDOC_INFO}} /> + + ))} + +
+ ); +}; + +//Контроль свойств - Список каталогов планов +JobList.propTypes = { + jobs: PropTypes.array, + selectedJob: PropTypes.object, + onClick: PropTypes.func, + filter: PropTypes.object, + setFilter: PropTypes.func +}; + +//----------- +//Тело модуля +//----------- + +//Корневая панель выдачи сменного задания +const MechRecCostJobs = () => { + //Собственное состояние - таблица данных + const [state, setState] = useState({ + init: false, + showJobList: false, + jobList: [], + jobListLoaded: false, + selectedJob: {}, + processIdent: null, + dataLoaded: false + }); + + //Состояние для фильтра каталогов + const [filter, setFilter] = useState({ jobName: "" }); + + //Массив отфильтрованных каталогов + const filteredJobs = useFilteredFcjobs(state.jobList, filter); + + //Подключение к контексту взаимодействия с сервером + const { executeStored } = useContext(BackEndСtx); + + //Подключение к контексту сообщений + const { InlineMsgInfo } = useContext(MessagingСtx); + + //Инициализация каталогов планов + const initPlans = useCallback(async () => { + if (!state.init) { + const data = await executeStored({ + stored: "PKG_P8PANELS_MECHREC.FCJOBS_INIT", + args: {}, + respArg: "COUT", + fullResponse: true, + isArray: name => name === "XFCJOBS" + }); + setState(pv => ({ + ...pv, + init: true, + jobList: [...(data.XPAYLOAD?.XFCJOBS || [])], + jobListLoaded: true, + processIdent: data.XPAYLOAD.XINFO.NPROCESS_IDENT + })); + } + }, [state.init, executeStored]); + + //При подключении компонента к странице + useEffect(() => { + initPlans(); + // eslint-disable-next-line react-hooks/exhaustive-deps + }, []); + + //Очистка селектлиста по идентификатору процесса + const clearSelectlist = useCallback( + async NIDENT => { + console.log(NIDENT); + try { + await executeStored({ + stored: "P_SELECTLIST_CLEAR", + args: { NIDENT: NIDENT } + }); + } catch (e) { + throw new Error(e.message); + } + }, + [executeStored] + ); + + //Выбор плана + const selectJob = job => { + //Очищаем селектлист + clearSelectlist(state.processIdent); + //Обновляем состояние + setState(pv => ({ + ...pv, + selectedJob: job, + showJobList: false, + dataLoaded: false + })); + }; + + //Сброс выбора плана + const unselectJob = () => { + //Очищаем селектлист + clearSelectlist(state.processIdent); + //Обновляем состояние + setState(pv => ({ + ...pv, + selectedJob: {}, + showJobList: false, + dataLoaded: false + })); + }; + + //Обработка нажатия на элемент в списке планов + const handleJobClick = job => { + if (state.selectedJob.NRN != job.NRN) selectJob(job); + else unselectJob(); + }; + + //Генерация содержимого + return ( + + setState(pv => ({ ...pv, showJobList: !pv.showJobList }))}> + Сменные задания + + setState(pv => ({ ...pv, showJobList: false }))} sx={STYLES.JOBS_DRAWER}> + + +
+ {state.selectedJob.NRN ? ( + <> + {`Сменное задание "${state.selectedJob.SSUBDIV}" на ${state.selectedJob.SPERIOD}`} + + + ) : !state.selectedJob.NRN ? ( + + ) : null} +
+
+ ); +}; + +//---------------- +//Интерфейс модуля +//---------------- + +export { MechRecCostJobs }; diff --git a/app/panels/mech_rec_dept_cost_jobs/index.js b/app/panels/mech_rec_dept_cost_jobs/index.js new file mode 100644 index 0000000..ec84fd1 --- /dev/null +++ b/app/panels/mech_rec_dept_cost_jobs/index.js @@ -0,0 +1,16 @@ +/* + Парус 8 - Панели мониторинга - ПУП - Загрузка цеха + Панель мониторинга: Точка входа +*/ + +//--------------------- +//Подключение библиотек +//--------------------- + +import { MechRecDeptCostJobs } from "./mech_rec_dept_cost_jobs"; //Корневая панель загрузки цеха + +//---------------- +//Интерфейс модуля +//---------------- + +export const RootClass = MechRecDeptCostJobs; diff --git a/app/panels/mech_rec_dept_cost_jobs/mech_rec_dept_cost_jobs.js b/app/panels/mech_rec_dept_cost_jobs/mech_rec_dept_cost_jobs.js new file mode 100644 index 0000000..3595bee --- /dev/null +++ b/app/panels/mech_rec_dept_cost_jobs/mech_rec_dept_cost_jobs.js @@ -0,0 +1,153 @@ +/* + Парус 8 - Панели мониторинга - ПУП - Загрузка цеха + Панель мониторинга: Корневая панель загрузки цеха +*/ + +//--------------------- +//Подключение библиотек +//--------------------- + +import React, { useState, useContext, useCallback, useEffect } from "react"; //Классы React +import { Typography, Box } from "@mui/material"; //Интерфейсные элементы +import { object2Base64XML } from "../../core/utils"; //Вспомогательные процедуры и функции +import { P8PDataGrid, P8P_DATA_GRID_SIZE } from "../../components/p8p_data_grid"; //Таблица данных +import { P8P_DATA_GRID_CONFIG_PROPS } from "../../config_wrapper"; //Подключение компонентов к настройкам приложения +import { BackEndСtx } from "../../context/backend"; //Контекст взаимодействия с сервером + +//--------- +//Константы +//--------- + +//Размер страницы данных +const DATA_GRID_PAGE_SIZE = 5; + +//Стили +const STYLES = { + CONTAINER: { textAlign: "center", paddingTop: "20px" }, + TITLE: { paddingBottom: "15px" } +}; + +//------------------------------------ +//Вспомогательные функции и компоненты +//------------------------------------ + +//Генерация заливки строки исходя от значений +const dataCellRender = ({ row, columnDef }) => { + //Описываем общие свойства + let cellProps = { title: row[columnDef.name] }; + //Описываем общий стиль + let cellStyle = { padding: "8px", maxWidth: "300px", textOverflow: "ellipsis", overflow: "hidden", whiteSpace: "pre" }; + // + if (columnDef.name.match(/N.*_VALUE/) && row[columnDef.name]) { + if (row[`${columnDef.name.substring(0, 12)}_TYPE`] === 0) { + cellStyle = { ...cellStyle, backgroundColor: "lightgrey" }; + } else { + cellStyle = { ...cellStyle, backgroundColor: "lightgreen" }; + } + } + return { + cellProps, + cellStyle, + data: row[columnDef] + }; +}; + +//----------- +//Тело модуля +//----------- + +//Корневая панель загрузки цеха +const MechRecDeptCostJobs = () => { + //Собственное состояние - таблица данных + const [costJobs, setCostJobs] = useState({ + subdiv: null, + dataLoaded: false, + columnsDef: [], + filters: [], + orders: null, + rows: [], + reload: true, + pageNumber: 1, + morePages: true + }); + + //Подключение к контексту взаимодействия с сервером + const { executeStored, SERV_DATA_TYPE_CLOB } = useContext(BackEndСtx); + + //Загрузка данных таблицы с сервера + const loadData = useCallback(async () => { + if (costJobs.reload) { + const data = await executeStored({ + stored: "PKG_P8PANELS_MECHREC.FCJOBS_DEP_LOAD_DG_GET", + args: { + CFILTERS: { VALUE: object2Base64XML(costJobs.filters, { arrayNodeName: "filters" }), SDATA_TYPE: SERV_DATA_TYPE_CLOB }, + CORDERS: { VALUE: object2Base64XML(costJobs.orders, { arrayNodeName: "orders" }), SDATA_TYPE: SERV_DATA_TYPE_CLOB }, + NPAGE_NUMBER: costJobs.pageNumber, + NPAGE_SIZE: DATA_GRID_PAGE_SIZE, + NINCLUDE_DEF: costJobs.dataLoaded ? 0 : 1 + }, + respArg: "COUT", + isArray: name => name === "XCOLUMNS_DEF" || name === "XROWS", + attributeValueProcessor: (name, val) => (name === "caption" ? undefined : val) + }); + setCostJobs(pv => ({ + ...pv, + subdiv: data.XINFO.SSUBDIV, + columnsDef: data.XFCJOBS.XDATA.XCOLUMNS_DEF ? [...data.XFCJOBS.XDATA.XCOLUMNS_DEF] : pv.columnsDef, + rows: pv.pageNumber == 1 ? [...(data.XFCJOBS.XDATA.XROWS || [])] : [...pv.rows, ...(data.XFCJOBS.XDATA.XROWS || [])], + dataLoaded: true, + reload: false, + morePages: (data.XFCJOBS.XDATA.XROWS || []).length >= DATA_GRID_PAGE_SIZE + })); + } + }, [costJobs.reload, costJobs.filters, costJobs.orders, costJobs.dataLoaded, costJobs.pageNumber, executeStored, SERV_DATA_TYPE_CLOB]); + + //При изменении состояния фильтра + const handleFilterChanged = ({ filters }) => setCostJobs(pv => ({ ...pv, filters: [...filters], pageNumber: 1, reload: true })); + + //При изменении состояния сортировки + const handleOrderChanged = ({ orders }) => setCostJobs(pv => ({ ...pv, orders: [...orders], pageNumber: 1, reload: true })); + + //При изменении количества отображаемых страниц + const handlePagesCountChanged = () => setCostJobs(pv => ({ ...pv, pageNumber: pv.pageNumber + 1, reload: true })); + + //При необходимости обновить данные таблицы + useEffect(() => { + loadData(); + }, [costJobs.reload, loadData]); + + //Генерация содержимого + return ( +
+ + {costJobs.dataLoaded ? ( + <> + + {`Загрузка станков "${costJobs.subdiv}"`} + + + dataCellRender({ ...prms })} + /> + + + ) : null} + +
+ ); +}; + +//---------------- +//Интерфейс модуля +//---------------- + +export { MechRecDeptCostJobs }; diff --git a/app/panels/mech_rec_dept_cost_prod_plans/fcroutlst.js b/app/panels/mech_rec_dept_cost_prod_plans/fcroutlst.js new file mode 100644 index 0000000..ca13ec0 --- /dev/null +++ b/app/panels/mech_rec_dept_cost_prod_plans/fcroutlst.js @@ -0,0 +1,328 @@ +/* + Парус 8 - Панели мониторинга - ПУП - Производственный план цеха + Компонент панели: Таблица маршрутных листов +*/ + +//--------------------- +//Подключение библиотек +//--------------------- + +import React, { useState, useCallback, useEffect, useContext } from "react"; //Классы React +import PropTypes from "prop-types"; //Контроль свойств компонента +import { Typography, Box, Paper, IconButton, Icon, Dialog, DialogContent, DialogActions, Button, TextField } from "@mui/material"; //Интерфейсные элементы +import { P8PDataGrid, P8P_DATA_GRID_SIZE } from "../../components/p8p_data_grid"; //Таблица данных +import { P8P_DATA_GRID_CONFIG_PROPS } from "../../config_wrapper"; //Подключение компонентов к настройкам приложения +import { BackEndСtx } from "../../context/backend"; //Контекст взаимодействия с сервером +import { object2Base64XML } from "../../core/utils"; //Вспомогательные функции +import { CostRouteListsOrdDataGrid } from "./fcroutlstord"; //Состояние таблицы заказов маршрутных листов +import { ApplicationСtx } from "../../context/application"; //Контекст приложения + +//--------- +//Константы +//--------- + +//Стили +const STYLES = { + CONTAINER: { textAlign: "center" }, + TABLE: { paddingTop: "15px" }, + TABLE_SUM: { textAlign: "right", paddingTop: "5px", paddingRight: "15px" }, + DIALOG_EDITOR: { maxWidth: "250px" }, + DIALOG_BUTTONS: { marginTop: "10px", width: "240px" } +}; + +//--------------------------------------------- +//Вспомогательные функции форматирования данных +//--------------------------------------------- + +//Генерация представления расширения строки +export const rowExpandRender = ({ row }) => { + return ( + + + + ); +}; + +//Форматирование значений колонок +const dataCellRender = ({ row, columnDef, handlePriorEditOpen, handleOrderEditOpen }) => { + //!!! Пока отключено - не удалять + // switch (columnDef.name) { + // case "NPRIOR_PARTY": + // return { + // data: ( + // <> + // {row["NPRIOR_PARTY"]} + // handlePriorEditOpen(row["NRN"], row["NPRIOR_PARTY"])}> + // edit + // + // + // ) + // }; + // case "NCHANGE_FACEACC": + // return { + // data: ( + // + // handleOrderEditOpen(row["NRN"], row["SPROD_ORDER"])}> + // inventory + // + // + // ) + // }; + // } + return { + data: row[columnDef] + }; +}; + +//----------- +//Тело модуля +//----------- + +//Таблица маршрутных листов +const CostRouteListsDataGrid = ({ task }) => { + //Собственное состояние - таблица данных + const [costRouteLists, setCostRouteLists] = useState({ + dataLoaded: false, + columnsDef: [], + orders: null, + rows: [], + reload: true, + pageNumber: 1, + morePages: true, + editPriorNRN: null, + editPriorValue: null, + editOrderNRN: null, + editOrderValue: null + }); + + //Подключение к контексту взаимодействия с сервером + const { executeStored, SERV_DATA_TYPE_CLOB } = useContext(BackEndСtx); + + //Подключение к контексту приложения + const { pOnlineShowDictionary } = useContext(ApplicationСtx); + + //Размер страницы данных + const DATA_GRID_PAGE_SIZE = 5; + + //Загрузка данных таблицы с сервера + const loadData = useCallback(async () => { + if (costRouteLists.reload) { + const data = await executeStored({ + stored: "PKG_P8PANELS_MECHREC.FCROUTLST_DEPT_DG_GET", + args: { + NFCPRODPLANSP: task, + CORDERS: { VALUE: object2Base64XML(costRouteLists.orders, { arrayNodeName: "orders" }), SDATA_TYPE: SERV_DATA_TYPE_CLOB }, + NPAGE_NUMBER: costRouteLists.pageNumber, + NPAGE_SIZE: DATA_GRID_PAGE_SIZE, + NINCLUDE_DEF: costRouteLists.dataLoaded ? 0 : 1 + }, + respArg: "COUT" + }); + setCostRouteLists(pv => ({ + ...pv, + columnsDef: data.XCOLUMNS_DEF ? [...data.XCOLUMNS_DEF] : pv.columnsDef, + rows: pv.pageNumber == 1 ? [...(data.XROWS || [])] : [...pv.rows, ...(data.XROWS || [])], + dataLoaded: true, + reload: false, + morePages: (data.XROWS || []).length >= DATA_GRID_PAGE_SIZE + })); + } + // eslint-disable-next-line react-hooks/exhaustive-deps + }, [ + costRouteLists.reload, + costRouteLists.filters, + costRouteLists.orders, + costRouteLists.dataLoaded, + costRouteLists.pageNumber, + executeStored, + SERV_DATA_TYPE_CLOB + ]); + + //При необходимости обновить данные таблицы + useEffect(() => { + loadData(); + }, [costRouteLists.reload, loadData]); + + //При изменении состояния сортировки + const handleOrderChanged = ({ orders }) => setCostRouteLists(pv => ({ ...pv, orders: [...orders], pageNumber: 1, reload: true })); + + //При изменении количества отображаемых страниц + const handlePagesCountChanged = () => setCostRouteLists(pv => ({ ...pv, pageNumber: pv.pageNumber + 1, reload: true })); + + //При открытии изменения приоритета партии + const handlePriorEditOpen = (NRN, nPriorValue) => { + setCostRouteLists(pv => ({ ...pv, editPriorNRN: NRN, editPriorValue: nPriorValue })); + }; + + //При закрытии изменения приоритета партии + const handlePriorEditClose = () => { + setCostRouteLists(pv => ({ ...pv, editPriorNRN: null, editPriorValue: null })); + }; + + //При изменении значения приоритета партии + const handlePriorFormChanged = e => { + setCostRouteLists(pv => ({ ...pv, editPriorValue: e.target.value })); + }; + + //Изменение приоритета + const priorChange = useCallback( + async (NRN, PriorValue, rows) => { + try { + await executeStored({ + stored: "PKG_P8PANELS_MECHREC.FCROUTLST_PRIOR_PARTY_UPDATE", + args: { NFCROUTLST: NRN, SPRIOR_PARTY: PriorValue } + }); + //Изменяем значение приоритета у нужного + rows[rows.findIndex(obj => obj.NRN == NRN)].NPRIOR_PARTY = PriorValue; + //Актуализируем строки таблицы + setCostRouteLists(pv => ({ ...pv, rows: rows })); + //Закрываем окно + handlePriorEditClose(); + } catch (e) { + throw new Error(e.message); + } + }, + [executeStored] + ); + + //При нажатии на изменение приоритета партии + const handlePriorChange = () => { + //Изменяем значение + priorChange(costRouteLists.editPriorNRN, costRouteLists.editPriorValue, costRouteLists.rows); + }; + + //При открытии изменения заказа + const handleOrderEditOpen = (NRN, sProdOrderValue) => { + setCostRouteLists(pv => ({ ...pv, editOrderNRN: NRN, editOrderValue: sProdOrderValue })); + }; + + //При закрытии изменения заказа + const handleOrderEditClose = () => { + setCostRouteLists(pv => ({ ...pv, editOrderNRN: null, editOrderValue: null })); + }; + + //Изменение заказа + const setEditOrderValue = value => { + console.log(value); + setCostRouteLists(pv => ({ ...pv, editOrderValue: value })); + }; + + //При изменении значения заказа + const handleOrderFormChanged = e => { + setEditOrderValue(e.target.value); + }; + + //При нажатии на изменение заказа + const handleOrderChange = () => { + //Изменяем значение + //priorChange(costRouteLists.editPriorNRN, costRouteLists.editPriorValue); + //Закрываем окно + handleOrderEditClose(); + }; + + //Генерация содержимого + return ( +
+ Маршрутные листы + {costRouteLists.dataLoaded ? ( + <> + + dataCellRender({ ...prms, handlePriorEditOpen, handleOrderEditOpen })} + /> + + + ) : null} + {costRouteLists.editPriorNRN ? ( + handlePriorEditClose(null)} sx={STYLES.DIALOG_EDITOR}> + + + + + + + + + + + + + ) : null} + {costRouteLists.editOrderNRN ? ( + handleOrderEditClose(null)} sx={STYLES.DIALOG_EDITOR}> + + + + + + + + + + + + + + + + ) : null} +
+ ); +}; + +//Контроль свойств - Таблица маршрутных листов +CostRouteListsDataGrid.propTypes = { + task: PropTypes.number.isRequired +}; + +//---------------- +//Интерфейс модуля +//---------------- + +export { CostRouteListsDataGrid }; diff --git a/app/panels/mech_rec_dept_cost_prod_plans/fcroutlstord.js b/app/panels/mech_rec_dept_cost_prod_plans/fcroutlstord.js new file mode 100644 index 0000000..ec4ca3b --- /dev/null +++ b/app/panels/mech_rec_dept_cost_prod_plans/fcroutlstord.js @@ -0,0 +1,124 @@ +/* + Парус 8 - Панели мониторинга - ПУП - Производственный план цеха + Компонент панели: Таблица заказов маршрутного листа +*/ + +//--------------------- +//Подключение библиотек +//--------------------- + +import React, { useState, useCallback, useEffect, useContext } from "react"; //Классы React +import PropTypes from "prop-types"; //Контроль свойств компонента +import { Typography } from "@mui/material"; //Интерфейсные элементы +import { P8PDataGrid, P8P_DATA_GRID_SIZE } from "../../components/p8p_data_grid"; //Таблица данных +import { P8P_DATA_GRID_CONFIG_PROPS } from "../../config_wrapper"; //Подключение компонентов к настройкам приложения +import { BackEndСtx } from "../../context/backend"; //Контекст взаимодействия с сервером +import { object2Base64XML } from "../../core/utils"; //Вспомогательные функции + +//--------- +//Константы +//--------- + +//Стили +const STYLES = { + CONTAINER: { margin: "5px 0px", textAlign: "center" } +}; + +//----------- +//Тело модуля +//----------- + +//Таблица заказов маршрутного листа +const CostRouteListsOrdDataGrid = ({ mainRowRN }) => { + //Собственное состояние - таблица данных + const [costRouteListsOrd, setCostRouteListsOrd] = useState({ + dataLoaded: false, + columnsDef: [], + orders: null, + rows: [], + reload: true, + pageNumber: 1, + morePages: true + }); + + //Подключение к контексту взаимодействия с сервером + const { executeStored, SERV_DATA_TYPE_CLOB } = useContext(BackEndСtx); + + //Размер страницы данных + const DATA_GRID_PAGE_SIZE = 10; + + //Загрузка данных таблицы с сервера + const loadData = useCallback(async () => { + if (costRouteListsOrd.reload) { + const data = await executeStored({ + stored: "PKG_P8PANELS_MECHREC.FCROUTLSTORD_DEPT_DG_GET", + args: { + NFCROUTLST: mainRowRN, + CORDERS: { VALUE: object2Base64XML(costRouteListsOrd.orders, { arrayNodeName: "orders" }), SDATA_TYPE: SERV_DATA_TYPE_CLOB }, + NPAGE_NUMBER: costRouteListsOrd.pageNumber, + NPAGE_SIZE: DATA_GRID_PAGE_SIZE, + NINCLUDE_DEF: costRouteListsOrd.dataLoaded ? 0 : 1 + }, + respArg: "COUT" + }); + setCostRouteListsOrd(pv => ({ + ...pv, + columnsDef: data.XCOLUMNS_DEF ? [...data.XCOLUMNS_DEF] : pv.columnsDef, + rows: pv.pageNumber == 1 ? [...(data.XROWS || [])] : [...pv.rows, ...(data.XROWS || [])], + dataLoaded: true, + reload: false, + morePages: (data.XROWS || []).length >= DATA_GRID_PAGE_SIZE + })); + } + // eslint-disable-next-line react-hooks/exhaustive-deps + }, [ + costRouteListsOrd.reload, + costRouteListsOrd.filters, + costRouteListsOrd.orders, + costRouteListsOrd.dataLoaded, + costRouteListsOrd.pageNumber, + executeStored, + SERV_DATA_TYPE_CLOB + ]); + + //При необходимости обновить данные таблицы + useEffect(() => { + loadData(); + }, [costRouteListsOrd.reload, loadData]); + + //При изменении состояния сортировки + const handleOrderChanged = ({ orders }) => setCostRouteListsOrd(pv => ({ ...pv, orders: [...orders], pageNumber: 1, reload: true })); + + //При изменении количества отображаемых страниц + const handlePagesCountChanged = () => setCostRouteListsOrd(pv => ({ ...pv, pageNumber: pv.pageNumber + 1, reload: true })); + + //Генерация содержимого + return ( +
+ Заказы + {costRouteListsOrd.dataLoaded ? ( + + ) : null} +
+ ); +}; + +//Контроль свойств - Таблица заказов маршрутного листа +CostRouteListsOrdDataGrid.propTypes = { + mainRowRN: PropTypes.number.isRequired +}; + +//---------------- +//Интерфейс модуля +//---------------- + +export { CostRouteListsOrdDataGrid }; diff --git a/app/panels/mech_rec_dept_cost_prod_plans/hooks.js b/app/panels/mech_rec_dept_cost_prod_plans/hooks.js new file mode 100644 index 0000000..0cef903 --- /dev/null +++ b/app/panels/mech_rec_dept_cost_prod_plans/hooks.js @@ -0,0 +1,23 @@ +/* + Парус 8 - Панели мониторинга - ПУП - Производственный план цеха + Кастомные хуки +*/ + +//--------------------- +//Подключение библиотек +//--------------------- + +import React from "react"; //Классы React + +//----------- +//Тело модуля +//----------- + +//Клиентский отбор каталогов по поисковой фразе и наличию планов +export const useFilteredPlans = (plans, filter) => { + const filteredPlans = React.useMemo(() => { + return plans.filter(catalog => catalog.SDOC_INFO.toString().toLowerCase().includes(filter.planName)); + }, [plans, filter]); + + return filteredPlans; +}; diff --git a/app/panels/mech_rec_dept_cost_prod_plans/incomefromdeps.js b/app/panels/mech_rec_dept_cost_prod_plans/incomefromdeps.js new file mode 100644 index 0000000..e59aef0 --- /dev/null +++ b/app/panels/mech_rec_dept_cost_prod_plans/incomefromdeps.js @@ -0,0 +1,120 @@ +/* + Парус 8 - Панели мониторинга - ПУП - Производственный план цеха + Компонент панели: Таблица сдачи продукции +*/ + +//--------------------- +//Подключение библиотек +//--------------------- + +import React, { useState, useCallback, useEffect, useContext } from "react"; //Классы React +import PropTypes from "prop-types"; //Контроль свойств компонента +import { Typography, Box } from "@mui/material"; //Интерфейсные элементы +import { P8PDataGrid, P8P_DATA_GRID_SIZE } from "../../components/p8p_data_grid"; //Таблица данных +import { P8P_DATA_GRID_CONFIG_PROPS } from "../../config_wrapper"; //Подключение компонентов к настройкам приложения +import { BackEndСtx } from "../../context/backend"; //Контекст взаимодействия с сервером +import { object2Base64XML, formatDateRF } from "../../core/utils"; //Вспомогательные функции + +//--------- +//Константы +//--------- + +//Стили +const STYLES = { + CONTAINER: { textAlign: "center" }, + TABLE: { paddingTop: "15px" } +}; + +//----------- +//Тело модуля +//----------- + +//Таблица сдачи продукции +const IncomFromDepsDataGrid = ({ task }) => { + //Собственное состояние - таблица данных + const [incomFromDeps, setIncomFromDeps] = useState({ + dataLoaded: false, + columnsDef: [], + orders: null, + rows: [], + reload: true, + pageNumber: 1, + morePages: true + }); + + //Размер страницы данных + const DATA_GRID_PAGE_SIZE = 10; + + //Подключение к контексту взаимодействия с сервером + const { executeStored, SERV_DATA_TYPE_CLOB } = useContext(BackEndСtx); + + //Загрузка данных таблицы с сервера + const loadData = useCallback(async () => { + if (incomFromDeps.reload) { + const data = await executeStored({ + stored: "PKG_P8PANELS_MECHREC.INCOMEFROMDEPS_DEPT_DG_GET", + args: { + NFCPRODPLANSP: task, + CORDERS: { VALUE: object2Base64XML(incomFromDeps.orders, { arrayNodeName: "orders" }), SDATA_TYPE: SERV_DATA_TYPE_CLOB }, + NPAGE_NUMBER: incomFromDeps.pageNumber, + NPAGE_SIZE: DATA_GRID_PAGE_SIZE, + NINCLUDE_DEF: incomFromDeps.dataLoaded ? 0 : 1 + }, + attributeValueProcessor: (name, val) => (["DDUE_DATE"].includes(name) ? formatDateRF(val) : val), + respArg: "COUT" + }); + setIncomFromDeps(pv => ({ + ...pv, + columnsDef: data.XCOLUMNS_DEF ? [...data.XCOLUMNS_DEF] : pv.columnsDef, + rows: pv.pageNumber == 1 ? [...(data.XROWS || [])] : [...pv.rows, ...(data.XROWS || [])], + dataLoaded: true, + reload: false, + morePages: (data.XROWS || []).length >= DATA_GRID_PAGE_SIZE + })); + } + // eslint-disable-next-line react-hooks/exhaustive-deps + }, [incomFromDeps.reload, incomFromDeps.orders, incomFromDeps.dataLoaded, incomFromDeps.pageNumber, executeStored, SERV_DATA_TYPE_CLOB]); + + //При необходимости обновить данные таблицы + useEffect(() => { + loadData(); + }, [incomFromDeps.reload, loadData]); + + //При изменении состояния сортировки + const handleOrderChanged = ({ orders }) => setIncomFromDeps(pv => ({ ...pv, orders: [...orders], pageNumber: 1, reload: true })); + + //При изменении количества отображаемых страниц + const handlePagesCountChanged = () => setIncomFromDeps(pv => ({ ...pv, pageNumber: pv.pageNumber + 1, reload: true })); + + //Генерация содержимого + return ( +
+ Сдача продукции + + {incomFromDeps.dataLoaded ? ( + + ) : null} + +
+ ); +}; + +//Контроль свойств - Таблица сдачи продукции +IncomFromDepsDataGrid.propTypes = { + task: PropTypes.number.isRequired +}; + +//---------------- +//Интерфейс модуля +//---------------- + +export { IncomFromDepsDataGrid }; diff --git a/app/panels/mech_rec_dept_cost_prod_plans/index.js b/app/panels/mech_rec_dept_cost_prod_plans/index.js new file mode 100644 index 0000000..21d3907 --- /dev/null +++ b/app/panels/mech_rec_dept_cost_prod_plans/index.js @@ -0,0 +1,16 @@ +/* + Парус 8 - Панели мониторинга - ПУДП - Производственный план цеха + Панель мониторинга: Точка входа +*/ + +//--------------------- +//Подключение библиотек +//--------------------- + +import { MechRecDeptCostProdPlans } from "./mech_rec_dept_cost_prod_plans"; //Корневая панель производственного плана цеха + +//---------------- +//Интерфейс модуля +//---------------- + +export const RootClass = MechRecDeptCostProdPlans; diff --git a/app/panels/mech_rec_dept_cost_prod_plans/mech_rec_dept_cost_prod_plans.js b/app/panels/mech_rec_dept_cost_prod_plans/mech_rec_dept_cost_prod_plans.js new file mode 100644 index 0000000..2dbd8f7 --- /dev/null +++ b/app/panels/mech_rec_dept_cost_prod_plans/mech_rec_dept_cost_prod_plans.js @@ -0,0 +1,445 @@ +/* + Парус 8 - Панели мониторинга - ПУП - Производственный план цеха + Панель мониторинга: Корневая панель производственного плана цеха +*/ + +//--------------------- +//Подключение библиотек +//--------------------- + +import React, { useContext, useState, useCallback, useEffect } from "react"; //Классы React +import PropTypes from "prop-types"; //Контроль свойств компонента +import { + Drawer, + Fab, + Box, + List, + ListItemButton, + ListItemText, + Typography, + TextField, + Link, + Dialog, + DialogContent, + DialogActions, + Button +} from "@mui/material"; //Интерфейсные элементы +import { BackEndСtx } from "../../context/backend"; //Контекст взаимодействия с сервером +import { useFilteredPlans } from "./hooks"; //Вспомогательные хуки +import { object2Base64XML } from "../../core/utils"; //Вспомогательные функции +import { P8PDataGrid, P8P_DATA_GRID_SIZE } from "../../components/p8p_data_grid"; //Таблица данных +import { P8P_DATA_GRID_CONFIG_PROPS } from "../../config_wrapper"; //Подключение компонентов к настройкам приложения +import { MessagingСtx } from "../../context/messaging"; //Контекст сообщений +import { IncomFromDepsDataGrid } from "./incomefromdeps"; //Таблица сдачи продукции +import { CostRouteListsDataGrid } from "./fcroutlst"; //Таблица маршрутных листов + +//--------- +//Константы +//--------- + +//Стили +const STYLES = { + PLANS_FINDER: { marginTop: "10px", marginLeft: "10px", width: "93%" }, + PLANS_LIST_ITEM_PRIMARY: { wordWrap: "break-word" }, + PLANS_BUTTON: { position: "absolute" }, + PLANS_DRAWER: { + width: "350px", + display: "inline-block", + flexShrink: 0, + [`& .MuiDrawer-paper`]: { width: "350px", display: "inline-block", boxSizing: "border-box" } + }, + CONTAINER: { paddingTop: "40px", margin: "5px 0px", textAlign: "center" }, + PLAN_FACT_VALUE: { textAlign: "center", display: "flex", justifyContent: "center" }, + PLAN_FACT_DELIMITER: { padding: "0px 5px" }, + FACT_VALUE: { color: "blue" } +}; + +//------------------------------------ +//Вспомогательные функции и компоненты +//------------------------------------ + +//Генерация представления ячейки заголовка группы +export const groupCellRender = ({ group }) => ({ + cellStyle: { padding: "2px" }, + data: group.caption +}); + +//Генерация заливки строки исходя от значений +const dataCellRender = ({ row, columnDef, handleProdOrderClick, handleMatresCodeClick }) => { + //Описываем общие свойства + let cellProps = { title: row[columnDef.name] }; + //Описываем общий стиль + let cellStyle = { padding: "8px", maxWidth: "300px", textOverflow: "ellipsis", overflow: "hidden", whiteSpace: "pre" }; + //Для колонки "Статус" + if (columnDef.name === "SSTATUS") { + //Факт === План + if (row["NMAIN_QUANT"] === row["NREL_FACT"]) { + return { + cellProps, + cellStyle: { backgroundColor: "lightgreen", ...cellStyle }, + data: row[columnDef] + }; + } + //План <= (Факт + Запущено) + if (row["NMAIN_QUANT"] <= row["NREL_FACT"] + row["NFCROUTLST_QUANT"]) { + return { + cellProps, + cellStyle: { backgroundColor: "lightblue", ...cellStyle }, + data: row[columnDef] + }; + } + //Сумма "Количество план" = 0 или < "План" + if (row["NSUM_PLAN"] === 0 || (row["NSUM_PLAN"] !== 0 && row["NSUM_PLAN"] < row["NMAIN_QUANT"])) { + //"Факт" >= "План" + if (row["NREL_FACT"] >= row["NMAIN_QUANT"]) { + return { + cellProps, + cellStyle: { backgroundColor: "#F0E68C", ...cellStyle }, + data: row[columnDef] + }; + } + } else { + //Сумма "Количество факт" >= сумма "Количество план" + if (row["NSUM_FACT"] >= row["NSUM_PLAN"]) { + return { + cellProps, + cellStyle: { backgroundColor: "#F0E68C", ...cellStyle }, + data: row[columnDef] + }; + } + } + return { + cellProps, + cellStyle: { backgroundColor: "lightcoral", ...cellStyle }, + data: row[columnDef] + }; + } + //Для колонки даты + if (columnDef.name.indexOf("PLAN_FACT") >= 0) { + //Получаем текущий день + let curDay = new Date().getDate().toString().padStart(2, "0"); + //Формируем regex для проверки + let regex = new RegExp(`N_${curDay}.*`, "g"); + //Если это значение текущего дня + if (columnDef.name.match(regex)) { + cellStyle = { ...cellStyle, backgroundColor: "lightgrey" }; + } + //Если в колонке есть значени + if (row[columnDef.name]) { + //Разбиваем его на план/факт + let values = row[columnDef.name].split("/"); + //Разбиваем значения на блоки + return { + cellProps, + cellStyle, + data: ( + + {values[0]} + / + {values[1]} + + ) + }; + } else { + //Если значения нет + return { + cellProps, + cellStyle, + data: row[columnDef] + }; + } + } + //Для колонки "Заказ" + if (columnDef.name === "SPROD_ORDER") { + return { + cellProps, + cellStyle, + data: ( + handleProdOrderClick(row["NRN"])}> + {row[columnDef.name]} + + ) + }; + } + //Для колонки "Обозначение" + if (columnDef.name === "SMATRES_CODE") { + return { + cellProps, + cellStyle, + data: ( + handleMatresCodeClick(row["NRN"])}> + {row[columnDef.name]} + + ) + }; + } + return { + cellProps, + cellStyle, + data: row[columnDef] + }; +}; + +//Список каталогов планов +const PlanList = ({ plans = [], selectedPlan, filter, setFilter, onClick } = {}) => { + //Генерация содержимого + return ( +
+ { + setFilter(pv => ({ ...pv, planName: event.target.value })); + }} + > + + {plans.map(p => ( + (onClick ? onClick(p) : null)}> + {p.SDOC_INFO}} /> + + ))} + +
+ ); +}; + +//Контроль свойств - Список каталогов планов +PlanList.propTypes = { + plans: PropTypes.array, + selectedPlan: PropTypes.object, + onClick: PropTypes.func, + filter: PropTypes.object, + setFilter: PropTypes.func +}; + +//----------- +//Тело модуля +//----------- + +//Корневая панель производственного плана цеха +const MechRecDeptCostProdPlans = () => { + //Собственное состояние - таблица данных + const [state, setState] = useState({ + init: false, + showPlanList: false, + showIncomeFromDeps: null, + showFcroutelst: null, + planList: [], + planListLoaded: false, + selectedPlan: {}, + dataLoaded: false, + columnsDef: [], + orders: null, + rows: [], + reload: true, + pageNumber: 1, + morePages: true + }); + + //Состояние для фильтра каталогов + const [filter, setFilter] = useState({ planName: "" }); + + //Массив отфильтрованных каталогов + const filteredPlanCtgls = useFilteredPlans(state.planList, filter); + + //Размер страницы данных + const DATA_GRID_PAGE_SIZE = 10; + + //Подключение к контексту взаимодействия с сервером + const { executeStored, SERV_DATA_TYPE_CLOB } = useContext(BackEndСtx); + + //Подключение к контексту сообщений + const { InlineMsgInfo } = useContext(MessagingСtx); + + // Инициализация каталогов планов + const initPlans = useCallback(async () => { + if (!state.init) { + const data = await executeStored({ + stored: "PKG_P8PANELS_MECHREC.FCPRODPLAN_DEPT_INIT", + args: {}, + respArg: "COUT", + isArray: name => name === "XFCPRODPLANS" + }); + setState(pv => ({ ...pv, init: true, planList: [...(data?.XFCPRODPLANS || [])], planListLoaded: true })); + } + // eslint-disable-next-line react-hooks/exhaustive-deps + }, [state.init, executeStored]); + + //Загрузка данных таблицы с сервера + const loadData = useCallback( + async NRN => { + if (state.reload && NRN) { + const data = await executeStored({ + stored: "PKG_P8PANELS_MECHREC.FCPRODPLANSP_DEPT_DG_GET", + args: { + NFCPRODPLAN: NRN, + CORDERS: { VALUE: object2Base64XML(state.orders, { arrayNodeName: "orders" }), SDATA_TYPE: SERV_DATA_TYPE_CLOB }, + NPAGE_NUMBER: state.pageNumber, + NPAGE_SIZE: DATA_GRID_PAGE_SIZE, + NINCLUDE_DEF: state.dataLoaded ? 0 : 1 + }, + respArg: "COUT", + attributeValueProcessor: (name, val) => (name === "caption" ? undefined : val) + }); + setState(pv => ({ + ...pv, + columnsDef: data.XCOLUMNS_DEF ? [...data.XCOLUMNS_DEF] : pv.columnsDef, + rows: pv.pageNumber == 1 ? [...(data.XROWS || [])] : [...pv.rows, ...(data.XROWS || [])], + dataLoaded: true, + reload: false, + morePages: (data.XROWS || []).length >= DATA_GRID_PAGE_SIZE + })); + } + }, + // eslint-disable-next-line react-hooks/exhaustive-deps + [state.reload, state.orders, state.dataLoaded, state.pageNumber, executeStored, SERV_DATA_TYPE_CLOB] + ); + + //При необходимости обновить данные таблицы + useEffect(() => { + if (state.selectedPlan.NRN) { + loadData(state.selectedPlan.NRN); + } else { + setState(pv => ({ ...pv, dataLoaded: false, columnsDef: [], orders: null, rows: [], reload: true, pageNumber: 1, morePages: true })); + } + }, [state.selectedPlan, state.reload, loadData]); + + //При подключении компонента к странице + useEffect(() => { + initPlans(); + // eslint-disable-next-line react-hooks/exhaustive-deps + }, []); + + //Выбор плана + const selectPlan = plan => { + setState(pv => ({ + ...pv, + showIncomeFromDeps: null, + showFcroutelst: null, + selectedPlan: plan, + showPlanList: false, + dataLoaded: false, + columnsDef: [], + orders: null, + rows: [], + reload: true, + pageNumber: 1, + morePages: true + })); + }; + + //Сброс выбора плана + const unselectPlan = () => + setState(pv => ({ + ...pv, + showIncomeFromDeps: null, + showFcroutelst: null, + selectedPlan: {}, + showPlanList: false, + dataLoaded: false, + columnsDef: [], + orders: null, + rows: [], + reload: true, + pageNumber: 1, + morePages: true + })); + + //Обработка нажатия на элемент в списке планов + const handlePlanClick = plan => { + if (state.selectedPlan.NRN != plan.NRN) selectPlan(plan); + else unselectPlan(); + }; + + //При изменении состояния сортировки + const handleOrderChanged = ({ orders }) => setState(pv => ({ ...pv, orders: [...orders], pageNumber: 1, reload: true })); + + //При изменении количества отображаемых страниц + const handlePagesCountChanged = () => setState(pv => ({ ...pv, pageNumber: pv.pageNumber + 1, reload: true })); + + //При нажатии на "Заказ" + const handleProdOrderClick = planSp => { + setState(pv => ({ ...pv, showIncomeFromDeps: planSp })); + }; + + //При нажатии на "Обозначение" + const handleMatresCodeClick = planSp => { + setState(pv => ({ ...pv, showFcroutelst: planSp })); + }; + + //Генерация содержимого + return ( + + setState(pv => ({ ...pv, showPlanList: !pv.showPlanList }))}> + Планы + + setState(pv => ({ ...pv, showPlanList: false }))} + sx={STYLES.PLANS_DRAWER} + > + + +
+ {state.dataLoaded ? ( + <> + {`Производственный план цеха "${state.selectedPlan.SSUBDIV}" на ${state.selectedPlan.SPERIOD}`} + dataCellRender({ ...prms, handleProdOrderClick, handleMatresCodeClick })} + groupCellRender={groupCellRender} + /> + + ) : !state.selectedPlan.NRN ? ( + + ) : null} +
+ {state.showIncomeFromDeps ? ( + handleProdOrderClick(null)} fullWidth maxWidth="xl"> + + + + + + + + ) : null} + {state.showFcroutelst ? ( + handleMatresCodeClick(null)} fullWidth maxWidth="xl"> + + + + + + + + ) : null} +
+ ); +}; + +//---------------- +//Интерфейс модуля +//---------------- + +export { MechRecDeptCostProdPlans }; diff --git a/db/PKG_P8PANELS_MECHREC.pck b/db/PKG_P8PANELS_MECHREC.pck index 2a98f26..78d250c 100644 --- a/db/PKG_P8PANELS_MECHREC.pck +++ b/db/PKG_P8PANELS_MECHREC.pck @@ -61,6 +61,50 @@ create or replace package PKG_P8PANELS_MECHREC as ( COUT out clob -- Список каталогов раздела "Планы и отчеты производства изделий" ); + + /* Получение таблицы маршрутных листов, связанных с производственным составом */ + procedure FCROUTLST_MON_DG_GET + ( + NPRODCMPSP in number, -- Рег. номер производственного состава + NFCPRODPLAN in number, -- Рег. номер план + NPAGE_NUMBER in number, -- Номер страницы (игнорируется при NPAGE_SIZE=0) + NPAGE_SIZE in number, -- Количество записей на странице (0 - все) + CORDERS in clob, -- Сортировки + NINCLUDE_DEF in number, -- Признак включения описания колонок таблицы в ответ + COUT out clob -- Сериализованная таблица данных + ); + + /* Получение таблицы комплектовочных ведомостей, связанных с производственным составом */ + procedure FCDELIVSH_DG_GET + ( + NPRODCMPSP in number, -- Рег. номер производственного состава + NFCPRODPLAN in number, -- Рег. номер план + NPAGE_NUMBER in number, -- Номер страницы (игнорируется при NPAGE_SIZE=0) + NPAGE_SIZE in number, -- Количество записей на странице (0 - все) + CORDERS in clob, -- Сортировки + NINCLUDE_DEF in number, -- Признак включения описания колонок таблицы в ответ + COUT out clob -- Сериализованная таблица данных + ); + + /* Считывание деталий для выбора SVG */ + procedure FCPRODCMP_DETAILS_GET + ( + NFCPRODPLAN in number, -- Рег. номер плана + COUT out clob -- Сериализованная таблица данных + ); + + /* Получение таблицы записей "Планы и отчеты производства изделий" */ + procedure FCPRODPLAN_GET + ( + NCRN in number, -- Рег. номер каталога + COUT out clob -- Сериализованная таблица данных + ); + + /* Инициализация каталогов раздела "Планы и отчеты производства изделий" */ + procedure FCPRODPLAN_CTLG_INIT + ( + COUT out clob -- Список каталогов раздела "Планы и отчеты производства изделий" + ); end PKG_P8PANELS_MECHREC; / @@ -74,13 +118,13 @@ create or replace package body PKG_P8PANELS_MECHREC as SBG_COLOR_BLACK constant PKG_STD.TSTRING := '#00000080'; -- Цвет заливки черный STEXT_COLOR_ORANGE constant PKG_STD.TSTRING := '#FF8C00'; -- Цвет текста оранжевый STEXT_COLOR_GREY constant PKG_STD.TSTRING := '#555'; -- Цвет текста серый - - /* Константы - параметры отборов планов */ + + /* Константы - параметры отборов планов ("Производственная программа") */ NFCPRODPLAN_CATEGORY constant PKG_STD.TNUMBER := 1; -- Категория планов "Производственная программа" NFCPRODPLAN_STATUS constant PKG_STD.TNUMBER := 2; -- Статус планов "Утвержден" SFCPRODPLAN_TYPE constant PKG_STD.TSTRING := 'План'; -- Тип планов (мнемокод состояния) NMAX_TASKS constant PKG_STD.TNUMBER := 10000; -- Максимальное количество отображаемых задач - + /* Константы - классы задач плана ("Производственная программа") */ NCLASS_WO_DEFICIT constant PKG_STD.TNUMBER := 0; -- Без дефицита выпуска NCLASS_PART_DEFICIT constant PKG_STD.TNUMBER := 1; -- С частичным дефицитом выпуска @@ -88,7 +132,7 @@ create or replace package body PKG_P8PANELS_MECHREC as NCLASS_WITH_DEFICIT constant PKG_STD.TNUMBER := 3; -- С дефицитом запуска или датой меньше текущей NCLASS_FUTURE_DATE constant PKG_STD.TNUMBER := 4; -- Дата анализа еще не наступила NCLASS_WO_LINKS constant PKG_STD.TNUMBER := 5; -- Задача без связи - + /* Константы - типы задач плана, содержание детализации ("Производственная программа") */ NTASK_TYPE_RL_WITH_GP constant PKG_STD.TNUMBER := 0; -- Маршрутные листы с развертыванием товарных запасов NTASK_TYPE_RL_WITH_DL constant PKG_STD.TNUMBER := 1; -- Маршрутные листы с развертыванием комплектаций @@ -96,6 +140,16 @@ create or replace package body PKG_P8PANELS_MECHREC as NTASK_TYPE_INC_DEPS_RL constant PKG_STD.TNUMBER := 3; -- Приход из подразделений и маршрутные листы NTASK_TYPE_RL constant PKG_STD.TNUMBER := 4; -- Маршрутные листы NTASK_TYPE_EMPTY constant PKG_STD.TNUMBER := null; -- Нет детализации + + /* Константы - параметры отборов планов ("Мониторинг сборки изделий") */ + NFCPRODPLAN_CATEGORY_MON constant PKG_STD.TNUMBER := 0; -- Категория планов "Первичный документ" + NFCPRODPLAN_STATUS_MON constant PKG_STD.TNUMBER := 2; -- Статус планов "Утвержден" + SFCPRODPLAN_TYPE_MON constant PKG_STD.TSTRING := 'План'; -- Тип планов (мнемокод состояния) + + /* Константы - параметры отборов ("Загрузка цеха") */ + SDICMUNTS_WD constant PKG_STD.TSTRING := 'н/ч'; -- Мнемокод ед. измерения нормочасов + SDICMUNTS_HOUR constant PKG_STD.TSTRING := 'час'; -- Мнемокод ед. измерения часов + /* Константы - дополнительные атрибуты */ STASK_ATTR_START_FACT constant PKG_STD.TSTRING := 'start_fact'; -- Запущено @@ -2210,6 +2264,639 @@ create or replace package body PKG_P8PANELS_MECHREC as PKG_STATE.DIAGNOSTICS_STACKED(); P_EXCEPTION(0, PKG_STATE.SQL_ERRM()); end ACATALOG_INIT; + + /* Считывание рег. номера спецификации связанного плана */ + function FCPRODPLANSP_LINKED_GET + ( + NPRODCMPSP in number, -- Рег. номер производственного состава + NFCPRODPLAN in number -- Рег. номер план + ) return number -- Рег. номер спецификации связанного плана + is + NRESULT PKG_STD.TREF; -- Рег. номер спецификации связанного плана + begin + /* Считываем запись */ + begin + select S.RN + into NRESULT + from FCPRODPLAN T, + FCPRODPLANSP S + where T.RN = (select P.RN + from DOCLINKS L, + FCPRODPLAN P + where L.IN_DOCUMENT = NFCPRODPLAN + and L.IN_UNITCODE = 'CostProductPlans' + and L.OUT_UNITCODE = 'CostProductPlans' + and P.RN = L.OUT_DOCUMENT + and P.CATEGORY = 1 + and ROWNUM = 1) + and S.PRN = T.RN + and S.PRODCMPSP = NPRODCMPSP; + exception + when others then + NRESULT := null; + end; + /* Возвращаем результат */ + return NRESULT; + end FCPRODPLANSP_LINKED_GET; + + /* Получение таблицы маршрутных листов, связанных с производственным составом */ + procedure FCROUTLST_MON_DG_GET + ( + NPRODCMPSP in number, -- Рег. номер производственного состава + NFCPRODPLAN in number, -- Рег. номер план + NPAGE_NUMBER in number, -- Номер страницы (игнорируется при NPAGE_SIZE=0) + NPAGE_SIZE in number, -- Количество записей на странице (0 - все) + CORDERS in clob, -- Сортировки + NINCLUDE_DEF in number, -- Признак включения описания колонок таблицы в ответ + COUT out clob -- Сериализованная таблица данных + ) + is + NCOMPANY PKG_STD.TREF := GET_SESSION_COMPANY(); -- Организация сеанса + RO PKG_P8PANELS_VISUAL.TORDERS; -- Сортировки + RDG PKG_P8PANELS_VISUAL.TDATA_GRID; -- Описание таблицы + RDG_ROW PKG_P8PANELS_VISUAL.TROW; -- Строка таблицы + NROW_FROM PKG_STD.TREF; -- Номер строки с + NROW_TO PKG_STD.TREF; -- Номер строки по + CSQL clob; -- Буфер для запроса + ICURSOR integer; -- Курсор для исполнения запроса + NFCPRODPLANSP PKG_STD.TREF; -- Рег. номер спецификации связанного плана + NFCROUTLST_IDENT PKG_STD.TREF; -- Рег. номер идентификатора отмеченных записей маршрутных листов + NDICMUNTS_WD PKG_STD.TREF; -- Рег. номер ед. измерения нормочасов + begin + /* Читем сортировки */ + RO := PKG_P8PANELS_VISUAL.TORDERS_FROM_XML(CORDERS => CORDERS); + /* Преобразуем номер и размер страницы в номер строк с и по */ + PKG_P8PANELS_VISUAL.UTL_ROWS_LIMITS_CALC(NPAGE_NUMBER => NPAGE_NUMBER, + NPAGE_SIZE => NPAGE_SIZE, + NROW_FROM => NROW_FROM, + NROW_TO => NROW_TO); + /* Инициализируем таблицу данных */ + RDG := PKG_P8PANELS_VISUAL.TDATA_GRID_MAKE(); + /* Описываем колонки таблицы данных */ + PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG, + SNAME => 'NRN', + SCAPTION => 'Рег. номер', + SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_NUMB, + BVISIBLE => false); + PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG, + SNAME => 'SNUMB', + SCAPTION => '% п/п', + SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_STR, + BVISIBLE => true); + PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG, + SNAME => 'SOPERATION', + SCAPTION => 'Содержание работ', + SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_STR, + BVISIBLE => true); + PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG, + SNAME => 'SEXECUTOR', + SCAPTION => 'Исполнитель', + SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_STR, + BVISIBLE => true); + PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG, + SNAME => 'NREMN_LABOUR', + SCAPTION => 'Остаточная трудоемкость, в н/ч', + SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_NUMB, + BVISIBLE => true); + /* Считываем рег. номер спецификации связанного плана */ + NFCPRODPLANSP := FCPRODPLANSP_LINKED_GET(NPRODCMPSP => NPRODCMPSP, NFCPRODPLAN => NFCPRODPLAN); + /* Если спецификация считалась */ + if (NFCPRODPLANSP is not null) then + /* Инициализируем список маршрутных листов */ + UTL_FCROUTLST_IDENT_INIT(NFCPRODPLANSP => NFCPRODPLANSP, NIDENT => NFCROUTLST_IDENT); + /* Считываем единицу измерения нормочасов */ + FIND_DICMUNTS_CODE(NFLAG_SMART => 0, + NFLAG_OPTION => 0, + NCOMPANY => NCOMPANY, + SMEAS_MNEMO => SDICMUNTS_WD, + NRN => NDICMUNTS_WD); + begin + /* Добавляем подсказку совместимости */ + CSQL := PKG_SQL_BUILD.COMPATIBLE(SSQL => CSQL); + /* Формируем запрос */ + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => 'select *'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' from (select D.*,'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => PKG_SQL_BUILD.SQLROWNUM() || ' NROW'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' from (select SF.RN NRN,'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' TRIM(SH.NUMB) SNUMB,'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' COALESCE(SH.OPER_UK, FT.NAME) SOPERATION,'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' (select I.CODE from INS_DEPARTMENT I where SF.SUBDIV = I.RN) SEXECUTOR,'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' F_DICMUNTS_BASE_RECALC_QUANT(' || PKG_SQL_BUILD.WRAP_NUM(NVALUE => 0) || ','); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' :NCOMPANY,'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' SF.MUNIT,'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' SF.T_SHT_PLAN - SF.LABOUR_FACT,'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' :NDICMUNTS_WD) NREMN_LABOUR'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' from FCROUTLST F,'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' FCROUTLSTSP SF,'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' FCROUTSHTSP SH left outer join FCOPERTYPES FT on SH.OPER_TPS = FT.RN'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' where F.RN in (select SL."DOCUMENT"'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' from SELECTLIST SL'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' where SL.IDENT = :NFCROUTLST_IDENT'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' and SL.UNITCODE = ' || PKG_SQL_BUILD.WRAP_STR(SVALUE => 'CostRouteLists') || ')'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' and SF.PRN = F.RN'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' and SH.RN = SF.FCROUTSHTSP'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' and F.COMPANY = :NCOMPANY'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' %ORDER_BY%) D) F'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' where F.NROW between :NROW_FROM and :NROW_TO'); + /* Учтём сортировки */ + PKG_P8PANELS_VISUAL.TORDERS_SET_QUERY(RDATA_GRID => RDG, RORDERS => RO, SPATTERN => '%ORDER_BY%', CSQL => CSQL); + /* Разбираем его */ + ICURSOR := PKG_SQL_DML.OPEN_CURSOR(SWHAT => 'SELECT'); + PKG_SQL_DML.PARSE(ICURSOR => ICURSOR, SQUERY => CSQL); + /* Делаем подстановку параметров */ + PKG_SQL_DML.BIND_VARIABLE_NUM(ICURSOR => ICURSOR, SNAME => 'NCOMPANY', NVALUE => NCOMPANY); + PKG_SQL_DML.BIND_VARIABLE_NUM(ICURSOR => ICURSOR, SNAME => 'NROW_FROM', NVALUE => NROW_FROM); + PKG_SQL_DML.BIND_VARIABLE_NUM(ICURSOR => ICURSOR, SNAME => 'NROW_TO', NVALUE => NROW_TO); + PKG_SQL_DML.BIND_VARIABLE_NUM(ICURSOR => ICURSOR, SNAME => 'NDICMUNTS_WD', NVALUE => NDICMUNTS_WD); + PKG_SQL_DML.BIND_VARIABLE_NUM(ICURSOR => ICURSOR, SNAME => 'NFCROUTLST_IDENT', NVALUE => NFCROUTLST_IDENT); + /* Описываем структуру записи курсора */ + PKG_SQL_DML.DEFINE_COLUMN_NUM(ICURSOR => ICURSOR, IPOSITION => 1); + PKG_SQL_DML.DEFINE_COLUMN_STR(ICURSOR => ICURSOR, IPOSITION => 2); + PKG_SQL_DML.DEFINE_COLUMN_STR(ICURSOR => ICURSOR, IPOSITION => 3); + PKG_SQL_DML.DEFINE_COLUMN_STR(ICURSOR => ICURSOR, IPOSITION => 4); + PKG_SQL_DML.DEFINE_COLUMN_NUM(ICURSOR => ICURSOR, IPOSITION => 5); + PKG_SQL_DML.DEFINE_COLUMN_NUM(ICURSOR => ICURSOR, IPOSITION => 6); + /* Делаем выборку */ + if (PKG_SQL_DML.EXECUTE(ICURSOR => ICURSOR) = 0) then + null; + end if; + /* Обходим выбранные записи */ + while (PKG_SQL_DML.FETCH_ROWS(ICURSOR => ICURSOR) > 0) + loop + /* Добавляем колонки с данными */ + PKG_P8PANELS_VISUAL.TROW_ADD_CUR_COLN(RROW => RDG_ROW, + SNAME => 'NRN', + ICURSOR => ICURSOR, + NPOSITION => 1, + BCLEAR => true); + PKG_P8PANELS_VISUAL.TROW_ADD_CUR_COLS(RROW => RDG_ROW, + SNAME => 'SNUMB', + ICURSOR => ICURSOR, + NPOSITION => 2); + PKG_P8PANELS_VISUAL.TROW_ADD_CUR_COLS(RROW => RDG_ROW, + SNAME => 'SOPERATION', + ICURSOR => ICURSOR, + NPOSITION => 3); + PKG_P8PANELS_VISUAL.TROW_ADD_CUR_COLS(RROW => RDG_ROW, + SNAME => 'SEXECUTOR', + ICURSOR => ICURSOR, + NPOSITION => 4); + PKG_P8PANELS_VISUAL.TROW_ADD_CUR_COLN(RROW => RDG_ROW, + SNAME => 'NREMN_LABOUR', + ICURSOR => ICURSOR, + NPOSITION => 5); + /* Добавляем строку в таблицу */ + PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_ROW(RDATA_GRID => RDG, RROW => RDG_ROW); + end loop; + exception + when others then + PKG_SQL_DML.CLOSE_CURSOR(ICURSOR => ICURSOR); + raise; + end; + end if; + /* Очищаем отмеченные маршрутные листы */ + P_SELECTLIST_CLEAR(NIDENT => NFCROUTLST_IDENT); + /* Сериализуем описание */ + COUT := PKG_P8PANELS_VISUAL.TDATA_GRID_TO_XML(RDATA_GRID => RDG, NINCLUDE_DEF => NINCLUDE_DEF); + exception + when others then + /* Очищаем отмеченные маршрутные листы */ + P_SELECTLIST_CLEAR(NIDENT => NFCROUTLST_IDENT); + raise; + end FCROUTLST_MON_DG_GET; + + /* Получение таблицы комплектовочных ведомостей, связанных с производственным составом */ + procedure FCDELIVSH_DG_GET + ( + NPRODCMPSP in number, -- Рег. номер производственного состава + NFCPRODPLAN in number, -- Рег. номер план + NPAGE_NUMBER in number, -- Номер страницы (игнорируется при NPAGE_SIZE=0) + NPAGE_SIZE in number, -- Количество записей на странице (0 - все) + CORDERS in clob, -- Сортировки + NINCLUDE_DEF in number, -- Признак включения описания колонок таблицы в ответ + COUT out clob -- Сериализованная таблица данных + ) + is + NCOMPANY PKG_STD.TREF := GET_SESSION_COMPANY(); -- Организация сеанса + RO PKG_P8PANELS_VISUAL.TORDERS; -- Сортировки + RDG PKG_P8PANELS_VISUAL.TDATA_GRID; -- Описание таблицы + RDG_ROW PKG_P8PANELS_VISUAL.TROW; -- Строка таблицы + NROW_FROM PKG_STD.TREF; -- Номер строки с + NROW_TO PKG_STD.TREF; -- Номер строки по + CSQL clob; -- Буфер для запроса + ICURSOR integer; -- Курсор для исполнения запроса + NFCPRODPLANSP PKG_STD.TREF; -- Рег. номер спецификации связанного плана + begin + /* Читем сортировки */ + RO := PKG_P8PANELS_VISUAL.TORDERS_FROM_XML(CORDERS => CORDERS); + /* Преобразуем номер и размер страницы в номер строк с и по */ + PKG_P8PANELS_VISUAL.UTL_ROWS_LIMITS_CALC(NPAGE_NUMBER => NPAGE_NUMBER, + NPAGE_SIZE => NPAGE_SIZE, + NROW_FROM => NROW_FROM, + NROW_TO => NROW_TO); + /* Инициализируем таблицу данных */ + RDG := PKG_P8PANELS_VISUAL.TDATA_GRID_MAKE(); + /* Описываем колонки таблицы данных */ + PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG, + SNAME => 'NRN', + SCAPTION => 'Рег. номер', + SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_NUMB, + BVISIBLE => false); + PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG, + SNAME => 'SSUBDIV', + SCAPTION => 'Цех', + SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_STR, + BVISIBLE => true); + PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG, + SNAME => 'SNOMEN', + SCAPTION => 'Номенклатура', + SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_STR, + BVISIBLE => true); + PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG, + SNAME => 'NQUANT_PROD', + SCAPTION => 'Применяемость на одно ВС', + SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_NUMB, + BVISIBLE => true); + PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG, + SNAME => 'SPROVIDER', + SCAPTION => 'Поставщик', + SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_STR, + BVISIBLE => true); + PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG, + SNAME => 'NDEFICIT', + SCAPTION => 'Дефицит', + SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_NUMB, + BVISIBLE => true); + /* Считываем рег. номер спецификации связанного плана */ + NFCPRODPLANSP := FCPRODPLANSP_LINKED_GET(NPRODCMPSP => NPRODCMPSP, NFCPRODPLAN => NFCPRODPLAN); + /* Если спецификация считалась */ + if (NFCPRODPLANSP is not null) then + begin + /* Добавляем подсказку совместимости */ + CSQL := PKG_SQL_BUILD.COMPATIBLE(SSQL => CSQL); + /* Формируем запрос */ + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => 'select *'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' from (select D.*,'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => PKG_SQL_BUILD.SQLROWNUM() || ' NROW'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' from (select T.RN NRN,'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' (select I.CODE from INS_DEPARTMENT I where T.SUBDIV = I.RN) SSUBDIV,'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' NM.NOMEN_NAME SNOMEN,'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' T.QUANT_PROD NQUANT_PROD,'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' (select I2.CODE from INS_DEPARTMENT I2 where T.PR_SUBDIV = I2.RN) SPROVIDER,'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' T.DEFICIT NDEFICIT'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' from DOCLINKS D,'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' FCDELIVSHSP T,'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' FCMATRESOURCE F,'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' DICNOMNS NM'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' where D.IN_DOCUMENT = :NFCPRODPLANSP'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' and D.IN_UNITCODE = ' || PKG_SQL_BUILD.WRAP_STR(SVALUE => 'CostProductPlansSpecs')); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' and D.OUT_UNITCODE = ' || PKG_SQL_BUILD.WRAP_STR(SVALUE => 'CostDeliverySheets')); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' and T.PRN = D.OUT_DOCUMENT'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' and T.COMPANY = :NCOMPANY'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' and T.MATRES = F.RN'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' and F.NOMENCLATURE = NM.RN'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' %ORDER_BY%) D) F'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' where F.NROW between :NROW_FROM and :NROW_TO'); + /* Учтём сортировки */ + PKG_P8PANELS_VISUAL.TORDERS_SET_QUERY(RDATA_GRID => RDG, RORDERS => RO, SPATTERN => '%ORDER_BY%', CSQL => CSQL); + /* Разбираем его */ + ICURSOR := PKG_SQL_DML.OPEN_CURSOR(SWHAT => 'SELECT'); + PKG_SQL_DML.PARSE(ICURSOR => ICURSOR, SQUERY => CSQL); + /* Делаем подстановку параметров */ + PKG_SQL_DML.BIND_VARIABLE_NUM(ICURSOR => ICURSOR, SNAME => 'NCOMPANY', NVALUE => NCOMPANY); + PKG_SQL_DML.BIND_VARIABLE_NUM(ICURSOR => ICURSOR, SNAME => 'NROW_FROM', NVALUE => NROW_FROM); + PKG_SQL_DML.BIND_VARIABLE_NUM(ICURSOR => ICURSOR, SNAME => 'NROW_TO', NVALUE => NROW_TO); + PKG_SQL_DML.BIND_VARIABLE_NUM(ICURSOR => ICURSOR, SNAME => 'NFCPRODPLANSP', NVALUE => NFCPRODPLANSP); + /* Описываем структуру записи курсора */ + PKG_SQL_DML.DEFINE_COLUMN_NUM(ICURSOR => ICURSOR, IPOSITION => 1); + PKG_SQL_DML.DEFINE_COLUMN_STR(ICURSOR => ICURSOR, IPOSITION => 2); + PKG_SQL_DML.DEFINE_COLUMN_STR(ICURSOR => ICURSOR, IPOSITION => 3); + PKG_SQL_DML.DEFINE_COLUMN_NUM(ICURSOR => ICURSOR, IPOSITION => 4); + PKG_SQL_DML.DEFINE_COLUMN_STR(ICURSOR => ICURSOR, IPOSITION => 5); + PKG_SQL_DML.DEFINE_COLUMN_NUM(ICURSOR => ICURSOR, IPOSITION => 6); + PKG_SQL_DML.DEFINE_COLUMN_NUM(ICURSOR => ICURSOR, IPOSITION => 7); + /* Делаем выборку */ + if (PKG_SQL_DML.EXECUTE(ICURSOR => ICURSOR) = 0) then + null; + end if; + /* Обходим выбранные записи */ + while (PKG_SQL_DML.FETCH_ROWS(ICURSOR => ICURSOR) > 0) + loop + /* Добавляем колонки с данными */ + PKG_P8PANELS_VISUAL.TROW_ADD_CUR_COLN(RROW => RDG_ROW, + SNAME => 'NRN', + ICURSOR => ICURSOR, + NPOSITION => 1, + BCLEAR => true); + PKG_P8PANELS_VISUAL.TROW_ADD_CUR_COLS(RROW => RDG_ROW, + SNAME => 'SSUBDIV', + ICURSOR => ICURSOR, + NPOSITION => 2); + PKG_P8PANELS_VISUAL.TROW_ADD_CUR_COLS(RROW => RDG_ROW, + SNAME => 'SNOMEN', + ICURSOR => ICURSOR, + NPOSITION => 3); + PKG_P8PANELS_VISUAL.TROW_ADD_CUR_COLN(RROW => RDG_ROW, + SNAME => 'NQUANT_PROD', + ICURSOR => ICURSOR, + NPOSITION => 4); + PKG_P8PANELS_VISUAL.TROW_ADD_CUR_COLS(RROW => RDG_ROW, + SNAME => 'SPROVIDER', + ICURSOR => ICURSOR, + NPOSITION => 5); + PKG_P8PANELS_VISUAL.TROW_ADD_CUR_COLS(RROW => RDG_ROW, + SNAME => 'NDEFICIT', + ICURSOR => ICURSOR, + NPOSITION => 6); + /* Добавляем строку в таблицу */ + PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_ROW(RDATA_GRID => RDG, RROW => RDG_ROW); + end loop; + exception + when others then + PKG_SQL_DML.CLOSE_CURSOR(ICURSOR => ICURSOR); + raise; + end; + end if; + /* Сериализуем описание */ + COUT := PKG_P8PANELS_VISUAL.TDATA_GRID_TO_XML(RDATA_GRID => RDG, NINCLUDE_DEF => NINCLUDE_DEF); + end FCDELIVSH_DG_GET; + + /* Считывание деталий для выбора SVG */ + procedure FCPRODCMP_DETAILS_GET + ( + NFCPRODPLAN in number, -- Рег. номер плана + COUT out clob -- Сериализованная таблица данных + ) + is + NCOMPANY PKG_STD.TREF := GET_SESSION_COMPANY(); -- Организация сеанса + NDOC_PROP PKG_STD.TREF; -- Рег. номер свойства "ID" + NFCPRODPLANSP PKG_STD.TREF; -- Рег. номер связанной спецификации плана + begin + /* Начинаем формирование XML */ + PKG_XFAST.PROLOGUE(ITYPE => PKG_XFAST.CONTENT_); + /* Считываем свойство документа */ + FIND_DOCS_PROPS_CODE_EX(NFLAG_SMART => 0, + NCOMPVERS => NCOMPANY, + SUNITCODE => 'CostProductCompositionSpec', + SPROPCODE => 'ID', + NRN => NDOC_PROP); + /* Открываем корень */ + PKG_XFAST.DOWN_NODE(SNAME => 'XDATA'); + /* Цикл по планам и отчетам производства изделий */ + for REC in (select S.RN NRN, + (select F.NAME from FCMATRESOURCE F where F.RN = S.MTR_RES) SNAME, + PV.NUM_VALUE NID + from FCPRODPLANSP T, + FCPRODCMPSP S, + DOCS_PROPS_VALS PV + where T.PRN = NFCPRODPLAN + and S.PRN = T.PRODCMP + and PV.DOCS_PROP_RN = NDOC_PROP + and PV.UNIT_RN = S.RN) + loop + /* Получаем рег. номер связанной спецификации плана */ + NFCPRODPLANSP := FCPRODPLANSP_LINKED_GET(NPRODCMPSP => REC.NRN, NFCPRODPLAN => NFCPRODPLAN); + /* Открываем план */ + PKG_XFAST.DOWN_NODE(SNAME => 'XFCPRODCMP'); + /* Описываем план */ + PKG_XFAST.ATTR(SNAME => 'NRN', NVALUE => REC.NRN); + PKG_XFAST.ATTR(SNAME => 'SNAME', SVALUE => REC.SNAME); + PKG_XFAST.ATTR(SNAME => 'NID', NVALUE => REC.NID); + PKG_XFAST.ATTR(SNAME => 'NFCPRODPLANSP', NVALUE => NFCPRODPLANSP); + /* Закрываем план */ + PKG_XFAST.UP(); + end loop; + /* Закрываем корень */ + PKG_XFAST.UP(); + /* Сериализуем */ + COUT := PKG_XFAST.SERIALIZE_TO_CLOB(); + /* Завершаем формирование XML */ + PKG_XFAST.EPILOGUE(); + exception + when others then + /* Завершаем формирование XML */ + PKG_XFAST.EPILOGUE(); + /* Вернем ошибку */ + PKG_STATE.DIAGNOSTICS_STACKED(); + P_EXCEPTION(0, PKG_STATE.SQL_ERRM()); + end FCPRODCMP_DETAILS_GET; + + /* Получение таблицы записей "Планы и отчеты производства изделий" */ + procedure FCPRODPLAN_GET + ( + NCRN in number, -- Рег. номер каталога + COUT out clob -- Сериализованная таблица данных + ) + is + NCOMPANY PKG_STD.TREF := GET_SESSION_COMPANY(); -- Организация сеанса + NPROGRESS PKG_STD.TNUMBER; -- Прогресс плана + + /* Получение номера плана из примечания */ + function NUMB_BY_NOTE_GET + ( + SNOTE in varchar2 -- Примечание + ) return varchar2 -- Номер плана + is + begin + /* Возвращаем результат */ + return TRIM(SUBSTR(SNOTE, INSTR(SNOTE, '№')+1, length(SNOTE))); + end NUMB_BY_NOTE_GET; + + /* Получение детализации по прогрессу */ + function DETAIL_BY_PROGRESS_GET + ( + NPROGRESS in number -- Прогресс + ) return varchar2 -- Детализация по прогрессу + is + SRESULT PKG_STD.TSTRING; -- Детализация по прогрессу + begin + /* Определяем детализацию по прогрессу */ + case + when (NPROGRESS >= 70) then + SRESULT := 'Основная сборка: Стыковка агрегатов выполнена'; + when (NPROGRESS >= 40) then + SRESULT := 'Изготовление агрегатов: Фюзеляж и ОЧК не переданы в цех ОС'; + when (NPROGRESS >= 10) then + SRESULT := 'Изготовление ДСЕ: Фюзеляж и ОЧК не укомлектованы ДСЕ'; + else + SRESULT := 'Изготовление ДСЕ не начато'; + end case; + /* Возвращаем результат */ + return SRESULT; + end DETAIL_BY_PROGRESS_GET; + begin + /* Начинаем формирование XML */ + PKG_XFAST.PROLOGUE(ITYPE => PKG_XFAST.CONTENT_); + /* Открываем корень */ + PKG_XFAST.DOWN_NODE(SNAME => 'XDATA'); + /* Цикл по планам и отчетам производства изделий */ + for REC in (select P.RN NRN, + P.NOTE SNOTE, + D_YEAR(EN.STARTDATE) NYEAR, + COALESCE(SUM(SP.LABOUR_FACT), 0) NLABOUR_FACT, + COALESCE(SUM(SP.LABOUR_NORM), 0) NLABOUR_NORM, + (select M.BDATA + from FILELINKS M, + FILELINKSUNITS U + where M.COMPANY = NCOMPANY + and U.TABLE_PRN = P.RN + and U.UNITCODE = 'CostProductPlans' + and M.RN = U.FILELINKS_PRN + and M.BDATA is not null + and rownum = 1) BIMAGE + from FCPRODPLAN P left outer join FCPRODPLANSP SP on P.RN = SP.PRN and ((SP.LABOUR_NORM is not null) or (SP.LABOUR_FACT is not null)), + FINSTATE FS, + ENPERIOD EN + where P.CRN = NCRN + and P.CATEGORY = NFCPRODPLAN_CATEGORY_MON + and P.STATUS = NFCPRODPLAN_STATUS_MON + and FS.RN = P.TYPE + and FS.CODE = SFCPRODPLAN_TYPE_MON + and EN.RN = P.CALC_PERIOD + and exists (select /*+ INDEX(UP I_USERPRIV_JUR_PERS_ROLEID) */ + null + from USERPRIV UP + where UP.JUR_PERS = P.JUR_PERS + and UP.UNITCODE = 'CostProductPlans' + and UP.ROLEID in (select /*+ INDEX(UR I_USERROLES_AUTHID_FK) */ + UR.ROLEID + from USERROLES UR + where UR.AUTHID = UTILIZER()) + union all + select /*+ INDEX(UP I_USERPRIV_JUR_PERS_AUTHID) */ + null + from USERPRIV UP + where UP.JUR_PERS = P.JUR_PERS + and UP.UNITCODE = 'CostProductPlans' + and UP.AUTHID = UTILIZER()) + group by P.RN, P.NOTE, EN.STARTDATE + order by EN.STARTDATE asc) + loop + /* Открываем план */ + PKG_XFAST.DOWN_NODE(SNAME => 'XFCPRODPLAN_INFO'); + /* Описываем план */ + PKG_XFAST.ATTR(SNAME => 'NRN', NVALUE => REC.NRN); + PKG_XFAST.ATTR(SNAME => 'SNUMB', SVALUE => NUMB_BY_NOTE_GET(SNOTE => REC.SNOTE)); + /* Определяем прогресс */ + if (REC.NLABOUR_NORM = 0) then + /* Не можем определить прогресс */ + NPROGRESS := 0; + else + /* Если факта нет */ + if (REC.NLABOUR_FACT = 0) then + /* Не можем определить прогресс */ + NPROGRESS := 0; + else + /* Не можем определить прогресс */ + NPROGRESS := REC.NLABOUR_FACT / REC.NLABOUR_NORM; + end if; + end if; + PKG_XFAST.ATTR(SNAME => 'NPROGRESS', NVALUE => NPROGRESS); + PKG_XFAST.ATTR(SNAME => 'SDETAIL', SVALUE => DETAIL_BY_PROGRESS_GET(NPROGRESS => NPROGRESS)); + PKG_XFAST.ATTR(SNAME => 'NYEAR', NVALUE => REC.NYEAR); + PKG_XFAST.VALUE(lbVALUE => REC.BIMAGE); + /* Закрываем план */ + PKG_XFAST.UP(); + end loop; + /* Закрываем корень */ + PKG_XFAST.UP(); + /* Сериализуем */ + COUT := PKG_XFAST.SERIALIZE_TO_CLOB(); + /* Завершаем формирование XML */ + PKG_XFAST.EPILOGUE(); + exception + when others then + /* Завершаем формирование XML */ + PKG_XFAST.EPILOGUE(); + /* Вернем ошибку */ + PKG_STATE.DIAGNOSTICS_STACKED(); + P_EXCEPTION(0, PKG_STATE.SQL_ERRM()); + end FCPRODPLAN_GET; + + /* Инициализация каталогов раздела "Планы и отчеты производства изделий" */ + procedure FCPRODPLAN_CTLG_INIT + ( + COUT out clob -- Список каталогов раздела "Планы и отчеты производства изделий" + ) + is + begin + /* Начинаем формирование XML */ + PKG_XFAST.PROLOGUE(ITYPE => PKG_XFAST.CONTENT_); + /* Открываем корень */ + PKG_XFAST.DOWN_NODE(SNAME => 'XDATA'); + /* Цикл по планам и отчетам производства изделий */ + for REC in (select TMP.NRN, + TMP.SNAME, + count(P.RN) NCOUNT_DOCS, + min(D_YEAR(P.DOCDATE)) NMIN_YEAR, + max(D_YEAR(P.DOCDATE)) NMAX_YEAR + from (select T.RN as NRN, + T.NAME as SNAME + from ACATALOG T, + UNITLIST UL + where T.DOCNAME = 'CostProductPlans' + and T.SIGNS = 1 + and T.DOCNAME = UL.UNITCODE + and (UL.SHOW_INACCESS_CTLG = 1 or exists + (select null from V_USERPRIV UP where UP.CATALOG = T.RN) or exists + (select null + from ACATALOG T1 + where exists (select null from V_USERPRIV UP where UP.CATALOG = T1.RN) + connect by prior T1.RN = T1.CRN + start with T1.CRN = T.RN)) + order by T.NAME asc) TMP + left outer join FCPRODPLAN P + on TMP.NRN = P.CRN + and P.CATEGORY = NFCPRODPLAN_CATEGORY_MON + and P.STATUS = NFCPRODPLAN_STATUS_MON + and exists (select /*+ INDEX(UP I_USERPRIV_JUR_PERS_ROLEID) */ + null + from USERPRIV UP + where UP.JUR_PERS = P.JUR_PERS + and UP.UNITCODE = 'CostProductPlans' + and UP.ROLEID in (select /*+ INDEX(UR I_USERROLES_AUTHID_FK) */ + UR.ROLEID + from USERROLES UR + where UR.AUTHID = UTILIZER()) + union all + select /*+ INDEX(UP I_USERPRIV_JUR_PERS_AUTHID) */ + null + from USERPRIV UP + where UP.JUR_PERS = P.JUR_PERS + and UP.UNITCODE = 'CostProductPlans' + and UP.AUTHID = UTILIZER()) + left outer join FINSTATE FS + on P.TYPE = FS.RN + and FS.CODE = SFCPRODPLAN_TYPE_MON + group by TMP.NRN, + TMP.SNAME + order by TMP.SNAME asc) + loop + /* Открываем план */ + PKG_XFAST.DOWN_NODE(SNAME => 'XFCPRODPLAN_CRNS'); + /* Описываем план */ + PKG_XFAST.ATTR(SNAME => 'NRN', NVALUE => REC.NRN); + PKG_XFAST.ATTR(SNAME => 'SNAME', SVALUE => REC.SNAME); + PKG_XFAST.ATTR(SNAME => 'NCOUNT_DOCS', NVALUE => REC.NCOUNT_DOCS); + PKG_XFAST.ATTR(SNAME => 'NMIN_YEAR', NVALUE => REC.NMIN_YEAR); + PKG_XFAST.ATTR(SNAME => 'NMAX_YEAR', NVALUE => REC.NMAX_YEAR); + /* Закрываем план */ + PKG_XFAST.UP(); + end loop; + /* Закрываем корень */ + PKG_XFAST.UP(); + /* Сериализуем */ + COUT := PKG_XFAST.SERIALIZE_TO_CLOB(); + /* Завершаем формирование XML */ + PKG_XFAST.EPILOGUE(); + exception + when others then + /* Завершаем формирование XML */ + PKG_XFAST.EPILOGUE(); + /* Вернем ошибку */ + PKG_STATE.DIAGNOSTICS_STACKED(); + P_EXCEPTION(0, PKG_STATE.SQL_ERRM()); + end FCPRODPLAN_CTLG_INIT; end PKG_P8PANELS_MECHREC; / diff --git a/p8panels.config b/p8panels.config index e7d4535..2b88bf9 100644 --- a/p8panels.config +++ b/p8panels.config @@ -21,6 +21,10 @@ + + + + @@ -84,6 +88,46 @@ icon="calendar_month" showInPanelsList="true" preview="./img/mech_rec_cost_prod_plans.jpg"/> + + + + Date: Thu, 9 May 2024 17:41:14 +0300 Subject: [PATCH 31/76] =?UTF-8?q?=D0=91=D0=94:=20=D0=9F=D0=B0=D0=BD=D0=B5?= =?UTF-8?q?=D0=BB=D0=B8=20=D0=9F=D0=A3=D0=94=D0=9F=20"=D0=9F=D1=80=D0=BE?= =?UTF-8?q?=D0=B8=D0=B7=D0=B2=D0=BE=D0=B4=D1=81=D1=82=D0=B2=D0=B5=D0=BD?= =?UTF-8?q?=D0=BD=D1=8B=D0=B9=20=D0=BF=D0=BB=D0=B0=D0=BD=20=D1=86=D0=B5?= =?UTF-8?q?=D1=85=D0=B0"=20=D0=B8=20"=D0=97=D0=B0=D0=B3=D1=80=D1=83=D0=B7?= =?UTF-8?q?=D0=BA=D0=B0=20=D1=86=D0=B5=D1=85=D0=B0"=20-=20=D1=84=D0=B8?= =?UTF-8?q?=D0=BA=D1=81=D0=B8=D1=80=D0=BE=D0=B2=D0=B0=D0=BD=D0=BD=D1=8B?= =?UTF-8?q?=D0=B5=20=D0=BA=D0=BE=D0=BB=D0=BE=D0=BD=D0=BA=D0=B8=20=D0=B8=20?= =?UTF-8?q?=D0=BA=D0=BE=D1=81=D0=BC=D0=B5=D1=82=D0=B8=D0=BA=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- db/PKG_P8PANELS_MECHREC.pck | 3117 ++++++++++++++++++++++++++++++++++- 1 file changed, 3068 insertions(+), 49 deletions(-) diff --git a/db/PKG_P8PANELS_MECHREC.pck b/db/PKG_P8PANELS_MECHREC.pck index 78d250c..c9d2594 100644 --- a/db/PKG_P8PANELS_MECHREC.pck +++ b/db/PKG_P8PANELS_MECHREC.pck @@ -1,4 +1,20 @@ create or replace package PKG_P8PANELS_MECHREC as + + /* Проверка соответствия подразделения документа подразделению пользователя */ + function UTL_SUBDIV_CHECK + ( + NCOMPANY in number, -- Рег. номер организации + NSUBDIV in number, -- Рег. номер подразделения + SUSER in varchar2 -- Имя пользователя + ) return number; -- Подразделение подходит (0 - нет, 1 - да) + + /* Проверка соответствия подразделения документа подразделению пользователя (по иерархии) */ + function UTL_SUBDIV_HIER_CHECK + ( + NCOMPANY in number, -- Рег. номер организации + NSUBDIV in number, -- Рег. номер подразделения + SUSER in varchar2 -- Имя пользователя + ) return number; -- Подразделение подходит (0 - нет, 1 - да) /* Получение таблицы ПиП на основании маршрутного листа, связанных со спецификацией плана */ procedure INCOMEFROMDEPS_DG_GET @@ -26,12 +42,12 @@ create or replace package PKG_P8PANELS_MECHREC as /* Получение товарных запасов на основании маршрутного листа */ procedure GOODSPARTIES_DG_GET ( - NFCROUTLST in number, -- Рег. номер маршрутного листа - NPAGE_NUMBER in number, -- Номер страницы (игнорируется при NPAGE_SIZE=0) - NPAGE_SIZE in number, -- Количество записей на странице (0 - все) - CORDERS in clob, -- Сортировки - NINCLUDE_DEF in number, -- Признак включения описания колонок таблицы в ответ - COUT out clob -- Сериализованная таблица данных + NFCROUTLST in number, -- Рег. номер маршрутного листа + NPAGE_NUMBER in number, -- Номер страницы (игнорируется при NPAGE_SIZE=0) + NPAGE_SIZE in number, -- Количество записей на странице (0 - все) + CORDERS in clob, -- Сортировки + NINCLUDE_DEF in number, -- Признак включения описания колонок таблицы в ответ + COUT out clob -- Сериализованная таблица данных ); /* Получение таблицы маршрутных листов, связанных со спецификацией плана с учетом типа */ @@ -61,6 +77,157 @@ create or replace package PKG_P8PANELS_MECHREC as ( COUT out clob -- Список каталогов раздела "Планы и отчеты производства изделий" ); + + /* Изменение приоритета партии маршрутного листа */ + procedure FCROUTLST_PRIOR_PARTY_UPDATE + ( + NFCROUTLST in number, -- Рег. номер маршрутного листа + SPRIOR_PARTY in varchar -- Новое значение приоритета партии + ); + + /* Изменение заказа маршрутного листа */ + procedure FCROUTLST_FACEACC_UPDATE + ( + NFCROUTLST in number, -- Рег. номер маршрутного листа + SFACEACC_NUMB in varchar, -- Номер заказа + NFCPRODPLANSP in number -- Рег. номер строки плана + ); + + /* Получение таблицы маршрутных листов, связанных со спецификацией плана */ + procedure FCROUTLST_DEPT_DG_GET + ( + NFCPRODPLANSP in number, -- Рег. номер связанной спецификации плана + NPAGE_NUMBER in number, -- Номер страницы (игнорируется при NPAGE_SIZE=0) + NPAGE_SIZE in number, -- Количество записей на странице (0 - все) + CORDERS in clob, -- Сортировки + NINCLUDE_DEF in number, -- Признак включения описания колонок таблицы в ответ + COUT out clob -- Сериализованная таблица данных + ); + + /* Получение таблицы заказов маршрутного листа */ + procedure FCROUTLSTORD_DEPT_DG_GET + ( + NFCROUTLST in number, -- Рег. номер маршрутного листа + NPAGE_NUMBER in number, -- Номер страницы (игнорируется при NPAGE_SIZE=0) + NPAGE_SIZE in number, -- Количество записей на странице (0 - все) + CORDERS in clob, -- Сортировки + NINCLUDE_DEF in number, -- Признак включения описания колонок таблицы в ответ + COUT out clob -- Сериализованная таблица данных + ); + + /* Получение таблицы ПиП на основании маршрутного листа, связанных со спецификацией плана */ + procedure INCOMEFROMDEPS_DEPT_DG_GET + ( + NFCPRODPLANSP in number, -- Рег. номер связанной спецификации плана + NPAGE_NUMBER in number, -- Номер страницы (игнорируется при NPAGE_SIZE=0) + NPAGE_SIZE in number, -- Количество записей на странице (0 - все) + CORDERS in clob, -- Сортировки + NINCLUDE_DEF in number, -- Признак включения описания колонок таблицы в ответ + COUT out clob -- Сериализованная таблица данных + ); + + /* Получение таблицы спецификаций планов и отчетов производства изделий */ + procedure FCPRODPLANSP_DEPT_DG_GET + ( + NFCPRODPLAN in number, -- Рег. номер планов и отчетов производства изделий + NPAGE_NUMBER in number, -- Номер страницы (игнорируется при NPAGE_SIZE=0) + NPAGE_SIZE in number, -- Количество записей на странице (0 - все) + CORDERS in clob, -- Сортировки + NINCLUDE_DEF in number, -- Признак включения описания колонок таблицы в ответ + COUT out clob -- Сериализованная таблица данных + ); + + /* Инициализация записей раздела "Планы и отчеты производства изделий" */ + procedure FCPRODPLAN_DEPT_INIT + ( + COUT out clob -- Список записей раздела "Планы и отчеты производства изделий" + ); + + /* Добавление записи маршрутного листа в селектлисте */ + procedure SELECTLIST_FCROUTLST_ADD + ( + NIDENT in number, -- Идентификатор селектлиста + NFCROUTLST in number -- Рег. номер маршрутного листа + ); + + /* Удаление записи маршрутного листа из селектлиста */ + procedure SELECTLIST_FCROUTLST_DEL + ( + NIDENT in number, -- Идентификатор селектлиста + NFCROUTLST in number -- Рег. номер маршрутного листа + ); + + /* Выдать задание операции сменного задания */ + procedure FCJOBSSP_ISSUE + ( + NFCJOBS in number, -- Рег. номер сменного задания + SFCJOBSSP_LIST in varchar2 -- Список операций сменного задания + ); + + /* Исключение оборудования из операции сменного задания */ + procedure FCJOBSSP_EXC_FCEQUIPMENT + ( + NFCEQUIPMENT in number, -- Рег. номер оборудования + NFCJOBS in number, -- Рег. номер сменного задания + SFCJOBSSP_LIST in varchar2 -- Список операций сменного задания + ); + + /* Включение оборудование в строку сменного задания */ + procedure FCJOBSSP_INC_FCEQUIPMENT + ( + NFCEQUIPMENT in number, -- Рег. номер оборудования + NFCJOBS in number, -- Рег. номер сменного задания + SFCJOBSSP_LIST in varchar2 -- Список операций сменного задания + ); + + /* Получение таблицы оборудования подразделения */ + procedure FCEQUIPMENT_DG_GET + ( + NPAGE_NUMBER in number, -- Номер страницы (игнорируется при NPAGE_SIZE=0) + NPAGE_SIZE in number, -- Количество записей на странице (0 - все) + CORDERS in clob, -- Сортировки + NINCLUDE_DEF in number, -- Признак включения описания колонок таблицы в ответ + COUT out clob -- Сериализованная таблица данных + ); + + /* Получение таблицы маршрутных листов спецификации сменного задания */ + procedure FCJOBSSP_FCROUTLST_DG_GET + ( + NFCJOBS in number, -- Рег. номер сменного задания + NPAGE_NUMBER in number, -- Номер страницы (игнорируется при NPAGE_SIZE=0) + NPAGE_SIZE in number, -- Количество записей на странице (0 - все) + CORDERS in clob, -- Сортировки + NINCLUDE_DEF in number, -- Признак включения описания колонок таблицы в ответ + COUT out clob -- Сериализованная таблица данных + ); + + /* Получение спецификации сменного задания по отмеченным маршрутным листам */ + procedure FCJOBSSP_DG_GET + ( + NFCJOBS in number, -- Рег. номер сменного задания + NIDENT in number, -- Идентификатор процесса + NPAGE_NUMBER in number, -- Номер страницы (игнорируется при NPAGE_SIZE=0) + NPAGE_SIZE in number, -- Количество записей на странице (0 - все) + CORDERS in clob, -- Сортировки + NINCLUDE_DEF in number, -- Признак включения описания колонок таблицы в ответ + COUT out clob -- Сериализованная таблица данных + ); + + /* Инициализация записей раздела "Планы и отчеты производства изделий" */ + procedure FCJOBS_INIT + ( + COUT out clob -- Список записей раздела "Сменные задания" + ); + + /* Получение загрузки цеха */ + procedure FCJOBS_DEP_LOAD_DG_GET + ( + NPAGE_NUMBER in number, -- Номер страницы (игнорируется при NPAGE_SIZE=0) + NPAGE_SIZE in number, -- Количество записей на странице (0 - все) + CORDERS in clob, -- Сортировки + NINCLUDE_DEF in number, -- Признак включения описания колонок таблицы в ответ + COUT out clob -- Сериализованная таблица данных + ); /* Получение таблицы маршрутных листов, связанных с производственным составом */ procedure FCROUTLST_MON_DG_GET @@ -141,15 +308,20 @@ create or replace package body PKG_P8PANELS_MECHREC as NTASK_TYPE_RL constant PKG_STD.TNUMBER := 4; -- Маршрутные листы NTASK_TYPE_EMPTY constant PKG_STD.TNUMBER := null; -- Нет детализации + /* Константы - параметры отборов планов (Производственный план цеха) */ + NFCPRODPLAN_DEPT_CTGR constant PKG_STD.TNUMBER := 2; -- Категория планов "Цеховой план" + /* Константы - параметры отборов планов ("Мониторинг сборки изделий") */ - NFCPRODPLAN_CATEGORY_MON constant PKG_STD.TNUMBER := 0; -- Категория планов "Первичный документ" - NFCPRODPLAN_STATUS_MON constant PKG_STD.TNUMBER := 2; -- Статус планов "Утвержден" - SFCPRODPLAN_TYPE_MON constant PKG_STD.TSTRING := 'План'; -- Тип планов (мнемокод состояния) + NFCPRODPLAN_CATEGORY_MON constant PKG_STD.TNUMBER := 0; -- Категория планов "Первичный документ" + NFCPRODPLAN_STATUS_MON constant PKG_STD.TNUMBER := 2; -- Статус планов "Утвержден" + SFCPRODPLAN_TYPE_MON constant PKG_STD.TSTRING := 'План'; -- Тип планов (мнемокод состояния) /* Константы - параметры отборов ("Загрузка цеха") */ - SDICMUNTS_WD constant PKG_STD.TSTRING := 'н/ч'; -- Мнемокод ед. измерения нормочасов - SDICMUNTS_HOUR constant PKG_STD.TSTRING := 'час'; -- Мнемокод ед. измерения часов - + SDICMUNTS_WD constant PKG_STD.TSTRING := 'Ч/Ч'; -- Мнемокод ед. измерения нормочасов + SDICMUNTS_HOUR constant PKG_STD.TSTRING := 'Час'; -- Мнемокод ед. измерения часов + + /* Константы - параметры отборов сменных заданий */ + NFCJOBS_STATUS_WO constant PKG_STD.TNUMBER := 1; -- Статус сменного задания "Отработан" /* Константы - дополнительные атрибуты */ STASK_ATTR_START_FACT constant PKG_STD.TSTRING := 'start_fact'; -- Запущено @@ -159,22 +331,58 @@ create or replace package body PKG_P8PANELS_MECHREC as STASK_ATTR_DL constant PKG_STD.TSTRING := 'detail_list'; -- Связанные документы STASK_ATTR_TYPE constant PKG_STD.TSTRING := 'type'; -- Тип (0 - Деталь, 1 - Изделие/сборочная единица) STASK_ATTR_MEAS constant PKG_STD.TSTRING := 'meas'; -- Единица измнения + + /* Константы - дополнительные параметры */ + SCOL_PATTERN_DATE constant PKG_STD.TSTRING := 'dd_mm_yyyy'; -- Паттерн для динамической колонки граф ("день_месяц_год") + + /* Экземпляр дня загрузки цеха */ + type TJOB_DAY is record + ( + DDATE PKG_STD.TLDATE, -- Дата дня загрузки цеха + NVALUE PKG_STD.TQUANT, -- Значение доли трудоемкости смены + NTYPE PKG_STD.TNUMBER -- Тип дня (0 - выполняемый, 1 - выполненный) + ); + /* Коллекция дней загрузки цеха */ + type TJOB_DAYS is table of TJOB_DAY; + + /* Добавление дня в коллекцию дней загрузки цеха */ + procedure TJOB_DAYS_ADD + ( + TDAYS in out nocopy TJOB_DAYS, -- Коллекция дней загрузки цеха + DDATE in date, -- Дата дня загрузки цеха + NVALUE in number, -- Значение доли трудоемкости смены + NTYPE in number, -- Тип дня (0 - выполняемый, 1 - выполненный) + BCLEAR in boolean := false -- Признак очистки результирующей коллекции перед добавлением таблицы + ) + is + begin + /* Инициализируем коллекцию таблиц документа */ + if ((TDAYS is null) or (BCLEAR)) then + TDAYS := TJOB_DAYS(); + end if; + /* Добавляем таблицу к документу */ + TDAYS.EXTEND(); + TDAYS(TDAYS.LAST).DDATE := DDATE; + TDAYS(TDAYS.LAST).NVALUE := NVALUE; + TDAYS(TDAYS.LAST).NTYPE := NTYPE; + end TJOB_DAYS_ADD; + /* Инциализация списка маршрутных листов (с иерархией) */ procedure UTL_FCROUTLST_IDENT_INIT ( - NFCPRODPLANSP in number, -- Рег. номер связанной спецификации плана - NIDENT out number -- Идентификатор отмеченных записей + NFCPRODPLANSP in number, -- Рег. номер связанной спецификации плана + NIDENT out number -- Идентификатор отмеченных записей ) is /* Рекурсивная процедура формирования списка маршрутных листов */ procedure PUT_FCROUTLST ( - NIDENT in number, -- Идентификатор отмеченных записей - NFCROUTLST in number -- Рег. номер маршрутного листа + NIDENT in number, -- Идентификатор отмеченных записей + NFCROUTLST in number -- Рег. номер маршрутного листа ) is - NTMP PKG_STD.TNUMBER; -- Буфер + NTMP PKG_STD.TNUMBER; -- Буфер begin /* Добавление в список */ begin @@ -212,7 +420,251 @@ create or replace package body PKG_P8PANELS_MECHREC as PUT_FCROUTLST(NIDENT => NIDENT, NFCROUTLST => RLST.RN); end loop; end UTL_FCROUTLST_IDENT_INIT; - + + /* Считывание записи маршрутного листа */ + procedure UTL_FCROUTLST_GET + ( + NFCROUTLST in number, -- Рег. номер маршрутного листа + RFCROUTLST out FCROUTLST%rowtype -- Запись маршрутного листа + ) + is + begin + /* Считываем запись маршрутного листа */ + begin + select T.* into RFCROUTLST from FCROUTLST T where T.RN = NFCROUTLST; + exception + when others then + PKG_MSG.RECORD_NOT_FOUND(NFLAG_SMART => 0, NDOCUMENT => NFCROUTLST, SUNIT_TABLE => 'FCROUTLST'); + end; + end UTL_FCROUTLST_GET; + + /* Получение мнемокода подразделения пользователя */ + function UTL_SUBDIV_CODE_GET + ( + NCOMPANY in number, -- Рег. номер организации + SUSER in varchar2 -- Имя пользователя + ) return varchar2 -- Мнемокод подразделения пользователя + is + SRESULT PKG_STD.TSTRING; -- Мнемокод подразделения пользователя + NVERSION PKG_STD.TREF; -- Версия контрагентов + begin + /* Считываем версию контрагентов */ + FIND_VERSION_BY_COMPANY(NCOMPANY => NCOMPANY, SUNITCODE => 'AGNLIST', NVERSION => NVERSION); + /* Считываем мнемокод подразделения пользователя */ + begin + select I.CODE + into SRESULT + from CLNPSPFM C, + CLNPSPFMTYPES CT, + INS_DEPARTMENT I + where exists (select null + from CLNPERSONS CP + where exists (select null + from AGNLIST T + where T.PERS_AUTHID = SUSER + and CP.PERS_AGENT = T.RN + and T.VERSION = NVERSION) + and C.PERSRN = CP.RN + and CP.COMPANY = NCOMPANY) + and C.COMPANY = NCOMPANY + and C.BEGENG <= sysdate + and (C.ENDENG >= sysdate or C.ENDENG is null) + and C.CLNPSPFMTYPES = CT.RN + and CT.IS_PRIMARY = 1 + and I.RN = C.DEPTRN + and ROWNUM = 1; + exception + when others then + SRESULT := null; + end; + /* Возвращаем результат */ + return SRESULT; + end UTL_SUBDIV_CODE_GET; + + /* Проверка соответствия подразделения документа подразделению пользователя */ + function UTL_SUBDIV_CHECK + ( + NCOMPANY in number, -- Рег. номер организации + NSUBDIV in number, -- Рег. номер подразделения + SUSER in varchar2 -- Имя пользователя + ) return number -- Подразделение подходит (0 - нет, 1 - да) + is + NRESULT PKG_STD.TNUMBER; -- Подразделение подходит (0 - нет, 1 - да) + NVERSION PKG_STD.TREF; -- Версия контрагентов + begin + /* Если рег. номер подразделения пустой */ + if (NSUBDIV is null) then + /* Возвращаем 0 */ + return 0; + end if; + /* Считываем версию контрагентов */ + FIND_VERSION_BY_COMPANY(NCOMPANY => NCOMPANY, SUNITCODE => 'AGNLIST', NVERSION => NVERSION); + /* Проверяем подразделение по исполнению сотрудника пользователя */ + begin + select 1 + into NRESULT + from DUAL + where NSUBDIV in (select C.DEPTRN + from CLNPSPFM C, + CLNPSPFMTYPES CT + where exists (select null + from CLNPERSONS CP + where exists (select null + from AGNLIST T + where T.PERS_AUTHID = SUSER + and CP.PERS_AGENT = T.RN + and T.VERSION = NVERSION) + and C.PERSRN = CP.RN + and CP.COMPANY = NCOMPANY) + and C.COMPANY = NCOMPANY + and C.BEGENG <= sysdate + and (C.ENDENG >= sysdate or C.ENDENG is null) + and C.CLNPSPFMTYPES = CT.RN + and CT.IS_PRIMARY = 1); + exception + when others then + NRESULT := 0; + end; + /* Возвращаем результат */ + return NRESULT; + end UTL_SUBDIV_CHECK; + + /* Проверка соответствия подразделения документа подразделению пользователя (по иерархии) */ + function UTL_SUBDIV_HIER_CHECK + ( + NCOMPANY in number, -- Рег. номер организации + NSUBDIV in number, -- Рег. номер подразделения + SUSER in varchar2 -- Имя пользователя + ) return number -- Подразделение подходит (0 - нет, 1 - да) + is + NRESULT PKG_STD.TNUMBER; -- Подразделение подходит (0 - нет, 1 - да) + NVERSION PKG_STD.TREF; -- Версия контрагентов + begin + /* Если рег. номер подразделения пустой */ + if (NSUBDIV is null) then + /* Возвращаем 0 */ + return 0; + end if; + /* Считываем версию контрагентов */ + FIND_VERSION_BY_COMPANY(NCOMPANY => NCOMPANY, SUNITCODE => 'AGNLIST', NVERSION => NVERSION); + /* Проверяем подразделение по исполнению сотрудника пользователя */ + begin + select 1 + into NRESULT + from DUAL + where exists (select null + from INS_DEPARTMENT T, + (select C.DEPTRN + from CLNPSPFM C, + CLNPSPFMTYPES CT + where exists (select null + from CLNPERSONS CP + where exists (select null + from AGNLIST T + where T.PERS_AUTHID = SUSER + and CP.PERS_AGENT = T.RN + and T.VERSION = NVERSION) + and C.PERSRN = CP.RN + and CP.COMPANY = NCOMPANY) + and C.COMPANY = NCOMPANY + and C.BEGENG <= sysdate + and (C.ENDENG >= sysdate or C.ENDENG is null) + and C.CLNPSPFMTYPES = CT.RN + and CT.IS_PRIMARY = 1) TMP + where T.RN = NSUBDIV + and ROWNUM = 1 + start with T.RN = TMP.DEPTRN + connect by prior T.RN = T.PRN); + exception + when others then + NRESULT := 0; + end; + /* Возвращаем результат */ + return NRESULT; + end UTL_SUBDIV_HIER_CHECK; + + /* Проверка наличия оборудования */ + procedure UTL_FCEQUIPMENT_EXISTS + ( + NFCEQUIPMENT in number, -- Рег. номер оборудования + NCOMPANY in number -- Рег. номер организации + ) + is + NEXISTS PKG_STD.TNUMBER; -- Буфер + begin + /* Проверяем наличие оборудования */ + begin + select T.RN + into NEXISTS + from FCEQUIPMENT T + where T.RN = NFCEQUIPMENT + and T.COMPANY = NCOMPANY; + exception + when others then + P_EXCEPTION(0, 'Оборудование не найдено.'); + end; + end UTL_FCEQUIPMENT_EXISTS; + + /* Поиск записи в селектлисте */ + function UTL_SELECTLIST_RN_GET + ( + NIDENT in number, -- Идентификатор селектлиста + NFCROUTLST in number, -- Рег. номер маршрутного листа + SUNITCODE in varchar2, -- Мнемокод раздела + SACTIONCODE in varchar2 -- Действие раздела + ) return number -- Рег. номер записи в селектлисте + is + NRESULT PKG_STD.TNUMBER; -- Рег. номер записи в селектлисте + begin + /* Считываем запись селеклиста */ + begin + select T.RN + into NRESULT + from SELECTLIST T + where T.IDENT = NIDENT + and T.UNITCODE = SUNITCODE + and T.DOCUMENT = NFCROUTLST + and T.ACTIONCODE = SACTIONCODE; + exception + when others then + NRESULT := null; + end; + /* Возвращаем результат */ + return NRESULT; + end UTL_SELECTLIST_RN_GET; + + /* Считывание рег. номера основной спецификации плана из "Производственная программа" */ + function UTL_FCPRODPLANSP_MAIN_GET + ( + NCOMPANY in number, -- Рег. номер организации + NFCPRODPLANSP in number -- Рег. номер связанной спецификации плана + ) return number -- Рег. номер основной спецификации плана из "Производственная программа" + is + NRESULT PKG_STD.TREF; -- Рег. номер основной спецификации плана из "Производственная программа" + begin + /* Поиск связанной спецификации из "Производственная программа" */ + begin + select S.RN + into NRESULT + from DOCLINKS T, + FCPRODPLANSP S, + FCPRODPLAN P + where T.OUT_DOCUMENT = NFCPRODPLANSP + and T.IN_UNITCODE = 'CostProductPlansSpecs' + and T.OUT_UNITCODE = 'CostProductPlansSpecs' + and S.RN = T.IN_DOCUMENT + and P.RN = S.PRN + and P.CATEGORY = 1 + and P.COMPANY = NCOMPANY + and ROWNUM = 1; + exception + when others then + NRESULT := null; + end; + /* Возвращаем результат */ + return NRESULT; + end UTL_FCPRODPLANSP_MAIN_GET; + /* Проверка наличия связанных маршрутных листов */ function LINK_FCROUTLST_CHECK ( @@ -245,7 +697,7 @@ create or replace package body PKG_P8PANELS_MECHREC as /* Возвращаем результат */ return NRESULT; end LINK_FCROUTLST_CHECK; - + /* Проверка наличия связанных приходов из подразделений */ function LINK_INCOMEFROMDEPS_CHECK ( @@ -299,6 +751,10 @@ create or replace package body PKG_P8PANELS_MECHREC as P_SELECTLIST_CLEAR(NIDENT => NFCROUTLST_IDENT); raise; end LINK_INCOMEFROMDEPS_CHECK; + + /* + Процедуры панели "Производственная программа" + */ /* Получение таблицы ПиП на основании маршрутного листа, связанных со спецификацией плана */ procedure INCOMEFROMDEPS_DG_GET @@ -342,7 +798,7 @@ create or replace package body PKG_P8PANELS_MECHREC as SCAPTION => 'Накладная', SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_STR, BVISIBLE => true); - /* Если тип = 3, то необходимо включать состояние */ + /* Если тип "Приход из подразделений и маршрутные листы", то необходимо включать состояние */ if (NTYPE = NTASK_TYPE_INC_DEPS_RL) then PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG, SNAME => 'SDOC_STATE', @@ -473,7 +929,7 @@ create or replace package body PKG_P8PANELS_MECHREC as SNAME => 'SDOC_INFO', ICURSOR => ICURSOR, NPOSITION => 2); - /* Если тип = 3, то необходимо включать состояние */ + /* Если тип "Приход из подразделений и маршрутные листы", то необходимо включать состояние */ if (NTYPE = NTASK_TYPE_INC_DEPS_RL) then PKG_P8PANELS_VISUAL.TROW_ADD_CUR_COLS(RROW => RDG_ROW, SNAME => 'SDOC_STATE', @@ -1619,11 +2075,11 @@ create or replace package body PKG_P8PANELS_MECHREC as /* Считывание максимального уровня иерархии плана по каталогу */ function PRODPLAN_MAX_LEVEL_GET ( - NCRN in number -- Рег. номер каталога планов - ) return number -- Максимальный уровень иерархии + NCRN in number -- Рег. номер каталога планов + ) return number -- Максимальный уровень иерархии is - NRESULT PKG_STD.TNUMBER := 1; -- Максимальный уровень иерархии - NTOTAL PKG_STD.TNUMBER := 0; -- Сумма документов по проверяемому уровню + NRESULT PKG_STD.TNUMBER := 1; -- Максимальный уровень иерархии + NTOTAL PKG_STD.TNUMBER := 0; -- Сумма документов по проверяемому уровню begin /* Цикл по уровням каталога планов */ for REC in (select level, @@ -1678,11 +2134,11 @@ create or replace package body PKG_P8PANELS_MECHREC as /* Определение дат спецификации плана */ procedure FCPRODPLANSP_DATES_GET ( - DREP_DATE in date, -- Дата запуска спецификации - DREP_DATE_TO in date, -- Дата выпуска спецификации - DINCL_DATE in date, -- Дата включения в план спецификации - DDATE_FROM out date, -- Итоговая дата запуска спецификации - DDATE_TO out date -- Итоговая дата выпуска спецификации + DREP_DATE in date, -- Дата запуска спецификации + DREP_DATE_TO in date, -- Дата выпуска спецификации + DINCL_DATE in date, -- Дата включения в план спецификации + DDATE_FROM out date, -- Итоговая дата запуска спецификации + DDATE_TO out date -- Итоговая дата выпуска спецификации ) is begin @@ -1810,15 +2266,15 @@ create or replace package body PKG_P8PANELS_MECHREC as /* Опеределение класса задачи */ function GET_TASK_CLASS ( - NDEFRESLIZ in number, -- Дефицит запуска - NREL_FACT in number, -- Выпуск факт - NDEFSTART in number, -- Дефицит выпуска - DREP_DATE in date, -- Дата запуска спецификации - DREP_DATE_TO in date, -- Дата выпуска спецификации - NHAVE_LINK in number := 0 -- Наличие связей с "Маршрутный лист" или "Приход из подразделения" - ) return number -- Класс задачи + NDEFRESLIZ in number, -- Дефицит запуска + NREL_FACT in number, -- Выпуск факт + NDEFSTART in number, -- Дефицит выпуска + DREP_DATE in date, -- Дата запуска спецификации + DREP_DATE_TO in date, -- Дата выпуска спецификации + NHAVE_LINK in number := 0 -- Наличие связей с "Маршрутный лист" или "Приход из подразделения" + ) return number -- Класс задачи is - NTASK_CLASS PKG_STD.TNUMBER; -- Класс задачи (см. константы NCLASS*) + NTASK_CLASS PKG_STD.TNUMBER; -- Класс задачи (см. константы NCLASS*) begin /* Если одна из дат не указана */ if ((DREP_DATE is null) or (DREP_DATE_TO is null)) then @@ -1872,13 +2328,13 @@ create or replace package body PKG_P8PANELS_MECHREC as /* Получение типа задачи */ procedure GET_TASK_TYPE ( - NCOMPANY in number, -- Рег. номер организации - SSORT_FIELD in varchar2, -- Тип сортировки - NFCPRODPLAN in number, -- Рег. номер плана - NFCPRODPLANSP in number, -- Рег. номер спецификации плана - NTASK_CLASS in number, -- Класс задачи (см. константы NCLASS_*) - NTYPE out number, -- Тип задачи (см. константы NTASK_TYPE_*) - SDETAIL_LIST out varchar2 -- Ссылки на детализацию + NCOMPANY in number, -- Рег. номер организации + SSORT_FIELD in varchar2, -- Тип сортировки + NFCPRODPLAN in number, -- Рег. номер плана + NFCPRODPLANSP in number, -- Рег. номер спецификации плана + NTASK_CLASS in number, -- Класс задачи (см. константы NCLASS_*) + NTYPE out number, -- Тип задачи (см. константы NTASK_TYPE_*) + SDETAIL_LIST out varchar2 -- Ссылки на детализацию ) is begin @@ -2264,15 +2720,2578 @@ create or replace package body PKG_P8PANELS_MECHREC as PKG_STATE.DIAGNOSTICS_STACKED(); P_EXCEPTION(0, PKG_STATE.SQL_ERRM()); end ACATALOG_INIT; + + /* + Процедуры панели "Производственный план цеха" + */ + + /* Изменение приоритета партии маршрутного листа */ + procedure FCROUTLST_PRIOR_PARTY_UPDATE + ( + NFCROUTLST in number, -- Рег. номер маршрутного листа + SPRIOR_PARTY in varchar -- Новое значение приоритета партии + ) + is + RFCROUTLST FCROUTLST%rowtype; -- Запись маршрутного листа + begin + /* Дорабатывается */ + P_EXCEPTION(0, 'На стадии разработки.'); + /* Проверяем нет ли лишних символов */ + if ((SPRIOR_PARTY is not null) and (REGEXP_COUNT(SPRIOR_PARTY, '[^0123456789]+') > 0)) then + P_EXCEPTION(0, 'Значение приоритета должно быть целым числом.'); + end if; + /* Считываем запись маршрутного листа */ + UTL_FCROUTLST_GET(NFCROUTLST => NFCROUTLST, RFCROUTLST => RFCROUTLST); + /* Исправляем приоритет партии */ + RFCROUTLST.PRIOR_PARTY := TO_NUMBER(SPRIOR_PARTY); + /* Базовое исправление маршрутного листа */ + P_FCROUTLST_BASE_UPDATE(NRN => RFCROUTLST.RN, + NCOMPANY => RFCROUTLST.COMPANY, + NDOCTYPE => RFCROUTLST.DOCTYPE, + SDOCPREF => RFCROUTLST.DOCPREF, + SDOCNUMB => RFCROUTLST.DOCNUMB, + DDOCDATE => RFCROUTLST.DOCDATE, + SBARCODE => RFCROUTLST.BARCODE, + NJUR_PERS => RFCROUTLST.JUR_PERS, + NSTATE => RFCROUTLST.STATE, + DCHANGE_DATE => RFCROUTLST.CHANGE_DATE, + NFACEACC => RFCROUTLST.FACEACC, + NPR_COND => RFCROUTLST.PR_COND, + NMATRES => RFCROUTLST.MATRES, + NNOMCLASSIF => RFCROUTLST.NOMCLASSIF, + NARTICLE => RFCROUTLST.ARTICLE, + NQUANT => RFCROUTLST.QUANT, + NMATRES_PLAN => RFCROUTLST.MATRES_PLAN, + NMEASURE_TYPE => RFCROUTLST.MEASURE_TYPE, + NQUANT_PLAN => RFCROUTLST.QUANT_PLAN, + NMATRES_FACT => RFCROUTLST.MATRES_FACT, + NQUANT_FACT => RFCROUTLST.QUANT_FACT, + DOUT_DATE => RFCROUTLST.OUT_DATE, + NBLANK => RFCROUTLST.BLANK, + NDETAILS_COUNT => RFCROUTLST.DETAILS_COUNT, + NSUPPLY => RFCROUTLST.SUPPLY, + NSTORAGE => RFCROUTLST.STORAGE, + NSTORAGE_IN => RFCROUTLST.STORAGE_IN, + NPRODCMP => RFCROUTLST.PRODCMP, + NPRODCMPSP => RFCROUTLST.PRODCMPSP, + DREL_DATE => RFCROUTLST.REL_DATE, + NREL_QUANT => RFCROUTLST.REL_QUANT, + NPRIOR_ORDER => RFCROUTLST.PRIOR_ORDER, + NPRIOR_PARTY => RFCROUTLST.PRIOR_PARTY, + NROUTSHT => RFCROUTLST.ROUTSHT, + NROUTE => RFCROUTLST.ROUTE, + NCALC_SCHEME => RFCROUTLST.CALC_SCHEME, + NPER_MATRES => RFCROUTLST.PER_MATRES, + NCOST_ARTICLE => RFCROUTLST.COST_ARTICLE, + NVALID_DOCTYPE => RFCROUTLST.VALID_DOCTYPE, + SVALID_DOCNUMB => RFCROUTLST.VALID_DOCNUMB, + DVALID_DOCDATE => RFCROUTLST.VALID_DOCDATE, + SNOTE => RFCROUTLST.NOTE, + NPARTY => RFCROUTLST.PARTY, + DEXEC_DATE => RFCROUTLST.EXEC_DATE, + SSEP_NUMB => RFCROUTLST.SEP_NUMB, + SINT_NUMB => RFCROUTLST.INT_NUMB); + end FCROUTLST_PRIOR_PARTY_UPDATE; + + /* Изменение заказа маршрутного листа */ + procedure FCROUTLST_FACEACC_UPDATE + ( + NFCROUTLST in number, -- Рег. номер маршрутного листа + SFACEACC_NUMB in varchar, -- Номер заказа + NFCPRODPLANSP in number -- Рег. номер строки плана + ) + is + RFCROUTLST FCROUTLST%rowtype; -- Запись маршрутного листа + NFACEACC PKG_STD.TREF; -- Рег. номер лицевого счета + + /* Проверка наличия связей с другими строками плана */ + function FCROUTLST_CHECK_OTHER_PROD + ( + NFCROUTLST in number, -- Рег. номер маршрутного листа + NFCPRODPLANSP in number -- Рег. номер строки плана + ) return number -- Наличие других связей (0 - нет, 1 - да) + is + NRESULT PKG_STD.TNUMBER; -- Наличие других связей (0 - нет, 1 - да) + begin + /* Проверка наличия других связей */ + begin + select 1 + into NRESULT + from DUAL + where exists (select null + from DOCLINKS D + where D.OUT_UNITCODE = 'CostRouteLists' + and D.OUT_DOCUMENT = NFCROUTLST + and D.IN_UNITCODE = 'CostProductPlansSpecs' + and D.IN_DOCUMENT <> NFCPRODPLANSP); + exception + when others then + NRESULT := 0; + end; + /* Возвращаем результат */ + return NRESULT; + end FCROUTLST_CHECK_OTHER_PROD; + begin + /* Дорабатывается */ + P_EXCEPTION(0, 'На стадии разработки.'); + /* Считываем запись маршрутного листа */ + UTL_FCROUTLST_GET(NFCROUTLST => NFCROUTLST, RFCROUTLST => RFCROUTLST); + /* Определяем рег. номер лицевого счета */ + FIND_FACEACC_NUMB(NFLAG_SMART => 0, + NFLAG_OPTION => 1, + NCOMPANY => RFCROUTLST.COMPANY, + SNUMB => SFACEACC_NUMB, + NRN => NFACEACC); + /* Если есть связи с другими строками плана */ + if (FCROUTLST_CHECK_OTHER_PROD(NFCROUTLST => NFCROUTLST, NFCPRODPLANSP => NFCPRODPLANSP) = 1) then + null; + end if; + end FCROUTLST_FACEACC_UPDATE; + + /* Получение таблицы маршрутных листов, связанных со спецификацией плана */ + procedure FCROUTLST_DEPT_DG_GET + ( + NFCPRODPLANSP in number, -- Рег. номер связанной спецификации плана + NPAGE_NUMBER in number, -- Номер страницы (игнорируется при NPAGE_SIZE=0) + NPAGE_SIZE in number, -- Количество записей на странице (0 - все) + CORDERS in clob, -- Сортировки + NINCLUDE_DEF in number, -- Признак включения описания колонок таблицы в ответ + COUT out clob -- Сериализованная таблица данных + ) + is + NCOMPANY PKG_STD.TREF := GET_SESSION_COMPANY(); -- Организация сеанса + RO PKG_P8PANELS_VISUAL.TORDERS; -- Сортировки + RDG PKG_P8PANELS_VISUAL.TDATA_GRID; -- Описание таблицы + RDG_ROW PKG_P8PANELS_VISUAL.TROW; -- Строка таблицы + NROW_FROM PKG_STD.TREF; -- Номер строки с + NROW_TO PKG_STD.TREF; -- Номер строки по + CSQL clob; -- Буфер для запроса + ICURSOR integer; -- Курсор для исполнения запроса + NFCROUTLST_IDENT PKG_STD.TREF; -- Рег. номер идентификатора отмеченных записей маршрутных листов + NFCMATRESOURCE PKG_STD.TREF; -- Рег. номер материального ресурса записи спецификации плана + NFCROUTLST PKG_STD.TREF; -- Рег. номер связанного маршрутного листа + NFCPRODPLANSP_MAIN PKG_STD.TREF; -- Рег. номер основного состава из "Производственная программа" + NFCROUTLSTORD_QUANT PKG_STD.TLNUMBER; -- Сумма "Количество" в спецификации "Заказы" маршрутного листа + + /* Считывание материального ресурса спецификации плана */ + function MATRES_RN_GET + ( + NFCPRODPLANSP in number -- Рег. номер спецификации плана + ) return number -- Рег. номер материального ресурса + is + NRESULT PKG_STD.TREF; -- Рег. номер материального ресурса + begin + /* Считываем рег. номер материального ресурса */ + begin + select T.MATRES into NRESULT from FCPRODPLANSP T where T.RN = NFCPRODPLANSP; + exception + when others then + P_EXCEPTION(0, + 'Ошибка считывания материального ресурса спецификации плана.'); + end; + /* Возвращаем результат */ + return NRESULT; + end MATRES_RN_GET; + + /* Проверка прямой связи между МЛ и спецификацией плана "Заказы" */ + function FCROUTLSTORD_QUANT_GET + ( + NFCROUTLST in number -- Рег. номер маршрутного листа + ) return number -- Сумма "Количество" в спецификации "Заказы" + is + NRESULT PKG_STD.TLNUMBER; -- Сумма "Количество" в спецификации "Заказы" + begin + /* Считываем сумму "Количество" из спецификации "Заказы" */ + begin + select COALESCE(sum(T.QUANT), 0) into NRESULT from FCROUTLSTORD T where T.PRN = NFCROUTLST; + exception + when others then + NRESULT := 0; + end; + /* Возвращаем результат */ + return NRESULT; + end FCROUTLSTORD_QUANT_GET; + begin + /* Читем сортировки */ + RO := PKG_P8PANELS_VISUAL.TORDERS_FROM_XML(CORDERS => CORDERS); + /* Преобразуем номер и размер страницы в номер строк с и по */ + PKG_P8PANELS_VISUAL.UTL_ROWS_LIMITS_CALC(NPAGE_NUMBER => NPAGE_NUMBER, + NPAGE_SIZE => NPAGE_SIZE, + NROW_FROM => NROW_FROM, + NROW_TO => NROW_TO); + /* Инициализируем таблицу данных */ + RDG := PKG_P8PANELS_VISUAL.TDATA_GRID_MAKE(); + /* Описываем колонки таблицы данных */ + PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG, + SNAME => 'NRN', + SCAPTION => 'Рег. номер', + SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_NUMB, + BVISIBLE => false); + PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG, + SNAME => 'SDOC_INFO', + SCAPTION => 'Документ (тип, №, дата)', + SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_STR, + BVISIBLE => true, + BORDER => true); + PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG, + SNAME => 'NQUANT', + SCAPTION => 'Количество план', + SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_NUMB, + BVISIBLE => true, + BORDER => true); + PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG, + SNAME => 'NPROCENT', + SCAPTION => 'Готовность партии', + SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_NUMB, + BVISIBLE => true, + BORDER => true); + PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG, + SNAME => 'NPRIOR_PARTY', + SCAPTION => 'Приоритет партии', + SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_NUMB, + BVISIBLE => true, + BORDER => true); + PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG, + SNAME => 'SPROD_ORDER', + SCAPTION => 'Заказ', + SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_STR, + BVISIBLE => false); + /*! Пока отключен */ + PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG, + SNAME => 'NCHANGE_FACEACC', + SCAPTION => 'Изменить заказ', + SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_NUMB, + BVISIBLE => false, + BORDER => true); + /* Считываем рег. номер связанной спецификации из "Производственная программа" */ + NFCPRODPLANSP_MAIN := UTL_FCPRODPLANSP_MAIN_GET(NCOMPANY => NCOMPANY, NFCPRODPLANSP => NFCPRODPLANSP); + /* Если спецификация производственной программы найдена */ + if (NFCPRODPLANSP_MAIN is not null) then + /* Считывание материального ресурса спецификации плана */ + NFCMATRESOURCE := MATRES_RN_GET(NFCPRODPLANSP => NFCPRODPLANSP_MAIN); + /* Инициализируем список маршрутных листов */ + UTL_FCROUTLST_IDENT_INIT(NFCPRODPLANSP => NFCPRODPLANSP_MAIN, NIDENT => NFCROUTLST_IDENT); + /* Обходим данные */ + begin + /* Добавляем подсказку совместимости */ + CSQL := PKG_SQL_BUILD.COMPATIBLE(SSQL => CSQL); + /* Формируем запрос */ + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => 'select *'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' from (select D.*,'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => PKG_SQL_BUILD.SQLROWNUM() || ' NROW'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' from (select P.NRN,'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' P.SDOC_INFO,'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' P.NQUANT,'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' case when (P.NT_SHT_PLAN <> 0) then P.NLABOUR_FACT / P.NT_SHT_PLAN * 100 else 0 end NPROCENT,'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' P.NPRIOR_PARTY,'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' P.SPROD_ORDER'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' from (select T.RN NRN,'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' DT.DOCCODE ||'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' '', '' || TRIM(T.DOCPREF) ||'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' ''-'' || TRIM(T.DOCNUMB) ||'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' '', '' || TO_CHAR(T.DOCDATE, ' || PKG_SQL_BUILD.WRAP_STR(SVALUE => 'dd.mm.yyyy') || ') as SDOC_INFO,'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' T.QUANT NQUANT,'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' (select SUM(SP.LABOUR_FACT)'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' from FCROUTLSTSP SP'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' where SP.PRN = T.RN) NLABOUR_FACT,'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' (select SUM(SP.T_SHT_PLAN)'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' from FCROUTLSTSP SP'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' where SP.PRN = T.RN) NT_SHT_PLAN,'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' T.PRIOR_PARTY NPRIOR_PARTY,'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' (select F.NUMB from FACEACC F where T.FACEACC = F.RN ) SPROD_ORDER'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' from FCROUTLST T,'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' DOCTYPES DT'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' where T.RN in (select SL.DOCUMENT'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' from SELECTLIST SL'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' where SL.IDENT = :NFCROUTLST_IDENT'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' and SL.UNITCODE = ' || PKG_SQL_BUILD.WRAP_STR(SVALUE => 'CostRouteLists') || ')'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' and T.COMPANY = :NCOMPANY'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' and T."STATE" = ' || PKG_SQL_BUILD.WRAP_NUM(NVALUE => 1)); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' and T.MATRES = :NFCMATRESOURCE'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' and DT.RN = T.DOCTYPE'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' and exists (select ' || PKG_SQL_BUILD.SET_HINT(SHINT => 'INDEX(UP I_USERPRIV_CATALOG_ROLEID)') || ' null'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' from USERPRIV UP'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' where UP."CATALOG" = T.CRN'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' and UP.ROLEID in (select ' || PKG_SQL_BUILD.SET_HINT(SHINT => 'INDEX(UR I_USERROLES_AUTHID_FK)') || ' UR.ROLEID'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' from USERROLES UR'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' where UR.AUTHID = UTILIZER())'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' union all'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' select ' || PKG_SQL_BUILD.SET_HINT(SHINT => 'INDEX(UP I_USERPRIV_CATALOG_AUTHID)') || ' null'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' from USERPRIV UP'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' where UP."CATALOG" = T.CRN'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' and UP.AUTHID = UTILIZER())'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' and exists (select ' || PKG_SQL_BUILD.SET_HINT(SHINT => 'INDEX(UP I_USERPRIV_JUR_PERS_ROLEID)') || ' null'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' from USERPRIV UP'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' where UP.JUR_PERS = T.JUR_PERS'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' and UP.UNITCODE = ' || PKG_SQL_BUILD.WRAP_STR(SVALUE => 'CostRouteLists')); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' and UP.ROLEID in (select ' || PKG_SQL_BUILD.SET_HINT(SHINT => 'INDEX(UR I_USERROLES_AUTHID_FK)') || ' UR.ROLEID'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' from USERROLES UR'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' where UR.AUTHID = UTILIZER())'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' union all'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' select ' || PKG_SQL_BUILD.SET_HINT(SHINT => 'INDEX(UP I_USERPRIV_JUR_PERS_AUTHID)') || ' null'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' from USERPRIV UP'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' where UP.JUR_PERS = T.JUR_PERS'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' and UP.UNITCODE = ' || PKG_SQL_BUILD.WRAP_STR(SVALUE => 'CostRouteLists')); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' and UP.AUTHID = UTILIZER())) P'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' %ORDER_BY%) D) F'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' where F.NROW between :NROW_FROM and :NROW_TO'); + /* Учтём сортировки */ + PKG_P8PANELS_VISUAL.TORDERS_SET_QUERY(RDATA_GRID => RDG, RORDERS => RO, SPATTERN => '%ORDER_BY%', CSQL => CSQL); + /* Разбираем его */ + ICURSOR := PKG_SQL_DML.OPEN_CURSOR(SWHAT => 'SELECT'); + PKG_SQL_DML.PARSE(ICURSOR => ICURSOR, SQUERY => CSQL); + /* Делаем подстановку параметров */ + PKG_SQL_DML.BIND_VARIABLE_NUM(ICURSOR => ICURSOR, SNAME => 'NCOMPANY', NVALUE => NCOMPANY); + PKG_SQL_DML.BIND_VARIABLE_NUM(ICURSOR => ICURSOR, SNAME => 'NROW_FROM', NVALUE => NROW_FROM); + PKG_SQL_DML.BIND_VARIABLE_NUM(ICURSOR => ICURSOR, SNAME => 'NROW_TO', NVALUE => NROW_TO); + PKG_SQL_DML.BIND_VARIABLE_NUM(ICURSOR => ICURSOR, SNAME => 'NFCROUTLST_IDENT', NVALUE => NFCROUTLST_IDENT); + PKG_SQL_DML.BIND_VARIABLE_NUM(ICURSOR => ICURSOR, SNAME => 'NFCMATRESOURCE', NVALUE => NFCMATRESOURCE); + /* Описываем структуру записи курсора */ + PKG_SQL_DML.DEFINE_COLUMN_NUM(ICURSOR => ICURSOR, IPOSITION => 1); + PKG_SQL_DML.DEFINE_COLUMN_STR(ICURSOR => ICURSOR, IPOSITION => 2); + PKG_SQL_DML.DEFINE_COLUMN_NUM(ICURSOR => ICURSOR, IPOSITION => 3); + PKG_SQL_DML.DEFINE_COLUMN_NUM(ICURSOR => ICURSOR, IPOSITION => 4); + PKG_SQL_DML.DEFINE_COLUMN_NUM(ICURSOR => ICURSOR, IPOSITION => 5); + PKG_SQL_DML.DEFINE_COLUMN_STR(ICURSOR => ICURSOR, IPOSITION => 6); + PKG_SQL_DML.DEFINE_COLUMN_NUM(ICURSOR => ICURSOR, IPOSITION => 7); + /* Делаем выборку */ + if (PKG_SQL_DML.EXECUTE(ICURSOR => ICURSOR) = 0) then + null; + end if; + /* Обходим выбранные записи */ + while (PKG_SQL_DML.FETCH_ROWS(ICURSOR => ICURSOR) > 0) + loop + /* Читаем данные из курсора */ + PKG_SQL_DML.COLUMN_VALUE_NUM(ICURSOR => ICURSOR, IPOSITION => 1, NVALUE => NFCROUTLST); + /* Добавляем колонку с рег. номером */ + PKG_P8PANELS_VISUAL.TROW_ADD_COL(RROW => RDG_ROW, SNAME => 'NRN', NVALUE => NFCROUTLST, BCLEAR => true); + /* Добавляем колонки с данными */ + PKG_P8PANELS_VISUAL.TROW_ADD_CUR_COLN(RROW => RDG_ROW, + SNAME => 'NRN', + ICURSOR => ICURSOR, + NPOSITION => 1, + BCLEAR => true); + PKG_P8PANELS_VISUAL.TROW_ADD_CUR_COLS(RROW => RDG_ROW, + SNAME => 'SDOC_INFO', + ICURSOR => ICURSOR, + NPOSITION => 2); + /* Проверяем наличие прямой связи между МЛ и спецификацией плана */ + if (PKG_DOCLINKS.FIND(NFLAG_SMART => 1, + SIN_UNITCODE => 'CostProductPlansSpecs', + NIN_DOCUMENT => NFCPRODPLANSP_MAIN, + NIN_PRN_DOCUMENT => null, + SOUT_UNITCODE => 'CostRouteLists', + NOUT_DOCUMENT => NFCROUTLST, + NOUT_PRN_DOCUMENT => null) = 1) then + /* Получаем сумму "Количество" из спецификации "Заказы" */ + NFCROUTLSTORD_QUANT := FCROUTLSTORD_QUANT_GET(NFCROUTLST => NFCROUTLST); + /* Если сумма "Количество" в "Заказы" больше 0 */ + if (NFCROUTLSTORD_QUANT > 0) then + /* Указываем её */ + PKG_P8PANELS_VISUAL.TROW_ADD_COL(RROW => RDG_ROW, SNAME => 'NQUANT', NVALUE => NFCROUTLSTORD_QUANT); + else + /* Берем из заголовка МЛ */ + PKG_P8PANELS_VISUAL.TROW_ADD_CUR_COLN(RROW => RDG_ROW, + SNAME => 'NQUANT', + ICURSOR => ICURSOR, + NPOSITION => 3); + end if; + else + /* Указываем 0 */ + PKG_P8PANELS_VISUAL.TROW_ADD_COL(RROW => RDG_ROW, SNAME => 'NQUANT', NVALUE => 0); + end if; + PKG_P8PANELS_VISUAL.TROW_ADD_CUR_COLN(RROW => RDG_ROW, SNAME => 'NPROCENT', ICURSOR => ICURSOR, NPOSITION => 4); + PKG_P8PANELS_VISUAL.TROW_ADD_CUR_COLN(RROW => RDG_ROW, + SNAME => 'NPRIOR_PARTY', + ICURSOR => ICURSOR, + NPOSITION => 5); + PKG_P8PANELS_VISUAL.TROW_ADD_CUR_COLS(RROW => RDG_ROW, + SNAME => 'SPROD_ORDER', + ICURSOR => ICURSOR, + NPOSITION => 6); + PKG_P8PANELS_VISUAL.TROW_ADD_COL(RROW => RDG_ROW, SNAME => 'NCHANGE_FACEACC', SVALUE => null); + /* Добавляем строку в таблицу */ + PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_ROW(RDATA_GRID => RDG, RROW => RDG_ROW); + end loop; + exception + when others then + PKG_SQL_DML.CLOSE_CURSOR(ICURSOR => ICURSOR); + raise; + end; + /* Очищаем отмеченные маршрутные листы */ + P_SELECTLIST_CLEAR(NIDENT => NFCROUTLST_IDENT); + end if; + /* Сериализуем описание */ + COUT := PKG_P8PANELS_VISUAL.TDATA_GRID_TO_XML(RDATA_GRID => RDG, NINCLUDE_DEF => NINCLUDE_DEF); + exception + when others then + /* Очищаем отмеченные маршрутные листы */ + P_SELECTLIST_CLEAR(NIDENT => NFCROUTLST_IDENT); + raise; + end FCROUTLST_DEPT_DG_GET; + + /* Получение таблицы заказов маршрутного листа */ + procedure FCROUTLSTORD_DEPT_DG_GET + ( + NFCROUTLST in number, -- Рег. номер маршрутного листа + NPAGE_NUMBER in number, -- Номер страницы (игнорируется при NPAGE_SIZE=0) + NPAGE_SIZE in number, -- Количество записей на странице (0 - все) + CORDERS in clob, -- Сортировки + NINCLUDE_DEF in number, -- Признак включения описания колонок таблицы в ответ + COUT out clob -- Сериализованная таблица данных + ) + is + NCOMPANY PKG_STD.TREF := GET_SESSION_COMPANY(); -- Организация сеанса + RO PKG_P8PANELS_VISUAL.TORDERS; -- Сортировки + RDG PKG_P8PANELS_VISUAL.TDATA_GRID; -- Описание таблицы + RDG_ROW PKG_P8PANELS_VISUAL.TROW; -- Строка таблицы + NROW_FROM PKG_STD.TREF; -- Номер строки с + NROW_TO PKG_STD.TREF; -- Номер строки по + CSQL clob; -- Буфер для запроса + ICURSOR integer; -- Курсор для исполнения запроса + SPROD_ORDER PKG_STD.TSTRING; -- Заказ МЛ + NQUANT PKG_STD.TLNUMBER; -- Количество МЛ + NPRIOR_ORDER PKG_STD.TLNUMBER; -- Приоритет заказа МЛ + + /* Проверка наличия записей спецификации "Заказы" */ + function FCROUTLSTORD_EXISTS + ( + NFCROUTLST in number -- Рег. номер маршрутного листа + ) return number -- Наличие записей спецификации заказы (0 - нет, 1 - да) + is + NRESULT PKG_STD.TNUMBER; -- Наличие записей спецификации заказы (0 - нет, 1 - да) + begin + /* Проверяем наличие */ + begin + select 1 + into NRESULT + from DUAL + where exists (select null + from FCROUTLSTORD T + where T.PRN = NFCROUTLST + and ROWNUM = 1); + exception + when others then + NRESULT := 0; + end; + /* Возвращаем результат */ + return NRESULT; + end FCROUTLSTORD_EXISTS; + + /* Получение значений из заголовка МЛ */ + procedure FCROUTLST_INFO_GET + ( + NFCROUTLST in number, -- Рег. номер маршрутного листа + SPROD_ORDER out varchar2, -- Заказ + NQUANT out number, -- Количество + NPRIOR_ORDER out number -- Приоритет заказа + ) + is + begin + /* Считываем информацию из заголовка */ + begin + select (select F.NUMB from FACEACC F where T.FACEACC = F.RN), + T.QUANT, + T.PRIOR_ORDER + into SPROD_ORDER, + NQUANT, + NPRIOR_ORDER + from FCROUTLST T + where T.RN = NFCROUTLST; + exception + when others then + SPROD_ORDER := null; + NQUANT := null; + NPRIOR_ORDER := null; + end; + end FCROUTLST_INFO_GET; + begin + /* Читем сортировки */ + RO := PKG_P8PANELS_VISUAL.TORDERS_FROM_XML(CORDERS => CORDERS); + /* Преобразуем номер и размер страницы в номер строк с и по */ + PKG_P8PANELS_VISUAL.UTL_ROWS_LIMITS_CALC(NPAGE_NUMBER => NPAGE_NUMBER, + NPAGE_SIZE => NPAGE_SIZE, + NROW_FROM => NROW_FROM, + NROW_TO => NROW_TO); + /* Инициализируем таблицу данных */ + RDG := PKG_P8PANELS_VISUAL.TDATA_GRID_MAKE(); + /* Описываем колонки таблицы данных */ + PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG, + SNAME => 'NRN', + SCAPTION => 'Рег. номер', + SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_NUMB, + BVISIBLE => false); + PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG, + SNAME => 'SPROD_ORDER', + SCAPTION => 'Заказ', + SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_STR, + BVISIBLE => true, + BORDER => true); + PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG, + SNAME => 'NQUANT', + SCAPTION => 'Количество', + SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_NUMB, + BVISIBLE => true, + BORDER => true); + PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG, + SNAME => 'NPRIOR_ORDER', + SCAPTION => 'Приоритет заказа', + SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_NUMB, + BVISIBLE => true, + BORDER => true); + /* Если у маршрутного листа есть записи спецификации "Заказы" - работаем по ним */ + if (FCROUTLSTORD_EXISTS(NFCROUTLST => NFCROUTLST) = 1) then + /* Обходим данные */ + begin + /* Добавляем подсказку совместимости */ + CSQL := PKG_SQL_BUILD.COMPATIBLE(SSQL => CSQL); + /* Формируем запрос */ + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => 'select *'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' from (select D.*,'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => PKG_SQL_BUILD.SQLROWNUM() || ' NROW'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' from (select T.RN NRN,'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' F.NUMB SPROD_ORDER,'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' T.QUANT NQUANT,'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' T.PRIOR_ORDER NPRIOR_ORDER,'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' from FCROUTLSTORD T'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' left outer join FACEACC F on T.PROD_ORDER = F.RN'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' where T.PRN = :NFCROUTLST'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' and T.COMPANY = :NCOMPANY'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' %ORDER_BY%) D) F'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' where F.NROW between :NROW_FROM and :NROW_TO'); + /* Учтём сортировки */ + PKG_P8PANELS_VISUAL.TORDERS_SET_QUERY(RDATA_GRID => RDG, RORDERS => RO, SPATTERN => '%ORDER_BY%', CSQL => CSQL); + /* Разбираем его */ + ICURSOR := PKG_SQL_DML.OPEN_CURSOR(SWHAT => 'SELECT'); + PKG_SQL_DML.PARSE(ICURSOR => ICURSOR, SQUERY => CSQL); + /* Делаем подстановку параметров */ + PKG_SQL_DML.BIND_VARIABLE_NUM(ICURSOR => ICURSOR, SNAME => 'NCOMPANY', NVALUE => NCOMPANY); + PKG_SQL_DML.BIND_VARIABLE_NUM(ICURSOR => ICURSOR, SNAME => 'NROW_FROM', NVALUE => NROW_FROM); + PKG_SQL_DML.BIND_VARIABLE_NUM(ICURSOR => ICURSOR, SNAME => 'NROW_TO', NVALUE => NROW_TO); + PKG_SQL_DML.BIND_VARIABLE_NUM(ICURSOR => ICURSOR, SNAME => 'NFCROUTLST', NVALUE => NFCROUTLST); + /* Описываем структуру записи курсора */ + PKG_SQL_DML.DEFINE_COLUMN_NUM(ICURSOR => ICURSOR, IPOSITION => 1); + PKG_SQL_DML.DEFINE_COLUMN_STR(ICURSOR => ICURSOR, IPOSITION => 2); + PKG_SQL_DML.DEFINE_COLUMN_NUM(ICURSOR => ICURSOR, IPOSITION => 3); + PKG_SQL_DML.DEFINE_COLUMN_NUM(ICURSOR => ICURSOR, IPOSITION => 4); + PKG_SQL_DML.DEFINE_COLUMN_NUM(ICURSOR => ICURSOR, IPOSITION => 5); + /* Делаем выборку */ + if (PKG_SQL_DML.EXECUTE(ICURSOR => ICURSOR) = 0) then + null; + end if; + /* Обходим выбранные записи */ + while (PKG_SQL_DML.FETCH_ROWS(ICURSOR => ICURSOR) > 0) + loop + /* Добавляем колонки с данными */ + PKG_P8PANELS_VISUAL.TROW_ADD_CUR_COLN(RROW => RDG_ROW, + SNAME => 'NRN', + ICURSOR => ICURSOR, + NPOSITION => 1, + BCLEAR => true); + PKG_P8PANELS_VISUAL.TROW_ADD_CUR_COLS(RROW => RDG_ROW, + SNAME => 'SPROD_ORDER', + ICURSOR => ICURSOR, + NPOSITION => 2); + PKG_P8PANELS_VISUAL.TROW_ADD_CUR_COLN(RROW => RDG_ROW, SNAME => 'NQUANT', ICURSOR => ICURSOR, NPOSITION => 3); + PKG_P8PANELS_VISUAL.TROW_ADD_CUR_COLN(RROW => RDG_ROW, + SNAME => 'NPRIOR_ORDER', + ICURSOR => ICURSOR, + NPOSITION => 4); + /* Добавляем строку в таблицу */ + PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_ROW(RDATA_GRID => RDG, RROW => RDG_ROW); + end loop; + exception + when others then + PKG_SQL_DML.CLOSE_CURSOR(ICURSOR => ICURSOR); + raise; + end; + else + /* Считываем значения из заголовка МЛ */ + FCROUTLST_INFO_GET(NFCROUTLST => NFCROUTLST, + SPROD_ORDER => SPROD_ORDER, + NQUANT => NQUANT, + NPRIOR_ORDER => NPRIOR_ORDER); + /* Добавляем колонки с данными */ + PKG_P8PANELS_VISUAL.TROW_ADD_COL(RROW => RDG_ROW, SNAME => 'NRN', NVALUE => NFCROUTLST, BCLEAR => true); + PKG_P8PANELS_VISUAL.TROW_ADD_COL(RROW => RDG_ROW, SNAME => 'SPROD_ORDER', SVALUE => SPROD_ORDER); + PKG_P8PANELS_VISUAL.TROW_ADD_COL(RROW => RDG_ROW, SNAME => 'NQUANT', NVALUE => NQUANT); + PKG_P8PANELS_VISUAL.TROW_ADD_COL(RROW => RDG_ROW, SNAME => 'NPRIOR_ORDER', NVALUE => NPRIOR_ORDER); + /* Добавляем строку в таблицу */ + PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_ROW(RDATA_GRID => RDG, RROW => RDG_ROW); + end if; + /* Сериализуем описание */ + COUT := PKG_P8PANELS_VISUAL.TDATA_GRID_TO_XML(RDATA_GRID => RDG, NINCLUDE_DEF => NINCLUDE_DEF); + end FCROUTLSTORD_DEPT_DG_GET; + + /* Получение таблицы ПиП на основании маршрутного листа, связанных со спецификацией плана */ + procedure INCOMEFROMDEPS_DEPT_DG_GET + ( + NFCPRODPLANSP in number, -- Рег. номер связанной спецификации плана + NPAGE_NUMBER in number, -- Номер страницы (игнорируется при NPAGE_SIZE=0) + NPAGE_SIZE in number, -- Количество записей на странице (0 - все) + CORDERS in clob, -- Сортировки + NINCLUDE_DEF in number, -- Признак включения описания колонок таблицы в ответ + COUT out clob -- Сериализованная таблица данных + ) + is + NCOMPANY PKG_STD.TREF := GET_SESSION_COMPANY(); -- Организация сеанса + RO PKG_P8PANELS_VISUAL.TORDERS; -- Сортировки + RDG PKG_P8PANELS_VISUAL.TDATA_GRID; -- Описание таблицы + RDG_ROW PKG_P8PANELS_VISUAL.TROW; -- Строка таблицы + NROW_FROM PKG_STD.TREF; -- Номер строки с + NROW_TO PKG_STD.TREF; -- Номер строки по + CSQL clob; -- Буфер для запроса + ICURSOR integer; -- Курсор для исполнения запроса + NFCPRODPLANSP_MAIN PKG_STD.TREF; -- Рег. номер основного состава из "Производственная программа" + NFCROUTLST_IDENT PKG_STD.TREF; -- Рег. номер идентификатора отмеченных записей маршрутных листов + begin + /* Читем сортировки */ + RO := PKG_P8PANELS_VISUAL.TORDERS_FROM_XML(CORDERS => CORDERS); + /* Преобразуем номер и размер страницы в номер строк с и по */ + PKG_P8PANELS_VISUAL.UTL_ROWS_LIMITS_CALC(NPAGE_NUMBER => NPAGE_NUMBER, + NPAGE_SIZE => NPAGE_SIZE, + NROW_FROM => NROW_FROM, + NROW_TO => NROW_TO); + /* Инициализируем таблицу данных */ + RDG := PKG_P8PANELS_VISUAL.TDATA_GRID_MAKE(); + /* Описываем колонки таблицы данных */ + PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG, + SNAME => 'NRN', + SCAPTION => 'Рег. номер', + SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_NUMB, + BVISIBLE => false); + PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG, + SNAME => 'SDOC_INFO', + SCAPTION => 'Документ (тип, №, дата)', + SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_STR, + BVISIBLE => true, + BORDER => true); + PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG, + SNAME => 'NQUANT_FACT', + SCAPTION => 'Количество сдано', + SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_NUMB, + BVISIBLE => true, + BORDER => true); + PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG, + SNAME => 'DDUE_DATE', + SCAPTION => 'Дата сдачи', + SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_DATE, + BVISIBLE => true, + BORDER => true); + /* Считываем рег. номер связанной спецификации из "Производственная программа" */ + NFCPRODPLANSP_MAIN := UTL_FCPRODPLANSP_MAIN_GET(NCOMPANY => NCOMPANY, NFCPRODPLANSP => NFCPRODPLANSP); + /* Если спецификация производственной программы найдена */ + if (NFCPRODPLANSP_MAIN is not null) then + /* Инициализируем список маршрутных листов */ + UTL_FCROUTLST_IDENT_INIT(NFCPRODPLANSP => NFCPRODPLANSP_MAIN, NIDENT => NFCROUTLST_IDENT); + /* Обходим данные */ + begin + /* Добавляем подсказку совместимости */ + CSQL := PKG_SQL_BUILD.COMPATIBLE(SSQL => CSQL); + /* Формируем запрос */ + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => 'select *'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' from (select D.*,'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => PKG_SQL_BUILD.SQLROWNUM() || ' NROW'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' from (select T.RN NRN,'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' DT.DOCCODE ||'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' '', '' || TRIM(T.DOC_PREF) ||'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' ''-'' || TRIM(T.DOC_NUMB) ||'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' '', '' || TO_CHAR(T.DOC_DATE, ' || PKG_SQL_BUILD.WRAP_STR(SVALUE => 'dd.mm.yyyy') || ') as SDOC_INFO,'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' (select SUM(SP.QUANT_FACT)'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' from INCOMEFROMDEPSSPEC SP'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' where SP.PRN = T.RN) NQUANT_FACT,'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' T.WORK_DATE as DDUE_DATE'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' from INCOMEFROMDEPS T,'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' DOCTYPES DT'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' where ((T.RN in (select L.OUT_DOCUMENT'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' from DOCLINKS L'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' where L.IN_DOCUMENT = :NFCPRODPLANSP'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' and L.IN_UNITCODE = ' || PKG_SQL_BUILD.WRAP_STR(SVALUE => 'CostProductPlansSpecs')); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' and L.OUT_UNITCODE = ' || PKG_SQL_BUILD.WRAP_STR(SVALUE => 'IncomFromDeps') || '))'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' or (T.RN in (select L.OUT_DOCUMENT'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' from SELECTLIST SL,'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' DOCLINKS L'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' where SL.IDENT = :NFCROUTLST_IDENT'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' and SL.UNITCODE = ' || PKG_SQL_BUILD.WRAP_STR(SVALUE => 'CostRouteLists')); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' and L.IN_DOCUMENT = SL.DOCUMENT'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' and L.IN_UNITCODE = ' || PKG_SQL_BUILD.WRAP_STR(SVALUE => 'CostRouteLists')); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' and L.OUT_UNITCODE = ' || PKG_SQL_BUILD.WRAP_STR(SVALUE => 'IncomFromDeps') || ')))'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' and T.COMPANY = :NCOMPANY'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' and T.DOC_TYPE = DT.RN'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' %ORDER_BY%) D) F'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' where F.NROW between :NROW_FROM and :NROW_TO'); + /* Учтём сортировки */ + PKG_P8PANELS_VISUAL.TORDERS_SET_QUERY(RDATA_GRID => RDG, RORDERS => RO, SPATTERN => '%ORDER_BY%', CSQL => CSQL); + /* Разбираем его */ + ICURSOR := PKG_SQL_DML.OPEN_CURSOR(SWHAT => 'SELECT'); + PKG_SQL_DML.PARSE(ICURSOR => ICURSOR, SQUERY => CSQL); + /* Делаем подстановку параметров */ + PKG_SQL_DML.BIND_VARIABLE_NUM(ICURSOR => ICURSOR, SNAME => 'NCOMPANY', NVALUE => NCOMPANY); + PKG_SQL_DML.BIND_VARIABLE_NUM(ICURSOR => ICURSOR, SNAME => 'NROW_FROM', NVALUE => NROW_FROM); + PKG_SQL_DML.BIND_VARIABLE_NUM(ICURSOR => ICURSOR, SNAME => 'NROW_TO', NVALUE => NROW_TO); + PKG_SQL_DML.BIND_VARIABLE_NUM(ICURSOR => ICURSOR, SNAME => 'NFCPRODPLANSP', NVALUE => NFCPRODPLANSP_MAIN); + PKG_SQL_DML.BIND_VARIABLE_NUM(ICURSOR => ICURSOR, SNAME => 'NFCROUTLST_IDENT', NVALUE => NFCROUTLST_IDENT); + /* Описываем структуру записи курсора */ + PKG_SQL_DML.DEFINE_COLUMN_NUM(ICURSOR => ICURSOR, IPOSITION => 1); + PKG_SQL_DML.DEFINE_COLUMN_STR(ICURSOR => ICURSOR, IPOSITION => 2); + PKG_SQL_DML.DEFINE_COLUMN_NUM(ICURSOR => ICURSOR, IPOSITION => 3); + PKG_SQL_DML.DEFINE_COLUMN_DATE(ICURSOR => ICURSOR, IPOSITION => 4); + PKG_SQL_DML.DEFINE_COLUMN_NUM(ICURSOR => ICURSOR, IPOSITION => 5); + /* Делаем выборку */ + if (PKG_SQL_DML.EXECUTE(ICURSOR => ICURSOR) = 0) then + null; + end if; + /* Обходим выбранные записи */ + while (PKG_SQL_DML.FETCH_ROWS(ICURSOR => ICURSOR) > 0) + loop + /* Добавляем колонки с данными */ + PKG_P8PANELS_VISUAL.TROW_ADD_CUR_COLN(RROW => RDG_ROW, + SNAME => 'NRN', + ICURSOR => ICURSOR, + NPOSITION => 1, + BCLEAR => true); + PKG_P8PANELS_VISUAL.TROW_ADD_CUR_COLS(RROW => RDG_ROW, + SNAME => 'SDOC_INFO', + ICURSOR => ICURSOR, + NPOSITION => 2); + PKG_P8PANELS_VISUAL.TROW_ADD_CUR_COLN(RROW => RDG_ROW, + SNAME => 'NQUANT_FACT', + ICURSOR => ICURSOR, + NPOSITION => 3); + PKG_P8PANELS_VISUAL.TROW_ADD_CUR_COLD(RROW => RDG_ROW, + SNAME => 'DDUE_DATE', + ICURSOR => ICURSOR, + NPOSITION => 4); + /* Добавляем строку в таблицу */ + PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_ROW(RDATA_GRID => RDG, RROW => RDG_ROW); + end loop; + exception + when others then + PKG_SQL_DML.CLOSE_CURSOR(ICURSOR => ICURSOR); + raise; + end; + /* Очищаем отмеченные маршрутные листы */ + P_SELECTLIST_CLEAR(NIDENT => NFCROUTLST_IDENT); + end if; + /* Сериализуем описание */ + COUT := PKG_P8PANELS_VISUAL.TDATA_GRID_TO_XML(RDATA_GRID => RDG, NINCLUDE_DEF => NINCLUDE_DEF); + exception + when others then + /* Очищаем отмеченные маршрутные листы */ + P_SELECTLIST_CLEAR(NIDENT => NFCROUTLST_IDENT); + raise; + end INCOMEFROMDEPS_DEPT_DG_GET; + + /* Получение таблицы спецификаций планов и отчетов производства изделий */ + procedure FCPRODPLANSP_DEPT_DG_GET + ( + NFCPRODPLAN in number, -- Рег. номер планов и отчетов производства изделий + NPAGE_NUMBER in number, -- Номер страницы (игнорируется при NPAGE_SIZE=0) + NPAGE_SIZE in number, -- Количество записей на странице (0 - все) + CORDERS in clob, -- Сортировки + NINCLUDE_DEF in number, -- Признак включения описания колонок таблицы в ответ + COUT out clob -- Сериализованная таблица данных + ) + is + NCOMPANY PKG_STD.TREF := GET_SESSION_COMPANY(); -- Организация сеанса + RO PKG_P8PANELS_VISUAL.TORDERS; -- Сортировки + RDG PKG_P8PANELS_VISUAL.TDATA_GRID; -- Описание таблицы + RDG_ROW PKG_P8PANELS_VISUAL.TROW; -- Строка таблицы + NROW_FROM PKG_STD.TREF; -- Номер строки с + NROW_TO PKG_STD.TREF; -- Номер строки по + CSQL clob; -- Буфер для запроса + ICURSOR integer; -- Курсор для исполнения запроса + NFCPRODPLANSP PKG_STD.TREF; -- Рег. номер спецификации плана + DDATE PKG_STD.TLDATE := sysdate; -- Текущая дата + NSUM_PLAN PKG_STD.TLNUMBER; -- Сумма плана по строке + NSUM_FACT PKG_STD.TLNUMBER; -- Сумма факта по строке + DDATE_FROM PKG_STD.TLDATE; -- Дата начала месяца + DDATE_TO PKG_STD.TLDATE; -- Дата окончания месяца + NFCROUTLST_IDENT PKG_STD.TREF; -- Рег. номер идентификатора отмеченных записей маршрутных листов + NFCPRODPLANSP_MAIN PKG_STD.TREF; -- Рег. номер основного состава из "Производственная программа" + NMODIF PKG_STD.TREF; -- Рег. номер модификации + + /* Считывание номенклатуры по спецификации плана */ + function FCPRODPLANSP_MODIF_GET + ( + NFCPRODPLANSP in number -- Рег. номер связанной спецификации плана + ) return number -- Рег. номер модификации номенклатуры + is + NRESULT PKG_STD.TREF; -- Рег. номер модификации номенклатуры + begin + /* Считываем рег. номер модификации спецификации плана */ + begin + select F.NOMEN_MODIF + into NRESULT + from FCPRODPLANSP T, + FCMATRESOURCE F + where T.RN = NFCPRODPLANSP + and F.RN = T.MATRES; + exception + when others then + NRESULT := null; + end; + /* Возвращаем результат */ + return NRESULT; + end FCPRODPLANSP_MODIF_GET; + + /* Инициализация дней месяца */ + procedure INIT_DAYS + ( + RDG in out nocopy PKG_P8PANELS_VISUAL.TDATA_GRID, -- Описание таблицы + DDATE_FROM in date, -- Дата начала месяца + DDATE_TO in date -- Дата окончания месяца + ) + is + DDATE PKG_STD.TLDATE; -- Сформированная дата дня + NMONTH PKG_STD.TNUMBER; -- Текущий месяц + NYEAR PKG_STD.TNUMBER; -- Текущий год + SDATE_NAME PKG_STD.TSTRING; -- Строковое представление даты для наименования колонки + SPARENT_NAME PKG_STD.TSTRING; -- Наименование родительской строки + begin + /* Считываем месяц и год текущей даты */ + NMONTH := D_MONTH(DDATE => sysdate); + NYEAR := D_YEAR(DDATE => sysdate); + /* Цикл по дням месяца */ + for I in D_DAY(DDATE => DDATE_FROM) .. D_DAY(DDATE => DDATE_TO) + loop + /* Формируем дату дня */ + DDATE := TO_DATE(TO_CHAR(I) || '.' || TO_CHAR(NMONTH) || '.' || TO_CHAR(NYEAR), 'dd.mm.yyyy'); + /* Строковое представление даты для наименования колонки */ + SDATE_NAME := TO_CHAR(DDATE, SCOL_PATTERN_DATE); + /* Формируем наименование родительской строки */ + SPARENT_NAME := 'N_' || SDATE_NAME || '_PLAN_FACT'; + /* Описываем родительскую колонку таблицы данных */ + PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG, + SNAME => SPARENT_NAME, + SCAPTION => LPAD(D_DAY(DDATE), 2, '0'), + SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_STR, + SPARENT => 'NVALUE_BY_DAYS'); + end loop; + end INIT_DAYS; + begin + /* Читем сортировки */ + RO := PKG_P8PANELS_VISUAL.TORDERS_FROM_XML(CORDERS => CORDERS); + /* Преобразуем номер и размер страницы в номер строк с и по */ + PKG_P8PANELS_VISUAL.UTL_ROWS_LIMITS_CALC(NPAGE_NUMBER => NPAGE_NUMBER, + NPAGE_SIZE => NPAGE_SIZE, + NROW_FROM => NROW_FROM, + NROW_TO => NROW_TO); + /* Инициализируем таблицу данных */ + RDG := PKG_P8PANELS_VISUAL.TDATA_GRID_MAKE(BFIXED_HEADER => true, NFIXED_COLUMNS => 6); + /* Описываем колонки таблицы данных */ + PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG, + SNAME => 'NRN', + SCAPTION => 'Рег. номер', + SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_NUMB, + BVISIBLE => false); + PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG, + SNAME => 'SSTATUS', + SCAPTION => 'Статус', + SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_STR, + BVISIBLE => false); + PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG, + SNAME => 'SPROD_ORDER', + SCAPTION => 'Заказ', + SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_STR, + BVISIBLE => true, + BORDER => true, + SHINT => 'Содержит ссылку на связанные сдаточные накладные.', + NWIDTH => 100); + PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG, + SNAME => 'SMATRES_CODE', + SCAPTION => 'Обозначение', + SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_STR, + BVISIBLE => true, + BORDER => true, + SHINT => 'Содержит ссылку на связанные маршрутные листы.

' || + 'Цвет залики отражает следующие статусы:
' || + 'Зеленый - "Факт" равен "План";
' || + 'Голубой - "План" меньше или равно "Факт" + "Запущено";
' || + 'Желтый - предыдущие условия не выполнены и на текущую дату сумма "Количество план" = 0 или меньше "План", то "Факт" больше или равно "План". ' || + 'Иначе сумма "Количество факт" больше или равно сумме "Количество план";
' || + 'Красный - ни одно из предыдущих условий не выполнено.
', + NWIDTH => 120); + PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG, + SNAME => 'SMATRES_NAME', + SCAPTION => 'Наименование', + SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_STR, + BVISIBLE => true, + BORDER => true, + NWIDTH => 200); + PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG, + SNAME => 'NMAIN_QUANT', + SCAPTION => 'План', + SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_NUMB, + BVISIBLE => true, + NWIDTH => 80); + PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG, + SNAME => 'NREL_FACT', + SCAPTION => 'Факт', + SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_NUMB, + BVISIBLE => true, + NWIDTH => 80); + PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG, + SNAME => 'NFCROUTLST_QUANT', + SCAPTION => 'Запущено', + SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_NUMB, + BVISIBLE => true, + NWIDTH => 80); + PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG, + SNAME => 'NVALUE_BY_DAYS', + SCAPTION => 'План/факт по дням', + SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_NUMB, + BVISIBLE => true, + SHINT => 'Значения по спецификации "График сдачи":
' || + 'Черный - значение "Количество план";
' || + 'Синий - значение "Количество факт".

' || + 'Заливка серым определяет текущий день.'); + PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG, + SNAME => 'NSUM_PLAN', + SCAPTION => 'Сумма "Количество план"', + SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_NUMB, + BVISIBLE => false); + PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG, + SNAME => 'NSUM_FACT', + SCAPTION => 'Сумма "Количество факт"', + SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_NUMB, + BVISIBLE => false); + /* Считываем первый и последний день месяца */ + P_FIRST_LAST_DAY(DCALCDATE => sysdate, DBGNDATE => DDATE_FROM, DENDDATE => DDATE_TO); + /* Инициализация дней месяца */ + INIT_DAYS(RDG => RDG, DDATE_FROM => DDATE_FROM, DDATE_TO => DDATE_TO); + /* Обходим данные */ + begin + /* Добавляем подсказку совместимости */ + CSQL := PKG_SQL_BUILD.COMPATIBLE(SSQL => CSQL); + /* Формируем запрос */ + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => 'select *'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' from (select D.*,'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => PKG_SQL_BUILD.SQLROWNUM() || ' NROW'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' from (select T.RN NRN,'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' (select PORD.NUMB from FACEACC PORD where (PORD.RN = T.PROD_ORDER)) SPROD_ORDER,'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' MRES.CODE SMATRES_CODE,'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' MRES."NAME" SMATRES_NAME,'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' T.MAIN_QUANT NMAIN_QUANT,'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' T.REL_FACT NREL_FACT,'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' (select COALESCE(sum(F.QUANT), ' || PKG_SQL_BUILD.WRAP_NUM(NVALUE => 0) || ')'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' from DOCLINKS DL,'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' DOCLINKS L,'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' FCROUTLST F'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' where DL.OUT_DOCUMENT = T.RN'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' and DL.IN_UNITCODE = ' || PKG_SQL_BUILD.WRAP_STR(SVALUE => 'CostProductPlansSpecs')); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' and DL.OUT_UNITCODE = ' || PKG_SQL_BUILD.WRAP_STR(SVALUE => 'CostProductPlansSpecs')); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' and L.IN_DOCUMENT = DL.IN_DOCUMENT'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' and L.IN_UNITCODE = ' || PKG_SQL_BUILD.WRAP_STR(SVALUE => 'CostProductPlansSpecs')); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' and L.OUT_UNITCODE = ' || PKG_SQL_BUILD.WRAP_STR(SVALUE => 'CostRouteLists')); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' and F.RN = L.OUT_DOCUMENT'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' and F.STATE = ' || PKG_SQL_BUILD.WRAP_NUM(NVALUE => 1) || ') NFCROUTLST_QUANT'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' from FCPRODPLAN P,'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' FCPRODPLANSP T,'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' FCMATRESOURCE MRES'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' where P.RN = :NFCPRODPLAN'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' and P.COMPANY = :NCOMPANY'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' and T.PRN = P.RN'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' and T.MATRES = MRES.RN'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' and exists (select ' || PKG_SQL_BUILD.SET_HINT(SHINT => 'INDEX(UP I_USERPRIV_CATALOG_ROLEID)') || ' null'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' from USERPRIV UP'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' where UP."CATALOG" = T.CRN'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' and UP.ROLEID in (select ' || PKG_SQL_BUILD.SET_HINT(SHINT => 'INDEX(UR I_USERROLES_AUTHID_FK)') || ' UR.ROLEID'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' from USERROLES UR'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' where UR.AUTHID = UTILIZER())'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' union all'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' select ' || PKG_SQL_BUILD.SET_HINT(SHINT => 'INDEX(UP I_USERPRIV_CATALOG_AUTHID)') || ' null'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' from USERPRIV UP'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' where UP."CATALOG" = T.CRN'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' and UP.AUTHID = UTILIZER())'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' and exists (select ' || PKG_SQL_BUILD.SET_HINT(SHINT => 'INDEX(UP I_USERPRIV_JUR_PERS_ROLEID)') || ' null'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' from USERPRIV UP'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' where UP.JUR_PERS = T.JUR_PERS'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' and UP.UNITCODE = ' || PKG_SQL_BUILD.WRAP_STR(SVALUE => 'CostProductPlans')); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' and UP.ROLEID in (select ' || PKG_SQL_BUILD.SET_HINT(SHINT => 'INDEX(UR I_USERROLES_AUTHID_FK)') || ' UR.ROLEID'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' from USERROLES UR'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' where UR.AUTHID = UTILIZER())'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' union all'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' select ' || PKG_SQL_BUILD.SET_HINT(SHINT => 'INDEX(UP I_USERPRIV_JUR_PERS_AUTHID)') || ' null'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' from USERPRIV UP'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' where UP.JUR_PERS = T.JUR_PERS'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' and UP.UNITCODE = ' || PKG_SQL_BUILD.WRAP_STR(SVALUE => 'CostProductPlans')); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' and UP.AUTHID = UTILIZER())'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' %ORDER_BY%) D) F'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' where F.NROW between :NROW_FROM and :NROW_TO'); + /* Учтём сортировки */ + PKG_P8PANELS_VISUAL.TORDERS_SET_QUERY(RDATA_GRID => RDG, RORDERS => RO, SPATTERN => '%ORDER_BY%', CSQL => CSQL); + /* Разбираем его */ + ICURSOR := PKG_SQL_DML.OPEN_CURSOR(SWHAT => 'SELECT'); + PKG_SQL_DML.PARSE(ICURSOR => ICURSOR, SQUERY => CSQL); + /* Делаем подстановку параметров */ + PKG_SQL_DML.BIND_VARIABLE_NUM(ICURSOR => ICURSOR, SNAME => 'NCOMPANY', NVALUE => NCOMPANY); + PKG_SQL_DML.BIND_VARIABLE_NUM(ICURSOR => ICURSOR, SNAME => 'NROW_FROM', NVALUE => NROW_FROM); + PKG_SQL_DML.BIND_VARIABLE_NUM(ICURSOR => ICURSOR, SNAME => 'NROW_TO', NVALUE => NROW_TO); + PKG_SQL_DML.BIND_VARIABLE_NUM(ICURSOR => ICURSOR, SNAME => 'NFCPRODPLAN', NVALUE => NFCPRODPLAN); + /* Описываем структуру записи курсора */ + PKG_SQL_DML.DEFINE_COLUMN_NUM(ICURSOR => ICURSOR, IPOSITION => 1); + PKG_SQL_DML.DEFINE_COLUMN_STR(ICURSOR => ICURSOR, IPOSITION => 2); + PKG_SQL_DML.DEFINE_COLUMN_STR(ICURSOR => ICURSOR, IPOSITION => 3); + PKG_SQL_DML.DEFINE_COLUMN_STR(ICURSOR => ICURSOR, IPOSITION => 4); + PKG_SQL_DML.DEFINE_COLUMN_NUM(ICURSOR => ICURSOR, IPOSITION => 5); + PKG_SQL_DML.DEFINE_COLUMN_NUM(ICURSOR => ICURSOR, IPOSITION => 6); + PKG_SQL_DML.DEFINE_COLUMN_NUM(ICURSOR => ICURSOR, IPOSITION => 7); + PKG_SQL_DML.DEFINE_COLUMN_NUM(ICURSOR => ICURSOR, IPOSITION => 8); + /* Делаем выборку */ + if (PKG_SQL_DML.EXECUTE(ICURSOR => ICURSOR) = 0) then + null; + end if; + /* Обходим выбранные записи */ + while (PKG_SQL_DML.FETCH_ROWS(ICURSOR => ICURSOR) > 0) + loop + /* Читаем данные из курсора */ + PKG_SQL_DML.COLUMN_VALUE_NUM(ICURSOR => ICURSOR, IPOSITION => 1, NVALUE => NFCPRODPLANSP); + /* Добавляем колонку с рег. номером */ + PKG_P8PANELS_VISUAL.TROW_ADD_COL(RROW => RDG_ROW, SNAME => 'NRN', NVALUE => NFCPRODPLANSP, BCLEAR => true); + /* Добавляем колонки с данными */ + PKG_P8PANELS_VISUAL.TROW_ADD_CUR_COLS(RROW => RDG_ROW, + SNAME => 'SPROD_ORDER', + ICURSOR => ICURSOR, + NPOSITION => 2); + PKG_P8PANELS_VISUAL.TROW_ADD_CUR_COLS(RROW => RDG_ROW, + SNAME => 'SMATRES_CODE', + ICURSOR => ICURSOR, + NPOSITION => 3); + PKG_P8PANELS_VISUAL.TROW_ADD_CUR_COLS(RROW => RDG_ROW, + SNAME => 'SMATRES_NAME', + ICURSOR => ICURSOR, + NPOSITION => 4); + PKG_P8PANELS_VISUAL.TROW_ADD_CUR_COLN(RROW => RDG_ROW, + SNAME => 'NMAIN_QUANT', + ICURSOR => ICURSOR, + NPOSITION => 5); + PKG_P8PANELS_VISUAL.TROW_ADD_CUR_COLN(RROW => RDG_ROW, + SNAME => 'NREL_FACT', + ICURSOR => ICURSOR, + NPOSITION => 6); + PKG_P8PANELS_VISUAL.TROW_ADD_CUR_COLN(RROW => RDG_ROW, + SNAME => 'NFCROUTLST_QUANT', + ICURSOR => ICURSOR, + NPOSITION => 7); + /* Считываем рег. номер связанной спецификации из "Производственная программа" */ + NFCPRODPLANSP_MAIN := UTL_FCPRODPLANSP_MAIN_GET(NCOMPANY => NCOMPANY, NFCPRODPLANSP => NFCPRODPLANSP); + /* Если есть связанная спецификация из производственной программы */ + if (NFCPRODPLANSP_MAIN is not null) then + /* Инициализируем список маршрутных листов */ + UTL_FCROUTLST_IDENT_INIT(NFCPRODPLANSP => NFCPRODPLANSP_MAIN, NIDENT => NFCROUTLST_IDENT); + /* Считываем модификацию номенклатуры */ + NMODIF := FCPRODPLANSP_MODIF_GET(NFCPRODPLANSP => NFCPRODPLANSP_MAIN); + end if; + /* Обнуляем сумму "Количество план" и "Количество факт" по строке */ + NSUM_PLAN := 0; + NSUM_FACT := 0; + /* Добавляем значения по графику сдачи */ + for REC in (select TMP.DOC_DATE, + COALESCE(SUM(TMP.QUANT_PLAN), 0) QUANT_PLAN, + COALESCE(SUM(TMP.QUANT_FACT), 0) QUANT_FACT + from (select T.DOC_DATE, + T.QUANT_PLAN, + 0 QUANT_FACT + from FCPRODPLANDLVSH T + where T.PRN = NFCPRODPLANSP + and T.DOC_DATE >= DDATE_FROM + and T.DOC_DATE <= DDATE_TO + union + select D.WORK_DATE, + 0, + SUM(S.QUANT_FACT) + from FCROUTLST FL, + DOCLINKS DL, + INCOMEFROMDEPS D, + INCOMEFROMDEPSSPEC S + where FL.RN in (select SL.DOCUMENT + from SELECTLIST SL + where SL.IDENT = NFCROUTLST_IDENT + and SL.UNITCODE = 'CostRouteLists') + and FL.STATE = 1 + and DL.IN_DOCUMENT = FL.RN + and DL.IN_UNITCODE = 'CostRouteLists' + and DL.OUT_UNITCODE = 'IncomFromDeps' + and D.RN = DL.OUT_DOCUMENT + and D.DOC_STATE = 2 + and D.WORK_DATE >= DDATE_FROM + and D.WORK_DATE <= DDATE_TO + and S.PRN = D.RN + and S.NOMMODIF = NMODIF + group by D.WORK_DATE) TMP + group by TMP.DOC_DATE) + loop + /* Добавляем значение план/факт в соответствующую колонку */ + PKG_P8PANELS_VISUAL.TROW_ADD_COL(RROW => RDG_ROW, + SNAME => 'N_' || TO_CHAR(REC.DOC_DATE, SCOL_PATTERN_DATE) || '_PLAN_FACT', + SVALUE => TO_CHAR(REC.QUANT_PLAN) || '/' || TO_CHAR(REC.QUANT_FACT)); + /* Если это ранее текущей даты */ + if (REC.DOC_DATE <= DDATE) then + /* Добавляем к сумме по строке */ + NSUM_PLAN := NSUM_PLAN + REC.QUANT_PLAN; + NSUM_FACT := NSUM_FACT + REC.QUANT_FACT; + end if; + end loop; + /* Добавляем колонки с суммами */ + PKG_P8PANELS_VISUAL.TROW_ADD_COL(RROW => RDG_ROW, SNAME => 'NSUM_PLAN', NVALUE => NSUM_PLAN); + PKG_P8PANELS_VISUAL.TROW_ADD_COL(RROW => RDG_ROW, SNAME => 'NSUM_FACT', NVALUE => NSUM_FACT); + /* Добавляем строку в таблицу */ + PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_ROW(RDATA_GRID => RDG, RROW => RDG_ROW); + /* Очищаем отмеченные маршрутные листы */ + P_SELECTLIST_CLEAR(NIDENT => NFCROUTLST_IDENT); + end loop; + exception + when others then + PKG_SQL_DML.CLOSE_CURSOR(ICURSOR => ICURSOR); + /* Очищаем отмеченные маршрутные листы */ + P_SELECTLIST_CLEAR(NIDENT => NFCROUTLST_IDENT); + raise; + end; + /* Сериализуем описание */ + COUT := PKG_P8PANELS_VISUAL.TDATA_GRID_TO_XML(RDATA_GRID => RDG, NINCLUDE_DEF => NINCLUDE_DEF); + end FCPRODPLANSP_DEPT_DG_GET; + + /* Инициализация записей раздела "Планы и отчеты производства изделий" */ + procedure FCPRODPLAN_DEPT_INIT + ( + COUT out clob -- Список записей раздела "Планы и отчеты производства изделий" + ) + is + NCOMPANY PKG_STD.TREF := GET_SESSION_COMPANY(); -- Организация сеанса + NVERSION PKG_STD.TREF; -- Версия контрагентов + begin + /* Считываем версию контрагентов */ + FIND_VERSION_BY_COMPANY(NCOMPANY => NCOMPANY, SUNITCODE => 'AGNLIST', NVERSION => NVERSION); + /* Начинаем формирование XML */ + PKG_XFAST.PROLOGUE(ITYPE => PKG_XFAST.CONTENT_); + /* Открываем корень */ + PKG_XFAST.DOWN_NODE(SNAME => 'XDATA'); + /* Цикл по планам и отчетам производства изделий */ + for REC in (select P.RN NRN, + DT.DOCCODE || ', ' || trim(P.PREFIX) || '-' || trim(P.NUMB) || ', ' || + TO_CHAR(P.DOCDATE, 'dd.mm.yyyy') SDOC_INFO, + D.CODE as SSUBDIV, + E.CODE as SPERIOD + from FCPRODPLAN P, + FINSTATE FS, + DOCTYPES DT, + INS_DEPARTMENT D, + ENPERIOD E + where P.CATEGORY = NFCPRODPLAN_DEPT_CTGR + and P.STATUS = NFCPRODPLAN_STATUS + and P.DOCDATE >= trunc(sysdate, 'mm') + and P.SUBDIV in (select C.DEPTRN + from CLNPSPFM C, + CLNPSPFMTYPES CT + where exists (select null + from CLNPERSONS CP + where exists (select null + from AGNLIST T + where T.PERS_AUTHID = UTILIZER() + and CP.PERS_AGENT = T.RN + and T.VERSION = NVERSION) + and C.PERSRN = CP.RN + and CP.COMPANY = NCOMPANY) + and C.COMPANY = NCOMPANY + and C.BEGENG <= sysdate + and (C.ENDENG >= sysdate or C.ENDENG is null) + and C.CLNPSPFMTYPES = CT.RN + and CT.IS_PRIMARY = 1) + and FS.RN = P.TYPE + and FS.CODE = SFCPRODPLAN_TYPE + and D.RN = P.SUBDIV + and DT.RN = P.DOCTYPE + and E.RN = P.CALC_PERIOD + and exists (select /*+ INDEX(UP I_USERPRIV_JUR_PERS_ROLEID) */ + null + from USERPRIV UP + where UP.JUR_PERS = P.JUR_PERS + and UP.UNITCODE = 'CostProductPlans' + and UP.ROLEID in (select /*+ INDEX(UR I_USERROLES_AUTHID_FK) */ + UR.ROLEID + from USERROLES UR + where UR.AUTHID = UTILIZER()) + union all + select /*+ INDEX(UP I_USERPRIV_JUR_PERS_AUTHID) */ + null + from USERPRIV UP + where UP.JUR_PERS = P.JUR_PERS + and UP.UNITCODE = 'CostProductPlans' + and UP.AUTHID = UTILIZER()) + order by SDOC_INFO) + loop + /* Открываем план */ + PKG_XFAST.DOWN_NODE(SNAME => 'XFCPRODPLANS'); + /* Описываем план */ + PKG_XFAST.ATTR(SNAME => 'NRN', NVALUE => REC.NRN); + PKG_XFAST.ATTR(SNAME => 'SDOC_INFO', SVALUE => REC.SDOC_INFO); + PKG_XFAST.ATTR(SNAME => 'SSUBDIV', SVALUE => REC.SSUBDIV); + PKG_XFAST.ATTR(SNAME => 'SPERIOD', SVALUE => REC.SPERIOD); + /* Закрываем план */ + PKG_XFAST.UP(); + end loop; + /* Закрываем корень */ + PKG_XFAST.UP(); + /* Сериализуем */ + COUT := PKG_XFAST.SERIALIZE_TO_CLOB(); + /* Завершаем формирование XML */ + PKG_XFAST.EPILOGUE(); + exception + when others then + /* Завершаем формирование XML */ + PKG_XFAST.EPILOGUE(); + /* Вернем ошибку */ + PKG_STATE.DIAGNOSTICS_STACKED(); + P_EXCEPTION(0, PKG_STATE.SQL_ERRM()); + end FCPRODPLAN_DEPT_INIT; + + /* + Процедуры панели "Выдача сменного задания" + */ + + /* Добавление записи маршрутного листа в селектлисте */ + procedure SELECTLIST_FCROUTLST_ADD + ( + NIDENT in number, -- Идентификатор селектлиста + NFCROUTLST in number -- Рег. номер маршрутного листа + ) + is + NRN PKG_STD.TSTRING; -- Рег. номер записи в селектлисте + begin + /* Считываем запись в селеклисте */ + NRN := UTL_SELECTLIST_RN_GET(NIDENT => NIDENT, + NFCROUTLST => NFCROUTLST, + SUNITCODE => 'CostRouteLists', + SACTIONCODE => 'P8PanelsJobManage'); + /* Если запись не найдена */ + if (NRN is null) then + /* Добавляем запись в селектлист */ + P_SELECTLIST_BASE_INSERT(NIDENT => NIDENT, + NCOMPANY => null, + NDOCUMENT => NFCROUTLST, + SUNITCODE => 'CostRouteLists', + SACTIONCODE => 'P8PanelsJobManage', + NCRN => null, + NDOCUMENT1 => null, + SUNITCODE1 => null, + SACTIONCODE1 => null, + NRN => NRN); + end if; + end SELECTLIST_FCROUTLST_ADD; + + /* Удаление записи маршрутного листа из селектлиста */ + procedure SELECTLIST_FCROUTLST_DEL + ( + NIDENT in number, -- Идентификатор селектлиста + NFCROUTLST in number -- Рег. номер маршрутного листа + ) + is + NRN PKG_STD.TSTRING; -- Рег. номер записи в селектлисте + begin + /* Считываем запись в селеклисте */ + NRN := UTL_SELECTLIST_RN_GET(NIDENT => NIDENT, + NFCROUTLST => NFCROUTLST, + SUNITCODE => 'CostRouteLists', + SACTIONCODE => 'P8PanelsJobManage'); + /* Если запись найдена */ + if (NRN is not null) then + /* Удаляем запись из селектлиста */ + P_SELECTLIST_BASE_DELETE(NRN => NRN); + end if; + end SELECTLIST_FCROUTLST_DEL; + + /* Выдать задание операции сменного задания */ + procedure FCJOBSSP_ISSUE + ( + NFCJOBS in number, -- Рег. номер сменного задания + SFCJOBSSP_LIST in varchar2 -- Список операций сменного задания + ) + is + NCOMPANY PKG_STD.TREF := GET_SESSION_COMPANY(); -- Организация сеанса + begin + /* Если список операций не указан */ + if (SFCJOBSSP_LIST is null) then + P_EXCEPTION(0, 'Список операций не определен.'); + end if; + /* Цикл по операциям сменного задания */ + for REC in (select T.* + from FCJOBSSP T + where T.PRN = NFCJOBS + and T.COMPANY = NCOMPANY + and T.RN in (select REGEXP_SUBSTR(SFCJOBSSP_LIST, '[^;]+', 1, level) NRN + from DUAL + connect by INSTR(SFCJOBSSP_LIST, ';', 1, level - 1) > 0) + and T.BEG_FACT is null) + loop + /* Исключаем оборудование */ + P_FCJOBSSP_BASE_UPDATE(NRN => REC.RN, + NCOMPANY => REC.COMPANY, + SNUMB => REC.NUMB, + NTBOPERMODESP => REC.TBOPERMODESP, + SBARCODE => REC.BARCODE, + NFACEACC => REC.FACEACC, + NMATRES => REC.MATRES, + NNOMCLASSIF => REC.NOMCLASSIF, + NARTICLE => REC.ARTICLE, + NFCROUTSHTSP => REC.FCROUTSHTSP, + SOPER_NUMB => REC.OPER_NUMB, + NOPER_TPS => REC.OPER_TPS, + SOPER_UK => REC.OPER_UK, + NSIGN_CONTRL => REC.SIGN_CONTRL, + NMANPOWER => REC.MANPOWER, + NCATEGORY => REC.CATEGORY, + DBEG_PLAN => REC.BEG_PLAN, + DEND_PLAN => REC.END_PLAN, + DBEG_FACT => REC.BEG_FACT, + DEND_FACT => REC.END_FACT, + NQUANT_PLAN => REC.QUANT_PLAN, + NQUANT_FACT => REC.QUANT_FACT, + NNORM => REC.NORM, + NT_SHT_FACT => REC.T_SHT_FACT, + NT_PZ_PLAN => REC.T_PZ_PLAN, + NT_PZ_FACT => REC.T_PZ_FACT, + NT_VSP_PLAN => REC.T_VSP_PLAN, + NT_VSP_FACT => REC.T_VSP_FACT, + NT_O_PLAN => REC.T_O_PLAN, + NT_O_FACT => REC.T_O_FACT, + NNORM_TYPE => REC.NORM_TYPE, + NSIGN_P_R => REC.SIGN_P_R, + NLABOUR_PLAN => REC.LABOUR_PLAN, + NLABOUR_FACT => REC.LABOUR_FACT, + NCOST_PLAN => REC.COST_PLAN, + NCOST_FACT => REC.COST_FACT, + NCOST_FOR => REC.COST_FOR, + NCURNAMES => REC.CURNAMES, + NPERFORM_PLAN => REC.PERFORM_PLAN, + NPERFORM_FACT => REC.PERFORM_FACT, + NSTAFFGRP_PLAN => REC.STAFFGRP_PLAN, + NSTAFFGRP_FACT => REC.STAFFGRP_FACT, + NEQUIP_PLAN => REC.EQUIP_PLAN, + NEQUIP_FACT => REC.EQUIP_PLAN, + NLOSTTYPE => REC.LOSTTYPE, + NLOSTDEFL => REC.LOSTDEFL, + NFOREMAN => REC.FOREMAN, + NINSPECTOR => REC.INSPECTOR, + DOTK_DATE => REC.OTK_DATE, + NSUBDIV => REC.SUBDIV, + NEQCONFIG => REC.EQCONFIG, + SNOTE => REC.NOTE, + NMUNIT => REC.MUNIT); + end loop; + end FCJOBSSP_ISSUE; + + /* Исключение оборудования из операции сменного задания */ + procedure FCJOBSSP_EXC_FCEQUIPMENT + ( + NFCEQUIPMENT in number, -- Рег. номер оборудования + NFCJOBS in number, -- Рег. номер сменного задания + SFCJOBSSP_LIST in varchar2 -- Список операций сменного задания + ) + is + NCOMPANY PKG_STD.TREF := GET_SESSION_COMPANY(); -- Организация сеанса + begin + /* Если оборудование выбрано */ + if (NFCEQUIPMENT is not null) then + /* Проверяем наличие оборудования */ + UTL_FCEQUIPMENT_EXISTS(NFCEQUIPMENT => NFCEQUIPMENT, NCOMPANY => NCOMPANY); + else + P_EXCEPTION(0, 'Оборудование не определено.'); + end if; + /* Если список операций не указан */ + if (SFCJOBSSP_LIST is null) then + P_EXCEPTION(0, 'Список операций не определен.'); + end if; + /* Цикл по операциям сменного задания */ + for REC in (select T.* + from FCJOBSSP T + where T.PRN = NFCJOBS + and T.COMPANY = NCOMPANY + and T.RN in (select REGEXP_SUBSTR(SFCJOBSSP_LIST, '[^;]+', 1, level) NRN + from DUAL + connect by INSTR(SFCJOBSSP_LIST, ';', 1, level - 1) > 0) + and T.EQUIP_PLAN = NFCEQUIPMENT) + loop + /* Если дата начала факт указана */ + if (REC.BEG_FACT is not null) then + P_EXCEPTION(0, 'Операция "%s" исполняется.', REC.OPER_NUMB); + end if; + /* Исключаем оборудование */ + P_FCJOBSSP_BASE_UPDATE(NRN => REC.RN, + NCOMPANY => REC.COMPANY, + SNUMB => REC.NUMB, + NTBOPERMODESP => REC.TBOPERMODESP, + SBARCODE => REC.BARCODE, + NFACEACC => REC.FACEACC, + NMATRES => REC.MATRES, + NNOMCLASSIF => REC.NOMCLASSIF, + NARTICLE => REC.ARTICLE, + NFCROUTSHTSP => REC.FCROUTSHTSP, + SOPER_NUMB => REC.OPER_NUMB, + NOPER_TPS => REC.OPER_TPS, + SOPER_UK => REC.OPER_UK, + NSIGN_CONTRL => REC.SIGN_CONTRL, + NMANPOWER => REC.MANPOWER, + NCATEGORY => REC.CATEGORY, + DBEG_PLAN => REC.BEG_PLAN, + DEND_PLAN => REC.END_PLAN, + DBEG_FACT => REC.BEG_FACT, + DEND_FACT => REC.END_FACT, + NQUANT_PLAN => REC.QUANT_PLAN, + NQUANT_FACT => REC.QUANT_FACT, + NNORM => REC.NORM, + NT_SHT_FACT => REC.T_SHT_FACT, + NT_PZ_PLAN => REC.T_PZ_PLAN, + NT_PZ_FACT => REC.T_PZ_FACT, + NT_VSP_PLAN => REC.T_VSP_PLAN, + NT_VSP_FACT => REC.T_VSP_FACT, + NT_O_PLAN => REC.T_O_PLAN, + NT_O_FACT => REC.T_O_FACT, + NNORM_TYPE => REC.NORM_TYPE, + NSIGN_P_R => REC.SIGN_P_R, + NLABOUR_PLAN => REC.LABOUR_PLAN, + NLABOUR_FACT => REC.LABOUR_FACT, + NCOST_PLAN => REC.COST_PLAN, + NCOST_FACT => REC.COST_FACT, + NCOST_FOR => REC.COST_FOR, + NCURNAMES => REC.CURNAMES, + NPERFORM_PLAN => REC.PERFORM_PLAN, + NPERFORM_FACT => REC.PERFORM_FACT, + NSTAFFGRP_PLAN => REC.STAFFGRP_PLAN, + NSTAFFGRP_FACT => REC.STAFFGRP_FACT, + NEQUIP_PLAN => null, + NEQUIP_FACT => REC.EQUIP_FACT, + NLOSTTYPE => REC.LOSTTYPE, + NLOSTDEFL => REC.LOSTDEFL, + NFOREMAN => REC.FOREMAN, + NINSPECTOR => REC.INSPECTOR, + DOTK_DATE => REC.OTK_DATE, + NSUBDIV => REC.SUBDIV, + NEQCONFIG => REC.EQCONFIG, + SNOTE => REC.NOTE, + NMUNIT => REC.MUNIT); + end loop; + end FCJOBSSP_EXC_FCEQUIPMENT; + + /* Включение оборудование в строку сменного задания */ + procedure FCJOBSSP_INC_FCEQUIPMENT + ( + NFCEQUIPMENT in number, -- Рег. номер оборудования + NFCJOBS in number, -- Рег. номер сменного задания + SFCJOBSSP_LIST in varchar2 -- Список операций сменного задания + ) + is + NCOMPANY PKG_STD.TREF := GET_SESSION_COMPANY(); -- Организация сеанса + begin + /* Если оборудование выбрано */ + if (NFCEQUIPMENT is not null) then + /* Проверяем наличие оборудования */ + UTL_FCEQUIPMENT_EXISTS(NFCEQUIPMENT => NFCEQUIPMENT, NCOMPANY => NCOMPANY); + else + P_EXCEPTION(0, 'Оборудование не определено.'); + end if; + /* Если список операций не указан */ + if (SFCJOBSSP_LIST is null) then + P_EXCEPTION(0, 'Список операций не определен.'); + end if; + /* Цикл по операциям сменного задания */ + for REC in (select T.* + from FCJOBSSP T + where T.PRN = NFCJOBS + and T.COMPANY = NCOMPANY + and T.RN in (select REGEXP_SUBSTR(SFCJOBSSP_LIST, '[^;]+', 1, level) NRN + from DUAL + connect by INSTR(SFCJOBSSP_LIST, ';', 1, level - 1) > 0)) + loop + /* Если дата начала факт указана */ + if (REC.BEG_FACT is not null) then + P_EXCEPTION(0, 'Операция "%s" исполняется.', REC.OPER_NUMB); + end if; + /* Включаем в задание */ + P_FCJOBSSP_BASE_UPDATE(NRN => REC.RN, + NCOMPANY => REC.COMPANY, + SNUMB => REC.NUMB, + NTBOPERMODESP => REC.TBOPERMODESP, + SBARCODE => REC.BARCODE, + NFACEACC => REC.FACEACC, + NMATRES => REC.MATRES, + NNOMCLASSIF => REC.NOMCLASSIF, + NARTICLE => REC.ARTICLE, + NFCROUTSHTSP => REC.FCROUTSHTSP, + SOPER_NUMB => REC.OPER_NUMB, + NOPER_TPS => REC.OPER_TPS, + SOPER_UK => REC.OPER_UK, + NSIGN_CONTRL => REC.SIGN_CONTRL, + NMANPOWER => REC.MANPOWER, + NCATEGORY => REC.CATEGORY, + DBEG_PLAN => REC.BEG_PLAN, + DEND_PLAN => REC.END_PLAN, + DBEG_FACT => REC.BEG_FACT, + DEND_FACT => REC.END_FACT, + NQUANT_PLAN => REC.QUANT_PLAN, + NQUANT_FACT => REC.QUANT_FACT, + NNORM => REC.NORM, + NT_SHT_FACT => REC.T_SHT_FACT, + NT_PZ_PLAN => REC.T_PZ_PLAN, + NT_PZ_FACT => REC.T_PZ_FACT, + NT_VSP_PLAN => REC.T_VSP_PLAN, + NT_VSP_FACT => REC.T_VSP_FACT, + NT_O_PLAN => REC.T_O_PLAN, + NT_O_FACT => REC.T_O_FACT, + NNORM_TYPE => REC.NORM_TYPE, + NSIGN_P_R => REC.SIGN_P_R, + NLABOUR_PLAN => REC.LABOUR_PLAN, + NLABOUR_FACT => REC.LABOUR_FACT, + NCOST_PLAN => REC.COST_PLAN, + NCOST_FACT => REC.COST_FACT, + NCOST_FOR => REC.COST_FOR, + NCURNAMES => REC.CURNAMES, + NPERFORM_PLAN => REC.PERFORM_PLAN, + NPERFORM_FACT => REC.PERFORM_FACT, + NSTAFFGRP_PLAN => REC.STAFFGRP_PLAN, + NSTAFFGRP_FACT => REC.STAFFGRP_FACT, + NEQUIP_PLAN => NFCEQUIPMENT, + NEQUIP_FACT => REC.EQUIP_FACT, + NLOSTTYPE => REC.LOSTTYPE, + NLOSTDEFL => REC.LOSTDEFL, + NFOREMAN => REC.FOREMAN, + NINSPECTOR => REC.INSPECTOR, + DOTK_DATE => REC.OTK_DATE, + NSUBDIV => REC.SUBDIV, + NEQCONFIG => REC.EQCONFIG, + SNOTE => REC.NOTE, + NMUNIT => REC.MUNIT); + end loop; + end FCJOBSSP_INC_FCEQUIPMENT; + + /* Получение таблицы оборудования подразделения */ + procedure FCEQUIPMENT_DG_GET + ( + NPAGE_NUMBER in number, -- Номер страницы (игнорируется при NPAGE_SIZE=0) + NPAGE_SIZE in number, -- Количество записей на странице (0 - все) + CORDERS in clob, -- Сортировки + NINCLUDE_DEF in number, -- Признак включения описания колонок таблицы в ответ + COUT out clob -- Сериализованная таблица данных + ) + is + NCOMPANY PKG_STD.TREF := GET_SESSION_COMPANY(); -- Организация сеанса + RO PKG_P8PANELS_VISUAL.TORDERS; -- Сортировки + RDG PKG_P8PANELS_VISUAL.TDATA_GRID; -- Описание таблицы + RDG_ROW PKG_P8PANELS_VISUAL.TROW; -- Строка таблицы + NROW_FROM PKG_STD.TREF; -- Номер строки с + NROW_TO PKG_STD.TREF; -- Номер строки по + CSQL clob; -- Буфер для запроса + ICURSOR integer; -- Курсор для исполнения запроса + NVERSION PKG_STD.TREF; -- Версия контрагентов + begin + /* Считываем версию контрагентов */ + FIND_VERSION_BY_COMPANY(NCOMPANY => NCOMPANY, SUNITCODE => 'AGNLIST', NVERSION => NVERSION); + /* Читем сортировки */ + RO := PKG_P8PANELS_VISUAL.TORDERS_FROM_XML(CORDERS => CORDERS); + /* Преобразуем номер и размер страницы в номер строк с и по */ + PKG_P8PANELS_VISUAL.UTL_ROWS_LIMITS_CALC(NPAGE_NUMBER => NPAGE_NUMBER, + NPAGE_SIZE => NPAGE_SIZE, + NROW_FROM => NROW_FROM, + NROW_TO => NROW_TO); + /* Инициализируем таблицу данных */ + RDG := PKG_P8PANELS_VISUAL.TDATA_GRID_MAKE(); + /* Описываем колонки таблицы данных */ + PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG, + SNAME => 'NRN', + SCAPTION => 'Рег. номер', + SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_NUMB, + BVISIBLE => false); + PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG, + SNAME => 'NSELECT', + SCAPTION => 'Выбран', + SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_NUMB, + BVISIBLE => true); + PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG, + SNAME => 'SCODE', + SCAPTION => 'Код', + SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_STR, + BVISIBLE => true); + PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG, + SNAME => 'SNAME', + SCAPTION => 'Наименование', + SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_STR, + BVISIBLE => true, + BORDER => true); + PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG, + SNAME => 'NLOADING', + SCAPTION => 'Загрузка', + SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_NUMB, + BVISIBLE => true, + BORDER => true); + PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG, + SNAME => 'NCOEFF', + SCAPTION => 'Норматив загрузки', + SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_NUMB, + BVISIBLE => false); + /* Обходим данные */ + begin + /* Добавляем подсказку совместимости */ + CSQL := PKG_SQL_BUILD.COMPATIBLE(SSQL => CSQL); + /* Формируем запрос */ + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => 'select *'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' from (select D.*,'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => PKG_SQL_BUILD.SQLROWNUM() || ' NROW'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' from (select T.RN NRN,'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' T.CODE SCODE,'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' T.NAME SNAME,'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' (select SUM(case'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' when S.MUNIT is not null then'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' ROUND(F_DICMUNTS_BASE_RECALC_QUANT(' || PKG_SQL_BUILD.WRAP_NUM(NVALUE => 0) || ','); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' :NCOMPANY,'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' S.MUNIT,'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' S.LABOUR_PLAN,'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' F.TIME_MUNIT), 3)'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' else'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' ' || PKG_SQL_BUILD.WRAP_NUM(NVALUE => 0)); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' end)'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' from FCEQUIPMENT F'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' left outer join FCJOBSSP S on S.EQUIP_PLAN = F.RN and S.WORK_DATE is null'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' left outer join FCJOBS J on J.RN = S.PRN and F.SUBDIV = J.SUBDIV'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' where F.RN = T.RN) NLOADING,'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' T.COEFF NCOEFF'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' from FCEQUIPMENT T'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' where T.COMPANY = :NCOMPANY'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' and T.SUBDIV is not null'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' and PKG_P8PANELS_MECHREC.UTL_SUBDIV_CHECK(T.COMPANY, T.SUBDIV, UTILIZER()) = ' || PKG_SQL_BUILD.WRAP_NUM(NVALUE => 1)); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' and exists (select null from V_USERPRIV UP where UP."CATALOG" = T.CRN)'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' %ORDER_BY%) D) F'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' where F.NROW between :NROW_FROM and :NROW_TO'); + /* Учтём сортировки */ + PKG_P8PANELS_VISUAL.TORDERS_SET_QUERY(RDATA_GRID => RDG, RORDERS => RO, SPATTERN => '%ORDER_BY%', CSQL => CSQL); + /* Разбираем его */ + ICURSOR := PKG_SQL_DML.OPEN_CURSOR(SWHAT => 'SELECT'); + PKG_SQL_DML.PARSE(ICURSOR => ICURSOR, SQUERY => CSQL); + /* Делаем подстановку параметров */ + PKG_SQL_DML.BIND_VARIABLE_NUM(ICURSOR => ICURSOR, SNAME => 'NCOMPANY', NVALUE => NCOMPANY); + PKG_SQL_DML.BIND_VARIABLE_NUM(ICURSOR => ICURSOR, SNAME => 'NROW_FROM', NVALUE => NROW_FROM); + PKG_SQL_DML.BIND_VARIABLE_NUM(ICURSOR => ICURSOR, SNAME => 'NROW_TO', NVALUE => NROW_TO); + /*PKG_SQL_DML.BIND_VARIABLE_NUM(ICURSOR => ICURSOR, SNAME => 'NVERSION', NVALUE => NVERSION); + PKG_SQL_DML.BIND_VARIABLE_DATE(ICURSOR => ICURSOR, SNAME => 'DDATE', DVALUE => sysdate);*/ + /* Описываем структуру записи курсора */ + PKG_SQL_DML.DEFINE_COLUMN_NUM(ICURSOR => ICURSOR, IPOSITION => 1); + PKG_SQL_DML.DEFINE_COLUMN_STR(ICURSOR => ICURSOR, IPOSITION => 2); + PKG_SQL_DML.DEFINE_COLUMN_STR(ICURSOR => ICURSOR, IPOSITION => 3); + PKG_SQL_DML.DEFINE_COLUMN_NUM(ICURSOR => ICURSOR, IPOSITION => 4); + PKG_SQL_DML.DEFINE_COLUMN_NUM(ICURSOR => ICURSOR, IPOSITION => 5); + PKG_SQL_DML.DEFINE_COLUMN_NUM(ICURSOR => ICURSOR, IPOSITION => 6); + /* Делаем выборку */ + if (PKG_SQL_DML.EXECUTE(ICURSOR => ICURSOR) = 0) then + null; + end if; + /* Обходим выбранные записи */ + while (PKG_SQL_DML.FETCH_ROWS(ICURSOR => ICURSOR) > 0) + loop + /* Добавляем колонки с данными */ + PKG_P8PANELS_VISUAL.TROW_ADD_CUR_COLN(RROW => RDG_ROW, + SNAME => 'NRN', + ICURSOR => ICURSOR, + NPOSITION => 1, + BCLEAR => true); + PKG_P8PANELS_VISUAL.TROW_ADD_COL(RROW => RDG_ROW, SNAME => 'NSELECT', NVALUE => 0); + PKG_P8PANELS_VISUAL.TROW_ADD_CUR_COLS(RROW => RDG_ROW, + SNAME => 'SCODE', + ICURSOR => ICURSOR, + NPOSITION => 2); + PKG_P8PANELS_VISUAL.TROW_ADD_CUR_COLS(RROW => RDG_ROW, + SNAME => 'SNAME', + ICURSOR => ICURSOR, + NPOSITION => 3); + PKG_P8PANELS_VISUAL.TROW_ADD_CUR_COLN(RROW => RDG_ROW, + SNAME => 'NLOADING', + ICURSOR => ICURSOR, + NPOSITION => 4); + PKG_P8PANELS_VISUAL.TROW_ADD_CUR_COLN(RROW => RDG_ROW, + SNAME => 'NCOEFF', + ICURSOR => ICURSOR, + NPOSITION => 5); + /* Добавляем строку в таблицу */ + PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_ROW(RDATA_GRID => RDG, RROW => RDG_ROW); + end loop; + exception + when others then + PKG_SQL_DML.CLOSE_CURSOR(ICURSOR => ICURSOR); + raise; + end; + /* Сериализуем описание */ + COUT := PKG_P8PANELS_VISUAL.TDATA_GRID_TO_XML(RDATA_GRID => RDG, NINCLUDE_DEF => NINCLUDE_DEF); + end FCEQUIPMENT_DG_GET; + + /* Получение таблицы маршрутных листов спецификации сменного задания */ + procedure FCJOBSSP_FCROUTLST_DG_GET + ( + NFCJOBS in number, -- Рег. номер сменного задания + NPAGE_NUMBER in number, -- Номер страницы (игнорируется при NPAGE_SIZE=0) + NPAGE_SIZE in number, -- Количество записей на странице (0 - все) + CORDERS in clob, -- Сортировки + NINCLUDE_DEF in number, -- Признак включения описания колонок таблицы в ответ + COUT out clob -- Сериализованная таблица данных + ) + is + NCOMPANY PKG_STD.TREF := GET_SESSION_COMPANY(); -- Организация сеанса + RO PKG_P8PANELS_VISUAL.TORDERS; -- Сортировки + RDG PKG_P8PANELS_VISUAL.TDATA_GRID; -- Описание таблицы + RDG_ROW PKG_P8PANELS_VISUAL.TROW; -- Строка таблицы + NROW_FROM PKG_STD.TREF; -- Номер строки с + NROW_TO PKG_STD.TREF; -- Номер строки по + CSQL clob; -- Буфер для запроса + ICURSOR integer; -- Курсор для исполнения запроса + begin + /* Читем сортировки */ + RO := PKG_P8PANELS_VISUAL.TORDERS_FROM_XML(CORDERS => CORDERS); + /* Преобразуем номер и размер страницы в номер строк с и по */ + PKG_P8PANELS_VISUAL.UTL_ROWS_LIMITS_CALC(NPAGE_NUMBER => NPAGE_NUMBER, + NPAGE_SIZE => NPAGE_SIZE, + NROW_FROM => NROW_FROM, + NROW_TO => NROW_TO); + /* Инициализируем таблицу данных */ + RDG := PKG_P8PANELS_VISUAL.TDATA_GRID_MAKE(); + /* Описываем колонки таблицы данных */ + PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG, + SNAME => 'NRN', + SCAPTION => 'Рег. номер', + SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_NUMB, + BVISIBLE => false); + PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG, + SNAME => 'NSELECT', + SCAPTION => 'Выбран', + SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_NUMB, + BVISIBLE => true); + PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG, + SNAME => 'SFCROUTLST_INFO', + SCAPTION => 'Номер МЛ', + SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_STR, + BVISIBLE => true); + PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG, + SNAME => 'SMATRES', + SCAPTION => 'Материальный ресурс', + SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_STR, + BVISIBLE => true, + BORDER => true); + PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG, + SNAME => 'NPRIOR_ORDER', + SCAPTION => 'Приоритет', + SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_NUMB, + BVISIBLE => true, + BORDER => true); + /* Обходим данные */ + begin + /* Добавляем подсказку совместимости */ + CSQL := PKG_SQL_BUILD.COMPATIBLE(SSQL => CSQL); + /* Формируем запрос */ + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => 'select *'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' from (select D.*,'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => PKG_SQL_BUILD.SQLROWNUM() || ' NROW'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' from (select F.RN NRN,'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' PKG_DOCUMENT.MAKE_NUMBER(F.DOCTYPE, F.DOCPREF, F.DOCNUMB, F.DOCDATE) SFCROUTLST_INFO,'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' F2.CODE || '', '' || F2.NAME SMATRES,'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' F.PRIOR_ORDER NPRIOR_ORDER'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' from FCROUTLST F,'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' FCMATRESOURCE F2'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' where F.RN in (select FL.RN'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' from FCJOBSSP JS,'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' FCROUTLST FL,'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' FCROUTLSTSP SP'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' where JS.PRN = :NFCJOBS'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' and JS.COMPANY = :NCOMPANY'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' and SP.RN = (select ' || PKG_SQL_BUILD.SET_HINT(SHINT => 'INDEX(L I_DOCLINKS_OUT_DOCUMENT)') || ' MAX(L.IN_DOCUMENT)'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' from DOCLINKS L'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' where L.OUT_DOCUMENT = JS.RN'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' and L.OUT_UNITCODE = ' || PKG_SQL_BUILD.WRAP_STR(SVALUE => 'CostJobsSpecs')); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' and L.IN_UNITCODE = ' || PKG_SQL_BUILD.WRAP_STR(SVALUE => 'CostRouteListsSpecs') || ')'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' and SP.STATE = ' || PKG_SQL_BUILD.WRAP_NUM(NVALUE => 0)); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' and PKG_P8PANELS_MECHREC.UTL_SUBDIV_CHECK(SP.COMPANY, SP.SUBDIV, UTILIZER()) = ' || PKG_SQL_BUILD.WRAP_NUM(NVALUE => 1)); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' and FL.RN = SP.PRN'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' and exists (select null from V_USERPRIV UP where UP."CATALOG" = JS.CRN)'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' and exists (select null from V_USERPRIV UP where UP.JUR_PERS = JS.JUR_PERS and UP.UNITCODE = ' || PKG_SQL_BUILD.WRAP_STR(SVALUE => 'CostJobs') || ') '); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' group by FL.RN)'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' and F2.RN = F.MATRES'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' %ORDER_BY%) D) F'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' where F.NROW between :NROW_FROM and :NROW_TO'); + /* Учтём сортировки */ + PKG_P8PANELS_VISUAL.TORDERS_SET_QUERY(RDATA_GRID => RDG, RORDERS => RO, SPATTERN => '%ORDER_BY%', CSQL => CSQL); + /* Разбираем его */ + ICURSOR := PKG_SQL_DML.OPEN_CURSOR(SWHAT => 'SELECT'); + PKG_SQL_DML.PARSE(ICURSOR => ICURSOR, SQUERY => CSQL); + /* Делаем подстановку параметров */ + PKG_SQL_DML.BIND_VARIABLE_NUM(ICURSOR => ICURSOR, SNAME => 'NCOMPANY', NVALUE => NCOMPANY); + PKG_SQL_DML.BIND_VARIABLE_NUM(ICURSOR => ICURSOR, SNAME => 'NROW_FROM', NVALUE => NROW_FROM); + PKG_SQL_DML.BIND_VARIABLE_NUM(ICURSOR => ICURSOR, SNAME => 'NROW_TO', NVALUE => NROW_TO); + PKG_SQL_DML.BIND_VARIABLE_NUM(ICURSOR => ICURSOR, SNAME => 'NFCJOBS', NVALUE => NFCJOBS); + /* Описываем структуру записи курсора */ + PKG_SQL_DML.DEFINE_COLUMN_NUM(ICURSOR => ICURSOR, IPOSITION => 1); + PKG_SQL_DML.DEFINE_COLUMN_STR(ICURSOR => ICURSOR, IPOSITION => 2); + PKG_SQL_DML.DEFINE_COLUMN_STR(ICURSOR => ICURSOR, IPOSITION => 3); + PKG_SQL_DML.DEFINE_COLUMN_NUM(ICURSOR => ICURSOR, IPOSITION => 4); + PKG_SQL_DML.DEFINE_COLUMN_NUM(ICURSOR => ICURSOR, IPOSITION => 5); + /* Делаем выборку */ + if (PKG_SQL_DML.EXECUTE(ICURSOR => ICURSOR) = 0) then + null; + end if; + /* Обходим выбранные записи */ + while (PKG_SQL_DML.FETCH_ROWS(ICURSOR => ICURSOR) > 0) + loop + /* Добавляем колонки с данными */ + PKG_P8PANELS_VISUAL.TROW_ADD_CUR_COLN(RROW => RDG_ROW, + SNAME => 'NRN', + ICURSOR => ICURSOR, + NPOSITION => 1, + BCLEAR => true); + PKG_P8PANELS_VISUAL.TROW_ADD_COL(RROW => RDG_ROW, SNAME => 'NSELECT', NVALUE => 0); + PKG_P8PANELS_VISUAL.TROW_ADD_CUR_COLS(RROW => RDG_ROW, + SNAME => 'SFCROUTLST_INFO', + ICURSOR => ICURSOR, + NPOSITION => 2); + PKG_P8PANELS_VISUAL.TROW_ADD_CUR_COLS(RROW => RDG_ROW, + SNAME => 'SMATRES', + ICURSOR => ICURSOR, + NPOSITION => 3); + PKG_P8PANELS_VISUAL.TROW_ADD_CUR_COLN(RROW => RDG_ROW, + SNAME => 'NPRIOR_ORDER', + ICURSOR => ICURSOR, + NPOSITION => 4); + /* Добавляем строку в таблицу */ + PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_ROW(RDATA_GRID => RDG, RROW => RDG_ROW); + end loop; + exception + when others then + PKG_SQL_DML.CLOSE_CURSOR(ICURSOR => ICURSOR); + raise; + end; + /* Сериализуем описание */ + COUT := PKG_P8PANELS_VISUAL.TDATA_GRID_TO_XML(RDATA_GRID => RDG, NINCLUDE_DEF => NINCLUDE_DEF); + end FCJOBSSP_FCROUTLST_DG_GET; + + /* Получение спецификации сменного задания по отмеченным маршрутным листам */ + procedure FCJOBSSP_DG_GET + ( + NFCJOBS in number, -- Рег. номер сменного задания + NIDENT in number, -- Идентификатор процесса + NPAGE_NUMBER in number, -- Номер страницы (игнорируется при NPAGE_SIZE=0) + NPAGE_SIZE in number, -- Количество записей на странице (0 - все) + CORDERS in clob, -- Сортировки + NINCLUDE_DEF in number, -- Признак включения описания колонок таблицы в ответ + COUT out clob -- Сериализованная таблица данных + ) + is + NCOMPANY PKG_STD.TREF := GET_SESSION_COMPANY(); -- Организация сеанса + RO PKG_P8PANELS_VISUAL.TORDERS; -- Сортировки + RDG PKG_P8PANELS_VISUAL.TDATA_GRID; -- Описание таблицы + RDG_ROW PKG_P8PANELS_VISUAL.TROW; -- Строка таблицы + NROW_FROM PKG_STD.TREF; -- Номер строки с + NROW_TO PKG_STD.TREF; -- Номер строки по + CSQL clob; -- Буфер для запроса + ICURSOR integer; -- Курсор для исполнения запроса + begin + /* Читем сортировки */ + RO := PKG_P8PANELS_VISUAL.TORDERS_FROM_XML(CORDERS => CORDERS); + /* Преобразуем номер и размер страницы в номер строк с и по */ + PKG_P8PANELS_VISUAL.UTL_ROWS_LIMITS_CALC(NPAGE_NUMBER => NPAGE_NUMBER, + NPAGE_SIZE => NPAGE_SIZE, + NROW_FROM => NROW_FROM, + NROW_TO => NROW_TO); + /* Инициализируем таблицу данных */ + RDG := PKG_P8PANELS_VISUAL.TDATA_GRID_MAKE(); + /* Описываем колонки таблицы данных */ + PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG, + SNAME => 'NRN', + SCAPTION => 'Рег. номер', + SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_NUMB, + BVISIBLE => false); + PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG, + SNAME => 'NSELECT', + SCAPTION => 'Выбран', + SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_NUMB, + BVISIBLE => true); + PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG, + SNAME => 'SOPER_NUMB', + SCAPTION => 'Номер операции', + SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_STR, + BVISIBLE => true); + PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG, + SNAME => 'SOPER_NAME', + SCAPTION => 'Наименование операции', + SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_STR, + BVISIBLE => true, + BORDER => true); + PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG, + SNAME => 'NISSUED', + SCAPTION => 'Выдано', + SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_NUMB, + BVISIBLE => true, + BORDER => true); + PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG, + SNAME => 'NISSUE', + SCAPTION => 'Выдать', + SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_NUMB, + BVISIBLE => true, + BORDER => true); + PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG, + SNAME => 'NEQUIP_PLAN', + SCAPTION => 'Рег. номер оборудования план', + SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_NUMB, + BVISIBLE => false, + BORDER => true); + /* Если список выбраныых маршрутных листов не пустой */ + if (NIDENT is not null) then + --if (SFCROUTLST_LIST is not null) then + /* Обходим данные */ + begin + /* Добавляем подсказку совместимости */ + CSQL := PKG_SQL_BUILD.COMPATIBLE(SSQL => CSQL); + /* Формируем запрос */ + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => 'select *'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' from (select D.*,'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => PKG_SQL_BUILD.SQLROWNUM() || ' NROW'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' from (select TMP.NRN,'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' TMP.SOPER_NUMB,'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' TMP.SOPER_NAME,'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' TMP.NISSUED,'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' TMP.NQUANT_PLAN - TMP.NQUANT_FACT - TMP.NISSUED NISSUE,'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' TMP.NEQUIP_PLAN'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' from (select ' || PKG_SQL_BUILD.SET_HINT(SHINT => 'INDEX(L I_DOCLINKS_OUT_DOCUMENT)') || ' T.RN NRN,'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' T.OPER_NUMB SOPER_NUMB,'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' (select coalesce(O.NAME, T.OPER_UK) from FCOPERTYPES O where T.OPER_TPS = O.RN) SOPER_NAME,'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' (select sum(S.QUANT_PLAN)'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' from FCJOBSSP S,'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' DOCLINKS DL'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' where S.PRN = T.PRN'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' and S.WORK_DATE is null'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' and DL.OUT_UNITCODE = ' || PKG_SQL_BUILD.WRAP_STR(SVALUE => 'CostJobsSpecs')); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' and DL.IN_UNITCODE = ' || PKG_SQL_BUILD.WRAP_STR(SVALUE => 'CostRouteLists')); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' and DL.IN_DOCUMENT = L.IN_DOCUMENT'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' and DL.OUT_DOCUMENT = S.RN) NISSUED,'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' T.QUANT_PLAN as NQUANT_PLAN,'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' T.QUANT_FACT as NQUANT_FACT,'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' T.EQUIP_PLAN as NEQUIP_PLAN'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' from FCJOBSSP T,'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' DOCLINKS L'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' where T.PRN = :NFCJOBS'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' and T.COMPANY = :NCOMPANY'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' and L.OUT_UNITCODE = ' || PKG_SQL_BUILD.WRAP_STR(SVALUE => 'CostJobsSpecs')); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' and L.IN_UNITCODE = ' || PKG_SQL_BUILD.WRAP_STR(SVALUE => 'CostRouteLists')); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' and L.IN_DOCUMENT in (select SL."DOCUMENT"'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' from SELECTLIST SL'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' where SL.IDENT = :NIDENT'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' and SL.UNITCODE = ' || PKG_SQL_BUILD.WRAP_STR(SVALUE => 'CostRouteLists')); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' and SL.ACTIONCODE = ' || PKG_SQL_BUILD.WRAP_STR(SVALUE => 'P8PanelsJobManage') || ')'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' and T.RN = L.OUT_DOCUMENT'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' and exists ( select null from V_USERPRIV UP where UP."CATALOG" = T.CRN )'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' and exists ( select null from V_USERPRIV UP where UP.JUR_PERS = T.JUR_PERS and UP.UNITCODE = ' || PKG_SQL_BUILD.WRAP_STR(SVALUE => 'CostJobs') || ' )) TMP '); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' %ORDER_BY%) D) F'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' where F.NROW between :NROW_FROM and :NROW_TO'); + /* Учтём сортировки */ + PKG_P8PANELS_VISUAL.TORDERS_SET_QUERY(RDATA_GRID => RDG, RORDERS => RO, SPATTERN => '%ORDER_BY%', CSQL => CSQL); + /* Разбираем его */ + ICURSOR := PKG_SQL_DML.OPEN_CURSOR(SWHAT => 'SELECT'); + PKG_SQL_DML.PARSE(ICURSOR => ICURSOR, SQUERY => CSQL); + /* Делаем подстановку параметров */ + PKG_SQL_DML.BIND_VARIABLE_NUM(ICURSOR => ICURSOR, SNAME => 'NCOMPANY', NVALUE => NCOMPANY); + PKG_SQL_DML.BIND_VARIABLE_NUM(ICURSOR => ICURSOR, SNAME => 'NROW_FROM', NVALUE => NROW_FROM); + PKG_SQL_DML.BIND_VARIABLE_NUM(ICURSOR => ICURSOR, SNAME => 'NROW_TO', NVALUE => NROW_TO); + PKG_SQL_DML.BIND_VARIABLE_NUM(ICURSOR => ICURSOR, SNAME => 'NFCJOBS', NVALUE => NFCJOBS); + PKG_SQL_DML.BIND_VARIABLE_NUM(ICURSOR => ICURSOR, SNAME => 'NIDENT', NVALUE => NIDENT); + /* Описываем структуру записи курсора */ + PKG_SQL_DML.DEFINE_COLUMN_NUM(ICURSOR => ICURSOR, IPOSITION => 1); + PKG_SQL_DML.DEFINE_COLUMN_STR(ICURSOR => ICURSOR, IPOSITION => 2); + PKG_SQL_DML.DEFINE_COLUMN_STR(ICURSOR => ICURSOR, IPOSITION => 3); + PKG_SQL_DML.DEFINE_COLUMN_NUM(ICURSOR => ICURSOR, IPOSITION => 4); + PKG_SQL_DML.DEFINE_COLUMN_NUM(ICURSOR => ICURSOR, IPOSITION => 5); + PKG_SQL_DML.DEFINE_COLUMN_NUM(ICURSOR => ICURSOR, IPOSITION => 6); + PKG_SQL_DML.DEFINE_COLUMN_NUM(ICURSOR => ICURSOR, IPOSITION => 7); + /* Делаем выборку */ + if (PKG_SQL_DML.EXECUTE(ICURSOR => ICURSOR) = 0) then + null; + end if; + /* Обходим выбранные записи */ + while (PKG_SQL_DML.FETCH_ROWS(ICURSOR => ICURSOR) > 0) + loop + /* Добавляем колонки с данными */ + PKG_P8PANELS_VISUAL.TROW_ADD_CUR_COLN(RROW => RDG_ROW, + SNAME => 'NRN', + ICURSOR => ICURSOR, + NPOSITION => 1, + BCLEAR => true); + PKG_P8PANELS_VISUAL.TROW_ADD_COL(RROW => RDG_ROW, SNAME => 'NSELECT', NVALUE => 0); + PKG_P8PANELS_VISUAL.TROW_ADD_CUR_COLS(RROW => RDG_ROW, + SNAME => 'SOPER_NUMB', + ICURSOR => ICURSOR, + NPOSITION => 2); + PKG_P8PANELS_VISUAL.TROW_ADD_CUR_COLS(RROW => RDG_ROW, + SNAME => 'SOPER_NAME', + ICURSOR => ICURSOR, + NPOSITION => 3); + PKG_P8PANELS_VISUAL.TROW_ADD_CUR_COLN(RROW => RDG_ROW, + SNAME => 'NISSUED', + ICURSOR => ICURSOR, + NPOSITION => 4); + PKG_P8PANELS_VISUAL.TROW_ADD_CUR_COLN(RROW => RDG_ROW, + SNAME => 'NISSUE', + ICURSOR => ICURSOR, + NPOSITION => 5); + PKG_P8PANELS_VISUAL.TROW_ADD_CUR_COLN(RROW => RDG_ROW, + SNAME => 'NEQUIP_PLAN', + ICURSOR => ICURSOR, + NPOSITION => 6); + /* Добавляем строку в таблицу */ + PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_ROW(RDATA_GRID => RDG, RROW => RDG_ROW); + end loop; + exception + when others then + PKG_SQL_DML.CLOSE_CURSOR(ICURSOR => ICURSOR); + raise; + end; + end if; + /* Сериализуем описание */ + COUT := PKG_P8PANELS_VISUAL.TDATA_GRID_TO_XML(RDATA_GRID => RDG, NINCLUDE_DEF => NINCLUDE_DEF); + end FCJOBSSP_DG_GET; + + /* Инициализация записей раздела "Планы и отчеты производства изделий" */ + procedure FCJOBS_INIT + ( + COUT out clob -- Список записей раздела "Сменные задания" + ) + is + NCOMPANY PKG_STD.TREF := GET_SESSION_COMPANY(); -- Организация сеанса + SUTILIZER PKG_STD.TSTRING := UTILIZER(); -- Пользователь сеанса + NVERSION PKG_STD.TREF; -- Версия контрагентов + NPROCESS_IDENT PKG_STD.TREF; -- Идентификатор процесса + begin + /* Считываем версию контрагентов */ + FIND_VERSION_BY_COMPANY(NCOMPANY => NCOMPANY, SUNITCODE => 'AGNLIST', NVERSION => NVERSION); + /* Генерируем идентификатор процесса */ + NPROCESS_IDENT := GEN_IDENT(); + /* Начинаем формирование XML */ + PKG_XFAST.PROLOGUE(ITYPE => PKG_XFAST.CONTENT_); + /* Открываем корень */ + PKG_XFAST.DOWN_NODE(SNAME => 'XDATA'); + /* Цикл по планам и отчетам производства изделий */ + for REC in (select T.RN NRN, + DT.DOCCODE || ', ' || trim(T.DOCPREF) || '-' || trim(T.DOCNUMB) || ', ' || + TO_CHAR(T.DOCDATE, 'dd.mm.yyyy') SDOC_INFO, + INS.CODE SSUBDIV, + case + when PER.RN is not null then + TO_CHAR(T.DOCDATE, 'dd.mm.yyyy') || ' ' || TN2S(PER.BEG_TIME) || ' - ' || TN2S(PER.END_TIME) + else + TO_CHAR(T.DOCDATE, 'dd.mm.yyyy') + end SPERIOD + from FCJOBS T, + DOCTYPES DT, + INS_DEPARTMENT INS, + TBOPERMODESP PER + where T.COMPANY = NCOMPANY + and T.STATE <> NFCJOBS_STATUS_WO + and DT.RN = T.DOCTYPE + and T.SUBDIV = INS.RN (+) + and T.TBOPERMODESP = PER.RN (+) + and PKG_P8PANELS_MECHREC.UTL_SUBDIV_CHECK(T.COMPANY, T.SUBDIV, SUTILIZER) = 1 + and exists (select null from V_USERPRIV UP where UP.CATALOG = T.CRN) + and exists (select null from V_USERPRIV UP where UP.JUR_PERS = T.JUR_PERS and UP.UNITCODE = 'CostJobs') + order by SDOC_INFO) + loop + /* Открываем план */ + PKG_XFAST.DOWN_NODE(SNAME => 'XFCJOBS'); + /* Описываем план */ + PKG_XFAST.ATTR(SNAME => 'NRN', NVALUE => REC.NRN); + PKG_XFAST.ATTR(SNAME => 'SDOC_INFO', SVALUE => REC.SDOC_INFO); + PKG_XFAST.ATTR(SNAME => 'SSUBDIV', SVALUE => REC.SSUBDIV); + PKG_XFAST.ATTR(SNAME => 'SPERIOD', SVALUE => REC.SPERIOD); + /* Закрываем план */ + PKG_XFAST.UP(); + end loop; + /* Открываем дополнительную информацию */ + PKG_XFAST.DOWN_NODE(SNAME => 'XINFO'); + /* Описываем идентификатор процесса */ + PKG_XFAST.ATTR(SNAME => 'NPROCESS_IDENT', NVALUE => NPROCESS_IDENT); + /* Закрываем дополнительную информацию */ + PKG_XFAST.UP(); + /* Закрываем корень */ + PKG_XFAST.UP(); + /* Сериализуем */ + COUT := PKG_XFAST.SERIALIZE_TO_CLOB(); + /* Завершаем формирование XML */ + PKG_XFAST.EPILOGUE(); + exception + when others then + /* Завершаем формирование XML */ + PKG_XFAST.EPILOGUE(); + /* Вернем ошибку */ + PKG_STATE.DIAGNOSTICS_STACKED(); + P_EXCEPTION(0, PKG_STATE.SQL_ERRM()); + end FCJOBS_INIT; + + /* + Процедуры панели "Загрузка цеха" + */ + + /* Получение загрузки цеха */ + procedure FCJOBS_DEP_LOAD_DG_GET + ( + NPAGE_NUMBER in number, -- Номер страницы (игнорируется при NPAGE_SIZE=0) + NPAGE_SIZE in number, -- Количество записей на странице (0 - все) + CORDERS in clob, -- Сортировки + NINCLUDE_DEF in number, -- Признак включения описания колонок таблицы в ответ + COUT out clob -- Сериализованная таблица данных + ) + is + NCOMPANY PKG_STD.TREF := GET_SESSION_COMPANY(); -- Организация сеанса + SUTILIZER PKG_STD.TSTRING := UTILIZER(); -- Пользователь сеанса + RO PKG_P8PANELS_VISUAL.TORDERS; -- Сортировки + RDG PKG_P8PANELS_VISUAL.TDATA_GRID; -- Описание таблицы + RDG_ROW PKG_P8PANELS_VISUAL.TROW; -- Строка таблицы + NROW_FROM PKG_STD.TREF; -- Номер строки с + NROW_TO PKG_STD.TREF; -- Номер строки по + CSQL clob; -- Буфер для запроса + ICURSOR integer; -- Курсор для исполнения запроса + DDATE_FROM PKG_STD.TLDATE; -- Дата начала месяца + DDATE_TO PKG_STD.TLDATE; -- Дата окончания месяца + DDATE PKG_STD.TLDATE; -- Дата для расчетов + NDICMUNTS_WD PKG_STD.TREF; -- Рег. номер единицы измерения нормочасов + NDICMUNTS_HOUR PKG_STD.TREF; -- Рег. номер единицы измерения часа + NFCEQUIPMENT PKG_STD.TREF; -- Рег. номер оборудования + TDAYS TJOB_DAYS; -- Коллекция дней месяца + NINDEX PKG_STD.TNUMBER; -- Индекс даты в коллекции дат + + /* Считывание индекса коллекции дней */ + function TDAYS_INDEX_GET + ( + TDAYS in TJOB_DAYS, -- Коллекция дней + DDATE in date -- Дата дня + ) return number -- Индекс дня в коллекции + is + begin + /* Цикл по дням месяца */ + for I in TDAYS.FIRST..TDAYS.LAST + loop + /* Если это искомый день */ + if (TDAYS(I).DDATE = TRUNC(DDATE)) then + /* Возвращаем индекс */ + return I; + end if; + end loop; + /* Возвращаем null */ + return null; + end TDAYS_INDEX_GET; + + /* Инициализация дней месяца */ + procedure DAYS_INIT + ( + RDG in out nocopy PKG_P8PANELS_VISUAL.TDATA_GRID, -- Описание таблицы + TJOB_DAYS in out nocopy TJOB_DAYS, -- Коллекция дней месяца + DDATE_FROM in date, -- Дата начала месяца + DDATE_TO in date -- Дата окончания месяца + ) + is + DDATE PKG_STD.TLDATE; -- Сформированная дата дня + NMONTH PKG_STD.TNUMBER; -- Текущий месяц + NYEAR PKG_STD.TNUMBER; -- Текущий год + SDATE_NAME PKG_STD.TSTRING; -- Строковое представление даты для наименования колонки + begin + /* Считываем месяц и год текущей даты */ + NMONTH := D_MONTH(DDATE => sysdate); + NYEAR := D_YEAR(DDATE => sysdate); + /* Цикл по дням месяца */ + for I in D_DAY(DDATE => DDATE_FROM) .. D_DAY(DDATE => DDATE_TO) + loop + /* Формируем дату дня */ + DDATE := TO_DATE(TO_CHAR(I) || '.' || TO_CHAR(NMONTH) || '.' || TO_CHAR(NYEAR), 'dd.mm.yyyy'); + /* Строковое представление даты для наименования колонки */ + SDATE_NAME := TO_CHAR(DDATE, SCOL_PATTERN_DATE); + /* Описываем родительскую колонку таблицы данных */ + PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG, + SNAME => 'N_' || TO_CHAR(DDATE, SCOL_PATTERN_DATE) || '_VALUE', + SCAPTION => LPAD(D_DAY(DDATE), 2, '0'), + SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_NUMB, + SPARENT => 'NVALUE_BY_DAYS'); + /* Описываем родительскую колонку таблицы данных */ + PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG, + SNAME => 'N_' || TO_CHAR(DDATE, SCOL_PATTERN_DATE) || '_TYPE', + SCAPTION => LPAD(D_DAY(DDATE), 2, '0'), + SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_NUMB, + BVISIBLE => false, + SPARENT => 'NVALUE_BY_DAYS'); + /* Добавляем день в коллекцию */ + TJOB_DAYS_ADD(TDAYS => TJOB_DAYS, DDATE => DDATE, NVALUE => 0, NTYPE => null); + end loop; + end DAYS_INIT; + + /* Заполнение нормы трудоемкости дней месяца */ + procedure DAYS_FILL + ( + TDAYS in out nocopy TJOB_DAYS, -- Коллекци дней месяца + DDATE in out date, -- Начальный день строки СЗ + DBEG_FACT in date, -- Дата начала факт + DDATE_TO in date, -- Дата окончания месяца + NLABOUR_FACT_FULL in number, -- Норма факт строки СЗ + NLABOUR_PLAN_FULL in number, -- Норма план строки СЗ (с учетом нормы факт) + NWORK_HOURS in number -- Количество рабочих часов смены + ) + is + NHOURS_LEFT PKG_STD.TLNUMBER; -- Количество оставшихся часов в дне + NMAX_OF_DAY PKG_STD.TQUANT; -- Максимальное количество рабочих часов в дне + NLABOUR_FACT PKG_STD.TQUANT; -- Оставшаяся трудоемкость факт + NLABOUR_PLAN PKG_STD.TQUANT; -- Оставшаяся трудоемкость план + NLABOUR_BY_DAY PKG_STD.TQUANT; -- Суммарная трудоемкость за день (в доли смены) + NDAY_TYPE PKG_STD.TNUMBER; -- Тип дня (0 - выполняемый, 1 - выполненный) + NINDEX PKG_STD.TNUMBER; -- Индекс даты в коллекции дат + begin + /* Указываем изначальные план и факт */ + NLABOUR_FACT := NLABOUR_FACT_FULL; + NLABOUR_PLAN := NLABOUR_PLAN_FULL; + /* Необходимо погасть факт и план */ + while (((NLABOUR_FACT <> 0) or (NLABOUR_PLAN <> 0)) and (DDATE <= DDATE_TO)) + loop + /* Обнуляем трудоемкость в доли смены за день */ + NLABOUR_BY_DAY := 0; + /* Считываем индекс коллеции текущего дня */ + NINDEX := TDAYS_INDEX_GET(TDAYS => TDAYS, DDATE => DDATE); + /* Изначально всегда "Выполнено" */ + NDAY_TYPE := 1; + /* Определяем количество оставшихся часов в дне */ + NHOURS_LEFT := (TRUNC(DDATE + 1) - DDATE) * 24; + /* Если в текущем дне еще есть время */ + if (TDAYS(NINDEX).NVALUE <> 1) then + /* Если день пустой */ + if (TDAYS(NINDEX).NVALUE = 0) then + /* Определяем возможное указание часов (относительно оставшегося времени дня или часов в смене) */ + NMAX_OF_DAY := LEAST(NHOURS_LEFT, NWORK_HOURS); + else + /* Определяем количество оставшегося времени в дне */ + NMAX_OF_DAY := ((1 - TDAYS(NINDEX).NVALUE) * NWORK_HOURS); + /* Определяем возможное указание часов (относительно оставшегося времени дня или заполненного времени дня) */ + NMAX_OF_DAY := LEAST(NHOURS_LEFT, NMAX_OF_DAY); + end if; + /* Если указана дата начала факт и осталась трудоемкость факт */ + if ((DBEG_FACT is not null) and (NLABOUR_FACT > 0)) then + /* Если в данный день невозможно отметить весь факт */ + if (NLABOUR_FACT > NMAX_OF_DAY) then + /* Вычитаем из суммарного факта трудоемкость дня */ + NLABOUR_FACT := NLABOUR_FACT - NMAX_OF_DAY; + NLABOUR_BY_DAY := NMAX_OF_DAY; + else + /* Добавляем трудоемкость факта и обнуляем суммарный факт */ + NLABOUR_BY_DAY := NLABOUR_BY_DAY + NLABOUR_FACT; + NLABOUR_FACT := 0; + end if; + end if; + /* Если осталось время дня и есть план */ + if ((NMAX_OF_DAY > NLABOUR_BY_DAY) and (NLABOUR_PLAN > 0)) then + /* Это день плана */ + NDAY_TYPE := 0; + /* Если в данный день невозможно отметить всё */ + if (NLABOUR_PLAN > (NMAX_OF_DAY - NLABOUR_BY_DAY)) then + /* Вычитаем из суммарного плана оставшуюсь часть дня */ + NLABOUR_PLAN := NLABOUR_PLAN - (NMAX_OF_DAY - NLABOUR_BY_DAY); + NLABOUR_BY_DAY := NMAX_OF_DAY; + else + /* Добавляем трудоемкость плана и обнуляем суммарный план */ + NLABOUR_BY_DAY := NLABOUR_BY_DAY + NLABOUR_PLAN; + NLABOUR_PLAN := 0; + end if; + end if; + /* Если рабочего времени не осталось */ + if (NMAX_OF_DAY = 0) then + /* Указываем целый день */ + TDAYS(NINDEX).NVALUE := 1; + else + /* Добавляем по текущему дню */ + TDAYS(NINDEX).NVALUE := TDAYS(NINDEX).NVALUE + (NLABOUR_BY_DAY / NWORK_HOURS); + end if; + /* Указываем тип дня */ + TDAYS(NINDEX).NTYPE := NDAY_TYPE; + end if; + /* Указываем следующий день */ + DDATE := TRUNC(DDATE + 1); + end loop; + end DAYS_FILL; + + /* Добавление информации в итоговый результат */ + procedure ADD_INFO + ( + NCOMPANY in number, -- Рег. номер организации + SUTILIZER in varchar2, -- Имя пользователя + COUT in out clob -- Сериализованная таблица данных + ) + is + begin + /* Начинаем формирование XML */ + PKG_XFAST.PROLOGUE(ITYPE => PKG_XFAST.CONTENT_); + /* Открываем корень */ + PKG_XFAST.DOWN_NODE(SNAME => 'XDATA'); + /* Открываем план */ + PKG_XFAST.DOWN_NODE(SNAME => 'XFCJOBS'); + /* Описываем план */ + PKG_XFAST.VALUE_XML(LCVALUE => COUT); + /* Закрываем план */ + PKG_XFAST.UP(); + /* Открываем дополнительную информацию */ + PKG_XFAST.DOWN_NODE(SNAME => 'XINFO'); + /* Описываем мнемокод подразделения */ + PKG_XFAST.ATTR(SNAME => 'SSUBDIV', SVALUE => UTL_SUBDIV_CODE_GET(NCOMPANY => NCOMPANY, SUSER => SUTILIZER)); + /* Закрываем дополнительную информацию */ + PKG_XFAST.UP(); + /* Закрываем корень */ + PKG_XFAST.UP(); + /* Сериализуем */ + COUT := PKG_XFAST.SERIALIZE_TO_CLOB(); + /* Завершаем формирование XML */ + PKG_XFAST.EPILOGUE(); + exception + when others then + /* Завершаем формирование XML */ + PKG_XFAST.EPILOGUE(); + /* Вернем ошибку */ + PKG_STATE.DIAGNOSTICS_STACKED(); + P_EXCEPTION(0, PKG_STATE.SQL_ERRM()); + end; + begin + /* Читем сортировки */ + RO := PKG_P8PANELS_VISUAL.TORDERS_FROM_XML(CORDERS => CORDERS); + /* Преобразуем номер и размер страницы в номер строк с и по */ + PKG_P8PANELS_VISUAL.UTL_ROWS_LIMITS_CALC(NPAGE_NUMBER => NPAGE_NUMBER, + NPAGE_SIZE => NPAGE_SIZE, + NROW_FROM => NROW_FROM, + NROW_TO => NROW_TO); + /* Инициализируем таблицу данных */ + RDG := PKG_P8PANELS_VISUAL.TDATA_GRID_MAKE(BFIXED_HEADER => true, NFIXED_COLUMNS => 5); + /* Описываем колонки таблицы данных */ + PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG, + SNAME => 'NRN', + SCAPTION => 'Рег. номер', + SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_NUMB, + BVISIBLE => false); + PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG, + SNAME => 'SCODE', + SCAPTION => 'Мнемокод', + SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_STR, + BVISIBLE => true, + NWIDTH => 100); + PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG, + SNAME => 'SNAME', + SCAPTION => 'Наименование', + SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_STR, + BVISIBLE => true, + NWIDTH => 200); + PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG, + SNAME => 'SSUBDIV', + SCAPTION => 'Участок', + SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_STR, + BVISIBLE => true, + NWIDTH => 80); + PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG, + SNAME => 'NPROCENT_LOAD', + SCAPTION => 'Загрузка (%)', + SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_NUMB, + BVISIBLE => true, + NWIDTH => 80); + PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG, + SNAME => 'NLOAD', + SCAPTION => 'Загрузка (н/ч)', + SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_NUMB, + BVISIBLE => true, + NWIDTH => 80); + PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG, + SNAME => 'NVALUE_BY_DAYS', + SCAPTION => 'Загрузка по дням', + SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_NUMB, + BVISIBLE => true); + /* Считываем первый и последний день месяца */ + P_FIRST_LAST_DAY(DCALCDATE => sysdate, DBGNDATE => DDATE_FROM, DENDDATE => DDATE_TO); + /* Считываем единицу измерения нормочасов */ + FIND_DICMUNTS_CODE(NFLAG_SMART => 0, + NFLAG_OPTION => 0, + NCOMPANY => NCOMPANY, + SMEAS_MNEMO => SDICMUNTS_WD, + NRN => NDICMUNTS_WD); + /* Считываем единицу измерения часа */ + FIND_DICMUNTS_CODE(NFLAG_SMART => 0, + NFLAG_OPTION => 0, + NCOMPANY => NCOMPANY, + SMEAS_MNEMO => SDICMUNTS_HOUR, + NRN => NDICMUNTS_HOUR); + /* Инициализируем дни месяца */ + DAYS_INIT(RDG => RDG, TJOB_DAYS => TDAYS, DDATE_FROM => DDATE_FROM, DDATE_TO => DDATE_TO); + /* Обходим данные */ + begin + /* Добавляем подсказку совместимости */ + CSQL := PKG_SQL_BUILD.COMPATIBLE(SSQL => CSQL); + /* Формируем запрос */ + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => 'select *'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' from (select D.*,'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => PKG_SQL_BUILD.SQLROWNUM() || ' NROW'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' from (select EQ.RN NRN,'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' EQ.CODE SCODE,'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' EQ.NAME SNAME,'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' I.CODE SSUBDIV,'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' ROUND(sum(case'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' when JS.WORK_DATE is not null then'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' JS.LABOUR_FACT'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' else'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' ' || PKG_SQL_BUILD.WRAP_NUM(NVALUE => 0)); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' end) / ' || PKG_SQL_BUILD.WRAP_NUM(NVALUE => 60)); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' / ' || PKG_SQL_BUILD.WRAP_NUM(NVALUE => 160) || ', 3) NPROCENT_LOAD,'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' ROUND(sum(case'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' when JS.WORK_DATE is null then'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' F_DICMUNTS_BASE_RECALC_QUANT(0,'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' T.COMPANY,'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' JS.MUNIT,'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' JS.LABOUR_PLAN,'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' :NDICMUNTS)'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' else'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' ' || PKG_SQL_BUILD.WRAP_NUM(NVALUE => 0)); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' end), 3) NLOAD'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' from FCJOBS T,'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' FCJOBSSP JS,'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' FCEQUIPMENT EQ,'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' INS_DEPARTMENT I'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' where T.COMPANY = :NCOMPANY'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' and T.DOCDATE >= :DDATE_FROM'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' and T.DOCDATE <= :DDATE_TO'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' and PKG_P8PANELS_MECHREC.UTL_SUBDIV_HIER_CHECK(T.COMPANY, T.SUBDIV, UTILIZER()) = ' || PKG_SQL_BUILD.WRAP_NUM(NVALUE => 1)); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' and JS.PRN = T.RN'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' and EQ.RN = JS.EQUIP_PLAN'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' and I.RN = T.SUBDIV'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' and exists ( select null from V_USERPRIV UP where UP."CATALOG" = T.CRN )'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' group by EQ.RN,'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' EQ.CODE,'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' EQ.NAME,'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' I.CODE'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' %ORDER_BY%) D) F'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' where F.NROW between :NROW_FROM and :NROW_TO'); + /* Учтём сортировки */ + PKG_P8PANELS_VISUAL.TORDERS_SET_QUERY(RDATA_GRID => RDG, RORDERS => RO, SPATTERN => '%ORDER_BY%', CSQL => CSQL); + /* Разбираем его */ + ICURSOR := PKG_SQL_DML.OPEN_CURSOR(SWHAT => 'SELECT'); + PKG_SQL_DML.PARSE(ICURSOR => ICURSOR, SQUERY => CSQL); + /* Делаем подстановку параметров */ + PKG_SQL_DML.BIND_VARIABLE_NUM(ICURSOR => ICURSOR, SNAME => 'NCOMPANY', NVALUE => NCOMPANY); + PKG_SQL_DML.BIND_VARIABLE_NUM(ICURSOR => ICURSOR, SNAME => 'NROW_FROM', NVALUE => NROW_FROM); + PKG_SQL_DML.BIND_VARIABLE_NUM(ICURSOR => ICURSOR, SNAME => 'NROW_TO', NVALUE => NROW_TO); + PKG_SQL_DML.BIND_VARIABLE_DATE(ICURSOR => ICURSOR, SNAME => 'DDATE_FROM', DVALUE => DDATE_FROM); + PKG_SQL_DML.BIND_VARIABLE_DATE(ICURSOR => ICURSOR, SNAME => 'DDATE_TO', DVALUE => DDATE_TO); + PKG_SQL_DML.BIND_VARIABLE_NUM(ICURSOR => ICURSOR, SNAME => 'NDICMUNTS', NVALUE => NDICMUNTS_WD); + /* Описываем структуру записи курсора */ + PKG_SQL_DML.DEFINE_COLUMN_NUM(ICURSOR => ICURSOR, IPOSITION => 1); + PKG_SQL_DML.DEFINE_COLUMN_STR(ICURSOR => ICURSOR, IPOSITION => 2); + PKG_SQL_DML.DEFINE_COLUMN_STR(ICURSOR => ICURSOR, IPOSITION => 3); + PKG_SQL_DML.DEFINE_COLUMN_STR(ICURSOR => ICURSOR, IPOSITION => 4); + PKG_SQL_DML.DEFINE_COLUMN_NUM(ICURSOR => ICURSOR, IPOSITION => 5); + PKG_SQL_DML.DEFINE_COLUMN_NUM(ICURSOR => ICURSOR, IPOSITION => 6); + PKG_SQL_DML.DEFINE_COLUMN_NUM(ICURSOR => ICURSOR, IPOSITION => 7); + /* Делаем выборку */ + if (PKG_SQL_DML.EXECUTE(ICURSOR => ICURSOR) = 0) then + null; + end if; + /* Обходим выбранные записи */ + while (PKG_SQL_DML.FETCH_ROWS(ICURSOR => ICURSOR) > 0) + loop + /* Считываем рег. номер оборудования */ + PKG_SQL_DML.COLUMN_VALUE_NUM(ICURSOR => ICURSOR, IPOSITION => 1, NVALUE => NFCEQUIPMENT); + /* Добавляем колонки с данными */ + PKG_P8PANELS_VISUAL.TROW_ADD_COL(RROW => RDG_ROW, SNAME => 'NRN', NVALUE => NFCEQUIPMENT, BCLEAR => true); + PKG_P8PANELS_VISUAL.TROW_ADD_CUR_COLS(RROW => RDG_ROW, SNAME => 'SCODE', ICURSOR => ICURSOR, NPOSITION => 2); + PKG_P8PANELS_VISUAL.TROW_ADD_CUR_COLS(RROW => RDG_ROW, SNAME => 'SNAME', ICURSOR => ICURSOR, NPOSITION => 3); + PKG_P8PANELS_VISUAL.TROW_ADD_CUR_COLS(RROW => RDG_ROW, SNAME => 'SSUBDIV', ICURSOR => ICURSOR, NPOSITION => 4); + PKG_P8PANELS_VISUAL.TROW_ADD_CUR_COLN(RROW => RDG_ROW, + SNAME => 'NPROCENT_LOAD', + ICURSOR => ICURSOR, + NPOSITION => 5); + PKG_P8PANELS_VISUAL.TROW_ADD_CUR_COLN(RROW => RDG_ROW, SNAME => 'NLOAD', ICURSOR => ICURSOR, NPOSITION => 6); + /* Обходим загруженность по дням */ + for REC in (select max(TMP.WORK_HOURS) NWORK_HOURS, + TMP.BEG_DATE DBEG_DATE, + SUM(TMP.LABOUR_PLAN) NLABOUR_PLAN, + SUM(TMP.LABOUR_FACT) NLABOUR_FACT + from (select BO.RN TBOPERMODESP, + case BO.SIGN_SHIFT + when 0 then + (BO.END_TIME - BO.BEG_TIME) * 24 + else + (BO.END_TIME + 1 - BO.BEG_TIME) * 24 + end WORK_HOURS, + TRUNC(COALESCE(T.BEG_FACT, T.BEG_PLAN)) BEG_DATE, + F_DICMUNTS_BASE_RECALC_QUANT(0, T.COMPANY, T.MUNIT, T.LABOUR_PLAN, NDICMUNTS_HOUR) LABOUR_PLAN, + F_DICMUNTS_BASE_RECALC_QUANT(0, T.COMPANY, T.MUNIT, T.LABOUR_FACT, NDICMUNTS_HOUR) LABOUR_FACT + from FCJOBSSP T, + FCJOBS J, + TBOPERMODESP BO + where T.COMPANY = NCOMPANY + and J.RN = T.PRN + and T.BEG_PLAN is not null + and T.BEG_PLAN <= DDATE_TO + and T.BEG_PLAN >= DDATE_FROM + and PKG_P8PANELS_MECHREC.UTL_SUBDIV_HIER_CHECK(J.COMPANY, J.SUBDIV, SUTILIZER) = 1 + and T.EQUIP_PLAN = NFCEQUIPMENT + and BO.RN = COALESCE(J.TBOPERMODESP, T.TBOPERMODESP) + order by T.BEG_FACT) TMP + group by TMP.BEG_DATE + order by TMP.BEG_DATE) + loop + /* Считываем индекс коллеции текущего дня */ + NINDEX := TDAYS_INDEX_GET(TDAYS => TDAYS, DDATE => REC.DBEG_DATE); + /* Если факта меньше, чем плана */ + if (REC.NLABOUR_FACT < REC.NLABOUR_PLAN) then + /* Тип дня - невыполненный */ + TDAYS(NINDEX).NTYPE := 0; + else + /* Тип дня - невыполненный */ + TDAYS(NINDEX).NTYPE := 1; + end if; + /* Если часов трудоемкости больше рабочего времени */ + if (REC.NLABOUR_PLAN > REC.NWORK_HOURS) then + /* Указываем полную смену */ + TDAYS(NINDEX).NVALUE := 1; + else + /* Указываем долю трудоемкости на смену */ + TDAYS(NINDEX).NVALUE := REC.NLABOUR_PLAN / REC.NWORK_HOURS; + end if; + end loop; + /* Обходим все дни */ + for I in TDAYS.FIRST .. TDAYS.LAST + loop + /* Отмечаем значение дня */ + PKG_P8PANELS_VISUAL.TROW_ADD_COL(RROW => RDG_ROW, + SNAME => 'N_' || TO_CHAR(TDAYS(I).DDATE, SCOL_PATTERN_DATE) || '_VALUE', + NVALUE => ROUND(TDAYS(I).NVALUE, 3)); + /* Отмечаем тип дня */ + PKG_P8PANELS_VISUAL.TROW_ADD_COL(RROW => RDG_ROW, + SNAME => 'N_' || TO_CHAR(TDAYS(I).DDATE, SCOL_PATTERN_DATE) || '_TYPE', + NVALUE => TDAYS(I).NTYPE); + /* Обнуляем значения дня */ + TDAYS(I).NVALUE := 0; + TDAYS(I).NTYPE := null; + end loop; + /* Добавляем строку в таблицу */ + PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_ROW(RDATA_GRID => RDG, RROW => RDG_ROW); + end loop; + exception + when others then + PKG_SQL_DML.CLOSE_CURSOR(ICURSOR => ICURSOR); + raise; + end; + /* Сериализуем описание */ + COUT := PKG_P8PANELS_VISUAL.TDATA_GRID_TO_XML(RDATA_GRID => RDG, NINCLUDE_DEF => NINCLUDE_DEF); + /* Добавление информации в итоговый результат */ + ADD_INFO(NCOMPANY => NCOMPANY, SUTILIZER => SUTILIZER, COUT => COUT); + end FCJOBS_DEP_LOAD_DG_GET; + + /* + Процедуры панели "Мониторинг сборки изделий" + */ /* Считывание рег. номера спецификации связанного плана */ function FCPRODPLANSP_LINKED_GET ( - NPRODCMPSP in number, -- Рег. номер производственного состава - NFCPRODPLAN in number -- Рег. номер план - ) return number -- Рег. номер спецификации связанного плана + NPRODCMPSP in number, -- Рег. номер производственного состава + NFCPRODPLAN in number -- Рег. номер план + ) return number -- Рег. номер спецификации связанного плана is - NRESULT PKG_STD.TREF; -- Рег. номер спецификации связанного плана + NRESULT PKG_STD.TREF; -- Рег. номер спецификации связанного плана begin /* Считываем запись */ begin From 320521a05427ce9de597d6f7e3e4f24a9ef9f7e3 Mon Sep 17 00:00:00 2001 From: Mikhail Chechnev Date: Thu, 9 May 2024 17:48:24 +0300 Subject: [PATCH 32/76] =?UTF-8?q?WEB=20APP:=20=D0=9F=D0=B0=D0=BD=D0=B5?= =?UTF-8?q?=D0=BB=D0=B8=20=D0=9F=D0=A3=D0=94=D0=9F=20"=D0=9F=D1=80=D0=BE?= =?UTF-8?q?=D0=B8=D0=B7=D0=B2=D0=BE=D0=B4=D1=81=D1=82=D0=B2=D0=B5=D0=BD?= =?UTF-8?q?=D0=BD=D1=8B=D0=B9=20=D0=BF=D0=BB=D0=B0=D0=BD=20=D1=86=D0=B5?= =?UTF-8?q?=D1=85=D0=B0"=20=D0=B8=20"=D0=97=D0=B0=D0=B3=D1=80=D1=83=D0=B7?= =?UTF-8?q?=D0=BA=D0=B0=20=D1=86=D0=B5=D1=85=D0=B0"=20-=20=D1=84=D0=B8?= =?UTF-8?q?=D0=BA=D1=81=D0=B8=D1=80=D0=BE=D0=B2=D0=B0=D0=BD=D0=BD=D1=8B?= =?UTF-8?q?=D0=B5=20=D0=BA=D0=BE=D0=BB=D0=BE=D0=BD=D0=BA=D0=B8=20=D0=B8=20?= =?UTF-8?q?=D0=BA=D0=BE=D1=81=D0=BC=D0=B5=D1=82=D0=B8=D0=BA=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../mech_rec_dept_cost_jobs.js | 73 +++---- .../fcroutlst.js | 35 ++- .../incomefromdeps.js | 26 ++- .../mech_rec_dept_cost_prod_plans.js | 203 +++++++----------- p8panels.config | 6 +- 5 files changed, 168 insertions(+), 175 deletions(-) diff --git a/app/panels/mech_rec_dept_cost_jobs/mech_rec_dept_cost_jobs.js b/app/panels/mech_rec_dept_cost_jobs/mech_rec_dept_cost_jobs.js index 3595bee..c33c5e1 100644 --- a/app/panels/mech_rec_dept_cost_jobs/mech_rec_dept_cost_jobs.js +++ b/app/panels/mech_rec_dept_cost_jobs/mech_rec_dept_cost_jobs.js @@ -8,7 +8,7 @@ //--------------------- import React, { useState, useContext, useCallback, useEffect } from "react"; //Классы React -import { Typography, Box } from "@mui/material"; //Интерфейсные элементы +import { Typography, Box, Grid } from "@mui/material"; //Интерфейсные элементы import { object2Base64XML } from "../../core/utils"; //Вспомогательные процедуры и функции import { P8PDataGrid, P8P_DATA_GRID_SIZE } from "../../components/p8p_data_grid"; //Таблица данных import { P8P_DATA_GRID_CONFIG_PROPS } from "../../config_wrapper"; //Подключение компонентов к настройкам приложения @@ -24,7 +24,17 @@ const DATA_GRID_PAGE_SIZE = 5; //Стили const STYLES = { CONTAINER: { textAlign: "center", paddingTop: "20px" }, - TITLE: { paddingBottom: "15px" } + TITLE: { paddingBottom: "15px" }, + DATA_GRID_CONTAINER: { minWidth: "95vw", maxWidth: "95vw", minHeight: "80vh", maxHeight: "80vh" }, + DATA_GRID_CELL: (row, columnDef) => ({ + padding: "8px", + textOverflow: "ellipsis", + overflow: "hidden", + whiteSpace: "pre", + ...(columnDef.name.match(/N.*_VALUE/) && row[columnDef.name] + ? { backgroundColor: row[`${columnDef.name.substring(0, 12)}_TYPE`] === 0 ? "lightgrey" : "lightgreen" } + : {}) + }) }; //------------------------------------ @@ -32,25 +42,11 @@ const STYLES = { //------------------------------------ //Генерация заливки строки исходя от значений -const dataCellRender = ({ row, columnDef }) => { - //Описываем общие свойства - let cellProps = { title: row[columnDef.name] }; - //Описываем общий стиль - let cellStyle = { padding: "8px", maxWidth: "300px", textOverflow: "ellipsis", overflow: "hidden", whiteSpace: "pre" }; - // - if (columnDef.name.match(/N.*_VALUE/) && row[columnDef.name]) { - if (row[`${columnDef.name.substring(0, 12)}_TYPE`] === 0) { - cellStyle = { ...cellStyle, backgroundColor: "lightgrey" }; - } else { - cellStyle = { ...cellStyle, backgroundColor: "lightgreen" }; - } - } - return { - cellProps, - cellStyle, - data: row[columnDef] - }; -}; +const dataCellRender = ({ row, columnDef }) => ({ + cellProps: { title: row[columnDef.name] }, + cellStyle: STYLES.DATA_GRID_CELL(row, columnDef), + data: row[columnDef] +}); //----------- //Тело модуля @@ -68,7 +64,9 @@ const MechRecDeptCostJobs = () => { rows: [], reload: true, pageNumber: 1, - morePages: true + morePages: true, + fixedHeader: false, + fixedColumns: 0 }); //Подключение к контексту взаимодействия с сервером @@ -86,12 +84,12 @@ const MechRecDeptCostJobs = () => { NPAGE_SIZE: DATA_GRID_PAGE_SIZE, NINCLUDE_DEF: costJobs.dataLoaded ? 0 : 1 }, - respArg: "COUT", - isArray: name => name === "XCOLUMNS_DEF" || name === "XROWS", - attributeValueProcessor: (name, val) => (name === "caption" ? undefined : val) + respArg: "COUT" }); setCostJobs(pv => ({ ...pv, + fixedHeader: data.XFCJOBS.XDATA.XDATA_GRID.fixedHeader, + fixedColumns: data.XFCJOBS.XDATA.XDATA_GRID.fixedColumns, subdiv: data.XINFO.SSUBDIV, columnsDef: data.XFCJOBS.XDATA.XCOLUMNS_DEF ? [...data.XFCJOBS.XDATA.XCOLUMNS_DEF] : pv.columnsDef, rows: pv.pageNumber == 1 ? [...(data.XFCJOBS.XDATA.XROWS || [])] : [...pv.rows, ...(data.XFCJOBS.XDATA.XROWS || [])], @@ -119,15 +117,18 @@ const MechRecDeptCostJobs = () => { //Генерация содержимого return (
- - {costJobs.dataLoaded ? ( - <> - - {`Загрузка станков "${costJobs.subdiv}"`} - - + + {costJobs.dataLoaded ? `Загрузка станков "${costJobs.subdiv}"` : null} + + + + + {costJobs.dataLoaded ? ( { onPagesCountChanged={handlePagesCountChanged} dataCellRender={prms => dataCellRender({ ...prms })} /> - - - ) : null} - + ) : null} + + +
); }; diff --git a/app/panels/mech_rec_dept_cost_prod_plans/fcroutlst.js b/app/panels/mech_rec_dept_cost_prod_plans/fcroutlst.js index ca13ec0..d97a60a 100644 --- a/app/panels/mech_rec_dept_cost_prod_plans/fcroutlst.js +++ b/app/panels/mech_rec_dept_cost_prod_plans/fcroutlst.js @@ -9,7 +9,7 @@ import React, { useState, useCallback, useEffect, useContext } from "react"; //Классы React import PropTypes from "prop-types"; //Контроль свойств компонента -import { Typography, Box, Paper, IconButton, Icon, Dialog, DialogContent, DialogActions, Button, TextField } from "@mui/material"; //Интерфейсные элементы +import { Typography, Box, Paper, Dialog, DialogContent, DialogActions, Button, TextField } from "@mui/material"; //Интерфейсные элементы import { P8PDataGrid, P8P_DATA_GRID_SIZE } from "../../components/p8p_data_grid"; //Таблица данных import { P8P_DATA_GRID_CONFIG_PROPS } from "../../config_wrapper"; //Подключение компонентов к настройкам приложения import { BackEndСtx } from "../../context/backend"; //Контекст взаимодействия с сервером @@ -44,7 +44,7 @@ export const rowExpandRender = ({ row }) => { }; //Форматирование значений колонок -const dataCellRender = ({ row, columnDef, handlePriorEditOpen, handleOrderEditOpen }) => { +const dataCellRender = ({ row, columnDef /*, handlePriorEditOpen, handleOrderEditOpen */ }) => { //!!! Пока отключено - не удалять // switch (columnDef.name) { // case "NPRIOR_PARTY": @@ -287,12 +287,7 @@ const CostRouteListsDataGrid = ({ task }) => { onClick={() => { pOnlineShowDictionary({ unitCode: "FaceAccounts", - inputParameters: [ - { - name: "in_NUMB", - value: costRouteLists.editOrderValue - } - ], + inputParameters: [{ name: "in_NUMB", value: costRouteLists.editOrderValue }], callBack: res => (res.success === true ? setEditOrderValue(res.outParameters.out_NUMB) : null) }); }} @@ -321,8 +316,30 @@ CostRouteListsDataGrid.propTypes = { task: PropTypes.number.isRequired }; +//Диалог с таблицей сдачи продукции +const CostRouteListsDataGridDialog = ({ task, onClose }) => { + return ( + + + + + {onClose ? ( + + + + ) : null} + + ); +}; + +//Контроль свойств - Диалог с таблицей маршрутных листов +CostRouteListsDataGridDialog.propTypes = { + task: PropTypes.number.isRequired, + onClose: PropTypes.func +}; + //---------------- //Интерфейс модуля //---------------- -export { CostRouteListsDataGrid }; +export { CostRouteListsDataGridDialog }; diff --git a/app/panels/mech_rec_dept_cost_prod_plans/incomefromdeps.js b/app/panels/mech_rec_dept_cost_prod_plans/incomefromdeps.js index e59aef0..67f9abf 100644 --- a/app/panels/mech_rec_dept_cost_prod_plans/incomefromdeps.js +++ b/app/panels/mech_rec_dept_cost_prod_plans/incomefromdeps.js @@ -9,7 +9,7 @@ import React, { useState, useCallback, useEffect, useContext } from "react"; //Классы React import PropTypes from "prop-types"; //Контроль свойств компонента -import { Typography, Box } from "@mui/material"; //Интерфейсные элементы +import { Typography, Box, Dialog, DialogContent, DialogActions, Button } from "@mui/material"; //Интерфейсные элементы import { P8PDataGrid, P8P_DATA_GRID_SIZE } from "../../components/p8p_data_grid"; //Таблица данных import { P8P_DATA_GRID_CONFIG_PROPS } from "../../config_wrapper"; //Подключение компонентов к настройкам приложения import { BackEndСtx } from "../../context/backend"; //Контекст взаимодействия с сервером @@ -113,8 +113,30 @@ IncomFromDepsDataGrid.propTypes = { task: PropTypes.number.isRequired }; +//Диалог с таблицей сдачи продукции +const IncomFromDepsDataGridDialog = ({ task, onClose }) => { + return ( + + + + + {onClose ? ( + + + + ) : null} + + ); +}; + +//Контроль свойств - Диалог с таблицей сдачи продукции +IncomFromDepsDataGridDialog.propTypes = { + task: PropTypes.number.isRequired, + onClose: PropTypes.func +}; + //---------------- //Интерфейс модуля //---------------- -export { IncomFromDepsDataGrid }; +export { IncomFromDepsDataGridDialog }; diff --git a/app/panels/mech_rec_dept_cost_prod_plans/mech_rec_dept_cost_prod_plans.js b/app/panels/mech_rec_dept_cost_prod_plans/mech_rec_dept_cost_prod_plans.js index 2dbd8f7..0c499e6 100644 --- a/app/panels/mech_rec_dept_cost_prod_plans/mech_rec_dept_cost_prod_plans.js +++ b/app/panels/mech_rec_dept_cost_prod_plans/mech_rec_dept_cost_prod_plans.js @@ -9,29 +9,15 @@ import React, { useContext, useState, useCallback, useEffect } from "react"; //Классы React import PropTypes from "prop-types"; //Контроль свойств компонента -import { - Drawer, - Fab, - Box, - List, - ListItemButton, - ListItemText, - Typography, - TextField, - Link, - Dialog, - DialogContent, - DialogActions, - Button -} from "@mui/material"; //Интерфейсные элементы +import { Drawer, Fab, Box, List, ListItemButton, ListItemText, Typography, TextField, Link, Grid } from "@mui/material"; //Интерфейсные элементы import { BackEndСtx } from "../../context/backend"; //Контекст взаимодействия с сервером import { useFilteredPlans } from "./hooks"; //Вспомогательные хуки import { object2Base64XML } from "../../core/utils"; //Вспомогательные функции import { P8PDataGrid, P8P_DATA_GRID_SIZE } from "../../components/p8p_data_grid"; //Таблица данных import { P8P_DATA_GRID_CONFIG_PROPS } from "../../config_wrapper"; //Подключение компонентов к настройкам приложения import { MessagingСtx } from "../../context/messaging"; //Контекст сообщений -import { IncomFromDepsDataGrid } from "./incomefromdeps"; //Таблица сдачи продукции -import { CostRouteListsDataGrid } from "./fcroutlst"; //Таблица маршрутных листов +import { IncomFromDepsDataGridDialog } from "./incomefromdeps"; //Диалог сдачи продукции +import { CostRouteListsDataGridDialog } from "./fcroutlst"; //Диалог маршрутных листов //--------- //Константы @@ -41,7 +27,7 @@ import { CostRouteListsDataGrid } from "./fcroutlst"; //Таблица марш const STYLES = { PLANS_FINDER: { marginTop: "10px", marginLeft: "10px", width: "93%" }, PLANS_LIST_ITEM_PRIMARY: { wordWrap: "break-word" }, - PLANS_BUTTON: { position: "absolute" }, + PLANS_BUTTON: { position: "absolute", marginTop: "10px", marginLeft: "10px" }, PLANS_DRAWER: { width: "350px", display: "inline-block", @@ -49,6 +35,12 @@ const STYLES = { [`& .MuiDrawer-paper`]: { width: "350px", display: "inline-block", boxSizing: "border-box" } }, CONTAINER: { paddingTop: "40px", margin: "5px 0px", textAlign: "center" }, + DATA_GRID_CONTAINER: { minWidth: "95vw", maxWidth: "95vw", minHeight: "80vh", maxHeight: "80vh" }, + DATA_GRID_GROUP_CELL: { padding: "2px" }, + DATA_GRID_CELL: { padding: "8px", maxWidth: "300px", textOverflow: "ellipsis", overflow: "hidden", whiteSpace: "pre" }, + DATA_GRID_CELL_STATUS: (currentStyle, row) => ({ backgroundColor: getRowBackgroudColor(row), ...currentStyle }), + DATA_GRID_CELL_PLAN_FACT: currentStyle => ({ ...currentStyle, backgroundColor: "lightgrey" }), + DATA_GRID_CELL_MATRES_CODE: (currentStyle, row) => ({ backgroundColor: getRowBackgroudColor(row), ...currentStyle }), PLAN_FACT_VALUE: { textAlign: "center", display: "flex", justifyContent: "center" }, PLAN_FACT_DELIMITER: { padding: "0px 5px" }, FACT_VALUE: { color: "blue" } @@ -60,60 +52,35 @@ const STYLES = { //Генерация представления ячейки заголовка группы export const groupCellRender = ({ group }) => ({ - cellStyle: { padding: "2px" }, + cellStyle: STYLES.DATA_GRID_GROUP_CELL, data: group.caption }); +//Вычисление цвета заливки для строки +const getRowBackgroudColor = row => { + //Факт === План + if (row["NMAIN_QUANT"] === row["NREL_FACT"]) return "lightgreen"; + //План <= (Факт + Запущено) + if (row["NMAIN_QUANT"] <= row["NREL_FACT"] + row["NFCROUTLST_QUANT"]) return "lightblue"; + //Сумма "Количество план" = 0 или < "План" + if (row["NSUM_PLAN"] === 0 || (row["NSUM_PLAN"] !== 0 && row["NSUM_PLAN"] < row["NMAIN_QUANT"])) { + //"Факт" >= "План" + if (row["NREL_FACT"] >= row["NMAIN_QUANT"]) return "#F0E68C"; + } else { + //Сумма "Количество факт" >= сумма "Количество план" + if (row["NSUM_FACT"] >= row["NSUM_PLAN"]) return "#F0E68C"; + } + return "lightcoral"; +}; + //Генерация заливки строки исходя от значений const dataCellRender = ({ row, columnDef, handleProdOrderClick, handleMatresCodeClick }) => { //Описываем общие свойства let cellProps = { title: row[columnDef.name] }; //Описываем общий стиль - let cellStyle = { padding: "8px", maxWidth: "300px", textOverflow: "ellipsis", overflow: "hidden", whiteSpace: "pre" }; + let cellStyle = STYLES.DATA_GRID_CELL; //Для колонки "Статус" - if (columnDef.name === "SSTATUS") { - //Факт === План - if (row["NMAIN_QUANT"] === row["NREL_FACT"]) { - return { - cellProps, - cellStyle: { backgroundColor: "lightgreen", ...cellStyle }, - data: row[columnDef] - }; - } - //План <= (Факт + Запущено) - if (row["NMAIN_QUANT"] <= row["NREL_FACT"] + row["NFCROUTLST_QUANT"]) { - return { - cellProps, - cellStyle: { backgroundColor: "lightblue", ...cellStyle }, - data: row[columnDef] - }; - } - //Сумма "Количество план" = 0 или < "План" - if (row["NSUM_PLAN"] === 0 || (row["NSUM_PLAN"] !== 0 && row["NSUM_PLAN"] < row["NMAIN_QUANT"])) { - //"Факт" >= "План" - if (row["NREL_FACT"] >= row["NMAIN_QUANT"]) { - return { - cellProps, - cellStyle: { backgroundColor: "#F0E68C", ...cellStyle }, - data: row[columnDef] - }; - } - } else { - //Сумма "Количество факт" >= сумма "Количество план" - if (row["NSUM_FACT"] >= row["NSUM_PLAN"]) { - return { - cellProps, - cellStyle: { backgroundColor: "#F0E68C", ...cellStyle }, - data: row[columnDef] - }; - } - } - return { - cellProps, - cellStyle: { backgroundColor: "lightcoral", ...cellStyle }, - data: row[columnDef] - }; - } + if (columnDef.name === "SSTATUS") return { cellProps, cellStyle: STYLES.DATA_GRID_CELL_STATUS(cellStyle, row), data: row[columnDef] }; //Для колонки даты if (columnDef.name.indexOf("PLAN_FACT") >= 0) { //Получаем текущий день @@ -121,10 +88,8 @@ const dataCellRender = ({ row, columnDef, handleProdOrderClick, handleMatresCode //Формируем regex для проверки let regex = new RegExp(`N_${curDay}.*`, "g"); //Если это значение текущего дня - if (columnDef.name.match(regex)) { - cellStyle = { ...cellStyle, backgroundColor: "lightgrey" }; - } - //Если в колонке есть значени + if (columnDef.name.match(regex)) cellStyle = STYLES.DATA_GRID_CELL_PLAN_FACT(cellStyle); + //Если в колонке есть значение if (row[columnDef.name]) { //Разбиваем его на план/факт let values = row[columnDef.name].split("/"); @@ -140,14 +105,7 @@ const dataCellRender = ({ row, columnDef, handleProdOrderClick, handleMatresCode
) }; - } else { - //Если значения нет - return { - cellProps, - cellStyle, - data: row[columnDef] - }; - } + } else return { cellProps, cellStyle, data: row[columnDef] }; } //Для колонки "Заказ" if (columnDef.name === "SPROD_ORDER") { @@ -162,22 +120,18 @@ const dataCellRender = ({ row, columnDef, handleProdOrderClick, handleMatresCode }; } //Для колонки "Обозначение" - if (columnDef.name === "SMATRES_CODE") { + if (columnDef.name === "SMATRES_CODE") return { cellProps, - cellStyle, + cellStyle: STYLES.DATA_GRID_CELL_MATRES_CODE(cellStyle, row), data: ( handleMatresCodeClick(row["NRN"])}> {row[columnDef.name]} ) }; - } - return { - cellProps, - cellStyle, - data: row[columnDef] - }; + //Для всех остальных + return { cellProps, cellStyle, data: row[columnDef] }; }; //Список каталогов планов @@ -237,7 +191,9 @@ const MechRecDeptCostProdPlans = () => { rows: [], reload: true, pageNumber: 1, - morePages: true + morePages: true, + fixedHeader: false, + fixedColumns: 0 }); //Состояние для фильтра каталогов @@ -287,6 +243,8 @@ const MechRecDeptCostProdPlans = () => { }); setState(pv => ({ ...pv, + fixedHeader: data.XDATA_GRID.fixedHeader, + fixedColumns: data.XDATA_GRID.fixedColumns, columnsDef: data.XCOLUMNS_DEF ? [...data.XCOLUMNS_DEF] : pv.columnsDef, rows: pv.pageNumber == 1 ? [...(data.XROWS || [])] : [...pv.rows, ...(data.XROWS || [])], dataLoaded: true, @@ -373,7 +331,7 @@ const MechRecDeptCostProdPlans = () => { //Генерация содержимого return ( - + <> setState(pv => ({ ...pv, showPlanList: !pv.showPlanList }))}> Планы @@ -393,48 +351,43 @@ const MechRecDeptCostProdPlans = () => {
{state.dataLoaded ? ( - <> - {`Производственный план цеха "${state.selectedPlan.SSUBDIV}" на ${state.selectedPlan.SPERIOD}`} - dataCellRender({ ...prms, handleProdOrderClick, handleMatresCodeClick })} - groupCellRender={groupCellRender} - /> - - ) : !state.selectedPlan.NRN ? ( - + + {`Производственный план цеха "${state.selectedPlan.SSUBDIV}" на ${state.selectedPlan.SPERIOD}`} + + ) : null} + + + + {state.dataLoaded ? ( + dataCellRender({ ...prms, handleProdOrderClick, handleMatresCodeClick })} + groupCellRender={groupCellRender} + /> + ) : !state.selectedPlan.NRN ? ( + + ) : null} + + + + {state.showIncomeFromDeps ? ( + handleProdOrderClick(null)} /> + ) : null} + {state.showFcroutelst ? ( + handleMatresCodeClick(null)} /> ) : null}
- {state.showIncomeFromDeps ? ( - handleProdOrderClick(null)} fullWidth maxWidth="xl"> - - - - - - - - ) : null} - {state.showFcroutelst ? ( - handleMatresCodeClick(null)} fullWidth maxWidth="xl"> - - - - - - - - ) : null} -
+ ); }; diff --git a/p8panels.config b/p8panels.config index 2b88bf9..a2a6abe 100644 --- a/p8panels.config +++ b/p8panels.config @@ -105,7 +105,7 @@ desc="Управление составом сменных заданий цеха/участка" url="mech_rec_cost_jobs_manage" path="mech_rec_cost_jobs_manage" - icon="free_cancellation" + icon="psychology" showInPanelsList="true" preview="./img/mech_rec_cost_prod_plans.jpg"/> Date: Thu, 9 May 2024 20:37:50 +0300 Subject: [PATCH 33/76] =?UTF-8?q?WEB=20APP:=20P8PTable=20-=20=D0=B8=D1=81?= =?UTF-8?q?=D0=BF=D1=80=D0=B0=D0=B2=D0=BB=D0=B5=D0=BD=D0=B0=20=D0=BE=D1=88?= =?UTF-8?q?=D0=B8=D0=B1=D0=BA=D0=B0=20=D0=BF=D0=B5=D1=80=D0=B5=D0=BE=D0=BF?= =?UTF-8?q?=D1=80=D0=B5=D0=B4=D0=B5=D0=BB=D0=B5=D0=BD=D0=B8=D1=8F=20=D0=BF?= =?UTF-8?q?=D0=BE=D0=BB=D1=8C=D0=B7=D0=BE=D0=B2=D0=B0=D1=82=D0=B5=D0=BB?= =?UTF-8?q?=D1=8C=D1=81=D0=BA=D0=BE=D0=B3=D0=BE=20=D1=81=D1=82=D0=B8=D0=BB?= =?UTF-8?q?=D1=8F=20=D1=8F=D1=87=D0=B5=D0=B9=D0=BA=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/components/p8p_table.js | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/app/components/p8p_table.js b/app/components/p8p_table.js index 9d77a0a..43d910b 100644 --- a/app/components/p8p_table.js +++ b/app/components/p8p_table.js @@ -747,9 +747,9 @@ const P8PTable = ({ key={`head-cell-${j}`} align={getAlignByDataType(columnDef)} sx={{ - ...customRender.cellStyle, ...(columnDef.width ? { minWidth: columnDef.width, maxWidth: columnDef.width } : {}), - ...(columnDef.fixed ? STYLES.TABLE_HEAD_CELL_STICKY(theme, columnDef.fixedLeft) : {}) + ...(columnDef.fixed ? STYLES.TABLE_HEAD_CELL_STICKY(theme, columnDef.fixedLeft) : {}), + ...customRender.cellStyle }} rowSpan={columnDef.rowSpan} colSpan={columnDef.colSpan} @@ -826,11 +826,11 @@ const P8PTable = ({ key={`data-cell-${j}`} align={getAlignByDataType(columnDef)} sx={{ - ...customRender.cellStyle, ...(columnDef.width ? { minWidth: columnDef.width, maxWidth: columnDef.width } : {}), - ...(columnDef.fixed ? STYLES.TABLE_CELL_STICKY(theme, columnDef.fixedLeft) : {}) + ...(columnDef.fixed ? STYLES.TABLE_CELL_STICKY(theme, columnDef.fixedLeft) : {}), + ...customRender.cellStyle }} {...customRender.cellProps} > From da5084407a71e92fc63b826f5cad0883306ec7a6 Mon Sep 17 00:00:00 2001 From: Mikhail Chechnev Date: Thu, 9 May 2024 20:40:11 +0300 Subject: [PATCH 34/76] =?UTF-8?q?WEB=20APP:=20P8PSVG=20-=20=D0=BA=D0=BE?= =?UTF-8?q?=D0=BC=D0=BF=D0=BE=D0=BD=D0=B5=D1=82=20=D0=B4=D0=BB=D1=8F=20?= =?UTF-8?q?=D1=80=D0=B0=D0=B1=D0=BE=D1=82=D1=8B=20=D1=81=20=D0=B8=D0=BD?= =?UTF-8?q?=D1=82=D0=B5=D1=80=D0=B0=D0=BA=D1=82=D0=B8=D0=B2=D0=BD=D1=8B?= =?UTF-8?q?=D0=BC=D0=B8=20=D0=B8=D0=B7=D0=BE=D0=B1=D1=80=D0=B0=D0=B6=D0=B5?= =?UTF-8?q?=D0=BD=D0=B8=D1=8F=D0=BC=D0=B8=20=D0=B8=20=D0=BF=D1=80=D0=B8?= =?UTF-8?q?=D0=BC=D0=B5=D1=80=D1=8B=20=D0=B4=D0=BB=D1=8F=20=D0=BD=D0=B5?= =?UTF-8?q?=D0=B3=D0=BE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/components/p8p_svg.js | 94 ++++++++++++++++++++++++++++++ app/panels/samples/samples.js | 4 +- app/panels/samples/svg.js | 103 +++++++++++++++++++++++++++++++++ img/sample.svg | 105 ++++++++++++++++++++++++++++++++++ 4 files changed, 305 insertions(+), 1 deletion(-) create mode 100644 app/components/p8p_svg.js create mode 100644 app/panels/samples/svg.js create mode 100644 img/sample.svg diff --git a/app/components/p8p_svg.js b/app/components/p8p_svg.js new file mode 100644 index 0000000..602d9d9 --- /dev/null +++ b/app/components/p8p_svg.js @@ -0,0 +1,94 @@ +/* + Парус 8 - Панели мониторинга + Компонент: Интерактивные изображения SVG +*/ + +//--------------------- +//Подключение библиотек +//--------------------- + +import React, { useEffect, useRef } from "react"; //Классы React +import PropTypes from "prop-types"; //Контроль свойств компонента + +//--------- +//Константы +//--------- + +//Стили +const STYLES = { + CANVAS: { width: "100%", height: "100%" } +}; + +//Структура элемента изображения +const P8P_SVG_ITEM_SHAPE = PropTypes.shape({ + id: PropTypes.string.isRequired, + backgroundColor: PropTypes.oneOfType([PropTypes.string, PropTypes.arrayOf(PropTypes.string)]) +}); + +//----------- +//Тело модуля +//----------- + +//Интерактивные изображения SVG +const P8PSVG = ({ data, items, onClick, style }) => { + //Ссылки на DOM + const svgContainerRef = useRef(null); + const svgRef = useRef(null); + + //Обработка нажатия на элемент изображения + const handleClick = e => { + if (e.target.id && items && onClick) { + const item = items.find(item => item.id == e.target.id); + if (item) onClick({ item }); + } + }; + + //Формирование интерактивных элементов изображения + const makeSVGItems = () => { + items.forEach(item => { + const svgE = document.getElementById(item.id); + if (svgE) { + svgE.setAttribute("style", `${onClick ? "cursor: pointer" : ""}; ${item.backgroundColor ? `fill: ${item.backgroundColor}` : ""}`); + if (item?.title) { + const titleE = document.createElementNS("http://www.w3.org/2000/svg", "title"); + titleE.textContent = item.title; + svgE.replaceChildren(titleE); + } + } + }); + }; + + //Загрузка изображения + const loadSVG = () => { + const parser = new DOMParser(); + const doc = parser.parseFromString(data, "image/svg+xml"); + svgRef.current = doc.documentElement; + svgRef.current.onclick = handleClick; + svgContainerRef.current.replaceChildren(svgRef.current); + if (items) makeSVGItems(items); + }; + + //При обновлении данных + useEffect(() => { + console.log(items); + loadSVG(); + // eslint-disable-next-line react-hooks/exhaustive-deps + }, [data, items]); + + //Генерация содержимого + return
; +}; + +//Контроль свойств - Интерактивные изображения SVG +P8PSVG.propTypes = { + data: PropTypes.string.isRequired, + items: PropTypes.arrayOf(P8P_SVG_ITEM_SHAPE), + onClick: PropTypes.func, + style: PropTypes.object +}; + +//---------------- +//Интерфейс модуля +//---------------- + +export { P8PSVG }; diff --git a/app/panels/samples/samples.js b/app/panels/samples/samples.js index 323ef08..cbf8df8 100644 --- a/app/panels/samples/samples.js +++ b/app/panels/samples/samples.js @@ -17,6 +17,7 @@ import { Loader } from "./loader"; //Пример: Индикатор проце import { DataGrid } from "./data_grid"; //Пример: Таблица данных "P8PDataGrid" import { Chart } from "./chart"; //Пример: Графики "P8PChart" import { Gantt } from "./gantt"; //Пример: Диаграмма Ганта "P8PGantt" +import { Svg } from "./svg"; //Пример: Интерактивные изображения "P8PSVG" //--------- //Константы @@ -30,7 +31,8 @@ const MODES = { LOADER: { name: "LOADER", caption: "Индикатор процесса", component: Loader }, DATAGRID: { name: "DATAGRID", caption: 'Таблица данных "P8PDataGrid"', component: DataGrid }, CHART: { name: "CHART", caption: 'Графики "P8PChart"', component: Chart }, - GANTT: { name: "GANTT", caption: 'Диаграмма Ганта "P8PGantt"', component: Gantt } + GANTT: { name: "GANTT", caption: 'Диаграмма Ганта "P8PGantt"', component: Gantt }, + SVG: { name: "SVG", caption: 'Интерактивные изображения "P8PSVG"', component: Svg } }; //Стили diff --git a/app/panels/samples/svg.js b/app/panels/samples/svg.js new file mode 100644 index 0000000..04460d3 --- /dev/null +++ b/app/panels/samples/svg.js @@ -0,0 +1,103 @@ +/* + Парус 8 - Панели мониторинга - Примеры для разработчиков + Пример: Интерактивные изображения "P8PSVG" +*/ + +//--------------------- +//Подключение библиотек +//--------------------- + +import React, { useState, useEffect } from "react"; //Классы React +import PropTypes from "prop-types"; //Контроль свойств компонента +import { Typography, Grid, FormControl, FormLabel, RadioGroup, FormControlLabel, Radio } from "@mui/material"; //Интерфейсные элементы +import { P8PSVG } from "../../components/p8p_svg"; //Интерактивные изображения + +//--------- +//Константы +//--------- + +//Адрес тестового изображения +const SAMPLE_URL = "http://localhost:8080/P8WebClient/Modules/p8-panels/img/sample.svg"; + +//Стили +const STYLES = { + CONTAINER: { textAlign: "center", paddingTop: "20px" }, + TITLE: { paddingBottom: "15px" }, + SVG: { width: "95vw", height: "60vw", display: "flex", justifyContent: "center" } +}; + +//----------- +//Тело модуля +//----------- + +//Пример: Интерактивные изображения "P8PSVG" +const Svg = ({ title }) => { + //Собственное состояние - SVG-изображение + const [svg, setSVG] = useState({ + loaded: false, + data: null, + mode: "items1", + items1: [ + { id: "1", backgroundColor: "red", desc: "Цифра на флюзеляже" }, + { id: "2", backgroundColor: "magenta", desc: "Ребро флюзеляжа" }, + { id: "3", backgroundColor: "yellow", desc: "Люк" } + ], + items2: [ + { id: "4", backgroundColor: "green", desc: "Хвост", title: "Хвост" }, + { id: "5", backgroundColor: "blue", desc: "Хвостовой руль", title: "Хвостовой руль" }, + { id: "6", backgroundColor: "aquamarine", desc: "Ребро жесткости хвоста", title: "Ребро жесткости хвоста" } + ], + selectedItemDesc: "" + }); + + //Загрузка изображения + const loadSVG = async () => { + const resp = await fetch(SAMPLE_URL); + const data = await resp.text(); + setSVG(pv => ({ ...pv, loaded: true, data })); + }; + + //Отработка нажатия на элемент изображения + const handleSVGItemClick = ({ item }) => { + setSVG(pv => ({ ...pv, selectedItemDesc: item?.desc ? `Выбран элемент: ${item.desc}` : "Для выбранного элемента не задано описание" })); + }; + + //При подключении к странице + useEffect(() => { + loadSVG(); + // eslint-disable-next-line react-hooks/exhaustive-deps + }, []); + + //Генерация содержимого + return ( +
+ + {title} + + + Группа элементов + setSVG(pv => ({ ...pv, mode: e.target.value, selectedItemDesc: "" }))}> + } label="Элементы первой группы" /> + } label="Элементы второй группы" /> + + {svg.selectedItemDesc ? svg.selectedItemDesc : "Нажмите на элемент изображения для получения его описания"} + + + + {svg.loaded ? : null} + + +
+ ); +}; + +//Контроль свойств - Пример: Интерактивные изображения "P8PSVG" +Svg.propTypes = { + title: PropTypes.string.isRequired +}; + +//---------------- +//Интерфейс модуля +//---------------- + +export { Svg }; diff --git a/img/sample.svg b/img/sample.svg new file mode 100644 index 0000000..54a7426 --- /dev/null +++ b/img/sample.svg @@ -0,0 +1,105 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + From dca2a12d3b0ff72ef0b8168ffeabb83b171a1560 Mon Sep 17 00:00:00 2001 From: Mikhail Chechnev Date: Thu, 9 May 2024 20:40:37 +0300 Subject: [PATCH 35/76] =?UTF-8?q?WEB=20APP:=20=D0=A1=D0=B2=D0=B5=D0=B6?= =?UTF-8?q?=D0=B0=D1=8F=20=D1=81=D0=B1=D0=BE=D1=80=D0=BA=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- dist/p8-panels.js | 490 +++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 487 insertions(+), 3 deletions(-) diff --git a/dist/p8-panels.js b/dist/p8-panels.js index c94a160..36cc741 100644 --- a/dist/p8-panels.js +++ b/dist/p8-panels.js @@ -15,7 +15,7 @@ \***********************************/ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { -eval("var map = {\n\t\"./dummy\": \"./app/panels/dummy/index.js\",\n\t\"./dummy/\": \"./app/panels/dummy/index.js\",\n\t\"./dummy/dummy\": \"./app/panels/dummy/dummy.js\",\n\t\"./dummy/dummy.js\": \"./app/panels/dummy/dummy.js\",\n\t\"./dummy/index\": \"./app/panels/dummy/index.js\",\n\t\"./dummy/index.js\": \"./app/panels/dummy/index.js\",\n\t\"./eqs_prfrm\": \"./app/panels/eqs_prfrm/index.js\",\n\t\"./eqs_prfrm/\": \"./app/panels/eqs_prfrm/index.js\",\n\t\"./eqs_prfrm/eqs_prfrm\": \"./app/panels/eqs_prfrm/eqs_prfrm.js\",\n\t\"./eqs_prfrm/eqs_prfrm.js\": \"./app/panels/eqs_prfrm/eqs_prfrm.js\",\n\t\"./eqs_prfrm/index\": \"./app/panels/eqs_prfrm/index.js\",\n\t\"./eqs_prfrm/index.js\": \"./app/panels/eqs_prfrm/index.js\",\n\t\"./eqs_prfrm/layouts\": \"./app/panels/eqs_prfrm/layouts.js\",\n\t\"./eqs_prfrm/layouts.js\": \"./app/panels/eqs_prfrm/layouts.js\",\n\t\"./mech_rec_cost_prod_plans\": \"./app/panels/mech_rec_cost_prod_plans/index.js\",\n\t\"./mech_rec_cost_prod_plans/\": \"./app/panels/mech_rec_cost_prod_plans/index.js\",\n\t\"./mech_rec_cost_prod_plans/datagrids/backend_dg\": \"./app/panels/mech_rec_cost_prod_plans/datagrids/backend_dg.js\",\n\t\"./mech_rec_cost_prod_plans/datagrids/backend_dg.js\": \"./app/panels/mech_rec_cost_prod_plans/datagrids/backend_dg.js\",\n\t\"./mech_rec_cost_prod_plans/datagrids/fcdeliverylistsp\": \"./app/panels/mech_rec_cost_prod_plans/datagrids/fcdeliverylistsp.js\",\n\t\"./mech_rec_cost_prod_plans/datagrids/fcdeliverylistsp.js\": \"./app/panels/mech_rec_cost_prod_plans/datagrids/fcdeliverylistsp.js\",\n\t\"./mech_rec_cost_prod_plans/datagrids/fcroutlst\": \"./app/panels/mech_rec_cost_prod_plans/datagrids/fcroutlst.js\",\n\t\"./mech_rec_cost_prod_plans/datagrids/fcroutlst.js\": \"./app/panels/mech_rec_cost_prod_plans/datagrids/fcroutlst.js\",\n\t\"./mech_rec_cost_prod_plans/datagrids/goodparties\": \"./app/panels/mech_rec_cost_prod_plans/datagrids/goodparties.js\",\n\t\"./mech_rec_cost_prod_plans/datagrids/goodparties.js\": \"./app/panels/mech_rec_cost_prod_plans/datagrids/goodparties.js\",\n\t\"./mech_rec_cost_prod_plans/datagrids/incomefromdeps\": \"./app/panels/mech_rec_cost_prod_plans/datagrids/incomefromdeps.js\",\n\t\"./mech_rec_cost_prod_plans/datagrids/incomefromdeps.js\": \"./app/panels/mech_rec_cost_prod_plans/datagrids/incomefromdeps.js\",\n\t\"./mech_rec_cost_prod_plans/hooks\": \"./app/panels/mech_rec_cost_prod_plans/hooks.js\",\n\t\"./mech_rec_cost_prod_plans/hooks.js\": \"./app/panels/mech_rec_cost_prod_plans/hooks.js\",\n\t\"./mech_rec_cost_prod_plans/index\": \"./app/panels/mech_rec_cost_prod_plans/index.js\",\n\t\"./mech_rec_cost_prod_plans/index.js\": \"./app/panels/mech_rec_cost_prod_plans/index.js\",\n\t\"./mech_rec_cost_prod_plans/mech_rec_cost_prod_plans\": \"./app/panels/mech_rec_cost_prod_plans/mech_rec_cost_prod_plans.js\",\n\t\"./mech_rec_cost_prod_plans/mech_rec_cost_prod_plans.js\": \"./app/panels/mech_rec_cost_prod_plans/mech_rec_cost_prod_plans.js\",\n\t\"./prj_fin\": \"./app/panels/prj_fin/index.js\",\n\t\"./prj_fin/\": \"./app/panels/prj_fin/index.js\",\n\t\"./prj_fin/index\": \"./app/panels/prj_fin/index.js\",\n\t\"./prj_fin/index.js\": \"./app/panels/prj_fin/index.js\",\n\t\"./prj_fin/layouts\": \"./app/panels/prj_fin/layouts.js\",\n\t\"./prj_fin/layouts.js\": \"./app/panels/prj_fin/layouts.js\",\n\t\"./prj_fin/prj_fin\": \"./app/panels/prj_fin/prj_fin.js\",\n\t\"./prj_fin/prj_fin.js\": \"./app/panels/prj_fin/prj_fin.js\",\n\t\"./prj_fin/projects\": \"./app/panels/prj_fin/projects.js\",\n\t\"./prj_fin/projects.js\": \"./app/panels/prj_fin/projects.js\",\n\t\"./prj_fin/stage_arts\": \"./app/panels/prj_fin/stage_arts.js\",\n\t\"./prj_fin/stage_arts.js\": \"./app/panels/prj_fin/stage_arts.js\",\n\t\"./prj_fin/stage_contracts\": \"./app/panels/prj_fin/stage_contracts.js\",\n\t\"./prj_fin/stage_contracts.js\": \"./app/panels/prj_fin/stage_contracts.js\",\n\t\"./prj_fin/stages\": \"./app/panels/prj_fin/stages.js\",\n\t\"./prj_fin/stages.js\": \"./app/panels/prj_fin/stages.js\",\n\t\"./prj_graph\": \"./app/panels/prj_graph/index.js\",\n\t\"./prj_graph/\": \"./app/panels/prj_graph/index.js\",\n\t\"./prj_graph/index\": \"./app/panels/prj_graph/index.js\",\n\t\"./prj_graph/index.js\": \"./app/panels/prj_graph/index.js\",\n\t\"./prj_graph/layouts\": \"./app/panels/prj_graph/layouts.js\",\n\t\"./prj_graph/layouts.js\": \"./app/panels/prj_graph/layouts.js\",\n\t\"./prj_graph/prj_graph\": \"./app/panels/prj_graph/prj_graph.js\",\n\t\"./prj_graph/prj_graph.js\": \"./app/panels/prj_graph/prj_graph.js\",\n\t\"./prj_help\": \"./app/panels/prj_help/index.js\",\n\t\"./prj_help/\": \"./app/panels/prj_help/index.js\",\n\t\"./prj_help/img/211.png\": \"./app/panels/prj_help/img/211.png\",\n\t\"./prj_help/img/212.png\": \"./app/panels/prj_help/img/212.png\",\n\t\"./prj_help/img/213.png\": \"./app/panels/prj_help/img/213.png\",\n\t\"./prj_help/img/214.png\": \"./app/panels/prj_help/img/214.png\",\n\t\"./prj_help/img/215.png\": \"./app/panels/prj_help/img/215.png\",\n\t\"./prj_help/img/221.png\": \"./app/panels/prj_help/img/221.png\",\n\t\"./prj_help/img/222.png\": \"./app/panels/prj_help/img/222.png\",\n\t\"./prj_help/img/223.png\": \"./app/panels/prj_help/img/223.png\",\n\t\"./prj_help/img/231.png\": \"./app/panels/prj_help/img/231.png\",\n\t\"./prj_help/img/232.png\": \"./app/panels/prj_help/img/232.png\",\n\t\"./prj_help/img/241.png\": \"./app/panels/prj_help/img/241.png\",\n\t\"./prj_help/img/242.png\": \"./app/panels/prj_help/img/242.png\",\n\t\"./prj_help/img/243.png\": \"./app/panels/prj_help/img/243.png\",\n\t\"./prj_help/img/244.png\": \"./app/panels/prj_help/img/244.png\",\n\t\"./prj_help/img/245.png\": \"./app/panels/prj_help/img/245.png\",\n\t\"./prj_help/img/31.png\": \"./app/panels/prj_help/img/31.png\",\n\t\"./prj_help/img/32.png\": \"./app/panels/prj_help/img/32.png\",\n\t\"./prj_help/img/33.png\": \"./app/panels/prj_help/img/33.png\",\n\t\"./prj_help/img/34.png\": \"./app/panels/prj_help/img/34.png\",\n\t\"./prj_help/img/35.png\": \"./app/panels/prj_help/img/35.png\",\n\t\"./prj_help/img/36.png\": \"./app/panels/prj_help/img/36.png\",\n\t\"./prj_help/img/411.png\": \"./app/panels/prj_help/img/411.png\",\n\t\"./prj_help/img/412.png\": \"./app/panels/prj_help/img/412.png\",\n\t\"./prj_help/img/421.png\": \"./app/panels/prj_help/img/421.png\",\n\t\"./prj_help/img/422.png\": \"./app/panels/prj_help/img/422.png\",\n\t\"./prj_help/img/431.png\": \"./app/panels/prj_help/img/431.png\",\n\t\"./prj_help/img/432.png\": \"./app/panels/prj_help/img/432.png\",\n\t\"./prj_help/img/433.png\": \"./app/panels/prj_help/img/433.png\",\n\t\"./prj_help/img/434.png\": \"./app/panels/prj_help/img/434.png\",\n\t\"./prj_help/img/441.png\": \"./app/panels/prj_help/img/441.png\",\n\t\"./prj_help/img/442.png\": \"./app/panels/prj_help/img/442.png\",\n\t\"./prj_help/img/443.png\": \"./app/panels/prj_help/img/443.png\",\n\t\"./prj_help/img/444.png\": \"./app/panels/prj_help/img/444.png\",\n\t\"./prj_help/img/451.png\": \"./app/panels/prj_help/img/451.png\",\n\t\"./prj_help/img/461.png\": \"./app/panels/prj_help/img/461.png\",\n\t\"./prj_help/img/471.png\": \"./app/panels/prj_help/img/471.png\",\n\t\"./prj_help/img/711.png\": \"./app/panels/prj_help/img/711.png\",\n\t\"./prj_help/img/721.png\": \"./app/panels/prj_help/img/721.png\",\n\t\"./prj_help/img/722.png\": \"./app/panels/prj_help/img/722.png\",\n\t\"./prj_help/img/723.png\": \"./app/panels/prj_help/img/723.png\",\n\t\"./prj_help/img/741.png\": \"./app/panels/prj_help/img/741.png\",\n\t\"./prj_help/index\": \"./app/panels/prj_help/index.js\",\n\t\"./prj_help/index.js\": \"./app/panels/prj_help/index.js\",\n\t\"./prj_help/prj_help\": \"./app/panels/prj_help/prj_help.js\",\n\t\"./prj_help/prj_help.js\": \"./app/panels/prj_help/prj_help.js\",\n\t\"./prj_jobs\": \"./app/panels/prj_jobs/index.js\",\n\t\"./prj_jobs/\": \"./app/panels/prj_jobs/index.js\",\n\t\"./prj_jobs/index\": \"./app/panels/prj_jobs/index.js\",\n\t\"./prj_jobs/index.js\": \"./app/panels/prj_jobs/index.js\",\n\t\"./prj_jobs/lab_fact_rpt_dtl\": \"./app/panels/prj_jobs/lab_fact_rpt_dtl.js\",\n\t\"./prj_jobs/lab_fact_rpt_dtl.js\": \"./app/panels/prj_jobs/lab_fact_rpt_dtl.js\",\n\t\"./prj_jobs/lab_plan_fot_dtl\": \"./app/panels/prj_jobs/lab_plan_fot_dtl.js\",\n\t\"./prj_jobs/lab_plan_fot_dtl.js\": \"./app/panels/prj_jobs/lab_plan_fot_dtl.js\",\n\t\"./prj_jobs/lab_plan_jobs_dtl\": \"./app/panels/prj_jobs/lab_plan_jobs_dtl.js\",\n\t\"./prj_jobs/lab_plan_jobs_dtl.js\": \"./app/panels/prj_jobs/lab_plan_jobs_dtl.js\",\n\t\"./prj_jobs/layouts\": \"./app/panels/prj_jobs/layouts.js\",\n\t\"./prj_jobs/layouts.js\": \"./app/panels/prj_jobs/layouts.js\",\n\t\"./prj_jobs/prj_jobs\": \"./app/panels/prj_jobs/prj_jobs.js\",\n\t\"./prj_jobs/prj_jobs.js\": \"./app/panels/prj_jobs/prj_jobs.js\",\n\t\"./prj_jobs/res_mon\": \"./app/panels/prj_jobs/res_mon.js\",\n\t\"./prj_jobs/res_mon.js\": \"./app/panels/prj_jobs/res_mon.js\",\n\t\"./samples\": \"./app/panels/samples/index.js\",\n\t\"./samples/\": \"./app/panels/samples/index.js\",\n\t\"./samples/chart\": \"./app/panels/samples/chart.js\",\n\t\"./samples/chart.js\": \"./app/panels/samples/chart.js\",\n\t\"./samples/data_grid\": \"./app/panels/samples/data_grid.js\",\n\t\"./samples/data_grid.js\": \"./app/panels/samples/data_grid.js\",\n\t\"./samples/gantt\": \"./app/panels/samples/gantt.js\",\n\t\"./samples/gantt.js\": \"./app/panels/samples/gantt.js\",\n\t\"./samples/index\": \"./app/panels/samples/index.js\",\n\t\"./samples/index.js\": \"./app/panels/samples/index.js\",\n\t\"./samples/loader\": \"./app/panels/samples/loader.js\",\n\t\"./samples/loader.js\": \"./app/panels/samples/loader.js\",\n\t\"./samples/messages\": \"./app/panels/samples/messages.js\",\n\t\"./samples/messages.js\": \"./app/panels/samples/messages.js\",\n\t\"./samples/mui\": \"./app/panels/samples/mui.js\",\n\t\"./samples/mui.js\": \"./app/panels/samples/mui.js\",\n\t\"./samples/p8online\": \"./app/panels/samples/p8online.js\",\n\t\"./samples/p8online.js\": \"./app/panels/samples/p8online.js\",\n\t\"./samples/samples\": \"./app/panels/samples/samples.js\",\n\t\"./samples/samples.js\": \"./app/panels/samples/samples.js\"\n};\n\n\nfunction webpackContext(req) {\n\tvar id = webpackContextResolve(req);\n\treturn __webpack_require__(id);\n}\nfunction webpackContextResolve(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t}\n\treturn map[req];\n}\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = \"./app/panels sync recursive ^\\\\.\\\\/.*$\";\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/panels/_sync_^\\.\\/.*$?"); +eval("var map = {\n\t\"./dummy\": \"./app/panels/dummy/index.js\",\n\t\"./dummy/\": \"./app/panels/dummy/index.js\",\n\t\"./dummy/dummy\": \"./app/panels/dummy/dummy.js\",\n\t\"./dummy/dummy.js\": \"./app/panels/dummy/dummy.js\",\n\t\"./dummy/index\": \"./app/panels/dummy/index.js\",\n\t\"./dummy/index.js\": \"./app/panels/dummy/index.js\",\n\t\"./eqs_prfrm\": \"./app/panels/eqs_prfrm/index.js\",\n\t\"./eqs_prfrm/\": \"./app/panels/eqs_prfrm/index.js\",\n\t\"./eqs_prfrm/eqs_prfrm\": \"./app/panels/eqs_prfrm/eqs_prfrm.js\",\n\t\"./eqs_prfrm/eqs_prfrm.js\": \"./app/panels/eqs_prfrm/eqs_prfrm.js\",\n\t\"./eqs_prfrm/index\": \"./app/panels/eqs_prfrm/index.js\",\n\t\"./eqs_prfrm/index.js\": \"./app/panels/eqs_prfrm/index.js\",\n\t\"./eqs_prfrm/layouts\": \"./app/panels/eqs_prfrm/layouts.js\",\n\t\"./eqs_prfrm/layouts.js\": \"./app/panels/eqs_prfrm/layouts.js\",\n\t\"./mech_rec_assembly_mon\": \"./app/panels/mech_rec_assembly_mon/index.js\",\n\t\"./mech_rec_assembly_mon/\": \"./app/panels/mech_rec_assembly_mon/index.js\",\n\t\"./mech_rec_assembly_mon/backend\": \"./app/panels/mech_rec_assembly_mon/backend.js\",\n\t\"./mech_rec_assembly_mon/backend.js\": \"./app/panels/mech_rec_assembly_mon/backend.js\",\n\t\"./mech_rec_assembly_mon/blocks/cardBlock\": \"./app/panels/mech_rec_assembly_mon/blocks/cardBlock.js\",\n\t\"./mech_rec_assembly_mon/blocks/cardBlock.js\": \"./app/panels/mech_rec_assembly_mon/blocks/cardBlock.js\",\n\t\"./mech_rec_assembly_mon/blocks/cardDetail\": \"./app/panels/mech_rec_assembly_mon/blocks/cardDetail.js\",\n\t\"./mech_rec_assembly_mon/blocks/cardDetail.js\": \"./app/panels/mech_rec_assembly_mon/blocks/cardDetail.js\",\n\t\"./mech_rec_assembly_mon/elements/progressBox\": \"./app/panels/mech_rec_assembly_mon/elements/progressBox.js\",\n\t\"./mech_rec_assembly_mon/elements/progressBox.js\": \"./app/panels/mech_rec_assembly_mon/elements/progressBox.js\",\n\t\"./mech_rec_assembly_mon/hooks\": \"./app/panels/mech_rec_assembly_mon/hooks.js\",\n\t\"./mech_rec_assembly_mon/hooks.js\": \"./app/panels/mech_rec_assembly_mon/hooks.js\",\n\t\"./mech_rec_assembly_mon/index\": \"./app/panels/mech_rec_assembly_mon/index.js\",\n\t\"./mech_rec_assembly_mon/index.js\": \"./app/panels/mech_rec_assembly_mon/index.js\",\n\t\"./mech_rec_assembly_mon/mech_rec_assembly_mon\": \"./app/panels/mech_rec_assembly_mon/mech_rec_assembly_mon.js\",\n\t\"./mech_rec_assembly_mon/mech_rec_assembly_mon.js\": \"./app/panels/mech_rec_assembly_mon/mech_rec_assembly_mon.js\",\n\t\"./mech_rec_assembly_mon/styles/themes\": \"./app/panels/mech_rec_assembly_mon/styles/themes.js\",\n\t\"./mech_rec_assembly_mon/styles/themes.js\": \"./app/panels/mech_rec_assembly_mon/styles/themes.js\",\n\t\"./mech_rec_cost_jobs_manage\": \"./app/panels/mech_rec_cost_jobs_manage/index.js\",\n\t\"./mech_rec_cost_jobs_manage/\": \"./app/panels/mech_rec_cost_jobs_manage/index.js\",\n\t\"./mech_rec_cost_jobs_manage/backend\": \"./app/panels/mech_rec_cost_jobs_manage/backend.js\",\n\t\"./mech_rec_cost_jobs_manage/backend.js\": \"./app/panels/mech_rec_cost_jobs_manage/backend.js\",\n\t\"./mech_rec_cost_jobs_manage/fcjobssp\": \"./app/panels/mech_rec_cost_jobs_manage/fcjobssp.js\",\n\t\"./mech_rec_cost_jobs_manage/fcjobssp.js\": \"./app/panels/mech_rec_cost_jobs_manage/fcjobssp.js\",\n\t\"./mech_rec_cost_jobs_manage/hooks\": \"./app/panels/mech_rec_cost_jobs_manage/hooks.js\",\n\t\"./mech_rec_cost_jobs_manage/hooks.js\": \"./app/panels/mech_rec_cost_jobs_manage/hooks.js\",\n\t\"./mech_rec_cost_jobs_manage/index\": \"./app/panels/mech_rec_cost_jobs_manage/index.js\",\n\t\"./mech_rec_cost_jobs_manage/index.js\": \"./app/panels/mech_rec_cost_jobs_manage/index.js\",\n\t\"./mech_rec_cost_jobs_manage/mech_rec_cost_jobs_manage\": \"./app/panels/mech_rec_cost_jobs_manage/mech_rec_cost_jobs_manage.js\",\n\t\"./mech_rec_cost_jobs_manage/mech_rec_cost_jobs_manage.js\": \"./app/panels/mech_rec_cost_jobs_manage/mech_rec_cost_jobs_manage.js\",\n\t\"./mech_rec_cost_prod_plans\": \"./app/panels/mech_rec_cost_prod_plans/index.js\",\n\t\"./mech_rec_cost_prod_plans/\": \"./app/panels/mech_rec_cost_prod_plans/index.js\",\n\t\"./mech_rec_cost_prod_plans/datagrids/backend_dg\": \"./app/panels/mech_rec_cost_prod_plans/datagrids/backend_dg.js\",\n\t\"./mech_rec_cost_prod_plans/datagrids/backend_dg.js\": \"./app/panels/mech_rec_cost_prod_plans/datagrids/backend_dg.js\",\n\t\"./mech_rec_cost_prod_plans/datagrids/fcdeliverylistsp\": \"./app/panels/mech_rec_cost_prod_plans/datagrids/fcdeliverylistsp.js\",\n\t\"./mech_rec_cost_prod_plans/datagrids/fcdeliverylistsp.js\": \"./app/panels/mech_rec_cost_prod_plans/datagrids/fcdeliverylistsp.js\",\n\t\"./mech_rec_cost_prod_plans/datagrids/fcroutlst\": \"./app/panels/mech_rec_cost_prod_plans/datagrids/fcroutlst.js\",\n\t\"./mech_rec_cost_prod_plans/datagrids/fcroutlst.js\": \"./app/panels/mech_rec_cost_prod_plans/datagrids/fcroutlst.js\",\n\t\"./mech_rec_cost_prod_plans/datagrids/goodparties\": \"./app/panels/mech_rec_cost_prod_plans/datagrids/goodparties.js\",\n\t\"./mech_rec_cost_prod_plans/datagrids/goodparties.js\": \"./app/panels/mech_rec_cost_prod_plans/datagrids/goodparties.js\",\n\t\"./mech_rec_cost_prod_plans/datagrids/incomefromdeps\": \"./app/panels/mech_rec_cost_prod_plans/datagrids/incomefromdeps.js\",\n\t\"./mech_rec_cost_prod_plans/datagrids/incomefromdeps.js\": \"./app/panels/mech_rec_cost_prod_plans/datagrids/incomefromdeps.js\",\n\t\"./mech_rec_cost_prod_plans/hooks\": \"./app/panels/mech_rec_cost_prod_plans/hooks.js\",\n\t\"./mech_rec_cost_prod_plans/hooks.js\": \"./app/panels/mech_rec_cost_prod_plans/hooks.js\",\n\t\"./mech_rec_cost_prod_plans/index\": \"./app/panels/mech_rec_cost_prod_plans/index.js\",\n\t\"./mech_rec_cost_prod_plans/index.js\": \"./app/panels/mech_rec_cost_prod_plans/index.js\",\n\t\"./mech_rec_cost_prod_plans/mech_rec_cost_prod_plans\": \"./app/panels/mech_rec_cost_prod_plans/mech_rec_cost_prod_plans.js\",\n\t\"./mech_rec_cost_prod_plans/mech_rec_cost_prod_plans.js\": \"./app/panels/mech_rec_cost_prod_plans/mech_rec_cost_prod_plans.js\",\n\t\"./mech_rec_dept_cost_jobs\": \"./app/panels/mech_rec_dept_cost_jobs/index.js\",\n\t\"./mech_rec_dept_cost_jobs/\": \"./app/panels/mech_rec_dept_cost_jobs/index.js\",\n\t\"./mech_rec_dept_cost_jobs/index\": \"./app/panels/mech_rec_dept_cost_jobs/index.js\",\n\t\"./mech_rec_dept_cost_jobs/index.js\": \"./app/panels/mech_rec_dept_cost_jobs/index.js\",\n\t\"./mech_rec_dept_cost_jobs/mech_rec_dept_cost_jobs\": \"./app/panels/mech_rec_dept_cost_jobs/mech_rec_dept_cost_jobs.js\",\n\t\"./mech_rec_dept_cost_jobs/mech_rec_dept_cost_jobs.js\": \"./app/panels/mech_rec_dept_cost_jobs/mech_rec_dept_cost_jobs.js\",\n\t\"./mech_rec_dept_cost_prod_plans\": \"./app/panels/mech_rec_dept_cost_prod_plans/index.js\",\n\t\"./mech_rec_dept_cost_prod_plans/\": \"./app/panels/mech_rec_dept_cost_prod_plans/index.js\",\n\t\"./mech_rec_dept_cost_prod_plans/fcroutlst\": \"./app/panels/mech_rec_dept_cost_prod_plans/fcroutlst.js\",\n\t\"./mech_rec_dept_cost_prod_plans/fcroutlst.js\": \"./app/panels/mech_rec_dept_cost_prod_plans/fcroutlst.js\",\n\t\"./mech_rec_dept_cost_prod_plans/fcroutlstord\": \"./app/panels/mech_rec_dept_cost_prod_plans/fcroutlstord.js\",\n\t\"./mech_rec_dept_cost_prod_plans/fcroutlstord.js\": \"./app/panels/mech_rec_dept_cost_prod_plans/fcroutlstord.js\",\n\t\"./mech_rec_dept_cost_prod_plans/hooks\": \"./app/panels/mech_rec_dept_cost_prod_plans/hooks.js\",\n\t\"./mech_rec_dept_cost_prod_plans/hooks.js\": \"./app/panels/mech_rec_dept_cost_prod_plans/hooks.js\",\n\t\"./mech_rec_dept_cost_prod_plans/incomefromdeps\": \"./app/panels/mech_rec_dept_cost_prod_plans/incomefromdeps.js\",\n\t\"./mech_rec_dept_cost_prod_plans/incomefromdeps.js\": \"./app/panels/mech_rec_dept_cost_prod_plans/incomefromdeps.js\",\n\t\"./mech_rec_dept_cost_prod_plans/index\": \"./app/panels/mech_rec_dept_cost_prod_plans/index.js\",\n\t\"./mech_rec_dept_cost_prod_plans/index.js\": \"./app/panels/mech_rec_dept_cost_prod_plans/index.js\",\n\t\"./mech_rec_dept_cost_prod_plans/mech_rec_dept_cost_prod_plans\": \"./app/panels/mech_rec_dept_cost_prod_plans/mech_rec_dept_cost_prod_plans.js\",\n\t\"./mech_rec_dept_cost_prod_plans/mech_rec_dept_cost_prod_plans.js\": \"./app/panels/mech_rec_dept_cost_prod_plans/mech_rec_dept_cost_prod_plans.js\",\n\t\"./prj_fin\": \"./app/panels/prj_fin/index.js\",\n\t\"./prj_fin/\": \"./app/panels/prj_fin/index.js\",\n\t\"./prj_fin/index\": \"./app/panels/prj_fin/index.js\",\n\t\"./prj_fin/index.js\": \"./app/panels/prj_fin/index.js\",\n\t\"./prj_fin/layouts\": \"./app/panels/prj_fin/layouts.js\",\n\t\"./prj_fin/layouts.js\": \"./app/panels/prj_fin/layouts.js\",\n\t\"./prj_fin/prj_fin\": \"./app/panels/prj_fin/prj_fin.js\",\n\t\"./prj_fin/prj_fin.js\": \"./app/panels/prj_fin/prj_fin.js\",\n\t\"./prj_fin/projects\": \"./app/panels/prj_fin/projects.js\",\n\t\"./prj_fin/projects.js\": \"./app/panels/prj_fin/projects.js\",\n\t\"./prj_fin/stage_arts\": \"./app/panels/prj_fin/stage_arts.js\",\n\t\"./prj_fin/stage_arts.js\": \"./app/panels/prj_fin/stage_arts.js\",\n\t\"./prj_fin/stage_contracts\": \"./app/panels/prj_fin/stage_contracts.js\",\n\t\"./prj_fin/stage_contracts.js\": \"./app/panels/prj_fin/stage_contracts.js\",\n\t\"./prj_fin/stages\": \"./app/panels/prj_fin/stages.js\",\n\t\"./prj_fin/stages.js\": \"./app/panels/prj_fin/stages.js\",\n\t\"./prj_graph\": \"./app/panels/prj_graph/index.js\",\n\t\"./prj_graph/\": \"./app/panels/prj_graph/index.js\",\n\t\"./prj_graph/index\": \"./app/panels/prj_graph/index.js\",\n\t\"./prj_graph/index.js\": \"./app/panels/prj_graph/index.js\",\n\t\"./prj_graph/layouts\": \"./app/panels/prj_graph/layouts.js\",\n\t\"./prj_graph/layouts.js\": \"./app/panels/prj_graph/layouts.js\",\n\t\"./prj_graph/prj_graph\": \"./app/panels/prj_graph/prj_graph.js\",\n\t\"./prj_graph/prj_graph.js\": \"./app/panels/prj_graph/prj_graph.js\",\n\t\"./prj_help\": \"./app/panels/prj_help/index.js\",\n\t\"./prj_help/\": \"./app/panels/prj_help/index.js\",\n\t\"./prj_help/img/211.png\": \"./app/panels/prj_help/img/211.png\",\n\t\"./prj_help/img/212.png\": \"./app/panels/prj_help/img/212.png\",\n\t\"./prj_help/img/213.png\": \"./app/panels/prj_help/img/213.png\",\n\t\"./prj_help/img/214.png\": \"./app/panels/prj_help/img/214.png\",\n\t\"./prj_help/img/215.png\": \"./app/panels/prj_help/img/215.png\",\n\t\"./prj_help/img/221.png\": \"./app/panels/prj_help/img/221.png\",\n\t\"./prj_help/img/222.png\": \"./app/panels/prj_help/img/222.png\",\n\t\"./prj_help/img/223.png\": \"./app/panels/prj_help/img/223.png\",\n\t\"./prj_help/img/231.png\": \"./app/panels/prj_help/img/231.png\",\n\t\"./prj_help/img/232.png\": \"./app/panels/prj_help/img/232.png\",\n\t\"./prj_help/img/241.png\": \"./app/panels/prj_help/img/241.png\",\n\t\"./prj_help/img/242.png\": \"./app/panels/prj_help/img/242.png\",\n\t\"./prj_help/img/243.png\": \"./app/panels/prj_help/img/243.png\",\n\t\"./prj_help/img/244.png\": \"./app/panels/prj_help/img/244.png\",\n\t\"./prj_help/img/245.png\": \"./app/panels/prj_help/img/245.png\",\n\t\"./prj_help/img/31.png\": \"./app/panels/prj_help/img/31.png\",\n\t\"./prj_help/img/32.png\": \"./app/panels/prj_help/img/32.png\",\n\t\"./prj_help/img/33.png\": \"./app/panels/prj_help/img/33.png\",\n\t\"./prj_help/img/34.png\": \"./app/panels/prj_help/img/34.png\",\n\t\"./prj_help/img/35.png\": \"./app/panels/prj_help/img/35.png\",\n\t\"./prj_help/img/36.png\": \"./app/panels/prj_help/img/36.png\",\n\t\"./prj_help/img/411.png\": \"./app/panels/prj_help/img/411.png\",\n\t\"./prj_help/img/412.png\": \"./app/panels/prj_help/img/412.png\",\n\t\"./prj_help/img/421.png\": \"./app/panels/prj_help/img/421.png\",\n\t\"./prj_help/img/422.png\": \"./app/panels/prj_help/img/422.png\",\n\t\"./prj_help/img/431.png\": \"./app/panels/prj_help/img/431.png\",\n\t\"./prj_help/img/432.png\": \"./app/panels/prj_help/img/432.png\",\n\t\"./prj_help/img/433.png\": \"./app/panels/prj_help/img/433.png\",\n\t\"./prj_help/img/434.png\": \"./app/panels/prj_help/img/434.png\",\n\t\"./prj_help/img/441.png\": \"./app/panels/prj_help/img/441.png\",\n\t\"./prj_help/img/442.png\": \"./app/panels/prj_help/img/442.png\",\n\t\"./prj_help/img/443.png\": \"./app/panels/prj_help/img/443.png\",\n\t\"./prj_help/img/444.png\": \"./app/panels/prj_help/img/444.png\",\n\t\"./prj_help/img/451.png\": \"./app/panels/prj_help/img/451.png\",\n\t\"./prj_help/img/461.png\": \"./app/panels/prj_help/img/461.png\",\n\t\"./prj_help/img/471.png\": \"./app/panels/prj_help/img/471.png\",\n\t\"./prj_help/img/711.png\": \"./app/panels/prj_help/img/711.png\",\n\t\"./prj_help/img/721.png\": \"./app/panels/prj_help/img/721.png\",\n\t\"./prj_help/img/722.png\": \"./app/panels/prj_help/img/722.png\",\n\t\"./prj_help/img/723.png\": \"./app/panels/prj_help/img/723.png\",\n\t\"./prj_help/img/741.png\": \"./app/panels/prj_help/img/741.png\",\n\t\"./prj_help/index\": \"./app/panels/prj_help/index.js\",\n\t\"./prj_help/index.js\": \"./app/panels/prj_help/index.js\",\n\t\"./prj_help/prj_help\": \"./app/panels/prj_help/prj_help.js\",\n\t\"./prj_help/prj_help.js\": \"./app/panels/prj_help/prj_help.js\",\n\t\"./prj_jobs\": \"./app/panels/prj_jobs/index.js\",\n\t\"./prj_jobs/\": \"./app/panels/prj_jobs/index.js\",\n\t\"./prj_jobs/index\": \"./app/panels/prj_jobs/index.js\",\n\t\"./prj_jobs/index.js\": \"./app/panels/prj_jobs/index.js\",\n\t\"./prj_jobs/lab_fact_rpt_dtl\": \"./app/panels/prj_jobs/lab_fact_rpt_dtl.js\",\n\t\"./prj_jobs/lab_fact_rpt_dtl.js\": \"./app/panels/prj_jobs/lab_fact_rpt_dtl.js\",\n\t\"./prj_jobs/lab_plan_fot_dtl\": \"./app/panels/prj_jobs/lab_plan_fot_dtl.js\",\n\t\"./prj_jobs/lab_plan_fot_dtl.js\": \"./app/panels/prj_jobs/lab_plan_fot_dtl.js\",\n\t\"./prj_jobs/lab_plan_jobs_dtl\": \"./app/panels/prj_jobs/lab_plan_jobs_dtl.js\",\n\t\"./prj_jobs/lab_plan_jobs_dtl.js\": \"./app/panels/prj_jobs/lab_plan_jobs_dtl.js\",\n\t\"./prj_jobs/layouts\": \"./app/panels/prj_jobs/layouts.js\",\n\t\"./prj_jobs/layouts.js\": \"./app/panels/prj_jobs/layouts.js\",\n\t\"./prj_jobs/prj_jobs\": \"./app/panels/prj_jobs/prj_jobs.js\",\n\t\"./prj_jobs/prj_jobs.js\": \"./app/panels/prj_jobs/prj_jobs.js\",\n\t\"./prj_jobs/res_mon\": \"./app/panels/prj_jobs/res_mon.js\",\n\t\"./prj_jobs/res_mon.js\": \"./app/panels/prj_jobs/res_mon.js\",\n\t\"./samples\": \"./app/panels/samples/index.js\",\n\t\"./samples/\": \"./app/panels/samples/index.js\",\n\t\"./samples/chart\": \"./app/panels/samples/chart.js\",\n\t\"./samples/chart.js\": \"./app/panels/samples/chart.js\",\n\t\"./samples/data_grid\": \"./app/panels/samples/data_grid.js\",\n\t\"./samples/data_grid.js\": \"./app/panels/samples/data_grid.js\",\n\t\"./samples/gantt\": \"./app/panels/samples/gantt.js\",\n\t\"./samples/gantt.js\": \"./app/panels/samples/gantt.js\",\n\t\"./samples/index\": \"./app/panels/samples/index.js\",\n\t\"./samples/index.js\": \"./app/panels/samples/index.js\",\n\t\"./samples/loader\": \"./app/panels/samples/loader.js\",\n\t\"./samples/loader.js\": \"./app/panels/samples/loader.js\",\n\t\"./samples/messages\": \"./app/panels/samples/messages.js\",\n\t\"./samples/messages.js\": \"./app/panels/samples/messages.js\",\n\t\"./samples/mui\": \"./app/panels/samples/mui.js\",\n\t\"./samples/mui.js\": \"./app/panels/samples/mui.js\",\n\t\"./samples/p8online\": \"./app/panels/samples/p8online.js\",\n\t\"./samples/p8online.js\": \"./app/panels/samples/p8online.js\",\n\t\"./samples/samples\": \"./app/panels/samples/samples.js\",\n\t\"./samples/samples.js\": \"./app/panels/samples/samples.js\",\n\t\"./samples/svg\": \"./app/panels/samples/svg.js\",\n\t\"./samples/svg.js\": \"./app/panels/samples/svg.js\"\n};\n\n\nfunction webpackContext(req) {\n\tvar id = webpackContextResolve(req);\n\treturn __webpack_require__(id);\n}\nfunction webpackContextResolve(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t}\n\treturn map[req];\n}\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = \"./app/panels sync recursive ^\\\\.\\\\/.*$\";\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/panels/_sync_^\\.\\/.*$?"); /***/ }), @@ -1163,6 +1163,61 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac /***/ }), +/***/ "./node_modules/@mui/material/ImageListItem/ImageListItem.js": +/*!*******************************************************************!*\ + !*** ./node_modules/@mui/material/ImageListItem/ImageListItem.js ***! + \*******************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _babel_runtime_helpers_esm_objectWithoutPropertiesLoose__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/objectWithoutPropertiesLoose */ \"./node_modules/@babel/runtime/helpers/esm/objectWithoutPropertiesLoose.js\");\n/* harmony import */ var _babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/esm/extends */ \"./node_modules/@babel/runtime/helpers/esm/extends.js\");\n/* harmony import */ var _mui_base_composeClasses__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @mui/base/composeClasses */ \"./node_modules/@mui/utils/esm/composeClasses/composeClasses.js\");\n/* harmony import */ var _mui_utils__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! @mui/utils */ \"./node_modules/@mui/utils/esm/integerPropType.js\");\n/* harmony import */ var clsx__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! clsx */ \"./node_modules/clsx/dist/clsx.mjs\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! prop-types */ \"./node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_12___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_12__);\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var react_is__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! react-is */ \"./node_modules/@mui/material/node_modules/react-is/index.js\");\n/* harmony import */ var _ImageList_ImageListContext__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ../ImageList/ImageListContext */ \"./node_modules/@mui/material/ImageList/ImageListContext.js\");\n/* harmony import */ var _styles_styled__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../styles/styled */ \"./node_modules/@mui/material/styles/styled.js\");\n/* harmony import */ var _styles_useThemeProps__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../styles/useThemeProps */ \"./node_modules/@mui/material/styles/useThemeProps.js\");\n/* harmony import */ var _utils_isMuiElement__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ../utils/isMuiElement */ \"./node_modules/@mui/material/utils/isMuiElement.js\");\n/* harmony import */ var _imageListItemClasses__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./imageListItemClasses */ \"./node_modules/@mui/material/ImageListItem/imageListItemClasses.js\");\n/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! react/jsx-runtime */ \"./node_modules/react/jsx-runtime.js\");\n'use client';\n\n\n\nconst _excluded = [\"children\", \"className\", \"cols\", \"component\", \"rows\", \"style\"];\n\n\n\n\n\n\n\n\n\n\n\n\nconst useUtilityClasses = ownerState => {\n const {\n classes,\n variant\n } = ownerState;\n const slots = {\n root: ['root', variant],\n img: ['img']\n };\n return (0,_mui_base_composeClasses__WEBPACK_IMPORTED_MODULE_6__[\"default\"])(slots, _imageListItemClasses__WEBPACK_IMPORTED_MODULE_7__.getImageListItemUtilityClass, classes);\n};\nconst ImageListItemRoot = (0,_styles_styled__WEBPACK_IMPORTED_MODULE_8__[\"default\"])('li', {\n name: 'MuiImageListItem',\n slot: 'Root',\n overridesResolver: (props, styles) => {\n const {\n ownerState\n } = props;\n return [{\n [`& .${_imageListItemClasses__WEBPACK_IMPORTED_MODULE_7__[\"default\"].img}`]: styles.img\n }, styles.root, styles[ownerState.variant]];\n }\n})(({\n ownerState\n}) => (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_1__[\"default\"])({\n display: 'block',\n position: 'relative'\n}, ownerState.variant === 'standard' && {\n // For titlebar under list item\n display: 'flex',\n flexDirection: 'column'\n}, ownerState.variant === 'woven' && {\n height: '100%',\n alignSelf: 'center',\n '&:nth-of-type(even)': {\n height: '70%'\n }\n}, {\n [`& .${_imageListItemClasses__WEBPACK_IMPORTED_MODULE_7__[\"default\"].img}`]: (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_1__[\"default\"])({\n objectFit: 'cover',\n width: '100%',\n height: '100%',\n display: 'block'\n }, ownerState.variant === 'standard' && {\n height: 'auto',\n flexGrow: 1\n })\n}));\nconst ImageListItem = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3__.forwardRef(function ImageListItem(inProps, ref) {\n const props = (0,_styles_useThemeProps__WEBPACK_IMPORTED_MODULE_9__[\"default\"])({\n props: inProps,\n name: 'MuiImageListItem'\n });\n\n // TODO: - Use jsdoc @default?: \"cols rows default values are for docs only\"\n const {\n children,\n className,\n cols = 1,\n component = 'li',\n rows = 1,\n style\n } = props,\n other = (0,_babel_runtime_helpers_esm_objectWithoutPropertiesLoose__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(props, _excluded);\n const {\n rowHeight = 'auto',\n gap,\n variant\n } = react__WEBPACK_IMPORTED_MODULE_3__.useContext(_ImageList_ImageListContext__WEBPACK_IMPORTED_MODULE_10__[\"default\"]);\n let height = 'auto';\n if (variant === 'woven') {\n height = undefined;\n } else if (rowHeight !== 'auto') {\n height = rowHeight * rows + gap * (rows - 1);\n }\n const ownerState = (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_1__[\"default\"])({}, props, {\n cols,\n component,\n gap,\n rowHeight,\n rows,\n variant\n });\n const classes = useUtilityClasses(ownerState);\n return /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(ImageListItemRoot, (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_1__[\"default\"])({\n as: component,\n className: (0,clsx__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(classes.root, classes[variant], className),\n ref: ref,\n style: (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_1__[\"default\"])({\n height,\n gridColumnEnd: variant !== 'masonry' ? `span ${cols}` : undefined,\n gridRowEnd: variant !== 'masonry' ? `span ${rows}` : undefined,\n marginBottom: variant === 'masonry' ? gap : undefined\n }, style),\n ownerState: ownerState\n }, other, {\n children: react__WEBPACK_IMPORTED_MODULE_3__.Children.map(children, child => {\n if (! /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3__.isValidElement(child)) {\n return null;\n }\n if (true) {\n if ((0,react_is__WEBPACK_IMPORTED_MODULE_4__.isFragment)(child)) {\n console.error([\"MUI: The ImageListItem component doesn't accept a Fragment as a child.\", 'Consider providing an array instead.'].join('\\n'));\n }\n }\n if (child.type === 'img' || (0,_utils_isMuiElement__WEBPACK_IMPORTED_MODULE_11__[\"default\"])(child, ['Image'])) {\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3__.cloneElement(child, {\n className: (0,clsx__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(classes.img, child.props.className)\n });\n }\n return child;\n })\n }));\n});\n true ? ImageListItem.propTypes /* remove-proptypes */ = {\n // ----------------------------- Warning --------------------------------\n // | These PropTypes are generated from the TypeScript type definitions |\n // | To update them edit the d.ts file and run \"yarn proptypes\" |\n // ----------------------------------------------------------------------\n /**\n * The content of the component, normally an ``.\n */\n children: (prop_types__WEBPACK_IMPORTED_MODULE_12___default().node),\n /**\n * Override or extend the styles applied to the component.\n */\n classes: (prop_types__WEBPACK_IMPORTED_MODULE_12___default().object),\n /**\n * @ignore\n */\n className: (prop_types__WEBPACK_IMPORTED_MODULE_12___default().string),\n /**\n * Width of the item in number of grid columns.\n * @default 1\n */\n cols: _mui_utils__WEBPACK_IMPORTED_MODULE_13__[\"default\"],\n /**\n * The component used for the root node.\n * Either a string to use a HTML element or a component.\n */\n component: (prop_types__WEBPACK_IMPORTED_MODULE_12___default().elementType),\n /**\n * Height of the item in number of grid rows.\n * @default 1\n */\n rows: _mui_utils__WEBPACK_IMPORTED_MODULE_13__[\"default\"],\n /**\n * @ignore\n */\n style: (prop_types__WEBPACK_IMPORTED_MODULE_12___default().object),\n /**\n * The system prop that allows defining system overrides as well as additional CSS styles.\n */\n sx: prop_types__WEBPACK_IMPORTED_MODULE_12___default().oneOfType([prop_types__WEBPACK_IMPORTED_MODULE_12___default().arrayOf(prop_types__WEBPACK_IMPORTED_MODULE_12___default().oneOfType([(prop_types__WEBPACK_IMPORTED_MODULE_12___default().func), (prop_types__WEBPACK_IMPORTED_MODULE_12___default().object), (prop_types__WEBPACK_IMPORTED_MODULE_12___default().bool)])), (prop_types__WEBPACK_IMPORTED_MODULE_12___default().func), (prop_types__WEBPACK_IMPORTED_MODULE_12___default().object)])\n} : 0;\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (ImageListItem);\n\n//# sourceURL=webpack://parus_8_panels_plugin/./node_modules/@mui/material/ImageListItem/ImageListItem.js?"); + +/***/ }), + +/***/ "./node_modules/@mui/material/ImageListItem/imageListItemClasses.js": +/*!**************************************************************************!*\ + !*** ./node_modules/@mui/material/ImageListItem/imageListItemClasses.js ***! + \**************************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__),\n/* harmony export */ getImageListItemUtilityClass: () => (/* binding */ getImageListItemUtilityClass)\n/* harmony export */ });\n/* harmony import */ var _mui_utils__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @mui/utils */ \"./node_modules/@mui/utils/esm/generateUtilityClasses/generateUtilityClasses.js\");\n/* harmony import */ var _generateUtilityClass__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../generateUtilityClass */ \"./node_modules/@mui/utils/esm/generateUtilityClass/generateUtilityClass.js\");\n\n\nfunction getImageListItemUtilityClass(slot) {\n return (0,_generateUtilityClass__WEBPACK_IMPORTED_MODULE_0__[\"default\"])('MuiImageListItem', slot);\n}\nconst imageListItemClasses = (0,_mui_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"])('MuiImageListItem', ['root', 'img', 'standard', 'woven', 'masonry', 'quilted']);\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (imageListItemClasses);\n\n//# sourceURL=webpack://parus_8_panels_plugin/./node_modules/@mui/material/ImageListItem/imageListItemClasses.js?"); + +/***/ }), + +/***/ "./node_modules/@mui/material/ImageList/ImageList.js": +/*!***********************************************************!*\ + !*** ./node_modules/@mui/material/ImageList/ImageList.js ***! + \***********************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _babel_runtime_helpers_esm_objectWithoutPropertiesLoose__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/objectWithoutPropertiesLoose */ \"./node_modules/@babel/runtime/helpers/esm/objectWithoutPropertiesLoose.js\");\n/* harmony import */ var _babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/esm/extends */ \"./node_modules/@babel/runtime/helpers/esm/extends.js\");\n/* harmony import */ var _mui_base_composeClasses__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @mui/base/composeClasses */ \"./node_modules/@mui/utils/esm/composeClasses/composeClasses.js\");\n/* harmony import */ var _mui_utils__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! @mui/utils */ \"./node_modules/@mui/utils/esm/integerPropType.js\");\n/* harmony import */ var clsx__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! clsx */ \"./node_modules/clsx/dist/clsx.mjs\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! prop-types */ \"./node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_10___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_10__);\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var _styles_styled__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../styles/styled */ \"./node_modules/@mui/material/styles/styled.js\");\n/* harmony import */ var _styles_useThemeProps__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../styles/useThemeProps */ \"./node_modules/@mui/material/styles/useThemeProps.js\");\n/* harmony import */ var _imageListClasses__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./imageListClasses */ \"./node_modules/@mui/material/ImageList/imageListClasses.js\");\n/* harmony import */ var _ImageListContext__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./ImageListContext */ \"./node_modules/@mui/material/ImageList/ImageListContext.js\");\n/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! react/jsx-runtime */ \"./node_modules/react/jsx-runtime.js\");\n'use client';\n\n\n\nconst _excluded = [\"children\", \"className\", \"cols\", \"component\", \"rowHeight\", \"gap\", \"style\", \"variant\"];\n\n\n\n\n\n\n\n\n\n\nconst useUtilityClasses = ownerState => {\n const {\n classes,\n variant\n } = ownerState;\n const slots = {\n root: ['root', variant]\n };\n return (0,_mui_base_composeClasses__WEBPACK_IMPORTED_MODULE_5__[\"default\"])(slots, _imageListClasses__WEBPACK_IMPORTED_MODULE_6__.getImageListUtilityClass, classes);\n};\nconst ImageListRoot = (0,_styles_styled__WEBPACK_IMPORTED_MODULE_7__[\"default\"])('ul', {\n name: 'MuiImageList',\n slot: 'Root',\n overridesResolver: (props, styles) => {\n const {\n ownerState\n } = props;\n return [styles.root, styles[ownerState.variant]];\n }\n})(({\n ownerState\n}) => {\n return (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_1__[\"default\"])({\n display: 'grid',\n overflowY: 'auto',\n listStyle: 'none',\n padding: 0,\n // Add iOS momentum scrolling for iOS < 13.0\n WebkitOverflowScrolling: 'touch'\n }, ownerState.variant === 'masonry' && {\n display: 'block'\n });\n});\nconst ImageList = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3__.forwardRef(function ImageList(inProps, ref) {\n const props = (0,_styles_useThemeProps__WEBPACK_IMPORTED_MODULE_8__[\"default\"])({\n props: inProps,\n name: 'MuiImageList'\n });\n const {\n children,\n className,\n cols = 2,\n component = 'ul',\n rowHeight = 'auto',\n gap = 4,\n style: styleProp,\n variant = 'standard'\n } = props,\n other = (0,_babel_runtime_helpers_esm_objectWithoutPropertiesLoose__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(props, _excluded);\n const contextValue = react__WEBPACK_IMPORTED_MODULE_3__.useMemo(() => ({\n rowHeight,\n gap,\n variant\n }), [rowHeight, gap, variant]);\n react__WEBPACK_IMPORTED_MODULE_3__.useEffect(() => {\n if (true) {\n // Detect Internet Explorer 8+\n if (document !== undefined && 'objectFit' in document.documentElement.style === false) {\n console.error(['MUI: ImageList v5+ no longer natively supports Internet Explorer.', 'Use v4 of this component instead, or polyfill CSS object-fit.'].join('\\n'));\n }\n }\n }, []);\n const style = variant === 'masonry' ? (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_1__[\"default\"])({\n columnCount: cols,\n columnGap: gap\n }, styleProp) : (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_1__[\"default\"])({\n gridTemplateColumns: `repeat(${cols}, 1fr)`,\n gap\n }, styleProp);\n const ownerState = (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_1__[\"default\"])({}, props, {\n component,\n gap,\n rowHeight,\n variant\n });\n const classes = useUtilityClasses(ownerState);\n return /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsx)(ImageListRoot, (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_1__[\"default\"])({\n as: component,\n className: (0,clsx__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(classes.root, classes[variant], className),\n ref: ref,\n style: style,\n ownerState: ownerState\n }, other, {\n children: /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsx)(_ImageListContext__WEBPACK_IMPORTED_MODULE_9__[\"default\"].Provider, {\n value: contextValue,\n children: children\n })\n }));\n});\n true ? ImageList.propTypes /* remove-proptypes */ = {\n // ----------------------------- Warning --------------------------------\n // | These PropTypes are generated from the TypeScript type definitions |\n // | To update them edit the d.ts file and run \"yarn proptypes\" |\n // ----------------------------------------------------------------------\n /**\n * The content of the component, normally `ImageListItem`s.\n */\n children: (prop_types__WEBPACK_IMPORTED_MODULE_10___default().node).isRequired,\n /**\n * Override or extend the styles applied to the component.\n */\n classes: (prop_types__WEBPACK_IMPORTED_MODULE_10___default().object),\n /**\n * @ignore\n */\n className: (prop_types__WEBPACK_IMPORTED_MODULE_10___default().string),\n /**\n * Number of columns.\n * @default 2\n */\n cols: _mui_utils__WEBPACK_IMPORTED_MODULE_11__[\"default\"],\n /**\n * The component used for the root node.\n * Either a string to use a HTML element or a component.\n */\n component: (prop_types__WEBPACK_IMPORTED_MODULE_10___default().elementType),\n /**\n * The gap between items in px.\n * @default 4\n */\n gap: (prop_types__WEBPACK_IMPORTED_MODULE_10___default().number),\n /**\n * The height of one row in px.\n * @default 'auto'\n */\n rowHeight: prop_types__WEBPACK_IMPORTED_MODULE_10___default().oneOfType([prop_types__WEBPACK_IMPORTED_MODULE_10___default().oneOf(['auto']), (prop_types__WEBPACK_IMPORTED_MODULE_10___default().number)]),\n /**\n * @ignore\n */\n style: (prop_types__WEBPACK_IMPORTED_MODULE_10___default().object),\n /**\n * The system prop that allows defining system overrides as well as additional CSS styles.\n */\n sx: prop_types__WEBPACK_IMPORTED_MODULE_10___default().oneOfType([prop_types__WEBPACK_IMPORTED_MODULE_10___default().arrayOf(prop_types__WEBPACK_IMPORTED_MODULE_10___default().oneOfType([(prop_types__WEBPACK_IMPORTED_MODULE_10___default().func), (prop_types__WEBPACK_IMPORTED_MODULE_10___default().object), (prop_types__WEBPACK_IMPORTED_MODULE_10___default().bool)])), (prop_types__WEBPACK_IMPORTED_MODULE_10___default().func), (prop_types__WEBPACK_IMPORTED_MODULE_10___default().object)]),\n /**\n * The variant to use.\n * @default 'standard'\n */\n variant: prop_types__WEBPACK_IMPORTED_MODULE_10___default().oneOfType([prop_types__WEBPACK_IMPORTED_MODULE_10___default().oneOf(['masonry', 'quilted', 'standard', 'woven']), (prop_types__WEBPACK_IMPORTED_MODULE_10___default().string)])\n} : 0;\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (ImageList);\n\n//# sourceURL=webpack://parus_8_panels_plugin/./node_modules/@mui/material/ImageList/ImageList.js?"); + +/***/ }), + +/***/ "./node_modules/@mui/material/ImageList/ImageListContext.js": +/*!******************************************************************!*\ + !*** ./node_modules/@mui/material/ImageList/ImageListContext.js ***! + \******************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n'use client';\n\n\n\n/**\n * @ignore - internal component.\n * @type {React.Context<{} | {expanded: boolean, disabled: boolean, toggle: () => void}>}\n */\nconst ImageListContext = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createContext({});\nif (true) {\n ImageListContext.displayName = 'ImageListContext';\n}\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (ImageListContext);\n\n//# sourceURL=webpack://parus_8_panels_plugin/./node_modules/@mui/material/ImageList/ImageListContext.js?"); + +/***/ }), + +/***/ "./node_modules/@mui/material/ImageList/imageListClasses.js": +/*!******************************************************************!*\ + !*** ./node_modules/@mui/material/ImageList/imageListClasses.js ***! + \******************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__),\n/* harmony export */ getImageListUtilityClass: () => (/* binding */ getImageListUtilityClass)\n/* harmony export */ });\n/* harmony import */ var _mui_utils__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @mui/utils */ \"./node_modules/@mui/utils/esm/generateUtilityClasses/generateUtilityClasses.js\");\n/* harmony import */ var _generateUtilityClass__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../generateUtilityClass */ \"./node_modules/@mui/utils/esm/generateUtilityClass/generateUtilityClass.js\");\n\n\nfunction getImageListUtilityClass(slot) {\n return (0,_generateUtilityClass__WEBPACK_IMPORTED_MODULE_0__[\"default\"])('MuiImageList', slot);\n}\nconst imageListClasses = (0,_mui_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"])('MuiImageList', ['root', 'masonry', 'quilted', 'standard', 'woven']);\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (imageListClasses);\n\n//# sourceURL=webpack://parus_8_panels_plugin/./node_modules/@mui/material/ImageList/imageListClasses.js?"); + +/***/ }), + /***/ "./node_modules/@mui/material/InputAdornment/InputAdornment.js": /*!*********************************************************************!*\ !*** ./node_modules/@mui/material/InputAdornment/InputAdornment.js ***! @@ -1625,6 +1680,72 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac /***/ }), +/***/ "./node_modules/@mui/material/RadioGroup/RadioGroup.js": +/*!*************************************************************!*\ + !*** ./node_modules/@mui/material/RadioGroup/RadioGroup.js ***! + \*************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/extends */ \"./node_modules/@babel/runtime/helpers/esm/extends.js\");\n/* harmony import */ var _babel_runtime_helpers_esm_objectWithoutPropertiesLoose__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/esm/objectWithoutPropertiesLoose */ \"./node_modules/@babel/runtime/helpers/esm/objectWithoutPropertiesLoose.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! prop-types */ \"./node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_9___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_9__);\n/* harmony import */ var _FormGroup__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../FormGroup */ \"./node_modules/@mui/material/FormGroup/FormGroup.js\");\n/* harmony import */ var _utils_useForkRef__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../utils/useForkRef */ \"./node_modules/@mui/material/utils/useForkRef.js\");\n/* harmony import */ var _utils_useControlled__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../utils/useControlled */ \"./node_modules/@mui/material/utils/useControlled.js\");\n/* harmony import */ var _RadioGroupContext__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./RadioGroupContext */ \"./node_modules/@mui/material/RadioGroup/RadioGroupContext.js\");\n/* harmony import */ var _utils_useId__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../utils/useId */ \"./node_modules/@mui/material/utils/useId.js\");\n/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! react/jsx-runtime */ \"./node_modules/react/jsx-runtime.js\");\n'use client';\n\n\n\nconst _excluded = [\"actions\", \"children\", \"defaultValue\", \"name\", \"onChange\", \"value\"];\n\n\n\n\n\n\n\n\nconst RadioGroup = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2__.forwardRef(function RadioGroup(props, ref) {\n const {\n // private\n // eslint-disable-next-line react/prop-types\n actions,\n children,\n defaultValue,\n name: nameProp,\n onChange,\n value: valueProp\n } = props,\n other = (0,_babel_runtime_helpers_esm_objectWithoutPropertiesLoose__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(props, _excluded);\n const rootRef = react__WEBPACK_IMPORTED_MODULE_2__.useRef(null);\n const [value, setValueState] = (0,_utils_useControlled__WEBPACK_IMPORTED_MODULE_4__[\"default\"])({\n controlled: valueProp,\n default: defaultValue,\n name: 'RadioGroup'\n });\n react__WEBPACK_IMPORTED_MODULE_2__.useImperativeHandle(actions, () => ({\n focus: () => {\n let input = rootRef.current.querySelector('input:not(:disabled):checked');\n if (!input) {\n input = rootRef.current.querySelector('input:not(:disabled)');\n }\n if (input) {\n input.focus();\n }\n }\n }), []);\n const handleRef = (0,_utils_useForkRef__WEBPACK_IMPORTED_MODULE_5__[\"default\"])(ref, rootRef);\n const name = (0,_utils_useId__WEBPACK_IMPORTED_MODULE_6__[\"default\"])(nameProp);\n const contextValue = react__WEBPACK_IMPORTED_MODULE_2__.useMemo(() => ({\n name,\n onChange(event) {\n setValueState(event.target.value);\n if (onChange) {\n onChange(event, event.target.value);\n }\n },\n value\n }), [name, onChange, setValueState, value]);\n return /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(_RadioGroupContext__WEBPACK_IMPORTED_MODULE_7__[\"default\"].Provider, {\n value: contextValue,\n children: /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(_FormGroup__WEBPACK_IMPORTED_MODULE_8__[\"default\"], (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n role: \"radiogroup\",\n ref: handleRef\n }, other, {\n children: children\n }))\n });\n});\n true ? RadioGroup.propTypes /* remove-proptypes */ = {\n // ----------------------------- Warning --------------------------------\n // | These PropTypes are generated from the TypeScript type definitions |\n // | To update them edit the d.ts file and run \"yarn proptypes\" |\n // ----------------------------------------------------------------------\n /**\n * The content of the component.\n */\n children: (prop_types__WEBPACK_IMPORTED_MODULE_9___default().node),\n /**\n * The default value. Use when the component is not controlled.\n */\n defaultValue: (prop_types__WEBPACK_IMPORTED_MODULE_9___default().any),\n /**\n * The name used to reference the value of the control.\n * If you don't provide this prop, it falls back to a randomly generated name.\n */\n name: (prop_types__WEBPACK_IMPORTED_MODULE_9___default().string),\n /**\n * Callback fired when a radio button is selected.\n *\n * @param {React.ChangeEvent} event The event source of the callback.\n * @param {string} value The value of the selected radio button.\n * You can pull out the new value by accessing `event.target.value` (string).\n */\n onChange: (prop_types__WEBPACK_IMPORTED_MODULE_9___default().func),\n /**\n * Value of the selected radio button. The DOM API casts this to a string.\n */\n value: (prop_types__WEBPACK_IMPORTED_MODULE_9___default().any)\n} : 0;\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (RadioGroup);\n\n//# sourceURL=webpack://parus_8_panels_plugin/./node_modules/@mui/material/RadioGroup/RadioGroup.js?"); + +/***/ }), + +/***/ "./node_modules/@mui/material/RadioGroup/RadioGroupContext.js": +/*!********************************************************************!*\ + !*** ./node_modules/@mui/material/RadioGroup/RadioGroupContext.js ***! + \********************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n\n/**\n * @ignore - internal component.\n */\nconst RadioGroupContext = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createContext(undefined);\nif (true) {\n RadioGroupContext.displayName = 'RadioGroupContext';\n}\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (RadioGroupContext);\n\n//# sourceURL=webpack://parus_8_panels_plugin/./node_modules/@mui/material/RadioGroup/RadioGroupContext.js?"); + +/***/ }), + +/***/ "./node_modules/@mui/material/RadioGroup/useRadioGroup.js": +/*!****************************************************************!*\ + !*** ./node_modules/@mui/material/RadioGroup/useRadioGroup.js ***! + \****************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ useRadioGroup)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _RadioGroupContext__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./RadioGroupContext */ \"./node_modules/@mui/material/RadioGroup/RadioGroupContext.js\");\n'use client';\n\n\n\nfunction useRadioGroup() {\n return react__WEBPACK_IMPORTED_MODULE_0__.useContext(_RadioGroupContext__WEBPACK_IMPORTED_MODULE_1__[\"default\"]);\n}\n\n//# sourceURL=webpack://parus_8_panels_plugin/./node_modules/@mui/material/RadioGroup/useRadioGroup.js?"); + +/***/ }), + +/***/ "./node_modules/@mui/material/Radio/Radio.js": +/*!***************************************************!*\ + !*** ./node_modules/@mui/material/Radio/Radio.js ***! + \***************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _babel_runtime_helpers_esm_objectWithoutPropertiesLoose__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/objectWithoutPropertiesLoose */ \"./node_modules/@babel/runtime/helpers/esm/objectWithoutPropertiesLoose.js\");\n/* harmony import */ var _babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/esm/extends */ \"./node_modules/@babel/runtime/helpers/esm/extends.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! prop-types */ \"./node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_15___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_15__);\n/* harmony import */ var clsx__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! clsx */ \"./node_modules/clsx/dist/clsx.mjs\");\n/* harmony import */ var _mui_utils__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! @mui/utils */ \"./node_modules/@mui/utils/esm/refType.js\");\n/* harmony import */ var _mui_base_composeClasses__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @mui/base/composeClasses */ \"./node_modules/@mui/utils/esm/composeClasses/composeClasses.js\");\n/* harmony import */ var _mui_system__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! @mui/system */ \"./node_modules/@mui/system/esm/colorManipulator.js\");\n/* harmony import */ var _internal_SwitchBase__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../internal/SwitchBase */ \"./node_modules/@mui/material/internal/SwitchBase.js\");\n/* harmony import */ var _styles_useThemeProps__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ../styles/useThemeProps */ \"./node_modules/@mui/material/styles/useThemeProps.js\");\n/* harmony import */ var _RadioButtonIcon__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./RadioButtonIcon */ \"./node_modules/@mui/material/Radio/RadioButtonIcon.js\");\n/* harmony import */ var _utils_capitalize__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../utils/capitalize */ \"./node_modules/@mui/material/utils/capitalize.js\");\n/* harmony import */ var _utils_createChainedFunction__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ../utils/createChainedFunction */ \"./node_modules/@mui/material/utils/createChainedFunction.js\");\n/* harmony import */ var _RadioGroup_useRadioGroup__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ../RadioGroup/useRadioGroup */ \"./node_modules/@mui/material/RadioGroup/useRadioGroup.js\");\n/* harmony import */ var _radioClasses__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./radioClasses */ \"./node_modules/@mui/material/Radio/radioClasses.js\");\n/* harmony import */ var _styles_styled__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../styles/styled */ \"./node_modules/@mui/material/styles/styled.js\");\n/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! react/jsx-runtime */ \"./node_modules/react/jsx-runtime.js\");\n'use client';\n\n\n\nconst _excluded = [\"checked\", \"checkedIcon\", \"color\", \"icon\", \"name\", \"onChange\", \"size\", \"className\"];\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nconst useUtilityClasses = ownerState => {\n const {\n classes,\n color\n } = ownerState;\n const slots = {\n root: ['root', `color${(0,_utils_capitalize__WEBPACK_IMPORTED_MODULE_5__[\"default\"])(color)}`]\n };\n return (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_1__[\"default\"])({}, classes, (0,_mui_base_composeClasses__WEBPACK_IMPORTED_MODULE_6__[\"default\"])(slots, _radioClasses__WEBPACK_IMPORTED_MODULE_7__.getRadioUtilityClass, classes));\n};\nconst RadioRoot = (0,_styles_styled__WEBPACK_IMPORTED_MODULE_8__[\"default\"])(_internal_SwitchBase__WEBPACK_IMPORTED_MODULE_9__[\"default\"], {\n shouldForwardProp: prop => (0,_styles_styled__WEBPACK_IMPORTED_MODULE_8__.rootShouldForwardProp)(prop) || prop === 'classes',\n name: 'MuiRadio',\n slot: 'Root',\n overridesResolver: (props, styles) => {\n const {\n ownerState\n } = props;\n return [styles.root, styles[`color${(0,_utils_capitalize__WEBPACK_IMPORTED_MODULE_5__[\"default\"])(ownerState.color)}`]];\n }\n})(({\n theme,\n ownerState\n}) => (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_1__[\"default\"])({\n color: (theme.vars || theme).palette.text.secondary\n}, !ownerState.disableRipple && {\n '&:hover': {\n backgroundColor: theme.vars ? `rgba(${ownerState.color === 'default' ? theme.vars.palette.action.activeChannel : theme.vars.palette[ownerState.color].mainChannel} / ${theme.vars.palette.action.hoverOpacity})` : (0,_mui_system__WEBPACK_IMPORTED_MODULE_10__.alpha)(ownerState.color === 'default' ? theme.palette.action.active : theme.palette[ownerState.color].main, theme.palette.action.hoverOpacity),\n // Reset on touch devices, it doesn't add specificity\n '@media (hover: none)': {\n backgroundColor: 'transparent'\n }\n }\n}, ownerState.color !== 'default' && {\n [`&.${_radioClasses__WEBPACK_IMPORTED_MODULE_7__[\"default\"].checked}`]: {\n color: (theme.vars || theme).palette[ownerState.color].main\n }\n}, {\n [`&.${_radioClasses__WEBPACK_IMPORTED_MODULE_7__[\"default\"].disabled}`]: {\n color: (theme.vars || theme).palette.action.disabled\n }\n}));\nfunction areEqualValues(a, b) {\n if (typeof b === 'object' && b !== null) {\n return a === b;\n }\n\n // The value could be a number, the DOM will stringify it anyway.\n return String(a) === String(b);\n}\nconst defaultCheckedIcon = /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsx)(_RadioButtonIcon__WEBPACK_IMPORTED_MODULE_11__[\"default\"], {\n checked: true\n});\nconst defaultIcon = /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsx)(_RadioButtonIcon__WEBPACK_IMPORTED_MODULE_11__[\"default\"], {});\nconst Radio = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2__.forwardRef(function Radio(inProps, ref) {\n var _defaultIcon$props$fo, _defaultCheckedIcon$p;\n const props = (0,_styles_useThemeProps__WEBPACK_IMPORTED_MODULE_12__[\"default\"])({\n props: inProps,\n name: 'MuiRadio'\n });\n const {\n checked: checkedProp,\n checkedIcon = defaultCheckedIcon,\n color = 'primary',\n icon = defaultIcon,\n name: nameProp,\n onChange: onChangeProp,\n size = 'medium',\n className\n } = props,\n other = (0,_babel_runtime_helpers_esm_objectWithoutPropertiesLoose__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(props, _excluded);\n const ownerState = (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_1__[\"default\"])({}, props, {\n color,\n size\n });\n const classes = useUtilityClasses(ownerState);\n const radioGroup = (0,_RadioGroup_useRadioGroup__WEBPACK_IMPORTED_MODULE_13__[\"default\"])();\n let checked = checkedProp;\n const onChange = (0,_utils_createChainedFunction__WEBPACK_IMPORTED_MODULE_14__[\"default\"])(onChangeProp, radioGroup && radioGroup.onChange);\n let name = nameProp;\n if (radioGroup) {\n if (typeof checked === 'undefined') {\n checked = areEqualValues(radioGroup.value, props.value);\n }\n if (typeof name === 'undefined') {\n name = radioGroup.name;\n }\n }\n return /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsx)(RadioRoot, (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_1__[\"default\"])({\n type: \"radio\",\n icon: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2__.cloneElement(icon, {\n fontSize: (_defaultIcon$props$fo = defaultIcon.props.fontSize) != null ? _defaultIcon$props$fo : size\n }),\n checkedIcon: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2__.cloneElement(checkedIcon, {\n fontSize: (_defaultCheckedIcon$p = defaultCheckedIcon.props.fontSize) != null ? _defaultCheckedIcon$p : size\n }),\n ownerState: ownerState,\n classes: classes,\n name: name,\n checked: checked,\n onChange: onChange,\n ref: ref,\n className: (0,clsx__WEBPACK_IMPORTED_MODULE_3__[\"default\"])(classes.root, className)\n }, other));\n});\n true ? Radio.propTypes /* remove-proptypes */ = {\n // ----------------------------- Warning --------------------------------\n // | These PropTypes are generated from the TypeScript type definitions |\n // | To update them edit the d.ts file and run \"yarn proptypes\" |\n // ----------------------------------------------------------------------\n /**\n * If `true`, the component is checked.\n */\n checked: (prop_types__WEBPACK_IMPORTED_MODULE_15___default().bool),\n /**\n * The icon to display when the component is checked.\n * @default \n */\n checkedIcon: (prop_types__WEBPACK_IMPORTED_MODULE_15___default().node),\n /**\n * Override or extend the styles applied to the component.\n */\n classes: (prop_types__WEBPACK_IMPORTED_MODULE_15___default().object),\n /**\n * @ignore\n */\n className: (prop_types__WEBPACK_IMPORTED_MODULE_15___default().string),\n /**\n * The color of the component.\n * It supports both default and custom theme colors, which can be added as shown in the\n * [palette customization guide](https://mui.com/material-ui/customization/palette/#adding-new-colors).\n * @default 'primary'\n */\n color: prop_types__WEBPACK_IMPORTED_MODULE_15___default().oneOfType([prop_types__WEBPACK_IMPORTED_MODULE_15___default().oneOf(['default', 'primary', 'secondary', 'error', 'info', 'success', 'warning']), (prop_types__WEBPACK_IMPORTED_MODULE_15___default().string)]),\n /**\n * If `true`, the component is disabled.\n */\n disabled: (prop_types__WEBPACK_IMPORTED_MODULE_15___default().bool),\n /**\n * If `true`, the ripple effect is disabled.\n * @default false\n */\n disableRipple: (prop_types__WEBPACK_IMPORTED_MODULE_15___default().bool),\n /**\n * The icon to display when the component is unchecked.\n * @default \n */\n icon: (prop_types__WEBPACK_IMPORTED_MODULE_15___default().node),\n /**\n * The id of the `input` element.\n */\n id: (prop_types__WEBPACK_IMPORTED_MODULE_15___default().string),\n /**\n * [Attributes](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input#Attributes) applied to the `input` element.\n */\n inputProps: (prop_types__WEBPACK_IMPORTED_MODULE_15___default().object),\n /**\n * Pass a ref to the `input` element.\n */\n inputRef: _mui_utils__WEBPACK_IMPORTED_MODULE_16__[\"default\"],\n /**\n * Name attribute of the `input` element.\n */\n name: (prop_types__WEBPACK_IMPORTED_MODULE_15___default().string),\n /**\n * Callback fired when the state is changed.\n *\n * @param {React.ChangeEvent} event The event source of the callback.\n * You can pull out the new value by accessing `event.target.value` (string).\n * You can pull out the new checked state by accessing `event.target.checked` (boolean).\n */\n onChange: (prop_types__WEBPACK_IMPORTED_MODULE_15___default().func),\n /**\n * If `true`, the `input` element is required.\n * @default false\n */\n required: (prop_types__WEBPACK_IMPORTED_MODULE_15___default().bool),\n /**\n * The size of the component.\n * `small` is equivalent to the dense radio styling.\n * @default 'medium'\n */\n size: prop_types__WEBPACK_IMPORTED_MODULE_15___default().oneOfType([prop_types__WEBPACK_IMPORTED_MODULE_15___default().oneOf(['medium', 'small']), (prop_types__WEBPACK_IMPORTED_MODULE_15___default().string)]),\n /**\n * The system prop that allows defining system overrides as well as additional CSS styles.\n */\n sx: prop_types__WEBPACK_IMPORTED_MODULE_15___default().oneOfType([prop_types__WEBPACK_IMPORTED_MODULE_15___default().arrayOf(prop_types__WEBPACK_IMPORTED_MODULE_15___default().oneOfType([(prop_types__WEBPACK_IMPORTED_MODULE_15___default().func), (prop_types__WEBPACK_IMPORTED_MODULE_15___default().object), (prop_types__WEBPACK_IMPORTED_MODULE_15___default().bool)])), (prop_types__WEBPACK_IMPORTED_MODULE_15___default().func), (prop_types__WEBPACK_IMPORTED_MODULE_15___default().object)]),\n /**\n * The value of the component. The DOM API casts this to a string.\n */\n value: (prop_types__WEBPACK_IMPORTED_MODULE_15___default().any)\n} : 0;\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (Radio);\n\n//# sourceURL=webpack://parus_8_panels_plugin/./node_modules/@mui/material/Radio/Radio.js?"); + +/***/ }), + +/***/ "./node_modules/@mui/material/Radio/RadioButtonIcon.js": +/*!*************************************************************!*\ + !*** ./node_modules/@mui/material/Radio/RadioButtonIcon.js ***! + \*************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/extends */ \"./node_modules/@babel/runtime/helpers/esm/extends.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! prop-types */ \"./node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_6__);\n/* harmony import */ var _internal_svg_icons_RadioButtonUnchecked__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../internal/svg-icons/RadioButtonUnchecked */ \"./node_modules/@mui/material/internal/svg-icons/RadioButtonUnchecked.js\");\n/* harmony import */ var _internal_svg_icons_RadioButtonChecked__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../internal/svg-icons/RadioButtonChecked */ \"./node_modules/@mui/material/internal/svg-icons/RadioButtonChecked.js\");\n/* harmony import */ var _styles_styled__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../styles/styled */ \"./node_modules/@mui/material/styles/styled.js\");\n/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react/jsx-runtime */ \"./node_modules/react/jsx-runtime.js\");\n'use client';\n\n\n\n\n\n\n\n\n\nconst RadioButtonIconRoot = (0,_styles_styled__WEBPACK_IMPORTED_MODULE_3__[\"default\"])('span')({\n position: 'relative',\n display: 'flex'\n});\nconst RadioButtonIconBackground = (0,_styles_styled__WEBPACK_IMPORTED_MODULE_3__[\"default\"])(_internal_svg_icons_RadioButtonUnchecked__WEBPACK_IMPORTED_MODULE_4__[\"default\"])({\n // Scale applied to prevent dot misalignment in Safari\n transform: 'scale(1)'\n});\nconst RadioButtonIconDot = (0,_styles_styled__WEBPACK_IMPORTED_MODULE_3__[\"default\"])(_internal_svg_icons_RadioButtonChecked__WEBPACK_IMPORTED_MODULE_5__[\"default\"])(({\n theme,\n ownerState\n}) => (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n left: 0,\n position: 'absolute',\n transform: 'scale(0)',\n transition: theme.transitions.create('transform', {\n easing: theme.transitions.easing.easeIn,\n duration: theme.transitions.duration.shortest\n })\n}, ownerState.checked && {\n transform: 'scale(1)',\n transition: theme.transitions.create('transform', {\n easing: theme.transitions.easing.easeOut,\n duration: theme.transitions.duration.shortest\n })\n}));\n\n/**\n * @ignore - internal component.\n */\nfunction RadioButtonIcon(props) {\n const {\n checked = false,\n classes = {},\n fontSize\n } = props;\n const ownerState = (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({}, props, {\n checked\n });\n return /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsxs)(RadioButtonIconRoot, {\n className: classes.root,\n ownerState: ownerState,\n children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)(RadioButtonIconBackground, {\n fontSize: fontSize,\n className: classes.background,\n ownerState: ownerState\n }), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)(RadioButtonIconDot, {\n fontSize: fontSize,\n className: classes.dot,\n ownerState: ownerState\n })]\n });\n}\n true ? RadioButtonIcon.propTypes = {\n /**\n * If `true`, the component is checked.\n */\n checked: (prop_types__WEBPACK_IMPORTED_MODULE_6___default().bool),\n /**\n * Override or extend the styles applied to the component.\n * See [CSS API](#css) below for more details.\n */\n classes: (prop_types__WEBPACK_IMPORTED_MODULE_6___default().object),\n /**\n * The size of the component.\n * `small` is equivalent to the dense radio styling.\n */\n fontSize: prop_types__WEBPACK_IMPORTED_MODULE_6___default().oneOf(['small', 'medium'])\n} : 0;\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (RadioButtonIcon);\n\n//# sourceURL=webpack://parus_8_panels_plugin/./node_modules/@mui/material/Radio/RadioButtonIcon.js?"); + +/***/ }), + +/***/ "./node_modules/@mui/material/Radio/radioClasses.js": +/*!**********************************************************!*\ + !*** ./node_modules/@mui/material/Radio/radioClasses.js ***! + \**********************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__),\n/* harmony export */ getRadioUtilityClass: () => (/* binding */ getRadioUtilityClass)\n/* harmony export */ });\n/* harmony import */ var _mui_utils__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @mui/utils */ \"./node_modules/@mui/utils/esm/generateUtilityClasses/generateUtilityClasses.js\");\n/* harmony import */ var _generateUtilityClass__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../generateUtilityClass */ \"./node_modules/@mui/utils/esm/generateUtilityClass/generateUtilityClass.js\");\n\n\nfunction getRadioUtilityClass(slot) {\n return (0,_generateUtilityClass__WEBPACK_IMPORTED_MODULE_0__[\"default\"])('MuiRadio', slot);\n}\nconst radioClasses = (0,_mui_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"])('MuiRadio', ['root', 'checked', 'disabled', 'colorPrimary', 'colorSecondary']);\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (radioClasses);\n\n//# sourceURL=webpack://parus_8_panels_plugin/./node_modules/@mui/material/Radio/radioClasses.js?"); + +/***/ }), + /***/ "./node_modules/@mui/material/Select/Select.js": /*!*****************************************************!*\ !*** ./node_modules/@mui/material/Select/Select.js ***! @@ -2120,6 +2241,28 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac /***/ }), +/***/ "./node_modules/@mui/material/internal/svg-icons/RadioButtonChecked.js": +/*!*****************************************************************************!*\ + !*** ./node_modules/@mui/material/internal/svg-icons/RadioButtonChecked.js ***! + \*****************************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _utils_createSvgIcon__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../utils/createSvgIcon */ \"./node_modules/@mui/material/utils/createSvgIcon.js\");\n/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react/jsx-runtime */ \"./node_modules/react/jsx-runtime.js\");\n'use client';\n\n\n\n\n/**\n * @ignore - internal component.\n */\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ((0,_utils_createSvgIcon__WEBPACK_IMPORTED_MODULE_2__[\"default\"])( /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(\"path\", {\n d: \"M8.465 8.465C9.37 7.56 10.62 7 12 7C14.76 7 17 9.24 17 12C17 13.38 16.44 14.63 15.535 15.535C14.63 16.44 13.38 17 12 17C9.24 17 7 14.76 7 12C7 10.62 7.56 9.37 8.465 8.465Z\"\n}), 'RadioButtonChecked'));\n\n//# sourceURL=webpack://parus_8_panels_plugin/./node_modules/@mui/material/internal/svg-icons/RadioButtonChecked.js?"); + +/***/ }), + +/***/ "./node_modules/@mui/material/internal/svg-icons/RadioButtonUnchecked.js": +/*!*******************************************************************************!*\ + !*** ./node_modules/@mui/material/internal/svg-icons/RadioButtonUnchecked.js ***! + \*******************************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _utils_createSvgIcon__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../utils/createSvgIcon */ \"./node_modules/@mui/material/utils/createSvgIcon.js\");\n/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react/jsx-runtime */ \"./node_modules/react/jsx-runtime.js\");\n'use client';\n\n\n\n\n/**\n * @ignore - internal component.\n */\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ((0,_utils_createSvgIcon__WEBPACK_IMPORTED_MODULE_2__[\"default\"])( /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(\"path\", {\n d: \"M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm0 18c-4.42 0-8-3.58-8-8s3.58-8 8-8 8 3.58 8 8-3.58 8-8 8z\"\n}), 'RadioButtonUnchecked'));\n\n//# sourceURL=webpack://parus_8_panels_plugin/./node_modules/@mui/material/internal/svg-icons/RadioButtonUnchecked.js?"); + +/***/ }), + /***/ "./node_modules/@mui/material/internal/switchBaseClasses.js": /*!******************************************************************!*\ !*** ./node_modules/@mui/material/internal/switchBaseClasses.js ***! @@ -2153,6 +2296,17 @@ eval("\n\nif (false) {} else {\n module.exports = __webpack_require__(/*! ./cjs /***/ }), +/***/ "./node_modules/@mui/material/styles/ThemeProvider.js": +/*!************************************************************!*\ + !*** ./node_modules/@mui/material/styles/ThemeProvider.js ***! + \************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ ThemeProvider)\n/* harmony export */ });\n/* harmony import */ var _babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/extends */ \"./node_modules/@babel/runtime/helpers/esm/extends.js\");\n/* harmony import */ var _babel_runtime_helpers_esm_objectWithoutPropertiesLoose__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/esm/objectWithoutPropertiesLoose */ \"./node_modules/@babel/runtime/helpers/esm/objectWithoutPropertiesLoose.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! prop-types */ \"./node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_6__);\n/* harmony import */ var _mui_system__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @mui/system */ \"./node_modules/@mui/system/esm/ThemeProvider/ThemeProvider.js\");\n/* harmony import */ var _identifier__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./identifier */ \"./node_modules/@mui/material/styles/identifier.js\");\n/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! react/jsx-runtime */ \"./node_modules/react/jsx-runtime.js\");\n'use client';\n\n\n\nconst _excluded = [\"theme\"];\n\n\n\n\n\nfunction ThemeProvider(_ref) {\n let {\n theme: themeInput\n } = _ref,\n props = (0,_babel_runtime_helpers_esm_objectWithoutPropertiesLoose__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(_ref, _excluded);\n const scopedTheme = themeInput[_identifier__WEBPACK_IMPORTED_MODULE_4__[\"default\"]];\n return /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(_mui_system__WEBPACK_IMPORTED_MODULE_5__[\"default\"], (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({}, props, {\n themeId: scopedTheme ? _identifier__WEBPACK_IMPORTED_MODULE_4__[\"default\"] : undefined,\n theme: scopedTheme || themeInput\n }));\n}\n true ? ThemeProvider.propTypes = {\n /**\n * Your component tree.\n */\n children: (prop_types__WEBPACK_IMPORTED_MODULE_6___default().node),\n /**\n * A theme object. You can provide a function to extend the outer theme.\n */\n theme: prop_types__WEBPACK_IMPORTED_MODULE_6___default().oneOfType([(prop_types__WEBPACK_IMPORTED_MODULE_6___default().object), (prop_types__WEBPACK_IMPORTED_MODULE_6___default().func)]).isRequired\n} : 0;\n\n//# sourceURL=webpack://parus_8_panels_plugin/./node_modules/@mui/material/styles/ThemeProvider.js?"); + +/***/ }), + /***/ "./node_modules/@mui/material/styles/createMixins.js": /*!***********************************************************!*\ !*** ./node_modules/@mui/material/styles/createMixins.js ***! @@ -2318,6 +2472,17 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac /***/ }), +/***/ "./node_modules/@mui/material/utils/createChainedFunction.js": +/*!*******************************************************************!*\ + !*** ./node_modules/@mui/material/utils/createChainedFunction.js ***! + \*******************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _mui_utils__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @mui/utils */ \"./node_modules/@mui/utils/esm/createChainedFunction.js\");\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (_mui_utils__WEBPACK_IMPORTED_MODULE_0__[\"default\"]);\n\n//# sourceURL=webpack://parus_8_panels_plugin/./node_modules/@mui/material/utils/createChainedFunction.js?"); + +/***/ }), + /***/ "./node_modules/@mui/material/utils/createSvgIcon.js": /*!***********************************************************!*\ !*** ./node_modules/@mui/material/utils/createSvgIcon.js ***! @@ -2461,6 +2626,17 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac /***/ }), +/***/ "./node_modules/@mui/material/utils/useId.js": +/*!***************************************************!*\ + !*** ./node_modules/@mui/material/utils/useId.js ***! + \***************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _mui_utils__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @mui/utils */ \"./node_modules/@mui/utils/esm/useId/useId.js\");\n'use client';\n\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (_mui_utils__WEBPACK_IMPORTED_MODULE_0__[\"default\"]);\n\n//# sourceURL=webpack://parus_8_panels_plugin/./node_modules/@mui/material/utils/useId.js?"); + +/***/ }), + /***/ "./node_modules/@mui/material/utils/useIsFocusVisible.js": /*!***************************************************************!*\ !*** ./node_modules/@mui/material/utils/useIsFocusVisible.js ***! @@ -2472,6 +2648,50 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac /***/ }), +/***/ "./node_modules/@mui/private-theming/ThemeProvider/ThemeProvider.js": +/*!**************************************************************************!*\ + !*** ./node_modules/@mui/private-theming/ThemeProvider/ThemeProvider.js ***! + \**************************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/extends */ \"./node_modules/@babel/runtime/helpers/esm/extends.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! prop-types */ \"./node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_6__);\n/* harmony import */ var _mui_utils__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @mui/utils */ \"./node_modules/@mui/utils/esm/exactProp/exactProp.js\");\n/* harmony import */ var _useTheme_ThemeContext__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../useTheme/ThemeContext */ \"./node_modules/@mui/private-theming/useTheme/ThemeContext.js\");\n/* harmony import */ var _useTheme__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../useTheme */ \"./node_modules/@mui/private-theming/useTheme/useTheme.js\");\n/* harmony import */ var _nested__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./nested */ \"./node_modules/@mui/private-theming/ThemeProvider/nested.js\");\n/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react/jsx-runtime */ \"./node_modules/react/jsx-runtime.js\");\n\n\n\n\n\n\n\n\n// To support composition of theme.\n\nfunction mergeOuterLocalTheme(outerTheme, localTheme) {\n if (typeof localTheme === 'function') {\n const mergedTheme = localTheme(outerTheme);\n if (true) {\n if (!mergedTheme) {\n console.error(['MUI: You should return an object from your theme function, i.e.', ' ({})} />'].join('\\n'));\n }\n }\n return mergedTheme;\n }\n return (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({}, outerTheme, localTheme);\n}\n\n/**\n * This component takes a `theme` prop.\n * It makes the `theme` available down the React tree thanks to React context.\n * This component should preferably be used at **the root of your component tree**.\n */\nfunction ThemeProvider(props) {\n const {\n children,\n theme: localTheme\n } = props;\n const outerTheme = (0,_useTheme__WEBPACK_IMPORTED_MODULE_3__[\"default\"])();\n if (true) {\n if (outerTheme === null && typeof localTheme === 'function') {\n console.error(['MUI: You are providing a theme function prop to the ThemeProvider component:', ' outerTheme} />', '', 'However, no outer theme is present.', 'Make sure a theme is already injected higher in the React tree ' + 'or provide a theme object.'].join('\\n'));\n }\n }\n const theme = react__WEBPACK_IMPORTED_MODULE_1__.useMemo(() => {\n const output = outerTheme === null ? localTheme : mergeOuterLocalTheme(outerTheme, localTheme);\n if (output != null) {\n output[_nested__WEBPACK_IMPORTED_MODULE_4__[\"default\"]] = outerTheme !== null;\n }\n return output;\n }, [localTheme, outerTheme]);\n return /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)(_useTheme_ThemeContext__WEBPACK_IMPORTED_MODULE_5__[\"default\"].Provider, {\n value: theme,\n children: children\n });\n}\n true ? ThemeProvider.propTypes = {\n /**\n * Your component tree.\n */\n children: (prop_types__WEBPACK_IMPORTED_MODULE_6___default().node),\n /**\n * A theme object. You can provide a function to extend the outer theme.\n */\n theme: prop_types__WEBPACK_IMPORTED_MODULE_6___default().oneOfType([(prop_types__WEBPACK_IMPORTED_MODULE_6___default().object), (prop_types__WEBPACK_IMPORTED_MODULE_6___default().func)]).isRequired\n} : 0;\nif (true) {\n true ? ThemeProvider.propTypes = (0,_mui_utils__WEBPACK_IMPORTED_MODULE_7__[\"default\"])(ThemeProvider.propTypes) : 0;\n}\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (ThemeProvider);\n\n//# sourceURL=webpack://parus_8_panels_plugin/./node_modules/@mui/private-theming/ThemeProvider/ThemeProvider.js?"); + +/***/ }), + +/***/ "./node_modules/@mui/private-theming/ThemeProvider/nested.js": +/*!*******************************************************************!*\ + !*** ./node_modules/@mui/private-theming/ThemeProvider/nested.js ***! + \*******************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\nconst hasSymbol = typeof Symbol === 'function' && Symbol.for;\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (hasSymbol ? Symbol.for('mui.nested') : '__THEME_NESTED__');\n\n//# sourceURL=webpack://parus_8_panels_plugin/./node_modules/@mui/private-theming/ThemeProvider/nested.js?"); + +/***/ }), + +/***/ "./node_modules/@mui/private-theming/useTheme/ThemeContext.js": +/*!********************************************************************!*\ + !*** ./node_modules/@mui/private-theming/useTheme/ThemeContext.js ***! + \********************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n\nconst ThemeContext = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createContext(null);\nif (true) {\n ThemeContext.displayName = 'ThemeContext';\n}\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (ThemeContext);\n\n//# sourceURL=webpack://parus_8_panels_plugin/./node_modules/@mui/private-theming/useTheme/ThemeContext.js?"); + +/***/ }), + +/***/ "./node_modules/@mui/private-theming/useTheme/useTheme.js": +/*!****************************************************************!*\ + !*** ./node_modules/@mui/private-theming/useTheme/useTheme.js ***! + \****************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ useTheme)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _ThemeContext__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./ThemeContext */ \"./node_modules/@mui/private-theming/useTheme/ThemeContext.js\");\n\n\nfunction useTheme() {\n const theme = react__WEBPACK_IMPORTED_MODULE_0__.useContext(_ThemeContext__WEBPACK_IMPORTED_MODULE_1__[\"default\"]);\n if (true) {\n // eslint-disable-next-line react-hooks/rules-of-hooks\n react__WEBPACK_IMPORTED_MODULE_0__.useDebugValue(theme);\n }\n return theme;\n}\n\n//# sourceURL=webpack://parus_8_panels_plugin/./node_modules/@mui/private-theming/useTheme/useTheme.js?"); + +/***/ }), + /***/ "./node_modules/@mui/styled-engine/GlobalStyles/GlobalStyles.js": /*!**********************************************************************!*\ !*** ./node_modules/@mui/styled-engine/GlobalStyles/GlobalStyles.js ***! @@ -2538,6 +2758,17 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac /***/ }), +/***/ "./node_modules/@mui/system/esm/ThemeProvider/ThemeProvider.js": +/*!*********************************************************************!*\ + !*** ./node_modules/@mui/system/esm/ThemeProvider/ThemeProvider.js ***! + \*********************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/extends */ \"./node_modules/@babel/runtime/helpers/esm/extends.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! prop-types */ \"./node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_7___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_7__);\n/* harmony import */ var _mui_private_theming__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @mui/private-theming */ \"./node_modules/@mui/private-theming/useTheme/useTheme.js\");\n/* harmony import */ var _mui_private_theming__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @mui/private-theming */ \"./node_modules/@mui/private-theming/ThemeProvider/ThemeProvider.js\");\n/* harmony import */ var _mui_utils__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! @mui/utils */ \"./node_modules/@mui/utils/esm/exactProp/exactProp.js\");\n/* harmony import */ var _mui_styled_engine__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @mui/styled-engine */ \"./node_modules/@emotion/react/dist/emotion-element-c39617d8.browser.esm.js\");\n/* harmony import */ var _useThemeWithoutDefault__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../useThemeWithoutDefault */ \"./node_modules/@mui/system/esm/useThemeWithoutDefault.js\");\n/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react/jsx-runtime */ \"./node_modules/react/jsx-runtime.js\");\n'use client';\n\n\n\n\n\n\n\n\n\nconst EMPTY_THEME = {};\nfunction useThemeScoping(themeId, upperTheme, localTheme, isPrivate = false) {\n return react__WEBPACK_IMPORTED_MODULE_1__.useMemo(() => {\n const resolvedTheme = themeId ? upperTheme[themeId] || upperTheme : upperTheme;\n if (typeof localTheme === 'function') {\n const mergedTheme = localTheme(resolvedTheme);\n const result = themeId ? (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({}, upperTheme, {\n [themeId]: mergedTheme\n }) : mergedTheme;\n // must return a function for the private theme to NOT merge with the upper theme.\n // see the test case \"use provided theme from a callback\" in ThemeProvider.test.js\n if (isPrivate) {\n return () => result;\n }\n return result;\n }\n return themeId ? (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({}, upperTheme, {\n [themeId]: localTheme\n }) : (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({}, upperTheme, localTheme);\n }, [themeId, upperTheme, localTheme, isPrivate]);\n}\n\n/**\n * This component makes the `theme` available down the React tree.\n * It should preferably be used at **the root of your component tree**.\n *\n * // existing use case\n * // theme scoping\n */\nfunction ThemeProvider(props) {\n const {\n children,\n theme: localTheme,\n themeId\n } = props;\n const upperTheme = (0,_useThemeWithoutDefault__WEBPACK_IMPORTED_MODULE_3__[\"default\"])(EMPTY_THEME);\n const upperPrivateTheme = (0,_mui_private_theming__WEBPACK_IMPORTED_MODULE_4__[\"default\"])() || EMPTY_THEME;\n if (true) {\n if (upperTheme === null && typeof localTheme === 'function' || themeId && upperTheme && !upperTheme[themeId] && typeof localTheme === 'function') {\n console.error(['MUI: You are providing a theme function prop to the ThemeProvider component:', ' outerTheme} />', '', 'However, no outer theme is present.', 'Make sure a theme is already injected higher in the React tree ' + 'or provide a theme object.'].join('\\n'));\n }\n }\n const engineTheme = useThemeScoping(themeId, upperTheme, localTheme);\n const privateTheme = useThemeScoping(themeId, upperPrivateTheme, localTheme, true);\n return /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)(_mui_private_theming__WEBPACK_IMPORTED_MODULE_5__[\"default\"], {\n theme: privateTheme,\n children: /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)(_mui_styled_engine__WEBPACK_IMPORTED_MODULE_6__.T.Provider, {\n value: engineTheme,\n children: children\n })\n });\n}\n true ? ThemeProvider.propTypes /* remove-proptypes */ = {\n // ----------------------------- Warning --------------------------------\n // | These PropTypes are generated from the TypeScript type definitions |\n // | To update them edit the d.ts file and run \"yarn proptypes\" |\n // ----------------------------------------------------------------------\n /**\n * Your component tree.\n */\n children: (prop_types__WEBPACK_IMPORTED_MODULE_7___default().node),\n /**\n * A theme object. You can provide a function to extend the outer theme.\n */\n theme: prop_types__WEBPACK_IMPORTED_MODULE_7___default().oneOfType([(prop_types__WEBPACK_IMPORTED_MODULE_7___default().func), (prop_types__WEBPACK_IMPORTED_MODULE_7___default().object)]).isRequired,\n /**\n * The design system's unique id for getting the corresponded theme when there are multiple design systems.\n */\n themeId: (prop_types__WEBPACK_IMPORTED_MODULE_7___default().string)\n} : 0;\nif (true) {\n true ? ThemeProvider.propTypes = (0,_mui_utils__WEBPACK_IMPORTED_MODULE_8__[\"default\"])(ThemeProvider.propTypes) : 0;\n}\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (ThemeProvider);\n\n//# sourceURL=webpack://parus_8_panels_plugin/./node_modules/@mui/system/esm/ThemeProvider/ThemeProvider.js?"); + +/***/ }), + /***/ "./node_modules/@mui/system/esm/borders.js": /*!*************************************************!*\ !*** ./node_modules/@mui/system/esm/borders.js ***! @@ -3341,6 +3572,17 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac /***/ }), +/***/ "./app/components/p8p_svg.js": +/*!***********************************!*\ + !*** ./app/components/p8p_svg.js ***! + \***********************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ P8PSVG: () => (/* binding */ P8PSVG)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! prop-types */ \"./node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_1__);\n/*\r\n Парус 8 - Панели мониторинга\r\n Компонент: Интерактивные изображения SVG\r\n*/\n\n//---------------------\n//Подключение библиотек\n//---------------------\n\n //Классы React\n //Контроль свойств компонента\n\n//---------\n//Константы\n//---------\n\n//Стили\nconst STYLES = {\n CANVAS: {\n width: \"100%\",\n height: \"100%\"\n }\n};\n\n//Структура элемента изображения\nconst P8P_SVG_ITEM_SHAPE = prop_types__WEBPACK_IMPORTED_MODULE_1___default().shape({\n id: (prop_types__WEBPACK_IMPORTED_MODULE_1___default().string).isRequired,\n backgroundColor: prop_types__WEBPACK_IMPORTED_MODULE_1___default().oneOfType([(prop_types__WEBPACK_IMPORTED_MODULE_1___default().string), prop_types__WEBPACK_IMPORTED_MODULE_1___default().arrayOf((prop_types__WEBPACK_IMPORTED_MODULE_1___default().string))])\n});\n\n//-----------\n//Тело модуля\n//-----------\n\n//Интерактивные изображения SVG\nconst P8PSVG = ({\n data,\n items,\n onClick,\n style\n}) => {\n //Ссылки на DOM\n const svgContainerRef = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(null);\n const svgRef = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(null);\n\n //Обработка нажатия на элемент изображения\n const handleClick = e => {\n if (e.target.id && items && onClick) {\n const item = items.find(item => item.id == e.target.id);\n if (item) onClick({\n item\n });\n }\n };\n\n //Формирование интерактивных элементов изображения\n const makeSVGItems = () => {\n items.forEach(item => {\n const svgE = document.getElementById(item.id);\n if (svgE) {\n svgE.setAttribute(\"style\", `${onClick ? \"cursor: pointer\" : \"\"}; ${item.backgroundColor ? `fill: ${item.backgroundColor}` : \"\"}`);\n if (item?.title) {\n const titleE = document.createElementNS(\"http://www.w3.org/2000/svg\", \"title\");\n titleE.textContent = item.title;\n svgE.replaceChildren(titleE);\n }\n }\n });\n };\n\n //Загрузка изображения\n const loadSVG = () => {\n const parser = new DOMParser();\n const doc = parser.parseFromString(data, \"image/svg+xml\");\n svgRef.current = doc.documentElement;\n svgRef.current.onclick = handleClick;\n svgContainerRef.current.replaceChildren(svgRef.current);\n if (items) makeSVGItems(items);\n };\n\n //При обновлении данных\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n console.log(items);\n loadSVG();\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [data, items]);\n\n //Генерация содержимого\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n ref: svgContainerRef,\n style: {\n ...STYLES.CANVAS,\n ...(style ? style : {})\n }\n });\n};\n\n//Контроль свойств - Интерактивные изображения SVG\nP8PSVG.propTypes = {\n data: (prop_types__WEBPACK_IMPORTED_MODULE_1___default().string).isRequired,\n items: prop_types__WEBPACK_IMPORTED_MODULE_1___default().arrayOf(P8P_SVG_ITEM_SHAPE),\n onClick: (prop_types__WEBPACK_IMPORTED_MODULE_1___default().func),\n style: (prop_types__WEBPACK_IMPORTED_MODULE_1___default().object)\n};\n\n//----------------\n//Интерфейс модуля\n//----------------\n\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/components/p8p_svg.js?"); + +/***/ }), + /***/ "./app/components/p8p_table.js": /*!*************************************!*\ !*** ./app/components/p8p_table.js ***! @@ -3348,7 +3590,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ P8PTable: () => (/* binding */ P8PTable),\n/* harmony export */ P8P_TABLE_DATA_TYPE: () => (/* binding */ P8P_TABLE_DATA_TYPE),\n/* harmony export */ P8P_TABLE_FILTER_SHAPE: () => (/* binding */ P8P_TABLE_FILTER_SHAPE),\n/* harmony export */ P8P_TABLE_SIZE: () => (/* binding */ P8P_TABLE_SIZE)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! prop-types */ \"./node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/IconButton/IconButton.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Icon/Icon.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/MenuItem/MenuItem.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Divider/Divider.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Menu/Menu.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Dialog/Dialog.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/DialogTitle/DialogTitle.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/DialogContent/DialogContent.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/DialogActions/DialogActions.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Button/Button.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/TextField/TextField.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Stack/Stack.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Chip/Chip.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/TableCell/TableCell.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/TableContainer/TableContainer.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Paper/Paper.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Table/Table.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_22__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/TableHead/TableHead.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_23__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/TableRow/TableRow.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_24__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Link/Link.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_25__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/TableBody/TableBody.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_26__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Container/Container.js\");\n/* harmony import */ var _mui_material_styles__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! @mui/material/styles */ \"./node_modules/@mui/material/styles/useTheme.js\");\n/* harmony import */ var _p8p_app_message__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./p8p_app_message */ \"./app/components/p8p_app_message.js\");\n/* harmony import */ var _p8p_table_reducer__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./p8p_table_reducer */ \"./app/components/p8p_table_reducer.js\");\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n/*\r\n Парус 8 - Панели мониторинга\r\n Компонент: Таблица\r\n*/\n\n//---------------------\n//Подключение библиотек\n//---------------------\n\n //Классы React\n //Контроль свойств компонента\n //Интерфейсные компоненты\n //Взаимодействие со стилями MUI\n //Встраиваемое сообщение об ошибке\n //Редьюсер состояния\n\n//---------\n//Константы\n//---------\n\n//Размеры отступов\nconst P8P_TABLE_SIZE = {\n SMALL: \"small\",\n MEDIUM: \"medium\"\n};\n\n//Типы данных\nconst P8P_TABLE_DATA_TYPE = {\n STR: \"STR\",\n NUMB: \"NUMB\",\n DATE: \"DATE\"\n};\n\n//Направления сортировки\nconst P8P_TABLE_COLUMN_ORDER_DIRECTIONS = {\n ASC: \"ASC\",\n DESC: \"DESC\"\n};\n\n//Действия панели инструментов столбца\nconst P8P_TABLE_COLUMN_TOOL_BAR_ACTIONS = {\n ORDER_TOGGLE: \"ORDER_TOGGLE\",\n FILTER_TOGGLE: \"FILTER_TOGGLE\",\n EXPAND_TOGGLE: \"EXPAND_TOGGLE\"\n};\n\n//Действия меню столбца\nconst P8P_TABLE_COLUMN_MENU_ACTIONS = {\n ORDER_ASC: \"ORDER_ASC\",\n ORDER_DESC: \"ORDER_DESC\",\n FILTER: \"FILTER\"\n};\n\n//Структура элемента описания фильтра\nconst P8P_TABLE_FILTER_SHAPE = prop_types__WEBPACK_IMPORTED_MODULE_3___default().shape({\n name: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().string).isRequired,\n from: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().any),\n to: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().any)\n});\n\n//Стили\nconst STYLES = {\n TABLE: {\n with: \"100%\"\n },\n TABLE_HEAD_STICKY: {\n position: \"sticky\",\n top: 0,\n zIndex: 1000\n },\n TABLE_HEAD_CELL_STICKY: (theme, left) => ({\n position: \"sticky\",\n left,\n backgroundColor: theme.palette.background.default,\n zIndex: 1000\n }),\n TABLE_ROW: {\n \"&:last-child td, &:last-child th\": {\n border: 0\n }\n },\n TABLE_CELL_STICKY: (theme, left) => ({\n position: \"sticky\",\n left,\n backgroundColor: theme.palette.background.default,\n zIndex: 500\n }),\n TABLE_CELL_EXPAND_CONTROL: {\n minWidth: \"60px\",\n maxWidth: \"60px\"\n },\n TABLE_CELL_EXPAND_CONTAINER: {\n paddingBottom: 0,\n paddingTop: 0\n },\n TABLE_CELL_GROUP_HEADER: {\n backgroundColor: \"lightgray\"\n },\n TABLE_CELL_GROUP_HEADER_STICKY: {\n position: \"sticky\",\n left: 0\n },\n TABLE_COLUMN_STACK: {\n alignItems: \"center\"\n },\n TABLE_COLUMN_MENU_ITEM_ICON: {\n paddingRight: \"10px\"\n },\n FILTER_CHIP: {\n alignItems: \"center\"\n },\n MORE_BUTTON_CONTAINER: {\n with: \"100%\",\n textAlign: \"center\",\n padding: \"5px\"\n }\n};\n\n//--------------------------------\n//Вспомогательные классы и функции\n//--------------------------------\n\n//Панель инструментов столбца (левая)\nconst P8PTableColumnToolBarLeft = ({\n columnDef,\n onItemClick\n}) => {\n //Кнопка развёртывания/свёртывания\n let expButton = null;\n if (columnDef.expandable) expButton = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n onClick: () => onItemClick ? onItemClick(P8P_TABLE_COLUMN_TOOL_BAR_ACTIONS.EXPAND_TOGGLE, columnDef.name) : null\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_5__[\"default\"], null, columnDef.expanded ? \"indeterminate_check_box\" : \"add_box\"));\n\n //Генерация содержимого\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), null, expButton);\n};\n\n//Контроль свойств - Панель инструментов столбца (левая)\nP8PTableColumnToolBarLeft.propTypes = {\n columnDef: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().object).isRequired,\n onItemClick: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().func)\n};\n\n//Панель инструментов столбца (правая)\nconst P8PTableColumnToolBarRight = ({\n columnDef,\n orders,\n filters,\n onItemClick\n}) => {\n //Кнопка сортировки\n const order = orders.find(o => o.name == columnDef.name);\n let orderButton = null;\n if (order) orderButton = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n onClick: () => onItemClick ? onItemClick(P8P_TABLE_COLUMN_TOOL_BAR_ACTIONS.ORDER_TOGGLE, columnDef.name) : null\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_5__[\"default\"], null, order.direction === P8P_TABLE_COLUMN_ORDER_DIRECTIONS.ASC ? \"arrow_upward\" : \"arrow_downward\"));\n\n //Кнопка фильтрации\n const filter = filters.find(f => f.name == columnDef.name);\n let filterButton = null;\n if ((0,_p8p_table_reducer__WEBPACK_IMPORTED_MODULE_2__.hasValue)(filter?.from) || (0,_p8p_table_reducer__WEBPACK_IMPORTED_MODULE_2__.hasValue)(filter?.to)) filterButton = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n onClick: () => onItemClick ? onItemClick(P8P_TABLE_COLUMN_TOOL_BAR_ACTIONS.FILTER_TOGGLE, columnDef.name) : null\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_5__[\"default\"], null, \"filter_alt\"));\n\n //Генерация содержимого\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), null, orderButton, filterButton);\n};\n\n//Контроль свойств - Панель инструментов столбца (правая)\nP8PTableColumnToolBarRight.propTypes = {\n columnDef: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().object).isRequired,\n orders: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().array).isRequired,\n filters: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().array).isRequired,\n onItemClick: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().func)\n};\n\n//Меню столбца\nconst P8PTableColumnMenu = ({\n columnDef,\n orderAscItemCaption,\n orderDescItemCaption,\n filterItemCaption,\n onItemClick\n}) => {\n //Собственное состояние\n const [anchorEl, setAnchorEl] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(null);\n\n //Флаг отображения\n const open = Boolean(anchorEl);\n\n //По нажатию на открытие меню\n const handleMenuButtonClick = event => {\n setAnchorEl(event.currentTarget);\n };\n\n //По нажатию на пункт меню\n const handleMenuItemClick = (event, index, action, columnName) => {\n if (onItemClick) onItemClick(action, columnName);\n setAnchorEl(null);\n };\n\n //При закрытии меню\n const handleMenuClose = () => {\n setAnchorEl(null);\n };\n\n //Формирование списка элементов меню в зависимости от описания колонки таблицы\n const menuItems = [];\n if (columnDef.order === true) {\n menuItems.push( /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n key: \"orderAsc\",\n onClick: (event, index) => handleMenuItemClick(event, index, P8P_TABLE_COLUMN_MENU_ACTIONS.ORDER_ASC, columnDef.name)\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_5__[\"default\"], {\n sx: STYLES.TABLE_COLUMN_MENU_ITEM_ICON\n }, \"arrow_upward\"), orderAscItemCaption));\n menuItems.push( /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n key: \"orderDesc\",\n onClick: (event, index) => handleMenuItemClick(event, index, P8P_TABLE_COLUMN_MENU_ACTIONS.ORDER_DESC, columnDef.name)\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_5__[\"default\"], {\n sx: STYLES.TABLE_COLUMN_MENU_ITEM_ICON\n }, \"arrow_downward\"), orderDescItemCaption));\n }\n if (columnDef.filter === true) {\n if (menuItems.length > 0) menuItems.push( /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_7__[\"default\"], {\n key: \"divider\",\n sx: {\n my: 0.5\n }\n }));\n menuItems.push( /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n key: \"filter\",\n onClick: (event, index) => handleMenuItemClick(event, index, P8P_TABLE_COLUMN_MENU_ACTIONS.FILTER, columnDef.name)\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_5__[\"default\"], {\n sx: STYLES.TABLE_COLUMN_MENU_ITEM_ICON\n }, \"filter_alt\"), filterItemCaption));\n }\n\n //Генерация содержимого\n return menuItems.length > 0 ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n id: `${columnDef.name}_menu_button`,\n \"aria-haspopup\": \"true\",\n onClick: handleMenuButtonClick\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_5__[\"default\"], null, \"more_vert\")), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_8__[\"default\"], {\n id: `${columnDef.name}_menu`,\n anchorEl: anchorEl,\n open: open,\n onClose: handleMenuClose\n }, menuItems)) : null;\n};\n\n//Контроль свойств - Меню столбца\nP8PTableColumnMenu.propTypes = {\n columnDef: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().object).isRequired,\n orderAscItemCaption: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().string).isRequired,\n orderDescItemCaption: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().string).isRequired,\n filterItemCaption: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().string).isRequired,\n onItemClick: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().func)\n};\n\n//Диалог подсказки\nconst P8PTableColumnHintDialog = ({\n columnDef,\n okBtnCaption,\n onOk\n}) => {\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_9__[\"default\"], {\n open: true,\n \"aria-labelledby\": \"filter-dialog-title\",\n \"aria-describedby\": \"filter-dialog-description\",\n onClose: () => onOk ? onOk() : null\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_10__[\"default\"], {\n id: \"filter-dialog-title\"\n }, columnDef.caption), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_11__[\"default\"], null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n dangerouslySetInnerHTML: {\n __html: columnDef.hint\n }\n })), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_12__[\"default\"], null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_13__[\"default\"], {\n onClick: () => onOk ? onOk() : null\n }, okBtnCaption)));\n};\n\n//Контроль свойств - Диалог подсказки\nP8PTableColumnHintDialog.propTypes = {\n columnDef: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().object).isRequired,\n okBtnCaption: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().string).isRequired,\n onOk: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().func)\n};\n\n//Диалог фильтра\nconst P8PTableColumnFilterDialog = ({\n columnDef,\n from,\n to,\n valueCaption,\n valueFromCaption,\n valueToCaption,\n okBtnCaption,\n clearBtnCaption,\n cancelBtnCaption,\n valueFormatter,\n onOk,\n onClear,\n onCancel\n}) => {\n //Собственное состояние - значения с-по\n const [filterValues, setFilterValues] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({\n from,\n to\n });\n\n //Отработка воода значения в фильтр\n const handleFilterTextFieldChanged = e => {\n setFilterValues(prev => ({\n ...prev,\n [e.target.name]: e.target.value\n }));\n };\n\n //Элементы ввода значений фильтра\n let inputs = null;\n if (Array.isArray(columnDef.values) && columnDef.values.length > 0) {\n inputs = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_14__[\"default\"], {\n name: \"from\",\n fullWidth: true,\n select: true,\n label: valueCaption,\n variant: \"standard\",\n value: filterValues.from,\n onChange: handleFilterTextFieldChanged\n }, columnDef.values.map((v, i) => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n key: i,\n value: v\n }, valueFormatter ? valueFormatter({\n value: v,\n columnDef\n }) : v)));\n } else {\n switch (columnDef.dataType) {\n case P8P_TABLE_DATA_TYPE.STR:\n {\n inputs = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_14__[\"default\"], {\n name: \"from\",\n fullWidth: true,\n InputLabelProps: {\n shrink: true\n },\n value: filterValues.from,\n onChange: handleFilterTextFieldChanged,\n label: valueCaption,\n variant: \"standard\"\n });\n break;\n }\n case P8P_TABLE_DATA_TYPE.NUMB:\n case P8P_TABLE_DATA_TYPE.DATE:\n {\n inputs = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_14__[\"default\"], {\n name: \"from\",\n InputLabelProps: {\n shrink: true\n },\n type: columnDef.dataType == P8P_TABLE_DATA_TYPE.NUMB ? \"number\" : \"date\",\n value: filterValues.from,\n onChange: handleFilterTextFieldChanged,\n label: valueFromCaption,\n variant: \"standard\"\n }), \"\\xA0\", /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_14__[\"default\"], {\n name: \"to\",\n InputLabelProps: {\n shrink: true\n },\n type: columnDef.dataType == P8P_TABLE_DATA_TYPE.NUMB ? \"number\" : \"date\",\n value: filterValues.to,\n onChange: handleFilterTextFieldChanged,\n label: valueToCaption,\n variant: \"standard\"\n }));\n break;\n }\n }\n }\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_9__[\"default\"], {\n open: true,\n \"aria-labelledby\": \"filter-dialog-title\",\n \"aria-describedby\": \"filter-dialog-description\",\n onClose: () => onCancel ? onCancel(columnDef.name) : null\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_10__[\"default\"], {\n id: \"filter-dialog-title\"\n }, columnDef.caption), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_11__[\"default\"], null, inputs), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_12__[\"default\"], null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_13__[\"default\"], {\n onClick: () => onOk ? onOk(columnDef.name, filterValues.from, filterValues.to) : null\n }, okBtnCaption), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_13__[\"default\"], {\n onClick: () => onClear ? onClear(columnDef.name) : null,\n variant: \"secondary\"\n }, clearBtnCaption), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_13__[\"default\"], {\n onClick: () => onCancel ? onCancel(columnDef.name) : null\n }, cancelBtnCaption)));\n};\n\n//Контроль свойств - Диалог фильтра\nP8PTableColumnFilterDialog.propTypes = {\n columnDef: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().object).isRequired,\n from: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().any),\n to: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().any),\n valueCaption: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().string).isRequired,\n valueFromCaption: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().string).isRequired,\n valueToCaption: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().string).isRequired,\n okBtnCaption: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().string).isRequired,\n clearBtnCaption: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().string).isRequired,\n cancelBtnCaption: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().string).isRequired,\n valueFormatter: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().func),\n onOk: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().func),\n onClear: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().func),\n onCancel: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().func)\n};\n\n//Сводный фильтр\nconst P8PTableFiltersChips = ({\n filters,\n columnsDef,\n valueFromCaption,\n valueToCaption,\n onFilterChipClick,\n onFilterChipDelete,\n valueFormatter\n}) => {\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_15__[\"default\"], {\n direction: \"row\",\n spacing: 1,\n pb: 2\n }, filters.map((filter, i) => {\n const columnDef = columnsDef.find(columnDef => columnDef.name == filter.name);\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_16__[\"default\"], {\n key: i,\n label: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_15__[\"default\"], {\n direction: \"row\",\n sx: STYLES.FILTER_CHIP\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"strong\", null, columnDef.caption), \":\\xA0\", (0,_p8p_table_reducer__WEBPACK_IMPORTED_MODULE_2__.hasValue)(filter.from) && !columnDef.values && columnDef.dataType != P8P_TABLE_DATA_TYPE.STR ? `${valueFromCaption.toLowerCase()} ` : null, (0,_p8p_table_reducer__WEBPACK_IMPORTED_MODULE_2__.hasValue)(filter.from) ? valueFormatter ? valueFormatter({\n value: filter.from,\n columnDef\n }) : filter.from : null, (0,_p8p_table_reducer__WEBPACK_IMPORTED_MODULE_2__.hasValue)(filter.to) && !columnDef.values && columnDef.dataType != P8P_TABLE_DATA_TYPE.STR ? ` ${valueToCaption.toLowerCase()} ` : null, (0,_p8p_table_reducer__WEBPACK_IMPORTED_MODULE_2__.hasValue)(filter.to) ? valueFormatter ? valueFormatter({\n value: filter.to,\n columnDef\n }) : filter.to : null),\n variant: \"outlined\",\n onClick: () => onFilterChipClick ? onFilterChipClick(columnDef.name) : null,\n onDelete: () => onFilterChipDelete ? onFilterChipDelete(columnDef.name) : null\n });\n }));\n};\n\n//Контроль свойств - Сводный фильтр\nP8PTableFiltersChips.propTypes = {\n filters: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().array).isRequired,\n columnsDef: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().array).isRequired,\n valueFromCaption: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().string).isRequired,\n valueToCaption: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().string).isRequired,\n onFilterChipClick: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().func),\n onFilterChipDelete: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().func),\n valueFormatter: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().func)\n};\n\n//-----------\n//Тело модуля\n//-----------\n\n//Таблица\nconst P8PTable = ({\n columnsDef,\n groups,\n rows,\n orders,\n filters,\n size,\n fixedHeader = false,\n fixedColumns = 0,\n morePages = false,\n reloading,\n expandable,\n orderAscMenuItemCaption,\n orderDescMenuItemCaption,\n filterMenuItemCaption,\n valueFilterCaption,\n valueFromFilterCaption,\n valueToFilterCaption,\n okFilterBtnCaption,\n clearFilterBtnCaption,\n cancelFilterBtnCaption,\n morePagesBtnCaption,\n noDataFoundText,\n headCellRender,\n dataCellRender,\n groupCellRender,\n rowExpandRender,\n valueFormatter,\n onOrderChanged,\n onFilterChanged,\n onPagesCountChanged,\n objectsCopier,\n containerComponent,\n containerComponentProps\n}) => {\n //Собственное состояние - описание заголовка\n const [header, dispatchHeaderAction] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useReducer)(_p8p_table_reducer__WEBPACK_IMPORTED_MODULE_2__.p8pTableReducer, (0,_p8p_table_reducer__WEBPACK_IMPORTED_MODULE_2__.HEADER_INITIAL_STATE)());\n\n //Собственное состояние - фильтруемая колонка\n const [filterColumn, setFilterColumn] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(null);\n\n //Собственное состояние - развёрнутые строки\n const [expanded, setExpanded] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({});\n\n //Собственное состояния - развёрнутые группы\n const [expandedGroups, setExpandedGroups] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({});\n\n //Собственное состояние - колонка с отображаемой подсказкой\n const [displayHintColumn, setDisplayHintColumn] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(null);\n\n //Стили\n const theme = (0,_mui_material_styles__WEBPACK_IMPORTED_MODULE_17__[\"default\"])();\n\n //Описание фильтруемой колонки\n const filterColumnDef = filterColumn ? columnsDef.find(columnDef => columnDef.name == filterColumn) || null : null;\n\n //Описание колонки с отображаемой подсказкой\n const displayHintColumnDef = displayHintColumn ? columnsDef.find(columnDef => columnDef.name == displayHintColumn) || null : null;\n\n //Значения фильтра фильтруемой колонки\n const [filterColumnFrom, filterColumnTo] = filterColumn ? (() => {\n const filter = filters.find(filter => filter.name == filterColumn);\n return filter ? [filter.from == null ? \"\" : filter.from, filter.to == null ? \"\" : filter.to] : [\"\", \"\"];\n })() : [\"\", \"\"];\n\n //Формирование заголовка таблицы\n const setHeader = ({\n columnsDef,\n expandable,\n fixedColumns,\n objectsCopier\n }) => dispatchHeaderAction({\n type: _p8p_table_reducer__WEBPACK_IMPORTED_MODULE_2__.P8P_TABLE_AT.SET_HEADER,\n payload: {\n columnsDef,\n expandable,\n fixedColumns,\n objectsCopier\n }\n });\n\n //Сворачивание/разворачивание уровня заголовка таблицы\n const toggleHeaderExpand = ({\n columnName,\n objectsCopier\n }) => dispatchHeaderAction({\n type: _p8p_table_reducer__WEBPACK_IMPORTED_MODULE_2__.P8P_TABLE_AT.TOGGLE_HEADER_EXPAND,\n payload: {\n columnName,\n expandable,\n fixedColumns,\n objectsCopier\n }\n });\n\n //Выравнивание в зависимости от типа данных\n const getAlignByDataType = ({\n dataType,\n hasChild\n }) => dataType === P8P_TABLE_DATA_TYPE.DATE || hasChild ? \"center\" : dataType === P8P_TABLE_DATA_TYPE.NUMB ? \"right\" : \"left\";\n\n //Упорядочение содержимого в зависимости от типа данных\n const getJustifyContentByDataType = ({\n dataType,\n hasChild\n }) => dataType === P8P_TABLE_DATA_TYPE.DATE || hasChild ? \"center\" : dataType === P8P_TABLE_DATA_TYPE.NUMB ? \"flex-end\" : \"flex-start\";\n\n //Отработка нажатия на элемент пункта меню\n const handleToolBarItemClick = (action, columnName) => {\n switch (action) {\n case P8P_TABLE_COLUMN_TOOL_BAR_ACTIONS.ORDER_TOGGLE:\n {\n const colOrder = orders.find(o => o.name == columnName);\n const newDirection = colOrder?.direction == P8P_TABLE_COLUMN_ORDER_DIRECTIONS.ASC ? P8P_TABLE_COLUMN_ORDER_DIRECTIONS.DESC : colOrder?.direction == P8P_TABLE_COLUMN_ORDER_DIRECTIONS.DESC ? null : P8P_TABLE_COLUMN_ORDER_DIRECTIONS.ASC;\n if (onOrderChanged) onOrderChanged({\n columnName,\n direction: newDirection\n });\n break;\n }\n case P8P_TABLE_COLUMN_TOOL_BAR_ACTIONS.FILTER_TOGGLE:\n setFilterColumn(columnName);\n break;\n case P8P_TABLE_COLUMN_TOOL_BAR_ACTIONS.EXPAND_TOGGLE:\n toggleHeaderExpand({\n columnName,\n objectsCopier\n });\n break;\n }\n };\n\n //Отработка нажатия на пункты меню\n const handleMenuItemClick = (action, columnName) => {\n switch (action) {\n case P8P_TABLE_COLUMN_MENU_ACTIONS.ORDER_ASC:\n onOrderChanged({\n columnName,\n direction: P8P_TABLE_COLUMN_ORDER_DIRECTIONS.ASC\n });\n break;\n case P8P_TABLE_COLUMN_MENU_ACTIONS.ORDER_DESC:\n onOrderChanged({\n columnName,\n direction: P8P_TABLE_COLUMN_ORDER_DIRECTIONS.DESC\n });\n break;\n case P8P_TABLE_COLUMN_MENU_ACTIONS.FILTER:\n setFilterColumn(columnName);\n break;\n }\n };\n\n //Отработка ввода значения фильтра колонки\n const handleFilterOk = (columnName, from, to) => {\n if (onFilterChanged) onFilterChanged({\n columnName,\n from: from === \"\" ? null : from,\n to: to === \"\" ? null : to\n });\n setFilterColumn(null);\n };\n\n //Отработка очистки значения фильтра колонки\n const handleFilterClear = columnName => {\n if (onFilterChanged) onFilterChanged({\n columnName,\n from: null,\n to: null\n });\n setFilterColumn(null);\n };\n\n //Отработка отмены ввода значения фильтра колонки\n const handleFilterCancel = () => {\n setFilterColumn(null);\n };\n\n //Отработка нажатия на элемент сводного фильтра\n const handleFilterChipClick = columnName => setFilterColumn(columnName);\n\n //Отработка удаления элемента сводного фильтра\n const handleFilterChipDelete = columnName => onFilterChanged ? onFilterChanged({\n columnName,\n from: null,\n to: null\n }) : null;\n\n //Отработка нажатия на кнопку догрузки страницы\n const handleMorePagesBtnClick = () => {\n if (onPagesCountChanged) onPagesCountChanged();\n };\n\n //Отработка нажатия на элемент отображения подсказки по колонке\n const handleColumnShowHintClick = columnName => setDisplayHintColumn(columnName);\n\n //Отработка сокрытия подсказки по колонке\n const handleHintOk = () => setDisplayHintColumn(null);\n\n //Отработка нажатия на кнопку раскрытия элемента\n const handleExpandClick = rowIndex => {\n if (expanded[rowIndex] === true) setExpanded(pv => {\n let res = {\n ...pv\n };\n delete res[rowIndex];\n return res;\n });else setExpanded(pv => ({\n ...pv,\n [rowIndex]: true\n }));\n };\n\n //При перезагрузке данных\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n if (reloading) setExpanded({});\n }, [reloading]);\n\n //При изменении описания колонок\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n setHeader({\n columnsDef,\n expandable,\n fixedColumns,\n objectsCopier\n });\n }, [columnsDef, expandable, fixedColumns, objectsCopier]);\n\n //Генерация заголовка группы\n const renderGroupCell = group => {\n let customRender = {};\n if (groupCellRender) customRender = groupCellRender({\n columnsDef: header.columnsDef,\n group\n }) || {};\n return header.displayDataColumns.map((columnDef, i) => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_18__[\"default\"], _extends({\n key: `group-header-cell-${i}`\n }, customRender.cellProps, {\n sx: {\n ...STYLES.TABLE_CELL_GROUP_HEADER,\n ...customRender.cellStyle,\n ...(columnDef.width ? {\n minWidth: columnDef.width,\n maxWidth: columnDef.width\n } : {}),\n ...(i == 0 && fixedColumns ? STYLES.TABLE_CELL_GROUP_HEADER_STICKY : {})\n },\n colSpan: expandable && rowExpandRender ? 2 : 1\n }), i == 0 ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_15__[\"default\"], {\n direction: \"row\",\n sx: STYLES.TABLE_COLUMN_STACK\n }, group.expandable ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n onClick: () => {\n setExpandedGroups(pv => ({\n ...pv,\n ...{\n [group.name]: !pv[group.name]\n }\n }));\n }\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_5__[\"default\"], null, expandedGroups[group.name] ? \"indeterminate_check_box\" : \"add_box\")) : null, customRender.data ? customRender.data : group.caption) : null));\n };\n\n //Генерация содержимого\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", null, displayHintColumn ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(P8PTableColumnHintDialog, {\n columnDef: displayHintColumnDef,\n okBtnCaption: okFilterBtnCaption,\n onOk: handleHintOk\n }) : null, filterColumn ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(P8PTableColumnFilterDialog, {\n columnDef: filterColumnDef,\n from: filterColumnFrom,\n to: filterColumnTo,\n valueCaption: valueFilterCaption,\n valueFromCaption: valueFromFilterCaption,\n valueToCaption: valueToFilterCaption,\n okBtnCaption: okFilterBtnCaption,\n clearBtnCaption: clearFilterBtnCaption,\n cancelBtnCaption: cancelFilterBtnCaption,\n valueFormatter: valueFormatter,\n onOk: handleFilterOk,\n onClear: handleFilterClear,\n onCancel: handleFilterCancel\n }) : null, Array.isArray(filters) && filters.length > 0 ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(P8PTableFiltersChips, {\n filters: filters,\n columnsDef: columnsDef,\n valueFromCaption: valueFromFilterCaption,\n valueToCaption: valueToFilterCaption,\n onFilterChipClick: handleFilterChipClick,\n onFilterChipDelete: handleFilterChipDelete,\n valueFormatter: valueFormatter\n }) : null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_19__[\"default\"], _extends({\n component: containerComponent ? containerComponent : _mui_material__WEBPACK_IMPORTED_MODULE_20__[\"default\"]\n }, containerComponentProps ? containerComponentProps : {}), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_21__[\"default\"], {\n stickyHeader: fixedHeader,\n sx: STYLES.TABLE,\n size: size || P8P_TABLE_SIZE.MEDIUM\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_22__[\"default\"], {\n sx: fixedHeader ? STYLES.TABLE_HEAD_STICKY : {}\n }, header.displayLevels.map((level, i) => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_23__[\"default\"], {\n key: level\n }, expandable && rowExpandRender && i == 0 ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_18__[\"default\"], {\n key: \"head-cell-expand-control\",\n align: \"center\",\n sx: {\n ...STYLES.TABLE_CELL_EXPAND_CONTROL,\n ...(fixedColumns ? STYLES.TABLE_HEAD_CELL_STICKY(theme, 0) : {})\n },\n rowSpan: header.displayLevelsColumns[level][0].rowSpan\n }) : null, header.displayLevelsColumns[level].map((columnDef, j) => {\n let customRender = {};\n if (headCellRender) customRender = headCellRender({\n columnDef\n }) || {};\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_18__[\"default\"], _extends({\n key: `head-cell-${j}`,\n align: getAlignByDataType(columnDef),\n sx: {\n ...customRender.cellStyle,\n ...(columnDef.width ? {\n minWidth: columnDef.width,\n maxWidth: columnDef.width\n } : {}),\n ...(columnDef.fixed ? STYLES.TABLE_HEAD_CELL_STICKY(theme, columnDef.fixedLeft) : {})\n },\n rowSpan: columnDef.rowSpan,\n colSpan: columnDef.colSpan\n }, customRender.cellProps), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_15__[\"default\"], _extends({\n direction: \"row\",\n justifyContent: getJustifyContentByDataType(columnDef),\n sx: {\n ...STYLES.TABLE_COLUMN_STACK,\n ...customRender.stackStyle\n }\n }, customRender.stackProps), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(P8PTableColumnToolBarLeft, {\n columnDef: columnDef,\n onItemClick: handleToolBarItemClick\n }), customRender.data ? customRender.data : columnDef.hint ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_24__[\"default\"], {\n component: \"button\",\n variant: \"body2\",\n align: \"left\",\n underline: \"always\",\n onClick: () => handleColumnShowHintClick(columnDef.name)\n }, columnDef.caption) : columnDef.caption, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(P8PTableColumnToolBarRight, {\n columnDef: columnDef,\n orders: orders,\n filters: filters,\n onItemClick: handleToolBarItemClick\n }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(P8PTableColumnMenu, {\n columnDef: columnDef,\n orderAscItemCaption: orderAscMenuItemCaption,\n orderDescItemCaption: orderDescMenuItemCaption,\n filterItemCaption: filterMenuItemCaption,\n onItemClick: handleMenuItemClick\n })));\n })))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_25__[\"default\"], null, rows.length > 0 ? (Array.isArray(groups) && groups.length > 0 ? groups : [{}]).map((group, g) => {\n const rowsView = rows.map((row, i) => !group?.name || group?.name == row.groupName ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), {\n key: `data-${i}`\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_23__[\"default\"], {\n key: `data-row-${i}`,\n sx: STYLES.TABLE_ROW\n }, expandable && rowExpandRender ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_18__[\"default\"], {\n key: `data-cell-expand-control-${i}`,\n align: \"center\",\n sx: {\n ...STYLES.TABLE_CELL_EXPAND_CONTROL,\n ...(fixedColumns ? STYLES.TABLE_CELL_STICKY(theme, 0) : {})\n }\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n onClick: () => handleExpandClick(i)\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_5__[\"default\"], null, expanded[i] === true ? \"keyboard_arrow_down\" : \"keyboard_arrow_right\"))) : null, header.displayDataColumns.map((columnDef, j) => {\n let customRender = {};\n if (dataCellRender) customRender = dataCellRender({\n row,\n columnDef\n }) || {};\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_18__[\"default\"], _extends({\n key: `data-cell-${j}`,\n align: getAlignByDataType(columnDef),\n sx: {\n ...customRender.cellStyle,\n ...(columnDef.width ? {\n minWidth: columnDef.width,\n maxWidth: columnDef.width\n } : {}),\n ...(columnDef.fixed ? STYLES.TABLE_CELL_STICKY(theme, columnDef.fixedLeft) : {})\n }\n }, customRender.cellProps), customRender.data ? customRender.data : valueFormatter ? valueFormatter({\n value: row[columnDef.name],\n columnDef\n }) : row[columnDef.name]);\n })), expandable && rowExpandRender && expanded[i] === true ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_23__[\"default\"], {\n key: `data-row-expand-${i}`\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_18__[\"default\"], {\n sx: {\n ...STYLES.TABLE_CELL_EXPAND_CONTAINER,\n ...(fixedColumns ? STYLES.TABLE_CELL_STICKY(theme, 0) : {})\n },\n colSpan: fixedColumns ? header.displayFixedColumnsCount + 1 : header.displayDataColumnsCount\n }, rowExpandRender({\n columnsDef,\n row\n }))) : null) : null);\n return !group?.name ? rowsView : /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), {\n key: `group-${g}`\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_23__[\"default\"], {\n key: `group-header-${g}`\n }, renderGroupCell(group)), !group.expandable || expandedGroups[group.name] === true ? rowsView : null);\n }) : null))), rows.length == 0 ? noDataFoundText && !reloading ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_p8p_app_message__WEBPACK_IMPORTED_MODULE_1__.P8PAppInlineError, {\n text: noDataFoundText\n }) : null : morePages ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_26__[\"default\"], {\n style: STYLES.MORE_BUTTON_CONTAINER\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_13__[\"default\"], {\n fullWidth: true,\n onClick: handleMorePagesBtnClick\n }, morePagesBtnCaption)) : null);\n};\n\n//Контроль свойств - Таблица\nP8PTable.propTypes = {\n columnsDef: prop_types__WEBPACK_IMPORTED_MODULE_3___default().arrayOf(prop_types__WEBPACK_IMPORTED_MODULE_3___default().shape({\n name: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().string).isRequired,\n caption: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().string).isRequired,\n order: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().bool).isRequired,\n filter: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().bool).isRequired,\n dataType: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().string).isRequired,\n visible: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().bool).isRequired,\n values: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().array),\n parent: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().string),\n expandable: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().bool).isRequired,\n expanded: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().bool).isRequired,\n width: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().number)\n })).isRequired,\n groups: prop_types__WEBPACK_IMPORTED_MODULE_3___default().arrayOf(prop_types__WEBPACK_IMPORTED_MODULE_3___default().shape({\n name: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().string).isRequired,\n caption: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().string).isRequired,\n expandable: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().bool).isRequired,\n expanded: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().bool).isRequired\n })),\n rows: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().array).isRequired,\n orders: prop_types__WEBPACK_IMPORTED_MODULE_3___default().arrayOf(prop_types__WEBPACK_IMPORTED_MODULE_3___default().shape({\n name: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().string).isRequired,\n direction: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().string).isRequired\n })).isRequired,\n filters: prop_types__WEBPACK_IMPORTED_MODULE_3___default().arrayOf(P8P_TABLE_FILTER_SHAPE).isRequired,\n size: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().string),\n fixedHeader: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().bool),\n fixedColumns: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().number),\n morePages: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().bool),\n reloading: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().bool).isRequired,\n expandable: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().bool),\n orderAscMenuItemCaption: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().string).isRequired,\n orderDescMenuItemCaption: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().string).isRequired,\n filterMenuItemCaption: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().string).isRequired,\n valueFilterCaption: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().string).isRequired,\n valueFromFilterCaption: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().string).isRequired,\n valueToFilterCaption: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().string).isRequired,\n okFilterBtnCaption: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().string).isRequired,\n clearFilterBtnCaption: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().string).isRequired,\n cancelFilterBtnCaption: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().string).isRequired,\n morePagesBtnCaption: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().string).isRequired,\n noDataFoundText: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().string),\n headCellRender: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().func),\n dataCellRender: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().func),\n groupCellRender: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().func),\n rowExpandRender: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().func),\n valueFormatter: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().func),\n onOrderChanged: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().func),\n onFilterChanged: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().func),\n onPagesCountChanged: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().func),\n objectsCopier: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().func).isRequired,\n containerComponent: prop_types__WEBPACK_IMPORTED_MODULE_3___default().oneOfType([(prop_types__WEBPACK_IMPORTED_MODULE_3___default().elementType), (prop_types__WEBPACK_IMPORTED_MODULE_3___default().string)]),\n containerComponentProps: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().object)\n};\n\n//----------------\n//Интерфейс модуля\n//----------------\n\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/components/p8p_table.js?"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ P8PTable: () => (/* binding */ P8PTable),\n/* harmony export */ P8P_TABLE_DATA_TYPE: () => (/* binding */ P8P_TABLE_DATA_TYPE),\n/* harmony export */ P8P_TABLE_FILTER_SHAPE: () => (/* binding */ P8P_TABLE_FILTER_SHAPE),\n/* harmony export */ P8P_TABLE_SIZE: () => (/* binding */ P8P_TABLE_SIZE)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! prop-types */ \"./node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/IconButton/IconButton.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Icon/Icon.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/MenuItem/MenuItem.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Divider/Divider.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Menu/Menu.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Dialog/Dialog.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/DialogTitle/DialogTitle.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/DialogContent/DialogContent.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/DialogActions/DialogActions.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Button/Button.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/TextField/TextField.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Stack/Stack.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Chip/Chip.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/TableCell/TableCell.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/TableContainer/TableContainer.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Paper/Paper.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Table/Table.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_22__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/TableHead/TableHead.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_23__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/TableRow/TableRow.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_24__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Link/Link.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_25__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/TableBody/TableBody.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_26__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Container/Container.js\");\n/* harmony import */ var _mui_material_styles__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! @mui/material/styles */ \"./node_modules/@mui/material/styles/useTheme.js\");\n/* harmony import */ var _p8p_app_message__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./p8p_app_message */ \"./app/components/p8p_app_message.js\");\n/* harmony import */ var _p8p_table_reducer__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./p8p_table_reducer */ \"./app/components/p8p_table_reducer.js\");\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n/*\r\n Парус 8 - Панели мониторинга\r\n Компонент: Таблица\r\n*/\n\n//---------------------\n//Подключение библиотек\n//---------------------\n\n //Классы React\n //Контроль свойств компонента\n //Интерфейсные компоненты\n //Взаимодействие со стилями MUI\n //Встраиваемое сообщение об ошибке\n //Редьюсер состояния\n\n//---------\n//Константы\n//---------\n\n//Размеры отступов\nconst P8P_TABLE_SIZE = {\n SMALL: \"small\",\n MEDIUM: \"medium\"\n};\n\n//Типы данных\nconst P8P_TABLE_DATA_TYPE = {\n STR: \"STR\",\n NUMB: \"NUMB\",\n DATE: \"DATE\"\n};\n\n//Направления сортировки\nconst P8P_TABLE_COLUMN_ORDER_DIRECTIONS = {\n ASC: \"ASC\",\n DESC: \"DESC\"\n};\n\n//Действия панели инструментов столбца\nconst P8P_TABLE_COLUMN_TOOL_BAR_ACTIONS = {\n ORDER_TOGGLE: \"ORDER_TOGGLE\",\n FILTER_TOGGLE: \"FILTER_TOGGLE\",\n EXPAND_TOGGLE: \"EXPAND_TOGGLE\"\n};\n\n//Действия меню столбца\nconst P8P_TABLE_COLUMN_MENU_ACTIONS = {\n ORDER_ASC: \"ORDER_ASC\",\n ORDER_DESC: \"ORDER_DESC\",\n FILTER: \"FILTER\"\n};\n\n//Структура элемента описания фильтра\nconst P8P_TABLE_FILTER_SHAPE = prop_types__WEBPACK_IMPORTED_MODULE_3___default().shape({\n name: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().string).isRequired,\n from: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().any),\n to: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().any)\n});\n\n//Стили\nconst STYLES = {\n TABLE: {\n with: \"100%\"\n },\n TABLE_HEAD_STICKY: {\n position: \"sticky\",\n top: 0,\n zIndex: 1000\n },\n TABLE_HEAD_CELL_STICKY: (theme, left) => ({\n position: \"sticky\",\n left,\n backgroundColor: theme.palette.background.default,\n zIndex: 1000\n }),\n TABLE_ROW: {\n \"&:last-child td, &:last-child th\": {\n border: 0\n }\n },\n TABLE_CELL_STICKY: (theme, left) => ({\n position: \"sticky\",\n left,\n backgroundColor: theme.palette.background.default,\n zIndex: 500\n }),\n TABLE_CELL_EXPAND_CONTROL: {\n minWidth: \"60px\",\n maxWidth: \"60px\"\n },\n TABLE_CELL_EXPAND_CONTAINER: {\n paddingBottom: 0,\n paddingTop: 0\n },\n TABLE_CELL_GROUP_HEADER: {\n backgroundColor: \"lightgray\"\n },\n TABLE_CELL_GROUP_HEADER_STICKY: {\n position: \"sticky\",\n left: 0\n },\n TABLE_COLUMN_STACK: {\n alignItems: \"center\"\n },\n TABLE_COLUMN_MENU_ITEM_ICON: {\n paddingRight: \"10px\"\n },\n FILTER_CHIP: {\n alignItems: \"center\"\n },\n MORE_BUTTON_CONTAINER: {\n with: \"100%\",\n textAlign: \"center\",\n padding: \"5px\"\n }\n};\n\n//--------------------------------\n//Вспомогательные классы и функции\n//--------------------------------\n\n//Панель инструментов столбца (левая)\nconst P8PTableColumnToolBarLeft = ({\n columnDef,\n onItemClick\n}) => {\n //Кнопка развёртывания/свёртывания\n let expButton = null;\n if (columnDef.expandable) expButton = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n onClick: () => onItemClick ? onItemClick(P8P_TABLE_COLUMN_TOOL_BAR_ACTIONS.EXPAND_TOGGLE, columnDef.name) : null\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_5__[\"default\"], null, columnDef.expanded ? \"indeterminate_check_box\" : \"add_box\"));\n\n //Генерация содержимого\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), null, expButton);\n};\n\n//Контроль свойств - Панель инструментов столбца (левая)\nP8PTableColumnToolBarLeft.propTypes = {\n columnDef: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().object).isRequired,\n onItemClick: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().func)\n};\n\n//Панель инструментов столбца (правая)\nconst P8PTableColumnToolBarRight = ({\n columnDef,\n orders,\n filters,\n onItemClick\n}) => {\n //Кнопка сортировки\n const order = orders.find(o => o.name == columnDef.name);\n let orderButton = null;\n if (order) orderButton = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n onClick: () => onItemClick ? onItemClick(P8P_TABLE_COLUMN_TOOL_BAR_ACTIONS.ORDER_TOGGLE, columnDef.name) : null\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_5__[\"default\"], null, order.direction === P8P_TABLE_COLUMN_ORDER_DIRECTIONS.ASC ? \"arrow_upward\" : \"arrow_downward\"));\n\n //Кнопка фильтрации\n const filter = filters.find(f => f.name == columnDef.name);\n let filterButton = null;\n if ((0,_p8p_table_reducer__WEBPACK_IMPORTED_MODULE_2__.hasValue)(filter?.from) || (0,_p8p_table_reducer__WEBPACK_IMPORTED_MODULE_2__.hasValue)(filter?.to)) filterButton = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n onClick: () => onItemClick ? onItemClick(P8P_TABLE_COLUMN_TOOL_BAR_ACTIONS.FILTER_TOGGLE, columnDef.name) : null\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_5__[\"default\"], null, \"filter_alt\"));\n\n //Генерация содержимого\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), null, orderButton, filterButton);\n};\n\n//Контроль свойств - Панель инструментов столбца (правая)\nP8PTableColumnToolBarRight.propTypes = {\n columnDef: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().object).isRequired,\n orders: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().array).isRequired,\n filters: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().array).isRequired,\n onItemClick: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().func)\n};\n\n//Меню столбца\nconst P8PTableColumnMenu = ({\n columnDef,\n orderAscItemCaption,\n orderDescItemCaption,\n filterItemCaption,\n onItemClick\n}) => {\n //Собственное состояние\n const [anchorEl, setAnchorEl] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(null);\n\n //Флаг отображения\n const open = Boolean(anchorEl);\n\n //По нажатию на открытие меню\n const handleMenuButtonClick = event => {\n setAnchorEl(event.currentTarget);\n };\n\n //По нажатию на пункт меню\n const handleMenuItemClick = (event, index, action, columnName) => {\n if (onItemClick) onItemClick(action, columnName);\n setAnchorEl(null);\n };\n\n //При закрытии меню\n const handleMenuClose = () => {\n setAnchorEl(null);\n };\n\n //Формирование списка элементов меню в зависимости от описания колонки таблицы\n const menuItems = [];\n if (columnDef.order === true) {\n menuItems.push( /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n key: \"orderAsc\",\n onClick: (event, index) => handleMenuItemClick(event, index, P8P_TABLE_COLUMN_MENU_ACTIONS.ORDER_ASC, columnDef.name)\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_5__[\"default\"], {\n sx: STYLES.TABLE_COLUMN_MENU_ITEM_ICON\n }, \"arrow_upward\"), orderAscItemCaption));\n menuItems.push( /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n key: \"orderDesc\",\n onClick: (event, index) => handleMenuItemClick(event, index, P8P_TABLE_COLUMN_MENU_ACTIONS.ORDER_DESC, columnDef.name)\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_5__[\"default\"], {\n sx: STYLES.TABLE_COLUMN_MENU_ITEM_ICON\n }, \"arrow_downward\"), orderDescItemCaption));\n }\n if (columnDef.filter === true) {\n if (menuItems.length > 0) menuItems.push( /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_7__[\"default\"], {\n key: \"divider\",\n sx: {\n my: 0.5\n }\n }));\n menuItems.push( /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n key: \"filter\",\n onClick: (event, index) => handleMenuItemClick(event, index, P8P_TABLE_COLUMN_MENU_ACTIONS.FILTER, columnDef.name)\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_5__[\"default\"], {\n sx: STYLES.TABLE_COLUMN_MENU_ITEM_ICON\n }, \"filter_alt\"), filterItemCaption));\n }\n\n //Генерация содержимого\n return menuItems.length > 0 ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n id: `${columnDef.name}_menu_button`,\n \"aria-haspopup\": \"true\",\n onClick: handleMenuButtonClick\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_5__[\"default\"], null, \"more_vert\")), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_8__[\"default\"], {\n id: `${columnDef.name}_menu`,\n anchorEl: anchorEl,\n open: open,\n onClose: handleMenuClose\n }, menuItems)) : null;\n};\n\n//Контроль свойств - Меню столбца\nP8PTableColumnMenu.propTypes = {\n columnDef: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().object).isRequired,\n orderAscItemCaption: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().string).isRequired,\n orderDescItemCaption: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().string).isRequired,\n filterItemCaption: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().string).isRequired,\n onItemClick: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().func)\n};\n\n//Диалог подсказки\nconst P8PTableColumnHintDialog = ({\n columnDef,\n okBtnCaption,\n onOk\n}) => {\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_9__[\"default\"], {\n open: true,\n \"aria-labelledby\": \"filter-dialog-title\",\n \"aria-describedby\": \"filter-dialog-description\",\n onClose: () => onOk ? onOk() : null\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_10__[\"default\"], {\n id: \"filter-dialog-title\"\n }, columnDef.caption), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_11__[\"default\"], null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n dangerouslySetInnerHTML: {\n __html: columnDef.hint\n }\n })), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_12__[\"default\"], null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_13__[\"default\"], {\n onClick: () => onOk ? onOk() : null\n }, okBtnCaption)));\n};\n\n//Контроль свойств - Диалог подсказки\nP8PTableColumnHintDialog.propTypes = {\n columnDef: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().object).isRequired,\n okBtnCaption: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().string).isRequired,\n onOk: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().func)\n};\n\n//Диалог фильтра\nconst P8PTableColumnFilterDialog = ({\n columnDef,\n from,\n to,\n valueCaption,\n valueFromCaption,\n valueToCaption,\n okBtnCaption,\n clearBtnCaption,\n cancelBtnCaption,\n valueFormatter,\n onOk,\n onClear,\n onCancel\n}) => {\n //Собственное состояние - значения с-по\n const [filterValues, setFilterValues] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({\n from,\n to\n });\n\n //Отработка воода значения в фильтр\n const handleFilterTextFieldChanged = e => {\n setFilterValues(prev => ({\n ...prev,\n [e.target.name]: e.target.value\n }));\n };\n\n //Элементы ввода значений фильтра\n let inputs = null;\n if (Array.isArray(columnDef.values) && columnDef.values.length > 0) {\n inputs = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_14__[\"default\"], {\n name: \"from\",\n fullWidth: true,\n select: true,\n label: valueCaption,\n variant: \"standard\",\n value: filterValues.from,\n onChange: handleFilterTextFieldChanged\n }, columnDef.values.map((v, i) => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n key: i,\n value: v\n }, valueFormatter ? valueFormatter({\n value: v,\n columnDef\n }) : v)));\n } else {\n switch (columnDef.dataType) {\n case P8P_TABLE_DATA_TYPE.STR:\n {\n inputs = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_14__[\"default\"], {\n name: \"from\",\n fullWidth: true,\n InputLabelProps: {\n shrink: true\n },\n value: filterValues.from,\n onChange: handleFilterTextFieldChanged,\n label: valueCaption,\n variant: \"standard\"\n });\n break;\n }\n case P8P_TABLE_DATA_TYPE.NUMB:\n case P8P_TABLE_DATA_TYPE.DATE:\n {\n inputs = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_14__[\"default\"], {\n name: \"from\",\n InputLabelProps: {\n shrink: true\n },\n type: columnDef.dataType == P8P_TABLE_DATA_TYPE.NUMB ? \"number\" : \"date\",\n value: filterValues.from,\n onChange: handleFilterTextFieldChanged,\n label: valueFromCaption,\n variant: \"standard\"\n }), \"\\xA0\", /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_14__[\"default\"], {\n name: \"to\",\n InputLabelProps: {\n shrink: true\n },\n type: columnDef.dataType == P8P_TABLE_DATA_TYPE.NUMB ? \"number\" : \"date\",\n value: filterValues.to,\n onChange: handleFilterTextFieldChanged,\n label: valueToCaption,\n variant: \"standard\"\n }));\n break;\n }\n }\n }\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_9__[\"default\"], {\n open: true,\n \"aria-labelledby\": \"filter-dialog-title\",\n \"aria-describedby\": \"filter-dialog-description\",\n onClose: () => onCancel ? onCancel(columnDef.name) : null\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_10__[\"default\"], {\n id: \"filter-dialog-title\"\n }, columnDef.caption), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_11__[\"default\"], null, inputs), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_12__[\"default\"], null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_13__[\"default\"], {\n onClick: () => onOk ? onOk(columnDef.name, filterValues.from, filterValues.to) : null\n }, okBtnCaption), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_13__[\"default\"], {\n onClick: () => onClear ? onClear(columnDef.name) : null,\n variant: \"secondary\"\n }, clearBtnCaption), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_13__[\"default\"], {\n onClick: () => onCancel ? onCancel(columnDef.name) : null\n }, cancelBtnCaption)));\n};\n\n//Контроль свойств - Диалог фильтра\nP8PTableColumnFilterDialog.propTypes = {\n columnDef: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().object).isRequired,\n from: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().any),\n to: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().any),\n valueCaption: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().string).isRequired,\n valueFromCaption: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().string).isRequired,\n valueToCaption: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().string).isRequired,\n okBtnCaption: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().string).isRequired,\n clearBtnCaption: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().string).isRequired,\n cancelBtnCaption: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().string).isRequired,\n valueFormatter: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().func),\n onOk: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().func),\n onClear: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().func),\n onCancel: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().func)\n};\n\n//Сводный фильтр\nconst P8PTableFiltersChips = ({\n filters,\n columnsDef,\n valueFromCaption,\n valueToCaption,\n onFilterChipClick,\n onFilterChipDelete,\n valueFormatter\n}) => {\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_15__[\"default\"], {\n direction: \"row\",\n spacing: 1,\n pb: 2\n }, filters.map((filter, i) => {\n const columnDef = columnsDef.find(columnDef => columnDef.name == filter.name);\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_16__[\"default\"], {\n key: i,\n label: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_15__[\"default\"], {\n direction: \"row\",\n sx: STYLES.FILTER_CHIP\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"strong\", null, columnDef.caption), \":\\xA0\", (0,_p8p_table_reducer__WEBPACK_IMPORTED_MODULE_2__.hasValue)(filter.from) && !columnDef.values && columnDef.dataType != P8P_TABLE_DATA_TYPE.STR ? `${valueFromCaption.toLowerCase()} ` : null, (0,_p8p_table_reducer__WEBPACK_IMPORTED_MODULE_2__.hasValue)(filter.from) ? valueFormatter ? valueFormatter({\n value: filter.from,\n columnDef\n }) : filter.from : null, (0,_p8p_table_reducer__WEBPACK_IMPORTED_MODULE_2__.hasValue)(filter.to) && !columnDef.values && columnDef.dataType != P8P_TABLE_DATA_TYPE.STR ? ` ${valueToCaption.toLowerCase()} ` : null, (0,_p8p_table_reducer__WEBPACK_IMPORTED_MODULE_2__.hasValue)(filter.to) ? valueFormatter ? valueFormatter({\n value: filter.to,\n columnDef\n }) : filter.to : null),\n variant: \"outlined\",\n onClick: () => onFilterChipClick ? onFilterChipClick(columnDef.name) : null,\n onDelete: () => onFilterChipDelete ? onFilterChipDelete(columnDef.name) : null\n });\n }));\n};\n\n//Контроль свойств - Сводный фильтр\nP8PTableFiltersChips.propTypes = {\n filters: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().array).isRequired,\n columnsDef: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().array).isRequired,\n valueFromCaption: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().string).isRequired,\n valueToCaption: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().string).isRequired,\n onFilterChipClick: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().func),\n onFilterChipDelete: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().func),\n valueFormatter: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().func)\n};\n\n//-----------\n//Тело модуля\n//-----------\n\n//Таблица\nconst P8PTable = ({\n columnsDef,\n groups,\n rows,\n orders,\n filters,\n size,\n fixedHeader = false,\n fixedColumns = 0,\n morePages = false,\n reloading,\n expandable,\n orderAscMenuItemCaption,\n orderDescMenuItemCaption,\n filterMenuItemCaption,\n valueFilterCaption,\n valueFromFilterCaption,\n valueToFilterCaption,\n okFilterBtnCaption,\n clearFilterBtnCaption,\n cancelFilterBtnCaption,\n morePagesBtnCaption,\n noDataFoundText,\n headCellRender,\n dataCellRender,\n groupCellRender,\n rowExpandRender,\n valueFormatter,\n onOrderChanged,\n onFilterChanged,\n onPagesCountChanged,\n objectsCopier,\n containerComponent,\n containerComponentProps\n}) => {\n //Собственное состояние - описание заголовка\n const [header, dispatchHeaderAction] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useReducer)(_p8p_table_reducer__WEBPACK_IMPORTED_MODULE_2__.p8pTableReducer, (0,_p8p_table_reducer__WEBPACK_IMPORTED_MODULE_2__.HEADER_INITIAL_STATE)());\n\n //Собственное состояние - фильтруемая колонка\n const [filterColumn, setFilterColumn] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(null);\n\n //Собственное состояние - развёрнутые строки\n const [expanded, setExpanded] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({});\n\n //Собственное состояния - развёрнутые группы\n const [expandedGroups, setExpandedGroups] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({});\n\n //Собственное состояние - колонка с отображаемой подсказкой\n const [displayHintColumn, setDisplayHintColumn] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(null);\n\n //Стили\n const theme = (0,_mui_material_styles__WEBPACK_IMPORTED_MODULE_17__[\"default\"])();\n\n //Описание фильтруемой колонки\n const filterColumnDef = filterColumn ? columnsDef.find(columnDef => columnDef.name == filterColumn) || null : null;\n\n //Описание колонки с отображаемой подсказкой\n const displayHintColumnDef = displayHintColumn ? columnsDef.find(columnDef => columnDef.name == displayHintColumn) || null : null;\n\n //Значения фильтра фильтруемой колонки\n const [filterColumnFrom, filterColumnTo] = filterColumn ? (() => {\n const filter = filters.find(filter => filter.name == filterColumn);\n return filter ? [filter.from == null ? \"\" : filter.from, filter.to == null ? \"\" : filter.to] : [\"\", \"\"];\n })() : [\"\", \"\"];\n\n //Формирование заголовка таблицы\n const setHeader = ({\n columnsDef,\n expandable,\n fixedColumns,\n objectsCopier\n }) => dispatchHeaderAction({\n type: _p8p_table_reducer__WEBPACK_IMPORTED_MODULE_2__.P8P_TABLE_AT.SET_HEADER,\n payload: {\n columnsDef,\n expandable,\n fixedColumns,\n objectsCopier\n }\n });\n\n //Сворачивание/разворачивание уровня заголовка таблицы\n const toggleHeaderExpand = ({\n columnName,\n objectsCopier\n }) => dispatchHeaderAction({\n type: _p8p_table_reducer__WEBPACK_IMPORTED_MODULE_2__.P8P_TABLE_AT.TOGGLE_HEADER_EXPAND,\n payload: {\n columnName,\n expandable,\n fixedColumns,\n objectsCopier\n }\n });\n\n //Выравнивание в зависимости от типа данных\n const getAlignByDataType = ({\n dataType,\n hasChild\n }) => dataType === P8P_TABLE_DATA_TYPE.DATE || hasChild ? \"center\" : dataType === P8P_TABLE_DATA_TYPE.NUMB ? \"right\" : \"left\";\n\n //Упорядочение содержимого в зависимости от типа данных\n const getJustifyContentByDataType = ({\n dataType,\n hasChild\n }) => dataType === P8P_TABLE_DATA_TYPE.DATE || hasChild ? \"center\" : dataType === P8P_TABLE_DATA_TYPE.NUMB ? \"flex-end\" : \"flex-start\";\n\n //Отработка нажатия на элемент пункта меню\n const handleToolBarItemClick = (action, columnName) => {\n switch (action) {\n case P8P_TABLE_COLUMN_TOOL_BAR_ACTIONS.ORDER_TOGGLE:\n {\n const colOrder = orders.find(o => o.name == columnName);\n const newDirection = colOrder?.direction == P8P_TABLE_COLUMN_ORDER_DIRECTIONS.ASC ? P8P_TABLE_COLUMN_ORDER_DIRECTIONS.DESC : colOrder?.direction == P8P_TABLE_COLUMN_ORDER_DIRECTIONS.DESC ? null : P8P_TABLE_COLUMN_ORDER_DIRECTIONS.ASC;\n if (onOrderChanged) onOrderChanged({\n columnName,\n direction: newDirection\n });\n break;\n }\n case P8P_TABLE_COLUMN_TOOL_BAR_ACTIONS.FILTER_TOGGLE:\n setFilterColumn(columnName);\n break;\n case P8P_TABLE_COLUMN_TOOL_BAR_ACTIONS.EXPAND_TOGGLE:\n toggleHeaderExpand({\n columnName,\n objectsCopier\n });\n break;\n }\n };\n\n //Отработка нажатия на пункты меню\n const handleMenuItemClick = (action, columnName) => {\n switch (action) {\n case P8P_TABLE_COLUMN_MENU_ACTIONS.ORDER_ASC:\n onOrderChanged({\n columnName,\n direction: P8P_TABLE_COLUMN_ORDER_DIRECTIONS.ASC\n });\n break;\n case P8P_TABLE_COLUMN_MENU_ACTIONS.ORDER_DESC:\n onOrderChanged({\n columnName,\n direction: P8P_TABLE_COLUMN_ORDER_DIRECTIONS.DESC\n });\n break;\n case P8P_TABLE_COLUMN_MENU_ACTIONS.FILTER:\n setFilterColumn(columnName);\n break;\n }\n };\n\n //Отработка ввода значения фильтра колонки\n const handleFilterOk = (columnName, from, to) => {\n if (onFilterChanged) onFilterChanged({\n columnName,\n from: from === \"\" ? null : from,\n to: to === \"\" ? null : to\n });\n setFilterColumn(null);\n };\n\n //Отработка очистки значения фильтра колонки\n const handleFilterClear = columnName => {\n if (onFilterChanged) onFilterChanged({\n columnName,\n from: null,\n to: null\n });\n setFilterColumn(null);\n };\n\n //Отработка отмены ввода значения фильтра колонки\n const handleFilterCancel = () => {\n setFilterColumn(null);\n };\n\n //Отработка нажатия на элемент сводного фильтра\n const handleFilterChipClick = columnName => setFilterColumn(columnName);\n\n //Отработка удаления элемента сводного фильтра\n const handleFilterChipDelete = columnName => onFilterChanged ? onFilterChanged({\n columnName,\n from: null,\n to: null\n }) : null;\n\n //Отработка нажатия на кнопку догрузки страницы\n const handleMorePagesBtnClick = () => {\n if (onPagesCountChanged) onPagesCountChanged();\n };\n\n //Отработка нажатия на элемент отображения подсказки по колонке\n const handleColumnShowHintClick = columnName => setDisplayHintColumn(columnName);\n\n //Отработка сокрытия подсказки по колонке\n const handleHintOk = () => setDisplayHintColumn(null);\n\n //Отработка нажатия на кнопку раскрытия элемента\n const handleExpandClick = rowIndex => {\n if (expanded[rowIndex] === true) setExpanded(pv => {\n let res = {\n ...pv\n };\n delete res[rowIndex];\n return res;\n });else setExpanded(pv => ({\n ...pv,\n [rowIndex]: true\n }));\n };\n\n //При перезагрузке данных\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n if (reloading) setExpanded({});\n }, [reloading]);\n\n //При изменении описания колонок\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n setHeader({\n columnsDef,\n expandable,\n fixedColumns,\n objectsCopier\n });\n }, [columnsDef, expandable, fixedColumns, objectsCopier]);\n\n //Генерация заголовка группы\n const renderGroupCell = group => {\n let customRender = {};\n if (groupCellRender) customRender = groupCellRender({\n columnsDef: header.columnsDef,\n group\n }) || {};\n return header.displayDataColumns.map((columnDef, i) => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_18__[\"default\"], _extends({\n key: `group-header-cell-${i}`\n }, customRender.cellProps, {\n sx: {\n ...STYLES.TABLE_CELL_GROUP_HEADER,\n ...customRender.cellStyle,\n ...(columnDef.width ? {\n minWidth: columnDef.width,\n maxWidth: columnDef.width\n } : {}),\n ...(i == 0 && fixedColumns ? STYLES.TABLE_CELL_GROUP_HEADER_STICKY : {})\n },\n colSpan: expandable && rowExpandRender ? 2 : 1\n }), i == 0 ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_15__[\"default\"], {\n direction: \"row\",\n sx: STYLES.TABLE_COLUMN_STACK\n }, group.expandable ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n onClick: () => {\n setExpandedGroups(pv => ({\n ...pv,\n ...{\n [group.name]: !pv[group.name]\n }\n }));\n }\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_5__[\"default\"], null, expandedGroups[group.name] ? \"indeterminate_check_box\" : \"add_box\")) : null, customRender.data ? customRender.data : group.caption) : null));\n };\n\n //Генерация содержимого\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", null, displayHintColumn ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(P8PTableColumnHintDialog, {\n columnDef: displayHintColumnDef,\n okBtnCaption: okFilterBtnCaption,\n onOk: handleHintOk\n }) : null, filterColumn ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(P8PTableColumnFilterDialog, {\n columnDef: filterColumnDef,\n from: filterColumnFrom,\n to: filterColumnTo,\n valueCaption: valueFilterCaption,\n valueFromCaption: valueFromFilterCaption,\n valueToCaption: valueToFilterCaption,\n okBtnCaption: okFilterBtnCaption,\n clearBtnCaption: clearFilterBtnCaption,\n cancelBtnCaption: cancelFilterBtnCaption,\n valueFormatter: valueFormatter,\n onOk: handleFilterOk,\n onClear: handleFilterClear,\n onCancel: handleFilterCancel\n }) : null, Array.isArray(filters) && filters.length > 0 ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(P8PTableFiltersChips, {\n filters: filters,\n columnsDef: columnsDef,\n valueFromCaption: valueFromFilterCaption,\n valueToCaption: valueToFilterCaption,\n onFilterChipClick: handleFilterChipClick,\n onFilterChipDelete: handleFilterChipDelete,\n valueFormatter: valueFormatter\n }) : null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_19__[\"default\"], _extends({\n component: containerComponent ? containerComponent : _mui_material__WEBPACK_IMPORTED_MODULE_20__[\"default\"]\n }, containerComponentProps ? containerComponentProps : {}), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_21__[\"default\"], {\n stickyHeader: fixedHeader,\n sx: STYLES.TABLE,\n size: size || P8P_TABLE_SIZE.MEDIUM\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_22__[\"default\"], {\n sx: fixedHeader ? STYLES.TABLE_HEAD_STICKY : {}\n }, header.displayLevels.map((level, i) => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_23__[\"default\"], {\n key: level\n }, expandable && rowExpandRender && i == 0 ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_18__[\"default\"], {\n key: \"head-cell-expand-control\",\n align: \"center\",\n sx: {\n ...STYLES.TABLE_CELL_EXPAND_CONTROL,\n ...(fixedColumns ? STYLES.TABLE_HEAD_CELL_STICKY(theme, 0) : {})\n },\n rowSpan: header.displayLevelsColumns[level][0].rowSpan\n }) : null, header.displayLevelsColumns[level].map((columnDef, j) => {\n let customRender = {};\n if (headCellRender) customRender = headCellRender({\n columnDef\n }) || {};\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_18__[\"default\"], _extends({\n key: `head-cell-${j}`,\n align: getAlignByDataType(columnDef),\n sx: {\n ...(columnDef.width ? {\n minWidth: columnDef.width,\n maxWidth: columnDef.width\n } : {}),\n ...(columnDef.fixed ? STYLES.TABLE_HEAD_CELL_STICKY(theme, columnDef.fixedLeft) : {}),\n ...customRender.cellStyle\n },\n rowSpan: columnDef.rowSpan,\n colSpan: columnDef.colSpan\n }, customRender.cellProps), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_15__[\"default\"], _extends({\n direction: \"row\",\n justifyContent: getJustifyContentByDataType(columnDef),\n sx: {\n ...STYLES.TABLE_COLUMN_STACK,\n ...customRender.stackStyle\n }\n }, customRender.stackProps), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(P8PTableColumnToolBarLeft, {\n columnDef: columnDef,\n onItemClick: handleToolBarItemClick\n }), customRender.data ? customRender.data : columnDef.hint ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_24__[\"default\"], {\n component: \"button\",\n variant: \"body2\",\n align: \"left\",\n underline: \"always\",\n onClick: () => handleColumnShowHintClick(columnDef.name)\n }, columnDef.caption) : columnDef.caption, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(P8PTableColumnToolBarRight, {\n columnDef: columnDef,\n orders: orders,\n filters: filters,\n onItemClick: handleToolBarItemClick\n }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(P8PTableColumnMenu, {\n columnDef: columnDef,\n orderAscItemCaption: orderAscMenuItemCaption,\n orderDescItemCaption: orderDescMenuItemCaption,\n filterItemCaption: filterMenuItemCaption,\n onItemClick: handleMenuItemClick\n })));\n })))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_25__[\"default\"], null, rows.length > 0 ? (Array.isArray(groups) && groups.length > 0 ? groups : [{}]).map((group, g) => {\n const rowsView = rows.map((row, i) => !group?.name || group?.name == row.groupName ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), {\n key: `data-${i}`\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_23__[\"default\"], {\n key: `data-row-${i}`,\n sx: STYLES.TABLE_ROW\n }, expandable && rowExpandRender ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_18__[\"default\"], {\n key: `data-cell-expand-control-${i}`,\n align: \"center\",\n sx: {\n ...STYLES.TABLE_CELL_EXPAND_CONTROL,\n ...(fixedColumns ? STYLES.TABLE_CELL_STICKY(theme, 0) : {})\n }\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n onClick: () => handleExpandClick(i)\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_5__[\"default\"], null, expanded[i] === true ? \"keyboard_arrow_down\" : \"keyboard_arrow_right\"))) : null, header.displayDataColumns.map((columnDef, j) => {\n let customRender = {};\n if (dataCellRender) customRender = dataCellRender({\n row,\n columnDef\n }) || {};\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_18__[\"default\"], _extends({\n key: `data-cell-${j}`,\n align: getAlignByDataType(columnDef),\n sx: {\n ...(columnDef.width ? {\n minWidth: columnDef.width,\n maxWidth: columnDef.width\n } : {}),\n ...(columnDef.fixed ? STYLES.TABLE_CELL_STICKY(theme, columnDef.fixedLeft) : {}),\n ...customRender.cellStyle\n }\n }, customRender.cellProps), customRender.data ? customRender.data : valueFormatter ? valueFormatter({\n value: row[columnDef.name],\n columnDef\n }) : row[columnDef.name]);\n })), expandable && rowExpandRender && expanded[i] === true ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_23__[\"default\"], {\n key: `data-row-expand-${i}`\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_18__[\"default\"], {\n sx: {\n ...STYLES.TABLE_CELL_EXPAND_CONTAINER,\n ...(fixedColumns ? STYLES.TABLE_CELL_STICKY(theme, 0) : {})\n },\n colSpan: fixedColumns ? header.displayFixedColumnsCount + 1 : header.displayDataColumnsCount\n }, rowExpandRender({\n columnsDef,\n row\n }))) : null) : null);\n return !group?.name ? rowsView : /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), {\n key: `group-${g}`\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_23__[\"default\"], {\n key: `group-header-${g}`\n }, renderGroupCell(group)), !group.expandable || expandedGroups[group.name] === true ? rowsView : null);\n }) : null))), rows.length == 0 ? noDataFoundText && !reloading ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_p8p_app_message__WEBPACK_IMPORTED_MODULE_1__.P8PAppInlineError, {\n text: noDataFoundText\n }) : null : morePages ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_26__[\"default\"], {\n style: STYLES.MORE_BUTTON_CONTAINER\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_13__[\"default\"], {\n fullWidth: true,\n onClick: handleMorePagesBtnClick\n }, morePagesBtnCaption)) : null);\n};\n\n//Контроль свойств - Таблица\nP8PTable.propTypes = {\n columnsDef: prop_types__WEBPACK_IMPORTED_MODULE_3___default().arrayOf(prop_types__WEBPACK_IMPORTED_MODULE_3___default().shape({\n name: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().string).isRequired,\n caption: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().string).isRequired,\n order: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().bool).isRequired,\n filter: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().bool).isRequired,\n dataType: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().string).isRequired,\n visible: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().bool).isRequired,\n values: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().array),\n parent: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().string),\n expandable: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().bool).isRequired,\n expanded: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().bool).isRequired,\n width: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().number)\n })).isRequired,\n groups: prop_types__WEBPACK_IMPORTED_MODULE_3___default().arrayOf(prop_types__WEBPACK_IMPORTED_MODULE_3___default().shape({\n name: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().string).isRequired,\n caption: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().string).isRequired,\n expandable: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().bool).isRequired,\n expanded: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().bool).isRequired\n })),\n rows: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().array).isRequired,\n orders: prop_types__WEBPACK_IMPORTED_MODULE_3___default().arrayOf(prop_types__WEBPACK_IMPORTED_MODULE_3___default().shape({\n name: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().string).isRequired,\n direction: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().string).isRequired\n })).isRequired,\n filters: prop_types__WEBPACK_IMPORTED_MODULE_3___default().arrayOf(P8P_TABLE_FILTER_SHAPE).isRequired,\n size: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().string),\n fixedHeader: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().bool),\n fixedColumns: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().number),\n morePages: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().bool),\n reloading: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().bool).isRequired,\n expandable: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().bool),\n orderAscMenuItemCaption: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().string).isRequired,\n orderDescMenuItemCaption: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().string).isRequired,\n filterMenuItemCaption: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().string).isRequired,\n valueFilterCaption: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().string).isRequired,\n valueFromFilterCaption: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().string).isRequired,\n valueToFilterCaption: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().string).isRequired,\n okFilterBtnCaption: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().string).isRequired,\n clearFilterBtnCaption: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().string).isRequired,\n cancelFilterBtnCaption: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().string).isRequired,\n morePagesBtnCaption: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().string).isRequired,\n noDataFoundText: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().string),\n headCellRender: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().func),\n dataCellRender: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().func),\n groupCellRender: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().func),\n rowExpandRender: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().func),\n valueFormatter: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().func),\n onOrderChanged: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().func),\n onFilterChanged: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().func),\n onPagesCountChanged: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().func),\n objectsCopier: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().func).isRequired,\n containerComponent: prop_types__WEBPACK_IMPORTED_MODULE_3___default().oneOfType([(prop_types__WEBPACK_IMPORTED_MODULE_3___default().elementType), (prop_types__WEBPACK_IMPORTED_MODULE_3___default().string)]),\n containerComponentProps: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().object)\n};\n\n//----------------\n//Интерфейс модуля\n//----------------\n\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/components/p8p_table.js?"); /***/ }), @@ -3528,6 +3770,149 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac /***/ }), +/***/ "./app/panels/mech_rec_assembly_mon/backend.js": +/*!*****************************************************!*\ + !*** ./app/panels/mech_rec_assembly_mon/backend.js ***! + \*****************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ useCostDeliverySheets: () => (/* binding */ useCostDeliverySheets),\n/* harmony export */ useCostProductComposition: () => (/* binding */ useCostProductComposition),\n/* harmony export */ useCostRouteLists: () => (/* binding */ useCostRouteLists),\n/* harmony export */ useMechRecAssemblyMon: () => (/* binding */ useMechRecAssemblyMon)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _context_backend__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../context/backend */ \"./app/context/backend.js\");\n/* harmony import */ var _core_utils__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../core/utils */ \"./app/core/utils.js\");\n//---------------------\n//Подключение библиотек\n//---------------------\n\n //Классы React\n //Контекст взаимодействия с сервером\n //Вспомогательные функции\n\n//---------\n//Константы\n//---------\n\n//Размер страницы данных\nconst DATA_GRID_PAGE_SIZE = 10;\n\n//-----------\n//Тело модуля\n//-----------\n\n//Хук для основной таблицы панели\nconst useMechRecAssemblyMon = () => {\n //Собственное состояние\n let [state, setState] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({\n init: false,\n showPlanList: false,\n planCtlgs: [],\n planCtlgsLoaded: false,\n selectedPlanCtlg: {\n NRN: null,\n SNAME: null,\n NMIN_YEAR: null,\n NMAX_YEAR: null\n },\n plans: [],\n plansLoaded: false,\n selectedPlan: {\n NRN: null,\n SNUMB: null,\n NPROGRESS: null,\n SDETAIL: null,\n NYEAR: null\n }\n });\n\n //Подключение к контексту взаимодействия с сервером\n const {\n executeStored\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_backend__WEBPACK_IMPORTED_MODULE_1__[\"BackEndСtx\"]);\n\n //Инициализация каталогов планов\n const initPlanCtlgs = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async () => {\n if (!state.init) {\n const data = await executeStored({\n stored: \"PKG_P8PANELS_MECHREC.FCPRODPLAN_CTLG_INIT\",\n args: {},\n respArg: \"COUT\",\n isArray: name => name === \"XFCPRODPLAN_CRNS\"\n });\n setState(pv => ({\n ...pv,\n init: true,\n planCtlgs: [...(data?.XFCPRODPLAN_CRNS || [])],\n planCtlgsLoaded: true\n }));\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [state.init, executeStored]);\n\n //Получение информации о планах каталога\n const loadPlans = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async NCRN => {\n if (NCRN) {\n const data = await executeStored({\n stored: \"PKG_P8PANELS_MECHREC.FCPRODPLAN_GET\",\n args: {\n NCRN: NCRN\n },\n respArg: \"COUT\",\n isArray: name => name === \"XFCPRODPLAN_INFO\"\n });\n setState(pv => ({\n ...pv,\n init: true,\n plans: [...(data?.XFCPRODPLAN_INFO || [])],\n plansLoaded: true\n }));\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [executeStored]);\n\n //Выбор каталога планов\n const selectPlan = project => {\n setState(pv => ({\n ...pv,\n selectedPlanCtlg: project,\n showPlanList: false\n }));\n };\n\n //Сброс выбора каталога планов\n const unselectPlan = () => setState(pv => ({\n ...pv,\n selectedPlanCtlg: {\n NRN: null,\n SNAME: null,\n NMIN_YEAR: null,\n NMAX_YEAR: null\n },\n showPlanList: false\n }));\n\n //При подключении компонента к странице\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n initPlanCtlgs();\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n //При изменении каталога\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n //Если каталог выбран\n if (state.selectedPlanCtlg) {\n loadPlans(state.selectedPlanCtlg.NRN);\n } else {\n setState(pv => ({\n ...pv,\n plans: [],\n plansLoaded: false\n }));\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [state.selectedPlanCtlg]);\n return [state, setState, selectPlan, unselectPlan];\n};\n\n//Хук для информации по производственным составам\nconst useCostProductComposition = nProdPlan => {\n //Собственное состояние\n let [costProductComposition, setCostProductComposition] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({\n init: false,\n showPlanList: false,\n products: [],\n selectedProduct: null\n });\n\n //Подключение к контексту взаимодействия с сервером\n const {\n executeStored\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_backend__WEBPACK_IMPORTED_MODULE_1__[\"BackEndСtx\"]);\n\n //Инициализация производственных составов\n const initCostProductComposition = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async () => {\n if (!costProductComposition.init) {\n const data = await executeStored({\n stored: \"PKG_P8PANELS_MECHREC.FCPRODCMP_DETAILS_GET\",\n args: {\n NFCPRODPLAN: nProdPlan\n },\n respArg: \"COUT\",\n isArray: name => name === \"XFCPRODCMP\"\n });\n setCostProductComposition(pv => ({\n ...pv,\n init: true,\n products: [...(data?.XFCPRODCMP || [])],\n productsLoaded: true\n }));\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [costProductComposition.init, executeStored]);\n\n //При подключении компонента к странице\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n initCostProductComposition();\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n return [costProductComposition, setCostProductComposition];\n};\n\n//Хук для таблицы маршрутных листов\nconst useCostRouteLists = (plan, product) => {\n //Собственное состояние - таблица данных\n const [costRouteLists, setCostRouteLists] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({\n dataLoaded: false,\n columnsDef: [],\n orders: null,\n rows: [],\n reload: true,\n pageNumber: 1,\n morePages: true,\n selectedProduct: null\n });\n\n //Подключение к контексту взаимодействия с сервером\n const {\n executeStored,\n SERV_DATA_TYPE_CLOB\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_backend__WEBPACK_IMPORTED_MODULE_1__[\"BackEndСtx\"]);\n\n //Загрузка данных таблицы с сервера\n const loadData = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async () => {\n if (costRouteLists.reload) {\n const data = await executeStored({\n stored: \"PKG_P8PANELS_MECHREC.FCROUTLST_MON_DG_GET\",\n args: {\n NPRODCMPSP: product,\n NFCPRODPLAN: plan,\n CORDERS: {\n VALUE: (0,_core_utils__WEBPACK_IMPORTED_MODULE_2__.object2Base64XML)(costRouteLists.orders, {\n arrayNodeName: \"orders\"\n }),\n SDATA_TYPE: SERV_DATA_TYPE_CLOB\n },\n NPAGE_NUMBER: costRouteLists.pageNumber,\n NPAGE_SIZE: DATA_GRID_PAGE_SIZE,\n NINCLUDE_DEF: costRouteLists.dataLoaded ? 0 : 1\n },\n respArg: \"COUT\"\n });\n setCostRouteLists(pv => ({\n ...pv,\n columnsDef: data.XCOLUMNS_DEF ? [...data.XCOLUMNS_DEF] : pv.columnsDef,\n rows: pv.pageNumber == 1 ? [...(data.XROWS || [])] : [...pv.rows, ...(data.XROWS || [])],\n dataLoaded: true,\n reload: false,\n morePages: (data.XROWS || []).length >= DATA_GRID_PAGE_SIZE\n }));\n }\n },\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [costRouteLists.reload, costRouteLists.orders, costRouteLists.dataLoaded, costRouteLists.pageNumber, executeStored, SERV_DATA_TYPE_CLOB]);\n\n //При изменении продукта\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n //Если продукт указан\n if (product) {\n //Принудительно обновляем состояние\n setCostRouteLists(pv => ({\n ...pv,\n dataLoaded: false,\n columnsDef: [],\n orders: null,\n rows: [],\n reload: true,\n pageNumber: 1,\n morePages: true,\n selectedProduct: null\n }));\n //Загружаем данные с учетом выбранного продукта\n loadData();\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [product]);\n\n //При необходимости обновить данные таблицы\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n //Если продукт указан и необходимо стандартное обновление\n if (product) {\n loadData();\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [costRouteLists.reload, loadData]);\n\n //При изменении плана\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n setCostRouteLists(pv => ({\n ...pv,\n dataLoaded: false,\n columnsDef: [],\n orders: null,\n rows: [],\n reload: true,\n pageNumber: 1,\n morePages: true,\n selectedProduct: null\n }));\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [plan]);\n return [costRouteLists, setCostRouteLists];\n};\n\n//Хук для таблицы комплектовочных ведомостей\nconst useCostDeliverySheets = (plan, product) => {\n //Собственное состояние - таблица данных\n const [costDeliverySheets, setCostDeliverySheets] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({\n dataLoaded: false,\n columnsDef: [],\n orders: null,\n rows: [],\n reload: true,\n pageNumber: 1,\n morePages: true,\n selectedProduct: null\n });\n\n //Подключение к контексту взаимодействия с сервером\n const {\n executeStored,\n SERV_DATA_TYPE_CLOB\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_backend__WEBPACK_IMPORTED_MODULE_1__[\"BackEndСtx\"]);\n\n //Загрузка данных таблицы с сервера\n const loadData = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async () => {\n if (costDeliverySheets.reload) {\n const data = await executeStored({\n stored: \"PKG_P8PANELS_MECHREC.FCDELIVSH_DG_GET\",\n args: {\n NPRODCMPSP: product,\n NFCPRODPLAN: plan,\n CORDERS: {\n VALUE: (0,_core_utils__WEBPACK_IMPORTED_MODULE_2__.object2Base64XML)(costDeliverySheets.orders, {\n arrayNodeName: \"orders\"\n }),\n SDATA_TYPE: SERV_DATA_TYPE_CLOB\n },\n NPAGE_NUMBER: costDeliverySheets.pageNumber,\n NPAGE_SIZE: DATA_GRID_PAGE_SIZE,\n NINCLUDE_DEF: costDeliverySheets.dataLoaded ? 0 : 1\n },\n respArg: \"COUT\"\n });\n setCostDeliverySheets(pv => ({\n ...pv,\n columnsDef: data.XCOLUMNS_DEF ? [...data.XCOLUMNS_DEF] : pv.columnsDef,\n rows: pv.pageNumber == 1 ? [...(data.XROWS || [])] : [...pv.rows, ...(data.XROWS || [])],\n dataLoaded: true,\n reload: false,\n morePages: (data.XROWS || []).length >= DATA_GRID_PAGE_SIZE\n }));\n }\n },\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [costDeliverySheets.reload, costDeliverySheets.orders, costDeliverySheets.dataLoaded, costDeliverySheets.pageNumber, executeStored, SERV_DATA_TYPE_CLOB]);\n\n //При изменении продукта\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n //Если продукт указан\n if (product) {\n //Принудительно обновляем состояние\n setCostDeliverySheets(pv => ({\n ...pv,\n dataLoaded: false,\n columnsDef: [],\n orders: null,\n rows: [],\n reload: true,\n pageNumber: 1,\n morePages: true\n }));\n //Загружаем данные с учетом выбранного продукта\n loadData();\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [product]);\n\n //При необходимости обновить данные таблицы\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n //Если продукт указан и необходимо стандартное обновление\n if (product) {\n loadData();\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [costDeliverySheets.reload, loadData]);\n\n //При изменении плана\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n setCostDeliverySheets(pv => ({\n ...pv,\n dataLoaded: false,\n columnsDef: [],\n orders: null,\n rows: [],\n reload: true,\n pageNumber: 1,\n morePages: true,\n selectedProduct: null\n }));\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [plan]);\n return [costDeliverySheets, setCostDeliverySheets];\n};\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/panels/mech_rec_assembly_mon/backend.js?"); + +/***/ }), + +/***/ "./app/panels/mech_rec_assembly_mon/blocks/cardBlock.js": +/*!**************************************************************!*\ + !*** ./app/panels/mech_rec_assembly_mon/blocks/cardBlock.js ***! + \**************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ CardBlock: () => (/* binding */ CardBlock)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! prop-types */ \"./node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_5__);\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Box/Box.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/ImageList/ImageList.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/ImageListItem/ImageListItem.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Typography/Typography.js\");\n/* harmony import */ var _elements_progressBox__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../elements/progressBox */ \"./app/panels/mech_rec_assembly_mon/elements/progressBox.js\");\n/*\r\n Парус 8 - Панели мониторинга - ПУП - Мониторинг сборки изделий\r\n Панель мониторинга: Информация об объекте\r\n*/\n\n//---------------------\n//Подключение библиотек\n//---------------------\n\n //Классы React\n //Контроль свойств компонента\n //Интерфейсные элементы\n //Блок информации по прогрессу объекта\n\n//---------\n//Константы\n//---------\n\n//Стили\nconst STYLES = {\n PLAN_INFO: {\n display: \"flex\",\n justifyContent: \"center\",\n alignItems: \"center\",\n flexDirection: \"column\",\n gap: \"24px\",\n border: \"1px solid\",\n borderRadius: \"25px\"\n }\n};\n\n//------------------------------------\n//Вспомогательные функции и компоненты\n//------------------------------------\n\n//Картинка объекта\nconst CardImage = ({\n card\n}) => {\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n width: 180,\n height: 180\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n variant: \"masonry\",\n cols: 1,\n gap: 8\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n key: 1\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"img\", {\n src: `data:image/png;base64,${card[\"#text\"]}`,\n alt: \"Image not loaded.\",\n loading: \"lazy\",\n width: 180\n }))));\n};\n\n//Контроль свойств - Заголовок первого уровня\nCardImage.propTypes = {\n card: (prop_types__WEBPACK_IMPORTED_MODULE_5___default().object)\n};\n\n//-----------\n//Тело модуля\n//-----------\n\n//Информация об объекте\nconst CardBlock = ({\n card,\n handleCardClick\n}) => {\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n sx: STYLES.PLAN_INFO,\n onClick: () => handleCardClick(card)\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(CardImage, {\n card: card\n }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n textAlign: \"center\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n variant: \"UDO_body1\",\n color: \"text.secondary.fontColor\"\n }, \"\\u041D\\u043E\\u043C\\u0435\\u0440 \\u0431\\u043E\\u0440\\u0442\\u0430\"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n variant: \"h2\"\n }, card.SNUMB)), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_elements_progressBox__WEBPACK_IMPORTED_MODULE_1__.ProgressBox, {\n prms: {\n NPROGRESS: card.NPROGRESS,\n SDETAIL: card.SDETAIL,\n width: \"155px\",\n height: \"155px\",\n progressVariant: \"h3\",\n detailVariant: \"UDO_body2\"\n }\n }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_2__[\"default\"], null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n variant: \"UDO_body1\",\n color: \"text.secondary.fontColor\"\n }, \"\\u0413\\u043E\\u0434 \\u0432\\u044B\\u043F\\u0443\\u0441\\u043A\\u0430:\"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n variant: \"subtitle1\",\n mt: -1\n }, card.NYEAR)));\n};\n\n//Контроль свойств - Заголовок первого уровня\nCardBlock.propTypes = {\n card: (prop_types__WEBPACK_IMPORTED_MODULE_5___default().object),\n handleCardClick: (prop_types__WEBPACK_IMPORTED_MODULE_5___default().func)\n};\n\n//----------------\n//Интерфейс модуля\n//----------------\n\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/panels/mech_rec_assembly_mon/blocks/cardBlock.js?"); + +/***/ }), + +/***/ "./app/panels/mech_rec_assembly_mon/blocks/cardDetail.js": +/*!***************************************************************!*\ + !*** ./app/panels/mech_rec_assembly_mon/blocks/cardDetail.js ***! + \***************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ CardDetail: () => (/* binding */ CardDetail)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! prop-types */ \"./node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_7___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_7__);\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Box/Box.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Typography/Typography.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Button/Button.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Container/Container.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Grid/Grid.js\");\n/* harmony import */ var _elements_progressBox__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../elements/progressBox */ \"./app/panels/mech_rec_assembly_mon/elements/progressBox.js\");\n/* harmony import */ var _components_p8p_data_grid__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../../components/p8p_data_grid */ \"./app/components/p8p_data_grid.js\");\n/* harmony import */ var _config_wrapper__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../../config_wrapper */ \"./app/config_wrapper.js\");\n/* harmony import */ var _backend__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../backend */ \"./app/panels/mech_rec_assembly_mon/backend.js\");\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n/*\r\n Парус 8 - Панели мониторинга - ПУП - Мониторинг сборки изделий\r\n Панель мониторинга: Детализация по объекту\r\n*/\n\n//---------------------\n//Подключение библиотек\n//---------------------\n\n //Классы React\n //Контроль свойств компонента\n //Интерфейсные элементы\n //Блок информации по прогрессу объекта\n //Таблица данных\n //Подключение компонентов к настройкам приложения\n //Компоненты панели\n\n//---------\n//Константы\n//---------\n\n//Стили\nconst STYLES = {\n TABLE_INFO_MAIN: {\n display: \"flex\",\n justifyContent: \"center\",\n alignItems: \"center\",\n flexDirection: \"column\",\n border: \"1px solid\",\n borderRadius: \"25px\",\n height: \"35vh\"\n },\n TABLE_INFO_SUB: {\n margin: \"21.6px 0px\",\n maxHeight: \"100%\",\n overflow: \"auto\",\n textAlign: \"center\",\n width: \"100%\"\n },\n DETAIL_INFO: {\n display: \"flex\",\n justifyContent: \"space-around\",\n alignItems: \"center\",\n border: \"1px solid\",\n borderRadius: \"25px\",\n height: \"17vh\"\n },\n PRODUCT_SELECTOR: {\n display: \"flex\",\n justifyContent: \"center\",\n alignItems: \"center\",\n flexDirection: \"column\",\n border: \"1px solid\",\n borderRadius: \"25px\",\n height: \"53vh\",\n marginTop: \"16px\"\n },\n PLAN_INFO_MAIN: {\n display: \"flex\",\n flexDirection: \"column\",\n gap: \"16px\"\n },\n PLAN_INFO_SUB: {\n display: \"flex\",\n justifyContent: \"space-between\",\n width: \"280px\",\n borderBottom: \"1px solid\"\n }\n};\n\n//------------------------------------\n//Вспомогательные функции и компоненты\n//------------------------------------\n\n//Информация об объекте\nconst CardDetailInfo = ({\n cardInfo\n}) => {\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_5__[\"default\"], {\n sx: STYLES.PLAN_INFO_MAIN\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_5__[\"default\"], {\n sx: STYLES.PLAN_INFO_SUB\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n variant: \"UDO_body1\",\n mt: 1\n }, \"\\u041D\\u043E\\u043C\\u0435\\u0440 \\u0431\\u043E\\u0440\\u0442\\u0430:\"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n variant: \"subtitle2\"\n }, cardInfo.SNUMB)), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_5__[\"default\"], {\n sx: STYLES.PLAN_INFO_SUB\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n variant: \"UDO_body1\",\n mt: 1\n }, \"\\u0413\\u043E\\u0434 \\u0432\\u044B\\u043F\\u0443\\u0441\\u043A\\u0430:\"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n variant: \"subtitle2\"\n }, cardInfo.NYEAR))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_elements_progressBox__WEBPACK_IMPORTED_MODULE_1__.ProgressBox, {\n prms: {\n NPROGRESS: cardInfo.NPROGRESS,\n SDETAIL: cardInfo.SDETAIL,\n width: \"110px\",\n height: \"110px\",\n progressVariant: \"subtitle2\",\n detailVariant: \"body3\"\n }\n }));\n};\n\n//Контроль свойств - Информация об объекте\nCardDetailInfo.propTypes = {\n cardInfo: (prop_types__WEBPACK_IMPORTED_MODULE_7___default().object)\n};\n\n//Детали объекта\nconst CardSelector = ({\n products,\n setCostProductComposition\n}) => {\n //При выборе детали в SVG\n const handleProductClick = product => {\n setCostProductComposition(pv => ({\n ...pv,\n selectedProduct: product\n }));\n };\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_5__[\"default\"], {\n sx: STYLES.PLAN_INFO_MAIN\n }, products.map(el => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_8__[\"default\"], {\n key: el.NRN,\n onClick: () => handleProductClick(el.NRN)\n }, `${el.SNAME}`))));\n};\n\n//Контроль свойств - Детали объекта\nCardSelector.propTypes = {\n products: (prop_types__WEBPACK_IMPORTED_MODULE_7___default().array),\n setCostProductComposition: (prop_types__WEBPACK_IMPORTED_MODULE_7___default().func)\n};\n\n//Генерация представления ячейки заголовка\nconst headCellRender = ({\n columnDef\n}) => {\n //Описываем общий стиль\n let cellStyle = {\n padding: \"2px 5px\",\n fontSize: \"12px\",\n textAlign: \"center\",\n lineHeight: \"1rem\"\n };\n let stackProps = {\n justifyContent: \"center\"\n };\n //Дополнительные свойства\n switch (columnDef.name) {\n case \"NREMN_LABOUR\":\n //Добавляем максимальную ширину\n cellStyle = {\n ...cellStyle,\n maxWidth: \"90px\"\n };\n break;\n case \"NDEFICIT\":\n //Добавляем максимальную ширину\n cellStyle = {\n ...cellStyle,\n maxWidth: \"55px\"\n };\n break;\n case \"NAPPLICABILITY\":\n //Добавляем максимальную ширину\n cellStyle = {\n ...cellStyle,\n maxWidth: \"90px\"\n };\n break;\n default:\n break;\n }\n return {\n stackProps,\n cellStyle\n };\n};\n\n//Генерация заливки строки исходя от значений\nconst dataCellRender = ({\n row,\n columnDef\n}) => {\n //Описываем общий стиль\n let cellStyle = {\n padding: \"2px 5px\",\n fontSize: \"12px\"\n };\n //Для всех кроме содержания и номенклатуры добавляем выравнивание\n switch (columnDef.name) {\n case \"SOPERATION\":\n break;\n case \"SNOMEN\":\n break;\n default:\n //Добавляем выравнивание\n cellStyle = {\n ...cellStyle,\n textAlign: \"center\"\n };\n break;\n }\n return {\n cellStyle,\n data: row[columnDef]\n };\n};\n\n//-----------\n//Тело модуля\n//-----------\n\n//Детализация по объекту\nconst CardDetail = ({\n card,\n handleBackClick\n}) => {\n //Собственное состояние - данные производственных составов SVG\n const [costProductComposition, setCostProductComposition] = (0,_backend__WEBPACK_IMPORTED_MODULE_4__.useCostProductComposition)(card.NRN);\n //Собственное состояние - таблица данных маршрутных листов\n const [costRouteLists, setCostRouteLists] = (0,_backend__WEBPACK_IMPORTED_MODULE_4__.useCostRouteLists)(card.NRN, costProductComposition.selectedProduct);\n //Собственное состояние - таблица данных комплектовочных ведомостей\n const [сostDeliverySheets, setСostDeliverySheets] = (0,_backend__WEBPACK_IMPORTED_MODULE_4__.useCostDeliverySheets)(card.NRN, costProductComposition.selectedProduct);\n\n //При изменении состояния сортировки маршрутных листов\n const costRouteListsOrderChanged = ({\n orders\n }) => setCostRouteLists(pv => ({\n ...pv,\n orders: [...orders],\n pageNumber: 1,\n reload: true\n }));\n\n //При изменении количества отображаемых страниц маршрутных листов\n const costRouteListsPagesCountChanged = () => setCostRouteLists(pv => ({\n ...pv,\n pageNumber: pv.pageNumber + 1,\n reload: true\n }));\n\n //При изменении состояния сортировки комплектовочных ведомостей\n const СostDeliverySheetsOrderChanged = ({\n orders\n }) => setСostDeliverySheets(pv => ({\n ...pv,\n orders: [...orders],\n pageNumber: 1,\n reload: true\n }));\n\n //При изменении количества отображаемых страниц комплектовочных ведомостей\n const СostDeliverySheetsPagesCountChanged = () => setСostDeliverySheets(pv => ({\n ...pv,\n pageNumber: pv.pageNumber + 1,\n reload: true\n }));\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_9__[\"default\"], null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_8__[\"default\"], {\n onClick: () => handleBackClick()\n }, \"\\u041D\\u0430\\u0437\\u0430\\u0434\"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_10__[\"default\"], {\n container: true,\n spacing: 2\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_10__[\"default\"], {\n item: true,\n xs: 5\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_5__[\"default\"], {\n sx: STYLES.TABLE_INFO_MAIN\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_5__[\"default\"], {\n sx: STYLES.TABLE_INFO_SUB\n }, !costRouteLists.dataLoaded ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n variant: \"UDO_body2\"\n }, \"\\u0412\\u044B\\u0431\\u0435\\u0440\\u0438\\u0442\\u0435 \\u0430\\u0433\\u0440\\u0435\\u0433\\u0430\\u0442 \\u0441\\u0430\\u043C\\u043E\\u043B\\u0451\\u0442\\u0430, \\u0447\\u0442\\u043E\\u0431\\u044B \\u0443\\u0432\\u0438\\u0434\\u0435\\u0442\\u044C \\u0438\\u043D\\u0444\\u043E\\u0440\\u043C\\u0430\\u0446\\u0438\\u044E\") : costRouteLists.rows.length === 0 ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n variant: \"subtitle2\"\n }, \"\\u041D\\u0435\\u0442 \\u0434\\u0430\\u043D\\u043D\\u044B\\u0445 \\u043F\\u043E \\u041C\\u041A\") : /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n variant: \"h4\"\n }, \"\\u041C\\u0430\\u0440\\u0448\\u0440\\u0443\\u0442\\u043D\\u0430\\u044F \\u043A\\u0430\\u0440\\u0442\\u0430\"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_components_p8p_data_grid__WEBPACK_IMPORTED_MODULE_2__.P8PDataGrid, _extends({}, _config_wrapper__WEBPACK_IMPORTED_MODULE_3__.P8P_DATA_GRID_CONFIG_PROPS, {\n columnsDef: costRouteLists.columnsDef,\n rows: costRouteLists.rows,\n size: _components_p8p_data_grid__WEBPACK_IMPORTED_MODULE_2__.P8P_DATA_GRID_SIZE.SMALL,\n morePages: costRouteLists.morePages,\n reloading: costRouteLists.reload,\n dataCellRender: dataCellRender,\n headCellRender: headCellRender,\n onOrderChanged: costRouteListsOrderChanged,\n onPagesCountChanged: costRouteListsPagesCountChanged\n }))))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_5__[\"default\"], {\n sx: STYLES.TABLE_INFO_MAIN,\n mt: 2\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_5__[\"default\"], {\n sx: STYLES.TABLE_INFO_SUB\n }, !сostDeliverySheets.dataLoaded ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n variant: \"UDO_body2\"\n }, \"\\u0412\\u044B\\u0431\\u0435\\u0440\\u0438\\u0442\\u0435 \\u0430\\u0433\\u0440\\u0435\\u0433\\u0430\\u0442 \\u0441\\u0430\\u043C\\u043E\\u043B\\u0451\\u0442\\u0430, \\u0447\\u0442\\u043E\\u0431\\u044B \\u0443\\u0432\\u0438\\u0434\\u0435\\u0442\\u044C \\u0438\\u043D\\u0444\\u043E\\u0440\\u043C\\u0430\\u0446\\u0438\\u044E\") : сostDeliverySheets.rows.length === 0 ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n variant: \"subtitle2\"\n }, \"\\u041D\\u0435\\u0442 \\u0434\\u0430\\u043D\\u043D\\u044B\\u0445 \\u043F\\u043E \\u041A\\u0412\") : /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n variant: \"h4\"\n }, \"\\u0414\\u0435\\u0444\\u0438\\u0446\\u0438\\u0442 \\u043F\\u043E \\u041A\\u0412\"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_components_p8p_data_grid__WEBPACK_IMPORTED_MODULE_2__.P8PDataGrid, _extends({}, _config_wrapper__WEBPACK_IMPORTED_MODULE_3__.P8P_DATA_GRID_CONFIG_PROPS, {\n columnsDef: сostDeliverySheets.columnsDef,\n rows: сostDeliverySheets.rows,\n size: _components_p8p_data_grid__WEBPACK_IMPORTED_MODULE_2__.P8P_DATA_GRID_SIZE.SMALL,\n morePages: сostDeliverySheets.morePages,\n reloading: сostDeliverySheets.reload,\n dataCellRender: dataCellRender,\n headCellRender: headCellRender,\n onOrderChanged: СostDeliverySheetsOrderChanged,\n onPagesCountChanged: СostDeliverySheetsPagesCountChanged\n })))))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_10__[\"default\"], {\n item: true,\n xs: 7\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_5__[\"default\"], {\n sx: STYLES.DETAIL_INFO\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(CardDetailInfo, {\n cardInfo: card\n })), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_5__[\"default\"], {\n sx: STYLES.PRODUCT_SELECTOR\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(CardSelector, {\n products: costProductComposition.products,\n setCostProductComposition: setCostProductComposition\n })))));\n};\n\n//Контроль свойств - Детализация по объекту\nCardDetail.propTypes = {\n card: (prop_types__WEBPACK_IMPORTED_MODULE_7___default().object),\n handleBackClick: (prop_types__WEBPACK_IMPORTED_MODULE_7___default().func)\n};\n\n//----------------\n//Интерфейс модуля\n//----------------\n\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/panels/mech_rec_assembly_mon/blocks/cardDetail.js?"); + +/***/ }), + +/***/ "./app/panels/mech_rec_assembly_mon/elements/progressBox.js": +/*!******************************************************************!*\ + !*** ./app/panels/mech_rec_assembly_mon/elements/progressBox.js ***! + \******************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ ProgressBox: () => (/* binding */ ProgressBox)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! prop-types */ \"./node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Box/Box.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Typography/Typography.js\");\n/*\r\n Парус 8 - Панели мониторинга - ПУП - Мониторинг сборки изделий\r\n Панель мониторинга: Блок информации по прогрессу объекта\r\n*/\n\n//---------------------\n//Подключение библиотек\n//---------------------\n\n //Классы React\n //Контроль свойств компонента\n //Интерфейсные элементы\n\n//---------\n//Константы\n//---------\n\n//Стили\nconst STYLES = {\n PROGRESS_INFO: {\n display: \"flex\",\n justifyContent: \"center\",\n alignItems: \"center\",\n flexDirection: \"column\",\n margin: \"0px 32px\",\n borderRadius: \"50%\"\n }\n};\n\n//------------------------------------\n//Вспомогательные функции и компоненты\n//------------------------------------\n\n//-----------\n//Тело модуля\n//-----------\n\n//Детализация по объекту\n\n//Блок информации по прогрессу объекта\nconst ProgressBox = ({\n prms\n}) => {\n //Инициализируем цвет тени\n let boxShadow = null;\n //Определяем цвет тени\n switch (true) {\n case prms.NPROGRESS >= 70:\n boxShadow = \"0 0 30px #21d21e66\";\n break;\n case prms.NPROGRESS >= 40:\n boxShadow = \"0 0 30px #fddd3566\";\n break;\n case prms.NPROGRESS >= 10:\n boxShadow = \"0 0 30px #ea5c4966\";\n break;\n default:\n boxShadow = \"0 0 30px #d3d3d3\";\n }\n //Возвращаем блок\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_1__[\"default\"], {\n sx: {\n ...STYLES.PROGRESS_INFO,\n width: prms.width,\n height: prms.height\n },\n boxShadow: boxShadow\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n variant: prms.progressVariant\n }, `${prms.NPROGRESS}%`), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n variant: prms.detailVariant\n }, prms.SDETAIL));\n};\n\n//Контроль свойств - Блок информации по прогрессу объекта\nProgressBox.propTypes = {\n prms: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().object)\n};\n\n//----------------\n//Интерфейс модуля\n//----------------\n\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/panels/mech_rec_assembly_mon/elements/progressBox.js?"); + +/***/ }), + +/***/ "./app/panels/mech_rec_assembly_mon/hooks.js": +/*!***************************************************!*\ + !*** ./app/panels/mech_rec_assembly_mon/hooks.js ***! + \***************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ useFilteredPlanCtlgs: () => (/* binding */ useFilteredPlanCtlgs)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/*\r\n Парус 8 - Панели мониторинга - ПУП - Мониторинг сборки изделий\r\n Кастомные хуки\r\n*/\n\n//---------------------\n//Подключение библиотек\n//---------------------\n\n //Классы React\n\n//-----------\n//Тело модуля\n//-----------\n\n//Клиентский отбор каталогов по поисковой фразе и наличию планов\nconst useFilteredPlanCtlgs = (planCtlgs, filter) => {\n const filteredPlanCtlgs = react__WEBPACK_IMPORTED_MODULE_0___default().useMemo(() => {\n return planCtlgs.filter(catalog => catalog.SNAME.toString().toLowerCase().includes(filter.ctlgName) && (filter.haveDocs ? catalog.NCOUNT_DOCS > 0 : catalog.NCOUNT_DOCS >= 0));\n }, [planCtlgs, filter]);\n return filteredPlanCtlgs;\n};\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/panels/mech_rec_assembly_mon/hooks.js?"); + +/***/ }), + +/***/ "./app/panels/mech_rec_assembly_mon/index.js": +/*!***************************************************!*\ + !*** ./app/panels/mech_rec_assembly_mon/index.js ***! + \***************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ RootClass: () => (/* binding */ RootClass)\n/* harmony export */ });\n/* harmony import */ var _mech_rec_assembly_mon__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./mech_rec_assembly_mon */ \"./app/panels/mech_rec_assembly_mon/mech_rec_assembly_mon.js\");\n/*\r\n Парус 8 - Панели мониторинга - ПУП - Мониторинг сборки изделий\r\n Панель мониторинга: Точка входа\r\n*/\n\n//---------------------\n//Подключение библиотек\n//---------------------\n\n //Корневая панель мониторинга сборки изделий\n\n//----------------\n//Интерфейс модуля\n//----------------\n\nconst RootClass = _mech_rec_assembly_mon__WEBPACK_IMPORTED_MODULE_0__.MechRecAssemblyMon;\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/panels/mech_rec_assembly_mon/index.js?"); + +/***/ }), + +/***/ "./app/panels/mech_rec_assembly_mon/mech_rec_assembly_mon.js": +/*!*******************************************************************!*\ + !*** ./app/panels/mech_rec_assembly_mon/mech_rec_assembly_mon.js ***! + \*******************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ MechRecAssemblyMon: () => (/* binding */ MechRecAssemblyMon)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! prop-types */ \"./node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_15___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_15__);\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/TextField/TextField.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/FormGroup/FormGroup.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/FormControlLabel/FormControlLabel.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Checkbox/Checkbox.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/List/List.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/ListItemButton/ListItemButton.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/ListItemText/ListItemText.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Typography/Typography.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Box/Box.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Fab/Fab.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Drawer/Drawer.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Container/Container.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Grid/Grid.js\");\n/* harmony import */ var _mui_material_styles__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! @mui/material/styles */ \"./node_modules/@mui/material/styles/ThemeProvider.js\");\n/* harmony import */ var _context_messaging__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../context/messaging */ \"./app/context/messaging.js\");\n/* harmony import */ var _blocks_cardBlock__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./blocks/cardBlock */ \"./app/panels/mech_rec_assembly_mon/blocks/cardBlock.js\");\n/* harmony import */ var _blocks_cardDetail__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./blocks/cardDetail */ \"./app/panels/mech_rec_assembly_mon/blocks/cardDetail.js\");\n/* harmony import */ var _styles_themes_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./styles/themes.js */ \"./app/panels/mech_rec_assembly_mon/styles/themes.js\");\n/* harmony import */ var _hooks__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./hooks */ \"./app/panels/mech_rec_assembly_mon/hooks.js\");\n/* harmony import */ var _backend__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./backend */ \"./app/panels/mech_rec_assembly_mon/backend.js\");\n/*\r\n Парус 8 - Панели мониторинга - ПУП - Мониторинг сборки изделий\r\n Панель мониторинга: Корневая панель мониторинга сборки изделий\r\n*/\n\n//---------------------\n//Подключение библиотек\n//---------------------\n\n //Классы React\n //Контроль свойств компонента\n //Интерфейсные элементы\n //Подключение темы\n //Контекст сообщений\n //Информация об объекте\n //Детализация по объекту\n //Стиль темы\n //Вспомогательные хуки\n //Хук корневой панели мониторинга сборки изделий\n\n//---------\n//Константы\n//---------\n\n//Стили\nconst STYLES = {\n PLANS_FINDER: {\n marginTop: \"10px\",\n marginLeft: \"10px\",\n width: \"93%\"\n },\n PLANS_CHECKBOX_HAVEDOCS: {\n alignContent: \"space-around\"\n },\n PLANS_LIST_ITEM_ZERODOCS: {\n backgroundColor: \"#ebecec\"\n },\n PLANS_LIST_ITEM_PRIMARY: {\n wordWrap: \"break-word\"\n },\n PLANS_LIST_ITEM_SECONDARY: {\n wordWrap: \"break-word\",\n fontSize: \"0.6rem\",\n textTransform: \"uppercase\"\n },\n PLANS_BUTTON: {\n position: \"absolute\"\n },\n PLANS_DRAWER: {\n width: \"350px\",\n display: \"inline-block\",\n flexShrink: 0,\n [`& .MuiDrawer-paper`]: {\n width: \"350px\",\n display: \"inline-block\",\n boxSizing: \"border-box\"\n }\n }\n};\n\n//------------------------------------\n//Вспомогательные функции и компоненты\n//------------------------------------\n\n//Склонения для документов\nconst DECLINATIONS = [\"план\", \"плана\", \"планов\"];\n\n//Форматирование для отображения количества документов\nconst formatCountDocs = nCountDocs => {\n //Получаем последнюю цифру в значении\n let num = nCountDocs % 100 % 10;\n //Документов\n if (nCountDocs > 10 && nCountDocs < 20) return `${nCountDocs} ${DECLINATIONS[2]}`;\n //Документа\n if (num > 1 && num < 5) return `${nCountDocs} ${DECLINATIONS[1]}`;\n //Документ\n if (num == 1) return `${nCountDocs} ${DECLINATIONS[0]}`;\n //Документов\n return `${nCountDocs} ${DECLINATIONS[2]}`;\n};\n\n//Список каталогов планов\nconst PlanCtlgsList = ({\n planCtlgs = [],\n selectedPlanCtlg,\n filter,\n setFilter,\n onClick\n} = {}) => {\n //Генерация содержимого\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_7__[\"default\"], {\n sx: STYLES.PLANS_FINDER,\n name: \"planFilter\",\n label: \"\\u041A\\u0430\\u0442\\u0430\\u043B\\u043E\\u0433\",\n value: filter.ctlgName,\n variant: \"standard\",\n fullWidth: true,\n onChange: event => {\n setFilter(pv => ({\n ...pv,\n ctlgName: event.target.value\n }));\n }\n }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_8__[\"default\"], {\n sx: STYLES.PLANS_CHECKBOX_HAVEDOCS\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_9__[\"default\"], {\n control: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_10__[\"default\"], {\n checked: filter.haveDocs,\n onChange: event => setFilter(pv => ({\n ...pv,\n haveDocs: event.target.checked\n }))\n }),\n label: \"\\u0422\\u043E\\u043B\\u044C\\u043A\\u043E \\u0441 \\u043F\\u043B\\u0430\\u043D\\u0430\\u043C\\u0438\",\n labelPlacement: \"end\"\n })), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_11__[\"default\"], null, planCtlgs.map(p => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_12__[\"default\"], {\n sx: p.NCOUNT_DOCS == 0 ? STYLES.PLANS_LIST_ITEM_ZERODOCS : null,\n key: p.NRN,\n selected: p.NRN === selectedPlanCtlg,\n onClick: () => onClick ? onClick({\n NRN: p.NRN,\n SNAME: p.SNAME,\n NMIN_YEAR: p.NMIN_YEAR,\n NMAX_YEAR: p.NMAX_YEAR\n }) : null\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_13__[\"default\"], {\n primary: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_14__[\"default\"], {\n sx: STYLES.PLANS_LIST_ITEM_PRIMARY\n }, p.SNAME),\n secondary: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_14__[\"default\"], {\n sx: {\n ...STYLES.PLANS_LIST_ITEM_SECONDARY\n }\n }, formatCountDocs(p.NCOUNT_DOCS))\n })))));\n};\n\n//Контроль свойств - Список каталогов планов\nPlanCtlgsList.propTypes = {\n planCtlgs: (prop_types__WEBPACK_IMPORTED_MODULE_15___default().array),\n selectedPlanCtlg: (prop_types__WEBPACK_IMPORTED_MODULE_15___default().number),\n onClick: (prop_types__WEBPACK_IMPORTED_MODULE_15___default().func),\n filter: (prop_types__WEBPACK_IMPORTED_MODULE_15___default().object),\n setFilter: (prop_types__WEBPACK_IMPORTED_MODULE_15___default().func)\n};\n\n//-----------\n//Тело модуля\n//-----------\n\n//Корневая панель мониторинга сборки изделий\nconst MechRecAssemblyMon = () => {\n //Собственное состояние\n const [state, setState, selectPlan, unselectPlan] = (0,_backend__WEBPACK_IMPORTED_MODULE_6__.useMechRecAssemblyMon)();\n\n //Состояние для фильтра каталогов\n const [filter, setFilter] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({\n ctlgName: \"\",\n haveDocs: false\n });\n\n //Массив отфильтрованных каталогов\n const filteredPlanCtgls = (0,_hooks__WEBPACK_IMPORTED_MODULE_5__.useFilteredPlanCtlgs)(state.planCtlgs, filter);\n\n //Подключение к контексту сообщений\n const {\n InlineMsgInfo\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_messaging__WEBPACK_IMPORTED_MODULE_1__[\"MessagingСtx\"]);\n\n //Обработка нажатия на элемент в списке каталогов планов\n const handleProjectClick = project => {\n if (state.selectedPlanCtlg.NRN != project.NRN) selectPlan(project);else unselectPlan();\n };\n\n //Обработка нажатия на карточку объекта\n const handleCardClick = plan => {\n setState(pv => ({\n ...pv,\n selectedPlan: {\n NRN: plan.NRN,\n SNUMB: plan.SNUMB,\n NPROGRESS: plan.NPROGRESS,\n SDETAIL: plan.SDETAIL,\n NYEAR: plan.NYEAR\n }\n }));\n };\n\n //Обработка нажатия на кнопку \"Назад\"\n const handleBackClick = () => {\n setState(pv => ({\n ...pv,\n selectedPlan: {\n NRN: null,\n SNUMB: null,\n NPROGRESS: null,\n SDETAIL: null,\n NYEAR: null\n }\n }));\n };\n\n //Генерация содержимого\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_16__[\"default\"], {\n p: 2\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material_styles__WEBPACK_IMPORTED_MODULE_17__[\"default\"], {\n theme: _styles_themes_js__WEBPACK_IMPORTED_MODULE_4__.theme\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_18__[\"default\"], {\n variant: \"extended\",\n sx: STYLES.PLANS_BUTTON,\n onClick: () => setState(pv => ({\n ...pv,\n showPlanList: !pv.showPlanList\n }))\n }, \"\\u041F\\u0440\\u043E\\u0433\\u0440\\u0430\\u043C\\u043C\\u044B\"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_19__[\"default\"], {\n anchor: \"left\",\n open: state.showPlanList,\n onClose: () => setState(pv => ({\n ...pv,\n showPlanList: false\n })),\n sx: STYLES.PLANS_DRAWER\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(PlanCtlgsList, {\n planCtlgs: filteredPlanCtgls,\n selectedPlanCtlg: state.selectedPlanCtlg.NRN,\n filter: filter,\n setFilter: setFilter,\n onClick: handleProjectClick\n })), state.init == true ? state.selectedPlanCtlg.NRN ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_14__[\"default\"], {\n variant: \"h1\",\n align: \"center\",\n py: 3\n }, `${state.selectedPlanCtlg.SNAME} на ${state.selectedPlanCtlg.NMIN_YEAR}г. - ${state.selectedPlanCtlg.NMAX_YEAR}г.`), state.plansLoaded == true ? state.selectedPlan.NRN ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_blocks_cardDetail__WEBPACK_IMPORTED_MODULE_3__.CardDetail, {\n card: state.selectedPlan,\n handleBackClick: handleBackClick\n }) : /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_20__[\"default\"], null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_21__[\"default\"], {\n container: true,\n spacing: 5\n }, state.plans.map(el => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_21__[\"default\"], {\n item: true,\n xs: state.plans.length >= 5 ? 2.4 : 12 / state.plans.length,\n key: el.NRN,\n display: \"flex\",\n justifyContent: \"center\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_blocks_cardBlock__WEBPACK_IMPORTED_MODULE_2__.CardBlock, {\n card: el,\n handleCardClick: handleCardClick\n }))))) : null) : /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(InlineMsgInfo, {\n okBtn: false,\n text: \"Укажите каталог планов для отображения его спецификаций\"\n }) : null));\n};\n\n//----------------\n//Интерфейс модуля\n//----------------\n\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/panels/mech_rec_assembly_mon/mech_rec_assembly_mon.js?"); + +/***/ }), + +/***/ "./app/panels/mech_rec_assembly_mon/styles/themes.js": +/*!***********************************************************!*\ + !*** ./app/panels/mech_rec_assembly_mon/styles/themes.js ***! + \***********************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ theme: () => (/* binding */ theme)\n/* harmony export */ });\n/* harmony import */ var _mui_material_styles__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @mui/material/styles */ \"./node_modules/@mui/material/styles/createTheme.js\");\n //Интерфейсные элементы\n\n//Описание темы\nconst theme = (0,_mui_material_styles__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n palette: {\n text: {\n secondary: {\n fontColor: \"rgba(0, 0, 0, 0.298)\"\n }\n }\n },\n typography: {\n h1: {\n fontSize: \"40px\",\n fontWeight: 400,\n textAlign: \"center\"\n },\n h2: {\n fontSize: \"40px\",\n fontWeight: 700,\n textAlign: \"center\"\n },\n h3: {\n fontSize: \"30px\",\n fontWeight: 700,\n textAlign: \"center\"\n },\n h4: {\n fontSize: \"16px\",\n fontWeight: 400,\n textAlign: \"center\"\n },\n subtitle1: {\n fontSize: \"30px\",\n fontWeight: 400,\n textAlign: \"center\"\n },\n subtitle2: {\n fontSize: \"20px\",\n fontWeight: 700,\n textAlign: \"center\"\n },\n UDO_body1: {\n fontSize: \"14px\",\n fontWeight: 400,\n textAlign: \"center\",\n wordWrap: \"break-word\",\n letterSpacing: \"0.00938em\",\n lineHeight: \"1.5\"\n },\n UDO_body2: {\n fontSize: \"12px\",\n fontWeight: 400,\n whiteSpace: \"pre-line\",\n textAlign: \"center\",\n wordWrap: \"break-word\",\n letterSpacing: \"0.00938em\",\n lineHeight: \"1.5\"\n },\n body3: {\n fontSize: \"9px\",\n whiteSpace: \"pre-line\",\n textAlign: \"center\"\n }\n }\n});\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/panels/mech_rec_assembly_mon/styles/themes.js?"); + +/***/ }), + +/***/ "./app/panels/mech_rec_cost_jobs_manage/backend.js": +/*!*********************************************************!*\ + !*** ./app/panels/mech_rec_cost_jobs_manage/backend.js ***! + \*********************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ updatingSelected: () => (/* binding */ updatingSelected),\n/* harmony export */ useCostEquipment: () => (/* binding */ useCostEquipment),\n/* harmony export */ useCostJobsSpecs: () => (/* binding */ useCostJobsSpecs),\n/* harmony export */ useCostRouteLists: () => (/* binding */ useCostRouteLists)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _context_backend__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../context/backend */ \"./app/context/backend.js\");\n/* harmony import */ var _core_utils__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../core/utils */ \"./app/core/utils.js\");\n//---------------------\n//Подключение библиотек\n//---------------------\n\n //Классы React\n //Контекст взаимодействия с сервером\n //Вспомогательные функции\n\n//---------\n//Константы\n//---------\n\n//Размер страницы данных\nconst DATA_GRID_PAGE_SIZE = 5;\nconst DATA_GRID_PAGE_FCEQUIPMENT = 10;\n\n//---------------------------------------------\n//Вспомогательные функции форматирования данных\n//---------------------------------------------\n\n//Переиницализация выбранных значений строк (необходимо при сортировке или добавлении записей строк)\nconst updatingSelected = (rows, selectedRows) => {\n //Если полученный массив строк не пустой\n if (rows.length > 0 && selectedRows.length > 0) {\n //Устанавливаем выбор там, где он был установлен\n let updatedRows = rows.map(item => {\n if (selectedRows.includes(item.NRN)) {\n return {\n ...item,\n NSELECT: 1\n };\n } else {\n return item;\n }\n });\n return updatedRows;\n }\n //Возвращаем\n return rows;\n};\n\n//-----------\n//Тело модуля\n//-----------\n\n//Хук для таблицы маршрутных листов\nconst useCostRouteLists = (task, processIdent) => {\n //Собственное состояние - таблица данных\n const [costRouteLists, setCostRouteLists] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({\n task: null,\n dataLoaded: false,\n columnsDef: [],\n orders: null,\n rows: [],\n selectedRows: [],\n reload: true,\n pageNumber: 1,\n morePages: true\n });\n\n //Подключение к контексту взаимодействия с сервером\n const {\n executeStored,\n SERV_DATA_TYPE_CLOB\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_backend__WEBPACK_IMPORTED_MODULE_1__[\"BackEndСtx\"]);\n\n //Загрузка данных таблицы с сервера\n const loadData = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async () => {\n if (costRouteLists.reload) {\n const data = await executeStored({\n stored: \"PKG_P8PANELS_MECHREC.FCJOBSSP_FCROUTLST_DG_GET\",\n args: {\n NFCJOBS: task,\n CORDERS: {\n VALUE: (0,_core_utils__WEBPACK_IMPORTED_MODULE_2__.object2Base64XML)(costRouteLists.orders, {\n arrayNodeName: \"orders\"\n }),\n SDATA_TYPE: SERV_DATA_TYPE_CLOB\n },\n NPAGE_NUMBER: costRouteLists.pageNumber,\n NPAGE_SIZE: DATA_GRID_PAGE_SIZE,\n NINCLUDE_DEF: costRouteLists.dataLoaded ? 0 : 1\n },\n respArg: \"COUT\",\n attributeValueProcessor: (name, val) => [\"NSELECT\"].includes(name) ? val === 1 : val\n });\n setCostRouteLists(pv => ({\n ...pv,\n task: task,\n columnsDef: data.XCOLUMNS_DEF ? [...data.XCOLUMNS_DEF] : pv.columnsDef,\n rows: pv.pageNumber == 1 ? updatingSelected([...(data.XROWS || [])], costRouteLists.selectedRows) : updatingSelected([...pv.rows, ...(data.XROWS || [])], costRouteLists.selectedRows),\n dataLoaded: true,\n reload: false,\n morePages: (data.XROWS || []).length >= DATA_GRID_PAGE_SIZE\n }));\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [costRouteLists.reload, costRouteLists.filters, costRouteLists.orders, costRouteLists.dataLoaded, costRouteLists.pageNumber, executeStored, SERV_DATA_TYPE_CLOB]);\n\n //Добавление/удаление записи в селектлисте\n const modifySelectList = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async prms => {\n try {\n if (prms.NSELECT) {\n await executeStored({\n stored: \"PKG_P8PANELS_MECHREC.SELECTLIST_FCROUTLST_ADD\",\n args: {\n NIDENT: processIdent,\n NFCROUTLST: prms.NFCROUTLST\n }\n });\n } else {\n await executeStored({\n stored: \"PKG_P8PANELS_MECHREC.SELECTLIST_FCROUTLST_DEL\",\n args: {\n NIDENT: processIdent,\n NFCROUTLST: prms.NFCROUTLST\n }\n });\n }\n } catch (e) {\n throw new Error(e.message);\n }\n },\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [executeStored]);\n\n //При необходимости обновить данные таблицы\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n loadData();\n }, [costRouteLists.reload, loadData]);\n\n //При изменении сменного задания\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n setCostRouteLists(pv => ({\n ...pv,\n dataLoaded: false,\n columnsDef: [],\n orders: null,\n rows: [],\n selectedRows: [],\n reload: true,\n pageNumber: 1,\n morePages: true\n }));\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [task]);\n return [costRouteLists, setCostRouteLists, modifySelectList];\n};\n\n//Хук для таблицы операций\nconst useCostJobsSpecs = (task, fcroutlstList, processIdent) => {\n //Собственное состояние - таблица данных\n const [costJobsSpecs, setCostJobsSpecs] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({\n task: null,\n dataLoaded: false,\n columnsDef: [],\n orders: null,\n rows: [],\n selectedRows: [],\n reload: true,\n pageNumber: 1,\n morePages: true\n });\n\n //Подключение к контексту взаимодействия с сервером\n const {\n executeStored,\n SERV_DATA_TYPE_CLOB\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_backend__WEBPACK_IMPORTED_MODULE_1__[\"BackEndСtx\"]);\n\n //Загрузка данных таблицы с сервера\n const loadData = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async () => {\n if (costJobsSpecs.reload) {\n const data = await executeStored({\n stored: \"PKG_P8PANELS_MECHREC.FCJOBSSP_DG_GET\",\n args: {\n NFCJOBS: task,\n NIDENT: processIdent,\n //SFCROUTLST_LIST: fcroutlstList.join(\",\"),\n CORDERS: {\n VALUE: (0,_core_utils__WEBPACK_IMPORTED_MODULE_2__.object2Base64XML)(costJobsSpecs.orders, {\n arrayNodeName: \"orders\"\n }),\n SDATA_TYPE: SERV_DATA_TYPE_CLOB\n },\n NPAGE_NUMBER: costJobsSpecs.pageNumber,\n NPAGE_SIZE: DATA_GRID_PAGE_SIZE,\n NINCLUDE_DEF: costJobsSpecs.dataLoaded ? 0 : 1\n },\n respArg: \"COUT\",\n attributeValueProcessor: (name, val) => [\"NSELECT\"].includes(name) ? val === 1 : val\n });\n setCostJobsSpecs(pv => ({\n ...pv,\n task: task,\n columnsDef: data.XCOLUMNS_DEF ? [...data.XCOLUMNS_DEF] : pv.columnsDef,\n rows: pv.pageNumber == 1 ? updatingSelected([...(data.XROWS || [])], costJobsSpecs.selectedRows) : updatingSelected([...pv.rows, ...(data.XROWS || [])], costJobsSpecs.selectedRows),\n dataLoaded: true,\n reload: false,\n morePages: (data.XROWS || []).length >= DATA_GRID_PAGE_SIZE\n }));\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [costJobsSpecs.reload, costJobsSpecs.filters, costJobsSpecs.orders, costJobsSpecs.dataLoaded, costJobsSpecs.pageNumber, executeStored, SERV_DATA_TYPE_CLOB]);\n\n //Выдача задания\n const issueCostJobsSpecs = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async prms => {\n try {\n await executeStored({\n stored: \"PKG_P8PANELS_MECHREC.FCJOBSSP_ISSUE\",\n args: {\n NFCJOBS: prms.NFCJOBS,\n SFCJOBSSP_LIST: prms.SFCJOBSSP_LIST\n }\n });\n } catch (e) {\n throw new Error(e.message);\n }\n }, [executeStored]);\n\n //При необходимости обновить данные таблицы\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n loadData();\n }, [costJobsSpecs.reload, loadData]);\n\n //При изменении сменного задания\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n setCostJobsSpecs(pv => ({\n ...pv,\n dataLoaded: false,\n columnsDef: [],\n orders: null,\n rows: [],\n selectedRows: [],\n reload: true,\n pageNumber: 1,\n morePages: true\n }));\n }, [task, fcroutlstList]);\n return [costJobsSpecs, setCostJobsSpecs, issueCostJobsSpecs];\n};\n\n//Хук для таблицы рабочих центров\nconst useCostEquipment = () => {\n //Собственное состояние - таблица данных\n const [costEquipment, setCostEquipment] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({\n dataLoaded: false,\n columnsDef: [],\n orders: null,\n rows: [],\n selectedRows: [],\n selectedLoaded: false,\n reload: true,\n pageNumber: 1,\n morePages: true\n });\n\n //Подключение к контексту взаимодействия с сервером\n const {\n executeStored,\n SERV_DATA_TYPE_CLOB\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_backend__WEBPACK_IMPORTED_MODULE_1__[\"BackEndСtx\"]);\n\n //Загрузка данных таблицы с сервера\n const loadData = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async () => {\n if (costEquipment.reload) {\n const data = await executeStored({\n stored: \"PKG_P8PANELS_MECHREC.FCEQUIPMENT_DG_GET\",\n args: {\n CORDERS: {\n VALUE: (0,_core_utils__WEBPACK_IMPORTED_MODULE_2__.object2Base64XML)(costEquipment.orders, {\n arrayNodeName: \"orders\"\n }),\n SDATA_TYPE: SERV_DATA_TYPE_CLOB\n },\n NPAGE_NUMBER: costEquipment.pageNumber,\n NPAGE_SIZE: DATA_GRID_PAGE_FCEQUIPMENT,\n NINCLUDE_DEF: costEquipment.dataLoaded ? 0 : 1\n },\n respArg: \"COUT\",\n attributeValueProcessor: (name, val) => [\"NSELECT\"].includes(name) ? val === 1 : val\n });\n setCostEquipment(pv => ({\n ...pv,\n columnsDef: data.XCOLUMNS_DEF ? [...data.XCOLUMNS_DEF] : pv.columnsDef,\n rows: pv.pageNumber == 1 ? updatingSelected([...(data.XROWS || [])], costEquipment.selectedRows) : updatingSelected([...pv.rows, ...(data.XROWS || [])], costEquipment.selectedRows),\n dataLoaded: true,\n reload: false,\n morePages: (data.XROWS || []).length >= DATA_GRID_PAGE_FCEQUIPMENT\n }));\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [costEquipment.reload, costEquipment.filters, costEquipment.orders, costEquipment.dataLoaded, costEquipment.pageNumber, executeStored, SERV_DATA_TYPE_CLOB]);\n\n //Включение оборудования в операции\n const includeCostEquipment = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async prms => {\n try {\n await executeStored({\n stored: \"PKG_P8PANELS_MECHREC.FCJOBSSP_INC_FCEQUIPMENT\",\n args: {\n NFCEQUIPMENT: prms.NFCEQUIPMENT,\n NFCJOBS: prms.NFCJOBS,\n SFCJOBSSP_LIST: prms.SFCJOBSSP_LIST\n }\n });\n } catch (e) {\n throw new Error(e.message);\n }\n }, [executeStored]);\n\n //Исключение оборудования из операции\n const excludeCostEquipment = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async prms => {\n try {\n await executeStored({\n stored: \"PKG_P8PANELS_MECHREC.FCJOBSSP_EXC_FCEQUIPMENT\",\n args: {\n NFCEQUIPMENT: prms.NFCEQUIPMENT,\n NFCJOBS: prms.NFCJOBS,\n SFCJOBSSP_LIST: prms.SFCJOBSSP_LIST\n }\n });\n } catch (e) {\n throw new Error(e.message);\n }\n }, [executeStored]);\n\n //При необходимости обновить данные таблицы\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n loadData();\n }, [costEquipment.reload, loadData]);\n return [costEquipment, setCostEquipment, includeCostEquipment, excludeCostEquipment];\n};\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/panels/mech_rec_cost_jobs_manage/backend.js?"); + +/***/ }), + +/***/ "./app/panels/mech_rec_cost_jobs_manage/fcjobssp.js": +/*!**********************************************************!*\ + !*** ./app/panels/mech_rec_cost_jobs_manage/fcjobssp.js ***! + \**********************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ CostJobsSpecsDataGrid: () => (/* binding */ CostJobsSpecsDataGrid),\n/* harmony export */ headCellRender: () => (/* binding */ headCellRender)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! prop-types */ \"./node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_10___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_10__);\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Box/Box.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Checkbox/Checkbox.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Icon/Icon.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Grid/Grid.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Typography/Typography.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Button/Button.js\");\n/* harmony import */ var _components_p8p_data_grid__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../components/p8p_data_grid */ \"./app/components/p8p_data_grid.js\");\n/* harmony import */ var _config_wrapper__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../config_wrapper */ \"./app/config_wrapper.js\");\n/* harmony import */ var _backend__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./backend */ \"./app/panels/mech_rec_cost_jobs_manage/backend.js\");\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n/*\r\n Парус 8 - Панели мониторинга - ПУП - Выдача сменного задания\r\n Компонент панели: Таблица информации об операциях сменного задания\r\n*/\n\n//---------------------\n//Подключение библиотек\n//---------------------\n\n //Классы React\n //Контроль свойств компонента\n //Интерфейсные элементы\n //Таблица данных\n //Подключение компонентов к настройкам приложения\n //Собственные хуки таблиц\n\n//---------\n//Константы\n//---------\n\nconst sUnitCostRouteLists = \"CostRouteLists\"; //Мнемокод раздела маршрутных листов\nconst sUnitCostJobsSpecs = \"CostJobsSpecs\"; //Мнемокод раздела операций\nconst sUnitCostEquipment = \"CostEquipment\"; //Мнемокод раздела рабочих центров\n\n//Стили\nconst STYLES = {\n CONTAINER: {\n textAlign: \"center\"\n },\n TABLE: {\n paddingTop: \"15px\"\n },\n TABLE_SUM: {\n textAlign: \"right\",\n paddingTop: \"5px\",\n paddingRight: \"15px\"\n },\n TABLE_BUTTONS: {\n display: \"flex\",\n justifyContent: \"flex-end\"\n },\n CHECK_BOX: {\n textAlign: \"center\"\n },\n OPERATIONS_SEPARATOR: {\n padding: \"3px 0px\",\n backgroundColor: \"lightblue\"\n },\n INFORMATION_HALF: {\n minWidth: \"50%\",\n maxWidth: \"50%\",\n textAlign: \"center\"\n }\n};\n\n//---------------------------------------------\n//Вспомогательные функции форматирования данных\n//---------------------------------------------\n\n//Формирование списка отмеченных записей\nfunction selectedReducer(accumulator, current) {\n if (current.NSELECT == 1) {\n accumulator.push(current.NRN);\n }\n return accumulator;\n}\n\n//Форматирование значения ячейки\nconst dataCellRender = ({\n row,\n columnDef,\n handleSelectChange,\n sUnit,\n selectedEquip\n}) => {\n //Инициализируем доступность выбора\n let disabled = false;\n //Если это рабочие центры\n if (sUnit === sUnitCostEquipment) {\n //Для колонки выбора\n if (columnDef.name === \"NSELECT\") {\n return {\n data: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n sx: STYLES.CHECK_BOX\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_5__[\"default\"], {\n disabled: selectedEquip.length === 1 && selectedEquip[0] !== row[\"NRN\"],\n checked: row[columnDef.name]\n //checked={row[columnDef.name] === 1}\n ,\n onChange: () => handleSelectChange(row[\"NRN\"], sUnit, row[\"NCOEFF\"] <= row[\"NLOADING\"])\n }))\n };\n }\n //Если оборудование загружено\n if (row[\"NCOEFF\"] <= row[\"NLOADING\"]) {\n //Если поле не поле выбора\n if (columnDef.name !== \"NSELECT\") {\n return {\n cellStyle: {\n color: \"lightgrey\"\n },\n data: row[columnDef.name]\n };\n }\n }\n }\n //Если это операции\n if (sUnit === sUnitCostJobsSpecs) {\n //Если \"Оборудование план\" операции сходится с выбранным оборудованием\n if (selectedEquip.includes(row[\"NEQUIP_PLAN\"])) {\n //Если колонка выбора\n if (columnDef.name === \"NSELECT\") {\n return {\n cellStyle: {\n backgroundColor: \"#bce0de\"\n },\n data: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n sx: STYLES.CHECK_BOX\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_5__[\"default\"], {\n disabled: disabled,\n checked: row[columnDef.name]\n //checked={row[columnDef.name] === 1}\n ,\n onChange: () => handleSelectChange(row[\"NRN\"], sUnit)\n }))\n };\n } else {\n return {\n cellStyle: {\n backgroundColor: \"#bce0de\"\n },\n data: row[columnDef.name]\n };\n }\n }\n }\n //Для колонки выбора\n if (columnDef.name === \"NSELECT\") {\n return {\n data: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n sx: STYLES.CHECK_BOX\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_5__[\"default\"], {\n disabled: disabled,\n checked: row[columnDef.name]\n //checked={row[columnDef.name] === 1}\n ,\n onChange: () => handleSelectChange(row[\"NRN\"], sUnit)\n }))\n };\n }\n return {\n data: row[columnDef.name]\n };\n};\n\n//Генерация представления ячейки заголовка группы\nconst headCellRender = ({\n columnDef\n}) => {\n if (columnDef.name === \"NSELECT\") {\n return {\n stackStyle: {\n padding: \"2px\",\n justifyContent: \"space-around\"\n },\n data: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_6__[\"default\"], null, \"done\")\n };\n } else {\n return {\n stackStyle: {\n padding: \"2px\"\n },\n data: columnDef.caption\n };\n }\n};\n\n//-----------\n//Тело модуля\n//-----------\n\n//Таблица информации об операциях сменного задания\nconst CostJobsSpecsDataGrid = ({\n task,\n processIdent,\n clearSelectlist\n}) => {\n //Собственное состояние - таблица данных маршрутных листов\n const [costRouteLists, setCostRouteLists, modifySelectList] = (0,_backend__WEBPACK_IMPORTED_MODULE_3__.useCostRouteLists)(task, processIdent);\n\n //Собственное состояние - таблица данных операций\n const [costJobsSpecs, setCostJobsSpecs, issueCostJobsSpecs] = (0,_backend__WEBPACK_IMPORTED_MODULE_3__.useCostJobsSpecs)(task, costRouteLists.selectedRows, processIdent);\n\n //Собственное состояние - таблица рабочих центров\n const [costEquipment, setCostEquipment, includeCostEquipment, excludeCostEquipment] = (0,_backend__WEBPACK_IMPORTED_MODULE_3__.useCostEquipment)();\n\n //При изменении состояния сортировки маршрутных листов\n const costRouteListOrderChanged = ({\n orders\n }) => setCostRouteLists(pv => ({\n ...pv,\n orders: [...orders],\n pageNumber: 1,\n reload: true\n }));\n\n //При изменении количества отображаемых страниц маршрутных листов\n const costRouteListPagesCountChanged = () => setCostRouteLists(pv => ({\n ...pv,\n pageNumber: pv.pageNumber + 1,\n reload: true\n }));\n\n //При изменении состояния сортировки операций\n const costJobsSpecOrderChanged = ({\n orders\n }) => setCostJobsSpecs(pv => ({\n ...pv,\n orders: [...orders],\n pageNumber: 1,\n reload: true\n }));\n\n //При изменении количества отображаемых страниц операций\n const costJobsSpecPagesCountChanged = () => setCostJobsSpecs(pv => ({\n ...pv,\n pageNumber: pv.pageNumber + 1,\n reload: true\n }));\n\n //При изменении состояния сортировки рабочих центров\n const costEquipmentOrderChanged = ({\n orders\n }) => setCostEquipment(pv => ({\n ...pv,\n orders: [...orders],\n pageNumber: 1,\n reload: true\n }));\n\n //При изменении количества отображаемых страниц рабочих центров\n const costEquipmentPagesCountChanged = () => setCostEquipment(pv => ({\n ...pv,\n pageNumber: pv.pageNumber + 1,\n reload: true\n }));\n\n //При включении оборудования в операции\n const costJobsSpecIncludeCostEquipment = () => {\n //Делаем асинхронно, чтобы при ошибке ничего не обновлять\n const includeAsync = async () => {\n //Включаем оборудование в операции\n try {\n await includeCostEquipment({\n NFCEQUIPMENT: costEquipment.selectedRows[0],\n NFCJOBS: task,\n SFCJOBSSP_LIST: costJobsSpecs.selectedRows.join(\";\")\n });\n //Необходимо обновить все данные\n setCostJobsSpecs(pv => ({\n ...pv,\n selectedRows: [],\n reload: true\n }));\n setCostEquipment(pv => ({\n ...pv,\n selectedRows: [],\n selectedLoaded: false,\n reload: true\n }));\n } catch (e) {\n throw new Error(e.message);\n }\n };\n //Включаем оборудование асинхронно\n includeAsync();\n };\n\n //При исключении оборудования из операции\n const costJobsSpecExcludeCostEquipment = () => {\n //Делаем асинхронно, чтобы при ошибке ничего не обновлять\n const excludeAsync = async () => {\n //Включаем оборудование в операции\n try {\n await excludeCostEquipment({\n NFCEQUIPMENT: costEquipment.selectedRows[0],\n NFCJOBS: task,\n SFCJOBSSP_LIST: costJobsSpecs.selectedRows.join(\";\")\n });\n //Необходимо обновить данные о маршрутных листах и оборудовании\n setCostJobsSpecs(pv => ({\n ...pv,\n selectedRows: [],\n reload: true\n }));\n setCostEquipment(pv => ({\n ...pv,\n selectedRows: [],\n reload: true\n }));\n } catch (e) {\n throw new Error(e.message);\n }\n };\n //Исключаем операции асинхронно\n excludeAsync();\n };\n\n //Выдача задания операции\n const costJobsSpecIssue = () => {\n //Делаем асинхронно, чтобы при ошибке ничего не обновлять\n const issueAsync = async () => {\n //Включаем оборудование в операции\n try {\n await issueCostJobsSpecs({\n NFCJOBS: task,\n SFCJOBSSP_LIST: costJobsSpecs.selectedRows.join(\";\")\n });\n //Необходимо обновить данные о маршрутных листах и оборудовании\n clearSelectlist(processIdent);\n setCostRouteLists(pv => ({\n ...pv,\n selectedRows: [],\n reload: true\n }));\n setCostEquipment(pv => ({\n ...pv,\n selectedRows: [],\n reload: true\n }));\n } catch (e) {\n throw new Error(e.message);\n }\n };\n //Выдаем задание асинхронно\n issueAsync();\n };\n\n //При изменение состояния выбора\n const handleSelectChange = (NRN, sUnit, selectedLoaded) => {\n //Инициализируем строки таблицы\n let rows = [];\n //Индекс элемента в массиве\n let indexRow = null;\n //Исходим от раздела\n switch (sUnit) {\n //Маршрутные листы\n case sUnitCostRouteLists:\n //Инициализируем маршрутными листами\n rows = costRouteLists.rows;\n //Определяем индекс элемента в массиве\n indexRow = rows.findIndex(obj => obj.NRN == NRN);\n //Изменяем значение выбора\n rows[indexRow].NSELECT = !rows[indexRow].NSELECT;\n //Добавляем/удаляем маршрутный лист из селектлиста\n modifySelectList({\n NFCROUTLST: NRN,\n NSELECT: rows[indexRow].NSELECT\n });\n //Актуализируем строки\n setCostRouteLists(pv => ({\n ...pv,\n rows: rows,\n selectedRows: rows.reduce(selectedReducer, [])\n }));\n //Выходим\n break;\n //Операции\n case sUnitCostJobsSpecs:\n //Инициализируем операциями\n rows = costJobsSpecs.rows;\n //Определяем индекс элемента в массиве\n indexRow = rows.findIndex(obj => obj.NRN == NRN);\n //Изменяем значение выбора\n rows[indexRow].NSELECT = !rows[indexRow].NSELECT;\n //Актуализируем строки\n setCostJobsSpecs(pv => ({\n ...pv,\n rows: rows,\n selectedRows: rows.reduce(selectedReducer, [])\n }));\n //Выходим\n break;\n //Рабочие центры\n case sUnitCostEquipment:\n //Инициализируем рабочими центрами\n rows = costEquipment.rows;\n //Определяем индекс элемента в массиве\n indexRow = rows.findIndex(obj => obj.NRN == NRN);\n //Изменяем значение выбора\n rows[indexRow].NSELECT = !rows[indexRow].NSELECT;\n //Актуализируем строки\n setCostEquipment(pv => ({\n ...pv,\n rows: rows,\n selectedRows: rows.reduce(selectedReducer, []),\n selectedLoaded: selectedLoaded\n }));\n //Выходим\n break;\n default:\n return;\n }\n };\n\n //Генерация содержимого\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n style: STYLES.CONTAINER\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_7__[\"default\"], {\n container: true,\n spacing: 2\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_7__[\"default\"], {\n item: true,\n sx: STYLES.INFORMATION_HALF\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_8__[\"default\"], {\n variant: \"h6\"\n }, \"\\u041C\\u0430\\u0440\\u0448\\u0440\\u0443\\u0442\\u043D\\u044B\\u0435 \\u043B\\u0438\\u0441\\u0442\\u044B\"), costRouteLists.dataLoaded ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n sx: STYLES.TABLE_BUTTONS\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_9__[\"default\"], {\n variant: \"contained\",\n size: \"small\",\n disabled: costJobsSpecs.selectedRows.length === 0,\n onClick: costJobsSpecIssue\n }, \"\\u0412\\u044B\\u0434\\u0430\\u0442\\u044C \\u0437\\u0430\\u0434\\u0430\\u043D\\u0438\\u044F\")), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n sx: STYLES.TABLE\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_components_p8p_data_grid__WEBPACK_IMPORTED_MODULE_1__.P8PDataGrid, _extends({}, _config_wrapper__WEBPACK_IMPORTED_MODULE_2__.P8P_DATA_GRID_CONFIG_PROPS, {\n columnsDef: costRouteLists.columnsDef,\n rows: costRouteLists.rows,\n size: _components_p8p_data_grid__WEBPACK_IMPORTED_MODULE_1__.P8P_DATA_GRID_SIZE.SMALL,\n morePages: costRouteLists.morePages,\n reloading: costRouteLists.reload,\n onOrderChanged: costRouteListOrderChanged,\n onPagesCountChanged: costRouteListPagesCountChanged,\n dataCellRender: prms => dataCellRender({\n ...prms,\n handleSelectChange,\n sUnit: sUnitCostRouteLists\n }),\n headCellRender: prms => headCellRender({\n ...prms\n })\n })), costRouteLists.selectedRows.length > 0 ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n sx: STYLES.OPERATIONS_SEPARATOR\n }, \"\\u041E\\u043F\\u0435\\u0440\\u0430\\u0446\\u0438\\u0438 \\u0432\\u044B\\u0431\\u0440\\u0430\\u043D\\u043D\\u044B\\u0445 \\u043C\\u0430\\u0440\\u0448\\u0440\\u0443\\u0442\\u043D\\u044B\\u0445 \\u043B\\u0438\\u0441\\u0442\\u043E\\u0432\"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_components_p8p_data_grid__WEBPACK_IMPORTED_MODULE_1__.P8PDataGrid, _extends({}, _config_wrapper__WEBPACK_IMPORTED_MODULE_2__.P8P_DATA_GRID_CONFIG_PROPS, {\n columnsDef: costJobsSpecs.columnsDef,\n rows: costJobsSpecs.rows,\n size: _components_p8p_data_grid__WEBPACK_IMPORTED_MODULE_1__.P8P_DATA_GRID_SIZE.SMALL,\n morePages: costJobsSpecs.morePages,\n reloading: costJobsSpecs.reload,\n onOrderChanged: costJobsSpecOrderChanged,\n onPagesCountChanged: costJobsSpecPagesCountChanged,\n dataCellRender: prms => dataCellRender({\n ...prms,\n handleSelectChange,\n sUnit: sUnitCostJobsSpecs,\n selectedEquip: costEquipment.selectedRows\n }),\n headCellRender: prms => headCellRender({\n ...prms\n })\n }))) : null)) : null), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_7__[\"default\"], {\n item: true,\n sx: STYLES.INFORMATION_HALF\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_8__[\"default\"], {\n variant: \"h6\"\n }, \"\\u0420\\u0430\\u0431\\u043E\\u0447\\u0438\\u0435 \\u0446\\u0435\\u043D\\u0442\\u0440\\u044B\"), costEquipment.dataLoaded ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n sx: STYLES.TABLE_BUTTONS\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_9__[\"default\"], {\n variant: \"contained\",\n size: \"small\",\n disabled: costEquipment.selectedRows.length !== 1 || costEquipment.selectedRows.length === 1 && costJobsSpecs.selectedRows.length === 0 || costEquipment.selectedLoaded,\n onClick: costJobsSpecIncludeCostEquipment\n }, \"\\u0412\\u043A\\u043B\\u044E\\u0447\\u0438\\u0442\\u044C \\u0432 \\u0437\\u0430\\u0434\\u0430\\u043D\\u0438\\u0435\"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n ml: 1\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_9__[\"default\"], {\n variant: \"contained\",\n size: \"small\",\n disabled: costEquipment.selectedRows.length !== 1 || costEquipment.selectedRows.length === 1 && costJobsSpecs.selectedRows.length === 0,\n onClick: costJobsSpecExcludeCostEquipment\n }, \"\\u0418\\u0441\\u043A\\u043B\\u044E\\u0447\\u0438\\u0442\\u044C \\u0438\\u0437 \\u0437\\u0430\\u0434\\u0430\\u043D\\u0438\\u044F\"))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n sx: STYLES.TABLE\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_components_p8p_data_grid__WEBPACK_IMPORTED_MODULE_1__.P8PDataGrid, _extends({}, _config_wrapper__WEBPACK_IMPORTED_MODULE_2__.P8P_DATA_GRID_CONFIG_PROPS, {\n columnsDef: costEquipment.columnsDef,\n rows: costEquipment.rows,\n size: _components_p8p_data_grid__WEBPACK_IMPORTED_MODULE_1__.P8P_DATA_GRID_SIZE.SMALL,\n morePages: costEquipment.morePages,\n reloading: costEquipment.reload,\n onOrderChanged: costEquipmentOrderChanged,\n onPagesCountChanged: costEquipmentPagesCountChanged,\n dataCellRender: prms => dataCellRender({\n ...prms,\n handleSelectChange,\n sUnit: sUnitCostEquipment,\n selectedEquip: costEquipment.selectedRows\n }),\n headCellRender: prms => headCellRender({\n ...prms\n })\n })))) : null)));\n};\n\n//Контроль свойств - Таблица информации об операциях сменного задания\nCostJobsSpecsDataGrid.propTypes = {\n task: (prop_types__WEBPACK_IMPORTED_MODULE_10___default().number).isRequired,\n processIdent: (prop_types__WEBPACK_IMPORTED_MODULE_10___default().number),\n clearSelectlist: (prop_types__WEBPACK_IMPORTED_MODULE_10___default().func)\n};\n\n//----------------\n//Интерфейс модуля\n//----------------\n\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/panels/mech_rec_cost_jobs_manage/fcjobssp.js?"); + +/***/ }), + +/***/ "./app/panels/mech_rec_cost_jobs_manage/hooks.js": +/*!*******************************************************!*\ + !*** ./app/panels/mech_rec_cost_jobs_manage/hooks.js ***! + \*******************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ useFilteredFcjobs: () => (/* binding */ useFilteredFcjobs)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/*\r\n Парус 8 - Панели мониторинга - ПУП - Выдача сменного задания\r\n Кастомные хуки\r\n*/\n\n//---------------------\n//Подключение библиотек\n//---------------------\n\n //Классы React\n\n//-----------\n//Тело модуля\n//-----------\n\n//Клиентский отбор сменных заданий по поисковой фразе\nconst useFilteredFcjobs = (jobs, filter) => {\n const filteredJobs = react__WEBPACK_IMPORTED_MODULE_0___default().useMemo(() => {\n return jobs.filter(catalog => catalog.SDOC_INFO.toString().toLowerCase().includes(filter.jobName));\n }, [jobs, filter]);\n return filteredJobs;\n};\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/panels/mech_rec_cost_jobs_manage/hooks.js?"); + +/***/ }), + +/***/ "./app/panels/mech_rec_cost_jobs_manage/index.js": +/*!*******************************************************!*\ + !*** ./app/panels/mech_rec_cost_jobs_manage/index.js ***! + \*******************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ RootClass: () => (/* binding */ RootClass)\n/* harmony export */ });\n/* harmony import */ var _mech_rec_cost_jobs_manage__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./mech_rec_cost_jobs_manage */ \"./app/panels/mech_rec_cost_jobs_manage/mech_rec_cost_jobs_manage.js\");\n/*\r\n Парус 8 - Панели мониторинга - ПУП - Выдача сменного задания\r\n Панель мониторинга: Точка входа\r\n*/\n\n//---------------------\n//Подключение библиотек\n//---------------------\n\n //Корневая панель выдачи сменного задания\n\n//----------------\n//Интерфейс модуля\n//----------------\n\nconst RootClass = _mech_rec_cost_jobs_manage__WEBPACK_IMPORTED_MODULE_0__.MechRecCostJobs;\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/panels/mech_rec_cost_jobs_manage/index.js?"); + +/***/ }), + +/***/ "./app/panels/mech_rec_cost_jobs_manage/mech_rec_cost_jobs_manage.js": +/*!***************************************************************************!*\ + !*** ./app/panels/mech_rec_cost_jobs_manage/mech_rec_cost_jobs_manage.js ***! + \***************************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ MechRecCostJobs: () => (/* binding */ MechRecCostJobs)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! prop-types */ \"./node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_10___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_10__);\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/TextField/TextField.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/List/List.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/ListItemButton/ListItemButton.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/ListItemText/ListItemText.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Typography/Typography.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Box/Box.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Fab/Fab.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Drawer/Drawer.js\");\n/* harmony import */ var _context_backend__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../context/backend */ \"./app/context/backend.js\");\n/* harmony import */ var _context_messaging__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../context/messaging */ \"./app/context/messaging.js\");\n/* harmony import */ var _hooks__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./hooks */ \"./app/panels/mech_rec_cost_jobs_manage/hooks.js\");\n/* harmony import */ var _fcjobssp__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./fcjobssp */ \"./app/panels/mech_rec_cost_jobs_manage/fcjobssp.js\");\n/*\r\n Парус 8 - Панели мониторинга - ПУП - Выдача сменного задания\r\n Панель мониторинга: Корневая панель выдачи сменного задания\r\n*/\n\n//---------------------\n//Подключение библиотек\n//---------------------\n\n //Классы React\n //Контроль свойств компонента\n //Интерфейсные элементы\n //Контекст взаимодействия с сервером\n //Контекст сообщений\n //Вспомогательные хуки\n //Собственные хуки таблиц\n\n//---------\n//Константы\n//---------\n\n//Стили\nconst STYLES = {\n JOBS_FINDER: {\n marginTop: \"10px\",\n marginLeft: \"10px\",\n width: \"93%\"\n },\n JOBS_LIST_ITEM_PRIMARY: {\n wordWrap: \"break-word\"\n },\n JOBS_BUTTON: {\n position: \"absolute\"\n },\n JOBS_DRAWER: {\n width: \"350px\",\n display: \"inline-block\",\n flexShrink: 0,\n [`& .MuiDrawer-paper`]: {\n width: \"350px\",\n display: \"inline-block\",\n boxSizing: \"border-box\"\n }\n },\n CONTAINER: {\n margin: \"5px 0px\",\n textAlign: \"center\"\n }\n};\n\n//------------------------------------\n//Вспомогательные функции и компоненты\n//------------------------------------\n\n//Список сменных заданий\nconst JobList = ({\n jobs = [],\n selectedJob,\n filter,\n setFilter,\n onClick\n} = {}) => {\n //Генерация содержимого\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_5__[\"default\"], {\n sx: STYLES.JOBS_FINDER,\n name: \"jobFilter\",\n label: \"\\u0421\\u043C\\u0435\\u043D\\u043D\\u043E\\u0435 \\u0437\\u0430\\u0434\\u0430\\u043D\\u0438\\u0435\",\n value: filter.jobName,\n variant: \"standard\",\n fullWidth: true,\n onChange: event => {\n setFilter(pv => ({\n ...pv,\n jobName: event.target.value\n }));\n }\n }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_6__[\"default\"], null, jobs.map(p => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_7__[\"default\"], {\n key: p.NRN,\n selected: p.NRN === selectedJob.NRN,\n onClick: () => onClick ? onClick(p) : null\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_8__[\"default\"], {\n primary: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_9__[\"default\"], {\n sx: STYLES.JOBS_LIST_ITEM_PRIMARY\n }, p.SDOC_INFO)\n })))));\n};\n\n//Контроль свойств - Список каталогов планов\nJobList.propTypes = {\n jobs: (prop_types__WEBPACK_IMPORTED_MODULE_10___default().array),\n selectedJob: (prop_types__WEBPACK_IMPORTED_MODULE_10___default().object),\n onClick: (prop_types__WEBPACK_IMPORTED_MODULE_10___default().func),\n filter: (prop_types__WEBPACK_IMPORTED_MODULE_10___default().object),\n setFilter: (prop_types__WEBPACK_IMPORTED_MODULE_10___default().func)\n};\n\n//-----------\n//Тело модуля\n//-----------\n\n//Корневая панель выдачи сменного задания\nconst MechRecCostJobs = () => {\n //Собственное состояние - таблица данных\n const [state, setState] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({\n init: false,\n showJobList: false,\n jobList: [],\n jobListLoaded: false,\n selectedJob: {},\n processIdent: null,\n dataLoaded: false\n });\n\n //Состояние для фильтра каталогов\n const [filter, setFilter] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({\n jobName: \"\"\n });\n\n //Массив отфильтрованных каталогов\n const filteredJobs = (0,_hooks__WEBPACK_IMPORTED_MODULE_3__.useFilteredFcjobs)(state.jobList, filter);\n\n //Подключение к контексту взаимодействия с сервером\n const {\n executeStored\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_backend__WEBPACK_IMPORTED_MODULE_1__[\"BackEndСtx\"]);\n\n //Подключение к контексту сообщений\n const {\n InlineMsgInfo\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_messaging__WEBPACK_IMPORTED_MODULE_2__[\"MessagingСtx\"]);\n\n //Инициализация каталогов планов\n const initPlans = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async () => {\n if (!state.init) {\n const data = await executeStored({\n stored: \"PKG_P8PANELS_MECHREC.FCJOBS_INIT\",\n args: {},\n respArg: \"COUT\",\n fullResponse: true,\n isArray: name => name === \"XFCJOBS\"\n });\n setState(pv => ({\n ...pv,\n init: true,\n jobList: [...(data.XPAYLOAD?.XFCJOBS || [])],\n jobListLoaded: true,\n processIdent: data.XPAYLOAD.XINFO.NPROCESS_IDENT\n }));\n }\n }, [state.init, executeStored]);\n\n //При подключении компонента к странице\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n initPlans();\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n //Очистка селектлиста по идентификатору процесса\n const clearSelectlist = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async NIDENT => {\n console.log(NIDENT);\n try {\n await executeStored({\n stored: \"P_SELECTLIST_CLEAR\",\n args: {\n NIDENT: NIDENT\n }\n });\n } catch (e) {\n throw new Error(e.message);\n }\n }, [executeStored]);\n\n //Выбор плана\n const selectJob = job => {\n //Очищаем селектлист\n clearSelectlist(state.processIdent);\n //Обновляем состояние\n setState(pv => ({\n ...pv,\n selectedJob: job,\n showJobList: false,\n dataLoaded: false\n }));\n };\n\n //Сброс выбора плана\n const unselectJob = () => {\n //Очищаем селектлист\n clearSelectlist(state.processIdent);\n //Обновляем состояние\n setState(pv => ({\n ...pv,\n selectedJob: {},\n showJobList: false,\n dataLoaded: false\n }));\n };\n\n //Обработка нажатия на элемент в списке планов\n const handleJobClick = job => {\n if (state.selectedJob.NRN != job.NRN) selectJob(job);else unselectJob();\n };\n\n //Генерация содержимого\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_11__[\"default\"], {\n p: 2\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_12__[\"default\"], {\n variant: \"extended\",\n sx: STYLES.JOBS_BUTTON,\n onClick: () => setState(pv => ({\n ...pv,\n showJobList: !pv.showJobList\n }))\n }, \"\\u0421\\u043C\\u0435\\u043D\\u043D\\u044B\\u0435 \\u0437\\u0430\\u0434\\u0430\\u043D\\u0438\\u044F\"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_13__[\"default\"], {\n anchor: \"left\",\n open: state.showJobList,\n onClose: () => setState(pv => ({\n ...pv,\n showJobList: false\n })),\n sx: STYLES.JOBS_DRAWER\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(JobList, {\n jobs: filteredJobs,\n selectedJob: state.selectedJob,\n filter: filter,\n setFilter: setFilter,\n onClick: handleJobClick\n })), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n style: STYLES.CONTAINER\n }, state.selectedJob.NRN ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_9__[\"default\"], {\n variant: \"h6\"\n }, `Сменное задание \"${state.selectedJob.SSUBDIV}\" на ${state.selectedJob.SPERIOD}`), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_fcjobssp__WEBPACK_IMPORTED_MODULE_4__.CostJobsSpecsDataGrid, {\n task: state.selectedJob.NRN,\n processIdent: state.processIdent,\n clearSelectlist: clearSelectlist\n })) : !state.selectedJob.NRN ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(InlineMsgInfo, {\n okBtn: false,\n text: \"Укажите сменное задание\"\n }) : null));\n};\n\n//----------------\n//Интерфейс модуля\n//----------------\n\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/panels/mech_rec_cost_jobs_manage/mech_rec_cost_jobs_manage.js?"); + +/***/ }), + /***/ "./app/panels/mech_rec_cost_prod_plans/datagrids/backend_dg.js": /*!*********************************************************************!*\ !*** ./app/panels/mech_rec_cost_prod_plans/datagrids/backend_dg.js ***! @@ -3616,6 +4001,94 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac /***/ }), +/***/ "./app/panels/mech_rec_dept_cost_jobs/index.js": +/*!*****************************************************!*\ + !*** ./app/panels/mech_rec_dept_cost_jobs/index.js ***! + \*****************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ RootClass: () => (/* binding */ RootClass)\n/* harmony export */ });\n/* harmony import */ var _mech_rec_dept_cost_jobs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./mech_rec_dept_cost_jobs */ \"./app/panels/mech_rec_dept_cost_jobs/mech_rec_dept_cost_jobs.js\");\n/*\r\n Парус 8 - Панели мониторинга - ПУП - Загрузка цеха\r\n Панель мониторинга: Точка входа\r\n*/\n\n//---------------------\n//Подключение библиотек\n//---------------------\n\n //Корневая панель загрузки цеха\n\n//----------------\n//Интерфейс модуля\n//----------------\n\nconst RootClass = _mech_rec_dept_cost_jobs__WEBPACK_IMPORTED_MODULE_0__.MechRecDeptCostJobs;\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/panels/mech_rec_dept_cost_jobs/index.js?"); + +/***/ }), + +/***/ "./app/panels/mech_rec_dept_cost_jobs/mech_rec_dept_cost_jobs.js": +/*!***********************************************************************!*\ + !*** ./app/panels/mech_rec_dept_cost_jobs/mech_rec_dept_cost_jobs.js ***! + \***********************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ MechRecDeptCostJobs: () => (/* binding */ MechRecDeptCostJobs)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Typography/Typography.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Grid/Grid.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Box/Box.js\");\n/* harmony import */ var _core_utils__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../core/utils */ \"./app/core/utils.js\");\n/* harmony import */ var _components_p8p_data_grid__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../components/p8p_data_grid */ \"./app/components/p8p_data_grid.js\");\n/* harmony import */ var _config_wrapper__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../config_wrapper */ \"./app/config_wrapper.js\");\n/* harmony import */ var _context_backend__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../context/backend */ \"./app/context/backend.js\");\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n/*\r\n Парус 8 - Панели мониторинга - ПУП - Загрузка цеха\r\n Панель мониторинга: Корневая панель загрузки цеха\r\n*/\n\n//---------------------\n//Подключение библиотек\n//---------------------\n\n //Классы React\n //Интерфейсные элементы\n //Вспомогательные процедуры и функции\n //Таблица данных\n //Подключение компонентов к настройкам приложения\n //Контекст взаимодействия с сервером\n\n//---------\n//Константы\n//---------\n\n//Размер страницы данных\nconst DATA_GRID_PAGE_SIZE = 5;\n\n//Стили\nconst STYLES = {\n CONTAINER: {\n textAlign: \"center\",\n paddingTop: \"20px\"\n },\n TITLE: {\n paddingBottom: \"15px\"\n },\n DATA_GRID_CONTAINER: {\n minWidth: \"95vw\",\n maxWidth: \"95vw\",\n minHeight: \"80vh\",\n maxHeight: \"80vh\"\n },\n DATA_GRID_CELL: (row, columnDef) => ({\n padding: \"8px\",\n textOverflow: \"ellipsis\",\n overflow: \"hidden\",\n whiteSpace: \"pre\",\n ...(columnDef.name.match(/N.*_VALUE/) && row[columnDef.name] ? {\n backgroundColor: row[`${columnDef.name.substring(0, 12)}_TYPE`] === 0 ? \"lightgrey\" : \"lightgreen\"\n } : {})\n })\n};\n\n//------------------------------------\n//Вспомогательные функции и компоненты\n//------------------------------------\n\n//Генерация заливки строки исходя от значений\nconst dataCellRender = ({\n row,\n columnDef\n}) => ({\n cellProps: {\n title: row[columnDef.name]\n },\n cellStyle: STYLES.DATA_GRID_CELL(row, columnDef),\n data: row[columnDef]\n});\n\n//-----------\n//Тело модуля\n//-----------\n\n//Корневая панель загрузки цеха\nconst MechRecDeptCostJobs = () => {\n //Собственное состояние - таблица данных\n const [costJobs, setCostJobs] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({\n subdiv: null,\n dataLoaded: false,\n columnsDef: [],\n filters: [],\n orders: null,\n rows: [],\n reload: true,\n pageNumber: 1,\n morePages: true,\n fixedHeader: false,\n fixedColumns: 0\n });\n\n //Подключение к контексту взаимодействия с сервером\n const {\n executeStored,\n SERV_DATA_TYPE_CLOB\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_backend__WEBPACK_IMPORTED_MODULE_4__[\"BackEndСtx\"]);\n\n //Загрузка данных таблицы с сервера\n const loadData = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async () => {\n if (costJobs.reload) {\n const data = await executeStored({\n stored: \"PKG_P8PANELS_MECHREC.FCJOBS_DEP_LOAD_DG_GET\",\n args: {\n CFILTERS: {\n VALUE: (0,_core_utils__WEBPACK_IMPORTED_MODULE_1__.object2Base64XML)(costJobs.filters, {\n arrayNodeName: \"filters\"\n }),\n SDATA_TYPE: SERV_DATA_TYPE_CLOB\n },\n CORDERS: {\n VALUE: (0,_core_utils__WEBPACK_IMPORTED_MODULE_1__.object2Base64XML)(costJobs.orders, {\n arrayNodeName: \"orders\"\n }),\n SDATA_TYPE: SERV_DATA_TYPE_CLOB\n },\n NPAGE_NUMBER: costJobs.pageNumber,\n NPAGE_SIZE: DATA_GRID_PAGE_SIZE,\n NINCLUDE_DEF: costJobs.dataLoaded ? 0 : 1\n },\n respArg: \"COUT\"\n });\n setCostJobs(pv => ({\n ...pv,\n fixedHeader: data.XFCJOBS.XDATA.XDATA_GRID.fixedHeader,\n fixedColumns: data.XFCJOBS.XDATA.XDATA_GRID.fixedColumns,\n subdiv: data.XINFO.SSUBDIV,\n columnsDef: data.XFCJOBS.XDATA.XCOLUMNS_DEF ? [...data.XFCJOBS.XDATA.XCOLUMNS_DEF] : pv.columnsDef,\n rows: pv.pageNumber == 1 ? [...(data.XFCJOBS.XDATA.XROWS || [])] : [...pv.rows, ...(data.XFCJOBS.XDATA.XROWS || [])],\n dataLoaded: true,\n reload: false,\n morePages: (data.XFCJOBS.XDATA.XROWS || []).length >= DATA_GRID_PAGE_SIZE\n }));\n }\n }, [costJobs.reload, costJobs.filters, costJobs.orders, costJobs.dataLoaded, costJobs.pageNumber, executeStored, SERV_DATA_TYPE_CLOB]);\n\n //При изменении состояния фильтра\n const handleFilterChanged = ({\n filters\n }) => setCostJobs(pv => ({\n ...pv,\n filters: [...filters],\n pageNumber: 1,\n reload: true\n }));\n\n //При изменении состояния сортировки\n const handleOrderChanged = ({\n orders\n }) => setCostJobs(pv => ({\n ...pv,\n orders: [...orders],\n pageNumber: 1,\n reload: true\n }));\n\n //При изменении количества отображаемых страниц\n const handlePagesCountChanged = () => setCostJobs(pv => ({\n ...pv,\n pageNumber: pv.pageNumber + 1,\n reload: true\n }));\n\n //При необходимости обновить данные таблицы\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n loadData();\n }, [costJobs.reload, loadData]);\n\n //Генерация содержимого\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n style: STYLES.CONTAINER\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_5__[\"default\"], {\n sx: STYLES.TITLE,\n variant: \"h6\"\n }, costJobs.dataLoaded ? `Загрузка станков \"${costJobs.subdiv}\"` : null), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n container: true,\n spacing: 1\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n item: true,\n xs: 12\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_7__[\"default\"], {\n pt: 1,\n display: \"flex\",\n justifyContent: \"center\",\n alignItems: \"center\"\n }, costJobs.dataLoaded ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_components_p8p_data_grid__WEBPACK_IMPORTED_MODULE_2__.P8PDataGrid, _extends({}, _config_wrapper__WEBPACK_IMPORTED_MODULE_3__.P8P_DATA_GRID_CONFIG_PROPS, {\n containerComponentProps: {\n elevation: 6,\n style: STYLES.DATA_GRID_CONTAINER\n },\n fixedHeader: costJobs.fixedHeader,\n fixedColumns: costJobs.fixedColumns,\n columnsDef: costJobs.columnsDef,\n rows: costJobs.rows,\n size: _components_p8p_data_grid__WEBPACK_IMPORTED_MODULE_2__.P8P_DATA_GRID_SIZE.LARGE,\n morePages: costJobs.morePages,\n reloading: costJobs.reload,\n onOrderChanged: handleOrderChanged,\n onFilterChanged: handleFilterChanged,\n onPagesCountChanged: handlePagesCountChanged,\n dataCellRender: prms => dataCellRender({\n ...prms\n })\n })) : null))));\n};\n\n//----------------\n//Интерфейс модуля\n//----------------\n\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/panels/mech_rec_dept_cost_jobs/mech_rec_dept_cost_jobs.js?"); + +/***/ }), + +/***/ "./app/panels/mech_rec_dept_cost_prod_plans/fcroutlst.js": +/*!***************************************************************!*\ + !*** ./app/panels/mech_rec_dept_cost_prod_plans/fcroutlst.js ***! + \***************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ CostRouteListsDataGridDialog: () => (/* binding */ CostRouteListsDataGridDialog),\n/* harmony export */ rowExpandRender: () => (/* binding */ rowExpandRender)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! prop-types */ \"./node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_15___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_15__);\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Paper/Paper.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Typography/Typography.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Box/Box.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Dialog/Dialog.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/DialogContent/DialogContent.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/TextField/TextField.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Button/Button.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/DialogActions/DialogActions.js\");\n/* harmony import */ var _components_p8p_data_grid__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../components/p8p_data_grid */ \"./app/components/p8p_data_grid.js\");\n/* harmony import */ var _config_wrapper__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../config_wrapper */ \"./app/config_wrapper.js\");\n/* harmony import */ var _context_backend__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../context/backend */ \"./app/context/backend.js\");\n/* harmony import */ var _core_utils__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../core/utils */ \"./app/core/utils.js\");\n/* harmony import */ var _fcroutlstord__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./fcroutlstord */ \"./app/panels/mech_rec_dept_cost_prod_plans/fcroutlstord.js\");\n/* harmony import */ var _context_application__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../../context/application */ \"./app/context/application.js\");\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n/*\r\n Парус 8 - Панели мониторинга - ПУП - Производственный план цеха\r\n Компонент панели: Таблица маршрутных листов\r\n*/\n\n//---------------------\n//Подключение библиотек\n//---------------------\n\n //Классы React\n //Контроль свойств компонента\n //Интерфейсные элементы\n //Таблица данных\n //Подключение компонентов к настройкам приложения\n //Контекст взаимодействия с сервером\n //Вспомогательные функции\n //Состояние таблицы заказов маршрутных листов\n //Контекст приложения\n\n//---------\n//Константы\n//---------\n\n//Стили\nconst STYLES = {\n CONTAINER: {\n textAlign: \"center\"\n },\n TABLE: {\n paddingTop: \"15px\"\n },\n TABLE_SUM: {\n textAlign: \"right\",\n paddingTop: \"5px\",\n paddingRight: \"15px\"\n },\n DIALOG_EDITOR: {\n maxWidth: \"250px\"\n },\n DIALOG_BUTTONS: {\n marginTop: \"10px\",\n width: \"240px\"\n }\n};\n\n//---------------------------------------------\n//Вспомогательные функции форматирования данных\n//---------------------------------------------\n\n//Генерация представления расширения строки\nconst rowExpandRender = ({\n row\n}) => {\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_7__[\"default\"], {\n elevation: 4\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_fcroutlstord__WEBPACK_IMPORTED_MODULE_5__.CostRouteListsOrdDataGrid, {\n mainRowRN: row.NRN\n }));\n};\n\n//Форматирование значений колонок\nconst dataCellRender = ({\n row,\n columnDef /*, handlePriorEditOpen, handleOrderEditOpen */\n}) => {\n //!!! Пока отключено - не удалять\n // switch (columnDef.name) {\n // case \"NPRIOR_PARTY\":\n // return {\n // data: (\n // <>\n // {row[\"NPRIOR_PARTY\"]}\n // handlePriorEditOpen(row[\"NRN\"], row[\"NPRIOR_PARTY\"])}>\n // edit\n // \n // \n // )\n // };\n // case \"NCHANGE_FACEACC\":\n // return {\n // data: (\n // \n // handleOrderEditOpen(row[\"NRN\"], row[\"SPROD_ORDER\"])}>\n // inventory\n // \n // \n // )\n // };\n // }\n return {\n data: row[columnDef]\n };\n};\n\n//-----------\n//Тело модуля\n//-----------\n\n//Таблица маршрутных листов\nconst CostRouteListsDataGrid = ({\n task\n}) => {\n //Собственное состояние - таблица данных\n const [costRouteLists, setCostRouteLists] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({\n dataLoaded: false,\n columnsDef: [],\n orders: null,\n rows: [],\n reload: true,\n pageNumber: 1,\n morePages: true,\n editPriorNRN: null,\n editPriorValue: null,\n editOrderNRN: null,\n editOrderValue: null\n });\n\n //Подключение к контексту взаимодействия с сервером\n const {\n executeStored,\n SERV_DATA_TYPE_CLOB\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_backend__WEBPACK_IMPORTED_MODULE_3__[\"BackEndСtx\"]);\n\n //Подключение к контексту приложения\n const {\n pOnlineShowDictionary\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_application__WEBPACK_IMPORTED_MODULE_6__[\"ApplicationСtx\"]);\n\n //Размер страницы данных\n const DATA_GRID_PAGE_SIZE = 5;\n\n //Загрузка данных таблицы с сервера\n const loadData = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async () => {\n if (costRouteLists.reload) {\n const data = await executeStored({\n stored: \"PKG_P8PANELS_MECHREC.FCROUTLST_DEPT_DG_GET\",\n args: {\n NFCPRODPLANSP: task,\n CORDERS: {\n VALUE: (0,_core_utils__WEBPACK_IMPORTED_MODULE_4__.object2Base64XML)(costRouteLists.orders, {\n arrayNodeName: \"orders\"\n }),\n SDATA_TYPE: SERV_DATA_TYPE_CLOB\n },\n NPAGE_NUMBER: costRouteLists.pageNumber,\n NPAGE_SIZE: DATA_GRID_PAGE_SIZE,\n NINCLUDE_DEF: costRouteLists.dataLoaded ? 0 : 1\n },\n respArg: \"COUT\"\n });\n setCostRouteLists(pv => ({\n ...pv,\n columnsDef: data.XCOLUMNS_DEF ? [...data.XCOLUMNS_DEF] : pv.columnsDef,\n rows: pv.pageNumber == 1 ? [...(data.XROWS || [])] : [...pv.rows, ...(data.XROWS || [])],\n dataLoaded: true,\n reload: false,\n morePages: (data.XROWS || []).length >= DATA_GRID_PAGE_SIZE\n }));\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [costRouteLists.reload, costRouteLists.filters, costRouteLists.orders, costRouteLists.dataLoaded, costRouteLists.pageNumber, executeStored, SERV_DATA_TYPE_CLOB]);\n\n //При необходимости обновить данные таблицы\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n loadData();\n }, [costRouteLists.reload, loadData]);\n\n //При изменении состояния сортировки\n const handleOrderChanged = ({\n orders\n }) => setCostRouteLists(pv => ({\n ...pv,\n orders: [...orders],\n pageNumber: 1,\n reload: true\n }));\n\n //При изменении количества отображаемых страниц\n const handlePagesCountChanged = () => setCostRouteLists(pv => ({\n ...pv,\n pageNumber: pv.pageNumber + 1,\n reload: true\n }));\n\n //При открытии изменения приоритета партии\n const handlePriorEditOpen = (NRN, nPriorValue) => {\n setCostRouteLists(pv => ({\n ...pv,\n editPriorNRN: NRN,\n editPriorValue: nPriorValue\n }));\n };\n\n //При закрытии изменения приоритета партии\n const handlePriorEditClose = () => {\n setCostRouteLists(pv => ({\n ...pv,\n editPriorNRN: null,\n editPriorValue: null\n }));\n };\n\n //При изменении значения приоритета партии\n const handlePriorFormChanged = e => {\n setCostRouteLists(pv => ({\n ...pv,\n editPriorValue: e.target.value\n }));\n };\n\n //Изменение приоритета\n const priorChange = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async (NRN, PriorValue, rows) => {\n try {\n await executeStored({\n stored: \"PKG_P8PANELS_MECHREC.FCROUTLST_PRIOR_PARTY_UPDATE\",\n args: {\n NFCROUTLST: NRN,\n SPRIOR_PARTY: PriorValue\n }\n });\n //Изменяем значение приоритета у нужного\n rows[rows.findIndex(obj => obj.NRN == NRN)].NPRIOR_PARTY = PriorValue;\n //Актуализируем строки таблицы\n setCostRouteLists(pv => ({\n ...pv,\n rows: rows\n }));\n //Закрываем окно\n handlePriorEditClose();\n } catch (e) {\n throw new Error(e.message);\n }\n }, [executeStored]);\n\n //При нажатии на изменение приоритета партии\n const handlePriorChange = () => {\n //Изменяем значение\n priorChange(costRouteLists.editPriorNRN, costRouteLists.editPriorValue, costRouteLists.rows);\n };\n\n //При открытии изменения заказа\n const handleOrderEditOpen = (NRN, sProdOrderValue) => {\n setCostRouteLists(pv => ({\n ...pv,\n editOrderNRN: NRN,\n editOrderValue: sProdOrderValue\n }));\n };\n\n //При закрытии изменения заказа\n const handleOrderEditClose = () => {\n setCostRouteLists(pv => ({\n ...pv,\n editOrderNRN: null,\n editOrderValue: null\n }));\n };\n\n //Изменение заказа\n const setEditOrderValue = value => {\n console.log(value);\n setCostRouteLists(pv => ({\n ...pv,\n editOrderValue: value\n }));\n };\n\n //При изменении значения заказа\n const handleOrderFormChanged = e => {\n setEditOrderValue(e.target.value);\n };\n\n //При нажатии на изменение заказа\n const handleOrderChange = () => {\n //Изменяем значение\n //priorChange(costRouteLists.editPriorNRN, costRouteLists.editPriorValue);\n //Закрываем окно\n handleOrderEditClose();\n };\n\n //Генерация содержимого\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n style: STYLES.CONTAINER\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_8__[\"default\"], {\n variant: \"h6\"\n }, \"\\u041C\\u0430\\u0440\\u0448\\u0440\\u0443\\u0442\\u043D\\u044B\\u0435 \\u043B\\u0438\\u0441\\u0442\\u044B\"), costRouteLists.dataLoaded ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_9__[\"default\"], {\n sx: STYLES.TABLE\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_components_p8p_data_grid__WEBPACK_IMPORTED_MODULE_1__.P8PDataGrid, _extends({}, _config_wrapper__WEBPACK_IMPORTED_MODULE_2__.P8P_DATA_GRID_CONFIG_PROPS, {\n columnsDef: costRouteLists.columnsDef,\n rows: costRouteLists.rows,\n size: _components_p8p_data_grid__WEBPACK_IMPORTED_MODULE_1__.P8P_DATA_GRID_SIZE.LARGE,\n morePages: costRouteLists.morePages,\n reloading: costRouteLists.reload,\n expandable: true,\n rowExpandRender: rowExpandRender,\n onOrderChanged: handleOrderChanged,\n onPagesCountChanged: handlePagesCountChanged,\n dataCellRender: prms => dataCellRender({\n ...prms,\n handlePriorEditOpen,\n handleOrderEditOpen\n })\n })))) : null, costRouteLists.editPriorNRN ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_10__[\"default\"], {\n open: true,\n onClose: () => handlePriorEditClose(null),\n sx: STYLES.DIALOG_EDITOR\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_11__[\"default\"], null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_9__[\"default\"], null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_12__[\"default\"], {\n name: \"editPriorValue\",\n label: \"\\u041D\\u043E\\u0432\\u043E\\u0435 \\u0437\\u043D\\u0430\\u0447\\u0435\\u043D\\u0438\\u0435 \\u043F\\u0440\\u0438\\u043E\\u0440\\u0438\\u0442\\u0435\\u0442\\u0430\",\n variant: \"standard\",\n fullWidth: true,\n type: \"number\",\n value: costRouteLists.editPriorValue,\n onChange: handlePriorFormChanged\n }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_9__[\"default\"], null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_13__[\"default\"], {\n onClick: handlePriorChange,\n variant: \"contained\",\n sx: STYLES.DIALOG_BUTTONS\n }, \"\\u0418\\u0437\\u043C\\u0435\\u043D\\u0438\\u0442\\u044C\")))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_14__[\"default\"], null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_13__[\"default\"], {\n onClick: () => handlePriorEditClose(null)\n }, \"\\u0417\\u0430\\u043A\\u0440\\u044B\\u0442\\u044C\"))) : null, costRouteLists.editOrderNRN ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_10__[\"default\"], {\n open: true,\n onClose: () => handleOrderEditClose(null),\n sx: STYLES.DIALOG_EDITOR\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_11__[\"default\"], null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_9__[\"default\"], null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_12__[\"default\"], {\n name: \"editOrderValue\",\n label: \"\\u0417\\u0430\\u043A\\u0430\\u0437\",\n variant: \"standard\",\n fullWidth: true,\n value: costRouteLists.editOrderValue,\n onChange: handleOrderFormChanged\n }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_9__[\"default\"], null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_13__[\"default\"], {\n sx: STYLES.DIALOG_BUTTONS,\n variant: \"contained\",\n onClick: () => {\n pOnlineShowDictionary({\n unitCode: \"FaceAccounts\",\n inputParameters: [{\n name: \"in_NUMB\",\n value: costRouteLists.editOrderValue\n }],\n callBack: res => res.success === true ? setEditOrderValue(res.outParameters.out_NUMB) : null\n });\n }\n }, \"\\u041B\\u0438\\u0446\\u0435\\u0432\\u044B\\u0435 \\u0441\\u0447\\u0435\\u0442\\u0430\"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_9__[\"default\"], null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_13__[\"default\"], {\n sx: STYLES.DIALOG_BUTTONS,\n onClick: handleOrderChange,\n variant: \"contained\"\n }, \"\\u0418\\u0437\\u043C\\u0435\\u043D\\u0438\\u0442\\u044C\"))))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_14__[\"default\"], null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_13__[\"default\"], {\n onClick: () => handleOrderEditClose(null)\n }, \"\\u0417\\u0430\\u043A\\u0440\\u044B\\u0442\\u044C\"))) : null);\n};\n\n//Контроль свойств - Таблица маршрутных листов\nCostRouteListsDataGrid.propTypes = {\n task: (prop_types__WEBPACK_IMPORTED_MODULE_15___default().number).isRequired\n};\n\n//Диалог с таблицей сдачи продукции\nconst CostRouteListsDataGridDialog = ({\n task,\n onClose\n}) => {\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_10__[\"default\"], {\n open: true,\n onClose: onClose ? onClose : null,\n fullWidth: true,\n maxWidth: \"xl\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_11__[\"default\"], null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(CostRouteListsDataGrid, {\n task: task\n })), onClose ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_14__[\"default\"], null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_13__[\"default\"], {\n onClick: onClose\n }, \"\\u0417\\u0430\\u043A\\u0440\\u044B\\u0442\\u044C\")) : null);\n};\n\n//Контроль свойств - Диалог с таблицей маршрутных листов\nCostRouteListsDataGridDialog.propTypes = {\n task: (prop_types__WEBPACK_IMPORTED_MODULE_15___default().number).isRequired,\n onClose: (prop_types__WEBPACK_IMPORTED_MODULE_15___default().func)\n};\n\n//----------------\n//Интерфейс модуля\n//----------------\n\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/panels/mech_rec_dept_cost_prod_plans/fcroutlst.js?"); + +/***/ }), + +/***/ "./app/panels/mech_rec_dept_cost_prod_plans/fcroutlstord.js": +/*!******************************************************************!*\ + !*** ./app/panels/mech_rec_dept_cost_prod_plans/fcroutlstord.js ***! + \******************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ CostRouteListsOrdDataGrid: () => (/* binding */ CostRouteListsOrdDataGrid)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! prop-types */ \"./node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_6__);\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Typography/Typography.js\");\n/* harmony import */ var _components_p8p_data_grid__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../components/p8p_data_grid */ \"./app/components/p8p_data_grid.js\");\n/* harmony import */ var _config_wrapper__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../config_wrapper */ \"./app/config_wrapper.js\");\n/* harmony import */ var _context_backend__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../context/backend */ \"./app/context/backend.js\");\n/* harmony import */ var _core_utils__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../core/utils */ \"./app/core/utils.js\");\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n/*\r\n Парус 8 - Панели мониторинга - ПУП - Производственный план цеха\r\n Компонент панели: Таблица заказов маршрутного листа\r\n*/\n\n//---------------------\n//Подключение библиотек\n//---------------------\n\n //Классы React\n //Контроль свойств компонента\n //Интерфейсные элементы\n //Таблица данных\n //Подключение компонентов к настройкам приложения\n //Контекст взаимодействия с сервером\n //Вспомогательные функции\n\n//---------\n//Константы\n//---------\n\n//Стили\nconst STYLES = {\n CONTAINER: {\n margin: \"5px 0px\",\n textAlign: \"center\"\n }\n};\n\n//-----------\n//Тело модуля\n//-----------\n\n//Таблица заказов маршрутного листа\nconst CostRouteListsOrdDataGrid = ({\n mainRowRN\n}) => {\n //Собственное состояние - таблица данных\n const [costRouteListsOrd, setCostRouteListsOrd] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({\n dataLoaded: false,\n columnsDef: [],\n orders: null,\n rows: [],\n reload: true,\n pageNumber: 1,\n morePages: true\n });\n\n //Подключение к контексту взаимодействия с сервером\n const {\n executeStored,\n SERV_DATA_TYPE_CLOB\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_backend__WEBPACK_IMPORTED_MODULE_3__[\"BackEndСtx\"]);\n\n //Размер страницы данных\n const DATA_GRID_PAGE_SIZE = 10;\n\n //Загрузка данных таблицы с сервера\n const loadData = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async () => {\n if (costRouteListsOrd.reload) {\n const data = await executeStored({\n stored: \"PKG_P8PANELS_MECHREC.FCROUTLSTORD_DEPT_DG_GET\",\n args: {\n NFCROUTLST: mainRowRN,\n CORDERS: {\n VALUE: (0,_core_utils__WEBPACK_IMPORTED_MODULE_4__.object2Base64XML)(costRouteListsOrd.orders, {\n arrayNodeName: \"orders\"\n }),\n SDATA_TYPE: SERV_DATA_TYPE_CLOB\n },\n NPAGE_NUMBER: costRouteListsOrd.pageNumber,\n NPAGE_SIZE: DATA_GRID_PAGE_SIZE,\n NINCLUDE_DEF: costRouteListsOrd.dataLoaded ? 0 : 1\n },\n respArg: \"COUT\"\n });\n setCostRouteListsOrd(pv => ({\n ...pv,\n columnsDef: data.XCOLUMNS_DEF ? [...data.XCOLUMNS_DEF] : pv.columnsDef,\n rows: pv.pageNumber == 1 ? [...(data.XROWS || [])] : [...pv.rows, ...(data.XROWS || [])],\n dataLoaded: true,\n reload: false,\n morePages: (data.XROWS || []).length >= DATA_GRID_PAGE_SIZE\n }));\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [costRouteListsOrd.reload, costRouteListsOrd.filters, costRouteListsOrd.orders, costRouteListsOrd.dataLoaded, costRouteListsOrd.pageNumber, executeStored, SERV_DATA_TYPE_CLOB]);\n\n //При необходимости обновить данные таблицы\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n loadData();\n }, [costRouteListsOrd.reload, loadData]);\n\n //При изменении состояния сортировки\n const handleOrderChanged = ({\n orders\n }) => setCostRouteListsOrd(pv => ({\n ...pv,\n orders: [...orders],\n pageNumber: 1,\n reload: true\n }));\n\n //При изменении количества отображаемых страниц\n const handlePagesCountChanged = () => setCostRouteListsOrd(pv => ({\n ...pv,\n pageNumber: pv.pageNumber + 1,\n reload: true\n }));\n\n //Генерация содержимого\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n style: STYLES.CONTAINER\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_5__[\"default\"], {\n variant: \"subtitle2\"\n }, \"\\u0417\\u0430\\u043A\\u0430\\u0437\\u044B\"), costRouteListsOrd.dataLoaded ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_components_p8p_data_grid__WEBPACK_IMPORTED_MODULE_1__.P8PDataGrid, _extends({}, _config_wrapper__WEBPACK_IMPORTED_MODULE_2__.P8P_DATA_GRID_CONFIG_PROPS, {\n columnsDef: costRouteListsOrd.columnsDef,\n rows: costRouteListsOrd.rows,\n size: _components_p8p_data_grid__WEBPACK_IMPORTED_MODULE_1__.P8P_DATA_GRID_SIZE.SMALL,\n morePages: costRouteListsOrd.morePages,\n reloading: costRouteListsOrd.reload,\n onOrderChanged: handleOrderChanged,\n onPagesCountChanged: handlePagesCountChanged\n })) : null);\n};\n\n//Контроль свойств - Таблица заказов маршрутного листа\nCostRouteListsOrdDataGrid.propTypes = {\n mainRowRN: (prop_types__WEBPACK_IMPORTED_MODULE_6___default().number).isRequired\n};\n\n//----------------\n//Интерфейс модуля\n//----------------\n\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/panels/mech_rec_dept_cost_prod_plans/fcroutlstord.js?"); + +/***/ }), + +/***/ "./app/panels/mech_rec_dept_cost_prod_plans/hooks.js": +/*!***********************************************************!*\ + !*** ./app/panels/mech_rec_dept_cost_prod_plans/hooks.js ***! + \***********************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ useFilteredPlans: () => (/* binding */ useFilteredPlans)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/*\r\n Парус 8 - Панели мониторинга - ПУП - Производственный план цеха\r\n Кастомные хуки\r\n*/\n\n//---------------------\n//Подключение библиотек\n//---------------------\n\n //Классы React\n\n//-----------\n//Тело модуля\n//-----------\n\n//Клиентский отбор каталогов по поисковой фразе и наличию планов\nconst useFilteredPlans = (plans, filter) => {\n const filteredPlans = react__WEBPACK_IMPORTED_MODULE_0___default().useMemo(() => {\n return plans.filter(catalog => catalog.SDOC_INFO.toString().toLowerCase().includes(filter.planName));\n }, [plans, filter]);\n return filteredPlans;\n};\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/panels/mech_rec_dept_cost_prod_plans/hooks.js?"); + +/***/ }), + +/***/ "./app/panels/mech_rec_dept_cost_prod_plans/incomefromdeps.js": +/*!********************************************************************!*\ + !*** ./app/panels/mech_rec_dept_cost_prod_plans/incomefromdeps.js ***! + \********************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ IncomFromDepsDataGridDialog: () => (/* binding */ IncomFromDepsDataGridDialog)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! prop-types */ \"./node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_7___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_7__);\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Typography/Typography.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Box/Box.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Dialog/Dialog.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/DialogContent/DialogContent.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/DialogActions/DialogActions.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Button/Button.js\");\n/* harmony import */ var _components_p8p_data_grid__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../components/p8p_data_grid */ \"./app/components/p8p_data_grid.js\");\n/* harmony import */ var _config_wrapper__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../config_wrapper */ \"./app/config_wrapper.js\");\n/* harmony import */ var _context_backend__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../context/backend */ \"./app/context/backend.js\");\n/* harmony import */ var _core_utils__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../core/utils */ \"./app/core/utils.js\");\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n/*\r\n Парус 8 - Панели мониторинга - ПУП - Производственный план цеха\r\n Компонент панели: Таблица сдачи продукции\r\n*/\n\n//---------------------\n//Подключение библиотек\n//---------------------\n\n //Классы React\n //Контроль свойств компонента\n //Интерфейсные элементы\n //Таблица данных\n //Подключение компонентов к настройкам приложения\n //Контекст взаимодействия с сервером\n //Вспомогательные функции\n\n//---------\n//Константы\n//---------\n\n//Стили\nconst STYLES = {\n CONTAINER: {\n textAlign: \"center\"\n },\n TABLE: {\n paddingTop: \"15px\"\n }\n};\n\n//-----------\n//Тело модуля\n//-----------\n\n//Таблица сдачи продукции\nconst IncomFromDepsDataGrid = ({\n task\n}) => {\n //Собственное состояние - таблица данных\n const [incomFromDeps, setIncomFromDeps] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({\n dataLoaded: false,\n columnsDef: [],\n orders: null,\n rows: [],\n reload: true,\n pageNumber: 1,\n morePages: true\n });\n\n //Размер страницы данных\n const DATA_GRID_PAGE_SIZE = 10;\n\n //Подключение к контексту взаимодействия с сервером\n const {\n executeStored,\n SERV_DATA_TYPE_CLOB\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_backend__WEBPACK_IMPORTED_MODULE_3__[\"BackEndСtx\"]);\n\n //Загрузка данных таблицы с сервера\n const loadData = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async () => {\n if (incomFromDeps.reload) {\n const data = await executeStored({\n stored: \"PKG_P8PANELS_MECHREC.INCOMEFROMDEPS_DEPT_DG_GET\",\n args: {\n NFCPRODPLANSP: task,\n CORDERS: {\n VALUE: (0,_core_utils__WEBPACK_IMPORTED_MODULE_4__.object2Base64XML)(incomFromDeps.orders, {\n arrayNodeName: \"orders\"\n }),\n SDATA_TYPE: SERV_DATA_TYPE_CLOB\n },\n NPAGE_NUMBER: incomFromDeps.pageNumber,\n NPAGE_SIZE: DATA_GRID_PAGE_SIZE,\n NINCLUDE_DEF: incomFromDeps.dataLoaded ? 0 : 1\n },\n attributeValueProcessor: (name, val) => [\"DDUE_DATE\"].includes(name) ? (0,_core_utils__WEBPACK_IMPORTED_MODULE_4__.formatDateRF)(val) : val,\n respArg: \"COUT\"\n });\n setIncomFromDeps(pv => ({\n ...pv,\n columnsDef: data.XCOLUMNS_DEF ? [...data.XCOLUMNS_DEF] : pv.columnsDef,\n rows: pv.pageNumber == 1 ? [...(data.XROWS || [])] : [...pv.rows, ...(data.XROWS || [])],\n dataLoaded: true,\n reload: false,\n morePages: (data.XROWS || []).length >= DATA_GRID_PAGE_SIZE\n }));\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [incomFromDeps.reload, incomFromDeps.orders, incomFromDeps.dataLoaded, incomFromDeps.pageNumber, executeStored, SERV_DATA_TYPE_CLOB]);\n\n //При необходимости обновить данные таблицы\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n loadData();\n }, [incomFromDeps.reload, loadData]);\n\n //При изменении состояния сортировки\n const handleOrderChanged = ({\n orders\n }) => setIncomFromDeps(pv => ({\n ...pv,\n orders: [...orders],\n pageNumber: 1,\n reload: true\n }));\n\n //При изменении количества отображаемых страниц\n const handlePagesCountChanged = () => setIncomFromDeps(pv => ({\n ...pv,\n pageNumber: pv.pageNumber + 1,\n reload: true\n }));\n\n //Генерация содержимого\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n style: STYLES.CONTAINER\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_5__[\"default\"], {\n variant: \"h6\"\n }, \"\\u0421\\u0434\\u0430\\u0447\\u0430 \\u043F\\u0440\\u043E\\u0434\\u0443\\u043A\\u0446\\u0438\\u0438\"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n sx: STYLES.TABLE\n }, incomFromDeps.dataLoaded ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_components_p8p_data_grid__WEBPACK_IMPORTED_MODULE_1__.P8PDataGrid, _extends({}, _config_wrapper__WEBPACK_IMPORTED_MODULE_2__.P8P_DATA_GRID_CONFIG_PROPS, {\n columnsDef: incomFromDeps.columnsDef,\n rows: incomFromDeps.rows,\n size: _components_p8p_data_grid__WEBPACK_IMPORTED_MODULE_1__.P8P_DATA_GRID_SIZE.LARGE,\n morePages: incomFromDeps.morePages,\n reloading: incomFromDeps.reload,\n onOrderChanged: handleOrderChanged,\n onPagesCountChanged: handlePagesCountChanged\n })) : null));\n};\n\n//Контроль свойств - Таблица сдачи продукции\nIncomFromDepsDataGrid.propTypes = {\n task: (prop_types__WEBPACK_IMPORTED_MODULE_7___default().number).isRequired\n};\n\n//Диалог с таблицей сдачи продукции\nconst IncomFromDepsDataGridDialog = ({\n task,\n onClose\n}) => {\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_8__[\"default\"], {\n open: true,\n onClose: onClose ? onClose : null,\n fullWidth: true,\n maxWidth: \"xl\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_9__[\"default\"], null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(IncomFromDepsDataGrid, {\n task: task\n })), onClose ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_10__[\"default\"], null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_11__[\"default\"], {\n onClick: onClose\n }, \"\\u0417\\u0430\\u043A\\u0440\\u044B\\u0442\\u044C\")) : null);\n};\n\n//Контроль свойств - Диалог с таблицей сдачи продукции\nIncomFromDepsDataGridDialog.propTypes = {\n task: (prop_types__WEBPACK_IMPORTED_MODULE_7___default().number).isRequired,\n onClose: (prop_types__WEBPACK_IMPORTED_MODULE_7___default().func)\n};\n\n//----------------\n//Интерфейс модуля\n//----------------\n\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/panels/mech_rec_dept_cost_prod_plans/incomefromdeps.js?"); + +/***/ }), + +/***/ "./app/panels/mech_rec_dept_cost_prod_plans/index.js": +/*!***********************************************************!*\ + !*** ./app/panels/mech_rec_dept_cost_prod_plans/index.js ***! + \***********************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ RootClass: () => (/* binding */ RootClass)\n/* harmony export */ });\n/* harmony import */ var _mech_rec_dept_cost_prod_plans__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./mech_rec_dept_cost_prod_plans */ \"./app/panels/mech_rec_dept_cost_prod_plans/mech_rec_dept_cost_prod_plans.js\");\n/*\r\n Парус 8 - Панели мониторинга - ПУДП - Производственный план цеха\r\n Панель мониторинга: Точка входа\r\n*/\n\n//---------------------\n//Подключение библиотек\n//---------------------\n\n //Корневая панель производственного плана цеха\n\n//----------------\n//Интерфейс модуля\n//----------------\n\nconst RootClass = _mech_rec_dept_cost_prod_plans__WEBPACK_IMPORTED_MODULE_0__.MechRecDeptCostProdPlans;\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/panels/mech_rec_dept_cost_prod_plans/index.js?"); + +/***/ }), + +/***/ "./app/panels/mech_rec_dept_cost_prod_plans/mech_rec_dept_cost_prod_plans.js": +/*!***********************************************************************************!*\ + !*** ./app/panels/mech_rec_dept_cost_prod_plans/mech_rec_dept_cost_prod_plans.js ***! + \***********************************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ MechRecDeptCostProdPlans: () => (/* binding */ MechRecDeptCostProdPlans),\n/* harmony export */ groupCellRender: () => (/* binding */ groupCellRender)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! prop-types */ \"./node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_16___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_16__);\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Box/Box.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Link/Link.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/TextField/TextField.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/List/List.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/ListItemButton/ListItemButton.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/ListItemText/ListItemText.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Typography/Typography.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Fab/Fab.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Drawer/Drawer.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Grid/Grid.js\");\n/* harmony import */ var _context_backend__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../context/backend */ \"./app/context/backend.js\");\n/* harmony import */ var _hooks__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./hooks */ \"./app/panels/mech_rec_dept_cost_prod_plans/hooks.js\");\n/* harmony import */ var _core_utils__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../core/utils */ \"./app/core/utils.js\");\n/* harmony import */ var _components_p8p_data_grid__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../components/p8p_data_grid */ \"./app/components/p8p_data_grid.js\");\n/* harmony import */ var _config_wrapper__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../config_wrapper */ \"./app/config_wrapper.js\");\n/* harmony import */ var _context_messaging__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../../context/messaging */ \"./app/context/messaging.js\");\n/* harmony import */ var _incomefromdeps__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./incomefromdeps */ \"./app/panels/mech_rec_dept_cost_prod_plans/incomefromdeps.js\");\n/* harmony import */ var _fcroutlst__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./fcroutlst */ \"./app/panels/mech_rec_dept_cost_prod_plans/fcroutlst.js\");\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n/*\r\n Парус 8 - Панели мониторинга - ПУП - Производственный план цеха\r\n Панель мониторинга: Корневая панель производственного плана цеха\r\n*/\n\n//---------------------\n//Подключение библиотек\n//---------------------\n\n //Классы React\n //Контроль свойств компонента\n //Интерфейсные элементы\n //Контекст взаимодействия с сервером\n //Вспомогательные хуки\n //Вспомогательные функции\n //Таблица данных\n //Подключение компонентов к настройкам приложения\n //Контекст сообщений\n //Диалог сдачи продукции\n //Диалог маршрутных листов\n\n//---------\n//Константы\n//---------\n\n//Стили\nconst STYLES = {\n PLANS_FINDER: {\n marginTop: \"10px\",\n marginLeft: \"10px\",\n width: \"93%\"\n },\n PLANS_LIST_ITEM_PRIMARY: {\n wordWrap: \"break-word\"\n },\n PLANS_BUTTON: {\n position: \"absolute\",\n marginTop: \"10px\",\n marginLeft: \"10px\"\n },\n PLANS_DRAWER: {\n width: \"350px\",\n display: \"inline-block\",\n flexShrink: 0,\n [`& .MuiDrawer-paper`]: {\n width: \"350px\",\n display: \"inline-block\",\n boxSizing: \"border-box\"\n }\n },\n CONTAINER: {\n paddingTop: \"40px\",\n margin: \"5px 0px\",\n textAlign: \"center\"\n },\n DATA_GRID_CONTAINER: {\n minWidth: \"95vw\",\n maxWidth: \"95vw\",\n minHeight: \"80vh\",\n maxHeight: \"80vh\"\n },\n DATA_GRID_GROUP_CELL: {\n padding: \"2px\"\n },\n DATA_GRID_CELL: {\n padding: \"8px\",\n maxWidth: \"300px\",\n textOverflow: \"ellipsis\",\n overflow: \"hidden\",\n whiteSpace: \"pre\"\n },\n DATA_GRID_CELL_STATUS: (currentStyle, row) => ({\n backgroundColor: getRowBackgroudColor(row),\n ...currentStyle\n }),\n DATA_GRID_CELL_PLAN_FACT: currentStyle => ({\n ...currentStyle,\n backgroundColor: \"lightgrey\"\n }),\n DATA_GRID_CELL_MATRES_CODE: (currentStyle, row) => ({\n backgroundColor: getRowBackgroudColor(row),\n ...currentStyle\n }),\n PLAN_FACT_VALUE: {\n textAlign: \"center\",\n display: \"flex\",\n justifyContent: \"center\"\n },\n PLAN_FACT_DELIMITER: {\n padding: \"0px 5px\"\n },\n FACT_VALUE: {\n color: \"blue\"\n }\n};\n\n//------------------------------------\n//Вспомогательные функции и компоненты\n//------------------------------------\n\n//Генерация представления ячейки заголовка группы\nconst groupCellRender = ({\n group\n}) => ({\n cellStyle: STYLES.DATA_GRID_GROUP_CELL,\n data: group.caption\n});\n\n//Вычисление цвета заливки для строки\nconst getRowBackgroudColor = row => {\n //Факт === План\n if (row[\"NMAIN_QUANT\"] === row[\"NREL_FACT\"]) return \"lightgreen\";\n //План <= (Факт + Запущено)\n if (row[\"NMAIN_QUANT\"] <= row[\"NREL_FACT\"] + row[\"NFCROUTLST_QUANT\"]) return \"lightblue\";\n //Сумма \"Количество план\" = 0 или < \"План\"\n if (row[\"NSUM_PLAN\"] === 0 || row[\"NSUM_PLAN\"] !== 0 && row[\"NSUM_PLAN\"] < row[\"NMAIN_QUANT\"]) {\n //\"Факт\" >= \"План\"\n if (row[\"NREL_FACT\"] >= row[\"NMAIN_QUANT\"]) return \"#F0E68C\";\n } else {\n //Сумма \"Количество факт\" >= сумма \"Количество план\"\n if (row[\"NSUM_FACT\"] >= row[\"NSUM_PLAN\"]) return \"#F0E68C\";\n }\n return \"lightcoral\";\n};\n\n//Генерация заливки строки исходя от значений\nconst dataCellRender = ({\n row,\n columnDef,\n handleProdOrderClick,\n handleMatresCodeClick\n}) => {\n //Описываем общие свойства\n let cellProps = {\n title: row[columnDef.name]\n };\n //Описываем общий стиль\n let cellStyle = STYLES.DATA_GRID_CELL;\n //Для колонки \"Статус\"\n if (columnDef.name === \"SSTATUS\") return {\n cellProps,\n cellStyle: STYLES.DATA_GRID_CELL_STATUS(cellStyle, row),\n data: row[columnDef]\n };\n //Для колонки даты\n if (columnDef.name.indexOf(\"PLAN_FACT\") >= 0) {\n //Получаем текущий день\n let curDay = new Date().getDate().toString().padStart(2, \"0\");\n //Формируем regex для проверки\n let regex = new RegExp(`N_${curDay}.*`, \"g\");\n //Если это значение текущего дня\n if (columnDef.name.match(regex)) cellStyle = STYLES.DATA_GRID_CELL_PLAN_FACT(cellStyle);\n //Если в колонке есть значение\n if (row[columnDef.name]) {\n //Разбиваем его на план/факт\n let values = row[columnDef.name].split(\"/\");\n //Разбиваем значения на блоки\n return {\n cellProps,\n cellStyle,\n data: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_9__[\"default\"], {\n sx: STYLES.PLAN_FACT_VALUE\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_9__[\"default\"], null, values[0]), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_9__[\"default\"], {\n sx: STYLES.PLAN_FACT_DELIMITER\n }, \"/\"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_9__[\"default\"], {\n sx: STYLES.FACT_VALUE\n }, values[1]))\n };\n } else return {\n cellProps,\n cellStyle,\n data: row[columnDef]\n };\n }\n //Для колонки \"Заказ\"\n if (columnDef.name === \"SPROD_ORDER\") {\n return {\n cellProps,\n cellStyle,\n data: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_10__[\"default\"], {\n component: \"button\",\n variant: \"body2\",\n align: \"left\",\n underline: \"hover\",\n onClick: () => handleProdOrderClick(row[\"NRN\"])\n }, row[columnDef.name])\n };\n }\n //Для колонки \"Обозначение\"\n if (columnDef.name === \"SMATRES_CODE\") return {\n cellProps,\n cellStyle: STYLES.DATA_GRID_CELL_MATRES_CODE(cellStyle, row),\n data: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_10__[\"default\"], {\n component: \"button\",\n variant: \"body2\",\n align: \"left\",\n underline: \"hover\",\n onClick: () => handleMatresCodeClick(row[\"NRN\"])\n }, row[columnDef.name])\n };\n //Для всех остальных\n return {\n cellProps,\n cellStyle,\n data: row[columnDef]\n };\n};\n\n//Список каталогов планов\nconst PlanList = ({\n plans = [],\n selectedPlan,\n filter,\n setFilter,\n onClick\n} = {}) => {\n //Генерация содержимого\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_11__[\"default\"], {\n sx: STYLES.PLANS_FINDER,\n name: \"planFilter\",\n label: \"\\u041F\\u043B\\u0430\\u043D\",\n value: filter.planName,\n variant: \"standard\",\n fullWidth: true,\n onChange: event => {\n setFilter(pv => ({\n ...pv,\n planName: event.target.value\n }));\n }\n }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_12__[\"default\"], null, plans.map(p => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_13__[\"default\"], {\n key: p.NRN,\n selected: p.NRN === selectedPlan.NRN,\n onClick: () => onClick ? onClick(p) : null\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_14__[\"default\"], {\n primary: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_15__[\"default\"], {\n sx: STYLES.PLANS_LIST_ITEM_PRIMARY\n }, p.SDOC_INFO)\n })))));\n};\n\n//Контроль свойств - Список каталогов планов\nPlanList.propTypes = {\n plans: (prop_types__WEBPACK_IMPORTED_MODULE_16___default().array),\n selectedPlan: (prop_types__WEBPACK_IMPORTED_MODULE_16___default().object),\n onClick: (prop_types__WEBPACK_IMPORTED_MODULE_16___default().func),\n filter: (prop_types__WEBPACK_IMPORTED_MODULE_16___default().object),\n setFilter: (prop_types__WEBPACK_IMPORTED_MODULE_16___default().func)\n};\n\n//-----------\n//Тело модуля\n//-----------\n\n//Корневая панель производственного плана цеха\nconst MechRecDeptCostProdPlans = () => {\n //Собственное состояние - таблица данных\n const [state, setState] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({\n init: false,\n showPlanList: false,\n showIncomeFromDeps: null,\n showFcroutelst: null,\n planList: [],\n planListLoaded: false,\n selectedPlan: {},\n dataLoaded: false,\n columnsDef: [],\n orders: null,\n rows: [],\n reload: true,\n pageNumber: 1,\n morePages: true,\n fixedHeader: false,\n fixedColumns: 0\n });\n\n //Состояние для фильтра каталогов\n const [filter, setFilter] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({\n planName: \"\"\n });\n\n //Массив отфильтрованных каталогов\n const filteredPlanCtgls = (0,_hooks__WEBPACK_IMPORTED_MODULE_2__.useFilteredPlans)(state.planList, filter);\n\n //Размер страницы данных\n const DATA_GRID_PAGE_SIZE = 10;\n\n //Подключение к контексту взаимодействия с сервером\n const {\n executeStored,\n SERV_DATA_TYPE_CLOB\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_backend__WEBPACK_IMPORTED_MODULE_1__[\"BackEndСtx\"]);\n\n //Подключение к контексту сообщений\n const {\n InlineMsgInfo\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_messaging__WEBPACK_IMPORTED_MODULE_6__[\"MessagingСtx\"]);\n\n // Инициализация каталогов планов\n const initPlans = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async () => {\n if (!state.init) {\n const data = await executeStored({\n stored: \"PKG_P8PANELS_MECHREC.FCPRODPLAN_DEPT_INIT\",\n args: {},\n respArg: \"COUT\",\n isArray: name => name === \"XFCPRODPLANS\"\n });\n setState(pv => ({\n ...pv,\n init: true,\n planList: [...(data?.XFCPRODPLANS || [])],\n planListLoaded: true\n }));\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [state.init, executeStored]);\n\n //Загрузка данных таблицы с сервера\n const loadData = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async NRN => {\n if (state.reload && NRN) {\n const data = await executeStored({\n stored: \"PKG_P8PANELS_MECHREC.FCPRODPLANSP_DEPT_DG_GET\",\n args: {\n NFCPRODPLAN: NRN,\n CORDERS: {\n VALUE: (0,_core_utils__WEBPACK_IMPORTED_MODULE_3__.object2Base64XML)(state.orders, {\n arrayNodeName: \"orders\"\n }),\n SDATA_TYPE: SERV_DATA_TYPE_CLOB\n },\n NPAGE_NUMBER: state.pageNumber,\n NPAGE_SIZE: DATA_GRID_PAGE_SIZE,\n NINCLUDE_DEF: state.dataLoaded ? 0 : 1\n },\n respArg: \"COUT\",\n attributeValueProcessor: (name, val) => name === \"caption\" ? undefined : val\n });\n setState(pv => ({\n ...pv,\n fixedHeader: data.XDATA_GRID.fixedHeader,\n fixedColumns: data.XDATA_GRID.fixedColumns,\n columnsDef: data.XCOLUMNS_DEF ? [...data.XCOLUMNS_DEF] : pv.columnsDef,\n rows: pv.pageNumber == 1 ? [...(data.XROWS || [])] : [...pv.rows, ...(data.XROWS || [])],\n dataLoaded: true,\n reload: false,\n morePages: (data.XROWS || []).length >= DATA_GRID_PAGE_SIZE\n }));\n }\n },\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [state.reload, state.orders, state.dataLoaded, state.pageNumber, executeStored, SERV_DATA_TYPE_CLOB]);\n\n //При необходимости обновить данные таблицы\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n if (state.selectedPlan.NRN) {\n loadData(state.selectedPlan.NRN);\n } else {\n setState(pv => ({\n ...pv,\n dataLoaded: false,\n columnsDef: [],\n orders: null,\n rows: [],\n reload: true,\n pageNumber: 1,\n morePages: true\n }));\n }\n }, [state.selectedPlan, state.reload, loadData]);\n\n //При подключении компонента к странице\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n initPlans();\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n //Выбор плана\n const selectPlan = plan => {\n setState(pv => ({\n ...pv,\n showIncomeFromDeps: null,\n showFcroutelst: null,\n selectedPlan: plan,\n showPlanList: false,\n dataLoaded: false,\n columnsDef: [],\n orders: null,\n rows: [],\n reload: true,\n pageNumber: 1,\n morePages: true\n }));\n };\n\n //Сброс выбора плана\n const unselectPlan = () => setState(pv => ({\n ...pv,\n showIncomeFromDeps: null,\n showFcroutelst: null,\n selectedPlan: {},\n showPlanList: false,\n dataLoaded: false,\n columnsDef: [],\n orders: null,\n rows: [],\n reload: true,\n pageNumber: 1,\n morePages: true\n }));\n\n //Обработка нажатия на элемент в списке планов\n const handlePlanClick = plan => {\n if (state.selectedPlan.NRN != plan.NRN) selectPlan(plan);else unselectPlan();\n };\n\n //При изменении состояния сортировки\n const handleOrderChanged = ({\n orders\n }) => setState(pv => ({\n ...pv,\n orders: [...orders],\n pageNumber: 1,\n reload: true\n }));\n\n //При изменении количества отображаемых страниц\n const handlePagesCountChanged = () => setState(pv => ({\n ...pv,\n pageNumber: pv.pageNumber + 1,\n reload: true\n }));\n\n //При нажатии на \"Заказ\"\n const handleProdOrderClick = planSp => {\n setState(pv => ({\n ...pv,\n showIncomeFromDeps: planSp\n }));\n };\n\n //При нажатии на \"Обозначение\"\n const handleMatresCodeClick = planSp => {\n setState(pv => ({\n ...pv,\n showFcroutelst: planSp\n }));\n };\n\n //Генерация содержимого\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_17__[\"default\"], {\n variant: \"extended\",\n sx: STYLES.PLANS_BUTTON,\n onClick: () => setState(pv => ({\n ...pv,\n showPlanList: !pv.showPlanList\n }))\n }, \"\\u041F\\u043B\\u0430\\u043D\\u044B\"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_18__[\"default\"], {\n anchor: \"left\",\n open: state.showPlanList,\n onClose: () => setState(pv => ({\n ...pv,\n showPlanList: false\n })),\n sx: STYLES.PLANS_DRAWER\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(PlanList, {\n plans: filteredPlanCtgls,\n selectedPlan: state.selectedPlan,\n filter: filter,\n setFilter: setFilter,\n onClick: handlePlanClick\n })), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n style: STYLES.CONTAINER\n }, state.dataLoaded ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_15__[\"default\"], {\n variant: \"h6\"\n }, `Производственный план цеха \"${state.selectedPlan.SSUBDIV}\" на ${state.selectedPlan.SPERIOD}`) : null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_19__[\"default\"], {\n container: true,\n spacing: 1\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_19__[\"default\"], {\n item: true,\n xs: 12\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_9__[\"default\"], {\n pt: 1,\n display: \"flex\",\n justifyContent: \"center\",\n alignItems: \"center\"\n }, state.dataLoaded ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_components_p8p_data_grid__WEBPACK_IMPORTED_MODULE_4__.P8PDataGrid, _extends({}, _config_wrapper__WEBPACK_IMPORTED_MODULE_5__.P8P_DATA_GRID_CONFIG_PROPS, {\n containerComponentProps: {\n elevation: 6,\n style: STYLES.DATA_GRID_CONTAINER\n },\n fixedHeader: state.fixedHeader,\n fixedColumns: state.fixedColumns,\n columnsDef: state.columnsDef,\n rows: state.rows,\n size: _components_p8p_data_grid__WEBPACK_IMPORTED_MODULE_4__.P8P_DATA_GRID_SIZE.MEDIUM,\n morePages: state.morePages,\n reloading: state.reload,\n onOrderChanged: handleOrderChanged,\n onPagesCountChanged: handlePagesCountChanged,\n dataCellRender: prms => dataCellRender({\n ...prms,\n handleProdOrderClick,\n handleMatresCodeClick\n }),\n groupCellRender: groupCellRender\n })) : !state.selectedPlan.NRN ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(InlineMsgInfo, {\n okBtn: false,\n text: \"Укажите план для отображения его спецификаций\"\n }) : null))), state.showIncomeFromDeps ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_incomefromdeps__WEBPACK_IMPORTED_MODULE_7__.IncomFromDepsDataGridDialog, {\n task: state.showIncomeFromDeps,\n onClose: () => handleProdOrderClick(null)\n }) : null, state.showFcroutelst ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_fcroutlst__WEBPACK_IMPORTED_MODULE_8__.CostRouteListsDataGridDialog, {\n task: state.showFcroutelst,\n onClose: () => handleMatresCodeClick(null)\n }) : null));\n};\n\n//----------------\n//Интерфейс модуля\n//----------------\n\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/panels/mech_rec_dept_cost_prod_plans/mech_rec_dept_cost_prod_plans.js?"); + +/***/ }), + /***/ "./app/panels/prj_fin/index.js": /*!*************************************!*\ !*** ./app/panels/prj_fin/index.js ***! @@ -3920,7 +4393,18 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ Samples: () => (/* binding */ Samples)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Fab/Fab.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Icon/Icon.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Button/Button.js\");\n/* harmony import */ var _app_text__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../app.text */ \"./app.text.js\");\n/* harmony import */ var _p8online__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./p8online */ \"./app/panels/samples/p8online.js\");\n/* harmony import */ var _mui__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./mui */ \"./app/panels/samples/mui.js\");\n/* harmony import */ var _messages__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./messages */ \"./app/panels/samples/messages.js\");\n/* harmony import */ var _loader__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./loader */ \"./app/panels/samples/loader.js\");\n/* harmony import */ var _data_grid__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./data_grid */ \"./app/panels/samples/data_grid.js\");\n/* harmony import */ var _chart__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./chart */ \"./app/panels/samples/chart.js\");\n/* harmony import */ var _gantt__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./gantt */ \"./app/panels/samples/gantt.js\");\n/*\r\n Парус 8 - Панели мониторинга - Примеры для разработчиков\r\n Панель мониторинга: Примеры для разработчиков\r\n*/\n\n//---------------------\n//Подключение библиотек\n//---------------------\n\n //Классы React\n //Интерфейсные элементы\n //Текстовые ресурсы и константы\n //Пример: API для взаимодействия с \"ПАРУС 8 Онлайн\"\n //Пример: Компоненты MUI\n //Пример: Сообщения\n //Пример: Индикатор процесса\n //Пример: Таблица данных \"P8PDataGrid\"\n //Пример: Графики \"P8PChart\"\n //Пример: Диаграмма Ганта \"P8PGantt\"\n\n//---------\n//Константы\n//---------\n\n//Режимы\nconst MODES = {\n P8ONLINE: {\n name: \"P8ONLINE\",\n caption: 'API для взаимодействия с \"ПАРУС 8 Онлайн\"',\n component: _p8online__WEBPACK_IMPORTED_MODULE_2__.P8Online\n },\n MUI: {\n name: \"MUI\",\n caption: \"Компоненты MUI\",\n component: _mui__WEBPACK_IMPORTED_MODULE_3__.Mui\n },\n MESSAGES: {\n name: \"MESSAGES\",\n caption: \"Сообщения\",\n component: _messages__WEBPACK_IMPORTED_MODULE_4__.Messages\n },\n LOADER: {\n name: \"LOADER\",\n caption: \"Индикатор процесса\",\n component: _loader__WEBPACK_IMPORTED_MODULE_5__.Loader\n },\n DATAGRID: {\n name: \"DATAGRID\",\n caption: 'Таблица данных \"P8PDataGrid\"',\n component: _data_grid__WEBPACK_IMPORTED_MODULE_6__.DataGrid\n },\n CHART: {\n name: \"CHART\",\n caption: 'Графики \"P8PChart\"',\n component: _chart__WEBPACK_IMPORTED_MODULE_7__.Chart\n },\n GANTT: {\n name: \"GANTT\",\n caption: 'Диаграмма Ганта \"P8PGantt\"',\n component: _gantt__WEBPACK_IMPORTED_MODULE_8__.Gantt\n }\n};\n\n//Стили\nconst STYLES = {\n ROOT: {\n height: \"calc(100vh - 64px)\"\n },\n CONTAINER: {\n textAlign: \"center\",\n paddingTop: \"20px\"\n },\n BACK_BUTTON: {\n position: \"absolute\",\n left: \"20px\",\n marginTop: \"20px\"\n }\n};\n\n//-----------\n//Тело модуля\n//-----------\n\n//Примеры\nconst Samples = () => {\n //Собственное состояние\n const [mode, setMode] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(\"\");\n\n //Генерация содержимого\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n style: STYLES.ROOT\n }, mode ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_9__[\"default\"], {\n variant: \"extended\",\n sx: STYLES.BACK_BUTTON,\n onClick: () => setMode(\"\")\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_10__[\"default\"], null, \"arrow_back_ios\"), _app_text__WEBPACK_IMPORTED_MODULE_1__.BUTTONS.NAVIGATE_BACK), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(MODES[mode]?.component || (() => {}), {\n title: MODES[mode]?.caption\n })) : /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n style: STYLES.CONTAINER\n }, Object.entries(MODES).map(m => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n key: m[0]\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_11__[\"default\"], {\n onClick: () => setMode(m[1].name)\n }, m[1].caption)))));\n};\n\n//----------------\n//Интерфейс модуля\n//----------------\n\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/panels/samples/samples.js?"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ Samples: () => (/* binding */ Samples)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Fab/Fab.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Icon/Icon.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Button/Button.js\");\n/* harmony import */ var _app_text__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../app.text */ \"./app.text.js\");\n/* harmony import */ var _p8online__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./p8online */ \"./app/panels/samples/p8online.js\");\n/* harmony import */ var _mui__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./mui */ \"./app/panels/samples/mui.js\");\n/* harmony import */ var _messages__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./messages */ \"./app/panels/samples/messages.js\");\n/* harmony import */ var _loader__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./loader */ \"./app/panels/samples/loader.js\");\n/* harmony import */ var _data_grid__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./data_grid */ \"./app/panels/samples/data_grid.js\");\n/* harmony import */ var _chart__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./chart */ \"./app/panels/samples/chart.js\");\n/* harmony import */ var _gantt__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./gantt */ \"./app/panels/samples/gantt.js\");\n/* harmony import */ var _svg__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./svg */ \"./app/panels/samples/svg.js\");\n/*\r\n Парус 8 - Панели мониторинга - Примеры для разработчиков\r\n Панель мониторинга: Примеры для разработчиков\r\n*/\n\n//---------------------\n//Подключение библиотек\n//---------------------\n\n //Классы React\n //Интерфейсные элементы\n //Текстовые ресурсы и константы\n //Пример: API для взаимодействия с \"ПАРУС 8 Онлайн\"\n //Пример: Компоненты MUI\n //Пример: Сообщения\n //Пример: Индикатор процесса\n //Пример: Таблица данных \"P8PDataGrid\"\n //Пример: Графики \"P8PChart\"\n //Пример: Диаграмма Ганта \"P8PGantt\"\n //Пример: Интерактивные изображения \"P8PSVG\"\n\n//---------\n//Константы\n//---------\n\n//Режимы\nconst MODES = {\n P8ONLINE: {\n name: \"P8ONLINE\",\n caption: 'API для взаимодействия с \"ПАРУС 8 Онлайн\"',\n component: _p8online__WEBPACK_IMPORTED_MODULE_2__.P8Online\n },\n MUI: {\n name: \"MUI\",\n caption: \"Компоненты MUI\",\n component: _mui__WEBPACK_IMPORTED_MODULE_3__.Mui\n },\n MESSAGES: {\n name: \"MESSAGES\",\n caption: \"Сообщения\",\n component: _messages__WEBPACK_IMPORTED_MODULE_4__.Messages\n },\n LOADER: {\n name: \"LOADER\",\n caption: \"Индикатор процесса\",\n component: _loader__WEBPACK_IMPORTED_MODULE_5__.Loader\n },\n DATAGRID: {\n name: \"DATAGRID\",\n caption: 'Таблица данных \"P8PDataGrid\"',\n component: _data_grid__WEBPACK_IMPORTED_MODULE_6__.DataGrid\n },\n CHART: {\n name: \"CHART\",\n caption: 'Графики \"P8PChart\"',\n component: _chart__WEBPACK_IMPORTED_MODULE_7__.Chart\n },\n GANTT: {\n name: \"GANTT\",\n caption: 'Диаграмма Ганта \"P8PGantt\"',\n component: _gantt__WEBPACK_IMPORTED_MODULE_8__.Gantt\n },\n SVG: {\n name: \"SVG\",\n caption: 'Интерактивные изображения \"P8PSVG\"',\n component: _svg__WEBPACK_IMPORTED_MODULE_9__.Svg\n }\n};\n\n//Стили\nconst STYLES = {\n ROOT: {\n height: \"calc(100vh - 64px)\"\n },\n CONTAINER: {\n textAlign: \"center\",\n paddingTop: \"20px\"\n },\n BACK_BUTTON: {\n position: \"absolute\",\n left: \"20px\",\n marginTop: \"20px\"\n }\n};\n\n//-----------\n//Тело модуля\n//-----------\n\n//Примеры\nconst Samples = () => {\n //Собственное состояние\n const [mode, setMode] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(\"\");\n\n //Генерация содержимого\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n style: STYLES.ROOT\n }, mode ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_10__[\"default\"], {\n variant: \"extended\",\n sx: STYLES.BACK_BUTTON,\n onClick: () => setMode(\"\")\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_11__[\"default\"], null, \"arrow_back_ios\"), _app_text__WEBPACK_IMPORTED_MODULE_1__.BUTTONS.NAVIGATE_BACK), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(MODES[mode]?.component || (() => {}), {\n title: MODES[mode]?.caption\n })) : /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n style: STYLES.CONTAINER\n }, Object.entries(MODES).map(m => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n key: m[0]\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_12__[\"default\"], {\n onClick: () => setMode(m[1].name)\n }, m[1].caption)))));\n};\n\n//----------------\n//Интерфейс модуля\n//----------------\n\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/panels/samples/samples.js?"); + +/***/ }), + +/***/ "./app/panels/samples/svg.js": +/*!***********************************!*\ + !*** ./app/panels/samples/svg.js ***! + \***********************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ Svg: () => (/* binding */ Svg)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! prop-types */ \"./node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_9___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_9__);\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Typography/Typography.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/FormControl/FormControl.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/FormLabel/FormLabel.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/RadioGroup/RadioGroup.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/FormControlLabel/FormControlLabel.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Radio/Radio.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Grid/Grid.js\");\n/* harmony import */ var _components_p8p_svg__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../components/p8p_svg */ \"./app/components/p8p_svg.js\");\n/*\r\n Парус 8 - Панели мониторинга - Примеры для разработчиков\r\n Пример: Интерактивные изображения \"P8PSVG\"\r\n*/\n\n//---------------------\n//Подключение библиотек\n//---------------------\n\n //Классы React\n //Контроль свойств компонента\n //Интерфейсные элементы\n //Интерактивные изображения\n\n//---------\n//Константы\n//---------\n\n//Адрес тестового изображения\nconst SAMPLE_URL = \"http://localhost:8080/P8WebClient/Modules/p8-panels/img/sample.svg\";\n\n//Стили\nconst STYLES = {\n CONTAINER: {\n textAlign: \"center\",\n paddingTop: \"20px\"\n },\n TITLE: {\n paddingBottom: \"15px\"\n },\n SVG: {\n width: \"95vw\",\n height: \"60vw\",\n display: \"flex\",\n justifyContent: \"center\"\n }\n};\n\n//-----------\n//Тело модуля\n//-----------\n\n//Пример: Интерактивные изображения \"P8PSVG\"\nconst Svg = ({\n title\n}) => {\n //Собственное состояние - SVG-изображение\n const [svg, setSVG] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({\n loaded: false,\n data: null,\n mode: \"items1\",\n items1: [{\n id: \"1\",\n backgroundColor: \"red\",\n desc: \"Цифра на флюзеляже\"\n }, {\n id: \"2\",\n backgroundColor: \"magenta\",\n desc: \"Ребро флюзеляжа\"\n }, {\n id: \"3\",\n backgroundColor: \"yellow\",\n desc: \"Люк\"\n }],\n items2: [{\n id: \"4\",\n backgroundColor: \"green\",\n desc: \"Хвост\",\n title: \"Хвост\"\n }, {\n id: \"5\",\n backgroundColor: \"blue\",\n desc: \"Хвостовой руль\",\n title: \"Хвостовой руль\"\n }, {\n id: \"6\",\n backgroundColor: \"aquamarine\",\n desc: \"Ребро жесткости хвоста\",\n title: \"Ребро жесткости хвоста\"\n }],\n selectedItemDesc: \"\"\n });\n\n //Загрузка изображения\n const loadSVG = async () => {\n const resp = await fetch(SAMPLE_URL);\n const data = await resp.text();\n setSVG(pv => ({\n ...pv,\n loaded: true,\n data\n }));\n };\n\n //Отработка нажатия на элемент изображения\n const handleSVGItemClick = ({\n item\n }) => {\n setSVG(pv => ({\n ...pv,\n selectedItemDesc: item?.desc ? `Выбран элемент: ${item.desc}` : \"Для выбранного элемента не задано описание\"\n }));\n };\n\n //При подключении к странице\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n loadSVG();\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n //Генерация содержимого\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n style: STYLES.CONTAINER\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n sx: STYLES.TITLE,\n variant: \"h6\"\n }, title), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_3__[\"default\"], null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_4__[\"default\"], null, \"\\u0413\\u0440\\u0443\\u043F\\u043F\\u0430 \\u044D\\u043B\\u0435\\u043C\\u0435\\u043D\\u0442\\u043E\\u0432\"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_5__[\"default\"], {\n row: true,\n value: svg.mode,\n onChange: e => setSVG(pv => ({\n ...pv,\n mode: e.target.value,\n selectedItemDesc: \"\"\n }))\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n value: \"items1\",\n control: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_7__[\"default\"], null),\n label: \"\\u042D\\u043B\\u0435\\u043C\\u0435\\u043D\\u0442\\u044B \\u043F\\u0435\\u0440\\u0432\\u043E\\u0439 \\u0433\\u0440\\u0443\\u043F\\u043F\\u044B\"\n }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n value: \"items2\",\n control: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_7__[\"default\"], null),\n label: \"\\u042D\\u043B\\u0435\\u043C\\u0435\\u043D\\u0442\\u044B \\u0432\\u0442\\u043E\\u0440\\u043E\\u0439 \\u0433\\u0440\\u0443\\u043F\\u043F\\u044B\"\n })), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_4__[\"default\"], null, svg.selectedItemDesc ? svg.selectedItemDesc : \"Нажмите на элемент изображения для получения его описания\")), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_8__[\"default\"], {\n container: true,\n spacing: 0,\n pt: 5,\n direction: \"column\",\n alignItems: \"center\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_8__[\"default\"], {\n item: true,\n xs: 12\n }, svg.loaded ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_components_p8p_svg__WEBPACK_IMPORTED_MODULE_1__.P8PSVG, {\n data: svg.data,\n items: svg[svg.mode],\n onClick: handleSVGItemClick,\n style: STYLES.SVG\n }) : null)));\n};\n\n//Контроль свойств - Пример: Интерактивные изображения \"P8PSVG\"\nSvg.propTypes = {\n title: (prop_types__WEBPACK_IMPORTED_MODULE_9___default().string).isRequired\n};\n\n//----------------\n//Интерфейс модуля\n//----------------\n\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/panels/samples/svg.js?"); /***/ }), From 4e1cb3cf89ac75deb2796be0dad1205ce3f58eea Mon Sep 17 00:00:00 2001 From: Mikhail Chechnev Date: Thu, 9 May 2024 20:50:43 +0300 Subject: [PATCH 36/76] =?UTF-8?q?WEB=20APP:=20P8PSVG=20-=20=D1=83=D0=B4?= =?UTF-8?q?=D0=B0=D0=BB=D0=B5=D0=BD=D0=B0=20=D0=BB=D0=B8=D1=88=D0=BD=D1=8F?= =?UTF-8?q?=D1=8F=20=D0=BA=D0=BE=D0=BD=D1=81=D0=BE=D0=BB=D1=8C=D0=BD=D0=B0?= =?UTF-8?q?=D1=8F=20=D0=B2=D1=8B=D0=B4=D0=B0=D1=87=D0=B0,=20=D0=B4=D0=BE?= =?UTF-8?q?=D1=80=D0=B0=D0=B1=D0=BE=D1=82=D0=B0=D0=BD=20=D0=BF=D1=80=D0=B8?= =?UTF-8?q?=D0=BC=D0=B5=D1=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/components/p8p_svg.js | 1 - app/panels/samples/svg.js | 4 ++-- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/app/components/p8p_svg.js b/app/components/p8p_svg.js index 602d9d9..1a76633 100644 --- a/app/components/p8p_svg.js +++ b/app/components/p8p_svg.js @@ -70,7 +70,6 @@ const P8PSVG = ({ data, items, onClick, style }) => { //При обновлении данных useEffect(() => { - console.log(items); loadSVG(); // eslint-disable-next-line react-hooks/exhaustive-deps }, [data, items]); diff --git a/app/panels/samples/svg.js b/app/panels/samples/svg.js index 04460d3..142fef5 100644 --- a/app/panels/samples/svg.js +++ b/app/panels/samples/svg.js @@ -17,13 +17,13 @@ import { P8PSVG } from "../../components/p8p_svg"; //Интерактивные //--------- //Адрес тестового изображения -const SAMPLE_URL = "http://localhost:8080/P8WebClient/Modules/p8-panels/img/sample.svg"; +const SAMPLE_URL = "img/sample.svg"; //Стили const STYLES = { CONTAINER: { textAlign: "center", paddingTop: "20px" }, TITLE: { paddingBottom: "15px" }, - SVG: { width: "95vw", height: "60vw", display: "flex", justifyContent: "center" } + SVG: { width: "95vw", height: "30vw", display: "flex", justifyContent: "center" } }; //----------- From 90ca5a1af1bb321679124b21328264b3c6717ef6 Mon Sep 17 00:00:00 2001 From: Mikhail Chechnev Date: Thu, 9 May 2024 20:51:01 +0300 Subject: [PATCH 37/76] =?UTF-8?q?WEB=20APP:=20=D0=A1=D0=B2=D0=B5=D0=B6?= =?UTF-8?q?=D0=B0=D1=8F=20=D1=81=D0=B1=D0=BE=D1=80=D0=BA=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- dist/p8-panels.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/dist/p8-panels.js b/dist/p8-panels.js index 36cc741..37aedf2 100644 --- a/dist/p8-panels.js +++ b/dist/p8-panels.js @@ -3579,7 +3579,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ P8PSVG: () => (/* binding */ P8PSVG)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! prop-types */ \"./node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_1__);\n/*\r\n Парус 8 - Панели мониторинга\r\n Компонент: Интерактивные изображения SVG\r\n*/\n\n//---------------------\n//Подключение библиотек\n//---------------------\n\n //Классы React\n //Контроль свойств компонента\n\n//---------\n//Константы\n//---------\n\n//Стили\nconst STYLES = {\n CANVAS: {\n width: \"100%\",\n height: \"100%\"\n }\n};\n\n//Структура элемента изображения\nconst P8P_SVG_ITEM_SHAPE = prop_types__WEBPACK_IMPORTED_MODULE_1___default().shape({\n id: (prop_types__WEBPACK_IMPORTED_MODULE_1___default().string).isRequired,\n backgroundColor: prop_types__WEBPACK_IMPORTED_MODULE_1___default().oneOfType([(prop_types__WEBPACK_IMPORTED_MODULE_1___default().string), prop_types__WEBPACK_IMPORTED_MODULE_1___default().arrayOf((prop_types__WEBPACK_IMPORTED_MODULE_1___default().string))])\n});\n\n//-----------\n//Тело модуля\n//-----------\n\n//Интерактивные изображения SVG\nconst P8PSVG = ({\n data,\n items,\n onClick,\n style\n}) => {\n //Ссылки на DOM\n const svgContainerRef = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(null);\n const svgRef = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(null);\n\n //Обработка нажатия на элемент изображения\n const handleClick = e => {\n if (e.target.id && items && onClick) {\n const item = items.find(item => item.id == e.target.id);\n if (item) onClick({\n item\n });\n }\n };\n\n //Формирование интерактивных элементов изображения\n const makeSVGItems = () => {\n items.forEach(item => {\n const svgE = document.getElementById(item.id);\n if (svgE) {\n svgE.setAttribute(\"style\", `${onClick ? \"cursor: pointer\" : \"\"}; ${item.backgroundColor ? `fill: ${item.backgroundColor}` : \"\"}`);\n if (item?.title) {\n const titleE = document.createElementNS(\"http://www.w3.org/2000/svg\", \"title\");\n titleE.textContent = item.title;\n svgE.replaceChildren(titleE);\n }\n }\n });\n };\n\n //Загрузка изображения\n const loadSVG = () => {\n const parser = new DOMParser();\n const doc = parser.parseFromString(data, \"image/svg+xml\");\n svgRef.current = doc.documentElement;\n svgRef.current.onclick = handleClick;\n svgContainerRef.current.replaceChildren(svgRef.current);\n if (items) makeSVGItems(items);\n };\n\n //При обновлении данных\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n console.log(items);\n loadSVG();\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [data, items]);\n\n //Генерация содержимого\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n ref: svgContainerRef,\n style: {\n ...STYLES.CANVAS,\n ...(style ? style : {})\n }\n });\n};\n\n//Контроль свойств - Интерактивные изображения SVG\nP8PSVG.propTypes = {\n data: (prop_types__WEBPACK_IMPORTED_MODULE_1___default().string).isRequired,\n items: prop_types__WEBPACK_IMPORTED_MODULE_1___default().arrayOf(P8P_SVG_ITEM_SHAPE),\n onClick: (prop_types__WEBPACK_IMPORTED_MODULE_1___default().func),\n style: (prop_types__WEBPACK_IMPORTED_MODULE_1___default().object)\n};\n\n//----------------\n//Интерфейс модуля\n//----------------\n\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/components/p8p_svg.js?"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ P8PSVG: () => (/* binding */ P8PSVG)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! prop-types */ \"./node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_1__);\n/*\r\n Парус 8 - Панели мониторинга\r\n Компонент: Интерактивные изображения SVG\r\n*/\n\n//---------------------\n//Подключение библиотек\n//---------------------\n\n //Классы React\n //Контроль свойств компонента\n\n//---------\n//Константы\n//---------\n\n//Стили\nconst STYLES = {\n CANVAS: {\n width: \"100%\",\n height: \"100%\"\n }\n};\n\n//Структура элемента изображения\nconst P8P_SVG_ITEM_SHAPE = prop_types__WEBPACK_IMPORTED_MODULE_1___default().shape({\n id: (prop_types__WEBPACK_IMPORTED_MODULE_1___default().string).isRequired,\n backgroundColor: prop_types__WEBPACK_IMPORTED_MODULE_1___default().oneOfType([(prop_types__WEBPACK_IMPORTED_MODULE_1___default().string), prop_types__WEBPACK_IMPORTED_MODULE_1___default().arrayOf((prop_types__WEBPACK_IMPORTED_MODULE_1___default().string))])\n});\n\n//-----------\n//Тело модуля\n//-----------\n\n//Интерактивные изображения SVG\nconst P8PSVG = ({\n data,\n items,\n onClick,\n style\n}) => {\n //Ссылки на DOM\n const svgContainerRef = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(null);\n const svgRef = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(null);\n\n //Обработка нажатия на элемент изображения\n const handleClick = e => {\n if (e.target.id && items && onClick) {\n const item = items.find(item => item.id == e.target.id);\n if (item) onClick({\n item\n });\n }\n };\n\n //Формирование интерактивных элементов изображения\n const makeSVGItems = () => {\n items.forEach(item => {\n const svgE = document.getElementById(item.id);\n if (svgE) {\n svgE.setAttribute(\"style\", `${onClick ? \"cursor: pointer\" : \"\"}; ${item.backgroundColor ? `fill: ${item.backgroundColor}` : \"\"}`);\n if (item?.title) {\n const titleE = document.createElementNS(\"http://www.w3.org/2000/svg\", \"title\");\n titleE.textContent = item.title;\n svgE.replaceChildren(titleE);\n }\n }\n });\n };\n\n //Загрузка изображения\n const loadSVG = () => {\n const parser = new DOMParser();\n const doc = parser.parseFromString(data, \"image/svg+xml\");\n svgRef.current = doc.documentElement;\n svgRef.current.onclick = handleClick;\n svgContainerRef.current.replaceChildren(svgRef.current);\n if (items) makeSVGItems(items);\n };\n\n //При обновлении данных\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n loadSVG();\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [data, items]);\n\n //Генерация содержимого\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n ref: svgContainerRef,\n style: {\n ...STYLES.CANVAS,\n ...(style ? style : {})\n }\n });\n};\n\n//Контроль свойств - Интерактивные изображения SVG\nP8PSVG.propTypes = {\n data: (prop_types__WEBPACK_IMPORTED_MODULE_1___default().string).isRequired,\n items: prop_types__WEBPACK_IMPORTED_MODULE_1___default().arrayOf(P8P_SVG_ITEM_SHAPE),\n onClick: (prop_types__WEBPACK_IMPORTED_MODULE_1___default().func),\n style: (prop_types__WEBPACK_IMPORTED_MODULE_1___default().object)\n};\n\n//----------------\n//Интерфейс модуля\n//----------------\n\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/components/p8p_svg.js?"); /***/ }), @@ -4404,7 +4404,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ Svg: () => (/* binding */ Svg)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! prop-types */ \"./node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_9___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_9__);\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Typography/Typography.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/FormControl/FormControl.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/FormLabel/FormLabel.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/RadioGroup/RadioGroup.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/FormControlLabel/FormControlLabel.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Radio/Radio.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Grid/Grid.js\");\n/* harmony import */ var _components_p8p_svg__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../components/p8p_svg */ \"./app/components/p8p_svg.js\");\n/*\r\n Парус 8 - Панели мониторинга - Примеры для разработчиков\r\n Пример: Интерактивные изображения \"P8PSVG\"\r\n*/\n\n//---------------------\n//Подключение библиотек\n//---------------------\n\n //Классы React\n //Контроль свойств компонента\n //Интерфейсные элементы\n //Интерактивные изображения\n\n//---------\n//Константы\n//---------\n\n//Адрес тестового изображения\nconst SAMPLE_URL = \"http://localhost:8080/P8WebClient/Modules/p8-panels/img/sample.svg\";\n\n//Стили\nconst STYLES = {\n CONTAINER: {\n textAlign: \"center\",\n paddingTop: \"20px\"\n },\n TITLE: {\n paddingBottom: \"15px\"\n },\n SVG: {\n width: \"95vw\",\n height: \"60vw\",\n display: \"flex\",\n justifyContent: \"center\"\n }\n};\n\n//-----------\n//Тело модуля\n//-----------\n\n//Пример: Интерактивные изображения \"P8PSVG\"\nconst Svg = ({\n title\n}) => {\n //Собственное состояние - SVG-изображение\n const [svg, setSVG] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({\n loaded: false,\n data: null,\n mode: \"items1\",\n items1: [{\n id: \"1\",\n backgroundColor: \"red\",\n desc: \"Цифра на флюзеляже\"\n }, {\n id: \"2\",\n backgroundColor: \"magenta\",\n desc: \"Ребро флюзеляжа\"\n }, {\n id: \"3\",\n backgroundColor: \"yellow\",\n desc: \"Люк\"\n }],\n items2: [{\n id: \"4\",\n backgroundColor: \"green\",\n desc: \"Хвост\",\n title: \"Хвост\"\n }, {\n id: \"5\",\n backgroundColor: \"blue\",\n desc: \"Хвостовой руль\",\n title: \"Хвостовой руль\"\n }, {\n id: \"6\",\n backgroundColor: \"aquamarine\",\n desc: \"Ребро жесткости хвоста\",\n title: \"Ребро жесткости хвоста\"\n }],\n selectedItemDesc: \"\"\n });\n\n //Загрузка изображения\n const loadSVG = async () => {\n const resp = await fetch(SAMPLE_URL);\n const data = await resp.text();\n setSVG(pv => ({\n ...pv,\n loaded: true,\n data\n }));\n };\n\n //Отработка нажатия на элемент изображения\n const handleSVGItemClick = ({\n item\n }) => {\n setSVG(pv => ({\n ...pv,\n selectedItemDesc: item?.desc ? `Выбран элемент: ${item.desc}` : \"Для выбранного элемента не задано описание\"\n }));\n };\n\n //При подключении к странице\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n loadSVG();\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n //Генерация содержимого\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n style: STYLES.CONTAINER\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n sx: STYLES.TITLE,\n variant: \"h6\"\n }, title), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_3__[\"default\"], null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_4__[\"default\"], null, \"\\u0413\\u0440\\u0443\\u043F\\u043F\\u0430 \\u044D\\u043B\\u0435\\u043C\\u0435\\u043D\\u0442\\u043E\\u0432\"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_5__[\"default\"], {\n row: true,\n value: svg.mode,\n onChange: e => setSVG(pv => ({\n ...pv,\n mode: e.target.value,\n selectedItemDesc: \"\"\n }))\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n value: \"items1\",\n control: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_7__[\"default\"], null),\n label: \"\\u042D\\u043B\\u0435\\u043C\\u0435\\u043D\\u0442\\u044B \\u043F\\u0435\\u0440\\u0432\\u043E\\u0439 \\u0433\\u0440\\u0443\\u043F\\u043F\\u044B\"\n }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n value: \"items2\",\n control: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_7__[\"default\"], null),\n label: \"\\u042D\\u043B\\u0435\\u043C\\u0435\\u043D\\u0442\\u044B \\u0432\\u0442\\u043E\\u0440\\u043E\\u0439 \\u0433\\u0440\\u0443\\u043F\\u043F\\u044B\"\n })), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_4__[\"default\"], null, svg.selectedItemDesc ? svg.selectedItemDesc : \"Нажмите на элемент изображения для получения его описания\")), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_8__[\"default\"], {\n container: true,\n spacing: 0,\n pt: 5,\n direction: \"column\",\n alignItems: \"center\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_8__[\"default\"], {\n item: true,\n xs: 12\n }, svg.loaded ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_components_p8p_svg__WEBPACK_IMPORTED_MODULE_1__.P8PSVG, {\n data: svg.data,\n items: svg[svg.mode],\n onClick: handleSVGItemClick,\n style: STYLES.SVG\n }) : null)));\n};\n\n//Контроль свойств - Пример: Интерактивные изображения \"P8PSVG\"\nSvg.propTypes = {\n title: (prop_types__WEBPACK_IMPORTED_MODULE_9___default().string).isRequired\n};\n\n//----------------\n//Интерфейс модуля\n//----------------\n\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/panels/samples/svg.js?"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ Svg: () => (/* binding */ Svg)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! prop-types */ \"./node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_9___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_9__);\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Typography/Typography.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/FormControl/FormControl.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/FormLabel/FormLabel.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/RadioGroup/RadioGroup.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/FormControlLabel/FormControlLabel.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Radio/Radio.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Grid/Grid.js\");\n/* harmony import */ var _components_p8p_svg__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../components/p8p_svg */ \"./app/components/p8p_svg.js\");\n/*\r\n Парус 8 - Панели мониторинга - Примеры для разработчиков\r\n Пример: Интерактивные изображения \"P8PSVG\"\r\n*/\n\n//---------------------\n//Подключение библиотек\n//---------------------\n\n //Классы React\n //Контроль свойств компонента\n //Интерфейсные элементы\n //Интерактивные изображения\n\n//---------\n//Константы\n//---------\n\n//Адрес тестового изображения\nconst SAMPLE_URL = \"img/sample.svg\";\n\n//Стили\nconst STYLES = {\n CONTAINER: {\n textAlign: \"center\",\n paddingTop: \"20px\"\n },\n TITLE: {\n paddingBottom: \"15px\"\n },\n SVG: {\n width: \"95vw\",\n height: \"30vw\",\n display: \"flex\",\n justifyContent: \"center\"\n }\n};\n\n//-----------\n//Тело модуля\n//-----------\n\n//Пример: Интерактивные изображения \"P8PSVG\"\nconst Svg = ({\n title\n}) => {\n //Собственное состояние - SVG-изображение\n const [svg, setSVG] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({\n loaded: false,\n data: null,\n mode: \"items1\",\n items1: [{\n id: \"1\",\n backgroundColor: \"red\",\n desc: \"Цифра на флюзеляже\"\n }, {\n id: \"2\",\n backgroundColor: \"magenta\",\n desc: \"Ребро флюзеляжа\"\n }, {\n id: \"3\",\n backgroundColor: \"yellow\",\n desc: \"Люк\"\n }],\n items2: [{\n id: \"4\",\n backgroundColor: \"green\",\n desc: \"Хвост\",\n title: \"Хвост\"\n }, {\n id: \"5\",\n backgroundColor: \"blue\",\n desc: \"Хвостовой руль\",\n title: \"Хвостовой руль\"\n }, {\n id: \"6\",\n backgroundColor: \"aquamarine\",\n desc: \"Ребро жесткости хвоста\",\n title: \"Ребро жесткости хвоста\"\n }],\n selectedItemDesc: \"\"\n });\n\n //Загрузка изображения\n const loadSVG = async () => {\n const resp = await fetch(SAMPLE_URL);\n const data = await resp.text();\n setSVG(pv => ({\n ...pv,\n loaded: true,\n data\n }));\n };\n\n //Отработка нажатия на элемент изображения\n const handleSVGItemClick = ({\n item\n }) => {\n setSVG(pv => ({\n ...pv,\n selectedItemDesc: item?.desc ? `Выбран элемент: ${item.desc}` : \"Для выбранного элемента не задано описание\"\n }));\n };\n\n //При подключении к странице\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n loadSVG();\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n //Генерация содержимого\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n style: STYLES.CONTAINER\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n sx: STYLES.TITLE,\n variant: \"h6\"\n }, title), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_3__[\"default\"], null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_4__[\"default\"], null, \"\\u0413\\u0440\\u0443\\u043F\\u043F\\u0430 \\u044D\\u043B\\u0435\\u043C\\u0435\\u043D\\u0442\\u043E\\u0432\"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_5__[\"default\"], {\n row: true,\n value: svg.mode,\n onChange: e => setSVG(pv => ({\n ...pv,\n mode: e.target.value,\n selectedItemDesc: \"\"\n }))\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n value: \"items1\",\n control: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_7__[\"default\"], null),\n label: \"\\u042D\\u043B\\u0435\\u043C\\u0435\\u043D\\u0442\\u044B \\u043F\\u0435\\u0440\\u0432\\u043E\\u0439 \\u0433\\u0440\\u0443\\u043F\\u043F\\u044B\"\n }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n value: \"items2\",\n control: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_7__[\"default\"], null),\n label: \"\\u042D\\u043B\\u0435\\u043C\\u0435\\u043D\\u0442\\u044B \\u0432\\u0442\\u043E\\u0440\\u043E\\u0439 \\u0433\\u0440\\u0443\\u043F\\u043F\\u044B\"\n })), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_4__[\"default\"], null, svg.selectedItemDesc ? svg.selectedItemDesc : \"Нажмите на элемент изображения для получения его описания\")), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_8__[\"default\"], {\n container: true,\n spacing: 0,\n pt: 5,\n direction: \"column\",\n alignItems: \"center\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_8__[\"default\"], {\n item: true,\n xs: 12\n }, svg.loaded ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_components_p8p_svg__WEBPACK_IMPORTED_MODULE_1__.P8PSVG, {\n data: svg.data,\n items: svg[svg.mode],\n onClick: handleSVGItemClick,\n style: STYLES.SVG\n }) : null)));\n};\n\n//Контроль свойств - Пример: Интерактивные изображения \"P8PSVG\"\nSvg.propTypes = {\n title: (prop_types__WEBPACK_IMPORTED_MODULE_9___default().string).isRequired\n};\n\n//----------------\n//Интерфейс модуля\n//----------------\n\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/panels/samples/svg.js?"); /***/ }), From 031de604afa4853033c418df6dd9bd7488dba25d Mon Sep 17 00:00:00 2001 From: Mikhail Chechnev Date: Fri, 10 May 2024 13:33:47 +0300 Subject: [PATCH 38/76] =?UTF-8?q?WEB=20APP:=20P8PSVG=20-=20=D0=BF=D0=BE?= =?UTF-8?q?=D0=B4=D0=B4=D0=B5=D1=80=D0=B6=D0=BA=D0=B0=20=D0=B3=D0=B0=D0=BB?= =?UTF-8?q?=D0=B5=D1=80=D0=B5=D0=B8=20=D0=B8=D0=B7=D0=BE=D0=B1=D1=80=D0=B0?= =?UTF-8?q?=D0=B6=D0=B5=D0=BD=D0=B8=D0=B9,=20=D0=BE=D1=82=D0=B4=D0=B5?= =?UTF-8?q?=D0=BB=D1=8C=D0=BD=D0=BE=D0=B5=20=D1=81=D0=BE=D0=B1=D1=8B=D1=82?= =?UTF-8?q?=D0=B8=D0=B5=20=D0=BD=D0=B0=20=D0=BD=D0=B0=D0=B6=D0=B0=D1=82?= =?UTF-8?q?=D0=B8=D0=B5=20=D0=BF=D0=BE=20=D0=B2=D1=81=D0=B5=D0=BC=D1=83=20?= =?UTF-8?q?=D0=B8=D0=B7=D0=BE=D0=B1=D1=80=D0=B0=D0=B6=D0=B5=D0=BD=D0=B8?= =?UTF-8?q?=D1=8E?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/components/p8p_svg.js | 97 ++++- app/panels/samples/svg.js | 34 +- img/sample.svg | 850 ++++++++++++++++++++++++++++++++++++++ 3 files changed, 959 insertions(+), 22 deletions(-) diff --git a/app/components/p8p_svg.js b/app/components/p8p_svg.js index 1a76633..822ce73 100644 --- a/app/components/p8p_svg.js +++ b/app/components/p8p_svg.js @@ -7,7 +7,8 @@ //Подключение библиотек //--------------------- -import React, { useEffect, useRef } from "react"; //Классы React +import React, { useEffect, useRef, useState } from "react"; //Классы React +import { IconButton, Icon } from "@mui/material"; //Интерфейсные элементы import PropTypes from "prop-types"; //Контроль свойств компонента //--------- @@ -16,7 +17,8 @@ import PropTypes from "prop-types"; //Контроль свойств компо //Стили const STYLES = { - CANVAS: { width: "100%", height: "100%" } + CANVAS: { width: "100%", height: "100%" }, + CONTROLS: { justifyContent: "center", alignItems: "center", display: "flex" } }; //Структура элемента изображения @@ -30,17 +32,29 @@ const P8P_SVG_ITEM_SHAPE = PropTypes.shape({ //----------- //Интерактивные изображения SVG -const P8PSVG = ({ data, items, onClick, style }) => { +const P8PSVG = ({ data, items, onClick, onItemClick, canvasStyle }) => { + //Собственное состояние + const [state, setState] = useState({ + images: [], + currentImage: 0, + imagesCount: 0 + }); + //Ссылки на DOM const svgContainerRef = useRef(null); const svgRef = useRef(null); //Обработка нажатия на элемент изображения const handleClick = e => { - if (e.target.id && items && onClick) { + let itemClickFired = false; + if (e.target.id && items && onItemClick) { const item = items.find(item => item.id == e.target.id); - if (item) onClick({ item }); + if (item) { + onItemClick({ item }); + itemClickFired = true; + } } + if (!itemClickFired && onClick) onClick(e); }; //Формирование интерактивных элементов изображения @@ -48,7 +62,7 @@ const P8PSVG = ({ data, items, onClick, style }) => { items.forEach(item => { const svgE = document.getElementById(item.id); if (svgE) { - svgE.setAttribute("style", `${onClick ? "cursor: pointer" : ""}; ${item.backgroundColor ? `fill: ${item.backgroundColor}` : ""}`); + svgE.setAttribute("style", `${onItemClick ? "cursor: pointer" : ""}; ${item.backgroundColor ? `fill: ${item.backgroundColor}` : ""}`); if (item?.title) { const titleE = document.createElementNS("http://www.w3.org/2000/svg", "title"); titleE.textContent = item.title; @@ -60,22 +74,74 @@ const P8PSVG = ({ data, items, onClick, style }) => { //Загрузка изображения const loadSVG = () => { - const parser = new DOMParser(); - const doc = parser.parseFromString(data, "image/svg+xml"); - svgRef.current = doc.documentElement; - svgRef.current.onclick = handleClick; - svgContainerRef.current.replaceChildren(svgRef.current); - if (items) makeSVGItems(items); + const images = data + .split("") + .filter(i => i) + .map(i => i + ""); + setState(pv => ({ ...pv, images, imagesCount: images.length, currentImage: 0 })); + }; + + //Отображение текущего изображения + const showSVG = () => { + if (state.imagesCount > 0) { + const parser = new DOMParser(); + const doc = parser.parseFromString(state.images[state.currentImage], "image/svg+xml"); + svgRef.current = doc.documentElement; + svgRef.current.onclick = handleClick; + svgContainerRef.current.replaceChildren(svgRef.current); + if (items) makeSVGItems(items); + } + }; + + //Переключение текущего изображения + const switchImage = direction => { + setState(pv => ({ + ...pv, + currentImage: + direction > 0 + ? pv.currentImage + 1 >= pv.imagesCount + ? 0 + : pv.currentImage + 1 + : pv.currentImage - 1 < 0 + ? pv.imagesCount - 1 + : pv.currentImage - 1 + })); }; //При обновлении данных useEffect(() => { loadSVG(); // eslint-disable-next-line react-hooks/exhaustive-deps - }, [data, items]); + }, [data]); + + //При загрузке изображения + useEffect(() => { + showSVG(); + // eslint-disable-next-line react-hooks/exhaustive-deps + }, [state.images, state.currentImage, items]); + + //При прокрутке изображений назад + const handlePrevClick = () => switchImage(-1); + + //При прокрутке изображений вперёд + const handleNextClick = () => switchImage(1); //Генерация содержимого - return
; + return ( +
+
+ {state.imagesCount > 1 ? ( +
+ + arrow_left + + + arrow_right + +
+ ) : null} +
+ ); }; //Контроль свойств - Интерактивные изображения SVG @@ -83,7 +149,8 @@ P8PSVG.propTypes = { data: PropTypes.string.isRequired, items: PropTypes.arrayOf(P8P_SVG_ITEM_SHAPE), onClick: PropTypes.func, - style: PropTypes.object + onItemClick: PropTypes.func, + canvasStyle: PropTypes.object }; //---------------- diff --git a/app/panels/samples/svg.js b/app/panels/samples/svg.js index 142fef5..85455ba 100644 --- a/app/panels/samples/svg.js +++ b/app/panels/samples/svg.js @@ -23,6 +23,7 @@ const SAMPLE_URL = "img/sample.svg"; const STYLES = { CONTAINER: { textAlign: "center", paddingTop: "20px" }, TITLE: { paddingBottom: "15px" }, + FORM: { justifyContent: "center", alignItems: "center" }, SVG: { width: "95vw", height: "30vw", display: "flex", justifyContent: "center" } }; @@ -38,15 +39,20 @@ const Svg = ({ title }) => { data: null, mode: "items1", items1: [ - { id: "1", backgroundColor: "red", desc: "Цифра на флюзеляже" }, - { id: "2", backgroundColor: "magenta", desc: "Ребро флюзеляжа" }, - { id: "3", backgroundColor: "yellow", desc: "Люк" } + { id: "1", backgroundColor: "red", desc: "Цифра на флюзеляже", title: "Цифра на флюзеляже" }, + { id: "2", backgroundColor: "magenta", desc: "Ребро флюзеляжа", title: "Ребро флюзеляжа" }, + { id: "3", backgroundColor: "yellow", desc: "Люк", title: "Люк" } ], items2: [ { id: "4", backgroundColor: "green", desc: "Хвост", title: "Хвост" }, { id: "5", backgroundColor: "blue", desc: "Хвостовой руль", title: "Хвостовой руль" }, { id: "6", backgroundColor: "aquamarine", desc: "Ребро жесткости хвоста", title: "Ребро жесткости хвоста" } ], + items3: [ + { id: "7", backgroundColor: "blueviolet", desc: "Крыло левое", title: "Крыло левое" }, + { id: "8", backgroundColor: "orange", desc: "Двигатель левый", title: "Двигатель левый" }, + { id: "9", backgroundColor: "springgreen", desc: "Крыло правое", title: "Крыло правое" } + ], selectedItemDesc: "" }); @@ -57,6 +63,11 @@ const Svg = ({ title }) => { setSVG(pv => ({ ...pv, loaded: true, data })); }; + //Отработка нажатия на изображение + const handleSVGClick = () => { + setSVG(pv => ({ ...pv, selectedItemDesc: "Выбрано изображение целиком" })); + }; + //Отработка нажатия на элемент изображения const handleSVGItemClick = ({ item }) => { setSVG(pv => ({ ...pv, selectedItemDesc: item?.desc ? `Выбран элемент: ${item.desc}` : "Для выбранного элемента не задано описание" })); @@ -74,17 +85,26 @@ const Svg = ({ title }) => { {title} - + Группа элементов setSVG(pv => ({ ...pv, mode: e.target.value, selectedItemDesc: "" }))}> - } label="Элементы первой группы" /> - } label="Элементы второй группы" /> + } label="Первая" /> + } label="Вторая" /> + } label="Третья" /> {svg.selectedItemDesc ? svg.selectedItemDesc : "Нажмите на элемент изображения для получения его описания"} - {svg.loaded ? : null} + {svg.loaded ? ( + + ) : null}
diff --git a/img/sample.svg b/img/sample.svg index 54a7426..cb3c008 100644 --- a/img/sample.svg +++ b/img/sample.svg @@ -103,3 +103,853 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file From b2d8749a0ac28f698a62b69c3c9785274f1f7ce2 Mon Sep 17 00:00:00 2001 From: Mikhail Chechnev Date: Fri, 10 May 2024 13:34:03 +0300 Subject: [PATCH 39/76] =?UTF-8?q?WEB=20APP:=20=D0=A1=D0=B2=D0=B5=D0=B6?= =?UTF-8?q?=D0=B0=D1=8F=20=D1=81=D0=B1=D0=BE=D1=80=D0=BA=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- dist/p8-panels.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/dist/p8-panels.js b/dist/p8-panels.js index 37aedf2..73f7d3b 100644 --- a/dist/p8-panels.js +++ b/dist/p8-panels.js @@ -3579,7 +3579,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ P8PSVG: () => (/* binding */ P8PSVG)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! prop-types */ \"./node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_1__);\n/*\r\n Парус 8 - Панели мониторинга\r\n Компонент: Интерактивные изображения SVG\r\n*/\n\n//---------------------\n//Подключение библиотек\n//---------------------\n\n //Классы React\n //Контроль свойств компонента\n\n//---------\n//Константы\n//---------\n\n//Стили\nconst STYLES = {\n CANVAS: {\n width: \"100%\",\n height: \"100%\"\n }\n};\n\n//Структура элемента изображения\nconst P8P_SVG_ITEM_SHAPE = prop_types__WEBPACK_IMPORTED_MODULE_1___default().shape({\n id: (prop_types__WEBPACK_IMPORTED_MODULE_1___default().string).isRequired,\n backgroundColor: prop_types__WEBPACK_IMPORTED_MODULE_1___default().oneOfType([(prop_types__WEBPACK_IMPORTED_MODULE_1___default().string), prop_types__WEBPACK_IMPORTED_MODULE_1___default().arrayOf((prop_types__WEBPACK_IMPORTED_MODULE_1___default().string))])\n});\n\n//-----------\n//Тело модуля\n//-----------\n\n//Интерактивные изображения SVG\nconst P8PSVG = ({\n data,\n items,\n onClick,\n style\n}) => {\n //Ссылки на DOM\n const svgContainerRef = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(null);\n const svgRef = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(null);\n\n //Обработка нажатия на элемент изображения\n const handleClick = e => {\n if (e.target.id && items && onClick) {\n const item = items.find(item => item.id == e.target.id);\n if (item) onClick({\n item\n });\n }\n };\n\n //Формирование интерактивных элементов изображения\n const makeSVGItems = () => {\n items.forEach(item => {\n const svgE = document.getElementById(item.id);\n if (svgE) {\n svgE.setAttribute(\"style\", `${onClick ? \"cursor: pointer\" : \"\"}; ${item.backgroundColor ? `fill: ${item.backgroundColor}` : \"\"}`);\n if (item?.title) {\n const titleE = document.createElementNS(\"http://www.w3.org/2000/svg\", \"title\");\n titleE.textContent = item.title;\n svgE.replaceChildren(titleE);\n }\n }\n });\n };\n\n //Загрузка изображения\n const loadSVG = () => {\n const parser = new DOMParser();\n const doc = parser.parseFromString(data, \"image/svg+xml\");\n svgRef.current = doc.documentElement;\n svgRef.current.onclick = handleClick;\n svgContainerRef.current.replaceChildren(svgRef.current);\n if (items) makeSVGItems(items);\n };\n\n //При обновлении данных\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n loadSVG();\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [data, items]);\n\n //Генерация содержимого\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n ref: svgContainerRef,\n style: {\n ...STYLES.CANVAS,\n ...(style ? style : {})\n }\n });\n};\n\n//Контроль свойств - Интерактивные изображения SVG\nP8PSVG.propTypes = {\n data: (prop_types__WEBPACK_IMPORTED_MODULE_1___default().string).isRequired,\n items: prop_types__WEBPACK_IMPORTED_MODULE_1___default().arrayOf(P8P_SVG_ITEM_SHAPE),\n onClick: (prop_types__WEBPACK_IMPORTED_MODULE_1___default().func),\n style: (prop_types__WEBPACK_IMPORTED_MODULE_1___default().object)\n};\n\n//----------------\n//Интерфейс модуля\n//----------------\n\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/components/p8p_svg.js?"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ P8PSVG: () => (/* binding */ P8PSVG)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/IconButton/IconButton.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Icon/Icon.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! prop-types */ \"./node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_1__);\n/*\r\n Парус 8 - Панели мониторинга\r\n Компонент: Интерактивные изображения SVG\r\n*/\n\n//---------------------\n//Подключение библиотек\n//---------------------\n\n //Классы React\n //Интерфейсные элементы\n //Контроль свойств компонента\n\n//---------\n//Константы\n//---------\n\n//Стили\nconst STYLES = {\n CANVAS: {\n width: \"100%\",\n height: \"100%\"\n },\n CONTROLS: {\n justifyContent: \"center\",\n alignItems: \"center\",\n display: \"flex\"\n }\n};\n\n//Структура элемента изображения\nconst P8P_SVG_ITEM_SHAPE = prop_types__WEBPACK_IMPORTED_MODULE_1___default().shape({\n id: (prop_types__WEBPACK_IMPORTED_MODULE_1___default().string).isRequired,\n backgroundColor: prop_types__WEBPACK_IMPORTED_MODULE_1___default().oneOfType([(prop_types__WEBPACK_IMPORTED_MODULE_1___default().string), prop_types__WEBPACK_IMPORTED_MODULE_1___default().arrayOf((prop_types__WEBPACK_IMPORTED_MODULE_1___default().string))])\n});\n\n//-----------\n//Тело модуля\n//-----------\n\n//Интерактивные изображения SVG\nconst P8PSVG = ({\n data,\n items,\n onClick,\n onItemClick,\n canvasStyle\n}) => {\n //Собственное состояние\n const [state, setState] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({\n images: [],\n currentImage: 0,\n imagesCount: 0\n });\n\n //Ссылки на DOM\n const svgContainerRef = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(null);\n const svgRef = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(null);\n\n //Обработка нажатия на элемент изображения\n const handleClick = e => {\n let itemClickFired = false;\n if (e.target.id && items && onItemClick) {\n const item = items.find(item => item.id == e.target.id);\n if (item) {\n onItemClick({\n item\n });\n itemClickFired = true;\n }\n }\n if (!itemClickFired && onClick) onClick(e);\n };\n\n //Формирование интерактивных элементов изображения\n const makeSVGItems = () => {\n items.forEach(item => {\n const svgE = document.getElementById(item.id);\n if (svgE) {\n svgE.setAttribute(\"style\", `${onItemClick ? \"cursor: pointer\" : \"\"}; ${item.backgroundColor ? `fill: ${item.backgroundColor}` : \"\"}`);\n if (item?.title) {\n const titleE = document.createElementNS(\"http://www.w3.org/2000/svg\", \"title\");\n titleE.textContent = item.title;\n svgE.replaceChildren(titleE);\n }\n }\n });\n };\n\n //Загрузка изображения\n const loadSVG = () => {\n const images = data.split(\"\").filter(i => i).map(i => i + \"\");\n setState(pv => ({\n ...pv,\n images,\n imagesCount: images.length,\n currentImage: 0\n }));\n };\n\n //Отображение текущего изображения\n const showSVG = () => {\n if (state.imagesCount > 0) {\n const parser = new DOMParser();\n const doc = parser.parseFromString(state.images[state.currentImage], \"image/svg+xml\");\n svgRef.current = doc.documentElement;\n svgRef.current.onclick = handleClick;\n svgContainerRef.current.replaceChildren(svgRef.current);\n if (items) makeSVGItems(items);\n }\n };\n\n //Переключение текущего изображения\n const switchImage = direction => {\n setState(pv => ({\n ...pv,\n currentImage: direction > 0 ? pv.currentImage + 1 >= pv.imagesCount ? 0 : pv.currentImage + 1 : pv.currentImage - 1 < 0 ? pv.imagesCount - 1 : pv.currentImage - 1\n }));\n };\n\n //При обновлении данных\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n loadSVG();\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [data]);\n\n //При загрузке изображения\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n showSVG();\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [state.images, state.currentImage, items]);\n\n //При прокрутке изображений назад\n const handlePrevClick = () => switchImage(-1);\n\n //При прокрутке изображений вперёд\n const handleNextClick = () => switchImage(1);\n\n //Генерация содержимого\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n ref: svgContainerRef,\n style: {\n ...STYLES.CANVAS,\n ...(canvasStyle ? canvasStyle : {})\n }\n }), state.imagesCount > 1 ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n style: STYLES.CONTROLS\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n onClick: handlePrevClick\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_3__[\"default\"], null, \"arrow_left\")), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n onClick: handleNextClick\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_3__[\"default\"], null, \"arrow_right\"))) : null);\n};\n\n//Контроль свойств - Интерактивные изображения SVG\nP8PSVG.propTypes = {\n data: (prop_types__WEBPACK_IMPORTED_MODULE_1___default().string).isRequired,\n items: prop_types__WEBPACK_IMPORTED_MODULE_1___default().arrayOf(P8P_SVG_ITEM_SHAPE),\n onClick: (prop_types__WEBPACK_IMPORTED_MODULE_1___default().func),\n onItemClick: (prop_types__WEBPACK_IMPORTED_MODULE_1___default().func),\n canvasStyle: (prop_types__WEBPACK_IMPORTED_MODULE_1___default().object)\n};\n\n//----------------\n//Интерфейс модуля\n//----------------\n\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/components/p8p_svg.js?"); /***/ }), @@ -4404,7 +4404,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ Svg: () => (/* binding */ Svg)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! prop-types */ \"./node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_9___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_9__);\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Typography/Typography.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/FormControl/FormControl.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/FormLabel/FormLabel.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/RadioGroup/RadioGroup.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/FormControlLabel/FormControlLabel.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Radio/Radio.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Grid/Grid.js\");\n/* harmony import */ var _components_p8p_svg__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../components/p8p_svg */ \"./app/components/p8p_svg.js\");\n/*\r\n Парус 8 - Панели мониторинга - Примеры для разработчиков\r\n Пример: Интерактивные изображения \"P8PSVG\"\r\n*/\n\n//---------------------\n//Подключение библиотек\n//---------------------\n\n //Классы React\n //Контроль свойств компонента\n //Интерфейсные элементы\n //Интерактивные изображения\n\n//---------\n//Константы\n//---------\n\n//Адрес тестового изображения\nconst SAMPLE_URL = \"img/sample.svg\";\n\n//Стили\nconst STYLES = {\n CONTAINER: {\n textAlign: \"center\",\n paddingTop: \"20px\"\n },\n TITLE: {\n paddingBottom: \"15px\"\n },\n SVG: {\n width: \"95vw\",\n height: \"30vw\",\n display: \"flex\",\n justifyContent: \"center\"\n }\n};\n\n//-----------\n//Тело модуля\n//-----------\n\n//Пример: Интерактивные изображения \"P8PSVG\"\nconst Svg = ({\n title\n}) => {\n //Собственное состояние - SVG-изображение\n const [svg, setSVG] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({\n loaded: false,\n data: null,\n mode: \"items1\",\n items1: [{\n id: \"1\",\n backgroundColor: \"red\",\n desc: \"Цифра на флюзеляже\"\n }, {\n id: \"2\",\n backgroundColor: \"magenta\",\n desc: \"Ребро флюзеляжа\"\n }, {\n id: \"3\",\n backgroundColor: \"yellow\",\n desc: \"Люк\"\n }],\n items2: [{\n id: \"4\",\n backgroundColor: \"green\",\n desc: \"Хвост\",\n title: \"Хвост\"\n }, {\n id: \"5\",\n backgroundColor: \"blue\",\n desc: \"Хвостовой руль\",\n title: \"Хвостовой руль\"\n }, {\n id: \"6\",\n backgroundColor: \"aquamarine\",\n desc: \"Ребро жесткости хвоста\",\n title: \"Ребро жесткости хвоста\"\n }],\n selectedItemDesc: \"\"\n });\n\n //Загрузка изображения\n const loadSVG = async () => {\n const resp = await fetch(SAMPLE_URL);\n const data = await resp.text();\n setSVG(pv => ({\n ...pv,\n loaded: true,\n data\n }));\n };\n\n //Отработка нажатия на элемент изображения\n const handleSVGItemClick = ({\n item\n }) => {\n setSVG(pv => ({\n ...pv,\n selectedItemDesc: item?.desc ? `Выбран элемент: ${item.desc}` : \"Для выбранного элемента не задано описание\"\n }));\n };\n\n //При подключении к странице\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n loadSVG();\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n //Генерация содержимого\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n style: STYLES.CONTAINER\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n sx: STYLES.TITLE,\n variant: \"h6\"\n }, title), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_3__[\"default\"], null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_4__[\"default\"], null, \"\\u0413\\u0440\\u0443\\u043F\\u043F\\u0430 \\u044D\\u043B\\u0435\\u043C\\u0435\\u043D\\u0442\\u043E\\u0432\"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_5__[\"default\"], {\n row: true,\n value: svg.mode,\n onChange: e => setSVG(pv => ({\n ...pv,\n mode: e.target.value,\n selectedItemDesc: \"\"\n }))\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n value: \"items1\",\n control: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_7__[\"default\"], null),\n label: \"\\u042D\\u043B\\u0435\\u043C\\u0435\\u043D\\u0442\\u044B \\u043F\\u0435\\u0440\\u0432\\u043E\\u0439 \\u0433\\u0440\\u0443\\u043F\\u043F\\u044B\"\n }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n value: \"items2\",\n control: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_7__[\"default\"], null),\n label: \"\\u042D\\u043B\\u0435\\u043C\\u0435\\u043D\\u0442\\u044B \\u0432\\u0442\\u043E\\u0440\\u043E\\u0439 \\u0433\\u0440\\u0443\\u043F\\u043F\\u044B\"\n })), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_4__[\"default\"], null, svg.selectedItemDesc ? svg.selectedItemDesc : \"Нажмите на элемент изображения для получения его описания\")), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_8__[\"default\"], {\n container: true,\n spacing: 0,\n pt: 5,\n direction: \"column\",\n alignItems: \"center\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_8__[\"default\"], {\n item: true,\n xs: 12\n }, svg.loaded ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_components_p8p_svg__WEBPACK_IMPORTED_MODULE_1__.P8PSVG, {\n data: svg.data,\n items: svg[svg.mode],\n onClick: handleSVGItemClick,\n style: STYLES.SVG\n }) : null)));\n};\n\n//Контроль свойств - Пример: Интерактивные изображения \"P8PSVG\"\nSvg.propTypes = {\n title: (prop_types__WEBPACK_IMPORTED_MODULE_9___default().string).isRequired\n};\n\n//----------------\n//Интерфейс модуля\n//----------------\n\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/panels/samples/svg.js?"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ Svg: () => (/* binding */ Svg)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! prop-types */ \"./node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_9___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_9__);\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Typography/Typography.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/FormControl/FormControl.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/FormLabel/FormLabel.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/RadioGroup/RadioGroup.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/FormControlLabel/FormControlLabel.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Radio/Radio.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Grid/Grid.js\");\n/* harmony import */ var _components_p8p_svg__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../components/p8p_svg */ \"./app/components/p8p_svg.js\");\n/*\r\n Парус 8 - Панели мониторинга - Примеры для разработчиков\r\n Пример: Интерактивные изображения \"P8PSVG\"\r\n*/\n\n//---------------------\n//Подключение библиотек\n//---------------------\n\n //Классы React\n //Контроль свойств компонента\n //Интерфейсные элементы\n //Интерактивные изображения\n\n//---------\n//Константы\n//---------\n\n//Адрес тестового изображения\nconst SAMPLE_URL = \"img/sample.svg\";\n\n//Стили\nconst STYLES = {\n CONTAINER: {\n textAlign: \"center\",\n paddingTop: \"20px\"\n },\n TITLE: {\n paddingBottom: \"15px\"\n },\n FORM: {\n justifyContent: \"center\",\n alignItems: \"center\"\n },\n SVG: {\n width: \"95vw\",\n height: \"30vw\",\n display: \"flex\",\n justifyContent: \"center\"\n }\n};\n\n//-----------\n//Тело модуля\n//-----------\n\n//Пример: Интерактивные изображения \"P8PSVG\"\nconst Svg = ({\n title\n}) => {\n //Собственное состояние - SVG-изображение\n const [svg, setSVG] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({\n loaded: false,\n data: null,\n mode: \"items1\",\n items1: [{\n id: \"1\",\n backgroundColor: \"red\",\n desc: \"Цифра на флюзеляже\",\n title: \"Цифра на флюзеляже\"\n }, {\n id: \"2\",\n backgroundColor: \"magenta\",\n desc: \"Ребро флюзеляжа\",\n title: \"Ребро флюзеляжа\"\n }, {\n id: \"3\",\n backgroundColor: \"yellow\",\n desc: \"Люк\",\n title: \"Люк\"\n }],\n items2: [{\n id: \"4\",\n backgroundColor: \"green\",\n desc: \"Хвост\",\n title: \"Хвост\"\n }, {\n id: \"5\",\n backgroundColor: \"blue\",\n desc: \"Хвостовой руль\",\n title: \"Хвостовой руль\"\n }, {\n id: \"6\",\n backgroundColor: \"aquamarine\",\n desc: \"Ребро жесткости хвоста\",\n title: \"Ребро жесткости хвоста\"\n }],\n items3: [{\n id: \"7\",\n backgroundColor: \"blueviolet\",\n desc: \"Крыло левое\",\n title: \"Крыло левое\"\n }, {\n id: \"8\",\n backgroundColor: \"orange\",\n desc: \"Двигатель левый\",\n title: \"Двигатель левый\"\n }, {\n id: \"9\",\n backgroundColor: \"springgreen\",\n desc: \"Крыло правое\",\n title: \"Крыло правое\"\n }],\n selectedItemDesc: \"\"\n });\n\n //Загрузка изображения\n const loadSVG = async () => {\n const resp = await fetch(SAMPLE_URL);\n const data = await resp.text();\n setSVG(pv => ({\n ...pv,\n loaded: true,\n data\n }));\n };\n\n //Отработка нажатия на изображение\n const handleSVGClick = () => {\n setSVG(pv => ({\n ...pv,\n selectedItemDesc: \"Выбрано изображение целиком\"\n }));\n };\n\n //Отработка нажатия на элемент изображения\n const handleSVGItemClick = ({\n item\n }) => {\n setSVG(pv => ({\n ...pv,\n selectedItemDesc: item?.desc ? `Выбран элемент: ${item.desc}` : \"Для выбранного элемента не задано описание\"\n }));\n };\n\n //При подключении к странице\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n loadSVG();\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n //Генерация содержимого\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n style: STYLES.CONTAINER\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n sx: STYLES.TITLE,\n variant: \"h6\"\n }, title), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n sx: STYLES.FORM\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_4__[\"default\"], null, \"\\u0413\\u0440\\u0443\\u043F\\u043F\\u0430 \\u044D\\u043B\\u0435\\u043C\\u0435\\u043D\\u0442\\u043E\\u0432\"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_5__[\"default\"], {\n row: true,\n value: svg.mode,\n onChange: e => setSVG(pv => ({\n ...pv,\n mode: e.target.value,\n selectedItemDesc: \"\"\n }))\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n value: \"items1\",\n control: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_7__[\"default\"], null),\n label: \"\\u041F\\u0435\\u0440\\u0432\\u0430\\u044F\"\n }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n value: \"items2\",\n control: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_7__[\"default\"], null),\n label: \"\\u0412\\u0442\\u043E\\u0440\\u0430\\u044F\"\n }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n value: \"items3\",\n control: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_7__[\"default\"], null),\n label: \"\\u0422\\u0440\\u0435\\u0442\\u044C\\u044F\"\n })), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_4__[\"default\"], null, svg.selectedItemDesc ? svg.selectedItemDesc : \"Нажмите на элемент изображения для получения его описания\")), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_8__[\"default\"], {\n container: true,\n spacing: 0,\n pt: 5,\n direction: \"column\",\n alignItems: \"center\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_8__[\"default\"], {\n item: true,\n xs: 12\n }, svg.loaded ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_components_p8p_svg__WEBPACK_IMPORTED_MODULE_1__.P8PSVG, {\n data: svg.data,\n items: svg[svg.mode],\n onClick: handleSVGClick,\n onItemClick: handleSVGItemClick,\n canvasStyle: STYLES.SVG\n }) : null)));\n};\n\n//Контроль свойств - Пример: Интерактивные изображения \"P8PSVG\"\nSvg.propTypes = {\n title: (prop_types__WEBPACK_IMPORTED_MODULE_9___default().string).isRequired\n};\n\n//----------------\n//Интерфейс модуля\n//----------------\n\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/panels/samples/svg.js?"); /***/ }), From c61b8cc9c29d5884535ca8e2b312747ead1e0b18 Mon Sep 17 00:00:00 2001 From: Mikhail Chechnev Date: Sat, 18 May 2024 00:38:48 +0300 Subject: [PATCH 40/76] =?UTF-8?q?WEB=20APP:=20=D0=A3=D0=B4=D0=B0=D0=BB?= =?UTF-8?q?=D0=B5=D0=BD=D0=B0=20=D0=BB=D0=B8=D1=88=D0=BD=D1=8F=D1=8F=20?= =?UTF-8?q?=D0=BA=D0=BE=D0=BD=D1=81=D0=BE=D0=BB=D1=8C=D0=BD=D0=B0=D1=8F=20?= =?UTF-8?q?=D0=B2=D1=8B=D0=B4=D0=B0=D1=87=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../mech_rec_cost_jobs_manage/mech_rec_cost_jobs_manage.js | 1 - app/panels/mech_rec_dept_cost_prod_plans/fcroutlst.js | 1 - 2 files changed, 2 deletions(-) diff --git a/app/panels/mech_rec_cost_jobs_manage/mech_rec_cost_jobs_manage.js b/app/panels/mech_rec_cost_jobs_manage/mech_rec_cost_jobs_manage.js index 84ffc8b..d2d2e84 100644 --- a/app/panels/mech_rec_cost_jobs_manage/mech_rec_cost_jobs_manage.js +++ b/app/panels/mech_rec_cost_jobs_manage/mech_rec_cost_jobs_manage.js @@ -131,7 +131,6 @@ const MechRecCostJobs = () => { //Очистка селектлиста по идентификатору процесса const clearSelectlist = useCallback( async NIDENT => { - console.log(NIDENT); try { await executeStored({ stored: "P_SELECTLIST_CLEAR", diff --git a/app/panels/mech_rec_dept_cost_prod_plans/fcroutlst.js b/app/panels/mech_rec_dept_cost_prod_plans/fcroutlst.js index d97a60a..0a96738 100644 --- a/app/panels/mech_rec_dept_cost_prod_plans/fcroutlst.js +++ b/app/panels/mech_rec_dept_cost_prod_plans/fcroutlst.js @@ -203,7 +203,6 @@ const CostRouteListsDataGrid = ({ task }) => { //Изменение заказа const setEditOrderValue = value => { - console.log(value); setCostRouteLists(pv => ({ ...pv, editOrderValue: value })); }; From 46d078219f8a0c9ae03592ffa66df9d76daac95b Mon Sep 17 00:00:00 2001 From: Mikhail Chechnev Date: Sat, 18 May 2024 00:41:42 +0300 Subject: [PATCH 41/76] =?UTF-8?q?WEB=20APP:=20P8PSVG=20-=20=D0=BF=D0=BE?= =?UTF-8?q?=D0=B4=D0=B4=D0=B5=D1=80=D0=B6=D0=BA=D0=B0=20=D0=B3=D1=80=D1=83?= =?UTF-8?q?=D0=BF=D0=BF,=20=D0=BF=D1=80=D0=BE=D0=B7=D1=80=D0=B0=D1=87?= =?UTF-8?q?=D0=BD=D0=BE=D1=81=D1=82=D0=B8=20=D0=B7=D0=B0=D0=BB=D0=B8=D0=B2?= =?UTF-8?q?=D0=BA=D0=B8,=20=D0=B2=D0=B5=D1=80=D1=81=D1=82=D0=BA=D0=B0=20?= =?UTF-8?q?=D0=BD=D0=B0=20Grid=D0=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/components/p8p_svg.js | 82 +++++++++++++++++++++++++++------------ app/panels/samples/svg.js | 2 +- 2 files changed, 58 insertions(+), 26 deletions(-) diff --git a/app/components/p8p_svg.js b/app/components/p8p_svg.js index 822ce73..fb426b6 100644 --- a/app/components/p8p_svg.js +++ b/app/components/p8p_svg.js @@ -8,7 +8,7 @@ //--------------------- import React, { useEffect, useRef, useState } from "react"; //Классы React -import { IconButton, Icon } from "@mui/material"; //Интерфейсные элементы +import { IconButton, Icon, Container, Grid } from "@mui/material"; //Интерфейсные элементы import PropTypes from "prop-types"; //Контроль свойств компонента //--------- @@ -17,13 +17,13 @@ import PropTypes from "prop-types"; //Контроль свойств компо //Стили const STYLES = { - CANVAS: { width: "100%", height: "100%" }, + GRID_ITEM_CANVAS: { width: "100%", height: "100%" }, CONTROLS: { justifyContent: "center", alignItems: "center", display: "flex" } }; //Структура элемента изображения const P8P_SVG_ITEM_SHAPE = PropTypes.shape({ - id: PropTypes.string.isRequired, + id: PropTypes.oneOfType([PropTypes.string, PropTypes.number]).isRequired, backgroundColor: PropTypes.oneOfType([PropTypes.string, PropTypes.arrayOf(PropTypes.string)]) }); @@ -32,7 +32,7 @@ const P8P_SVG_ITEM_SHAPE = PropTypes.shape({ //----------- //Интерактивные изображения SVG -const P8PSVG = ({ data, items, onClick, onItemClick, canvasStyle }) => { +const P8PSVG = ({ data, items, onClick, onItemClick, canvasStyle, fillOpacity }) => { //Собственное состояние const [state, setState] = useState({ images: [], @@ -47,8 +47,8 @@ const P8PSVG = ({ data, items, onClick, onItemClick, canvasStyle }) => { //Обработка нажатия на элемент изображения const handleClick = e => { let itemClickFired = false; - if (e.target.id && items && onItemClick) { - const item = items.find(item => item.id == e.target.id); + if (items && onItemClick) { + const item = items.find(item => item.id == e.target?.id || item.id == e.target?.parentElement?.id); if (item) { onItemClick({ item }); itemClickFired = true; @@ -62,11 +62,36 @@ const P8PSVG = ({ data, items, onClick, onItemClick, canvasStyle }) => { items.forEach(item => { const svgE = document.getElementById(item.id); if (svgE) { - svgE.setAttribute("style", `${onItemClick ? "cursor: pointer" : ""}; ${item.backgroundColor ? `fill: ${item.backgroundColor}` : ""}`); + //Запомним старый стиль элемента + let styleOld = svgE.getAttribute("style") || ""; + if (styleOld && !styleOld.endsWith(";")) styleOld = `${styleOld};`; + //Сформируем стиль для заливки + let fillStyle = ""; + if (item.backgroundColor) fillStyle = `fill: ${item.backgroundColor}; ${fillOpacity ? `opacity: ${fillOpacity};` : ""}`; + //Сформируем стиль для курсора + let cursorStyle = ""; + if (onItemClick) cursorStyle = "cursor: pointer;"; + //Добавим элемент для всплывающей подсказки + let titleE = null; if (item?.title) { - const titleE = document.createElementNS("http://www.w3.org/2000/svg", "title"); + titleE = document.createElementNS("http://www.w3.org/2000/svg", "title"); titleE.textContent = item.title; - svgE.replaceChildren(titleE); + svgE.appendChild(titleE); + } + //Если нем попалась группа + if (svgE.tagName == "g") { + //Установим ей новые стили + svgE.setAttribute("style", `${styleOld}${cursorStyle}`); + //И заливку всем дочерним элементам + if (fillStyle) + for (const child of svgE.children) { + let childStyleOld = child.getAttribute("style") || ""; + if (childStyleOld && !childStyleOld.endsWith(";")) childStyleOld = `${childStyleOld};`; + child.setAttribute("style", `${childStyleOld}${fillStyle}`); + } + } else { + //Это простой элемент, не группа - просто выставляем стили + svgE.setAttribute("style", `${styleOld}${cursorStyle}${fillStyle}`); } } }); @@ -121,26 +146,32 @@ const P8PSVG = ({ data, items, onClick, onItemClick, canvasStyle }) => { }, [state.images, state.currentImage, items]); //При прокрутке изображений назад - const handlePrevClick = () => switchImage(-1); + const handlePrevClick = () => switchImage(1); //При прокрутке изображений вперёд - const handleNextClick = () => switchImage(1); + const handleNextClick = () => switchImage(-1); //Генерация содержимого return ( -
-
- {state.imagesCount > 1 ? ( -
- - arrow_left - - - arrow_right - -
- ) : null} -
+ + + +
+
+ {state.imagesCount > 1 ? ( + +
+ + arrow_left + + + arrow_right + +
+
+ ) : null} +
+
); }; @@ -150,7 +181,8 @@ P8PSVG.propTypes = { items: PropTypes.arrayOf(P8P_SVG_ITEM_SHAPE), onClick: PropTypes.func, onItemClick: PropTypes.func, - canvasStyle: PropTypes.object + canvasStyle: PropTypes.object, + fillOpacity: PropTypes.string }; //---------------- diff --git a/app/panels/samples/svg.js b/app/panels/samples/svg.js index 85455ba..efee4b5 100644 --- a/app/panels/samples/svg.js +++ b/app/panels/samples/svg.js @@ -24,7 +24,7 @@ const STYLES = { CONTAINER: { textAlign: "center", paddingTop: "20px" }, TITLE: { paddingBottom: "15px" }, FORM: { justifyContent: "center", alignItems: "center" }, - SVG: { width: "95vw", height: "30vw", display: "flex", justifyContent: "center" } + SVG: { height: "30vw", display: "flex", justifyContent: "center" } }; //----------- From dea0f3643de4ec7fda328b8f011f5f9dc26cb9f8 Mon Sep 17 00:00:00 2001 From: Mikhail Chechnev Date: Sat, 18 May 2024 00:52:43 +0300 Subject: [PATCH 42/76] =?UTF-8?q?WEB=20APP:=20=D0=A6=D0=98=D0=A2=D0=9A-841?= =?UTF-8?q?=20=D0=BF=D0=B0=D0=BD=D0=B5=D0=BB=D1=8C=20"=D0=9C=D0=BE=D0=BD?= =?UTF-8?q?=D0=B8=D1=82=D0=BE=D1=80=D0=B8=D0=BD=D0=B3=20=D1=81=D0=B1=D0=BE?= =?UTF-8?q?=D1=80=D0=BA=D0=B8=20=D0=B8=D0=B7=D0=B4=D0=B5=D0=BB=D0=B8=D0=B9?= =?UTF-8?q?"=20-=20=D0=B4=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB=D0=B5=D0=BD=D0=B0?= =?UTF-8?q?=20SVG-=D0=BC=D0=BE=D0=B4=D0=B5=D0=BB=D1=8C=20=D0=B8=20=D0=BF?= =?UTF-8?q?=D1=80=D0=BE=D0=B2=D0=B5=D0=B4=D1=91=D0=BD=20=D0=BF=D0=B5=D1=80?= =?UTF-8?q?=D0=B2=D1=8B=D0=B9=20=D1=8D=D1=82=D0=B0=D0=BF=20=D1=80=D0=B5?= =?UTF-8?q?=D1=84=D0=B0=D0=BA=D1=82=D0=BE=D1=80=D0=B8=D0=BD=D0=B3=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/panels/mech_rec_assembly_mon/backend.js | 233 +++---------- .../mech_rec_assembly_mon/blocks/cardBlock.js | 102 ------ .../blocks/cardDetail.js | 289 ---------------- .../components/plan_detail.js | 324 ++++++++++++++++++ .../components/plans_list.js | 83 +++++ .../components/plans_list_item.js | 108 ++++++ .../components/progress_box.js | 75 ++++ .../elements/progressBox.js | 76 ---- .../mech_rec_assembly_mon.js | 100 +++--- .../mech_rec_assembly_mon/styles/themes.js | 1 + 10 files changed, 689 insertions(+), 702 deletions(-) delete mode 100644 app/panels/mech_rec_assembly_mon/blocks/cardBlock.js delete mode 100644 app/panels/mech_rec_assembly_mon/blocks/cardDetail.js create mode 100644 app/panels/mech_rec_assembly_mon/components/plan_detail.js create mode 100644 app/panels/mech_rec_assembly_mon/components/plans_list.js create mode 100644 app/panels/mech_rec_assembly_mon/components/plans_list_item.js create mode 100644 app/panels/mech_rec_assembly_mon/components/progress_box.js delete mode 100644 app/panels/mech_rec_assembly_mon/elements/progressBox.js diff --git a/app/panels/mech_rec_assembly_mon/backend.js b/app/panels/mech_rec_assembly_mon/backend.js index 59f1cda..7264b6b 100644 --- a/app/panels/mech_rec_assembly_mon/backend.js +++ b/app/panels/mech_rec_assembly_mon/backend.js @@ -11,7 +11,7 @@ import { object2Base64XML } from "../../core/utils"; //Вспомогатель //--------- //Размер страницы данных -const DATA_GRID_PAGE_SIZE = 10; +const DATA_GRID_PAGE_SIZE = 0; //----------- //Тело модуля @@ -25,10 +25,10 @@ const useMechRecAssemblyMon = () => { showPlanList: false, planCtlgs: [], planCtlgsLoaded: false, - selectedPlanCtlg: { NRN: null, SNAME: null, NMIN_YEAR: null, NMAX_YEAR: null }, + selectedPlanCtlg: {}, plans: [], plansLoaded: false, - selectedPlan: { NRN: null, SNUMB: null, NPROGRESS: null, SDETAIL: null, NYEAR: null } + selectedPlan: {} }); //Подключение к контексту взаимодействия с сервером @@ -66,19 +66,21 @@ const useMechRecAssemblyMon = () => { ); //Выбор каталога планов - const selectPlan = project => { + const selectPlanCtlg = planCtlg => { setState(pv => ({ ...pv, - selectedPlanCtlg: project, + selectedPlanCtlg: { ...planCtlg }, + selectedPlan: {}, showPlanList: false })); }; //Сброс выбора каталога планов - const unselectPlan = () => + const unselectPlanCtlg = () => setState(pv => ({ ...pv, - selectedPlanCtlg: { NRN: null, SNAME: null, NMIN_YEAR: null, NMAX_YEAR: null }, + selectedPlanCtlg: {}, + selectedPlan: {}, showPlanList: false })); @@ -99,7 +101,7 @@ const useMechRecAssemblyMon = () => { // eslint-disable-next-line react-hooks/exhaustive-deps }, [state.selectedPlanCtlg]); - return [state, setState, selectPlan, unselectPlan]; + return [state, setState, selectPlanCtlg, unselectPlanCtlg]; }; //Хук для информации по производственным составам @@ -109,6 +111,8 @@ const useCostProductComposition = nProdPlan => { init: false, showPlanList: false, products: [], + productsLoaded: false, + model: null, selectedProduct: null }); @@ -124,7 +128,13 @@ const useCostProductComposition = nProdPlan => { respArg: "COUT", isArray: name => name === "XFCPRODCMP" }); - setCostProductComposition(pv => ({ ...pv, init: true, products: [...(data?.XFCPRODCMP || [])], productsLoaded: true })); + setCostProductComposition(pv => ({ + ...pv, + init: true, + products: [...(data?.XFCPRODCMP || [])], + productsLoaded: true, + model: data?.BMODEL + })); } // eslint-disable-next-line react-hooks/exhaustive-deps }, [costProductComposition.init, executeStored]); @@ -138,204 +148,53 @@ const useCostProductComposition = nProdPlan => { return [costProductComposition, setCostProductComposition]; }; -//Хук для таблицы маршрутных листов -const useCostRouteLists = (plan, product) => { +//Хук для таблицы детализации изделия +const useProductDetailsTable = (plan, product, orders, pageNumber, stored) => { + //Собственное состояние - флаг загрузки + const [isLoading, setLoading] = useState(true); + //Собственное состояние - таблица данных - const [costRouteLists, setCostRouteLists] = useState({ - dataLoaded: false, + const [data, setData] = useState({ columnsDef: [], - orders: null, rows: [], - reload: true, - pageNumber: 1, - morePages: true, - selectedProduct: null + morePages: true }); //Подключение к контексту взаимодействия с сервером const { executeStored, SERV_DATA_TYPE_CLOB } = useContext(BackEndСtx); - //Загрузка данных таблицы с сервера - const loadData = useCallback( - async () => { - if (costRouteLists.reload) { + //Загрузка данных при изменении зависимостей + useEffect(() => { + const loadData = async () => { + try { + setLoading(true); const data = await executeStored({ - stored: "PKG_P8PANELS_MECHREC.FCROUTLST_MON_DG_GET", + stored, args: { NPRODCMPSP: product, NFCPRODPLAN: plan, - CORDERS: { VALUE: object2Base64XML(costRouteLists.orders, { arrayNodeName: "orders" }), SDATA_TYPE: SERV_DATA_TYPE_CLOB }, - NPAGE_NUMBER: costRouteLists.pageNumber, + CORDERS: { VALUE: object2Base64XML(orders, { arrayNodeName: "orders" }), SDATA_TYPE: SERV_DATA_TYPE_CLOB }, + NPAGE_NUMBER: pageNumber, NPAGE_SIZE: DATA_GRID_PAGE_SIZE, - NINCLUDE_DEF: costRouteLists.dataLoaded ? 0 : 1 + NINCLUDE_DEF: 1 }, respArg: "COUT" }); - setCostRouteLists(pv => ({ + setData(pv => ({ ...pv, columnsDef: data.XCOLUMNS_DEF ? [...data.XCOLUMNS_DEF] : pv.columnsDef, - rows: pv.pageNumber == 1 ? [...(data.XROWS || [])] : [...pv.rows, ...(data.XROWS || [])], - dataLoaded: true, - reload: false, - morePages: (data.XROWS || []).length >= DATA_GRID_PAGE_SIZE + rows: pageNumber == 1 ? [...(data.XROWS || [])] : [...pv.rows, ...(data.XROWS || [])], + morePages: DATA_GRID_PAGE_SIZE == 0 ? false : (data.XROWS || []).length >= DATA_GRID_PAGE_SIZE })); + } finally { + setLoading(false); } - }, - // eslint-disable-next-line react-hooks/exhaustive-deps - [costRouteLists.reload, costRouteLists.orders, costRouteLists.dataLoaded, costRouteLists.pageNumber, executeStored, SERV_DATA_TYPE_CLOB] - ); + }; + if (plan && product) loadData(); + }, [plan, product, orders, pageNumber, stored, executeStored, SERV_DATA_TYPE_CLOB]); - //При изменении продукта - useEffect(() => { - //Если продукт указан - if (product) { - //Принудительно обновляем состояние - setCostRouteLists(pv => ({ - ...pv, - dataLoaded: false, - columnsDef: [], - orders: null, - rows: [], - reload: true, - pageNumber: 1, - morePages: true, - selectedProduct: null - })); - //Загружаем данные с учетом выбранного продукта - loadData(); - } - // eslint-disable-next-line react-hooks/exhaustive-deps - }, [product]); - - //При необходимости обновить данные таблицы - useEffect(() => { - //Если продукт указан и необходимо стандартное обновление - if (product) { - loadData(); - } - // eslint-disable-next-line react-hooks/exhaustive-deps - }, [costRouteLists.reload, loadData]); - - //При изменении плана - useEffect(() => { - setCostRouteLists(pv => ({ - ...pv, - dataLoaded: false, - columnsDef: [], - orders: null, - rows: [], - reload: true, - pageNumber: 1, - morePages: true, - selectedProduct: null - })); - // eslint-disable-next-line react-hooks/exhaustive-deps - }, [plan]); - - return [costRouteLists, setCostRouteLists]; + //Вернём данные + return { data, isLoading }; }; -//Хук для таблицы комплектовочных ведомостей -const useCostDeliverySheets = (plan, product) => { - //Собственное состояние - таблица данных - const [costDeliverySheets, setCostDeliverySheets] = useState({ - dataLoaded: false, - columnsDef: [], - orders: null, - rows: [], - reload: true, - pageNumber: 1, - morePages: true, - selectedProduct: null - }); - - //Подключение к контексту взаимодействия с сервером - const { executeStored, SERV_DATA_TYPE_CLOB } = useContext(BackEndСtx); - - //Загрузка данных таблицы с сервера - const loadData = useCallback( - async () => { - if (costDeliverySheets.reload) { - const data = await executeStored({ - stored: "PKG_P8PANELS_MECHREC.FCDELIVSH_DG_GET", - args: { - NPRODCMPSP: product, - NFCPRODPLAN: plan, - CORDERS: { VALUE: object2Base64XML(costDeliverySheets.orders, { arrayNodeName: "orders" }), SDATA_TYPE: SERV_DATA_TYPE_CLOB }, - NPAGE_NUMBER: costDeliverySheets.pageNumber, - NPAGE_SIZE: DATA_GRID_PAGE_SIZE, - NINCLUDE_DEF: costDeliverySheets.dataLoaded ? 0 : 1 - }, - respArg: "COUT" - }); - setCostDeliverySheets(pv => ({ - ...pv, - columnsDef: data.XCOLUMNS_DEF ? [...data.XCOLUMNS_DEF] : pv.columnsDef, - rows: pv.pageNumber == 1 ? [...(data.XROWS || [])] : [...pv.rows, ...(data.XROWS || [])], - dataLoaded: true, - reload: false, - morePages: (data.XROWS || []).length >= DATA_GRID_PAGE_SIZE - })); - } - }, - // eslint-disable-next-line react-hooks/exhaustive-deps - [ - costDeliverySheets.reload, - costDeliverySheets.orders, - costDeliverySheets.dataLoaded, - costDeliverySheets.pageNumber, - executeStored, - SERV_DATA_TYPE_CLOB - ] - ); - - //При изменении продукта - useEffect(() => { - //Если продукт указан - if (product) { - //Принудительно обновляем состояние - setCostDeliverySheets(pv => ({ - ...pv, - dataLoaded: false, - columnsDef: [], - orders: null, - rows: [], - reload: true, - pageNumber: 1, - morePages: true - })); - //Загружаем данные с учетом выбранного продукта - loadData(); - } - // eslint-disable-next-line react-hooks/exhaustive-deps - }, [product]); - - //При необходимости обновить данные таблицы - useEffect(() => { - //Если продукт указан и необходимо стандартное обновление - if (product) { - loadData(); - } - // eslint-disable-next-line react-hooks/exhaustive-deps - }, [costDeliverySheets.reload, loadData]); - - //При изменении плана - useEffect(() => { - setCostDeliverySheets(pv => ({ - ...pv, - dataLoaded: false, - columnsDef: [], - orders: null, - rows: [], - reload: true, - pageNumber: 1, - morePages: true, - selectedProduct: null - })); - // eslint-disable-next-line react-hooks/exhaustive-deps - }, [plan]); - - return [costDeliverySheets, setCostDeliverySheets]; -}; - -export { useMechRecAssemblyMon, useCostProductComposition, useCostRouteLists, useCostDeliverySheets }; +export { useMechRecAssemblyMon, useCostProductComposition, useProductDetailsTable }; diff --git a/app/panels/mech_rec_assembly_mon/blocks/cardBlock.js b/app/panels/mech_rec_assembly_mon/blocks/cardBlock.js deleted file mode 100644 index fc1d05d..0000000 --- a/app/panels/mech_rec_assembly_mon/blocks/cardBlock.js +++ /dev/null @@ -1,102 +0,0 @@ -/* - Парус 8 - Панели мониторинга - ПУП - Мониторинг сборки изделий - Панель мониторинга: Информация об объекте -*/ - -//--------------------- -//Подключение библиотек -//--------------------- - -import React from "react"; //Классы React -import PropTypes from "prop-types"; //Контроль свойств компонента -import { Typography, Box, ImageList, ImageListItem } from "@mui/material"; //Интерфейсные элементы -import { ProgressBox } from "../elements/progressBox"; //Блок информации по прогрессу объекта - -//--------- -//Константы -//--------- - -//Стили -const STYLES = { - PLAN_INFO: { - display: "flex", - justifyContent: "center", - alignItems: "center", - flexDirection: "column", - gap: "24px", - border: "1px solid", - borderRadius: "25px" - } -}; - -//------------------------------------ -//Вспомогательные функции и компоненты -//------------------------------------ - -//Картинка объекта -const CardImage = ({ card }) => { - return ( - - - - {"Image - {/* {"Image */} - - - - ); -}; - -//Контроль свойств - Заголовок первого уровня -CardImage.propTypes = { - card: PropTypes.object -}; - -//----------- -//Тело модуля -//----------- - -//Информация об объекте -const CardBlock = ({ card, handleCardClick }) => { - return ( - handleCardClick(card)}> - - - - Номер борта - - {card.SNUMB} - - - - - Год выпуска: - - - {card.NYEAR} - - - - ); -}; - -//Контроль свойств - Заголовок первого уровня -CardBlock.propTypes = { - card: PropTypes.object, - handleCardClick: PropTypes.func -}; - -//---------------- -//Интерфейс модуля -//---------------- - -export { CardBlock }; diff --git a/app/panels/mech_rec_assembly_mon/blocks/cardDetail.js b/app/panels/mech_rec_assembly_mon/blocks/cardDetail.js deleted file mode 100644 index 3304045..0000000 --- a/app/panels/mech_rec_assembly_mon/blocks/cardDetail.js +++ /dev/null @@ -1,289 +0,0 @@ -/* - Парус 8 - Панели мониторинга - ПУП - Мониторинг сборки изделий - Панель мониторинга: Детализация по объекту -*/ - -//--------------------- -//Подключение библиотек -//--------------------- - -import React from "react"; //Классы React -import PropTypes from "prop-types"; //Контроль свойств компонента -import { Box, Grid, Container, Button, Typography } from "@mui/material"; //Интерфейсные элементы -import { ProgressBox } from "../elements/progressBox"; //Блок информации по прогрессу объекта -import { P8PDataGrid, P8P_DATA_GRID_SIZE } from "../../../components/p8p_data_grid"; //Таблица данных -import { P8P_DATA_GRID_CONFIG_PROPS } from "../../../config_wrapper"; //Подключение компонентов к настройкам приложения -import { useCostProductComposition, useCostRouteLists, useCostDeliverySheets } from "../backend"; //Компоненты панели - -//--------- -//Константы -//--------- - -//Стили -const STYLES = { - TABLE_INFO_MAIN: { - display: "flex", - justifyContent: "center", - alignItems: "center", - flexDirection: "column", - border: "1px solid", - borderRadius: "25px", - height: "35vh" - }, - TABLE_INFO_SUB: { - margin: "21.6px 0px", - maxHeight: "100%", - overflow: "auto", - textAlign: "center", - width: "100%" - }, - DETAIL_INFO: { - display: "flex", - justifyContent: "space-around", - alignItems: "center", - border: "1px solid", - borderRadius: "25px", - height: "17vh" - }, - PRODUCT_SELECTOR: { - display: "flex", - justifyContent: "center", - alignItems: "center", - flexDirection: "column", - border: "1px solid", - borderRadius: "25px", - height: "53vh", - marginTop: "16px" - }, - PLAN_INFO_MAIN: { - display: "flex", - flexDirection: "column", - gap: "16px" - }, - PLAN_INFO_SUB: { - display: "flex", - justifyContent: "space-between", - width: "280px", - borderBottom: "1px solid" - } -}; - -//------------------------------------ -//Вспомогательные функции и компоненты -//------------------------------------ - -//Информация об объекте -const CardDetailInfo = ({ cardInfo }) => { - return ( - <> - - - - Номер борта: - - {cardInfo.SNUMB} - - - - Год выпуска: - - {cardInfo.NYEAR} - - - - - ); -}; - -//Контроль свойств - Информация об объекте -CardDetailInfo.propTypes = { - cardInfo: PropTypes.object -}; - -//Детали объекта -const CardSelector = ({ products, setCostProductComposition }) => { - //При выборе детали в SVG - const handleProductClick = product => { - setCostProductComposition(pv => ({ ...pv, selectedProduct: product })); - }; - - return ( - <> - - {products.map(el => ( - - ))} - - - ); -}; - -//Контроль свойств - Детали объекта -CardSelector.propTypes = { - products: PropTypes.array, - setCostProductComposition: PropTypes.func -}; - -//Генерация представления ячейки заголовка -const headCellRender = ({ columnDef }) => { - //Описываем общий стиль - let cellStyle = { padding: "2px 5px", fontSize: "12px", textAlign: "center", lineHeight: "1rem" }; - let stackProps = { justifyContent: "center" }; - //Дополнительные свойства - switch (columnDef.name) { - case "NREMN_LABOUR": - //Добавляем максимальную ширину - cellStyle = { ...cellStyle, maxWidth: "90px" }; - break; - case "NDEFICIT": - //Добавляем максимальную ширину - cellStyle = { ...cellStyle, maxWidth: "55px" }; - break; - case "NAPPLICABILITY": - //Добавляем максимальную ширину - cellStyle = { ...cellStyle, maxWidth: "90px" }; - break; - default: - break; - } - return { - stackProps, - cellStyle - }; -}; - -//Генерация заливки строки исходя от значений -const dataCellRender = ({ row, columnDef }) => { - //Описываем общий стиль - let cellStyle = { padding: "2px 5px", fontSize: "12px" }; - //Для всех кроме содержания и номенклатуры добавляем выравнивание - switch (columnDef.name) { - case "SOPERATION": - break; - case "SNOMEN": - break; - default: - //Добавляем выравнивание - cellStyle = { ...cellStyle, textAlign: "center" }; - break; - } - return { - cellStyle, - data: row[columnDef] - }; -}; - -//----------- -//Тело модуля -//----------- - -//Детализация по объекту -const CardDetail = ({ card, handleBackClick }) => { - //Собственное состояние - данные производственных составов SVG - const [costProductComposition, setCostProductComposition] = useCostProductComposition(card.NRN); - //Собственное состояние - таблица данных маршрутных листов - const [costRouteLists, setCostRouteLists] = useCostRouteLists(card.NRN, costProductComposition.selectedProduct); - //Собственное состояние - таблица данных комплектовочных ведомостей - const [сostDeliverySheets, setСostDeliverySheets] = useCostDeliverySheets(card.NRN, costProductComposition.selectedProduct); - - //При изменении состояния сортировки маршрутных листов - const costRouteListsOrderChanged = ({ orders }) => setCostRouteLists(pv => ({ ...pv, orders: [...orders], pageNumber: 1, reload: true })); - - //При изменении количества отображаемых страниц маршрутных листов - const costRouteListsPagesCountChanged = () => setCostRouteLists(pv => ({ ...pv, pageNumber: pv.pageNumber + 1, reload: true })); - - //При изменении состояния сортировки комплектовочных ведомостей - const СostDeliverySheetsOrderChanged = ({ orders }) => setСostDeliverySheets(pv => ({ ...pv, orders: [...orders], pageNumber: 1, reload: true })); - - //При изменении количества отображаемых страниц комплектовочных ведомостей - const СostDeliverySheetsPagesCountChanged = () => setСostDeliverySheets(pv => ({ ...pv, pageNumber: pv.pageNumber + 1, reload: true })); - - return ( - - - - - - - {!costRouteLists.dataLoaded ? ( - Выберите агрегат самолёта, чтобы увидеть информацию - ) : costRouteLists.rows.length === 0 ? ( - Нет данных по МК - ) : ( - <> - Маршрутная карта - - - )} - - - - - {!сostDeliverySheets.dataLoaded ? ( - Выберите агрегат самолёта, чтобы увидеть информацию - ) : сostDeliverySheets.rows.length === 0 ? ( - Нет данных по КВ - ) : ( - <> - Дефицит по КВ - - - )} - - - - - - - - - - - - - - ); -}; - -//Контроль свойств - Детализация по объекту -CardDetail.propTypes = { - card: PropTypes.object, - handleBackClick: PropTypes.func -}; - -//---------------- -//Интерфейс модуля -//---------------- - -export { CardDetail }; diff --git a/app/panels/mech_rec_assembly_mon/components/plan_detail.js b/app/panels/mech_rec_assembly_mon/components/plan_detail.js new file mode 100644 index 0000000..7068b2a --- /dev/null +++ b/app/panels/mech_rec_assembly_mon/components/plan_detail.js @@ -0,0 +1,324 @@ +/* + Парус 8 - Панели мониторинга - ПУП - Мониторинг сборки изделий + Панель мониторинга: Детализация по объекту +*/ + +//--------------------- +//Подключение библиотек +//--------------------- + +import React, { useEffect, useState } from "react"; //Классы React +import PropTypes from "prop-types"; //Контроль свойств компонента +import { Box, Grid, Container, Button, Typography, Icon, Stack, IconButton } from "@mui/material"; //Интерфейсные элементы +import { P8PDataGrid, P8P_DATA_GRID_SIZE } from "../../../components/p8p_data_grid"; //Таблица данных +import { P8PSVG } from "../../../components/p8p_svg"; //Интерактивные изображения +import { P8P_DATA_GRID_CONFIG_PROPS } from "../../../config_wrapper"; //Подключение компонентов к настройкам приложения +import { useCostProductComposition, useProductDetailsTable } from "../backend"; //Взаимодействие с сервером +import { ProgressBox } from "./progress_box"; //Информация по прогрессу объекта + +//--------- +//Константы +//--------- + +//Стили +const STYLES = { + BOX_INFO_MAIN: { + border: "1px solid", + borderRadius: "25px", + height: "35vh" + }, + BOX_INFO_SUB: isMessage => ({ + overflow: "hidden", + textAlign: "center", + width: "100%", + height: "100%", + display: "flex", + flexDirection: "column", + justifyContent: isMessage ? "center" : "flex-start", + paddingLeft: "5px", + paddingRight: "5px", + ...(isMessage ? { padding: "5px" } : { paddingTop: "10px" }) + }), + DETAIL_INFO: { + display: "flex", + justifyContent: "space-around", + alignItems: "center", + border: "1px solid", + borderRadius: "25px", + height: "17vh" + }, + PRODUCT_SELECTOR_CONTAINER: { + display: "flex", + justifyContent: "center", + alignItems: "center", + flexDirection: "column", + border: "1px solid", + borderRadius: "25px", + height: "53vh", + marginTop: "16px" + }, + PRODUCT_SELECTOR_MODEL: { width: "70%" }, + PLAN_INFO_MAIN: { + display: "flex", + flexDirection: "column", + gap: "16px" + }, + PLAN_INFO_SUB: { + display: "flex", + justifyContent: "space-between", + width: "280px", + borderBottom: "1px solid" + }, + TABLE_DETAILS: { height: "260px" }, + TABLE_DETAILS_HEADER_CELL: maxWidth => ({ + padding: "2px 2px", + fontSize: "11px", + textAlign: "center", + lineHeight: "1rem", + ...(maxWidth ? { maxWidth } : {}) + }), + TABLE_DETAILS_DATA_CELL: textAlign => ({ padding: "2px 2px", fontSize: "11px", ...(textAlign ? { textAlign } : {}) }), + CARD_DETAILS_CONTAINER: { minWidth: "1200px", maxWidth: "1400px" }, + CARD_DETAILS_NAVIGATION_STACK: { width: "100%" } +}; + +//------------------------------------ +//Вспомогательные функции и компоненты +//------------------------------------ + +//Информация о плане +const PlanInfo = ({ plan }) => { + return ( + <> + + + + Номер борта: + + {plan.SNUMB} + + + + Год выпуска: + + {plan.NYEAR} + + + + + ); +}; + +//Контроль свойств - Информация о плане +PlanInfo.propTypes = { + plan: PropTypes.object +}; + +//Модель выпуска плана +const PlanProductCompositionModel = ({ model, products, setCostProductComposition }) => { + //При выборе детали на модели + const handleProductClick = ({ item }) => { + const product = products.find(p => p.SMODEL_ID == item.id); + if (product) setCostProductComposition(pv => ({ ...pv, selectedProduct: { ...product } })); + }; + + //Генерация содержимого + return ( + <> + + {model ? ( + ({ id: p.SMODEL_ID, backgroundColor: p.SMODEL_BG_COLOR || "red", desc: p.SNAME, title: p.SNAME }))} + fillOpacity={"0.3"} + onItemClick={handleProductClick} + /> + ) : ( + Модель изделия не загружена + )} + + + ); +}; + +//Контроль свойств - Модель выпуска плана +PlanProductCompositionModel.propTypes = { + model: PropTypes.any, + products: PropTypes.array, + setCostProductComposition: PropTypes.func +}; + +//Генерация представления ячейки заголовка +const headCellRender = ({ columnDef }) => ({ + stackProps: { justifyContent: "center" }, + cellStyle: STYLES.TABLE_DETAILS_HEADER_CELL( + ["NREMN_LABOUR", "NAPPLICABILITY"].includes(columnDef.name) ? "90px" : ["NDEFICIT"].includes(columnDef.name) ? "55px" : null + ) +}); + +//Генерация заливки строки исходя от значений +const dataCellRender = ({ row, columnDef }) => ({ + cellStyle: STYLES.TABLE_DETAILS_DATA_CELL(["SOPERATION", "SNOMEN"].includes(columnDef.name) ? null : "center"), + data: row[columnDef] +}); + +//Таблица детализации изделия +const ProductDetailsTable = ({ plan, product, stored, noProductMessage, noDataFoundMessage, title }) => { + //Собственное состояние + const [state, setState] = useState({ plan: null, product: null, orders: null, pageNumber: 1 }); + + //Собственное состояние - данные таблицы + const { data, isLoading } = useProductDetailsTable(state.plan, state.product, state.orders, state.pageNumber, stored); + + //При изменении состояния сортировки + const handleOrderChanged = ({ orders }) => setState(pv => ({ ...pv, orders: [...orders], pageNumber: 1 })); + + //При изменении количества отображаемых страниц + const handlePagesCountChanged = () => setState(pv => ({ ...pv, pageNumber: pv.pageNumber + 1 })); + + //При изменении изделия + useEffect(() => { + setState(pv => ({ ...pv, plan, product, orders: null, pageNumber: 1 })); + }, [product, plan]); + + //Генерация содержимого + return ( + + {!product ? ( + {noProductMessage} + ) : isLoading ? null : data.rows.length === 0 ? ( + {noDataFoundMessage} + ) : ( + <> + + {title} + + + + )} + + ); +}; + +//Контроль свойств - Таблица детализации изделия +ProductDetailsTable.propTypes = { + plan: PropTypes.number.isRequired, + product: PropTypes.number, + stored: PropTypes.string.isRequired, + noProductMessage: PropTypes.string.isRequired, + noDataFoundMessage: PropTypes.string.isRequired, + title: PropTypes.string.isRequired +}; + +//----------- +//Тело модуля +//----------- + +//Детализация по объекту +const PlanDetail = ({ plan, disableNavigatePrev = false, disableNavigateNext = false, onNavigate, onBack }) => { + //Собственное состояние - данные производственных составов SVG + const [costProductComposition, setCostProductComposition] = useCostProductComposition(plan.NRN); + + //Формируем представление + return ( + + + + + (onNavigate ? onNavigate(-1) : null)}> + navigate_before + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + (onNavigate ? onNavigate(1) : null)}> + navigate_next + + + + + + ); +}; + +//Контроль свойств - Детализация по объекту +PlanDetail.propTypes = { + plan: PropTypes.object, + disableNavigatePrev: PropTypes.bool, + disableNavigateNext: PropTypes.bool, + onNavigate: PropTypes.func, + onBack: PropTypes.func +}; + +//---------------- +//Интерфейс модуля +//---------------- + +export { PlanDetail }; diff --git a/app/panels/mech_rec_assembly_mon/components/plans_list.js b/app/panels/mech_rec_assembly_mon/components/plans_list.js new file mode 100644 index 0000000..7debec8 --- /dev/null +++ b/app/panels/mech_rec_assembly_mon/components/plans_list.js @@ -0,0 +1,83 @@ +/* + Парус 8 - Панели мониторинга - ПУП - Мониторинг сборки изделий + Компонент: Список планов +*/ + +//--------------------- +//Подключение библиотек +//--------------------- + +import React, { useState } from "react"; //Классы React +import { Container, Grid, IconButton, Icon } from "@mui/material"; //Интерфейсные элементы +import PropTypes from "prop-types"; //Контроль свойств компонента +import { PlansListItem } from "./plans_list_item"; //Элемент списка планов + +//--------- +//Константы +//--------- + +//Количество одновременно отображаемых элементов списка по умолчанию +const DEFAULT_PAGE_SIZE = 5; + +//Стили +const STYLES = { + PLAN_DOCUMENTS_LIST: { minWidth: "1024px" } +}; + +//----------- +//Тело модуля +//----------- + +//Список планов +const PlansList = ({ plans, pageSize = DEFAULT_PAGE_SIZE, onItemClick }) => { + //Состояние прокрутки списка отображаемых планов + const [scroll, setScroll] = useState(0); + + //Отработка нажатия на прокрутку списка планов влево + const handleScrollLeft = () => setScroll(pv => (pv <= 1 ? 0 : pv - 1)); + + //Отработка нажатия на прокрутку списка планов вправо + const handleScrollRight = () => setScroll(pv => (pv + pageSize >= plans.length ? pv : pv + 1)); + + //Сборка представления + return ( + + + + + navigate_before + + + {plans.map((el, i) => + i >= scroll && i < scroll + pageSize ? ( + + (onItemClick ? onItemClick(card, cardIndex) : null)} + /> + + ) : null + )} + + = plans.length}> + navigate_next + + + + + ); +}; + +//Контроль свойств - Список планов +PlansList.propTypes = { + plans: PropTypes.arrayOf(PropTypes.object), + pageSize: PropTypes.number, + onItemClick: PropTypes.func +}; + +//---------------- +//Интерфейс модуля +//---------------- + +export { PlansList }; diff --git a/app/panels/mech_rec_assembly_mon/components/plans_list_item.js b/app/panels/mech_rec_assembly_mon/components/plans_list_item.js new file mode 100644 index 0000000..d01e0be --- /dev/null +++ b/app/panels/mech_rec_assembly_mon/components/plans_list_item.js @@ -0,0 +1,108 @@ +/* + Парус 8 - Панели мониторинга - ПУП - Мониторинг сборки изделий + Компонент: Элемент списка планов +*/ + +//--------------------- +//Подключение библиотек +//--------------------- + +import React from "react"; //Классы React +import PropTypes from "prop-types"; //Контроль свойств компонента +import { Typography, Box, ImageList, ImageListItem, Icon } from "@mui/material"; //Интерфейсные элементы +import { ProgressBox } from "./progress_box"; //Информация по прогрессу объекта + +//--------- +//Константы +//--------- + +//Стили +const STYLES = { + CONTAINER: { + display: "flex", + justifyContent: "center", + alignItems: "center", + flexDirection: "column", + gap: "24px", + border: "1px solid", + borderRadius: "25px", + cursor: "pointer" + }, + IMAGE_BOX: { width: "180px", height: "180px", alignItems: "center", justifyContent: "center", display: "flex" }, + IMAGE_LIST_ITEM: { textAlign: "center" }, + IMAGE_IMG: { width: "160px" } +}; + +//------------------------------------ +//Вспомогательные функции и компоненты +//------------------------------------ + +//Изображение для элемента +const PlansListItemImage = ({ card }) => { + return ( + + + + {card["BIMAGE"] ? ( + + ) : ( + construction + )} + + + + ); +}; + +//Контроль свойств - Изображение для элемента +PlansListItemImage.propTypes = { + card: PropTypes.object +}; + +//----------- +//Тело модуля +//----------- + +//Элемент списка планов +const PlansListItem = ({ card, cardIndex, onClick }) => { + return ( + (onClick ? onClick(card, cardIndex) : null)}> + + + + Номер борта + + {card.SNUMB} + + + + + Год выпуска: + + + {card.NYEAR} + + + + ); +}; + +//Контроль свойств - Элемент списка планов +PlansListItem.propTypes = { + card: PropTypes.object, + cardIndex: PropTypes.number, + onClick: PropTypes.func +}; + +//---------------- +//Интерфейс модуля +//---------------- + +export { PlansListItem }; diff --git a/app/panels/mech_rec_assembly_mon/components/progress_box.js b/app/panels/mech_rec_assembly_mon/components/progress_box.js new file mode 100644 index 0000000..169ff90 --- /dev/null +++ b/app/panels/mech_rec_assembly_mon/components/progress_box.js @@ -0,0 +1,75 @@ +/* + Парус 8 - Панели мониторинга - ПУП - Мониторинг сборки изделий + Компонент: Информация по прогрессу объекта +*/ + +//--------------------- +//Подключение библиотек +//--------------------- + +import React from "react"; //Классы React +import PropTypes from "prop-types"; //Контроль свойств компонента +import { Typography, Box } from "@mui/material"; //Интерфейсные элементы + +//--------- +//Константы +//--------- + +//Стили +const STYLES = { + PROGRESS_BOX: (width, height) => ({ + display: "flex", + justifyContent: "center", + alignItems: "center", + flexDirection: "column", + margin: "0px 32px", + borderRadius: "50%", + ...(width ? { width } : {}), + ...(height ? { height } : {}) + }) +}; + +//----------- +//Тело модуля +//----------- + +//Информация по прогрессу объекта +const ProgressBox = ({ progress, detail, width, height, progressVariant, detailVariant }) => { + //Определяем цвет тени + let boxShadow = "0 0 30px #d3d3d3"; + switch (true) { + case progress >= 70: + boxShadow = "0 0 30px #21d21e66"; + break; + case progress >= 40: + boxShadow = "0 0 30px #fddd3566"; + break; + case progress >= 10: + boxShadow = "0 0 30px #ea5c4966"; + break; + } + + //Возвращаем содержимое + return ( + + {`${progress}%`} + {detail} + + ); +}; + +//Контроль свойств - Информация по прогрессу объекта +ProgressBox.propTypes = { + progress: PropTypes.number, + detail: PropTypes.string, + width: PropTypes.oneOfType([PropTypes.string, PropTypes.number]), + height: PropTypes.oneOfType([PropTypes.string, PropTypes.number]), + progressVariant: PropTypes.string, + detailVariant: PropTypes.string +}; + +//---------------- +//Интерфейс модуля +//---------------- + +export { ProgressBox }; diff --git a/app/panels/mech_rec_assembly_mon/elements/progressBox.js b/app/panels/mech_rec_assembly_mon/elements/progressBox.js deleted file mode 100644 index ea8b511..0000000 --- a/app/panels/mech_rec_assembly_mon/elements/progressBox.js +++ /dev/null @@ -1,76 +0,0 @@ -/* - Парус 8 - Панели мониторинга - ПУП - Мониторинг сборки изделий - Панель мониторинга: Блок информации по прогрессу объекта -*/ - -//--------------------- -//Подключение библиотек -//--------------------- - -import React from "react"; //Классы React -import PropTypes from "prop-types"; //Контроль свойств компонента -import { Typography, Box } from "@mui/material"; //Интерфейсные элементы - -//--------- -//Константы -//--------- - -//Стили -const STYLES = { - PROGRESS_INFO: { - display: "flex", - justifyContent: "center", - alignItems: "center", - flexDirection: "column", - margin: "0px 32px", - borderRadius: "50%" - } -}; - -//------------------------------------ -//Вспомогательные функции и компоненты -//------------------------------------ - -//----------- -//Тело модуля -//----------- - -//Детализация по объекту - -//Блок информации по прогрессу объекта -const ProgressBox = ({ prms }) => { - //Инициализируем цвет тени - let boxShadow = null; - //Определяем цвет тени - switch (true) { - case prms.NPROGRESS >= 70: - boxShadow = "0 0 30px #21d21e66"; - break; - case prms.NPROGRESS >= 40: - boxShadow = "0 0 30px #fddd3566"; - break; - case prms.NPROGRESS >= 10: - boxShadow = "0 0 30px #ea5c4966"; - break; - default: - boxShadow = "0 0 30px #d3d3d3"; - } - //Возвращаем блок - return ( - - {`${prms.NPROGRESS}%`} - {prms.SDETAIL} - - ); -}; - -//Контроль свойств - Блок информации по прогрессу объекта -ProgressBox.propTypes = { - prms: PropTypes.object -}; - -//---------------- -//Интерфейс модуля -//---------------- - -export { ProgressBox }; diff --git a/app/panels/mech_rec_assembly_mon/mech_rec_assembly_mon.js b/app/panels/mech_rec_assembly_mon/mech_rec_assembly_mon.js index 2d51675..18e560e 100644 --- a/app/panels/mech_rec_assembly_mon/mech_rec_assembly_mon.js +++ b/app/panels/mech_rec_assembly_mon/mech_rec_assembly_mon.js @@ -9,26 +9,12 @@ import React, { useState, useContext } from "react"; //Классы React import PropTypes from "prop-types"; //Контроль свойств компонента -import { - Drawer, - Fab, - Box, - List, - ListItemButton, - ListItemText, - Typography, - Grid, - TextField, - FormGroup, - FormControlLabel, - Checkbox, - Container -} from "@mui/material"; //Интерфейсные элементы +import { Drawer, Fab, Box, List, ListItemButton, ListItemText, Typography, TextField, FormGroup, FormControlLabel, Checkbox } from "@mui/material"; //Интерфейсные элементы import { ThemeProvider } from "@mui/material/styles"; //Подключение темы import { MessagingСtx } from "../../context/messaging"; //Контекст сообщений -import { CardBlock } from "./blocks/cardBlock"; //Информация об объекте -import { CardDetail } from "./blocks/cardDetail"; //Детализация по объекту -import { theme } from "./styles/themes.js"; //Стиль темы +import { PlansList } from "./components/plans_list"; //Список планов +import { PlanDetail } from "./components/plan_detail"; //Детали плана +import { theme } from "./styles/themes"; //Стиль темы import { useFilteredPlanCtlgs } from "./hooks"; //Вспомогательные хуки import { useMechRecAssemblyMon } from "./backend"; //Хук корневой панели мониторинга сборки изделий @@ -49,7 +35,8 @@ const STYLES = { display: "inline-block", flexShrink: 0, [`& .MuiDrawer-paper`]: { width: "350px", display: "inline-block", boxSizing: "border-box" } - } + }, + PLANS_LIST_BOX: { paddingTop: "20px" } }; //------------------------------------ @@ -131,11 +118,18 @@ PlanCtlgsList.propTypes = { //Корневая панель мониторинга сборки изделий const MechRecAssemblyMon = () => { //Собственное состояние - const [state, setState, selectPlan, unselectPlan] = useMechRecAssemblyMon(); + const [state, setState, selectPlanCtlg, unselectPlanCtlg] = useMechRecAssemblyMon(); - //Состояние для фильтра каталогов + //Состояние фильтра каталогов const [filter, setFilter] = useState({ ctlgName: "", haveDocs: false }); + //Состояние навигации по карточкам детализации + const [planDetailNavigation, setPlanDetailNavigation] = useState({ + disableNavigatePrev: false, + disableNavigateNext: false, + currentPlanIndex: 0 + }); + //Массив отфильтрованных каталогов const filteredPlanCtgls = useFilteredPlanCtlgs(state.planCtlgs, filter); @@ -143,24 +137,38 @@ const MechRecAssemblyMon = () => { const { InlineMsgInfo } = useContext(MessagingСtx); //Обработка нажатия на элемент в списке каталогов планов - const handleProjectClick = project => { - if (state.selectedPlanCtlg.NRN != project.NRN) selectPlan(project); - else unselectPlan(); + const handlePlanCtlgClick = planCtlg => { + if (state.selectedPlanCtlg.NRN != planCtlg.NRN) selectPlanCtlg(planCtlg); + else unselectPlanCtlg(); }; - //Обработка нажатия на карточку объекта - const handleCardClick = plan => { + //Перемещение к нужному плану + const navigateToPlan = planIndex => { + if (planIndex < 0) planIndex = 0; + if (planIndex > state.plans.length - 1) planIndex = state.plans.length - 1; setState(pv => ({ ...pv, - selectedPlan: { NRN: plan.NRN, SNUMB: plan.SNUMB, NPROGRESS: plan.NPROGRESS, SDETAIL: plan.SDETAIL, NYEAR: plan.NYEAR } + selectedPlan: { ...state.plans[planIndex] } + })); + setPlanDetailNavigation(pv => ({ + ...pv, + disableNavigatePrev: planIndex == 0 ? true : false, + disableNavigateNext: planIndex == state.plans.length - 1 ? true : false, + currentPlanIndex: planIndex })); }; + //Обработка нажатия на документ плана + const handlePlanClick = (plan, planIndex) => navigateToPlan(planIndex); + //Обработка нажатия на кнопку "Назад" - const handleBackClick = () => { - setState(pv => ({ ...pv, selectedPlan: { NRN: null, SNUMB: null, NPROGRESS: null, SDETAIL: null, NYEAR: null } })); + const handlePlanDetailBackClick = () => { + setState(pv => ({ ...pv, selectedPlan: {} })); }; + //Обработка навигации из карточки с деталями плана + const handlePlanDetailNavigateClick = direction => navigateToPlan(planDetailNavigation.currentPlanIndex + direction); + //Генерация содержимого return ( @@ -179,34 +187,30 @@ const MechRecAssemblyMon = () => { selectedPlanCtlg={state.selectedPlanCtlg.NRN} filter={filter} setFilter={setFilter} - onClick={handleProjectClick} + onClick={handlePlanCtlgClick} /> {state.init == true ? ( state.selectedPlanCtlg.NRN ? ( <> - - {`${state.selectedPlanCtlg.SNAME} на ${state.selectedPlanCtlg.NMIN_YEAR}г. - ${state.selectedPlanCtlg.NMAX_YEAR}г.`} + + {`${state.selectedPlanCtlg.SNAME} ${ + state.selectedPlanCtlg.NMIN_YEAR ? `с ${state.selectedPlanCtlg.NMIN_YEAR} г` : "" + } ${state.selectedPlanCtlg.NMAX_YEAR ? `по ${state.selectedPlanCtlg.NMAX_YEAR}` : ""}`} {state.plansLoaded == true ? ( state.selectedPlan.NRN ? ( - + ) : ( - - - {state.plans.map(el => ( - = 5 ? 2.4 : 12 / state.plans.length} - key={el.NRN} - display="flex" - justifyContent="center" - > - - - ))} - - + + + ) ) : null} diff --git a/app/panels/mech_rec_assembly_mon/styles/themes.js b/app/panels/mech_rec_assembly_mon/styles/themes.js index 37818ee..277aeae 100644 --- a/app/panels/mech_rec_assembly_mon/styles/themes.js +++ b/app/panels/mech_rec_assembly_mon/styles/themes.js @@ -4,6 +4,7 @@ import { createTheme } from "@mui/material/styles"; //Интерфейсные const theme = createTheme({ palette: { text: { + title: { fontColor: "rgba(0, 0, 0, 0.65)" }, secondary: { fontColor: "rgba(0, 0, 0, 0.298)" } } }, From e6ccf979a6ac5c419d0f5f8f9d60eb5fb5c5d01d Mon Sep 17 00:00:00 2001 From: Mikhail Chechnev Date: Sat, 18 May 2024 00:56:32 +0300 Subject: [PATCH 43/76] =?UTF-8?q?=D0=91=D0=94:=20=D0=9F=D0=B0=D0=BD=D0=B5?= =?UTF-8?q?=D0=BB=D1=8C=20"=D0=9C=D0=BE=D0=BD=D0=B8=D1=82=D0=BE=D1=80?= =?UTF-8?q?=D0=B8=D0=BD=D0=B3=20=D1=81=D0=B1=D0=BE=D1=80=D0=BA=D0=B8=20?= =?UTF-8?q?=D0=B8=D0=B7=D0=B4=D0=B5=D0=BB=D0=B8=D0=B9"=20-=20=D0=B8=D0=BD?= =?UTF-8?q?=D1=82=D0=B5=D0=B3=D1=80=D0=B0=D1=86=D0=B8=D1=8F=20SVG-=D0=BC?= =?UTF-8?q?=D0=BE=D0=B4=D0=B5=D0=BB=D0=B8,=20=D1=80=D0=B5=D1=84=D0=B0?= =?UTF-8?q?=D0=BA=D1=82=D0=BE=D1=80=D0=B8=D0=BD=D0=B3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- db/PKG_P8PANELS_MECHREC.pck | 223 +++++++++++++++++++++--------------- 1 file changed, 133 insertions(+), 90 deletions(-) diff --git a/db/PKG_P8PANELS_MECHREC.pck b/db/PKG_P8PANELS_MECHREC.pck index c9d2594..40313c9 100644 --- a/db/PKG_P8PANELS_MECHREC.pck +++ b/db/PKG_P8PANELS_MECHREC.pck @@ -230,7 +230,7 @@ create or replace package PKG_P8PANELS_MECHREC as ); /* Получение таблицы маршрутных листов, связанных с производственным составом */ - procedure FCROUTLST_MON_DG_GET + procedure FCROUTLST_DG_BY_PRDCMPSP_GET ( NPRODCMPSP in number, -- Рег. номер производственного состава NFCPRODPLAN in number, -- Рег. номер план @@ -242,7 +242,7 @@ create or replace package PKG_P8PANELS_MECHREC as ); /* Получение таблицы комплектовочных ведомостей, связанных с производственным составом */ - procedure FCDELIVSH_DG_GET + procedure FCDELIVSH_DG_BY_PRDCMPSP_GET ( NPRODCMPSP in number, -- Рег. номер производственного состава NFCPRODPLAN in number, -- Рег. номер план @@ -253,13 +253,6 @@ create or replace package PKG_P8PANELS_MECHREC as COUT out clob -- Сериализованная таблица данных ); - /* Считывание деталий для выбора SVG */ - procedure FCPRODCMP_DETAILS_GET - ( - NFCPRODPLAN in number, -- Рег. номер плана - COUT out clob -- Сериализованная таблица данных - ); - /* Получение таблицы записей "Планы и отчеты производства изделий" */ procedure FCPRODPLAN_GET ( @@ -273,6 +266,13 @@ create or replace package PKG_P8PANELS_MECHREC as COUT out clob -- Список каталогов раздела "Планы и отчеты производства изделий" ); + /* Считывание деталей производственного состава */ + procedure FCPRODCMP_DETAILS_GET + ( + NFCPRODPLAN in number, -- Рег. номер плана + COUT out clob -- Сериализованная таблица данных + ); + end PKG_P8PANELS_MECHREC; / create or replace package body PKG_P8PANELS_MECHREC as @@ -334,6 +334,14 @@ create or replace package body PKG_P8PANELS_MECHREC as /* Константы - дополнительные параметры */ SCOL_PATTERN_DATE constant PKG_STD.TSTRING := 'dd_mm_yyyy'; -- Паттерн для динамической колонки граф ("день_месяц_год") + + /* Константы - типовые присоединённые документы */ + SFLINKTYPE_PREVIEW constant PKG_STD.TSTRING := 'Предпросмотр'; -- Тип ПД для изображений предпросмотра + SFLINKTYPE_SVG_MODEL constant PKG_STD.TSTRING := 'Векторная модель'; -- Тип ПД для SVG-модели + + /* Константы - дополнительные свойства */ + SDP_MODEL_ID constant PKG_STD.TSTRING := 'ПУДП.MODEL_ID'; -- Идентификатор в SVG-модели + SDP_MODEL_BG_COLOR constant PKG_STD.TSTRING := 'ПУДП.MODEL_BG_COLOR'; -- Цвет заливки в SVG-модели /* Экземпляр дня загрузки цеха */ type TJOB_DAY is record @@ -5319,7 +5327,7 @@ create or replace package body PKG_P8PANELS_MECHREC as end FCPRODPLANSP_LINKED_GET; /* Получение таблицы маршрутных листов, связанных с производственным составом */ - procedure FCROUTLST_MON_DG_GET + procedure FCROUTLST_DG_BY_PRDCMPSP_GET ( NPRODCMPSP in number, -- Рег. номер производственного состава NFCPRODPLAN in number, -- Рег. номер план @@ -5378,7 +5386,7 @@ create or replace package body PKG_P8PANELS_MECHREC as SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_NUMB, BVISIBLE => true); /* Считываем рег. номер спецификации связанного плана */ - NFCPRODPLANSP := FCPRODPLANSP_LINKED_GET(NPRODCMPSP => NPRODCMPSP, NFCPRODPLAN => NFCPRODPLAN); + NFCPRODPLANSP := FCPRODPLANSP_LINKED_GET(NPRODCMPSP => NPRODCMPSP, NFCPRODPLAN => NFCPRODPLAN); /* Если спецификация считалась */ if (NFCPRODPLANSP is not null) then /* Инициализируем список маршрутных листов */ @@ -5400,11 +5408,11 @@ create or replace package body PKG_P8PANELS_MECHREC as PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' TRIM(SH.NUMB) SNUMB,'); PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' COALESCE(SH.OPER_UK, FT.NAME) SOPERATION,'); PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' (select I.CODE from INS_DEPARTMENT I where SF.SUBDIV = I.RN) SEXECUTOR,'); - PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' F_DICMUNTS_BASE_RECALC_QUANT(' || PKG_SQL_BUILD.WRAP_NUM(NVALUE => 0) || ','); - PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' :NCOMPANY,'); - PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' SF.MUNIT,'); - PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' SF.T_SHT_PLAN - SF.LABOUR_FACT,'); - PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' :NDICMUNTS_WD) NREMN_LABOUR'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' ROUND(F_DICMUNTS_BASE_RECALC_QUANT(' || PKG_SQL_BUILD.WRAP_NUM(NVALUE => 0) || ','); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' :NCOMPANY,'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' SF.MUNIT,'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' SF.T_SHT_PLAN - SF.LABOUR_FACT,'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' :NDICMUNTS_WD), 3) NREMN_LABOUR'); PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' from FCROUTLST F,'); PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' FCROUTLSTSP SF,'); PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' FCROUTSHTSP SH left outer join FCOPERTYPES FT on SH.OPER_TPS = FT.RN'); @@ -5482,10 +5490,10 @@ create or replace package body PKG_P8PANELS_MECHREC as /* Очищаем отмеченные маршрутные листы */ P_SELECTLIST_CLEAR(NIDENT => NFCROUTLST_IDENT); raise; - end FCROUTLST_MON_DG_GET; + end FCROUTLST_DG_BY_PRDCMPSP_GET; /* Получение таблицы комплектовочных ведомостей, связанных с производственным составом */ - procedure FCDELIVSH_DG_GET + procedure FCDELIVSH_DG_BY_PRDCMPSP_GET ( NPRODCMPSP in number, -- Рег. номер производственного состава NFCPRODPLAN in number, -- Рег. номер план @@ -5623,7 +5631,7 @@ create or replace package body PKG_P8PANELS_MECHREC as SNAME => 'SPROVIDER', ICURSOR => ICURSOR, NPOSITION => 5); - PKG_P8PANELS_VISUAL.TROW_ADD_CUR_COLS(RROW => RDG_ROW, + PKG_P8PANELS_VISUAL.TROW_ADD_CUR_COLN(RROW => RDG_ROW, SNAME => 'NDEFICIT', ICURSOR => ICURSOR, NPOSITION => 6); @@ -5638,77 +5646,44 @@ create or replace package body PKG_P8PANELS_MECHREC as end if; /* Сериализуем описание */ COUT := PKG_P8PANELS_VISUAL.TDATA_GRID_TO_XML(RDATA_GRID => RDG, NINCLUDE_DEF => NINCLUDE_DEF); - end FCDELIVSH_DG_GET; + end FCDELIVSH_DG_BY_PRDCMPSP_GET; - /* Считывание деталий для выбора SVG */ - procedure FCPRODCMP_DETAILS_GET + /* Получение изображения для записи "Планы и отчеты производства изделий" */ + function FCPRODPLAN_IMAGE_GET ( - NFCPRODPLAN in number, -- Рег. номер плана - COUT out clob -- Сериализованная таблица данных - ) + NRN in number, -- Рег. номер записи плана производства изделий + SFLINKTYPE in varchar2 -- Код типа присоединённого документа изображения (см. константы SFLINKTYPE_*) + ) return blob -- Данные считанного изображения (null - если ничего не найдено) is - NCOMPANY PKG_STD.TREF := GET_SESSION_COMPANY(); -- Организация сеанса - NDOC_PROP PKG_STD.TREF; -- Рег. номер свойства "ID" - NFCPRODPLANSP PKG_STD.TREF; -- Рег. номер связанной спецификации плана begin - /* Начинаем формирование XML */ - PKG_XFAST.PROLOGUE(ITYPE => PKG_XFAST.CONTENT_); - /* Считываем свойство документа */ - FIND_DOCS_PROPS_CODE_EX(NFLAG_SMART => 0, - NCOMPVERS => NCOMPANY, - SUNITCODE => 'CostProductCompositionSpec', - SPROPCODE => 'ID', - NRN => NDOC_PROP); - /* Открываем корень */ - PKG_XFAST.DOWN_NODE(SNAME => 'XDATA'); - /* Цикл по планам и отчетам производства изделий */ - for REC in (select S.RN NRN, - (select F.NAME from FCMATRESOURCE F where F.RN = S.MTR_RES) SNAME, - PV.NUM_VALUE NID - from FCPRODPLANSP T, - FCPRODCMPSP S, - DOCS_PROPS_VALS PV - where T.PRN = NFCPRODPLAN - and S.PRN = T.PRODCMP - and PV.DOCS_PROP_RN = NDOC_PROP - and PV.UNIT_RN = S.RN) + /* Найдем изображение */ + for IMG in (select M.BDATA + from FILELINKS M, + FILELINKSUNITS U, + FLINKTYPES FLT + where M.FILE_TYPE = FLT.RN + and FLT.CODE = SFLINKTYPE + and U.TABLE_PRN = NRN + and U.UNITCODE = 'CostProductPlans' + and M.RN = U.FILELINKS_PRN + and M.BDATA is not null + and ROWNUM = 1) loop - /* Получаем рег. номер связанной спецификации плана */ - NFCPRODPLANSP := FCPRODPLANSP_LINKED_GET(NPRODCMPSP => REC.NRN, NFCPRODPLAN => NFCPRODPLAN); - /* Открываем план */ - PKG_XFAST.DOWN_NODE(SNAME => 'XFCPRODCMP'); - /* Описываем план */ - PKG_XFAST.ATTR(SNAME => 'NRN', NVALUE => REC.NRN); - PKG_XFAST.ATTR(SNAME => 'SNAME', SVALUE => REC.SNAME); - PKG_XFAST.ATTR(SNAME => 'NID', NVALUE => REC.NID); - PKG_XFAST.ATTR(SNAME => 'NFCPRODPLANSP', NVALUE => NFCPRODPLANSP); - /* Закрываем план */ - PKG_XFAST.UP(); + /* Вернём его */ + return IMG.BDATA; end loop; - /* Закрываем корень */ - PKG_XFAST.UP(); - /* Сериализуем */ - COUT := PKG_XFAST.SERIALIZE_TO_CLOB(); - /* Завершаем формирование XML */ - PKG_XFAST.EPILOGUE(); - exception - when others then - /* Завершаем формирование XML */ - PKG_XFAST.EPILOGUE(); - /* Вернем ошибку */ - PKG_STATE.DIAGNOSTICS_STACKED(); - P_EXCEPTION(0, PKG_STATE.SQL_ERRM()); - end FCPRODCMP_DETAILS_GET; + /* Ничего не нашли */ + return null; + end FCPRODPLAN_IMAGE_GET; /* Получение таблицы записей "Планы и отчеты производства изделий" */ procedure FCPRODPLAN_GET ( - NCRN in number, -- Рег. номер каталога - COUT out clob -- Сериализованная таблица данных + NCRN in number, -- Рег. номер каталога + COUT out clob -- Сериализованная таблица данных ) is - NCOMPANY PKG_STD.TREF := GET_SESSION_COMPANY(); -- Организация сеанса - NPROGRESS PKG_STD.TNUMBER; -- Прогресс плана + NPROGRESS PKG_STD.TNUMBER; -- Прогресс плана /* Получение номера плана из примечания */ function NUMB_BY_NOTE_GET @@ -5718,7 +5693,7 @@ create or replace package body PKG_P8PANELS_MECHREC as is begin /* Возвращаем результат */ - return TRIM(SUBSTR(SNOTE, INSTR(SNOTE, '№')+1, length(SNOTE))); + return trim(SUBSTR(SNOTE, INSTR(SNOTE, '№') + 1, LENGTH(SNOTE))); end NUMB_BY_NOTE_GET; /* Получение детализации по прогрессу */ @@ -5753,16 +5728,7 @@ create or replace package body PKG_P8PANELS_MECHREC as P.NOTE SNOTE, D_YEAR(EN.STARTDATE) NYEAR, COALESCE(SUM(SP.LABOUR_FACT), 0) NLABOUR_FACT, - COALESCE(SUM(SP.LABOUR_NORM), 0) NLABOUR_NORM, - (select M.BDATA - from FILELINKS M, - FILELINKSUNITS U - where M.COMPANY = NCOMPANY - and U.TABLE_PRN = P.RN - and U.UNITCODE = 'CostProductPlans' - and M.RN = U.FILELINKS_PRN - and M.BDATA is not null - and rownum = 1) BIMAGE + COALESCE(SUM(SP.LABOUR_NORM), 0) NLABOUR_NORM from FCPRODPLAN P left outer join FCPRODPLANSP SP on P.RN = SP.PRN and ((SP.LABOUR_NORM is not null) or (SP.LABOUR_FACT is not null)), FINSTATE FS, ENPERIOD EN @@ -5813,7 +5779,9 @@ create or replace package body PKG_P8PANELS_MECHREC as PKG_XFAST.ATTR(SNAME => 'NPROGRESS', NVALUE => NPROGRESS); PKG_XFAST.ATTR(SNAME => 'SDETAIL', SVALUE => DETAIL_BY_PROGRESS_GET(NPROGRESS => NPROGRESS)); PKG_XFAST.ATTR(SNAME => 'NYEAR', NVALUE => REC.NYEAR); - PKG_XFAST.VALUE(lbVALUE => REC.BIMAGE); + PKG_XFAST.DOWN_NODE(SNAME => 'BIMAGE'); + PKG_XFAST.VALUE(LBVALUE => FCPRODPLAN_IMAGE_GET(NRN => REC.NRN, SFLINKTYPE => SFLINKTYPE_PREVIEW)); + PKG_XFAST.UP(); /* Закрываем план */ PKG_XFAST.UP(); end loop; @@ -5917,5 +5885,80 @@ create or replace package body PKG_P8PANELS_MECHREC as P_EXCEPTION(0, PKG_STATE.SQL_ERRM()); end FCPRODPLAN_CTLG_INIT; + /* Считывание деталей производственного состава */ + procedure FCPRODCMP_DETAILS_GET + ( + NFCPRODPLAN in number, -- Рег. номер плана + COUT out clob -- Сериализованная таблица данных + ) + is + NCOMPANY PKG_STD.TREF := GET_SESSION_COMPANY(); -- Организация сеанса + NDP_MODEL_ID PKG_STD.TREF; -- Рег. номер свойства "Идентификатор в SVG-модели" + NDP_MODEL_BG_COLOR PKG_STD.TREF; -- Рег. номер свойства "Цвет заливки в SVG-модели" + NFCPRODPLANSP PKG_STD.TREF; -- Рег. номер связанной спецификации плана + begin + /* Начинаем формирование XML */ + PKG_XFAST.PROLOGUE(ITYPE => PKG_XFAST.CONTENT_); + /* Считываем свойства детали для её позиционирования в модели */ + FIND_DOCS_PROPS_CODE_EX(NFLAG_SMART => 1, + NCOMPVERS => NCOMPANY, + SUNITCODE => 'CostProductCompositionSpec', + SPROPCODE => SDP_MODEL_ID, + NRN => NDP_MODEL_ID); + FIND_DOCS_PROPS_CODE_EX(NFLAG_SMART => 1, + NCOMPVERS => NCOMPANY, + SUNITCODE => 'CostProductCompositionSpec', + SPROPCODE => SDP_MODEL_BG_COLOR, + NRN => NDP_MODEL_BG_COLOR); + /* Открываем корень */ + PKG_XFAST.DOWN_NODE(SNAME => 'XDATA'); + /* Векторная модель */ + PKG_XFAST.DOWN_NODE(SNAME => 'BMODEL'); + PKG_XFAST.VALUE(LBVALUE => FCPRODPLAN_IMAGE_GET(NRN => NFCPRODPLAN, SFLINKTYPE => SFLINKTYPE_SVG_MODEL)); + PKG_XFAST.UP(); + /* Цикл по планам и отчетам производства изделий */ + for REC in (select S.RN NRN, + (select F.NAME from FCMATRESOURCE F where F.RN = S.MTR_RES) SNAME, + PV_MID.STR_VALUE SMODEL_ID, + (select PV_MFC.STR_VALUE + from DOCS_PROPS_VALS PV_MFC + where PV_MFC.UNIT_RN = S.RN + and PV_MFC.DOCS_PROP_RN = NDP_MODEL_BG_COLOR) SMODEL_BG_COLOR + from FCPRODPLANSP T, + FCPRODCMPSP S, + DOCS_PROPS_VALS PV_MID + where T.PRN = NFCPRODPLAN + and S.PRN = T.PRODCMP + and PV_MID.UNIT_RN = S.RN + and PV_MID.DOCS_PROP_RN = NDP_MODEL_ID) + loop + /* Получаем рег. номер связанной спецификации плана */ + NFCPRODPLANSP := FCPRODPLANSP_LINKED_GET(NPRODCMPSP => REC.NRN, NFCPRODPLAN => NFCPRODPLAN); + /* Открываем план */ + PKG_XFAST.DOWN_NODE(SNAME => 'XFCPRODCMP'); + /* Описываем план */ + PKG_XFAST.ATTR(SNAME => 'NRN', NVALUE => REC.NRN); + PKG_XFAST.ATTR(SNAME => 'SNAME', SVALUE => REC.SNAME); + PKG_XFAST.ATTR(SNAME => 'SMODEL_ID', SVALUE => REC.SMODEL_ID); + PKG_XFAST.ATTR(SNAME => 'SMODEL_BG_COLOR', SVALUE => REC.SMODEL_BG_COLOR); + PKG_XFAST.ATTR(SNAME => 'NFCPRODPLANSP', NVALUE => NFCPRODPLANSP); + /* Закрываем план */ + PKG_XFAST.UP(); + end loop; + /* Закрываем корень */ + PKG_XFAST.UP(); + /* Сериализуем */ + COUT := PKG_XFAST.SERIALIZE_TO_CLOB(); + /* Завершаем формирование XML */ + PKG_XFAST.EPILOGUE(); + exception + when others then + /* Завершаем формирование XML */ + PKG_XFAST.EPILOGUE(); + /* Вернем ошибку */ + PKG_STATE.DIAGNOSTICS_STACKED(); + P_EXCEPTION(0, PKG_STATE.SQL_ERRM()); + end FCPRODCMP_DETAILS_GET; + end PKG_P8PANELS_MECHREC; / From a494706be5e8d41a7c4a4f294ac94197a0b699c9 Mon Sep 17 00:00:00 2001 From: Mikhail Chechnev Date: Sat, 18 May 2024 00:56:51 +0300 Subject: [PATCH 44/76] =?UTF-8?q?WEB=20APP:=20=D0=A1=D0=B2=D0=B5=D0=B6?= =?UTF-8?q?=D0=B0=D1=8F=20=D1=81=D0=B1=D0=BE=D1=80=D0=BA=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- dist/p8-panels.js | 57 ++++++++++++++++++++++++++++------------------- 1 file changed, 34 insertions(+), 23 deletions(-) diff --git a/dist/p8-panels.js b/dist/p8-panels.js index 73f7d3b..d824bdb 100644 --- a/dist/p8-panels.js +++ b/dist/p8-panels.js @@ -15,7 +15,7 @@ \***********************************/ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { -eval("var map = {\n\t\"./dummy\": \"./app/panels/dummy/index.js\",\n\t\"./dummy/\": \"./app/panels/dummy/index.js\",\n\t\"./dummy/dummy\": \"./app/panels/dummy/dummy.js\",\n\t\"./dummy/dummy.js\": \"./app/panels/dummy/dummy.js\",\n\t\"./dummy/index\": \"./app/panels/dummy/index.js\",\n\t\"./dummy/index.js\": \"./app/panels/dummy/index.js\",\n\t\"./eqs_prfrm\": \"./app/panels/eqs_prfrm/index.js\",\n\t\"./eqs_prfrm/\": \"./app/panels/eqs_prfrm/index.js\",\n\t\"./eqs_prfrm/eqs_prfrm\": \"./app/panels/eqs_prfrm/eqs_prfrm.js\",\n\t\"./eqs_prfrm/eqs_prfrm.js\": \"./app/panels/eqs_prfrm/eqs_prfrm.js\",\n\t\"./eqs_prfrm/index\": \"./app/panels/eqs_prfrm/index.js\",\n\t\"./eqs_prfrm/index.js\": \"./app/panels/eqs_prfrm/index.js\",\n\t\"./eqs_prfrm/layouts\": \"./app/panels/eqs_prfrm/layouts.js\",\n\t\"./eqs_prfrm/layouts.js\": \"./app/panels/eqs_prfrm/layouts.js\",\n\t\"./mech_rec_assembly_mon\": \"./app/panels/mech_rec_assembly_mon/index.js\",\n\t\"./mech_rec_assembly_mon/\": \"./app/panels/mech_rec_assembly_mon/index.js\",\n\t\"./mech_rec_assembly_mon/backend\": \"./app/panels/mech_rec_assembly_mon/backend.js\",\n\t\"./mech_rec_assembly_mon/backend.js\": \"./app/panels/mech_rec_assembly_mon/backend.js\",\n\t\"./mech_rec_assembly_mon/blocks/cardBlock\": \"./app/panels/mech_rec_assembly_mon/blocks/cardBlock.js\",\n\t\"./mech_rec_assembly_mon/blocks/cardBlock.js\": \"./app/panels/mech_rec_assembly_mon/blocks/cardBlock.js\",\n\t\"./mech_rec_assembly_mon/blocks/cardDetail\": \"./app/panels/mech_rec_assembly_mon/blocks/cardDetail.js\",\n\t\"./mech_rec_assembly_mon/blocks/cardDetail.js\": \"./app/panels/mech_rec_assembly_mon/blocks/cardDetail.js\",\n\t\"./mech_rec_assembly_mon/elements/progressBox\": \"./app/panels/mech_rec_assembly_mon/elements/progressBox.js\",\n\t\"./mech_rec_assembly_mon/elements/progressBox.js\": \"./app/panels/mech_rec_assembly_mon/elements/progressBox.js\",\n\t\"./mech_rec_assembly_mon/hooks\": \"./app/panels/mech_rec_assembly_mon/hooks.js\",\n\t\"./mech_rec_assembly_mon/hooks.js\": \"./app/panels/mech_rec_assembly_mon/hooks.js\",\n\t\"./mech_rec_assembly_mon/index\": \"./app/panels/mech_rec_assembly_mon/index.js\",\n\t\"./mech_rec_assembly_mon/index.js\": \"./app/panels/mech_rec_assembly_mon/index.js\",\n\t\"./mech_rec_assembly_mon/mech_rec_assembly_mon\": \"./app/panels/mech_rec_assembly_mon/mech_rec_assembly_mon.js\",\n\t\"./mech_rec_assembly_mon/mech_rec_assembly_mon.js\": \"./app/panels/mech_rec_assembly_mon/mech_rec_assembly_mon.js\",\n\t\"./mech_rec_assembly_mon/styles/themes\": \"./app/panels/mech_rec_assembly_mon/styles/themes.js\",\n\t\"./mech_rec_assembly_mon/styles/themes.js\": \"./app/panels/mech_rec_assembly_mon/styles/themes.js\",\n\t\"./mech_rec_cost_jobs_manage\": \"./app/panels/mech_rec_cost_jobs_manage/index.js\",\n\t\"./mech_rec_cost_jobs_manage/\": \"./app/panels/mech_rec_cost_jobs_manage/index.js\",\n\t\"./mech_rec_cost_jobs_manage/backend\": \"./app/panels/mech_rec_cost_jobs_manage/backend.js\",\n\t\"./mech_rec_cost_jobs_manage/backend.js\": \"./app/panels/mech_rec_cost_jobs_manage/backend.js\",\n\t\"./mech_rec_cost_jobs_manage/fcjobssp\": \"./app/panels/mech_rec_cost_jobs_manage/fcjobssp.js\",\n\t\"./mech_rec_cost_jobs_manage/fcjobssp.js\": \"./app/panels/mech_rec_cost_jobs_manage/fcjobssp.js\",\n\t\"./mech_rec_cost_jobs_manage/hooks\": \"./app/panels/mech_rec_cost_jobs_manage/hooks.js\",\n\t\"./mech_rec_cost_jobs_manage/hooks.js\": \"./app/panels/mech_rec_cost_jobs_manage/hooks.js\",\n\t\"./mech_rec_cost_jobs_manage/index\": \"./app/panels/mech_rec_cost_jobs_manage/index.js\",\n\t\"./mech_rec_cost_jobs_manage/index.js\": \"./app/panels/mech_rec_cost_jobs_manage/index.js\",\n\t\"./mech_rec_cost_jobs_manage/mech_rec_cost_jobs_manage\": \"./app/panels/mech_rec_cost_jobs_manage/mech_rec_cost_jobs_manage.js\",\n\t\"./mech_rec_cost_jobs_manage/mech_rec_cost_jobs_manage.js\": \"./app/panels/mech_rec_cost_jobs_manage/mech_rec_cost_jobs_manage.js\",\n\t\"./mech_rec_cost_prod_plans\": \"./app/panels/mech_rec_cost_prod_plans/index.js\",\n\t\"./mech_rec_cost_prod_plans/\": \"./app/panels/mech_rec_cost_prod_plans/index.js\",\n\t\"./mech_rec_cost_prod_plans/datagrids/backend_dg\": \"./app/panels/mech_rec_cost_prod_plans/datagrids/backend_dg.js\",\n\t\"./mech_rec_cost_prod_plans/datagrids/backend_dg.js\": \"./app/panels/mech_rec_cost_prod_plans/datagrids/backend_dg.js\",\n\t\"./mech_rec_cost_prod_plans/datagrids/fcdeliverylistsp\": \"./app/panels/mech_rec_cost_prod_plans/datagrids/fcdeliverylistsp.js\",\n\t\"./mech_rec_cost_prod_plans/datagrids/fcdeliverylistsp.js\": \"./app/panels/mech_rec_cost_prod_plans/datagrids/fcdeliverylistsp.js\",\n\t\"./mech_rec_cost_prod_plans/datagrids/fcroutlst\": \"./app/panels/mech_rec_cost_prod_plans/datagrids/fcroutlst.js\",\n\t\"./mech_rec_cost_prod_plans/datagrids/fcroutlst.js\": \"./app/panels/mech_rec_cost_prod_plans/datagrids/fcroutlst.js\",\n\t\"./mech_rec_cost_prod_plans/datagrids/goodparties\": \"./app/panels/mech_rec_cost_prod_plans/datagrids/goodparties.js\",\n\t\"./mech_rec_cost_prod_plans/datagrids/goodparties.js\": \"./app/panels/mech_rec_cost_prod_plans/datagrids/goodparties.js\",\n\t\"./mech_rec_cost_prod_plans/datagrids/incomefromdeps\": \"./app/panels/mech_rec_cost_prod_plans/datagrids/incomefromdeps.js\",\n\t\"./mech_rec_cost_prod_plans/datagrids/incomefromdeps.js\": \"./app/panels/mech_rec_cost_prod_plans/datagrids/incomefromdeps.js\",\n\t\"./mech_rec_cost_prod_plans/hooks\": \"./app/panels/mech_rec_cost_prod_plans/hooks.js\",\n\t\"./mech_rec_cost_prod_plans/hooks.js\": \"./app/panels/mech_rec_cost_prod_plans/hooks.js\",\n\t\"./mech_rec_cost_prod_plans/index\": \"./app/panels/mech_rec_cost_prod_plans/index.js\",\n\t\"./mech_rec_cost_prod_plans/index.js\": \"./app/panels/mech_rec_cost_prod_plans/index.js\",\n\t\"./mech_rec_cost_prod_plans/mech_rec_cost_prod_plans\": \"./app/panels/mech_rec_cost_prod_plans/mech_rec_cost_prod_plans.js\",\n\t\"./mech_rec_cost_prod_plans/mech_rec_cost_prod_plans.js\": \"./app/panels/mech_rec_cost_prod_plans/mech_rec_cost_prod_plans.js\",\n\t\"./mech_rec_dept_cost_jobs\": \"./app/panels/mech_rec_dept_cost_jobs/index.js\",\n\t\"./mech_rec_dept_cost_jobs/\": \"./app/panels/mech_rec_dept_cost_jobs/index.js\",\n\t\"./mech_rec_dept_cost_jobs/index\": \"./app/panels/mech_rec_dept_cost_jobs/index.js\",\n\t\"./mech_rec_dept_cost_jobs/index.js\": \"./app/panels/mech_rec_dept_cost_jobs/index.js\",\n\t\"./mech_rec_dept_cost_jobs/mech_rec_dept_cost_jobs\": \"./app/panels/mech_rec_dept_cost_jobs/mech_rec_dept_cost_jobs.js\",\n\t\"./mech_rec_dept_cost_jobs/mech_rec_dept_cost_jobs.js\": \"./app/panels/mech_rec_dept_cost_jobs/mech_rec_dept_cost_jobs.js\",\n\t\"./mech_rec_dept_cost_prod_plans\": \"./app/panels/mech_rec_dept_cost_prod_plans/index.js\",\n\t\"./mech_rec_dept_cost_prod_plans/\": \"./app/panels/mech_rec_dept_cost_prod_plans/index.js\",\n\t\"./mech_rec_dept_cost_prod_plans/fcroutlst\": \"./app/panels/mech_rec_dept_cost_prod_plans/fcroutlst.js\",\n\t\"./mech_rec_dept_cost_prod_plans/fcroutlst.js\": \"./app/panels/mech_rec_dept_cost_prod_plans/fcroutlst.js\",\n\t\"./mech_rec_dept_cost_prod_plans/fcroutlstord\": \"./app/panels/mech_rec_dept_cost_prod_plans/fcroutlstord.js\",\n\t\"./mech_rec_dept_cost_prod_plans/fcroutlstord.js\": \"./app/panels/mech_rec_dept_cost_prod_plans/fcroutlstord.js\",\n\t\"./mech_rec_dept_cost_prod_plans/hooks\": \"./app/panels/mech_rec_dept_cost_prod_plans/hooks.js\",\n\t\"./mech_rec_dept_cost_prod_plans/hooks.js\": \"./app/panels/mech_rec_dept_cost_prod_plans/hooks.js\",\n\t\"./mech_rec_dept_cost_prod_plans/incomefromdeps\": \"./app/panels/mech_rec_dept_cost_prod_plans/incomefromdeps.js\",\n\t\"./mech_rec_dept_cost_prod_plans/incomefromdeps.js\": \"./app/panels/mech_rec_dept_cost_prod_plans/incomefromdeps.js\",\n\t\"./mech_rec_dept_cost_prod_plans/index\": \"./app/panels/mech_rec_dept_cost_prod_plans/index.js\",\n\t\"./mech_rec_dept_cost_prod_plans/index.js\": \"./app/panels/mech_rec_dept_cost_prod_plans/index.js\",\n\t\"./mech_rec_dept_cost_prod_plans/mech_rec_dept_cost_prod_plans\": \"./app/panels/mech_rec_dept_cost_prod_plans/mech_rec_dept_cost_prod_plans.js\",\n\t\"./mech_rec_dept_cost_prod_plans/mech_rec_dept_cost_prod_plans.js\": \"./app/panels/mech_rec_dept_cost_prod_plans/mech_rec_dept_cost_prod_plans.js\",\n\t\"./prj_fin\": \"./app/panels/prj_fin/index.js\",\n\t\"./prj_fin/\": \"./app/panels/prj_fin/index.js\",\n\t\"./prj_fin/index\": \"./app/panels/prj_fin/index.js\",\n\t\"./prj_fin/index.js\": \"./app/panels/prj_fin/index.js\",\n\t\"./prj_fin/layouts\": \"./app/panels/prj_fin/layouts.js\",\n\t\"./prj_fin/layouts.js\": \"./app/panels/prj_fin/layouts.js\",\n\t\"./prj_fin/prj_fin\": \"./app/panels/prj_fin/prj_fin.js\",\n\t\"./prj_fin/prj_fin.js\": \"./app/panels/prj_fin/prj_fin.js\",\n\t\"./prj_fin/projects\": \"./app/panels/prj_fin/projects.js\",\n\t\"./prj_fin/projects.js\": \"./app/panels/prj_fin/projects.js\",\n\t\"./prj_fin/stage_arts\": \"./app/panels/prj_fin/stage_arts.js\",\n\t\"./prj_fin/stage_arts.js\": \"./app/panels/prj_fin/stage_arts.js\",\n\t\"./prj_fin/stage_contracts\": \"./app/panels/prj_fin/stage_contracts.js\",\n\t\"./prj_fin/stage_contracts.js\": \"./app/panels/prj_fin/stage_contracts.js\",\n\t\"./prj_fin/stages\": \"./app/panels/prj_fin/stages.js\",\n\t\"./prj_fin/stages.js\": \"./app/panels/prj_fin/stages.js\",\n\t\"./prj_graph\": \"./app/panels/prj_graph/index.js\",\n\t\"./prj_graph/\": \"./app/panels/prj_graph/index.js\",\n\t\"./prj_graph/index\": \"./app/panels/prj_graph/index.js\",\n\t\"./prj_graph/index.js\": \"./app/panels/prj_graph/index.js\",\n\t\"./prj_graph/layouts\": \"./app/panels/prj_graph/layouts.js\",\n\t\"./prj_graph/layouts.js\": \"./app/panels/prj_graph/layouts.js\",\n\t\"./prj_graph/prj_graph\": \"./app/panels/prj_graph/prj_graph.js\",\n\t\"./prj_graph/prj_graph.js\": \"./app/panels/prj_graph/prj_graph.js\",\n\t\"./prj_help\": \"./app/panels/prj_help/index.js\",\n\t\"./prj_help/\": \"./app/panels/prj_help/index.js\",\n\t\"./prj_help/img/211.png\": \"./app/panels/prj_help/img/211.png\",\n\t\"./prj_help/img/212.png\": \"./app/panels/prj_help/img/212.png\",\n\t\"./prj_help/img/213.png\": \"./app/panels/prj_help/img/213.png\",\n\t\"./prj_help/img/214.png\": \"./app/panels/prj_help/img/214.png\",\n\t\"./prj_help/img/215.png\": \"./app/panels/prj_help/img/215.png\",\n\t\"./prj_help/img/221.png\": \"./app/panels/prj_help/img/221.png\",\n\t\"./prj_help/img/222.png\": \"./app/panels/prj_help/img/222.png\",\n\t\"./prj_help/img/223.png\": \"./app/panels/prj_help/img/223.png\",\n\t\"./prj_help/img/231.png\": \"./app/panels/prj_help/img/231.png\",\n\t\"./prj_help/img/232.png\": \"./app/panels/prj_help/img/232.png\",\n\t\"./prj_help/img/241.png\": \"./app/panels/prj_help/img/241.png\",\n\t\"./prj_help/img/242.png\": \"./app/panels/prj_help/img/242.png\",\n\t\"./prj_help/img/243.png\": \"./app/panels/prj_help/img/243.png\",\n\t\"./prj_help/img/244.png\": \"./app/panels/prj_help/img/244.png\",\n\t\"./prj_help/img/245.png\": \"./app/panels/prj_help/img/245.png\",\n\t\"./prj_help/img/31.png\": \"./app/panels/prj_help/img/31.png\",\n\t\"./prj_help/img/32.png\": \"./app/panels/prj_help/img/32.png\",\n\t\"./prj_help/img/33.png\": \"./app/panels/prj_help/img/33.png\",\n\t\"./prj_help/img/34.png\": \"./app/panels/prj_help/img/34.png\",\n\t\"./prj_help/img/35.png\": \"./app/panels/prj_help/img/35.png\",\n\t\"./prj_help/img/36.png\": \"./app/panels/prj_help/img/36.png\",\n\t\"./prj_help/img/411.png\": \"./app/panels/prj_help/img/411.png\",\n\t\"./prj_help/img/412.png\": \"./app/panels/prj_help/img/412.png\",\n\t\"./prj_help/img/421.png\": \"./app/panels/prj_help/img/421.png\",\n\t\"./prj_help/img/422.png\": \"./app/panels/prj_help/img/422.png\",\n\t\"./prj_help/img/431.png\": \"./app/panels/prj_help/img/431.png\",\n\t\"./prj_help/img/432.png\": \"./app/panels/prj_help/img/432.png\",\n\t\"./prj_help/img/433.png\": \"./app/panels/prj_help/img/433.png\",\n\t\"./prj_help/img/434.png\": \"./app/panels/prj_help/img/434.png\",\n\t\"./prj_help/img/441.png\": \"./app/panels/prj_help/img/441.png\",\n\t\"./prj_help/img/442.png\": \"./app/panels/prj_help/img/442.png\",\n\t\"./prj_help/img/443.png\": \"./app/panels/prj_help/img/443.png\",\n\t\"./prj_help/img/444.png\": \"./app/panels/prj_help/img/444.png\",\n\t\"./prj_help/img/451.png\": \"./app/panels/prj_help/img/451.png\",\n\t\"./prj_help/img/461.png\": \"./app/panels/prj_help/img/461.png\",\n\t\"./prj_help/img/471.png\": \"./app/panels/prj_help/img/471.png\",\n\t\"./prj_help/img/711.png\": \"./app/panels/prj_help/img/711.png\",\n\t\"./prj_help/img/721.png\": \"./app/panels/prj_help/img/721.png\",\n\t\"./prj_help/img/722.png\": \"./app/panels/prj_help/img/722.png\",\n\t\"./prj_help/img/723.png\": \"./app/panels/prj_help/img/723.png\",\n\t\"./prj_help/img/741.png\": \"./app/panels/prj_help/img/741.png\",\n\t\"./prj_help/index\": \"./app/panels/prj_help/index.js\",\n\t\"./prj_help/index.js\": \"./app/panels/prj_help/index.js\",\n\t\"./prj_help/prj_help\": \"./app/panels/prj_help/prj_help.js\",\n\t\"./prj_help/prj_help.js\": \"./app/panels/prj_help/prj_help.js\",\n\t\"./prj_jobs\": \"./app/panels/prj_jobs/index.js\",\n\t\"./prj_jobs/\": \"./app/panels/prj_jobs/index.js\",\n\t\"./prj_jobs/index\": \"./app/panels/prj_jobs/index.js\",\n\t\"./prj_jobs/index.js\": \"./app/panels/prj_jobs/index.js\",\n\t\"./prj_jobs/lab_fact_rpt_dtl\": \"./app/panels/prj_jobs/lab_fact_rpt_dtl.js\",\n\t\"./prj_jobs/lab_fact_rpt_dtl.js\": \"./app/panels/prj_jobs/lab_fact_rpt_dtl.js\",\n\t\"./prj_jobs/lab_plan_fot_dtl\": \"./app/panels/prj_jobs/lab_plan_fot_dtl.js\",\n\t\"./prj_jobs/lab_plan_fot_dtl.js\": \"./app/panels/prj_jobs/lab_plan_fot_dtl.js\",\n\t\"./prj_jobs/lab_plan_jobs_dtl\": \"./app/panels/prj_jobs/lab_plan_jobs_dtl.js\",\n\t\"./prj_jobs/lab_plan_jobs_dtl.js\": \"./app/panels/prj_jobs/lab_plan_jobs_dtl.js\",\n\t\"./prj_jobs/layouts\": \"./app/panels/prj_jobs/layouts.js\",\n\t\"./prj_jobs/layouts.js\": \"./app/panels/prj_jobs/layouts.js\",\n\t\"./prj_jobs/prj_jobs\": \"./app/panels/prj_jobs/prj_jobs.js\",\n\t\"./prj_jobs/prj_jobs.js\": \"./app/panels/prj_jobs/prj_jobs.js\",\n\t\"./prj_jobs/res_mon\": \"./app/panels/prj_jobs/res_mon.js\",\n\t\"./prj_jobs/res_mon.js\": \"./app/panels/prj_jobs/res_mon.js\",\n\t\"./samples\": \"./app/panels/samples/index.js\",\n\t\"./samples/\": \"./app/panels/samples/index.js\",\n\t\"./samples/chart\": \"./app/panels/samples/chart.js\",\n\t\"./samples/chart.js\": \"./app/panels/samples/chart.js\",\n\t\"./samples/data_grid\": \"./app/panels/samples/data_grid.js\",\n\t\"./samples/data_grid.js\": \"./app/panels/samples/data_grid.js\",\n\t\"./samples/gantt\": \"./app/panels/samples/gantt.js\",\n\t\"./samples/gantt.js\": \"./app/panels/samples/gantt.js\",\n\t\"./samples/index\": \"./app/panels/samples/index.js\",\n\t\"./samples/index.js\": \"./app/panels/samples/index.js\",\n\t\"./samples/loader\": \"./app/panels/samples/loader.js\",\n\t\"./samples/loader.js\": \"./app/panels/samples/loader.js\",\n\t\"./samples/messages\": \"./app/panels/samples/messages.js\",\n\t\"./samples/messages.js\": \"./app/panels/samples/messages.js\",\n\t\"./samples/mui\": \"./app/panels/samples/mui.js\",\n\t\"./samples/mui.js\": \"./app/panels/samples/mui.js\",\n\t\"./samples/p8online\": \"./app/panels/samples/p8online.js\",\n\t\"./samples/p8online.js\": \"./app/panels/samples/p8online.js\",\n\t\"./samples/samples\": \"./app/panels/samples/samples.js\",\n\t\"./samples/samples.js\": \"./app/panels/samples/samples.js\",\n\t\"./samples/svg\": \"./app/panels/samples/svg.js\",\n\t\"./samples/svg.js\": \"./app/panels/samples/svg.js\"\n};\n\n\nfunction webpackContext(req) {\n\tvar id = webpackContextResolve(req);\n\treturn __webpack_require__(id);\n}\nfunction webpackContextResolve(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t}\n\treturn map[req];\n}\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = \"./app/panels sync recursive ^\\\\.\\\\/.*$\";\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/panels/_sync_^\\.\\/.*$?"); +eval("var map = {\n\t\"./dummy\": \"./app/panels/dummy/index.js\",\n\t\"./dummy/\": \"./app/panels/dummy/index.js\",\n\t\"./dummy/dummy\": \"./app/panels/dummy/dummy.js\",\n\t\"./dummy/dummy.js\": \"./app/panels/dummy/dummy.js\",\n\t\"./dummy/index\": \"./app/panels/dummy/index.js\",\n\t\"./dummy/index.js\": \"./app/panels/dummy/index.js\",\n\t\"./eqs_prfrm\": \"./app/panels/eqs_prfrm/index.js\",\n\t\"./eqs_prfrm/\": \"./app/panels/eqs_prfrm/index.js\",\n\t\"./eqs_prfrm/eqs_prfrm\": \"./app/panels/eqs_prfrm/eqs_prfrm.js\",\n\t\"./eqs_prfrm/eqs_prfrm.js\": \"./app/panels/eqs_prfrm/eqs_prfrm.js\",\n\t\"./eqs_prfrm/index\": \"./app/panels/eqs_prfrm/index.js\",\n\t\"./eqs_prfrm/index.js\": \"./app/panels/eqs_prfrm/index.js\",\n\t\"./eqs_prfrm/layouts\": \"./app/panels/eqs_prfrm/layouts.js\",\n\t\"./eqs_prfrm/layouts.js\": \"./app/panels/eqs_prfrm/layouts.js\",\n\t\"./mech_rec_assembly_mon\": \"./app/panels/mech_rec_assembly_mon/index.js\",\n\t\"./mech_rec_assembly_mon/\": \"./app/panels/mech_rec_assembly_mon/index.js\",\n\t\"./mech_rec_assembly_mon/backend\": \"./app/panels/mech_rec_assembly_mon/backend.js\",\n\t\"./mech_rec_assembly_mon/backend.js\": \"./app/panels/mech_rec_assembly_mon/backend.js\",\n\t\"./mech_rec_assembly_mon/components/plan_detail\": \"./app/panels/mech_rec_assembly_mon/components/plan_detail.js\",\n\t\"./mech_rec_assembly_mon/components/plan_detail.js\": \"./app/panels/mech_rec_assembly_mon/components/plan_detail.js\",\n\t\"./mech_rec_assembly_mon/components/plans_list\": \"./app/panels/mech_rec_assembly_mon/components/plans_list.js\",\n\t\"./mech_rec_assembly_mon/components/plans_list.js\": \"./app/panels/mech_rec_assembly_mon/components/plans_list.js\",\n\t\"./mech_rec_assembly_mon/components/plans_list_item\": \"./app/panels/mech_rec_assembly_mon/components/plans_list_item.js\",\n\t\"./mech_rec_assembly_mon/components/plans_list_item.js\": \"./app/panels/mech_rec_assembly_mon/components/plans_list_item.js\",\n\t\"./mech_rec_assembly_mon/components/progress_box\": \"./app/panels/mech_rec_assembly_mon/components/progress_box.js\",\n\t\"./mech_rec_assembly_mon/components/progress_box.js\": \"./app/panels/mech_rec_assembly_mon/components/progress_box.js\",\n\t\"./mech_rec_assembly_mon/hooks\": \"./app/panels/mech_rec_assembly_mon/hooks.js\",\n\t\"./mech_rec_assembly_mon/hooks.js\": \"./app/panels/mech_rec_assembly_mon/hooks.js\",\n\t\"./mech_rec_assembly_mon/index\": \"./app/panels/mech_rec_assembly_mon/index.js\",\n\t\"./mech_rec_assembly_mon/index.js\": \"./app/panels/mech_rec_assembly_mon/index.js\",\n\t\"./mech_rec_assembly_mon/mech_rec_assembly_mon\": \"./app/panels/mech_rec_assembly_mon/mech_rec_assembly_mon.js\",\n\t\"./mech_rec_assembly_mon/mech_rec_assembly_mon.js\": \"./app/panels/mech_rec_assembly_mon/mech_rec_assembly_mon.js\",\n\t\"./mech_rec_assembly_mon/styles/themes\": \"./app/panels/mech_rec_assembly_mon/styles/themes.js\",\n\t\"./mech_rec_assembly_mon/styles/themes.js\": \"./app/panels/mech_rec_assembly_mon/styles/themes.js\",\n\t\"./mech_rec_cost_jobs_manage\": \"./app/panels/mech_rec_cost_jobs_manage/index.js\",\n\t\"./mech_rec_cost_jobs_manage/\": \"./app/panels/mech_rec_cost_jobs_manage/index.js\",\n\t\"./mech_rec_cost_jobs_manage/backend\": \"./app/panels/mech_rec_cost_jobs_manage/backend.js\",\n\t\"./mech_rec_cost_jobs_manage/backend.js\": \"./app/panels/mech_rec_cost_jobs_manage/backend.js\",\n\t\"./mech_rec_cost_jobs_manage/fcjobssp\": \"./app/panels/mech_rec_cost_jobs_manage/fcjobssp.js\",\n\t\"./mech_rec_cost_jobs_manage/fcjobssp.js\": \"./app/panels/mech_rec_cost_jobs_manage/fcjobssp.js\",\n\t\"./mech_rec_cost_jobs_manage/hooks\": \"./app/panels/mech_rec_cost_jobs_manage/hooks.js\",\n\t\"./mech_rec_cost_jobs_manage/hooks.js\": \"./app/panels/mech_rec_cost_jobs_manage/hooks.js\",\n\t\"./mech_rec_cost_jobs_manage/index\": \"./app/panels/mech_rec_cost_jobs_manage/index.js\",\n\t\"./mech_rec_cost_jobs_manage/index.js\": \"./app/panels/mech_rec_cost_jobs_manage/index.js\",\n\t\"./mech_rec_cost_jobs_manage/mech_rec_cost_jobs_manage\": \"./app/panels/mech_rec_cost_jobs_manage/mech_rec_cost_jobs_manage.js\",\n\t\"./mech_rec_cost_jobs_manage/mech_rec_cost_jobs_manage.js\": \"./app/panels/mech_rec_cost_jobs_manage/mech_rec_cost_jobs_manage.js\",\n\t\"./mech_rec_cost_prod_plans\": \"./app/panels/mech_rec_cost_prod_plans/index.js\",\n\t\"./mech_rec_cost_prod_plans/\": \"./app/panels/mech_rec_cost_prod_plans/index.js\",\n\t\"./mech_rec_cost_prod_plans/datagrids/backend_dg\": \"./app/panels/mech_rec_cost_prod_plans/datagrids/backend_dg.js\",\n\t\"./mech_rec_cost_prod_plans/datagrids/backend_dg.js\": \"./app/panels/mech_rec_cost_prod_plans/datagrids/backend_dg.js\",\n\t\"./mech_rec_cost_prod_plans/datagrids/fcdeliverylistsp\": \"./app/panels/mech_rec_cost_prod_plans/datagrids/fcdeliverylistsp.js\",\n\t\"./mech_rec_cost_prod_plans/datagrids/fcdeliverylistsp.js\": \"./app/panels/mech_rec_cost_prod_plans/datagrids/fcdeliverylistsp.js\",\n\t\"./mech_rec_cost_prod_plans/datagrids/fcroutlst\": \"./app/panels/mech_rec_cost_prod_plans/datagrids/fcroutlst.js\",\n\t\"./mech_rec_cost_prod_plans/datagrids/fcroutlst.js\": \"./app/panels/mech_rec_cost_prod_plans/datagrids/fcroutlst.js\",\n\t\"./mech_rec_cost_prod_plans/datagrids/goodparties\": \"./app/panels/mech_rec_cost_prod_plans/datagrids/goodparties.js\",\n\t\"./mech_rec_cost_prod_plans/datagrids/goodparties.js\": \"./app/panels/mech_rec_cost_prod_plans/datagrids/goodparties.js\",\n\t\"./mech_rec_cost_prod_plans/datagrids/incomefromdeps\": \"./app/panels/mech_rec_cost_prod_plans/datagrids/incomefromdeps.js\",\n\t\"./mech_rec_cost_prod_plans/datagrids/incomefromdeps.js\": \"./app/panels/mech_rec_cost_prod_plans/datagrids/incomefromdeps.js\",\n\t\"./mech_rec_cost_prod_plans/hooks\": \"./app/panels/mech_rec_cost_prod_plans/hooks.js\",\n\t\"./mech_rec_cost_prod_plans/hooks.js\": \"./app/panels/mech_rec_cost_prod_plans/hooks.js\",\n\t\"./mech_rec_cost_prod_plans/index\": \"./app/panels/mech_rec_cost_prod_plans/index.js\",\n\t\"./mech_rec_cost_prod_plans/index.js\": \"./app/panels/mech_rec_cost_prod_plans/index.js\",\n\t\"./mech_rec_cost_prod_plans/mech_rec_cost_prod_plans\": \"./app/panels/mech_rec_cost_prod_plans/mech_rec_cost_prod_plans.js\",\n\t\"./mech_rec_cost_prod_plans/mech_rec_cost_prod_plans.js\": \"./app/panels/mech_rec_cost_prod_plans/mech_rec_cost_prod_plans.js\",\n\t\"./mech_rec_dept_cost_jobs\": \"./app/panels/mech_rec_dept_cost_jobs/index.js\",\n\t\"./mech_rec_dept_cost_jobs/\": \"./app/panels/mech_rec_dept_cost_jobs/index.js\",\n\t\"./mech_rec_dept_cost_jobs/index\": \"./app/panels/mech_rec_dept_cost_jobs/index.js\",\n\t\"./mech_rec_dept_cost_jobs/index.js\": \"./app/panels/mech_rec_dept_cost_jobs/index.js\",\n\t\"./mech_rec_dept_cost_jobs/mech_rec_dept_cost_jobs\": \"./app/panels/mech_rec_dept_cost_jobs/mech_rec_dept_cost_jobs.js\",\n\t\"./mech_rec_dept_cost_jobs/mech_rec_dept_cost_jobs.js\": \"./app/panels/mech_rec_dept_cost_jobs/mech_rec_dept_cost_jobs.js\",\n\t\"./mech_rec_dept_cost_prod_plans\": \"./app/panels/mech_rec_dept_cost_prod_plans/index.js\",\n\t\"./mech_rec_dept_cost_prod_plans/\": \"./app/panels/mech_rec_dept_cost_prod_plans/index.js\",\n\t\"./mech_rec_dept_cost_prod_plans/fcroutlst\": \"./app/panels/mech_rec_dept_cost_prod_plans/fcroutlst.js\",\n\t\"./mech_rec_dept_cost_prod_plans/fcroutlst.js\": \"./app/panels/mech_rec_dept_cost_prod_plans/fcroutlst.js\",\n\t\"./mech_rec_dept_cost_prod_plans/fcroutlstord\": \"./app/panels/mech_rec_dept_cost_prod_plans/fcroutlstord.js\",\n\t\"./mech_rec_dept_cost_prod_plans/fcroutlstord.js\": \"./app/panels/mech_rec_dept_cost_prod_plans/fcroutlstord.js\",\n\t\"./mech_rec_dept_cost_prod_plans/hooks\": \"./app/panels/mech_rec_dept_cost_prod_plans/hooks.js\",\n\t\"./mech_rec_dept_cost_prod_plans/hooks.js\": \"./app/panels/mech_rec_dept_cost_prod_plans/hooks.js\",\n\t\"./mech_rec_dept_cost_prod_plans/incomefromdeps\": \"./app/panels/mech_rec_dept_cost_prod_plans/incomefromdeps.js\",\n\t\"./mech_rec_dept_cost_prod_plans/incomefromdeps.js\": \"./app/panels/mech_rec_dept_cost_prod_plans/incomefromdeps.js\",\n\t\"./mech_rec_dept_cost_prod_plans/index\": \"./app/panels/mech_rec_dept_cost_prod_plans/index.js\",\n\t\"./mech_rec_dept_cost_prod_plans/index.js\": \"./app/panels/mech_rec_dept_cost_prod_plans/index.js\",\n\t\"./mech_rec_dept_cost_prod_plans/mech_rec_dept_cost_prod_plans\": \"./app/panels/mech_rec_dept_cost_prod_plans/mech_rec_dept_cost_prod_plans.js\",\n\t\"./mech_rec_dept_cost_prod_plans/mech_rec_dept_cost_prod_plans.js\": \"./app/panels/mech_rec_dept_cost_prod_plans/mech_rec_dept_cost_prod_plans.js\",\n\t\"./prj_fin\": \"./app/panels/prj_fin/index.js\",\n\t\"./prj_fin/\": \"./app/panels/prj_fin/index.js\",\n\t\"./prj_fin/index\": \"./app/panels/prj_fin/index.js\",\n\t\"./prj_fin/index.js\": \"./app/panels/prj_fin/index.js\",\n\t\"./prj_fin/layouts\": \"./app/panels/prj_fin/layouts.js\",\n\t\"./prj_fin/layouts.js\": \"./app/panels/prj_fin/layouts.js\",\n\t\"./prj_fin/prj_fin\": \"./app/panels/prj_fin/prj_fin.js\",\n\t\"./prj_fin/prj_fin.js\": \"./app/panels/prj_fin/prj_fin.js\",\n\t\"./prj_fin/projects\": \"./app/panels/prj_fin/projects.js\",\n\t\"./prj_fin/projects.js\": \"./app/panels/prj_fin/projects.js\",\n\t\"./prj_fin/stage_arts\": \"./app/panels/prj_fin/stage_arts.js\",\n\t\"./prj_fin/stage_arts.js\": \"./app/panels/prj_fin/stage_arts.js\",\n\t\"./prj_fin/stage_contracts\": \"./app/panels/prj_fin/stage_contracts.js\",\n\t\"./prj_fin/stage_contracts.js\": \"./app/panels/prj_fin/stage_contracts.js\",\n\t\"./prj_fin/stages\": \"./app/panels/prj_fin/stages.js\",\n\t\"./prj_fin/stages.js\": \"./app/panels/prj_fin/stages.js\",\n\t\"./prj_graph\": \"./app/panels/prj_graph/index.js\",\n\t\"./prj_graph/\": \"./app/panels/prj_graph/index.js\",\n\t\"./prj_graph/index\": \"./app/panels/prj_graph/index.js\",\n\t\"./prj_graph/index.js\": \"./app/panels/prj_graph/index.js\",\n\t\"./prj_graph/layouts\": \"./app/panels/prj_graph/layouts.js\",\n\t\"./prj_graph/layouts.js\": \"./app/panels/prj_graph/layouts.js\",\n\t\"./prj_graph/prj_graph\": \"./app/panels/prj_graph/prj_graph.js\",\n\t\"./prj_graph/prj_graph.js\": \"./app/panels/prj_graph/prj_graph.js\",\n\t\"./prj_help\": \"./app/panels/prj_help/index.js\",\n\t\"./prj_help/\": \"./app/panels/prj_help/index.js\",\n\t\"./prj_help/img/211.png\": \"./app/panels/prj_help/img/211.png\",\n\t\"./prj_help/img/212.png\": \"./app/panels/prj_help/img/212.png\",\n\t\"./prj_help/img/213.png\": \"./app/panels/prj_help/img/213.png\",\n\t\"./prj_help/img/214.png\": \"./app/panels/prj_help/img/214.png\",\n\t\"./prj_help/img/215.png\": \"./app/panels/prj_help/img/215.png\",\n\t\"./prj_help/img/221.png\": \"./app/panels/prj_help/img/221.png\",\n\t\"./prj_help/img/222.png\": \"./app/panels/prj_help/img/222.png\",\n\t\"./prj_help/img/223.png\": \"./app/panels/prj_help/img/223.png\",\n\t\"./prj_help/img/231.png\": \"./app/panels/prj_help/img/231.png\",\n\t\"./prj_help/img/232.png\": \"./app/panels/prj_help/img/232.png\",\n\t\"./prj_help/img/241.png\": \"./app/panels/prj_help/img/241.png\",\n\t\"./prj_help/img/242.png\": \"./app/panels/prj_help/img/242.png\",\n\t\"./prj_help/img/243.png\": \"./app/panels/prj_help/img/243.png\",\n\t\"./prj_help/img/244.png\": \"./app/panels/prj_help/img/244.png\",\n\t\"./prj_help/img/245.png\": \"./app/panels/prj_help/img/245.png\",\n\t\"./prj_help/img/31.png\": \"./app/panels/prj_help/img/31.png\",\n\t\"./prj_help/img/32.png\": \"./app/panels/prj_help/img/32.png\",\n\t\"./prj_help/img/33.png\": \"./app/panels/prj_help/img/33.png\",\n\t\"./prj_help/img/34.png\": \"./app/panels/prj_help/img/34.png\",\n\t\"./prj_help/img/35.png\": \"./app/panels/prj_help/img/35.png\",\n\t\"./prj_help/img/36.png\": \"./app/panels/prj_help/img/36.png\",\n\t\"./prj_help/img/411.png\": \"./app/panels/prj_help/img/411.png\",\n\t\"./prj_help/img/412.png\": \"./app/panels/prj_help/img/412.png\",\n\t\"./prj_help/img/421.png\": \"./app/panels/prj_help/img/421.png\",\n\t\"./prj_help/img/422.png\": \"./app/panels/prj_help/img/422.png\",\n\t\"./prj_help/img/431.png\": \"./app/panels/prj_help/img/431.png\",\n\t\"./prj_help/img/432.png\": \"./app/panels/prj_help/img/432.png\",\n\t\"./prj_help/img/433.png\": \"./app/panels/prj_help/img/433.png\",\n\t\"./prj_help/img/434.png\": \"./app/panels/prj_help/img/434.png\",\n\t\"./prj_help/img/441.png\": \"./app/panels/prj_help/img/441.png\",\n\t\"./prj_help/img/442.png\": \"./app/panels/prj_help/img/442.png\",\n\t\"./prj_help/img/443.png\": \"./app/panels/prj_help/img/443.png\",\n\t\"./prj_help/img/444.png\": \"./app/panels/prj_help/img/444.png\",\n\t\"./prj_help/img/451.png\": \"./app/panels/prj_help/img/451.png\",\n\t\"./prj_help/img/461.png\": \"./app/panels/prj_help/img/461.png\",\n\t\"./prj_help/img/471.png\": \"./app/panels/prj_help/img/471.png\",\n\t\"./prj_help/img/711.png\": \"./app/panels/prj_help/img/711.png\",\n\t\"./prj_help/img/721.png\": \"./app/panels/prj_help/img/721.png\",\n\t\"./prj_help/img/722.png\": \"./app/panels/prj_help/img/722.png\",\n\t\"./prj_help/img/723.png\": \"./app/panels/prj_help/img/723.png\",\n\t\"./prj_help/img/741.png\": \"./app/panels/prj_help/img/741.png\",\n\t\"./prj_help/index\": \"./app/panels/prj_help/index.js\",\n\t\"./prj_help/index.js\": \"./app/panels/prj_help/index.js\",\n\t\"./prj_help/prj_help\": \"./app/panels/prj_help/prj_help.js\",\n\t\"./prj_help/prj_help.js\": \"./app/panels/prj_help/prj_help.js\",\n\t\"./prj_jobs\": \"./app/panels/prj_jobs/index.js\",\n\t\"./prj_jobs/\": \"./app/panels/prj_jobs/index.js\",\n\t\"./prj_jobs/index\": \"./app/panels/prj_jobs/index.js\",\n\t\"./prj_jobs/index.js\": \"./app/panels/prj_jobs/index.js\",\n\t\"./prj_jobs/lab_fact_rpt_dtl\": \"./app/panels/prj_jobs/lab_fact_rpt_dtl.js\",\n\t\"./prj_jobs/lab_fact_rpt_dtl.js\": \"./app/panels/prj_jobs/lab_fact_rpt_dtl.js\",\n\t\"./prj_jobs/lab_plan_fot_dtl\": \"./app/panels/prj_jobs/lab_plan_fot_dtl.js\",\n\t\"./prj_jobs/lab_plan_fot_dtl.js\": \"./app/panels/prj_jobs/lab_plan_fot_dtl.js\",\n\t\"./prj_jobs/lab_plan_jobs_dtl\": \"./app/panels/prj_jobs/lab_plan_jobs_dtl.js\",\n\t\"./prj_jobs/lab_plan_jobs_dtl.js\": \"./app/panels/prj_jobs/lab_plan_jobs_dtl.js\",\n\t\"./prj_jobs/layouts\": \"./app/panels/prj_jobs/layouts.js\",\n\t\"./prj_jobs/layouts.js\": \"./app/panels/prj_jobs/layouts.js\",\n\t\"./prj_jobs/prj_jobs\": \"./app/panels/prj_jobs/prj_jobs.js\",\n\t\"./prj_jobs/prj_jobs.js\": \"./app/panels/prj_jobs/prj_jobs.js\",\n\t\"./prj_jobs/res_mon\": \"./app/panels/prj_jobs/res_mon.js\",\n\t\"./prj_jobs/res_mon.js\": \"./app/panels/prj_jobs/res_mon.js\",\n\t\"./samples\": \"./app/panels/samples/index.js\",\n\t\"./samples/\": \"./app/panels/samples/index.js\",\n\t\"./samples/chart\": \"./app/panels/samples/chart.js\",\n\t\"./samples/chart.js\": \"./app/panels/samples/chart.js\",\n\t\"./samples/data_grid\": \"./app/panels/samples/data_grid.js\",\n\t\"./samples/data_grid.js\": \"./app/panels/samples/data_grid.js\",\n\t\"./samples/gantt\": \"./app/panels/samples/gantt.js\",\n\t\"./samples/gantt.js\": \"./app/panels/samples/gantt.js\",\n\t\"./samples/index\": \"./app/panels/samples/index.js\",\n\t\"./samples/index.js\": \"./app/panels/samples/index.js\",\n\t\"./samples/loader\": \"./app/panels/samples/loader.js\",\n\t\"./samples/loader.js\": \"./app/panels/samples/loader.js\",\n\t\"./samples/messages\": \"./app/panels/samples/messages.js\",\n\t\"./samples/messages.js\": \"./app/panels/samples/messages.js\",\n\t\"./samples/mui\": \"./app/panels/samples/mui.js\",\n\t\"./samples/mui.js\": \"./app/panels/samples/mui.js\",\n\t\"./samples/p8online\": \"./app/panels/samples/p8online.js\",\n\t\"./samples/p8online.js\": \"./app/panels/samples/p8online.js\",\n\t\"./samples/samples\": \"./app/panels/samples/samples.js\",\n\t\"./samples/samples.js\": \"./app/panels/samples/samples.js\",\n\t\"./samples/svg\": \"./app/panels/samples/svg.js\",\n\t\"./samples/svg.js\": \"./app/panels/samples/svg.js\"\n};\n\n\nfunction webpackContext(req) {\n\tvar id = webpackContextResolve(req);\n\treturn __webpack_require__(id);\n}\nfunction webpackContextResolve(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t}\n\treturn map[req];\n}\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = \"./app/panels sync recursive ^\\\\.\\\\/.*$\";\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/panels/_sync_^\\.\\/.*$?"); /***/ }), @@ -3579,7 +3579,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ P8PSVG: () => (/* binding */ P8PSVG)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/IconButton/IconButton.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Icon/Icon.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! prop-types */ \"./node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_1__);\n/*\r\n Парус 8 - Панели мониторинга\r\n Компонент: Интерактивные изображения SVG\r\n*/\n\n//---------------------\n//Подключение библиотек\n//---------------------\n\n //Классы React\n //Интерфейсные элементы\n //Контроль свойств компонента\n\n//---------\n//Константы\n//---------\n\n//Стили\nconst STYLES = {\n CANVAS: {\n width: \"100%\",\n height: \"100%\"\n },\n CONTROLS: {\n justifyContent: \"center\",\n alignItems: \"center\",\n display: \"flex\"\n }\n};\n\n//Структура элемента изображения\nconst P8P_SVG_ITEM_SHAPE = prop_types__WEBPACK_IMPORTED_MODULE_1___default().shape({\n id: (prop_types__WEBPACK_IMPORTED_MODULE_1___default().string).isRequired,\n backgroundColor: prop_types__WEBPACK_IMPORTED_MODULE_1___default().oneOfType([(prop_types__WEBPACK_IMPORTED_MODULE_1___default().string), prop_types__WEBPACK_IMPORTED_MODULE_1___default().arrayOf((prop_types__WEBPACK_IMPORTED_MODULE_1___default().string))])\n});\n\n//-----------\n//Тело модуля\n//-----------\n\n//Интерактивные изображения SVG\nconst P8PSVG = ({\n data,\n items,\n onClick,\n onItemClick,\n canvasStyle\n}) => {\n //Собственное состояние\n const [state, setState] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({\n images: [],\n currentImage: 0,\n imagesCount: 0\n });\n\n //Ссылки на DOM\n const svgContainerRef = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(null);\n const svgRef = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(null);\n\n //Обработка нажатия на элемент изображения\n const handleClick = e => {\n let itemClickFired = false;\n if (e.target.id && items && onItemClick) {\n const item = items.find(item => item.id == e.target.id);\n if (item) {\n onItemClick({\n item\n });\n itemClickFired = true;\n }\n }\n if (!itemClickFired && onClick) onClick(e);\n };\n\n //Формирование интерактивных элементов изображения\n const makeSVGItems = () => {\n items.forEach(item => {\n const svgE = document.getElementById(item.id);\n if (svgE) {\n svgE.setAttribute(\"style\", `${onItemClick ? \"cursor: pointer\" : \"\"}; ${item.backgroundColor ? `fill: ${item.backgroundColor}` : \"\"}`);\n if (item?.title) {\n const titleE = document.createElementNS(\"http://www.w3.org/2000/svg\", \"title\");\n titleE.textContent = item.title;\n svgE.replaceChildren(titleE);\n }\n }\n });\n };\n\n //Загрузка изображения\n const loadSVG = () => {\n const images = data.split(\"\").filter(i => i).map(i => i + \"\");\n setState(pv => ({\n ...pv,\n images,\n imagesCount: images.length,\n currentImage: 0\n }));\n };\n\n //Отображение текущего изображения\n const showSVG = () => {\n if (state.imagesCount > 0) {\n const parser = new DOMParser();\n const doc = parser.parseFromString(state.images[state.currentImage], \"image/svg+xml\");\n svgRef.current = doc.documentElement;\n svgRef.current.onclick = handleClick;\n svgContainerRef.current.replaceChildren(svgRef.current);\n if (items) makeSVGItems(items);\n }\n };\n\n //Переключение текущего изображения\n const switchImage = direction => {\n setState(pv => ({\n ...pv,\n currentImage: direction > 0 ? pv.currentImage + 1 >= pv.imagesCount ? 0 : pv.currentImage + 1 : pv.currentImage - 1 < 0 ? pv.imagesCount - 1 : pv.currentImage - 1\n }));\n };\n\n //При обновлении данных\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n loadSVG();\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [data]);\n\n //При загрузке изображения\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n showSVG();\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [state.images, state.currentImage, items]);\n\n //При прокрутке изображений назад\n const handlePrevClick = () => switchImage(-1);\n\n //При прокрутке изображений вперёд\n const handleNextClick = () => switchImage(1);\n\n //Генерация содержимого\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n ref: svgContainerRef,\n style: {\n ...STYLES.CANVAS,\n ...(canvasStyle ? canvasStyle : {})\n }\n }), state.imagesCount > 1 ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n style: STYLES.CONTROLS\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n onClick: handlePrevClick\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_3__[\"default\"], null, \"arrow_left\")), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n onClick: handleNextClick\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_3__[\"default\"], null, \"arrow_right\"))) : null);\n};\n\n//Контроль свойств - Интерактивные изображения SVG\nP8PSVG.propTypes = {\n data: (prop_types__WEBPACK_IMPORTED_MODULE_1___default().string).isRequired,\n items: prop_types__WEBPACK_IMPORTED_MODULE_1___default().arrayOf(P8P_SVG_ITEM_SHAPE),\n onClick: (prop_types__WEBPACK_IMPORTED_MODULE_1___default().func),\n onItemClick: (prop_types__WEBPACK_IMPORTED_MODULE_1___default().func),\n canvasStyle: (prop_types__WEBPACK_IMPORTED_MODULE_1___default().object)\n};\n\n//----------------\n//Интерфейс модуля\n//----------------\n\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/components/p8p_svg.js?"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ P8PSVG: () => (/* binding */ P8PSVG)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Container/Container.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Grid/Grid.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/IconButton/IconButton.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Icon/Icon.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! prop-types */ \"./node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_1__);\n/*\r\n Парус 8 - Панели мониторинга\r\n Компонент: Интерактивные изображения SVG\r\n*/\n\n//---------------------\n//Подключение библиотек\n//---------------------\n\n //Классы React\n //Интерфейсные элементы\n //Контроль свойств компонента\n\n//---------\n//Константы\n//---------\n\n//Стили\nconst STYLES = {\n GRID_ITEM_CANVAS: {\n width: \"100%\",\n height: \"100%\"\n },\n CONTROLS: {\n justifyContent: \"center\",\n alignItems: \"center\",\n display: \"flex\"\n }\n};\n\n//Структура элемента изображения\nconst P8P_SVG_ITEM_SHAPE = prop_types__WEBPACK_IMPORTED_MODULE_1___default().shape({\n id: prop_types__WEBPACK_IMPORTED_MODULE_1___default().oneOfType([(prop_types__WEBPACK_IMPORTED_MODULE_1___default().string), (prop_types__WEBPACK_IMPORTED_MODULE_1___default().number)]).isRequired,\n backgroundColor: prop_types__WEBPACK_IMPORTED_MODULE_1___default().oneOfType([(prop_types__WEBPACK_IMPORTED_MODULE_1___default().string), prop_types__WEBPACK_IMPORTED_MODULE_1___default().arrayOf((prop_types__WEBPACK_IMPORTED_MODULE_1___default().string))])\n});\n\n//-----------\n//Тело модуля\n//-----------\n\n//Интерактивные изображения SVG\nconst P8PSVG = ({\n data,\n items,\n onClick,\n onItemClick,\n canvasStyle,\n fillOpacity\n}) => {\n //Собственное состояние\n const [state, setState] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({\n images: [],\n currentImage: 0,\n imagesCount: 0\n });\n\n //Ссылки на DOM\n const svgContainerRef = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(null);\n const svgRef = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(null);\n\n //Обработка нажатия на элемент изображения\n const handleClick = e => {\n let itemClickFired = false;\n if (items && onItemClick) {\n const item = items.find(item => item.id == e.target?.id || item.id == e.target?.parentElement?.id);\n if (item) {\n onItemClick({\n item\n });\n itemClickFired = true;\n }\n }\n if (!itemClickFired && onClick) onClick(e);\n };\n\n //Формирование интерактивных элементов изображения\n const makeSVGItems = () => {\n items.forEach(item => {\n const svgE = document.getElementById(item.id);\n if (svgE) {\n //Запомним старый стиль элемента\n let styleOld = svgE.getAttribute(\"style\") || \"\";\n if (styleOld && !styleOld.endsWith(\";\")) styleOld = `${styleOld};`;\n //Сформируем стиль для заливки\n let fillStyle = \"\";\n if (item.backgroundColor) fillStyle = `fill: ${item.backgroundColor}; ${fillOpacity ? `opacity: ${fillOpacity};` : \"\"}`;\n //Сформируем стиль для курсора\n let cursorStyle = \"\";\n if (onItemClick) cursorStyle = \"cursor: pointer;\";\n //Добавим элемент для всплывающей подсказки\n let titleE = null;\n if (item?.title) {\n titleE = document.createElementNS(\"http://www.w3.org/2000/svg\", \"title\");\n titleE.textContent = item.title;\n svgE.appendChild(titleE);\n }\n //Если нем попалась группа\n if (svgE.tagName == \"g\") {\n //Установим ей новые стили\n svgE.setAttribute(\"style\", `${styleOld}${cursorStyle}`);\n //И заливку всем дочерним элементам\n if (fillStyle) for (const child of svgE.children) {\n let childStyleOld = child.getAttribute(\"style\") || \"\";\n if (childStyleOld && !childStyleOld.endsWith(\";\")) childStyleOld = `${childStyleOld};`;\n child.setAttribute(\"style\", `${childStyleOld}${fillStyle}`);\n }\n } else {\n //Это простой элемент, не группа - просто выставляем стили\n svgE.setAttribute(\"style\", `${styleOld}${cursorStyle}${fillStyle}`);\n }\n }\n });\n };\n\n //Загрузка изображения\n const loadSVG = () => {\n const images = data.split(\"\").filter(i => i).map(i => i + \"\");\n setState(pv => ({\n ...pv,\n images,\n imagesCount: images.length,\n currentImage: 0\n }));\n };\n\n //Отображение текущего изображения\n const showSVG = () => {\n if (state.imagesCount > 0) {\n const parser = new DOMParser();\n const doc = parser.parseFromString(state.images[state.currentImage], \"image/svg+xml\");\n svgRef.current = doc.documentElement;\n svgRef.current.onclick = handleClick;\n svgContainerRef.current.replaceChildren(svgRef.current);\n if (items) makeSVGItems(items);\n }\n };\n\n //Переключение текущего изображения\n const switchImage = direction => {\n setState(pv => ({\n ...pv,\n currentImage: direction > 0 ? pv.currentImage + 1 >= pv.imagesCount ? 0 : pv.currentImage + 1 : pv.currentImage - 1 < 0 ? pv.imagesCount - 1 : pv.currentImage - 1\n }));\n };\n\n //При обновлении данных\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n loadSVG();\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [data]);\n\n //При загрузке изображения\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n showSVG();\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [state.images, state.currentImage, items]);\n\n //При прокрутке изображений назад\n const handlePrevClick = () => switchImage(1);\n\n //При прокрутке изображений вперёд\n const handleNextClick = () => switchImage(-1);\n\n //Генерация содержимого\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_2__[\"default\"], null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n container: true,\n direction: \"column\",\n justifyContent: \"center\",\n alignItems: \"center\",\n spacing: 0\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n item: true,\n xs: 12,\n sx: STYLES.GRID_ITEM_CANVAS\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n ref: svgContainerRef,\n style: {\n ...(canvasStyle ? canvasStyle : {})\n }\n })), state.imagesCount > 1 ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n item: true,\n xs: 12\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n style: STYLES.CONTROLS\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n onClick: handlePrevClick\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_5__[\"default\"], null, \"arrow_left\")), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n onClick: handleNextClick\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_5__[\"default\"], null, \"arrow_right\")))) : null));\n};\n\n//Контроль свойств - Интерактивные изображения SVG\nP8PSVG.propTypes = {\n data: (prop_types__WEBPACK_IMPORTED_MODULE_1___default().string).isRequired,\n items: prop_types__WEBPACK_IMPORTED_MODULE_1___default().arrayOf(P8P_SVG_ITEM_SHAPE),\n onClick: (prop_types__WEBPACK_IMPORTED_MODULE_1___default().func),\n onItemClick: (prop_types__WEBPACK_IMPORTED_MODULE_1___default().func),\n canvasStyle: (prop_types__WEBPACK_IMPORTED_MODULE_1___default().object),\n fillOpacity: (prop_types__WEBPACK_IMPORTED_MODULE_1___default().string)\n};\n\n//----------------\n//Интерфейс модуля\n//----------------\n\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/components/p8p_svg.js?"); /***/ }), @@ -3777,40 +3777,51 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ useCostDeliverySheets: () => (/* binding */ useCostDeliverySheets),\n/* harmony export */ useCostProductComposition: () => (/* binding */ useCostProductComposition),\n/* harmony export */ useCostRouteLists: () => (/* binding */ useCostRouteLists),\n/* harmony export */ useMechRecAssemblyMon: () => (/* binding */ useMechRecAssemblyMon)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _context_backend__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../context/backend */ \"./app/context/backend.js\");\n/* harmony import */ var _core_utils__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../core/utils */ \"./app/core/utils.js\");\n//---------------------\n//Подключение библиотек\n//---------------------\n\n //Классы React\n //Контекст взаимодействия с сервером\n //Вспомогательные функции\n\n//---------\n//Константы\n//---------\n\n//Размер страницы данных\nconst DATA_GRID_PAGE_SIZE = 10;\n\n//-----------\n//Тело модуля\n//-----------\n\n//Хук для основной таблицы панели\nconst useMechRecAssemblyMon = () => {\n //Собственное состояние\n let [state, setState] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({\n init: false,\n showPlanList: false,\n planCtlgs: [],\n planCtlgsLoaded: false,\n selectedPlanCtlg: {\n NRN: null,\n SNAME: null,\n NMIN_YEAR: null,\n NMAX_YEAR: null\n },\n plans: [],\n plansLoaded: false,\n selectedPlan: {\n NRN: null,\n SNUMB: null,\n NPROGRESS: null,\n SDETAIL: null,\n NYEAR: null\n }\n });\n\n //Подключение к контексту взаимодействия с сервером\n const {\n executeStored\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_backend__WEBPACK_IMPORTED_MODULE_1__[\"BackEndСtx\"]);\n\n //Инициализация каталогов планов\n const initPlanCtlgs = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async () => {\n if (!state.init) {\n const data = await executeStored({\n stored: \"PKG_P8PANELS_MECHREC.FCPRODPLAN_CTLG_INIT\",\n args: {},\n respArg: \"COUT\",\n isArray: name => name === \"XFCPRODPLAN_CRNS\"\n });\n setState(pv => ({\n ...pv,\n init: true,\n planCtlgs: [...(data?.XFCPRODPLAN_CRNS || [])],\n planCtlgsLoaded: true\n }));\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [state.init, executeStored]);\n\n //Получение информации о планах каталога\n const loadPlans = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async NCRN => {\n if (NCRN) {\n const data = await executeStored({\n stored: \"PKG_P8PANELS_MECHREC.FCPRODPLAN_GET\",\n args: {\n NCRN: NCRN\n },\n respArg: \"COUT\",\n isArray: name => name === \"XFCPRODPLAN_INFO\"\n });\n setState(pv => ({\n ...pv,\n init: true,\n plans: [...(data?.XFCPRODPLAN_INFO || [])],\n plansLoaded: true\n }));\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [executeStored]);\n\n //Выбор каталога планов\n const selectPlan = project => {\n setState(pv => ({\n ...pv,\n selectedPlanCtlg: project,\n showPlanList: false\n }));\n };\n\n //Сброс выбора каталога планов\n const unselectPlan = () => setState(pv => ({\n ...pv,\n selectedPlanCtlg: {\n NRN: null,\n SNAME: null,\n NMIN_YEAR: null,\n NMAX_YEAR: null\n },\n showPlanList: false\n }));\n\n //При подключении компонента к странице\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n initPlanCtlgs();\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n //При изменении каталога\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n //Если каталог выбран\n if (state.selectedPlanCtlg) {\n loadPlans(state.selectedPlanCtlg.NRN);\n } else {\n setState(pv => ({\n ...pv,\n plans: [],\n plansLoaded: false\n }));\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [state.selectedPlanCtlg]);\n return [state, setState, selectPlan, unselectPlan];\n};\n\n//Хук для информации по производственным составам\nconst useCostProductComposition = nProdPlan => {\n //Собственное состояние\n let [costProductComposition, setCostProductComposition] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({\n init: false,\n showPlanList: false,\n products: [],\n selectedProduct: null\n });\n\n //Подключение к контексту взаимодействия с сервером\n const {\n executeStored\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_backend__WEBPACK_IMPORTED_MODULE_1__[\"BackEndСtx\"]);\n\n //Инициализация производственных составов\n const initCostProductComposition = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async () => {\n if (!costProductComposition.init) {\n const data = await executeStored({\n stored: \"PKG_P8PANELS_MECHREC.FCPRODCMP_DETAILS_GET\",\n args: {\n NFCPRODPLAN: nProdPlan\n },\n respArg: \"COUT\",\n isArray: name => name === \"XFCPRODCMP\"\n });\n setCostProductComposition(pv => ({\n ...pv,\n init: true,\n products: [...(data?.XFCPRODCMP || [])],\n productsLoaded: true\n }));\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [costProductComposition.init, executeStored]);\n\n //При подключении компонента к странице\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n initCostProductComposition();\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n return [costProductComposition, setCostProductComposition];\n};\n\n//Хук для таблицы маршрутных листов\nconst useCostRouteLists = (plan, product) => {\n //Собственное состояние - таблица данных\n const [costRouteLists, setCostRouteLists] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({\n dataLoaded: false,\n columnsDef: [],\n orders: null,\n rows: [],\n reload: true,\n pageNumber: 1,\n morePages: true,\n selectedProduct: null\n });\n\n //Подключение к контексту взаимодействия с сервером\n const {\n executeStored,\n SERV_DATA_TYPE_CLOB\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_backend__WEBPACK_IMPORTED_MODULE_1__[\"BackEndСtx\"]);\n\n //Загрузка данных таблицы с сервера\n const loadData = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async () => {\n if (costRouteLists.reload) {\n const data = await executeStored({\n stored: \"PKG_P8PANELS_MECHREC.FCROUTLST_MON_DG_GET\",\n args: {\n NPRODCMPSP: product,\n NFCPRODPLAN: plan,\n CORDERS: {\n VALUE: (0,_core_utils__WEBPACK_IMPORTED_MODULE_2__.object2Base64XML)(costRouteLists.orders, {\n arrayNodeName: \"orders\"\n }),\n SDATA_TYPE: SERV_DATA_TYPE_CLOB\n },\n NPAGE_NUMBER: costRouteLists.pageNumber,\n NPAGE_SIZE: DATA_GRID_PAGE_SIZE,\n NINCLUDE_DEF: costRouteLists.dataLoaded ? 0 : 1\n },\n respArg: \"COUT\"\n });\n setCostRouteLists(pv => ({\n ...pv,\n columnsDef: data.XCOLUMNS_DEF ? [...data.XCOLUMNS_DEF] : pv.columnsDef,\n rows: pv.pageNumber == 1 ? [...(data.XROWS || [])] : [...pv.rows, ...(data.XROWS || [])],\n dataLoaded: true,\n reload: false,\n morePages: (data.XROWS || []).length >= DATA_GRID_PAGE_SIZE\n }));\n }\n },\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [costRouteLists.reload, costRouteLists.orders, costRouteLists.dataLoaded, costRouteLists.pageNumber, executeStored, SERV_DATA_TYPE_CLOB]);\n\n //При изменении продукта\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n //Если продукт указан\n if (product) {\n //Принудительно обновляем состояние\n setCostRouteLists(pv => ({\n ...pv,\n dataLoaded: false,\n columnsDef: [],\n orders: null,\n rows: [],\n reload: true,\n pageNumber: 1,\n morePages: true,\n selectedProduct: null\n }));\n //Загружаем данные с учетом выбранного продукта\n loadData();\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [product]);\n\n //При необходимости обновить данные таблицы\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n //Если продукт указан и необходимо стандартное обновление\n if (product) {\n loadData();\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [costRouteLists.reload, loadData]);\n\n //При изменении плана\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n setCostRouteLists(pv => ({\n ...pv,\n dataLoaded: false,\n columnsDef: [],\n orders: null,\n rows: [],\n reload: true,\n pageNumber: 1,\n morePages: true,\n selectedProduct: null\n }));\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [plan]);\n return [costRouteLists, setCostRouteLists];\n};\n\n//Хук для таблицы комплектовочных ведомостей\nconst useCostDeliverySheets = (plan, product) => {\n //Собственное состояние - таблица данных\n const [costDeliverySheets, setCostDeliverySheets] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({\n dataLoaded: false,\n columnsDef: [],\n orders: null,\n rows: [],\n reload: true,\n pageNumber: 1,\n morePages: true,\n selectedProduct: null\n });\n\n //Подключение к контексту взаимодействия с сервером\n const {\n executeStored,\n SERV_DATA_TYPE_CLOB\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_backend__WEBPACK_IMPORTED_MODULE_1__[\"BackEndСtx\"]);\n\n //Загрузка данных таблицы с сервера\n const loadData = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async () => {\n if (costDeliverySheets.reload) {\n const data = await executeStored({\n stored: \"PKG_P8PANELS_MECHREC.FCDELIVSH_DG_GET\",\n args: {\n NPRODCMPSP: product,\n NFCPRODPLAN: plan,\n CORDERS: {\n VALUE: (0,_core_utils__WEBPACK_IMPORTED_MODULE_2__.object2Base64XML)(costDeliverySheets.orders, {\n arrayNodeName: \"orders\"\n }),\n SDATA_TYPE: SERV_DATA_TYPE_CLOB\n },\n NPAGE_NUMBER: costDeliverySheets.pageNumber,\n NPAGE_SIZE: DATA_GRID_PAGE_SIZE,\n NINCLUDE_DEF: costDeliverySheets.dataLoaded ? 0 : 1\n },\n respArg: \"COUT\"\n });\n setCostDeliverySheets(pv => ({\n ...pv,\n columnsDef: data.XCOLUMNS_DEF ? [...data.XCOLUMNS_DEF] : pv.columnsDef,\n rows: pv.pageNumber == 1 ? [...(data.XROWS || [])] : [...pv.rows, ...(data.XROWS || [])],\n dataLoaded: true,\n reload: false,\n morePages: (data.XROWS || []).length >= DATA_GRID_PAGE_SIZE\n }));\n }\n },\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [costDeliverySheets.reload, costDeliverySheets.orders, costDeliverySheets.dataLoaded, costDeliverySheets.pageNumber, executeStored, SERV_DATA_TYPE_CLOB]);\n\n //При изменении продукта\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n //Если продукт указан\n if (product) {\n //Принудительно обновляем состояние\n setCostDeliverySheets(pv => ({\n ...pv,\n dataLoaded: false,\n columnsDef: [],\n orders: null,\n rows: [],\n reload: true,\n pageNumber: 1,\n morePages: true\n }));\n //Загружаем данные с учетом выбранного продукта\n loadData();\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [product]);\n\n //При необходимости обновить данные таблицы\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n //Если продукт указан и необходимо стандартное обновление\n if (product) {\n loadData();\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [costDeliverySheets.reload, loadData]);\n\n //При изменении плана\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n setCostDeliverySheets(pv => ({\n ...pv,\n dataLoaded: false,\n columnsDef: [],\n orders: null,\n rows: [],\n reload: true,\n pageNumber: 1,\n morePages: true,\n selectedProduct: null\n }));\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [plan]);\n return [costDeliverySheets, setCostDeliverySheets];\n};\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/panels/mech_rec_assembly_mon/backend.js?"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ useCostProductComposition: () => (/* binding */ useCostProductComposition),\n/* harmony export */ useMechRecAssemblyMon: () => (/* binding */ useMechRecAssemblyMon),\n/* harmony export */ useProductDetailsTable: () => (/* binding */ useProductDetailsTable)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _context_backend__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../context/backend */ \"./app/context/backend.js\");\n/* harmony import */ var _core_utils__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../core/utils */ \"./app/core/utils.js\");\n//---------------------\n//Подключение библиотек\n//---------------------\n\n //Классы React\n //Контекст взаимодействия с сервером\n //Вспомогательные функции\n\n//---------\n//Константы\n//---------\n\n//Размер страницы данных\nconst DATA_GRID_PAGE_SIZE = 0;\n\n//-----------\n//Тело модуля\n//-----------\n\n//Хук для основной таблицы панели\nconst useMechRecAssemblyMon = () => {\n //Собственное состояние\n let [state, setState] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({\n init: false,\n showPlanList: false,\n planCtlgs: [],\n planCtlgsLoaded: false,\n selectedPlanCtlg: {},\n plans: [],\n plansLoaded: false,\n selectedPlan: {}\n });\n\n //Подключение к контексту взаимодействия с сервером\n const {\n executeStored\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_backend__WEBPACK_IMPORTED_MODULE_1__[\"BackEndСtx\"]);\n\n //Инициализация каталогов планов\n const initPlanCtlgs = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async () => {\n if (!state.init) {\n const data = await executeStored({\n stored: \"PKG_P8PANELS_MECHREC.FCPRODPLAN_CTLG_INIT\",\n args: {},\n respArg: \"COUT\",\n isArray: name => name === \"XFCPRODPLAN_CRNS\"\n });\n setState(pv => ({\n ...pv,\n init: true,\n planCtlgs: [...(data?.XFCPRODPLAN_CRNS || [])],\n planCtlgsLoaded: true\n }));\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [state.init, executeStored]);\n\n //Получение информации о планах каталога\n const loadPlans = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async NCRN => {\n if (NCRN) {\n const data = await executeStored({\n stored: \"PKG_P8PANELS_MECHREC.FCPRODPLAN_GET\",\n args: {\n NCRN: NCRN\n },\n respArg: \"COUT\",\n isArray: name => name === \"XFCPRODPLAN_INFO\"\n });\n setState(pv => ({\n ...pv,\n init: true,\n plans: [...(data?.XFCPRODPLAN_INFO || [])],\n plansLoaded: true\n }));\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [executeStored]);\n\n //Выбор каталога планов\n const selectPlanCtlg = planCtlg => {\n setState(pv => ({\n ...pv,\n selectedPlanCtlg: {\n ...planCtlg\n },\n selectedPlan: {},\n showPlanList: false\n }));\n };\n\n //Сброс выбора каталога планов\n const unselectPlanCtlg = () => setState(pv => ({\n ...pv,\n selectedPlanCtlg: {},\n selectedPlan: {},\n showPlanList: false\n }));\n\n //При подключении компонента к странице\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n initPlanCtlgs();\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n //При изменении каталога\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n //Если каталог выбран\n if (state.selectedPlanCtlg) {\n loadPlans(state.selectedPlanCtlg.NRN);\n } else {\n setState(pv => ({\n ...pv,\n plans: [],\n plansLoaded: false\n }));\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [state.selectedPlanCtlg]);\n return [state, setState, selectPlanCtlg, unselectPlanCtlg];\n};\n\n//Хук для информации по производственным составам\nconst useCostProductComposition = nProdPlan => {\n //Собственное состояние\n let [costProductComposition, setCostProductComposition] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({\n init: false,\n showPlanList: false,\n products: [],\n productsLoaded: false,\n model: null,\n selectedProduct: null\n });\n\n //Подключение к контексту взаимодействия с сервером\n const {\n executeStored\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_backend__WEBPACK_IMPORTED_MODULE_1__[\"BackEndСtx\"]);\n\n //Инициализация производственных составов\n const initCostProductComposition = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async () => {\n if (!costProductComposition.init) {\n const data = await executeStored({\n stored: \"PKG_P8PANELS_MECHREC.FCPRODCMP_DETAILS_GET\",\n args: {\n NFCPRODPLAN: nProdPlan\n },\n respArg: \"COUT\",\n isArray: name => name === \"XFCPRODCMP\"\n });\n setCostProductComposition(pv => ({\n ...pv,\n init: true,\n products: [...(data?.XFCPRODCMP || [])],\n productsLoaded: true,\n model: data?.BMODEL\n }));\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [costProductComposition.init, executeStored]);\n\n //При подключении компонента к странице\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n initCostProductComposition();\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n return [costProductComposition, setCostProductComposition];\n};\n\n//Хук для таблицы детализации изделия\nconst useProductDetailsTable = (plan, product, orders, pageNumber, stored) => {\n //Собственное состояние - флаг загрузки\n const [isLoading, setLoading] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(true);\n\n //Собственное состояние - таблица данных\n const [data, setData] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({\n columnsDef: [],\n rows: [],\n morePages: true\n });\n\n //Подключение к контексту взаимодействия с сервером\n const {\n executeStored,\n SERV_DATA_TYPE_CLOB\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_backend__WEBPACK_IMPORTED_MODULE_1__[\"BackEndСtx\"]);\n\n //Загрузка данных при изменении зависимостей\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n const loadData = async () => {\n try {\n setLoading(true);\n const data = await executeStored({\n stored,\n args: {\n NPRODCMPSP: product,\n NFCPRODPLAN: plan,\n CORDERS: {\n VALUE: (0,_core_utils__WEBPACK_IMPORTED_MODULE_2__.object2Base64XML)(orders, {\n arrayNodeName: \"orders\"\n }),\n SDATA_TYPE: SERV_DATA_TYPE_CLOB\n },\n NPAGE_NUMBER: pageNumber,\n NPAGE_SIZE: DATA_GRID_PAGE_SIZE,\n NINCLUDE_DEF: 1\n },\n respArg: \"COUT\"\n });\n setData(pv => ({\n ...pv,\n columnsDef: data.XCOLUMNS_DEF ? [...data.XCOLUMNS_DEF] : pv.columnsDef,\n rows: pageNumber == 1 ? [...(data.XROWS || [])] : [...pv.rows, ...(data.XROWS || [])],\n morePages: DATA_GRID_PAGE_SIZE == 0 ? false : (data.XROWS || []).length >= DATA_GRID_PAGE_SIZE\n }));\n } finally {\n setLoading(false);\n }\n };\n if (plan && product) loadData();\n }, [plan, product, orders, pageNumber, stored, executeStored, SERV_DATA_TYPE_CLOB]);\n\n //Вернём данные\n return {\n data,\n isLoading\n };\n};\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/panels/mech_rec_assembly_mon/backend.js?"); /***/ }), -/***/ "./app/panels/mech_rec_assembly_mon/blocks/cardBlock.js": -/*!**************************************************************!*\ - !*** ./app/panels/mech_rec_assembly_mon/blocks/cardBlock.js ***! - \**************************************************************/ +/***/ "./app/panels/mech_rec_assembly_mon/components/plan_detail.js": +/*!********************************************************************!*\ + !*** ./app/panels/mech_rec_assembly_mon/components/plan_detail.js ***! + \********************************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ CardBlock: () => (/* binding */ CardBlock)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! prop-types */ \"./node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_5__);\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Box/Box.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/ImageList/ImageList.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/ImageListItem/ImageListItem.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Typography/Typography.js\");\n/* harmony import */ var _elements_progressBox__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../elements/progressBox */ \"./app/panels/mech_rec_assembly_mon/elements/progressBox.js\");\n/*\r\n Парус 8 - Панели мониторинга - ПУП - Мониторинг сборки изделий\r\n Панель мониторинга: Информация об объекте\r\n*/\n\n//---------------------\n//Подключение библиотек\n//---------------------\n\n //Классы React\n //Контроль свойств компонента\n //Интерфейсные элементы\n //Блок информации по прогрессу объекта\n\n//---------\n//Константы\n//---------\n\n//Стили\nconst STYLES = {\n PLAN_INFO: {\n display: \"flex\",\n justifyContent: \"center\",\n alignItems: \"center\",\n flexDirection: \"column\",\n gap: \"24px\",\n border: \"1px solid\",\n borderRadius: \"25px\"\n }\n};\n\n//------------------------------------\n//Вспомогательные функции и компоненты\n//------------------------------------\n\n//Картинка объекта\nconst CardImage = ({\n card\n}) => {\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n width: 180,\n height: 180\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n variant: \"masonry\",\n cols: 1,\n gap: 8\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n key: 1\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"img\", {\n src: `data:image/png;base64,${card[\"#text\"]}`,\n alt: \"Image not loaded.\",\n loading: \"lazy\",\n width: 180\n }))));\n};\n\n//Контроль свойств - Заголовок первого уровня\nCardImage.propTypes = {\n card: (prop_types__WEBPACK_IMPORTED_MODULE_5___default().object)\n};\n\n//-----------\n//Тело модуля\n//-----------\n\n//Информация об объекте\nconst CardBlock = ({\n card,\n handleCardClick\n}) => {\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n sx: STYLES.PLAN_INFO,\n onClick: () => handleCardClick(card)\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(CardImage, {\n card: card\n }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n textAlign: \"center\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n variant: \"UDO_body1\",\n color: \"text.secondary.fontColor\"\n }, \"\\u041D\\u043E\\u043C\\u0435\\u0440 \\u0431\\u043E\\u0440\\u0442\\u0430\"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n variant: \"h2\"\n }, card.SNUMB)), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_elements_progressBox__WEBPACK_IMPORTED_MODULE_1__.ProgressBox, {\n prms: {\n NPROGRESS: card.NPROGRESS,\n SDETAIL: card.SDETAIL,\n width: \"155px\",\n height: \"155px\",\n progressVariant: \"h3\",\n detailVariant: \"UDO_body2\"\n }\n }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_2__[\"default\"], null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n variant: \"UDO_body1\",\n color: \"text.secondary.fontColor\"\n }, \"\\u0413\\u043E\\u0434 \\u0432\\u044B\\u043F\\u0443\\u0441\\u043A\\u0430:\"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n variant: \"subtitle1\",\n mt: -1\n }, card.NYEAR)));\n};\n\n//Контроль свойств - Заголовок первого уровня\nCardBlock.propTypes = {\n card: (prop_types__WEBPACK_IMPORTED_MODULE_5___default().object),\n handleCardClick: (prop_types__WEBPACK_IMPORTED_MODULE_5___default().func)\n};\n\n//----------------\n//Интерфейс модуля\n//----------------\n\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/panels/mech_rec_assembly_mon/blocks/cardBlock.js?"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ PlanDetail: () => (/* binding */ PlanDetail)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! prop-types */ \"./node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_8___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_8__);\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Box/Box.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Typography/Typography.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Container/Container.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Grid/Grid.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Stack/Stack.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/IconButton/IconButton.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Icon/Icon.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Button/Button.js\");\n/* harmony import */ var _components_p8p_data_grid__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../components/p8p_data_grid */ \"./app/components/p8p_data_grid.js\");\n/* harmony import */ var _components_p8p_svg__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../../components/p8p_svg */ \"./app/components/p8p_svg.js\");\n/* harmony import */ var _config_wrapper__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../../config_wrapper */ \"./app/config_wrapper.js\");\n/* harmony import */ var _backend__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../backend */ \"./app/panels/mech_rec_assembly_mon/backend.js\");\n/* harmony import */ var _progress_box__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./progress_box */ \"./app/panels/mech_rec_assembly_mon/components/progress_box.js\");\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n/*\r\n Парус 8 - Панели мониторинга - ПУП - Мониторинг сборки изделий\r\n Панель мониторинга: Детализация по объекту\r\n*/\n\n//---------------------\n//Подключение библиотек\n//---------------------\n\n //Классы React\n //Контроль свойств компонента\n //Интерфейсные элементы\n //Таблица данных\n //Интерактивные изображения\n //Подключение компонентов к настройкам приложения\n //Взаимодействие с сервером\n //Информация по прогрессу объекта\n\n//---------\n//Константы\n//---------\n\n//Стили\nconst STYLES = {\n BOX_INFO_MAIN: {\n border: \"1px solid\",\n borderRadius: \"25px\",\n height: \"35vh\"\n },\n BOX_INFO_SUB: isMessage => ({\n overflow: \"hidden\",\n textAlign: \"center\",\n width: \"100%\",\n height: \"100%\",\n display: \"flex\",\n flexDirection: \"column\",\n justifyContent: isMessage ? \"center\" : \"flex-start\",\n paddingLeft: \"5px\",\n paddingRight: \"5px\",\n ...(isMessage ? {\n padding: \"5px\"\n } : {\n paddingTop: \"10px\"\n })\n }),\n DETAIL_INFO: {\n display: \"flex\",\n justifyContent: \"space-around\",\n alignItems: \"center\",\n border: \"1px solid\",\n borderRadius: \"25px\",\n height: \"17vh\"\n },\n PRODUCT_SELECTOR_CONTAINER: {\n display: \"flex\",\n justifyContent: \"center\",\n alignItems: \"center\",\n flexDirection: \"column\",\n border: \"1px solid\",\n borderRadius: \"25px\",\n height: \"53vh\",\n marginTop: \"16px\"\n },\n PRODUCT_SELECTOR_MODEL: {\n width: \"70%\"\n },\n PLAN_INFO_MAIN: {\n display: \"flex\",\n flexDirection: \"column\",\n gap: \"16px\"\n },\n PLAN_INFO_SUB: {\n display: \"flex\",\n justifyContent: \"space-between\",\n width: \"280px\",\n borderBottom: \"1px solid\"\n },\n TABLE_DETAILS: {\n height: \"260px\"\n },\n TABLE_DETAILS_HEADER_CELL: maxWidth => ({\n padding: \"2px 2px\",\n fontSize: \"11px\",\n textAlign: \"center\",\n lineHeight: \"1rem\",\n ...(maxWidth ? {\n maxWidth\n } : {})\n }),\n TABLE_DETAILS_DATA_CELL: textAlign => ({\n padding: \"2px 2px\",\n fontSize: \"11px\",\n ...(textAlign ? {\n textAlign\n } : {})\n }),\n CARD_DETAILS_CONTAINER: {\n minWidth: \"1200px\",\n maxWidth: \"1400px\"\n },\n CARD_DETAILS_NAVIGATION_STACK: {\n width: \"100%\"\n }\n};\n\n//------------------------------------\n//Вспомогательные функции и компоненты\n//------------------------------------\n\n//Информация о плане\nconst PlanInfo = ({\n plan\n}) => {\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n sx: STYLES.PLAN_INFO_MAIN\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n sx: STYLES.PLAN_INFO_SUB\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_7__[\"default\"], {\n variant: \"UDO_body1\",\n mt: 1\n }, \"\\u041D\\u043E\\u043C\\u0435\\u0440 \\u0431\\u043E\\u0440\\u0442\\u0430:\"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_7__[\"default\"], {\n variant: \"subtitle2\"\n }, plan.SNUMB)), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n sx: STYLES.PLAN_INFO_SUB\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_7__[\"default\"], {\n variant: \"UDO_body1\",\n mt: 1\n }, \"\\u0413\\u043E\\u0434 \\u0432\\u044B\\u043F\\u0443\\u0441\\u043A\\u0430:\"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_7__[\"default\"], {\n variant: \"subtitle2\"\n }, plan.NYEAR))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_progress_box__WEBPACK_IMPORTED_MODULE_5__.ProgressBox, {\n progress: plan.NPROGRESS,\n detail: plan.SDETAIL,\n width: \"110px\",\n height: \"110px\",\n progressVariant: \"subtitle2\",\n detailVariant: \"body3\"\n }));\n};\n\n//Контроль свойств - Информация о плане\nPlanInfo.propTypes = {\n plan: (prop_types__WEBPACK_IMPORTED_MODULE_8___default().object)\n};\n\n//Модель выпуска плана\nconst PlanProductCompositionModel = ({\n model,\n products,\n setCostProductComposition\n}) => {\n //При выборе детали на модели\n const handleProductClick = ({\n item\n }) => {\n const product = products.find(p => p.SMODEL_ID == item.id);\n if (product) setCostProductComposition(pv => ({\n ...pv,\n selectedProduct: {\n ...product\n }\n }));\n };\n\n //Генерация содержимого\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n sx: STYLES.PRODUCT_SELECTOR_MODEL\n }, model ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_components_p8p_svg__WEBPACK_IMPORTED_MODULE_2__.P8PSVG, {\n data: atob(model),\n items: products.map(p => ({\n id: p.SMODEL_ID,\n backgroundColor: p.SMODEL_BG_COLOR || \"red\",\n desc: p.SNAME,\n title: p.SNAME\n })),\n fillOpacity: \"0.3\",\n onItemClick: handleProductClick\n }) : /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_7__[\"default\"], {\n variant: \"subtitle2\"\n }, \"\\u041C\\u043E\\u0434\\u0435\\u043B\\u044C \\u0438\\u0437\\u0434\\u0435\\u043B\\u0438\\u044F \\u043D\\u0435 \\u0437\\u0430\\u0433\\u0440\\u0443\\u0436\\u0435\\u043D\\u0430\")));\n};\n\n//Контроль свойств - Модель выпуска плана\nPlanProductCompositionModel.propTypes = {\n model: (prop_types__WEBPACK_IMPORTED_MODULE_8___default().any),\n products: (prop_types__WEBPACK_IMPORTED_MODULE_8___default().array),\n setCostProductComposition: (prop_types__WEBPACK_IMPORTED_MODULE_8___default().func)\n};\n\n//Генерация представления ячейки заголовка\nconst headCellRender = ({\n columnDef\n}) => ({\n stackProps: {\n justifyContent: \"center\"\n },\n cellStyle: STYLES.TABLE_DETAILS_HEADER_CELL([\"NREMN_LABOUR\", \"NAPPLICABILITY\"].includes(columnDef.name) ? \"90px\" : [\"NDEFICIT\"].includes(columnDef.name) ? \"55px\" : null)\n});\n\n//Генерация заливки строки исходя от значений\nconst dataCellRender = ({\n row,\n columnDef\n}) => ({\n cellStyle: STYLES.TABLE_DETAILS_DATA_CELL([\"SOPERATION\", \"SNOMEN\"].includes(columnDef.name) ? null : \"center\"),\n data: row[columnDef]\n});\n\n//Таблица детализации изделия\nconst ProductDetailsTable = ({\n plan,\n product,\n stored,\n noProductMessage,\n noDataFoundMessage,\n title\n}) => {\n //Собственное состояние\n const [state, setState] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({\n plan: null,\n product: null,\n orders: null,\n pageNumber: 1\n });\n\n //Собственное состояние - данные таблицы\n const {\n data,\n isLoading\n } = (0,_backend__WEBPACK_IMPORTED_MODULE_4__.useProductDetailsTable)(state.plan, state.product, state.orders, state.pageNumber, stored);\n\n //При изменении состояния сортировки\n const handleOrderChanged = ({\n orders\n }) => setState(pv => ({\n ...pv,\n orders: [...orders],\n pageNumber: 1\n }));\n\n //При изменении количества отображаемых страниц\n const handlePagesCountChanged = () => setState(pv => ({\n ...pv,\n pageNumber: pv.pageNumber + 1\n }));\n\n //При изменении изделия\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n setState(pv => ({\n ...pv,\n plan,\n product,\n orders: null,\n pageNumber: 1\n }));\n }, [product, plan]);\n\n //Генерация содержимого\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n sx: STYLES.BOX_INFO_SUB(!product || data.rows.length === 0)\n }, !product ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_7__[\"default\"], {\n variant: \"UDO_body2\"\n }, noProductMessage) : isLoading ? null : data.rows.length === 0 ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_7__[\"default\"], {\n variant: \"subtitle2\"\n }, noDataFoundMessage) : /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_7__[\"default\"], {\n variant: \"h4\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"b\", null, title)), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_components_p8p_data_grid__WEBPACK_IMPORTED_MODULE_1__.P8PDataGrid, _extends({}, _config_wrapper__WEBPACK_IMPORTED_MODULE_3__.P8P_DATA_GRID_CONFIG_PROPS, {\n containerComponentProps: {\n sx: STYLES.TABLE_DETAILS,\n elevation: 0\n },\n columnsDef: data.columnsDef,\n rows: data.rows,\n size: _components_p8p_data_grid__WEBPACK_IMPORTED_MODULE_1__.P8P_DATA_GRID_SIZE.SMALL,\n morePages: data.morePages,\n fixedHeader: true,\n reloading: false,\n dataCellRender: dataCellRender,\n headCellRender: headCellRender,\n onOrderChanged: handleOrderChanged,\n onPagesCountChanged: handlePagesCountChanged\n }))));\n};\n\n//Контроль свойств - Таблица детализации изделия\nProductDetailsTable.propTypes = {\n plan: (prop_types__WEBPACK_IMPORTED_MODULE_8___default().number).isRequired,\n product: (prop_types__WEBPACK_IMPORTED_MODULE_8___default().number),\n stored: (prop_types__WEBPACK_IMPORTED_MODULE_8___default().string).isRequired,\n noProductMessage: (prop_types__WEBPACK_IMPORTED_MODULE_8___default().string).isRequired,\n noDataFoundMessage: (prop_types__WEBPACK_IMPORTED_MODULE_8___default().string).isRequired,\n title: (prop_types__WEBPACK_IMPORTED_MODULE_8___default().string).isRequired\n};\n\n//-----------\n//Тело модуля\n//-----------\n\n//Детализация по объекту\nconst PlanDetail = ({\n plan,\n disableNavigatePrev = false,\n disableNavigateNext = false,\n onNavigate,\n onBack\n}) => {\n //Собственное состояние - данные производственных составов SVG\n const [costProductComposition, setCostProductComposition] = (0,_backend__WEBPACK_IMPORTED_MODULE_4__.useCostProductComposition)(plan.NRN);\n\n //Формируем представление\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_9__[\"default\"], {\n maxWidth: false,\n sx: STYLES.CARD_DETAILS_CONTAINER\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_10__[\"default\"], {\n container: true,\n direction: \"row\",\n justifyContent: \"center\",\n alignItems: \"center\",\n spacing: 0\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_10__[\"default\"], {\n item: true,\n display: \"flex\",\n justifyContent: \"center\",\n xs: 1\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_11__[\"default\"], {\n display: \"flex\",\n direction: \"row\",\n justifyContent: \"flex-end\",\n alignItems: \"center\",\n sx: STYLES.CARD_DETAILS_NAVIGATION_STACK\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_12__[\"default\"], {\n disabled: disableNavigatePrev,\n onClick: () => onNavigate ? onNavigate(-1) : null\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_13__[\"default\"], null, \"navigate_before\")))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_10__[\"default\"], {\n item: true,\n xs: 10\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_9__[\"default\"], {\n maxWidth: false\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_14__[\"default\"], {\n onClick: () => onBack ? onBack() : null\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_11__[\"default\"], {\n direction: \"row\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_13__[\"default\"], null, \"chevron_left\"), \"\\u041D\\u0430\\u0437\\u0430\\u0434\")), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_10__[\"default\"], {\n container: true,\n spacing: 2,\n sx: {\n paddingTop: \"5px\"\n }\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_10__[\"default\"], {\n item: true,\n xs: 5\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n sx: STYLES.BOX_INFO_MAIN\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(ProductDetailsTable, {\n plan: plan.NRN,\n product: costProductComposition.selectedProduct?.NRN,\n stored: \"PKG_P8PANELS_MECHREC.FCROUTLST_DG_BY_PRDCMPSP_GET\",\n noProductMessage: \"Укажите элемент модели, чтобы увидеть информацию о маршрутных картах\",\n noDataFoundMessage: \"Маршрутные карты не найдены\",\n title: \"Маршрутные карты\"\n })), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n sx: STYLES.BOX_INFO_MAIN,\n mt: 2\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(ProductDetailsTable, {\n plan: plan.NRN,\n product: costProductComposition.selectedProduct?.NRN,\n stored: \"PKG_P8PANELS_MECHREC.FCDELIVSH_DG_BY_PRDCMPSP_GET\",\n noProductMessage: \"Укажите элемент модели, чтобы увидеть информацию о комплектовочных ведомостях\",\n noDataFoundMessage: \"Комплектовочные ведомости не найдены\",\n title: \"Дефицит комплектации\"\n }))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_10__[\"default\"], {\n item: true,\n xs: 7\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n sx: STYLES.DETAIL_INFO\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(PlanInfo, {\n plan: plan\n })), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n sx: STYLES.PRODUCT_SELECTOR_CONTAINER\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(PlanProductCompositionModel, {\n model: costProductComposition.model,\n products: costProductComposition.products,\n setCostProductComposition: setCostProductComposition\n })))))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_10__[\"default\"], {\n item: true,\n display: \"flex\",\n justifyContent: \"center\",\n xs: 1\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_11__[\"default\"], {\n display: \"flex\",\n direction: \"row\",\n justifyContent: \"flex-start\",\n alignItems: \"center\",\n sx: STYLES.CARD_DETAILS_NAVIGATION_STACK\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_12__[\"default\"], {\n disabled: disableNavigateNext,\n onClick: () => onNavigate ? onNavigate(1) : null\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_13__[\"default\"], null, \"navigate_next\"))))));\n};\n\n//Контроль свойств - Детализация по объекту\nPlanDetail.propTypes = {\n plan: (prop_types__WEBPACK_IMPORTED_MODULE_8___default().object),\n disableNavigatePrev: (prop_types__WEBPACK_IMPORTED_MODULE_8___default().bool),\n disableNavigateNext: (prop_types__WEBPACK_IMPORTED_MODULE_8___default().bool),\n onNavigate: (prop_types__WEBPACK_IMPORTED_MODULE_8___default().func),\n onBack: (prop_types__WEBPACK_IMPORTED_MODULE_8___default().func)\n};\n\n//----------------\n//Интерфейс модуля\n//----------------\n\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/panels/mech_rec_assembly_mon/components/plan_detail.js?"); /***/ }), -/***/ "./app/panels/mech_rec_assembly_mon/blocks/cardDetail.js": -/*!***************************************************************!*\ - !*** ./app/panels/mech_rec_assembly_mon/blocks/cardDetail.js ***! - \***************************************************************/ +/***/ "./app/panels/mech_rec_assembly_mon/components/plans_list.js": +/*!*******************************************************************!*\ + !*** ./app/panels/mech_rec_assembly_mon/components/plans_list.js ***! + \*******************************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ CardDetail: () => (/* binding */ CardDetail)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! prop-types */ \"./node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_7___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_7__);\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Box/Box.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Typography/Typography.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Button/Button.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Container/Container.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Grid/Grid.js\");\n/* harmony import */ var _elements_progressBox__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../elements/progressBox */ \"./app/panels/mech_rec_assembly_mon/elements/progressBox.js\");\n/* harmony import */ var _components_p8p_data_grid__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../../components/p8p_data_grid */ \"./app/components/p8p_data_grid.js\");\n/* harmony import */ var _config_wrapper__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../../config_wrapper */ \"./app/config_wrapper.js\");\n/* harmony import */ var _backend__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../backend */ \"./app/panels/mech_rec_assembly_mon/backend.js\");\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n/*\r\n Парус 8 - Панели мониторинга - ПУП - Мониторинг сборки изделий\r\n Панель мониторинга: Детализация по объекту\r\n*/\n\n//---------------------\n//Подключение библиотек\n//---------------------\n\n //Классы React\n //Контроль свойств компонента\n //Интерфейсные элементы\n //Блок информации по прогрессу объекта\n //Таблица данных\n //Подключение компонентов к настройкам приложения\n //Компоненты панели\n\n//---------\n//Константы\n//---------\n\n//Стили\nconst STYLES = {\n TABLE_INFO_MAIN: {\n display: \"flex\",\n justifyContent: \"center\",\n alignItems: \"center\",\n flexDirection: \"column\",\n border: \"1px solid\",\n borderRadius: \"25px\",\n height: \"35vh\"\n },\n TABLE_INFO_SUB: {\n margin: \"21.6px 0px\",\n maxHeight: \"100%\",\n overflow: \"auto\",\n textAlign: \"center\",\n width: \"100%\"\n },\n DETAIL_INFO: {\n display: \"flex\",\n justifyContent: \"space-around\",\n alignItems: \"center\",\n border: \"1px solid\",\n borderRadius: \"25px\",\n height: \"17vh\"\n },\n PRODUCT_SELECTOR: {\n display: \"flex\",\n justifyContent: \"center\",\n alignItems: \"center\",\n flexDirection: \"column\",\n border: \"1px solid\",\n borderRadius: \"25px\",\n height: \"53vh\",\n marginTop: \"16px\"\n },\n PLAN_INFO_MAIN: {\n display: \"flex\",\n flexDirection: \"column\",\n gap: \"16px\"\n },\n PLAN_INFO_SUB: {\n display: \"flex\",\n justifyContent: \"space-between\",\n width: \"280px\",\n borderBottom: \"1px solid\"\n }\n};\n\n//------------------------------------\n//Вспомогательные функции и компоненты\n//------------------------------------\n\n//Информация об объекте\nconst CardDetailInfo = ({\n cardInfo\n}) => {\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_5__[\"default\"], {\n sx: STYLES.PLAN_INFO_MAIN\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_5__[\"default\"], {\n sx: STYLES.PLAN_INFO_SUB\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n variant: \"UDO_body1\",\n mt: 1\n }, \"\\u041D\\u043E\\u043C\\u0435\\u0440 \\u0431\\u043E\\u0440\\u0442\\u0430:\"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n variant: \"subtitle2\"\n }, cardInfo.SNUMB)), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_5__[\"default\"], {\n sx: STYLES.PLAN_INFO_SUB\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n variant: \"UDO_body1\",\n mt: 1\n }, \"\\u0413\\u043E\\u0434 \\u0432\\u044B\\u043F\\u0443\\u0441\\u043A\\u0430:\"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n variant: \"subtitle2\"\n }, cardInfo.NYEAR))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_elements_progressBox__WEBPACK_IMPORTED_MODULE_1__.ProgressBox, {\n prms: {\n NPROGRESS: cardInfo.NPROGRESS,\n SDETAIL: cardInfo.SDETAIL,\n width: \"110px\",\n height: \"110px\",\n progressVariant: \"subtitle2\",\n detailVariant: \"body3\"\n }\n }));\n};\n\n//Контроль свойств - Информация об объекте\nCardDetailInfo.propTypes = {\n cardInfo: (prop_types__WEBPACK_IMPORTED_MODULE_7___default().object)\n};\n\n//Детали объекта\nconst CardSelector = ({\n products,\n setCostProductComposition\n}) => {\n //При выборе детали в SVG\n const handleProductClick = product => {\n setCostProductComposition(pv => ({\n ...pv,\n selectedProduct: product\n }));\n };\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_5__[\"default\"], {\n sx: STYLES.PLAN_INFO_MAIN\n }, products.map(el => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_8__[\"default\"], {\n key: el.NRN,\n onClick: () => handleProductClick(el.NRN)\n }, `${el.SNAME}`))));\n};\n\n//Контроль свойств - Детали объекта\nCardSelector.propTypes = {\n products: (prop_types__WEBPACK_IMPORTED_MODULE_7___default().array),\n setCostProductComposition: (prop_types__WEBPACK_IMPORTED_MODULE_7___default().func)\n};\n\n//Генерация представления ячейки заголовка\nconst headCellRender = ({\n columnDef\n}) => {\n //Описываем общий стиль\n let cellStyle = {\n padding: \"2px 5px\",\n fontSize: \"12px\",\n textAlign: \"center\",\n lineHeight: \"1rem\"\n };\n let stackProps = {\n justifyContent: \"center\"\n };\n //Дополнительные свойства\n switch (columnDef.name) {\n case \"NREMN_LABOUR\":\n //Добавляем максимальную ширину\n cellStyle = {\n ...cellStyle,\n maxWidth: \"90px\"\n };\n break;\n case \"NDEFICIT\":\n //Добавляем максимальную ширину\n cellStyle = {\n ...cellStyle,\n maxWidth: \"55px\"\n };\n break;\n case \"NAPPLICABILITY\":\n //Добавляем максимальную ширину\n cellStyle = {\n ...cellStyle,\n maxWidth: \"90px\"\n };\n break;\n default:\n break;\n }\n return {\n stackProps,\n cellStyle\n };\n};\n\n//Генерация заливки строки исходя от значений\nconst dataCellRender = ({\n row,\n columnDef\n}) => {\n //Описываем общий стиль\n let cellStyle = {\n padding: \"2px 5px\",\n fontSize: \"12px\"\n };\n //Для всех кроме содержания и номенклатуры добавляем выравнивание\n switch (columnDef.name) {\n case \"SOPERATION\":\n break;\n case \"SNOMEN\":\n break;\n default:\n //Добавляем выравнивание\n cellStyle = {\n ...cellStyle,\n textAlign: \"center\"\n };\n break;\n }\n return {\n cellStyle,\n data: row[columnDef]\n };\n};\n\n//-----------\n//Тело модуля\n//-----------\n\n//Детализация по объекту\nconst CardDetail = ({\n card,\n handleBackClick\n}) => {\n //Собственное состояние - данные производственных составов SVG\n const [costProductComposition, setCostProductComposition] = (0,_backend__WEBPACK_IMPORTED_MODULE_4__.useCostProductComposition)(card.NRN);\n //Собственное состояние - таблица данных маршрутных листов\n const [costRouteLists, setCostRouteLists] = (0,_backend__WEBPACK_IMPORTED_MODULE_4__.useCostRouteLists)(card.NRN, costProductComposition.selectedProduct);\n //Собственное состояние - таблица данных комплектовочных ведомостей\n const [сostDeliverySheets, setСostDeliverySheets] = (0,_backend__WEBPACK_IMPORTED_MODULE_4__.useCostDeliverySheets)(card.NRN, costProductComposition.selectedProduct);\n\n //При изменении состояния сортировки маршрутных листов\n const costRouteListsOrderChanged = ({\n orders\n }) => setCostRouteLists(pv => ({\n ...pv,\n orders: [...orders],\n pageNumber: 1,\n reload: true\n }));\n\n //При изменении количества отображаемых страниц маршрутных листов\n const costRouteListsPagesCountChanged = () => setCostRouteLists(pv => ({\n ...pv,\n pageNumber: pv.pageNumber + 1,\n reload: true\n }));\n\n //При изменении состояния сортировки комплектовочных ведомостей\n const СostDeliverySheetsOrderChanged = ({\n orders\n }) => setСostDeliverySheets(pv => ({\n ...pv,\n orders: [...orders],\n pageNumber: 1,\n reload: true\n }));\n\n //При изменении количества отображаемых страниц комплектовочных ведомостей\n const СostDeliverySheetsPagesCountChanged = () => setСostDeliverySheets(pv => ({\n ...pv,\n pageNumber: pv.pageNumber + 1,\n reload: true\n }));\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_9__[\"default\"], null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_8__[\"default\"], {\n onClick: () => handleBackClick()\n }, \"\\u041D\\u0430\\u0437\\u0430\\u0434\"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_10__[\"default\"], {\n container: true,\n spacing: 2\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_10__[\"default\"], {\n item: true,\n xs: 5\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_5__[\"default\"], {\n sx: STYLES.TABLE_INFO_MAIN\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_5__[\"default\"], {\n sx: STYLES.TABLE_INFO_SUB\n }, !costRouteLists.dataLoaded ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n variant: \"UDO_body2\"\n }, \"\\u0412\\u044B\\u0431\\u0435\\u0440\\u0438\\u0442\\u0435 \\u0430\\u0433\\u0440\\u0435\\u0433\\u0430\\u0442 \\u0441\\u0430\\u043C\\u043E\\u043B\\u0451\\u0442\\u0430, \\u0447\\u0442\\u043E\\u0431\\u044B \\u0443\\u0432\\u0438\\u0434\\u0435\\u0442\\u044C \\u0438\\u043D\\u0444\\u043E\\u0440\\u043C\\u0430\\u0446\\u0438\\u044E\") : costRouteLists.rows.length === 0 ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n variant: \"subtitle2\"\n }, \"\\u041D\\u0435\\u0442 \\u0434\\u0430\\u043D\\u043D\\u044B\\u0445 \\u043F\\u043E \\u041C\\u041A\") : /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n variant: \"h4\"\n }, \"\\u041C\\u0430\\u0440\\u0448\\u0440\\u0443\\u0442\\u043D\\u0430\\u044F \\u043A\\u0430\\u0440\\u0442\\u0430\"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_components_p8p_data_grid__WEBPACK_IMPORTED_MODULE_2__.P8PDataGrid, _extends({}, _config_wrapper__WEBPACK_IMPORTED_MODULE_3__.P8P_DATA_GRID_CONFIG_PROPS, {\n columnsDef: costRouteLists.columnsDef,\n rows: costRouteLists.rows,\n size: _components_p8p_data_grid__WEBPACK_IMPORTED_MODULE_2__.P8P_DATA_GRID_SIZE.SMALL,\n morePages: costRouteLists.morePages,\n reloading: costRouteLists.reload,\n dataCellRender: dataCellRender,\n headCellRender: headCellRender,\n onOrderChanged: costRouteListsOrderChanged,\n onPagesCountChanged: costRouteListsPagesCountChanged\n }))))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_5__[\"default\"], {\n sx: STYLES.TABLE_INFO_MAIN,\n mt: 2\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_5__[\"default\"], {\n sx: STYLES.TABLE_INFO_SUB\n }, !сostDeliverySheets.dataLoaded ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n variant: \"UDO_body2\"\n }, \"\\u0412\\u044B\\u0431\\u0435\\u0440\\u0438\\u0442\\u0435 \\u0430\\u0433\\u0440\\u0435\\u0433\\u0430\\u0442 \\u0441\\u0430\\u043C\\u043E\\u043B\\u0451\\u0442\\u0430, \\u0447\\u0442\\u043E\\u0431\\u044B \\u0443\\u0432\\u0438\\u0434\\u0435\\u0442\\u044C \\u0438\\u043D\\u0444\\u043E\\u0440\\u043C\\u0430\\u0446\\u0438\\u044E\") : сostDeliverySheets.rows.length === 0 ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n variant: \"subtitle2\"\n }, \"\\u041D\\u0435\\u0442 \\u0434\\u0430\\u043D\\u043D\\u044B\\u0445 \\u043F\\u043E \\u041A\\u0412\") : /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n variant: \"h4\"\n }, \"\\u0414\\u0435\\u0444\\u0438\\u0446\\u0438\\u0442 \\u043F\\u043E \\u041A\\u0412\"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_components_p8p_data_grid__WEBPACK_IMPORTED_MODULE_2__.P8PDataGrid, _extends({}, _config_wrapper__WEBPACK_IMPORTED_MODULE_3__.P8P_DATA_GRID_CONFIG_PROPS, {\n columnsDef: сostDeliverySheets.columnsDef,\n rows: сostDeliverySheets.rows,\n size: _components_p8p_data_grid__WEBPACK_IMPORTED_MODULE_2__.P8P_DATA_GRID_SIZE.SMALL,\n morePages: сostDeliverySheets.morePages,\n reloading: сostDeliverySheets.reload,\n dataCellRender: dataCellRender,\n headCellRender: headCellRender,\n onOrderChanged: СostDeliverySheetsOrderChanged,\n onPagesCountChanged: СostDeliverySheetsPagesCountChanged\n })))))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_10__[\"default\"], {\n item: true,\n xs: 7\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_5__[\"default\"], {\n sx: STYLES.DETAIL_INFO\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(CardDetailInfo, {\n cardInfo: card\n })), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_5__[\"default\"], {\n sx: STYLES.PRODUCT_SELECTOR\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(CardSelector, {\n products: costProductComposition.products,\n setCostProductComposition: setCostProductComposition\n })))));\n};\n\n//Контроль свойств - Детализация по объекту\nCardDetail.propTypes = {\n card: (prop_types__WEBPACK_IMPORTED_MODULE_7___default().object),\n handleBackClick: (prop_types__WEBPACK_IMPORTED_MODULE_7___default().func)\n};\n\n//----------------\n//Интерфейс модуля\n//----------------\n\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/panels/mech_rec_assembly_mon/blocks/cardDetail.js?"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ PlansList: () => (/* binding */ PlansList)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Container/Container.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Grid/Grid.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/IconButton/IconButton.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Icon/Icon.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! prop-types */ \"./node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_6__);\n/* harmony import */ var _plans_list_item__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./plans_list_item */ \"./app/panels/mech_rec_assembly_mon/components/plans_list_item.js\");\n/*\r\n Парус 8 - Панели мониторинга - ПУП - Мониторинг сборки изделий\r\n Компонент: Список планов\r\n*/\n\n//---------------------\n//Подключение библиотек\n//---------------------\n\n //Классы React\n //Интерфейсные элементы\n //Контроль свойств компонента\n //Элемент списка планов\n\n//---------\n//Константы\n//---------\n\n//Количество одновременно отображаемых элементов списка по умолчанию\nconst DEFAULT_PAGE_SIZE = 5;\n\n//Стили\nconst STYLES = {\n PLAN_DOCUMENTS_LIST: {\n minWidth: \"1024px\"\n }\n};\n\n//-----------\n//Тело модуля\n//-----------\n\n//Список планов\nconst PlansList = ({\n plans,\n pageSize = DEFAULT_PAGE_SIZE,\n onItemClick\n}) => {\n //Состояние прокрутки списка отображаемых планов\n const [scroll, setScroll] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(0);\n\n //Отработка нажатия на прокрутку списка планов влево\n const handleScrollLeft = () => setScroll(pv => pv <= 1 ? 0 : pv - 1);\n\n //Отработка нажатия на прокрутку списка планов вправо\n const handleScrollRight = () => setScroll(pv => pv + pageSize >= plans.length ? pv : pv + 1);\n\n //Сборка представления\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_2__[\"default\"], null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n container: true,\n direction: \"row\",\n justifyContent: \"center\",\n alignItems: \"center\",\n spacing: 2,\n sx: STYLES.PLAN_DOCUMENTS_LIST\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n item: true,\n display: \"flex\",\n justifyContent: \"center\",\n xs: 1\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n onClick: handleScrollLeft,\n disabled: scroll <= 0\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_5__[\"default\"], null, \"navigate_before\"))), plans.map((el, i) => i >= scroll && i < scroll + pageSize ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n item: true,\n key: `${el.NRN}_${i}`,\n xs: 2\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_plans_list_item__WEBPACK_IMPORTED_MODULE_1__.PlansListItem, {\n card: el,\n cardIndex: i,\n onClick: (card, cardIndex) => onItemClick ? onItemClick(card, cardIndex) : null\n })) : null), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n item: true,\n display: \"flex\",\n justifyContent: \"center\",\n xs: 1\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n onClick: handleScrollRight,\n disabled: scroll + pageSize >= plans.length\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_5__[\"default\"], null, \"navigate_next\")))));\n};\n\n//Контроль свойств - Список планов\nPlansList.propTypes = {\n plans: prop_types__WEBPACK_IMPORTED_MODULE_6___default().arrayOf((prop_types__WEBPACK_IMPORTED_MODULE_6___default().object)),\n pageSize: (prop_types__WEBPACK_IMPORTED_MODULE_6___default().number),\n onItemClick: (prop_types__WEBPACK_IMPORTED_MODULE_6___default().func)\n};\n\n//----------------\n//Интерфейс модуля\n//----------------\n\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/panels/mech_rec_assembly_mon/components/plans_list.js?"); /***/ }), -/***/ "./app/panels/mech_rec_assembly_mon/elements/progressBox.js": -/*!******************************************************************!*\ - !*** ./app/panels/mech_rec_assembly_mon/elements/progressBox.js ***! - \******************************************************************/ +/***/ "./app/panels/mech_rec_assembly_mon/components/plans_list_item.js": +/*!************************************************************************!*\ + !*** ./app/panels/mech_rec_assembly_mon/components/plans_list_item.js ***! + \************************************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ ProgressBox: () => (/* binding */ ProgressBox)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! prop-types */ \"./node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Box/Box.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Typography/Typography.js\");\n/*\r\n Парус 8 - Панели мониторинга - ПУП - Мониторинг сборки изделий\r\n Панель мониторинга: Блок информации по прогрессу объекта\r\n*/\n\n//---------------------\n//Подключение библиотек\n//---------------------\n\n //Классы React\n //Контроль свойств компонента\n //Интерфейсные элементы\n\n//---------\n//Константы\n//---------\n\n//Стили\nconst STYLES = {\n PROGRESS_INFO: {\n display: \"flex\",\n justifyContent: \"center\",\n alignItems: \"center\",\n flexDirection: \"column\",\n margin: \"0px 32px\",\n borderRadius: \"50%\"\n }\n};\n\n//------------------------------------\n//Вспомогательные функции и компоненты\n//------------------------------------\n\n//-----------\n//Тело модуля\n//-----------\n\n//Детализация по объекту\n\n//Блок информации по прогрессу объекта\nconst ProgressBox = ({\n prms\n}) => {\n //Инициализируем цвет тени\n let boxShadow = null;\n //Определяем цвет тени\n switch (true) {\n case prms.NPROGRESS >= 70:\n boxShadow = \"0 0 30px #21d21e66\";\n break;\n case prms.NPROGRESS >= 40:\n boxShadow = \"0 0 30px #fddd3566\";\n break;\n case prms.NPROGRESS >= 10:\n boxShadow = \"0 0 30px #ea5c4966\";\n break;\n default:\n boxShadow = \"0 0 30px #d3d3d3\";\n }\n //Возвращаем блок\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_1__[\"default\"], {\n sx: {\n ...STYLES.PROGRESS_INFO,\n width: prms.width,\n height: prms.height\n },\n boxShadow: boxShadow\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n variant: prms.progressVariant\n }, `${prms.NPROGRESS}%`), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n variant: prms.detailVariant\n }, prms.SDETAIL));\n};\n\n//Контроль свойств - Блок информации по прогрессу объекта\nProgressBox.propTypes = {\n prms: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().object)\n};\n\n//----------------\n//Интерфейс модуля\n//----------------\n\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/panels/mech_rec_assembly_mon/elements/progressBox.js?"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ PlansListItem: () => (/* binding */ PlansListItem)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! prop-types */ \"./node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_6__);\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Box/Box.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/ImageList/ImageList.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/ImageListItem/ImageListItem.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Icon/Icon.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Typography/Typography.js\");\n/* harmony import */ var _progress_box__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./progress_box */ \"./app/panels/mech_rec_assembly_mon/components/progress_box.js\");\n/*\r\n Парус 8 - Панели мониторинга - ПУП - Мониторинг сборки изделий\r\n Компонент: Элемент списка планов\r\n*/\n\n//---------------------\n//Подключение библиотек\n//---------------------\n\n //Классы React\n //Контроль свойств компонента\n //Интерфейсные элементы\n //Информация по прогрессу объекта\n\n//---------\n//Константы\n//---------\n\n//Стили\nconst STYLES = {\n CONTAINER: {\n display: \"flex\",\n justifyContent: \"center\",\n alignItems: \"center\",\n flexDirection: \"column\",\n gap: \"24px\",\n border: \"1px solid\",\n borderRadius: \"25px\",\n cursor: \"pointer\"\n },\n IMAGE_BOX: {\n width: \"180px\",\n height: \"180px\",\n alignItems: \"center\",\n justifyContent: \"center\",\n display: \"flex\"\n },\n IMAGE_LIST_ITEM: {\n textAlign: \"center\"\n },\n IMAGE_IMG: {\n width: \"160px\"\n }\n};\n\n//------------------------------------\n//Вспомогательные функции и компоненты\n//------------------------------------\n\n//Изображение для элемента\nconst PlansListItemImage = ({\n card\n}) => {\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n sx: STYLES.IMAGE_BOX\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n variant: \"masonry\",\n cols: 1,\n gap: 8\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n key: 1,\n sx: STYLES.IMAGE_LIST_ITEM\n }, card[\"BIMAGE\"] ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"img\", {\n src: `data:image/png;base64,${card[\"BIMAGE\"]}`,\n loading: \"lazy\",\n style: STYLES.IMAGE_IMG\n }) : /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_5__[\"default\"], {\n sx: {\n fontSize: \"5rem\"\n }\n }, \"construction\"))));\n};\n\n//Контроль свойств - Изображение для элемента\nPlansListItemImage.propTypes = {\n card: (prop_types__WEBPACK_IMPORTED_MODULE_6___default().object)\n};\n\n//-----------\n//Тело модуля\n//-----------\n\n//Элемент списка планов\nconst PlansListItem = ({\n card,\n cardIndex,\n onClick\n}) => {\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n sx: STYLES.CONTAINER,\n onClick: () => onClick ? onClick(card, cardIndex) : null\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(PlansListItemImage, {\n card: card\n }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n textAlign: \"center\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_7__[\"default\"], {\n variant: \"UDO_body1\",\n color: \"text.secondary.fontColor\"\n }, \"\\u041D\\u043E\\u043C\\u0435\\u0440 \\u0431\\u043E\\u0440\\u0442\\u0430\"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_7__[\"default\"], {\n variant: \"h2\"\n }, card.SNUMB)), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_progress_box__WEBPACK_IMPORTED_MODULE_1__.ProgressBox, {\n progress: card.NPROGRESS,\n detail: card.SDETAIL,\n width: \"155px\",\n height: \"155px\",\n progressVariant: \"h3\",\n detailVariant: \"UDO_body2\"\n }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_2__[\"default\"], null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_7__[\"default\"], {\n variant: \"UDO_body1\",\n color: \"text.secondary.fontColor\"\n }, \"\\u0413\\u043E\\u0434 \\u0432\\u044B\\u043F\\u0443\\u0441\\u043A\\u0430:\"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_7__[\"default\"], {\n variant: \"subtitle1\",\n mt: -1\n }, card.NYEAR)));\n};\n\n//Контроль свойств - Элемент списка планов\nPlansListItem.propTypes = {\n card: (prop_types__WEBPACK_IMPORTED_MODULE_6___default().object),\n cardIndex: (prop_types__WEBPACK_IMPORTED_MODULE_6___default().number),\n onClick: (prop_types__WEBPACK_IMPORTED_MODULE_6___default().func)\n};\n\n//----------------\n//Интерфейс модуля\n//----------------\n\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/panels/mech_rec_assembly_mon/components/plans_list_item.js?"); + +/***/ }), + +/***/ "./app/panels/mech_rec_assembly_mon/components/progress_box.js": +/*!*********************************************************************!*\ + !*** ./app/panels/mech_rec_assembly_mon/components/progress_box.js ***! + \*********************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ ProgressBox: () => (/* binding */ ProgressBox)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! prop-types */ \"./node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Box/Box.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Typography/Typography.js\");\n/*\r\n Парус 8 - Панели мониторинга - ПУП - Мониторинг сборки изделий\r\n Компонент: Информация по прогрессу объекта\r\n*/\n\n//---------------------\n//Подключение библиотек\n//---------------------\n\n //Классы React\n //Контроль свойств компонента\n //Интерфейсные элементы\n\n//---------\n//Константы\n//---------\n\n//Стили\nconst STYLES = {\n PROGRESS_BOX: (width, height) => ({\n display: \"flex\",\n justifyContent: \"center\",\n alignItems: \"center\",\n flexDirection: \"column\",\n margin: \"0px 32px\",\n borderRadius: \"50%\",\n ...(width ? {\n width\n } : {}),\n ...(height ? {\n height\n } : {})\n })\n};\n\n//-----------\n//Тело модуля\n//-----------\n\n//Информация по прогрессу объекта\nconst ProgressBox = ({\n progress,\n detail,\n width,\n height,\n progressVariant,\n detailVariant\n}) => {\n //Определяем цвет тени\n let boxShadow = \"0 0 30px #d3d3d3\";\n switch (true) {\n case progress >= 70:\n boxShadow = \"0 0 30px #21d21e66\";\n break;\n case progress >= 40:\n boxShadow = \"0 0 30px #fddd3566\";\n break;\n case progress >= 10:\n boxShadow = \"0 0 30px #ea5c4966\";\n break;\n }\n\n //Возвращаем содержимое\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_1__[\"default\"], {\n sx: STYLES.PROGRESS_BOX(width, height),\n boxShadow: boxShadow\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n variant: progressVariant\n }, `${progress}%`), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n variant: detailVariant\n }, detail));\n};\n\n//Контроль свойств - Информация по прогрессу объекта\nProgressBox.propTypes = {\n progress: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().number),\n detail: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().string),\n width: prop_types__WEBPACK_IMPORTED_MODULE_3___default().oneOfType([(prop_types__WEBPACK_IMPORTED_MODULE_3___default().string), (prop_types__WEBPACK_IMPORTED_MODULE_3___default().number)]),\n height: prop_types__WEBPACK_IMPORTED_MODULE_3___default().oneOfType([(prop_types__WEBPACK_IMPORTED_MODULE_3___default().string), (prop_types__WEBPACK_IMPORTED_MODULE_3___default().number)]),\n progressVariant: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().string),\n detailVariant: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().string)\n};\n\n//----------------\n//Интерфейс модуля\n//----------------\n\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/panels/mech_rec_assembly_mon/components/progress_box.js?"); /***/ }), @@ -3843,7 +3854,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ MechRecAssemblyMon: () => (/* binding */ MechRecAssemblyMon)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! prop-types */ \"./node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_15___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_15__);\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/TextField/TextField.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/FormGroup/FormGroup.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/FormControlLabel/FormControlLabel.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Checkbox/Checkbox.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/List/List.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/ListItemButton/ListItemButton.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/ListItemText/ListItemText.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Typography/Typography.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Box/Box.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Fab/Fab.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Drawer/Drawer.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Container/Container.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Grid/Grid.js\");\n/* harmony import */ var _mui_material_styles__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! @mui/material/styles */ \"./node_modules/@mui/material/styles/ThemeProvider.js\");\n/* harmony import */ var _context_messaging__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../context/messaging */ \"./app/context/messaging.js\");\n/* harmony import */ var _blocks_cardBlock__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./blocks/cardBlock */ \"./app/panels/mech_rec_assembly_mon/blocks/cardBlock.js\");\n/* harmony import */ var _blocks_cardDetail__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./blocks/cardDetail */ \"./app/panels/mech_rec_assembly_mon/blocks/cardDetail.js\");\n/* harmony import */ var _styles_themes_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./styles/themes.js */ \"./app/panels/mech_rec_assembly_mon/styles/themes.js\");\n/* harmony import */ var _hooks__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./hooks */ \"./app/panels/mech_rec_assembly_mon/hooks.js\");\n/* harmony import */ var _backend__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./backend */ \"./app/panels/mech_rec_assembly_mon/backend.js\");\n/*\r\n Парус 8 - Панели мониторинга - ПУП - Мониторинг сборки изделий\r\n Панель мониторинга: Корневая панель мониторинга сборки изделий\r\n*/\n\n//---------------------\n//Подключение библиотек\n//---------------------\n\n //Классы React\n //Контроль свойств компонента\n //Интерфейсные элементы\n //Подключение темы\n //Контекст сообщений\n //Информация об объекте\n //Детализация по объекту\n //Стиль темы\n //Вспомогательные хуки\n //Хук корневой панели мониторинга сборки изделий\n\n//---------\n//Константы\n//---------\n\n//Стили\nconst STYLES = {\n PLANS_FINDER: {\n marginTop: \"10px\",\n marginLeft: \"10px\",\n width: \"93%\"\n },\n PLANS_CHECKBOX_HAVEDOCS: {\n alignContent: \"space-around\"\n },\n PLANS_LIST_ITEM_ZERODOCS: {\n backgroundColor: \"#ebecec\"\n },\n PLANS_LIST_ITEM_PRIMARY: {\n wordWrap: \"break-word\"\n },\n PLANS_LIST_ITEM_SECONDARY: {\n wordWrap: \"break-word\",\n fontSize: \"0.6rem\",\n textTransform: \"uppercase\"\n },\n PLANS_BUTTON: {\n position: \"absolute\"\n },\n PLANS_DRAWER: {\n width: \"350px\",\n display: \"inline-block\",\n flexShrink: 0,\n [`& .MuiDrawer-paper`]: {\n width: \"350px\",\n display: \"inline-block\",\n boxSizing: \"border-box\"\n }\n }\n};\n\n//------------------------------------\n//Вспомогательные функции и компоненты\n//------------------------------------\n\n//Склонения для документов\nconst DECLINATIONS = [\"план\", \"плана\", \"планов\"];\n\n//Форматирование для отображения количества документов\nconst formatCountDocs = nCountDocs => {\n //Получаем последнюю цифру в значении\n let num = nCountDocs % 100 % 10;\n //Документов\n if (nCountDocs > 10 && nCountDocs < 20) return `${nCountDocs} ${DECLINATIONS[2]}`;\n //Документа\n if (num > 1 && num < 5) return `${nCountDocs} ${DECLINATIONS[1]}`;\n //Документ\n if (num == 1) return `${nCountDocs} ${DECLINATIONS[0]}`;\n //Документов\n return `${nCountDocs} ${DECLINATIONS[2]}`;\n};\n\n//Список каталогов планов\nconst PlanCtlgsList = ({\n planCtlgs = [],\n selectedPlanCtlg,\n filter,\n setFilter,\n onClick\n} = {}) => {\n //Генерация содержимого\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_7__[\"default\"], {\n sx: STYLES.PLANS_FINDER,\n name: \"planFilter\",\n label: \"\\u041A\\u0430\\u0442\\u0430\\u043B\\u043E\\u0433\",\n value: filter.ctlgName,\n variant: \"standard\",\n fullWidth: true,\n onChange: event => {\n setFilter(pv => ({\n ...pv,\n ctlgName: event.target.value\n }));\n }\n }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_8__[\"default\"], {\n sx: STYLES.PLANS_CHECKBOX_HAVEDOCS\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_9__[\"default\"], {\n control: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_10__[\"default\"], {\n checked: filter.haveDocs,\n onChange: event => setFilter(pv => ({\n ...pv,\n haveDocs: event.target.checked\n }))\n }),\n label: \"\\u0422\\u043E\\u043B\\u044C\\u043A\\u043E \\u0441 \\u043F\\u043B\\u0430\\u043D\\u0430\\u043C\\u0438\",\n labelPlacement: \"end\"\n })), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_11__[\"default\"], null, planCtlgs.map(p => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_12__[\"default\"], {\n sx: p.NCOUNT_DOCS == 0 ? STYLES.PLANS_LIST_ITEM_ZERODOCS : null,\n key: p.NRN,\n selected: p.NRN === selectedPlanCtlg,\n onClick: () => onClick ? onClick({\n NRN: p.NRN,\n SNAME: p.SNAME,\n NMIN_YEAR: p.NMIN_YEAR,\n NMAX_YEAR: p.NMAX_YEAR\n }) : null\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_13__[\"default\"], {\n primary: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_14__[\"default\"], {\n sx: STYLES.PLANS_LIST_ITEM_PRIMARY\n }, p.SNAME),\n secondary: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_14__[\"default\"], {\n sx: {\n ...STYLES.PLANS_LIST_ITEM_SECONDARY\n }\n }, formatCountDocs(p.NCOUNT_DOCS))\n })))));\n};\n\n//Контроль свойств - Список каталогов планов\nPlanCtlgsList.propTypes = {\n planCtlgs: (prop_types__WEBPACK_IMPORTED_MODULE_15___default().array),\n selectedPlanCtlg: (prop_types__WEBPACK_IMPORTED_MODULE_15___default().number),\n onClick: (prop_types__WEBPACK_IMPORTED_MODULE_15___default().func),\n filter: (prop_types__WEBPACK_IMPORTED_MODULE_15___default().object),\n setFilter: (prop_types__WEBPACK_IMPORTED_MODULE_15___default().func)\n};\n\n//-----------\n//Тело модуля\n//-----------\n\n//Корневая панель мониторинга сборки изделий\nconst MechRecAssemblyMon = () => {\n //Собственное состояние\n const [state, setState, selectPlan, unselectPlan] = (0,_backend__WEBPACK_IMPORTED_MODULE_6__.useMechRecAssemblyMon)();\n\n //Состояние для фильтра каталогов\n const [filter, setFilter] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({\n ctlgName: \"\",\n haveDocs: false\n });\n\n //Массив отфильтрованных каталогов\n const filteredPlanCtgls = (0,_hooks__WEBPACK_IMPORTED_MODULE_5__.useFilteredPlanCtlgs)(state.planCtlgs, filter);\n\n //Подключение к контексту сообщений\n const {\n InlineMsgInfo\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_messaging__WEBPACK_IMPORTED_MODULE_1__[\"MessagingСtx\"]);\n\n //Обработка нажатия на элемент в списке каталогов планов\n const handleProjectClick = project => {\n if (state.selectedPlanCtlg.NRN != project.NRN) selectPlan(project);else unselectPlan();\n };\n\n //Обработка нажатия на карточку объекта\n const handleCardClick = plan => {\n setState(pv => ({\n ...pv,\n selectedPlan: {\n NRN: plan.NRN,\n SNUMB: plan.SNUMB,\n NPROGRESS: plan.NPROGRESS,\n SDETAIL: plan.SDETAIL,\n NYEAR: plan.NYEAR\n }\n }));\n };\n\n //Обработка нажатия на кнопку \"Назад\"\n const handleBackClick = () => {\n setState(pv => ({\n ...pv,\n selectedPlan: {\n NRN: null,\n SNUMB: null,\n NPROGRESS: null,\n SDETAIL: null,\n NYEAR: null\n }\n }));\n };\n\n //Генерация содержимого\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_16__[\"default\"], {\n p: 2\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material_styles__WEBPACK_IMPORTED_MODULE_17__[\"default\"], {\n theme: _styles_themes_js__WEBPACK_IMPORTED_MODULE_4__.theme\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_18__[\"default\"], {\n variant: \"extended\",\n sx: STYLES.PLANS_BUTTON,\n onClick: () => setState(pv => ({\n ...pv,\n showPlanList: !pv.showPlanList\n }))\n }, \"\\u041F\\u0440\\u043E\\u0433\\u0440\\u0430\\u043C\\u043C\\u044B\"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_19__[\"default\"], {\n anchor: \"left\",\n open: state.showPlanList,\n onClose: () => setState(pv => ({\n ...pv,\n showPlanList: false\n })),\n sx: STYLES.PLANS_DRAWER\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(PlanCtlgsList, {\n planCtlgs: filteredPlanCtgls,\n selectedPlanCtlg: state.selectedPlanCtlg.NRN,\n filter: filter,\n setFilter: setFilter,\n onClick: handleProjectClick\n })), state.init == true ? state.selectedPlanCtlg.NRN ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_14__[\"default\"], {\n variant: \"h1\",\n align: \"center\",\n py: 3\n }, `${state.selectedPlanCtlg.SNAME} на ${state.selectedPlanCtlg.NMIN_YEAR}г. - ${state.selectedPlanCtlg.NMAX_YEAR}г.`), state.plansLoaded == true ? state.selectedPlan.NRN ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_blocks_cardDetail__WEBPACK_IMPORTED_MODULE_3__.CardDetail, {\n card: state.selectedPlan,\n handleBackClick: handleBackClick\n }) : /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_20__[\"default\"], null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_21__[\"default\"], {\n container: true,\n spacing: 5\n }, state.plans.map(el => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_21__[\"default\"], {\n item: true,\n xs: state.plans.length >= 5 ? 2.4 : 12 / state.plans.length,\n key: el.NRN,\n display: \"flex\",\n justifyContent: \"center\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_blocks_cardBlock__WEBPACK_IMPORTED_MODULE_2__.CardBlock, {\n card: el,\n handleCardClick: handleCardClick\n }))))) : null) : /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(InlineMsgInfo, {\n okBtn: false,\n text: \"Укажите каталог планов для отображения его спецификаций\"\n }) : null));\n};\n\n//----------------\n//Интерфейс модуля\n//----------------\n\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/panels/mech_rec_assembly_mon/mech_rec_assembly_mon.js?"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ MechRecAssemblyMon: () => (/* binding */ MechRecAssemblyMon)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! prop-types */ \"./node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_15___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_15__);\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/TextField/TextField.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/FormGroup/FormGroup.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/FormControlLabel/FormControlLabel.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Checkbox/Checkbox.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/List/List.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/ListItemButton/ListItemButton.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/ListItemText/ListItemText.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Typography/Typography.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Box/Box.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Fab/Fab.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Drawer/Drawer.js\");\n/* harmony import */ var _mui_material_styles__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! @mui/material/styles */ \"./node_modules/@mui/material/styles/ThemeProvider.js\");\n/* harmony import */ var _context_messaging__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../context/messaging */ \"./app/context/messaging.js\");\n/* harmony import */ var _components_plans_list__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./components/plans_list */ \"./app/panels/mech_rec_assembly_mon/components/plans_list.js\");\n/* harmony import */ var _components_plan_detail__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./components/plan_detail */ \"./app/panels/mech_rec_assembly_mon/components/plan_detail.js\");\n/* harmony import */ var _styles_themes__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./styles/themes */ \"./app/panels/mech_rec_assembly_mon/styles/themes.js\");\n/* harmony import */ var _hooks__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./hooks */ \"./app/panels/mech_rec_assembly_mon/hooks.js\");\n/* harmony import */ var _backend__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./backend */ \"./app/panels/mech_rec_assembly_mon/backend.js\");\n/*\r\n Парус 8 - Панели мониторинга - ПУП - Мониторинг сборки изделий\r\n Панель мониторинга: Корневая панель мониторинга сборки изделий\r\n*/\n\n//---------------------\n//Подключение библиотек\n//---------------------\n\n //Классы React\n //Контроль свойств компонента\n //Интерфейсные элементы\n //Подключение темы\n //Контекст сообщений\n //Список планов\n //Детали плана\n //Стиль темы\n //Вспомогательные хуки\n //Хук корневой панели мониторинга сборки изделий\n\n//---------\n//Константы\n//---------\n\n//Стили\nconst STYLES = {\n PLANS_FINDER: {\n marginTop: \"10px\",\n marginLeft: \"10px\",\n width: \"93%\"\n },\n PLANS_CHECKBOX_HAVEDOCS: {\n alignContent: \"space-around\"\n },\n PLANS_LIST_ITEM_ZERODOCS: {\n backgroundColor: \"#ebecec\"\n },\n PLANS_LIST_ITEM_PRIMARY: {\n wordWrap: \"break-word\"\n },\n PLANS_LIST_ITEM_SECONDARY: {\n wordWrap: \"break-word\",\n fontSize: \"0.6rem\",\n textTransform: \"uppercase\"\n },\n PLANS_BUTTON: {\n position: \"absolute\"\n },\n PLANS_DRAWER: {\n width: \"350px\",\n display: \"inline-block\",\n flexShrink: 0,\n [`& .MuiDrawer-paper`]: {\n width: \"350px\",\n display: \"inline-block\",\n boxSizing: \"border-box\"\n }\n },\n PLANS_LIST_BOX: {\n paddingTop: \"20px\"\n }\n};\n\n//------------------------------------\n//Вспомогательные функции и компоненты\n//------------------------------------\n\n//Склонения для документов\nconst DECLINATIONS = [\"план\", \"плана\", \"планов\"];\n\n//Форматирование для отображения количества документов\nconst formatCountDocs = nCountDocs => {\n //Получаем последнюю цифру в значении\n let num = nCountDocs % 100 % 10;\n //Документов\n if (nCountDocs > 10 && nCountDocs < 20) return `${nCountDocs} ${DECLINATIONS[2]}`;\n //Документа\n if (num > 1 && num < 5) return `${nCountDocs} ${DECLINATIONS[1]}`;\n //Документ\n if (num == 1) return `${nCountDocs} ${DECLINATIONS[0]}`;\n //Документов\n return `${nCountDocs} ${DECLINATIONS[2]}`;\n};\n\n//Список каталогов планов\nconst PlanCtlgsList = ({\n planCtlgs = [],\n selectedPlanCtlg,\n filter,\n setFilter,\n onClick\n} = {}) => {\n //Генерация содержимого\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_7__[\"default\"], {\n sx: STYLES.PLANS_FINDER,\n name: \"planFilter\",\n label: \"\\u041A\\u0430\\u0442\\u0430\\u043B\\u043E\\u0433\",\n value: filter.ctlgName,\n variant: \"standard\",\n fullWidth: true,\n onChange: event => {\n setFilter(pv => ({\n ...pv,\n ctlgName: event.target.value\n }));\n }\n }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_8__[\"default\"], {\n sx: STYLES.PLANS_CHECKBOX_HAVEDOCS\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_9__[\"default\"], {\n control: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_10__[\"default\"], {\n checked: filter.haveDocs,\n onChange: event => setFilter(pv => ({\n ...pv,\n haveDocs: event.target.checked\n }))\n }),\n label: \"\\u0422\\u043E\\u043B\\u044C\\u043A\\u043E \\u0441 \\u043F\\u043B\\u0430\\u043D\\u0430\\u043C\\u0438\",\n labelPlacement: \"end\"\n })), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_11__[\"default\"], null, planCtlgs.map(p => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_12__[\"default\"], {\n sx: p.NCOUNT_DOCS == 0 ? STYLES.PLANS_LIST_ITEM_ZERODOCS : null,\n key: p.NRN,\n selected: p.NRN === selectedPlanCtlg,\n onClick: () => onClick ? onClick({\n NRN: p.NRN,\n SNAME: p.SNAME,\n NMIN_YEAR: p.NMIN_YEAR,\n NMAX_YEAR: p.NMAX_YEAR\n }) : null\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_13__[\"default\"], {\n primary: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_14__[\"default\"], {\n sx: STYLES.PLANS_LIST_ITEM_PRIMARY\n }, p.SNAME),\n secondary: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_14__[\"default\"], {\n sx: {\n ...STYLES.PLANS_LIST_ITEM_SECONDARY\n }\n }, formatCountDocs(p.NCOUNT_DOCS))\n })))));\n};\n\n//Контроль свойств - Список каталогов планов\nPlanCtlgsList.propTypes = {\n planCtlgs: (prop_types__WEBPACK_IMPORTED_MODULE_15___default().array),\n selectedPlanCtlg: (prop_types__WEBPACK_IMPORTED_MODULE_15___default().number),\n onClick: (prop_types__WEBPACK_IMPORTED_MODULE_15___default().func),\n filter: (prop_types__WEBPACK_IMPORTED_MODULE_15___default().object),\n setFilter: (prop_types__WEBPACK_IMPORTED_MODULE_15___default().func)\n};\n\n//-----------\n//Тело модуля\n//-----------\n\n//Корневая панель мониторинга сборки изделий\nconst MechRecAssemblyMon = () => {\n //Собственное состояние\n const [state, setState, selectPlanCtlg, unselectPlanCtlg] = (0,_backend__WEBPACK_IMPORTED_MODULE_6__.useMechRecAssemblyMon)();\n\n //Состояние фильтра каталогов\n const [filter, setFilter] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({\n ctlgName: \"\",\n haveDocs: false\n });\n\n //Состояние навигации по карточкам детализации\n const [planDetailNavigation, setPlanDetailNavigation] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({\n disableNavigatePrev: false,\n disableNavigateNext: false,\n currentPlanIndex: 0\n });\n\n //Массив отфильтрованных каталогов\n const filteredPlanCtgls = (0,_hooks__WEBPACK_IMPORTED_MODULE_5__.useFilteredPlanCtlgs)(state.planCtlgs, filter);\n\n //Подключение к контексту сообщений\n const {\n InlineMsgInfo\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_messaging__WEBPACK_IMPORTED_MODULE_1__[\"MessagingСtx\"]);\n\n //Обработка нажатия на элемент в списке каталогов планов\n const handlePlanCtlgClick = planCtlg => {\n if (state.selectedPlanCtlg.NRN != planCtlg.NRN) selectPlanCtlg(planCtlg);else unselectPlanCtlg();\n };\n\n //Перемещение к нужному плану\n const navigateToPlan = planIndex => {\n if (planIndex < 0) planIndex = 0;\n if (planIndex > state.plans.length - 1) planIndex = state.plans.length - 1;\n setState(pv => ({\n ...pv,\n selectedPlan: {\n ...state.plans[planIndex]\n }\n }));\n setPlanDetailNavigation(pv => ({\n ...pv,\n disableNavigatePrev: planIndex == 0 ? true : false,\n disableNavigateNext: planIndex == state.plans.length - 1 ? true : false,\n currentPlanIndex: planIndex\n }));\n };\n\n //Обработка нажатия на документ плана\n const handlePlanClick = (plan, planIndex) => navigateToPlan(planIndex);\n\n //Обработка нажатия на кнопку \"Назад\"\n const handlePlanDetailBackClick = () => {\n setState(pv => ({\n ...pv,\n selectedPlan: {}\n }));\n };\n\n //Обработка навигации из карточки с деталями плана\n const handlePlanDetailNavigateClick = direction => navigateToPlan(planDetailNavigation.currentPlanIndex + direction);\n\n //Генерация содержимого\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_16__[\"default\"], {\n p: 2\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material_styles__WEBPACK_IMPORTED_MODULE_17__[\"default\"], {\n theme: _styles_themes__WEBPACK_IMPORTED_MODULE_4__.theme\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_18__[\"default\"], {\n variant: \"extended\",\n sx: STYLES.PLANS_BUTTON,\n onClick: () => setState(pv => ({\n ...pv,\n showPlanList: !pv.showPlanList\n }))\n }, \"\\u041F\\u0440\\u043E\\u0433\\u0440\\u0430\\u043C\\u043C\\u044B\"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_19__[\"default\"], {\n anchor: \"left\",\n open: state.showPlanList,\n onClose: () => setState(pv => ({\n ...pv,\n showPlanList: false\n })),\n sx: STYLES.PLANS_DRAWER\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(PlanCtlgsList, {\n planCtlgs: filteredPlanCtgls,\n selectedPlanCtlg: state.selectedPlanCtlg.NRN,\n filter: filter,\n setFilter: setFilter,\n onClick: handlePlanCtlgClick\n })), state.init == true ? state.selectedPlanCtlg.NRN ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_14__[\"default\"], {\n variant: \"h3\",\n align: \"center\",\n color: \"text.title.fontColor\",\n py: 2\n }, `${state.selectedPlanCtlg.SNAME} ${state.selectedPlanCtlg.NMIN_YEAR ? `с ${state.selectedPlanCtlg.NMIN_YEAR} г` : \"\"} ${state.selectedPlanCtlg.NMAX_YEAR ? `по ${state.selectedPlanCtlg.NMAX_YEAR}` : \"\"}`), state.plansLoaded == true ? state.selectedPlan.NRN ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_components_plan_detail__WEBPACK_IMPORTED_MODULE_3__.PlanDetail, {\n plan: state.selectedPlan,\n disableNavigatePrev: planDetailNavigation.disableNavigatePrev,\n disableNavigateNext: planDetailNavigation.disableNavigateNext,\n onNavigate: handlePlanDetailNavigateClick,\n onBack: handlePlanDetailBackClick\n }) : /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_16__[\"default\"], {\n sx: STYLES.PLANS_LIST_BOX\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_components_plans_list__WEBPACK_IMPORTED_MODULE_2__.PlansList, {\n plans: state.plans,\n onItemClick: handlePlanClick\n })) : null) : /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(InlineMsgInfo, {\n okBtn: false,\n text: \"Укажите каталог планов для отображения его спецификаций\"\n }) : null));\n};\n\n//----------------\n//Интерфейс модуля\n//----------------\n\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/panels/mech_rec_assembly_mon/mech_rec_assembly_mon.js?"); /***/ }), @@ -3854,7 +3865,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ theme: () => (/* binding */ theme)\n/* harmony export */ });\n/* harmony import */ var _mui_material_styles__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @mui/material/styles */ \"./node_modules/@mui/material/styles/createTheme.js\");\n //Интерфейсные элементы\n\n//Описание темы\nconst theme = (0,_mui_material_styles__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n palette: {\n text: {\n secondary: {\n fontColor: \"rgba(0, 0, 0, 0.298)\"\n }\n }\n },\n typography: {\n h1: {\n fontSize: \"40px\",\n fontWeight: 400,\n textAlign: \"center\"\n },\n h2: {\n fontSize: \"40px\",\n fontWeight: 700,\n textAlign: \"center\"\n },\n h3: {\n fontSize: \"30px\",\n fontWeight: 700,\n textAlign: \"center\"\n },\n h4: {\n fontSize: \"16px\",\n fontWeight: 400,\n textAlign: \"center\"\n },\n subtitle1: {\n fontSize: \"30px\",\n fontWeight: 400,\n textAlign: \"center\"\n },\n subtitle2: {\n fontSize: \"20px\",\n fontWeight: 700,\n textAlign: \"center\"\n },\n UDO_body1: {\n fontSize: \"14px\",\n fontWeight: 400,\n textAlign: \"center\",\n wordWrap: \"break-word\",\n letterSpacing: \"0.00938em\",\n lineHeight: \"1.5\"\n },\n UDO_body2: {\n fontSize: \"12px\",\n fontWeight: 400,\n whiteSpace: \"pre-line\",\n textAlign: \"center\",\n wordWrap: \"break-word\",\n letterSpacing: \"0.00938em\",\n lineHeight: \"1.5\"\n },\n body3: {\n fontSize: \"9px\",\n whiteSpace: \"pre-line\",\n textAlign: \"center\"\n }\n }\n});\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/panels/mech_rec_assembly_mon/styles/themes.js?"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ theme: () => (/* binding */ theme)\n/* harmony export */ });\n/* harmony import */ var _mui_material_styles__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @mui/material/styles */ \"./node_modules/@mui/material/styles/createTheme.js\");\n //Интерфейсные элементы\n\n//Описание темы\nconst theme = (0,_mui_material_styles__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n palette: {\n text: {\n title: {\n fontColor: \"rgba(0, 0, 0, 0.65)\"\n },\n secondary: {\n fontColor: \"rgba(0, 0, 0, 0.298)\"\n }\n }\n },\n typography: {\n h1: {\n fontSize: \"40px\",\n fontWeight: 400,\n textAlign: \"center\"\n },\n h2: {\n fontSize: \"40px\",\n fontWeight: 700,\n textAlign: \"center\"\n },\n h3: {\n fontSize: \"30px\",\n fontWeight: 700,\n textAlign: \"center\"\n },\n h4: {\n fontSize: \"16px\",\n fontWeight: 400,\n textAlign: \"center\"\n },\n subtitle1: {\n fontSize: \"30px\",\n fontWeight: 400,\n textAlign: \"center\"\n },\n subtitle2: {\n fontSize: \"20px\",\n fontWeight: 700,\n textAlign: \"center\"\n },\n UDO_body1: {\n fontSize: \"14px\",\n fontWeight: 400,\n textAlign: \"center\",\n wordWrap: \"break-word\",\n letterSpacing: \"0.00938em\",\n lineHeight: \"1.5\"\n },\n UDO_body2: {\n fontSize: \"12px\",\n fontWeight: 400,\n whiteSpace: \"pre-line\",\n textAlign: \"center\",\n wordWrap: \"break-word\",\n letterSpacing: \"0.00938em\",\n lineHeight: \"1.5\"\n },\n body3: {\n fontSize: \"9px\",\n whiteSpace: \"pre-line\",\n textAlign: \"center\"\n }\n }\n});\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/panels/mech_rec_assembly_mon/styles/themes.js?"); /***/ }), @@ -3909,7 +3920,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ MechRecCostJobs: () => (/* binding */ MechRecCostJobs)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! prop-types */ \"./node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_10___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_10__);\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/TextField/TextField.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/List/List.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/ListItemButton/ListItemButton.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/ListItemText/ListItemText.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Typography/Typography.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Box/Box.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Fab/Fab.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Drawer/Drawer.js\");\n/* harmony import */ var _context_backend__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../context/backend */ \"./app/context/backend.js\");\n/* harmony import */ var _context_messaging__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../context/messaging */ \"./app/context/messaging.js\");\n/* harmony import */ var _hooks__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./hooks */ \"./app/panels/mech_rec_cost_jobs_manage/hooks.js\");\n/* harmony import */ var _fcjobssp__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./fcjobssp */ \"./app/panels/mech_rec_cost_jobs_manage/fcjobssp.js\");\n/*\r\n Парус 8 - Панели мониторинга - ПУП - Выдача сменного задания\r\n Панель мониторинга: Корневая панель выдачи сменного задания\r\n*/\n\n//---------------------\n//Подключение библиотек\n//---------------------\n\n //Классы React\n //Контроль свойств компонента\n //Интерфейсные элементы\n //Контекст взаимодействия с сервером\n //Контекст сообщений\n //Вспомогательные хуки\n //Собственные хуки таблиц\n\n//---------\n//Константы\n//---------\n\n//Стили\nconst STYLES = {\n JOBS_FINDER: {\n marginTop: \"10px\",\n marginLeft: \"10px\",\n width: \"93%\"\n },\n JOBS_LIST_ITEM_PRIMARY: {\n wordWrap: \"break-word\"\n },\n JOBS_BUTTON: {\n position: \"absolute\"\n },\n JOBS_DRAWER: {\n width: \"350px\",\n display: \"inline-block\",\n flexShrink: 0,\n [`& .MuiDrawer-paper`]: {\n width: \"350px\",\n display: \"inline-block\",\n boxSizing: \"border-box\"\n }\n },\n CONTAINER: {\n margin: \"5px 0px\",\n textAlign: \"center\"\n }\n};\n\n//------------------------------------\n//Вспомогательные функции и компоненты\n//------------------------------------\n\n//Список сменных заданий\nconst JobList = ({\n jobs = [],\n selectedJob,\n filter,\n setFilter,\n onClick\n} = {}) => {\n //Генерация содержимого\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_5__[\"default\"], {\n sx: STYLES.JOBS_FINDER,\n name: \"jobFilter\",\n label: \"\\u0421\\u043C\\u0435\\u043D\\u043D\\u043E\\u0435 \\u0437\\u0430\\u0434\\u0430\\u043D\\u0438\\u0435\",\n value: filter.jobName,\n variant: \"standard\",\n fullWidth: true,\n onChange: event => {\n setFilter(pv => ({\n ...pv,\n jobName: event.target.value\n }));\n }\n }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_6__[\"default\"], null, jobs.map(p => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_7__[\"default\"], {\n key: p.NRN,\n selected: p.NRN === selectedJob.NRN,\n onClick: () => onClick ? onClick(p) : null\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_8__[\"default\"], {\n primary: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_9__[\"default\"], {\n sx: STYLES.JOBS_LIST_ITEM_PRIMARY\n }, p.SDOC_INFO)\n })))));\n};\n\n//Контроль свойств - Список каталогов планов\nJobList.propTypes = {\n jobs: (prop_types__WEBPACK_IMPORTED_MODULE_10___default().array),\n selectedJob: (prop_types__WEBPACK_IMPORTED_MODULE_10___default().object),\n onClick: (prop_types__WEBPACK_IMPORTED_MODULE_10___default().func),\n filter: (prop_types__WEBPACK_IMPORTED_MODULE_10___default().object),\n setFilter: (prop_types__WEBPACK_IMPORTED_MODULE_10___default().func)\n};\n\n//-----------\n//Тело модуля\n//-----------\n\n//Корневая панель выдачи сменного задания\nconst MechRecCostJobs = () => {\n //Собственное состояние - таблица данных\n const [state, setState] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({\n init: false,\n showJobList: false,\n jobList: [],\n jobListLoaded: false,\n selectedJob: {},\n processIdent: null,\n dataLoaded: false\n });\n\n //Состояние для фильтра каталогов\n const [filter, setFilter] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({\n jobName: \"\"\n });\n\n //Массив отфильтрованных каталогов\n const filteredJobs = (0,_hooks__WEBPACK_IMPORTED_MODULE_3__.useFilteredFcjobs)(state.jobList, filter);\n\n //Подключение к контексту взаимодействия с сервером\n const {\n executeStored\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_backend__WEBPACK_IMPORTED_MODULE_1__[\"BackEndСtx\"]);\n\n //Подключение к контексту сообщений\n const {\n InlineMsgInfo\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_messaging__WEBPACK_IMPORTED_MODULE_2__[\"MessagingСtx\"]);\n\n //Инициализация каталогов планов\n const initPlans = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async () => {\n if (!state.init) {\n const data = await executeStored({\n stored: \"PKG_P8PANELS_MECHREC.FCJOBS_INIT\",\n args: {},\n respArg: \"COUT\",\n fullResponse: true,\n isArray: name => name === \"XFCJOBS\"\n });\n setState(pv => ({\n ...pv,\n init: true,\n jobList: [...(data.XPAYLOAD?.XFCJOBS || [])],\n jobListLoaded: true,\n processIdent: data.XPAYLOAD.XINFO.NPROCESS_IDENT\n }));\n }\n }, [state.init, executeStored]);\n\n //При подключении компонента к странице\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n initPlans();\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n //Очистка селектлиста по идентификатору процесса\n const clearSelectlist = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async NIDENT => {\n console.log(NIDENT);\n try {\n await executeStored({\n stored: \"P_SELECTLIST_CLEAR\",\n args: {\n NIDENT: NIDENT\n }\n });\n } catch (e) {\n throw new Error(e.message);\n }\n }, [executeStored]);\n\n //Выбор плана\n const selectJob = job => {\n //Очищаем селектлист\n clearSelectlist(state.processIdent);\n //Обновляем состояние\n setState(pv => ({\n ...pv,\n selectedJob: job,\n showJobList: false,\n dataLoaded: false\n }));\n };\n\n //Сброс выбора плана\n const unselectJob = () => {\n //Очищаем селектлист\n clearSelectlist(state.processIdent);\n //Обновляем состояние\n setState(pv => ({\n ...pv,\n selectedJob: {},\n showJobList: false,\n dataLoaded: false\n }));\n };\n\n //Обработка нажатия на элемент в списке планов\n const handleJobClick = job => {\n if (state.selectedJob.NRN != job.NRN) selectJob(job);else unselectJob();\n };\n\n //Генерация содержимого\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_11__[\"default\"], {\n p: 2\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_12__[\"default\"], {\n variant: \"extended\",\n sx: STYLES.JOBS_BUTTON,\n onClick: () => setState(pv => ({\n ...pv,\n showJobList: !pv.showJobList\n }))\n }, \"\\u0421\\u043C\\u0435\\u043D\\u043D\\u044B\\u0435 \\u0437\\u0430\\u0434\\u0430\\u043D\\u0438\\u044F\"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_13__[\"default\"], {\n anchor: \"left\",\n open: state.showJobList,\n onClose: () => setState(pv => ({\n ...pv,\n showJobList: false\n })),\n sx: STYLES.JOBS_DRAWER\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(JobList, {\n jobs: filteredJobs,\n selectedJob: state.selectedJob,\n filter: filter,\n setFilter: setFilter,\n onClick: handleJobClick\n })), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n style: STYLES.CONTAINER\n }, state.selectedJob.NRN ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_9__[\"default\"], {\n variant: \"h6\"\n }, `Сменное задание \"${state.selectedJob.SSUBDIV}\" на ${state.selectedJob.SPERIOD}`), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_fcjobssp__WEBPACK_IMPORTED_MODULE_4__.CostJobsSpecsDataGrid, {\n task: state.selectedJob.NRN,\n processIdent: state.processIdent,\n clearSelectlist: clearSelectlist\n })) : !state.selectedJob.NRN ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(InlineMsgInfo, {\n okBtn: false,\n text: \"Укажите сменное задание\"\n }) : null));\n};\n\n//----------------\n//Интерфейс модуля\n//----------------\n\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/panels/mech_rec_cost_jobs_manage/mech_rec_cost_jobs_manage.js?"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ MechRecCostJobs: () => (/* binding */ MechRecCostJobs)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! prop-types */ \"./node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_10___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_10__);\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/TextField/TextField.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/List/List.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/ListItemButton/ListItemButton.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/ListItemText/ListItemText.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Typography/Typography.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Box/Box.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Fab/Fab.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Drawer/Drawer.js\");\n/* harmony import */ var _context_backend__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../context/backend */ \"./app/context/backend.js\");\n/* harmony import */ var _context_messaging__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../context/messaging */ \"./app/context/messaging.js\");\n/* harmony import */ var _hooks__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./hooks */ \"./app/panels/mech_rec_cost_jobs_manage/hooks.js\");\n/* harmony import */ var _fcjobssp__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./fcjobssp */ \"./app/panels/mech_rec_cost_jobs_manage/fcjobssp.js\");\n/*\r\n Парус 8 - Панели мониторинга - ПУП - Выдача сменного задания\r\n Панель мониторинга: Корневая панель выдачи сменного задания\r\n*/\n\n//---------------------\n//Подключение библиотек\n//---------------------\n\n //Классы React\n //Контроль свойств компонента\n //Интерфейсные элементы\n //Контекст взаимодействия с сервером\n //Контекст сообщений\n //Вспомогательные хуки\n //Собственные хуки таблиц\n\n//---------\n//Константы\n//---------\n\n//Стили\nconst STYLES = {\n JOBS_FINDER: {\n marginTop: \"10px\",\n marginLeft: \"10px\",\n width: \"93%\"\n },\n JOBS_LIST_ITEM_PRIMARY: {\n wordWrap: \"break-word\"\n },\n JOBS_BUTTON: {\n position: \"absolute\"\n },\n JOBS_DRAWER: {\n width: \"350px\",\n display: \"inline-block\",\n flexShrink: 0,\n [`& .MuiDrawer-paper`]: {\n width: \"350px\",\n display: \"inline-block\",\n boxSizing: \"border-box\"\n }\n },\n CONTAINER: {\n margin: \"5px 0px\",\n textAlign: \"center\"\n }\n};\n\n//------------------------------------\n//Вспомогательные функции и компоненты\n//------------------------------------\n\n//Список сменных заданий\nconst JobList = ({\n jobs = [],\n selectedJob,\n filter,\n setFilter,\n onClick\n} = {}) => {\n //Генерация содержимого\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_5__[\"default\"], {\n sx: STYLES.JOBS_FINDER,\n name: \"jobFilter\",\n label: \"\\u0421\\u043C\\u0435\\u043D\\u043D\\u043E\\u0435 \\u0437\\u0430\\u0434\\u0430\\u043D\\u0438\\u0435\",\n value: filter.jobName,\n variant: \"standard\",\n fullWidth: true,\n onChange: event => {\n setFilter(pv => ({\n ...pv,\n jobName: event.target.value\n }));\n }\n }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_6__[\"default\"], null, jobs.map(p => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_7__[\"default\"], {\n key: p.NRN,\n selected: p.NRN === selectedJob.NRN,\n onClick: () => onClick ? onClick(p) : null\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_8__[\"default\"], {\n primary: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_9__[\"default\"], {\n sx: STYLES.JOBS_LIST_ITEM_PRIMARY\n }, p.SDOC_INFO)\n })))));\n};\n\n//Контроль свойств - Список каталогов планов\nJobList.propTypes = {\n jobs: (prop_types__WEBPACK_IMPORTED_MODULE_10___default().array),\n selectedJob: (prop_types__WEBPACK_IMPORTED_MODULE_10___default().object),\n onClick: (prop_types__WEBPACK_IMPORTED_MODULE_10___default().func),\n filter: (prop_types__WEBPACK_IMPORTED_MODULE_10___default().object),\n setFilter: (prop_types__WEBPACK_IMPORTED_MODULE_10___default().func)\n};\n\n//-----------\n//Тело модуля\n//-----------\n\n//Корневая панель выдачи сменного задания\nconst MechRecCostJobs = () => {\n //Собственное состояние - таблица данных\n const [state, setState] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({\n init: false,\n showJobList: false,\n jobList: [],\n jobListLoaded: false,\n selectedJob: {},\n processIdent: null,\n dataLoaded: false\n });\n\n //Состояние для фильтра каталогов\n const [filter, setFilter] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({\n jobName: \"\"\n });\n\n //Массив отфильтрованных каталогов\n const filteredJobs = (0,_hooks__WEBPACK_IMPORTED_MODULE_3__.useFilteredFcjobs)(state.jobList, filter);\n\n //Подключение к контексту взаимодействия с сервером\n const {\n executeStored\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_backend__WEBPACK_IMPORTED_MODULE_1__[\"BackEndСtx\"]);\n\n //Подключение к контексту сообщений\n const {\n InlineMsgInfo\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_messaging__WEBPACK_IMPORTED_MODULE_2__[\"MessagingСtx\"]);\n\n //Инициализация каталогов планов\n const initPlans = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async () => {\n if (!state.init) {\n const data = await executeStored({\n stored: \"PKG_P8PANELS_MECHREC.FCJOBS_INIT\",\n args: {},\n respArg: \"COUT\",\n fullResponse: true,\n isArray: name => name === \"XFCJOBS\"\n });\n setState(pv => ({\n ...pv,\n init: true,\n jobList: [...(data.XPAYLOAD?.XFCJOBS || [])],\n jobListLoaded: true,\n processIdent: data.XPAYLOAD.XINFO.NPROCESS_IDENT\n }));\n }\n }, [state.init, executeStored]);\n\n //При подключении компонента к странице\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n initPlans();\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n //Очистка селектлиста по идентификатору процесса\n const clearSelectlist = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async NIDENT => {\n try {\n await executeStored({\n stored: \"P_SELECTLIST_CLEAR\",\n args: {\n NIDENT: NIDENT\n }\n });\n } catch (e) {\n throw new Error(e.message);\n }\n }, [executeStored]);\n\n //Выбор плана\n const selectJob = job => {\n //Очищаем селектлист\n clearSelectlist(state.processIdent);\n //Обновляем состояние\n setState(pv => ({\n ...pv,\n selectedJob: job,\n showJobList: false,\n dataLoaded: false\n }));\n };\n\n //Сброс выбора плана\n const unselectJob = () => {\n //Очищаем селектлист\n clearSelectlist(state.processIdent);\n //Обновляем состояние\n setState(pv => ({\n ...pv,\n selectedJob: {},\n showJobList: false,\n dataLoaded: false\n }));\n };\n\n //Обработка нажатия на элемент в списке планов\n const handleJobClick = job => {\n if (state.selectedJob.NRN != job.NRN) selectJob(job);else unselectJob();\n };\n\n //Генерация содержимого\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_11__[\"default\"], {\n p: 2\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_12__[\"default\"], {\n variant: \"extended\",\n sx: STYLES.JOBS_BUTTON,\n onClick: () => setState(pv => ({\n ...pv,\n showJobList: !pv.showJobList\n }))\n }, \"\\u0421\\u043C\\u0435\\u043D\\u043D\\u044B\\u0435 \\u0437\\u0430\\u0434\\u0430\\u043D\\u0438\\u044F\"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_13__[\"default\"], {\n anchor: \"left\",\n open: state.showJobList,\n onClose: () => setState(pv => ({\n ...pv,\n showJobList: false\n })),\n sx: STYLES.JOBS_DRAWER\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(JobList, {\n jobs: filteredJobs,\n selectedJob: state.selectedJob,\n filter: filter,\n setFilter: setFilter,\n onClick: handleJobClick\n })), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n style: STYLES.CONTAINER\n }, state.selectedJob.NRN ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_9__[\"default\"], {\n variant: \"h6\"\n }, `Сменное задание \"${state.selectedJob.SSUBDIV}\" на ${state.selectedJob.SPERIOD}`), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_fcjobssp__WEBPACK_IMPORTED_MODULE_4__.CostJobsSpecsDataGrid, {\n task: state.selectedJob.NRN,\n processIdent: state.processIdent,\n clearSelectlist: clearSelectlist\n })) : !state.selectedJob.NRN ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(InlineMsgInfo, {\n okBtn: false,\n text: \"Укажите сменное задание\"\n }) : null));\n};\n\n//----------------\n//Интерфейс модуля\n//----------------\n\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/panels/mech_rec_cost_jobs_manage/mech_rec_cost_jobs_manage.js?"); /***/ }), @@ -4030,7 +4041,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ CostRouteListsDataGridDialog: () => (/* binding */ CostRouteListsDataGridDialog),\n/* harmony export */ rowExpandRender: () => (/* binding */ rowExpandRender)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! prop-types */ \"./node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_15___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_15__);\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Paper/Paper.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Typography/Typography.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Box/Box.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Dialog/Dialog.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/DialogContent/DialogContent.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/TextField/TextField.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Button/Button.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/DialogActions/DialogActions.js\");\n/* harmony import */ var _components_p8p_data_grid__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../components/p8p_data_grid */ \"./app/components/p8p_data_grid.js\");\n/* harmony import */ var _config_wrapper__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../config_wrapper */ \"./app/config_wrapper.js\");\n/* harmony import */ var _context_backend__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../context/backend */ \"./app/context/backend.js\");\n/* harmony import */ var _core_utils__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../core/utils */ \"./app/core/utils.js\");\n/* harmony import */ var _fcroutlstord__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./fcroutlstord */ \"./app/panels/mech_rec_dept_cost_prod_plans/fcroutlstord.js\");\n/* harmony import */ var _context_application__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../../context/application */ \"./app/context/application.js\");\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n/*\r\n Парус 8 - Панели мониторинга - ПУП - Производственный план цеха\r\n Компонент панели: Таблица маршрутных листов\r\n*/\n\n//---------------------\n//Подключение библиотек\n//---------------------\n\n //Классы React\n //Контроль свойств компонента\n //Интерфейсные элементы\n //Таблица данных\n //Подключение компонентов к настройкам приложения\n //Контекст взаимодействия с сервером\n //Вспомогательные функции\n //Состояние таблицы заказов маршрутных листов\n //Контекст приложения\n\n//---------\n//Константы\n//---------\n\n//Стили\nconst STYLES = {\n CONTAINER: {\n textAlign: \"center\"\n },\n TABLE: {\n paddingTop: \"15px\"\n },\n TABLE_SUM: {\n textAlign: \"right\",\n paddingTop: \"5px\",\n paddingRight: \"15px\"\n },\n DIALOG_EDITOR: {\n maxWidth: \"250px\"\n },\n DIALOG_BUTTONS: {\n marginTop: \"10px\",\n width: \"240px\"\n }\n};\n\n//---------------------------------------------\n//Вспомогательные функции форматирования данных\n//---------------------------------------------\n\n//Генерация представления расширения строки\nconst rowExpandRender = ({\n row\n}) => {\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_7__[\"default\"], {\n elevation: 4\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_fcroutlstord__WEBPACK_IMPORTED_MODULE_5__.CostRouteListsOrdDataGrid, {\n mainRowRN: row.NRN\n }));\n};\n\n//Форматирование значений колонок\nconst dataCellRender = ({\n row,\n columnDef /*, handlePriorEditOpen, handleOrderEditOpen */\n}) => {\n //!!! Пока отключено - не удалять\n // switch (columnDef.name) {\n // case \"NPRIOR_PARTY\":\n // return {\n // data: (\n // <>\n // {row[\"NPRIOR_PARTY\"]}\n // handlePriorEditOpen(row[\"NRN\"], row[\"NPRIOR_PARTY\"])}>\n // edit\n // \n // \n // )\n // };\n // case \"NCHANGE_FACEACC\":\n // return {\n // data: (\n // \n // handleOrderEditOpen(row[\"NRN\"], row[\"SPROD_ORDER\"])}>\n // inventory\n // \n // \n // )\n // };\n // }\n return {\n data: row[columnDef]\n };\n};\n\n//-----------\n//Тело модуля\n//-----------\n\n//Таблица маршрутных листов\nconst CostRouteListsDataGrid = ({\n task\n}) => {\n //Собственное состояние - таблица данных\n const [costRouteLists, setCostRouteLists] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({\n dataLoaded: false,\n columnsDef: [],\n orders: null,\n rows: [],\n reload: true,\n pageNumber: 1,\n morePages: true,\n editPriorNRN: null,\n editPriorValue: null,\n editOrderNRN: null,\n editOrderValue: null\n });\n\n //Подключение к контексту взаимодействия с сервером\n const {\n executeStored,\n SERV_DATA_TYPE_CLOB\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_backend__WEBPACK_IMPORTED_MODULE_3__[\"BackEndСtx\"]);\n\n //Подключение к контексту приложения\n const {\n pOnlineShowDictionary\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_application__WEBPACK_IMPORTED_MODULE_6__[\"ApplicationСtx\"]);\n\n //Размер страницы данных\n const DATA_GRID_PAGE_SIZE = 5;\n\n //Загрузка данных таблицы с сервера\n const loadData = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async () => {\n if (costRouteLists.reload) {\n const data = await executeStored({\n stored: \"PKG_P8PANELS_MECHREC.FCROUTLST_DEPT_DG_GET\",\n args: {\n NFCPRODPLANSP: task,\n CORDERS: {\n VALUE: (0,_core_utils__WEBPACK_IMPORTED_MODULE_4__.object2Base64XML)(costRouteLists.orders, {\n arrayNodeName: \"orders\"\n }),\n SDATA_TYPE: SERV_DATA_TYPE_CLOB\n },\n NPAGE_NUMBER: costRouteLists.pageNumber,\n NPAGE_SIZE: DATA_GRID_PAGE_SIZE,\n NINCLUDE_DEF: costRouteLists.dataLoaded ? 0 : 1\n },\n respArg: \"COUT\"\n });\n setCostRouteLists(pv => ({\n ...pv,\n columnsDef: data.XCOLUMNS_DEF ? [...data.XCOLUMNS_DEF] : pv.columnsDef,\n rows: pv.pageNumber == 1 ? [...(data.XROWS || [])] : [...pv.rows, ...(data.XROWS || [])],\n dataLoaded: true,\n reload: false,\n morePages: (data.XROWS || []).length >= DATA_GRID_PAGE_SIZE\n }));\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [costRouteLists.reload, costRouteLists.filters, costRouteLists.orders, costRouteLists.dataLoaded, costRouteLists.pageNumber, executeStored, SERV_DATA_TYPE_CLOB]);\n\n //При необходимости обновить данные таблицы\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n loadData();\n }, [costRouteLists.reload, loadData]);\n\n //При изменении состояния сортировки\n const handleOrderChanged = ({\n orders\n }) => setCostRouteLists(pv => ({\n ...pv,\n orders: [...orders],\n pageNumber: 1,\n reload: true\n }));\n\n //При изменении количества отображаемых страниц\n const handlePagesCountChanged = () => setCostRouteLists(pv => ({\n ...pv,\n pageNumber: pv.pageNumber + 1,\n reload: true\n }));\n\n //При открытии изменения приоритета партии\n const handlePriorEditOpen = (NRN, nPriorValue) => {\n setCostRouteLists(pv => ({\n ...pv,\n editPriorNRN: NRN,\n editPriorValue: nPriorValue\n }));\n };\n\n //При закрытии изменения приоритета партии\n const handlePriorEditClose = () => {\n setCostRouteLists(pv => ({\n ...pv,\n editPriorNRN: null,\n editPriorValue: null\n }));\n };\n\n //При изменении значения приоритета партии\n const handlePriorFormChanged = e => {\n setCostRouteLists(pv => ({\n ...pv,\n editPriorValue: e.target.value\n }));\n };\n\n //Изменение приоритета\n const priorChange = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async (NRN, PriorValue, rows) => {\n try {\n await executeStored({\n stored: \"PKG_P8PANELS_MECHREC.FCROUTLST_PRIOR_PARTY_UPDATE\",\n args: {\n NFCROUTLST: NRN,\n SPRIOR_PARTY: PriorValue\n }\n });\n //Изменяем значение приоритета у нужного\n rows[rows.findIndex(obj => obj.NRN == NRN)].NPRIOR_PARTY = PriorValue;\n //Актуализируем строки таблицы\n setCostRouteLists(pv => ({\n ...pv,\n rows: rows\n }));\n //Закрываем окно\n handlePriorEditClose();\n } catch (e) {\n throw new Error(e.message);\n }\n }, [executeStored]);\n\n //При нажатии на изменение приоритета партии\n const handlePriorChange = () => {\n //Изменяем значение\n priorChange(costRouteLists.editPriorNRN, costRouteLists.editPriorValue, costRouteLists.rows);\n };\n\n //При открытии изменения заказа\n const handleOrderEditOpen = (NRN, sProdOrderValue) => {\n setCostRouteLists(pv => ({\n ...pv,\n editOrderNRN: NRN,\n editOrderValue: sProdOrderValue\n }));\n };\n\n //При закрытии изменения заказа\n const handleOrderEditClose = () => {\n setCostRouteLists(pv => ({\n ...pv,\n editOrderNRN: null,\n editOrderValue: null\n }));\n };\n\n //Изменение заказа\n const setEditOrderValue = value => {\n console.log(value);\n setCostRouteLists(pv => ({\n ...pv,\n editOrderValue: value\n }));\n };\n\n //При изменении значения заказа\n const handleOrderFormChanged = e => {\n setEditOrderValue(e.target.value);\n };\n\n //При нажатии на изменение заказа\n const handleOrderChange = () => {\n //Изменяем значение\n //priorChange(costRouteLists.editPriorNRN, costRouteLists.editPriorValue);\n //Закрываем окно\n handleOrderEditClose();\n };\n\n //Генерация содержимого\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n style: STYLES.CONTAINER\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_8__[\"default\"], {\n variant: \"h6\"\n }, \"\\u041C\\u0430\\u0440\\u0448\\u0440\\u0443\\u0442\\u043D\\u044B\\u0435 \\u043B\\u0438\\u0441\\u0442\\u044B\"), costRouteLists.dataLoaded ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_9__[\"default\"], {\n sx: STYLES.TABLE\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_components_p8p_data_grid__WEBPACK_IMPORTED_MODULE_1__.P8PDataGrid, _extends({}, _config_wrapper__WEBPACK_IMPORTED_MODULE_2__.P8P_DATA_GRID_CONFIG_PROPS, {\n columnsDef: costRouteLists.columnsDef,\n rows: costRouteLists.rows,\n size: _components_p8p_data_grid__WEBPACK_IMPORTED_MODULE_1__.P8P_DATA_GRID_SIZE.LARGE,\n morePages: costRouteLists.morePages,\n reloading: costRouteLists.reload,\n expandable: true,\n rowExpandRender: rowExpandRender,\n onOrderChanged: handleOrderChanged,\n onPagesCountChanged: handlePagesCountChanged,\n dataCellRender: prms => dataCellRender({\n ...prms,\n handlePriorEditOpen,\n handleOrderEditOpen\n })\n })))) : null, costRouteLists.editPriorNRN ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_10__[\"default\"], {\n open: true,\n onClose: () => handlePriorEditClose(null),\n sx: STYLES.DIALOG_EDITOR\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_11__[\"default\"], null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_9__[\"default\"], null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_12__[\"default\"], {\n name: \"editPriorValue\",\n label: \"\\u041D\\u043E\\u0432\\u043E\\u0435 \\u0437\\u043D\\u0430\\u0447\\u0435\\u043D\\u0438\\u0435 \\u043F\\u0440\\u0438\\u043E\\u0440\\u0438\\u0442\\u0435\\u0442\\u0430\",\n variant: \"standard\",\n fullWidth: true,\n type: \"number\",\n value: costRouteLists.editPriorValue,\n onChange: handlePriorFormChanged\n }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_9__[\"default\"], null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_13__[\"default\"], {\n onClick: handlePriorChange,\n variant: \"contained\",\n sx: STYLES.DIALOG_BUTTONS\n }, \"\\u0418\\u0437\\u043C\\u0435\\u043D\\u0438\\u0442\\u044C\")))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_14__[\"default\"], null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_13__[\"default\"], {\n onClick: () => handlePriorEditClose(null)\n }, \"\\u0417\\u0430\\u043A\\u0440\\u044B\\u0442\\u044C\"))) : null, costRouteLists.editOrderNRN ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_10__[\"default\"], {\n open: true,\n onClose: () => handleOrderEditClose(null),\n sx: STYLES.DIALOG_EDITOR\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_11__[\"default\"], null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_9__[\"default\"], null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_12__[\"default\"], {\n name: \"editOrderValue\",\n label: \"\\u0417\\u0430\\u043A\\u0430\\u0437\",\n variant: \"standard\",\n fullWidth: true,\n value: costRouteLists.editOrderValue,\n onChange: handleOrderFormChanged\n }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_9__[\"default\"], null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_13__[\"default\"], {\n sx: STYLES.DIALOG_BUTTONS,\n variant: \"contained\",\n onClick: () => {\n pOnlineShowDictionary({\n unitCode: \"FaceAccounts\",\n inputParameters: [{\n name: \"in_NUMB\",\n value: costRouteLists.editOrderValue\n }],\n callBack: res => res.success === true ? setEditOrderValue(res.outParameters.out_NUMB) : null\n });\n }\n }, \"\\u041B\\u0438\\u0446\\u0435\\u0432\\u044B\\u0435 \\u0441\\u0447\\u0435\\u0442\\u0430\"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_9__[\"default\"], null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_13__[\"default\"], {\n sx: STYLES.DIALOG_BUTTONS,\n onClick: handleOrderChange,\n variant: \"contained\"\n }, \"\\u0418\\u0437\\u043C\\u0435\\u043D\\u0438\\u0442\\u044C\"))))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_14__[\"default\"], null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_13__[\"default\"], {\n onClick: () => handleOrderEditClose(null)\n }, \"\\u0417\\u0430\\u043A\\u0440\\u044B\\u0442\\u044C\"))) : null);\n};\n\n//Контроль свойств - Таблица маршрутных листов\nCostRouteListsDataGrid.propTypes = {\n task: (prop_types__WEBPACK_IMPORTED_MODULE_15___default().number).isRequired\n};\n\n//Диалог с таблицей сдачи продукции\nconst CostRouteListsDataGridDialog = ({\n task,\n onClose\n}) => {\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_10__[\"default\"], {\n open: true,\n onClose: onClose ? onClose : null,\n fullWidth: true,\n maxWidth: \"xl\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_11__[\"default\"], null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(CostRouteListsDataGrid, {\n task: task\n })), onClose ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_14__[\"default\"], null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_13__[\"default\"], {\n onClick: onClose\n }, \"\\u0417\\u0430\\u043A\\u0440\\u044B\\u0442\\u044C\")) : null);\n};\n\n//Контроль свойств - Диалог с таблицей маршрутных листов\nCostRouteListsDataGridDialog.propTypes = {\n task: (prop_types__WEBPACK_IMPORTED_MODULE_15___default().number).isRequired,\n onClose: (prop_types__WEBPACK_IMPORTED_MODULE_15___default().func)\n};\n\n//----------------\n//Интерфейс модуля\n//----------------\n\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/panels/mech_rec_dept_cost_prod_plans/fcroutlst.js?"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ CostRouteListsDataGridDialog: () => (/* binding */ CostRouteListsDataGridDialog),\n/* harmony export */ rowExpandRender: () => (/* binding */ rowExpandRender)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! prop-types */ \"./node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_15___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_15__);\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Paper/Paper.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Typography/Typography.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Box/Box.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Dialog/Dialog.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/DialogContent/DialogContent.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/TextField/TextField.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Button/Button.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/DialogActions/DialogActions.js\");\n/* harmony import */ var _components_p8p_data_grid__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../components/p8p_data_grid */ \"./app/components/p8p_data_grid.js\");\n/* harmony import */ var _config_wrapper__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../config_wrapper */ \"./app/config_wrapper.js\");\n/* harmony import */ var _context_backend__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../context/backend */ \"./app/context/backend.js\");\n/* harmony import */ var _core_utils__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../core/utils */ \"./app/core/utils.js\");\n/* harmony import */ var _fcroutlstord__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./fcroutlstord */ \"./app/panels/mech_rec_dept_cost_prod_plans/fcroutlstord.js\");\n/* harmony import */ var _context_application__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../../context/application */ \"./app/context/application.js\");\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n/*\r\n Парус 8 - Панели мониторинга - ПУП - Производственный план цеха\r\n Компонент панели: Таблица маршрутных листов\r\n*/\n\n//---------------------\n//Подключение библиотек\n//---------------------\n\n //Классы React\n //Контроль свойств компонента\n //Интерфейсные элементы\n //Таблица данных\n //Подключение компонентов к настройкам приложения\n //Контекст взаимодействия с сервером\n //Вспомогательные функции\n //Состояние таблицы заказов маршрутных листов\n //Контекст приложения\n\n//---------\n//Константы\n//---------\n\n//Стили\nconst STYLES = {\n CONTAINER: {\n textAlign: \"center\"\n },\n TABLE: {\n paddingTop: \"15px\"\n },\n TABLE_SUM: {\n textAlign: \"right\",\n paddingTop: \"5px\",\n paddingRight: \"15px\"\n },\n DIALOG_EDITOR: {\n maxWidth: \"250px\"\n },\n DIALOG_BUTTONS: {\n marginTop: \"10px\",\n width: \"240px\"\n }\n};\n\n//---------------------------------------------\n//Вспомогательные функции форматирования данных\n//---------------------------------------------\n\n//Генерация представления расширения строки\nconst rowExpandRender = ({\n row\n}) => {\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_7__[\"default\"], {\n elevation: 4\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_fcroutlstord__WEBPACK_IMPORTED_MODULE_5__.CostRouteListsOrdDataGrid, {\n mainRowRN: row.NRN\n }));\n};\n\n//Форматирование значений колонок\nconst dataCellRender = ({\n row,\n columnDef /*, handlePriorEditOpen, handleOrderEditOpen */\n}) => {\n //!!! Пока отключено - не удалять\n // switch (columnDef.name) {\n // case \"NPRIOR_PARTY\":\n // return {\n // data: (\n // <>\n // {row[\"NPRIOR_PARTY\"]}\n // handlePriorEditOpen(row[\"NRN\"], row[\"NPRIOR_PARTY\"])}>\n // edit\n // \n // \n // )\n // };\n // case \"NCHANGE_FACEACC\":\n // return {\n // data: (\n // \n // handleOrderEditOpen(row[\"NRN\"], row[\"SPROD_ORDER\"])}>\n // inventory\n // \n // \n // )\n // };\n // }\n return {\n data: row[columnDef]\n };\n};\n\n//-----------\n//Тело модуля\n//-----------\n\n//Таблица маршрутных листов\nconst CostRouteListsDataGrid = ({\n task\n}) => {\n //Собственное состояние - таблица данных\n const [costRouteLists, setCostRouteLists] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({\n dataLoaded: false,\n columnsDef: [],\n orders: null,\n rows: [],\n reload: true,\n pageNumber: 1,\n morePages: true,\n editPriorNRN: null,\n editPriorValue: null,\n editOrderNRN: null,\n editOrderValue: null\n });\n\n //Подключение к контексту взаимодействия с сервером\n const {\n executeStored,\n SERV_DATA_TYPE_CLOB\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_backend__WEBPACK_IMPORTED_MODULE_3__[\"BackEndСtx\"]);\n\n //Подключение к контексту приложения\n const {\n pOnlineShowDictionary\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_application__WEBPACK_IMPORTED_MODULE_6__[\"ApplicationСtx\"]);\n\n //Размер страницы данных\n const DATA_GRID_PAGE_SIZE = 5;\n\n //Загрузка данных таблицы с сервера\n const loadData = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async () => {\n if (costRouteLists.reload) {\n const data = await executeStored({\n stored: \"PKG_P8PANELS_MECHREC.FCROUTLST_DEPT_DG_GET\",\n args: {\n NFCPRODPLANSP: task,\n CORDERS: {\n VALUE: (0,_core_utils__WEBPACK_IMPORTED_MODULE_4__.object2Base64XML)(costRouteLists.orders, {\n arrayNodeName: \"orders\"\n }),\n SDATA_TYPE: SERV_DATA_TYPE_CLOB\n },\n NPAGE_NUMBER: costRouteLists.pageNumber,\n NPAGE_SIZE: DATA_GRID_PAGE_SIZE,\n NINCLUDE_DEF: costRouteLists.dataLoaded ? 0 : 1\n },\n respArg: \"COUT\"\n });\n setCostRouteLists(pv => ({\n ...pv,\n columnsDef: data.XCOLUMNS_DEF ? [...data.XCOLUMNS_DEF] : pv.columnsDef,\n rows: pv.pageNumber == 1 ? [...(data.XROWS || [])] : [...pv.rows, ...(data.XROWS || [])],\n dataLoaded: true,\n reload: false,\n morePages: (data.XROWS || []).length >= DATA_GRID_PAGE_SIZE\n }));\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [costRouteLists.reload, costRouteLists.filters, costRouteLists.orders, costRouteLists.dataLoaded, costRouteLists.pageNumber, executeStored, SERV_DATA_TYPE_CLOB]);\n\n //При необходимости обновить данные таблицы\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n loadData();\n }, [costRouteLists.reload, loadData]);\n\n //При изменении состояния сортировки\n const handleOrderChanged = ({\n orders\n }) => setCostRouteLists(pv => ({\n ...pv,\n orders: [...orders],\n pageNumber: 1,\n reload: true\n }));\n\n //При изменении количества отображаемых страниц\n const handlePagesCountChanged = () => setCostRouteLists(pv => ({\n ...pv,\n pageNumber: pv.pageNumber + 1,\n reload: true\n }));\n\n //При открытии изменения приоритета партии\n const handlePriorEditOpen = (NRN, nPriorValue) => {\n setCostRouteLists(pv => ({\n ...pv,\n editPriorNRN: NRN,\n editPriorValue: nPriorValue\n }));\n };\n\n //При закрытии изменения приоритета партии\n const handlePriorEditClose = () => {\n setCostRouteLists(pv => ({\n ...pv,\n editPriorNRN: null,\n editPriorValue: null\n }));\n };\n\n //При изменении значения приоритета партии\n const handlePriorFormChanged = e => {\n setCostRouteLists(pv => ({\n ...pv,\n editPriorValue: e.target.value\n }));\n };\n\n //Изменение приоритета\n const priorChange = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async (NRN, PriorValue, rows) => {\n try {\n await executeStored({\n stored: \"PKG_P8PANELS_MECHREC.FCROUTLST_PRIOR_PARTY_UPDATE\",\n args: {\n NFCROUTLST: NRN,\n SPRIOR_PARTY: PriorValue\n }\n });\n //Изменяем значение приоритета у нужного\n rows[rows.findIndex(obj => obj.NRN == NRN)].NPRIOR_PARTY = PriorValue;\n //Актуализируем строки таблицы\n setCostRouteLists(pv => ({\n ...pv,\n rows: rows\n }));\n //Закрываем окно\n handlePriorEditClose();\n } catch (e) {\n throw new Error(e.message);\n }\n }, [executeStored]);\n\n //При нажатии на изменение приоритета партии\n const handlePriorChange = () => {\n //Изменяем значение\n priorChange(costRouteLists.editPriorNRN, costRouteLists.editPriorValue, costRouteLists.rows);\n };\n\n //При открытии изменения заказа\n const handleOrderEditOpen = (NRN, sProdOrderValue) => {\n setCostRouteLists(pv => ({\n ...pv,\n editOrderNRN: NRN,\n editOrderValue: sProdOrderValue\n }));\n };\n\n //При закрытии изменения заказа\n const handleOrderEditClose = () => {\n setCostRouteLists(pv => ({\n ...pv,\n editOrderNRN: null,\n editOrderValue: null\n }));\n };\n\n //Изменение заказа\n const setEditOrderValue = value => {\n setCostRouteLists(pv => ({\n ...pv,\n editOrderValue: value\n }));\n };\n\n //При изменении значения заказа\n const handleOrderFormChanged = e => {\n setEditOrderValue(e.target.value);\n };\n\n //При нажатии на изменение заказа\n const handleOrderChange = () => {\n //Изменяем значение\n //priorChange(costRouteLists.editPriorNRN, costRouteLists.editPriorValue);\n //Закрываем окно\n handleOrderEditClose();\n };\n\n //Генерация содержимого\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n style: STYLES.CONTAINER\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_8__[\"default\"], {\n variant: \"h6\"\n }, \"\\u041C\\u0430\\u0440\\u0448\\u0440\\u0443\\u0442\\u043D\\u044B\\u0435 \\u043B\\u0438\\u0441\\u0442\\u044B\"), costRouteLists.dataLoaded ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_9__[\"default\"], {\n sx: STYLES.TABLE\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_components_p8p_data_grid__WEBPACK_IMPORTED_MODULE_1__.P8PDataGrid, _extends({}, _config_wrapper__WEBPACK_IMPORTED_MODULE_2__.P8P_DATA_GRID_CONFIG_PROPS, {\n columnsDef: costRouteLists.columnsDef,\n rows: costRouteLists.rows,\n size: _components_p8p_data_grid__WEBPACK_IMPORTED_MODULE_1__.P8P_DATA_GRID_SIZE.LARGE,\n morePages: costRouteLists.morePages,\n reloading: costRouteLists.reload,\n expandable: true,\n rowExpandRender: rowExpandRender,\n onOrderChanged: handleOrderChanged,\n onPagesCountChanged: handlePagesCountChanged,\n dataCellRender: prms => dataCellRender({\n ...prms,\n handlePriorEditOpen,\n handleOrderEditOpen\n })\n })))) : null, costRouteLists.editPriorNRN ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_10__[\"default\"], {\n open: true,\n onClose: () => handlePriorEditClose(null),\n sx: STYLES.DIALOG_EDITOR\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_11__[\"default\"], null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_9__[\"default\"], null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_12__[\"default\"], {\n name: \"editPriorValue\",\n label: \"\\u041D\\u043E\\u0432\\u043E\\u0435 \\u0437\\u043D\\u0430\\u0447\\u0435\\u043D\\u0438\\u0435 \\u043F\\u0440\\u0438\\u043E\\u0440\\u0438\\u0442\\u0435\\u0442\\u0430\",\n variant: \"standard\",\n fullWidth: true,\n type: \"number\",\n value: costRouteLists.editPriorValue,\n onChange: handlePriorFormChanged\n }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_9__[\"default\"], null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_13__[\"default\"], {\n onClick: handlePriorChange,\n variant: \"contained\",\n sx: STYLES.DIALOG_BUTTONS\n }, \"\\u0418\\u0437\\u043C\\u0435\\u043D\\u0438\\u0442\\u044C\")))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_14__[\"default\"], null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_13__[\"default\"], {\n onClick: () => handlePriorEditClose(null)\n }, \"\\u0417\\u0430\\u043A\\u0440\\u044B\\u0442\\u044C\"))) : null, costRouteLists.editOrderNRN ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_10__[\"default\"], {\n open: true,\n onClose: () => handleOrderEditClose(null),\n sx: STYLES.DIALOG_EDITOR\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_11__[\"default\"], null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_9__[\"default\"], null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_12__[\"default\"], {\n name: \"editOrderValue\",\n label: \"\\u0417\\u0430\\u043A\\u0430\\u0437\",\n variant: \"standard\",\n fullWidth: true,\n value: costRouteLists.editOrderValue,\n onChange: handleOrderFormChanged\n }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_9__[\"default\"], null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_13__[\"default\"], {\n sx: STYLES.DIALOG_BUTTONS,\n variant: \"contained\",\n onClick: () => {\n pOnlineShowDictionary({\n unitCode: \"FaceAccounts\",\n inputParameters: [{\n name: \"in_NUMB\",\n value: costRouteLists.editOrderValue\n }],\n callBack: res => res.success === true ? setEditOrderValue(res.outParameters.out_NUMB) : null\n });\n }\n }, \"\\u041B\\u0438\\u0446\\u0435\\u0432\\u044B\\u0435 \\u0441\\u0447\\u0435\\u0442\\u0430\"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_9__[\"default\"], null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_13__[\"default\"], {\n sx: STYLES.DIALOG_BUTTONS,\n onClick: handleOrderChange,\n variant: \"contained\"\n }, \"\\u0418\\u0437\\u043C\\u0435\\u043D\\u0438\\u0442\\u044C\"))))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_14__[\"default\"], null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_13__[\"default\"], {\n onClick: () => handleOrderEditClose(null)\n }, \"\\u0417\\u0430\\u043A\\u0440\\u044B\\u0442\\u044C\"))) : null);\n};\n\n//Контроль свойств - Таблица маршрутных листов\nCostRouteListsDataGrid.propTypes = {\n task: (prop_types__WEBPACK_IMPORTED_MODULE_15___default().number).isRequired\n};\n\n//Диалог с таблицей сдачи продукции\nconst CostRouteListsDataGridDialog = ({\n task,\n onClose\n}) => {\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_10__[\"default\"], {\n open: true,\n onClose: onClose ? onClose : null,\n fullWidth: true,\n maxWidth: \"xl\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_11__[\"default\"], null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(CostRouteListsDataGrid, {\n task: task\n })), onClose ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_14__[\"default\"], null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_13__[\"default\"], {\n onClick: onClose\n }, \"\\u0417\\u0430\\u043A\\u0440\\u044B\\u0442\\u044C\")) : null);\n};\n\n//Контроль свойств - Диалог с таблицей маршрутных листов\nCostRouteListsDataGridDialog.propTypes = {\n task: (prop_types__WEBPACK_IMPORTED_MODULE_15___default().number).isRequired,\n onClose: (prop_types__WEBPACK_IMPORTED_MODULE_15___default().func)\n};\n\n//----------------\n//Интерфейс модуля\n//----------------\n\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/panels/mech_rec_dept_cost_prod_plans/fcroutlst.js?"); /***/ }), @@ -4404,7 +4415,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ Svg: () => (/* binding */ Svg)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! prop-types */ \"./node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_9___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_9__);\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Typography/Typography.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/FormControl/FormControl.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/FormLabel/FormLabel.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/RadioGroup/RadioGroup.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/FormControlLabel/FormControlLabel.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Radio/Radio.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Grid/Grid.js\");\n/* harmony import */ var _components_p8p_svg__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../components/p8p_svg */ \"./app/components/p8p_svg.js\");\n/*\r\n Парус 8 - Панели мониторинга - Примеры для разработчиков\r\n Пример: Интерактивные изображения \"P8PSVG\"\r\n*/\n\n//---------------------\n//Подключение библиотек\n//---------------------\n\n //Классы React\n //Контроль свойств компонента\n //Интерфейсные элементы\n //Интерактивные изображения\n\n//---------\n//Константы\n//---------\n\n//Адрес тестового изображения\nconst SAMPLE_URL = \"img/sample.svg\";\n\n//Стили\nconst STYLES = {\n CONTAINER: {\n textAlign: \"center\",\n paddingTop: \"20px\"\n },\n TITLE: {\n paddingBottom: \"15px\"\n },\n FORM: {\n justifyContent: \"center\",\n alignItems: \"center\"\n },\n SVG: {\n width: \"95vw\",\n height: \"30vw\",\n display: \"flex\",\n justifyContent: \"center\"\n }\n};\n\n//-----------\n//Тело модуля\n//-----------\n\n//Пример: Интерактивные изображения \"P8PSVG\"\nconst Svg = ({\n title\n}) => {\n //Собственное состояние - SVG-изображение\n const [svg, setSVG] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({\n loaded: false,\n data: null,\n mode: \"items1\",\n items1: [{\n id: \"1\",\n backgroundColor: \"red\",\n desc: \"Цифра на флюзеляже\",\n title: \"Цифра на флюзеляже\"\n }, {\n id: \"2\",\n backgroundColor: \"magenta\",\n desc: \"Ребро флюзеляжа\",\n title: \"Ребро флюзеляжа\"\n }, {\n id: \"3\",\n backgroundColor: \"yellow\",\n desc: \"Люк\",\n title: \"Люк\"\n }],\n items2: [{\n id: \"4\",\n backgroundColor: \"green\",\n desc: \"Хвост\",\n title: \"Хвост\"\n }, {\n id: \"5\",\n backgroundColor: \"blue\",\n desc: \"Хвостовой руль\",\n title: \"Хвостовой руль\"\n }, {\n id: \"6\",\n backgroundColor: \"aquamarine\",\n desc: \"Ребро жесткости хвоста\",\n title: \"Ребро жесткости хвоста\"\n }],\n items3: [{\n id: \"7\",\n backgroundColor: \"blueviolet\",\n desc: \"Крыло левое\",\n title: \"Крыло левое\"\n }, {\n id: \"8\",\n backgroundColor: \"orange\",\n desc: \"Двигатель левый\",\n title: \"Двигатель левый\"\n }, {\n id: \"9\",\n backgroundColor: \"springgreen\",\n desc: \"Крыло правое\",\n title: \"Крыло правое\"\n }],\n selectedItemDesc: \"\"\n });\n\n //Загрузка изображения\n const loadSVG = async () => {\n const resp = await fetch(SAMPLE_URL);\n const data = await resp.text();\n setSVG(pv => ({\n ...pv,\n loaded: true,\n data\n }));\n };\n\n //Отработка нажатия на изображение\n const handleSVGClick = () => {\n setSVG(pv => ({\n ...pv,\n selectedItemDesc: \"Выбрано изображение целиком\"\n }));\n };\n\n //Отработка нажатия на элемент изображения\n const handleSVGItemClick = ({\n item\n }) => {\n setSVG(pv => ({\n ...pv,\n selectedItemDesc: item?.desc ? `Выбран элемент: ${item.desc}` : \"Для выбранного элемента не задано описание\"\n }));\n };\n\n //При подключении к странице\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n loadSVG();\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n //Генерация содержимого\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n style: STYLES.CONTAINER\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n sx: STYLES.TITLE,\n variant: \"h6\"\n }, title), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n sx: STYLES.FORM\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_4__[\"default\"], null, \"\\u0413\\u0440\\u0443\\u043F\\u043F\\u0430 \\u044D\\u043B\\u0435\\u043C\\u0435\\u043D\\u0442\\u043E\\u0432\"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_5__[\"default\"], {\n row: true,\n value: svg.mode,\n onChange: e => setSVG(pv => ({\n ...pv,\n mode: e.target.value,\n selectedItemDesc: \"\"\n }))\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n value: \"items1\",\n control: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_7__[\"default\"], null),\n label: \"\\u041F\\u0435\\u0440\\u0432\\u0430\\u044F\"\n }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n value: \"items2\",\n control: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_7__[\"default\"], null),\n label: \"\\u0412\\u0442\\u043E\\u0440\\u0430\\u044F\"\n }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n value: \"items3\",\n control: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_7__[\"default\"], null),\n label: \"\\u0422\\u0440\\u0435\\u0442\\u044C\\u044F\"\n })), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_4__[\"default\"], null, svg.selectedItemDesc ? svg.selectedItemDesc : \"Нажмите на элемент изображения для получения его описания\")), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_8__[\"default\"], {\n container: true,\n spacing: 0,\n pt: 5,\n direction: \"column\",\n alignItems: \"center\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_8__[\"default\"], {\n item: true,\n xs: 12\n }, svg.loaded ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_components_p8p_svg__WEBPACK_IMPORTED_MODULE_1__.P8PSVG, {\n data: svg.data,\n items: svg[svg.mode],\n onClick: handleSVGClick,\n onItemClick: handleSVGItemClick,\n canvasStyle: STYLES.SVG\n }) : null)));\n};\n\n//Контроль свойств - Пример: Интерактивные изображения \"P8PSVG\"\nSvg.propTypes = {\n title: (prop_types__WEBPACK_IMPORTED_MODULE_9___default().string).isRequired\n};\n\n//----------------\n//Интерфейс модуля\n//----------------\n\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/panels/samples/svg.js?"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ Svg: () => (/* binding */ Svg)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! prop-types */ \"./node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_9___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_9__);\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Typography/Typography.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/FormControl/FormControl.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/FormLabel/FormLabel.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/RadioGroup/RadioGroup.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/FormControlLabel/FormControlLabel.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Radio/Radio.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Grid/Grid.js\");\n/* harmony import */ var _components_p8p_svg__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../components/p8p_svg */ \"./app/components/p8p_svg.js\");\n/*\r\n Парус 8 - Панели мониторинга - Примеры для разработчиков\r\n Пример: Интерактивные изображения \"P8PSVG\"\r\n*/\n\n//---------------------\n//Подключение библиотек\n//---------------------\n\n //Классы React\n //Контроль свойств компонента\n //Интерфейсные элементы\n //Интерактивные изображения\n\n//---------\n//Константы\n//---------\n\n//Адрес тестового изображения\nconst SAMPLE_URL = \"img/sample.svg\";\n\n//Стили\nconst STYLES = {\n CONTAINER: {\n textAlign: \"center\",\n paddingTop: \"20px\"\n },\n TITLE: {\n paddingBottom: \"15px\"\n },\n FORM: {\n justifyContent: \"center\",\n alignItems: \"center\"\n },\n SVG: {\n height: \"30vw\",\n display: \"flex\",\n justifyContent: \"center\"\n }\n};\n\n//-----------\n//Тело модуля\n//-----------\n\n//Пример: Интерактивные изображения \"P8PSVG\"\nconst Svg = ({\n title\n}) => {\n //Собственное состояние - SVG-изображение\n const [svg, setSVG] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({\n loaded: false,\n data: null,\n mode: \"items1\",\n items1: [{\n id: \"1\",\n backgroundColor: \"red\",\n desc: \"Цифра на флюзеляже\",\n title: \"Цифра на флюзеляже\"\n }, {\n id: \"2\",\n backgroundColor: \"magenta\",\n desc: \"Ребро флюзеляжа\",\n title: \"Ребро флюзеляжа\"\n }, {\n id: \"3\",\n backgroundColor: \"yellow\",\n desc: \"Люк\",\n title: \"Люк\"\n }],\n items2: [{\n id: \"4\",\n backgroundColor: \"green\",\n desc: \"Хвост\",\n title: \"Хвост\"\n }, {\n id: \"5\",\n backgroundColor: \"blue\",\n desc: \"Хвостовой руль\",\n title: \"Хвостовой руль\"\n }, {\n id: \"6\",\n backgroundColor: \"aquamarine\",\n desc: \"Ребро жесткости хвоста\",\n title: \"Ребро жесткости хвоста\"\n }],\n items3: [{\n id: \"7\",\n backgroundColor: \"blueviolet\",\n desc: \"Крыло левое\",\n title: \"Крыло левое\"\n }, {\n id: \"8\",\n backgroundColor: \"orange\",\n desc: \"Двигатель левый\",\n title: \"Двигатель левый\"\n }, {\n id: \"9\",\n backgroundColor: \"springgreen\",\n desc: \"Крыло правое\",\n title: \"Крыло правое\"\n }],\n selectedItemDesc: \"\"\n });\n\n //Загрузка изображения\n const loadSVG = async () => {\n const resp = await fetch(SAMPLE_URL);\n const data = await resp.text();\n setSVG(pv => ({\n ...pv,\n loaded: true,\n data\n }));\n };\n\n //Отработка нажатия на изображение\n const handleSVGClick = () => {\n setSVG(pv => ({\n ...pv,\n selectedItemDesc: \"Выбрано изображение целиком\"\n }));\n };\n\n //Отработка нажатия на элемент изображения\n const handleSVGItemClick = ({\n item\n }) => {\n setSVG(pv => ({\n ...pv,\n selectedItemDesc: item?.desc ? `Выбран элемент: ${item.desc}` : \"Для выбранного элемента не задано описание\"\n }));\n };\n\n //При подключении к странице\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n loadSVG();\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n //Генерация содержимого\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n style: STYLES.CONTAINER\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n sx: STYLES.TITLE,\n variant: \"h6\"\n }, title), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n sx: STYLES.FORM\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_4__[\"default\"], null, \"\\u0413\\u0440\\u0443\\u043F\\u043F\\u0430 \\u044D\\u043B\\u0435\\u043C\\u0435\\u043D\\u0442\\u043E\\u0432\"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_5__[\"default\"], {\n row: true,\n value: svg.mode,\n onChange: e => setSVG(pv => ({\n ...pv,\n mode: e.target.value,\n selectedItemDesc: \"\"\n }))\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n value: \"items1\",\n control: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_7__[\"default\"], null),\n label: \"\\u041F\\u0435\\u0440\\u0432\\u0430\\u044F\"\n }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n value: \"items2\",\n control: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_7__[\"default\"], null),\n label: \"\\u0412\\u0442\\u043E\\u0440\\u0430\\u044F\"\n }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n value: \"items3\",\n control: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_7__[\"default\"], null),\n label: \"\\u0422\\u0440\\u0435\\u0442\\u044C\\u044F\"\n })), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_4__[\"default\"], null, svg.selectedItemDesc ? svg.selectedItemDesc : \"Нажмите на элемент изображения для получения его описания\")), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_8__[\"default\"], {\n container: true,\n spacing: 0,\n pt: 5,\n direction: \"column\",\n alignItems: \"center\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_8__[\"default\"], {\n item: true,\n xs: 12\n }, svg.loaded ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_components_p8p_svg__WEBPACK_IMPORTED_MODULE_1__.P8PSVG, {\n data: svg.data,\n items: svg[svg.mode],\n onClick: handleSVGClick,\n onItemClick: handleSVGItemClick,\n canvasStyle: STYLES.SVG\n }) : null)));\n};\n\n//Контроль свойств - Пример: Интерактивные изображения \"P8PSVG\"\nSvg.propTypes = {\n title: (prop_types__WEBPACK_IMPORTED_MODULE_9___default().string).isRequired\n};\n\n//----------------\n//Интерфейс модуля\n//----------------\n\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/panels/samples/svg.js?"); /***/ }), From 3883e485dd9a10eed533e06e2c6aae3ab8850df6 Mon Sep 17 00:00:00 2001 From: Mikhail Chechnev Date: Thu, 23 May 2024 16:16:13 +0300 Subject: [PATCH 45/76] =?UTF-8?q?WEB=20APP:=20P8PTable=20-=20=D0=B8=D1=81?= =?UTF-8?q?=D0=BF=D1=80=D0=B0=D0=B2=D0=BB=D0=B5=D0=BD=D0=B0=20=D0=BE=D1=88?= =?UTF-8?q?=D0=B8=D0=B1=D0=BA=D0=B0=20=D0=B2=D1=91=D1=80=D1=81=D1=82=D0=BA?= =?UTF-8?q?=D0=B8=20=D1=81=D0=BE=D0=BE=D0=B1=D1=89=D0=B5=D0=BD=D0=B8=D1=8F?= =?UTF-8?q?=20=D0=BE=D0=B1=20=D0=BE=D1=82=D1=81=D1=83=D1=82=D1=81=D1=82?= =?UTF-8?q?=D0=B2=D0=B8=D0=B8=20=D0=B4=D0=B0=D0=BD=D0=BD=D1=8B=D1=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/components/p8p_table.js | 154 ++++++++++++++++++------------------ 1 file changed, 76 insertions(+), 78 deletions(-) diff --git a/app/components/p8p_table.js b/app/components/p8p_table.js index 43d910b..529786d 100644 --- a/app/components/p8p_table.js +++ b/app/components/p8p_table.js @@ -798,87 +798,85 @@ const P8PTable = ({ ))} - {rows.length > 0 - ? (Array.isArray(groups) && groups.length > 0 ? groups : [{}]).map((group, g) => { - const rowsView = rows.map((row, i) => - !group?.name || group?.name == row.groupName ? ( - - - {expandable && rowExpandRender ? ( - - handleExpandClick(i)}> - {expanded[i] === true ? "keyboard_arrow_down" : "keyboard_arrow_right"} - - - ) : null} - {header.displayDataColumns.map((columnDef, j) => { - let customRender = {}; - if (dataCellRender) customRender = dataCellRender({ row, columnDef }) || {}; - return ( - - {customRender.data - ? customRender.data - : valueFormatter - ? valueFormatter({ value: row[columnDef.name], columnDef }) - : row[columnDef.name]} - - ); - })} - - {expandable && rowExpandRender && expanded[i] === true ? ( - - - {rowExpandRender({ columnsDef, row })} - - - ) : null} - - ) : null - ); - return !group?.name ? ( - rowsView - ) : ( - - {renderGroupCell(group)} - {!group.expandable || expandedGroups[group.name] === true ? rowsView : null} - - ); - }) - : null} + {rows.length > 0 ? ( + (Array.isArray(groups) && groups.length > 0 ? groups : [{}]).map((group, g) => { + const rowsView = rows.map((row, i) => + !group?.name || group?.name == row.groupName ? ( + + + {expandable && rowExpandRender ? ( + + handleExpandClick(i)}> + {expanded[i] === true ? "keyboard_arrow_down" : "keyboard_arrow_right"} + + + ) : null} + {header.displayDataColumns.map((columnDef, j) => { + let customRender = {}; + if (dataCellRender) customRender = dataCellRender({ row, columnDef }) || {}; + return ( + + {customRender.data + ? customRender.data + : valueFormatter + ? valueFormatter({ value: row[columnDef.name], columnDef }) + : row[columnDef.name]} + + ); + })} + + {expandable && rowExpandRender && expanded[i] === true ? ( + + + {rowExpandRender({ columnsDef, row })} + + + ) : null} + + ) : null + ); + return !group?.name ? ( + rowsView + ) : ( + + {renderGroupCell(group)} + {!group.expandable || expandedGroups[group.name] === true ? rowsView : null} + + ); + }) + ) : noDataFoundText && !reloading ? ( + + + + + + ) : null} - {rows.length == 0 ? ( - noDataFoundText && !reloading ? ( - - ) : null - ) : morePages ? ( + {morePages ? ( + )} /> ) : null} diff --git a/docs/Image Sources.pptx b/docs/Image Sources.pptx index 86dd53ac683ae5d3d3afe31271557a5e1709dc13..1ceec39a2505088ac37ce68505aa55e72dff5685 100644 GIT binary patch delta 88530 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 delta 95300 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 gvHj-(OiV=d8Akm+w*5yF0wi_xro=-gp0a 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�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�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 W< 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 vRf{)5Ug`;BqVBR+ynTg)DjG0h)Ss^H94{j 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 SCFgf Date: Fri, 24 May 2024 19:37:08 +0300 Subject: [PATCH 52/76] =?UTF-8?q?WEB=20APP:=20P8PDataGrid=20-=20=D0=BF?= =?UTF-8?q?=D0=BE=D0=B4=D0=B4=D0=B5=D1=80=D0=B6=D0=BA=D0=B0=20=D1=81=D0=B2?= =?UTF-8?q?=D0=BE=D0=B9=D1=81=D1=82=D0=B2=20=D0=BA=D0=BD=D0=BE=D0=BF=D0=BA?= =?UTF-8?q?=D0=B8=20=D0=B4=D0=BE=D0=B3=D1=80=D1=83=D0=B7=D0=BA=D0=B8=20?= =?UTF-8?q?=D0=B4=D0=B0=D0=BD=D0=BD=D1=8B=D1=85=20(morePagesBtnProps)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/components/p8p_data_grid.js | 3 +++ app/components/p8p_table.js | 4 +++- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/app/components/p8p_data_grid.js b/app/components/p8p_data_grid.js index 51c1416..46c960e 100644 --- a/app/components/p8p_data_grid.js +++ b/app/components/p8p_data_grid.js @@ -50,6 +50,7 @@ const P8PDataGrid = ({ clearFilterBtnCaption, cancelFilterBtnCaption, morePagesBtnCaption, + morePagesBtnProps, noDataFoundText, headCellRender, dataCellRender, @@ -137,6 +138,7 @@ const P8PDataGrid = ({ objectsCopier={objectsCopier} containerComponent={containerComponent} containerComponentProps={containerComponentProps} + morePagesBtnProps={morePagesBtnProps} onOrderChanged={handleOrderChanged} onFilterChanged={handleFilterChanged} onPagesCountChanged={handlePagesCountChanged} @@ -166,6 +168,7 @@ P8PDataGrid.propTypes = { clearFilterBtnCaption: PropTypes.string.isRequired, cancelFilterBtnCaption: PropTypes.string.isRequired, morePagesBtnCaption: PropTypes.string.isRequired, + morePagesBtnProps: PropTypes.object, noDataFoundText: PropTypes.string, headCellRender: PropTypes.func, dataCellRender: PropTypes.func, diff --git a/app/components/p8p_table.js b/app/components/p8p_table.js index 529786d..04490dc 100644 --- a/app/components/p8p_table.js +++ b/app/components/p8p_table.js @@ -501,6 +501,7 @@ const P8PTable = ({ clearFilterBtnCaption, cancelFilterBtnCaption, morePagesBtnCaption, + morePagesBtnProps, noDataFoundText, headCellRender, dataCellRender, @@ -878,7 +879,7 @@ const P8PTable = ({ {morePages ? ( - @@ -936,6 +937,7 @@ P8PTable.propTypes = { clearFilterBtnCaption: PropTypes.string.isRequired, cancelFilterBtnCaption: PropTypes.string.isRequired, morePagesBtnCaption: PropTypes.string.isRequired, + morePagesBtnProps: PropTypes.object, noDataFoundText: PropTypes.string, headCellRender: PropTypes.func, dataCellRender: PropTypes.func, From b686ae7513c810786b5523eb5e7930d83c995686 Mon Sep 17 00:00:00 2001 From: Mikhail Chechnev Date: Fri, 24 May 2024 19:39:24 +0300 Subject: [PATCH 53/76] =?UTF-8?q?WEB=20APP:=20=D0=9F=D0=B0=D0=BD=D0=B5?= =?UTF-8?q?=D0=BB=D1=8C=20"=D0=9C=D0=BE=D0=BD=D0=B8=D1=82=D0=BE=D1=80?= =?UTF-8?q?=D0=B8=D0=BD=D0=B3=20=D1=81=D0=B1=D0=BE=D1=80=D0=BA=D0=B8=20?= =?UTF-8?q?=D0=B8=D0=B7=D0=B4=D0=B5=D0=BB=D0=B8=D0=B9"=20-=20=D0=BF=D0=BE?= =?UTF-8?q?=D1=81=D1=82=D1=80=D0=B0=D0=BD=D0=B8=D1=87=D0=BD=D0=B0=D1=8F=20?= =?UTF-8?q?=D0=B2=D1=8B=D0=B4=D0=B0=D1=87=D0=B0=20=D0=B2=20=D1=82=D0=B0?= =?UTF-8?q?=D0=B1=D0=BB=D0=B8=D1=86=D0=B0=D1=85=20=D0=B4=D0=B5=D1=82=D0=B0?= =?UTF-8?q?=D0=BB=D0=B8=D0=B7=D0=B0=D1=86=D0=B8=D0=B8=20=D0=BA=D0=B0=D1=80?= =?UTF-8?q?=D1=82=D0=BE=D1=87=D0=BA=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../mech_rec_assembly_mon/components/plan_detail.js | 8 ++++---- app/panels/mech_rec_assembly_mon/hooks.js | 4 ++-- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/app/panels/mech_rec_assembly_mon/components/plan_detail.js b/app/panels/mech_rec_assembly_mon/components/plan_detail.js index 305928d..03f2971 100644 --- a/app/panels/mech_rec_assembly_mon/components/plan_detail.js +++ b/app/panels/mech_rec_assembly_mon/components/plan_detail.js @@ -69,7 +69,7 @@ const STYLES = { width: "280px", borderBottom: "1px solid" }, - TABLE_DETAILS: { height: "260px" }, + TABLE_DETAILS: { height: "230px" }, TABLE_DETAILS_HEADER_CELL: maxWidth => ({ padding: "2px 2px", fontSize: "11px", @@ -78,6 +78,7 @@ const STYLES = { ...(maxWidth ? { maxWidth } : {}) }), TABLE_DETAILS_DATA_CELL: textAlign => ({ padding: "2px 2px", fontSize: "11px", ...(textAlign ? { textAlign } : {}) }), + TABLE_DETAILS_MORE_BUTTON: { borderRadius: "25px" }, CARD_DETAILS_CONTAINER: { minWidth: "1200px", maxWidth: "1400px" }, CARD_DETAILS_NAVIGATION_STACK: { width: "100%" } }; @@ -193,20 +194,19 @@ const ProductDetailsTable = ({ plan, product, stored, noProductMessage, noDataFo {!product ? ( {noProductMessage} - ) : isLoading ? null : data.rows.length === 0 ? ( - {noDataFoundMessage} ) : ( <> {title} { CORDERS: { VALUE: object2Base64XML(orders, { arrayNodeName: "orders" }), SDATA_TYPE: SERV_DATA_TYPE_CLOB }, NPAGE_NUMBER: pageNumber, NPAGE_SIZE: DATA_GRID_PAGE_SIZE, - NINCLUDE_DEF: 1 + NINCLUDE_DEF: pageNumber == 1 ? 1 : 0 }, respArg: "COUT" }); From 95ddde190c2d9b9f19d4f4f4d8f9c6c5ee2af6c6 Mon Sep 17 00:00:00 2001 From: Mikhail Chechnev Date: Fri, 24 May 2024 19:40:55 +0300 Subject: [PATCH 54/76] =?UTF-8?q?=D0=91=D0=94:=20=D0=9F=D0=B0=D0=BD=D0=B5?= =?UTF-8?q?=D0=BB=D1=8C=20"=D0=9C=D0=BE=D0=BD=D0=B8=D1=82=D0=BE=D1=80?= =?UTF-8?q?=D0=B8=D0=BD=D0=B3=20=D1=81=D0=B1=D0=BE=D1=80=D0=BA=D0=B8=20?= =?UTF-8?q?=D0=B8=D0=B7=D0=B4=D0=B5=D0=BB=D0=B8=D1=8F"=20-=20=D0=B4=D0=BE?= =?UTF-8?q?=D1=80=D0=B0=D0=B1=D0=BE=D1=82=D0=BA=D0=B0=20=D0=B0=D0=BB=D0=B3?= =?UTF-8?q?=D0=BE=D1=80=D0=B8=D1=82=D0=BC=D0=B0=20=D1=80=D0=B0=D1=81=D1=87?= =?UTF-8?q?=D0=B5=D1=82=D0=B0=20=D0=BF=D1=80=D0=BE=D0=B3=D1=80=D0=B5=D1=81?= =?UTF-8?q?=D1=81=D0=B0=20(=D0=BE=D1=82=D0=BD=D0=BE=D1=81=D0=B8=D1=82?= =?UTF-8?q?=D0=B5=D0=BB=D1=8C=D0=BD=D0=BE=20=D0=BF=D0=BB=D0=B0=D0=BD=D0=B0?= =?UTF-8?q?,=20=D0=B0=20=D0=BD=D0=B5=20=D0=BD=D0=BE=D1=80=D0=BC=D0=B0?= =?UTF-8?q?=D1=82=D0=B8=D0=B2=D0=B0)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- db/PKG_P8PANELS_MECHREC.pck | 29 ++++++++++++++++------------- 1 file changed, 16 insertions(+), 13 deletions(-) diff --git a/db/PKG_P8PANELS_MECHREC.pck b/db/PKG_P8PANELS_MECHREC.pck index c1b5ed5..777435e 100644 --- a/db/PKG_P8PANELS_MECHREC.pck +++ b/db/PKG_P8PANELS_MECHREC.pck @@ -5682,11 +5682,11 @@ create or replace package body PKG_P8PANELS_MECHREC as /* Получение таблицы записей "Планы и отчеты производства изделий" */ procedure FCPRODPLAN_GET ( - NCRN in number, -- Рег. номер каталога - COUT out clob -- Сериализованная таблица данных + NCRN in number, -- Рег. номер каталога + COUT out clob -- Сериализованная таблица данных ) is - NPROGRESS PKG_STD.TNUMBER; -- Прогресс плана + NPROGRESS PKG_STD.TLNUMBER; -- Прогресс плана /* Получение номера плана из примечания */ function NUMB_BY_NOTE_GET @@ -5730,11 +5730,12 @@ create or replace package body PKG_P8PANELS_MECHREC as for REC in (select P.RN NRN, P.NOTE SNOTE, D_YEAR(EN.STARTDATE) NYEAR, - COALESCE(SUM(SP.LABOUR_FACT), 0) NLABOUR_FACT, - COALESCE(SUM(SP.LABOUR_NORM), 0) NLABOUR_NORM - from FCPRODPLAN P left outer join FCPRODPLANSP SP on P.RN = SP.PRN and ((SP.LABOUR_NORM is not null) or (SP.LABOUR_FACT is not null)), - FINSTATE FS, - ENPERIOD EN + COALESCE(sum(SP.LABOUR_FACT), 0) NLABOUR_FACT, + COALESCE(sum(SP.LABOUR_PLAN), 0) NLABOUR_PLAN + from FCPRODPLAN P + left outer join FCPRODPLANSP SP + on P.RN = SP.PRN + and ((SP.LABOUR_PLAN is not null) or (SP.LABOUR_FACT is not null)), FINSTATE FS, ENPERIOD EN where P.CRN = NCRN and P.CATEGORY = NFCPRODPLAN_CATEGORY_MON and P.STATUS = NFCPRODPLAN_STATUS_MON @@ -5757,8 +5758,10 @@ create or replace package body PKG_P8PANELS_MECHREC as where UP.JUR_PERS = P.JUR_PERS and UP.UNITCODE = 'CostProductPlans' and UP.AUTHID = UTILIZER()) - group by P.RN, P.NOTE, EN.STARTDATE - order by EN.STARTDATE asc) + group by P.RN, + P.NOTE, + EN.STARTDATE + order by EN.STARTDATE asc) loop /* Открываем план */ PKG_XFAST.DOWN_NODE(SNAME => 'XFCPRODPLAN_INFO'); @@ -5766,7 +5769,7 @@ create or replace package body PKG_P8PANELS_MECHREC as PKG_XFAST.ATTR(SNAME => 'NRN', NVALUE => REC.NRN); PKG_XFAST.ATTR(SNAME => 'SNUMB', SVALUE => NUMB_BY_NOTE_GET(SNOTE => REC.SNOTE)); /* Определяем прогресс */ - if (REC.NLABOUR_NORM = 0) then + if (REC.NLABOUR_PLAN = 0) then /* Не можем определить прогресс */ NPROGRESS := 0; else @@ -5775,8 +5778,8 @@ create or replace package body PKG_P8PANELS_MECHREC as /* Не можем определить прогресс */ NPROGRESS := 0; else - /* Не можем определить прогресс */ - NPROGRESS := REC.NLABOUR_FACT / REC.NLABOUR_NORM; + /* Определим прогресс */ + NPROGRESS := ROUND(REC.NLABOUR_FACT / REC.NLABOUR_PLAN * 100, 2); end if; end if; PKG_XFAST.ATTR(SNAME => 'NPROGRESS', NVALUE => NPROGRESS); From bd7cc1f4514625b3e784f49565d818605f931f72 Mon Sep 17 00:00:00 2001 From: Mikhail Chechnev Date: Fri, 24 May 2024 19:41:17 +0300 Subject: [PATCH 55/76] =?UTF-8?q?WEB=20APP:=20=D0=A1=D0=B2=D0=B5=D0=B6?= =?UTF-8?q?=D0=B0=D1=8F=20=D1=81=D0=B1=D0=BE=D1=80=D0=BA=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- dist/p8-panels.js | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/dist/p8-panels.js b/dist/p8-panels.js index edf0972..365f76c 100644 --- a/dist/p8-panels.js +++ b/dist/p8-panels.js @@ -3535,7 +3535,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ P8PDataGrid: () => (/* binding */ P8PDataGrid),\n/* harmony export */ P8P_DATA_GRID_DATA_TYPE: () => (/* binding */ P8P_DATA_GRID_DATA_TYPE),\n/* harmony export */ P8P_DATA_GRID_FILTER_SHAPE: () => (/* binding */ P8P_DATA_GRID_FILTER_SHAPE),\n/* harmony export */ P8P_DATA_GRID_SIZE: () => (/* binding */ P8P_DATA_GRID_SIZE)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! prop-types */ \"./node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var _p8p_table__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./p8p_table */ \"./app/components/p8p_table.js\");\n/*\r\n Парус 8 - Панели мониторинга\r\n Компонент: Таблица данных\r\n*/\n\n//---------------------\n//Подключение библиотек\n//---------------------\n\n //Классы React\n //Контроль свойств компонента\n //Таблица\n\n//---------\n//Константы\n//---------\n\n//Размеры отступов\nconst P8P_DATA_GRID_SIZE = _p8p_table__WEBPACK_IMPORTED_MODULE_1__.P8P_TABLE_SIZE;\n\n//Типы данных\nconst P8P_DATA_GRID_DATA_TYPE = _p8p_table__WEBPACK_IMPORTED_MODULE_1__.P8P_TABLE_DATA_TYPE;\n\n//Формат фильтра\nconst P8P_DATA_GRID_FILTER_SHAPE = _p8p_table__WEBPACK_IMPORTED_MODULE_1__.P8P_TABLE_FILTER_SHAPE;\n\n//-----------\n//Тело модуля\n//-----------\n\n//Таблица данных\nconst P8PDataGrid = ({\n columnsDef,\n filtersInitial,\n groups,\n rows,\n size,\n fixedHeader = false,\n fixedColumns = 0,\n morePages = false,\n reloading,\n expandable,\n orderAscMenuItemCaption,\n orderDescMenuItemCaption,\n filterMenuItemCaption,\n valueFilterCaption,\n valueFromFilterCaption,\n valueToFilterCaption,\n okFilterBtnCaption,\n clearFilterBtnCaption,\n cancelFilterBtnCaption,\n morePagesBtnCaption,\n noDataFoundText,\n headCellRender,\n dataCellRender,\n groupCellRender,\n rowExpandRender,\n valueFormatter,\n containerComponent,\n containerComponentProps,\n onOrderChanged,\n onFilterChanged,\n onPagesCountChanged,\n objectsCopier\n}) => {\n //Собственное состояние - сортировки\n const [orders, setOrders] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)([]);\n\n //Собственное состояние - фильтры\n const [filters, setFilters] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(filtersInitial || []);\n\n //При изменении состояния сортировки\n const handleOrderChanged = ({\n columnName,\n direction\n }) => {\n let newOrders = objectsCopier(orders);\n const curOrder = newOrders.find(o => o.name == columnName);\n if (direction == null && curOrder) newOrders.splice(newOrders.indexOf(curOrder), 1);\n if (direction != null && !curOrder) newOrders.push({\n name: columnName,\n direction\n });\n if (direction != null && curOrder) curOrder.direction = direction;\n setOrders(newOrders);\n if (onOrderChanged) onOrderChanged({\n orders: newOrders\n });\n };\n\n //При изменении состояния фильтра\n const handleFilterChanged = ({\n columnName,\n from,\n to\n }) => {\n let newFilters = objectsCopier(filters);\n let curFilter = newFilters.find(f => f.name == columnName);\n if (from == null && to == null && curFilter) newFilters.splice(newFilters.indexOf(curFilter), 1);\n if ((from != null || to != null) && !curFilter) newFilters.push({\n name: columnName,\n from,\n to\n });\n if ((from != null || to != null) && curFilter) {\n curFilter.from = from;\n curFilter.to = to;\n }\n setFilters(newFilters);\n if (onFilterChanged) onFilterChanged({\n filters: newFilters\n });\n };\n\n //При изменении количества отображаемых страниц\n const handlePagesCountChanged = () => {\n if (onPagesCountChanged) onPagesCountChanged();\n };\n\n //При изменении списка установленных извне фильтров\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n setFilters(filtersInitial || []);\n }, [filtersInitial]);\n\n //Генерация содержимого\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_p8p_table__WEBPACK_IMPORTED_MODULE_1__.P8PTable, {\n columnsDef: columnsDef,\n groups: groups,\n rows: rows,\n orders: orders,\n filters: filters,\n size: size || P8P_DATA_GRID_SIZE.MEDIUM,\n fixedHeader: fixedHeader,\n fixedColumns: fixedColumns,\n morePages: morePages,\n reloading: reloading,\n expandable: expandable,\n orderAscMenuItemCaption: orderAscMenuItemCaption,\n orderDescMenuItemCaption: orderDescMenuItemCaption,\n filterMenuItemCaption: filterMenuItemCaption,\n valueFilterCaption: valueFilterCaption,\n valueFromFilterCaption: valueFromFilterCaption,\n valueToFilterCaption: valueToFilterCaption,\n okFilterBtnCaption: okFilterBtnCaption,\n clearFilterBtnCaption: clearFilterBtnCaption,\n cancelFilterBtnCaption: cancelFilterBtnCaption,\n morePagesBtnCaption: morePagesBtnCaption,\n noDataFoundText: noDataFoundText,\n headCellRender: headCellRender,\n dataCellRender: dataCellRender,\n groupCellRender: groupCellRender,\n rowExpandRender: rowExpandRender,\n valueFormatter: valueFormatter,\n objectsCopier: objectsCopier,\n containerComponent: containerComponent,\n containerComponentProps: containerComponentProps,\n onOrderChanged: handleOrderChanged,\n onFilterChanged: handleFilterChanged,\n onPagesCountChanged: handlePagesCountChanged\n });\n};\n\n//Контроль свойств - Таблица данных\nP8PDataGrid.propTypes = {\n columnsDef: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().array).isRequired,\n filtersInitial: prop_types__WEBPACK_IMPORTED_MODULE_2___default().arrayOf(P8P_DATA_GRID_FILTER_SHAPE),\n groups: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().array),\n rows: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().array).isRequired,\n size: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().string),\n fixedHeader: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().bool),\n fixedColumns: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().number),\n morePages: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().bool),\n reloading: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().bool).isRequired,\n expandable: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().bool),\n orderAscMenuItemCaption: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().string).isRequired,\n orderDescMenuItemCaption: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().string).isRequired,\n filterMenuItemCaption: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().string).isRequired,\n valueFilterCaption: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().string).isRequired,\n valueFromFilterCaption: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().string).isRequired,\n valueToFilterCaption: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().string).isRequired,\n okFilterBtnCaption: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().string).isRequired,\n clearFilterBtnCaption: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().string).isRequired,\n cancelFilterBtnCaption: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().string).isRequired,\n morePagesBtnCaption: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().string).isRequired,\n noDataFoundText: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().string),\n headCellRender: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().func),\n dataCellRender: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().func),\n groupCellRender: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().func),\n rowExpandRender: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().func),\n valueFormatter: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().func),\n containerComponent: prop_types__WEBPACK_IMPORTED_MODULE_2___default().oneOfType([(prop_types__WEBPACK_IMPORTED_MODULE_2___default().elementType), (prop_types__WEBPACK_IMPORTED_MODULE_2___default().string)]),\n containerComponentProps: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().object),\n onOrderChanged: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().func),\n onFilterChanged: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().func),\n onPagesCountChanged: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().func),\n objectsCopier: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().func).isRequired\n};\n\n//----------------\n//Интерфейс модуля\n//----------------\n\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/components/p8p_data_grid.js?"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ P8PDataGrid: () => (/* binding */ P8PDataGrid),\n/* harmony export */ P8P_DATA_GRID_DATA_TYPE: () => (/* binding */ P8P_DATA_GRID_DATA_TYPE),\n/* harmony export */ P8P_DATA_GRID_FILTER_SHAPE: () => (/* binding */ P8P_DATA_GRID_FILTER_SHAPE),\n/* harmony export */ P8P_DATA_GRID_SIZE: () => (/* binding */ P8P_DATA_GRID_SIZE)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! prop-types */ \"./node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var _p8p_table__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./p8p_table */ \"./app/components/p8p_table.js\");\n/*\r\n Парус 8 - Панели мониторинга\r\n Компонент: Таблица данных\r\n*/\n\n//---------------------\n//Подключение библиотек\n//---------------------\n\n //Классы React\n //Контроль свойств компонента\n //Таблица\n\n//---------\n//Константы\n//---------\n\n//Размеры отступов\nconst P8P_DATA_GRID_SIZE = _p8p_table__WEBPACK_IMPORTED_MODULE_1__.P8P_TABLE_SIZE;\n\n//Типы данных\nconst P8P_DATA_GRID_DATA_TYPE = _p8p_table__WEBPACK_IMPORTED_MODULE_1__.P8P_TABLE_DATA_TYPE;\n\n//Формат фильтра\nconst P8P_DATA_GRID_FILTER_SHAPE = _p8p_table__WEBPACK_IMPORTED_MODULE_1__.P8P_TABLE_FILTER_SHAPE;\n\n//-----------\n//Тело модуля\n//-----------\n\n//Таблица данных\nconst P8PDataGrid = ({\n columnsDef,\n filtersInitial,\n groups,\n rows,\n size,\n fixedHeader = false,\n fixedColumns = 0,\n morePages = false,\n reloading,\n expandable,\n orderAscMenuItemCaption,\n orderDescMenuItemCaption,\n filterMenuItemCaption,\n valueFilterCaption,\n valueFromFilterCaption,\n valueToFilterCaption,\n okFilterBtnCaption,\n clearFilterBtnCaption,\n cancelFilterBtnCaption,\n morePagesBtnCaption,\n morePagesBtnProps,\n noDataFoundText,\n headCellRender,\n dataCellRender,\n groupCellRender,\n rowExpandRender,\n valueFormatter,\n containerComponent,\n containerComponentProps,\n onOrderChanged,\n onFilterChanged,\n onPagesCountChanged,\n objectsCopier\n}) => {\n //Собственное состояние - сортировки\n const [orders, setOrders] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)([]);\n\n //Собственное состояние - фильтры\n const [filters, setFilters] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(filtersInitial || []);\n\n //При изменении состояния сортировки\n const handleOrderChanged = ({\n columnName,\n direction\n }) => {\n let newOrders = objectsCopier(orders);\n const curOrder = newOrders.find(o => o.name == columnName);\n if (direction == null && curOrder) newOrders.splice(newOrders.indexOf(curOrder), 1);\n if (direction != null && !curOrder) newOrders.push({\n name: columnName,\n direction\n });\n if (direction != null && curOrder) curOrder.direction = direction;\n setOrders(newOrders);\n if (onOrderChanged) onOrderChanged({\n orders: newOrders\n });\n };\n\n //При изменении состояния фильтра\n const handleFilterChanged = ({\n columnName,\n from,\n to\n }) => {\n let newFilters = objectsCopier(filters);\n let curFilter = newFilters.find(f => f.name == columnName);\n if (from == null && to == null && curFilter) newFilters.splice(newFilters.indexOf(curFilter), 1);\n if ((from != null || to != null) && !curFilter) newFilters.push({\n name: columnName,\n from,\n to\n });\n if ((from != null || to != null) && curFilter) {\n curFilter.from = from;\n curFilter.to = to;\n }\n setFilters(newFilters);\n if (onFilterChanged) onFilterChanged({\n filters: newFilters\n });\n };\n\n //При изменении количества отображаемых страниц\n const handlePagesCountChanged = () => {\n if (onPagesCountChanged) onPagesCountChanged();\n };\n\n //При изменении списка установленных извне фильтров\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n setFilters(filtersInitial || []);\n }, [filtersInitial]);\n\n //Генерация содержимого\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_p8p_table__WEBPACK_IMPORTED_MODULE_1__.P8PTable, {\n columnsDef: columnsDef,\n groups: groups,\n rows: rows,\n orders: orders,\n filters: filters,\n size: size || P8P_DATA_GRID_SIZE.MEDIUM,\n fixedHeader: fixedHeader,\n fixedColumns: fixedColumns,\n morePages: morePages,\n reloading: reloading,\n expandable: expandable,\n orderAscMenuItemCaption: orderAscMenuItemCaption,\n orderDescMenuItemCaption: orderDescMenuItemCaption,\n filterMenuItemCaption: filterMenuItemCaption,\n valueFilterCaption: valueFilterCaption,\n valueFromFilterCaption: valueFromFilterCaption,\n valueToFilterCaption: valueToFilterCaption,\n okFilterBtnCaption: okFilterBtnCaption,\n clearFilterBtnCaption: clearFilterBtnCaption,\n cancelFilterBtnCaption: cancelFilterBtnCaption,\n morePagesBtnCaption: morePagesBtnCaption,\n noDataFoundText: noDataFoundText,\n headCellRender: headCellRender,\n dataCellRender: dataCellRender,\n groupCellRender: groupCellRender,\n rowExpandRender: rowExpandRender,\n valueFormatter: valueFormatter,\n objectsCopier: objectsCopier,\n containerComponent: containerComponent,\n containerComponentProps: containerComponentProps,\n morePagesBtnProps: morePagesBtnProps,\n onOrderChanged: handleOrderChanged,\n onFilterChanged: handleFilterChanged,\n onPagesCountChanged: handlePagesCountChanged\n });\n};\n\n//Контроль свойств - Таблица данных\nP8PDataGrid.propTypes = {\n columnsDef: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().array).isRequired,\n filtersInitial: prop_types__WEBPACK_IMPORTED_MODULE_2___default().arrayOf(P8P_DATA_GRID_FILTER_SHAPE),\n groups: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().array),\n rows: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().array).isRequired,\n size: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().string),\n fixedHeader: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().bool),\n fixedColumns: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().number),\n morePages: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().bool),\n reloading: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().bool).isRequired,\n expandable: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().bool),\n orderAscMenuItemCaption: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().string).isRequired,\n orderDescMenuItemCaption: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().string).isRequired,\n filterMenuItemCaption: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().string).isRequired,\n valueFilterCaption: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().string).isRequired,\n valueFromFilterCaption: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().string).isRequired,\n valueToFilterCaption: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().string).isRequired,\n okFilterBtnCaption: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().string).isRequired,\n clearFilterBtnCaption: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().string).isRequired,\n cancelFilterBtnCaption: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().string).isRequired,\n morePagesBtnCaption: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().string).isRequired,\n morePagesBtnProps: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().object),\n noDataFoundText: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().string),\n headCellRender: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().func),\n dataCellRender: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().func),\n groupCellRender: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().func),\n rowExpandRender: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().func),\n valueFormatter: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().func),\n containerComponent: prop_types__WEBPACK_IMPORTED_MODULE_2___default().oneOfType([(prop_types__WEBPACK_IMPORTED_MODULE_2___default().elementType), (prop_types__WEBPACK_IMPORTED_MODULE_2___default().string)]),\n containerComponentProps: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().object),\n onOrderChanged: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().func),\n onFilterChanged: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().func),\n onPagesCountChanged: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().func),\n objectsCopier: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().func).isRequired\n};\n\n//----------------\n//Интерфейс модуля\n//----------------\n\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/components/p8p_data_grid.js?"); /***/ }), @@ -3590,7 +3590,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ P8PTable: () => (/* binding */ P8PTable),\n/* harmony export */ P8P_TABLE_DATA_TYPE: () => (/* binding */ P8P_TABLE_DATA_TYPE),\n/* harmony export */ P8P_TABLE_FILTER_SHAPE: () => (/* binding */ P8P_TABLE_FILTER_SHAPE),\n/* harmony export */ P8P_TABLE_SIZE: () => (/* binding */ P8P_TABLE_SIZE)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! prop-types */ \"./node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/IconButton/IconButton.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Icon/Icon.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/MenuItem/MenuItem.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Divider/Divider.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Menu/Menu.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Dialog/Dialog.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/DialogTitle/DialogTitle.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/DialogContent/DialogContent.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/DialogActions/DialogActions.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Button/Button.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/TextField/TextField.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Stack/Stack.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Chip/Chip.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/TableCell/TableCell.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/TableContainer/TableContainer.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Paper/Paper.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Table/Table.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_22__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/TableHead/TableHead.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_23__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/TableRow/TableRow.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_24__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Link/Link.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_25__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/TableBody/TableBody.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_26__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Container/Container.js\");\n/* harmony import */ var _mui_material_styles__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! @mui/material/styles */ \"./node_modules/@mui/material/styles/useTheme.js\");\n/* harmony import */ var _p8p_app_message__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./p8p_app_message */ \"./app/components/p8p_app_message.js\");\n/* harmony import */ var _p8p_table_reducer__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./p8p_table_reducer */ \"./app/components/p8p_table_reducer.js\");\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n/*\r\n Парус 8 - Панели мониторинга\r\n Компонент: Таблица\r\n*/\n\n//---------------------\n//Подключение библиотек\n//---------------------\n\n //Классы React\n //Контроль свойств компонента\n //Интерфейсные компоненты\n //Взаимодействие со стилями MUI\n //Встраиваемое сообщение об ошибке\n //Редьюсер состояния\n\n//---------\n//Константы\n//---------\n\n//Размеры отступов\nconst P8P_TABLE_SIZE = {\n SMALL: \"small\",\n MEDIUM: \"medium\"\n};\n\n//Типы данных\nconst P8P_TABLE_DATA_TYPE = {\n STR: \"STR\",\n NUMB: \"NUMB\",\n DATE: \"DATE\"\n};\n\n//Направления сортировки\nconst P8P_TABLE_COLUMN_ORDER_DIRECTIONS = {\n ASC: \"ASC\",\n DESC: \"DESC\"\n};\n\n//Действия панели инструментов столбца\nconst P8P_TABLE_COLUMN_TOOL_BAR_ACTIONS = {\n ORDER_TOGGLE: \"ORDER_TOGGLE\",\n FILTER_TOGGLE: \"FILTER_TOGGLE\",\n EXPAND_TOGGLE: \"EXPAND_TOGGLE\"\n};\n\n//Действия меню столбца\nconst P8P_TABLE_COLUMN_MENU_ACTIONS = {\n ORDER_ASC: \"ORDER_ASC\",\n ORDER_DESC: \"ORDER_DESC\",\n FILTER: \"FILTER\"\n};\n\n//Структура элемента описания фильтра\nconst P8P_TABLE_FILTER_SHAPE = prop_types__WEBPACK_IMPORTED_MODULE_3___default().shape({\n name: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().string).isRequired,\n from: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().any),\n to: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().any)\n});\n\n//Стили\nconst STYLES = {\n TABLE: {\n with: \"100%\"\n },\n TABLE_HEAD_STICKY: {\n position: \"sticky\",\n top: 0,\n zIndex: 1000\n },\n TABLE_HEAD_CELL_STICKY: (theme, left) => ({\n position: \"sticky\",\n left,\n backgroundColor: theme.palette.background.default,\n zIndex: 1000\n }),\n TABLE_ROW: {\n \"&:last-child td, &:last-child th\": {\n border: 0\n }\n },\n TABLE_CELL_STICKY: (theme, left) => ({\n position: \"sticky\",\n left,\n backgroundColor: theme.palette.background.default,\n zIndex: 500\n }),\n TABLE_CELL_EXPAND_CONTROL: {\n minWidth: \"60px\",\n maxWidth: \"60px\"\n },\n TABLE_CELL_EXPAND_CONTAINER: {\n paddingBottom: 0,\n paddingTop: 0\n },\n TABLE_CELL_GROUP_HEADER: {\n backgroundColor: \"lightgray\"\n },\n TABLE_CELL_GROUP_HEADER_STICKY: {\n position: \"sticky\",\n left: 0\n },\n TABLE_COLUMN_STACK: {\n alignItems: \"center\"\n },\n TABLE_COLUMN_MENU_ITEM_ICON: {\n paddingRight: \"10px\"\n },\n FILTER_CHIP: {\n alignItems: \"center\"\n },\n MORE_BUTTON_CONTAINER: {\n with: \"100%\",\n textAlign: \"center\",\n padding: \"5px\"\n }\n};\n\n//--------------------------------\n//Вспомогательные классы и функции\n//--------------------------------\n\n//Панель инструментов столбца (левая)\nconst P8PTableColumnToolBarLeft = ({\n columnDef,\n onItemClick\n}) => {\n //Кнопка развёртывания/свёртывания\n let expButton = null;\n if (columnDef.expandable) expButton = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n onClick: () => onItemClick ? onItemClick(P8P_TABLE_COLUMN_TOOL_BAR_ACTIONS.EXPAND_TOGGLE, columnDef.name) : null\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_5__[\"default\"], null, columnDef.expanded ? \"indeterminate_check_box\" : \"add_box\"));\n\n //Генерация содержимого\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), null, expButton);\n};\n\n//Контроль свойств - Панель инструментов столбца (левая)\nP8PTableColumnToolBarLeft.propTypes = {\n columnDef: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().object).isRequired,\n onItemClick: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().func)\n};\n\n//Панель инструментов столбца (правая)\nconst P8PTableColumnToolBarRight = ({\n columnDef,\n orders,\n filters,\n onItemClick\n}) => {\n //Кнопка сортировки\n const order = orders.find(o => o.name == columnDef.name);\n let orderButton = null;\n if (order) orderButton = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n onClick: () => onItemClick ? onItemClick(P8P_TABLE_COLUMN_TOOL_BAR_ACTIONS.ORDER_TOGGLE, columnDef.name) : null\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_5__[\"default\"], null, order.direction === P8P_TABLE_COLUMN_ORDER_DIRECTIONS.ASC ? \"arrow_upward\" : \"arrow_downward\"));\n\n //Кнопка фильтрации\n const filter = filters.find(f => f.name == columnDef.name);\n let filterButton = null;\n if ((0,_p8p_table_reducer__WEBPACK_IMPORTED_MODULE_2__.hasValue)(filter?.from) || (0,_p8p_table_reducer__WEBPACK_IMPORTED_MODULE_2__.hasValue)(filter?.to)) filterButton = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n onClick: () => onItemClick ? onItemClick(P8P_TABLE_COLUMN_TOOL_BAR_ACTIONS.FILTER_TOGGLE, columnDef.name) : null\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_5__[\"default\"], null, \"filter_alt\"));\n\n //Генерация содержимого\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), null, orderButton, filterButton);\n};\n\n//Контроль свойств - Панель инструментов столбца (правая)\nP8PTableColumnToolBarRight.propTypes = {\n columnDef: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().object).isRequired,\n orders: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().array).isRequired,\n filters: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().array).isRequired,\n onItemClick: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().func)\n};\n\n//Меню столбца\nconst P8PTableColumnMenu = ({\n columnDef,\n orderAscItemCaption,\n orderDescItemCaption,\n filterItemCaption,\n onItemClick\n}) => {\n //Собственное состояние\n const [anchorEl, setAnchorEl] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(null);\n\n //Флаг отображения\n const open = Boolean(anchorEl);\n\n //По нажатию на открытие меню\n const handleMenuButtonClick = event => {\n setAnchorEl(event.currentTarget);\n };\n\n //По нажатию на пункт меню\n const handleMenuItemClick = (event, index, action, columnName) => {\n if (onItemClick) onItemClick(action, columnName);\n setAnchorEl(null);\n };\n\n //При закрытии меню\n const handleMenuClose = () => {\n setAnchorEl(null);\n };\n\n //Формирование списка элементов меню в зависимости от описания колонки таблицы\n const menuItems = [];\n if (columnDef.order === true) {\n menuItems.push( /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n key: \"orderAsc\",\n onClick: (event, index) => handleMenuItemClick(event, index, P8P_TABLE_COLUMN_MENU_ACTIONS.ORDER_ASC, columnDef.name)\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_5__[\"default\"], {\n sx: STYLES.TABLE_COLUMN_MENU_ITEM_ICON\n }, \"arrow_upward\"), orderAscItemCaption));\n menuItems.push( /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n key: \"orderDesc\",\n onClick: (event, index) => handleMenuItemClick(event, index, P8P_TABLE_COLUMN_MENU_ACTIONS.ORDER_DESC, columnDef.name)\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_5__[\"default\"], {\n sx: STYLES.TABLE_COLUMN_MENU_ITEM_ICON\n }, \"arrow_downward\"), orderDescItemCaption));\n }\n if (columnDef.filter === true) {\n if (menuItems.length > 0) menuItems.push( /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_7__[\"default\"], {\n key: \"divider\",\n sx: {\n my: 0.5\n }\n }));\n menuItems.push( /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n key: \"filter\",\n onClick: (event, index) => handleMenuItemClick(event, index, P8P_TABLE_COLUMN_MENU_ACTIONS.FILTER, columnDef.name)\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_5__[\"default\"], {\n sx: STYLES.TABLE_COLUMN_MENU_ITEM_ICON\n }, \"filter_alt\"), filterItemCaption));\n }\n\n //Генерация содержимого\n return menuItems.length > 0 ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n id: `${columnDef.name}_menu_button`,\n \"aria-haspopup\": \"true\",\n onClick: handleMenuButtonClick\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_5__[\"default\"], null, \"more_vert\")), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_8__[\"default\"], {\n id: `${columnDef.name}_menu`,\n anchorEl: anchorEl,\n open: open,\n onClose: handleMenuClose\n }, menuItems)) : null;\n};\n\n//Контроль свойств - Меню столбца\nP8PTableColumnMenu.propTypes = {\n columnDef: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().object).isRequired,\n orderAscItemCaption: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().string).isRequired,\n orderDescItemCaption: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().string).isRequired,\n filterItemCaption: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().string).isRequired,\n onItemClick: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().func)\n};\n\n//Диалог подсказки\nconst P8PTableColumnHintDialog = ({\n columnDef,\n okBtnCaption,\n onOk\n}) => {\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_9__[\"default\"], {\n open: true,\n \"aria-labelledby\": \"filter-dialog-title\",\n \"aria-describedby\": \"filter-dialog-description\",\n onClose: () => onOk ? onOk() : null\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_10__[\"default\"], {\n id: \"filter-dialog-title\"\n }, columnDef.caption), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_11__[\"default\"], null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n dangerouslySetInnerHTML: {\n __html: columnDef.hint\n }\n })), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_12__[\"default\"], null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_13__[\"default\"], {\n onClick: () => onOk ? onOk() : null\n }, okBtnCaption)));\n};\n\n//Контроль свойств - Диалог подсказки\nP8PTableColumnHintDialog.propTypes = {\n columnDef: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().object).isRequired,\n okBtnCaption: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().string).isRequired,\n onOk: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().func)\n};\n\n//Диалог фильтра\nconst P8PTableColumnFilterDialog = ({\n columnDef,\n from,\n to,\n valueCaption,\n valueFromCaption,\n valueToCaption,\n okBtnCaption,\n clearBtnCaption,\n cancelBtnCaption,\n valueFormatter,\n onOk,\n onClear,\n onCancel\n}) => {\n //Собственное состояние - значения с-по\n const [filterValues, setFilterValues] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({\n from,\n to\n });\n\n //Отработка воода значения в фильтр\n const handleFilterTextFieldChanged = e => {\n setFilterValues(prev => ({\n ...prev,\n [e.target.name]: e.target.value\n }));\n };\n\n //Элементы ввода значений фильтра\n let inputs = null;\n if (Array.isArray(columnDef.values) && columnDef.values.length > 0) {\n inputs = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_14__[\"default\"], {\n name: \"from\",\n fullWidth: true,\n select: true,\n label: valueCaption,\n variant: \"standard\",\n value: filterValues.from,\n onChange: handleFilterTextFieldChanged\n }, columnDef.values.map((v, i) => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n key: i,\n value: v\n }, valueFormatter ? valueFormatter({\n value: v,\n columnDef\n }) : v)));\n } else {\n switch (columnDef.dataType) {\n case P8P_TABLE_DATA_TYPE.STR:\n {\n inputs = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_14__[\"default\"], {\n name: \"from\",\n fullWidth: true,\n InputLabelProps: {\n shrink: true\n },\n value: filterValues.from,\n onChange: handleFilterTextFieldChanged,\n label: valueCaption,\n variant: \"standard\"\n });\n break;\n }\n case P8P_TABLE_DATA_TYPE.NUMB:\n case P8P_TABLE_DATA_TYPE.DATE:\n {\n inputs = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_14__[\"default\"], {\n name: \"from\",\n InputLabelProps: {\n shrink: true\n },\n type: columnDef.dataType == P8P_TABLE_DATA_TYPE.NUMB ? \"number\" : \"date\",\n value: filterValues.from,\n onChange: handleFilterTextFieldChanged,\n label: valueFromCaption,\n variant: \"standard\"\n }), \"\\xA0\", /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_14__[\"default\"], {\n name: \"to\",\n InputLabelProps: {\n shrink: true\n },\n type: columnDef.dataType == P8P_TABLE_DATA_TYPE.NUMB ? \"number\" : \"date\",\n value: filterValues.to,\n onChange: handleFilterTextFieldChanged,\n label: valueToCaption,\n variant: \"standard\"\n }));\n break;\n }\n }\n }\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_9__[\"default\"], {\n open: true,\n \"aria-labelledby\": \"filter-dialog-title\",\n \"aria-describedby\": \"filter-dialog-description\",\n onClose: () => onCancel ? onCancel(columnDef.name) : null\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_10__[\"default\"], {\n id: \"filter-dialog-title\"\n }, columnDef.caption), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_11__[\"default\"], null, inputs), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_12__[\"default\"], null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_13__[\"default\"], {\n onClick: () => onOk ? onOk(columnDef.name, filterValues.from, filterValues.to) : null\n }, okBtnCaption), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_13__[\"default\"], {\n onClick: () => onClear ? onClear(columnDef.name) : null,\n variant: \"secondary\"\n }, clearBtnCaption), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_13__[\"default\"], {\n onClick: () => onCancel ? onCancel(columnDef.name) : null\n }, cancelBtnCaption)));\n};\n\n//Контроль свойств - Диалог фильтра\nP8PTableColumnFilterDialog.propTypes = {\n columnDef: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().object).isRequired,\n from: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().any),\n to: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().any),\n valueCaption: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().string).isRequired,\n valueFromCaption: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().string).isRequired,\n valueToCaption: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().string).isRequired,\n okBtnCaption: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().string).isRequired,\n clearBtnCaption: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().string).isRequired,\n cancelBtnCaption: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().string).isRequired,\n valueFormatter: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().func),\n onOk: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().func),\n onClear: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().func),\n onCancel: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().func)\n};\n\n//Сводный фильтр\nconst P8PTableFiltersChips = ({\n filters,\n columnsDef,\n valueFromCaption,\n valueToCaption,\n onFilterChipClick,\n onFilterChipDelete,\n valueFormatter\n}) => {\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_15__[\"default\"], {\n direction: \"row\",\n spacing: 1,\n pb: 2\n }, filters.map((filter, i) => {\n const columnDef = columnsDef.find(columnDef => columnDef.name == filter.name);\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_16__[\"default\"], {\n key: i,\n label: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_15__[\"default\"], {\n direction: \"row\",\n sx: STYLES.FILTER_CHIP\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"strong\", null, columnDef.caption), \":\\xA0\", (0,_p8p_table_reducer__WEBPACK_IMPORTED_MODULE_2__.hasValue)(filter.from) && !columnDef.values && columnDef.dataType != P8P_TABLE_DATA_TYPE.STR ? `${valueFromCaption.toLowerCase()} ` : null, (0,_p8p_table_reducer__WEBPACK_IMPORTED_MODULE_2__.hasValue)(filter.from) ? valueFormatter ? valueFormatter({\n value: filter.from,\n columnDef\n }) : filter.from : null, (0,_p8p_table_reducer__WEBPACK_IMPORTED_MODULE_2__.hasValue)(filter.to) && !columnDef.values && columnDef.dataType != P8P_TABLE_DATA_TYPE.STR ? ` ${valueToCaption.toLowerCase()} ` : null, (0,_p8p_table_reducer__WEBPACK_IMPORTED_MODULE_2__.hasValue)(filter.to) ? valueFormatter ? valueFormatter({\n value: filter.to,\n columnDef\n }) : filter.to : null),\n variant: \"outlined\",\n onClick: () => onFilterChipClick ? onFilterChipClick(columnDef.name) : null,\n onDelete: () => onFilterChipDelete ? onFilterChipDelete(columnDef.name) : null\n });\n }));\n};\n\n//Контроль свойств - Сводный фильтр\nP8PTableFiltersChips.propTypes = {\n filters: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().array).isRequired,\n columnsDef: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().array).isRequired,\n valueFromCaption: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().string).isRequired,\n valueToCaption: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().string).isRequired,\n onFilterChipClick: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().func),\n onFilterChipDelete: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().func),\n valueFormatter: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().func)\n};\n\n//-----------\n//Тело модуля\n//-----------\n\n//Таблица\nconst P8PTable = ({\n columnsDef,\n groups,\n rows,\n orders,\n filters,\n size,\n fixedHeader = false,\n fixedColumns = 0,\n morePages = false,\n reloading,\n expandable,\n orderAscMenuItemCaption,\n orderDescMenuItemCaption,\n filterMenuItemCaption,\n valueFilterCaption,\n valueFromFilterCaption,\n valueToFilterCaption,\n okFilterBtnCaption,\n clearFilterBtnCaption,\n cancelFilterBtnCaption,\n morePagesBtnCaption,\n noDataFoundText,\n headCellRender,\n dataCellRender,\n groupCellRender,\n rowExpandRender,\n valueFormatter,\n onOrderChanged,\n onFilterChanged,\n onPagesCountChanged,\n objectsCopier,\n containerComponent,\n containerComponentProps\n}) => {\n //Собственное состояние - описание заголовка\n const [header, dispatchHeaderAction] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useReducer)(_p8p_table_reducer__WEBPACK_IMPORTED_MODULE_2__.p8pTableReducer, (0,_p8p_table_reducer__WEBPACK_IMPORTED_MODULE_2__.HEADER_INITIAL_STATE)());\n\n //Собственное состояние - фильтруемая колонка\n const [filterColumn, setFilterColumn] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(null);\n\n //Собственное состояние - развёрнутые строки\n const [expanded, setExpanded] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({});\n\n //Собственное состояния - развёрнутые группы\n const [expandedGroups, setExpandedGroups] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({});\n\n //Собственное состояние - колонка с отображаемой подсказкой\n const [displayHintColumn, setDisplayHintColumn] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(null);\n\n //Стили\n const theme = (0,_mui_material_styles__WEBPACK_IMPORTED_MODULE_17__[\"default\"])();\n\n //Описание фильтруемой колонки\n const filterColumnDef = filterColumn ? columnsDef.find(columnDef => columnDef.name == filterColumn) || null : null;\n\n //Описание колонки с отображаемой подсказкой\n const displayHintColumnDef = displayHintColumn ? columnsDef.find(columnDef => columnDef.name == displayHintColumn) || null : null;\n\n //Значения фильтра фильтруемой колонки\n const [filterColumnFrom, filterColumnTo] = filterColumn ? (() => {\n const filter = filters.find(filter => filter.name == filterColumn);\n return filter ? [filter.from == null ? \"\" : filter.from, filter.to == null ? \"\" : filter.to] : [\"\", \"\"];\n })() : [\"\", \"\"];\n\n //Формирование заголовка таблицы\n const setHeader = ({\n columnsDef,\n expandable,\n fixedColumns,\n objectsCopier\n }) => dispatchHeaderAction({\n type: _p8p_table_reducer__WEBPACK_IMPORTED_MODULE_2__.P8P_TABLE_AT.SET_HEADER,\n payload: {\n columnsDef,\n expandable,\n fixedColumns,\n objectsCopier\n }\n });\n\n //Сворачивание/разворачивание уровня заголовка таблицы\n const toggleHeaderExpand = ({\n columnName,\n objectsCopier\n }) => dispatchHeaderAction({\n type: _p8p_table_reducer__WEBPACK_IMPORTED_MODULE_2__.P8P_TABLE_AT.TOGGLE_HEADER_EXPAND,\n payload: {\n columnName,\n expandable,\n fixedColumns,\n objectsCopier\n }\n });\n\n //Выравнивание в зависимости от типа данных\n const getAlignByDataType = ({\n dataType,\n hasChild\n }) => dataType === P8P_TABLE_DATA_TYPE.DATE || hasChild ? \"center\" : dataType === P8P_TABLE_DATA_TYPE.NUMB ? \"right\" : \"left\";\n\n //Упорядочение содержимого в зависимости от типа данных\n const getJustifyContentByDataType = ({\n dataType,\n hasChild\n }) => dataType === P8P_TABLE_DATA_TYPE.DATE || hasChild ? \"center\" : dataType === P8P_TABLE_DATA_TYPE.NUMB ? \"flex-end\" : \"flex-start\";\n\n //Отработка нажатия на элемент пункта меню\n const handleToolBarItemClick = (action, columnName) => {\n switch (action) {\n case P8P_TABLE_COLUMN_TOOL_BAR_ACTIONS.ORDER_TOGGLE:\n {\n const colOrder = orders.find(o => o.name == columnName);\n const newDirection = colOrder?.direction == P8P_TABLE_COLUMN_ORDER_DIRECTIONS.ASC ? P8P_TABLE_COLUMN_ORDER_DIRECTIONS.DESC : colOrder?.direction == P8P_TABLE_COLUMN_ORDER_DIRECTIONS.DESC ? null : P8P_TABLE_COLUMN_ORDER_DIRECTIONS.ASC;\n if (onOrderChanged) onOrderChanged({\n columnName,\n direction: newDirection\n });\n break;\n }\n case P8P_TABLE_COLUMN_TOOL_BAR_ACTIONS.FILTER_TOGGLE:\n setFilterColumn(columnName);\n break;\n case P8P_TABLE_COLUMN_TOOL_BAR_ACTIONS.EXPAND_TOGGLE:\n toggleHeaderExpand({\n columnName,\n objectsCopier\n });\n break;\n }\n };\n\n //Отработка нажатия на пункты меню\n const handleMenuItemClick = (action, columnName) => {\n switch (action) {\n case P8P_TABLE_COLUMN_MENU_ACTIONS.ORDER_ASC:\n onOrderChanged({\n columnName,\n direction: P8P_TABLE_COLUMN_ORDER_DIRECTIONS.ASC\n });\n break;\n case P8P_TABLE_COLUMN_MENU_ACTIONS.ORDER_DESC:\n onOrderChanged({\n columnName,\n direction: P8P_TABLE_COLUMN_ORDER_DIRECTIONS.DESC\n });\n break;\n case P8P_TABLE_COLUMN_MENU_ACTIONS.FILTER:\n setFilterColumn(columnName);\n break;\n }\n };\n\n //Отработка ввода значения фильтра колонки\n const handleFilterOk = (columnName, from, to) => {\n if (onFilterChanged) onFilterChanged({\n columnName,\n from: from === \"\" ? null : from,\n to: to === \"\" ? null : to\n });\n setFilterColumn(null);\n };\n\n //Отработка очистки значения фильтра колонки\n const handleFilterClear = columnName => {\n if (onFilterChanged) onFilterChanged({\n columnName,\n from: null,\n to: null\n });\n setFilterColumn(null);\n };\n\n //Отработка отмены ввода значения фильтра колонки\n const handleFilterCancel = () => {\n setFilterColumn(null);\n };\n\n //Отработка нажатия на элемент сводного фильтра\n const handleFilterChipClick = columnName => setFilterColumn(columnName);\n\n //Отработка удаления элемента сводного фильтра\n const handleFilterChipDelete = columnName => onFilterChanged ? onFilterChanged({\n columnName,\n from: null,\n to: null\n }) : null;\n\n //Отработка нажатия на кнопку догрузки страницы\n const handleMorePagesBtnClick = () => {\n if (onPagesCountChanged) onPagesCountChanged();\n };\n\n //Отработка нажатия на элемент отображения подсказки по колонке\n const handleColumnShowHintClick = columnName => setDisplayHintColumn(columnName);\n\n //Отработка сокрытия подсказки по колонке\n const handleHintOk = () => setDisplayHintColumn(null);\n\n //Отработка нажатия на кнопку раскрытия элемента\n const handleExpandClick = rowIndex => {\n if (expanded[rowIndex] === true) setExpanded(pv => {\n let res = {\n ...pv\n };\n delete res[rowIndex];\n return res;\n });else setExpanded(pv => ({\n ...pv,\n [rowIndex]: true\n }));\n };\n\n //При перезагрузке данных\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n if (reloading) setExpanded({});\n }, [reloading]);\n\n //При изменении описания колонок\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n setHeader({\n columnsDef,\n expandable,\n fixedColumns,\n objectsCopier\n });\n }, [columnsDef, expandable, fixedColumns, objectsCopier]);\n\n //Генерация заголовка группы\n const renderGroupCell = group => {\n let customRender = {};\n if (groupCellRender) customRender = groupCellRender({\n columnsDef: header.columnsDef,\n group\n }) || {};\n return header.displayDataColumns.map((columnDef, i) => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_18__[\"default\"], _extends({\n key: `group-header-cell-${i}`\n }, customRender.cellProps, {\n sx: {\n ...STYLES.TABLE_CELL_GROUP_HEADER,\n ...customRender.cellStyle,\n ...(columnDef.width ? {\n minWidth: columnDef.width,\n maxWidth: columnDef.width\n } : {}),\n ...(i == 0 && fixedColumns ? STYLES.TABLE_CELL_GROUP_HEADER_STICKY : {})\n },\n colSpan: expandable && rowExpandRender ? 2 : 1\n }), i == 0 ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_15__[\"default\"], {\n direction: \"row\",\n sx: STYLES.TABLE_COLUMN_STACK\n }, group.expandable ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n onClick: () => {\n setExpandedGroups(pv => ({\n ...pv,\n ...{\n [group.name]: !pv[group.name]\n }\n }));\n }\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_5__[\"default\"], null, expandedGroups[group.name] ? \"indeterminate_check_box\" : \"add_box\")) : null, customRender.data ? customRender.data : group.caption) : null));\n };\n\n //Генерация содержимого\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", null, displayHintColumn ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(P8PTableColumnHintDialog, {\n columnDef: displayHintColumnDef,\n okBtnCaption: okFilterBtnCaption,\n onOk: handleHintOk\n }) : null, filterColumn ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(P8PTableColumnFilterDialog, {\n columnDef: filterColumnDef,\n from: filterColumnFrom,\n to: filterColumnTo,\n valueCaption: valueFilterCaption,\n valueFromCaption: valueFromFilterCaption,\n valueToCaption: valueToFilterCaption,\n okBtnCaption: okFilterBtnCaption,\n clearBtnCaption: clearFilterBtnCaption,\n cancelBtnCaption: cancelFilterBtnCaption,\n valueFormatter: valueFormatter,\n onOk: handleFilterOk,\n onClear: handleFilterClear,\n onCancel: handleFilterCancel\n }) : null, Array.isArray(filters) && filters.length > 0 ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(P8PTableFiltersChips, {\n filters: filters,\n columnsDef: columnsDef,\n valueFromCaption: valueFromFilterCaption,\n valueToCaption: valueToFilterCaption,\n onFilterChipClick: handleFilterChipClick,\n onFilterChipDelete: handleFilterChipDelete,\n valueFormatter: valueFormatter\n }) : null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_19__[\"default\"], _extends({\n component: containerComponent ? containerComponent : _mui_material__WEBPACK_IMPORTED_MODULE_20__[\"default\"]\n }, containerComponentProps ? containerComponentProps : {}), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_21__[\"default\"], {\n stickyHeader: fixedHeader,\n sx: STYLES.TABLE,\n size: size || P8P_TABLE_SIZE.MEDIUM\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_22__[\"default\"], {\n sx: fixedHeader ? STYLES.TABLE_HEAD_STICKY : {}\n }, header.displayLevels.map((level, i) => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_23__[\"default\"], {\n key: level\n }, expandable && rowExpandRender && i == 0 ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_18__[\"default\"], {\n key: \"head-cell-expand-control\",\n align: \"center\",\n sx: {\n ...STYLES.TABLE_CELL_EXPAND_CONTROL,\n ...(fixedColumns ? STYLES.TABLE_HEAD_CELL_STICKY(theme, 0) : {})\n },\n rowSpan: header.displayLevelsColumns[level][0].rowSpan\n }) : null, header.displayLevelsColumns[level].map((columnDef, j) => {\n let customRender = {};\n if (headCellRender) customRender = headCellRender({\n columnDef\n }) || {};\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_18__[\"default\"], _extends({\n key: `head-cell-${j}`,\n align: getAlignByDataType(columnDef),\n sx: {\n ...(columnDef.width ? {\n minWidth: columnDef.width,\n maxWidth: columnDef.width\n } : {}),\n ...(columnDef.fixed ? STYLES.TABLE_HEAD_CELL_STICKY(theme, columnDef.fixedLeft) : {}),\n ...customRender.cellStyle\n },\n rowSpan: columnDef.rowSpan,\n colSpan: columnDef.colSpan\n }, customRender.cellProps), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_15__[\"default\"], _extends({\n direction: \"row\",\n justifyContent: getJustifyContentByDataType(columnDef),\n sx: {\n ...STYLES.TABLE_COLUMN_STACK,\n ...customRender.stackStyle\n }\n }, customRender.stackProps), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(P8PTableColumnToolBarLeft, {\n columnDef: columnDef,\n onItemClick: handleToolBarItemClick\n }), customRender.data ? customRender.data : columnDef.hint ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_24__[\"default\"], {\n component: \"button\",\n variant: \"body2\",\n align: \"left\",\n underline: \"always\",\n onClick: () => handleColumnShowHintClick(columnDef.name)\n }, columnDef.caption) : columnDef.caption, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(P8PTableColumnToolBarRight, {\n columnDef: columnDef,\n orders: orders,\n filters: filters,\n onItemClick: handleToolBarItemClick\n }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(P8PTableColumnMenu, {\n columnDef: columnDef,\n orderAscItemCaption: orderAscMenuItemCaption,\n orderDescItemCaption: orderDescMenuItemCaption,\n filterItemCaption: filterMenuItemCaption,\n onItemClick: handleMenuItemClick\n })));\n })))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_25__[\"default\"], null, rows.length > 0 ? (Array.isArray(groups) && groups.length > 0 ? groups : [{}]).map((group, g) => {\n const rowsView = rows.map((row, i) => !group?.name || group?.name == row.groupName ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), {\n key: `data-${i}`\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_23__[\"default\"], {\n key: `data-row-${i}`,\n sx: STYLES.TABLE_ROW\n }, expandable && rowExpandRender ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_18__[\"default\"], {\n key: `data-cell-expand-control-${i}`,\n align: \"center\",\n sx: {\n ...STYLES.TABLE_CELL_EXPAND_CONTROL,\n ...(fixedColumns ? STYLES.TABLE_CELL_STICKY(theme, 0) : {})\n }\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n onClick: () => handleExpandClick(i)\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_5__[\"default\"], null, expanded[i] === true ? \"keyboard_arrow_down\" : \"keyboard_arrow_right\"))) : null, header.displayDataColumns.map((columnDef, j) => {\n let customRender = {};\n if (dataCellRender) customRender = dataCellRender({\n row,\n columnDef\n }) || {};\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_18__[\"default\"], _extends({\n key: `data-cell-${j}`,\n align: getAlignByDataType(columnDef),\n sx: {\n ...(columnDef.width ? {\n minWidth: columnDef.width,\n maxWidth: columnDef.width\n } : {}),\n ...(columnDef.fixed ? STYLES.TABLE_CELL_STICKY(theme, columnDef.fixedLeft) : {}),\n ...customRender.cellStyle\n }\n }, customRender.cellProps), customRender.data ? customRender.data : valueFormatter ? valueFormatter({\n value: row[columnDef.name],\n columnDef\n }) : row[columnDef.name]);\n })), expandable && rowExpandRender && expanded[i] === true ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_23__[\"default\"], {\n key: `data-row-expand-${i}`\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_18__[\"default\"], {\n sx: {\n ...STYLES.TABLE_CELL_EXPAND_CONTAINER,\n ...(fixedColumns ? STYLES.TABLE_CELL_STICKY(theme, 0) : {})\n },\n colSpan: fixedColumns ? header.displayFixedColumnsCount + 1 : header.displayDataColumnsCount\n }, rowExpandRender({\n columnsDef,\n row\n }))) : null) : null);\n return !group?.name ? rowsView : /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), {\n key: `group-${g}`\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_23__[\"default\"], {\n key: `group-header-${g}`\n }, renderGroupCell(group)), !group.expandable || expandedGroups[group.name] === true ? rowsView : null);\n }) : noDataFoundText && !reloading ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_23__[\"default\"], null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_18__[\"default\"], {\n colSpan: header.displayDataColumnsCount\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_p8p_app_message__WEBPACK_IMPORTED_MODULE_1__.P8PAppInlineError, {\n text: noDataFoundText\n }))) : null))), morePages ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_26__[\"default\"], {\n style: STYLES.MORE_BUTTON_CONTAINER\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_13__[\"default\"], {\n fullWidth: true,\n onClick: handleMorePagesBtnClick\n }, morePagesBtnCaption)) : null);\n};\n\n//Контроль свойств - Таблица\nP8PTable.propTypes = {\n columnsDef: prop_types__WEBPACK_IMPORTED_MODULE_3___default().arrayOf(prop_types__WEBPACK_IMPORTED_MODULE_3___default().shape({\n name: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().string).isRequired,\n caption: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().string).isRequired,\n order: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().bool).isRequired,\n filter: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().bool).isRequired,\n dataType: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().string).isRequired,\n visible: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().bool).isRequired,\n values: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().array),\n parent: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().string),\n expandable: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().bool).isRequired,\n expanded: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().bool).isRequired,\n width: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().number)\n })).isRequired,\n groups: prop_types__WEBPACK_IMPORTED_MODULE_3___default().arrayOf(prop_types__WEBPACK_IMPORTED_MODULE_3___default().shape({\n name: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().string).isRequired,\n caption: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().string).isRequired,\n expandable: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().bool).isRequired,\n expanded: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().bool).isRequired\n })),\n rows: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().array).isRequired,\n orders: prop_types__WEBPACK_IMPORTED_MODULE_3___default().arrayOf(prop_types__WEBPACK_IMPORTED_MODULE_3___default().shape({\n name: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().string).isRequired,\n direction: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().string).isRequired\n })).isRequired,\n filters: prop_types__WEBPACK_IMPORTED_MODULE_3___default().arrayOf(P8P_TABLE_FILTER_SHAPE).isRequired,\n size: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().string),\n fixedHeader: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().bool),\n fixedColumns: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().number),\n morePages: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().bool),\n reloading: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().bool).isRequired,\n expandable: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().bool),\n orderAscMenuItemCaption: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().string).isRequired,\n orderDescMenuItemCaption: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().string).isRequired,\n filterMenuItemCaption: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().string).isRequired,\n valueFilterCaption: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().string).isRequired,\n valueFromFilterCaption: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().string).isRequired,\n valueToFilterCaption: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().string).isRequired,\n okFilterBtnCaption: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().string).isRequired,\n clearFilterBtnCaption: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().string).isRequired,\n cancelFilterBtnCaption: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().string).isRequired,\n morePagesBtnCaption: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().string).isRequired,\n noDataFoundText: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().string),\n headCellRender: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().func),\n dataCellRender: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().func),\n groupCellRender: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().func),\n rowExpandRender: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().func),\n valueFormatter: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().func),\n onOrderChanged: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().func),\n onFilterChanged: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().func),\n onPagesCountChanged: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().func),\n objectsCopier: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().func).isRequired,\n containerComponent: prop_types__WEBPACK_IMPORTED_MODULE_3___default().oneOfType([(prop_types__WEBPACK_IMPORTED_MODULE_3___default().elementType), (prop_types__WEBPACK_IMPORTED_MODULE_3___default().string)]),\n containerComponentProps: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().object)\n};\n\n//----------------\n//Интерфейс модуля\n//----------------\n\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/components/p8p_table.js?"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ P8PTable: () => (/* binding */ P8PTable),\n/* harmony export */ P8P_TABLE_DATA_TYPE: () => (/* binding */ P8P_TABLE_DATA_TYPE),\n/* harmony export */ P8P_TABLE_FILTER_SHAPE: () => (/* binding */ P8P_TABLE_FILTER_SHAPE),\n/* harmony export */ P8P_TABLE_SIZE: () => (/* binding */ P8P_TABLE_SIZE)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! prop-types */ \"./node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/IconButton/IconButton.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Icon/Icon.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/MenuItem/MenuItem.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Divider/Divider.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Menu/Menu.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Dialog/Dialog.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/DialogTitle/DialogTitle.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/DialogContent/DialogContent.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/DialogActions/DialogActions.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Button/Button.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/TextField/TextField.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Stack/Stack.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Chip/Chip.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/TableCell/TableCell.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/TableContainer/TableContainer.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Paper/Paper.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Table/Table.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_22__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/TableHead/TableHead.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_23__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/TableRow/TableRow.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_24__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Link/Link.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_25__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/TableBody/TableBody.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_26__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Container/Container.js\");\n/* harmony import */ var _mui_material_styles__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! @mui/material/styles */ \"./node_modules/@mui/material/styles/useTheme.js\");\n/* harmony import */ var _p8p_app_message__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./p8p_app_message */ \"./app/components/p8p_app_message.js\");\n/* harmony import */ var _p8p_table_reducer__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./p8p_table_reducer */ \"./app/components/p8p_table_reducer.js\");\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n/*\r\n Парус 8 - Панели мониторинга\r\n Компонент: Таблица\r\n*/\n\n//---------------------\n//Подключение библиотек\n//---------------------\n\n //Классы React\n //Контроль свойств компонента\n //Интерфейсные компоненты\n //Взаимодействие со стилями MUI\n //Встраиваемое сообщение об ошибке\n //Редьюсер состояния\n\n//---------\n//Константы\n//---------\n\n//Размеры отступов\nconst P8P_TABLE_SIZE = {\n SMALL: \"small\",\n MEDIUM: \"medium\"\n};\n\n//Типы данных\nconst P8P_TABLE_DATA_TYPE = {\n STR: \"STR\",\n NUMB: \"NUMB\",\n DATE: \"DATE\"\n};\n\n//Направления сортировки\nconst P8P_TABLE_COLUMN_ORDER_DIRECTIONS = {\n ASC: \"ASC\",\n DESC: \"DESC\"\n};\n\n//Действия панели инструментов столбца\nconst P8P_TABLE_COLUMN_TOOL_BAR_ACTIONS = {\n ORDER_TOGGLE: \"ORDER_TOGGLE\",\n FILTER_TOGGLE: \"FILTER_TOGGLE\",\n EXPAND_TOGGLE: \"EXPAND_TOGGLE\"\n};\n\n//Действия меню столбца\nconst P8P_TABLE_COLUMN_MENU_ACTIONS = {\n ORDER_ASC: \"ORDER_ASC\",\n ORDER_DESC: \"ORDER_DESC\",\n FILTER: \"FILTER\"\n};\n\n//Структура элемента описания фильтра\nconst P8P_TABLE_FILTER_SHAPE = prop_types__WEBPACK_IMPORTED_MODULE_3___default().shape({\n name: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().string).isRequired,\n from: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().any),\n to: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().any)\n});\n\n//Стили\nconst STYLES = {\n TABLE: {\n with: \"100%\"\n },\n TABLE_HEAD_STICKY: {\n position: \"sticky\",\n top: 0,\n zIndex: 1000\n },\n TABLE_HEAD_CELL_STICKY: (theme, left) => ({\n position: \"sticky\",\n left,\n backgroundColor: theme.palette.background.default,\n zIndex: 1000\n }),\n TABLE_ROW: {\n \"&:last-child td, &:last-child th\": {\n border: 0\n }\n },\n TABLE_CELL_STICKY: (theme, left) => ({\n position: \"sticky\",\n left,\n backgroundColor: theme.palette.background.default,\n zIndex: 500\n }),\n TABLE_CELL_EXPAND_CONTROL: {\n minWidth: \"60px\",\n maxWidth: \"60px\"\n },\n TABLE_CELL_EXPAND_CONTAINER: {\n paddingBottom: 0,\n paddingTop: 0\n },\n TABLE_CELL_GROUP_HEADER: {\n backgroundColor: \"lightgray\"\n },\n TABLE_CELL_GROUP_HEADER_STICKY: {\n position: \"sticky\",\n left: 0\n },\n TABLE_COLUMN_STACK: {\n alignItems: \"center\"\n },\n TABLE_COLUMN_MENU_ITEM_ICON: {\n paddingRight: \"10px\"\n },\n FILTER_CHIP: {\n alignItems: \"center\"\n },\n MORE_BUTTON_CONTAINER: {\n with: \"100%\",\n textAlign: \"center\",\n padding: \"5px\"\n }\n};\n\n//--------------------------------\n//Вспомогательные классы и функции\n//--------------------------------\n\n//Панель инструментов столбца (левая)\nconst P8PTableColumnToolBarLeft = ({\n columnDef,\n onItemClick\n}) => {\n //Кнопка развёртывания/свёртывания\n let expButton = null;\n if (columnDef.expandable) expButton = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n onClick: () => onItemClick ? onItemClick(P8P_TABLE_COLUMN_TOOL_BAR_ACTIONS.EXPAND_TOGGLE, columnDef.name) : null\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_5__[\"default\"], null, columnDef.expanded ? \"indeterminate_check_box\" : \"add_box\"));\n\n //Генерация содержимого\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), null, expButton);\n};\n\n//Контроль свойств - Панель инструментов столбца (левая)\nP8PTableColumnToolBarLeft.propTypes = {\n columnDef: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().object).isRequired,\n onItemClick: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().func)\n};\n\n//Панель инструментов столбца (правая)\nconst P8PTableColumnToolBarRight = ({\n columnDef,\n orders,\n filters,\n onItemClick\n}) => {\n //Кнопка сортировки\n const order = orders.find(o => o.name == columnDef.name);\n let orderButton = null;\n if (order) orderButton = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n onClick: () => onItemClick ? onItemClick(P8P_TABLE_COLUMN_TOOL_BAR_ACTIONS.ORDER_TOGGLE, columnDef.name) : null\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_5__[\"default\"], null, order.direction === P8P_TABLE_COLUMN_ORDER_DIRECTIONS.ASC ? \"arrow_upward\" : \"arrow_downward\"));\n\n //Кнопка фильтрации\n const filter = filters.find(f => f.name == columnDef.name);\n let filterButton = null;\n if ((0,_p8p_table_reducer__WEBPACK_IMPORTED_MODULE_2__.hasValue)(filter?.from) || (0,_p8p_table_reducer__WEBPACK_IMPORTED_MODULE_2__.hasValue)(filter?.to)) filterButton = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n onClick: () => onItemClick ? onItemClick(P8P_TABLE_COLUMN_TOOL_BAR_ACTIONS.FILTER_TOGGLE, columnDef.name) : null\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_5__[\"default\"], null, \"filter_alt\"));\n\n //Генерация содержимого\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), null, orderButton, filterButton);\n};\n\n//Контроль свойств - Панель инструментов столбца (правая)\nP8PTableColumnToolBarRight.propTypes = {\n columnDef: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().object).isRequired,\n orders: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().array).isRequired,\n filters: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().array).isRequired,\n onItemClick: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().func)\n};\n\n//Меню столбца\nconst P8PTableColumnMenu = ({\n columnDef,\n orderAscItemCaption,\n orderDescItemCaption,\n filterItemCaption,\n onItemClick\n}) => {\n //Собственное состояние\n const [anchorEl, setAnchorEl] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(null);\n\n //Флаг отображения\n const open = Boolean(anchorEl);\n\n //По нажатию на открытие меню\n const handleMenuButtonClick = event => {\n setAnchorEl(event.currentTarget);\n };\n\n //По нажатию на пункт меню\n const handleMenuItemClick = (event, index, action, columnName) => {\n if (onItemClick) onItemClick(action, columnName);\n setAnchorEl(null);\n };\n\n //При закрытии меню\n const handleMenuClose = () => {\n setAnchorEl(null);\n };\n\n //Формирование списка элементов меню в зависимости от описания колонки таблицы\n const menuItems = [];\n if (columnDef.order === true) {\n menuItems.push( /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n key: \"orderAsc\",\n onClick: (event, index) => handleMenuItemClick(event, index, P8P_TABLE_COLUMN_MENU_ACTIONS.ORDER_ASC, columnDef.name)\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_5__[\"default\"], {\n sx: STYLES.TABLE_COLUMN_MENU_ITEM_ICON\n }, \"arrow_upward\"), orderAscItemCaption));\n menuItems.push( /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n key: \"orderDesc\",\n onClick: (event, index) => handleMenuItemClick(event, index, P8P_TABLE_COLUMN_MENU_ACTIONS.ORDER_DESC, columnDef.name)\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_5__[\"default\"], {\n sx: STYLES.TABLE_COLUMN_MENU_ITEM_ICON\n }, \"arrow_downward\"), orderDescItemCaption));\n }\n if (columnDef.filter === true) {\n if (menuItems.length > 0) menuItems.push( /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_7__[\"default\"], {\n key: \"divider\",\n sx: {\n my: 0.5\n }\n }));\n menuItems.push( /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n key: \"filter\",\n onClick: (event, index) => handleMenuItemClick(event, index, P8P_TABLE_COLUMN_MENU_ACTIONS.FILTER, columnDef.name)\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_5__[\"default\"], {\n sx: STYLES.TABLE_COLUMN_MENU_ITEM_ICON\n }, \"filter_alt\"), filterItemCaption));\n }\n\n //Генерация содержимого\n return menuItems.length > 0 ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n id: `${columnDef.name}_menu_button`,\n \"aria-haspopup\": \"true\",\n onClick: handleMenuButtonClick\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_5__[\"default\"], null, \"more_vert\")), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_8__[\"default\"], {\n id: `${columnDef.name}_menu`,\n anchorEl: anchorEl,\n open: open,\n onClose: handleMenuClose\n }, menuItems)) : null;\n};\n\n//Контроль свойств - Меню столбца\nP8PTableColumnMenu.propTypes = {\n columnDef: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().object).isRequired,\n orderAscItemCaption: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().string).isRequired,\n orderDescItemCaption: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().string).isRequired,\n filterItemCaption: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().string).isRequired,\n onItemClick: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().func)\n};\n\n//Диалог подсказки\nconst P8PTableColumnHintDialog = ({\n columnDef,\n okBtnCaption,\n onOk\n}) => {\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_9__[\"default\"], {\n open: true,\n \"aria-labelledby\": \"filter-dialog-title\",\n \"aria-describedby\": \"filter-dialog-description\",\n onClose: () => onOk ? onOk() : null\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_10__[\"default\"], {\n id: \"filter-dialog-title\"\n }, columnDef.caption), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_11__[\"default\"], null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n dangerouslySetInnerHTML: {\n __html: columnDef.hint\n }\n })), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_12__[\"default\"], null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_13__[\"default\"], {\n onClick: () => onOk ? onOk() : null\n }, okBtnCaption)));\n};\n\n//Контроль свойств - Диалог подсказки\nP8PTableColumnHintDialog.propTypes = {\n columnDef: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().object).isRequired,\n okBtnCaption: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().string).isRequired,\n onOk: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().func)\n};\n\n//Диалог фильтра\nconst P8PTableColumnFilterDialog = ({\n columnDef,\n from,\n to,\n valueCaption,\n valueFromCaption,\n valueToCaption,\n okBtnCaption,\n clearBtnCaption,\n cancelBtnCaption,\n valueFormatter,\n onOk,\n onClear,\n onCancel\n}) => {\n //Собственное состояние - значения с-по\n const [filterValues, setFilterValues] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({\n from,\n to\n });\n\n //Отработка воода значения в фильтр\n const handleFilterTextFieldChanged = e => {\n setFilterValues(prev => ({\n ...prev,\n [e.target.name]: e.target.value\n }));\n };\n\n //Элементы ввода значений фильтра\n let inputs = null;\n if (Array.isArray(columnDef.values) && columnDef.values.length > 0) {\n inputs = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_14__[\"default\"], {\n name: \"from\",\n fullWidth: true,\n select: true,\n label: valueCaption,\n variant: \"standard\",\n value: filterValues.from,\n onChange: handleFilterTextFieldChanged\n }, columnDef.values.map((v, i) => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n key: i,\n value: v\n }, valueFormatter ? valueFormatter({\n value: v,\n columnDef\n }) : v)));\n } else {\n switch (columnDef.dataType) {\n case P8P_TABLE_DATA_TYPE.STR:\n {\n inputs = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_14__[\"default\"], {\n name: \"from\",\n fullWidth: true,\n InputLabelProps: {\n shrink: true\n },\n value: filterValues.from,\n onChange: handleFilterTextFieldChanged,\n label: valueCaption,\n variant: \"standard\"\n });\n break;\n }\n case P8P_TABLE_DATA_TYPE.NUMB:\n case P8P_TABLE_DATA_TYPE.DATE:\n {\n inputs = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_14__[\"default\"], {\n name: \"from\",\n InputLabelProps: {\n shrink: true\n },\n type: columnDef.dataType == P8P_TABLE_DATA_TYPE.NUMB ? \"number\" : \"date\",\n value: filterValues.from,\n onChange: handleFilterTextFieldChanged,\n label: valueFromCaption,\n variant: \"standard\"\n }), \"\\xA0\", /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_14__[\"default\"], {\n name: \"to\",\n InputLabelProps: {\n shrink: true\n },\n type: columnDef.dataType == P8P_TABLE_DATA_TYPE.NUMB ? \"number\" : \"date\",\n value: filterValues.to,\n onChange: handleFilterTextFieldChanged,\n label: valueToCaption,\n variant: \"standard\"\n }));\n break;\n }\n }\n }\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_9__[\"default\"], {\n open: true,\n \"aria-labelledby\": \"filter-dialog-title\",\n \"aria-describedby\": \"filter-dialog-description\",\n onClose: () => onCancel ? onCancel(columnDef.name) : null\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_10__[\"default\"], {\n id: \"filter-dialog-title\"\n }, columnDef.caption), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_11__[\"default\"], null, inputs), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_12__[\"default\"], null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_13__[\"default\"], {\n onClick: () => onOk ? onOk(columnDef.name, filterValues.from, filterValues.to) : null\n }, okBtnCaption), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_13__[\"default\"], {\n onClick: () => onClear ? onClear(columnDef.name) : null,\n variant: \"secondary\"\n }, clearBtnCaption), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_13__[\"default\"], {\n onClick: () => onCancel ? onCancel(columnDef.name) : null\n }, cancelBtnCaption)));\n};\n\n//Контроль свойств - Диалог фильтра\nP8PTableColumnFilterDialog.propTypes = {\n columnDef: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().object).isRequired,\n from: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().any),\n to: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().any),\n valueCaption: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().string).isRequired,\n valueFromCaption: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().string).isRequired,\n valueToCaption: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().string).isRequired,\n okBtnCaption: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().string).isRequired,\n clearBtnCaption: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().string).isRequired,\n cancelBtnCaption: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().string).isRequired,\n valueFormatter: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().func),\n onOk: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().func),\n onClear: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().func),\n onCancel: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().func)\n};\n\n//Сводный фильтр\nconst P8PTableFiltersChips = ({\n filters,\n columnsDef,\n valueFromCaption,\n valueToCaption,\n onFilterChipClick,\n onFilterChipDelete,\n valueFormatter\n}) => {\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_15__[\"default\"], {\n direction: \"row\",\n spacing: 1,\n pb: 2\n }, filters.map((filter, i) => {\n const columnDef = columnsDef.find(columnDef => columnDef.name == filter.name);\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_16__[\"default\"], {\n key: i,\n label: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_15__[\"default\"], {\n direction: \"row\",\n sx: STYLES.FILTER_CHIP\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"strong\", null, columnDef.caption), \":\\xA0\", (0,_p8p_table_reducer__WEBPACK_IMPORTED_MODULE_2__.hasValue)(filter.from) && !columnDef.values && columnDef.dataType != P8P_TABLE_DATA_TYPE.STR ? `${valueFromCaption.toLowerCase()} ` : null, (0,_p8p_table_reducer__WEBPACK_IMPORTED_MODULE_2__.hasValue)(filter.from) ? valueFormatter ? valueFormatter({\n value: filter.from,\n columnDef\n }) : filter.from : null, (0,_p8p_table_reducer__WEBPACK_IMPORTED_MODULE_2__.hasValue)(filter.to) && !columnDef.values && columnDef.dataType != P8P_TABLE_DATA_TYPE.STR ? ` ${valueToCaption.toLowerCase()} ` : null, (0,_p8p_table_reducer__WEBPACK_IMPORTED_MODULE_2__.hasValue)(filter.to) ? valueFormatter ? valueFormatter({\n value: filter.to,\n columnDef\n }) : filter.to : null),\n variant: \"outlined\",\n onClick: () => onFilterChipClick ? onFilterChipClick(columnDef.name) : null,\n onDelete: () => onFilterChipDelete ? onFilterChipDelete(columnDef.name) : null\n });\n }));\n};\n\n//Контроль свойств - Сводный фильтр\nP8PTableFiltersChips.propTypes = {\n filters: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().array).isRequired,\n columnsDef: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().array).isRequired,\n valueFromCaption: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().string).isRequired,\n valueToCaption: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().string).isRequired,\n onFilterChipClick: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().func),\n onFilterChipDelete: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().func),\n valueFormatter: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().func)\n};\n\n//-----------\n//Тело модуля\n//-----------\n\n//Таблица\nconst P8PTable = ({\n columnsDef,\n groups,\n rows,\n orders,\n filters,\n size,\n fixedHeader = false,\n fixedColumns = 0,\n morePages = false,\n reloading,\n expandable,\n orderAscMenuItemCaption,\n orderDescMenuItemCaption,\n filterMenuItemCaption,\n valueFilterCaption,\n valueFromFilterCaption,\n valueToFilterCaption,\n okFilterBtnCaption,\n clearFilterBtnCaption,\n cancelFilterBtnCaption,\n morePagesBtnCaption,\n morePagesBtnProps,\n noDataFoundText,\n headCellRender,\n dataCellRender,\n groupCellRender,\n rowExpandRender,\n valueFormatter,\n onOrderChanged,\n onFilterChanged,\n onPagesCountChanged,\n objectsCopier,\n containerComponent,\n containerComponentProps\n}) => {\n //Собственное состояние - описание заголовка\n const [header, dispatchHeaderAction] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useReducer)(_p8p_table_reducer__WEBPACK_IMPORTED_MODULE_2__.p8pTableReducer, (0,_p8p_table_reducer__WEBPACK_IMPORTED_MODULE_2__.HEADER_INITIAL_STATE)());\n\n //Собственное состояние - фильтруемая колонка\n const [filterColumn, setFilterColumn] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(null);\n\n //Собственное состояние - развёрнутые строки\n const [expanded, setExpanded] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({});\n\n //Собственное состояния - развёрнутые группы\n const [expandedGroups, setExpandedGroups] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({});\n\n //Собственное состояние - колонка с отображаемой подсказкой\n const [displayHintColumn, setDisplayHintColumn] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(null);\n\n //Стили\n const theme = (0,_mui_material_styles__WEBPACK_IMPORTED_MODULE_17__[\"default\"])();\n\n //Описание фильтруемой колонки\n const filterColumnDef = filterColumn ? columnsDef.find(columnDef => columnDef.name == filterColumn) || null : null;\n\n //Описание колонки с отображаемой подсказкой\n const displayHintColumnDef = displayHintColumn ? columnsDef.find(columnDef => columnDef.name == displayHintColumn) || null : null;\n\n //Значения фильтра фильтруемой колонки\n const [filterColumnFrom, filterColumnTo] = filterColumn ? (() => {\n const filter = filters.find(filter => filter.name == filterColumn);\n return filter ? [filter.from == null ? \"\" : filter.from, filter.to == null ? \"\" : filter.to] : [\"\", \"\"];\n })() : [\"\", \"\"];\n\n //Формирование заголовка таблицы\n const setHeader = ({\n columnsDef,\n expandable,\n fixedColumns,\n objectsCopier\n }) => dispatchHeaderAction({\n type: _p8p_table_reducer__WEBPACK_IMPORTED_MODULE_2__.P8P_TABLE_AT.SET_HEADER,\n payload: {\n columnsDef,\n expandable,\n fixedColumns,\n objectsCopier\n }\n });\n\n //Сворачивание/разворачивание уровня заголовка таблицы\n const toggleHeaderExpand = ({\n columnName,\n objectsCopier\n }) => dispatchHeaderAction({\n type: _p8p_table_reducer__WEBPACK_IMPORTED_MODULE_2__.P8P_TABLE_AT.TOGGLE_HEADER_EXPAND,\n payload: {\n columnName,\n expandable,\n fixedColumns,\n objectsCopier\n }\n });\n\n //Выравнивание в зависимости от типа данных\n const getAlignByDataType = ({\n dataType,\n hasChild\n }) => dataType === P8P_TABLE_DATA_TYPE.DATE || hasChild ? \"center\" : dataType === P8P_TABLE_DATA_TYPE.NUMB ? \"right\" : \"left\";\n\n //Упорядочение содержимого в зависимости от типа данных\n const getJustifyContentByDataType = ({\n dataType,\n hasChild\n }) => dataType === P8P_TABLE_DATA_TYPE.DATE || hasChild ? \"center\" : dataType === P8P_TABLE_DATA_TYPE.NUMB ? \"flex-end\" : \"flex-start\";\n\n //Отработка нажатия на элемент пункта меню\n const handleToolBarItemClick = (action, columnName) => {\n switch (action) {\n case P8P_TABLE_COLUMN_TOOL_BAR_ACTIONS.ORDER_TOGGLE:\n {\n const colOrder = orders.find(o => o.name == columnName);\n const newDirection = colOrder?.direction == P8P_TABLE_COLUMN_ORDER_DIRECTIONS.ASC ? P8P_TABLE_COLUMN_ORDER_DIRECTIONS.DESC : colOrder?.direction == P8P_TABLE_COLUMN_ORDER_DIRECTIONS.DESC ? null : P8P_TABLE_COLUMN_ORDER_DIRECTIONS.ASC;\n if (onOrderChanged) onOrderChanged({\n columnName,\n direction: newDirection\n });\n break;\n }\n case P8P_TABLE_COLUMN_TOOL_BAR_ACTIONS.FILTER_TOGGLE:\n setFilterColumn(columnName);\n break;\n case P8P_TABLE_COLUMN_TOOL_BAR_ACTIONS.EXPAND_TOGGLE:\n toggleHeaderExpand({\n columnName,\n objectsCopier\n });\n break;\n }\n };\n\n //Отработка нажатия на пункты меню\n const handleMenuItemClick = (action, columnName) => {\n switch (action) {\n case P8P_TABLE_COLUMN_MENU_ACTIONS.ORDER_ASC:\n onOrderChanged({\n columnName,\n direction: P8P_TABLE_COLUMN_ORDER_DIRECTIONS.ASC\n });\n break;\n case P8P_TABLE_COLUMN_MENU_ACTIONS.ORDER_DESC:\n onOrderChanged({\n columnName,\n direction: P8P_TABLE_COLUMN_ORDER_DIRECTIONS.DESC\n });\n break;\n case P8P_TABLE_COLUMN_MENU_ACTIONS.FILTER:\n setFilterColumn(columnName);\n break;\n }\n };\n\n //Отработка ввода значения фильтра колонки\n const handleFilterOk = (columnName, from, to) => {\n if (onFilterChanged) onFilterChanged({\n columnName,\n from: from === \"\" ? null : from,\n to: to === \"\" ? null : to\n });\n setFilterColumn(null);\n };\n\n //Отработка очистки значения фильтра колонки\n const handleFilterClear = columnName => {\n if (onFilterChanged) onFilterChanged({\n columnName,\n from: null,\n to: null\n });\n setFilterColumn(null);\n };\n\n //Отработка отмены ввода значения фильтра колонки\n const handleFilterCancel = () => {\n setFilterColumn(null);\n };\n\n //Отработка нажатия на элемент сводного фильтра\n const handleFilterChipClick = columnName => setFilterColumn(columnName);\n\n //Отработка удаления элемента сводного фильтра\n const handleFilterChipDelete = columnName => onFilterChanged ? onFilterChanged({\n columnName,\n from: null,\n to: null\n }) : null;\n\n //Отработка нажатия на кнопку догрузки страницы\n const handleMorePagesBtnClick = () => {\n if (onPagesCountChanged) onPagesCountChanged();\n };\n\n //Отработка нажатия на элемент отображения подсказки по колонке\n const handleColumnShowHintClick = columnName => setDisplayHintColumn(columnName);\n\n //Отработка сокрытия подсказки по колонке\n const handleHintOk = () => setDisplayHintColumn(null);\n\n //Отработка нажатия на кнопку раскрытия элемента\n const handleExpandClick = rowIndex => {\n if (expanded[rowIndex] === true) setExpanded(pv => {\n let res = {\n ...pv\n };\n delete res[rowIndex];\n return res;\n });else setExpanded(pv => ({\n ...pv,\n [rowIndex]: true\n }));\n };\n\n //При перезагрузке данных\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n if (reloading) setExpanded({});\n }, [reloading]);\n\n //При изменении описания колонок\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n setHeader({\n columnsDef,\n expandable,\n fixedColumns,\n objectsCopier\n });\n }, [columnsDef, expandable, fixedColumns, objectsCopier]);\n\n //Генерация заголовка группы\n const renderGroupCell = group => {\n let customRender = {};\n if (groupCellRender) customRender = groupCellRender({\n columnsDef: header.columnsDef,\n group\n }) || {};\n return header.displayDataColumns.map((columnDef, i) => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_18__[\"default\"], _extends({\n key: `group-header-cell-${i}`\n }, customRender.cellProps, {\n sx: {\n ...STYLES.TABLE_CELL_GROUP_HEADER,\n ...customRender.cellStyle,\n ...(columnDef.width ? {\n minWidth: columnDef.width,\n maxWidth: columnDef.width\n } : {}),\n ...(i == 0 && fixedColumns ? STYLES.TABLE_CELL_GROUP_HEADER_STICKY : {})\n },\n colSpan: expandable && rowExpandRender ? 2 : 1\n }), i == 0 ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_15__[\"default\"], {\n direction: \"row\",\n sx: STYLES.TABLE_COLUMN_STACK\n }, group.expandable ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n onClick: () => {\n setExpandedGroups(pv => ({\n ...pv,\n ...{\n [group.name]: !pv[group.name]\n }\n }));\n }\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_5__[\"default\"], null, expandedGroups[group.name] ? \"indeterminate_check_box\" : \"add_box\")) : null, customRender.data ? customRender.data : group.caption) : null));\n };\n\n //Генерация содержимого\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", null, displayHintColumn ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(P8PTableColumnHintDialog, {\n columnDef: displayHintColumnDef,\n okBtnCaption: okFilterBtnCaption,\n onOk: handleHintOk\n }) : null, filterColumn ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(P8PTableColumnFilterDialog, {\n columnDef: filterColumnDef,\n from: filterColumnFrom,\n to: filterColumnTo,\n valueCaption: valueFilterCaption,\n valueFromCaption: valueFromFilterCaption,\n valueToCaption: valueToFilterCaption,\n okBtnCaption: okFilterBtnCaption,\n clearBtnCaption: clearFilterBtnCaption,\n cancelBtnCaption: cancelFilterBtnCaption,\n valueFormatter: valueFormatter,\n onOk: handleFilterOk,\n onClear: handleFilterClear,\n onCancel: handleFilterCancel\n }) : null, Array.isArray(filters) && filters.length > 0 ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(P8PTableFiltersChips, {\n filters: filters,\n columnsDef: columnsDef,\n valueFromCaption: valueFromFilterCaption,\n valueToCaption: valueToFilterCaption,\n onFilterChipClick: handleFilterChipClick,\n onFilterChipDelete: handleFilterChipDelete,\n valueFormatter: valueFormatter\n }) : null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_19__[\"default\"], _extends({\n component: containerComponent ? containerComponent : _mui_material__WEBPACK_IMPORTED_MODULE_20__[\"default\"]\n }, containerComponentProps ? containerComponentProps : {}), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_21__[\"default\"], {\n stickyHeader: fixedHeader,\n sx: STYLES.TABLE,\n size: size || P8P_TABLE_SIZE.MEDIUM\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_22__[\"default\"], {\n sx: fixedHeader ? STYLES.TABLE_HEAD_STICKY : {}\n }, header.displayLevels.map((level, i) => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_23__[\"default\"], {\n key: level\n }, expandable && rowExpandRender && i == 0 ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_18__[\"default\"], {\n key: \"head-cell-expand-control\",\n align: \"center\",\n sx: {\n ...STYLES.TABLE_CELL_EXPAND_CONTROL,\n ...(fixedColumns ? STYLES.TABLE_HEAD_CELL_STICKY(theme, 0) : {})\n },\n rowSpan: header.displayLevelsColumns[level][0].rowSpan\n }) : null, header.displayLevelsColumns[level].map((columnDef, j) => {\n let customRender = {};\n if (headCellRender) customRender = headCellRender({\n columnDef\n }) || {};\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_18__[\"default\"], _extends({\n key: `head-cell-${j}`,\n align: getAlignByDataType(columnDef),\n sx: {\n ...(columnDef.width ? {\n minWidth: columnDef.width,\n maxWidth: columnDef.width\n } : {}),\n ...(columnDef.fixed ? STYLES.TABLE_HEAD_CELL_STICKY(theme, columnDef.fixedLeft) : {}),\n ...customRender.cellStyle\n },\n rowSpan: columnDef.rowSpan,\n colSpan: columnDef.colSpan\n }, customRender.cellProps), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_15__[\"default\"], _extends({\n direction: \"row\",\n justifyContent: getJustifyContentByDataType(columnDef),\n sx: {\n ...STYLES.TABLE_COLUMN_STACK,\n ...customRender.stackStyle\n }\n }, customRender.stackProps), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(P8PTableColumnToolBarLeft, {\n columnDef: columnDef,\n onItemClick: handleToolBarItemClick\n }), customRender.data ? customRender.data : columnDef.hint ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_24__[\"default\"], {\n component: \"button\",\n variant: \"body2\",\n align: \"left\",\n underline: \"always\",\n onClick: () => handleColumnShowHintClick(columnDef.name)\n }, columnDef.caption) : columnDef.caption, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(P8PTableColumnToolBarRight, {\n columnDef: columnDef,\n orders: orders,\n filters: filters,\n onItemClick: handleToolBarItemClick\n }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(P8PTableColumnMenu, {\n columnDef: columnDef,\n orderAscItemCaption: orderAscMenuItemCaption,\n orderDescItemCaption: orderDescMenuItemCaption,\n filterItemCaption: filterMenuItemCaption,\n onItemClick: handleMenuItemClick\n })));\n })))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_25__[\"default\"], null, rows.length > 0 ? (Array.isArray(groups) && groups.length > 0 ? groups : [{}]).map((group, g) => {\n const rowsView = rows.map((row, i) => !group?.name || group?.name == row.groupName ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), {\n key: `data-${i}`\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_23__[\"default\"], {\n key: `data-row-${i}`,\n sx: STYLES.TABLE_ROW\n }, expandable && rowExpandRender ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_18__[\"default\"], {\n key: `data-cell-expand-control-${i}`,\n align: \"center\",\n sx: {\n ...STYLES.TABLE_CELL_EXPAND_CONTROL,\n ...(fixedColumns ? STYLES.TABLE_CELL_STICKY(theme, 0) : {})\n }\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n onClick: () => handleExpandClick(i)\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_5__[\"default\"], null, expanded[i] === true ? \"keyboard_arrow_down\" : \"keyboard_arrow_right\"))) : null, header.displayDataColumns.map((columnDef, j) => {\n let customRender = {};\n if (dataCellRender) customRender = dataCellRender({\n row,\n columnDef\n }) || {};\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_18__[\"default\"], _extends({\n key: `data-cell-${j}`,\n align: getAlignByDataType(columnDef),\n sx: {\n ...(columnDef.width ? {\n minWidth: columnDef.width,\n maxWidth: columnDef.width\n } : {}),\n ...(columnDef.fixed ? STYLES.TABLE_CELL_STICKY(theme, columnDef.fixedLeft) : {}),\n ...customRender.cellStyle\n }\n }, customRender.cellProps), customRender.data ? customRender.data : valueFormatter ? valueFormatter({\n value: row[columnDef.name],\n columnDef\n }) : row[columnDef.name]);\n })), expandable && rowExpandRender && expanded[i] === true ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_23__[\"default\"], {\n key: `data-row-expand-${i}`\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_18__[\"default\"], {\n sx: {\n ...STYLES.TABLE_CELL_EXPAND_CONTAINER,\n ...(fixedColumns ? STYLES.TABLE_CELL_STICKY(theme, 0) : {})\n },\n colSpan: fixedColumns ? header.displayFixedColumnsCount + 1 : header.displayDataColumnsCount\n }, rowExpandRender({\n columnsDef,\n row\n }))) : null) : null);\n return !group?.name ? rowsView : /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), {\n key: `group-${g}`\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_23__[\"default\"], {\n key: `group-header-${g}`\n }, renderGroupCell(group)), !group.expandable || expandedGroups[group.name] === true ? rowsView : null);\n }) : noDataFoundText && !reloading ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_23__[\"default\"], null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_18__[\"default\"], {\n colSpan: header.displayDataColumnsCount\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_p8p_app_message__WEBPACK_IMPORTED_MODULE_1__.P8PAppInlineError, {\n text: noDataFoundText\n }))) : null))), morePages ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_26__[\"default\"], {\n style: STYLES.MORE_BUTTON_CONTAINER\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_13__[\"default\"], _extends({\n fullWidth: true,\n onClick: handleMorePagesBtnClick\n }, morePagesBtnProps ? morePagesBtnProps : {}), morePagesBtnCaption)) : null);\n};\n\n//Контроль свойств - Таблица\nP8PTable.propTypes = {\n columnsDef: prop_types__WEBPACK_IMPORTED_MODULE_3___default().arrayOf(prop_types__WEBPACK_IMPORTED_MODULE_3___default().shape({\n name: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().string).isRequired,\n caption: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().string).isRequired,\n order: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().bool).isRequired,\n filter: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().bool).isRequired,\n dataType: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().string).isRequired,\n visible: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().bool).isRequired,\n values: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().array),\n parent: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().string),\n expandable: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().bool).isRequired,\n expanded: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().bool).isRequired,\n width: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().number)\n })).isRequired,\n groups: prop_types__WEBPACK_IMPORTED_MODULE_3___default().arrayOf(prop_types__WEBPACK_IMPORTED_MODULE_3___default().shape({\n name: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().string).isRequired,\n caption: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().string).isRequired,\n expandable: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().bool).isRequired,\n expanded: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().bool).isRequired\n })),\n rows: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().array).isRequired,\n orders: prop_types__WEBPACK_IMPORTED_MODULE_3___default().arrayOf(prop_types__WEBPACK_IMPORTED_MODULE_3___default().shape({\n name: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().string).isRequired,\n direction: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().string).isRequired\n })).isRequired,\n filters: prop_types__WEBPACK_IMPORTED_MODULE_3___default().arrayOf(P8P_TABLE_FILTER_SHAPE).isRequired,\n size: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().string),\n fixedHeader: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().bool),\n fixedColumns: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().number),\n morePages: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().bool),\n reloading: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().bool).isRequired,\n expandable: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().bool),\n orderAscMenuItemCaption: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().string).isRequired,\n orderDescMenuItemCaption: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().string).isRequired,\n filterMenuItemCaption: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().string).isRequired,\n valueFilterCaption: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().string).isRequired,\n valueFromFilterCaption: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().string).isRequired,\n valueToFilterCaption: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().string).isRequired,\n okFilterBtnCaption: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().string).isRequired,\n clearFilterBtnCaption: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().string).isRequired,\n cancelFilterBtnCaption: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().string).isRequired,\n morePagesBtnCaption: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().string).isRequired,\n morePagesBtnProps: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().object),\n noDataFoundText: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().string),\n headCellRender: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().func),\n dataCellRender: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().func),\n groupCellRender: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().func),\n rowExpandRender: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().func),\n valueFormatter: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().func),\n onOrderChanged: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().func),\n onFilterChanged: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().func),\n onPagesCountChanged: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().func),\n objectsCopier: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().func).isRequired,\n containerComponent: prop_types__WEBPACK_IMPORTED_MODULE_3___default().oneOfType([(prop_types__WEBPACK_IMPORTED_MODULE_3___default().elementType), (prop_types__WEBPACK_IMPORTED_MODULE_3___default().string)]),\n containerComponentProps: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().object)\n};\n\n//----------------\n//Интерфейс модуля\n//----------------\n\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/components/p8p_table.js?"); /***/ }), @@ -3777,7 +3777,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ PlanDetail: () => (/* binding */ PlanDetail)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! prop-types */ \"./node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_8___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_8__);\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Box/Box.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Typography/Typography.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Container/Container.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Grid/Grid.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Stack/Stack.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/IconButton/IconButton.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Icon/Icon.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Button/Button.js\");\n/* harmony import */ var _components_p8p_data_grid__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../components/p8p_data_grid */ \"./app/components/p8p_data_grid.js\");\n/* harmony import */ var _components_p8p_svg__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../../components/p8p_svg */ \"./app/components/p8p_svg.js\");\n/* harmony import */ var _config_wrapper__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../../config_wrapper */ \"./app/config_wrapper.js\");\n/* harmony import */ var _hooks__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../hooks */ \"./app/panels/mech_rec_assembly_mon/hooks.js\");\n/* harmony import */ var _progress_box__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./progress_box */ \"./app/panels/mech_rec_assembly_mon/components/progress_box.js\");\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n/*\r\n Парус 8 - Панели мониторинга - ПУП - Мониторинг сборки изделий\r\n Панель мониторинга: Детализация по объекту\r\n*/\n\n//---------------------\n//Подключение библиотек\n//---------------------\n\n //Классы React\n //Контроль свойств компонента\n //Интерфейсные элементы\n //Таблица данных\n //Интерактивные изображения\n //Подключение компонентов к настройкам приложения\n //Вспомогательные хуки\n //Информация по прогрессу объекта\n\n//---------\n//Константы\n//---------\n\n//Стили\nconst STYLES = {\n BOX_INFO_MAIN: {\n border: \"1px solid\",\n borderRadius: \"25px\",\n height: \"35vh\"\n },\n BOX_INFO_SUB: isMessage => ({\n overflow: \"hidden\",\n textAlign: \"center\",\n width: \"100%\",\n height: \"100%\",\n display: \"flex\",\n flexDirection: \"column\",\n justifyContent: isMessage ? \"center\" : \"flex-start\",\n paddingLeft: \"5px\",\n paddingRight: \"5px\",\n ...(isMessage ? {\n padding: \"5px\"\n } : {\n paddingTop: \"10px\"\n })\n }),\n DETAIL_INFO: {\n display: \"flex\",\n justifyContent: \"space-around\",\n alignItems: \"center\",\n border: \"1px solid\",\n borderRadius: \"25px\",\n height: \"17vh\"\n },\n PRODUCT_SELECTOR_CONTAINER: {\n display: \"flex\",\n justifyContent: \"center\",\n alignItems: \"center\",\n flexDirection: \"column\",\n border: \"1px solid\",\n borderRadius: \"25px\",\n height: \"53vh\",\n marginTop: \"16px\"\n },\n PRODUCT_SELECTOR_MODEL: {\n width: \"70%\"\n },\n PLAN_INFO_MAIN: {\n display: \"flex\",\n flexDirection: \"column\",\n gap: \"16px\"\n },\n PLAN_INFO_SUB: {\n display: \"flex\",\n justifyContent: \"space-between\",\n width: \"280px\",\n borderBottom: \"1px solid\"\n },\n TABLE_DETAILS: {\n height: \"260px\"\n },\n TABLE_DETAILS_HEADER_CELL: maxWidth => ({\n padding: \"2px 2px\",\n fontSize: \"11px\",\n textAlign: \"center\",\n lineHeight: \"1rem\",\n ...(maxWidth ? {\n maxWidth\n } : {})\n }),\n TABLE_DETAILS_DATA_CELL: textAlign => ({\n padding: \"2px 2px\",\n fontSize: \"11px\",\n ...(textAlign ? {\n textAlign\n } : {})\n }),\n CARD_DETAILS_CONTAINER: {\n minWidth: \"1200px\",\n maxWidth: \"1400px\"\n },\n CARD_DETAILS_NAVIGATION_STACK: {\n width: \"100%\"\n }\n};\n\n//------------------------------------\n//Вспомогательные функции и компоненты\n//------------------------------------\n\n//Информация о плане\nconst PlanInfo = ({\n plan\n}) => {\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n sx: STYLES.PLAN_INFO_MAIN\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n sx: STYLES.PLAN_INFO_SUB\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_7__[\"default\"], {\n variant: \"UDO_body1\",\n mt: 1\n }, \"\\u041D\\u043E\\u043C\\u0435\\u0440 \\u0431\\u043E\\u0440\\u0442\\u0430:\"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_7__[\"default\"], {\n variant: \"subtitle2\"\n }, plan.SNUMB)), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n sx: STYLES.PLAN_INFO_SUB\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_7__[\"default\"], {\n variant: \"UDO_body1\",\n mt: 1\n }, \"\\u0413\\u043E\\u0434 \\u0432\\u044B\\u043F\\u0443\\u0441\\u043A\\u0430:\"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_7__[\"default\"], {\n variant: \"subtitle2\"\n }, plan.NYEAR))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_progress_box__WEBPACK_IMPORTED_MODULE_5__.ProgressBox, {\n progress: plan.NPROGRESS,\n detail: plan.SDETAIL,\n width: \"110px\",\n height: \"110px\",\n progressVariant: \"subtitle2\",\n detailVariant: \"body3\"\n }));\n};\n\n//Контроль свойств - Информация о плане\nPlanInfo.propTypes = {\n plan: (prop_types__WEBPACK_IMPORTED_MODULE_8___default().object)\n};\n\n//Модель выпуска плана\nconst PlanProductCompositionModel = ({\n model,\n products,\n setCostProductComposition\n}) => {\n //При выборе детали на модели\n const handleProductClick = ({\n item\n }) => {\n const product = products.find(p => p.SMODEL_ID == item.id);\n if (product) setCostProductComposition(pv => ({\n ...pv,\n selectedProduct: {\n ...product\n }\n }));\n };\n\n //Генерация содержимого\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n sx: STYLES.PRODUCT_SELECTOR_MODEL\n }, model ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_components_p8p_svg__WEBPACK_IMPORTED_MODULE_2__.P8PSVG, {\n data: atob(model),\n items: products.map(p => ({\n id: p.SMODEL_ID,\n backgroundColor: p.SMODEL_BG_COLOR || \"red\",\n desc: p.SNAME,\n title: p.SNAME\n })),\n fillOpacity: \"0.3\",\n onItemClick: handleProductClick\n }) : /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_7__[\"default\"], {\n variant: \"subtitle2\"\n }, \"\\u041C\\u043E\\u0434\\u0435\\u043B\\u044C \\u0438\\u0437\\u0434\\u0435\\u043B\\u0438\\u044F \\u043D\\u0435 \\u0437\\u0430\\u0433\\u0440\\u0443\\u0436\\u0435\\u043D\\u0430\")));\n};\n\n//Контроль свойств - Модель выпуска плана\nPlanProductCompositionModel.propTypes = {\n model: (prop_types__WEBPACK_IMPORTED_MODULE_8___default().any),\n products: (prop_types__WEBPACK_IMPORTED_MODULE_8___default().array),\n setCostProductComposition: (prop_types__WEBPACK_IMPORTED_MODULE_8___default().func)\n};\n\n//Генерация представления ячейки заголовка\nconst headCellRender = ({\n columnDef\n}) => ({\n stackProps: {\n justifyContent: \"center\"\n },\n cellStyle: STYLES.TABLE_DETAILS_HEADER_CELL([\"NREMN_LABOUR\", \"NAPPLICABILITY\"].includes(columnDef.name) ? \"90px\" : [\"NDEFICIT\"].includes(columnDef.name) ? \"55px\" : null)\n});\n\n//Генерация заливки строки исходя от значений\nconst dataCellRender = ({\n row,\n columnDef\n}) => ({\n cellStyle: STYLES.TABLE_DETAILS_DATA_CELL([\"SOPERATION\", \"SNOMEN\"].includes(columnDef.name) ? null : \"center\"),\n data: row[columnDef]\n});\n\n//Таблица детализации изделия\nconst ProductDetailsTable = ({\n plan,\n product,\n stored,\n noProductMessage,\n noDataFoundMessage,\n title\n}) => {\n //Собственное состояние\n const [state, setState] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({\n plan: null,\n product: null,\n orders: null,\n pageNumber: 1\n });\n\n //Собственное состояние - данные таблицы\n const {\n data,\n isLoading\n } = (0,_hooks__WEBPACK_IMPORTED_MODULE_4__.useProductDetailsTable)(state.plan, state.product, state.orders, state.pageNumber, stored);\n\n //При изменении состояния сортировки\n const handleOrderChanged = ({\n orders\n }) => setState(pv => ({\n ...pv,\n orders: [...orders],\n pageNumber: 1\n }));\n\n //При изменении количества отображаемых страниц\n const handlePagesCountChanged = () => setState(pv => ({\n ...pv,\n pageNumber: pv.pageNumber + 1\n }));\n\n //При изменении изделия\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n setState(pv => ({\n ...pv,\n plan,\n product,\n orders: null,\n pageNumber: 1\n }));\n }, [product, plan]);\n\n //Генерация содержимого\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n sx: STYLES.BOX_INFO_SUB(!product || data.rows.length === 0)\n }, !product ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_7__[\"default\"], {\n variant: \"UDO_body2\"\n }, noProductMessage) : isLoading ? null : data.rows.length === 0 ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_7__[\"default\"], {\n variant: \"subtitle2\"\n }, noDataFoundMessage) : /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_7__[\"default\"], {\n variant: \"h4\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"b\", null, title)), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_components_p8p_data_grid__WEBPACK_IMPORTED_MODULE_1__.P8PDataGrid, _extends({}, _config_wrapper__WEBPACK_IMPORTED_MODULE_3__.P8P_DATA_GRID_CONFIG_PROPS, {\n containerComponentProps: {\n sx: STYLES.TABLE_DETAILS,\n elevation: 0\n },\n columnsDef: data.columnsDef,\n rows: data.rows,\n size: _components_p8p_data_grid__WEBPACK_IMPORTED_MODULE_1__.P8P_DATA_GRID_SIZE.SMALL,\n morePages: data.morePages,\n fixedHeader: true,\n reloading: false,\n dataCellRender: dataCellRender,\n headCellRender: headCellRender,\n onOrderChanged: handleOrderChanged,\n onPagesCountChanged: handlePagesCountChanged\n }))));\n};\n\n//Контроль свойств - Таблица детализации изделия\nProductDetailsTable.propTypes = {\n plan: (prop_types__WEBPACK_IMPORTED_MODULE_8___default().number).isRequired,\n product: (prop_types__WEBPACK_IMPORTED_MODULE_8___default().number),\n stored: (prop_types__WEBPACK_IMPORTED_MODULE_8___default().string).isRequired,\n noProductMessage: (prop_types__WEBPACK_IMPORTED_MODULE_8___default().string).isRequired,\n noDataFoundMessage: (prop_types__WEBPACK_IMPORTED_MODULE_8___default().string).isRequired,\n title: (prop_types__WEBPACK_IMPORTED_MODULE_8___default().string).isRequired\n};\n\n//-----------\n//Тело модуля\n//-----------\n\n//Детализация по объекту\nconst PlanDetail = ({\n plan,\n disableNavigatePrev = false,\n disableNavigateNext = false,\n onNavigate,\n onBack\n}) => {\n //Собственное состояние - данные производственных составов SVG\n const [costProductComposition, setCostProductComposition] = (0,_hooks__WEBPACK_IMPORTED_MODULE_4__.useCostProductComposition)(plan.NRN);\n\n //Формируем представление\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_9__[\"default\"], {\n maxWidth: false,\n sx: STYLES.CARD_DETAILS_CONTAINER\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_10__[\"default\"], {\n container: true,\n direction: \"row\",\n justifyContent: \"center\",\n alignItems: \"center\",\n spacing: 0\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_10__[\"default\"], {\n item: true,\n display: \"flex\",\n justifyContent: \"center\",\n xs: 1\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_11__[\"default\"], {\n display: \"flex\",\n direction: \"row\",\n justifyContent: \"flex-end\",\n alignItems: \"center\",\n sx: STYLES.CARD_DETAILS_NAVIGATION_STACK\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_12__[\"default\"], {\n disabled: disableNavigatePrev,\n onClick: () => onNavigate ? onNavigate(-1) : null\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_13__[\"default\"], null, \"navigate_before\")))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_10__[\"default\"], {\n item: true,\n xs: 10\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_9__[\"default\"], {\n maxWidth: false\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_14__[\"default\"], {\n onClick: () => onBack ? onBack() : null\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_11__[\"default\"], {\n direction: \"row\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_13__[\"default\"], null, \"chevron_left\"), \"\\u041D\\u0430\\u0437\\u0430\\u0434\")), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_10__[\"default\"], {\n container: true,\n spacing: 2,\n sx: {\n paddingTop: \"5px\"\n }\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_10__[\"default\"], {\n item: true,\n xs: 5\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n sx: STYLES.BOX_INFO_MAIN\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(ProductDetailsTable, {\n plan: plan.NRN,\n product: costProductComposition.selectedProduct?.NRN,\n stored: \"PKG_P8PANELS_MECHREC.FCROUTLST_DG_BY_PRDCMPSP_GET\",\n noProductMessage: \"Укажите элемент модели, чтобы увидеть информацию о маршрутных картах\",\n noDataFoundMessage: \"Маршрутные карты не найдены\",\n title: \"Маршрутные карты\"\n })), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n sx: STYLES.BOX_INFO_MAIN,\n mt: 2\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(ProductDetailsTable, {\n plan: plan.NRN,\n product: costProductComposition.selectedProduct?.NRN,\n stored: \"PKG_P8PANELS_MECHREC.FCDELIVSH_DG_BY_PRDCMPSP_GET\",\n noProductMessage: \"Укажите элемент модели, чтобы увидеть информацию о комплектовочных ведомостях\",\n noDataFoundMessage: \"Комплектовочные ведомости не найдены\",\n title: \"Дефицит комплектации\"\n }))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_10__[\"default\"], {\n item: true,\n xs: 7\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n sx: STYLES.DETAIL_INFO\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(PlanInfo, {\n plan: plan\n })), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n sx: STYLES.PRODUCT_SELECTOR_CONTAINER\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(PlanProductCompositionModel, {\n model: costProductComposition.model,\n products: costProductComposition.products,\n setCostProductComposition: setCostProductComposition\n })))))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_10__[\"default\"], {\n item: true,\n display: \"flex\",\n justifyContent: \"center\",\n xs: 1\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_11__[\"default\"], {\n display: \"flex\",\n direction: \"row\",\n justifyContent: \"flex-start\",\n alignItems: \"center\",\n sx: STYLES.CARD_DETAILS_NAVIGATION_STACK\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_12__[\"default\"], {\n disabled: disableNavigateNext,\n onClick: () => onNavigate ? onNavigate(1) : null\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_13__[\"default\"], null, \"navigate_next\"))))));\n};\n\n//Контроль свойств - Детализация по объекту\nPlanDetail.propTypes = {\n plan: (prop_types__WEBPACK_IMPORTED_MODULE_8___default().object),\n disableNavigatePrev: (prop_types__WEBPACK_IMPORTED_MODULE_8___default().bool),\n disableNavigateNext: (prop_types__WEBPACK_IMPORTED_MODULE_8___default().bool),\n onNavigate: (prop_types__WEBPACK_IMPORTED_MODULE_8___default().func),\n onBack: (prop_types__WEBPACK_IMPORTED_MODULE_8___default().func)\n};\n\n//----------------\n//Интерфейс модуля\n//----------------\n\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/panels/mech_rec_assembly_mon/components/plan_detail.js?"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ PlanDetail: () => (/* binding */ PlanDetail)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! prop-types */ \"./node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_8___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_8__);\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Box/Box.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Typography/Typography.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Container/Container.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Grid/Grid.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Stack/Stack.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/IconButton/IconButton.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Icon/Icon.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Button/Button.js\");\n/* harmony import */ var _components_p8p_data_grid__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../components/p8p_data_grid */ \"./app/components/p8p_data_grid.js\");\n/* harmony import */ var _components_p8p_svg__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../../components/p8p_svg */ \"./app/components/p8p_svg.js\");\n/* harmony import */ var _config_wrapper__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../../config_wrapper */ \"./app/config_wrapper.js\");\n/* harmony import */ var _hooks__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../hooks */ \"./app/panels/mech_rec_assembly_mon/hooks.js\");\n/* harmony import */ var _progress_box__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./progress_box */ \"./app/panels/mech_rec_assembly_mon/components/progress_box.js\");\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n/*\r\n Парус 8 - Панели мониторинга - ПУП - Мониторинг сборки изделий\r\n Панель мониторинга: Детализация по объекту\r\n*/\n\n//---------------------\n//Подключение библиотек\n//---------------------\n\n //Классы React\n //Контроль свойств компонента\n //Интерфейсные элементы\n //Таблица данных\n //Интерактивные изображения\n //Подключение компонентов к настройкам приложения\n //Вспомогательные хуки\n //Информация по прогрессу объекта\n\n//---------\n//Константы\n//---------\n\n//Стили\nconst STYLES = {\n BOX_INFO_MAIN: {\n border: \"1px solid\",\n borderRadius: \"25px\",\n height: \"35vh\"\n },\n BOX_INFO_SUB: isMessage => ({\n overflow: \"hidden\",\n textAlign: \"center\",\n width: \"100%\",\n height: \"100%\",\n display: \"flex\",\n flexDirection: \"column\",\n justifyContent: isMessage ? \"center\" : \"flex-start\",\n paddingLeft: \"5px\",\n paddingRight: \"5px\",\n ...(isMessage ? {\n padding: \"5px\"\n } : {\n paddingTop: \"10px\"\n })\n }),\n DETAIL_INFO: {\n display: \"flex\",\n justifyContent: \"space-around\",\n alignItems: \"center\",\n border: \"1px solid\",\n borderRadius: \"25px\",\n height: \"17vh\"\n },\n PRODUCT_SELECTOR_CONTAINER: {\n display: \"flex\",\n justifyContent: \"center\",\n alignItems: \"center\",\n flexDirection: \"column\",\n border: \"1px solid\",\n borderRadius: \"25px\",\n height: \"53vh\",\n marginTop: \"16px\"\n },\n PRODUCT_SELECTOR_MODEL: {\n width: \"70%\"\n },\n PLAN_INFO_MAIN: {\n display: \"flex\",\n flexDirection: \"column\",\n gap: \"16px\"\n },\n PLAN_INFO_SUB: {\n display: \"flex\",\n justifyContent: \"space-between\",\n width: \"280px\",\n borderBottom: \"1px solid\"\n },\n TABLE_DETAILS: {\n height: \"230px\"\n },\n TABLE_DETAILS_HEADER_CELL: maxWidth => ({\n padding: \"2px 2px\",\n fontSize: \"11px\",\n textAlign: \"center\",\n lineHeight: \"1rem\",\n ...(maxWidth ? {\n maxWidth\n } : {})\n }),\n TABLE_DETAILS_DATA_CELL: textAlign => ({\n padding: \"2px 2px\",\n fontSize: \"11px\",\n ...(textAlign ? {\n textAlign\n } : {})\n }),\n TABLE_DETAILS_MORE_BUTTON: {\n borderRadius: \"25px\"\n },\n CARD_DETAILS_CONTAINER: {\n minWidth: \"1200px\",\n maxWidth: \"1400px\"\n },\n CARD_DETAILS_NAVIGATION_STACK: {\n width: \"100%\"\n }\n};\n\n//------------------------------------\n//Вспомогательные функции и компоненты\n//------------------------------------\n\n//Информация о плане\nconst PlanInfo = ({\n plan\n}) => {\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n sx: STYLES.PLAN_INFO_MAIN\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n sx: STYLES.PLAN_INFO_SUB\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_7__[\"default\"], {\n variant: \"UDO_body1\",\n mt: 1\n }, \"\\u041D\\u043E\\u043C\\u0435\\u0440 \\u0431\\u043E\\u0440\\u0442\\u0430:\"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_7__[\"default\"], {\n variant: \"subtitle2\"\n }, plan.SNUMB)), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n sx: STYLES.PLAN_INFO_SUB\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_7__[\"default\"], {\n variant: \"UDO_body1\",\n mt: 1\n }, \"\\u0413\\u043E\\u0434 \\u0432\\u044B\\u043F\\u0443\\u0441\\u043A\\u0430:\"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_7__[\"default\"], {\n variant: \"subtitle2\"\n }, plan.NYEAR))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_progress_box__WEBPACK_IMPORTED_MODULE_5__.ProgressBox, {\n progress: plan.NPROGRESS,\n detail: plan.SDETAIL,\n width: \"110px\",\n height: \"110px\",\n progressVariant: \"subtitle2\",\n detailVariant: \"body3\"\n }));\n};\n\n//Контроль свойств - Информация о плане\nPlanInfo.propTypes = {\n plan: (prop_types__WEBPACK_IMPORTED_MODULE_8___default().object)\n};\n\n//Модель выпуска плана\nconst PlanProductCompositionModel = ({\n model,\n products,\n setCostProductComposition\n}) => {\n //При выборе детали на модели\n const handleProductClick = ({\n item\n }) => {\n const product = products.find(p => p.SMODEL_ID == item.id);\n if (product) setCostProductComposition(pv => ({\n ...pv,\n selectedProduct: {\n ...product\n }\n }));\n };\n\n //Генерация содержимого\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n sx: STYLES.PRODUCT_SELECTOR_MODEL\n }, model ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_components_p8p_svg__WEBPACK_IMPORTED_MODULE_2__.P8PSVG, {\n data: atob(model),\n items: products.map(p => ({\n id: p.SMODEL_ID,\n backgroundColor: p.SMODEL_BG_COLOR || \"red\",\n desc: p.SNAME,\n title: p.SNAME\n })),\n fillOpacity: \"0.3\",\n onItemClick: handleProductClick\n }) : /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_7__[\"default\"], {\n variant: \"subtitle2\"\n }, \"\\u041C\\u043E\\u0434\\u0435\\u043B\\u044C \\u0438\\u0437\\u0434\\u0435\\u043B\\u0438\\u044F \\u043D\\u0435 \\u0437\\u0430\\u0433\\u0440\\u0443\\u0436\\u0435\\u043D\\u0430\")));\n};\n\n//Контроль свойств - Модель выпуска плана\nPlanProductCompositionModel.propTypes = {\n model: (prop_types__WEBPACK_IMPORTED_MODULE_8___default().any),\n products: (prop_types__WEBPACK_IMPORTED_MODULE_8___default().array),\n setCostProductComposition: (prop_types__WEBPACK_IMPORTED_MODULE_8___default().func)\n};\n\n//Генерация представления ячейки заголовка\nconst headCellRender = ({\n columnDef\n}) => ({\n stackProps: {\n justifyContent: \"center\"\n },\n cellStyle: STYLES.TABLE_DETAILS_HEADER_CELL([\"NREMN_LABOUR\", \"NAPPLICABILITY\"].includes(columnDef.name) ? \"90px\" : [\"NDEFICIT\"].includes(columnDef.name) ? \"55px\" : null)\n});\n\n//Генерация заливки строки исходя от значений\nconst dataCellRender = ({\n row,\n columnDef\n}) => ({\n cellStyle: STYLES.TABLE_DETAILS_DATA_CELL([\"SOPERATION\", \"SNOMEN\"].includes(columnDef.name) ? null : \"center\"),\n data: row[columnDef]\n});\n\n//Таблица детализации изделия\nconst ProductDetailsTable = ({\n plan,\n product,\n stored,\n noProductMessage,\n noDataFoundMessage,\n title\n}) => {\n //Собственное состояние\n const [state, setState] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({\n plan: null,\n product: null,\n orders: null,\n pageNumber: 1\n });\n\n //Собственное состояние - данные таблицы\n const {\n data,\n isLoading\n } = (0,_hooks__WEBPACK_IMPORTED_MODULE_4__.useProductDetailsTable)(state.plan, state.product, state.orders, state.pageNumber, stored);\n\n //При изменении состояния сортировки\n const handleOrderChanged = ({\n orders\n }) => setState(pv => ({\n ...pv,\n orders: [...orders],\n pageNumber: 1\n }));\n\n //При изменении количества отображаемых страниц\n const handlePagesCountChanged = () => setState(pv => ({\n ...pv,\n pageNumber: pv.pageNumber + 1\n }));\n\n //При изменении изделия\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n setState(pv => ({\n ...pv,\n plan,\n product,\n orders: null,\n pageNumber: 1\n }));\n }, [product, plan]);\n\n //Генерация содержимого\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n sx: STYLES.BOX_INFO_SUB(!product || data.rows.length === 0)\n }, !product ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_7__[\"default\"], {\n variant: \"UDO_body2\"\n }, noProductMessage) : /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_7__[\"default\"], {\n variant: \"h4\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"b\", null, title)), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_components_p8p_data_grid__WEBPACK_IMPORTED_MODULE_1__.P8PDataGrid, _extends({}, _config_wrapper__WEBPACK_IMPORTED_MODULE_3__.P8P_DATA_GRID_CONFIG_PROPS, {\n noDataFoundText: isLoading ? \"\" : noDataFoundMessage,\n containerComponentProps: {\n sx: STYLES.TABLE_DETAILS,\n elevation: 0\n },\n columnsDef: data.columnsDef,\n rows: data.rows,\n size: _components_p8p_data_grid__WEBPACK_IMPORTED_MODULE_1__.P8P_DATA_GRID_SIZE.SMALL,\n morePages: data.morePages,\n morePagesBtnProps: {\n sx: STYLES.TABLE_DETAILS_MORE_BUTTON\n },\n fixedHeader: true,\n reloading: false,\n dataCellRender: dataCellRender,\n headCellRender: headCellRender,\n onOrderChanged: handleOrderChanged,\n onPagesCountChanged: handlePagesCountChanged\n }))));\n};\n\n//Контроль свойств - Таблица детализации изделия\nProductDetailsTable.propTypes = {\n plan: (prop_types__WEBPACK_IMPORTED_MODULE_8___default().number).isRequired,\n product: (prop_types__WEBPACK_IMPORTED_MODULE_8___default().number),\n stored: (prop_types__WEBPACK_IMPORTED_MODULE_8___default().string).isRequired,\n noProductMessage: (prop_types__WEBPACK_IMPORTED_MODULE_8___default().string).isRequired,\n noDataFoundMessage: (prop_types__WEBPACK_IMPORTED_MODULE_8___default().string).isRequired,\n title: (prop_types__WEBPACK_IMPORTED_MODULE_8___default().string).isRequired\n};\n\n//-----------\n//Тело модуля\n//-----------\n\n//Детализация по объекту\nconst PlanDetail = ({\n plan,\n disableNavigatePrev = false,\n disableNavigateNext = false,\n onNavigate,\n onBack\n}) => {\n //Собственное состояние - данные производственных составов SVG\n const [costProductComposition, setCostProductComposition] = (0,_hooks__WEBPACK_IMPORTED_MODULE_4__.useCostProductComposition)(plan.NRN);\n\n //Формируем представление\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_9__[\"default\"], {\n maxWidth: false,\n sx: STYLES.CARD_DETAILS_CONTAINER\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_10__[\"default\"], {\n container: true,\n direction: \"row\",\n justifyContent: \"center\",\n alignItems: \"center\",\n spacing: 0\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_10__[\"default\"], {\n item: true,\n display: \"flex\",\n justifyContent: \"center\",\n xs: 1\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_11__[\"default\"], {\n display: \"flex\",\n direction: \"row\",\n justifyContent: \"flex-end\",\n alignItems: \"center\",\n sx: STYLES.CARD_DETAILS_NAVIGATION_STACK\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_12__[\"default\"], {\n disabled: disableNavigatePrev,\n onClick: () => onNavigate ? onNavigate(-1) : null\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_13__[\"default\"], null, \"navigate_before\")))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_10__[\"default\"], {\n item: true,\n xs: 10\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_9__[\"default\"], {\n maxWidth: false\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_14__[\"default\"], {\n onClick: () => onBack ? onBack() : null\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_11__[\"default\"], {\n direction: \"row\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_13__[\"default\"], null, \"chevron_left\"), \"\\u041D\\u0430\\u0437\\u0430\\u0434\")), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_10__[\"default\"], {\n container: true,\n spacing: 2,\n sx: {\n paddingTop: \"5px\"\n }\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_10__[\"default\"], {\n item: true,\n xs: 5\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n sx: STYLES.BOX_INFO_MAIN\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(ProductDetailsTable, {\n plan: plan.NRN,\n product: costProductComposition.selectedProduct?.NRN,\n stored: \"PKG_P8PANELS_MECHREC.FCROUTLST_DG_BY_PRDCMPSP_GET\",\n noProductMessage: \"Укажите элемент модели, чтобы увидеть информацию о маршрутных картах\",\n noDataFoundMessage: \"Маршрутные карты не найдены\",\n title: \"Маршрутные карты\"\n })), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n sx: STYLES.BOX_INFO_MAIN,\n mt: 2\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(ProductDetailsTable, {\n plan: plan.NRN,\n product: costProductComposition.selectedProduct?.NRN,\n stored: \"PKG_P8PANELS_MECHREC.FCDELIVSH_DG_BY_PRDCMPSP_GET\",\n noProductMessage: \"Укажите элемент модели, чтобы увидеть информацию о комплектовочных ведомостях\",\n noDataFoundMessage: \"Комплектовочные ведомости не найдены\",\n title: \"Дефицит комплектации\"\n }))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_10__[\"default\"], {\n item: true,\n xs: 7\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n sx: STYLES.DETAIL_INFO\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(PlanInfo, {\n plan: plan\n })), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n sx: STYLES.PRODUCT_SELECTOR_CONTAINER\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(PlanProductCompositionModel, {\n model: costProductComposition.model,\n products: costProductComposition.products,\n setCostProductComposition: setCostProductComposition\n })))))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_10__[\"default\"], {\n item: true,\n display: \"flex\",\n justifyContent: \"center\",\n xs: 1\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_11__[\"default\"], {\n display: \"flex\",\n direction: \"row\",\n justifyContent: \"flex-start\",\n alignItems: \"center\",\n sx: STYLES.CARD_DETAILS_NAVIGATION_STACK\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_12__[\"default\"], {\n disabled: disableNavigateNext,\n onClick: () => onNavigate ? onNavigate(1) : null\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_13__[\"default\"], null, \"navigate_next\"))))));\n};\n\n//Контроль свойств - Детализация по объекту\nPlanDetail.propTypes = {\n plan: (prop_types__WEBPACK_IMPORTED_MODULE_8___default().object),\n disableNavigatePrev: (prop_types__WEBPACK_IMPORTED_MODULE_8___default().bool),\n disableNavigateNext: (prop_types__WEBPACK_IMPORTED_MODULE_8___default().bool),\n onNavigate: (prop_types__WEBPACK_IMPORTED_MODULE_8___default().func),\n onBack: (prop_types__WEBPACK_IMPORTED_MODULE_8___default().func)\n};\n\n//----------------\n//Интерфейс модуля\n//----------------\n\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/panels/mech_rec_assembly_mon/components/plan_detail.js?"); /***/ }), @@ -3821,7 +3821,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ useCostProductComposition: () => (/* binding */ useCostProductComposition),\n/* harmony export */ useFilteredPlanCtlgs: () => (/* binding */ useFilteredPlanCtlgs),\n/* harmony export */ useMechRecAssemblyMon: () => (/* binding */ useMechRecAssemblyMon),\n/* harmony export */ useProductDetailsTable: () => (/* binding */ useProductDetailsTable)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _context_backend__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../context/backend */ \"./app/context/backend.js\");\n/* harmony import */ var _core_utils__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../core/utils */ \"./app/core/utils.js\");\n/*\r\n Парус 8 - Панели мониторинга - ПУП - Мониторинг сборки изделий\r\n Кастомные хуки\r\n*/\n\n//---------------------\n//Подключение библиотек\n//---------------------\n\n //Классы React\n //Контекст взаимодействия с сервером\n //Вспомогательные функции\n\n//---------\n//Константы\n//---------\n\n//Размер страницы данных\nconst DATA_GRID_PAGE_SIZE = 0;\n\n//-----------\n//Тело модуля\n//-----------\n\n//Клиентский отбор каталогов по поисковой фразе и наличию планов\nconst useFilteredPlanCtlgs = (planCtlgs, filter) => {\n const filteredPlanCtlgs = react__WEBPACK_IMPORTED_MODULE_0___default().useMemo(() => {\n return planCtlgs.filter(catalog => catalog.SNAME.toString().toLowerCase().includes(filter.ctlgName) && (filter.haveDocs ? catalog.NCOUNT_DOCS > 0 : catalog.NCOUNT_DOCS >= 0));\n }, [planCtlgs, filter]);\n return filteredPlanCtlgs;\n};\n\n//Хук для основной таблицы панели\nconst useMechRecAssemblyMon = () => {\n //Собственное состояние\n let [state, setState] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({\n init: false,\n showPlanList: false,\n planCtlgs: [],\n planCtlgsLoaded: false,\n selectedPlanCtlg: {},\n plans: [],\n plansLoaded: false,\n selectedPlan: {}\n });\n\n //Подключение к контексту взаимодействия с сервером\n const {\n executeStored\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_backend__WEBPACK_IMPORTED_MODULE_1__[\"BackEndСtx\"]);\n\n //Инициализация каталогов планов\n const initPlanCtlgs = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async () => {\n if (!state.init) {\n const data = await executeStored({\n stored: \"PKG_P8PANELS_MECHREC.FCPRODPLAN_AM_CTLG_INIT\",\n args: {},\n respArg: \"COUT\",\n isArray: name => name === \"XFCPRODPLAN_CRNS\"\n });\n setState(pv => ({\n ...pv,\n init: true,\n planCtlgs: [...(data?.XFCPRODPLAN_CRNS || [])],\n planCtlgsLoaded: true\n }));\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [state.init, executeStored]);\n\n //Получение информации о планах каталога\n const loadPlans = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async NCRN => {\n if (NCRN) {\n const data = await executeStored({\n stored: \"PKG_P8PANELS_MECHREC.FCPRODPLAN_GET\",\n args: {\n NCRN: NCRN\n },\n respArg: \"COUT\",\n isArray: name => name === \"XFCPRODPLAN_INFO\"\n });\n setState(pv => ({\n ...pv,\n init: true,\n plans: [...(data?.XFCPRODPLAN_INFO || [])],\n plansLoaded: true\n }));\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [executeStored]);\n\n //Выбор каталога планов\n const selectPlanCtlg = planCtlg => {\n setState(pv => ({\n ...pv,\n selectedPlanCtlg: {\n ...planCtlg\n },\n selectedPlan: {},\n showPlanList: false\n }));\n };\n\n //Сброс выбора каталога планов\n const unselectPlanCtlg = () => setState(pv => ({\n ...pv,\n selectedPlanCtlg: {},\n selectedPlan: {},\n showPlanList: false\n }));\n\n //При подключении компонента к странице\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n initPlanCtlgs();\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n //При изменении каталога\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n //Если каталог выбран\n if (state.selectedPlanCtlg) {\n loadPlans(state.selectedPlanCtlg.NRN);\n } else {\n setState(pv => ({\n ...pv,\n plans: [],\n plansLoaded: false\n }));\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [state.selectedPlanCtlg]);\n return [state, setState, selectPlanCtlg, unselectPlanCtlg];\n};\n\n//Хук для информации по производственным составам\nconst useCostProductComposition = nProdPlan => {\n //Собственное состояние\n let [costProductComposition, setCostProductComposition] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({\n init: false,\n showPlanList: false,\n products: [],\n productsLoaded: false,\n model: null,\n selectedProduct: null\n });\n\n //Подключение к контексту взаимодействия с сервером\n const {\n executeStored\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_backend__WEBPACK_IMPORTED_MODULE_1__[\"BackEndСtx\"]);\n\n //Инициализация производственных составов\n const initCostProductComposition = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async () => {\n if (!costProductComposition.init) {\n const data = await executeStored({\n stored: \"PKG_P8PANELS_MECHREC.FCPRODCMP_DETAILS_GET\",\n args: {\n NFCPRODPLAN: nProdPlan\n },\n respArg: \"COUT\",\n isArray: name => name === \"XFCPRODCMP\"\n });\n setCostProductComposition(pv => ({\n ...pv,\n init: true,\n products: [...(data?.XFCPRODCMP || [])],\n productsLoaded: true,\n model: data?.BMODEL\n }));\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [costProductComposition.init, executeStored]);\n\n //При подключении компонента к странице\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n initCostProductComposition();\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n return [costProductComposition, setCostProductComposition];\n};\n\n//Хук для таблицы детализации изделия\nconst useProductDetailsTable = (plan, product, orders, pageNumber, stored) => {\n //Собственное состояние - флаг загрузки\n const [isLoading, setLoading] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(true);\n\n //Собственное состояние - таблица данных\n const [data, setData] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({\n columnsDef: [],\n rows: [],\n morePages: true\n });\n\n //Подключение к контексту взаимодействия с сервером\n const {\n executeStored,\n SERV_DATA_TYPE_CLOB\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_backend__WEBPACK_IMPORTED_MODULE_1__[\"BackEndСtx\"]);\n\n //Загрузка данных при изменении зависимостей\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n const loadData = async () => {\n try {\n setLoading(true);\n const data = await executeStored({\n stored,\n args: {\n NPRODCMPSP: product,\n NFCPRODPLAN: plan,\n CORDERS: {\n VALUE: (0,_core_utils__WEBPACK_IMPORTED_MODULE_2__.object2Base64XML)(orders, {\n arrayNodeName: \"orders\"\n }),\n SDATA_TYPE: SERV_DATA_TYPE_CLOB\n },\n NPAGE_NUMBER: pageNumber,\n NPAGE_SIZE: DATA_GRID_PAGE_SIZE,\n NINCLUDE_DEF: 1\n },\n respArg: \"COUT\"\n });\n setData(pv => ({\n ...pv,\n columnsDef: data.XCOLUMNS_DEF ? [...data.XCOLUMNS_DEF] : pv.columnsDef,\n rows: pageNumber == 1 ? [...(data.XROWS || [])] : [...pv.rows, ...(data.XROWS || [])],\n morePages: DATA_GRID_PAGE_SIZE == 0 ? false : (data.XROWS || []).length >= DATA_GRID_PAGE_SIZE\n }));\n } finally {\n setLoading(false);\n }\n };\n if (plan && product) loadData();\n }, [plan, product, orders, pageNumber, stored, executeStored, SERV_DATA_TYPE_CLOB]);\n\n //Вернём данные\n return {\n data,\n isLoading\n };\n};\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/panels/mech_rec_assembly_mon/hooks.js?"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ useCostProductComposition: () => (/* binding */ useCostProductComposition),\n/* harmony export */ useFilteredPlanCtlgs: () => (/* binding */ useFilteredPlanCtlgs),\n/* harmony export */ useMechRecAssemblyMon: () => (/* binding */ useMechRecAssemblyMon),\n/* harmony export */ useProductDetailsTable: () => (/* binding */ useProductDetailsTable)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _context_backend__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../context/backend */ \"./app/context/backend.js\");\n/* harmony import */ var _core_utils__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../core/utils */ \"./app/core/utils.js\");\n/*\r\n Парус 8 - Панели мониторинга - ПУП - Мониторинг сборки изделий\r\n Кастомные хуки\r\n*/\n\n//---------------------\n//Подключение библиотек\n//---------------------\n\n //Классы React\n //Контекст взаимодействия с сервером\n //Вспомогательные функции\n\n//---------\n//Константы\n//---------\n\n//Размер страницы данных\nconst DATA_GRID_PAGE_SIZE = 50;\n\n//-----------\n//Тело модуля\n//-----------\n\n//Клиентский отбор каталогов по поисковой фразе и наличию планов\nconst useFilteredPlanCtlgs = (planCtlgs, filter) => {\n const filteredPlanCtlgs = react__WEBPACK_IMPORTED_MODULE_0___default().useMemo(() => {\n return planCtlgs.filter(catalog => catalog.SNAME.toString().toLowerCase().includes(filter.ctlgName) && (filter.haveDocs ? catalog.NCOUNT_DOCS > 0 : catalog.NCOUNT_DOCS >= 0));\n }, [planCtlgs, filter]);\n return filteredPlanCtlgs;\n};\n\n//Хук для основной таблицы панели\nconst useMechRecAssemblyMon = () => {\n //Собственное состояние\n let [state, setState] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({\n init: false,\n showPlanList: false,\n planCtlgs: [],\n planCtlgsLoaded: false,\n selectedPlanCtlg: {},\n plans: [],\n plansLoaded: false,\n selectedPlan: {}\n });\n\n //Подключение к контексту взаимодействия с сервером\n const {\n executeStored\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_backend__WEBPACK_IMPORTED_MODULE_1__[\"BackEndСtx\"]);\n\n //Инициализация каталогов планов\n const initPlanCtlgs = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async () => {\n if (!state.init) {\n const data = await executeStored({\n stored: \"PKG_P8PANELS_MECHREC.FCPRODPLAN_AM_CTLG_INIT\",\n args: {},\n respArg: \"COUT\",\n isArray: name => name === \"XFCPRODPLAN_CRNS\"\n });\n setState(pv => ({\n ...pv,\n init: true,\n planCtlgs: [...(data?.XFCPRODPLAN_CRNS || [])],\n planCtlgsLoaded: true\n }));\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [state.init, executeStored]);\n\n //Получение информации о планах каталога\n const loadPlans = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async NCRN => {\n if (NCRN) {\n const data = await executeStored({\n stored: \"PKG_P8PANELS_MECHREC.FCPRODPLAN_GET\",\n args: {\n NCRN: NCRN\n },\n respArg: \"COUT\",\n isArray: name => name === \"XFCPRODPLAN_INFO\"\n });\n setState(pv => ({\n ...pv,\n init: true,\n plans: [...(data?.XFCPRODPLAN_INFO || [])],\n plansLoaded: true\n }));\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [executeStored]);\n\n //Выбор каталога планов\n const selectPlanCtlg = planCtlg => {\n setState(pv => ({\n ...pv,\n selectedPlanCtlg: {\n ...planCtlg\n },\n selectedPlan: {},\n showPlanList: false\n }));\n };\n\n //Сброс выбора каталога планов\n const unselectPlanCtlg = () => setState(pv => ({\n ...pv,\n selectedPlanCtlg: {},\n selectedPlan: {},\n showPlanList: false\n }));\n\n //При подключении компонента к странице\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n initPlanCtlgs();\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n //При изменении каталога\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n //Если каталог выбран\n if (state.selectedPlanCtlg) {\n loadPlans(state.selectedPlanCtlg.NRN);\n } else {\n setState(pv => ({\n ...pv,\n plans: [],\n plansLoaded: false\n }));\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [state.selectedPlanCtlg]);\n return [state, setState, selectPlanCtlg, unselectPlanCtlg];\n};\n\n//Хук для информации по производственным составам\nconst useCostProductComposition = nProdPlan => {\n //Собственное состояние\n let [costProductComposition, setCostProductComposition] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({\n init: false,\n showPlanList: false,\n products: [],\n productsLoaded: false,\n model: null,\n selectedProduct: null\n });\n\n //Подключение к контексту взаимодействия с сервером\n const {\n executeStored\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_backend__WEBPACK_IMPORTED_MODULE_1__[\"BackEndСtx\"]);\n\n //Инициализация производственных составов\n const initCostProductComposition = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async () => {\n if (!costProductComposition.init) {\n const data = await executeStored({\n stored: \"PKG_P8PANELS_MECHREC.FCPRODCMP_DETAILS_GET\",\n args: {\n NFCPRODPLAN: nProdPlan\n },\n respArg: \"COUT\",\n isArray: name => name === \"XFCPRODCMP\"\n });\n setCostProductComposition(pv => ({\n ...pv,\n init: true,\n products: [...(data?.XFCPRODCMP || [])],\n productsLoaded: true,\n model: data?.BMODEL\n }));\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [costProductComposition.init, executeStored]);\n\n //При подключении компонента к странице\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n initCostProductComposition();\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n return [costProductComposition, setCostProductComposition];\n};\n\n//Хук для таблицы детализации изделия\nconst useProductDetailsTable = (plan, product, orders, pageNumber, stored) => {\n //Собственное состояние - флаг загрузки\n const [isLoading, setLoading] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(true);\n\n //Собственное состояние - таблица данных\n const [data, setData] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({\n columnsDef: [],\n rows: [],\n morePages: true\n });\n\n //Подключение к контексту взаимодействия с сервером\n const {\n executeStored,\n SERV_DATA_TYPE_CLOB\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_backend__WEBPACK_IMPORTED_MODULE_1__[\"BackEndСtx\"]);\n\n //Загрузка данных при изменении зависимостей\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n const loadData = async () => {\n try {\n setLoading(true);\n const data = await executeStored({\n stored,\n args: {\n NPRODCMPSP: product,\n NFCPRODPLAN: plan,\n CORDERS: {\n VALUE: (0,_core_utils__WEBPACK_IMPORTED_MODULE_2__.object2Base64XML)(orders, {\n arrayNodeName: \"orders\"\n }),\n SDATA_TYPE: SERV_DATA_TYPE_CLOB\n },\n NPAGE_NUMBER: pageNumber,\n NPAGE_SIZE: DATA_GRID_PAGE_SIZE,\n NINCLUDE_DEF: pageNumber == 1 ? 1 : 0\n },\n respArg: \"COUT\"\n });\n setData(pv => ({\n ...pv,\n columnsDef: data.XCOLUMNS_DEF ? [...data.XCOLUMNS_DEF] : pv.columnsDef,\n rows: pageNumber == 1 ? [...(data.XROWS || [])] : [...pv.rows, ...(data.XROWS || [])],\n morePages: DATA_GRID_PAGE_SIZE == 0 ? false : (data.XROWS || []).length >= DATA_GRID_PAGE_SIZE\n }));\n } finally {\n setLoading(false);\n }\n };\n if (plan && product) loadData();\n }, [plan, product, orders, pageNumber, stored, executeStored, SERV_DATA_TYPE_CLOB]);\n\n //Вернём данные\n return {\n data,\n isLoading\n };\n};\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/panels/mech_rec_assembly_mon/hooks.js?"); /***/ }), From b71db7662968f043fe367244b782e9bc3fa68b24 Mon Sep 17 00:00:00 2001 From: Mikhail Chechnev Date: Fri, 24 May 2024 20:28:50 +0300 Subject: [PATCH 56/76] =?UTF-8?q?WEB=20APP:=20=D0=9F=D0=B0=D0=BD=D0=B5?= =?UTF-8?q?=D0=BB=D1=8C=20"=D0=9C=D0=BE=D0=BD=D0=B8=D1=82=D0=BE=D1=80?= =?UTF-8?q?=D0=B8=D0=BD=D0=B3=20=D1=81=D0=B1=D0=BE=D1=80=D0=BA=D0=B8=20?= =?UTF-8?q?=D0=B8=D0=B7=D0=B4=D0=B5=D0=BB=D0=B8=D1=8F"=20-=20=D0=B8=D1=81?= =?UTF-8?q?=D0=BF=D1=80=D0=B0=D0=B2=D0=BB=D0=B5=D0=BD=D0=B0=20=D0=BE=D1=88?= =?UTF-8?q?=D0=B8=D0=B1=D0=BA=D0=B0=20=D0=B8=D0=BD=D0=B8=D1=86=D0=B8=D0=B0?= =?UTF-8?q?=D0=BB=D0=B8=D0=B7=D0=B0=D1=86=D0=B8=D0=B8=20=D0=B4=D0=B5=D1=82?= =?UTF-8?q?=D0=B0=D0=BB=D1=8C=D0=BD=D0=BE=D0=B9=20=D0=BA=D0=B0=D1=80=D1=82?= =?UTF-8?q?=D0=BE=D1=87=D0=BA=D0=B8=20=D0=BF=D1=80=D0=B8=20=D0=BD=D0=B0?= =?UTF-8?q?=D0=B2=D0=B8=D0=B3=D0=B0=D1=86=D0=B8=D0=B8=20=D0=BC=D0=B5=D0=B6?= =?UTF-8?q?=D0=B4=D1=83=20=D0=BD=D0=B8=D0=BC=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../components/plan_detail.js | 23 +++++++++++---- app/panels/mech_rec_assembly_mon/hooks.js | 28 ++++++++----------- 2 files changed, 28 insertions(+), 23 deletions(-) diff --git a/app/panels/mech_rec_assembly_mon/components/plan_detail.js b/app/panels/mech_rec_assembly_mon/components/plan_detail.js index 03f2971..9a9c47a 100644 --- a/app/panels/mech_rec_assembly_mon/components/plan_detail.js +++ b/app/panels/mech_rec_assembly_mon/components/plan_detail.js @@ -123,11 +123,11 @@ PlanInfo.propTypes = { }; //Модель выпуска плана -const PlanProductCompositionModel = ({ model, products, setCostProductComposition }) => { +const PlanProductCompositionModel = ({ model, products, onProductSelect }) => { //При выборе детали на модели const handleProductClick = ({ item }) => { const product = products.find(p => p.SMODEL_ID == item.id); - if (product) setCostProductComposition(pv => ({ ...pv, selectedProduct: { ...product } })); + if (product && onProductSelect) onProductSelect(product); }; //Генерация содержимого @@ -153,7 +153,7 @@ const PlanProductCompositionModel = ({ model, products, setCostProductCompositio PlanProductCompositionModel.propTypes = { model: PropTypes.any, products: PropTypes.array, - setCostProductComposition: PropTypes.func + onProductSelect: PropTypes.func }; //Генерация представления ячейки заголовка @@ -239,13 +239,24 @@ const PlanDetail = ({ plan, disableNavigatePrev = false, disableNavigateNext = f //Собственное состояние - данные производственных составов SVG const [costProductComposition, setCostProductComposition] = useCostProductComposition(plan.NRN); + //Выбор элемента изделия + const setProduct = product => { + setCostProductComposition(pv => ({ ...pv, selectedProduct: product ? { ...product } : null })); + }; + + //При навигации между карточками + const handleNavigate = direction => { + setProduct(null); + if (onNavigate) onNavigate(direction); + }; + //Формируем представление return ( - (onNavigate ? onNavigate(-1) : null)}> + handleNavigate(-1)}> navigate_before @@ -289,7 +300,7 @@ const PlanDetail = ({ plan, disableNavigatePrev = false, disableNavigateNext = f @@ -298,7 +309,7 @@ const PlanDetail = ({ plan, disableNavigatePrev = false, disableNavigateNext = f - (onNavigate ? onNavigate(1) : null)}> + handleNavigate(1)}> navigate_next diff --git a/app/panels/mech_rec_assembly_mon/hooks.js b/app/panels/mech_rec_assembly_mon/hooks.js index 41a5a6a..de1c9a1 100644 --- a/app/panels/mech_rec_assembly_mon/hooks.js +++ b/app/panels/mech_rec_assembly_mon/hooks.js @@ -123,10 +123,9 @@ const useMechRecAssemblyMon = () => { }; //Хук для информации по производственным составам -const useCostProductComposition = nProdPlan => { +const useCostProductComposition = plan => { //Собственное состояние let [costProductComposition, setCostProductComposition] = useState({ - init: false, showPlanList: false, products: [], productsLoaded: false, @@ -137,32 +136,27 @@ const useCostProductComposition = nProdPlan => { //Подключение к контексту взаимодействия с сервером const { executeStored } = useContext(BackEndСtx); - //Инициализация производственных составов - const initCostProductComposition = useCallback(async () => { - if (!costProductComposition.init) { + //При подключении компонента к странице + useEffect(() => { + const loadData = async () => { const data = await executeStored({ stored: "PKG_P8PANELS_MECHREC.FCPRODCMP_DETAILS_GET", - args: { NFCPRODPLAN: nProdPlan }, + args: { NFCPRODPLAN: plan }, respArg: "COUT", isArray: name => name === "XFCPRODCMP" }); setCostProductComposition(pv => ({ ...pv, - init: true, products: [...(data?.XFCPRODCMP || [])], productsLoaded: true, - model: data?.BMODEL + model: data?.BMODEL, + selectedProduct: null })); - } - // eslint-disable-next-line react-hooks/exhaustive-deps - }, [costProductComposition.init, executeStored]); - - //При подключении компонента к странице - useEffect(() => { - initCostProductComposition(); - // eslint-disable-next-line react-hooks/exhaustive-deps - }, []); + }; + if (plan) loadData(); + }, [plan, executeStored]); + //Вернём данные return [costProductComposition, setCostProductComposition]; }; From 462e55c5ab1fca3bb0f531cfbabfe7c25146c348 Mon Sep 17 00:00:00 2001 From: Mikhail Chechnev Date: Fri, 24 May 2024 20:29:24 +0300 Subject: [PATCH 57/76] =?UTF-8?q?WEB=20APP:=20=D0=A1=D0=B2=D0=B5=D0=B6?= =?UTF-8?q?=D0=B0=D1=8F=20=D1=81=D0=B1=D0=BE=D1=80=D0=BA=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- dist/p8-panels.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/dist/p8-panels.js b/dist/p8-panels.js index 365f76c..bb98985 100644 --- a/dist/p8-panels.js +++ b/dist/p8-panels.js @@ -3777,7 +3777,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ PlanDetail: () => (/* binding */ PlanDetail)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! prop-types */ \"./node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_8___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_8__);\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Box/Box.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Typography/Typography.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Container/Container.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Grid/Grid.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Stack/Stack.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/IconButton/IconButton.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Icon/Icon.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Button/Button.js\");\n/* harmony import */ var _components_p8p_data_grid__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../components/p8p_data_grid */ \"./app/components/p8p_data_grid.js\");\n/* harmony import */ var _components_p8p_svg__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../../components/p8p_svg */ \"./app/components/p8p_svg.js\");\n/* harmony import */ var _config_wrapper__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../../config_wrapper */ \"./app/config_wrapper.js\");\n/* harmony import */ var _hooks__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../hooks */ \"./app/panels/mech_rec_assembly_mon/hooks.js\");\n/* harmony import */ var _progress_box__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./progress_box */ \"./app/panels/mech_rec_assembly_mon/components/progress_box.js\");\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n/*\r\n Парус 8 - Панели мониторинга - ПУП - Мониторинг сборки изделий\r\n Панель мониторинга: Детализация по объекту\r\n*/\n\n//---------------------\n//Подключение библиотек\n//---------------------\n\n //Классы React\n //Контроль свойств компонента\n //Интерфейсные элементы\n //Таблица данных\n //Интерактивные изображения\n //Подключение компонентов к настройкам приложения\n //Вспомогательные хуки\n //Информация по прогрессу объекта\n\n//---------\n//Константы\n//---------\n\n//Стили\nconst STYLES = {\n BOX_INFO_MAIN: {\n border: \"1px solid\",\n borderRadius: \"25px\",\n height: \"35vh\"\n },\n BOX_INFO_SUB: isMessage => ({\n overflow: \"hidden\",\n textAlign: \"center\",\n width: \"100%\",\n height: \"100%\",\n display: \"flex\",\n flexDirection: \"column\",\n justifyContent: isMessage ? \"center\" : \"flex-start\",\n paddingLeft: \"5px\",\n paddingRight: \"5px\",\n ...(isMessage ? {\n padding: \"5px\"\n } : {\n paddingTop: \"10px\"\n })\n }),\n DETAIL_INFO: {\n display: \"flex\",\n justifyContent: \"space-around\",\n alignItems: \"center\",\n border: \"1px solid\",\n borderRadius: \"25px\",\n height: \"17vh\"\n },\n PRODUCT_SELECTOR_CONTAINER: {\n display: \"flex\",\n justifyContent: \"center\",\n alignItems: \"center\",\n flexDirection: \"column\",\n border: \"1px solid\",\n borderRadius: \"25px\",\n height: \"53vh\",\n marginTop: \"16px\"\n },\n PRODUCT_SELECTOR_MODEL: {\n width: \"70%\"\n },\n PLAN_INFO_MAIN: {\n display: \"flex\",\n flexDirection: \"column\",\n gap: \"16px\"\n },\n PLAN_INFO_SUB: {\n display: \"flex\",\n justifyContent: \"space-between\",\n width: \"280px\",\n borderBottom: \"1px solid\"\n },\n TABLE_DETAILS: {\n height: \"230px\"\n },\n TABLE_DETAILS_HEADER_CELL: maxWidth => ({\n padding: \"2px 2px\",\n fontSize: \"11px\",\n textAlign: \"center\",\n lineHeight: \"1rem\",\n ...(maxWidth ? {\n maxWidth\n } : {})\n }),\n TABLE_DETAILS_DATA_CELL: textAlign => ({\n padding: \"2px 2px\",\n fontSize: \"11px\",\n ...(textAlign ? {\n textAlign\n } : {})\n }),\n TABLE_DETAILS_MORE_BUTTON: {\n borderRadius: \"25px\"\n },\n CARD_DETAILS_CONTAINER: {\n minWidth: \"1200px\",\n maxWidth: \"1400px\"\n },\n CARD_DETAILS_NAVIGATION_STACK: {\n width: \"100%\"\n }\n};\n\n//------------------------------------\n//Вспомогательные функции и компоненты\n//------------------------------------\n\n//Информация о плане\nconst PlanInfo = ({\n plan\n}) => {\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n sx: STYLES.PLAN_INFO_MAIN\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n sx: STYLES.PLAN_INFO_SUB\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_7__[\"default\"], {\n variant: \"UDO_body1\",\n mt: 1\n }, \"\\u041D\\u043E\\u043C\\u0435\\u0440 \\u0431\\u043E\\u0440\\u0442\\u0430:\"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_7__[\"default\"], {\n variant: \"subtitle2\"\n }, plan.SNUMB)), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n sx: STYLES.PLAN_INFO_SUB\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_7__[\"default\"], {\n variant: \"UDO_body1\",\n mt: 1\n }, \"\\u0413\\u043E\\u0434 \\u0432\\u044B\\u043F\\u0443\\u0441\\u043A\\u0430:\"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_7__[\"default\"], {\n variant: \"subtitle2\"\n }, plan.NYEAR))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_progress_box__WEBPACK_IMPORTED_MODULE_5__.ProgressBox, {\n progress: plan.NPROGRESS,\n detail: plan.SDETAIL,\n width: \"110px\",\n height: \"110px\",\n progressVariant: \"subtitle2\",\n detailVariant: \"body3\"\n }));\n};\n\n//Контроль свойств - Информация о плане\nPlanInfo.propTypes = {\n plan: (prop_types__WEBPACK_IMPORTED_MODULE_8___default().object)\n};\n\n//Модель выпуска плана\nconst PlanProductCompositionModel = ({\n model,\n products,\n setCostProductComposition\n}) => {\n //При выборе детали на модели\n const handleProductClick = ({\n item\n }) => {\n const product = products.find(p => p.SMODEL_ID == item.id);\n if (product) setCostProductComposition(pv => ({\n ...pv,\n selectedProduct: {\n ...product\n }\n }));\n };\n\n //Генерация содержимого\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n sx: STYLES.PRODUCT_SELECTOR_MODEL\n }, model ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_components_p8p_svg__WEBPACK_IMPORTED_MODULE_2__.P8PSVG, {\n data: atob(model),\n items: products.map(p => ({\n id: p.SMODEL_ID,\n backgroundColor: p.SMODEL_BG_COLOR || \"red\",\n desc: p.SNAME,\n title: p.SNAME\n })),\n fillOpacity: \"0.3\",\n onItemClick: handleProductClick\n }) : /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_7__[\"default\"], {\n variant: \"subtitle2\"\n }, \"\\u041C\\u043E\\u0434\\u0435\\u043B\\u044C \\u0438\\u0437\\u0434\\u0435\\u043B\\u0438\\u044F \\u043D\\u0435 \\u0437\\u0430\\u0433\\u0440\\u0443\\u0436\\u0435\\u043D\\u0430\")));\n};\n\n//Контроль свойств - Модель выпуска плана\nPlanProductCompositionModel.propTypes = {\n model: (prop_types__WEBPACK_IMPORTED_MODULE_8___default().any),\n products: (prop_types__WEBPACK_IMPORTED_MODULE_8___default().array),\n setCostProductComposition: (prop_types__WEBPACK_IMPORTED_MODULE_8___default().func)\n};\n\n//Генерация представления ячейки заголовка\nconst headCellRender = ({\n columnDef\n}) => ({\n stackProps: {\n justifyContent: \"center\"\n },\n cellStyle: STYLES.TABLE_DETAILS_HEADER_CELL([\"NREMN_LABOUR\", \"NAPPLICABILITY\"].includes(columnDef.name) ? \"90px\" : [\"NDEFICIT\"].includes(columnDef.name) ? \"55px\" : null)\n});\n\n//Генерация заливки строки исходя от значений\nconst dataCellRender = ({\n row,\n columnDef\n}) => ({\n cellStyle: STYLES.TABLE_DETAILS_DATA_CELL([\"SOPERATION\", \"SNOMEN\"].includes(columnDef.name) ? null : \"center\"),\n data: row[columnDef]\n});\n\n//Таблица детализации изделия\nconst ProductDetailsTable = ({\n plan,\n product,\n stored,\n noProductMessage,\n noDataFoundMessage,\n title\n}) => {\n //Собственное состояние\n const [state, setState] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({\n plan: null,\n product: null,\n orders: null,\n pageNumber: 1\n });\n\n //Собственное состояние - данные таблицы\n const {\n data,\n isLoading\n } = (0,_hooks__WEBPACK_IMPORTED_MODULE_4__.useProductDetailsTable)(state.plan, state.product, state.orders, state.pageNumber, stored);\n\n //При изменении состояния сортировки\n const handleOrderChanged = ({\n orders\n }) => setState(pv => ({\n ...pv,\n orders: [...orders],\n pageNumber: 1\n }));\n\n //При изменении количества отображаемых страниц\n const handlePagesCountChanged = () => setState(pv => ({\n ...pv,\n pageNumber: pv.pageNumber + 1\n }));\n\n //При изменении изделия\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n setState(pv => ({\n ...pv,\n plan,\n product,\n orders: null,\n pageNumber: 1\n }));\n }, [product, plan]);\n\n //Генерация содержимого\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n sx: STYLES.BOX_INFO_SUB(!product || data.rows.length === 0)\n }, !product ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_7__[\"default\"], {\n variant: \"UDO_body2\"\n }, noProductMessage) : /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_7__[\"default\"], {\n variant: \"h4\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"b\", null, title)), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_components_p8p_data_grid__WEBPACK_IMPORTED_MODULE_1__.P8PDataGrid, _extends({}, _config_wrapper__WEBPACK_IMPORTED_MODULE_3__.P8P_DATA_GRID_CONFIG_PROPS, {\n noDataFoundText: isLoading ? \"\" : noDataFoundMessage,\n containerComponentProps: {\n sx: STYLES.TABLE_DETAILS,\n elevation: 0\n },\n columnsDef: data.columnsDef,\n rows: data.rows,\n size: _components_p8p_data_grid__WEBPACK_IMPORTED_MODULE_1__.P8P_DATA_GRID_SIZE.SMALL,\n morePages: data.morePages,\n morePagesBtnProps: {\n sx: STYLES.TABLE_DETAILS_MORE_BUTTON\n },\n fixedHeader: true,\n reloading: false,\n dataCellRender: dataCellRender,\n headCellRender: headCellRender,\n onOrderChanged: handleOrderChanged,\n onPagesCountChanged: handlePagesCountChanged\n }))));\n};\n\n//Контроль свойств - Таблица детализации изделия\nProductDetailsTable.propTypes = {\n plan: (prop_types__WEBPACK_IMPORTED_MODULE_8___default().number).isRequired,\n product: (prop_types__WEBPACK_IMPORTED_MODULE_8___default().number),\n stored: (prop_types__WEBPACK_IMPORTED_MODULE_8___default().string).isRequired,\n noProductMessage: (prop_types__WEBPACK_IMPORTED_MODULE_8___default().string).isRequired,\n noDataFoundMessage: (prop_types__WEBPACK_IMPORTED_MODULE_8___default().string).isRequired,\n title: (prop_types__WEBPACK_IMPORTED_MODULE_8___default().string).isRequired\n};\n\n//-----------\n//Тело модуля\n//-----------\n\n//Детализация по объекту\nconst PlanDetail = ({\n plan,\n disableNavigatePrev = false,\n disableNavigateNext = false,\n onNavigate,\n onBack\n}) => {\n //Собственное состояние - данные производственных составов SVG\n const [costProductComposition, setCostProductComposition] = (0,_hooks__WEBPACK_IMPORTED_MODULE_4__.useCostProductComposition)(plan.NRN);\n\n //Формируем представление\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_9__[\"default\"], {\n maxWidth: false,\n sx: STYLES.CARD_DETAILS_CONTAINER\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_10__[\"default\"], {\n container: true,\n direction: \"row\",\n justifyContent: \"center\",\n alignItems: \"center\",\n spacing: 0\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_10__[\"default\"], {\n item: true,\n display: \"flex\",\n justifyContent: \"center\",\n xs: 1\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_11__[\"default\"], {\n display: \"flex\",\n direction: \"row\",\n justifyContent: \"flex-end\",\n alignItems: \"center\",\n sx: STYLES.CARD_DETAILS_NAVIGATION_STACK\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_12__[\"default\"], {\n disabled: disableNavigatePrev,\n onClick: () => onNavigate ? onNavigate(-1) : null\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_13__[\"default\"], null, \"navigate_before\")))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_10__[\"default\"], {\n item: true,\n xs: 10\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_9__[\"default\"], {\n maxWidth: false\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_14__[\"default\"], {\n onClick: () => onBack ? onBack() : null\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_11__[\"default\"], {\n direction: \"row\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_13__[\"default\"], null, \"chevron_left\"), \"\\u041D\\u0430\\u0437\\u0430\\u0434\")), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_10__[\"default\"], {\n container: true,\n spacing: 2,\n sx: {\n paddingTop: \"5px\"\n }\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_10__[\"default\"], {\n item: true,\n xs: 5\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n sx: STYLES.BOX_INFO_MAIN\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(ProductDetailsTable, {\n plan: plan.NRN,\n product: costProductComposition.selectedProduct?.NRN,\n stored: \"PKG_P8PANELS_MECHREC.FCROUTLST_DG_BY_PRDCMPSP_GET\",\n noProductMessage: \"Укажите элемент модели, чтобы увидеть информацию о маршрутных картах\",\n noDataFoundMessage: \"Маршрутные карты не найдены\",\n title: \"Маршрутные карты\"\n })), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n sx: STYLES.BOX_INFO_MAIN,\n mt: 2\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(ProductDetailsTable, {\n plan: plan.NRN,\n product: costProductComposition.selectedProduct?.NRN,\n stored: \"PKG_P8PANELS_MECHREC.FCDELIVSH_DG_BY_PRDCMPSP_GET\",\n noProductMessage: \"Укажите элемент модели, чтобы увидеть информацию о комплектовочных ведомостях\",\n noDataFoundMessage: \"Комплектовочные ведомости не найдены\",\n title: \"Дефицит комплектации\"\n }))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_10__[\"default\"], {\n item: true,\n xs: 7\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n sx: STYLES.DETAIL_INFO\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(PlanInfo, {\n plan: plan\n })), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n sx: STYLES.PRODUCT_SELECTOR_CONTAINER\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(PlanProductCompositionModel, {\n model: costProductComposition.model,\n products: costProductComposition.products,\n setCostProductComposition: setCostProductComposition\n })))))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_10__[\"default\"], {\n item: true,\n display: \"flex\",\n justifyContent: \"center\",\n xs: 1\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_11__[\"default\"], {\n display: \"flex\",\n direction: \"row\",\n justifyContent: \"flex-start\",\n alignItems: \"center\",\n sx: STYLES.CARD_DETAILS_NAVIGATION_STACK\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_12__[\"default\"], {\n disabled: disableNavigateNext,\n onClick: () => onNavigate ? onNavigate(1) : null\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_13__[\"default\"], null, \"navigate_next\"))))));\n};\n\n//Контроль свойств - Детализация по объекту\nPlanDetail.propTypes = {\n plan: (prop_types__WEBPACK_IMPORTED_MODULE_8___default().object),\n disableNavigatePrev: (prop_types__WEBPACK_IMPORTED_MODULE_8___default().bool),\n disableNavigateNext: (prop_types__WEBPACK_IMPORTED_MODULE_8___default().bool),\n onNavigate: (prop_types__WEBPACK_IMPORTED_MODULE_8___default().func),\n onBack: (prop_types__WEBPACK_IMPORTED_MODULE_8___default().func)\n};\n\n//----------------\n//Интерфейс модуля\n//----------------\n\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/panels/mech_rec_assembly_mon/components/plan_detail.js?"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ PlanDetail: () => (/* binding */ PlanDetail)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! prop-types */ \"./node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_8___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_8__);\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Box/Box.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Typography/Typography.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Container/Container.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Grid/Grid.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Stack/Stack.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/IconButton/IconButton.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Icon/Icon.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Button/Button.js\");\n/* harmony import */ var _components_p8p_data_grid__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../components/p8p_data_grid */ \"./app/components/p8p_data_grid.js\");\n/* harmony import */ var _components_p8p_svg__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../../components/p8p_svg */ \"./app/components/p8p_svg.js\");\n/* harmony import */ var _config_wrapper__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../../config_wrapper */ \"./app/config_wrapper.js\");\n/* harmony import */ var _hooks__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../hooks */ \"./app/panels/mech_rec_assembly_mon/hooks.js\");\n/* harmony import */ var _progress_box__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./progress_box */ \"./app/panels/mech_rec_assembly_mon/components/progress_box.js\");\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n/*\r\n Парус 8 - Панели мониторинга - ПУП - Мониторинг сборки изделий\r\n Панель мониторинга: Детализация по объекту\r\n*/\n\n//---------------------\n//Подключение библиотек\n//---------------------\n\n //Классы React\n //Контроль свойств компонента\n //Интерфейсные элементы\n //Таблица данных\n //Интерактивные изображения\n //Подключение компонентов к настройкам приложения\n //Вспомогательные хуки\n //Информация по прогрессу объекта\n\n//---------\n//Константы\n//---------\n\n//Стили\nconst STYLES = {\n BOX_INFO_MAIN: {\n border: \"1px solid\",\n borderRadius: \"25px\",\n height: \"35vh\"\n },\n BOX_INFO_SUB: isMessage => ({\n overflow: \"hidden\",\n textAlign: \"center\",\n width: \"100%\",\n height: \"100%\",\n display: \"flex\",\n flexDirection: \"column\",\n justifyContent: isMessage ? \"center\" : \"flex-start\",\n paddingLeft: \"5px\",\n paddingRight: \"5px\",\n ...(isMessage ? {\n padding: \"5px\"\n } : {\n paddingTop: \"10px\"\n })\n }),\n DETAIL_INFO: {\n display: \"flex\",\n justifyContent: \"space-around\",\n alignItems: \"center\",\n border: \"1px solid\",\n borderRadius: \"25px\",\n height: \"17vh\"\n },\n PRODUCT_SELECTOR_CONTAINER: {\n display: \"flex\",\n justifyContent: \"center\",\n alignItems: \"center\",\n flexDirection: \"column\",\n border: \"1px solid\",\n borderRadius: \"25px\",\n height: \"53vh\",\n marginTop: \"16px\"\n },\n PRODUCT_SELECTOR_MODEL: {\n width: \"70%\"\n },\n PLAN_INFO_MAIN: {\n display: \"flex\",\n flexDirection: \"column\",\n gap: \"16px\"\n },\n PLAN_INFO_SUB: {\n display: \"flex\",\n justifyContent: \"space-between\",\n width: \"280px\",\n borderBottom: \"1px solid\"\n },\n TABLE_DETAILS: {\n height: \"230px\"\n },\n TABLE_DETAILS_HEADER_CELL: maxWidth => ({\n padding: \"2px 2px\",\n fontSize: \"11px\",\n textAlign: \"center\",\n lineHeight: \"1rem\",\n ...(maxWidth ? {\n maxWidth\n } : {})\n }),\n TABLE_DETAILS_DATA_CELL: textAlign => ({\n padding: \"2px 2px\",\n fontSize: \"11px\",\n ...(textAlign ? {\n textAlign\n } : {})\n }),\n TABLE_DETAILS_MORE_BUTTON: {\n borderRadius: \"25px\"\n },\n CARD_DETAILS_CONTAINER: {\n minWidth: \"1200px\",\n maxWidth: \"1400px\"\n },\n CARD_DETAILS_NAVIGATION_STACK: {\n width: \"100%\"\n }\n};\n\n//------------------------------------\n//Вспомогательные функции и компоненты\n//------------------------------------\n\n//Информация о плане\nconst PlanInfo = ({\n plan\n}) => {\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n sx: STYLES.PLAN_INFO_MAIN\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n sx: STYLES.PLAN_INFO_SUB\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_7__[\"default\"], {\n variant: \"UDO_body1\",\n mt: 1\n }, \"\\u041D\\u043E\\u043C\\u0435\\u0440 \\u0431\\u043E\\u0440\\u0442\\u0430:\"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_7__[\"default\"], {\n variant: \"subtitle2\"\n }, plan.SNUMB)), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n sx: STYLES.PLAN_INFO_SUB\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_7__[\"default\"], {\n variant: \"UDO_body1\",\n mt: 1\n }, \"\\u0413\\u043E\\u0434 \\u0432\\u044B\\u043F\\u0443\\u0441\\u043A\\u0430:\"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_7__[\"default\"], {\n variant: \"subtitle2\"\n }, plan.NYEAR))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_progress_box__WEBPACK_IMPORTED_MODULE_5__.ProgressBox, {\n progress: plan.NPROGRESS,\n detail: plan.SDETAIL,\n width: \"110px\",\n height: \"110px\",\n progressVariant: \"subtitle2\",\n detailVariant: \"body3\"\n }));\n};\n\n//Контроль свойств - Информация о плане\nPlanInfo.propTypes = {\n plan: (prop_types__WEBPACK_IMPORTED_MODULE_8___default().object)\n};\n\n//Модель выпуска плана\nconst PlanProductCompositionModel = ({\n model,\n products,\n onProductSelect\n}) => {\n //При выборе детали на модели\n const handleProductClick = ({\n item\n }) => {\n const product = products.find(p => p.SMODEL_ID == item.id);\n if (product && onProductSelect) onProductSelect(product);\n };\n\n //Генерация содержимого\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n sx: STYLES.PRODUCT_SELECTOR_MODEL\n }, model ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_components_p8p_svg__WEBPACK_IMPORTED_MODULE_2__.P8PSVG, {\n data: atob(model),\n items: products.map(p => ({\n id: p.SMODEL_ID,\n backgroundColor: p.SMODEL_BG_COLOR || \"red\",\n desc: p.SNAME,\n title: p.SNAME\n })),\n fillOpacity: \"0.3\",\n onItemClick: handleProductClick\n }) : /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_7__[\"default\"], {\n variant: \"subtitle2\"\n }, \"\\u041C\\u043E\\u0434\\u0435\\u043B\\u044C \\u0438\\u0437\\u0434\\u0435\\u043B\\u0438\\u044F \\u043D\\u0435 \\u0437\\u0430\\u0433\\u0440\\u0443\\u0436\\u0435\\u043D\\u0430\")));\n};\n\n//Контроль свойств - Модель выпуска плана\nPlanProductCompositionModel.propTypes = {\n model: (prop_types__WEBPACK_IMPORTED_MODULE_8___default().any),\n products: (prop_types__WEBPACK_IMPORTED_MODULE_8___default().array),\n onProductSelect: (prop_types__WEBPACK_IMPORTED_MODULE_8___default().func)\n};\n\n//Генерация представления ячейки заголовка\nconst headCellRender = ({\n columnDef\n}) => ({\n stackProps: {\n justifyContent: \"center\"\n },\n cellStyle: STYLES.TABLE_DETAILS_HEADER_CELL([\"NREMN_LABOUR\", \"NAPPLICABILITY\"].includes(columnDef.name) ? \"90px\" : [\"NDEFICIT\"].includes(columnDef.name) ? \"55px\" : null)\n});\n\n//Генерация заливки строки исходя от значений\nconst dataCellRender = ({\n row,\n columnDef\n}) => ({\n cellStyle: STYLES.TABLE_DETAILS_DATA_CELL([\"SOPERATION\", \"SNOMEN\"].includes(columnDef.name) ? null : \"center\"),\n data: row[columnDef]\n});\n\n//Таблица детализации изделия\nconst ProductDetailsTable = ({\n plan,\n product,\n stored,\n noProductMessage,\n noDataFoundMessage,\n title\n}) => {\n //Собственное состояние\n const [state, setState] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({\n plan: null,\n product: null,\n orders: null,\n pageNumber: 1\n });\n\n //Собственное состояние - данные таблицы\n const {\n data,\n isLoading\n } = (0,_hooks__WEBPACK_IMPORTED_MODULE_4__.useProductDetailsTable)(state.plan, state.product, state.orders, state.pageNumber, stored);\n\n //При изменении состояния сортировки\n const handleOrderChanged = ({\n orders\n }) => setState(pv => ({\n ...pv,\n orders: [...orders],\n pageNumber: 1\n }));\n\n //При изменении количества отображаемых страниц\n const handlePagesCountChanged = () => setState(pv => ({\n ...pv,\n pageNumber: pv.pageNumber + 1\n }));\n\n //При изменении изделия\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n setState(pv => ({\n ...pv,\n plan,\n product,\n orders: null,\n pageNumber: 1\n }));\n }, [product, plan]);\n\n //Генерация содержимого\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n sx: STYLES.BOX_INFO_SUB(!product || data.rows.length === 0)\n }, !product ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_7__[\"default\"], {\n variant: \"UDO_body2\"\n }, noProductMessage) : /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_7__[\"default\"], {\n variant: \"h4\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"b\", null, title)), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_components_p8p_data_grid__WEBPACK_IMPORTED_MODULE_1__.P8PDataGrid, _extends({}, _config_wrapper__WEBPACK_IMPORTED_MODULE_3__.P8P_DATA_GRID_CONFIG_PROPS, {\n noDataFoundText: isLoading ? \"\" : noDataFoundMessage,\n containerComponentProps: {\n sx: STYLES.TABLE_DETAILS,\n elevation: 0\n },\n columnsDef: data.columnsDef,\n rows: data.rows,\n size: _components_p8p_data_grid__WEBPACK_IMPORTED_MODULE_1__.P8P_DATA_GRID_SIZE.SMALL,\n morePages: data.morePages,\n morePagesBtnProps: {\n sx: STYLES.TABLE_DETAILS_MORE_BUTTON\n },\n fixedHeader: true,\n reloading: false,\n dataCellRender: dataCellRender,\n headCellRender: headCellRender,\n onOrderChanged: handleOrderChanged,\n onPagesCountChanged: handlePagesCountChanged\n }))));\n};\n\n//Контроль свойств - Таблица детализации изделия\nProductDetailsTable.propTypes = {\n plan: (prop_types__WEBPACK_IMPORTED_MODULE_8___default().number).isRequired,\n product: (prop_types__WEBPACK_IMPORTED_MODULE_8___default().number),\n stored: (prop_types__WEBPACK_IMPORTED_MODULE_8___default().string).isRequired,\n noProductMessage: (prop_types__WEBPACK_IMPORTED_MODULE_8___default().string).isRequired,\n noDataFoundMessage: (prop_types__WEBPACK_IMPORTED_MODULE_8___default().string).isRequired,\n title: (prop_types__WEBPACK_IMPORTED_MODULE_8___default().string).isRequired\n};\n\n//-----------\n//Тело модуля\n//-----------\n\n//Детализация по объекту\nconst PlanDetail = ({\n plan,\n disableNavigatePrev = false,\n disableNavigateNext = false,\n onNavigate,\n onBack\n}) => {\n //Собственное состояние - данные производственных составов SVG\n const [costProductComposition, setCostProductComposition] = (0,_hooks__WEBPACK_IMPORTED_MODULE_4__.useCostProductComposition)(plan.NRN);\n\n //Выбор элемента изделия\n const setProduct = product => {\n setCostProductComposition(pv => ({\n ...pv,\n selectedProduct: product ? {\n ...product\n } : null\n }));\n };\n\n //При навигации между карточками\n const handleNavigate = direction => {\n setProduct(null);\n if (onNavigate) onNavigate(direction);\n };\n\n //Формируем представление\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_9__[\"default\"], {\n maxWidth: false,\n sx: STYLES.CARD_DETAILS_CONTAINER\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_10__[\"default\"], {\n container: true,\n direction: \"row\",\n justifyContent: \"center\",\n alignItems: \"center\",\n spacing: 0\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_10__[\"default\"], {\n item: true,\n display: \"flex\",\n justifyContent: \"center\",\n xs: 1\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_11__[\"default\"], {\n display: \"flex\",\n direction: \"row\",\n justifyContent: \"flex-end\",\n alignItems: \"center\",\n sx: STYLES.CARD_DETAILS_NAVIGATION_STACK\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_12__[\"default\"], {\n disabled: disableNavigatePrev,\n onClick: () => handleNavigate(-1)\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_13__[\"default\"], null, \"navigate_before\")))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_10__[\"default\"], {\n item: true,\n xs: 10\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_9__[\"default\"], {\n maxWidth: false\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_14__[\"default\"], {\n onClick: () => onBack ? onBack() : null\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_11__[\"default\"], {\n direction: \"row\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_13__[\"default\"], null, \"chevron_left\"), \"\\u041D\\u0430\\u0437\\u0430\\u0434\")), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_10__[\"default\"], {\n container: true,\n spacing: 2,\n sx: {\n paddingTop: \"5px\"\n }\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_10__[\"default\"], {\n item: true,\n xs: 5\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n sx: STYLES.BOX_INFO_MAIN\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(ProductDetailsTable, {\n plan: plan.NRN,\n product: costProductComposition.selectedProduct?.NRN,\n stored: \"PKG_P8PANELS_MECHREC.FCROUTLST_DG_BY_PRDCMPSP_GET\",\n noProductMessage: \"Укажите элемент модели, чтобы увидеть информацию о маршрутных картах\",\n noDataFoundMessage: \"Маршрутные карты не найдены\",\n title: \"Маршрутные карты\"\n })), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n sx: STYLES.BOX_INFO_MAIN,\n mt: 2\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(ProductDetailsTable, {\n plan: plan.NRN,\n product: costProductComposition.selectedProduct?.NRN,\n stored: \"PKG_P8PANELS_MECHREC.FCDELIVSH_DG_BY_PRDCMPSP_GET\",\n noProductMessage: \"Укажите элемент модели, чтобы увидеть информацию о комплектовочных ведомостях\",\n noDataFoundMessage: \"Комплектовочные ведомости не найдены\",\n title: \"Дефицит комплектации\"\n }))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_10__[\"default\"], {\n item: true,\n xs: 7\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n sx: STYLES.DETAIL_INFO\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(PlanInfo, {\n plan: plan\n })), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n sx: STYLES.PRODUCT_SELECTOR_CONTAINER\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(PlanProductCompositionModel, {\n model: costProductComposition.model,\n products: costProductComposition.products,\n onProductSelect: setProduct\n })))))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_10__[\"default\"], {\n item: true,\n display: \"flex\",\n justifyContent: \"center\",\n xs: 1\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_11__[\"default\"], {\n display: \"flex\",\n direction: \"row\",\n justifyContent: \"flex-start\",\n alignItems: \"center\",\n sx: STYLES.CARD_DETAILS_NAVIGATION_STACK\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_12__[\"default\"], {\n disabled: disableNavigateNext,\n onClick: () => handleNavigate(1)\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_13__[\"default\"], null, \"navigate_next\"))))));\n};\n\n//Контроль свойств - Детализация по объекту\nPlanDetail.propTypes = {\n plan: (prop_types__WEBPACK_IMPORTED_MODULE_8___default().object),\n disableNavigatePrev: (prop_types__WEBPACK_IMPORTED_MODULE_8___default().bool),\n disableNavigateNext: (prop_types__WEBPACK_IMPORTED_MODULE_8___default().bool),\n onNavigate: (prop_types__WEBPACK_IMPORTED_MODULE_8___default().func),\n onBack: (prop_types__WEBPACK_IMPORTED_MODULE_8___default().func)\n};\n\n//----------------\n//Интерфейс модуля\n//----------------\n\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/panels/mech_rec_assembly_mon/components/plan_detail.js?"); /***/ }), @@ -3821,7 +3821,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ useCostProductComposition: () => (/* binding */ useCostProductComposition),\n/* harmony export */ useFilteredPlanCtlgs: () => (/* binding */ useFilteredPlanCtlgs),\n/* harmony export */ useMechRecAssemblyMon: () => (/* binding */ useMechRecAssemblyMon),\n/* harmony export */ useProductDetailsTable: () => (/* binding */ useProductDetailsTable)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _context_backend__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../context/backend */ \"./app/context/backend.js\");\n/* harmony import */ var _core_utils__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../core/utils */ \"./app/core/utils.js\");\n/*\r\n Парус 8 - Панели мониторинга - ПУП - Мониторинг сборки изделий\r\n Кастомные хуки\r\n*/\n\n//---------------------\n//Подключение библиотек\n//---------------------\n\n //Классы React\n //Контекст взаимодействия с сервером\n //Вспомогательные функции\n\n//---------\n//Константы\n//---------\n\n//Размер страницы данных\nconst DATA_GRID_PAGE_SIZE = 50;\n\n//-----------\n//Тело модуля\n//-----------\n\n//Клиентский отбор каталогов по поисковой фразе и наличию планов\nconst useFilteredPlanCtlgs = (planCtlgs, filter) => {\n const filteredPlanCtlgs = react__WEBPACK_IMPORTED_MODULE_0___default().useMemo(() => {\n return planCtlgs.filter(catalog => catalog.SNAME.toString().toLowerCase().includes(filter.ctlgName) && (filter.haveDocs ? catalog.NCOUNT_DOCS > 0 : catalog.NCOUNT_DOCS >= 0));\n }, [planCtlgs, filter]);\n return filteredPlanCtlgs;\n};\n\n//Хук для основной таблицы панели\nconst useMechRecAssemblyMon = () => {\n //Собственное состояние\n let [state, setState] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({\n init: false,\n showPlanList: false,\n planCtlgs: [],\n planCtlgsLoaded: false,\n selectedPlanCtlg: {},\n plans: [],\n plansLoaded: false,\n selectedPlan: {}\n });\n\n //Подключение к контексту взаимодействия с сервером\n const {\n executeStored\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_backend__WEBPACK_IMPORTED_MODULE_1__[\"BackEndСtx\"]);\n\n //Инициализация каталогов планов\n const initPlanCtlgs = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async () => {\n if (!state.init) {\n const data = await executeStored({\n stored: \"PKG_P8PANELS_MECHREC.FCPRODPLAN_AM_CTLG_INIT\",\n args: {},\n respArg: \"COUT\",\n isArray: name => name === \"XFCPRODPLAN_CRNS\"\n });\n setState(pv => ({\n ...pv,\n init: true,\n planCtlgs: [...(data?.XFCPRODPLAN_CRNS || [])],\n planCtlgsLoaded: true\n }));\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [state.init, executeStored]);\n\n //Получение информации о планах каталога\n const loadPlans = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async NCRN => {\n if (NCRN) {\n const data = await executeStored({\n stored: \"PKG_P8PANELS_MECHREC.FCPRODPLAN_GET\",\n args: {\n NCRN: NCRN\n },\n respArg: \"COUT\",\n isArray: name => name === \"XFCPRODPLAN_INFO\"\n });\n setState(pv => ({\n ...pv,\n init: true,\n plans: [...(data?.XFCPRODPLAN_INFO || [])],\n plansLoaded: true\n }));\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [executeStored]);\n\n //Выбор каталога планов\n const selectPlanCtlg = planCtlg => {\n setState(pv => ({\n ...pv,\n selectedPlanCtlg: {\n ...planCtlg\n },\n selectedPlan: {},\n showPlanList: false\n }));\n };\n\n //Сброс выбора каталога планов\n const unselectPlanCtlg = () => setState(pv => ({\n ...pv,\n selectedPlanCtlg: {},\n selectedPlan: {},\n showPlanList: false\n }));\n\n //При подключении компонента к странице\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n initPlanCtlgs();\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n //При изменении каталога\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n //Если каталог выбран\n if (state.selectedPlanCtlg) {\n loadPlans(state.selectedPlanCtlg.NRN);\n } else {\n setState(pv => ({\n ...pv,\n plans: [],\n plansLoaded: false\n }));\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [state.selectedPlanCtlg]);\n return [state, setState, selectPlanCtlg, unselectPlanCtlg];\n};\n\n//Хук для информации по производственным составам\nconst useCostProductComposition = nProdPlan => {\n //Собственное состояние\n let [costProductComposition, setCostProductComposition] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({\n init: false,\n showPlanList: false,\n products: [],\n productsLoaded: false,\n model: null,\n selectedProduct: null\n });\n\n //Подключение к контексту взаимодействия с сервером\n const {\n executeStored\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_backend__WEBPACK_IMPORTED_MODULE_1__[\"BackEndСtx\"]);\n\n //Инициализация производственных составов\n const initCostProductComposition = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async () => {\n if (!costProductComposition.init) {\n const data = await executeStored({\n stored: \"PKG_P8PANELS_MECHREC.FCPRODCMP_DETAILS_GET\",\n args: {\n NFCPRODPLAN: nProdPlan\n },\n respArg: \"COUT\",\n isArray: name => name === \"XFCPRODCMP\"\n });\n setCostProductComposition(pv => ({\n ...pv,\n init: true,\n products: [...(data?.XFCPRODCMP || [])],\n productsLoaded: true,\n model: data?.BMODEL\n }));\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [costProductComposition.init, executeStored]);\n\n //При подключении компонента к странице\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n initCostProductComposition();\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n return [costProductComposition, setCostProductComposition];\n};\n\n//Хук для таблицы детализации изделия\nconst useProductDetailsTable = (plan, product, orders, pageNumber, stored) => {\n //Собственное состояние - флаг загрузки\n const [isLoading, setLoading] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(true);\n\n //Собственное состояние - таблица данных\n const [data, setData] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({\n columnsDef: [],\n rows: [],\n morePages: true\n });\n\n //Подключение к контексту взаимодействия с сервером\n const {\n executeStored,\n SERV_DATA_TYPE_CLOB\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_backend__WEBPACK_IMPORTED_MODULE_1__[\"BackEndСtx\"]);\n\n //Загрузка данных при изменении зависимостей\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n const loadData = async () => {\n try {\n setLoading(true);\n const data = await executeStored({\n stored,\n args: {\n NPRODCMPSP: product,\n NFCPRODPLAN: plan,\n CORDERS: {\n VALUE: (0,_core_utils__WEBPACK_IMPORTED_MODULE_2__.object2Base64XML)(orders, {\n arrayNodeName: \"orders\"\n }),\n SDATA_TYPE: SERV_DATA_TYPE_CLOB\n },\n NPAGE_NUMBER: pageNumber,\n NPAGE_SIZE: DATA_GRID_PAGE_SIZE,\n NINCLUDE_DEF: pageNumber == 1 ? 1 : 0\n },\n respArg: \"COUT\"\n });\n setData(pv => ({\n ...pv,\n columnsDef: data.XCOLUMNS_DEF ? [...data.XCOLUMNS_DEF] : pv.columnsDef,\n rows: pageNumber == 1 ? [...(data.XROWS || [])] : [...pv.rows, ...(data.XROWS || [])],\n morePages: DATA_GRID_PAGE_SIZE == 0 ? false : (data.XROWS || []).length >= DATA_GRID_PAGE_SIZE\n }));\n } finally {\n setLoading(false);\n }\n };\n if (plan && product) loadData();\n }, [plan, product, orders, pageNumber, stored, executeStored, SERV_DATA_TYPE_CLOB]);\n\n //Вернём данные\n return {\n data,\n isLoading\n };\n};\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/panels/mech_rec_assembly_mon/hooks.js?"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ useCostProductComposition: () => (/* binding */ useCostProductComposition),\n/* harmony export */ useFilteredPlanCtlgs: () => (/* binding */ useFilteredPlanCtlgs),\n/* harmony export */ useMechRecAssemblyMon: () => (/* binding */ useMechRecAssemblyMon),\n/* harmony export */ useProductDetailsTable: () => (/* binding */ useProductDetailsTable)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _context_backend__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../context/backend */ \"./app/context/backend.js\");\n/* harmony import */ var _core_utils__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../core/utils */ \"./app/core/utils.js\");\n/*\r\n Парус 8 - Панели мониторинга - ПУП - Мониторинг сборки изделий\r\n Кастомные хуки\r\n*/\n\n//---------------------\n//Подключение библиотек\n//---------------------\n\n //Классы React\n //Контекст взаимодействия с сервером\n //Вспомогательные функции\n\n//---------\n//Константы\n//---------\n\n//Размер страницы данных\nconst DATA_GRID_PAGE_SIZE = 50;\n\n//-----------\n//Тело модуля\n//-----------\n\n//Клиентский отбор каталогов по поисковой фразе и наличию планов\nconst useFilteredPlanCtlgs = (planCtlgs, filter) => {\n const filteredPlanCtlgs = react__WEBPACK_IMPORTED_MODULE_0___default().useMemo(() => {\n return planCtlgs.filter(catalog => catalog.SNAME.toString().toLowerCase().includes(filter.ctlgName) && (filter.haveDocs ? catalog.NCOUNT_DOCS > 0 : catalog.NCOUNT_DOCS >= 0));\n }, [planCtlgs, filter]);\n return filteredPlanCtlgs;\n};\n\n//Хук для основной таблицы панели\nconst useMechRecAssemblyMon = () => {\n //Собственное состояние\n let [state, setState] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({\n init: false,\n showPlanList: false,\n planCtlgs: [],\n planCtlgsLoaded: false,\n selectedPlanCtlg: {},\n plans: [],\n plansLoaded: false,\n selectedPlan: {}\n });\n\n //Подключение к контексту взаимодействия с сервером\n const {\n executeStored\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_backend__WEBPACK_IMPORTED_MODULE_1__[\"BackEndСtx\"]);\n\n //Инициализация каталогов планов\n const initPlanCtlgs = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async () => {\n if (!state.init) {\n const data = await executeStored({\n stored: \"PKG_P8PANELS_MECHREC.FCPRODPLAN_AM_CTLG_INIT\",\n args: {},\n respArg: \"COUT\",\n isArray: name => name === \"XFCPRODPLAN_CRNS\"\n });\n setState(pv => ({\n ...pv,\n init: true,\n planCtlgs: [...(data?.XFCPRODPLAN_CRNS || [])],\n planCtlgsLoaded: true\n }));\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [state.init, executeStored]);\n\n //Получение информации о планах каталога\n const loadPlans = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async NCRN => {\n if (NCRN) {\n const data = await executeStored({\n stored: \"PKG_P8PANELS_MECHREC.FCPRODPLAN_GET\",\n args: {\n NCRN: NCRN\n },\n respArg: \"COUT\",\n isArray: name => name === \"XFCPRODPLAN_INFO\"\n });\n setState(pv => ({\n ...pv,\n init: true,\n plans: [...(data?.XFCPRODPLAN_INFO || [])],\n plansLoaded: true\n }));\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [executeStored]);\n\n //Выбор каталога планов\n const selectPlanCtlg = planCtlg => {\n setState(pv => ({\n ...pv,\n selectedPlanCtlg: {\n ...planCtlg\n },\n selectedPlan: {},\n showPlanList: false\n }));\n };\n\n //Сброс выбора каталога планов\n const unselectPlanCtlg = () => setState(pv => ({\n ...pv,\n selectedPlanCtlg: {},\n selectedPlan: {},\n showPlanList: false\n }));\n\n //При подключении компонента к странице\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n initPlanCtlgs();\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n //При изменении каталога\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n //Если каталог выбран\n if (state.selectedPlanCtlg) {\n loadPlans(state.selectedPlanCtlg.NRN);\n } else {\n setState(pv => ({\n ...pv,\n plans: [],\n plansLoaded: false\n }));\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [state.selectedPlanCtlg]);\n return [state, setState, selectPlanCtlg, unselectPlanCtlg];\n};\n\n//Хук для информации по производственным составам\nconst useCostProductComposition = plan => {\n //Собственное состояние\n let [costProductComposition, setCostProductComposition] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({\n showPlanList: false,\n products: [],\n productsLoaded: false,\n model: null,\n selectedProduct: null\n });\n\n //Подключение к контексту взаимодействия с сервером\n const {\n executeStored\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_backend__WEBPACK_IMPORTED_MODULE_1__[\"BackEndСtx\"]);\n\n //При подключении компонента к странице\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n const loadData = async () => {\n const data = await executeStored({\n stored: \"PKG_P8PANELS_MECHREC.FCPRODCMP_DETAILS_GET\",\n args: {\n NFCPRODPLAN: plan\n },\n respArg: \"COUT\",\n isArray: name => name === \"XFCPRODCMP\"\n });\n setCostProductComposition(pv => ({\n ...pv,\n products: [...(data?.XFCPRODCMP || [])],\n productsLoaded: true,\n model: data?.BMODEL,\n selectedProduct: null\n }));\n };\n if (plan) loadData();\n }, [plan, executeStored]);\n\n //Вернём данные\n return [costProductComposition, setCostProductComposition];\n};\n\n//Хук для таблицы детализации изделия\nconst useProductDetailsTable = (plan, product, orders, pageNumber, stored) => {\n //Собственное состояние - флаг загрузки\n const [isLoading, setLoading] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(true);\n\n //Собственное состояние - таблица данных\n const [data, setData] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({\n columnsDef: [],\n rows: [],\n morePages: true\n });\n\n //Подключение к контексту взаимодействия с сервером\n const {\n executeStored,\n SERV_DATA_TYPE_CLOB\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_backend__WEBPACK_IMPORTED_MODULE_1__[\"BackEndСtx\"]);\n\n //Загрузка данных при изменении зависимостей\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n const loadData = async () => {\n try {\n setLoading(true);\n const data = await executeStored({\n stored,\n args: {\n NPRODCMPSP: product,\n NFCPRODPLAN: plan,\n CORDERS: {\n VALUE: (0,_core_utils__WEBPACK_IMPORTED_MODULE_2__.object2Base64XML)(orders, {\n arrayNodeName: \"orders\"\n }),\n SDATA_TYPE: SERV_DATA_TYPE_CLOB\n },\n NPAGE_NUMBER: pageNumber,\n NPAGE_SIZE: DATA_GRID_PAGE_SIZE,\n NINCLUDE_DEF: pageNumber == 1 ? 1 : 0\n },\n respArg: \"COUT\"\n });\n setData(pv => ({\n ...pv,\n columnsDef: data.XCOLUMNS_DEF ? [...data.XCOLUMNS_DEF] : pv.columnsDef,\n rows: pageNumber == 1 ? [...(data.XROWS || [])] : [...pv.rows, ...(data.XROWS || [])],\n morePages: DATA_GRID_PAGE_SIZE == 0 ? false : (data.XROWS || []).length >= DATA_GRID_PAGE_SIZE\n }));\n } finally {\n setLoading(false);\n }\n };\n if (plan && product) loadData();\n }, [plan, product, orders, pageNumber, stored, executeStored, SERV_DATA_TYPE_CLOB]);\n\n //Вернём данные\n return {\n data,\n isLoading\n };\n};\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/panels/mech_rec_assembly_mon/hooks.js?"); /***/ }), From 07a738964b20aae3269699d2606f6003dc4b822d Mon Sep 17 00:00:00 2001 From: Mikhail Chechnev Date: Sat, 25 May 2024 00:49:37 +0300 Subject: [PATCH 58/76] =?UTF-8?q?WEB=20APP:=20P8PGantt=20-=20=D0=B0=D0=BA?= =?UTF-8?q?=D1=82=D1=83=D0=B0=D0=BB=D0=B8=D0=B7=D0=B8=D1=80=D0=BE=D0=B2?= =?UTF-8?q?=D0=B0=D0=BD=D0=B0=20=D1=81=D1=82=D1=80=D1=83=D0=BA=D1=82=D1=83?= =?UTF-8?q?=D1=80=D0=B0=20=D0=BE=D0=BF=D0=B8=D1=81=D0=B0=D0=BD=D0=B8=D1=8F?= =?UTF-8?q?=20=D0=B0=D1=82=D1=80=D0=B8=D0=B1=D1=83=D1=82=D0=B0=20=D0=B7?= =?UTF-8?q?=D0=B0=D0=B4=D0=B0=D1=87=D0=B8=20(=D0=B4=D0=BB=D1=8F=20=D0=BA?= =?UTF-8?q?=D0=BE=D0=BD=D1=82=D1=80=D0=BE=D0=BB=D1=8F=20=D1=81=D0=B2=D0=BE?= =?UTF-8?q?=D0=B9=D1=81=D1=82=D0=B2=20=D0=BA=D0=BE=D0=BC=D0=BF=D0=BE=D0=BD?= =?UTF-8?q?=D0=B5=D0=BD=D1=82=D0=B0)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/components/p8p_gantt.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/app/components/p8p_gantt.js b/app/components/p8p_gantt.js index 2f51fe8..6c562b2 100644 --- a/app/components/p8p_gantt.js +++ b/app/components/p8p_gantt.js @@ -66,7 +66,8 @@ const P8P_GANTT_TASK_SHAPE = PropTypes.shape({ //Структура динамического атрибута задачи const P8P_GANTT_TASK_ATTRIBUTE_SHAPE = PropTypes.shape({ name: PropTypes.string.isRequired, - caption: PropTypes.string.isRequired + caption: PropTypes.string.isRequired, + visible: PropTypes.bool.isRequired }); //Структура описания цвета задачи From db349166c968a21b4d661afa0e772af850a5a3a2 Mon Sep 17 00:00:00 2001 From: Mikhail Chechnev Date: Sat, 25 May 2024 00:52:32 +0300 Subject: [PATCH 59/76] =?UTF-8?q?=D0=98=D0=BD=D1=81=D1=82=D1=80=D1=83?= =?UTF-8?q?=D0=BA=D1=86=D0=B8=D0=B8:=20P8PGantt=20-=20=D0=BE=D0=BF=D0=B8?= =?UTF-8?q?=D1=81=D0=B0=D0=BD=D1=8B=20=D0=BF=D0=BE=D0=BB=D1=8C=D0=B7=D0=BE?= =?UTF-8?q?=D0=B2=D0=B0=D1=82=D0=B5=D0=BB=D1=8C=D1=81=D0=BA=D0=B8=D0=B5=20?= =?UTF-8?q?=D0=B4=D0=B8=D0=B0=D0=BB=D0=BE=D0=B3=D0=B8=20=D0=B7=D0=B0=D0=B4?= =?UTF-8?q?=D0=B0=D1=87,=20=D1=81=D0=BE=D0=BA=D1=80=D1=8B=D1=82=D0=B8?= =?UTF-8?q?=D0=B5=20=D0=B0=D1=82=D1=80=D0=B8=D0=B1=D1=83=D1=82=D0=BE=D0=B2?= =?UTF-8?q?,=20=D1=86=D0=B2=D0=B5=D1=82=20=D0=B7=D0=B0=D0=BB=D0=B8=D0=B2?= =?UTF-8?q?=D0=BA=D0=B8=20=D0=BF=D1=80=D0=BE=D0=B3=D1=80=D0=B5=D1=81=D1=81?= =?UTF-8?q?=D0=B0,=20P8PDataGrid=20-=20=D0=BE=D0=BF=D0=B8=D1=81=D0=B0?= =?UTF-8?q?=D0=BD=D0=BE=20=D1=81=D0=B2=D0=BE=D0=B9=D1=81=D1=82=D0=B2=D0=BE?= =?UTF-8?q?=20"morePagesBtnProps"?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 59 +++++++++++++++++++++++++++++++++------- docs/Image Sources.pptx | Bin 1415732 -> 1402285 bytes docs/img/68.png | Bin 133086 -> 54816 bytes docs/img/69.png | Bin 160995 -> 68354 bytes docs/img/70.png | Bin 0 -> 68931 bytes 5 files changed, 49 insertions(+), 10 deletions(-) create mode 100644 docs/img/70.png diff --git a/README.md b/README.md index d76dab1..095024e 100644 --- a/README.md +++ b/README.md @@ -1135,6 +1135,7 @@ const MyPanel = () => { `clearFilterBtnCaption` - обязательный, строка, текст кнопки очистки введённого значения фильтра\ `cancelFilterBtnCaption` - обязательный, строка, текст кнопки отмены ввода значения фильтра\ `morePagesBtnCaption` - обязательный, строка, текст кнопки догрузки данных\ +`morePagesBtnProps` - необязательный, объект, содержит свойства, которые будут переданы компоненту `Button` - кнопке догрузки данных таблицы\ `noDataFoundText` - необязательный, строка, текст ошибки об отсутствии данных в таблице (если не указн - ошибка не отображается)\ `headCellRender` - необязательный, функция формирования представления заголовка колонки (если не указана - отображение по умолчанию, согласно `columnsDef`). Сигнатура функции: `f({columnDef})`. Будет вызвана для каждой колонки таблицы, в функцию будет передан объект, поле `columnDef` которого будет содержать описание текущей генерируемой колонки. Должна возвращать объект вида `{cellStyle: <СТИЛИ_ДЛЯ_TableCell>, cellProps: <СВОЙСТВА_ДЛЯ_TableCell>, stackStyle: <СТИЛИ_ДЛЯ_КОНТЕЙНЕРА_Stack>, stackProps: <СВОЙСТВА_ДЛЯ_КОНТЕЙНЕРА_Stack>, data: <ЗНАЧЕНИЕ_ИЛИ_КОМПОНЕТ_Ract_ДЛЯ_СОДЕРЖИМОГО_ЗАГОЛОВКА_КОЛОНКИ>}` или `undefined`, если для заголовка колонки не предполагается специального представления.\ `dataCellRender` - необязательный, функция формирования представления ячейки (если не указана - отображение по умолчанию, согласно `columnsDef` и текущему элементу `rows`). Сигнатура функции `f({row, columnDef})`. Будет вызвана для каждой ячейки таблицы, в функцию будет передан объект, поле `row` которого будет содержать данные текущей генерируемой строки таблицы, а поле `columnDef` - текущей генерируемой колонки. Должна возвращать объект вида `{cellStyle: <СТИЛИ_ДЛЯ_TableCell>, cellProps: <СВОЙСТВА_ДЛЯ_TableCell>, data: <ЗНАЧЕНИЕ_ИЛИ_КОМПОНЕТ_Ract_ДЛЯ_СОДЕРЖИМОГО_ЯЧЕЙКИ>}` или `undefined`, если для ячейки не предполагается специального представления.\ @@ -1737,9 +1738,11 @@ const Chart = ({ title }) => { - Дополнение задачи произвольными учётными атрибутами - Диалоговый редактор задачи, отображающий её дополнительные атрибуты с возможностью настройки их форматирования - Отображение связей между задачами +- Отображение произвольного пользовательского диалога в качестве карточки задачи/редактора задачи -![Пример P8PGantt](docs/img/68.png) -![Пример P8PGantt (редактор)](docs/img/69.png) +![Пример P8PGantt](docs/img/68.png)\ +![Пример P8PGantt (редактор)](docs/img/69.png)\ +![Пример P8PGantt (пользовательский диалог задачи)](docs/img/70.png)\ **Подключение** @@ -1768,12 +1771,13 @@ const MyPanel = () => { `readOnlyDates` - необязательный, логический, признак возможности редактирования дат элементов диаграммы (по умолчанию - редактирование возможно)\ `readOnlyProgress` - необязательный, логический, признак возможности редактирования прогресса исполнения элементов диаграммы (по умолчанию - редактирование возможно)\ `zoom` - необязательный, число, масштаб диаграммы\ -`tasks` - обязательный, массив, задачи, отображаемые на диаграмме, должен состоять из объектов вида `{id: <УНИКАЛЬНЫЙ_ИДЕНТИФИКАТОР>, rn: <ССЫЛКА_НА_ЗАПИСЬ_В_СИСТЕМЕ>, numb: <НОМЕР>, name: <НАИМЕНОВАНИЕ>, fullName: <ПОЛНОЕ_НАИМЕНОВАНИЕ>, start: <ДАТА_НАЧАЛА_В_JSON_ФОРМАТЕ_ДАТЫ>, end: <ДАТА_ОКОНЧАНИЯ_В_JSON_ФОРМАТЕ_ДАТЫ>, progress: <ПРОГРЕСС_ИСПОЛНЕНИЯ>, dependencies: <МАССИВ_ИДЕНТИФИКАТОРОВ_ЗАВИСИМЫХ_ЗАДАЧ>, readOnly: <ДОСТУПНОСТЬ_РЕДАКТИРОВАНИЯ>, readOnlyDates: <ДОСТУПНОСТЬ_РЕДАКТИРОВАНИЯ_СРОКОВ>, readOnlyProgress: <ДОСТУПНОСТЬ_РЕДАКТИРОВАНИЯ_ПРОГРЕССА_ИСПОЛНЕНИЯ>, bgColor: <ЦВЕТ_ЗАЛИВКИ>, textColor: <ЦВЕТ_ТЕКСТА>[, <ИМЯ_ДОПОЛНИТЕЛЬНОГО_АТРИБУТА1>:<ЗНАЧЕНИЕ1>, <ИМЯ_ДОПОЛНИТЕЛЬНОГО_АТРИБУТА2>:<ЗНАЧЕНИЕ2>,...]}` (см. константу `P8P_GANTT_TASK_SHAPE` в коде компонента)\ -`taskAttributes` - необязательный, массив, состав (не значения) дополнительных атрибутутов задач, должен состоять из объектов вида `{name: <ИМЯ_ДОПОЛНИТЕЛЬНОГО_АТРИБУТА>, caption: <ЗАГОЛОВОК_ДОПОЛНИТЕЛЬНОГО_АТРИБУТА>}` (см. константу `P8P_GANTT_TASK_ATTRIBUTE_SHAPE` в коде компонента)\ -`taskColors` - необязательный, массив, описания цветов заливки и текста элементов диаграммы, для построения легенды, должен состоять из объектов вида `{bgColor: <ЦВЕТ_ЗАЛИВКИ_В_ФОРМАТЕ_CSS>, textColor: <ЦВЕТ_ТЕКСТА_В_ФОРМАТЕ_CSS>, desc: <ОПИСАНИЕ>}` (см. константу `P8P_GANTT_TASK_COLOR_SHAPE` в коде компонента)\ +`tasks` - обязательный, массив, задачи, отображаемые на диаграмме, должен состоять из объектов вида `{id: <УНИКАЛЬНЫЙ_ИДЕНТИФИКАТОР>, rn: <ССЫЛКА_НА_ЗАПИСЬ_В_СИСТЕМЕ>, numb: <НОМЕР>, name: <НАИМЕНОВАНИЕ>, fullName: <ПОЛНОЕ_НАИМЕНОВАНИЕ>, start: <ДАТА_НАЧАЛА_В_JSON_ФОРМАТЕ_ДАТЫ>, end: <ДАТА_ОКОНЧАНИЯ_В_JSON_ФОРМАТЕ_ДАТЫ>, progress: <ПРОГРЕСС_ИСПОЛНЕНИЯ>, dependencies: <МАССИВ_ИДЕНТИФИКАТОРОВ_ЗАВИСИМЫХ_ЗАДАЧ>, readOnly: <ДОСТУПНОСТЬ_РЕДАКТИРОВАНИЯ>, readOnlyDates: <ДОСТУПНОСТЬ_РЕДАКТИРОВАНИЯ_СРОКОВ>, readOnlyProgress: <ДОСТУПНОСТЬ_РЕДАКТИРОВАНИЯ_ПРОГРЕССА_ИСПОЛНЕНИЯ>, bgColor: <ЦВЕТ_ЗАЛИВКИ>, textColor: <ЦВЕТ_ТЕКСТА>, bgProgressColor: <ЦВЕТ_ЗАЛИВКИ_ПРОГРЕССА_ИСПОЛНЕНИЯ_ЗАДАЧИ>[, <ИМЯ_ДОПОЛНИТЕЛЬНОГО_АТРИБУТА1>:<ЗНАЧЕНИЕ1>, <ИМЯ_ДОПОЛНИТЕЛЬНОГО_АТРИБУТА2>:<ЗНАЧЕНИЕ2>,...]}` (см. константу `P8P_GANTT_TASK_SHAPE` в коде компонента)\ +`taskAttributes` - необязательный, массив, состав (не значения) дополнительных атрибутутов задач, должен состоять из объектов вида `{name: <ИМЯ_ДОПОЛНИТЕЛЬНОГО_АТРИБУТА>, caption: <ЗАГОЛОВОК_ДОПОЛНИТЕЛЬНОГО_АТРИБУТА>, visible: <ПРИЗНАК_ОТОБРАЖЕНИЯ_ДОПОЛНИТЕЛЬНОГО_АТРИБУТА - true|false>}` (см. константу `P8P_GANTT_TASK_ATTRIBUTE_SHAPE` в коде компонента)\ +`taskColors` - необязательный, массив, описания цветов заливки и текста элементов диаграммы, для построения легенды, должен состоять из объектов вида `{bgColor: <ЦВЕТ_ЗАЛИВКИ_В_ФОРМАТЕ_CSS>, textColor: <ЦВЕТ_ТЕКСТА_В_ФОРМАТЕ_CSS>, bgProgressColor: <ЦВЕТ_ЗАЛИВКИ_ПРОГРЕССА_ИСПОЛНЕНИЯ_ЗАДАЧИ>, desc: <ОПИСАНИЕ>}` (см. константу `P8P_GANTT_TASK_COLOR_SHAPE` в коде компонента)\ `onTaskDatesChange` - необязательный, функция, если указана - будет вызвана при изменении (перетаскиванием или через редактор) дат элемента диаграммы, сигнатура функции `f({task, start, end, isMain})`, результат функции не интерпретируется. В функцию будет передан объект в поле `task`, которого, будет содержаться описание изменённой задачи (элемент массива `tasks`, см. выше описание полей), в поле `start` - новая дата начала задачи, в поле `end` - новая дата окончания задачи, в поле `isMain` - флаг изменения родительской задачи (`true` - `onTaskDatesChange` вызана для обработки изменения основной задачи, `false` - `onTaskDatesChange` вызвана для обработки изменения одной из зависимых задач).\ `onTaskProgressChange` - необязательный, функция, если указана - будет вызвана при изменении прогресса исполнения элемента диаграммы, сигнатура функции `f({task, progress})`, результат функции не интерпретируется. В функцию будет передан объект в поле `task`, которого, будет содержаться описание изменённой задачи (элемент массива `tasks`, см. выше описание полей), в поле `progress` - новое значение прогресса исполнения задачи.\ `taskAttributeRenderer` - необязательный, функция, если указана - будет вызвана при отображении диалога редактора здачи, результат функции будет применён для отображения области дополнительных атрибутов задачи в диалоге редактора, если не указана - дополнительные атрибуты будут отображены с форматированием по умолчанию. Сигнатура функции - `f({task, attribute})`, в функцию будет передан объект в поле `task`, которого, будет содержаться описание задачи для которой отображается редактор (элемент массива `tasks`, см. выше описание полей), в поле `attribute` - описание дополнительного атрибута формируемого в диалоге редактора (элемент массива `taskAttributes`, см. выше описание полей). Должна возвращать значение или React-компонент.\ +`taskDialogRenderer` - необязательный, функция, если указана - будет вызвана до отображения диалога редактора задачи. Результат функции будет показан в качестве содержимого диалога редактора, вместо типовой формы. Сигнатура функции - `f({task, taskAttributes, taskColors, close})`, в функцию будет передан объект в поле `task`, которого, будет содержаться описание задачи для которой отображается редактор (элемент массива `tasks`, см. выше описание полей), в поле `taskAttributes` - массив `taskAttributes` (см. выше описание полей), описывающий состав полей задачи, в поле `taskColors` - массив `taskColors` (см. выше описание полей), описывающий цвета заливки, определённые для задачи, в поле `close` - функция закрытия диалога задачи, может быть вызвана возвращаемым Reac-компонентом для сокрытия диалога. Должна возвращать значение или React-компонент.\ `noDataFoundText` - обязательный, строка, текст для отображения ошибки об отсутствии данных\ `numbTaskEditorCaption` - обязательный, строка, подпись стандартного атрибута `numb` в диалоге редактора задачи\ `nameTaskEditorCaption` - обязательный, строка, подпись стандартного атрибута `name` в диалоге редактора задачи\ @@ -1836,7 +1840,11 @@ const MyPanel = () => { 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, @@ -1866,6 +1874,7 @@ const MyPanel = () => { 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; @@ -1878,14 +1887,14 @@ const MyPanel = () => { ``` import React, { useState, useContext, useCallback, useEffect } from "react"; //Классы React -import { Typography, Grid, Stack, Icon, Box } from "@mui/material"; //Интерфейсные элементы -import { formatDateJSONDateOnly } from "../../core/utils"; //Вспомогательные функции +import {Typography, Grid, Stack, Icon, Box, FormControlLabel, Checkbox, Card, CardHeader, CardActions, Avatar, CardContent, Button} from "@mui/material"; //Интерфейсные элементы +import { formatDateJSONDateOnly, formatDateRF } from "../../core/utils"; //Вспомогательные функции import { P8PGantt } from "../../components/p8p_gantt"; //Диаграмма Ганта import { P8P_GANTT_CONFIG_PROPS } from "../../config_wrapper"; //Подключение компонентов к настройкам приложения import { BackEndСtx } from "../../context/backend"; //Контекст взаимодействия с сервером //Высота диаграммы Ганта -const GANTT_HEIGHT = "600px"; +const GANTT_HEIGHT = "70vh"; //Ширина диаграммы Ганта const GANTT_WIDTH = "98vw"; @@ -1918,6 +1927,30 @@ const taskAttributeRenderer = ({ task, attribute }) => { } }; +//Генерация кастомного диалога задачи +const taskDialogRenderer = ({ task, close }) => { + return ( + + {task.type == 0 ? "Эт" : "Ра"}} + title={task.name} + subheader={`с ${formatDateRF(task.start)} по ${formatDateRF(task.end)}`} + /> + + + Это пользовательский диалог с данными о задаче. Вы можете формировать такие указав свой функциональный компонент в качестве + свойства "taskDialogRenderer" компонента "P8PGantt". + + + + + + + ); +}; + //Пример: Диаграмма Ганта "P8Gantt" const Gantt = ({ title }) => { //Собственное состояние @@ -1926,7 +1959,8 @@ const Gantt = ({ title }) => { dataLoaded: false, ident: null, ganttDef: {}, - ganttTasks: [] + ganttTasks: [], + useCustomTaskDialog: false }); //Подключение к контексту взаимодействия с сервером @@ -1989,6 +2023,10 @@ const Gantt = ({ title }) => { {title} + setState(pv => ({ ...pv, useCustomTaskDialog: !pv.useCustomTaskDialog }))} />} + label="Отображать пользовательский диалог задачи" + /> {state.dataLoaded ? ( @@ -2000,6 +2038,7 @@ const Gantt = ({ title }) => { tasks={state.ganttTasks} onTaskDatesChange={handleTaskDatesChange} taskAttributeRenderer={taskAttributeRenderer} + taskDialogRenderer={state.useCustomTaskDialog ? taskDialogRenderer : null} /> ) : null} diff --git a/docs/Image Sources.pptx b/docs/Image Sources.pptx index 1ceec39a2505088ac37ce68505aa55e72dff5685..f3536ff480dcde3fe79b901cb4218414d598d386 100644 GIT binary patch delta 246773 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

y!n2Ti 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

+UrP!RNyN6p_VYsuFSNc|hZON8_{LuJ2w2|Z ztqDpeo2*igkH`Zd_AsG!+@#}A-ov?_c8(jTd6!u1gB;JpbwmKwt^+R{ZVnwL3Cp&; ziEm?C=LWwxpSK!V{%K%!mSaeJHRrhHV&P@x>NO#0P7uEQ#8&qfU3@v3tA&3UNVXT6e9hui_s`y})i(@5nOI zs*6ol>l*%286rWIt2*1$CFh-X859!`)Vk}9D}|rG=~%KQTm>Z;OJ5qN_iSg}emF6I zE5Gw$;6bIaVI7o#h4v1)xyyGu+O%I1E_MTeQX z>@D6?4p71Zdn&rV-VX;cUXYMOm?9Aw_kZCSIrx2189{!Vh}&~v6qJ7N_RK#t!o!8- zPfXN;pUP^@UUmqbI3Va?o7d%Qk+{{L7WCPlQ|T_HDNoSXDVdM;eI?#6yU~ZdEav3X zqhToELH}4Ya{FO7AFe(LFrER1a@B*ni-xL2Q9Tp1V95navBg6o+{R>H=X1glVb3esx=hN`nhQVV@)HD1+)Io5i}>@NRq5!Hgp_<`3G z%}Sn6)7P>Ww6=!UYbAJkpB}O6EtzVM+K&3Ri(jxDt_Si*_NG;wTpfGx1W^*2$?pr5 zN<{Qd(7UVc#RUBu1Ue4iaH7&@4|Z<8&(a#tTS$;`b#K+#Fh?SqdW2$p>aVs-R--0= z6~7-h+}I+c>aiS0$R{VuNvukI7gO7u;eXdy>-oqNw@N(gFm@aHMc-j2>x~xmE>_wk zX*vw(`=tkcHJC4GXYC=EFnU~gjQ�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%0A}~4wjls!%nwGu`pG$37dd9vuE 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�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 HsH6W6eVx%h delta 260071 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

a=V<);5; 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

    tBE{(1mPTbRZvE$H4^$lGTGzWgPxP=l6%_ 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
    TZ+)N?nz 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 diff --git a/docs/img/69.png b/docs/img/69.png index 312e60337d2108145893ec8a7755e7d88f4d76be..3e07d6ff659beb65a6e2aa0b592d6a660b534407 100644 GIT binary patch literal 68354 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%0DpRdXXI8u!Z=}aP{--}w6wHFJT0xQNemJ~92{6L zNc9ynLd{-GJGJoQX!FA8pXh+ASmeb)ycF0CgmT}79Sq#kdXPj+_bZ?}oROn=wULQ| z%Flf{v0a&x)Ck*(7UP~w&koixEb9u^+h!9S5QvgNs(d(oel13cV|^!UD_y*g{?R8V zr166qqxHltboai4q7jifOEV_13OS5Roa6pOF_Ti*GjA?2Ph~Z{;gF$~Dkn~wp@`B_ z*?N3zXTOxXv_OH(eADdV4!j2@k*5xNa~N^qGfs2G>ZxxFFlQ2{w9&c$hsk3JSFb zJW-fT*&`Vb^_AdayK)cp99d_2UPNh*Zn<*`VP}dy6m1k}hgH)*jJ#r@(4m;P%X|=r z>)+X1u$zwP$s>w#`^6ysOY|&NVN2g`?^~ ze1&2;cT27z+2F>CY#^3=o>QCsu`Ms#CC7x%$HU#~D9S>{g15MPrRRY~$vPaXwJo3} zz?Y!^`@GfpA#O0t?#mPD6h)tP7B~1>$p3HIE7+hK$ny%ErmCfZBlz7lnuBVLU*ZpM(F%$7=GHxS+F`r?d zk+Ia5AnCsMZu!&S1x(}PHEdBTWR%-mzqfzy4QwaaV0Pey{MnkEBB@8;T$HnrlEO%3 zLt0to85kwKhjOMiRHUNowt5{t#$Loxa;GylSM*{^9~|s6EZ;=xT8CEW8yAy!x)InO z_pM0VwrY6Cj_3r)z84vX&y8eeu1UVIk`r0A6OjuS`)N1MK1jkW<5^YuS>==4X+gKn zF8d>ug|FDVBJnH&q@+Hu)o!&QT{Zz;*U?nLQh2f({svv6jkXbOKme}xABPSTA?sz- z(~bQIcH{oiYGVHvUu4^#tJ3bMg=zLChM#Y3uQQFj;o!iSI!(*iXAr@uMM8@3Z^L6wmFfqa`By$ zOB%8V!G+CO*<3=M6J}XBxVYF{K*uaXg7~F^f0*)OC&3+{7@1;a3QMjx@in_J0*jny~A9=cke;Q$sHh-W;X(& zBtr_LokgrtnaQ~U9t+8*gC1TUo9+^4-WH3Saqo0UeI{J<<9Co7Rg>ir?fdw)sxK_*^4DuZ!ly+pI3@6 z4vvZH@a^>O%T;D#`!2@mYy1&BE1n{9ftl9gy?OePreTA@%&e3SeWoR26BI8`vE#V$ zZ3~|K#mlBHhv~Ognsabnw!NHjd)F@q`#-2MrP8kJd9?xsdS)Sq$RLJ<0W0?}{)(RE zg-%#T{mGtqFCJc`m6|x6X6;=Q#x#D% zB+tgwH#H2C;j&x4NV9pOU{^=l9wZ~&E1Hg<#LUo>Cn+(!w8RCK{5G|c|B*%Jy#lvZ zsjdc=8L1ELA7jIo!W3;+=hQ**fWx9PrTpfMTC<8H5+a*8>f$>s8S?rtt+VmhPfa?O zmu6n}mOtGXj0&AgqL=zUyD~92A_k3qGU}q1`e^s3+{*s5qO1EVe=yFXeXyp<0&&Wb zk9*gN>5o3Ui)>>IL8Ko&;zP&l62;mJ67zoTs+u< z$y)qjVHjE@ziqN4CA<4(C@Wph2;=ZieC{1?)9(J>-=^fEbaUnskBS1E^-hsUd;L(1 z70NN%v%)7XJ&Kr(;?BBQkh;QFnb)QhlDY5g9zHuTFfIVxUsQGm5$*W_8yy@&JmMfh zlnfUgpL=`8t=+RjpOG}#L_M4w>*0n@4h&1AKZqwdaX*Wlc2tt7*@)7Jnn1aA_K-92 zpWUU^v);W9V`bGE=bs9E<{a9V*Id}#_F0?GXguM<`s5;Z*TJ5<&6Nw*y)whjGP?4* zyxPY>H+*W)PYLg_qdwj;!~Tt8uL65Xq(VVL->zC`Iy3VN2${f66luLrJOQaY-A*qp zemg7OA30L(kebwuNB*8>(j(U4uc~zRg#A(7f-*wZqYg$Pt>W7w0(bQNX{u5w#CX~NBek<6yPKVsk6H5j%wkh?r32}G3{uRviycd#B>{4Tl5Xa( z4p#I)_tRUj`9b?_p8^{PLAAxlEn#-BqQb_4X1y^LWJ0HMhJi%2=DVx08^aJ<*Fs0m z)srEDFMY4kkw2R+_5O)Jv4Gh3r60oL(uNgWoeb48<=BBh?KOA*Jz1#kC!=BP9*oX3 z%}$HjX)oNVQKY(X2p2!yoDoV>CN6-HvIccV^l-$Z{}NkeOHCzVmVVQ zsn=8GECpO--^k%qXtN@*FE0lgBI%RTX_-lp_LaW6h_wwGNEo(&`inv zoH4T4vVL<5?A7fyL4J#1tNIO zLmCBe&oDK#H0UJteAc*jsiS>l%DYYyGSbI-J zijvRui#p?{1VTHI<{;6duVM66hM{O8f2I^z;Dsx&W#H!KhT?-X+1I@0>#Tw47?vVk zBK-BiX!`XwD9(DGSY288GT0zZnY!%ZJmxdVD;AY5ru3SJ(0-{Lp2zAeowp?%UFk~B zEPo8y>jf^ewTi@s`1|MFih|vRrxjya)yXZbbYBjy8juZgreL!KBNP}CE=bZfuv^I_ zE6Lk&#mEn9oG5QfIfGxy_Y>vm+>~j)#7{5JSY`|r^NK2tVNj1QRQ*W1GuT8*DF4z!#q3nnQNz zDAb3>O`~W~o%!QnMRnEPI5SPSIzzq#^Lm0xIeNy`ad_{(Tx9=T%TTj+zxp&rmV@uU zaTLxAyg0{JX!JnTLwss9@%?od1~QXaN+K$6To0}qqS%h1WH}53Stwo&A(?>>+3n%W zP&Mckb{*^_K*zQQQZ9JKQ9e~QqoS$`2>IF=g9hoY%aze{q55+Dx!i3eG zq{YzV@|jxPNbWGx3@sI3gNabHFdV0hqOWrqMUpl!9Y)%X1DvzyU{c3!z;ET+KwvuJ z7g+OY?VCYF`jAAwhs@GorSFFr{;UJLda3q}s&W9HR4JUc`^%{5l(V>N+pM8@D(!kOHh3m#=cC4=MCrK4Z=>7Gll#2qIqp=bNRB zBKULK^03F@^pl%EaycmQFLPuF6ez;Edj@^~$mIv{6m`mbQBmxER>i7xNh=y-DrZ_C z);}NcO$ckZzIPUVhv)e25x%32cNl#GM|rU(J-B^559T5mr@T@}2DU{iRKle3r|r44 z3!Gn(f+{mkM}hw#5ls_;iZ;)tsa}fiDE<>hZ?7FrpT<$%qY+NuQzm$yDjsOm=L$kC zs2Up^k9Q_wD!6Apsp*&#FZD@bprTK4YrlDZ1~eh8!@jSsW1EI0stNqcZf^r+2dJy7 z^YQUb-yiJuWql{@mp-`hY&ERNAA;{pdds**>_oaceH=LtxuPtuKjkQYs<#VvpOBC(lbvmNm>%7xkODD%SN=&c3giy5(Pe? zE)RQ-?RfL(C$U432?U&IS8x0-H5C}b+u(HDn|>gcNBroU4e8_$kcbPYs6hR6np@t> zA+ecs2!c9d2Nt@uZ!QH9)X>D6GzyH&+uUKYq`8Wgo*! z4YXINZ{LVHQ!I#(0SqOiNM$CYjt&eWehhFa;*ciTt%lt5}Ia)%%e zXOlsDpl-xuSLi=VH85nU9WIc0S?3F;@7ArzoY(};4~hOi!X zV)~yYvZ#6CAUW_+MFtKi(GG=EjuilgKVI*Tqa1>)g@aG|?MTZvFm#N{uC@S7J=9+m zzJ#++d`mi=+R*FKfkABE(ixF9x`DQ$-6y6Kz(+-2T=)VCobCaYcNKTWd}RyWd+WP5 zS^FRAbPbDCnD9mDr`E8#-@iL8!|2{}w~htIBmat{9}bTnu-Vmj*b9}+1G20SV|h(n zM=?;NE6RdJ3jn1bsTEDd;&3PGikMk1m#72k02Zyq8cbovbpaaZLw~;km0w%C?9Kra znUG83=IQn=RYCla(P;n#nTVkx6w`-6{I^$!<*TTvnW%F=GWb*i zm?hAkfcuUBj24E`Ya1598Sq6&ULrzq_^#yeRfK%Ocz3E z-U6M=y??xFW0+t%=X#hl(`wnIJ#4_{uaN+HQ&Ltg{@5#jh?z>uDs&WHM%&C#UXX-- z^Ixe{$tAVg1G=sO)OAGy=+y3(zsqwAG%1ONTrQ88laOKK`%G zhjk!V{>DulN2nL_8Nw>)Gln1d>%w1uFz8u?6nII|d#M4Rk^`=Due@hEs=ycgR>ZhH ztjFrF=>D>!q=fQqFTALv*h>Zei2WbdBPs}I5g>Ll;(@t6;xS@k(bF-diqiKrSJnaC ztu!0Aef7434hT?@9~gA1UYU|!bX7xLKAwaY`;QQEzD}CDtQ}vj5!anYbs*Qr89$4e zv1@oebJEOsycBD*aJ&3{PgTbO{L8_C%`kV2FDdCsHKR^BUzeqh32{{N>{)b7)+Kh- zrWV~T1R%tGYnFaoVPx5jn-#e$* zn3y1pMP@hWja4fz&!bLZ%(IBD`sc@2Sv<5B?M9hCc7IMHB@(vFcoD&|LS%`-2|NDa z?sei>W}c@(a|HT3aNoTDSdON-?=ix4V{Ns_&aIUZgLcn39k@4X|B} ze~$aw{`E;5kz}^Hx!XojQsJ+H_LAub>R0zZ8IDeWnqzLS_xbbY)w37JrI(bn2;M=M z^c5_)7gDs5HVdr54F1QTa=xOrJCMC+2cKcjDc*l*_lgtN_!iGKv54u_xW#BG;qz-N zk#YEw{qOlNZnyDS@F+NYvv9Wd+ji%}*1X(iLLR5uL-9KM5c2)6{zrQ}=W!E7&?|v% zNN-;s-#MfX)^7Wc3le|eZ})Q%Z}uAL-=Zy=eClNzCsbeAad5Id@TvJjjYY#6YT$cS z!s8Fjk~vM2InbSY|P9{BELZ=9AFSa_0KeY39wa^gcSDz{`v{oxs+%4DN+P~hEuSX(p!}s>!@kf>4 z;NL3S*Cp2>PnrcjFiU%P7WV~u40b;EXl9o1uPW(eoV7i1G7eBYpU9l#!v(CF_Fp>y zbe3oUN?bD9A{K}+#r>YbC{RoTy^;X9UHX^XlUaxr$9XX<2k3i}mv({uz}X{Fge3dK zhfM$4`t2wLieLr6sphbMf`z7eHzIV(=>Kqpi1?tZK#|@JL6n9pf22=7o+_x`!6z7hnDjNdkNSzncg5O;fP{6Ojz}jN}uI++= z>{aq03)7``QY^Y+3^BgdTFT}pcOY+p0O14qms6S6RUK1L?%V!Gu1|&cGcDS@=_eov z;s2!>FjG{~+Tw?q3RnXH)9mc*qpFH(?!5<{ffBcBBotQd-2clEU~I+G=e@rl1(577 z1xN^gYOnk9CA|gP+|tmyEA)bAneLGE|A=we9%!zB{+Dzh?_CkhLlCck%w=DMqelzG z(-Z3d{RoILyFC9(#8a%Ja4?q;hhU*q}shy7xn*R+HhJMfbo&wqkjV z5C|dW-{c+l<;$0~H7l9~?0f=$S~G7sSj0Gvd9qjxh^1NX-;lc~r!`-YY(KW-k0f4$ z>X5%v`{iVi2qW^8$Cw5E&j)7nok8#`C#4F0r$%d=mypaw0{7pU zGS1PudO?aFJoCz`eWj|5jISC=nVTqeQE94;rzvC~<+i zQ(ZVb50WGn7QB2_PE`KJ>YjDtsi`R~Ev>t|JJ%1B8h}6G{mrZYWTX#!FMfCU99mew zi(B_L_r}Nbel8i+nzy-cRj$W)y-YBC*J0puj#5zh_Vr9vB9W}ke2(6#R&NJ zyP-UP$m20yZQ1c+t3f&2J>j9iZ?i66TKyKgy~R)12Bt6pDd2Xwdas84!N&YoN%kZk zYRubgW||J36EoV?(bfK~3&_`$Kx_NJc^IJH3s>xZ76H`R2*$r^1Y*-`hGhmS_CjI% z-znCr&=x<)6LfQP4P%>3&S>OjxwMd1(*ZNqbCr( z4`usZrUGu`M*OjoR^cNh1FJ;hL1)Kk}hQ7OwwV1T$Wdm3>5 z!H9sGX)K^G>R`#<<*Rb$+vB<14+b)otCCK4mrg!!cvEY?4Yjx1#OaH8t#+>H!I&%g zx@7#Ge7oXXG88Zs_UQ~p#PrazmM3dVfGEuMXMWwEf?5H>|er&GvD|d&YpWe?l zlArv@#rHTnFm1D*OWscy9Eeu-Y54s4__u6tv%H0DGSjk?lQ65u+XtKV;Wr%-y(I$_ z4?HFL*^`H1kA3bmz0Pg9VWX0)e9ddXZ6r41QYgXgwbQey zggoL|P~{rQjpj>XT88p2S?GBWw|MuQZd6E5-Te4C%Xx^mPjBYOgo% zJbE!cKHz;n-}?A$bo%m**yq;9CRBg@57;4%zKDncEsg$cQ|{82cC@I0?*t~hZMrBn} zrcquNEV^0<VPSQz2d!5_twOY89B5!{ld$-n?4xzY{e9=bq$aPk^!p-? z)PQiXUD<4GZF`8=3jc}+*MaxhKN+{q_PU8R0yp3yQYq#tnO<~pV2p?D4WHi7x&o#G z+eYR?X&2vwziAnl{xQuzS-gx{ik^5bv~tSCGW)L3qku86 z3k?A!aS{RvWqCxp)o$kPt0f<1DUXiME%XH5qAAmgxQFz?W^4LaZs*d^8IwguPM%FL zYWo-al5f3h&mQ124i`2U4gLs0-IRY=-$dS$%>Zw}odiKGfSTuoy*&q3HSgs%6U_*O zN8Cx{hPAN(MR=-JV5Q@F zbY_WfQ{bM)k&w%B?aL5Xmp`*VHkqAzeGh=zHw9$_+~B%Oy^+ZIKTOOH+yYN|%r^zi zAvf+B%*-@@er+z<>JxPJGl5%IVB0|2UnjNcR_&_Z+>exgq+z^JI^je z(w1`WT+QL?*A3J{fWG;Q<2b^>8XrH!Ag{}g_T`KK*!zMp$4`95J~x_=15{6M+hDcN z_bobZ9bf#8s(v}c_bQiG%(BbU!d-xyedDHbI!QwGO<}7SLNYs8Gy%nz2m`9iTReen zVy83nd=Xou(|L4cfB)uY=H_O9^Qtig1u(-$xvGV$WIK%Mq~8v=m>0kLKfmJh zutmT5oISdoytFf(FX`j`tJf>LcFSzht)cVByZriN6AQ%HW7Y9O;AJ7}+k==*Ro(no z=ZEh)0=ZMF@Hd{UW%)()04F2DJBc^=drq1@;!<)n^kX?9UqzC?6_k*;Ct86G@XzCI z?!U6CC-hcRg;n_5*ucP`fJt_0W)8?JheGp1WZ7oig9qwyD6vHKH3s#%o=m0oM!O7h zf6d;!-w*8c6}&w?1KVdo%0f9DD11G40+xHTWL(+l>3C0EIBdD32;L>fQCf5EANh}w zCUFrm1w?4sPgVdYzie74$k4fI@~l$?qSka8tqjq;iG~$QY*cZ+fin9iy@*u5t&94l zU4fT*zea@4_g8|>rtA6a1&p$284+DR6Nn(-Ikd;eF25H#><{n0EFbxM1kC*OxTcpJ z^UK}wW|Dr>xr6#ScpN>em#t-IsEa_=os1Xv#r*iLO>H2W^NY~OVicOUR9h(Nz1AQ1 zg%Q^U@ojA0heVp|9DZkdPQaf(?{~AAJKcBvxiW4d)iI%FEMF>M4$*--@tmwC3Vnsv zXvc_tr}e=480$kn)@w65)vEAcLTvbC3oPW4(so~gF$;xnzANmXxS^aJLl;$a(cO58 zj|3k)Uss~Lvvbc;E5jc$Qko5?O2abhN$pJ6l~dS`hk?bv4tFQxdmN)|@HWZ#(ll5r z-csm0juHCyIsFL&V^tZTg3Q25Le`6z65ahzn- zSY+|WO0Q-dS4fO?ALA{DLP24(HdVr)tzgh2^G7$~3YbCgq(TGvD)BvGRTN z*hX}Wfq_?zueZ**jiax zSyk5ZWslV)0{s>3*xr*f&n`;zCaIO}Vxj)#r_ypxY8Uvn&Pr{hgn*RNrXuMChq4S*ROq z1Hs{!n8D>K&3PYv7_>Fo;zOQ*aY<6S1 zOUxBv$h3E`b9i{*NZXy5;`+tQ%cq_=-WvBS(LIsCvJ9sj4c0SvdRSnNhnZPsMu?gw zaC}iIC;M|kn-7b2N#sjhgSlT=EuRd(5uy^))i>r-pOp5QJ<193C1z`sRoET!yt@|*%JrE-dqd1tU)GSCbO6b%n{$A33LSP3~ zmgaXEu-JC#(aOMVBvm`<;BB@!kBm@}_=%|yDk0GpaPfprP~?94)K$qb4iQnL z(KfNJw}Y>Pt5scLt%r0T`I@uv?6@FQnqOo{wm^X3`274BeR@htdc?G`i*NMCJ*Q1C z0yzd8{S_H%mG3FG?vZz{VEeZ8a)?y%)pC2Tn;W7)29sPC3gwU#qFBc+j7^Gr;nwQb z6PCQu!D*8JGbvCZKQ*(TfHZz1eo8Ze@u!6QbZlDbfg(6Rt2aj+=eYV9XP){+%v2bn zpfeb876zR0EBGA-biI3~5?w>uiiUE?R=bCWSpG~})#6)_lOqcRrIW;ESU9>N{GPW# z%Rx8#(Pc0siAu)PPl@5sWneyR9vfTr>UzHI3P z#;!#nzG|TfDYe;c9iN;+Q!I@=opYK~QY_0-64>=PoSX&#fL7Pn0AZEt!IenA4Pm8# z2C{9eD@ea%lzy{1P3U4eF2b1u3_GpR~GH$W%bmb$gM1E$j50(4crl&DdOl-^582sF1 zz%e3Y+}vMVr)QwyrV$Eie-!wr&v>-l?aaG|zd*WPe0gqUc$iZTvBy9y z3SB>12g1d*PeIXjB2P!zreYhq7a@rzepU{2c_T-s;T2#hHZd_Sj-i1m@*6;cA6T;5;$KL63l-nqW2b|9)E;PeW%qzPv&Z`L#=^t*%d2AxeX@yTiTH`} zMh`jN1gpx)XmPpc)?D9ox>WUmD#FMaxpeO75q-;P8A|Pz!yDq^2=Cj5<}%p2$D8z{ zPa4(fUh(R5HuRoLEvH>9TnFfCWR!ue2Y@p%brB*l%`(zw_d8&m9?uy#ZuEw z_!90AVUB2*;o%f`tr)R|0 zYNp1_{yOnz(mlw$ zy*ZI-75WdYzC1MeHlJFwhBBsW$CN1?w(D)8?W9c#3qxtNhXLbjtZ8(c<_lpAGLf&O z$0;{yb`M;{A(L{+u2ht0fwZ=vP3%A1yQ1W*VQzt(ZcFdfh;Y`;QxzO{V3^`ebmSWH zN>=(;LOp)IkVEA^B2|v11hc1Ii?$tPUok^F zD}gOFXv2_$rmM0m7Z{=O^+KSgmrpX~PfS#23D<^wPoRFyRX>;HsxeCmT-mM)VV;Ag zvlzR+D=vRNh5MV&VnpL47J~lWTmS%~sxKuXR7)Db z{uWp1p;X9yHWo0bTMio{rv+L|wW>GPpo1Tn24_2gf(W`dnTQd(jCqOWNj`tI?5C)wrxz3y1pXf^vF!c(sOac$ zPGAxrj|Lq2I{F1EXao!MKgd~|z~l}_JDoq|_*XtKKmW$w;AFO>3v0QrNm+<+t*UgK z*tfCpK~H}P`9_ek_J^z$Sv`e1Z|nrlcHo~+{XhcI2>1U6pBAsoWQw=OYjQ_OyUa z4C`MqPH{@f(^F)$SWqb`=Lz-~=McD$>9IG(`o4NO`pymO_CEX)4yQ29zeY!X#le=s#aZ2h^DxC{vCsNP(U$73bOw$By_)f%T_%$M`M7HcZhth*c;dfM0C!F;*~eoh3~#96eAl8bF{2O>2ywVNV=RWR&PdmqEvZ*=}g z+E-i6OiZgS0VHQ=#?7tMq&8d!JbxW*G99O7e8JY?W*fr3f`^ym=foh2SbsH8OhG6&|$vN1;T-;bbAmdxF*G?Y`X9F_I60@9igNJA)?uI30Nw?wo96jNDr<0O@qSKm!RytQ)}RC0^?}4cKx~4y5&lQXi5*C4 z6pxR9JJ@4#U&#ry^z^QL{3d6TdG;>>vR><`*;Dp)Qg zURcP(ed#Uz#P8Lwo(o@r=NnlBTD|=dn-##5udQZy35+|WuYq@a4-QIHl?>=^$$-5( zSx3_4slQ_QFvrt}s@Pa^uS+c9Hl5aIEA7auurX`R+wbp3Xtd^>`ahU>0M9Y?4JI>N zLKQ>UHh?#Og@u`N^IpHwSP3aFuH3u`V;}Uc0nU>@`?L@kyzuqZN!xj)(|@7$`h5JA zMGMkuJ1awYo0s=>|HR#4HUJ{T?7kYUor92VKBU&>+Bj!ED%0)E>^$P*=vR+ieDx?v z?FFk58!~nv);TSfkE$UQ6C+{*7w*wo&!EMd$Jl41ES#H$Mw7d_g&~m)#i*!1B)_sA zRm7|3)mU}~pI$WG+soWbKHC=#Fyu2C%}}aoc^7oOb|yh+I9~V=5x6;8iu+t@wklWl z36B_OcMplnyg#&5@_4WQ^qz!0EnkagOpYe6d3K<97ddct&osP)z9Nb1Rl!*T~;RK-$gxwzccxm!Qm63=F>2 zTm2&Z^XUC&(N`@wI-eIaE~Xl(n9)V&?u>|E~;`J>`r zeXianBvI39s(*;#8{;vW03O)zyzDQ?q9ypvVBGn8?KC~itl?6`sqxZ;a^gh=hJjR|c_Yu=#HR!WDRQe?@BK-7otWJ__2o;^niW^V z*tV;LIcdNKKGqt=B)SNfBISZriUUb)-a)1It542^J0wHD0{^>V=k5NhQuz|!j)@?! zi<}YWZQLz~mBW0&7l6`OUJUZq@Bz9t0xdNe=1jW!KpFpCNZwd-d~&p4Lg8vCI$hlV z#KB63EJD2n3=CG;haFw^v&$*7ts|!>TJTsUIZ|^5(mA#%wa=_ssx!LO*(MFoz-LWU zh)`H6>nZn1c4%D2N`y|@DCWrmIi}gW9v$Es*h{jPC>*+yHDXMF$EpEH$=_5#5DEjP z69scMPmCw|or>DSzTosi$jW6j!v8a;p^`GSqyoMLG6{;M+GHt3E$2lDNJ8arUlan= zIEp7tQ*wX&JLGGBjOYucX-r$*H;l`A$T=hJ0vi$x2ckJJysF4t(wu~IHTQQzs$QYz z&(oeyrNvK>-CQ_MU~lzB$fWc`XZNxDq;V(SiKJXIInd0z#rY>pyb_u0QgKm(a^QI> zm_}81^djVulLB~CSN8*pUg8BzI(SOvb9Ok1nB;3MJz8?I7RCSdgudFa)KH_$-SKh( z^j_=Jdm4YRdm`CRUe#JISESv4px^(cyo_?;!9D|Z@@>AmpQ|!HsmLdj8?9jr?B~2Wbioh-CC+zn4G*> znN#dJp_3QAvY8pLWeEk;#&(?!Er{$v3JSGK3k{9T^u_S$-{)KgSsv1HW#5A!k-wS9 z=sDLs6vHuX7XsItA30`)QZqA=vl^1)lo@`r=~e8r&6PH6uZ@Yx4#A5VOv1xYv_Vl( z6m%6fXE!se-bcb!ad2V?ISA_T8x`QO#3`{`6j_gmH+B30f1?Y+{>SOW=yw6vluv-k zUBx5>sHHgfLSi5LN67ct)MH_`YJJojj!a#BrqDWEl$?Zjc63CDBHcz|3t9)CC2RFe zxuvl_Wn-0<6yoLJCGh|M(e>4FQEg$nG!i2nI)s8s2%^N$jer7zbf+{!cXzjdbV^Eh zcS&~)E#2L9w{_0>?)@%*$!|vXT5GTM#`8Sydfik%Atkh7Vu17>tVqN6j*bt1=N2ub z$fD$^h$JAVls0N{k3v^6F>wD}CMd+k$w5K!B9!6F!7Wf5mw2m~pL1aUkm?0va<5LO z_mreLX22(-w7Ck7=tOe7K}zQzhX3n|D?1@7A|!xppA5IGHb^6fVv`Rp9=CwYX)}X+ zSN(Nqy*@kwlj1z;z<;N!O~%PgO-D!fnvM1qa8>TB&z-`)D89nIpDgvPzw*(2D*5s3 zJt-w4H63lwAgfUNGak_q>eb*_>Zh9^^qSxcv;~QZI@OYDKtpM)YDAsByeJIVVnkKclbpPuZu zB~kIAr@wFPM>4a&;eKxaoDV{P2BTKyKcy;a|Tor^-W~{Pv*z3+U=g_({W{GWoT$<5D|mkr*Joe+vmSM z1n@v0WhnW8IZe0&uZMN(2|-VQ(}iOO9r;#0S|N70yA)=`xM~LnGNdGPJNy_4F|?5& zT?xz@@6{*kDSXzucIG>>>{nPB*FRpPzb27VZr&ey6%)D!3;gUc~v^v z#ZVc~xu;8##0l-WshIgjRuQL?@X$n^N4F@6q2w9XqeRAd1e8cuj`69ZaTuwH(p0s1+Vlj!~Y2vQMT(G~F_6hp* z^mK~L+4NAFpxecgp9do9Loj3qnA!-QEG3!>$ zfjz})lj}6ZZ6fiOCbKkc?gn;I>X#<+!0VFb{x6d{G%c#;Q;*ebq;-r^v zm6+D`2xCapIL{B_f;hhnBr)pPT6;^Vwss1aU3Lyb{g}GZgp5yn49i{-L?zDF*moR? zD-M5j6r@#A<2PZ_;4Z&C7#Ap=vN#-qeeZ=3^5#2@%|^QD&CN>qi3KqdiK`qIH>{3z zKF5e5cb1x&8XK|xG&&m~qkq)ahA{QH=kWpFvZLQig~C|z7e*fKN2|T8P?!*XJs^|; z^7a{nRJYyvRCg03nq2aa)6o8zcSx`v({e5@3>@weR2=T{uA_EV;*^a5v)7-r7A>n) z2^0E1m1Lx+^Bpjrr}r`r^v6LQ#?MAWRNxU{r1r?Z{uN#yQLPTQSS zNE3E57y;3X7!&1lhjyC{>e54`)JgbMR0JtMBxOgM!}1}j>(}8E-`}JRs%KS9?t|Jj zkPy6v&MD7;ux!8N?1}8NGAY3uq0kFPI_$z{{$v@lEsI__)Stg=iAG|%e}3>T1@1GP zpMOx0-_j-H`~jVHIWtd=^TDjxRcOo=>Ui`;&%H!?MTJd&Jj-hv(We0V%4WAW3xg>e z9b-JD-&Hg)Ag)G;MNsv0C&eCof`5URinz2f`x}{naszhw~8@D@G)iQ>M0g{-oCQO z)~t&M57uJG(9hJK3z=Foqvax|%nus$-=GYlw*!)dM>1iIH3+zXQsSf~7o*Z{=zDP? z{@0KE`UBYJ^$;FWQvCdft_j~qkD8z5q^5wZ(dp~~!hUGT{PJiO*pI3m8~5(V5A^W{ zXl!hq0A1Ekj3>Ck<6$+~myKubh>I(gww85OF?cI@Tv230mEC0GXlO5Dx1?SJ7ePLM z5j%vyfvk!CdfNT;NqIFQCNEqy@)BlI7Z?VE(E>kj<_Vgoy{+CS&8Z{&igSTWJ5niI z!k-MG10kg*)`XkaJ~RV}TO~HLMz{ULVuMlQ6saS=`QzRcDKP0|C^`oW3r!)~pa%Zl2t0TNflkToDfh2TL-c!>ZR(0!I{@7kYuMwy7HGP7Ej(oxNJXitH z)cu02(Cf7(=Mnc~Sszpgh&Gxvu~xsFLo<8*d}HirV<=Uza40t1;QecK_P*-aoN#~Y zxE=!pEcZAB3oi7u=l8L;%qPdVPi5GC~jr-xz-*mbe92HS=#hwuCcy!r0#|Hr*Tih+e$epZ6-Qvlmlw~T2Q5?HA~?5Y#98LP=6JzK z_ZlcnW{bx$6BXC&^0~Z14Pr*YVR*$D+8YqG9wgKkE9$1<#;PE4?{EK0)&B?kaz&nZ z=at#Q8)@LDSPXo|5h9!xWu+sKlr)EcK=JH7J=g8YL5PAM! zZ!T!hZl14Q0#c@)J-X#D(*51PNtAMQ>qMB+1|5zA&T)KG7Clapf-+e!Pd?CFAWop* z<2TL9r`YdSEFUGh{s^1#_ZAoC^6Kb3Pk*D1_8U)SIz!=T1`8?Ud{XE1A+2w$D3_a3 z2JUL&IBA`7}|aHsYV-1nO9S zaDaJw}dQ?|eUaAa{eYH80XE9^AtDKF9n(oIWw{ z?nV>>Tzv8u@Z$n~s;6z(f@Ucf`La2URBqra{*lxEK?J#wv0tkOCtzk(C32gnJS$r~ zbwGSTrd40G@jVmJ)Biyw@qq-`X{u6GuVwofMHJh{#^#iGpM0^tZ94m^rR>ksfNO`s z?YPs1%tYH~psOmPCl4ONdiI1EF)CJ;U9h#_T1Ams!@WJw+VD^S#Q<`kkan6>`#MH7 zm%1|-V&#v)D4;}U5u~-W6eDsS9`^W|DA&~bJG&e64-} zScWyg7fKID^YLoCp%MSYs{yPjn1|TQ|23JGY&w-!dY5NU!$$8HS>e` zgr7M&zQ4XF3i6v+@eNs$Sf1v@s6o{9>?Ry667O%grGg0b4N>O7zg^A(^^!9BY*6J< zfqoHq7sSO7kD1Gx)`Wy-QndV<}YPc95x z^QBcb4M;(sG#~%2UXhZ*{`}qh!?-T!Uk4}U5(U(m74X@Z29sp~S-s;9$QoGfrvu5} zf&aDR04xyJ;1PO<`x+k&NodhZqv!(B31tR^K6Mix zj@WxfUMO17y%r|MqxTQ}A@cT!qOE30Yo}OBK1U;pT&C5;)G*7J4W$zUsOI<$MtnK- z^%5BcAZ7=HvB#P3Hwz9b<)%jN5>b*YJ;PESQI(Z_hE2bRdO&c&;5Y9g`jM8r4_gnH zFPFQHJHu8(NqZl0`f}?rTb)pM=Ct5=&Ar`|=$9D7{#l*&54cb||3qH|tY_vras0Dd z;f2Atax633*@_uL4;n`|DRmDC$=8Qx(oU&K?E@dgr9bJvEU&>qE9lQw=m|KdM0EVf=_UhZQ-X$Xbg0VGZR zixWz-YDfFFU>idz>c(RItsB7#IlHxNGE*~`YSY8W8$VKqM}|z<5-D%oT!y`}A~Cuu zO=~_ustRW+PiH%Nj|sE*1DotkHpfS<0u!yi#k^9lH?iTDQ=7g_s;eYH#Zr7@c0G5r z1)X7?&405n%jyQpLtG2Zdf8?7N}1VA1(xdzv33rw0@Qi{%={BS%4gl-O!VD<+vETY zZK`y-d=KW5E}Kv`!A!+^e$^fg9z8QrvO37CIh-HaWD-;1JpNFS(8O@NSArNsl$Fpg z!Ssdh1FxNJsjaR~-Q`B;%CZC2_RGCQHb?v6Pc17h`eLJ#MXJ>^CZ;L*Dz;@g+Lth0 zD%1J6zEkG>85P&#M8()@<1WHVX_rELx6QNNe^LtI{Vhe5EP{j)0l)R}=ipK}j4!{} z3FZD+YkjxRb8#o5$)87s=2|Bvt4BUhgO0PpQ)&P{e$g{w#>+; z*c^J8YdqX)^7mkk1uC{AN>!pdQ+D}RHy=J~&VJ3MNo&EwAR9ANWmRF(*~|*Dsv_aC zUT$}du{DtjVxdF$3nJ;0zQKY z2c}|UM&&J(SnO6iMmhERRX(bno6p2MaE2y{t8wfPb>!EVtCi`KnHc58vFX63aVaXQ zm|1tHwYi*{m|cd`>91eys_RB(lF@unDYIXT$;$FYnr`hYtyPK-znDgSxxbT8vC_+C^lMY{6|j%9}s!_9k#XFYo*N&VSfT6h0HNN)c@G?fOd7<9`UA~NZP11CmDE*>)q$pKqqcL)x)j9GNmphT5 znU1f_fny3$$U{N;6TH6>0lYO%F)9+V&B{rH`GX*CfR0Zc{GtihRzd33;$HB}=`4bl zmX=;?xf?&MK62;r<$H{{gxO6jmEt|{&PJvn<`*t*r;$2{X#eKqSGvOQhF1M=8spB& z2V6Gd^8(a>00o^BHviK@ha=ZDl|n@Q%&;pOv~Ue0#wSizi85bIgsB&0y6 z8HPFXPfnS%(bh6h-wLql@F$Qpg+-8G7#WaRQEmLn3;))`{G{>->;2u>n znRL2Ng#P7ZhD7Fv;!|Ae%GVAxETK>%1CunezKQ9R#UJ0rOV1`|cV^yVQ7Z|`9VXTJ z#PF8S9p+qZT^g^D-xxE%Daj$$z-Fao9H}@{92EtfWCoIE2u{NUp=O3g_TDKgL&ny& zwtKTRc#gf(W%`3Dyu2<~Czr?TRTT|mWha010xu6x%ywah7>D&~SVO;53sr8iG zTJMW5;kl)_GM?*DI5*=k&&|j8UX?{)Ti&lU1?KWjc1lWu)awY*QtFTFa*2L7w{%Wk_ zYHh6z>^5t`w7vziagqd36auE~!k3if$7N={S=-P1*VcLvuRpXMjc05VCf0s&b3D9S z4!=rZ9fiL(4ORHJgf$fUH`qn&qUrG;ZILgLWoDcbMi|CovsUfM5 z%gw6S8EQ~Q#`o7v_D?=`rOVG_ud!bL{t~NyExsRZCQzlXAlh!iY);T65Xn{MbCczK zdLk+`&TpM$up4=ut@!Cv@QR+5+F`$s7zBU9x?FahWXf*kAhfO5_Os-(jtx+udP96v zln?;rRTz!0^(W-|5DD0sUG#jXdFa#z<_FXmK*q>n<2IrSjNAR6aTnYiCE5f5^)1)y zF?-^?<&1Anm(%ILXNm4c3Q8>}Epwi!^}#FYTe-MuvE!R2D>f~ztYW;ZBB_%C<+={H zOGGEF?JU=wsXfU;K;keuH&wHIdJm7!uzziF{#NuhiE}M$Wx{J*)>N%_?*q+YiTxHy zh}KyoyD%cJ*0|t}YPvcFB_(1ldIg_$3(%#$(j<*g{lPbB8MoWpbMmm1gYQTQk^n_t zQgS;o9PzyaU{~>e(%H@6v%ML!)&-d@jFVz$M4u;5^}^7Z`7+QxylP*SM}KK`=G;t! z%jsZ}%EGkvb&tK+b~7Wk~#D4Mo68HuHA8;fl)AOKJe4*1+?D6gyuA;S%Rjvcw|A&NpLb$NEXIA{4g7;L z+#JEg@RMrl;@s$?q@BniB8NF^KK}J%L-3{pOD( zPANkv8@OR#ytmV_Vf^6kbFi$BXHADGChZUk@i|d8M%jpQ?Td}mf`ZG-ySQ`mN=QtX z2-OBy&v|zlH8-&>hB3;-_!$pRqarQntlQu;joqyXn6x1`dYv?>CVfKSGk1FUm$524ovFCcC&dxT$;tYI$ z2{ySj5rGaDW#9=PsUY~W5ug#&y+LWfx_ScH2pfB@F@zXPz39~N@f<00Z%lLnZ){3P z<@(?p>GouE6lJLw0TyMd_I$dLDkq{O;QJXjKl=$czk@Ryr3Zx&D^jKruD9na*=NL@ zM#SQU-ICLEc2M@~Ea#C>XGtm2BHXImrUf{dJB2oZ36O5fK9k+)bT1;+S`-Im9m6G7 zrEMbEkfLQ_n14WJLfNP>57gJzPS40deCU_JO2@#^MYhyF4VQYGLv z8e>F{X1;QMAL<0=1KvD{xyx}9BJhIXet(WQjN+O11ePigCGq%zTn=1{b%XhG*!MHy z?*a3bd!*6=-^SMcjB+OgUeN*s4A~TE+N>z)AS5~dfB!7W%^YhwhzhkmS2SlT#KQoQ zUk)28^|a>&=q3Qt-4^5i^ut>LV4n+tALMx&c%lCpE;TI;6)Y9^$^ZJH{lQ{dhGgXJ z-GYmbnqVowIQ*K@|2^b8=gGAIUSOBO{oYScV0=;pLSR|{(szjW8Ae`d_f|&@2GM^$ zWn+gf{4@H^a}Zv${pbOvC(t|azlUg~ImN(>>!029KVFW=xbKeS=;MQ|0$ste;B@^BH#WB8j>nmO51XrRkhw437!m-4jvv+(KShGB6z{kTCONGhbxl>&B(a@cy%|!GGE0OXwO-sOtIV>(-wqS6sY)>NPBA^F- zw~-8&EZB^M@L>-V1X}vYX!e98qO_DzLP8?;O|vR|R<@K5aqROa^r@zV{fYDGGeTy9 zlZBYp7T*w}QO((+LLNQ-k#io@_yo-kO}unLf1WQhLf7GwSTp(>Vci>S=#w1uUoYyX zojs{fCN-Coq79+zrBp$Xe_b^d!Y>CqFx53QbU3AK5WaZ)^yd)>xg;)M+VeOM${Oh| z~uoh~;{7;Gs@Y zjQY<*TV;;+uL1V}|7$=w0$@n#KKmrd#H7E{VMe&X1lq7y6z~8uxHr%K+?1ZXC&X+M zJL$}FcQ?WFt9es#_1$H~aN+F5){9sZd_UiiB2yRDtz$dfgXfhkZ=otG`!hY3f;Y~Q zWg7YUpB)|~{5r%xXYiC^KXw1DjNvCGvT5AnU*08e$TxcB+M{2GoJXPph3mbNdXj~0 zsf3I2;?A>oZqvlLTi4F^$ZMd>2rO045yrOUYQL3N9hZ`R{GuK>@Yq}L?Hz*5AR$NqlIHuBmTM$ zbf_YF1Nr>j)o9oEm}aU+R-@20+?k89v6b0YkLi-sgH%{c#cHsfZJu4fDE=VQeOdc*p9+CRF{mPh`i(+?RfTWmMlfF*u0*?f_M>7h*h?G}U z^!2lg;ugPt;De&PMf6I2gmqblMYMeBs}w{p9puy;<4({=Z>z&*1HE9IkJ?`$I=pI| z=oD?JlQ5K^r|EwTd&i|bHr=vCBf)$@Ja%Pv9p~pZL z#AS(CTS&BQO1U|jS!tS#c5js>)K0r8OlDv(#aAB!&>u)Xj?+j1e{-7W#QYp^HgdEy zV5u@7!I}ccTO`6NE>yu}tOM#;8n#fnRBB)n+Xz64kqW;*@gsMAGt_iFxqo-FtHF?v zVd&K?K+ViF#>BWT7y=Ktkq5tgsi=e)C19$4J9SwLiA~Y^1XE*Ev$ozMbvf(4!X;gV zZEAX&`h!sh)?WC@ieq14%FpBfIZ$7j3E%Ji?py0feF=^qb4Oo(ctND|J|?eFz7 zpj$u+6*2URNPEiV7z|rHT{~ucLpTjs>{po})rWqA%lsi)ctJu^_EN4=dQySaFVfiJ z1fswF-+>i1^(&jB53`bBlii*0t2Xm?GM&FsLFb|~=7+xGmUoX6^E_JE!HG3W{z3v6 z7(D(6wb$UVw$=Ew8PE95&F!{~u5^&PSwq8ueeIxwJ%a^y=Xt7mv|DTY99SXIHhQjf*V0%(%r=>6F)oJ5c?Rnc?u6oLh()A~A(D(lD)HNu-c zRxxHzmWm9Z5;cWw>;VYZ+9nc{T-@=h@PZ9%DlYRev91NVL^a2_GV!wwj69P1$(y}# zOBTd28)=Ee^?H(T^q6=jKA;chPA2p)az_cC#m4euI9(WvsVm6V8Y-orz{<$zneNGi zMg5wZ3GV+FCs$v;_3QXL0z2@6+(&2}xh@2~fSFtJ{f@U}b3o>Kd&dI{Izz*BAI|mM zeLwa$P|;8LMi81}NcJrU?}(_Hh}GQSqOPlhKVz45VHhARai0${dtV#0bgjjON(42$ zt4w|u(9YbVD6MZCp4#>ed-H0cV$0FwJgTj~;*5_8lOe^%Y}=ahqYn$K#`fLUDmj9M zuM^+16cvu%x4wIgt)Q~iF;_}@bbtsYwk|d;hKP+-nAlnxg}9ug;(rj{wumSnjhM@VDp|p z;a5zv((Gy6XT^rHz4;S+(~hC+>lR&~LTn4Load{pm`-c@!)EJt`)~`mh*Dzxz;%VF zyspoGe0o3EnOObCxr%`IE2s>spVG&4n?E$#_ufEBm#$ zwe#%Rq(EfCjx!!(o>Y+QH?kilcenid->tkv${OVdCEjumJk-6abP3BpK4n2*-WM{M z3bVg@<=`+-J;kB~?%Y;nnF_=}o<$g)8BoT`o_)^li7Gho<9)_;+rSM48S8>j+jMi< zHV@UPDC^Nc0W(Gsfrhn<;pEU|#|&WFVy@_QD0O7;WUQF1LfQRL?{T1P1iw~80Gw{Q zjo6A?wGQeuEqt1L2KW`y-?6wCdPR%z_w{#QLJZ?Q3}bRPWiY-Vlds#V9OJ*-Kj(qS zae3hjdSS|3=YFwm^gPGmpXV%(GBuZ&CN0ocW*^!?7oap zDy(@MUC@;mrc=TvyR~>b(B(9}Z}D*ZDv*_zc!p+N#>W8|WIiBvI7s`4~KEtz-H| zl6UH4zB+rdK0z=^v}))`E9|pcFCxPlX=qVrXbxz)W7@6y($5NIeE^))WMFydxrq$2 z0;Pkpy?&-kZR#?xyTr(fX(*?erNlerzemDB0%*M=#$&o1Mgk*I({OTNaCGRasryjt z(0F>}uzi_2bGVfA?Yxw=A>!!Vae0&Ls5z}|I7`5Qkls4k#=@Y)>aqP!&C2re#I0*~ zo0k?*(OZUdL)NNCc7v?RJTLDct1#g~Iu3s7h!2mpO8}eu-lE5B-1VCL>i*EFZQ*|SBFv5Xa+y_cf!He8 z$N4FKvX5x6(dSq1N@R^Fqm`EhGL4CfV_K^}>FXN{x-p?r`dFaIaWvHON;8YMlx@nb zM!-_B=2E+-P~Imqy5BFAFCFVEVg&VK0XI4Qn@OiCL*WF=Jao4{3lyUxGB>h$@ffcl z8kOi!>duSJ^StCSkRr45lCiNb#NyG?PiEXl+iKnEf^G%O)MxMK6;0NE>n;DrdRjtZ zj}NZ6xtv3oLYxN&23{3^o?+&i!{D8BK=(#vAM*HkEpk2mXlYVMWXyN$$5@lX^)>I- z{h_3<+f~_N%Du_ax>`8a^SAXVLBv$dNJ z$FgEC$JoFKqg}qzz`Im%VYsApB|af8Ha4(;kDYoc9JaWG;bMvhgtYFzE zjz8qL8zS7|KWG`)sKbw9y|VS8hke4JrHF3Dv{xgSO z+;0R9CHr4HH0dk&7_+Mn&LuT1jXY)8%buFovzIIBYG`Xfq{)(#28!)}u_j!_Vmc>V z=dfPb*ba*~HZfO_5xmXvEs1M}_29Zd$UzsCT!?cscFZTI<;*sqOI0fu7r}^VmIc}S zkq)ui7tX{!;vk#T5O&-WK1mT3F_oF%HkLOdtc=S~NsCJ$tR8bl^Nm)1R1uz@iU)n5 zU~wVf-eqo5dU`0+tHIg!?&c{H4uUQra^~hKRZSXSk<&g00sj`*`>$9T%X2eT<(LIu zMa>kEPFx({z4@O>d$T3Uc*7>80K-pYs~c4v!BvWI|1y@^v$N09_qQxdn z&8ta5wuxMCHi_`kp8LaN?)%2Gn$1q&zSE-BGR$$=&Q5Xt*i`Th^g*F0;rNo{@nqxu z_F%0r*PP1a*uFu|!U%zqdEw2`vLw;?+nCoM!~LI2zkG^%g4pi6r%4BY#nbSWcu}&P zpX?vx4nSIVhHRx_%_3DOtMQMwx4}UlJp$9PJ8;EhT)2r>Ga>TAwRRP!!I`!XoduJO z6&U76#t6_aYJt7>&DbEvaD#Y55w?IA3s!Bi^rEsUCX6%OKF$=dvU*x;7rq9ix2X`T zUDM_S8&lhCV0T_AXCa8G4-&psJz_AIBR2!^u^bn=Wwg8e|uI@X|yXOGn zLZ;EoB43whyS!#YS=iq4!N@enWwmED!LFP>-()BM`IT~2p_;-dD}kuJ-V2gs#qN(y zuDi8YAbM^lD@w|ev61%XDMiWSs}Qh}ksT7QF=wvm?Fa*JO4C;h5um#};iDk;Mo9)5 zl%J5^NeFu?XvOM%Hr8)&ZYiolYjb%d$c`azUJmD)5%W);!mc^ryl&CoCmtLe+{do^ zvtMh_g{svn4gcQgLbW_cc*WwF_w-99DGcF?N;9GbKF)8S80ljzBZxqe%sCj|QeCQS!Tlg#xT`N{o(NE`26 z_MzL|_Z3Mu$Td>|XoD&LLC!nXC{g%IV}dV*bW&5V$7J@UGAR6>JClV~E=kNd+X^hQ zI1=o`Gw2+Qp2J$sWHf!0yS~vOP)S%c-*+FQ>_;N*p}j9(TKTgnequ<0CqGWyO-QuP=mI28798~L+r$;`{pk|-uK@jj6_P; zEXW{exxc4`nWO)~aaRE0cjO>VF2aA|!=|>pzd)|*={4v=2bqqMR{b(We`u(m1HT&p zJ;W(W@PqgX!UKe~w@^|k(uM?{U>{u~kYUZuqrSKrGEUo%kBxtv5Nlw({eWP|x4&QF zVET!(3tye!_NYxU@5VgO7Lct7cXn<}m?@Gp+iwJWGw|tC31C=fd5Q-Qs8I`Q_{@B4 z)3kj1VMn3waR}lO*sbG(I(SH=&BSEt(}c9~W?_i_;FFTT6#%8vGlYV&wWiu*V$2;; z^qvy7p@AR3CD!wctR7vGZ0(s1dGM22pPZz2-Q_{@^YiOnu5BX@PT_YS7D!IE+(kvj zWD(%1WeP*L{==>?}`W!F-{xl5J#eJrQE~ zI+f-T(}*wSJj0bH)V*P+DuW5*4<-md_Sg**OOq!K)yBPuC7|Q=XTHU4F;%GtR#t+7 zg7#6WG8F$nl&{S-3yWRwq}-*EoHGo#3`G{PVzoD5(H^f%ndxTK`2!lt;aZEa=aV45U+ z&dO3Y`d9AD_=a=N%G#UX;};zKFXB<60@h4jIua{|?>p&Z zcO?0ArCJCdMy2oT+?Xf63Qy7*6)^4Ych}0b_h})ha~Y?h6?f_nWcYKm0w2JdQ6<>u zZq*LQZZ`*QX0BJ8th~3FXERn!H)rcsnr`RE3~qLzrN=~fdtZ*5barl#E2rOHT+e6> zcuJGD8(RZx$`Iq`l6`s=C(A_q~3H$K3Vv^^FD0s%&o?C8OzA%-Wn(5 z;v%}IQQh&;4TI`UcCW&{`Euudt@ESGW~;bclDf28jauiqWmxdX4B8;fm0c`5Yi0?Fz1XJDtVKk+`egfuHUeYT z?i(#nH44?PtBfb_&*e_e-PCJO!oC#V&Dd19)i|D#GpOIpWxo7^DY4i5AsBRbio20{ z^D%Td{2>l>3hyr{{*!&V;HZH2yw^||Z)_?k=y-FlbPHQht3GKeRBg+?cdJf2{Or4i zj3_9GcWi7Ia&qDMtro`X8E$URYGZR}q?u!Al;8X2^26?k8H4IwLwx637fL9emm7dO z(f*xob`dB6yg$jx;|#khZ*06nQQ#%V!tWpHr@E-{L8D9QKoubqjcj>meW$}yoI+%L5=f+ zTMBo3H<@mY_NV7t@vOjv%}-nRe-eRzrrMTk+@>ez*vFmgZ`R|o_(PqwoX_lqvx{>Q z?4SpQ?w0G|5b&r`k73uypVMiw{k(7f^PX!h#i z+LXQx0G@yLY?xV}tYf0wDIg(Zo2t9|;+)!mra`B%%aZ9<>wN1ZQP4C$aiOnxdo$GG zR&9Mc!)Z4-H-0nO`{nMgHQKGo6_M<=3jCONVI0srgt*Dn-QBA-o)k@v->vrOVtcvO zS!^f9Or(q#E}y4M4){ZM{u&wn=liU5wnTosm{U_Qof-L*MJizScKuiNC3Ip zS$BwWNF4{(K7wyePp=SI5&#oMCl+;7J_2D{&EYrP_NS6~GbGHx+*kScx}tWV(8Dkq_URc;Y1@V2j{{_E?72NZ z;Z*VISS_h1P1(<|{+$@#6F9&~^SSz+;sY##!Gm2b?^EGwzM6}TcE-a(@4+P6eI6jHfqurfOqo;{Mr1-5FaZN3yWYC zqK^#LD=hIR*aAywDjpOOe8^}hj4k+is=ooj_#Q;IL>e%Y0b-3td3~C_9hA$_} z7vq;LIJfV9{Z=LqPK^l7D}d(YlXa89Qqcl~GLHO0-Nznp;~D;z{(*ovjt@*rJzP^T|01b8~Y6wm&rVAsdMo#92A;$l??|AQav5{DG*f zJPBmJ!KvvoLj7rRcw{6lppK`cq@<>0djB}J4=#rTjuyKa8EuH=J^wGd4-a4XH`$t2 z{sYhw{N-__0wDEHoRjmjQ;Nw@8k@c%sBvyjc~#_^0s!mU^)b95mxAr&IYfL;l2N_0 zG}7`jcUE8Ph)Gy zu{NO;to}ssk{Q6fOH?cL^u69!>oYv5a!Cm|1Ce@xK@3AXS z7w>t{B9X~D{eYKRakV+W^^#|7WzdhH@^`X2M9+x!6z5AyE47oj_!hFi;3M8(Wq^DN zuy(%!OLBg1xJ8ztBUwn3#PKJxCopL1(e$r!+UII`(d+kJo+zaot$sO7%;)2~%<=xD z2Elzu)!GXbb=jB>G&B)n-Z$*V8+U(_l6ZgP zd)?1kZ`Qc#c1_fxQS73BNIG>+xZuWcb?5X3%IoizDv|#9TK(uYERwuNURA|dWkVGL zskF7Nd>z)DIyl4l5>uK6Gpl((8GPcG50701)x}~b1(m^f zgZF96I4NS~ODFu4+)m|b>!)OtJDoy7!4NupVcw*)1(ypcCG~KPImP6d^U~U)lG+wY3>X)x!*Nk;K&c?bNlr-7788n=9#+Hvrb-!|-zdb*gI1=g% z%9>b<|C+v)wRJ>P0i7eYc}_4MBG(~TFz3==p&MO6n#9c{)5el3H|GL!cuuen;W@Qw z?A}g>DJP0b_CZa}y3q%d9sC3-NTRtbmh_KPnwFf8iS{(^TCaQUZuT3AoWpiegUFj* z%P$T^hQoLR4X?jl6#d*YPcV7kxwgWdM88KS!Q*z(d269!%)3+k+<7q7?9l)yYt@i6h$4RJtokY8_Vn6tg}*tM*>rlMv{R$-3G zH;Zf=W0_@~Ww}T}%RzVZbcI4W7QCBlY)VF!teQPvtEiUf*ic_vQ3E-=f{Lg>kIH&# zuPWbKM_~!>o}LzPkIAL?H&$NxR^Hid8y_zl431JF_HL)he_79t34h!dY(2?R6^tp_ zK-EO%D(?Id_N1Z=7sF<6cDUL_tT!C7tz5CY!C~3A@F}^l$%dVQIviqE0VqZ1tL^2Q zTK|l4Eeat;T0lua_lUAVq1)*eiy#wxaG5}1ZpkA_3c|R@X@loSNCJg50gn{it@(^7 z7l{{SWta%kBS^#jk+SqiHfq*hEJFKMJ;$4-gVX8IDx~3t+V9{A8n=~=;EL=E0r)u9<4vVBQ131Lo+O7Jgtz?zA+HFWA-?+W%&Zg}|R0S_~PP019vQZRi^~SqtxOj-OL9HAaM9h4J2e z)%lcTalCf=@{6g#mhyw@FN3${hgb9%#`r;ol@^y)>Fe7$zHL;+ za=M#D=HG|OY?_x4kiS2DPyrIZ5b&s}$&~$6n46hvdzhC@L$uq|={t|uky~J~d?eA&d6k7A0uCt21^QD&#Q0u~Z%?w}s;Gpch`khhs-U7U z*eV_H?fq+clC@iuqq(XwxL@yY17Ub%n`BuBPv+%*cb9u3VPmoJ`xxyzwOE$f z`dnj!huK>((lll&;M9d_*mOn}Vz_2(Tx{U}oK<;M$w-5XpoH4;1U*!co4&$WVVuR< zUX=-S3Z5Jv3uZ$g8=ReL7ieX2cbTuY932Wq9et<-4S!D$s$emjug`^k(tElH2FIx= z9X&+|NtoO-Fy4G*@l`u5A|Nd$rm{93)~~Xq8j#c=oBz#5MPl~~N{T49xn9-pMnL@1 z|Cf+%SacB3U}C#7>^B%-G}c4})I3id2%=kLIC&Ky)F>v+{Sb=e79gsrZ9-8VE?Pj} z9~@#Y@FqB1AUUq&(WJ7G7ZrtcEx_tYK-}=v+ zz0PjL(hh*M((zL;vbYXg^?mL$wQN3qhreEH&KX;6C;J~Hb5u$gV zXRknZXcl!>AVBH_6kb2WaOM#_K$VKh4s}OZwyahrDL9@z)+D+hYJP>rpjAg#i)s7T z8ad9p@>}G$a;3b^S1Rfgm19|Tgx~&vr2miHuEP}S&bVx0FVKiB{tVyaoe-{xJnqZR zuNwlr56e78b;lpgRVV^I=>H#d|Cc21Yz*c9$2|Yv@cF+&MZ8HAxdnegLz%l5#CdO! z%`83Vh-G#gTpnmJt<3Y#GOzko0AJxWKIt%1fjkmJ@NK7!1Y|<7(G_F31n7(bnbE{w z1+-~!#ZsBj>4k<^)4~LJSC8yTUJ*GmoM@?WyKLkFuS&$bmTCj4!?p~k=6;Fr1yvX2 zg**F8Tx7U%xOTYlXTiGF@3j&me@i~pyfVt5;)pVghCo_V{N>ixS`Uza{t~k_i$8Qp z^7XtM1GBibPsX=v$G&@VaQgfe(F^P~K+AAIJ^X)a`_6DUyR~h-527`pNxu1w0Q^q zKVueuN6XfX;lZSPU<`B(uLyL0{z)`)Y1pZ;I zdT}G{Mz_{#Kif+F_U)doY5DZqLD@msn$-p7`c)sv-{UEkia^7(P}^ZfI^2_V8}n*sJwOPmYA`yckvUK`kkOB8$}i{TOi z_*=R!AuhcEGiC;MF@HmJ zm6fAvu3T*_w~|HXKbjBl#$ffIg7Bih{#kKk{>9h=2*rG{Ho4^N%#?4)u6(rNf@xjr96dntvQ2NeGO_5jXt=x&Cq{b@lKu1<5oSx&J^+q}=%g7)i+z{^9lhA=3Zx6wP=L-<%o5w9b?cmNmLH zx0R?BsTXI;e{=~jNTgqEX#t|sqHPORwi^(Pt=AN{C?o;q9kl-*g7`t611bb9+A)K9 zhl9oc8DC{C0>L9g1qh?ii$QiZ$j;ATOYv#~Yk(`E2vt?@py;HnstkUh?(>V1@1K0( z^#G1fpn3);1uop!7g!z-NsiD_IHIF%uDX^|k{uNl2O^Xdot>P6$g)pQo$JGiu|l%H ze$}{5#As&7FG#Kv#vBy;e(J>L(5uH0f)r zf|}g3q0gB^F9&Z6{bo2nzeh_%k-d$(q0zkO+>by1B;fVTy0}>G1L)OqaG1ve1mew7 zl46;;aK+WKktQrreHH8S`t$j#J}6~JqJ2j~hm~=M?Vd@51Ce}*!;|n3@@1aqL=B5l zx|xYzXnuthbxmeWDjtn=r8zvoxmsxS;@1<5QpnCX<@rX=j^{Ek&zW``cvde6KpQAn z0SVRPq`jo*A5n3BQ)B&QdKz@X$`GVa0%>{@-k)CVdB5YC9O3Q5-P-qPqDr0k?O?zz z2ECS^ZVy2XUO~OMpckr`tiEw}JjdhwUUqqUJ!xE(a@RC~yKM#T6CgoxGee<-OU6@#=MYmwf7m}4+c8cO8AE`UCvK*He$fz)FWP+H0% zbkECAIwj3ealIwd!Hd|Agy{BoiP){$e=+T!qW^~1x>Z@HqO#4x=6w{p6}qKAqoce0 zj6fMGUW)Pj+`%6sB~NoC<187|Nz&?l*h@ONGUYjQDp*@vMP;A&6Xh{Wdh_NSCF0J< z@vg)e@xo>ElhqHg>TPi($am-M#EOcFVgacNnqrV@#XnF*&JAU;x#YD=rjWKPr#T9SQN94%I%6(YO z!HydL$o_|F%bgLR-35#bg82y_j{312*{dhkNxZQ_ZK%)>3FN8Cvi4h%rm($HZ^ zy!yr-pWRDGA2D@tu(`W@wTyUvp(|c~)M%Ugap`t>%Vffq^8v>1kijnQDp zcZJ%8-mI5rp1tQSmJ2VNQAz0$<(Pj8Vaf%;jiC#`0f3qzH#hfw0`{OTgq2woxOX2# z`9G;7qTB#ezXbn7gjJYIEf4;%>gV3)_Zj1|tmVP|a}CwVKk=+kIV1t!5i+L0avuH? z6TEV1*OL5zEKb2n*6H0NU`ycZ(c5c<>SUY^3N)711Sb)cqx7eO0FE5K$?=~!VgBru zZ@HTecvj3?8oaY>z0vI|^EY-5#8%<#(DCyz3~_OBJ794XdXxpK<>xbaQlBZX_!yRiFWEfhjg1 z1xgT>;zQUXZlIV%{XRJ4)xtR_?+zXdBv@H=in=ky0HWxLiE|_0mAnHJ>Z=KI@eRhj z7Zw}Q=B6KUSve8p`+tIK?yMy&TD;r zd|6N;8g2bFIEAZ~PE18g9i8vnv+)<{%OkaGxqIN-I^VXHpV#rbY@K#k>H?Mi0p|_&`$taOdnn|n zNI}S}$j^vqY4Q1qNl8yvdWnHYl6YFDg8^@qJB%pzmZqL$EFEfsN&iTT<%$Osj-diO z$N+=_bSe({TyXXrNgfRN-V2bWmvYELN-ziL2r0<^cJ;F5EsEv$XU`lyVlp2%Rj5AVLy=SSaOJK4Nii^*OM^WKPiCiDv zKvkqUNO&xC%FD;c$HnDaKb+^g)n;yK*-lu_l*LRz@dWsOBVnf2Fxk!&3br73%GpD~ zLGo4beIOTt5{9Pm?95c+!k?&L`g|0F&jfHvD8T-Uult?^xE_xp`{*74&2Z?xxT;p#a5 zWALHE_}@UyZQL*cxh}?skg4?sTMa7h#OJ^0oH+au3UTm=xi&?^%i=RJeeo*nD z0hWQBKXRtPNKO!*!>=AnOjit#pvP&Z{ofNdpDbW(`Kh6c85=YYNTnMe9DGIgrRp$| zhb{fV!=hx(JEHcRA2WWt7tblIl8G8`;Ma;fw>HHNV~9Do-jbag=3~qjnXDqKJS>+n zC|BOWCZWV2czlB67X)Xo$2IpZ#-w1zV|%xbP}Dgl0dsAc z=)`5?*thsaYnC07+v1dXJmFikxy0+%4dh@obT&LU;QDc4ZlFJ=-?uhczGfB0`Tx&4 zu0(Alw6mJB)Xcx714{-g^`qL0r{DXycLbfYL^ww*#N4%~ZA&Mrk>Q7Ek5 z#vE12t?r@pvG6S!1?7KMhqULM6u`-f3{OrjKy`8u^E4nqX+=ezz{V4Qv4aAkiHvj9*Lu-RlAV@O0&P5jKn*e!z#Nn=DhK8FBjiHhWk&brM}%%>DF)6v`nRMjfyk}nK~UCc|I!|aUEN5v zr+`oZ{Zs!+Zeqw3Y7Ls##%z0)U3XkiEM_qXNe^p=$@RM}>h~hl2pOakHz~gm?1YNfAZYk#0jh`kul2%k2SL;Rq=EHYxNP6Ks)b%|oQM?qNAN}iC7Ba~0 z^Jver5>6A3(ub-}_x%+wF;;!I`l1?AG#1{8PzA0S9L{Q%A>Q50JGj}cC@751f#J&$ zrB{fw80J6Hj*hYTdB&R`Tj*U-CiC}eIO~q|bP`n0?$s^^BFF`S4VY-Vnggy%r?*Pt zoK_-Ip4>(T`!NQ;6amr<9JS+ahgJ!zyYJO|Ys(=X72_FmT@Xg_9kba? zyDtp+iqk~(QBRh!EN4iDax#U8I1eKMk5)4CHD0wc0WFE!R5sw&2%mcT=c;+}N#Z!L zH{}dJctH}w23Jk!XzZ4Hi3))UOg*%ZDU(mFnkJ@aslj_tnP=S}G7-Gk!>9vp^g<kChfby+%HUzImp zFPGVGdHxN|to?wUcU2(6UEQTP%h`YvA0E8%4K&|x>m=#m@*Gh!aY5J(_^ za}7=PW^!6ckhZ~ZlOn)q34YBG{?kwkW`v6`b06x3b z=i5eP0OSmP=XU6_tieXT5LF1Rf(A-Mwh6iuw;C6EaCoF$Hgl?3ecPFgA*84OF`&Cw zEfXnGJ*@Zu?UQ>s#gC|DMO0zyaqz$&KdbP>T?$kc7;?JaMF%_z{??msv@8-E8So&- zhdWe|Y0_P7Uyh)rEL?LYOffkj{rCaixol5q*ivzTM?#_O4{m1sQg)Bk{*F@fAu6X( z>QBoVfehK!8TNTRdP)g?ppp_)PiVfthn4vI!&tsn1y?OwShC)5<%7>l>axI?h?L)ti9$cI z!hLcLW$;+h+az7GAN{4~(^$O+1yJh@3z{k1XVvs=`%gxKZ$E~R>XilcOc~!xCO^El zVV@@9W#v^&p6%kbV(vKjUAk*F`!?RNE577|4(6GR8sr7es@idIQ`2s~=R}TZLM7%s z8NQOE_9F2RSRO+nDNVKd30dON?wOPch8QNs7*C$f@7g$RKn8O{VN%R_j^gG;i%HT(p+mC*YSU`j>T;EP70h_)4u32CQY%xX3 z8wgOFo&HEgWfk>Djn9#E!1#AGngVNpK)Z^&7C72bx%|L`0{^A~gt~xS^%gcfz~rP0 z#=p_$10VM!`c5b50%t~0gHbTRzDdIeG|L<3;73VT3cxuO9qb4|{9g_4yAM!CfG$KY zHJN9F3jHJNfVPj6vzlTh0I~Uhr4#wDDuKxTeL(ZSdlhj1z5yXUwsk){AgBqxA1a`= zn14x=L){fEP%nKtEIR(HrvPw(wh-V0B*ebY3-G@^eKEdZXrc$`-&mL}Mss*zS{BSV_ z%xW0^&Oc`L|My>lvJrL%`{jUD39FVF8QN%*@B%K0fwALTaHV@5u%MER2M2r%0ZgOU z@4u&eBC;D<#L@-0s9*km&Yok81bYMT^AGQ;lKVgBzOf-87Mh5N2nGhm!Q|K&iLK;Y zaJ%uS`JcIPud)B{ahkx0eQ|QV@cYj8Zq3%`ICa5SrWI}30P^W4rB-8cft}QWAHMmey&jp4rBnf5O#yV zozc2vnBjmST;U$Z_VrLGyxDkGgUX3h|qpm*M_l5J=O-#)5A>!bf49ri;fSgNVq0VvL_V=0X>FH_m zbO)f%hvttbt!JGyO3TXry16_?@$)tBAjccVK=IRSWd?blwcLF9ee^3@a@ke_HDojx z2u8IY$mOnsh(gg;{QAMo)&MILYX@Zr+g)cz*SYI$4U}e@+1+O4M;7nej6ciMTyhtd1c4x?M zklc|zNP0w>7zkp140a9?prA;d@#qvm(4C}GUP})cV7-6ngi4Hs=JJRT>%z0`*C7z9 zAsGq&z5V;{qgc+-?(W%L9<`s;L&9c^mFgwiyX}vT*aI$8K>m`4gjj)P$nFqA-D$-4 zZlTu3w!tV0Zllgm-sz^0rwAzMGUze>e5ht(;>2q(@bv?RGv}0`7Ze$9&b7gx)khlD zw?{J0nZBG7GRQ|zRFsVpy{fO=T0jeiED-Z?a0?f}%xp}oybRU51kQN0F}qg0DB>JD zo~#Eb4PvII5eNv=SvyEft$3C9UK+$5w>??!NJ<0O&`1!+NA_MD%q-PG93&!o>->6! z|Ni;!haifLv5u&5$A*f7pubAv62=4y1fDSbQ`+Cvbgj((RR?mMW9whl{9VqU%KxK~ zfBhY35>QA8x3J*FFZo!lJnjc$rvzInz06sD&;`hcd}Wkf()P zq(zvgHcIon(kHp4#S%v(paZ^hb+FUmms}k?xsUm6mF5Fv$lGS$5Y&X0EWYz`V|=OZ zTz0fb)^VG`(aLkrQBt&(GHOPk1|d)(EK#c<+ApOb_T6_D>Rf%$C# z)Dk>?{yiAVXh)l+cSX;|La$2imf@5Ll!NSowf?@Ew{j>TZ4*ycP)q}$Hh;?* zMk*=AS6@Zbb2h-xiQ7W(?qir8<5-IjBkopfYeDgzfnl{?4#H76O%#}j@k;etr39NdjJC+Yz# zYtA%&xJ`nu~e5gU*{*xmnG$$H7Ud1 zs`k)69?CRQM$$x>hOH#b-4EI&9Cq% z3v<%3vlmVIF{YCnPD*Vy1szMRaGSPBky$*4fXE)?I_P8+b&Yooos6(tZ<@>{T4rfm z!B0fZdZa8(&a1J$kR~Y0S9~<+G8wdZ9mO#=b8fTqmllacK8?=%(5gu*x4 zm{ytNm0DL9V)k z#+s()eb83)Xx{+M?GMhGl;@gP&%gbA?_90Y2u{)2qw>KG+0NA724|GIjpKl? zcXo~7nBcGdGJ$`l8X&t4cUqr%v_qy)`*8=dfAQMte6i|FNeP2(%FLC5rHE+W8H6-3I6^vX zr6N5ru4MfgGBgQfFzSQf*MiuAd1A4bZcgJ99wk~kFDS7v#y=-nh2R#_elv5}SW5gE z&eQn96^C!OWq$|EQMA43Z#`5D11X-X4umv-_vD;1Q*Z~oe8NJ6qXB3>=U8ZFROjdhCC?CQM0zv^M_^)7rDev86&_T1l~Qh_h7_44f-A(SgA=j^(fN&At0aiN*Ri zQuK;#>4MM90eneyMxM;Gd)_6A?JR=bDXQcoa^Q_1zLRosJCeqXz!)FbB!4}ezhYLf zd5W8FLEGxuYr}aUzdQ z4GSI?8W($d6&SlUds3e&vc$y`K`HD^(ehOjkK0@Pm(T~A1ZG4c|x%mhUc+j?~3I0`H*Hnfmk>Vo~$ z?Nl%I(J=yXXo)MV-ka#;GnKR^!n4~-lu0yXJxd2652YZ3<`uwN{A?Bi$mY+KTQ|x_ zB)H~yPFxHuD@^S0Wn>ai%i=4Sf>cZ>)m#Q+>x5sLn%WE%Dil8^fLNosWZ1iN>MXZ6 zDnim}N+1m3!5G(6d-}~6Ty+JjC8Nx;o~Jcp$Zaz%`_uvIzZk^yn3QunY#-d!wgkXP2e&`mpM=!u!nf z&WM!GcnZ$UPw@EcgZxk3Hqx7%&-0H@auE|gLX+0pw6Zzc*KYeK*MoZ*NgHol4&swe zs5x7Z7T`OXZ8RIj#JYk_}N&LZrO>bVV3Z!48CsB!m%}G6-8#gJ&;8Ds(&1W$aNQ1LRQ+=?FVq~_DpsD)RjinrRvF}s61J=gtUV<= zU^(7slO#d6%aBn7Ax$b4f(vgXlIm33TxRK_-NQlN(n%rlORcTjR$rLbc=Vq5A%6Io z3J05c$|emJ2=~YyG}J%H>~xNe^XexE`}BdRn`zU|3#AB0yKqHM&8@T6C8*Yiw{9EW z*Uy`iPk*>SjXHmKb33{`>hK=F_~h&i?J)^|WDAgcNtzA^#q>jOEbSA`^OFA4eJUZd z6%#<(PTlORA+4w208_QzCQm)<6n@CgG}FrqWQkp!XE6KbDILqL_73+!2xl1EUZ(c+ z&#-g;nntEou$B2jUr!%tINF+6U-?c-1WX9GBGT0Mlw1y9g@&KGhW6v19@~4ZtgXc^{@OQc zC)E)@2n~z$p{BltclGiM4IXB^SCm=4?OrOWN=1!>2}Jk_D7NhHnLFV3?R~5rpMJZ4 z&e%D_J2uY5Cn7xXW0dt#1s@0fM4LDtdy5cTOFdVE7>f}5w-tADH*-1pg0kr6b{;1B zHd{^I64U6ML}4tfU=gF`Olh9z`R6_nrKs|P9bre-V$@1ygOK`WeHU*uu|Vk}4%vT&fKhsPySS79WU;=6v}PF(D{GM3_lM z6-Sb;pQ1IM^f^sO9Bb6&op7HwFC7BhSG-I2{rcJ-vhR86CUF$$w%A(h63tq$8%A)< z6)#a!4a0xB#jY61$HPU|AV*5FqQLGQ_Zju1ME2EDoE*U|!mM^tts(;_e!e_c5> znCh%kkfk7tLxSa|LgmA2`(Hb2n$x2<-)Ac~I_17(* zpY>a{j~2H}3Z?~nUnZ-CZkA^FNxw9q8P#oSnp1;v>UgI5kFw@X)Hr-r=iPqNwI+$z zGDk(R7aH0h{wm6ASTvm?Q(d%T{Hlh1SWbMKEyV49b?1E&tWP6T-49}6slLfOiQ*pW}ip-A-4J6?g3;T2Wk=PCl)nC{#)q4ZAb(258 z@Y2v&3}{UXn^-dc{r%I<&9{V-P0GWl(s`84rp1Wh&&$>=Fx7d$;t&yOQnB}R# zNkCg~w40FRX^Exw_^l#Y7}8}ng+q?;l+$-zxC`o<_-Z|*YhNg}~);JfDB>fD0d z^rk6pp%#wCJ8$IoUpYw}l!Ep`oz?eiDvjsvj<2oSu%~PMF}ZsWyYli5BCh9$IreB} z9C>5oiav4rikmw^Sf1DBF?Bza*BVpQYez-dN%x|GJX;fcu+a9Hi*IUhLMQqc2?>#b zrKO>vA&dK>n^i4$zc8*eNPoD-@RGriZx7*_j&pO!s9S^h^DQFXm6R#?Nv| zszArM3yOKmve(9uQpR!=qd3nMOF(!8!rHn_Z_Ydxh$WAX1SfgRJ(u^0lW(Lf4O?qR zMn`@f>;wv&X_J$du^IP68@d2w4hCoHwyW;^b5JK%~7G~ znVvK7{^7%nirB@B1~XN;;#=8;;_PpxjooEk6CrtDSeYTd*h>5T@~=i;tuxUA$vrbT zpnjnhn(tDxVD;_o)RXx;U*k0}!B#~vGD1NXr6ssZ1Ce+N5ibV`jt(mwoSZ;mFrSqx z_)|9c!cgyKbIyBnMUDD|pr#_T{8tJV$_k&GUK#B!YWNsx&mD*gNd^g%@gzNuRuQ)+ zIb>IjLvzSY9_bLFP9YtT@2Kqld+FH8rK(#h>t-*DkM>okm9CD-k=DgIhJBR}-b>`EP-{@M0EsdN#5)KG#>y zjwG$r*DUph9U(R}gu*|P(R`+SkRBHkOOtWQ#?-(kviSyLg`1WWJ|%b8iG+l+_EJt- zBlmUf#plmg&GVD5di{E}heAA<781$GFQ1c=YsI56txmW^KYrZx!z2OY3hnYM$?6(e z2-A3UNs~&LqR&;MpukgsTBx8vX}P^M%~}H>x2S*?sAQh6l9~pYk;!AOl8rf$H0MX* z4?Jb%<#QDl#JWxGL<%IZD-dUTAI7Oaclj!U48)6t}hjY&>aCnMEWo#ZAYdthQ~ zWxSrb&;sCHB~PD}K~_!`(#{!bVOq(t(DU|@%mgjBpg>GAel60LBhO`;u+rrDeKp6cEv?1@zE{O1>?7AYnO)w(+3w9Bc%nM zt!e(1MihKMsX{Wew64VtTtVRqELJbWqk9W7nR~)i@^?Hhi$(TL-Y@Kk^xx>8G@XOO zva9JOxF6T#8ylFGm{~Se)X_gKtG9Bxv$*UlZs!qn-Jgo6{60oBrSbMojE8$}T98lV zv80gDm?RYTy>U4<^`lW+(Md!+Q}fbG?H|zC2ONI(!b+p#Lq&ZvPm1*8J+GeyJu&Id z9UrR!Ne*~CprKi!j!}K9O&9lOoUa}s-aHm$O&OK(CBaRyGQX)-63!{ya&t+n72OS7 ziC1vRjHh(8o;-wgTbDBk3|3 zH6T39>nAG-TJ_&OB^(H%Ui2Oxo;LjM6cv&XWjwPmG1isRa2PmP>$!-pEmL{7YPVXI z9h20!kzbCtMLR<+EO1{dvs2! zl=NrH(T{imzyINlv&&gza7eHlT6fp_n>D^jzKPSX-&S(T#xw=0JD-?cUIoeLed+A_ z(Qw`QfwU#!QXj(v=tdB;o4lDg-HuQzvryu3ebq9=xMKR?1h8&G;er-ns& zYIDhzpFSb$^IYm&mL0kXhUPO< z&Abj{Tk-{Xe!q<5!bMkaq8yY?d=7M_D(}(#4H_A$$6I&_r3vc$K>s(WM$dHtW*!H(ua|M;rlY~Wcrm% z>ztFIzjRzfv(6o}n`~ljRcn<*@NsUZC&qf?PR5|Jk|VxKnI#yD0LP6w=AF)5TI`#2 zEuG~(nxr?w>KZY>I|ZK!p$Z%Xs0dSs8Gl`kZ)26{}|z4-uW`^Diz)WJ z<^{H~Ga(_% zGcggJcg24Bv^3xL*yT8Mpe!;P+ts&fE-h~fi1faJ;HjU>uPHwZDOkC zZfOBg@Jdrz8NI3)=uMt{`uG&oQFLou=J<-G5Hk^%=QCY{+q1Rio%Dq*N@|5yMSDp} zFBN|dvX>kkAJ}6LnNz=KAK>Wo9v;Od;;Mkjf{8xAHVPBDGMx~SCl_VX^vs)gmO@o& z-cI+x{OFlC{9dR!gqRP8KF#8RYiLyTL(V`&NzZVWl^r!~+vCD=A6;N8~SfcM>2r5<$d74T2-3Y{o-v|szI z;Nc$V7%+G^d)o=Qk<_&*&v&rQ(<`>+?{2{Lh&Sxg%ek60<}eZE{5(~&5@GsOJ9JI_ zd=1lx`M5;Q$xDwa@-^Z(*7RR7WNA&V;>4`!%#s_Q216#d6PVGVn)A*n?3TbAC~bSS zNAsR-*YBIx4()rn$AS2;d8KhwXCY=H4X%yHQY>&QX{Gm*!wWoTrH)RerMAesi9b?|WKn};~-j7hq3&h0#qpHn8y_@=j>pzDx*Kvj0V zf-bAkLlt}-9~{W-3N=Lij4n(@&KH5PRdu9K)LHdqxHQ^Sc2y$f8=}F;#*xOCV{X>R z`LQ`Mg5TRNqWC7tln7&&U?)WAP`)`j5ru`QZSZJJ=b-qeXN}})LW^Wp)r}v_V>i)= z2a;{9x~k@vql=(BNlgipVjy_qk;nJp&RSbf^N$MBAAWQb8J~k61bOiB&r08DkV^k} zU1micNjugfPlJmd9fi*ynh{O_@}@k)wtro8-~{tE&hg;0mPSRN8<^A)6`h^Cb+CLs z+z+l%%(i^qM4Evzmq9fJXlp!1Ny9oLNFOrp7CP?_oCd{_BaqkW{WG>%sp6Uu6b|Q2sU&rTYGHz%c~X z_@5A|^aS@6Sun}hw{X_(FDxFDl2)=hIv$F>2IGs*rxbSbC#vqKZ}nLBV;A&?uW6HK z&x~tnFkfGMir{T(Y}q~gs?X!mgee(2rDdf!5Q7uT%ff3{SX#N_g^$E8%UMb_j}!Xo zTQ$9?=ypX>t*sqQ#enf1TYhkD$<8b`G1!J}(ec;`$UTyayuRC~PxzSsHK=jATd_}{K1vm&CA7Rv&fXBr zu*bSS&=23Xw|fusQubQ>E=10^7LedorjcN*RLm$Ev#+)geW8fmRMur5O1 zX!+slP%RWp?%7mI>nLRCRM%X?<;i3GcLF#2w4pJ5#PG(kN-U=KC86PM^4aDi_ny9? z_?pF&r_Ib7%;-kQ@*X+mhv}FV8P`qJ;OHgd$qfSA=5K*h6^(S=^Sy#BMEbS@NiO~G zJ~Q;(9)IiMJml#C?AyLJIPtKxl8uf{cmj8rXTVGNhd07@!2K>q(DP*Ts!w7oeJG0C zTo(3|%am)+n77wChkwHX0bZ@hAJw-cE*3RSA@Xl%x22q0IkMLW+#CKc2`!w{<{!X` zFEufa`(2iPmxb6h@PQ(_7C5wO&cie9eQKH6&Fl7gF?76J^*| zzzdP}h|oy1V()ne;kRoi|EqhZSaxr0sTe#8trs+%3*m^-GT)Nv&6t_=+M(4GboDe5 z6x8x~i(}pV;tOwL+4PwaM{JX^o*BNsx4K({Ei(4k1F`L{a=XeT{GOOE@y4U+Fy$L- z4ibcidh3kcF9KL&VEu$5y!r^c&en3lk!x=qv9aAQhLsRUe_h)mhZFryfbMyJ#ouHf zeXp%(+*ae}dWj)y+7g-9 z{o8TJzhLFI>4Fvn#$4QA^NVOy*JzTWI)fwxr3362T=gG&eeSPgn?$dBTO=j8CmKM8 z;NzV!b%9Fc_4&x_)xB?DwMAnKK4Wu_+L_qcxzbiKF$2t%;T7HPJN&eG=iQ=HL16T2uIoIg~Y3AX{S;H=#YY5H&h6+HNv8qu%XF1P_w>>To7>L z;HKC=^`$-@ioIb6zHEz0!5NZgXpe$NX}|6sh<%_1_3xk^xtY71iolpvRSXUf##=BX zD6K9}tk~dNd3y5VFV6%$a53-T0%W&7@Nw|)ZXBD;AU%iM$lDnSwq+4t!S3pXeQB`s zxWio!*Ece9pq1v~IC-GtRCep3T0%f1@vR+Kt0{)X=I85uy_ZZfS&0YkRNOS{pKfG5HP}cCA z_f=hFqMmy2)f}ddEomw^Dw-(_El#>p13^VckhA4M%~MNKl*zra%2tue0vW)O_FOd# z*lwGwB3e|=3i~D^#BSMx3YLxi2?F8lNsm!82xf?lRHWCJF`!m5{_e1rW@$o3B_PEt z&PpKQck!NKNl_iebILv6xaicDewlDu7S+Pn24XQjKW`@M4YSDFn|y0&VUfn7));GW z(9BwYH>NzHIC36zFa5(7uCHkvZa5?-ICX^t?C_cNE}@|{{~5+1ub`wmwL)4X32lm9 z#$2p#4ZEjo0(HJnYAJ}ULb$lQiKN{k1mqPQjBb$m0*vozTLy@{r+yj)5ViT1$-OR00}k@+i|9#KtO* zUi}56rltcYe|$>CJp?*9FvVKtGXF*FV^Xflm_ccdR^f=iMR)u0ignA?k_TD+z{Y!m zGFE}ub|&OTn|bkD+re(}mRS>KS2T8Dhra_Mo2hnj7 zrtkaM_d!WiEUX?kN6&>amGsv5#I)Qgavs|KBKQ*f(M9-+;UrF>R&3(#3d9A0!)*2B zg7vp`N!{>aQEmgB^f}VKKgY207W+0jr0ZkVgEd-4#~Ao@!%OIj#re=b+-bEm7?odU zMXLr&B0OQ&f9safZ6WU#1$!67sM`}89+52WF1gUuHwFA)3s*oItn`d5o)#>pK_H|h zL<4rSlMZFbHs5uW=70V!Os(8n*Urq)Us!?RI+rw?HhXW3{dry3CdR#n@)m<|Qy+AC zuw3B(kBYn2;K%c6Jak4D2k)D)Qq@aHew>vE^<P@H3mU^no!A>FmtJs@;OPRuA5mePb~MyM z@{5j@`IbCX$O|H{+46F_I+6|{ClXAnk@H~cD|W1};s7TiVUqrjmCf`r9t7Vuvx5~> zkdDC*D>s~PJUlkGFfGS|O0j++rpTI4Ff&r3gQDoYnm4MOF5EaMS6x7s7-aV%3t~cgBnsU-v6NSzv`LrfE*6@gNm(47c zASi;nXVVrr%klaaHBQO}yrDc^v-X4T_dlm+a{;}C!;4`jlJ_^m&)vo#ci;vlNdSBq{ml4m zpJc(^%OtFhEvA8iK~D(c-DeD>lr4TqRC$l)QmsZ+$72?5QFW*4)+o;0f&gFPPemaR zZH}s7L27B2YyKeN#NmU72bcZD?64eWn63pD6BfHjxez#!3*fbfCk#3Qsa-V@m6|(k z{~~HLdC7Ezu2-lba#_AoBN7l=uiZFM0Ji|b7<}-Ne-AKsltG{A_;<@@&Da(Vr(A?L5gGR8;C(`OP`K1Gfal;-AwjRV|1Oy zdOFFQTW_C^?w?n$PTWcUTv56lGpKFfoy++j+Y#jRlDT%e%FokL*7B>g_KAc~>$3I< zb&-6kw7g*L!agWgYZL%4R;IJgL?CFA4=0{c66A@I3}l(v+_-5}twV`3Dh!y-_#9A>JSjd1B&lXSz5?cky=!j7lR{N}`K`$R@+2TM>}4^n2CGTY86*QJpl<`F;wHC*!^E=+vn69e0H z06yY0FE?LbmG~l@3-}bwXT)N3Wt}3uR7Ia(v9= z^sl0^LHC2NMly`bO~_uz3nn(r1eP0VXfJnJfMcS1OR>P*jC9#s1O)G_{q_1^Qr;>c z5lq2zrA-zd3M4L3(XIc^d=bpD;tqqdDu7HFyF@5z6@Z7zqxH_txoMUlE7kAE(UDDG zi4Q9yM(I~V#ZR5OdZe4!j^9rFR$P7p zPBDL&La7k_z?dkUHTGOXB#U9-7P?23V4cf zXQ)Tsu%y{1e}CV47SG%n1F<9vVD&4C6EPNdb4M0JXhK>f&Z#%*FsRM;0|V)mp-9`? z)vMLK_?t~rd81Jl$#$!fzx6{5JGpD|i^Y3b!|FRcBl11bosYRTQ1O+RaZ)r4$BJAM zxfy*RytD3sWO+GnAG9(x+a-UhcPX!VK|L?H%s4gYKTWnW=U?~V8_u?XN@s$+o3QC2 z_r54qZE;V$zY)mUzms^|VJ%p0Ya_lLe|n@T!cDLDRms2i`I9Ga3k8=2CzB#Ql^_ig zTmt*BbvGNh`m$f<-tVQ+2CQ%<>`j!Q><5=HX&g?kIInTHI^li3q@WkH$F25qv^1vv zc105#tvC|aK&70o6E7l%22>le6~2D`w#a8X+$Uw-5IAAy-wB2dtPmM^j8UB!NS6Bf z$68sh{}R@dJ7*w1^m8K)L%ZXOv4UpNq;+ZG>CCv? zmv)ZK9ND*J_QuPIgixfN)r*>!1!x#eeX+OPp@+PE$};%jJ!a ze-+N`1;aO0SXYP6`rFqw7svTyHX~Q(!3|*7E=A24U2v?T5klLccUkKa8!M}^CWL`g z)?E8uedSQ<)?EwWoC7+@Hqi4V7k)D8GFE>xHH1FbU-B&hZ-WNe z=oc`28j$3^FiOA`tASzT82fE%yyUU^`}M|chC^(8{U0&bfs<7xd5u6k`Z6zAYV^fE ze%H9|)y5HmzjXqCri*w~blgkUMh%^Vy512V$OU5FA`Pcj>#9r6?FFY=9%0=skR94L ze>qu?dvetG-kzr}%k*tVs;;|0Pqdj1YhSWD4jxeTW!4kRCFUMy|{PjvUeoG zvhMpCA>Me;zsH445;}iiJCq*S@UGOOcPn_I>Vu*d*h6NR9u#5Ab9?o6pwhwP!Rs^| z5Mg@QA0Ah|{CBzHcy&u&>PW|F%}}f0sczn3&B#xYr@ps|H0qQoFW#DX42)P9({U=4E90XcU?L;P-;O*>H0!Bi8h&Ve0vXlo1Ay^a1a$0ffL94 z=liNo7gXZ~n?u6>DRgVoWNIo-IK@(-HIF08HH~EAVu!oK3E{Bj!CgyNImQ?UI>*9w zfN_BlXkS~qCt1su2zM@Ywr!TZ=xDFUhf`4^8N-h&QT?~#nyKBUJg|r zRiS_QWJ-LQsYbK5u1}mE_zz1Gv`C#;e=#NAFMR89dglX7=1BznHhr|BuuL92gMvIB zsYJSs5j6XVRQo$w#@BfAgLYmjxXga9J-`HHhtwzTHF#%*FOtzf5 z9nfV>*@}`zmOX9C_5jSHB4Cx(tEe31qAmK(`6h(_-d0yWO*=Th`F47jH(LwXn6~&R z1lx$V5X%`(Tdb8|f~67cYBIQ|skQz_JGT)A->cXyrvto8R(GOwvVl7{6N_&<_O|h({o^93ljcT~cHrG03BVk==ixWiB6t?{vi>-6&yHrtCCyP4d z`7zFP+QF3VSkw)b$QQZ|!9qsmfA48e6ojS*%hgp5qIyVt7BF4xm>bwm^RQY@m zkub3nsc$Z>%c2S*w0awoOj&Qp8Y3=n<;RaR{C4?qmVBoAA}ILjMz#P7L!|KV7KTC% zS+n-^Ji6u1J(gGq6HWnKsFo1YSMnK54K`!opy2gSE!7tqEP4~yDSK9UOyD`F$1Ek{ z=C^xO;cbWQ&&=|M1Z4(RSQZk(Y%fBW{@FtMT*2Md+uW%ZUC{WDo%N|0+1OPUrG<== zsdDnj(Sf~Z8cN_hTv!1XSUz;5 z;d^w{R_jvVZf{s=AXzO&FP( zxd8_wG58`8js@sFb2jN+{#aH2e0*R|d2iOB63>r3JDm8TxuFP>g*ld5tN52@?GmYSu-b26V7-9E z$>0=>?7YZeDR@d&-abuZzZg+!WoLL%9?FTkSyq7V@w_!tK2IaUGivKoUV#psb~4fQ z!(%2ZE33)QpH8=QYUs{RfmcF`n`|xiDs~OKW}06sk2o7`7^?@TTrd>Q5vMQ_;Iabs zKR84YhO)7P5O5S|hmCBe-9SSEUKc*C9Q{z``%EHJi`rE@gV-!A5!yswrr#z^T!(`A zGcI_bBPuY2gNmd*EN<_WIW^ruh?}6Dqi~CGhkEc#W$|L^IoXow()$0*fR(eLr!Ks> zn@Irf4Exsa74{W<$`e;Os05)hkM$WQ)COpdR^&p|v{s@we7&)|+ve|-c)b&@m|8>c&$(=ON@X{4 zhnLAHqUk*kT&8?~y65uuBd(?Ou!gCXQox%d_vustj#UU{;X>S9T}4&JuG;0ov#_ua z*8CSb$?_Enj%GyKr6mGx8wx5pG^wblTsO-|4S{H!G874)LXl=}VyWmzuEikA@{;+R zJOs75aKID{g`x|r^^IUiMXLA{jNi;BA2#>EXaggg@@ft4ELM&NUo764J#XUf!86vd zPmW+=o==Lt4qT%AE?Z5OXzY`l5gu{1Pg1CcfjTqhZ0#}H!o0g@GuY74YlwQKFWOi| zs5_~IQ}xcLMyi=hp8A>3U+8yq2TMk8A8Z~5N0`s*F^YYTaev)-#}sfa1u!XT3fMGWnYtohs?uyaq8acYN9fVT>@E_NCB7bbn@3P zaY;#Na|;VhY-}(`QE~Cc$}uv^Ju;2Fo$xiC5+p908b!FaiIrigLJwTWJ7HEY)&Ofz zCtsFe(t3E^#o>BMMVk}LNz%mNs1c|?9-L8APb0oxBqnW|`?+p8hbgE-zWt@tmPP?j zQb#e-Wi!}7A4g8I1e`=sIZ%;tRRS~M%z)!cjChH|L$Ao5A?Jj?wn_kkMzJTNZ5{M5xq7%@z|92#Ce$p5_LZ; zS-dYC&sxSxeRaSRUGqiDj)&sP&krxpd&cooGZ|deX9td4VEcd2Z*9kSbr~qX6=9mz z>4)N%9bZ3{NaDy20}+(+?^`fa6w3=ehsyPg{Rq^8dJz23$qrs*2~A`Trtp6-1|dbw z!LfW0a-rf4cNz3l+qONYt{yb2XzG9beLifAYTYg;4~$c}w{CD)vvT-n#TKa7P2v}C z^7Bq%;p$&@z4<_wl`x03fM-)cJFn@$)~JqhW;2E}J18_D((rnz59R4SMWAA{5Bj&| z%-@A@XY=_zYmUci4^aP3tUd@T%QEo}wFAJ%!L{jq#lp*%Gg1a`Ws3*7ICMRr1^*R* zU}Tcss((XTD@tq1u(g?>9dS9GkXKXOeaFVBs-b3mLG=^ceBYYqv;)YGc*f%2S^d?s z*QpO*e|00AeScnbYqhAfLOhhmONND(7TE)N_YeQvq;l-j<$%Z)o!rsp?el?>wM+1E z20n!d2R2bJnot|7jM2{5#ax>q(F39;;KcL@QZrR2TgaelmJOHGdrPNpz@YYj-ZE6!3kDW(=T zDKlo9)1wcs-D)PXiod}Gxiw?Dm%Z`ODtLMREzqVtZ=9aIc@lkPsoh@V-POTMODQ<`QPl& zKRtmH03W^V!RfLN0`6!tJp4wXYFm#m{XeE2(m-s`W|b5>mXe8@%h@1WM# z|8g_0I1WYBc3)3-Us@c`Up8F+g2Tbfu;5!bboOikp}P5P`kbxKjH)Am_Q`EV+Sc*T zDuf~(Ukq1yPjR1`(pc3jCW19t$PGDBw#N(h)4Mc<^UC#ipOSY;6tG=4OXu3;E!@}3 zMT|>@m$+qmRI;>tyX7}@X4b=6XW9gptw;fR_!EMRpPd$nNOew$<%qUl;YShnD|&F78&|Zku=|ACE+N+GOkX)Gj%IVs!E> zu#0b3J&&l`xLeGHz|RSuKtl^+UQ)rC-BtDWYrxjFH{u4mvHCs&Z>2-;Y(z8u(Hw8V z{VQ%xw@c<&)c)FShEG?s?QQ?Y*!=3h=Xn0x8{~}yV3fU}D_OY#`#1J=(H(Gu>bFS?!RYQjQjRtt+c6wtc)lc~rPP`J5#lf|#mjU%R@$p2{=>`V}w-~9fe%WPWKIt>ZivQayjE$ z+FM@3`G3SQ=vN-Q2)tTvPq*i!FWjc161)y2{=>}V=YYf3k`*581IIw+JctR~!#+NJ z%++!kw>r*iL48pJav82$qtW!!m2R1#UdL0rG( z$;Ff!#r6=vBV99AzWczaH;s5ZJvRvIeO4p%?%V8Y?Db`mxcXRn49sN;^4K-PEgmh$UH=*Uw&i z1GTEqM$*yAJT7g5c^>c8s81H zBOU|Hur6FRLs>b?y{zfzQ5~bZucl^t4rxvNF>Q3DiLzF=e|e8~+-M=Dd#h<@KB6C- zF3^dPrg9~DPl4rB-oM0Q2o7v!5B$lvMf?}>F2!|SuIFd)_?L9nB>Aqfalr2%zd*kz zj*UY_!UKnu;MenGQ>K^L(v}#i>!j7Q&@$J*NXuFmP%smwIc#5J(}`zf$0E(S*3>8t z(_2z7dr)n&3ku+a$LNcS=6{Ww`B0Bud#A9aP1Fq9d>_z?I;xG4 zMaE?@U82E;4k^OKNQ*oTa^rb_THIS|F>YTUZo)6(V5p@&LP+j``b0?)hPPg zf`+!!aN^bV)2)Y>#n~{+shh??n+Q$a+;6~d&3Rp^Fjp1Cu6&=tkcV?gM=1Eu1fSw` zVkEqb5F91gs8X7fGP0vXBw1U+Nnfz;(xI4|*-=y~L16^*8@C)P^~ahdlR3l9wsr;nhoMafm(_~Wm& z(3`T75(*xkG-6t$>Uv~31~NvfRze9y#d?cV=bfAVi7Hv9b@|#i8smlE0GSXQ^+Jb5 zDJE0+(ugA&TXIUA{egeTMUIGqYCDvbs7GmjcgZ#H1QpbH^|&oOs;!=>?kX7(jK@TV z#Wb`umNdmBNwU7aT{7A)x&_rYZKgPBCJQ_zkZ6xOH>ctbs{-L~i&>Yvh?_T#*_KGB zjHs2bDD{l%N<`&g`5||x!moR%VeK?SG|m!kXC);xF;$+VqT4}hP0L=;s5`&yzaYpA z`R?$P0tFMemGRZNlsRH)hm@6-TPo~UfR9nU%DKESW1jvA+J^Br9WoQV;LwrnTaTd6 zcQRN+9IHfSB-4Uw-M}hZ#l_=FU?1n9V_y!>3s2t}b0PB(&N(gWf-7XG;%cbP_3*Z! z3n`*96!{@7^m)K$B&0hG*-Fo9X(B6$7glULd^>W1F?TZUp_-bzGr7YT=t2HcpeIDp z{B$js)*Hp793{`C6VVtK{&()WA_wTzI%acy%)fpq4hbdD6tb*^!QEPeN6MK1bd;oq z)6kiWNen*!MD|n|&7V2fOdJXL?x0}fqQ)M$ep)n(TE1+CgQ8Loh$RTf=JM8OPT{~vWETss2P0eDWOQJKqwEYUJ)BP5eG2TqL zHI0Nk4;<~Zlj}NlZSAEx8xfAlb}@gLZUeT$+I<2z7`?vs3FeB6Q#@>0Jq9$AweYP2(=^ImZfrVln>wIBPEE`EGXE5i$O$@@xi&w%k zZceGP#Ajca*z~SP*y6dcFih$vlID_@*fhh*R8B)*W&F=6fw#6_bF=$OV!g&KYrxbZ zOk7=7zkH38*38C_cXOh~l5#3k2Q&y7m}>?$fmQ(cr>{&l+3oNEr}WY!7OA0p9t);~o*?Sv*LYX=IwZO$0_-XH%0XsoRpEGe9j zQAbdLzzz|AocV<>YkkH1ZTmjZmWCBO(ZGjD3e*Jw-zC5s=6@fc4H>l@a+>7b(k%yd z!!!47$A;JU|1#gW8YgyhwHf1dqZ32<3fl7j`O|d#3|TNh~w^jaQc@a3PI ztBR0^q9Z$VS)}mlzxPXx%O>t7m6sF}qwdHvHa9h45EI*LEWP6%A?yy?&mRTHrmV}g z;1@3E^@X*c9;X6zbhW4(_-D^)h?9Nblxdaq;2r(;krgMBaJbo4AyMIKqwI$Nh z*1aX3r5*|eaEOpoOGzc#GRSFH!bhAiX&q1PuZ6BhBtj;$r>%cj0DcMseyO*u0d%3Z zT6n`y3fqE~A?k~IZVO@;DGR6&$pI)g&qpTc(5 zaGU3ZBf0tu^9SGtGM^_tI}cws-e9p0VE$FzG);}VfV3E2Dvda!ouIFA{ljPfOv3-| z3s3r`n8lVAP{Rr58>;qS_V%8|*r$OH>96ZXi^788=wnv>^|Jq>t-|gD`JrxnJVq?H z@Bz{_tQ~qAb0;%@j+?bQ!3701EsW);&*>}$BqmDm?lRVkr`<|E3U(9XFH<&dq{u2d7stqfT$ zeoN5ZslylE@jv8@#ij$R5|fmB=UAr&p4XA<@+}!+N2!pF9|p|w`@8}D58F=HF75LQ z>fz@FG^y`&pQKPC%;hgIK97@yLD|B%7%n>EX`h=)n521-*@Dm{`x{vpsrA&HwF+wp z;EP%a{w13q-O0@2*e05S5^{P-zJ9f&5aeAis(NE~-{+V*XF}CPrT^UAo#A@#arB2- zV|ra2H{Hto`A9_OKPP-uI0csR5Og3=b}n_sjgEiIE7?2sLcd6+N?5k40NK`exC4l^ z#fG2ij9%Bgp`S{Y&wyCqJH1;)HgoDx;Onq^&Y^%R_-V`XSJpM-_Du!_`#V1ZX}KCv zSv%1zo*>&!6|hdEeVJW9z^Qfr^I|AKxr=}+xPr^XR*Lh z>?3H!Sw@;0Uyd$10{&qeSw>-DfR-ot#BD{AxlWePx?MVoy~k`0U(8=uc!^S$L_ z`Ox$(v!r8(R3O=U|GR2=2v~}p#O>lzcD;@yQ`728j3G1SZqM}f`$rUi^t~Ih+bFgG zljZSZ`x(OX4n9wPF^Ne@5!b)N0XS9`>QC}GU!|#OXg-x%%EH1$7D$(}24LoMD|3#& zzkUzq``la~(dW_~c4Z}!dj%qm`dV-?sA*X>(j8sAuOWK!^GP^lDpx*n+UWJTI`|+% z#(|*P`dr=g|ELW9`UOZm-UW!M$?Z&>N128AqHkAUn*j^3pnIrVTR#^j6AABS=b@K z{keU<9KiAiPqd2k-`4fVeoCU1Ufl96luRr@~IHF`-MPhR4A`?Xn<1alEoB>k7v`IWgU zemd-c!GZ1E2a(b_z|;9YR3A8lDCrDF=W7WjD|s>M3Dz^cD9NP=n}W| zx`!Y)6K|+PmeXA558kp5xGal#mvlk;eG<(U!q$2*@q6tU`c&UpQoEOp-7w&Ib(7t- zqV!O=?{&EZFiBHv8>kPn9P~_fL`zN1x)~wBK4WhG3P=5PcKiG@9K3pa?eG60YS{0O zH)gw8g!FsS?e_zT8VD1en9d0H(AK{Kc7C&kjMWF5r?%8Nh(na z=>s7A`$COnLEqB8FBKXAaJGA|Q;~HNRUVB;!15-0&joQF7*DLt|GFjACmYxOQWM^` zYQTH(Q{#UmM>}?-Ki8Zj2NbXu&1rsNlRCeky`wQr z^OjU0?~-)FLlR^+@T5+#0h0Io7uT=SW(40OeM9-GZCNUE`6YTRfihn1ngYGF z^~IXh(h#oMsv;&GLmJ}dBeE=s@Swk7Yi>W0_o?9M?lQ*0$G6td{y=veH{{bj`oJ~n z^C!%xZ`naMoUbKKqNS!DI>AQb{wRAWd|(3JN^i9(YOOEhE^bXMVhb1Q8t=3Kt8nMZ zU8EU|<_H!G6o+WS?<|M@+$@=}e7K{Ber=o+C`E!b}tiOK`gtKIAz#o(L zr0*JG@s6CzzCXnY=m<-_e~K3@=ZTb-q^6y#3TvtHknk#77S)4mJHNBK8-*NzxFd_; zb%+=kZGun^XYvoFe24~-*=+*>KVRV=wvyABy{qfobDU5$36B}&y$g8Rz%y!jF;@2(i!tIhAM zpZ_gD`$bm#@VzIwdo(sJ;utB+6>E@xgIv%|ktw1b)(4xGd(REmD-{^iq@H$6-1Bl#4?O}*i}$ZhSG6=ye1STt6+g#{hpH0Hfl+sc-HHdM{E)w|yL3N2zfg{GF$9;{aYNLV<=pA)^|iQt*SX^+J^ zzJjo#N*)s<7?YkT<^i-=FHMj9DJkp|w6l>a7}iyTnLSlOxqZNaVhGaetHg8 z>-*s>8j!IPV5-S1mcgiLWwwQ&banoZ)TkfdS;U@q^4x>IvGxMilnK){zU17AKb-V_ z*>(JFarc2#bS#7T!E0}Ab9FwCZ8ufPkRcGk@S=spaQOQE-@>^osjYdho6kf1lJOmXIFH41|&HB|7p5q`V)hFH6$vUF>c&(Br>|T2j}r_C+;Tqtin#$yfHvU z8mw)g&Ca}Tok2$tW;S}>&_RUTsyig_GnXu}VMsLHysz(I`&DUtX!VPn4l89voG)q2 z8O=$>@2O1(>#g{NY1o$9l4{5@&^oRRaQ)%0_w`zG<@Fa1e-vF0Gj`}~zh-IU-67j#%*Hhqf$UALKA!%PgVdKBSy%9MiIj)eT1PKA+8 zjUt>y{YV!$$%ZECMMKBv(h9$Aq5t~DY#uQ+e(=(2wxh%~=kCI#Op8v<+x6)(pzU*Y z`%?DA*YWqabVqOCv^|L9P^RZ*A8YdM)vf1h((8v3FO{VcPF~)9RZ$Pu>Y_g(SAK=W zNQkx`uQO$t3Y*-n+xE_Rf+ux-MQnz`nSg)#j6I4wyv;Z_KsAu4bi{WrRc#2rW^8?A ze0(XrZ3SHIW!3yU5c`gnoVxdjb@;35$lh-hvnqc)jylcD{^hYbX3>5cd&i?-xZgC?-ftY(_hQQJg1?&`|TSP zd1f!(TQ6z>6pxeBmHM%&IKS(M4V0^KLvr(%VC>frTE0myo!sy5b6(f`$s()M!Ut`> zyo{EL>+X95n&TGyE`KRJFSa6C{Z^&3|FF8XZpcR^^b!~R-pKatq(9RQ+;YChU%!p|ItaNWv)VWM zgGFop_+vQN+70s3F<54%1|eXd$?Eh^)qvOayx>p0NQa`&xWs7TLwe>en z8U@Q_{h9$AHq_QFLDzag%^aFKXh)qQTifyrh=%3a5W)a!?NoNGVyxmhr5c0FLVp-ibu=}{)9vN^@aODJi( zu*Y*;YrL9Sz+hxUNptkSW;p*qQe@BTE|kb>o4c~++Zj{3Lf+~<8NSVDAvHwnVB7N} zG}6|GOo@+l_x5`&>SQP{BqiI0@)WFcam;l7AcZeD=Y7MOecQVG2kzD$lijE%b{WNy z-|wAs+N2|7`BvAPXe6rit%aE-t~TF!2x6VYHu6SyWwNL~1a$C9Nd-Kh{IU%i%tk0h zjka7H!qIs)FkPJ#HPKRNdlRyh*DWhj$xXWw|I0gGiW6nyF|JL|BPwE_4quGw{Exj0 z2ICWopHSBqoBgBz1?om9m8rM539$rSop?&y92VRy)z7*U@q7M*jy|{?UT&ShxZTC$ zCg~3Yv+6c%Ge<_AnX>+0rjKcr4B>pN&`jSF9>a%5CEtGF32n zn|D$)Us}+6yCTOuS{$rzt421crqx)d@V3x|`+d8xtZ%Tgy@|c*B3DgoN&H;%e#q?z>4l_UgWQN8$ogY@r~aP4WDYEIfHzkB!!=j@F+C;` zZ4^eu8BkMppQ#<9-HYD6nNMuD50w1r$2-lA^LeWsqLUJ#`T zNspJud{19wYqq_TUB{cWsCIqx+HA$__1YX0RG`x{((QawJ5pDIeKDpFHjl(jOb|xl zzi`U*5K+~0?F)V}H7T>S&9+ht+){3?)qQ!!d=Xl1zi9nzxoxl&yY#{iTzZc&ZZhaJ z_A*JsZ56S&e|K{NN3Of+Q71hiDH?K&YcvXKsHdfY1&zq{R zXPlCy44`!96E3|Sv&6HKbB}2X60%X=coGx{O!p+{wX+bmrKQRLLpgu=c{C3Q;xmfm z)D#%g(sxQ5B?Lu$kS71gg4D&>+OWObt7C1bjqlYVdku!G1;hfE`^v)joz4|kqH_#Zq) z4*VAd82%?;n)jP6jV)%O7gatz(-5^}EAY9FI<=Y8V@LpCH{?(qm*ueu-E^ z+c>me)|P{f0)b~qHa2QzOzl!$+(?f~(xQa`0~AO8Keg!jKkPxS?>U4sA_KM^w_94u z@{EHXQkvJrFW;`ge)HGm-`(HOW9(P|l~f_ea-@Q-2cDng!tikS_g@z_gAkV*Ep+}~ zTA*B$|3A9kDz2?)jUH@Ef#O82+@TZ*?(XicrNs#vti_5`+}(Xn z@4fS%nTL7ELw?E0Ir;Xt_x@z9wXZE!rI{Uq>(G%DapIlARm5)@nNAa0Cr(O4%St(u zbHnYhNX@x@!g>jT;aSQ%XtK3ptW~^6Iky)f*7=%xfot(@`b~OlplX?}2Yp=-aS9UE z?4Ed2-o&_Y7s!&JZ5ML!pt#JdSN=_xMBLG5=rET2LO1D{pUGfywe6`wK;6=l1J1Uz2Kx+Ld}R2 znTIUQjNJgRTW(9P`2Ha>h?Ek{E#dY>GV`y^7T-{dWV&83P5jfR5c11G&|9P#zhF%q zOGHoA;Us+~d~FLBN1M0FGIt2%&AFhF9?MS6(M4lb?)YBk(k5Sj$+?e*(A$eP^FvCW zI2r18c~QUUIZz3!!OP9IG31mFlqs{cmeD31kcrUNB7Fxi+1UGW$RpcAP`00yRa)1soHRoY;140qWdPQ z6O|kW+~b*U{94fXnfEa%DQj3oz*2Txg-e0GI6wb`Cd8TG&c@#VJYB9xb3LZ>31b3w zBv!_a{I*!FLs>%s7d_opLLu~_N+TT|L^L{Z z_m~CoAdR8q$u3f-(?KZ^CdH#w_@t@%meyk9+~*|@!(dE1;btYeZ=YFedByE|LUB0b z!=AGH`gZ3dUC+@YDI+6OT%u-ZZ|Ixe5;O3LoxhZx0zG=M>Fb!`T7E(<+XeA8!7TKI z*9tHdCIlw>E{A7N%X>FDFIu(u)L7^G8#jXqQV6U33=$RlbU9dSL8(tao(Wu_Xgr87Hm&i{Cm|e0ZRe8}H3#ms+02RzU!~)zAZeTNyh8X@$(bT+YysA|L1FedPbIklTw4loAJ)~bT;%yt((d%m-C-NeuEBi*k7m^ zqkhnTPt21zG(fbmqjp4Rf)(}`_7}e|ov8J5e_Ya9@PB~0-T)}huF>mA6WEg2qW894 z=$jUVKxw-5pPkD=0!WIraAoLn3SyClR6x}$JWgDO8fIw)4eAdC`6_ye1BfQ3x91Tq zzX&Z(1%K<3Xd!X@8bpyXTUN3(Gx}xqwN4@;Ka*1;Iwl|wggoSkv-L3aW6NBOB+^#I zv2FHsgFBPOK%R@3aqL6~1z+}|@+EtkwCvk{T`&=w(C%8)L@nnnUutU7LWkj?Aid#+^*F2<4Rv&b(E7{qrN4u6fj2u1 z4UMm!jGUwfW0{I6&Dvg*P$Z*c2lUXBVO)QXB1kVo_Mm`2ktQZBEo~0$5!v%C+SPIp z4&R%kP%rx`#uof?!V|63c`t%~{P&E^e=rB})w^b?Q=x?#fRaHubPIiVclSXH4W)t= zRl3YWj5rC2Au)xYpN8|pskZHS@W&&DC=Cw{>r|nFB~ZzjepI+qL%nK&TA-z+B^4Lf z^g}2%hBo34%R#CayglvQJ1$B(Y=7e3UDUH-Li0;IG!7mK)6&eLrU z=~YYQVU2JzYaL5friz+(V{wVfM6?Xl478&a_mEsP-zkRQi|TWt*PE&dC0_LkVcK#v{=oLcB32g8qHzZ&>Nh`M`gv&yykWyTeN3WTPE z!@eeh)?J{2)WRPDFCH6ZHprC6`6JF z#}DWUiDNUM-Mzy06EipVFP@#|6~{pUgu*_R)8-va!{|jkbeC)bWZ0Vx-rCsE(a;o1 zjG_oXh}6N~7L0}uqMHd_qV`9A>}u}EwYBJ=H*VG`*cBTpi={hDLfe$Y zsWh-V0g|M;(w2!k5Ji$jm6no4m5IrXE6J6f*ulVjWK+oGjdPcq;!~xgp%|trZGW@i zrU787f+n^SU93~5tl)NGT>0RlfrB@O80KYBKh=AmP-5bZea^dsSt0;f+9u1}A2ybHBR zDb)v(dQO5!K`{e_u2q813(ELiy!*~0rFq)PnPPg2GQDFy2*rfW?>VRfw@-sVL1jg7 zQz#}KOS5(cu!7i)0Jpg41>M^K_7J?#l1l2ktv{jI>(*14Rzw77`YN&pmAT~G zNZNS|C_qS-Z+bjjU;gR#3lEmbZ(e79$SZ7Q7;@>|41sy0fi~0L>ijH7D>=~rp2+IX z-F!mBp?Yv*M!++8$Rs@Q&EZc2*NPX>vL>w1!2{@^q3*_WoJRj;5OS&jM~97yX<8HX zNEbnFa`Q$);W*hkL9<|<0{Cu1jf9fuYdN|kDz$=vU-!sesf1CrwLTIOuL~;c@dE*7 z+gsvFG-w*Gqlgr82-W)^*uT5KQ&qUIKND5z8A;Q_WjHR;*mFEO8 z&>;n2MN4Q+SZ%OBqLL7WtK!s^-_IBH>L6B0At=hylz*muPi0Tm^9_OR1Uu|NwnmnytV7{j`N_Uxll2BLs4UmW}xzrc+Ymc*kKrqECpFqtcj)eCk9knV`T#=8)r;+D*qNR# zMYOREEQ7Uu@Q=t%KhP=`L9|Z2a*P1FBTh%X85mY*~e@KgF0=J2h+}MWPH5Z&gF$? zkf}u?iSPh?WTgHdl)~{8rA-}og%zj2j8kQA(1+Z8M!k%~1xw?HBClQQRO$wb53%xe zTw9J_8*bj03npK$+OPO=k@3Rx5|m#KW8QOfCwI07%zu@_r?vbx+FYGgq zpo|F=~*usq3i3_O#%svRR zCZ-U?&\=Hrfx8F!w{k5eD%-?~Nd>FkOH6`JkiQ1FxSLumSggHLWhDd`nX4_)C~ zr&j+nuPW0YYZy8craF1}75+l_iqy< zK6rqKXpb`W&8O^EOlDym!lX@a>kmgnJ1&AjU;cioFxL)1=U`%r_%5nVG5P&h z9x~jQxFBRtMr21bQO5sZ*NH**yi7DFpBnxlACM0wPol3EH3tKSKDlQJFU4U zB)*q=!=yMh`Fct?h;t5>!eb<^3l)r*JoDnA1;g0Ig!NbxN#5z}n%EQUwJOS?P> z9uP7BA&ue9?%rqP=*Ef$4>9DnGHoRy3+bYu@4F0egr9iUsU2?zLA&LRAccP*PqD^~ zbibDH*g%0{SNAlH=q?thY*tiV12YGBbS6N~nJMj*N^bEF-~LD{zyKAk#fSO?(>P;WF}$>&?p2?a7)l)C*rg>C=BH9af~mVkuQG9RB;N2 zL#*Z+vG0ZbG5f4H1*iWP$0b7NAcLUk=n@I~bSCk+8Q)=@CutL+oWQd`oiGk{3K+hk zFl|hD^9FBN_=QQL(06p!N?thRW7aG*gsvU_=O1RZF-Gr)?*vF_`YSLk{xfn@aMvEt zDE&5KM|gwwEjp&!$e1CE5lZ{EblbjkMbQE^iAAEP0-JMedb-6wjAA~-^p>zXN!z?^ z@&oLkM%&!ZRq8)$ThP33TK3-~r=bP`^=w{0_rZH$f;&>GFVg0@;asyxdaEv!4fSg- z8d9u|u?Kfx3$?{q%hqz{3pl!`WtUR1aq=VaM7?Pk1_YdVzhj`SE|OqJW`w+6>lcN6 zS^E0^UyjhdOyyaa813RQwua@!7z>>fKOz&7x|IAScZ7<$z1SU@(BkVsZx8ABL?hnr zdJ$26Rr4+=6Lb?NEqzEoy+24D`xbt`@b#oB1C>+>`&YgjVqSn zj8=rU*zqmS@m-#>-{igD+1Xi|>edIA(I?-L2tw97mMbv@+ZB({rS{9l8RAXu)qjXM zw7tzr(R;c^0z5#QqW?A3L)|}9eZZJ(`kxhKWE?@z z{j}A&fKFW_9(3`DLU8!6BrrU$k{C!VgA+?584~Ky;Nf6;b5!k~Hc^xeRpy@NgtdaSGg?w^K6eTTTp*ML!PlOsx7gkTz6wntv%ciY z)9S*vlj2rHH3T(5(TW&{69`C_SGkuPQo~X!C|4Aq+-9eZZVby)WTCe}pz%JNd!*q~ z{;Rw<=q_M&uvDjaePWX1i`R;2Bo=0GMW6YNk26z7jrj?uKg!t<<^BIIIqG@eU%+;e zCj9(wXsIw7LjG+iIr>pe+cS4GSO1o|7wX=40!;vL5r37T{Y)3;!joN2MVt=o^8C#e z&|8o5^;9pPa${50Sq=poCa%5%<%?gSQMeMSbSTmxg9ZW0V3zsMRzb%xGb@|jSB@WF zGZ@!p6BktzAqJChCk{(X6+d3XQDHtCU!RFf+p!6Ax&&z0l{UX>mAyl^^P47?XQMYG( z&62v{Z#$=gogeP*I7#f27izxIcrRqY^29}Kw9BB+DEB^f`C+QHGm$}sY0?^2XasA< zHiqFvZSQza)_L2cDpO>dvQbz_jB^#D2l&#aD)*-qNyOt+rFnk38 zcyr8z@K#%*@aEry)Ej&DiDKnmb>y6_Q@JVh5zPa{)2{*3RGzlfs+ByQsl#|@XLP{2 z{KA3A!Z-^O9TC>|_2u>7Y~YHhl3zxGWU*>QrxRb_r zl5A0p#{4Z?SH7jW62m`F4Mf6}a8kpkAR-IB=?xo{jS)BS;)X8cnO?IEJbeYG$X^WD zK}FuAik3bg&t$x(E1;_HDQ5H(G)_`10!*FDU)p|#YYhK<{*ypl{De8gU3BwDgMxbs zT`rPF1Yzj98YxOJ)#fBbyOcS5#D_3?{`*{T2t_+TK3(PMZR&wyGf0 z;;S}h3GFa_wprK!d6E7^%rC|>%v=29mhq(rRHf>D*jmxjs=&|Yo=mqVEti}85&L%M zW@@(ZOQBD+u*olNaWyquPCie13p`^GA{DY&qS(uL%^Ke?Y zGB?4C{b!5prquQ*=si_bJyk|6hq60(L^kZl48Q^$3Iw;Wh_^%#20;jp5NwXIzt|Ru zRH=?^1*i}?<=AfB+)GkePh2?*jGSuVZ_fLdG9TfvlMOS8k`hw`EhH$Y0AqZ#SCLA* zGIAi{-#qs12I+IN266vz@YxSSKc^HAS-S(n9I4Koc-U(^sm{}RLZGV_7MZ;)BiIgL zBsf^=6U8aCR%Mah>9svX%IBPZiw2fPhyh;aP9#P>FXagVAy_!tNNu3}3kLjoMr!r~ zI7kUi*6)2`u!+8$Z?7;K^~hcLf7&S8iEH05=?Z8%DiqtyxRIw4N#V&uQmw4bJa64- zu;$IN+!DzxeWQfk@A=f7=X@Jhv-YK^61ER)vdt_}_XSNjA6AP^;J@p8@ z9hMBsw+Ez|vp-(dv^}vb-<1jduIgUgHiB3zL2C$ogM_xfde*du&pC_q z){kOrMYiLM6^P@c;e^d*>hx|8P^l(_ZseO4?x@8UE1!q9J%mw^(qixxg6Dx!mFLMl zAW4|9cteplA7|DKuIaOKGhh-5rrla5y&s*K>=B8UzjuBU#)@ytVk$dJb z@`Z7c(Laqxq;1cAYCc>JN;SUaF+Jq#$6a3=UlL_<5s5oPO?8$*uL)j%Cqo%KAM1n4k@ zStHV$OQjJI24sGqio6YLYmbs7Dcm4{s9C>vF;5E3NgXoRG*q9IgfBkdzxY-=Cn zv!jAe!iik~`=-NxZb8#GQjk>8LXWi?XD!3Z+#M^5fXyoy+Nb@AgKb`J`REgg1y&qT z8Q9^1nL#-j`4NAh6vS$3^lT=Okq4BcQuP3k_76UsVu69Gi3A}yqN1gyx8mZ1FBD}M zKr1~c(F#yDk(b?6Qu*I7L}AjhFc)HFV%q=g-~WnxAcX~q}y~rYhW|E7xT9JK9iE zRRO4g$|Mtj`-D0-2j7s`(9Nrp2|4(4DIB&U-#TsAxBJX#zDfUytgoCoK;Cc#{?yHw zdrM8?e$Y3;BJGGycskY*apOIPWKob(g+94ZQ^T1|qREQNCmzb(8~)A?n{~mgaR%`` zB!GE=(Mt?#cA=l4jwJ@D=)61nSI4-unVp+}S~MHn4t;c%AYA>OWO;Hhul4#PZ=~b2 zx5~w-DA|(gu-g2Wbk9-u&*STT4w!7?o!n#?K+8_XvG7{Q225{sz;uoLPEQosBKD3NB4cD6Mu#Iy<~ygsWvP#HSUmLt)4%0bfj^f_9xefHJX+# z-30{Z0+5hz617L<`)ZRD6QGTpl?D2AK%2?H6Y(Mn%U{xy!o_In_E)?7UTCQ}E=+r` zGzc87q)>(74Uj9Us>^$p-cv1on@1~30=gHkw9ylC`)P`(*9+fgwfKsO3#u7?6O7Qg zmMry)o{Hlq|ArpV|DIirq<`{OU4TBMZb~UTK8X&V1f++8n$ngS>O^#&DB#S(!VSLQ zfcUfcxCymS3)K^okJH$fA0YdThRnN}gG4C&()`AbZ?!z+e{;WXN}}7?3}XlSJ=p)O zB+Fuik>{~NJ}6Hgm4KfFb?f1X7OZ+Fr;M|T#4%foA zwTIU|pTpfwkjc+zZ4UFMNQ)k2VHyD>vMkFKHvO^`5+2I>wn_7ZUy6;^1bg`=Zs$pg zM0R3HF3|A2n8(TK{inzsLXTaTi^k{=0ZtO?6aYbAdY`B|H!B7f3aCWLc%*s+F*RPcyk-7+v&sS)Oh3 z`-;griGi(JFr#~}G<@ebQyBk6Q*rhuyGkV7oN5T!m z`hcPS;Z(E`!0HMEL1$Pma@_v|0WVwvZP)NZo0_(XEbF3K5I1$U zQ_MVU1c0nF-3Unc#xgL@v!V61QdAn2b{MyvzbYOz z41dei(f433a5^$f3At+AKDnx3HJOY))Y0~*@Fp2I`TkAlK&KTE&e?pZ@?Ug$HDJTG zti~&+*MiI;D?nmshBVo7 zUVRc|4p$gS=X={E@WeZrWt(M>a#VyN>M> zz5~+(2%r>ux8g!(>|kec=k}^7Y16i~&o&iJo7^Hv2ud#E6aF*s{$x5@{KjIN_+Y*b zU4Yv^=CJ8B%5s9+hwrl;^PD)1Q1%dzVOF1>?I#Yi%wZ?JC_3wt+9&~4I2vc*l z9)N2W3U;^bjIp$lt37MbK7m~y|E-dASR1`20FRNbK(zX7t-{M|{W@(O z?6Fb3GEeW|=zGj1L9^r48GwzgkGSMtAl1{Dbmz%D(pWay>b`Y*OjEL!BU4<^bN`ve zQc3>$pI!d{U)sPTBSs)VI_}0)Q9UuWW*`U2l61dk*sm6(Gj*Tj)9SZw08dbcNvw(E zfAq~D-MV$IvKaIFMi3@}$Yltiv&IT6jGv(Mp0}8m`Yh@ScjwChQvBB}oYiB7!oKfG z+_J7BTM;co?twdlmJp%Ug;JYHNF`vt&G3|XV;NkJhydjmR^3q;NO~E%iFP}&JTAM$!7k8 zXWrVdcmzL{czk^8-W&{JKQME~yvkUqT7=T9IDl=NneG0x%Bg>}TYn9=TM%q)4Abwx zk=J^|?NaALGfHc}N$cmV{E26E2Wn_H$uQjPS!N*OvBBA~T>T~WxLOcSaw~X6+5WXp z|LSiAO~&cachb5Hu7fcs$L#d%H$#Ol0&{M5lQai6U@EPtSKcH_xplW>&13?BK|x{% zd>%-y1FR-1an8*CXwJ1&w#Mh=^grJ)&)n8mQ|JYv7~5H5UJoMrX@?)F9a`Q`+$|S3 zSiGdPSQrUVe^`cD>XN8KsWkqaGiQ;9Y&RuZ^Ff`mRvt~w+b-vvnpeO+#`3PF=41k4 zG!9*CqWvDiB!9X_rw@>lW(SU~ zCdv8T#zN8}t%l5+VwwfribbK%R=nxujKXIK$aisPvq=|`iVK@lm|kErsky_2sKwR;U) z%$ASYhuv4tl9YB+bcyl(ch6`#3UAPuA93Xi&KOw9^Fvgpe;8wVq8|0cna&4JY8jwYhj*KyG=Ej_KoSaU0m6`Agpy6C73D8-saH+ zguu-q)@g;X=Z4zFI{i17O`r9XC@$}KF{wc{14=9EtRZq zi`z}`G?Q9;SUeyz>sEp@;XGQDeU(X;s%BnTG40$~D+e8+6K8UjLbE}Lwil;&`wr`l z5JvZY-1(P@$*e3kI~obR zua7>7Dv=QQUc679HttHkTlcWvQY!}JtH<&xw@?nuqRg5^Ajbi|rRnU5<}rf7)5v3D zDO#ab^4kz~UnZkl8wQK^JKPyNaP%S3$=<vDE@;!PbWnKEyV&}s-Pu&Cd$>`4}o!ZM+ z#mPQFk=F93W{zy}&N;A+0}`ujpO-6R{%FdA7QKnuz~Knj=Be>aE$@%PN=-KKh}i`X zl2#I>1_;Qopq@q;b7%;!{!HUXkjTs&n+@q_HiunN=KBY(HhuDd{^BT)iJRBO?fgJM z&>obe*yWCy}J@jK4Zw;5Rc7%QJyrE!K_C#&f^{+R%S`efN z`SaH-!}D?~po!Oa6;SMJTpK>VUYleU7CS5t1`hg?7kpeRL*VU6&ha_LF!Fsyw!O1` zspZd&oWr6YMSj^dyVQdlQwfXQUU@M;wsz@x4)X7N*-^vO19x5U5IKi!E#2(x_v!p} zVW`+Q^|_qZ_V9tD3lry~^a6O_I^i%y+%#M3SKv+1ijgC}0A}O6>p10DwR7$cgH8ki zl5sGe^C$g%C9uAbkhNpH<2Sw;Jb;pCKkFYU!q<>6s?j`?)i-m8H*yP#8A%2N;7!nm z2XZRQz6)-4B_Hmi?|r?E&z?~!{Ov@Tp;~@OcQ$7q;Tos?qdIxqE#quH`S+6FRO;AK z33U2NDY0mAyd1r+`Ophsx;^UEF5x<4jJqv(iR^QxTSvGqG%DT48L>696>&m-a{+r0 zFXL6IMMm?&uyz`GF~{n`T!fEj+$i=VTP$p`dpCF)jiDg@!K6_2)Xl_N`i zsFO$q`;FW6y>4Ha-S7nCn2o>X-mkiYMB{&dUZDYQ+0Yo?FxM>S{6(aRe_VgM_u@bW znF-5vCn=)M98lg{lhS!Up*^Nrj4XlEJQR&3pLwKVCRa38xMeg%L4L*Ged6-oux4}= ztZ_0->rc))V>)B}V|VTXAHVAku6$mn|6}*P@8{t}{nHg3qSI2IRzR@5AmofldR4dUWyi!llMUvO zYBu8-t-7?Fvu!}knB6gxC(qEVXV~jUxVT48Ps%iJQ0JyH1BC84#uvX3kh*a-_}D`A z++Sws@+XPwR8b!2tT_E@6LdNIzzPvRwB|N+*uN&@cYKK)oiz|puzj<$)6OM*gFd$R z6l}UMX?;Xr;G1z&MXy@eiq2$N(h85C9iUv8Gv2c;qgztOyPhJ;lfK$Pww6n@p1Gan zw>#%W{4fR(hezhFT;rM(;Ki1z(aokqGZEyN=UHz@Z%ibaRf{s3AnUgy+^ z@7Z11R4KKctFMJkIDRW@Q*@PxOo1&Q*?dmKsYudU*U*|D`4(!fW+k6~$#6K&R?K#| z93TD-8;)eM683t5mB`winPS{+*{Zx6czkVg`$WKO!7+Q-6!q|DnkfzP1cr%{nfbXr zeXp#xU6CBVUaL?X)oD0-x2MzyUTBt@%C;4U$tL&1Z%h%Kg^_1V&326rgxyfkIu|02 zuN!mYiu`|Ey&&-Me-Vo(gxBQJupC9wxDz@8!NrPqc@#>=ho723F zt%w(~_Z4|htF1E`PYP+@KUkra6vD;+KRHH%GB9s zf!kPl()QfdR)2e6=G?Y(N+@e#+{@UULXOvY}`nMI4L3qnH1gGb{J?q_6Z1!X^WvTuIl&BP=+WBA@h1X;0}A^ z4Cq&z^j#G!f+x6td$hbPD5)N>JZ=wE<~e}5T06(yJKZW z?$5gXK*3G&R(RXFd}Be}==Cgri#j^C?)$=EV% zdpPikWCr%ODZ`#lC*wXCCD-5GvKolYnmlhW*)us!j`Q|H?RQLNAFY_qB;Q~nnDfm^ zn)}K0{2_g6CmPJfA%AV@(F0_|NTHA(CAG!e=ZUvKGIpxVr#fK9;qQr%v6}-hcF|Te zyy5kNc1=fC^Zk$2g{~i0;y4%1tTSeKS_2d{vT?&3a+6npGC%3teVbbY(ZuaCCm}=2 zCKt;cIX@fEte$2As1@4ugOZ7Ub?d@6+n|Lo#HKd6o!Or1pscbvG8Vh@OU}`MK5%d? zPrg56O}=k)2#K)z<3_K<^+>%S99D&_w7$SX$WOM#Bpetl$uW_4ekfrU*(`dzd9r-rq`wFD2%Bz3pT3(jSC%%Ci3u zPr-fNr@@^S9C^vwVd=h?+Eeob1Wnw2ooKglhrjkuk`FZmFA}ata36M#%wkTSk4{;i zvZilEj^kyh0m7H)s5?saPZrFIt0q_8k#D*ytH8M(g0M%6YOQx`K1rWxaDi%)gUY2L z!P8?k^%khcV+bq^G+~ZJadN^w`{E=aCH?!ImBNG=wZG;eY0)`s$gzm=wR}XxgSpMiTU~AnGaNXk%j!|v_@#N={10A4tx{?EZHoG@; zrnK9xZ8UgD?K6~jv=wP+FgLG#^n+iuCi8Vx99u4EEPvI|s^NSHO1i`|!fN&bMX~zB z;rDYdn$3Q3lc$_bcs^`A**a(DzZdFbMFzxq2N7i!K zcqSQ)W-f3csGR_3l^6`4J#S}urfR4MJi9BuDyLKI8NBf!QjmIB%O=y%)Lc&&{o!%( zo5bL{hBuY*b1Z&YcMKABL0f+iTQ{)>eFYKZ!+C5a!+;P~eQr(VCml7M#(u^{5H${8 zQOw_;-s*Fe+{oHXd^lKt1iw9-V4Oj=(EU$M7;%RqJ?QJPv6TJrMLGmf1Mx0HWhUP% z83za)$x7&IzC9w(3Tc}_HQ?b);@OHh8kSUaMLeR=4wcnRx|#DOE@fmLzyRB}w&8c8 zj075Ke{209pUd>i)WwlcjlEH3Ld(R=j9Y4xgpH9Fi=mHpksvkt6@*4%Gbwch{?Hj< z9XgW=`dE#9Ta?to#EkYmirHjKeD-_Ad{Q6K;PvUQq%TtmB%k?MXDNKfF$PlcBa}lvkgc^qs ztbNC#$*o=NvZz7~{m4Af4*u~=Q>l*|;~SBt?C)I3fEw4%?LPBJ1P)2z z`CZh!PSg?#GhQNz;e-8rR}K9ff}h(~_`2X?lL$XP>>lqzMvh71qjQiyWjwUhhw6wT zDat?{@rj!{t0?6I?MFh%O1mdMdh+gF+8{~ub&=yy)94N|k)H#C3y&xnL(lZNFt8R! z$>aX}wA7JIZoUyUr_>*`)Cwb#)Sp8{A@!#zr+xH;AA18wz(~^dFJUHbm`GHlyroQ$ z|NLBg$|t3(;u^H;x2a6QY0UpfoMHEr$yfau$!zr*GPXMuLbv+7B%flao~m9n+@Ncl z7Wmof)`WI}HDR;pKD@H>ey84=|0yBq8uF8Rc*ehHjaKLZ ziT$`@Q3tU&A8yo$@lL>K$>OWesUzOWDJW;-rX?5gewQ>IMV`TTMLD@?oaCJ<@{<)S zfeHQQw0-8Z9JI}yJ^IeUQb~`?@B>im5e`m2#`U<(qx^|%gTN=|lsTfxK>2euIxcs( zC1|#}D=Q80>Fd}dfeuOMb(zeu)f;)Ej!s_aZ8lBJcdwH{Co)NKfO;2J=umLM(d;n? zW+YR)S1)TEn+Sr~x<`k*guFvmNbw<`HNNzCwclog!3f+lz9Xzjq_+5)toSW+6yv;+ zZj+$f-!bij&!W4r0;0PF^Vh1wbmYbV3`)oEBWB4Dc#o0sw>q|=HkRe6EVQgT6KBR)W?QUZgB1jFaq{w=&8PLUQ_Ny6)FuQxG6_}Kv}gQZ%` z3*{}YLeQ*e_;+LKqkR34G8efX+4%Jjmc^61u{k-%nw%txtyFKL)prGxTvLGcJgnD{ z_W%^!Ky4|hBtM$wN!o6-BD|ld)bRXn;{arv<5(d5ftvbt-urHu>E!b5eHJ;cH<*~4 zmuMC(F43svv}q^ft9U2hy?b)UV|Y?X1z(W_&Pg#2%Y!~pzw!LZ?pNuUw*`qIBaMQW z%Vn43R}xWu3ye)RjzpE5GgOTge2GY7+vz0KKTudu4FCEPXQ+jPUW%(zD6u|S#s{Sp zGXdzm{T*bB3siG9IK;;{5t{{VY`iTm@%{=hBP-^LIa@jc>+udz-fD8)JRbW6m+#4$ z1+7Hoa*{XV!LVaX#b=lN`;VVkU(hPDLu2HF*?5qiQ5B?=46vnWx7o6I-f>;Hp_8S2 z`_>!Ra+)WDPaP#?CWUhb2{G-JV0m@ii6U~}sjq6N8GQeA_W9vBiwZnJvp)a1CZHo9 z_0}=3xcUi$k!f^ns8GJ|_?T??4-*s9mq}Om{PJQXk;fVl z$QexP;fd$_dYm*x-{Er$iRRk_9~a#lm}?-|j603Z;)NROa4hJ+t=F1=J`$dHb`Cj~ zG-<<3pc9Gwn&B7F7SFioKfJ=m#zpS`d~U3pp|M_5nazbI0u8CaxS95U#0joLz{Xea zLL$*j<+R3SOk{|4t}J9C=^PSM}htMIT7n3Z)_5KwAalR)c0m6`{O-fK% z{p-%V!*^DANbB8kvNEJ1_}>=^BQj?{MVc$cT`8mdAjgVQ6r)(!?hl9y#rlZ}Q9oxB z{;P#fnG*uOHi{vGpge7BcS^){V0U(~p!erfKYZTNS$z8b+}}<$d9u=ZLj|bJo($(a zQ_5YCJnW_C00+XIMM*M@fTLIUlSbY@Z4mlPhvi|5v_lVJWLw96zN8T~J$C-BP=OvB zam*)=M{JE$IF8dKWo)W?WURn5)N#)IaGQBB;s@bNRnNnPBu(0fJHlrKaa{)c`^o1| z+I?hO$~6ITNvvlYwZuE)Py5&O76=;~b%Bns9T)V+1&3MN$**7apT4GkLtX62tPDHk z@H=sc1J3)}=ptpK{ehiS{OaL!D`bAyiGWMD0$jm^8^*IU0Y>ekrYWAI;Va6_B-1R> zOic;Sc|6#bfe)!GTVkG%yNBd{dFZ%$Xs)%Q!Zj*=}NNH*G>W*e>B@wP8Be8XMS!x$%DZx}S`Rk@`4g~z6_G-uI*7lz`EaMxsQ!u&sM zSTPxMk*iF;6;u39jq5&H1*4Wx9eN)J!042>8~C}lH|-`SCT`ROAE?mfJip7pcsN1Ca}BlA7<%UIip6RI+9v% zbaX^wdZvYz7D0S`e9L;_eflf?kS(Pho!6sI)>;giMe~pH)`A@|YFe+%LrM=oN#qO| z(K1+N=S8kGg=o0X-CBMj}$JdyCD=adiDDyqh%s| zEZ!yhoK}@&Mf#Y}`XXV+`H2~y%2;j2)C@WbUaGsfH5Uma<<%g^ za}8x8tyB9KP2zi*E{MFzQkxVC>m>&Qe;QnERergAfZX1Iw#VG384($YF7M7LZj43! zIsQlbWFn^eguYA&!zqcJrEDpm!X7q?Q}UE5?v&$%?`N-H^3W$7nHg$l$IsAKj>DJ zQB;PlHfVo2$zae~`4UH0f;GN6yiL0gvRlT@ZK7Zu^+fU9ob+r%Uq%7U$2ZD81P;GX zg@^dtk{7FWzP9nAk824BGOwDvgTbH9shkBW%bkT|2}aSYHY)rhF`om@45(HVB0lzI zyHoVX&Bv&kc@QaY6RbZRVSU*lQ|<@oIw!seU%(4uQ%1l+n163S)e~SQd>jUXk6qK0dsQtm)q5wtE@WP!M{y^D`C`$cQpSWD{rx4szaAi zCctt&IRCSt=K`4G|Dx(E!{S)Ft&`v$Tr#-(;4XmxL4s>=55e6bNO0G|-3e~N-QC^Y zT?6@=bKdvf`~84^cxI^T-c`M8*IK*w5?t_=W`rAe7-(K`sEB?R@cRX~b3K9U2Rwl8 zCtjK0Ie90eRVRp&45j+@3tyq7U}U^zy{1NDtnT#;M+nk1v zmFM+8<#}Z$eNI7C2hoac@EnA3pWS?wP=TV?G0t}1%`k$=Y53R=z{dM@uZ^?klIKd- zMOhW?Q2%>Brc|a7)_EkUKw9PjDgL(yfi^KLEG$|Xz^C`f|Cr8R(IeM&N0Cr)c`d+n z=&HhWX%14q3%{%OWnFUaFVov^_gE7F zkK?aL;1f#!NnCg0f170Oy1?r2I-i9^nXaYc4L1gedBMyjBNXjSRQv|vwd$XLzn!cE@w@Db<%S@qAl_SK>dd?Pf)LX_^kA7 zEyqWef9xO;_0~Ohxg0D+9)MYCd~F~U?zWN%K!(0PqCnLQ^Xo`J=aK`*_aWT227Cwz z2wLUSmzco4HwRb-?tc02G)NC{c%4aO21{8FAzjTLFAPkYv&QG)B)}L?MMZoLJfLup zjmM7nSWzB84&R*T>`|+rv`kc^*>nYwwl?(*>IbpwF#Sy^?8Y%R6?d7^7rg0)<90fx z(Rtq2WG6QNBz+}&EZ~ej)_TD+>wQBin^q*+1+)GHv-^~&l%X+_7?_+~`R7-XhqnJt zMvJkAc~`VyLFH*|;{9yR-t6U0R##u;^$320R-3=I_seZ)!=xLc>1dtaMtzDa2u)2^ z&(UwED}`14b-n`6(oIchVywdPE)Y)t{zsF%lD2Wg7HaS$W5huAdi*etifU!Utpi$D znl?-^m73x5`I}`-jKPR!aPe;?BXM;O1P)^rh_cFCs3B82X8jw(Cl!^fu=<|}Gc(xW zWT~VsW0bENU4+H;sV3X)ZQ1^W)ss;X>-QeBWen-CZ;`9nOizlcGU^M<%DNey!`B^Y zm-mpGz$(jqP{p4>wjwo^P`G%@+dpSa3G&O;WKHGh^OSO7AJ@JGMfLMK0>xtTdM zzQtpu!5|w!E|HIq4_gn~z{5#`$26~)|D$MRYGg3I?-I95ox>nR5YMp#fDL{=8<;G1 z`;7fkgn{38Y1pKw$w}`NkO}RGzeCPT3O$&4hVRdtq6M7ZW3bi0f9daANBE7$axB>G zzZxu=$Mbn^PR~L4Q&W{&q7-t=l`Jw5_Zya?pFv>*65I0#pNX&|24bbqGvXrl9SH3% zHCFs2MEF>ce-=g4FlG4vh-R^Jgs|SLohNtYwjR7ZfxoSb!iP>7OwWV1d&J4Pk`|mC zIp{*GS)AS(8qrY2A1Qp*35V;9ogTV;6Hp2rSMkw({@f-E5lsa9$Qt=~@Hhdrp^OZo z3=hjPPmg~fiKPf=5~FuBTH^cr#3i=TKLF3`O{Q9l}c@rQg#Ka?I(R*fU!Er8~+ z&CzF=V8QPtZOaAytn~4i#6l+ss)4ZdN1_=xmWnGIQIS=L!6PI0HmrAmcPO(O3}U`7 zoCbhQEQ)9UG7r>6UN-wT+EjZN`4Zp}>#HPdqcRA8|_=ICLm; zqS%8qXJimCxaFQmXL9`gq9u60|Jx@?>4^!~t(a2e7wl%9t{Mr)FX7*tg@oA@Yh83Z zm!4ZNCeb7LWF8sgbjt5&`@gw~6rr44lx}eIuTEC7NiiIl@NP;E4L|TrHj1C{Kk`m5 z&}N~^bBl+Ickzioju1ZIMr5MCp5mo<{QjNpuWcprGkH|0n|q0eRO zj7Bsq{`3Wo5`&V+5#rw@Zgtw-4U&h;0~wkjNLZBYkPa@?VZ=r=#s}3X_VDUU=3I8i z6zZYYq=q{cfg;Gh1T)v=2rSzge+>HrV;4Xxs+L8~CR14k1XObu1)Pq#ZP`~Bgp;I!Y;M)u!k|z0>a$1#62q*oQueW z))Y&Tx3$OKY;wdsm#pIQ%ioCPo|cF-Go6T92O0G@!1D@Z66l1JtDW=YJf*h2NQkF z$&rs!3xnH=dC$v&O`6lE=O9I37m8?eRH)D($bejFd(n`@Gpwnew2W^bSnQ=Wb9JtN zJ*hvq-UE33vkf^*I>P+G->%bm{NP@b-M&;47b)0YnXs+u(#-zP%dBqv*^`PaM#tRC z0w(P5wlMBXV=v*vBRmiZ2s}xs64!A{lPpplAs_dNppAQ4%vw&KR=)*-pIMrZKrQI1k@ z3;gso=LY9xI>MiCQ4ue#Jq7jZ;N7DgJW}G_Rtc2lz12%>p@$tO^3{m-br$&drEzMx zrcbT~A(c71i%!X2`S4Tm;-9>jI}_E9hHi1?L+cB#)>&u1QQl-jRiY^tS|4(}DR81F zj8zPEhUGP-+?=pFgf3#Mag3SPc-_QgVCNPTkaKd*{%@#Fn0yI*kD4-)oUR zhsDh(Zq&^&&v(zT%q9mPfE3Y?#1G4}FjYonHuy!`a)=SMOW zDTX7$xQbrs!2J0|mhtJYR=W+*Is3EeFrK~gYpBq;9n&c1Wk-L{t%Dw~Wfi!GjvLn1P+ zfhNJ3!NGN59G{+rl;Z=sp#(XZ1H1EXjhyUPtfg|%sMY`n2&)Sl5SZ}Y8@ls;RXYG< z(-2a5I}&Ol7MNwQ?lv=wj(yvfzVd_Fbx;WCH|%v=;SC==nBRT6x@=rryL+|bX(u4o z^kBC$81JzV`x=nHhD;(r@IJZ`d2;YgTfhsgy2f9JufS_;eD2)%?NjU}`pYR;t=ahH zpudsF)dL~5cewlm!_jUO%kNZX(_F00`+(o$+xdpGaON%`G|SyJ>)Br(FsAc%kM_Ek zC)ovwTT&l9`;lC(wXc-wQ)WFv0}EPu=bl9IxNS0xM?ecPmEK){I=SipJbhKe+^X64qSFa|V#qx$A6cE~6S7Qptn-ABFbl;Nx;bHU4<*H|3zSbKR-8@Mp%6*{H)&+WeO$>9H?4_eblgriN(fk?)* zMy*EaAPOi>{T>{QKogeM>QY-$(qPtXzU3P(x>C(aZA}A)nLdX879QB_CTG+MUl6-RPoGr(iIoFqDa5FJXK` z{O;k3=}V;ESYLdJ<|Hc&}Z!muanFRspWFwjpw zUU`Fv^*uz7fz~9)mJ!*QDxu(q_jY5<04tN=TZNq7`p98Kq*`zSPPOc3C{Z&Fch|39 zNNdD;!14GluJI1XgLK_}V(ogz%dMki4ifAC4Y57pyo(Aj4#3*~5}rHptOO!F(d z*VNE}D5V5$c4;W?I<)M();~d=B0j&9 zt^%T(_o%T(z!6XxU^a%fO)E(<^U55FADV~H{yV;#U}l}>psT$xX%D;@1?LW@fFcLT zcQ%Du*lc1yaoo_ zp-7L?K_*qQ#;o<8wmz3!kWN<&_M_ZZ$>7PPM}lmts`Rp)#XfbLnzK6yAcH0&ug~6y zNzSj^n|QR3c2eNaOZnNDFU`Z~Ew0ywtL4R+YU+Q;r!;v^TunnXY z|M2pI8EH=5;C$h!q)uMI5jO46mD_J}AO4@MEqvg@O38&kDtg_cSm8ldH_x9+0m5G; z4iH2SjrMKuOloX787M#aK$z~R|K7F2e%uTRJ>KAD5^;qq(^yB5Vo1$r8v<`sK&jt3 zKhZB2+*_gFbw8%wE8c5(JpYZNS4P;#gY}YC32b77cLeQdaVsBmJd8|{Z$#2YLYyNa zLBj5VOeX%*KwYmekIzxCSu-}sUhRi(r=O=_VrsRO8=K|Q7x@^XV9TF1Yz(9Vpd*nk0`Fti8&H@ zX0VKMsV<(rmIVYytL(k>xHjeb%z5YNiqjQt@sBCO(u}429^%n)NMR_T_z8fF`S|cczl&2s2Tlx4;!3VZF zJ7=jLC<8Zg0Db%^I0W+A|_sTMZ3fMLd+V+boQYrW~P0ikAF~= zP7c)bVwIh|L^7aTzd!jGreM^1w1hLyDgBB>mlv4XjF-nJa)wBCH%WRT)Vg7OcXh|i zYo7rUB`%v+#CVk23G#6Td{!e%a(x$n#AP5y^YZL+9}t-$9Kqj|Dlz11P}?UH*d<#8 zM8~9B9LO5)AANktC$_~`9j58An4FcQ<5PNjP?j8i%~^L#d33=4-4XLXtV@|Ln|bT# z<~op5*=}#2rGdl4D6)Z`dpU&9uhT|iJ;=$5m}u}fBMHR*Rac6Y;yo7%LBIz%*mX4L zW%GY}>A3wOq|GDK$V*C+Qk8~KbWl}J@<^j0cSlZ`AA9d6@SKGbf8W%_Uu%t!p3(H? zA%5)Qw z3F;IMhxRSDk$^y;14MT7--n!3GlBFhxF*z2K^`3aj8{O4#X#&}5)!~n+pL3Srh&PE zVV_)nRa-RXJ&@Q~1bp_Av%pYG{>@&R(cDuA8N@waWrA9_GzxnF{&z9Ru!Gduwg#0W z&1b|#lE9RjxJ_WXJrV6*kO$gcgc$p^IkY$1w%)MoDsp?|8qT_I&Trh}zK7^a*}zaI zM{b^Pba6|=)M|G|8&bQv9bI7ZzwB3p>s@U2KzQs;_}09heo^++{-3Bd zmQDmNJFolhJWf$*;rqoXNti4N(QM{uL|h#2$3x^Ir8v2P+cOeS{w1x(B%B&>&h8qd zYav%FC_b*u`_VJ1k1&6Kz8hX{lOP-AIgikik6KMWosHBx5ZEUH({(C3u^j0&lJZGr zk^*(igKsi9l7+ z5YY$I)>O*zcfZi4P^!r?gLtG)0ASpBAM1ae1HjSv3eoCn1S9A_M#E3QlKJ!eUeC@# zMb9Q__y+G=EBc;d9Qh-ODLB9k@`~-libW+F0kh)Orykk{O8$J%+oZ9rL_oyKIs&+d(MvELLFlb0%O_ak5Nz_BDXCSs$=)A8!+x zHcQR*TQf^^L`07MA!cDK9YH&FiKL|XaQ6Ip7F*kY4fM)1@N^w}dejQcJQDc$+%N(K z3S9d2omQje-AS#i$q&V=^>xcinCHSPei8GGh9Kg|nT?7(RoV?EF~zgBkS#z4`Ml&* zOyb%A?3kBESBoSy*Cr~LJo}2O1*@$IORd9SCs?puwchiszUH8p6r(QCX8tGOlBvq& zGX}Usnmo(q@{NDrOamv#p;-i(kw}niI4`elPiHJ@^~pZ0hvzwljTxHY;#|PbSck%L z?LakE4!zEK3w93nb*Ukf<~kS55W5f?{k^AoTY~wgRijkHCvWwHAe5BW9_o}agNf;P zpzn(T)O*i*Oj@w@aCu$1NqIJq+z+qZ$}}*&i5?NF($htGWvDN1+#W?g&|NqO@@V5) z>-?@kIy*D#`Vc!+VZEl)Tx*0zMvmw@8E>*HETr*s&Sb1}A&poav`g{gHQ#Vd0OD^z zwNK>O2(E!Y{#uR4BG){27u)d+pzLcMx`#yoGW&lz_!qeUZ#bFOJ$H1#d_q%E@F{|9 zH0ivq%cJ?hRz^TjWmBwhL>r}3Kjs)9Kd22Qxw@eQzoRPcV{f3{?))2!y^CpkJ;|i|)U=lCIl7s1cV{{SDY(v1Z)|<3}lDuT8 zlqe0*BIVFh&o>-#btFdz1lfY$ud4uoDI7v!8hS^om=~W0=vk#gkk38s8^<5e+E&$$ zF%CSV+HGAPm;130FAH9ibcjzwqW$^tf*Isq1%*lwGaOQobFsgX)bGWEpyHnHdppA2 zEgSh$e`*V2o7&^88HPV1mz|$}!Y2TWU~jMf2U(e6hQ!>KGDK)_`=L5fX0y+w@xbK%S4}tk%`Iex8AnN-ux2O>;&hMBKX994IG?>+;g*ulEpx#qb2wgA&8O4KluCVo zaDa3WeyR8i1Hjp@3H#9;#hee`Me@klB|u~Eelw=pqSMERS_j)-(?L5&G*bu)x{0;M2E`QL86n7+U9f=M?s zB437*BQuVED|hxw-_?Zdp^|&pXf)!M#Va*zZ*1h#?j4%woj78Cy&%*`V_)=@A}D=c zzkQ3^)Gko-+L-5i>p<`JNuJB~wuOHp#pXab!7%q7h!x=U?pKh98@UN>iSg9Ec7uQk z%)NA0Bsz6(8&}9vy4p*Ks?^-@!@&pGkaj)xz}&W}X6J`u?49@BI@FW_A;;!rQm*NJ z=w)>Cii(=Pga4$NTbF+0R?PABR0L1{0d+xABI>Rh>vNndvD)no$1+=&%pP-jzu{w4 zh8#0fCcX)2h{HDc0K*a;Stet@2ltw)h%8@XK}L7~xsQ^Lm&TUR`=A>BpD;6Hop}(* zDC$;m+XPd0LkLamj@83Z2>kjXEHtwwhTTD6Xt8cm7TUMT*FX%NM@D6Ui~(VrIbbgw z$0eoY!_5=Vug`6wbEC0E`JXmnCRj@H9^SoVdwBK$xR>t7VK7_L)zCn`bd^QI!1c$R ziEM~&%uE*W%h;{^I`}&1NS(H&aq8Oyo1;KnLqOBxTkCZICIDE!>RiI*1s^F7;@5>B zeEby5#`Y^cfsp~c2A~QXcPvS#SZsuoY}$&4iNXNDP_`lW55U0LwVjkSl`AV-6cy7N z*<{27_`$eN4S)&rvjmvPp2lTFry z8WN<4HFS4Tl;VCt%%UWG&@C>eyh9}d{^(-(~o{X*AEuww$eX>wsg*|u2IA*Hbb_?OT#JGT zB=pufoWL)ouiH?@gFnVz$(GN)qMj9QY7P)%#Vc-1nt8yO)aMN@pPM3Hln?gi8ySJx=^~HY{~5*TrlV+1+MlsG*+ni9VQU{hMznm znn_bNJDk2evK&^F;{GI5N})}C;`$cTc$|DFhC6{9#2Z^tnG@^j(JaGR`TFDj(98S` zAQs83XeH%^iCn-b4X6}-oiX0a51pO1hTJTZAt~Y*IgO@qNgpHvQWC>b7;U*Cv#aKj6RfK* zxp(=w!U@7t7Feuux707!`X{aR`%cZ50qjnKcUY$ru$QE+4WvM>?%a6jK*_^(ciOB* zn>TXEvOVvrz!k9EYo5c^vM&e=YxiRgqj0n=l(sGUb$~%!9D)2-)z0ezWU9{Y>*`d; zm@qpeY-}p!D#6mKD)(W}G`HrNI+!I(V?mCUGo*W^j2%qWSXAM(QMG; zJv`9`YRjdX1^6HGDQmY7hM8;R<&-vow|Im7KtbnF_&KZk&hbwk$_lOZ1_QzdL(B7~ zuXL@hfhC(JPc_t;726nhd{)h)E5qZu_OX!d0EQtdeVbO0T!K}d#lZRjiC3Ux6*VD= zHc1-E3JD>pHhNndR@;HfAr9k=gZw5hKq*Ab&WNH`cbN??30sJ6J%7OfE!D$PmxH>9aAq3s3>lu?Smd5|7fk2Zq}9(Y z1#Gg2_>yI}s$HvH2u2Be(SS2PS05P0CTbhzVN35%IV@fvw^??$TWQXFIki0=pslX> z`T6O=Io+@4EV`|gF4T42SNLV;zg}=p@x0-PWISI3bG=s;(NTgh(gjg4yD7~(J18)N zHD16TnuOj*66$}eJ;~bHR;|q^3IUA8A>fRGXt#y>0KDSYMx*O(4>?7(l;B*)u!pd6 z;{r=Ztb-(u0KJ%(69Hn)uJt{E^t?q)_ctA`%GNMO6fuk5ud3mHwrTd+U4uY;A&f}x z@$iC)I zEut0|xgRt!j=f99!icoBIT@Xj?$5Fjec}Y| zGpUrMgeJ@z%!6}kpnQNlTiyT@tk(xviGnmE_ zi&`AlZ+=r9@A{G`pZXkN&1%Y|Bxo~VA9bUqE7wonC#E%Av1ocyTdWAO&5+j>_mS~` zsk}*qNt8+SN$g4dNy01%DZ-pQ#Xw4dzIaY-)(dE0RdPsVlE0OBx2QIvfq}{^V{hUn zmEg4|5~0N4iE;sm)4t*>ty)}~g%Rvi%F_1GJHIE-m|&Fif5atX#bYJ#e$?Ef)eWC( z^Svj`{}oHI@;;5=0Qn$doI1 zWnTYx>mfo2l*D3#PkJu}2S8!Sby)>K(n~Xj3bu-%obk`U%>sdos*J0+04Oc#(USh^ zZC~?jQnIK~**caN^+{Znh+b2mh3|Tif7=YD*zA=J`7cfZq~##5B0rDmvwol- zl`xXQa1QA1Zcwi7VqoqV|G`pd@OCWQeLgLM+2Ox@6xh7;l&iPC}KT!DxC_D^1 zQS?9~6)MWH5TVKUa}O@Tp3t_M2-57;ARZ zUTW-}%-5w&&|O8XH1hJ@a01I2%b#C_MfR^eob9MTzz@wM4dUmMqsFfDiZ!ZOiE!A9 zaA41bA*vK7iK5@3yJK?jU8wviYC9AQT$uRGz9{eH)*7-O2J_w3?Smaw>sKz0Leba8 z@?`GA+BX>x4!}=}->M(?q%zgwCgh|nyk$j%C`kipc{wLPY;a4K56ZAlQ4~&5d_Ln9 zeJnhNr(D^RvlMU41d5i9N*vI@SlK`b)6)0nDW2i7KAj2|L8dRF?J2g;z)!+@t(D`-12u`+in4+ag*3 zGJGY@w@Z!`z>aVcXO^8&2T$)=ygxX3P6hqYSOPx|5Z-6LAQIFQcV-!yg5B?I>rDH8 zY6`N{LQ4?lL$qUvX#a_3Tm37i`-%T3*c+^V8j++!n1szL?e=)0V6`JNAn&_EbH+8M zBxB~o9B|#mT}Hy_gCP~-`hZa6+CMn_qYkpr%!!5|iBDr}Y*fwtsA?i^LRDo4Ni#Ji z)io!&HtH28qh>>aNpL<^e3(|tH8mn5r$$@QNE+Wq9>>|XBiz`@HEkC@yEZoNlY{)o zEkvMUNnS&@K$}3LC2djoUlVPh1WG#Wfd|03T@He!3m)$@lSi*^&Tc2EyBE)A@|8T6 z;>TUiDFj!XdaE4q*8sUpotA1CHKy9E8>tVo#{$7yeP1hVPHda&4=7{_TiUfOJ}{-V z1&LCR84N^VE{n~c2?m5}d$bKF;RDH*QqLFwF~Pi%h|0!^X*P@_Jp>#!!U$JvLB)){ zdU%M6%rw6A2ft`48Wz39tPVvNv}51w4Hvc5A+V2H=r(;Vrq}d^rKuI5puZKz!lxjb!AN5gj z*g%<#Qh|&%nv7NvixM{2V3f!7z1}EK!5v?LDIyI!()Jt3Teo()1AS*T6}5~qUeDE{ zbaA=Q8G`)-!@^orH<65J7XupSr&vM9-S8Nt{LtbBSxR$6K`2*&i~=~p1GJyV1_I>d z!}N89&q#7V!ICbS{1r=jB1Ovk@hnc6AQOr$Q=$t_w_#x$p@e`yBfj_`&@p@guLje^ z^|+v1sbsU`nKPtj=YCajx`AGfk+6ug-pKebM&X}vsS3Ti5vx$Ag_C6La^&(SGH4}7 zRMqZ<%EX_F?N7zsF}70RpX!%@QbQ)e(Nvu8fDL#%kk_bVJF^I8YEzOFa@*}1;z3># z!7BCk?b}{B$^g$Fo<5!;{O4V*WL7C+jbi*&%v-fm)#nRMR{>L8)ON+g4s56Xmmi#M78dtn>f|vBwJK+LIf6K zl;i+yklg1_T3Y^8ZGW44WP9gYBDkrf|ksBmA#d{2P znwt?nAI?~QW>!tvkzldO+J+{W68t$w`zt^-#_5VPSs+JzeY*0Y#qCBUl1O0umnN6P z+3L!Vdi+XD4kJy0v~&UYRjA0|W~MsVgRL#YcEi1+Bl9rwzbBMPlz(Xv))e%j<6snn zau|Gf+e~qeI_H#IX`(z8uk^OPYI(ohIzz|>b$^x8d^1a%)pAi3Vl6wA7PNj_KQK)R z;r9az!Bcn_;A3O|?C<~l>C-1XvcZmojdpWK^>cicq#2vMG=ngg=FYCJ@X9UQu!soG zUgcJpAw#Ct60B-T7I$R?s;9(eE5~i~k1AG_gWoW2ECNUGOPtk)&W#d#FSH`l?}8|E zV5WTk>G)V0ouc83&wCji#EET^0h{*icHlt!wx+{o(-+hV1M$vkIn-u?xefy=`FK90 z$Z&ijwhM!Itv8REXLMpTba|-uby~PRN1(|;uK9xqN`P9C(?%b9{ zW#|=>uFXjBXaD$4s`x{m0Sy-czBdt^Vp3s)P9vKboZD79+z|4Dmg>?Zz6 zwGS7c5rWel`xtGjrfVk@lu7-b?F(r--3Au?TaM5|kiW{q$QSKweGURcQ*A@iUg>s2 z7oq65pOgI6ST2h<-4!G6RDRE#=L(u+$nOlDKLj<9Z7FudrOh9zFR02LN(2x}#-AZJ zFgJLjGZ-sibtprt*}uo>&>GemE;QjzZj6Sx^m;x-zB{tNvNcjrK`0WwMYoTdVh7DQ zn)NQYskUoq8WYEOO6GZn;S8H}0{5vep}5n8c#7t;;Il(whNGw`B z`Lb#%nlac+TQGl8Q2ce6%y0$yV(8XZY=j0NX`1UY6}5;an!mnV+b^0CIg9TQC+Bx4 z!LSLifQo1bf}{YsUjON!^P3O$6U99*uEr+h|K-BXH&`cxMCrZvGT zaC*b2WfR^g+wfZrvmclAylB4UdCK^~#I{YX z*L$DyIyd}Tqz~`KhUk`gnQmjXr@&Yqm_pRtVP^=snWSEfHw;+3luzC{z?*nztU!jTCV z&zbm^DvXr>dS#c*gi(6E5>Su-`<-yiZynRX-{HLoHF|)mV7T}e^j9zkaLuvxb%(JZ zq$B_LAHJacbk(SZv41?An)g0ty(LbJs_%KMq*qKg)K(d59&sG8Y_Jz{ZJG57;RG$w z-|F`HU@9gxXB^J&TAJP}&8S(b%{jNActr3;t`!&2$E(c6&+WLGY(EcM7A|sG&n=GC zu$RxNIJG@1yY5=*Bp(eq?l`)pBb&-VmV7{RI!%;kSx!%TYNsL|@ zk57w4(fT~TjE;KnGr)eFrlrWIszne|kC8NGLT3y^{KVqhM;Xn*70t}E%+Exwc{}Qt zBQD4Uf}o`cP~Q)`4}uxIL=#EI>a|W#Ax~|=C+?it=ObSC9*Z;}ZqcW5%^Z?kIqxKS}53a6cphiS!af?`KX>WZcW&gyM{f9R|{m_t9gV#pM|; zHgu?09P)iaNeZ0w{}#7{ODaSQ{rg!^q>1Sz2>!Nfv9@HqzB?dkZB#<hbzCczR!O-e$j8zblpSc68&$S`a_t8TZG;&m5KpZ=T7^K!f9Req_QYo>gKl z)Mr7>Aar7eu6tWHu)#chvo6GMtk?6+QhP9j&zMdzq)-1|^UQFy8~^@%3tjzrgipQM ziE;2L!SJdG)5STfrLE^djZi4Eu826(yAjRlR3|d~E!6o7SIKy*JB}c6a#%1u9eSE# zSlqMT5ND+1NiGLa0(3p~7>_|68@=dsatTuo;3 zHaWTDM&Yi2WZ^FB|wD#8^=8|K4(vjp+?V+S`ub^YRjO^rtgP?;EU{5|}fBv$I8jJgYE+3&&$VFO)pL)t(<&Y?WvG*v)D2Kyll% z_NVFIhN94lvu>1Jx^TA-b`5V#HpdrN>$xl}3TK zX`_%!LGegeTwPiGpMxP^)LV@O0=!wV-R~^2AXPXex7sWbd^OENtEpgOF^vnn^A3il z{?tal&Fsj^zuSyqE?0yA9`|$f3K7;cve)ZttKo<5(_2?UE~lKZqpQKrtpfhjKCzM? zPO}}l;R^X(;E83P7YpmJn|KNvY>>M8#(Mg?0`$8&2k?YmL}dul{hN>3Exz8u^vXP< zc8Pli44ak6>CJ5*&3~~Fut9Aq zmW@`@>WFcCsx(%^{-xVJ8#1L{XN6mL!WTw)gr>Jv8LHk`gwccw$~h63X2C78r?0#^ z7qckiHgy<`acrt|TOvK?b%?kXl3jAI+*`*#=631eUM&;7-FdW}9^H^uZ*#)0>SOHi zHS1zAU4pR?^1x1^g;=e)`vVzOCw$?x)2q8Hft8MHEXPzIW>0v2TDlikc-Uh*9Siwt z8{J8#kySd4N%BTcskiDg*QuuU1*AC;IfQYf-0DqrnD0-Hz?C==_7c_k-3Ra*okfS< zdS%M$)_PGp5&e$XuV9Nf#C6)c=;@H| zkm|@6Y4|+rNujqk-b!8hG>&hvs3FXrJq3r@Zf_BigvvN6vNTHn2;u@~A-Nb1h`d{H#jNX*%JI!Ni3T;DC-67}9fQ5TId zO+g4d0X-q(BWHcX8U1^)1pTd->fVb6Vhyk}@1qxE+E~c1z{-?}YLh{FcH|bOA15U?4>07?S)IPJJkEI1Sgf*?t?FgmIUwwWB zzPjv>(zk3nYmz&+d7hf_YE8q@FtD1j1o@UC_+%@>*R^=?&n9oK^ib|?}=gYKY zG+UMB3@V+eReNh&E(}e-{yY_3e$sYbSpe3^?Ynj)2k1!OD#!r$~E9GB+KOR>0jrEeKgFZ4c3KG~M8NLM=b zDNJU5sS!G9I(gGWXDCzjr`>EKx{GsM?~hSuwH+2@BCT)V-g#GO zG>BphN8%9o)Ts1vBvY9l7GvIf?9hhqW_@z}@{M3@TBR>2r`y)JZ7#5=L{|S|)STl# zp;5jSa%HpE32T{d%O-4tcDVS@L0zB#!n3@#W_r-!a;a#odfDDt66#uef~Z>M&bf+( zfE|ja+3%kTCSj}wOVLL)+l^|+t`e>(+`~_c3r^=%;yK-?d>k)EuJZ*d530SGmb25L zmVsq7<;-%1dmW+k18WC^(keQJgUYV5ah^>(4&mymX^p-ihPah~_r*Yho={JbTAW1N zMeieLh_(u{nDEbIByM=t-AM_ zTgdCu(U>96T-I^rGDf4uf*yx?ZCALIFU53qH}7|=mYPmtJ>gJ%3dkZM;j)o_kTdIY z9!8n4EogA-)_5jZ`Zh04tpxR8J?11v{Zy!9vtQ0Hy)V7EM7>Xrg^=H`g~690PNH0I z@8W9y3(9fM+fr^1oTmt__SG%5%Cqe+Abv?dyX3=*twH71L|Fd?38>tO!g*=0+B=%R zv`CDR(ZuMtj^P{|EL#@_-HnDI?TDsDC$*;2)5t~zZOzekZ&tg9Lu{=^0~97*Cn2?R z9kCt&P5goT`Mp`E^EJrnWHCHk^A6A3vz@HS;Nn&(Mt$qUs^lc4~i{JwjTit~aq@eGD=Nj6)4;(@JL1)q$-lNQ8e zR@(*?u&{<(F_BS8+CTgXm<|6Futg^*`CG=D9{WV0G9`e*0^`QIaAN}uFXqlj*^2Pk zdW{VJXd1iNQ~b3(ptue{i}=E)s^7WkN5gOuIuXjbQR2xpUVmm9gmNdgc1OL@M5j09 z8~N?L++fz3J~~}9Y-XwWJ7MI4#M|be(WBTiuJtJxiKyFKb{UTXV#TKjVR2=KfEKP4 z-+Pp9DpOKHj=uNVUpc1&e}pw}&=B46ta_VLAi^>B-YZy>e&6OFCe8>xerq^U@4^my zOW%DL+t%$b=~sEtba#F*ZCg11AV6iQ|F+r3zeWoy4z0DXRp7dV9Bhbzn$Z@7e&*>T z=oO8}W$^ws4R%%A5x%Y!3T(2dw!cD+xFy~i3{_ygRgI9Lm@*fo%lihwh^>CiQgumY z=s{_%XBCOU=-P**PVJrDl}QfGRDkaW(l{R-3>2J~-WyYoLIk~eO)Le2CnvQS7QFG}uiw&gki+qaSrg!%S_QhO-XS0r^!lFPHyL_> zP82H?6S>|w*J@g_WidDlHAU)(wM{xJINoydw$>v~tul7}5!gH5`Sa{zdZ}fhb<2S$ z;T7SWKrFtNwPtW$+GE5VOusN{w!l>l_E^SBU2H>-ZAwCP+Sa?+LMkxrUZEl7I8`_>u^2ppf zz(%CDg^ZZ`_>lK*wIA}_8?3S>TUd7g(O^@kb>tAl7n+!lbeK7@*=+0EZc^8*x9Vtg zJgP7n;q(v)+`RwuaR05-NIAVVxFL=qcMt1B_P{iTG&wv`TTpfu+r{&wc7xj$Z19fc z7TU8j(S{J6P^3U$x&B=e9}WFJTE;d;So*nu-4Im{NeS|*;BUy|f~NYP9pU5oTSBLa zy=tNBiQD`A5+YlVoW5fe%*4G8C?HBho@3F zzO=7=!iNf(?&#Zg{LV6XNd}tvor?84fA_c*boY8IboIDrS|>sQL5Nz zx+vtfhxQXp{Z!pql3Cf8c>S^Co80<0?}yZ2bysBds*^VX9<7+Im*&hp@Uf!uiH_MnfH_xCM|$Oo8y<%!;bY15qbY!5?c``pt)RUW(4_5Lb3%cY@)+L|`CMR?Jw$DO zu^aaM`IsHg)4rFC)|$+MXW^O@bYCyA){YZ007p}H?)7IA+PyKHM{~^ZX3tuGaeK^W zdt4QnkPoK85f6LL>H|lw?ES2|-Q#BH86d?T%ncARHdoO5=hsaGyTeI-w!|Jm2fCi7-6UR>@9yy1?tj$dTEw?jFWc@j+@>{$N$URU&NhBx zIh_*2YG>Am`=a42&%Rqv3{FAQ>5a(Yl1!6Rdf~8GY(YtpJ?+gu*(;o|S8qv4HTjEg zA>=ZPhrAU`)?+t%Z>wJU{61m$8AOk|+B0ZLUHNM>ccS;!Qo6Eg6QgdDlW(KWFR{YQ z9fp&LJJOQY(gx!LkQzT zo<}Ul?ciKt+KK{%fch-A_;rMBK3}j+E7KMiWcHf<{GGN=yVQRhu&5pjT6-_Sj1)U7 z1YYq>f0zEQS!&-jR0m>D&@9ri8oAd@ zTq>bPZhE9Dbe{;SHpzADMA9U*nB+tN7MrO7^HXs5$LF}7{8F!V9H0{3W9f%Dm$u_) z-AyNrB_|k2S~NY@f<~cNO9eko0!2{Q()bp=&9@y`(Fb1Y23mjyNW2UzT=m;xMV10N zMeL~0pXNF2>fTdSm%0pe$L2!JXFp`V9qZ3%w)wD{l8-t>7Pft0q>=Q1jU*SO6(F`W zO@?T3K>Rb1++rXgQriY|gJ1{IRDp;-=oot>=ss>NIX~(2F6;B^ zoc<@aO1HS^KWCzLItE>q_|7@izh*^zxK1B0X#0FXH}hUU%$iBlF`Rnl)oniXWOmHM z*i^OBffGaxm&6@h(?3YrZ7Z1*vXn$-ZbaN{@?Ts4q zD&Ags2iz@5TMX^&K5l#YN$8RQk4Kys?+P)^j(L`bh<%76zi$oB+45p;=N>76s#?jL zv2WB_3u$WvoQagxRYZr(bAS-yE1&(H6aHJCelXh>qrLy`^|UlrpXKO!$YJCLh#*gidGQ`J2eT zOXjPyz~VKa-Nu}+O0A6yORaLO8gF@Klkbw}{0_<-#`Vu^QiT4TEvOrI*+|$SV#2z2 z3**LSi=Cw^^XA)G!=#94@yw#SVNGLRt$Jf#dE6pY@yLDQ@iuwxY+<~!GZf}Ta*qck ztC;55!je z(w1ocsBHYfG9IggaCmtdM3uqQp0U#nf&HD%-2)5pL9fiP`)?QPGgOaw1hPx~fh%?+ zl%2HJ7s9D-kHjNOdY>!^HN7s;J6GJ%&8iChfq#T6SgOV=OnpoY zMqAs4kNw(zR6ad|)y%=c9%Z6#eUK}R7a(U-{vwssxeRXITw}Ro3GZqGXhvaNH@=fC z`J0;yQ=jX43)u2(ll(ku^PXiE{s70Uv3`Yv+P|J?LpaTtj7y)6MQ>JK9*cd<{oc7v zx3d7ct0MC-Jvk9;;Lvv4L?Sp#bN+oQ>W>$}zS5gUqYoPW+4u1!3A0`6SdEUbe`?9G zKImq`YRg6sa_}dPw{cJOiKz;K+y+%1qBrT8{vxQTuR46kpLp)PHMeq6nSp`Zo-+S2 zGTy>)uW8psD9)uh7qn)qCkBObN|s;F@NJ#3yR3D_gqA|igzuX-*{97H(~-FALV-pemZ#PP1+VmChu&17DZAf==WN;)P=a9`ElM$C#NMGbMLr2>4dQM2%_pJ z;ZBmJW?cNx9{6G@{*nT`*4MBDt@VBscNFu(6-iie%_Ng|F&`SMhgkncTW$?N(XUzS zNhR@d16PyKQhq-X`RTpo?X{q5xOc)bcUA$e)+RM9$Doj3YVjEL@Ty~ou)20nE1GhyeMb0|Sb z!G%nfTwytGr=HF|cfVJ0`_m7dlCr%fZo@x4Y84LQcN=RWdZ}EW6dm^*6MNmk8y(;oQ^eEVTGxH3Z?yr9$RWr5!bklkyzqb*@u ziFvViW`4NY0r1-AZ>N5>arAb;^^*I%Z&S>ZT%Xg*58wJn*>{WF-lRAb(1$r}(qb5& z=jzp5UT*;#ire*|oqs0`QFrF7l%p7vP~K(ZyhTLN{ggjGrxcT#7tvkhmQwuQnGjU>I;L>V?OZ=bx|!?TUd!Rh|Q{9Z9JtiPNsA zcGa?@tUPl~1JXA@^HIJ+w_?b$ZwB&}eKZ>b*pf;pdTAsn%#Wed7nXO;wP%Bxq7-*b zB?*}!_@(UYaoJ~+_2%eLc-+rjzP#yOEq<-R>(5V+{VX^3+m{;gr)NuwvG8fASi{@X zgw38aYLQR8b$evJ6zwRK?!Uy_CoG8gM@>F|$YYghYgeCyw`t#c&|~DbMDgM4*P1Wc z{aF6=9Ol4Y%CYh*_xB#CF*?t-o~9E{{|}%^?_#Z9c-_n0b&jHtze4zJ zpY3$0qj$ikk_+t_J4R=RIaU6prPj}E@x>KtCK*m&n~i|qMjnR`3#?%?&=_}u@r5k4 znaG{R7YuG2hh91wpVxvmG16E~LWr{xz9(5La~b3n=&u?(u64d(+L;DHE>(NqX2va# zH<_;)n2!uH0a^o5=ud@%8zy705(RKycRpaSB$y5KBSTavc>zSVru zDR(i4f;|Oy$o$6MfB4wgcUkE*U>{}Wy!%N|s(v9zDK~g<;<+uZ009ZVONi5jW<%6H zjtSDhhov!#b7s@Xf*y*b$kFbJW6=2+1gkP3uh(LOqC05QzCkfJW^1ozBVpy$FP6YJ zNfG0}2eN85ILebJcn)xjiaTPYc?+u+K^O@Gfk;c~5ff~{H%~YUQj0F!rsyOw-(1vX zBaYS2XIJZexu0-FaUY30^Tbe2fD*m=+UXO*d)l!8R~&7L2joi3m0#r!pMzjn*8xW_ zj)h!_gsw0)iWTf>tlx+ifBSe82?Dg5Gezy#5b?r&8v)!AW6Ru~<5s@V?Y^vjwgooc z&qmA~z^mt`rmn0GO(a^@)pPTRn6B5i-v%T-1kUo|m;4@`FJ{HxN;d3Odm|!o=?!+| z5>nS;b%A1>%|}f9SB+HbPP$^mzr&%%9$A>nH9xF7yb_b{QZ6>D zTQqR?9)B-RV)R?%#ZTHad206Z4BBryng6tCns7%rAmX_z+|MQ~!!r_-(Y)ubitz5Mg*{2@o3lNR zwYB?ynAKw%sV}G9@=&z(I|pYo9M|p*LD$;yhzXR*bpn&e`_VzXHCZiY9lLBxo}WpR z)8anFpxe)V{-X<>NjG$AZFAE0lh$lJI&2aU3W=_WuSadOmvnMp*PgAxtnhxD=Mg$e z?OS;`7jbx7dmeTJ@$epwugXm_i`K|rwfhC^h3#2M*TrHXxpi0Ij*7Of^=8pGA@7=+|rQUb>rBP z(S9i?ZsLs>F)j`eCFjS;X+c!D$?G2BD>ZyoskRxz7iaO1iHk01X43W7saLPRR~Cp{ zBkYZxJ$$&4oNa1z%mpn5@K+uVjUe(Bm|PX&+=YjGt(%j)@0P~(vXiaTben4*o_Sn} z&*%o`Jz|);V6m`dCGeqC8>D%q{)7MEQ+nk78CGLE1z<}Hy3@f5JfA~Nzk-XM`N1AN z{*Lg=&^Sn6Z-n^R_g=!q2;(Wb@Q&Qc{g}qKAVV>re?~+iMts+uf}RqBDeAE?$P>R_ zRfSj3`~{dyyK5e%htgv!8&K+&^;WcKdKLY}s2H*{KjQF?j$9TCqR_@upY3GA@&MSf z@_)f8B|BP1&Gyr@!280kzOT;`x#CX_iRr4~zgfK9DzJ6^RqwH023ExX z1-7VyW&g18sM4lQLYUZsh6`j~iCqdPvYJ^_rOJRa+=iD~Eak-WvI~!&GL|fgE(u3( z8UTn_js8|}$|+Nw_P4p$inUl_mzrIB+li-MK&)$2OAGqZX{8+b&2IE~M%-vecoR+U z6A3pTbdGddhV9ca(Llb_U(}7L=*-kB+#4J){7x!1i9&RpQi2Ku+laY<5Y_--txmjw zYfLZUtL)@mE_t8xrdY2A!ZYf=Ci%X*@gq5KMHgwDylF{5c@9O#2+&?)EP)ZuK-;kVB+-r|eJ?er=-JZw zL3(2iu>ugn=Ds)v6S?f0AEh2~c1B-jlkBnM*$Ztyiu? z9!Y@!SLAgjg`0Jf#+r3}RfqO%raNt36b=MjC>&YBj^E;p=x<$k;Izuy-q+N~ZNg!E zcGp7q=8VwB9j?KK{y54VURDwW@$~|rcF=`q8}CbSI|UYmwmEYlU&kz_*QyN z;?FL%TBrDU*vp;A%~?U3Jm^+pS0B+$prTiAl@&YGrsDS|$09^tm|+!eQ#0Re@FVVt zl~FF@vkvTvrC@pWHlcha2xnmLmh|3uFOLaMQKsI!SA^be7z8BZrpK=#?-l;=#CqDP+3=<3rEs}r>4Tqz zai-v>Zw*ynFxI86M~Gc%I)Vpc0)-ey7=P6)GSJX1$Zg^V!=c7_rWj!9Eb=G_)xrfP z2g4>I2LlZQ18$B*G!}VwH2lhu@ge^SlhR9}c%Z7LsnX`4gFB4qwMXFbdmf)BboJ2Fj5Q=7XDfkq1`vlM10Oc6F zSL6v(QY25yVq|npqA=}ByzO0r@9jU3(V~bULnMm(Mp}`CA8o$VN>IQTxL$T%2mcb_ zevvR05rR{3H{B&i!{3Yyzxjyg=ot%#`e%cJj54W8x6{|}oVF&Kf6POkY3P}TlzyB5 z*=5-bJA(7tlQmWDCHTkW|03165!yhIElt$nRE<~$Zp4rP1@S2@^!1(O zXGV(R52=giZE8_O8ahf+k|}q;G25)D(vBgM^^=T58KG-l3Wys}uT0U#db)oZx8o&+ z#dp}HJxIODK^bi~Rg{sGV}Ft$4M}&> zrghRLCHVENpP4DkN;(q+O5Y6IHkl~YAH|#Co`>#PD0s$b8tX(-G$_g_%85Va#uIC5 zgh;^n(92tlo3V;zUqTwy*@3uP7t)IZa=-`AGe^(2YW*|~Im%KHmvQ+*FTp7PJWGp` zZw7#n&x5Sn_zQj9T}4D>TdyaQAENrWg=#XsfRImy;^o`9zh)^tN_xv%5^l^n;VMR! zXUA(BoAX@i#up$~8Iwop(OrWBsEk4tI^X z8*Lih{xS_2T&{j7dz-oe4czy=j#~86khCrd{i5;*2Tr@43_?4#(b zw3|LmGZmSvRWt}xd_h53VE}V!yYQ^L6XKOcYiXUfDbFEW@Wt9;9K|Z%UaIMKM2kp9p?e!$n(B3}H9~3)orT`;5!{PC$nGWiDjp z$RIeG+&krA=eue1hx;~py69GJ<0l&K?JmU`(@V8{VpC-D6Vu4jR;%@c2B6HBA{xg0 zXI(*Juf~yW3IfKlU+hd z;CfcVc9{yI=f_5Z6GAQP4WX)ydEFV};mw=S8Tc)5`^~E6+!HcjNwTK@1dEeF zo^ZT(;jMI9VoRT#%EJDplN7LFa@4kZevC_g;v5EJ|vSRX*h{R`E zUIbt8{&rG-lsV~G&$By*=gnY>x*9*}?Db~$6bX}2yPs$27f!P9qrjDxg3w2PP4m9W zq479(SUlqhsGAU?eA#uDVcqbU?L!&}(ISPFi#M-?j>(U+B5a9WQ=JF8vUC7{N*;`D z@dB^%aU(4c&V~-}#$0U2i{G14ngr>R2CDGX$=mi{4YI(t?L(eR96X@TZhb4K8lD+T zD94c47{)w;ZTH#2#L#*;{4W!wLT*CS?I<$8J$}iH58#SU;|(o%47_cYfu&qN0h1} z_%k0Xz<;eD3pNDFwm6_|iG^CYSW!R@Jmt&F^Ta(x*kCtBJL!j!A3xi7Wnb_?SC+_| zWkcl7FVEgi#!_GGh<+luEq);lBXvsJe@wA%f~UtnCcrEi_d1ds=cycdkG~3QnEUS? z9RG+teEfXK0{(l_TL_H^(@e_%?c@n)`Ue^E>(iI|M%dE|e(btXS{(yzBjD9jSkl9U zK@N5968>XLmRF%Q+L?lQtrK;|0S@2?_f zmG#e~r`>j-lrSZNx{#0%!+FOhISc1xO|;TswZC-P8pmk^nO>)`ewA8=1Ud(F9rG?spsc#q_#l!TMkG3dPgKWD&f1@7WKbfRk2j)}M7zA>jX`|_TB&McXq5dQoNsA+z3)jk+AyMzb z2}zm)!nRxjV>+#hQ7`ZK7USd2<;l@h6y2yEAP`Ei=7~Yf^Mki$W@a+MNz^1CAFio1YnKk?o$$U=hTY#&^VD>g<>3%V&liz0b4VKd zVues|?fZH!MJuX2Jq*Yzm`9(8k9bjsV3QI!%qYgiz4v~eBOUlE1g9QreGa!{h&|7= z_Xv!D~4gu#A%rPu>06~;5cPJ0%oqxZOB!T`o&4Uk&lK99?&++2H_e{V;P>h5jKvmD zr-TXXan%);+K7Zr10I9|yJj_NBMZwfa{pPQhg{*47DYzr?i>k8bzAKpS8V*NcHbT9Jz^zyP(Mric? z>x(_Y#fgv410UN4G&0De*F+c4?-zz3eT5v!M1<@5@EgYHgL#gpr?o`MP1DU<$yiAX z&HD(s=^4g8Ey3~(UGe=-!`BUXuuU5Y>G!-ZUuqiw9UDL@YAWxgw79EEskudm2bEP- zr2z_@n>d1bhuS&4me9cRp(s@J0`*O*4+@G^DBn8Xl^@Aja`fmd&y9usQvuU-fBvW!2XTt+Kj>`Oeo z;dt5zO3cFzz9kb`zhQS9jDOu7BypkN@bQAl6IF%#cu#J@0-ih%(M`cVRu~@wRz?{Uj{tzB!12#3An!cGPXx z)0O&#QN`7Ma*#B66yT#TVf%bkb@Nwp---ZK_axZGIQ)SHw$$}VB7BR^gM7NzRn(+F zYxcO53|UYQigm{sgMYv6Xct*GE8{?)mQpacD^VMOUby7R8u)QV?O61moTLZBMJy-p z!QL}r_M|yI$2{*;wJ+X-EV(v~a)*X6BzY2hr0%bR-oIA~scXM;7^f8Dd5xAYzE4b$ zaGl}{+Y5q=XiZOHpUmNcqU?MxCfBIhXvh$CP+pk&7G`mYj7Fl#$ioFaeNVf-X66T8 zrrD(Lp0STIlwG{}GA@QHv@VWyxwi)2+#4JlmBhG6=z0BKnYDT@-1z{Xz z1z#jcK=m`lb`iV<8An{m8)vP*a)PK^SQ~^;Ji>w!)3d_!v~oI&g&=)3xw19s@Go%R zI<`eos8Iyq=|$Z%@FD>Y<6u;{<>{?c&$5}IVSdqJC=rJtnFM&smtzg>c=|$~$aL-m z#ap~p;F zjX)@2P;IhAW#GO4z%#opYDoJnLj%>uHs)a0(*VV^kTrsADB*Td-+Eq9C6@AGavprQ zOY=Rn^C7QG(y`=GOQoAZl*qM43hDdFqz&g1yc?nplB6B_3?tFz23-M^SdI&Nx$T z7T9|0zQ4H|!hDoY#KMU*&J4bXBELI96js=ngWq>WV%*9C!ylm+q&N)l30oP+Ej?G$ zWZ(wlh_W=$S{(TMg?ZtlRN0Tu)`gP6T(wrEl=NI+tp4{BW|o$v$!4XCPDQPWJ>vc1 z?Iyj@>kC=F(nO6{llt5hRCU$VY=Uei zp)J1CCy!jHu0cc=BaXUPM9tmvA?5|aNKuCCAxF?QA~;>#Crg>)c)CUSIi%fFhOR`r z0||mGLv&Iq6GqL?7BO5`Ch@Dx%zm-bPG3yVEC2EZaVmu!?`ba+XuGRiXN=X(dai2L z?7WS^j0^cR*S+AbQk_PK?=4sG$|Mi$Bs@qsOyc>`8Jid(mo@XqbDe(DSY6tOrb!>6q&jB863pxvo=&@*8ln=L|(4HE*8D6#ux38K} zrG7t-a8y&_|C*z*uZ|J3PxclmFgAyx#%9lQVCVJcm&~G~?GFTHpRbM{L`M247p;E= z5FBP?5Lpbl;BCH+<)96i^u@RYpl!bg%sFZy>!%84zG&=!$QaNdH}hM5DaF~RwIk0Q zG;M1vn*%gB_6V_GaK@VJ3B zgVkKL%>sd@ee>qcm#!`e7z~D}e>mW}1mp*=>0ZVrNkrALQ4b!z?(@Jx+*U>_W=(_T zM;bKRr_y8}&LrU`)Dw9a@HPVMGqa%4#eUvQAw)6wF$Cj`_bz09O#{IGW`%pI@BP0{ zIG5?0N2!PE6$$LQ3N1ffhiw`RZqaE(6&o-vtTh0{Nuve~I@v05R5p05&9v^b<+hj+ zM7CF>+aLGB#sJ}YN>&$^fEnXp+k_?S#O)*VMzlS zIaNJiSiF}a1wo3aVkBKc8*2u2zb$BnmryN+jz*;9yPahrVe1c-IPTWi`<;(N!-rM6^YSA2m(x(4@^c`E;yV20EvRbYZAUr9A zl?p4BLAWCEy;~z&RhbBzXNH%-kd@C_o0;kSIh zA$}W-vJ##8sI(LGE)LQCw%kp`of9|GoS_%tJIReO3)x=gF|wJo&S0x~*$+hxd>dHu zXVJ?w84j@{P!1l(fGbbiC3?LktD@>UyS!3vYiN&`xlHrvHv^gNU%y|afa?6x-^)f zEL$3;eo|l3z#2^F$KSO@{5#dK|IFB%6s8qPhoXp)2ICG0EG{4bN6=gdUirpQXqG9n z_KhT^{~aFucX(nb5lRy@iVo%Pj4o5aauD-B3xxrEiw~w#P80l9uEr*GAt=ItO-bLYg<4|3D#X~T!|HMxs;)qagPT0jBF$mE_&|rTS^$e70i94|;e8F+ z(hsid*6;`2iz4w1yFI~#EVtGB+a8l*>8C=J;)>Ny)!*VHc&!4aQE2z(-;1Nlo;Ee& zjy%fhq8FHuLz^UU7Zf*~_1?1w39sa4pw(%K)9<$sZEB}gjf$O)+Yit+CYd>_mwQk} z4d4%7o6dc{+%yqlF_z;=dozt$U2=MQu5M@fcshC0j=FL}YV=R}|8yDrq(Et|E^GwP zdv9~IaR9d`68oLzeIEMPx43@0-SE%NlrtsO0}*;IrnscMj4kcu{jkzIRg15ofPlWF zQ0v0pI&8a(Ic+irVLn~^GKA#zm;LvDxWiRO=yBL*b&u#`HPt)>IX|NR#S$3=$~mX$ z|Mdl6I%bE=pZnJ2n71>bq0}I+E5W5%N2tlOPV2u}MwKm1f1I2;Kj@c*^-pb`RQHK^W5pYDKgsd9us{$)sD?`*Upg0(6T%H$`RP$XX? zU{w%=a~3H4THA)B_o4&FKutIiv^|jV)JJ%WE^NU3|IC*o`rmKhVoMWV;rOp1|9`&l ziQZXh^Wh`dll&jr@r6DQQ8P{ODCca`#?U1M85$Zk0_t2)L6&(R^0(=riRWw!YdTM5 zle~BcaiW*R0M^+e)RUsx*a&NwMjgD&I*l1VZTk+4|P+IADz5EyBTh?hHs6~W`u$ALwS(A|J0o;F;8FJnG@Q4Wg8U$|cf4REm ztT*Jv?JU*G!@Ry{og;!#?9jhZyhKK(WMmwSq2ieUdQ0Q4TuHo)q9T(SH~WnqBy zXCrwo%S-Od_a*nGZIN&>m;-9bD@75(?;rso-`g$N?L z{BQ+qJAT94f!lO@Z~CvBr-qPn5H5$-G+r$QqUHep-(wBUof5Zxm>wIP^@(#g1|QJk z&d1#b)$TWmWd*;l`NKin7q(W@m*V%DtLBowASA+Krbw5Oo#OL#aHZxlRJM1Z|CaelbC(v5`pZ~dSjrnD#|*!0EG3d2mH(brZ=l#g z&yqjDwf;joXL4xvQs1TAsMCDUioe_5{2j#q{&~?oY;^EbyAzSC6HBL%D@i~r#;>}3 zG=S?qJ5VVNI9b#=AGnXant3kPNp7BJu!~~-bye@f_Drg8DQBX)Gu2hjnX4mQ&cF8I z4L4E<$mN8zNPQ(d0rrs?DpS(Cu@B29;rM!`+b8D=GQkO5Va? z+ngSyWtRY~t-D9+AZ$Q|kau1LpB_mnx}hm4p&AlQ@|#)G^=(SAfH=zAfA*So%_Qo} zctuCQKG~7Qhz;Pqlg6-i|LV~O$X$u5l8^teRPgPmQdTL3{>E_JQum2RM!oM_=kqn^ z<<6)8-3Y&zpKf){&vM1u8JKVNh!84_P_5@8S)S8IwwPuQe0`d_L8f&y2+V{1g?h{Lb(CT+uO0B>&Hv4tpMdAE+cb`yXupj<)ji z6B<^kVr2Aw-Y^-a|EKwlEI*0T0g#1>t&o_`%r~sR6;$-Gn6`-D=y|kqc|6wQ;kV)~ zSf*@i=e0V4i-=p~dfBw5YWd-+47{PibIH*(0wk-f4Ep0U9PV85XM!=#j9 zTbS%og=^fGGjylX93e1cUgOSB(Dt|OxfmbeKfy0V1m1z|z)hQ%PqX3OfqbK#<8y87 zz-_`K1y%&`>|Iu?tAtv0mYRpgr;2$&l)0NF)Rgk_zB-vpO|WEBYWm#SB0G~)=hcQ_ z&9H#>Vk|$mzrS*{m34|ltM^ebVQZgaJwE|)+j`1*Z2T1(l_*^a|8fXc<1eWqy57wp z39;~uSfp#VlL)E0@~?+@_=}w1U7w+Yl{7RmB7PP4CN!b}%exN87+5C|d^Nf zISxfuo6tbCYr}<{Itmt4k0V=cLBdaMBjo`v0XTigJMVWLjIj^PwGj>GKq~0ha&qJ~F&UN#5_}XP zWOKv|C3J`IK zLy=n{$cg6sD=)+mrV(E`U<##$-zjvW+K92QSi_S#?~U@{07(aMvYGKk6fvT(uDYbT zKSs!}0?k}<=i@?0aNqgO^e{*2A7u@_l(-2Q5<{Q2GBvqkiMW&avR025S_y)d^j~`Z zxI7C90G>}(p6s`tg|Cy7Y3O~88r(;2pURYYGgGMkPD+v3)NapVIqYb$kkCKiW4?6h zDdW)+rkHecBKAh;lS^8@vM>MBZMcA;*M9V8j37xnJyBp%{khVT+Ms81+-wSEZ2-%5 zA{^jsZID8eQ1pXZnzch1d5V>t=zal2#A(af+JL}puM|wyk9we-9Tv9^ZaM?rpQCLJHU_sUC$?zuJ7aD$Tqe^1=VQiv{1 z5=M0hQwlNRyl_v#N=Zt%MdT?KZr*w z$09KgB9q$jWJ(FUIm%I;L>lBJL(J-q;&vLg6+8!Ou^ zuvqA@=gnBRQ$Q(zuNif}zsf-5)X_=_x+57ZS|~=iQ#^ddfHeG~jbcJGM1;`~qvarx zh}RO!WE$I66*yD?nVJrgT}vYUQjA9_%#LP7nH!q~Wlx3{Fs1giJYCt9Se13kt zoR;O}k4ZFj!Qn||NkZ1o6Z4DON0`n;CyaLcWglZ{3`<)B2blojWAuxC6 z0{^c0dw7rUR3#yI{Xs~Pfrefn*X3(>MO*NG_S6Bc((_A?x;UfSurSYj{*9_IBw;H$y6T)2>Es@ZynI12Z`gB4*bE5pZl{PT8fIEiS28P-Vv{bt16Gb zclIW@bmFJMDk-L?`euE@-to3FS-!Xg4=lAf-sv3FBQZeR831_yWT^Eu!r3Gw&K-I) zO7VqEy+;7s|Bf-a+OCO7LLdf6ZF1#b9e5P3V@81{v??A4c=!M+v{{d z54Ld|9~t4!Ju)Xz7EGIRd(B8sAPkgzzR=IV$awnTVIGbunnvwg$nO|R`Y#i}^U zB=Q~-Df^Sa1&!^PBG5dARKB_`^0;Umahcm2XsJ?e6|q;`$CU9U43gM@qNdY`Ls3KF z%X_e-T1>H;dtEHR-jLTBUpY`~(*8V*23~C9e5B-6i@=<4!Bx$wt(!}KG!PK%(< z&km{O8y_n?5Y@dAK@g4Zp068g?Ay`_VX9R9z=trbcQMA?}PuTdt(oNv*wE zg==aRc!C@B>>2zTfw@_a(R6)E$Fcu+h1@F5oHup;ZatPda>M9;a|BK ziz(_4RLs#*sBe6CsX0if8JG*=ZE{EzImCh?g?wWC`uzmx(eim%_EY=lK;0f85$4-- z!o|h}gBNSRW`PIf2v_C`VNV|QJXQ`jGmk+&8}%iB=1UQNO<#$DFHO+@wMlsrOMMjw2WPwlt&C7TXAUk z3Pjz4m!k8eVfNQf6+-w^LkKVNX8lQb#|YoXzq<;!z`~5K?tNe{^t4>A%%_ento;p9 zgTkHpQ#82E^LL)z{oYvnaR>vc6>zOo*vqG3+^cnK+<5Kz8B~XmS>U$0`9_B!lpEy;e z;N7#cQ*TZGu~Gq3s>F_Fr*V0Ntf+po1mOkI|9bk0fDwpZjtBkPq)fV&LAS8*|QxMEM+6lE0_K_kx23Y< zlt=92dJXxlNm0FTJ785fY}n&=7GJw$@n2rD9UG#WB(cr$EF$l>)8%(#TX)zC5>CHcVBy%t3HYK1g#x(s;mHfUlp*-^ zBD>2O?_j$hu{MUj(K*~>^GAB1?KSdibPPG@cS=f8# z^iYibI$l_#EYIR_Ek@E!|LiA}r~?RlYje7O9^&Jg*0ft)*&CM(2Azm<(l>u~KQ*5} ze&H*?lwu^MXvWAhRg$CWMp@Iznrh+? zagno)6I}kB{Dw7K#I;Y2*dqJ*y-2rv9Gy&dGapBiW{pVM)*O5L2HJ{VoNpkva)%T0 zHz22M$XXRvI?uHAckRWH+0s;n>VI?}O5e`9T_|3kS;<6%0b%Qz2Ad$OJR%-&eiOi- z^FH8*m`<3RnNvZwgD<>|dAZXS%MGLnXgW&KG-J4u(!jr!UyId#v_)@pM^*)M>si~<$JXO=n2)24(dqehN2=#9_xm1n~J&+{>Ui~xGt@U87 z9V2Z0h2axa!Fe=62p0mnBd1~68_O*&z6#li+TXWjHEbCCpMZ1LfC=mn6^aD?l3`a@ zgWB~0;*1q>1^C43^-8%8 zhAtxGl*3v93!yfMB>=dbfC2MWWRVRfEkOD?nodNAsOz+*6w;UI8={ z<)vX!`Q9{Iz%B%khUc=1O zw#O7uagYZLTVA$DfB-{LuRJ2HOkXWFoIDTY(X6@U_#V)9>$zc7knTeHF?`^=dY%HF zW#2op;UI^3ky!RcR|&i%O7D{e6tTyL@1Or%*)<&!W@)Vi`s;A|e|(^!;(yckQfPkx zOkwg^h((ScmF*j3N#EDa!HGIq?hRra97iaVJ}m}$#6iIJpM^Tb2P4T0$R+=rWUW&N z+>9jIgow7iK9~kGvJ8$($)Bn1?^8r!tyS+Yx4d?r#+@v;kf$x$o9|0{C@V}CXm7g^ zZx5n+5bT{w%L`S@5vCHP!gT}X&*TZ6-=0Q#cStF+(tO3;OE{hp^z}ImIk#j>LvRu| zBB1l9p!k*{4{_`kqydDn)CZa2$a2FxPy4Ad6TT14-MQm_?qZ*EG6S}k5O74YflB9u zD^lorXQT5=BO-kh#?1nY20+sfUXNXsfp_P9gl2+&-lZMVq#a8bvaTpApQwv7G)GxQ zv&r6Xm*XF#tyCG3Rz)%hnoj^12kuNRU9V4)v;uG=z-`NwEF}1;=t|LfvER z$3)^SSKk}jW5EFMyz{}q@j^YMtqa;_m@VYduW1P1js?_p4Fb#Ip1lG8FoJs);2jTJ zW|be(!x^hd#Q#urb%4NaZXY@IyML7W48l9;&vmIi!*RVC1nR83()xJ!Ucpt+z6j^1 z$6hsvmF$vSuPe_Xr7BmD;MUlD0p-5`a%{&UB2oFK$dG0zy;5SZSkEew@N?-Mn$=e|kPf0YP`3y~QpMw=9@J=S(alrlaIAfE*TkOV*tAti{mQJX%c zKwuXUjQ|xFrbxP4cYl4etK*(~g{&kjl-E(h^9>3n*-N#mp1qjn9)hg5%fg}8i9D|R z>yj2}#NWi;iFA@gh}n?GFV(W9pDFXB&4r)mF)I?vapv^b6mj*G- zFds1(0${?S2~4#9sZNpLhd2#64Is;Uk^NJ=8-1!&J|%;LY9bU`5XtE0S7SHLp^85- zddQxMtIX9%&d-3NP09a@1B|jXl>U>8+Zx5pxB*C zO#b{TN&PE)@Tj@Sd(&mebKrg=5mK07{h!Fno{S|b0~B^B37}y!h#ebvhQbhL#nbSi zA~%k-WuMsCRK#p?uHL?WNj=BM;TDe(r0Fyz9oDq6qLR05Z54A{Z< zkB`G$!UlTzY8>ikd#ed)+1WF9tY`p(ERASPIV7*{3mGIi#@?L#q2(uqV^Uj`RQrj{ z5-78Nf1=>SLHG~M+HTdhN@nD>gXXuI&J39t6K~QB_4v;7!~{s=vh&d2#icvRI4wEn z$s*;b7Ej}B&J*I|(uU>I#K)}+g2$)vcCnb{5_$H%!ZyYlGj-it6G zUumUbnuQyLsSU`LJ2@q8Skg7tao%>&;T|rH;S4|wpRJ6;3suGSP$A~pV~uv|iNs&V z_h1-e9r3uc1^BM!ff{;RLA`_04C_Rn(>=1uV9*~xaGm(Sp53O1a@O&&NAme0`_+x| zN$wcjoduN&y@U(hl49MJl1MH$8n*vcq4Gs8^hbTv`yJu)&3E>Jw_-)b-G=AXe|MB# zqN~HSyGh?ygN03DYs5vxK}GdujrPI(`3riozqiBwK<>5Ul&*N64g;8lj;{@&Xq$ZZ zU)T)TK@q*~Uvg3rD!Q0K9I~39HU+aE?i)9s4ro>#DGR5d#4#JnG}|v|UIrv{$5m>T ztl#i*zO*KE!mrPE$s$j3fcD8!i0=2U&^x)XJTEJjPObGoy>@(i0?+tT;I=nNf%cJ; zT8Qy?^`tVwn1Huy1mvd0R0*!2MuDvzf`ocuExqD8DKSMW!Gxysoz*$}B@*@ncR1&Z z*tOw|^b|VHXJbES?2&qhawT`o*4EZoPD;ZD?A@B48#VD7(X@z)@$n7O2nivDhxc`( zPnw&r;t&!>1*4PS7t;%Ssjav~=N)gj5Vr_IvdqvPjN%EwEb?i%H3kcMZ1ZUf=gj6% z8vQuy_EHE7MSO~$G{zUEWhM8tyRe=U)x|IJLO~ zg3A?jX%#e#-*syF&L~7$PK-W)O(2~>{*}33O7M(roVGELHksd$3Zdabwz&g)rQ>#V zxRHE)IwPet2ghN_lW@POVZ34JhK&*=7Loz+@Qf9t z3(UFgsQQm_B=_|xh2?(e^H1=TYWcK%UadS+UoZ}|tdbIVAS{j@Xt1?>lpTcSgpb{0 z|Ff2GNS}K_PZyo~g|UWxbR%@r+e?js{%H(Bi8in7;d zlHgd075wess)RPtpb!-$63PSv(fRL2=ft8|$ls73W@0LTHlRnfcGV(ycOCM%oQC?-u>lGu zmb@ASk=r%$7dcss3R-|mI7`^cVF&>l)Ek|jT@3R(LcsFEclAK0j>WkvAuORE3a6;8 znKDZdrfs9wSHNVxOZFc+MxE1#7Mk09O|{Mf2gbAE!9D)>!P%ONx)^smkDh%`Q`_~> z6t=?B!%|uMa-=3f{p(2D{yRoc^}ENQ(n2Js)$_Rg8F%;>O@)H%{~}B5R_!kC^v=jG zZc%V(bR>R03m;(H3oW_jE^>QJzp?*0ZJlVaxZ<#< za>(E0pr`7-kL2WjUU5t0@xYB7Ib%m;BSKHg=e^wpL2f6M%Z)OZ+=q zI=}yuy=*_uThDJ3=$WQh>{HbQ-g4YOV7f42li@#z9=kOmV??(m;_uw-p$cGAcn74G z5Li{&$$*^!F#lWJyY6*U@Zm$zrid*KIAkQl7;i#A$?c&#*CNWkmxFtuWSAY|D?~7h z8I~?7-lz_v!?HoQCqU-ifBP=Z&PgFQsq65xDj_b;Ha5Atg**OrY+@p`vy)-fa*m4& z2F#rs=hX63jK7oH(F_ZZ;u8mjrxd1Jr`$eP&N6`WF?LJ`M(eZVTSDWOsqHn^m7PT# z@gIJ&555&y?LF={>&s2smR$C7KUIG#Mxk^c&e08ug{x>?M&BKJ+j&R8R;owJjaYTu((#j`phb?_xe=V)!;=8+ z?oahI8GHd=P^(eK_)^rw)w_AXdWoR9K21D3yPop}$kK!geMjQ&qySBi(y|07v500^ zyr4n8iUU0Aw^jK3uVnk6wlvU z73vy;n}<2E2vi+@WobP;Pw7Gtc_M*X6didV(p1!%-fn9t2u>9;GFf+N4L%c71r1H7 zNd8+rU~RPMyj;SrjmX~%((BoAfA>Oyn<9*Acak(lAV9)n4{AN&(muD%ZcLB;}*{E(IZyg+rU7f>a|lE7(uP60Rs}~qqi!o ztiQbwZe9Efm7n`Bz{4L7e))Y>v`ww};u8k)X9(g3EJ-oNT&#a;17h$5wnq1^0JAZ0BcuB-iK z!M9gfju{Jq9~_ON@!}3>*!&*#zuD(hQdilD(4-GBKdk>a{i8H(k$R#)we`dC08lgE z64;<`__c`Wn5A$$>e3qpYk68mQ~!uMhP8Wpx7#XGUH{vwwxzp;rKuJ8dPocTv@WC& zZprp(|1I_K%zxHkY2~%rNd{W-8w3BQqa6iDye)>bqg-YuSu@J;#pOvmv6eSvy*cN&j1g<srmRZ~%FcXn-JN{nPJL>)_zz#bS{XMbSm}4VYO&#TVGM&-F72&zj z=k>U*uXQ`UorI^q4|2>GviQCEQJ9oeh+7hDZ(sK9D6Q@xd8nC>t`VNQy(kdy4L%Dk zCVxGq6lvMh@8IY-WD3kWNU0QUiI{jGIUdHQlT6Tyknc$PUazeo2gTJPL>5^Qz z`R?5sUExxu`K9R?R!Jtiu3v{R}m7$q9Cq_x~9>KX?K;5=!Dv1 zJu3o-1*sp;@As9}JYsJarGE-FASj!x`SoVKJoq0tIrB|_Q~~Ku5UZe-Y3(`LtD4Taxvwj zDYknZ!2jkSZjIn~2oUE|(N>^%21+ivy{3ynM;7q+4UAE9{m-uzgCkl@@cahyU{r9= zdNloNHV$F=KVZ!OWZ9NzlEs0Ta3_yau&2GTD?L%6(M6nQMXY?U!<3;tA=ue<@Xpiw z6?#jXNs@^P)C9pfHZxOO)ygVa>fO7iNZq`FYik6qKP`aFmb^t2k8tWJd#l0chTn0q zsn8Zuw?rOKG%lzhr$Eooagb#~xtzTfZ~YOJ0f%bK`}o-GMDhW04)dMR^v?LDo}TPQ zi@+|Zq_&@EA-0iafuMCrVETtZ%3Qw@Ehe>#n`7&#LxX-ERUUviCaA7_pe{}gz-Dzn zLr4K1a@J&MyPjclX7j-=JIQJY!ZGxb-HW@@XnlwxbFN9ZGA^fCcRT4{JmulA{5niF(=h@mqa3)U z>YeSMFsKKtS_il>eOJI)G@1B6@ev5LPmUNiCxDzw``Q1Br`j1K$vxOx7N6K7DNwC^ zY(~~%72*8o7DT9dGzqftHko5DflW{y54^$uqEnV({aF1lx{n4mmTd!t68mqIK(>81 zwL{P1EEGZWB(aKraSmUc;VK`0h#^wG`0q!1AZb|%;aI#pr^7(8-^$KY2zB~w7;nCG zl(s{vA@h9ODaU7S_u=6r0W82fUi*oEKdm%uU7N&_>P-%}KSgcM$(mtKMTN7pa(Q7O zH8rVNSXh$eS?19)vUkz2FrtR{g@;AO$f>--pvwh1h-1=!;!(kM1Y_<$7}d2H{955H zCe=iYm#m|BIE5K~Bj%VrN_}^r^izTvR}8_?Srh$kXPik+#?ftGh`}_uw@$5@*vfT< zAbY*UmG@7&Wat*C{)CsE_y&y6klbA|F1hb{A>&J&>nUKbh83RwMB^~SI-pK40!Ai zr?x=vKZE7~Sr=x!wpN_%V{Q)d$1sLe%`vWS^cuIUm^KMv+uTtl#^2}Z(UW7r6!mno+}HRcd6XYLx?jv<}chi7Q>{x|jY}v5P-@W>v>9m(4 zdgrm_D)?d6 zA=C)oVC>9!y(tVTsnf8ts^3X)Em?Yxk?Soo!BC0NA#M^5@11rY`1&cK`2Q_Ddp3ai z`H{M@c#>!kP~ComyWKF0+5X_5atAxiLqy!w`me`9C-lULed>+s?MuG>9lRs4>-#n?#= z7=dpWii!5sXWb)2a?*baJMU1kCSxePb*|2&&M9$6fpWb)aFcGuXOfwd$u5=$XBu@u zmO4(lD6BfL9nn3ol)By?XMHGYOTZsR z9<%Ew5j|o&CBI0hY&;I9HZiA;x{{KdGz4!29}gFwJXG$1Lv4Gf#SRk{KnTQY4mYz_ zm_*wno1V~stpT#24WOCFXqB?!4)RNlr#@ZI$5Hn`5=fHZ7uc|CE2?=pt7h2tq&#k+ z$Q$+H4S69Rwz2%7=M`dpH{INdWKWm@!w3n9$DQnS1RL9P_^DzboH3l_-L?_Ia71Tp zrY#ByZrCVGA4x+Ch7>+t;V{l6Hnwc*(Icp^2wKMlF{C$qtoKe7OQyzJ^X^gN0XbB2 zGlbsaEsA_58CHwg<0ER^AkEEf5^H%{A8DG~#qjRbNOPRCW@-clmsvv;FA*FV&l|1? z2O+unM2VwOXN;c)VWTjm?&FAN%)sB}rqH_QWWng$f$gH?PaOt2jwW*B_`bI`mxbe6 zm$2Mo5-D#pHF(}$F*VFkTZ|?8dC4}5vE{<0R0kxzXB;tpMjLj<7gXOCwog56B%2ji zFW1(!Vti#*U=xVzuR=5k@NzV*m4d7o=^*wrPmMjv<8nVAov+u9ZJr=N>raWsQ_ea* zxS^7`^%?uk)bL`6@{=9=ywCX^VI%895gv4CANIQ(`?Gks{6!i+#zIo4fcp1U8$SXF zvI3olFZW{eH9y^k^(W^B>T3>Y>(_xpn%h!OnIrj3^1!?i>9|U`Du%d5MDNAz*x?LH zUepCw=W*$Pxkkgs&UzCjjKz=s{soGjODaBq)OwI(-LL`@!eVL?f2WcI@7a*IWCG5< zjIZ_sE}UBtwYDr#z#+R)ARPP683hiAsN2JsCVyj4&fwC9-Cr_zBti83ztcJPK*){ zNF!)PT*rQQ&dc9v63f$hYnrTirw4eHVJhsba1*HP2XYlWrMKSH2*QfwL3A2*Czm(z zqt?{sQTotvOf>Xzz~(8rIDcp-H+61Vl=NB#-kREJngLwZXu324L{(M z!cx28dk5y9BE2?Foqf1(DPE`dhl)h^^iaRphr1|@aS8g({NO#65Tu}w#*!SY^|8%1 zBcYvbuZb2s);n`|yO&{2CM8V^`MtI==ffr%pU^YlY0 zt6#3Yu3gVjW^@wLCuK-DxZ5SfgcNR-eC~!<^X5whGA*U~nwK4#sgF$)xSP(uTS6$! zn>IKIIQ0~nB+UGjl$9C%AQJsNa5NTiIXPLHp35ZfYU-Dm0NLmzXx|2A|5S9H&g_*L zTP^L8B5ZOpJtSg%dWlmSBg(`1P|dU6$m8_XmsDN+2EqFdVRX2do_iwxc-*e6jg5hn z>#@;jjUDIOJUkXB&cB&a4kboO&euQ6TXjEDuU&iP1Cg@GOHle_^?F4T{h59Tln1RJ zuMTLFy(-cY0-<>4wg+8<%AR6{D>zG*)8_P{j`dc34FDFd7}IkOhxH!Lkj0Zwi2y3f{G++V}006!CpPXv&{%uzm1pycqaJZT;W=%jD^ z7RrP6)jKMvj}ppNgso&Z^qz{S*NCOE%Kvpp;Fr&`RL&2#xQhzb!0Z4s)ZTNtW(1E^g zGgF6886e`*dd0Qa?nFYH_`qfu1TbQ^0~n5MZe@F2&vBmJVEiKIuRjQ^dUetPyh!wf zEkpCfIR{M^QwoKlLrM)%_yJrh0d|yrz5*bCv4IHGxl$2mQvvP}Z^EvmZg&{`W{M{z zEf9Y9)#+{{;6^*?H;rs|9oZCY2fcPR8QGge{E?rNty`xdd|hDO5VLrm$&}oP>tMxu zXqc6Lg!?LHQ0VzH%~%x%WNgVBH5Q-NA~gU2OE_r>%nr&^w5T?A+IKa-F1wlls7)8 zi`f^;ZtuyX-TQiUrzMSe&*xsV0{htIB}gtO;iM#DYX3CR*W%ULw*Dn{?w?+SwaIWh zwXxq5Kl>>%Kbt$@`^g$YDu<r@@Z+ zrMrWs=t4C)9uIfobd|2lvu2N+6QY414o3z2 z`$snO=bk0siI<~#L_Akf%c2=lgFKi5nS|YG8{$pfi@Ops(+=EPrAIOSUT+37eO=5J zIq$?@%w);_A>z@N-FV*lCbJRXYE5gTj~gq5#p!y$a0# z1Sl(!dW7fWsQmTn4M+fn72%!mv2)SJJxLyA&X2m>ydAt&Ntw1pN<2~l*6*rm+SX=s z(PUJVcz3idkMSn#e`x(BC_2|g?qZ8% zGhK*Gwf~dUMd{cR8nkBMCjl7TX*M!c81-T$j8-86dkUcEVt|2%CTaw_C^HO-QJ5X| z`-wO>>(d@r4CF=zAZmx{=pZdTS=UhPgw%=jBI|5kAM}WC)ZG?44QzY`y(v+sI?W580KT8}Me+v;jRyKF5)wtrwNbtkzOKCFTmNHGBA( z!X!L0S!UwX`S|yv`NZp9t7(o4N1mG;o?qxCbY#yiZ^k&pY?Ry@-McHrypO=?9GB+P z(TQb5(k+_opo3>%Rp% z;ePYgUDP&uS4?GCLBv#N@b272%43@zHP0$->s9xyTm}no5uFfg@0f%~;y6UoA-f*t zYx@VD&}8+uhmLDvKax6O?}x;1DL2iVu&YlHk5ggPODmRK4pJJw-7&HCji>dx(k_es ztpzKCijTZ&X?_abi@Dpusw|3p1J$*-wI(i^>MMGwE8>#+$`sZF#AbW-d!67BrURTI zLwZmI^55*HwtT@VW-M2RY4PpS$kAs32y@vxC*m1ByHBIt(a`Ff+$oLcm`9$S^TA)( zD2X31@WcIdo7bJCFl=6AgqOVp{hh~6&~?IxF@MsPb}r1<`R-yJjGsHqHNPFZzpjqd z2S$Koew27P@tK%T4#Cgp*~JJ+)3$pD`z77gh+N^9wQO&cY~V@+SA=i)2?&Wae$q)W zMtB+w9#P+lgcdo%Se9noOVW2|POf5(ybOIXzaA0buI%b0Iq3px0C?h2yGI1DwOUI6 zV9_S3REFiNQ6;?Y9KVOZJ%4hJ{Fe}M#t*R~rqFvd!Upyh`!6arxqvanp0kc>$8xjI zx*;mpk8c%8^JW0c@se?dG|k|t?KbJTNhec$yf&2hYfpC<{WE^7IL$F|oyPB--i}z$ zj9i;0bK9S*Hn;fr35tS10y2&<-lxvpXOg;S-^^#nB#`1Wpk_>UV|Ws4i0$gSC9JV# zh?(n02*ejcz%#*wwSJb|hoxYzs;W`L( zN&Rk7K;LuqHpOXmXYJeqXy|Zt5H!>JdIiPZDW3B!x9Ig~+ppW{0ReiA%Z0JXeCjXq zP%XwQ+r17b)7d9BdqUriR5>6c;BIm9GZ$JJvNvZb=$|rKjVx>KB%ZJmaoyWKU&l}7 zw`Ap5d~30__5&#Uy#r8QDaOV3dB+Zb??H(@kHmf(Vv7ZXs*ZFpQOERjqT)aIz4cT{ zeIA!go%@`pTl2|Ru-R|Jfx7{T#~k`AWTomKn{kyTe2^y!R3z8y$y0@W#E17yf(Cd8 zUU99m<=$_|6+2&O5n{oy62)&^1@GSDqYGrV$HrK#T#q??&8x6|Q480^0AEoKQI)M+1CuD;{W8pG@P4A*?Hh_@E>E^@ z-jW_#zZ)|#hqNb%TynodPXBwt#pKtH7hY3k_p>kFd>`+>2X>{ao1ex<<-Hdu&w(TS z$fOJYUXG4@;n=!-GVOBr!+~Pyl=eFMvbTA)>${-$HWur&_X|sXuJ;H0@9$-jn{V%x zn+UG(jKh7A%DS5(1Xh+Li-Yu@mf{=cs%nu}Dcf3)idTyX=ea#UdT}A$c6Vq5V|MGwx^j*Dle_owT1ZtDb# zUe=zi--7l5VC-zrJCdIzD?xT54D;qxNkm%;h$ByrzkwGdPrdJ)_6X z%K%_Ztkkp~|1y++f#BT{Uo>BN=(JQYdi<87Rv-A8wEiU5j`nwr?BT6R_R+8ObLD_< z#Gfqb6|JOdFz_-+_kndm3vuEv>mS6Um3@qmwCvD~J(bHFR@5CTr?RaogY_8>%K28;4^lnnX^O0BtqSjEl_(=^dpxJw`9DH2_0% zzFNFbuNOkWK#>H42@t&B(a_VDzy<~Ymb-8R(7IXk1+8x$%Iu_@SCV9*8NYgi~V z!qDZpPz#-G5aQ{dXec63#JvnkEr0aUNK2$9fDD$$AF14rGeiHVk87E^PgzFV3Kc=x z9G40=D&vxdL00ZlUK1xoTMHAWI?yZiI<;&px=yX+g)*TsVTItw2T%dLOcOdlBD2Xb zJqU6L!$Ox;fe7Q_uV9*~D5=!Zgj zys^FD3#EuCNkt3qYIePlGF>1~qVJ(4HJ})J$c_J?9U!x+mj_KfWKxV+N7Y6B7Zz)R z4D^w?06ZM}Q1FTY`e$GCM*o4Y*H+5{TO?DsndZW|%J#&kid+6!;bLPv^-S*=F9Osf zu)Qa|F>kqVi%@&fBwy+Ml<{!jL-HC)`o2xd{7gB^ zV!-^Ts{LRuBYGfuzlXes-40}WK_e*Ckf50Qc9V28by!l_LzYM1L-(+HfUM+gV(hL6 zc*hGS7L|PJ#bWu7TIYYA_(D_IY9BG7Fn1ajUAp8m(t)KkN~gS?8X zCZtNLe2SkR+4{x3qkurnaY+gDP4ezz8K^dUdzm{sJIOe;H;D_G7-6RIPB^x<+YG5| zJhFOv?tHgeuKu@LXU{_K7L@ilwe(XAP;Vk9rz|gI2+{upGiNJ`yi^AIQ?+2g6Lb-C zfJenR!mXIrK0$NJ&auQk9m=*x;PBj=EqfW;2;nLr>yq@@9ljA@>mo5``9}bRElq{5 z|5-R0%Hw9?pQt%SC@Km1yIYWDRZvt?&vij5l2xzf6FZMT%z^$DNPGcHgg-$__qdf1 z$PHJa*u4lWxkYTwfbyb?RP0Z)9?HgH{2{e77H_m@E|tWvur zKmI5O!g^z#e~ZD3s2<}wjy8lc_P$V+*2~&%U}Ke4dCSZF#-SQM(BB`MkYd7iX#65J z87ES7huZDxZaJm5N4|%o?6-E3A*S_8F({V1r~xpx`2#&4+Nr8(RPwOFe#Nd|{#}YH zL%DC5C0%_<+v(diUeX!Kc+K{*yvMgS^H&VV4DleQPSk3`!itjAR3e20zWY?^BzP-a z-L~u0t%^}L^!5miE_eHcqRNU@?Rb~4$ z&s<&dQ>dcUS10RJ3@HDObwL57^_M@2vPx-9Pro3(iRGV%^}p`k>2p9%H}jdkBR0-F zn~!MSnvN&NTozTjp;kf5@i9>A_57~-{_RPmw1tLKXVAI47DBi|i@-85j(=*WXyPm$ zl(?bCf{=!vlwXKqk^HO;aRX8cks=;)WmT5>YYv-}TpXp$>HOSN=bjXzBhM)bw41j1!_hz|uNU*7UdxOAPZ< zQFDlmRhnjRyMDlo2KC!BM|4AfOk?B4FvUJ8#lvq~lS9P$`S~GWt7joOm9@lLfM#CV z-m_j8`RzICbE{&dPd+w3W(n8xFrb1G|p;7k<9|-fz$VjP)}J-(S+bv`bd>JZRB3$w*6{Uo3aM zf4)UL06BchSpm~41N!7OeYs%fPnWuSlf>(59&Vqm(|a~r38(b{OQiAW35cz{%0y{U zx#|H(_xpxyjk@mQ&oE#7Bc#%zO^~Z0Yuh9cP!u=j%L@x{Ic7el6hsn#i8Nrm!RDMz znJGh41Vu9YPHCLbs>+}DZOBIEzjwBR4$-jyPALzENI-+LVljO{x$b^-gOAlKOQu@- zUnj)=YLS-8FFY_i{m%EV^8uq8dVYQ)z*TuFps!gY#Z(X7n)V7`Q=_-JTe?%3&-IbL z+T}|Ppw0y(^BH)`A>{Fa{#wiCAi(7z|&IxImu1bi%k9C{zMt8+xW+C=8LZMCXs{p1?z>u6q}E^~ zWU<&qz2@2WzL(QnI#+suew1=ahkaq57V=w}Xn==s(o6J_4pfm?)|Td8tiHA=+_vbk z7VGWh@V9YJxpPP-(W?@TL3&KNKjSK#aDT68hghQi-Ege;=1ea zxd9ExL*%f9trgZyWt4I}Y>6{-^L^mBZl?_f0|%m*$U?)L`DVK997T_VpP&7dgq;?E zT#q5sLs8Oz=5Vy;Q>;8+BX~~VE}U`6cXJ+A0j|g{2UloBV83eO^&U(W`hjBUYs7q8 zC1gtOaK%5+F_I zLX89D;&cw5ff)QR1*Yz$0{WsP4tmoa7xU7NR>~Q!76d=`nE)PnwT|(GCl{mxF-x;ngXBHlRZ}y~ zO`D*Qk=cmd>9S8tKZj;K?}ddo4nn8P+3OVXE@kh15u00(TSk^_CS$0L!kZ8GxqcYX zMg3M}=~9^>g_WG}mjwN3afDmGd%+u@fQLhs?kKvqjgR9mxnx}3IV6uL$4L9t!)eXR znvS2tALtlh9Vxtf7NxEB3@>3K_9KCUIfWh6L`9_pMqNuvMH;!d;JrV8RUf9TDE|_# z#~*BAX-)Hte^HQ1f-5sa9v}dRA-;~;-L%T13Atr_4*D{e)eyTH3;i1+XSs6md@I)l z%&N@A6+uE^z(g4QTI6%U{rBJ+CtcIKy*okG&!=;yjlcL9^2b$@wAUmX713a#l{bR! zuY^LQ0|kCF+%JgES3K$6?~dEmAheAtvpMeTSyj*719E>BkB>Kb)6Is?f2uIQL}FdYoPM-$*x zw;q8{;pqNlCW!X7F1;+wauyI^$IRL+)v$ja2b)00iK3X?ghWl^)?b+Wo z2-HG^!ukLxJMOdnW6CbI;l7Dh-a5wUsVxadMqLp4?Sfh0xP!OSzR`DEC(|W=^ltd| zm7So=I+31!MpqY4ip%m3RnSjoEN#8aj_Anga`$Ocpru?aklmT~Bqhqnag{8YLNsQ6 zrBRKAZ;ii%XdpzpEX~rM*{D_s1xqm!{ay7GUBG*oZvAnaeGvO*Ys*RvhUIG|@< zEEv8t1E^{|xjV-`#YT79mBdvu!4e1h4UBXrzs|-?bTB02*5d+VsPqJ^G|FE|%WftC zl>tfT@3~zm;<ol9njh@cn}#NA)Lmtx z?3}wi(Ob+cdI;L01F4avXp<>Og28Zn7{KYs+EcF<)>G|E)GUpgVyniBWR%$Mt$cBO zP8D+ZIX@zQY8mhp__Nx$t}*BYkFpC6n@DcCs=RJlJ*>h3XrgIXwV{L(_z#o9)^hqF zeVj8t3M~snJPt^xBRl~COvSgf{JJ~V$b2xG&bsdVd{#q7(=`O6J)RRFe%CJb7ZjAeY4hs=N(#{MNoGC?w%8?p9LIVD#g(< zX&ASZc=UuHJHX`fTfY;B&ZeeG&|xa>yMmR+5Cd(^!RKO+i|2Qge71|SaaZ0DIj2L9 z*V0$F`EmC!9=i?l3JJQFug!LS)y$2 z>NdFV7Y){uVOJ#FEUJ_lf5#Zyg{1dDd!n}|3a}9n5O9cyLXM7(c9tpL=j`>9Fm)!smArU7TfDs4{K+iny#Q#TQ@d}>mCqfzf+1l+YjNMBp|^?8Z8 zd!JN-H7SMU)j0+71mJ^9Umg+?LMJFVgQJdB=kM?Tw8_!!_Ud7}9$wAw|6LMR{Egj1Tk(!8 zD>i6!22mM@BKt$m4PIGqanuWD(y1%-*O8V|%@ug7EKhb(J+(|4#(&&|=X;au4T8E# z!S}-vPni8;81EBnJO)FC}D1_3t_`r_dD>~}=c zEX}!z)=7KhRxpA9mYbx4u>5iZT`N9Fyw;Ka;kV@F?O~&1iNzKEnm+WXg46HNaa(Fc@6R` zv4~r9vG|mj?VV(u1lVFO%T%ZzYpuTrlmI2Hm1JY#eJ{pda{xVg**{-P50{3-F$EV8 z2X$3+0Ct|h>hAMo!=51-4Jl7R;Swn&B?H0DE(N*F^7{SqX_IuRZyh7I(dDohG* zha)`W0pEhZCbsv^mh3ACuH$ zq2G3tx#Xp3NWJ)3&@FwelAuQ{>bTV134k=y7LZEu`~u#H*M@SjIR4SN0f6paJH@oW zQiVvBHiMgvCNc-)WcM?M1er_R%5x9svD0};0F8E*8!UQnppz|9ysT6Mbh2}S9O)>p z`E6(^oko~x51?GeQ)y;r@(b;Itk?QDMH9)K_A6wTqPK>(fD*giz5u5Y88sU^qi<~8 z8A|T;)01L-Hm~lie|6~SGCg>l^g+L8%?R|>p9w2P0=&+DFW%c0ZJk2L+#kRKXmZ=u z9i`d3&s`>ymP8L9L-licAXC}xRVBhQ8&u2VVU8Nb!*8NUELWT3iqF8Rd;$xHr` zMv4LE`*N)mJ~TMfO=R5u6wMB1K=!zH+=PUU4)GPUvrE z#(At0mMb(9Az9Ku`Sp5O<&B?(OL4IYdE^xd1Qcw8Hn`GZ6ZRGO+&3kjpCd)y z>hhN{q)F$f4+YU-;X*0=T+&Kxn@{%QE0wFunad8O!WM3lH+$zVz#y*>7JGFi6|Ur44fO!? zOs<<0$$Xzbg(0GW23#pk8j%VL#r4)5rAd9>kLa_*U#fJeoaE1ul3Hwj#`Hv3>fznK zcPns+U=uP3LqW+kD7ecQ^nLdCjrpZS?E7Yp75PPyInOZStKwfQHAQ>CA+g{udI0Sg z;8hJ}ieTK;1x6AfzCF}okBz%`hgHq?_G~|)nfAKB+B{x~1Zw(7xyO`uxd>} zkbE=GimXcd=EGE7))xY$DH0ym>``9!Ea6HJE315-31=RoY)(#Vh$7(j>{DV`>o_$J z=+*wPm{?Hi=Jjw1hJcV)_e!v~_&N1&Gx;eAptR7a8P)Q|_81VkULhe(aZ13ZG7|b* z{@E5;1c)Uz#S|*!=q5Bp-cfuSQ7r|lwwtMG38-Z%oa+gNLv43iA^V9#wMNt>x>j)n zU#rxCDRVk}j#QpeU&Oys)U#;L=8cJhzCs!zZeKMRi+*T&wK?2(JK>4|>^w4tWLKt> zvag{*K{mXYbiBM(265S^1mdMGoS$2$txCp;;dNCOgVY#0(tQtCc7m-10>gSpvirS6 zI5^ZugLnb&Z9F~FDe+-EA|fkLJtdK{%j3d;@M7Ga*Zt=Fh#qscjyGm97YY*{hoM+l zSl<@)P#JT_#ihP?#s5~Uf3rCZ_>WRyM_T$g%GvUgjRcvj{NBoq(c4W1!rQ|F-;yUI zX(Ix)Y%+DZ$b9(|=hnk#$$Tn|iO?4}h*7?+p@bq_T$;JZiaO$@z-Uu`)=w6|h6DGy}$tV2p9%MHuMDW761S7A72@hgS`wwOdn>f0#hzO{oYdIgVb;Taw{ooioi^o zw(%N*mCQOSrqvsp4-B6DG^kl_w&dHb9yo9?v7atkGE`XjaX0YOI@=DI?@eZC_08jV z#Yf?y>n7f5JNrK$I*@2~OInz3=CRy3&t$Xvy8rO$9pUJD<5l2-4!}>u<2+j zom020^lE%3VQV|wNbO2_;@iZ#iMrhE zO%DMVx=EYYsCHU({N;;0^0TCR$$ypD<<|`3&3Kcsg2B)|R^EAW%7)wLol{jEK{&Ca zh#`Hl?xf8+3>{p5X^267%-=n-6#fD)_ClnJAGn{oD(3h}%6?Df% zu7{qlUn8@$LO29`&7erzTaM6E5BNN*0X;nwVpJo zzaq*;v1&2%Ys;yFdWLG1ypVA7*U=6Xm;WUf%Fo z?j`{%jHl5gp;whwroBfV<>$Y2?dR%3=4IpV_jvKvxXU6fD|W#=^m;;h9d%Srk1VE}Ac1j#{D1$3)o?4Yj zyg1&%6E`Xkyw18_x{USfB0(l<|IX09T+y!rC7Lmv~HgVyHSrcg7UC=A;u%Gq?)fMd%LZ zI^dYNv0=J+S}5pwfM7M47MX-RY~I>=$Yr{PQzGGwC3Bs!l8&?lSvWSlw7+JB8oDCb z)_7>@jbqo(W-n*15UfIe-EXWOyUvLS%{081(2@WLR@7m1hFC##3@|W%cvYQ;cR@Wu z=y=%4c2iUo?A0Vr`$@tlqcdZvh(l(zLm2MQA8&MkZ+MrZ|f>ibAo8H%*dI`Pi7q1=6eg&(F#U_o<@^ zWU|Aw(N!q#PYKo6e25;l88<1CV;=5>f#=5okq3X!M{PPooUcv#os1kOt zm6OZGesSCa|FzQPkXR{#5QmwU5EAV*SBF0yf#Cuk!qtwKzLhH>6vjtYAS{6&Vnqc?K*?V+3RFIIt=rfHxt1N z+@{*jy7|t_gK!|+i#v*ulSnr|+2mYMs{>mN;;CngqjTQCk591`HH~7dOatOs)I`jC zj%g_$7il^roLT>jDsHZZK@+9^$pP*jsVikLcJP15!^6?;5WXp$QUr4A_t*wjz*-*| zdo0q8OEKYgZa+e6jq00LF*wB8E2pO;*I9nI%+LpNrmy2@`mKptZ)@3@0{(jgq@$ya zT=$$gA4fN2soT-Ako=ab^)o!6#ECJm&n`tvKOBti4BT1H-5hll;N7ZvnZbA9sFTwb z^@jk`H(YaLzA^Qj4;q4!3l>GAD(DX4a>Pv=r?UZFurv0q8o8oaodJ3~SU&M0FH?u< z&WXsYR%L1Zlj4pD4`JkRB8%8zN^ zd~*}}Q&J@eb)~6R*S;ofqWk)Iy9hUDVF=T=1@-J(R^DB3jV*bQuDVOVGwaotzb!U< zs=lh#SPLuNAUs|_7h1~{eHmhN5~8PH&5&}xpZtskE;l4R(_bKy9~4j_9y8Ws>)u5D zGPfAH0I7H}lC^=KXC)SMu$fxlKy+(x$BVFB02G=$XLgpyggCr+u5-H=2B`}aY1jmn z3CuC_!Q^6}5K^(+QSwd`CHh@nBzQj`R@w-z6Splx5!)Nn{ll*z7{(#>%D<}3^<4oM z!2W45N$Snsq=h;VKh|gjrIa@hh+px|Uu8`@}*8I-?c7IxTw1CsK6E1fBcO+8;D zyY6kheZ*eC7jWqdFz9NU6Fn=wq{+zs);;5upRPsVkVl}BmnZh?6k5B2M$_qu=gN}2 zaYP+8uu-kw9e}ASZ4gfDLBxH#Ldx?w=H>W+xJe;^pjIlRqJt2upa z_AZ`e{B2&E4%S^i-8`+`udTIrtY1HGH%>Lb5i(=Bdf)6Yv!alGv70Sx`LI&-VP*Aw z?YqQZSf`KoGLtzCzpWdvR9+=!N%zA>C*n_zkH;D=N1tQuEsU?;B3w~cLCPxN+Xo|s z6YdqC7t5F4X0DG`JG4^4?29F}mba>vrcE#0+0VvI*Ok`pWNL-Ic~;Tflajp&!=Ulo zM`9ghWQcgGyc{q_m~ACmf7 zES9XrS>5@)rUJgcUIpBWkFS-s8E|0ckxZ-^yrW2DzK<^$UTmgbWEPm;qZ=%yMc2E0eexk3?kl{(~UgvaV?y%;m%ns~NldK$G3(EpsICJ(y zUoF>y=UppT!HHX17SDO(mbv`n&9+ZT7TQY)`JVM5Nq?R@i~-=o9B5au*;-+lOdu^}Pe zlk~`ot{`)e5AdahL_$~NJyN8hmOa<$wGL$EfmNB^q+vE{p&7<&ybn5_SPnk3sV=DB zAA0XO#lC`d+-;10Y zFLbxOpf1JJ`;>`jIgA_>!>qHSXo0b_IDDP}9~VZAycX9KHim@Rm*MxCWOVu^{Q2G1 z1#^}tKvKzx>Dk>YRJ2%dHf?@yTCU^1;U%wJdY^p=Ag@|f$UbJS*BdXm+p*Z0%w@81 zr<-#S3&oqIuXiuwZo@1Kq4@Z;P?F^=yldKWDS8zGs$BQ_wJ%-)YiGZCam8MKR4g^3 z;qlpvj=XYF6V^_TQ~J<6<*BcsDiv|qBz^X3ZjTm9&d)YldR&xw@jFn}T)uRFq{TsGrj;F^^M}?EPxd5R zwVfv$kLhm@mKK)&##>c-!__o=PEC6q*p}!v=nF(TPFw#ssBu-HIeh5Na^2^nmOlvT zZ+V}D*%kfzi?j9RfYFx@g?ugG8{10OyBi#Ye#o!jSpos4y;8! zX+z^)^@|=%yLHOKj<(lehc#Id-VtcC`}FH}+wa*%^4tCraa|7eN1Ss>Tr3^k(yZyn zObJ~l`dXU~zy;}Z*OsJqqefw^AGpqit|LGR8`#VG{$)0epn7AutCd7=^}61e-)YsW z@**1b=8J9jWyeyg#x38wj2hF9*%v*lM-}T?a9X*U-y&Aj&k}xZXXn*p*LjL8ei5Gt zH-?gSG@UQT3H)>k5OA~%|e=WAJ z4}K$R-UY605!`Ixw2eE_E=Z+lw~A9i{3nxcu30R%o0+&TB+wzl4rll$=&$AL4Sq+<_6x9Av=jip~JbcuRGc6MBZl!6$SLc4q^_)N>_=9WO zDO)|~pqDaXD775zCy`+7wifCFzjDf=8Z64cp9k3jGsXXt&Zk;f6X?U_O#OM3YN~Q1wP9 z##)IF%cL(yLffyP1lRB_M3J(G(MUtbw?5krrEOSe8gM_sUbd=cEwE!N_Rrrm(E<-4 z_6as)jc5T?z2yIM=yMbaT3-9+y}JS%PgVEWPkF}*9wyIft`u)byGfRI`_bSD`_66i zFV@_DBi$&YqeVAl=P^Yw4|fkg32joU21#OCYpM;an~* zZq`cCXh~u}fBYQ1wVu(P3qyaE6} zpu)xKQ1fp3d&8*(qIjO*3r_v(m>G&s{9SKe4N=DN2pQ4q&XmP@lG~vx+^~iC>xG@V zr%tw**$Q9Nau9mZi26`s642FS;nRx8DvZu^wyWJ9k_6g@LT3BGyQ55E@qvrMN*yEZ|cuZ?_ys!>adE+thRoj*)UswV5XJ#KKX$mWJDNR zzX31k+tyH^uU-}5D0%yT;rE7VxnJ0bh(QJ?b2qIZyE8*+{91{_l5$%Yul5{-2-8W@ zD885OILDd{=pKGUeg{2HIL~Pb@LCLgQUBSD!8(~WSgBxG>vtqe?92S`Yu})0_9n&p zrA<%D^+vaJs02~dk8&Xn>*-6u$nHj1$iJNy{|Cp(pXunI|ct2*`gu88B1&z)s z&{(x9aXR2t?tYz?t>1FPTrYCc zQ@OibCvHR0Ow;+zvE$l&H_ceTS(>84>%;cPf|`|9GJEft7i<2nF3ADCu|;CTdD~S6 zE!2xE!na}i*WsUeN55Gu7& zW4%4IyUx@M=|J>Hqt3r>C$0F*-%Izmgt^N@{EQrpqmOz6zW%O+zk2oWeP*@P#twZ9 z{hot@*Qp6$wKp4yE9|fyW0e_M6>;E~Gx+v!|Hzx{qs&4HNZtJQkOr{YNnasyR@^KZ zGu{?a>txR${DG>%E9V_|_GtN4N3A&&3|RIGU4k(;d29Qqxv)PbK zVH&Xo$SeA@zt+&A+sj@WK%QL_t)dWo33d#fclE8 z{ZZoPbl_|TW`6un$b+r}4(lXC05?@tAs8|9I~LFJi+3s81Sv&!PW7a}{kk@+&iyl? zV_MyEaoeBoXUkqKaI-tU$Vo(>9eHNs)U)N=aDF?Wpx;&S0*Ab^CuOmsmhGO<&9>6g zdE(iPl(Sa+3Gh6HW6{<0%r7cG>&rU+PzpDPtG-?jtnS&$djGl~S_j^?KEyfV_1~p? z4P9yWPw8$?y?gq@g+4;5bCeW_RMn>c&B|xu21u)HXwOx94|1QdWB#xjF|MC5c=`EPt)5$t8JEun@cj+2e`EkG)zSuX>&LelB7S4P*0Y~CAIVkYbMJq-OQ18VS5x9{ z5RSg+kgRDoUM%TQybUnW|eb}BAIxf1Fb~!A+ z&@~|##mdI)|=F%u#JkR{zFbd`hJdLe*FgV zep(n3n4Tgd%o#{11H$r8Fde{u+!h$$jb5JThZwe7;8dG*g^#9lGX>hvd7b=*=5%H+ zD7aUs>D6pl_L}URu7m(#HJeLC?xKFjxYZl4HEG1Z1#eTl3leSgr||l)hJ5g^6>uiF zJ}o+lmlAcmldS%*s8>yx&a=6Y2f{7^9&`4z#pt=fS5$V+@;gbJZ>IQ+@;z)cryhJU zv3{=JyCTOF>>n#qo*1!j&ITv4NtK{Wf&T>A#3pjsK8#4Jd$xI zmtu!J9SKH&Kd6|RCZF~e?Q$&w>8{4xGULsvlUivYS*#ti>^H{m@B`x#L#LHw#-Yvy z^Bea`F}wxoL z5a1@lj`%&s&3<$Jc2|+N0oN?SE7?;5bD?J?v9b&EK;G+{vf(l1zQ|N)t=aS|%h>V$ z3FFbJz~T4A#%WOp$X#l9Zn|mj6LRwD4M%Tfr69aSIwq7m59IZ^L+iXG4yK93t%Eof zY6j301U{h2@JM{4uLqq!v~w=hTM!cy51H?@)a@VcM-jZO>J4g0=iOVTKi?f@p?qBC zjWuegmgzi;8fes}`S|VEsn#|(@Wg5N z2n9hKFvSxbZHiTLq=bqL8K6Yi1Vrt2Xqg?)%WTZ#QUG_O7hh3{VdQ1CLh7ZpEpO3g0$nk=Ja&A#Mg<>dtJP>O-7&F@@(%Jxnx>8;HW8M#E#4&;jQ zS&@~NrpRu1*2S<;4P*Qhkm$7QOuFbX7w;ZVLdCM|YBo1yi?x})J(O&wJJ@iD*&*+r zujL0;Jlb$A@E5hdnip~r@z5>f^tym6olvkOHqP8xZ{%bjd^`BFG9F&I{X1OHsvpxM zELGG6L>~^4B&r~IVMvarB%&m)2YH8!@T3b*_yv~cO1~5Mn~pZFWcpAzd-;e-$DGun zUIuB-QS{uC5miS>qvn~`yj#;&)e^A;8wFf9x+0J*8Vik9Qqm&hJ!3yid(SRE>*V$$ z1X-~AOEllh@X(_vg)*!NqHx}jTWr-j6Yd^`d3Cc>iUhJ?STkFko^n#&+*2si3t`Ij zM_BC8H^3JYUnk)_~rQc2o`d>UdtsHo5Q20&quO?Pgpg#mQ#3RmpsU0ijmP%rM&+R zXo88D<$;U=o6i)VjRh?}t6sapTdz>#{da%`cavL=YveWQ@+4tKU8hk6j%cf8GD zvPGY(adFj-4xb3%zs+d9_&;L-)MMY6KYfAM7XWp>!!Mi zzoWX~$=|)J`?+u~MeY@)EjTgx6I|dJyz-4D`TI1B>x*u>l&BnbnQbL^@_K2LZwlMe zJja$sguIJ;JHkDGkFNmAACSoTD0{6JyYi1)ks|_{iU9N zdi6^F*um#?sa;lN-EQcXsmOtS?3YedoA{Hyv-QA)t7Q>$q;ihh*n8ns3D>G`d$T$~GmNqs}Np?H8(o>Y|&ufF!p<#I1Ma_gmbKUC#`ai~I)DosEvsF_H;3n(s zSlrSxB^tY+#ei>#OtrG!UG_X=JT7aITC-zD%x}Q>X864Ka4lhm6C}*(lcvlsyUj?4 zxEE#rEMBi%G-ayDWWCY;eRk%8d0yZ*Jg3 zU!?(B)651#u7%#F!g1m4Qs=Ii&uJJ%>g`91r5C#i@Dcj8s&f)|tLRZzW^NG}NoW3h z+OM;fp2J8xTxp~qH$I)D*8C=lW{$Y5g?r8g`@JLP-^p*eIvdb2O5NYc-}a|t6<;m7 zx(F9)9m&9mMj4uIe)!;-eNwto_Sb$CG zzDxj**V!bL;>RXssyh{CJWa1NBzB-w%r}GYR1NL!zE@%_mglW@K)+0%rQQB9-sRNO zw%CFn0=GC8NxBXYkEWHVH@`T+Z|M=0&kTgNK1=39ojqC5uel$SuFqK#e!73elRLQl zgk%PIpHB2oCGZoGUWrAa5|>+6-hSHj733#4Sq=_$W;K)5q?4Xh56|`HT_OJZzB`Zb za!8|J#FSeRU*n$|O^7(&d>+DQ322BU7rbXC^*UY*BZArfJDgDyguspDma*k zq2`#M0VgJ6hD`)tOXp7XG|TD1p_3{I+X+Ty+`E?o?p~WE3}uLaE$qrzE+6h9T9TPi z#+c4$(rsTMeBKH>tw+&^UqR2;AtCmC^ZMNpcVqKOl--Z9e}4aMcPNqV&Hs49WR)E< z=xlzUHjGaedYUWoEOnq0c*#e~1d*UrX-k+>D}Z7R+@* zG0n>jL<7|eFWfZ@;x(qKUso)9jlbd>qDMQ!}=*MPuhYbAKojEmv zboMismURz#3Y^b)t~S@afCOAh2g~&l(xikoR`$M%rj6tiE2#w!5`*l1Mql}t(*1^? zWB-%AyWy;}UL+Ouzk9eWq8;hc&ELts|87N)%RDv#M}ISXP;kakozP7$`Y_6irSFh zBcxE+;{SH6JQjfnm_q^a568;1kWEoO5cVsVLY$-J-(g&N+mH-d(d(HA4ta6<-|!W6 zwM~rB541Wl$1V;|(>5O;v~cIV zqF>V+we+G94HH`o8`^R^zIcWn;(^fa%Z1t-v@ieYBBx2x%?DzyC=s_hAVj|dNW@D> z*Fj1nxszl#uTf0rEB<&bRm`wuor>$gUKh01YEs*Q<#VUl6Tl7Ms7N)tSDd)^C`GWd zQHxB-Ylz25l5CY;DSGHTNlpy)f6LeIA<4;@~F`rhi7w^mUamd2)z z&I2dfLE?L2#86mL0~bXgz#z!e-}k%k5Wm=7qa?!~NRpBu3wqbY$qUvNroE{w0$6?f zGFs%vW@~HDzODY7U(`fn(%eH9V5L99VLrGi5?y4p-OMhIL96B84Ok!(w5>or5px`s z2{*t=w>Vttj~1P24%^cEW4|0#*Ep>URu8AQZ7lvYQ+m*7#rA0TYyXSgMBV^gEiAS3 z(Jt$IeDk0yjWu2kxuDgh>nxD?5T5Fy(KY+e?n~38i~dBsREDrUo$hHJvgp%zO%8Bc z>@&_%yZutkhD@5nut~zEyIU%J#6k;84;t5WR({(Aod2%5%Jaj7-BcECF9)|W-Ju@VU#F{Mu5>G8b z4tco40Y3(yggpc~2hs$^N#FoDSLZTSQJ<-tFsI$bxzVC z4Et*u*$D>XK##;MRH!nNmW9FRJwt@Hyv6UJ{Lti&Yx1>II&b6V@Ut5-`wrx(G)o5H zW{gSgQCkfvh2>U;9OH(><*JX#!^NOQX8pE00JOd~YP-s|5sZGpY3>K%c5K?4xf61= zO3mxBZ2|{;sakKZDV!hptR`KR%a)|I&6BEoG+$IT_iVp;t9iu3Gf}Eu1!25(=z1t; zGHr7lfcrr_pR8NBmR~;>P(BfHW;&!?KmpDEbLSSK>Jb)a&nh5WCgp31G(PLq!#}fv zg%d3pP2ECu6N)EgcTM+M6KsJ+Y%uWP*E7d2f!bfHOiA>tsRZY9T3k@Qj#s>s7Zb95 z?_+L$n_56HzGtR83mh*r5nQHK4_g0GLw*Iw{1{p0s_gPnV-t_@$Y{qdi~EF}3t*{P z(<-%cDych%4F&T{E7VuNu)iVWK(#r_11^BR@t?Nf(pfW+74|XK0syx0hBK}vfhKz_kZF@&tKGN&E$S#NSfz-Y!Es%gdCyI$;KS z^sp4*D0#qF0BTzj{3!}P!@F-udI8uAb%Fp!RBdQ-)I2jA;I(zFNOLcSa2|;uS2Z4s z!}^Ad)_vZ$TvGABM<>m&8{UV!w#Lit-0~p$RH@$N#L81rCA2zAW`lK6Q+S?Q!uFsN zEfb|Ou(MmjhSzI|u0|7~Reb&t`m42W6o+hxeVJ*bnep*xce{0Z6r0aZ<)tE*L~PQ) zzEuRT*PwZ91HYGoY!On?JoR@;QMuKEpLFWQRz`W6=`?6XPto8uKqc>k9Hs2DgQ&0- z(IP-@xSKG!vh@BL;Gy-D)M&JL?nmwAqcOt*K_RSX!D^bgyVEeL#F|0GUFfE;4`d8N zanJOEd2{X-2L^5UY_Z%m;ad7243e+i`R^X1unQMS0rzQ$8C^|VS{JnE^d<&0z=zEyOem?Ysyvw{-Jmg`6pyS!Aqwlj^MoAju<4z4hUbyExs9vz3ZNm zCZ^^4d4dQO+n_UKaQsPBY1bX$d(0R}=Xi+_RpMsz{0-YC>Krer2i$i`nKG^r>t-nq zvT-?kPm4{ggK)R?=ycZ-+g&HwiSZ+P5^m_EU0+6MnUFqi(TD|S{h4rVI<621e3+;!DNf5-_cV*4flA zK5J1anzu;grph6OuwqPajR>6oib_QQ&h^lv#Y&dv!z)~^it5r-tT=P?nVOS?ms~SU zDgDwKR}99MK1POR#trPMK4$N{j5YQkRhlsE2@kH&Z#d(aJME6e^RNC$qiktB*xp4^ zXSc54Fbs)~8~BN;SNr(l_Qq7s>rtq3*`4a>#zf&7Y&O$tzW_pTc#)bYOmsKscbyT> zxrzDLn3LSj)3>T0R9oPLITqK_Oej^BY**%OSC_PA$^GhlW3FU-uwaOfa&#bi#2z^D zcsU?;q^o7HshFZZ>O8mPjU*;_64PYd6fLgdEF6-;H0p>}ORw3ePmM;z^*Qk6rj4Y# z{=K^dy3JQ_mUDL>gNpi{yt+B{s@VeBe#?xYT=HXU)z@~$$~ErxPTI!jwpG4TC;y3@ zGsQtJxmKA%0-w`9|F@e$?3m?AlQ?f#E2saiK<9K? zP4pd#C$yW1lFt_#8Ll3rb!ds~^pkPJ&sEgy6&vxVTE?mV@MAtv=~&V&^}+y&-3ZAZ z(Yf&^y%2MyQ_EnXFUsS^*IQJDf%j*Hh|{69ZuflZhVJ@A=_Qk<1U&iUjcWM0t-ZirZVLBxGp;&dHxZ)?%l>#-;W@n{BMZ~Nprr9aXGL^Y*=i;~ z{Tmd>fX`TZT;J0j6g2RGPVtYWWvvX49Ddu_QZzY)Z>Mg5S=O@sbkxRqGG;sBN(+Fi zQl{n^VHTZm?Xq9#++bBNtCW{CKg`-s*m_f#6!N+18U#IgeGz^(V9PGY>9a``ma}(rL*mqfe|7Ba zv*Y^giS0V<_@3>?iQ?-t)q0S8k;L^E3O6N(ov=keX|B&)1;RVq52_!ws&2lNRvz_2 z1;$4A|C9%$2SP^jQ)FPm0dhfgtvgyt4r4OmQEHPL13zXK{Qog}(X-a+D(9cPsl8{b z^;%?X#G{U)GQ_F-ioo?y$qHM{B-m;(5JOnZ^8eGMipnLY8-k)L^?^5NK!}Ij+DRnp z_WbeS0{qkF<1`I(zymAjkDl33IobZ+6{ljAM64`5IHX$!0F5p>GC#YK7^+-~{|}Ckb|24+cGN53=B0M0RRfxllBHqkp+n3dli>wSd9Kjnwp(S*J5G+cAxB$ zga%`5U`j0W9BxBGDCi-bA08WWld!npx`R@zo)t@1_9=|i}@N$t~u)v=hH zin;eDi^2!M8`n0_vNmygM9SwfROXz&g4oRJ1T-T`mir$(?#%G;lYM^hIWeD}Q->TJ zxoz%cMcw2>`vu@?g6FxBzhlyVDKu#Dd6)|`%7t$@CDdiKeZ~8-P?WEI$FbwE8r+P3 zP)aXCttN8(&HkU>`JDrIyDvDXv1}3XW=pMeABl>x{)9Iv8kj(@x68P=%hafD{EZ75 z#6&T%Au&VXGwDt|m;It?+Ul5f@akd1^xS%*#w8C~;}_dwL3|q+PZJdA|A@vj!z&59 z6#)NeAPNYPRyuo0GSy?w>jzGXL(a_C-Yf_mFE$eMh~vtKw5qs7Q$}O_Zm8ow;{_ue z`M!s1C_usM+sR?e=etTXN&j{Q8$BNg!4Sv3)=9;!!T8)h?_o4##~D;Pqn*HB*GXYc zD~2%Tj%g_qwl(Q{G*!9&;vXG9ef6g4FZVfOhZWZs<|?MWw!`ZGJnpfR)+>i@KBeV5 zFDUtp-AW8Rw!WedKnj?6QAMCrUrhZKqNPgqX0qzB@!@b}c&m{W&njWV=r%+bOUsYq ze0@vTKQul>9njskaofTBb;`Szo)`52r91o{T5%4IUG%9~j@TD*VJsSdzmmcv>a(T# z+g{_GX+!LO0(f=mK0;4dA70ZJdF$&FIQ#k;2gJ-IFc}!hwn<4_(?bswTFnQuB(1 zI0`C3LKwR=pEVC_iy3Aq@>7QmL)iU-GT&Afe_B2qot+b>4qGQ5p$Z&{!DR0oYO0&P zP5bzdSe5qhw)AF+I=}Otj6USdac-Lp%%bHgUBExv$TBij^fxU}tAa}|x49lVs(ndC zGx==AuWF8UyF5rJVJ}z#*?nO#{{4KeqE)G_T1uXpy^hWE|F{8P9^ioG@`9AA{1nG; z(#8g)yXwLf}mR<_GWMr~1dma!ew4MMFY)Cw54y0*B9O&95+^>&2-p(}tv-1o>ok40jIGCSnkPly)P( z!_A1ZjY%u8IltL|T$IGUcg0`9oPaL5zc?^+Flxfrud-sW>F6KVkAC zCu4-Otkc?Cj|93f=QP^h5rxYs1~9R;qg1>zQOY7Qp^{Tj<+tf%g z6s-E*hYbHiS8?0}?GsGm^{4sW-hLJwX~;>>p@N!r&3yVZh>YT4mmbC12elYD6PTI} zz%Ax7iNg=*9{Oeq{pGswN`3%WuA}h>;-m!2XK~vmcGZiBwREM=9m*$);1o>Ajf?B> z{?*lQ6PZyg3dDxBvp?Ko_|FVt8|qpL z6Cmb{H|nJ*ThD_+kLo-oaFNh^*4TAF6#9XHsQIpEr;cv9shcB>!7Y9pG7~T4D+b_= z+3(mWpSdS*OOPOOjsMd(_GO&Jtt-4vh(WlouZ^}(C7~_cG~aWMCicNXaP8!tntYey zjpRSIg&(Z>O8=Bf?>8|j4QpS;1%Ufvn@pO~1(#e$kzEaiuQ?@J$^BvompWXJvBY8!Y^HZAjY}zvYVu?D$?qEa>%iaaaf1_CwTj96(2Npb z5y5D&L>K$yL3$_=7?Z&O+5B5tmeJxP^+gOE=`3Q@v&A=~4Fytm(}-c>-Gf8QmT~xa zZ*c^*vJ&K2YtlOBbT3rQtYNwR<;FI3PG`QAtM1ibJAU?wc5m#k#G3fMSVlNPN5=O_ zjRi)Vhiew+@70R_-c{WrB{n#AXAoq=rYZmR-AZ)Z2-Yw%uwvVP=&`X*%8;4PA%m9f(qta#N_R823v59J@>~Y&n*Q$VMlB zndpr`Dau1IrKheB!Cjl_-t>Y}4&4znZUm+SCKqSyosrooUM-sMO1Hl2m83bb4-9;c zh#M^GQxISC6&I#YxcIo*N+)q~{i{We<5*@=5&v%>&vPkS^^G*8@i6e6PI7ao?q^V2 zJ}vNC7`M_!n5@aT$r_YTthtj*#M3ASLMG3hrkDW>z%r<`9f7nk#N+EF7%WR1b_r*f z$vw&=v4M};tZ%lRQ|Tvbon&bRx2)^E%IT!IFI&A}mznp*ELxWx@#$!C^3|cg0$sCl zrgNUhKHTr$7~@}Iic?fm8?SeUz!K%IwxPwhKX*P#37_mf;5<7fNh*R7)Q`X$t|6x) z;rxqhdPsgJE{C^F(RKpz!uRr!BXw}}5a~Y;vMT{`$mC8K88l#g=T8>^Y{ zsNJ9CyLr1VlYOba)x3aBdw#f>@;%ABTveF|OI#VA3Lw+Tof^7~gm-tLIkzE$hNZbK z9i-{bxG~C7G!s_jrP zjNLQ!>c8di|F;`FBx=2G4Z!#!mqQldgB4;DtNo(|HJ~f{kkhkT_uo~yr)TqA(@?yu zC-MMl##QA`)aa};QB^3v8hbeU^%+KK#k^-&(wJmijsb=T21DM6mq`Z9^5TfD!62_FI zX;rH{U&2YzjvsMggs*d9lmg5xKC&aUsW>la=yVga`2CW2i5#`goFYa&W(sgJUp#&P zUt{&3zG()?IFDZZuVXb=qcw^FZ|%D?Mss#%Ix5At>Vw<;Toq>)04m`|lV9{~mgbtp-HjWtiY8j9iZnTv{L1ft`V=5j^L7F% zD*e-iHGKbnvh%-;)&C}0GEwRwj~~gR?`nx?oHZJf9KxrO%5n1r8X~}L?LTTTwV2WA z(F6uq4~ylcq0!~7V=dY4cUk?x#nOUK!J@5e(^lI`*hvu1g7OYcd!#W`SwH(t(zV{U zXw)L`z10S^sD-Xm8F+xwYnZoZR_7{&T5v~Yo}%~6(e3|QnHr}3xE!Rt`W!vt>7=LB z$;v$C$;(WqrJi@hlqzEc-){yi^7kw^Xpg{|`w&z|nX!S?S{=9wWUFY_l zY}JNwe$Hh?pGL8hjMGu?f3b_7;g5wkieD-iJ5NOk;}1w`9iXXyw)nS3!w^bRJS#KI zzvf)hU1r)cTU+Y>!$$s3X^u>qD1Y^&v{dK0-=d%7{a1KkS1JxQ%f%2d-+AM@Kojg{)0HtX9BR>Srk^SLyfhODk z+~fU8Nugr7sBoK`E$KuG3&)wGsznro>u)y3Pf7-xR(WYwq0(`}>sM20pNK{{`q?T! z?u-BWzYPr1<@}71Ns{g@bWuW_AEg-cE#Jqkw1fISUH^CI{Lj-M>$FBd z*1x_AHb}6xk*#VJAE&CMDX${6ZdIx0XFkhy7w-Z7@6YM_sHE9~5UdOZOJlYf+*;{vkZ&=LQ_K790KV;B&0$x_%LpRZFs{@AGs zhmZDeEGWQA@^r*Qkn`if-ao}?MMVG8X}#CHe_oRH?hWjAF_Rj!t}4V`Xc2#SQVKrL zjq7yvmdj5fICa?2@Y&?v${FfzZSfR5wWkX5r%qaEz?P1Qw1j^K@c&h^<=ToKEFGLQ z_nvt)X4X7oHm`_O+|5tSa2UIli!@W&^MRx|ql`q*dtC;QNWpB> zk+SF4k>HGY6_-WwR%vnotRGtFqFNK_guRX5&)IP^?YmZy0#qqTsp#>n&7w%Ja!B2- zIO&DiNUY4Tz3>()6wc?mkNfjKqu6H}W?}q6%;{(APHJm}VR%82z2H*2POO*H^w(Jy zG=e{9rcWKi(S7+*VY}IY{V#WU8p_xhg*N8j#IVk6ikSqY@E*pkJ9AURWq(+Ec;WUv z{WXXGwnz+1mWlc(gG{DQ8)cTgnjB(iO%B71g5I;6U^&Zg)#lYOwm+)aKFV%BeSP28 z#1NxP?&5(A&r1>hen=7=_;E?1bmgAy0d*ii1EeyB`2J?sZ^o7S`#a_*V~r43X94o0 zM-TPzWk&rnOn26zuFQ+I)d5Uz5tcf2tF^_*i;qhkndqNZZw*t7l&WeAeS&9JHC!If zSY>@p-8nLwjbIXG+|jK?+v_ulOGygkQIj2!5^R&Sje)GWB!9JurdH_0aV3gn#fw*- z@#zA@$4zmFuyd40JEG$?`qt-rHXr%oH$vmFFMrsc<3tV=jPKL1JC=3M@fNtqRoXTk z)U?#>wV8mTc#VC^L^+py{>L|f4TmZFGm(SyZaq5|Gx?V|aR2sHBUj9jOCz3o zC_5LCqyPP;GakzHFbis(%0VPv?0_0G&C|*2gn=E>Lgvh=0qGA!{x@@%P!eMx;p^OQ zFUxHASJ|-%W?A7YEGV=g`H4SMgMthWl-1SbTIgQ-ly*zxxTq?Q^aMpltID}`VxjVX zOicM6dmYbALw!A%Ov^}=BuE*hUFMS!EyCoK;sL9o5(e(K zFUQ-_H{+Z0YD?@>RXuSNRJE(E#8WqqD57i()IUk(9MZf@cS-&zGhwf)saRsd;FA%G z?BWWZj#v_v=D>IKi^wyXd^LMO7j9$tK_ppz*@lGfGI_X@Cmnmv#zbLKSC+JR|xT%Zv zDqDgYv0aD1`AW0!TDU0RQNS)ee)?6xwN`XO?`74)xpK!Vw5c}h!k<%h6vm@(d%tdH zM>4lNJsgNyV|&9Rdq~DnOKULle&njOaa)(SxW)aZmphqjrA~;mC}8-XX|K31q^rVptSbA+iwgyJFt?!|DHS%k#W7J$IB)q&rIQXj% zsZirv?J0>vg~V2MhL=CW<28E`>*CcuoQy;UsF-;H>0gm&9VR}%qC`5klc!|3vj>1| zUwnu9EhpYd-M^W2)g1Ws&+=y{E0ZKIKF{n`9}eAHOKp(#NAizMpWqgTJV;2jiA#JQ z7Fdy7nldGx&R9945&K;tJ3iJX-`8b6{F+9scQypXCiGVMH8!}XM``koNwM!(Wh7UI zF$3)>Lo{<-DOc8GXOJg$kTM}$?CH$E`|CDYOyeW! z)GxzVk0m)0U*v7fc(d)LE<|3%D!#>nJV(Ht@pcgxqKtJ z$W2<~fi2qwhAZ=DZfw)41apx}k(3@UFn2DG5j?5Ae%tTy*hvG^QGy2U3SFosm zEuLPMC1?>q_@pO-qOp>!tX!C%?9M9`jJX!0IrwYr@#{QytURH{c_vz)v^W+0+st#_ z0>Z|Bn({x{@w8RgBTIfic1+Z{FlZA}e~%3Odo$Ef9ks7z!OY0~@?lFo5??hm;1?Bq zdipDEVrcJ=D3`DF!6hA`4B}i=bN6LX^dt-{ zqcU?pP4nV9`wlQ!ePHzSDB5nsQTqRAd&{Uel%`!Y1PSi$PH^`Df(`B(oB+Ws*x*5f z6WrY)xO;F5GDvV6f(LiMlYD!>-+Rwl_vhswtYNykx}K`)vi`QO(GR5CYDMU}6%)!q zSVN+<+XBz5VW6#i;4pb7Box2UT98L^yg6i&HrRDblJycP(i@kW89}&Cxnev|QZ2~v zwT9@`i60i|Tlkyf%99{++EaB|^UgV5#FrTWYGtWCLJ3{2I8GZd`mM^k6t?HSEPoLt zH5)v=O>94xHrsoHV!ENN#+YYlNp2h45j9q3Vkj-P1bZ_^u$d-tow|~hxlCZSC*=|X z?b}#34|-=$v7`%E66{&~z%$K5lgA1TxL)-ZC9^ZtAxvq5Vrhm=du)FXo>Qp3p~i~0 z0UF4X8rc!QjunWksk9{s`;rdd7gHsP5I%NK%a*f;`$ZEw0!Ew`x3ycf+q=ny2V3qE zK6G${tPTBRgohJ`jy6Hs%VmVRR9>|XE_p#yXMrgul5=E>-63J|Y{2BxF)-j(<;JQd zgpP`7Em$^i`7Kqst^s|a+Pa)wrk~K!s$^?IbMpjEWPvMc&yHk@vw-fzL{B> zV>^NnRqX8WI54QIh+<9{>K>s485DEeZ~Cp(ttWBCi@D`0yQ`-_(%6)D}<<;wj*bb!jIe()M86WoiKj; zwo>fC^{Pi>jggQ?0L^zd5a{Ekq9O-uLt_Whzlwk0 zWaLacNDnO3l+TC{+*u8LYfrfZSE%YM%QC<~6)fc`Z$peQ<+f)_5%oo1-Iuz|{>Lo7 zS~wzoZK^3>-y{RBN4#otiLc)ZZ}up9j53f*3|Zb{{-n1X2TkI}B%uzOSaO~_YE-%C z_Qo@*mf!FKA;1a(?2R5(P?QC}!wol&h>eUM=+@U*wJTUHTAt}LW>WW4Waml>m`52R274v zi;#AKERJZdnVXd|b>_Wx6eF2+cQ9zx*_<ob41`^^(lnb!yY#BiJba+gn8 zeHm)4w4mdnb8?5?*WvI+ua3W+$T*AdVP^#NSdY+3bU0Z`QbeHizszFvNBWw5l?eRF z{uUQ{!_?NcKgo5uWf)jrr4F8m9c6eSQ=*Z@R2O|FGmQ%?JeSjaN_cxWof^-aQtiGW zqrkd<+nj78G*PhA+@GZAf)UQms~p|^Wu^fo1Xc{6Bq_N0z~v$NM~QmA-J!PrO?%~# z23U-*{O8c?>cNyKoeSd==b3yyYO$Ppb@H4@-mX&8wGx+~#k(M*_l>`5i{~3rs!hs= zrgIWPrriksxmnUgxoS(-C^^gNU)7W2zm4e?JboVZqh+(6UgPaAYGnJlg)jc_NIx%ZJ?2EN z+~?S0AwI;c8|#WF&OEO=dx#t0E%*Idj45_qw!&vAczQ))Xa_L5tGZ`!`;a-114Jsk zKq+=AZgF6d^`twV03Nr*`Zv$NMSam2`Vw4AfMj9($WFGKgVveEKfJcgrRb^fZQH&+ zG3US@>oAH=QIKD0mpQV%l-yBRDo<w~-`go0F!fF_9Y;t}AQgS+#*;V03SvpU%}97W8u<|S5i9;DS5nOf7E|q> zQbaa3<5j&;oeOKVv7Z{3_G5#zq?Od_cj$CUL%RJm8eBQ>Od88ri4!J_D$huHa zjv^`w`p(1?GRr`GUAQ{kdLJE)flo%sE(MQ2w~+opkcs}Do1%2Bh;x}FbHruMsd^I& zCdnP%Zhe({GOiVVTrsP@I93Y6W@sW?Ga`PH*V|ZWbG;3r#0iD%PjB8Hz!lAuZkImb z*A7?sKH4jUK8{8(hwDSSK0ZPRZ62@`Bs=z$;{1zN)d%q86LSPw#Mrb%slWYDkC95gp|m_Eu8QC#p;BL=d*EI1YmU*)ip; zU({946_#_^x6AhzpCk{;tAjfLW^lwz)5q+$~zZ$;dsfqw;ZqX#Qiw@FKO_1iNnTJfb8NvcBqi8Ei4j}$kbHAf3Dt8s^11SelRc~ zg?uQ8yIXX^PSKH%9Ge_uk(B>Ltw^6BAuliAn2?!imq3_R@ozLKkTrjApb!rA_5&?G zQN&p7*w^&<;D&|h@9%wRw^tc@k2{bAPOKjb&Y*$|`vspZ*QqWaUo1x1SL>gv(`rBzYS9hbWkgpF}(`u~au zaGZG`5i*{)v8 zG3PcwI6H{3)^YYWYTzbXD4|H#W837_6!nI2cnIGLI4kTsivOKt5+N@pM`gcQZY z9pa+Lom8D@Nef`<4Zbi}y|X6n$xzOhU{%Oqh#u95NpNTiRU;a8=9d3ushjEq3g;?4 zwpk>K*keljVjA!<;!J$ie?36>B(JH!UBmMdJTx`K5IV|3FmI@%oUSe!f|n#07`8+i zbl7uL+3+R%1I)m@6svIO9-whb&^&Epv0Rkc%|+6rIoWEe4MUv^f%==VFTm$T%=tw! zR`>8xARF}P+;OP~+X6qNu{v$491Xnrc(RekK;B&F`6vf?k@p2j(NCXE$6+1>6P$FR z+=$#dfjz~Z`x8JrMf0Y+4n{(-osO@Sfu#3FP*kT0gRRN*o{Pcy~G298iv>5KvUI&96aKV%9dn^cef>ZjvZjIcX%7dN$ z5$@*jGsAHQ&drLy*m3uZ=!)BVU+MfRg`eU2KtU`Z>ZR*hDBJTAX2s(r2()<>dK&$4 z(+c=W5p!wYA8!)y#FOoP{T^`F&t1CQ_9kDQi<6QU-=3r+u={0w71UTO0-2Eofd!pK zC#&3?CdE#^Z=Ebqg-e@!V=(gF6J7C~FWB3|vcO_z0VPOGUCx!9#&(Ou?6?QW7P#;Z zz~vhHmQQN9{@BeK)KC!#YSt5`OnN(ez+!!f&4*9sc5|>{VR1{MdhITFqas@#8 zUSkmxEA`fj^%@dGHW{*k!n;n`Hpzgr{j$B)1L>6~kS`p4I@ZxNf{Mr);u2`^!^UTr z;lif!m!&OGRT}qnDF$uuRiDDmYEY=5p-DcUcCe8)v5ydcPXdN0@&jfYfwTZ*@eR3T zCwgM&c@5<+v3LC;UU~Lg2(;ht^rrlBaSl4~^S6CUF+}cuj9G1M1ZiT=$YD8vwyK2B z&h_0+m%4L?Br#ULyrJ-hsr=0-%8S&w+%1`Zr3QE$HUr(?rA)P18aMbIz6YG2_JMw# zF`V{}U2TwLgbjZ-ks4y4W)dL80wYCO%{9#(^$#mU?}U$d(4yQ~Vht@s&hi>f<5>+0 zQzEQ@yC;gu1X9Z0p1tM5#nX8Ugkqt$w?3 zu2imbsK!nP40tM(Fk(#f*%yh@kJ($%vJoBeV#00y%%_NLhOO+J>#eZFVyis+l@Obc zgo4IBCn$pU?0$voyx5a6V2(g7(grDFppf#;0rj`J_4-?%zvSpVhYaO7L~|rqNHdDC z!gR5TfUC5a8yvJLR7CG-*X*V+7-6TeAk#1^>lXko_(8@Gfy*KA*(xO-r?ZhS0k*i| zs>qXyv68#|M*S`?_Mda%#>$HsIZ27?ivdJ!Ml%S)LCeeaIbOBc{_E5qrf_v%+!YA(7#lxneij%q`{J?}9AwPvdem zj?YZbSC1&5jb{RIxi_V{oK@NkcU(Fq41>_ejGwIFhP7qT!J0R?hfb=jdC9$_Efssq z3@=3_t}xsTB+bLi`TB`;wyj&*%^$|zJCxGw9Wv?iY|j>kXpq;qUcSYcw$<9L2;iaL z7t|WrUI!@yxTh0F+&n)3vi%!*^Y;L{fDA?2sZv918dz|fv?o!;-gI1a4`LkbR)qOPSaBOp|tGJ=`FJ9!; zbM=y>hF=;qx0*P5tsYlw8m=Xwf>tfn7^Yz4tf9j)Cu7>z+bfS)c8C*R8dgKCb~jsb z1)da39c}B9jgE?Wm$P#M8Mx2F0tT{Eb0I&oUGv0w!J}u3M+ig}3bo$Y1zGM5E)VdA z#Yj`fPlw*O=4*9&oDOCZ51egQibXQmzBiyv=dB|e4p|xY#R;0cLZC%}BtdI^NQ9jCF)<4o&?s`Gzco{{y`aqxYf9sqr<#HH-6C61 z739Czmb`3CFsz4Kx^mUs-^j>2u>(L9;bUv~&Wlx>6`)_%*hB$rpu=qfaFafN$K7M( z-sXO+yIYQiHk+37-IC-@fwJ%$(6wE}?z$c7!?oMlO2+uc$zj+Kg%=EKJ3Li^Kk|Kp z7e*}L(iqgA3if}84|($1N@_n5_fDD0Z{yw$SMYP4E1F?$xd?CGz_KW7XDq}ZZ_DW~ z3eqxY^21OOduDr`u-_p!RV?Mb0rf9}2!z|2V-YeybR1N{{o5!JEm4Y%fIvItNZ^-ze=tbSI^*4byk!9RXYg$}6gY!`f8eyHbWjtnG2OGU$tc5KfAndVNv=OJ6q#Euwbk8k<5K2FVswv;C{6+3bOTrP%s-2U)P zbZl2Z4c>|JmS0*5e%$3unU^0%F^za>)%HunM&F$N@;~gO`z&Q)J|ImTIo8E`xY4R} zkn1vEwYM~fex%RWKcmtSVPwRjT7da`5#^*)>y0m&_tp{rT2MVjiC$GW2-O9 zSxXzMHwU>TBuH}DzNX~Ypr`0!C+FXx^XqnqH?NE;3jwr3G@agCS1HEQDw7=jQXvH{ zLH>ElV_ix3DIME<8anLK2FSff(!$3MxNa=#sEKnU4rr(SK{t>tZ$v+XtF8y9oYBr3 z$lAl(-#u@@H9D{IMUGBaU_CYlZrUh?=y0Aiwx+6j{GDEC#<2$T85mz@9dyf6ANj4^ zOl{rXWH>VAL&Q#8B>+gVU;XUQ7R0hcecv@qE8CFy2+j8-r~qPgjQz>jMX%nHcf3$N z9$w*}Mp6ezzGh~dg^hlGAPuj3INiXRgj_Wn4{3Oa1Og2^Wy9!ml{)>mx@6WQ-pM0C ze1tYPy~(BPv!91Kqzkr}RW|bYh4crC-aNaUWPu8#J+O7k_7)*pD=$<28(10W8cvQY z{x>sLKY3qSKXHG>goFYe0Wxl_7#Jegq>GM1J2V~;=ry$QXV&JBjmC!#wcTz1jam<{ zM9h@OVGDy)2IB7fj-umOvB>#vZjK9!usbZ+vaD;pW*D6?&`@{Ojw@{(=GM@MoTH6m ztdt(wbf}N?;t&v~i5(!n_%Yb~`n$iek9zCJSdjL*>`QsrY;g3W|f zsf*#t&8eBy5uv<9UCWyERP78z5?s0O4Z1%2a<*p{yMe{@VqDD^sGu6?wmpqCx$61m z!0i(dIec8*0`sx-8>8s!)r|Q86cw?UHx#*D?(34E^F@L)V5jyevWogB@~8c%lpJpZ z!5oI{7xp!;EBKX{TbG)P@F2!fvg-9S44xVnX6%$seL#di;10b**5F(oWS0wT%aXj zr$ZUbwm*Qtq!Wrfe8d5T1n-kOc8ZRUT14KQss~ktg+yWYYOw_5SN#Z1;F4u9pJU0+D35aD2Kq5>{%2S-yx@FA`7gq)y9k+u!V!O{D zB%Uit#f(am^Ey;RL&Ei{!hfTRkt=+lN;>FecQuXccc%AqP4?fln*K>OSNEw5@SIxS zv8XX#QLJ_z|8CQaIWQ8E==JscMoYY#Nt||OPVA&(dt+k3PW^9Yi%*`UGFLk?u8q6J zBE{PV!`0#JgV;JgnemA_9v0iW%YFt!>O-3x@iN1|)@)1qmI-{VL&(1if zW-5m)B?xUlMD=_YvR&8{5ec!&B&Ht>&WGhcz+o}Y;1MLfRWfV zpiFSC%$QKiOV`8Mizz8k^G;W>59Skf+&2Mhb-J<>3&{Z|sj&-Fb$t=YA0KwFXh3$^J6}>u)Sze!_qQ z?Oe4+5I=ZnjZB%$sBbG)Bs}Hi!nou9paS{D^GpzM)~~Sl`*%S@fSSlvaA+u#eNlvh zgXB@9@8wZtrxUa}4&&ZgTde_SJR(19Z%u%nc2I^o^|!2|MBU~uVL>YNO>yzC7zGwQ z9oDaivSH!xWUUAx3BwLVMOeXl!Qhroa^Q6yHQ^$SIA-vYa#4R#yto?HHHUH$R?YOo4(;7@rTU#$b zWlQfBTD}}bq{35)+$>3EQ)T1)J7_(ZjBpoIguBFh@}&_Q=?&*fXfcF___WaWF6zY+~VE4ciYS`Ly|^u_j;KyNf?H>%Kmt(%CZunzf>Tq*fcu(t4K zCFHgf3Re2k>%Bf4Yz=%gu8p2c-mpDJ`rj$b~ zV4rD{C>OYZPtQOO;uPTCP>cH`$>JM4ns(???h4SQ_?-J7@usll%B2gp7YB6y?D5ix zv9T&(O(D{Vk61Aj011^GqNkLL z;l*2=qXyHkfLq#;;Fj*}@8(gzqp<#2M6Igj(fpS@mwULZ*4jCch>(tkNSwa0@XVZM zZ1BA=Ab9{s?3sv=ury53sB&wasBRb{fS(&>^m&f&_RRQd8_-cL!XMgqw<01UvUze+ zT{wrV;K2QaChs5=sOn1?T~ar-#KWqEmAE8V5h1i_A^e{F5jQNt&lozrkCRwzTP^z) zFY&xZ-V$6B-u5DP=Qtw@jXphe9Oq0~U5h4M@rPH7s(Pr!LU$i%#t<^1g}T3m4iKOy z;_G(U3`rzNC*My~#8~P&S;J=>RF_%7)1Fkg?fBw<^@;JR@|o!H8rvPSzE#t8An8gg zz}rJ`UVT_i-6#btqvPAc$OqeL0c`TUohIHnE9(%I-% z%22JlficFMsMXOIFMl1*Ix!&OA{P`1>B_ueV;>qq6Qfy3%h{jB zuS36ld1GK`xVf`aeB0U45h2A8$&LS^qf*W(i_j?Ayyr)LoHTc&tWlb)hsT%5$jDF1 zJ~0P(PUQGYEBGuOt@gJFh23YR_GR6we_C5Bv$!P4{PjQvS?tS_Vv&PSUm_ zM&fa^NC=^i7WUHz3d&M(aW!ra+p;}o{WwAfXB{Yh@t(%rtgz&=KuM##+82BF@(5`=O;3qyB zm-dDQ=XVPHS-jxPA~>#6ogq|jw)UGceIt%i=n$Zf&vdcQ;-__)fHTCVee3MUmLA#G zeXS!cM`M$ut-hwW#v0(=z;M+cHQ`z=XJCUoO9-3;m4|AIIcqT3lm}>|@fSQ}8lyxu zrGM@+TJo}Ws_E$$EiqS)tE<_=EWde%O$<|T zhS&|Afp(lLyI(Fuj2mH=yt^ZQhFTp({ygRYHidK6IYQlE-YgQ_lmYmCPOd~f%>uoj z=E~BxrM65<_co4{ik|$K1@6$%tp|HUx}JOXUnATB+FG> zHrFyYJtpPMmZf75;G$*ctP(HvfFkMYbwcaf<2zw~lPJ5yxM&=x8rxstaV{Gew$jGy z6z?JR4bjRtl6g{1JYiK1xXs z6lv>nd8w5tv&@YY-%D`$JwUI#|KY8#Getp_2{Dr5oP&XiNiqW)5sfgkC0R8A>rZXU zxCxKoj2SHp5fr}6Ohj(er4b5l5+ex;SN8J<`c-%J^5aJcLvfK>e4o;^Hqf});8es3V4s_T$bPL{paYB{%msr6^O&hdO)j;mxzazQeI=O zX<9~*a!_9McaxL*14Z{BJ5Pu@UMiIBiWcz2aYuhnk}<3W7p~_cM|zmGT1b($s?E~@ zoN5;4`7hP1w+A|`p6X@D3R(ux=P`SShM-&(aOV5}RGRt)T9Z-J>H`hvlCR_7a76?+c1rp8Sy5vB?3P(%MJU8H^=bc)?Sdl}fXr-ja_iAy3V!Ct z*WqJF!>%Vm1KyPnzu8U(Rb_M($7x;$3~#yC2yzsE3??ZsobBpxB2w^>u?TypaBgm= z5JUR*Z4>Q&QGcfDB#fu7k@B+_=EZXm6#~^ z>0)&v=Q8B6bQZQ5LsAZlRjf=QKV0bButT+d6`VD(C?9{rptC=s1%SmM4ZMO?zcy`k z7@&P&=k%yjs`uuK&(vr%KPh^y!LV^xPgbbtD&P06WSl|U%}$4lt`NPHQa^Lw=b>;Id)-r`RM(6%C$sQ#jo zlHE#zl-*{^)>yKgGp3>gHpih2a`e=%W8H0lpfuxj%z1ypo$-u74D3J-*8^?3#ho~7 zr^xJxik7gG4&uHw0JaVrS?{}Q%*T$Xq%Fp%djWJt3ZE}`F3ntGQeHJEYZUcHj2f8&`hOv_&f;8#ms;-2RcFQoY*P7ScvWGX)1)BNEKpGh zCXR*5JUBu==>Rtc0Pd)Sob$C*3^hZxaQ#`db=U^N>(z8tp-Dg%Elp=@^S%bcMbSS# zhD0mmdcPxK66c)=-p?z%_a$s5 z*<$fuh%^XHPvpkqi=qElb@&JUl$xaf!Rg@7f$bz0nHozEwkF5bh)Vq?lZ)$B0q0}n zi5x&g?-qfqg^`5mGdlE{AT)i(@nly0+QU)+KC`lcbmpJMgCl7Ez%--Bih6LN4a!aB zm2sEo*J)D#yN7iz8GL64^bZE6gENX~=&wG;Fl z>A^`1Otyb%HyC#ULe$9~%3I7eN%Ek!`46-^ziZwsl3Uv+#VKiU)&>00b1;ASH)}H+ zp6qvCq&(4(zzh6iNFYpG<&p;FuQi}D_|T_c*)qGtc_doU{8u;rHEEh8AM5X$K4>xk zg*nY;kw^-ZkEINt{@=tfQMdwrk{vAJ5lyX^nsvj6vKQDCn&V?xu^S+c9jQ3nGxBGdWGuRSG(6D0Ap1Z)Nhm?*Wd%8*CCe}4xD z2lw{&?yhHkp5W>Js;|TI;@f}O2i{mm^4)_}3}j>`?99BpydrI$#n94<^zv6)(xpsN zjedi}?q!6F?V~1|#ZU=-U$e?F?K!_y9IjBMD*b{CbpY&hpP28CdP|M!KK+GCTYAGM zYx4`H2sKY=M#*jCE>@_!4DpXZ+>R9x#4+h{LN8UW)KIkI=w$y@`kMYOe^5WH312KE zry)(hOiHsrPPE7_@>d0HdeuCs+QaVzoiy>*$dOCYDQgnB&Q;?wR z-z*v~#-6K(Bz_o?XxPs$reiq9s9ei`u!f{R%)6TRSJS=nBh?#aH9NO?-W ziCgl%`IF|~27q9s_1K>D$NJIZMwGkM+wnKDvWi2F_4Ur;NS#sJGyXtxS7;#!cAV&~ zEz7bmFx=E*|JEpqf-m(TJCrlhrP56-nr_`U8s0PcQ#I*&pfM1A$Y@C<`{_+rYVAV$ zF&F;JJ>B5=n9g;n!~&N;EtewF?Pz#3yPFZF*N8nZG}$IW=Dd`G3Uz=&%*F z%X#!fd-;2cERNz^{?ltz<O{2;y4Lh=m{T);VO*R> z{}PKa2HbBx%rOYQ)+v1!uiadDH@7I}f_U%4Lpsk!_MQK|sguWf=-mTr;=wC~0r(HI z2NDX|TNQB!xFJddLfV-v>JzdClYSG-|8kN zV>Sg1hh+j5(9mJxWM4kgv*j!W!Zn-!SW$v-`3nIuMTf4Rn7_uI3Hm*L;t(ZmdZi$P z`tJ6-MN34`EiK)vgr>~bRfdBDV>+gcWT|I)1QJ7)d8f85pX_k3S8+HzA3RC*1yS=( zUZOOTEmSgx(}Firaes@*K)A+&qtX!K`Z-*GSFu%wjP``cp4|*h2PG>W`iIkD zjY7`h{G2^{`6FcmrUO)V$AgVE1^BWlk?wXGYA}%BeR_P*)d68a-;j|yZx&2sph$b4 zms%47e}-q!=9)CIrKi?85YGMSf85Q5m>O0{vtfICdmr=%GiHn5q`s1iY1iwo_AQ=L z8Ezm{+Oad+{v-zUyM(Dj`S$R;ij;QqmQ$PbgPJ>-Y>0W8QICBK^2Op2sik|-C-LaE)X^P*PH2VX~O#>(##Ut)_R$ZWw1U=?0}JQ zG_U_-aQ|1QLbQAGL-gz&)o*F1M4^>S6}QgLVnCm37qD5Cj`Gp>(^zgythmpPCEtSS zhUlR6!FWE8L0IBPM8p}PSpE)mqFmm1!YN9s2cmn+NU6~Aw?0A%1KaO^Jh&o$+}0Zt zX~Hso5; z)4g}U&8K-bDvvA0C_>TK+$oMd`^0C1nJx=$&{5ORe5C$WD-nl0u>#K0|Ee7*p}k5$ z)p6wLmde&> z44jR4V<|P^-KakXgUu)C`?t?3Z+{hd3Y15*;OL*t1zRup-;;hyo*d{8pW(266o@kZ zTG^4f`>P2)mB$|me>^LoHFAEFwmTnBr`G$(HHu7(e2XEbCs?q;`LS2pPG69`ubU)d zAy|deXGQnhvIn+Ia}_eE%s*?&iBMUMQZp}N2Ng7OB5{kR6I-TMoyJ(v*ky#>;S^jQ;7w~~; zi5H{Tr|^jZLx;RyI<9XfRCkH532s30>{CTdNsE=T!)gmGO~(AjDgs%KSw8)=?=e06 zA`p9&8eP4kRiBG*S^xjys1!33>)VQCTI@(U9a$OyL$B}#*ZTTiiP?UBG26wD*b)0> zntY~m6~zqBX@mSK_-Q`%g_qL0{iX8ZZF(Ukl$vly=8CcZ!`AR4!qhXYuE#Tm$IBTN zLP1+jC|+(_jry%5oP0>FeR^Qs0AP+hMK173CY%Oa)PM9ki z#aVjRf15BAX@f72K_6I(xc#dl1Cq!!O)^$pEa%>^WGZ;j}$+ z_~RbTd;F`N!dkw;?eAzxeSz;CpF?vvcEt&k&-WrM!IRIglBWmrM#jcS`C|vjg*y)q z7v2VgmQJ3nWblaGom)_ySe#u8Fvq-4nQ{c^wH zbSThmq2)J*Pv#>LUsg*oVtbrfiOF3kDa(rsQ}J_J&{#_#TD|{JlypUn-?&dyI)LDz zlA;jM?G3;70^($$IBJQC_MhnQFLSANo{>j=;US`#*9|G3!~2#NEDqZ}5XehXYkEZd zZDcj_B7I;yNDzh7Z$Y5B2y_v440R}U;cf@bze&aIY<0_MJt zu=v%>pWSS=X&Cr12%d6>n*IiCOh{C7%Y5Hc7HzG}PZN@mEFuj3y~?X)bm`EXuG6;}>e)4@*{B z18y~CVI>IRo|FuJFY}e*DV=%M`P-X{&zFO`uNMsIMw{xeX6~5z1|PUJgSj_{d90^Xa;gTERH zt#P@`6HP;Q{4!`YpGQN?YZukkm51nbtax}tJ?oQ=geJjz4UU(bKg`9x04QySS!+#qfu_4+k{6kMdF&to@>cyzS-H8no8pTpnP zVG$9HxH;I;gjRhfe)DG$?3(wXVaLO@?cVG>0VfRG-cl#S2W*Wbv5x+q=6|hT#*W>4 zgLEai)8Alxdp-A1ZxfzrZmzGG`$5HSB)N>^33~2(0l8M`snZM)n8g-JX6zT#qiR%RtBFipUBIzyBBS|M^U?;CsG5$VM$L`}&RE){4Wro$bc zMMxpjaQr*4;TsI$I~P?;Z<*kJS}Hm&L_m)tj{e64z>*g<@f9Gsp(G0Csixa4V~sxCbnPio|KUH`j=AFVIR&%Y^kbGqZ6t zjZ?YQD3bt;1`ja4VnpI}`VB_flzZaL^`{?Kh(6T!=Fsqu0yY~EFw3EZIOPRwH$Cgipz zN#gBa*#9Qqe$3(Y`YgcAgDYYpPnMtV`#=|Ly6Ts28r3j>K8=l;ECdiGud)|%=EFik zwK2{62tUM33D%=d%*_D3!u`eQ4qpuOzxJBI<5GRq999G2bHiSP;LtR0(6yH*?x0NN(uu@kK_8SdmJ(#^a!J<<}hsJaDK^ zdb-Tf>)Iw9z4J9D(XSBnaeZolAZ$SP)5Zcj>3gCPC)d5m&l`lGn>}&A!L^VFuO|$m;p@e)Cux+BeH}iAsM26>fk9zRae2H%c1&)5 z2=LD5U0g;T?YrxJa0@bwU90ifliVc_Avav6dMj!eJ~>**L;IbJx^t>9Bjubn9(-oY z+!2pIJBeONwr`X$B1V=!(!iJ$tXTTV(X-jljK^M=z_GbOMze-}Y1SXjjf78nwb@Ag zq3c<8Y)|Fp*w1Q-`|A=j*$ytYG@0J?W5RidHbtkLfY;@5lrozdA;9WY;KQ|qmq@(+#jC6`SujFsilU~ z++T^ezc`3^G2N^=R32_M@~;6^)y|J1oO1UCQx0;#l`U)CD(Ft*e<;`T=Bt7R}5OsjEe2^0T;@l@Yv3gE3ch#3`|9rPUz1X9i3@!-ApmOMIBLd z09BZpx!Sy^VAXF5Q0cXlMREaNxK~c)Yq_{OEMxgTk%7y6J#K-h!Hk@QG0Lo%aq$6b ztj1D7Lag9YEn(OClbFJ&o20o-*P`hCL37F8_}Z{B1Se!pD#3mtB@#EO#1T|SOJP^% z*moZa8T9xaL-~$`axL2VP7xJ?6-t_?TBP-P92F%>D6YDHJj)_~l29oTrDd}{Lo13u zrC~ekLbsafBOroBn2L6%%M(KMcs%XxLNM&84twiiHuAF?g6VfR-JLEH~x1LX*$+EqOy#!fg9jQ*|EZaAaE@l0Q6s`{I#H@RO<>f1&t^pHQeEw8P zGi>kHIMgMGP)2u<9Vh(!c0OkBh$z(6rv0rLL&M>5*(2@PWFtYF_Yf70DCz3*G;hB9 z@2Nf{a5#O7J1AvG{b(w1=VmqY(L_E*a(A%0z@gxyE9-LaICK0GIQjmY#rAYj5ZS$_ z47H%NHXAc4MLlT!Tv$}0g)h2o8-!v*N}^z4yjV=d6h_Q95sZ3ZBAwuFOAOEZE%}3| z0`r}mNu7y835gEZ-Bws4PuGqdZgP|&e*Q;nHdo0JMHOjz31lwy_fr{+VvW%L7!8|~ zesdi4t-h(ru{Vsa8l1HYY6JW)+40virKDGjp4?)g3j7QSi~-koMeke<4%i<_l=+(E zTj{Tg^$Z;0*XF;>0ePNETiBDq3}uzQu&Y>cU$yI0pmQ_WwULyT%Ss;xa5$gsLy+PE z#1T=V#fck9mTBFvhy2DwUl6F$=)IHWD3;mWBnT-e90TaX5Bk;qN*JqU1#^mG*~6DB zBTb(9+GB$8ioLGvWLz{IO9r^1;zW>Fg}IkfcE0a&!KEPdzTah>Vn^ajWRnX29KB$pL?6NhW0kX!Rce*Orf4O?%kP`#rJcxFVa@TV)Ebp=NbTB86PL! zF(FBluUPxI{1VMWl#JN|Xrd!2kL5NcYIU^PEFK&(Aa1M8>Y#C?|2U&n5#FDPP&lIf zpZzIWj{S|+qT9*Xbhi9Ts0l;J12phs(9GiD(?m_{AmGR1mjd7qyEbcC^o>kekmnIq zG|JO*l?Rw(e%|6DtK@Mc@UkSW)7mOkS7qbxHYb+6+h<7x0JYQ}icB8%j^dK@{VD<& zTmfJWHF)}hDuZ%}`hzY@U&2^e7~=zjL*AGOf>+8inCp`S0kjFw zRqLTE4Msi=Y&uJuCO;O%RuAb_HTu}!m-kvY`zMNex|GV$C z-RU4APE|A+uk)~=YKLe*3)zBhDnhLzg3l1^UQ4{7=Da3Z147s)U`r?l)F*ZL+RUXp z*0yFG8d9zn*WI?xG;3=ge0|1^=hmnmf>wPmgH$Q5P2stPl*=SL7rr&F+uGr}kIiP( z@fNWc?fcdqaP`QCMVsW~Us^5#4y2DNfX=Nt6g*k9q4`H>M#3HkD`hTnNhcZteYv=w zt|#F(x73Q~V2;GmwXyF|LeO=9#84r8u>4HS8?Rx)RzWF}XVtp7vb2NftMxy__Is(F|v zHh;cvH+3!HcIw`IytlJow4xjJyQdPE6-Jb&ywL!S2>ui0v!{mCd8s{=t7STwg|*Of zaZiJ1mP@Q4jER%_?%Nmcf`mo$W{D?R4kEZ~2NJLIBpEtpl6t)^zb}he+0LV#U_0Uz zjU9&0Gp_r4UrKd47?wpDfeL7n7Q0~A4v#;3v@Iu4{swNY;?~}26Ug@s(X2HUm@O@C ziHtt5oy^p(7lP3Jvp|g*B5O@20Uqscd9H?X!RKeC%89%75#BOq6?=znzEMj?rQ~b- zYp`eL!Lt-m>&mm?saQ*Lnb2e_G?baN`~Oh(7C?1v+qP%~had}gcbDK2+}$m>dvFi# z5S*aF9fG?%1P>l;0m0oCnm5^J?|aX=@4jF4se&pfYRxg{7_*PwT5qinF}-CfGNy9u zhHAV4c&^ZJS&@FT9glKQ`*`3KNxO(;Fc#w2trY4{$^#`mS!_iY#IrE{U=*DjQm4fR z>NOK5>Acy5Au^8j`no>8n~o`Zei-Dc*pl@^l+3sJn?wXb$V`HJn>!&N1qJsAH)3zH ztMQN#?xg$`Wp zMO{wKerB#}gtmua8$drsn$I$rHB5H=FiY74viIF3`W~M2i;#K>6d;cN0ktw@<-g zsX}Y}Q@E$sC$Q_oIFQhpcRYf~Hv-a0_n~=4%-)YpL5Tb%TW%*taa^scge5a8mI7MEEG1V!io`re`8jw7 zSU+NV^CD6lozrzFt>RF5LF9-XVD4-8y2ms+#A&Y9>rh`M44=2Y(<9@Eg33;g7cNvi zR$)a?dK;(5F|Ao`xiJ=SZ$#cs4N$`=OT#-J?MHv~i?>``2$*T@rf0y@Kbo5xIT<~$ zd=m8CP|WJ&A)drz`so8yI)UXpp^*hV1;`~?w1%Fw5Pok?_e`X$x?$}&Yv6Hw{OXK} z>1}W%>9O`pRKgR}1CcS=Ft;0z#C72fSQ(L)geyFcQ|(TNqNliQ?*i@7F3PBdG;E~H zuTz6B$4n|3fIDx}*2`WG+!l08OSJ%`CZ2pSw~pPx$Nxx8(4DOKq`WnlXR@1M&{CoN z)4K(@#n9jwShTeOm2$=zj>FmlnluLwSg`|VDOfk+hN@VSnE^NZ=bV?5rx739>Vx5k z;GtmKSR3olX-rl3kNH`NX=k+hIdOj71*`_7bSy-d?%B{)Ct@kG2=l~UWu_xJ?=jE< zM3tnTXETaONm=2^2j#on--5qDrd^bfKUti~>d*v&LXGc_&ZSPKvECMIsT~JUcB!-# z81+NWA=ZW*wVfFuh%(XKP7MnY&Gm!@0_E6Nle$6Svh;qC`{XElnF8ZMXPy&1@0Wdj(zyYq%yC9U1qLJPxHZ^EXu zKA=p&ZtOV%e}--Y%0o=M;Cw-aGzlYYcX{#fMC_CugMon{d={D#!XM~dy69MKzI9z> zq&!I!yXr`ah!Qgk>`v#SlobzK=pKB{Mq{)IDfq>tWK1yl9-ipCtduj*#0ut4UbxPJ z?<9Uq2{}FEed&UDd%$+a9S`l)=s7j4{M$1Zb+w{n674TE42LTy>v>XMKKb2!tfRV| zQthn07ed*W*s22vvbL)>50b~4Kh4!9cpl>kF?kcZAJZ`zw1`+$KInzM_x~CTGU)s< zRQll#kZQfrOljV(nFJ@;1!x!o?(UarIH1fbd$5gD)3pwcmq!my|9mxhXu@GoN@M+i zH=qu~l&=v5)ZqCQr#$kg)aYlb)Pq*!fuVe>XH@)#1h(h#i5dGqkEQMbDp7!I0LLq9 zQsDsVKA6-^X>&uvZ*TCeg@lA4_xE`QLfAhtxYl_YUxX-j?)=$VR)BQvrqF4^fdh~Q zs3<{GuRvYL$(L;~D7xVFaH?T`!wlHf?!9KUZUY*GGAH$y{M9(r0JHB-2D)^jh29`l zho0%K+Ht1F9vK*yX!PoM&`R<^hVrjUiH-@0l5#j550zrU(IN!-Y$Ub=sQBqB72u|` z3~RfuZf`ZAilU+re@|k+aCw#7FQQmapG)rDb9)M=xjDJYZnZy3>SzHYH{r)g&vC|d zUVu9GJ@kJ5!jNUBin2XN7Z#Ijf1whB)k0a%G1XryX$L>*?`!`xKY*AANR#Nt{t{eB z^s4yI2xF#{F)E7}(lK0fhBskmW#TUh2saZ-{b_%%X3_RZyFo=SefEcxoI4^GaFAqh@n5PG93w zUf)u<*T>jIAv+NUTL-WFh2b>|g0D3fdCk@zmaR;%k3eUwe|3%S654X>?j>7u4Js^oV z*GSR19y0jE&<;(0d#fGjt=xAcocvHkYuVv4Qo_;x23HpdN)ya%Q~0sIgi|ecD3Gur z8j;yg(WYq$rB%-gXOX7or9`>_dZ_q&f5gfH3cV~6_q&z3yer9L0MttAR?=hRsIhRu zwZi-|Q10 z-bsJZd6T^JJMg<0sK4fUZ|5K=?Yp7JUBa*&E4g3^F~L(H>e1Faly#*vcGb=GA+*lT zcswWRWASUmb95(d_5ZImA^a7b5MG?2L1vdI&3!S>z$7?LM}>}tjju`POIy-6Ffd3W zj6ayi&IFU|g8nWpT11W?9*&X$kCdYnnUb{Z`6H_!C#VMl3r%#W7NM!XSqoIEhjmOn zNKO`PKWKy&9uuc3W;gAW29>_;e7DR($)6HCITXnV3WiVO6bt}+tm6@5p+%%|k1CQ$ zwn$&H(#DRN<`NR3g?4YSSmRfz?gyl!R?n-KF#Pu zza52i=vTG&7h0Rt8>=)3x0~UYHE9DbkN+7**?jWh6ph9@v?eCMG-R`}%#jSvHN61V_{YsI*^bOb!kDw&36&MKb?B((FZA-K2z*l^Gc9 zOHqlndwxsXscp#PZnVOY27@BDM!Vc%&OnFhZcOh-aF2hJU02Z3Zi6PGl2>!b|J_>; zOGSt{3{mEX`j4lc;Ga2Mn^$WCkmm(yC9~6M=%7tD!wRz4Tf6kQhKEUQGNxV95w6#> zO#}@`QFZX{S9{7FcFPzB{!j1y{ye!yzmjv)o} zHgCo0TQI_peUjufaWqAeaNsUInjpXn?OC5-(oxnIeB|r*YyHt`;Uqa9E9&tBcF`}- zqv7&mS{~=J?;#xVa%jWA931E-t)W-xE*VQ89EHV*5pT7vkjb6fkBxz$C2C*!7Z1_^ zPEfWBrekV&lXx6S$1dUAjk{X{|_D#6fDRiLA{*8E!P-os^jbmz)}?91~5 zmD#DvCSH3E!Ds1m6q*Mtcj%TeDx+0F^?sru?9EPys~_$VrY60<9Y*T%+>3m_91yaP zfD-_9xw=xBpKH#sC2%tw!X@y){x2wTnH>2k|E|GNyFo+m0#Of)UeY%$4F}|{|4d>3 zYz(DfHq{3hrzVWfLAAKr@E9{v?S!;6El>gj4WpQNO-Zy097-Gw8AlRyVaS&+N+F*= ze}MM?^9o46&^q@PCZR8XuV!Q46O3j>p(N&^<*-3TU0$J|J8M0!7N^ymr@7{=dNL64 zK+V>@x0)m#Oge=nOIY5_h!~?uJ*YCAOsDk_q6Lj;=a^h~g4gX&KJsD;#pzjN#tgAM zld}hkl9$@$mkN|Vk+IeIq*6Yew+}$Llc|Qvp}T@<=JsQ-Lz7J*9-N$^gxi0bw7H?7z~)93V}U zr$SdzReiS=j32ZzPoqaed=fX~#szD?kUrDslQkA7G@UQ$`?dxF|D&sMaTcUBQ8b(8 zB3QXAeI!vX+xCLObF(+(KRisBiDs2bDb!>QBJsyaD}|(%lZ&LvwDNFGGc2$uVpbw@y90jF%8I=m^7-W~2F8?ja@fk??}{n9A^kLEy$FI}WHe)P*nJFN`tP?Kw_h=bzOvt#SkM!RWn@1Vwn zq$^3)SY@cyV%4nO3lq;d$AgnNT6y3XLRMtIPdxZeH)+bw{0DOjn|ZgVQkfW;sW zGtJgH+R)q7wCM_nskz4g4PQ0t3FQZ9vXppcW@k1Nw}afAj*+^8XmMr*s|1d~$6st^ zLV1n{p93k9B>H!bF;ihth=6`7hu@9*V1&P0HRm|{cO?Vq>M_ZG0dAdXHxA5v7m*!9 zr~T}`*hVM2cj8G(oP=AvWFtuhXsPCDs_3Xk$1xk>9tDLqV#Pd!wC9_SZr>#xunj0w z*15`^cz+~u($b;EBCk&8hY5J`c#|@PjB0>?N|OD&nt$Rz&kGDfwP0+b(U0J#li1OU zlXs0pycTBWttvObk<;tsTuWD6Vy4UImg}lkG@+I4s_p>@Btr)e*wA>#YFv|F!#5@W zLR!mAFFIoPOF-wgBD`GZ6@SzIKD@a;@7R(~Vn2A46kL0dgp~?)eH{G75Nf8Nr~fIl zPl_SkxDO3Pi0CZgUoddr%|jxArfDr0wOD)4&W3t?{O0sKjj5>_DLEtbYx~%6DY?(7 zvdk`r^MoCQt7tZ(AB>y1ysnQCC8?<)VU#2S6r?sEu*lkd7+f0>dbZP8nz^q& zG!Y>?UcVDH{Y>BLW*zmLQ8!<7;iJnV4MbI-MK7%L2{k?`fV*qWa<+zit`L2>$>H64 zGZKa5eO{a|7hN&+uSc@@GOI9-gSdToQpZaa5g)b&ab?JH-#^dmALR3IX!eCcSdJ|+ zPEsf#0EoHR_+}2(_1I!~Q9$uZmsVPth_<&M@_CBeEMzKSEgGWau-M=bl^y#Gw4+VS z2I^Ytf|e_x{e};*d!`Hcx##8u!L2WaRWN#@^atKPdMcu9-(P5nnUNJ0a{Xe^-F@ST zzW2~Nu|V00?FVA#CRG9TK=1k_qLY=jR2-s&!H^#ux$;+n-=TgztfL6|DvF?9tEBmr zG0a@}Bt`N^70(Q7kxw#gBKIxb)C_q0MN-Z8!6ZEIgT(5Hj~+b8sRVJSUG#1@C@8*6 zT^DbeesM%TuMJZKI{0Q1Y~X@o`XNvdzBZDS7!?5o} zAzlUgd#Kgy<(s6bZf#hv!yhlZ2jrVLK*VORWg{fIh_a?zg89VY+-eMeC?(0#qia;1^ni}yOfod&*Ki5Mzz zQI6UP_vAFX8{$GC>5(bpB?pX^K!a;9sLMJ>RA>fEvPOgWzA85> z3G$b`q$vm6Lo_EE`3jxUQ;4#m)UNN9^|E5K#j=|P~~~U@8?0VT0$?YSJu^{ zHc)uu{<2FfV^@CpxlFQFhCW<7wZfZ!7i<{axH@XBn(q_Hy6l#CQ-QPGSjtdl#}ZkN zq$k0MmO7Xvon>1_sIa;a3Xdh1EY<>#8;rPaW~}6!ZnJQ zy<$WmU!j5%86W&FUZ-3mLbg%_TUpzw9=n6=ufbsdJs4_%mz8+Uiw|t-fYT`1RRWx_ zSyL@YSB?qzMt?@hHZm?_%3}h_UHnHWYt~vTz`cVU{hJ(cvD*7E5W!SjQ>J+T-Rq$1#w@fPo4d`X?&!HvG?R9?> zIt4&p&A<@TUwHojn1O*M1%RmD7Z6oh0=Uw=10DIkJbT)dOt|gT0+yD-FFm^NK_K)b zhoD*mCI55c`{U}uVNS>N?U{2OnH1GW5RnOk(}BD~oSR6oN_O-1 zNbXA^=6U%)397#m^`Iu}@aA^UB#cysS6dsq`-l!)%#bNlhUxn>9~HKxkUhg@k9$(V z>EPy9*e>qybh8>1#c8O&=dkTNNu|jAeLP6Ku0M&m=rOea%G})8_~2yvO8fJmc<=1$ zyDB2V@aUR~JgPy}RzKhAI!%LMF-j7$Zgk|ERU-!nl!t8Ovv;wdyHXLoTux&@PGpBi zH}ba*Lfv`v%*`cIg|a#xFA*wy%pNUZWr(KwVnpibeh?Cy)!Mz3H8ER=vfN}7hkU$} z?^KtP#`dImSbsI&f(XkAUU`-dj|mqxHib%<=^Feknp#owQXeh*7k`G8SoZDbJ+5ou zMZ1KS<9&`h3AP{9z6m|ngA@9+4OMiCPY9VWELU)(HvH1(1 zkk94A3YPrTI3+48$6cKqj1~TNL}R6HuBZhp1U77@V7m4buFM5!S!|~^W0!S{4*%>ZHr>yCmrwk~`+zPayMI?29^!T5MmgS4mvLq!7{@Yi#Ki;Ecs$4GxD!zZQj5|Xf8NJ75H~h-w)2Ym zu|1Hk(f{?E1ml{`G*Ce4S3yU3f{40#7k2+cMc+WG)A(tKksD`~Q!}?y)8Z;%2n9@+ zN-O`@3m~Sq#t-D@@vooHa^ba&BjKgbr{N-^#Z}Zuyl$NWQ&Ume^$4d|2D*kdzMq*s z7|GO}T#go65PLvE$lu3w<;c2)jK-jxi^T~ton3#DY`S6G1Z4(0I#_UDxdz3hQs47l zeRkI(d(1qZ9vgYPX8*Kdcp4tQXxc9s+PgZ3X;eci6%F^{^dmCB2TD#Nk53Ow8=$4K z*091A)Ox#}!eeW4UDY1KSTOsW&EP0NyqojFvIM;N7W35)ksZ&kB)`Ye^SZhR=U-O( zGu&LHOglQ=Bi+sW4(KmMOcFd89Wa5yV1JY4w&8a^UBikEm>X@OVSS-skfbEH-ZRy@ z`HZ+?PV%h_7wFv8voL}d{_Me>!k`-qUFRoJ5CnJx6>V{%7QZkYbqw<`8B5et3#PZK zj`*KHI&Is1jM^E)GD=%Q90`)7-y9Qy6Lsv>)M|FYP5F@(Su*tz;z=1bc6TNlDSFfS z7UE=x7m6euthwz$hndFFO#KEXrgt=X?7Q&}L&42a_~sa5@#BHtf$Rg_DFtbfcJh(e?isZ6C|sAFI}(yc7?XJ%w51TP z)QF$hpo-^UsIhm-5mEGa8Do}*rYxaU5&TZ39-vYM3Qv3ybh&G;)YtvTcjIQHeo`(2 z)aaaAx79|gB>`s&kGSnxo_@Cs1ua8Hm!;)tyfhf`K}BHxkeszEzDMIQ5(Di@sQK9A zxRPjM$Gc@upKR1Phh0EQqkEp4Pi?L{cQ`OBS>ySHSFv6XW#GkUI2`R;z`M}hw?-_B z$Y54^KNs9{8mFOwpZX3#__tztlH4K~yC1%IbpDg<6@hU8=%GW*^|7;<;@+5P_D*WB zbTm%GLuDvXV=4iwASxbs^cLpVIxcz&mg;4X(-* zipk*~P4^ zp!@-GomET>`^lbck+I8WO(qQE@dQt;c6-EF%#*&@b{`qxR_9xd?PHG6J#V8JwH_o>7+V9xlwE8i`aczPI@tu*@@kjp6YTv`AWxM0X$izp3q)yH#3_ z(X2)4oTd4N^Q-ZK7UZd00hHSJUJRV9GeQpU=9a4TG~QvqGy_p4awm79B~(DQB_>+` zr``f=$UtL`vDz2@QH`{8*DHr?dYLENV1IfLG0>22Z|F}l}i2>1Rw9#=IN*ll&1eGNVEc*gF;Xt6q}Fbv-tI-jDSnF}ijqUDsd3_XZ5od&i{7_K27F=m_K{;i zyiM)l$)PfRO+gnVrFKD_JgVDbstoiR zxX@sX>CeZy{#Y1xin4r{?C4u>SNxJ@Vh)u&6$p$83mKF`@%t+aZkeNMYA;s(Tplux z*-)3ywFWBgIKMtVO2#eE`z_zkn?hJU24Aw_r{gA~?C5=?{OUDST+a3b(>Urtx`VQ} zidddAB?jZ$5meQt9$sF?|C5c;FWo+`ij+D&D9{iCT*(>~wH>UrqR}tZD0Y5>v&1dp z=Dp>L((=V%{7nV7gq^zbBIlmn2lWj$pqqXf&ihuwXyu1})=}!D;FVI&wQmisl`lD% z6Ya^LrrY&XWrCG8u1EiNA^ru|^~s0qI_EWu9Os+HCOf$aWe@_*ZbiI#66L3f5wQ$I zxk1CXR2GTsaPX)+ySDgSr)?UONov-~7ttV_&A8&W^43-_*SUjh^(G19<2gC7ia=?F zwBDy5ED^GUOe}M)G9-s01H7{WqAdCAn@r#Sj^ z~8?Pt5fEw0ynQy<=1#I(xtavNfka z|6n$xl_zOHa;G4 zJNXr%D0tToa*|D9=y|-mtegZ?f<9N%l8ZGaVa4W`y3SE!tt?y2QqXYfw;NHP%B9oByp7HEz?}o? z*L^Wst7S>PVlt~Mz4q@M`*B*Vv_xB+ABPUdbd{6X(H8u_yY(br-@y@e%RL{X*ANscNyc&sh&FWM%z16krcMZY)2d zJ1zO4`g>smlMF!mAi*h&A}^6ARDWRFGfq*RmSjFg`TAfbMuMg-3`s((7UP<-$L+mi z=imdAFNY%&RxklS=?q^E!i z1A#R@8AQ*nG(H|667&i8|MRe(GR(0wTdY`l@o;sFY#n~ZofL)aY$p3-J&XLEK{7SmA3C~XVfdwSqK$2XLIv!>@+!!m`rXdx0t4vGFDESE?FEPP}f{j#~e430bJ6!fVoP{xv zMB-bpQl!6ebU_kH8wNUIhSNZai;=PLzj>XziS;bnyMfIQ^)^UkDogCfeWlTRX6AQY zQyjC=egVIXOClVsxnBpiL)oLuwsVC%Zs1qG>jh&2qrL(PhR4oNE3-4lI6E>QL{#`| zCFKT}!cN@P*E`x{ubsn4*^`$Qb8i+1gLfG z-$QwL^~z;PT1;3i;nb9Z3Ug~CxmfK69l0ty;%6{7#dJe@qbW6n>%+PLf5cD!KPX-y z{iH#l>+J%u?RUg+_{{t5M43H-PD@hqvclHpoGG?EB9-9{)ZXV{Xu-!bQQ7Y`-L;5J zSdNdQN0+;gfo_)>;bS*Jkl8li#e@Y)Pl{92RlPve#03`dM)y$KXga=c?BeG3I5M>> z!3RtN4|S1Y_`E=L$j^U*&yto9h4g7s{S2&4~2uZg>&dyupIfiuVbkrn~j;^r~#R;Z?Qk635?6 zN6+q;Nob@bCiGMw5X8#KU}%f+N`0secS%f0u#V5n6cOfHA`=wsA!A}9Vr8ufkBt>p zQetsCUfz+G9q8|0ZaprzBaph}jr{G-F@C9)ekx=6>CK=>qW^F|@MEukFHki?;W~&; z--XQ@u<0zbtkOf}QpTTa3q{|_2y7CJjhY~ty(_8&C_QNTleGJYERuQ(Yq_!v58V$a z%ayn%<>{x4F{@#`nf*(friub~hCgSeB`70rij$CF*B}s&sODyFP->Eggk)kflC_(Y zwvJBZ_2Gia)?iHFRMjTXCaZ%dW|w`^CVQQK(zBDD|Mr+n6+2zVmM+)ItF;syC+#vH zOxp-A;%tJKfuQ3S)tqJo5Q#YjmxpJ;IxJq|JxGBh;8fS!P$8s`NCMIAaSs`>fx1+a?0 zb?J#}gHdEp;1p;WVoTJ%uW4WYE?l;5Sgp%~_N}}nqtwPFVU;bm7oT^&ss^>o#KEsT zm(e3Nazb`qjWeskV*8m04lcqO-fyDTus#VF5g8O*#FTz&(r?iIpgj}bI{2Voz7`CB ze)T8v8T%RYj`@)toC8tq&iU@PtMku5bipd{a#)EnN(W=nt%`G@v@nPwvLst|o@Ye{ zEtNoLlsPVO)*=TZjNlZpH#w(m!0kB(kG_rHG5%63BY57<9W z>pm8wt?^Tbdq+|t)phUUAeU53q05aWzt-Z70<>ckAW23}`?;c25z@V0UP}lAJ6l6> zPPZrezuMdtQG+GAFT-|~RmXL~2_c05Pe*}it>4M0VQKTvqycI(5)XKIA3>58MwVH9 zTsSA_{PKJ*L01=HNst{OyBDf}bo;fX25*6TwSo?ckMVRz!cTih8iXST${H_1HO~YO zep(HbLrcN=m4YjWB4JpK0`)v+W2-st{4~vfYkm69VAwPoNhQa(}-yM`H8O zoR6OvN&sI@v*{7AGG!Vn5Pzhz444XAz8i*AWLV#+zO_7f<^^sPl!_UX(5xn`B7`e! zDZLGIEbz14ZMt@)`f5ax*|X~M#=Kv8sFI>Bkl{d;k||0Kl$iXb#FVB~H6jO;LPx4r z-OSorVhV`}kzwOeat7mKV#aiLlN|j5Di6TA#hJ9oUf}QY%)a!|6w)d?+%Jrzyq}fT zS7K}3P`fP!hGYU<)zs&n$l;+;K2kO`NALIUE}}@eaE$bG()m8&#l^4ZdcUsp;W6eC zlAO&Z93MHR>wJWt)XzV1{nWo4Qf1t0g%G%RC2N^;pOxVkX1`hl+u77#xmH011k&!ARW}{`*&iJC%8}GkS)pcJsgb!Wq%rK{XOOIZZ#sD`SA_#NM zO1m{1txx?PYAuKO*Vj?JH%&b?MeoALMh7v(#l;7Yky7E`^=(Urly(|Q`0Vm=8}1}{ z&=>4r<$uZjW*!E{iuz@(^nHT-(>_%RNFezLcp=fzRRPE$qr^slj&p78YiB$|fiuUM z{9!)$S6_PQsy{E#b@Djvv4myLf1UNNw6om;Tw6=Z=k-A??EwB-^l{0h-=Q<;EituJ zQSEQB9Ae&ILVRAv#UP=g@yIda6O;WkLnP!F2|Yaq@Ojw4u8Ou_k_x0P`gHO*}jTqa-W_8iR=%jz>>3F^YQ9ZyK^%dr<9!}bCuH2b? zIT-FuIJP)Lckp(CHi@c>|B@74(9a>4c`4vmFz#@Y(``Xs7oW|A*EX@XlkVZX#Ztti z9l26nss4+v9cxxl=*S-SRH@ZXkYJisssLX_#*0c}&5ihWwH$Ww>ds@#fPLYpr><$< zoVAA2gp6qg<^RXnJ0iy1Dd1G=^1eS6Np^Vl?+liAqwL_vf8FQ~!9K}b(H$}#-j3zb z_R;Xil9I?+^>->Jxb-YgGse_x-hehDVK1+bM70uC4Nw(nTDmpAu~J=)B7I*n{J(Pk zZk{MEpD{Zi_|pBI^8@M9NPKAp&-89sEE65(vAo`zPz%CDbA0oTr&4Lu7}t*OmmK~# zJK16Bm~N*up$ah0Sdz&JIt| z^gov~;OE3QBlV{^Q}C@P8L9QZvZZq_AG2AZGF}X9IPnEiobZ3k=QlD3@H=-nfjt59 zZ^Y%ev9&#{HlMk7DJqGb9C<^|oIFYmJ8O%ZdOio{~M=5^-CchdQ+UI}Rp*aPzPwzo))`oSGId%zFwSOKC9hdxmE= z=m?PPZ9PtH^0>UfT#F3Huz~%z)H1*s%K?(I0&K-{U|e=TEHC!^U^?)-&*kOc1ON+7ezqp$0) z*AovsG)TTR4PX@;Tht4x8=H!$5X#xL{+;KAhsu8Mi>;CWN(d{NoJMN8Gr%)M)firK z>;po%&*3Nlq@Hd1`*oMVM@^04o6gH4%OzTT8VnLKVrD;PR#Qp*Bj*}&K;u6L1uLi! zEBA1Zr|OUM)1Gn z%$P+_A!UocRL>Q}ZtEOSnD}yL?*djV$pJ~ph*w{Pi27B8P1jx80pgr;=j@Y388rv; z4gFtXPD0;+@8F*Ps$YT9SFQ~`Rk6r064s=Jq@GmgGEw&BNpq<&)I`Zr(p;MjVzeEl zfwNy?*&Wfh>Wl-#hWrP`$9>%-fBCRvyC88CZ&WId>*4vO2Ea&4$}&K1y6qBO5*jou}P9T2saq8C^WF4lm=xY~TvRr4a@$zDJI3VaJ>$n(Y38%}(#h zNjU3~Gc?Px#Zx`mT`zg!R&?2_;m$i(%0KAx!-H+LPVn9AoL^kA=E-GyEu;BzB5s=S z%ADV9j>hp=bg|9@5#0kzQ0(c_#L)bGQKRDQa)$73VN;)6@m5)Fq+jV}3MF5goGorRFcqqbrZKWNjyKu1LH!soZ=_+`c}&*UutC}eHfGJ~CLl@!^I z168rJ?&<5?xQV`kQwdd%fR@m%TX`)jTA7(`IE`E|v7~k?dUR$Lf!}nnpmKe45jj;o zWxw4@OJXNQXa98SEml&b##KPYyjPV8ealRph7|P!ID3))90>uTw@ROpnMs=>hMqWt zRg>EAD&o!d$z;%Fn+H^^Y`<0+Uv33zPktckrT*)|k2#+KKO4EZ9}NL@m=Q!7R%BNq z4>D>h*UpLMsY^EHt$-l$kthPbsknK?pA8*-vf$e(7!FiHF-jCCVXN$5YLFhg`H(l| z??grQ3qLN`8y&5Y8)1uR{F~XuQVK(Kn*j1xoBa5zCn>pB9-@H<6;!>wuwR#3EGNGy zK(X1*B-5NH#zegmNFQ!WbEUM1BK8FOSTE-oq6IKQNNvzr0HM(g_KoE7$T^NL$7?@X zbk;l{B!pYlj4fl@1KABc^@P!F!+!NNAg-#oz~trLe$sY|C_ zSyEB0(@H?XF`{#~<}?i>n=6DENtrwaFWZ0LjbCQ&^5sKO35{=id=nZ6g3nWF5wP34 z#>y5g7P1TgeZ-exTBmGjdztPxu5C5=!c4iwEXA&5s*NxvK0S zM)3Y*j-4jwjhV_YHMmM3-|GZ2Z_kX-t`_Rsj?zBML5(|CEH;|&s|nA(i zjxx~a-=}m)`}+zzaT7uYQ`#1$qxepeFm|Zhj7iS-H&#kCCDUY)QFp2`1(S5Q08tQR z^XZGTC$9uSxNujCG!3tOudN~inFh7dQ4DMN9UBg-Zk@7E9;!HnvE+K1sQ@&A|5`|R zO%INz167fYBC@t#tUyN0u$5KXl@DDlCpBqG|4uX)yK?(`1bE$A*1G|u?Mj3XgXc9a z6DILjEyP}!C?EdxuHmrIB5!4D2#RN3SmG6}5r&}^U&bpuDJ<)KmR^unV~!EK&lN%9 zON;Gtv)IuOE%fk^kz6gcBMkA|daFQr|W^CGwxllUmJAxt8R4r&IWwZ=bQn1X7# zs146(gg~c3EG1tiQYUQi2o?Q7I_P9fhl)0!RQTmY*|ugir+iK$0EO$A%Q;n0$<-*8 z;GY}KPWx)17d-_JZp!48YyQ{T_;)!>>*5BocI;#l$?jF_u@6P7H4J0E`N0dG|_K{J*|i!joi2Yxwo zrz;N_31WG%?#Lr+@TZv&IY`V&Xn+X}xnVDfOWbMj)cY13Hwxrc=Z6_if2eUdiP3C5 zIkKAf`^%063<%;I!LNcDVJiu1Z{BhA@|)G#z_FsiG<qIrn0j({reIhfunrv^GfRD}_gz3$a*@*6)Ts*I6=g(|ay5#U++f+$-Ys>X z1N;{<;a|8kTL}bd4+A!JaweW7B1z+Tahdm096%>JcDr&1{e~=0HcWJf*un26eNs{h zhAJz^4|9$B2F09%DVT%V;dV`nfW7}#J1N~&2q_|Gf3=HT}T1B%KcoAb9ro1!pAmW&cdeg(Po*8zY zdG0S+$-*Mj5gb^V7!C;Bnt9y)BJ9+uCR$j>iGjeWQq#qf?k-1*uX}#_5efDD7!l_j z&`0~a7I6Bm=vZWH;7}McE6T+hPSYI1Bpi{Ox+1E%di1 z)T7s}_`2Zg^iID0-aI90L}@%6!lmd3Eq*py4GKysvTy#(R|gPgmjmqJf<2btkWdmq za(r5}x6>;^P{@(85v&-@_qU?AO!}xqS#rJcV09*VB~Y5@(w!sEEGioX(ulP7@I*0A z>SQllYCr8z>%qCAC612+iybx|?7HSaac574-%jHTf0DWZPZ==j{a1MnZd_hAe9TqX zJvYuD)z~U_NGy!JTL_1B1UMe^B&=!`mP~*WDf6o>+gkVQ;6iVgIW$23|LC{=v(K+6F? zCsIsAb5QVo+Hg@ik}lp!qA)c(TVEa*)6t;XQ4x3KnTgN*@)-j4obb)%@Rs#Xx-f+F z1U@F{e~wTi11+`n`_F+wB#zT=zj~80>Yve&@iw5+BLMITazEV7u~Yfiaj)%a=%^fh z9Q}1G_{_j4ExTpV&qdR zbdhS5>`hwX5NinS4g5PvpMCwG9`BRk<@;VHUZ&1Yp+kqFr$PN&j* za6E17Tre&2eCQKmfOTKJkV%;?u(jZ-uBNjbpEBZYiRPL^p6LXy->qHIH_a7wP8H`V zgT4|_cz#<_lrq3RfPJW>lDmdx2Tq8~e=G^kC{=LIHPH0#a!~^n4{r;7JaP2Tg-Oib z{Gh`NFH1(5EJhjsa_I-~<}O`deTqK@H90sSUkUE}{;cL=W`AtkI7oc3 zx!16v&poI3M7L?8W;`rSMjd@q{58|?LN)sPcb222x}n4r0O2*bZr%O3)aih+>1gR* zN6i4EC0KEij?{=mNKB&C&_R(!Q3jT z7psX%o?7I6`G)Mh+i$6Si2fDiN~^1v9uVTxUr?syTY&e;y;o6Fqu@YIB*p}2A=gDs z{?enwSvAcP!d3s#up><@tDDyGhz^73*5ABdfxzhw0Kdgl7d3{Fei~cv!cBv0s=_~< z*StZYhe4fY3rgg{5c*W7KRh-<_36uGFDr9uLKQzoZAp!2O=&nykya6VJ>CG03=b~* zkEjyPj@7EHP=cVzb&Q3MkZ{@4nN09Z(%X7Bxm{%gF+J-N(+M>y4&-x-t@!gjKJK%I zpNX>Q2RbXtc?p~NfG84Jo2|CHC#!Hs@WN_x40(6A3RoG*E7m!4Ij=8ZIDUNfffe&p*%*8Orlp9{F~h ztTtb58FX(rSGdEVIJ@CU46{;uGZO$5xN4tIa9Jb z;GRwIHxxVWK~HCr_m2XVe_|UicXPspZVTA%A5BmOef16(+bgl>_E#6~A4Qp$6&|$D z*k&^t(fv&!T0c*PraS%fc7&z{{p)Y`L)LE{Rcoq?3D?5n>|tW9wQj0}j$! z&-0*U1`Wa>;obQ=-%T-ij5I%`Wyi99a1d$ z$UMn&O<}Z%-9@@N{Pf5U4_&9LK|j}AOVO0!i!GFlgjGV*$5#cpn-rTI|Cly0xJVY7=P{HgpF^7;J4pYFU3 zQT^82=;0?`hbxSC!}>me6)EWMN;glX9-mqi{T~Yz4a!#FyKWIbGzo7)G@JY=${xO% zNa4Up4(2OLK^e0=-g%m-$MKpH}A zS2t1q$MDgio8+;z;`sL!;a%q*OrdgIOXY>Gc>C&_c*&%U20G=02bU^AaOU1d ztouG5125uxX^|wcq8|_Wo;{9N3c*<4A&SOrjOQC@+&5b*-k*^B!WGa`@lpisI~CmO z{fUNs{j;KW61{|=VsMvhy@>%Q9<*+!)*)+8;Qz9Fx3$^$gD!DSj!BUZ8C-8qjy0X{ zYXyaV1B44IiZ`LNdE8!$wRAqB-cZ#QA8N+CH9LX3oOrU{QK*yGWHOwq-C2Cd@Owax zv(m-$KWz6JT>hrkmY1xs4g2F>mg7rTJNu(`Tz1r!>%mvU?q?9RCPt*sQvwOy++0GBX07&XL4fB??@fZv$r+N7|F=-A!VosgEYQu z)bOy$TrwCTX=oJ=VDgumc%dAYL~+j(IcQ|wbC15 zJ=*(WjO!f^iRbHYf|os&e6Hdhe<%>MHxQItV9LT!*@i4A3KCxF=-($oO!pRVM2kC_ zHIWnUFB<6wt=$V*@j^fl#7r*#pu0RDG$5R7FB3XU1~So1z%CtW?HT2|rT~3shewU* z%qR2Pq0=DebHN$1NUH^ji#`bXraEx>v+XKj|XGVABBz2g`k{T zSZTJrT9revFu1~W5EK__#2_}NhP?CUEmlUy_KGKU_056p(&?LUQYb1?bDClGPC?-t zncX*mHoma4Orc9N*8a*pm%>YZsA@+$R1~rdwHej_sOKYo$pU!jj(Xp1TtC3Ck3K-v z^{|F|3~sNx4Q?-UZ63<#Vy9th$p(dW0SHKID{=NPW^Y)~>WuH>@6t-=2%%F!@7vfv z`J<#vDjusE0)s5nw!U;7j&tS!$w-IW;(s_V>J`8|lOh#W@lSy8+)?S}!Rh1u=;JCEHKng?&Z%n;nY1A+boy~Jn+hg! z@Y6tAjLnyd;)V+=*7sl$)%WE0(t1bpmHk9{Veg7`)q}>hzO9to!`FaB@lip}vz0J? zTUaohwy4sbdbX><{a3+9VgHkkk`LaL<4SF4moqObTkd{6xI+4UV+WwY>f6f(rz`67 zIWGLpOOULq@4WXn1{c7^N<|K~PabY_O$;$q*x9A&q@uP^{^whU2RD%@`{Z(h-ASl& zS|~o<8d+cdDkrg@?=fql1#Jxi?~T7dpi#lI zWfBfJm}6<#oAa#=xlr)Yy_sv88yNhR-575j3xQ||Kkv=+e*w#dF?N)sQieH;i!bL_ z4NM4nrwtvcUGyq#2MzDrmc~>!sFx)!7`Jk*-F>lY8RLff3|;G}rjBvAm3eeG{2w(d zfb!<|^u|7KPVF(1allehQH@EH>0%Q=CB(sIBcWzukT5mpr8kdh%xhe8ifzmT3S)tT z6tStYFXA`QP~>20!^fM8%xuh`S!Hcpg-GH&wN#BDY4s?P0E&NNKl)g32gGU<>nb$1 zoHQ=}V~a(s#qXvti4gAMv8jQ|fKf+#i6U)D*dVbCOjD^D%&Vow%S;^g6Z!XqmYR7? zk(?wWimVJHz&l~a!j8uvgM4XhbVDA>o=)Bj0U}NGr%3akDgAU@+bAb5U%T!fhUu}W zR2{GpMry%*yt!%5R3f8K+Fv7cVRLhnp@_6h$(4Nm%rSM$eo~V&(H&B9{aEj}$G?vd zt$qT1-(eFjTNwYfcw+yFcj7_xZTeLN;VB$3~~ksr?24gXhA{GXvZ5-YI^_aX||7CluO zquGgF!BlV-@QK3G}8;^G7@RssfqnJm=N{?!g&PU5*9 zzRv><%UfJbW#s|;CSMIIAv$bUWlSlD%`x8o9sY>)Hh7J!kN8nr2=ykNLu{i&_8S9? zKj*zela_N12hhA&El33oE=ekc9#iWd{D%wc4Ii>{8$CAA^dF!j^9a!AGo#17J1FMH zr)fuxS8-Q9Uhr@6<-4F@?02^J)L!*&uPR!huSSOz4VTuNQaV=O5;Hd-O+X+<{qw8@ zT<-AZBN=|7CK3Sa3;)Liie|kD%T>8fR4RnIFMBwvWBlfdbHuv?$#MH<*S?M9pVj=k z;Yc43Cz6F}md?YQ@IMdvlGF8f_|ryngTvEj-Hv?KR>NAlf@i4a@|j<%C;O%2Y1a;x z`v2@-$`a2t<2joD>fa}kJiVZ^#;?BaaXFcfjQNJqBhgO@qD4ajBS}RlewUJ#5&q;* zBCd_xi%dxsxgH$+^L5x;v81m(rnJ4p=oL&dJ()O=&zt5uA7f0~YFO5PYy5k!{FAT) zB`R~jVxN^zMG^S)F`}62T|I#I3Ie;EJnEV%=tt;Wx(!&)jYd}=v*XixyLQ%Q|E?gL z3;DSSPGPqLZ8N2Wv$QWqykS`sIa8Q3DuWtR0InRtgb^y6LQ<_^)+yRH=_D@*ld(o)z)qh#axPKG;%RWz-LxcnAN|$ z*nNgN0p27fdn6fQO7&YRBz=J%WprDC4Gpc^U=cDtIcBMT*k{kUaeO|Utw$^itI_tEVWI)b$5NH6#Vf9HdbUn-XIt?ZyF#g?9C}iNV^HJh~1xEOw81CD9k3!bx9pc;n zxUilZ5X}hXJ~atfj1#QhjahsSDe%%3?w^dpb&@$y6W+NPv1Q}URrDaEwxH3WjNeFM z*hY#32+(@a_WytdfGwAf;hADTu8i)yq6~&M@_ztP8W2#{N9gYv1s_COi0WNkv3?wN zGOiKU)nD$wtxeXzSBjRMSqJ(NulKv2DAhaC6pSvy`3zq5Y_t6N70UPh0$agWH;S3A za!q;9s7$wkWK;?w&{RW)l6>4LTbkIw-Dvx=eSQryc@$(aawy+;erv&B=uum!(5IE& zsC#vZL)?6Tmt5G95|&9PEg;ArB^};T54VbbEnEF*%~+St+w*)AzU=0hm}CoIccB6B z?~!hOIDJ0teadsCU2=b0!K{d7Ei+LYq(4bHBDtY0HsBj+$%GF6DBJEQXb>b7G; zBY%T0S`rCG_WdzW{VzzQS^8*LqgV9d0g1szU3;N>%I55KPp%-TEk7ZQO)R1>;B=MSy0H zST9BN*<{KWVFE0Osf~s=1`+y-hI__;;I)j(fPer^%HMFwrx3mM+h)r$KzI;%4gaq_ zowo9?lmD zXEn9AR0pRXiK&GM!QZ^1Vjec@JwE*D1igmBc}wM?UcLFU?2SOh$&3PC6W*Q6rE7M* z4VjPrK#4RA^M1KzzttIw5eECt%>Nm&%jCE62X_PgPaOAMSTT|hGLgs8i9v%ATkz;N7{lw{>J+66CH|NXietj%h;MOZtje^?>?_bLPIt)P%T+H(Z1R4k?#mg454Xanf4Ow_SJw0;M+C66a zw(qgJMBmvPVo-L8yfgfOp`t<}B`YuNQJ}+7)A;(7Oyy`W|ITjHUEe0(10=~Pa(_!D z5PZ%D<4dE4W)M=#AyAUj<9xkyl4$TVvd=5*^j&=h7ZgA>TS<1`jSX~q4~IS6QJG57 z!(SW+7eQZ_KIHxBq~5HFRWxR%_=)~-FN(3hg0I(nDPde7uS*+D`Hro4KVBBA)5zx~ zCJq*ShoHbaODQax;yI}ZWN|SOT4cu>45D51j!p_hqOq4G(ii4=)D%qo$f-@@_Iqhiy*^#OD7Rr)!vj` z2l0M`BxIZ3aoUmd5N4C;pLktY@1BL&e9&YtS~qRQ0~tbTB*AmZ;>F!{=4?c@ZTNs> zH2U7N<>MoC_PedO$IxVx1~f#>&Ni_ychPmLW5`BiV(sqJ7B_Bd=>IUNqMN0(`;uGZ zejE;IP`dL2@`_LvVwO&)l;|}cv8Bqy0R+YG4Gf?zq+xXQ{4{L)gAhP zt&PHuhg;x~4gQV?*`Lwq$9V^M0|Q~@CF>2}{}Gz0kAB_v|2rk?s^CGoPLf&^A!T7p zG*c!I$n>hBCmBw`hhn&Vz_=5D9Oonc7wfsSX%zgS7Y>)|qA}YTsUKHh#D0;rmr9jb zb+`aZ$3gnv@t^u==)W(b4%Ql{50yQ}aE(w5NPd-_uZ%5j$$v%OyP%zJpsw`YL}ruV z?^x?n0k(T6bh4$W`V-^%`%enrX`ZlAfJGgZg+KL*Ok>9NvX>5!&10|57?<0TpSMz$ zDlG)ek9&W_f8xS~th7d-YiXx67 zbhG1SFEur_CKBDFkumH}sm1l=DlZ?HEt@5`|J40k((VQandnu^8x8Rj@W5e?nW$i~edyBxV>h73RQBCrY=>5uf;oIFCgi;?fAp})iO&$uhKk*2cYU~06 zOEQ#~g{d;8|2MLw+B`(Xfq%8}n{fas*9EnFG&?8F+7)-c9eeNl>{I)DE}(c8{5K&m zX?|?@i!lF_%!Nr`X20q+Gc$3aCVyheO<=6tz@w!d>L?`1ZT*T&qjO0}`QH679Sqf$0+NG2;U$od2SULjK`}k87*wqJdF`gMXs!Cd>`e#|88m z;U|mt2HI0gnkcP2Cm8D>yM+s&d>ib0)GcqWO$?8I*8QcuZCvQxi;)*tcJ+7BuTXl3 z>0UJZhLAqM8?F9;?Ftwovef`ZE&*$U(u$Xun3y495yD~J;tQHM&4HhHd%Waq#Nn$rGA1mgo1WU<8B}q!pQWEdfrpKqP<`R=az6pD?+CR&5 zggm3R*!s92X-S+>YcKciFHF^&cT2urlS%c&yyF6xcZxlLX*p~4l_fCaWCe7<&4|Xv zrOOKcRNj<*)q$g)Vl=A_BW?GChX~vY|C|`b91th}GvVsJ zY3zxJB62alMdR`!as;HxK|JI!px@J8)W9V?mryTPozeOzr6$SQn^Pu#@scMO?zW*P0-xGxq zSnb|Gcd5{5F%fgtz9_<=luo}8>A^C$UUnfm6mT}C{U(kvG{h*)lJSE+$Y4UZ+5G!4 zX7bwehuFiMJ4!ni>dxd$zp*hx?%*h4Wo_>J?%Y_34f+JJ&z&K$^dr(=eC;{bbAc{U zSph~=lH`08aL>n!liZxe5U6O`(M9*%kg~sGqzk;rJ)6LkqkPZP|3JioGMZ6l8qiNo z-eOM>gg#-g_De$LGZwOBgoM7wYxqlaNmvzS9crdghiTcrXGfayA{q`@Jw13g96CaYm+ zKLEeZGs%26d?NH6CSvTr^g|`qVnLv&yz?JkE8z3^L|7M?W9hgz_GSbVl93rufCym= zNf98>k?)L(;%_IvL2$nac9J`Ba)=04;wx&8FsXz9o|mWKzQWy%xv5){o(fzin&u{< z+C`_qeU-Pgv6t<}UJlYCOf!k%Gi=yA?#G3;JUnyL*iHAk_{6ElP`ku)Ro8gfnb?RKM+Pu8c!$xYo1eopv7cTGDKMIx@e847&hY(!G$ACu~?D<>{#O ziF7V|QzRkICizz?!mefWztLUIBLVqhm?SX-`HUfn)m=Qqr7!l&VFX%K^!WHVW+pKt zX6!y?byS8|%S#u9B!cq5JFwSGO+gJ8%)o(4+Tqplw~`))qW_1vA^R*Hc;?RpKHSf8 zTvXHhTz~-PuF(^77ofQ+<)~z1@c`LqN=nM$lW?Z%cNcc_B5T+>Ug)qFC7%%f-i?+N z=$o5rN?3yb>pVPe4!2DDvakM5d7H|RS9#loU8yJEy=^JvM7GbT9QQb{y!ppw573|ixb)KDIvWTylD6^0 zM$j&MxCS|ci|MQw`{;#>0fN`ZL3f|$z4VloKOW|@al6Y3Q}2t7Y%1y0W^h{#ymMesx6c;b z;1dIT=A$HpF9Iv&^|j7Z@y?n9&oy!PadE-Rx-L|^E<6I35Vw{W=Zg@&77&j;y1Q!$_v)3_U=h%N(&Q%trH|UkX-Koa~2d^wNaOyb_XLjbDwLtA-Q-lK2*Y zvcaMze!uNK8_f8uEd~=PqJPv>RZBX_^51H*6rkOGKYS5UcYx*lai#BU~)P>IW{L{0)MbI4C`*A-q&!~xfIzRe_Yyq(#dGf8$^}^wO4}NfINUJ z8gCNM5R^JltuKU=26r=-xFPZpZRw@M?tE*dDHn-G{Z23$|9km%ytII)tR?uLRBGK3 zY{kneY>C8ZI~2s0z4l+J%VkdmpkWLJ_zKn2=Fyb`KYH@F5Dn~KId=F4aFNzI?d|H} z*fj_Dx89yBLS4?)H*LKQ_sX`v8~AvAW#+3S&$>-+zK0)Ku~3E*m2&Bc?!H)eTt_ip zQ#Uihwho69+-!}f~Ez&e(gj|*w+ zd4+NRQGX+Nn-Cd@Z_XhGTK%va7|LcjU*vn(QZqa*a<9~3ECRWenYjs^lKj0-;c5_5>RmLbf8pw6JSi7~o_6F)C z$1o%vlL@_IYxZ(MO|BFa8!KW@aTA;RBzU(rt_O#oY-pA$x%hDZLX<9395zyT?A+S* zb9D6Ed6;LG^Xgo$B*D9~*KM>3Mk8~Q-?!)zj+li9plsBDv=fUrlFw{wmwy{;r2Rg2 z$d_99$cOW4wl92F;0BAdnmX@sS-%aXBbKfzDvoG)xwUW1%7WEr>y_9DL%&t@?)_FW zWJ&X}1X)(zQTuNb1=@b%f9U}_4pWRFWA8M902r;aPzyrzYUVDWp(nqiyCV!h!@v~p zKfh~sK8pGhW7#;cgKIXYAclZmHRMl;6&tUkWghGp38i=#uX}r0tAh?ms{+HLx)-#p z)u!HDq^5r@n>0OGKFm3~f2Dcsam>4KH&kLXjc;0f8Ro)oW0p^4|3T5|U>RjxI(2HO z{DFVr0@fI<-saonlr`1hzVAMb+vG%A49?zNDo61^2bzaZw8>Xa5Xjvq$=kP%{~Jpg zh@5NruRYsF0pe)_T6Ro(T@e|K@I-eGpLk45|I}*@2jz}#{J>tlC~)w4SC3QbY9P9@ zwsU#|#G|d--}^Nx*1nG8S3i#Ej3#kua&Hie%n1A`>*$IIRPWsyt_ddKzDKUl>Il6^ z-I{g1dLAd(;xFHCOX<`lp5bS12l5y|eGQ*n0ii4Ba3G&N~=ery{-(p!{T&p@=Z$3C9;2Ch6F_Y-YFr1tROCAvV$~a2DkYJ zK#(!Pb6$X7aF53NZ)p?WiA33X3Vc>0VZ>-T3Y%4stC{%^X=jx48caeq0-!6^fW~^X z1B#x|=C%^aqrTJt^@FlnKv^DrfS3dYGtKjtch}+oUWh@ACwhJPSuED@Xre&~9*QcV z;_===FBS3h;47(sXSQTC&^%3ALTv1r(-D+a5cVDA_7+|ElQyIOJ%SQn+ZsMb#A`Yf zg=?_;$oA$omC%CU55Jc&WkXV%G=XTszVn4AU!H}bf1(XZE(R2GMpk3 z%#MEIBBu`9Zp0RacM>TiZ5uC@MR3~N34VR1C?fXk_G&M3`QaWj{*b(Lf3RG4Qz#ha zRbI79uE-uS)f%Nu{{3&w|I5+?^TP<@*#lO5+wpFV$2{)Gp-?_t#VZ;D?h3e4miGEE zG;eQAG6jZy=8uYY`i4IzCkPsMKlZAQY*!oD!+JPh6M4g186;48ty}egT7v0t{f}s9 ze+dMlca-4_xQ;A}cdTO(d){CllePpJ;Cn|;&FHU>_wo_E+n^k2_XvJt!Lk9V$d$UQ zA$AX!jqTXRx>|X}+}X?EQ{ay5ca!~{o_7$5uq${^Fum*%S$bEo2I<`aKLjVMonhY` zzmkySkJ==eDM}ZL3%TH5D(eR7H2~4_kKg@fBXS6# zvJGFth}j6%fE41-PpWY|&PEnqm&2$KsG6)LxB_$fj>_x8%ED=H@zu+hRJ){EUw6O3 z5FDjoMffn&!EjYZ6bE2&7u_i5N~Y!3?AxDkhLqM| zSN4yh=y;H;uT}ZaofLBEHcyp>b2gL{voNiKxNZqq!OT zySCl5zs=aD{*9d(Qn9L|yvPFs)@VtK!`AXN*YHQYNlPZs%aT4NP*(mH&{1R_+R=c%3q z>M{U7!P0D89lQWbU!GpVi$nkjT-*W8mVSqjRuDqEzd&jci^(~$LYdX zNiN7IiM*^&qD6YCUeP)7$|x~%Q^=iD2PancGzaE;yo!n+f|CJl@GG)%pE~(wM?c|5 z^|mL=ZQTnE$3lf&=cye-#(9nZN@3H3gf2`b6sedsDB=RRS*>>|CjXLhjSg! z_tZ4zQ|muvq!LXPvc~q`E~uTd0B2YDl~9u@^is2vFGMjt=nMiKyQ@;XL68RI+7cZj zy!S+vQMU|P-kIZHt7Og+5X~+M({3l^@G>&K*e*3s$;dqQ7fAxbI$yq{BxW59TwHb5 znZ%e)=RR11N~l!4y=ynw0w01#V-0YIIctdzXA^KMDX^TR?c7m?+pJ3 z@7xy!nt6;N%C!Ufag-?|gVVekMFmy8Y}-SaNrwYv-i(#)#X(7KMT>}HquP3({i8hK zMu3!qmAt=K;89cDLqnH&PyN-G#ro=S4(QA`cA>l_+a#YX_p>gC?6n z0GyuhYE>d6DHfB!!|TL3<7znhDz&6 zF;*AB<&p*;vdToOww4*EG8}Wl34o9(L2Z!$ZO_?B z0TZD)q{>pe8nh~Tt0sA!iUdg0Kb+QB`5G9Xgp26ekt9~JHdmRdty^HFFd6|J5E%W6 z^?f%2RNFwqFI3xj3w`k8Azor)V&we%#70I&h^VN&F%+U@GegP2?mlPf z2=^YI@&?P@>naaQ(!Sb*00|}(*v}Htk`W9ai=9;?*n7L@-_@N8cEf~$nq4LuwpXc*mBo~0?bEZON1*E2N2moas>`9ro(#d5-1JWV#&Z1Y#DNq{B zjLN#-1AG?ZC1~F9WSgqx6vNTdL1YZiu+bHi2o*l^SWSr+h#<+oqHE1~R=PP81(FI3 z%IyhUCDHtzT7QR3gK>Fa2_d_s%iYEs<)oo?79Kp0+oA6k!dT}SKG(oc+~?HHI`{-D zC3`;wtQ)DpMWacyyhp3bR_iaEgMfn0_NRM5d;CM0xh)**2ZLHCXF+8xI!8`gu6yh} zzY})=zJMxi$NN5-j*F`M(%cmf> z#Kx10Dk3VO(w6}$_zCw3D)@<<4?chhgNK$L0AtJm0h0jQ6i(@6GebKd*to8SPJ8~D z7~1VImDPl4G%Wl330)sX3SE8TfsNJT!x3EP%AQZN|jme@qjUnNxL@+$=mV`A0jjot+I)2S{}(34N9_z5d1LO_8* zj#b{0f8AsSK-z7ec+sDys_f(!0_WFG>D$jy8HL#r>o`2HvXvgDlwYVyhRUKu492w(isu{-rA1(`jAtn;}5}WZk0B8jwH`B%zqsRq<%*{la)}UKfZl@f%0zP+CBK7-4gj+WK!CN1Q7Hvo4&406_10i3;d4 z0Sqx@_#^7w^mn}?64GekIs1kMaQCc*6=^3m$Hp5LdTDawBmq6xMr9V$obK^4J z*f13YG`E?YeFf04qBrp@gsOT5M!Y_Hvpex=)-D$}11WI%AjZp^3Od6GQWju(3ubeb zSc^b%r}BV`UvWiAS1kZ&<|Mew{^QnsvIBW4#x5KeJXd100+0*qx;K=)cHXEtm@-<+ z?;-{6*CIXa(d5!aM##_-;syX4uaLr6wLgn`CW)TC;MPCA87^e(opu+*ITGv*+I1Wb z5JV?zDN=LP!cV;F2_HB4O3FoW`92_w85l)>{`|XMj%=e418;*F29t~ z13cHTlZh=e7kLz#;VLP8 zY={rJPBZPQyoN(lvdcI(oZOS#bqU7e ze6~ISJM(SPY4%9I;4HS3z}#fKGKqlER5e{ar;&`m^C40#IY;31`@VhN_O{A`CZOQ$ zu9F_Z(F@P#;lOYeX}B-OLG9KNG%yo3WwnzI=^_C#&bMW|1WG7DLCx4S9>5ZvCKqC+WtpgAI zT5|p8l5C%T7M+)(r~<0(f`EF#$wcA>Y%5_)_D5{iYCi9X-B=KaxHoz@0In#UE4#O$iO(d!r?|QL?E$uYd z*<^dnY}|Box3{+_nAtD@pA^Zsw~!$#J}VXr5B?V~@5f3D$y91}2d1u!+u$W9KL1)xVe@F9!x4;_+*55@c0}q2vFGsX>7Y-TRnm3T6F1g79_p?o5 zBxT^VKZ}&f=iCzvxPdvHhJRrXhNHD&DOJdtpa?o-tLvB3=RXq!r&C@QTKR3u;pA{DW{2w;|Q4v_#K+a|oK~*P0AY}$P za_q*4`+>CTHl^C6WM!H4mut2&<;*Bo)gNhl+Hckp8o50%zxW z_kVr(ro=kX<(4=^&P?PWz=XrM#GL~11mz0oa$+ZE@{LyR4&{<+Au&=;gEp=VqLWoD$?aR{A)Y=EqpFWi+ zZ%m2ThRL=+KPA&Przl>Da7&GEr4S7w=ipGofXklh0+%qP%zsAf>gobGqU}W;s7345 z0;h&*spQ`|-PclvtF<1DAmoVtKQ-ns z)YqiVUo78nT>C^`8;D*5yswgq_OkttHo5yg1@E;de3r@5Igc#%9c|1wuVsPZ`1~Et z@NMPsLrJ}|vykeWa;uK|orU?K#f8J+tLEiJ#Xj>X;9F&JyR)iRgU@h*4JXS&bos6M zer<`4r&jlZ=~3g|J@z5@b#rs0uJ`Wq(6D6sjytU6lh&%n+f~U$uQRlUtosNZ#g#Q$ zBy@F`8-=OntF5z^lB^b6Gp);J_2i|4g7<2As&7gvmL)Em3j{SP44NKaX71<=Yb9=7 zy;8he3XUlgxaW{2D5?tkC_$rWvj&%w?EA}KbL}9DvD8^Bj#`O z8=X1;%VV|#J6w3T>pwN>Ig zRdaLCn0zTXv^-u!Bf zzC0#qSAJ?EY|@&sZ?JwMzx-pSGT>%&Ev8 z{nRESaP2Y`RcugFQFl0JTWP(YTvFO#RJky=!Rhn4q=xtEoN0KrtQpe&SxCRPrcQs@ z2iFLV90v1ZFL;|_%1|!o1xI`LBF8#;F|opdA{$UZn2X8V1}&aq=RusO*hvw z*4cO6bHe*t(93uI?jkYlj$!igf^F&9H zRMKY2)8u9qeu=#_!}n_REuz3rnc1oax|NaX2J{Qj#AlKA$wcYO`>HMs1( z^(ChFZ}+9|_g&Yz?LJPgqlL;~>XYT4H|D#^-bUHneEB}CuGqBSofte+SOReZExMjz zLs0I%j9$LCekOYm;i4f*RVA{7UJCa#0 z7_V5InSKq~*w3`Un>iNj#?>#lbsZ3zIT?T74BtTCVCcK#eT#i8coQq=+jA70P^qL> zF?u(*(5TS9+FmoDx^Xx3wPD)jIGpG)aU;`vPpdxhl-TsK(UC|oeHwZ@&TCL=GgLfe zx7ZccwqkOy#+K0`ep6j2F9^xp$-w=&uD|r)KYZt?YfO_s3U&$ju?;3ajWoL9Ul}1bw3pFcy3|amL2coPu0(2cpZzv4c@|3$a>qI zm21Xrf5`6wX%DSg7zN*Y5xS5tbPrm4RYTTitx6oB{Aigi;pZC1>rOXR2mDO7{9UJP z$D=6P7SMZr&BlX9p~^+ype+;CKPQh5_$q~V!h3BHdw^`Ve}H=^r0xGu2-<+=_tUrd zpa+lWcc)s9?#+(c?=PAWw?UunfL6LX<67u*H!?s?5hlrGxdFEh(4Wp39jC7?Wb9U@ z_5?~?-$;%ucJ=a&f@>~_qLKu@ZC;{|B$z_#GgaY20hj40>qd)k{~I0S`6o%UPUqRrWqDlxCV|586F zu5y>yP9V?3(H-e3?om1a$Lx4~wZjhKXWeU> zGdf>s8^P|qVOQ`bb)D;Wkn^w6B)wiiQWUyjFl_(j!Thn{kjWMyNVhF|BAGPy1hVln z|4wbhWD8Bkt|JGwl6&AnCaE}9S9pHgei+M{s+iSeSx!bNlsI0;?|cfH@(sl*@jMbzqN#mb_Sd?^SSE;M_LJ>FT>b=GO7};s8HNgieSq z$@iR@cx?%T%UTG?+`$!xXVpwo62W!E4Vb zg95=ek(*x#P7f?PGbSgeY{c#M_%vLk8_+q2<`Mj=y6>=b~Cu{kV$q^N$?-N#2+F%LF>~6=_0Q*%; zAQ7#!pl9~_o%3huui}ihiSB@*_b)$*_M&7dDuUOU^xhIxEi$?vOGOE(4QB^*tk0 zIml#en@1Hpg7z~i7rmoc`U7$drum6kn*7I4Nyf8R5Q&?8UT(0NV6a=gsb?lcc!Z5> zw%)z?^(M_E-z+7CFtF1KrP{L}8Hx~OcwbNp9vWvCwyDCvo`da+{HT%39v6z{4j0r&=Xv zV(NZf0h?;uw3>OzOxlp#<-AO4vA$!%sdsM1abe3x-@q;-gK_UW`aXq>h+YKS34u+d zEd`6}6PzUkhH6lg+e^t&{Q}STTje+l!we?^W?QrgzIu6!y+iH>vAd1I@lG8rZg)s% zs_lK(-5Uw#x~(@U#|Extp8P9?p!jb~9biERbGy#=%r{D_X_4MDQa?0btl^n+2OEtv z&{bWJ5fZoDA_sTqgsxi+S8Z7GD6D+rKj@)|0QXV0x^a%Ez$};UELVm#SWHGzD4CX& zg8*k8fyDCxox-Kk`Ajw558vIEea0HVsu0{gRm5Rtt9A{G@9L$xo}eG<+L*RHi1qx(^F{u zu=5D&wc+!5<@*Z-{H18cj2{|r>J5iSYzX$#LZ&3`;ve^59@hxEjC|31CbgL9?}%C| z9s>@zPK7l8mqw7P7=ky8@y%!{0_PK``y50E357!n|$qxB(4nvPT!G*1j7somo^KAq#?^RhJ z)6coxp?neP9N6jT`kf%&9fBQhrUj1_hfgC-P;LJ1!E=p89{wG5r^pdvT7wA95WA>^ zb+H@O0|c~SbUQyPx;G|;pSzmw@(jvYVZ;{043dQzrx;r)bfBef_o2)Y)n%XCA#5Uc zwVe@btaYwaty4ESDj~1h&uBFT-jVEu=s#llp6h^OY+HQEAkja6{NAVp9~_H%)fvLQ zPdq~(UpfzeXnpv(LDaLA?K%C-46G)j+w_3(HmR)Zw+%jcuT!zn-U-_wiMZ=nUG<&U zpwD8fBW|vPh2h;zcnY5xPksE4`TJgYCY^H<37+oQ1kTq~R(GB0c3`*uPdIWJ;ViCM zy}#YrS#3;sKv_%Ctk@QY%&5O9Lg(lS1hJ^LZKyc!U#x)AgSuLo0saKNug-_Q@ZQs&yD(E#QqsS8S1n|Ry!l|P0!Yhw~pUR#XNGtGM8;nNo{ zIhOsz!uPVBzFG3J%^tbLk{@}QE-0yK$h}>@6p|OyPS6fRu1G$V{H#lfcLeGjxZtLi zU-+8al1%BQX5P&{;3$nY645Ui3>~b z1`+*2v}YhulhgNw$enq-9Wrax%!fRA?eIAhcFY(-bSE48&>rMS@x#Xwg3jvVSuiU1 z?JrX={sBMK!ehg!NjN8Ih~kUyaOZ`nk_s;H9;i}%zjLGQ5B9Yh*Ad8lf8j2+dEh8h zP!O~qGgf3Qh6q1Dg?>K8|AUU)--t@>!=)h7AH!58a5ZpSjC!}uhAM`ae7_mj?|+7g zk}!2HnQOTRP7u0(u0gik-({p)?Q*RgLCQ{OJtENCUg!AE=2Sv1o$t*snow_Mp-}vX zMn9IqQIRYv((K%1lk@q?7_6*_41X^%Q@O4*n}v7Y^BiR>^_Wyas`hvL1S9%_!NtAU zRfbcf8I7m#cU&yFHT=kUftnXb@N!v#2$IM50Vhdiy*279CY^DqDYY<+?Vo8;NVVIB z-36Bf?PsrLh82uI!8EvCPI!=}Yq=fv7?6~%FB_u$*pQ)H)UWZQ!bG6E&eSo(tW3Yq z3D2)L4gxpE3MJn;SbFsZpbP&l%1`0&uc-FrkZ-LHiQWxVyq~CcTjC7}6f++B*z8BF z>DT_;O0&x8`7K4A4}&iJdkMJsNgf{7l{s<{pL6I-R?G*_X(5F; z{OqiLlN`%Rj(7t(65kWWYIm|_+H_59@6y6b<~r^u<3Cxb1Ybc(H*rV$&gA*3cF$j> zRNJE?b+i2>;vwA|#FR?+g=;ug8cXGmzi%fDmYO}8Z6y^&LBRm5dRfo~>if`ECKX8M zL)WO(FD_}!HhZ9jq39u^zX?uE*Pvi$g&*n44ncntMw4D|qA5Y}`z(lx zhV~76GFfk0Z#QOIOyuGk$9osD{sb#)aLkL<27?G;<4+XRS?&rmdw$OByv~WX1@m>2 zm2X#^Mu_M9F2+pdGTC49nBW^v2V|#k`w|kz5<&|ukm|j8(1f4I;>fugUP|zugln*J za$))*#aG?8*u}iT`{O2ZXRg^UcAX1Ow1YbgMPrmosFBVeJ3~rV!Oyyf zD5LR_%B4IdXzYvWXL>Ll20ndAGTS7}HQPASUR70W3x37i=c^6-Oj4Gtte6G2MDaNhQd4S`Nc^?Wa zupeZRr>gN~!splawaj{rH@Q>QKU)A;$1QUK!Mu|tw*$PS>W+u&GJIOaJz$O;XS{vWRrZg|u4iW+vN}!7Ik1kN*i{Q<2$AVwt*pH6OV6tq$n1UvuV%o_ z6@{5-4l>DkZbL^4>dfAcY>2+Q9Ja1^_x)O_4!*_s{la0_H(nKQj+Ml35s+TC{5D!{ zD&k74q%>!ExFA^r6?d7b?{KZPI9u6MuwUs2NOh0zTLL_XF3joJYn@zwB!f)&5%{~^ zxI1&cx;c;{Y;|4oc2oRDBih!cnk-#;3lXQr(&*e9*{2ndur^C$<-y)pcIh@Q*A3-~ zZcs279gwp@hjQ!~;<`#}lPVg4RdcAwAo@V2rPtmns%pY%)&<>o`Hzq>e3p6eHh2HZ zaM#%vGc<&RDhD^8e{E2U4je_6NR>+HOw*@RKaB^6FX@x~ z`uK(%6n|&{zvj0VDCs3ZM^-08UN@i-op5$Fs!zqqzSl&L zg-gp^0xJNQ3E)r?j$$yCUFE+E6e9II3>T>|z%&YKPadOAff_zjk!4gKmmh=C>FgG? z-nj|^6}Q35_Q+i|MZxKp5qxpz(4Nrm4?b2quX!Pljvig{mv>=7gWw(X`!_z!5QOE5t31pWwmUS{TLtxg8HH6y)etc=qkHLs!?! zQBT66AdN+-h@uy0*aU#mq8-o0aZPOyyi0tdEdDvj$?QI#tMkXoL&^))@XJ?eJ&l*7~`o*iwjm z3>FI)ao%ncM24iFAoiGnIKGz&QhF)wZ=3I)KKTt^+-bXQUnve9d6=5byM+9;CT zWFI4ChxJck1`nnr_$!_WOG$lHcKJ&zpf<{Nm&XnrO!%v5AV+5N7N$k}3p%~eEtp$1 zuD=*D_ITK_MUdE^sytYHZ+nkbaK4kVCpNmlrb8*DDkl%NFe-%k;V@eYcb+u{ZGws^!DTW{%9{-!f&i)YP8b*+RMsi-UQjuJcjKR3UYoTx!l z5Za{xj3{(O7}>i@A$h;ikSCg#dL3p0>q@QTFthreNyW#fxcJ6h@ z6s4J4%?PrbM&a`WvRTM`>*F_!P(nTV5V^0ll;%{+X5`$x25Ac2yJE#0BZ+D6|Ig>OQfHZkeqEge4^U1TzR zXzpU6ktNQfXWlo?WW;Z3^LUnx8W%KkVBktdxR;l+8_F)u55sL21F$K@#$*D!%OJtn z)HD*ZVY+Uk#wWzm=W^5$(BkPPj#%`Ji8z*DI=!s2iO;xkC{3A zvjh-tG&*T(18uqpt4USzQ=rGRP>X^8 zNcj3XA_Zdp_yz!b;MmtNo|clTnd9rF_~hGMyxWZ^wkR&6(QKvay`Le&qVG1Z6>?bn z(kqUPZpb(hPny$s3;7}!=Mgc#0qIzcR79NbRZvT+@ z(ZY`YfJ54u8$7|4XkQ_p$ApO&8o8mMxTv~+gXB$-z-0c0#F7w7*D7*xb$;>uvU1-&iS1dmMfMFBakf~t6h~#2R>h95qdw%6Jg3OvZWWsbD*s5n z*lnE~OpN+z%5KZT>v}aTOsf)T>UW4jk+!hy5#(XECVw1!Ui4*a%*Hm=|L3uQy;w>k zYC`!i`h&}1_BO9JR5vlxsV_eVl0qy&4Zq#1iQ~N&viH8-x*EFoYze?E_VFpNdzEg2 zg^Za?ojkx+J14t(m7m_t=UnBx^m&rIsNZpLeks)zY7@F58Xz71GVFuofM4y;@EA3c zToRuKgXs{vp~6%|Ej+ycT>?x6Hj5$y9(2I7QZIoT+-^lMiYIHjiyQux|H`k?&nVR9 z()U$I-N0V0^0TumnF#`MF-`?vU+-YE^<9;Rl>~EYH5L#A-S3h=F7sWAEio^GOqc0o zYbpZLG>b58GfyK+xFNj*tl1rhmlCstZ#%kQ&X?29ZY@6ld?GyY=UZ9sgxnV{#htw^ zx~(cVJCpm*C&ZOu{eP;G21+D;A@`r10xdd0iP$96*FKsOI@pWTbtjVus@MeUGQG=5 z^FJK2P;k%^Q0vfr^`VwpF4Dg_eaN%}6zUpnmtV+kX5RT{R7tIHjC8F}r@I=A3tkYhCi| z$L;`Wlj%r{B@DZ!)8fvzRvRt2hC2$*WGw>f{yqqiCGo|U$J-Cvz}R? z4VYdvs(smh~klSP{Q1m`Ces!XDA*|9*@=s1-`0(U04H{S=Xk9>LYF6G+`0 zxDeR1wV%sgtdtEbIp2im=Wtn1$*v~R|482c`x;nJh)CQC`P+llrxA6{(5FV}aqEU# z{kK_RR^w5?wCHR4Z!5;!_r=@{uf*P2lIzfYu(-n-^I*SVC*`9fVE)l>MaTA- z@p+-%mvLrK8R$225!|gcV-E|0^yo5A`uRH9_=lM_-;_Dc1(P$K5Do>@2jpyfN9{8N zAt7jEx2&>r?JAx~v?EzTO}Vxx*4}6Y1)5K?zAvX$2nzm#3Ji-WkXjQ2oi6TIm^Fsa zkc_9xgXNOJLAuL@RCp1)Qrg?rK-M^S#r|AIYuO7He^$s^pgyhZZF>7i9G=WlVB$`d33L9Vq z?JvW%N`!tj)9Z z#%rvse$e$cT{kbic3(HXdG?uu%j6CN6^B{;-g60=gK5oh$TGu;baD``^wd&&zP0>$ z#<;K&nY=rA0Q7Dpbr{fEHm%#f!IJ7Wpr0#sssjDs^VISdBq(V90|jtkN11z8@0U?V zDTHm;VM(P^!JC_N*0@zmJHTn<+9SS-R$BSS=tje=PZ?~>d7OwFqShlz6N$E@4)AHI zTSo2U2HPC=$A$6^5|xlW9Bl5hVxvCh3rG(K1(Dv5^mz4r#!k;rz?cs{UV8Nvi}ua8 z4)8Ee88gA2T~9hzn}zPM;>YQB_}Pw|8sVS4d-k+&0pTr;mP^5(g}e!2Aazs3Z2P)z z94?xMgV@s(Se7l96^E&Hd-Z`REYL1(r!yhZvylYFtdnxK%RO#Bx4r^ka4$k_=_ z*=H4gSXg)IAdAF(;OYHsai?%BC2mYzMT0l zI=^mbW%Um|uSm~XQ?H1BRR^%C_;a1L20%Uz2%|G}umzo=d;eoC|8JQ82klmLBczkN z)EeO6e2~*8RMMxG8Gh{l9PQ-jj%77#2+eR$BwySrf8T!-IsTVXkr;OPn{g6fHAH8# RV}H=sJpJ_@I%tw`1uim_U_3HHt@*7x<3e^HH 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�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�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 ZItEWxrTI=q?Rg^v{z1Wkf#RyBe*r_efad@J literal 54816 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 Date: Sat, 25 May 2024 01:01:09 +0300 Subject: [PATCH 62/76] =?UTF-8?q?=D0=98=D0=BD=D1=81=D1=82=D1=80=D1=83?= =?UTF-8?q?=D0=BA=D1=86=D0=B8=D0=B8:=20=D0=BA=D0=BE=D1=80=D1=80=D0=B5?= =?UTF-8?q?=D0=BA=D1=82=D0=B8=D1=80=D0=BE=D0=B2=D0=BA=D0=B0=20=D0=B8=D0=B7?= =?UTF-8?q?=D0=BE=D0=B1=D1=80=D0=B0=D0=B6=D0=B5=D0=BD=D0=B8=D0=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/img/68.png | Bin 73183 -> 105653 bytes docs/img/69.png | Bin 68354 -> 131504 bytes docs/img/70.png | Bin 68931 -> 134543 bytes 3 files changed, 0 insertions(+), 0 deletions(-) diff --git a/docs/img/68.png b/docs/img/68.png index 3a2d9d7fbdfd1b68bb4919d7951b4b9705cd184a..7b618244ad991c05450cba498b899a45a6855362 100644 GIT binary patch literal 105653 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 DL83{w literal 73183 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 ZItEWxrTI=q?Rg^v{z1Wkf#RyBe*r_efad@J diff --git a/docs/img/69.png b/docs/img/69.png index 3e07d6ff659beb65a6e2aa0b592d6a660b534407..7db7a11dedb184277fc50efeeca49a9f1ab8b14a 100644 GIT binary patch literal 131504 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 literal 68354 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%0DpRdXXI8u!Z=}aP{--}w6wHFJT0xQNemJ~92{6L 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 O0000J_@I%tw`1uim_U_3HHt@*7x<3e^HH z?B}(UinPS5%5jnd*af_~xPthrS2f>I9}N*;*Kh4*w47eO!sz|`c|8a!HhJ~xr9k$h zxT?F}aR-6{u12S5=gaNtY3ItVD;RWJ(J|vGU((e49=UJjskN<*x;s}j7l%H9($=9V z=e0yYUwB)a*X7Ij=-3YD+gVCkesYoJ4F0QBF7t8WtEW-IHc{is)*3O#cmF7{6n8xn z>)*!n_!DN`_C0&Mt;1kNl$6XfMAj+-=|l6+rsN}RP=gS!(Ws*FgGYh=;RE6@;1$Im1AiRT1CjUduWfGd)yYHt=#)eT3rX-!;5 zjP^fA^P_$(9v4FKpB4W${6DK-$HD){eE;9=;HcmJw~qhEa=%kk{M-5kWjQHi#s1qp z{j*W~*RPsWvA|Vt4hE(J&+$ZSH*80#xc`3tu=V_N;yEXS`1e(2G)1`hGp_vHiqhif z)pb}uByE}i25Mdo3J=kFct{}4i-U@^?w&NrBcsLd@#D!|sy)t$BAh~e9tnr

    Q}; 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¥&<8{hDjcyK#s_YLId1j}Krp89p-0h1} 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⋙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 Date: Sat, 25 May 2024 01:05:06 +0300 Subject: [PATCH 63/76] =?UTF-8?q?=D0=98=D0=BD=D1=81=D1=82=D1=80=D1=83?= =?UTF-8?q?=D0=BA=D1=86=D0=B8=D0=B8:=20=D0=BA=D0=BE=D1=80=D1=80=D0=B5?= =?UTF-8?q?=D0=BA=D1=82=D0=B8=D1=80=D0=BE=D0=B2=D0=BA=D0=B0=20=D0=B8=D0=B7?= =?UTF-8?q?=D0=BE=D0=B1=D1=80=D0=B0=D0=B6=D0=B5=D0=BD=D0=B8=D0=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 6 +++--- docs/Image Sources.pptx | Bin 1402285 -> 1403398 bytes 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 095024e..ffadc1b 100644 --- a/README.md +++ b/README.md @@ -1740,9 +1740,9 @@ const Chart = ({ title }) => { - Отображение связей между задачами - Отображение произвольного пользовательского диалога в качестве карточки задачи/редактора задачи -![Пример P8PGantt](docs/img/68.png)\ -![Пример P8PGantt (редактор)](docs/img/69.png)\ -![Пример P8PGantt (пользовательский диалог задачи)](docs/img/70.png)\ +![Пример P8PGantt](docs/img/68.png) +![Пример P8PGantt (редактор)](docs/img/69.png) +![Пример P8PGantt (пользовательский диалог задачи)](docs/img/70.png) **Подключение** diff --git a/docs/Image Sources.pptx b/docs/Image Sources.pptx index f3536ff480dcde3fe79b901cb4218414d598d386..b00c3e81102a282876f22f25cb6cd1d0ac1572f6 100644 GIT binary patch delta 7430 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 WLmeXGQ$HHuKMnk>9nDTZtN#PdyvZs6 delta 6648 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 Date: Sat, 25 May 2024 14:44:24 +0300 Subject: [PATCH 64/76] =?UTF-8?q?WEB=20APP:=20P8PSVG=20-=20=D0=B0=D1=82?= =?UTF-8?q?=D1=80=D0=B8=D0=B1=D1=83=D1=82=20"title"=20=D0=B2=20=D0=BE?= =?UTF-8?q?=D0=BF=D0=B8=D1=81=D0=B0=D0=BD=D0=B8=D0=B8=20=D1=81=D1=82=D1=80?= =?UTF-8?q?=D1=83=D0=BA=D1=82=D1=83=D1=80=D1=8B=20=D0=B8=D0=BD=D1=82=D0=B5?= =?UTF-8?q?=D1=80=D0=B0=D0=BA=D1=82=D0=B8=D0=B2=D0=BD=D0=BE=D0=B3=D0=BE=20?= =?UTF-8?q?=D1=8D=D0=BB=D0=B5=D0=BC=D0=B5=D0=BD=D1=82=D0=B0=20=D0=B4=D0=BB?= =?UTF-8?q?=D1=8F=20=D0=BA=D0=BE=D0=BD=D1=82=D1=80=D0=BE=D0=BB=D1=8F=20?= =?UTF-8?q?=D1=81=D0=B2=D0=BE=D0=B9=D1=81=D1=82=D0=B2,=20=D0=BF=D1=80?= =?UTF-8?q?=D0=B8=D0=BC=D0=B5=D1=80=20=D1=81=20"fillOpacity"?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/components/p8p_svg.js | 1 + app/panels/samples/svg.js | 1 + 2 files changed, 2 insertions(+) diff --git a/app/components/p8p_svg.js b/app/components/p8p_svg.js index fb426b6..2348b84 100644 --- a/app/components/p8p_svg.js +++ b/app/components/p8p_svg.js @@ -24,6 +24,7 @@ const STYLES = { //Структура элемента изображения const P8P_SVG_ITEM_SHAPE = PropTypes.shape({ id: PropTypes.oneOfType([PropTypes.string, PropTypes.number]).isRequired, + title: PropTypes.any, backgroundColor: PropTypes.oneOfType([PropTypes.string, PropTypes.arrayOf(PropTypes.string)]) }); diff --git a/app/panels/samples/svg.js b/app/panels/samples/svg.js index efee4b5..3df456a 100644 --- a/app/panels/samples/svg.js +++ b/app/panels/samples/svg.js @@ -103,6 +103,7 @@ const Svg = ({ title }) => { onClick={handleSVGClick} onItemClick={handleSVGItemClick} canvasStyle={STYLES.SVG} + fillOpacity={"0.4"} /> ) : null} From f0f07ef2506adbfb3fc025a6aa2a69cf4608ed4b Mon Sep 17 00:00:00 2001 From: Mikhail Chechnev Date: Sat, 25 May 2024 14:45:21 +0300 Subject: [PATCH 65/76] =?UTF-8?q?WEB=20APP:=20=D0=A1=D0=B2=D0=B5=D0=B6?= =?UTF-8?q?=D0=B0=D1=8F=20=D1=81=D0=B1=D0=BE=D1=80=D0=BA=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- dist/p8-panels.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/dist/p8-panels.js b/dist/p8-panels.js index 8c9022d..fb7fd08 100644 --- a/dist/p8-panels.js +++ b/dist/p8-panels.js @@ -3579,7 +3579,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ P8PSVG: () => (/* binding */ P8PSVG)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Container/Container.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Grid/Grid.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/IconButton/IconButton.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Icon/Icon.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! prop-types */ \"./node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_1__);\n/*\r\n Парус 8 - Панели мониторинга\r\n Компонент: Интерактивные изображения SVG\r\n*/\n\n//---------------------\n//Подключение библиотек\n//---------------------\n\n //Классы React\n //Интерфейсные элементы\n //Контроль свойств компонента\n\n//---------\n//Константы\n//---------\n\n//Стили\nconst STYLES = {\n GRID_ITEM_CANVAS: {\n width: \"100%\",\n height: \"100%\"\n },\n CONTROLS: {\n justifyContent: \"center\",\n alignItems: \"center\",\n display: \"flex\"\n }\n};\n\n//Структура элемента изображения\nconst P8P_SVG_ITEM_SHAPE = prop_types__WEBPACK_IMPORTED_MODULE_1___default().shape({\n id: prop_types__WEBPACK_IMPORTED_MODULE_1___default().oneOfType([(prop_types__WEBPACK_IMPORTED_MODULE_1___default().string), (prop_types__WEBPACK_IMPORTED_MODULE_1___default().number)]).isRequired,\n backgroundColor: prop_types__WEBPACK_IMPORTED_MODULE_1___default().oneOfType([(prop_types__WEBPACK_IMPORTED_MODULE_1___default().string), prop_types__WEBPACK_IMPORTED_MODULE_1___default().arrayOf((prop_types__WEBPACK_IMPORTED_MODULE_1___default().string))])\n});\n\n//-----------\n//Тело модуля\n//-----------\n\n//Интерактивные изображения SVG\nconst P8PSVG = ({\n data,\n items,\n onClick,\n onItemClick,\n canvasStyle,\n fillOpacity\n}) => {\n //Собственное состояние\n const [state, setState] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({\n images: [],\n currentImage: 0,\n imagesCount: 0\n });\n\n //Ссылки на DOM\n const svgContainerRef = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(null);\n const svgRef = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(null);\n\n //Обработка нажатия на элемент изображения\n const handleClick = e => {\n let itemClickFired = false;\n if (items && onItemClick) {\n const item = items.find(item => item.id == e.target?.id || item.id == e.target?.parentElement?.id);\n if (item) {\n onItemClick({\n item\n });\n itemClickFired = true;\n }\n }\n if (!itemClickFired && onClick) onClick(e);\n };\n\n //Формирование интерактивных элементов изображения\n const makeSVGItems = () => {\n items.forEach(item => {\n const svgE = document.getElementById(item.id);\n if (svgE) {\n //Запомним старый стиль элемента\n let styleOld = svgE.getAttribute(\"style\") || \"\";\n if (styleOld && !styleOld.endsWith(\";\")) styleOld = `${styleOld};`;\n //Сформируем стиль для заливки\n let fillStyle = \"\";\n if (item.backgroundColor) fillStyle = `fill: ${item.backgroundColor}; ${fillOpacity ? `opacity: ${fillOpacity};` : \"\"}`;\n //Сформируем стиль для курсора\n let cursorStyle = \"\";\n if (onItemClick) cursorStyle = \"cursor: pointer;\";\n //Добавим элемент для всплывающей подсказки\n let titleE = null;\n if (item?.title) {\n titleE = document.createElementNS(\"http://www.w3.org/2000/svg\", \"title\");\n titleE.textContent = item.title;\n svgE.appendChild(titleE);\n }\n //Если нем попалась группа\n if (svgE.tagName == \"g\") {\n //Установим ей новые стили\n svgE.setAttribute(\"style\", `${styleOld}${cursorStyle}`);\n //И заливку всем дочерним элементам\n if (fillStyle) for (const child of svgE.children) {\n let childStyleOld = child.getAttribute(\"style\") || \"\";\n if (childStyleOld && !childStyleOld.endsWith(\";\")) childStyleOld = `${childStyleOld};`;\n child.setAttribute(\"style\", `${childStyleOld}${fillStyle}`);\n }\n } else {\n //Это простой элемент, не группа - просто выставляем стили\n svgE.setAttribute(\"style\", `${styleOld}${cursorStyle}${fillStyle}`);\n }\n }\n });\n };\n\n //Загрузка изображения\n const loadSVG = () => {\n const images = data.split(\"\").filter(i => i).map(i => i + \"\");\n setState(pv => ({\n ...pv,\n images,\n imagesCount: images.length,\n currentImage: 0\n }));\n };\n\n //Отображение текущего изображения\n const showSVG = () => {\n if (state.imagesCount > 0) {\n const parser = new DOMParser();\n const doc = parser.parseFromString(state.images[state.currentImage], \"image/svg+xml\");\n svgRef.current = doc.documentElement;\n svgRef.current.onclick = handleClick;\n svgContainerRef.current.replaceChildren(svgRef.current);\n if (items) makeSVGItems(items);\n }\n };\n\n //Переключение текущего изображения\n const switchImage = direction => {\n setState(pv => ({\n ...pv,\n currentImage: direction > 0 ? pv.currentImage + 1 >= pv.imagesCount ? 0 : pv.currentImage + 1 : pv.currentImage - 1 < 0 ? pv.imagesCount - 1 : pv.currentImage - 1\n }));\n };\n\n //При обновлении данных\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n loadSVG();\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [data]);\n\n //При загрузке изображения\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n showSVG();\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [state.images, state.currentImage, items]);\n\n //При прокрутке изображений назад\n const handlePrevClick = () => switchImage(1);\n\n //При прокрутке изображений вперёд\n const handleNextClick = () => switchImage(-1);\n\n //Генерация содержимого\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_2__[\"default\"], null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n container: true,\n direction: \"column\",\n justifyContent: \"center\",\n alignItems: \"center\",\n spacing: 0\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n item: true,\n xs: 12,\n sx: STYLES.GRID_ITEM_CANVAS\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n ref: svgContainerRef,\n style: {\n ...(canvasStyle ? canvasStyle : {})\n }\n })), state.imagesCount > 1 ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n item: true,\n xs: 12\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n style: STYLES.CONTROLS\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n onClick: handlePrevClick\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_5__[\"default\"], null, \"arrow_left\")), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n onClick: handleNextClick\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_5__[\"default\"], null, \"arrow_right\")))) : null));\n};\n\n//Контроль свойств - Интерактивные изображения SVG\nP8PSVG.propTypes = {\n data: (prop_types__WEBPACK_IMPORTED_MODULE_1___default().string).isRequired,\n items: prop_types__WEBPACK_IMPORTED_MODULE_1___default().arrayOf(P8P_SVG_ITEM_SHAPE),\n onClick: (prop_types__WEBPACK_IMPORTED_MODULE_1___default().func),\n onItemClick: (prop_types__WEBPACK_IMPORTED_MODULE_1___default().func),\n canvasStyle: (prop_types__WEBPACK_IMPORTED_MODULE_1___default().object),\n fillOpacity: (prop_types__WEBPACK_IMPORTED_MODULE_1___default().string)\n};\n\n//----------------\n//Интерфейс модуля\n//----------------\n\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/components/p8p_svg.js?"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ P8PSVG: () => (/* binding */ P8PSVG)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Container/Container.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Grid/Grid.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/IconButton/IconButton.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Icon/Icon.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! prop-types */ \"./node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_1__);\n/*\r\n Парус 8 - Панели мониторинга\r\n Компонент: Интерактивные изображения SVG\r\n*/\n\n//---------------------\n//Подключение библиотек\n//---------------------\n\n //Классы React\n //Интерфейсные элементы\n //Контроль свойств компонента\n\n//---------\n//Константы\n//---------\n\n//Стили\nconst STYLES = {\n GRID_ITEM_CANVAS: {\n width: \"100%\",\n height: \"100%\"\n },\n CONTROLS: {\n justifyContent: \"center\",\n alignItems: \"center\",\n display: \"flex\"\n }\n};\n\n//Структура элемента изображения\nconst P8P_SVG_ITEM_SHAPE = prop_types__WEBPACK_IMPORTED_MODULE_1___default().shape({\n id: prop_types__WEBPACK_IMPORTED_MODULE_1___default().oneOfType([(prop_types__WEBPACK_IMPORTED_MODULE_1___default().string), (prop_types__WEBPACK_IMPORTED_MODULE_1___default().number)]).isRequired,\n title: (prop_types__WEBPACK_IMPORTED_MODULE_1___default().any),\n backgroundColor: prop_types__WEBPACK_IMPORTED_MODULE_1___default().oneOfType([(prop_types__WEBPACK_IMPORTED_MODULE_1___default().string), prop_types__WEBPACK_IMPORTED_MODULE_1___default().arrayOf((prop_types__WEBPACK_IMPORTED_MODULE_1___default().string))])\n});\n\n//-----------\n//Тело модуля\n//-----------\n\n//Интерактивные изображения SVG\nconst P8PSVG = ({\n data,\n items,\n onClick,\n onItemClick,\n canvasStyle,\n fillOpacity\n}) => {\n //Собственное состояние\n const [state, setState] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({\n images: [],\n currentImage: 0,\n imagesCount: 0\n });\n\n //Ссылки на DOM\n const svgContainerRef = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(null);\n const svgRef = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(null);\n\n //Обработка нажатия на элемент изображения\n const handleClick = e => {\n let itemClickFired = false;\n if (items && onItemClick) {\n const item = items.find(item => item.id == e.target?.id || item.id == e.target?.parentElement?.id);\n if (item) {\n onItemClick({\n item\n });\n itemClickFired = true;\n }\n }\n if (!itemClickFired && onClick) onClick(e);\n };\n\n //Формирование интерактивных элементов изображения\n const makeSVGItems = () => {\n items.forEach(item => {\n const svgE = document.getElementById(item.id);\n if (svgE) {\n //Запомним старый стиль элемента\n let styleOld = svgE.getAttribute(\"style\") || \"\";\n if (styleOld && !styleOld.endsWith(\";\")) styleOld = `${styleOld};`;\n //Сформируем стиль для заливки\n let fillStyle = \"\";\n if (item.backgroundColor) fillStyle = `fill: ${item.backgroundColor}; ${fillOpacity ? `opacity: ${fillOpacity};` : \"\"}`;\n //Сформируем стиль для курсора\n let cursorStyle = \"\";\n if (onItemClick) cursorStyle = \"cursor: pointer;\";\n //Добавим элемент для всплывающей подсказки\n let titleE = null;\n if (item?.title) {\n titleE = document.createElementNS(\"http://www.w3.org/2000/svg\", \"title\");\n titleE.textContent = item.title;\n svgE.appendChild(titleE);\n }\n //Если нем попалась группа\n if (svgE.tagName == \"g\") {\n //Установим ей новые стили\n svgE.setAttribute(\"style\", `${styleOld}${cursorStyle}`);\n //И заливку всем дочерним элементам\n if (fillStyle) for (const child of svgE.children) {\n let childStyleOld = child.getAttribute(\"style\") || \"\";\n if (childStyleOld && !childStyleOld.endsWith(\";\")) childStyleOld = `${childStyleOld};`;\n child.setAttribute(\"style\", `${childStyleOld}${fillStyle}`);\n }\n } else {\n //Это простой элемент, не группа - просто выставляем стили\n svgE.setAttribute(\"style\", `${styleOld}${cursorStyle}${fillStyle}`);\n }\n }\n });\n };\n\n //Загрузка изображения\n const loadSVG = () => {\n const images = data.split(\"\").filter(i => i).map(i => i + \"\");\n setState(pv => ({\n ...pv,\n images,\n imagesCount: images.length,\n currentImage: 0\n }));\n };\n\n //Отображение текущего изображения\n const showSVG = () => {\n if (state.imagesCount > 0) {\n const parser = new DOMParser();\n const doc = parser.parseFromString(state.images[state.currentImage], \"image/svg+xml\");\n svgRef.current = doc.documentElement;\n svgRef.current.onclick = handleClick;\n svgContainerRef.current.replaceChildren(svgRef.current);\n if (items) makeSVGItems(items);\n }\n };\n\n //Переключение текущего изображения\n const switchImage = direction => {\n setState(pv => ({\n ...pv,\n currentImage: direction > 0 ? pv.currentImage + 1 >= pv.imagesCount ? 0 : pv.currentImage + 1 : pv.currentImage - 1 < 0 ? pv.imagesCount - 1 : pv.currentImage - 1\n }));\n };\n\n //При обновлении данных\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n loadSVG();\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [data]);\n\n //При загрузке изображения\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n showSVG();\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [state.images, state.currentImage, items]);\n\n //При прокрутке изображений назад\n const handlePrevClick = () => switchImage(1);\n\n //При прокрутке изображений вперёд\n const handleNextClick = () => switchImage(-1);\n\n //Генерация содержимого\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_2__[\"default\"], null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n container: true,\n direction: \"column\",\n justifyContent: \"center\",\n alignItems: \"center\",\n spacing: 0\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n item: true,\n xs: 12,\n sx: STYLES.GRID_ITEM_CANVAS\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n ref: svgContainerRef,\n style: {\n ...(canvasStyle ? canvasStyle : {})\n }\n })), state.imagesCount > 1 ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n item: true,\n xs: 12\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n style: STYLES.CONTROLS\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n onClick: handlePrevClick\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_5__[\"default\"], null, \"arrow_left\")), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n onClick: handleNextClick\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_5__[\"default\"], null, \"arrow_right\")))) : null));\n};\n\n//Контроль свойств - Интерактивные изображения SVG\nP8PSVG.propTypes = {\n data: (prop_types__WEBPACK_IMPORTED_MODULE_1___default().string).isRequired,\n items: prop_types__WEBPACK_IMPORTED_MODULE_1___default().arrayOf(P8P_SVG_ITEM_SHAPE),\n onClick: (prop_types__WEBPACK_IMPORTED_MODULE_1___default().func),\n onItemClick: (prop_types__WEBPACK_IMPORTED_MODULE_1___default().func),\n canvasStyle: (prop_types__WEBPACK_IMPORTED_MODULE_1___default().object),\n fillOpacity: (prop_types__WEBPACK_IMPORTED_MODULE_1___default().string)\n};\n\n//----------------\n//Интерфейс модуля\n//----------------\n\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/components/p8p_svg.js?"); /***/ }), @@ -4404,7 +4404,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ Svg: () => (/* binding */ Svg)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! prop-types */ \"./node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_9___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_9__);\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Typography/Typography.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/FormControl/FormControl.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/FormLabel/FormLabel.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/RadioGroup/RadioGroup.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/FormControlLabel/FormControlLabel.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Radio/Radio.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Grid/Grid.js\");\n/* harmony import */ var _components_p8p_svg__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../components/p8p_svg */ \"./app/components/p8p_svg.js\");\n/*\r\n Парус 8 - Панели мониторинга - Примеры для разработчиков\r\n Пример: Интерактивные изображения \"P8PSVG\"\r\n*/\n\n//---------------------\n//Подключение библиотек\n//---------------------\n\n //Классы React\n //Контроль свойств компонента\n //Интерфейсные элементы\n //Интерактивные изображения\n\n//---------\n//Константы\n//---------\n\n//Адрес тестового изображения\nconst SAMPLE_URL = \"img/sample.svg\";\n\n//Стили\nconst STYLES = {\n CONTAINER: {\n textAlign: \"center\",\n paddingTop: \"20px\"\n },\n TITLE: {\n paddingBottom: \"15px\"\n },\n FORM: {\n justifyContent: \"center\",\n alignItems: \"center\"\n },\n SVG: {\n height: \"30vw\",\n display: \"flex\",\n justifyContent: \"center\"\n }\n};\n\n//-----------\n//Тело модуля\n//-----------\n\n//Пример: Интерактивные изображения \"P8PSVG\"\nconst Svg = ({\n title\n}) => {\n //Собственное состояние - SVG-изображение\n const [svg, setSVG] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({\n loaded: false,\n data: null,\n mode: \"items1\",\n items1: [{\n id: \"1\",\n backgroundColor: \"red\",\n desc: \"Цифра на флюзеляже\",\n title: \"Цифра на флюзеляже\"\n }, {\n id: \"2\",\n backgroundColor: \"magenta\",\n desc: \"Ребро флюзеляжа\",\n title: \"Ребро флюзеляжа\"\n }, {\n id: \"3\",\n backgroundColor: \"yellow\",\n desc: \"Люк\",\n title: \"Люк\"\n }],\n items2: [{\n id: \"4\",\n backgroundColor: \"green\",\n desc: \"Хвост\",\n title: \"Хвост\"\n }, {\n id: \"5\",\n backgroundColor: \"blue\",\n desc: \"Хвостовой руль\",\n title: \"Хвостовой руль\"\n }, {\n id: \"6\",\n backgroundColor: \"aquamarine\",\n desc: \"Ребро жесткости хвоста\",\n title: \"Ребро жесткости хвоста\"\n }],\n items3: [{\n id: \"7\",\n backgroundColor: \"blueviolet\",\n desc: \"Крыло левое\",\n title: \"Крыло левое\"\n }, {\n id: \"8\",\n backgroundColor: \"orange\",\n desc: \"Двигатель левый\",\n title: \"Двигатель левый\"\n }, {\n id: \"9\",\n backgroundColor: \"springgreen\",\n desc: \"Крыло правое\",\n title: \"Крыло правое\"\n }],\n selectedItemDesc: \"\"\n });\n\n //Загрузка изображения\n const loadSVG = async () => {\n const resp = await fetch(SAMPLE_URL);\n const data = await resp.text();\n setSVG(pv => ({\n ...pv,\n loaded: true,\n data\n }));\n };\n\n //Отработка нажатия на изображение\n const handleSVGClick = () => {\n setSVG(pv => ({\n ...pv,\n selectedItemDesc: \"Выбрано изображение целиком\"\n }));\n };\n\n //Отработка нажатия на элемент изображения\n const handleSVGItemClick = ({\n item\n }) => {\n setSVG(pv => ({\n ...pv,\n selectedItemDesc: item?.desc ? `Выбран элемент: ${item.desc}` : \"Для выбранного элемента не задано описание\"\n }));\n };\n\n //При подключении к странице\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n loadSVG();\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n //Генерация содержимого\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n style: STYLES.CONTAINER\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n sx: STYLES.TITLE,\n variant: \"h6\"\n }, title), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n sx: STYLES.FORM\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_4__[\"default\"], null, \"\\u0413\\u0440\\u0443\\u043F\\u043F\\u0430 \\u044D\\u043B\\u0435\\u043C\\u0435\\u043D\\u0442\\u043E\\u0432\"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_5__[\"default\"], {\n row: true,\n value: svg.mode,\n onChange: e => setSVG(pv => ({\n ...pv,\n mode: e.target.value,\n selectedItemDesc: \"\"\n }))\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n value: \"items1\",\n control: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_7__[\"default\"], null),\n label: \"\\u041F\\u0435\\u0440\\u0432\\u0430\\u044F\"\n }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n value: \"items2\",\n control: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_7__[\"default\"], null),\n label: \"\\u0412\\u0442\\u043E\\u0440\\u0430\\u044F\"\n }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n value: \"items3\",\n control: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_7__[\"default\"], null),\n label: \"\\u0422\\u0440\\u0435\\u0442\\u044C\\u044F\"\n })), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_4__[\"default\"], null, svg.selectedItemDesc ? svg.selectedItemDesc : \"Нажмите на элемент изображения для получения его описания\")), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_8__[\"default\"], {\n container: true,\n spacing: 0,\n pt: 5,\n direction: \"column\",\n alignItems: \"center\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_8__[\"default\"], {\n item: true,\n xs: 12\n }, svg.loaded ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_components_p8p_svg__WEBPACK_IMPORTED_MODULE_1__.P8PSVG, {\n data: svg.data,\n items: svg[svg.mode],\n onClick: handleSVGClick,\n onItemClick: handleSVGItemClick,\n canvasStyle: STYLES.SVG\n }) : null)));\n};\n\n//Контроль свойств - Пример: Интерактивные изображения \"P8PSVG\"\nSvg.propTypes = {\n title: (prop_types__WEBPACK_IMPORTED_MODULE_9___default().string).isRequired\n};\n\n//----------------\n//Интерфейс модуля\n//----------------\n\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/panels/samples/svg.js?"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ Svg: () => (/* binding */ Svg)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! prop-types */ \"./node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_9___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_9__);\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Typography/Typography.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/FormControl/FormControl.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/FormLabel/FormLabel.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/RadioGroup/RadioGroup.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/FormControlLabel/FormControlLabel.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Radio/Radio.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Grid/Grid.js\");\n/* harmony import */ var _components_p8p_svg__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../components/p8p_svg */ \"./app/components/p8p_svg.js\");\n/*\r\n Парус 8 - Панели мониторинга - Примеры для разработчиков\r\n Пример: Интерактивные изображения \"P8PSVG\"\r\n*/\n\n//---------------------\n//Подключение библиотек\n//---------------------\n\n //Классы React\n //Контроль свойств компонента\n //Интерфейсные элементы\n //Интерактивные изображения\n\n//---------\n//Константы\n//---------\n\n//Адрес тестового изображения\nconst SAMPLE_URL = \"img/sample.svg\";\n\n//Стили\nconst STYLES = {\n CONTAINER: {\n textAlign: \"center\",\n paddingTop: \"20px\"\n },\n TITLE: {\n paddingBottom: \"15px\"\n },\n FORM: {\n justifyContent: \"center\",\n alignItems: \"center\"\n },\n SVG: {\n height: \"30vw\",\n display: \"flex\",\n justifyContent: \"center\"\n }\n};\n\n//-----------\n//Тело модуля\n//-----------\n\n//Пример: Интерактивные изображения \"P8PSVG\"\nconst Svg = ({\n title\n}) => {\n //Собственное состояние - SVG-изображение\n const [svg, setSVG] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({\n loaded: false,\n data: null,\n mode: \"items1\",\n items1: [{\n id: \"1\",\n backgroundColor: \"red\",\n desc: \"Цифра на флюзеляже\",\n title: \"Цифра на флюзеляже\"\n }, {\n id: \"2\",\n backgroundColor: \"magenta\",\n desc: \"Ребро флюзеляжа\",\n title: \"Ребро флюзеляжа\"\n }, {\n id: \"3\",\n backgroundColor: \"yellow\",\n desc: \"Люк\",\n title: \"Люк\"\n }],\n items2: [{\n id: \"4\",\n backgroundColor: \"green\",\n desc: \"Хвост\",\n title: \"Хвост\"\n }, {\n id: \"5\",\n backgroundColor: \"blue\",\n desc: \"Хвостовой руль\",\n title: \"Хвостовой руль\"\n }, {\n id: \"6\",\n backgroundColor: \"aquamarine\",\n desc: \"Ребро жесткости хвоста\",\n title: \"Ребро жесткости хвоста\"\n }],\n items3: [{\n id: \"7\",\n backgroundColor: \"blueviolet\",\n desc: \"Крыло левое\",\n title: \"Крыло левое\"\n }, {\n id: \"8\",\n backgroundColor: \"orange\",\n desc: \"Двигатель левый\",\n title: \"Двигатель левый\"\n }, {\n id: \"9\",\n backgroundColor: \"springgreen\",\n desc: \"Крыло правое\",\n title: \"Крыло правое\"\n }],\n selectedItemDesc: \"\"\n });\n\n //Загрузка изображения\n const loadSVG = async () => {\n const resp = await fetch(SAMPLE_URL);\n const data = await resp.text();\n setSVG(pv => ({\n ...pv,\n loaded: true,\n data\n }));\n };\n\n //Отработка нажатия на изображение\n const handleSVGClick = () => {\n setSVG(pv => ({\n ...pv,\n selectedItemDesc: \"Выбрано изображение целиком\"\n }));\n };\n\n //Отработка нажатия на элемент изображения\n const handleSVGItemClick = ({\n item\n }) => {\n setSVG(pv => ({\n ...pv,\n selectedItemDesc: item?.desc ? `Выбран элемент: ${item.desc}` : \"Для выбранного элемента не задано описание\"\n }));\n };\n\n //При подключении к странице\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n loadSVG();\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n //Генерация содержимого\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n style: STYLES.CONTAINER\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n sx: STYLES.TITLE,\n variant: \"h6\"\n }, title), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n sx: STYLES.FORM\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_4__[\"default\"], null, \"\\u0413\\u0440\\u0443\\u043F\\u043F\\u0430 \\u044D\\u043B\\u0435\\u043C\\u0435\\u043D\\u0442\\u043E\\u0432\"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_5__[\"default\"], {\n row: true,\n value: svg.mode,\n onChange: e => setSVG(pv => ({\n ...pv,\n mode: e.target.value,\n selectedItemDesc: \"\"\n }))\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n value: \"items1\",\n control: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_7__[\"default\"], null),\n label: \"\\u041F\\u0435\\u0440\\u0432\\u0430\\u044F\"\n }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n value: \"items2\",\n control: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_7__[\"default\"], null),\n label: \"\\u0412\\u0442\\u043E\\u0440\\u0430\\u044F\"\n }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n value: \"items3\",\n control: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_7__[\"default\"], null),\n label: \"\\u0422\\u0440\\u0435\\u0442\\u044C\\u044F\"\n })), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_4__[\"default\"], null, svg.selectedItemDesc ? svg.selectedItemDesc : \"Нажмите на элемент изображения для получения его описания\")), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_8__[\"default\"], {\n container: true,\n spacing: 0,\n pt: 5,\n direction: \"column\",\n alignItems: \"center\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_8__[\"default\"], {\n item: true,\n xs: 12\n }, svg.loaded ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_components_p8p_svg__WEBPACK_IMPORTED_MODULE_1__.P8PSVG, {\n data: svg.data,\n items: svg[svg.mode],\n onClick: handleSVGClick,\n onItemClick: handleSVGItemClick,\n canvasStyle: STYLES.SVG,\n fillOpacity: \"0.4\"\n }) : null)));\n};\n\n//Контроль свойств - Пример: Интерактивные изображения \"P8PSVG\"\nSvg.propTypes = {\n title: (prop_types__WEBPACK_IMPORTED_MODULE_9___default().string).isRequired\n};\n\n//----------------\n//Интерфейс модуля\n//----------------\n\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/panels/samples/svg.js?"); /***/ }), From 6fce777e97ef3988cfd4a30366575f343869fcf1 Mon Sep 17 00:00:00 2001 From: Mikhail Chechnev Date: Sat, 25 May 2024 14:48:46 +0300 Subject: [PATCH 66/76] =?UTF-8?q?=D0=98=D0=BD=D1=81=D1=82=D1=80=D1=83?= =?UTF-8?q?=D0=BA=D1=86=D0=B8=D0=B8:=20=D0=94=D0=BE=D0=BA=D1=83=D0=BC?= =?UTF-8?q?=D0=B5=D0=BD=D1=82=D0=B0=D1=86=D0=B8=D1=8F=20=D0=BF=D0=BE=20?= =?UTF-8?q?=D0=BA=D0=BE=D0=BC=D0=BF=D0=BE=D0=BD=D0=B5=D0=BD=D1=82=D1=83=20?= =?UTF-8?q?P8PSVG?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 143 ++++++++++++++++++++++++++++++++++++++++ docs/Image Sources.pptx | Bin 1403398 -> 1480363 bytes docs/img/71.png | Bin 0 -> 80335 bytes 3 files changed, 143 insertions(+) create mode 100644 docs/img/71.png diff --git a/README.md b/README.md index ffadc1b..3a1022e 100644 --- a/README.md +++ b/README.md @@ -2050,3 +2050,146 @@ const Gantt = ({ title }) => { ``` Полные актуальные исходные коды примеров можно увидеть в "db/PKG_P8PANELS_SAMPLES.pck" и "app/panels/samples/gantt.js" данного репозитория соответственно. + +##### Интерактивное изображение "P8PSVG" + +Компонент предназначен для отображения изображений в формате SVG. Поддерживается: + +- Режим галереи с зацикленным переключением между несколькими переданными компоненту изображениями +- Обработка событий `onClick` для изображения в целом и `onItemClick` для отдельных замкнутых контуров и групп, имеющих атрибут `id` +- Управление цветом и прозрачностью заливки отдельных замкнутых контуров и их групп + +![Пример P8PSVG](docs/img/71.png) + +**Подключение** + +Клиентская часть реализована в компоненте `P8PSVG`, объявленном в "app/components/p8p_svg". Для использования компонента на панели его необходимо импортировать: + +``` +import { P8PSVG } from "../../components/p8p_svg"; + +const MyPanel = () => { + return ( +

    + ); +} +``` + +**Свойства** + +`data` - обязательный, строка, данные в формате SVG (`...ДАННЫЕ_ИЗОБРАЖЕНИЯ...`), при необходимости передать несколько изображений они должны просто идти подряд, разделённые закрывающим тегом ``: `...ДАННЫЕ_ИЗОБРАЖЕНИЯ_1......ДАННЫЕ_ИЗОБРАЖЕНИЯ_N...`, вложенные теги `` не допускаются (`` - нельзя)\ +`items` - необязательный, массив, интерактивные элементы изображения, должен состоять из объектов вида `{id: <УНИКАЛЬНЫЙ_ИДЕНТИФИКАТОР>, title: <ТЕКСТ_ВСПЛЫВАЮЩЕЙ_ПОДСКАЗКИ>, backgroundColor: <ЦВЕТ_ЗАЛИВКИ>}`\ +`onClick` - необязательный, функция, будет вызвана при нажатии пользователем на изображение, сигнатура функции `f(event)`, результат функции не интерпретируется. В функцию будет передан типовой JS-объект `MouseEvent` с описанием события. Функция не будет вызвана, если произошло нажатие на интерактивный элемент и была вызвана функция `onItemClick` (см. ниже).\ +`onItemClick` - необязательный, функция, будет вызвана при нажатии пользователем на интерактивный элемент изображения, сигнатура функции `f({item})`, результат функции не интерпретируется. В функцию будет передан объект в поле `item`, которого, будет содержаться элемент массива `items`, описывающий интерактивный элемент изображения, на котором произошло событие. Если функция была вызвана, то вызов функции `onClick` (см. выше) не происходит.\ +`canvasStyle` - необязательный, объект, будет применён в качестве значения атрибута `style` контейнера `div` изображения\ +`fillOpacity` - необязательный, строка, прозрачность заливки интерактивных элементов, где "0" - 100% прозрачность, "0.5" - 50% прозрачность, "1" - 100% непрозрачность и т.п.\ + +**API на сервере БД** + +Компонент компонент не имеет специального серверного API.\ + +**Пример** + +Код панели на стороне клиента (WEB-приложения): + +``` +import React, { useState, useEffect } from "react"; //Классы React +import { Typography, Grid, FormControl, FormLabel, RadioGroup, FormControlLabel, Radio } from "@mui/material"; //Интерфейсные элементы +import { P8PSVG } from "../../components/p8p_svg"; //Интерактивные изображения + +//Адрес тестового изображения +const SAMPLE_URL = "img/sample.svg"; + +//Стили +const STYLES = { + CONTAINER: { textAlign: "center", paddingTop: "20px" }, + TITLE: { paddingBottom: "15px" }, + FORM: { justifyContent: "center", alignItems: "center" }, + SVG: { height: "30vw", display: "flex", justifyContent: "center" } +}; + +//Пример: Интерактивные изображения "P8PSVG" +const Svg = ({ title }) => { + //Собственное состояние - SVG-изображение + const [svg, setSVG] = useState({ + loaded: false, + data: null, + mode: "items1", + items1: [ + { id: "1", backgroundColor: "red", desc: "Цифра на флюзеляже", title: "Цифра на флюзеляже" }, + { id: "2", backgroundColor: "magenta", desc: "Ребро флюзеляжа", title: "Ребро флюзеляжа" }, + { id: "3", backgroundColor: "yellow", desc: "Люк", title: "Люк" } + ], + items2: [ + { id: "4", backgroundColor: "green", desc: "Хвост", title: "Хвост" }, + { id: "5", backgroundColor: "blue", desc: "Хвостовой руль", title: "Хвостовой руль" }, + { id: "6", backgroundColor: "aquamarine", desc: "Ребро жесткости хвоста", title: "Ребро жесткости хвоста" } + ], + items3: [ + { id: "7", backgroundColor: "blueviolet", desc: "Крыло левое", title: "Крыло левое" }, + { id: "8", backgroundColor: "orange", desc: "Двигатель левый", title: "Двигатель левый" }, + { id: "9", backgroundColor: "springgreen", desc: "Крыло правое", title: "Крыло правое" } + ], + selectedItemDesc: "" + }); + + //Загрузка изображения + const loadSVG = async () => { + const resp = await fetch(SAMPLE_URL); + const data = await resp.text(); + setSVG(pv => ({ ...pv, loaded: true, data })); + }; + + //Отработка нажатия на изображение + const handleSVGClick = () => { + setSVG(pv => ({ ...pv, selectedItemDesc: "Выбрано изображение целиком" })); + }; + + //Отработка нажатия на элемент изображения + const handleSVGItemClick = ({ item }) => { + setSVG(pv => ({ ...pv, selectedItemDesc: item?.desc ? `Выбран элемент: ${item.desc}` : "Для выбранного элемента не задано описание" })); + }; + + //При подключении к странице + useEffect(() => { + loadSVG(); + // eslint-disable-next-line react-hooks/exhaustive-deps + }, []); + + //Генерация содержимого + return ( +
    + + {title} + + + Группа элементов + setSVG(pv => ({ ...pv, mode: e.target.value, selectedItemDesc: "" }))}> + } label="Первая" /> + } label="Вторая" /> + } label="Третья" /> + + {svg.selectedItemDesc ? svg.selectedItemDesc : "Нажмите на элемент изображения для получения его описания"} + + + + {svg.loaded ? ( + + ) : null} + + +
    + ); +}; +``` + +Полные актуальные исходные коды примера можно увидеть в "app/panels/samples/svg.js" данного репозитория соответственно. diff --git a/docs/Image Sources.pptx b/docs/Image Sources.pptx index b00c3e81102a282876f22f25cb6cd1d0ac1572f6..cd2d0934120eace4102a9925e4318acfe69b8c86 100644 GIT binary patch delta 82015 zcmX7Pby!r-`?g3)cbBwCiAa|cf*{?wARyA+aTF=(5RjH`mTp)&1wM4Muz*Ojz``!I zFW=w$$Elg;nlslq^W1Yk6)~q@S#3h2rG|+``2^?5vnNlUus%7%5D(tQc=9B^j)vnY zFs{-6id5-ZN5r<*dQk1DY!Aom!sb%iG4;*$$K+6aRnzFY&T^Z;lN{mb z)Ql3~$|BkZf5?MVct)**10$m{bX@y=E;Cqin4>O!G!&1Mm0h@Y$Emh!9>}(@#j7Zu z7+I1CRxO_x)_R@wl89V0V(jOit(n*|;4_Ms0b~8xhs3_72yQENmh>tz!k*u6k}-F-oG)Z;`$cmtIn@Gxpcncs<8zoQWZo-bMtlk4yDw3B8=yZ_^Fzzz|W$X z&&9~*k7`4^c4Xt0RXr07pP4Mu29-`BqtuueSSL;EX4V*roug{>8NlqnJp2gc&uly6d$#znCctQgGUtWQHd9ZT z*FN?@47)7vD-V4qK0Cnvrq>#WnYaCjy9QcmJ!;E99}M z;VX;oul=3`o5HtB#~d|;y2%5W6e zcI))*kib-Heoo?7#K*MX6druQY_V%QSpXed_Hxlbjxsx*KkOtN3Srtt;cxX6X$NM= z6k{jZJrv0zXd{I2=aigMkb;QUni^;xe~S z)WeH^J2YJP7%5~}l-TV8K@m$SCS+`Ykbs}FlYobct;)U$m!xOW*z}&}MV|_}JZ-~GeXqT)?VoEJ&N5rb#N6NGZIb`3sq}IqD$)j9G8~MC zx1>}U4ZI|eCk!Gg3}P=jk-VX&Po6jvKY2p=B;CrGiaLdfiVc8`h*C-(ulpWhy;4lM zdD0f0gN92CLzd#Fj(k8ucFN&={yA(x!taTzJuQAB9HVpd>a{}|%T>%tha58tFjN2e zJRruaGDJgFO?V3|%P?IWBsh6iUd(?qH~h^XowDx8=^H-3br@YBuGzvWdI8{HG?- zYy%Not^3|BUAI%qt!%9pfAhL|r&Ta8E&I|In#>(6Q45sE-3EL)#5pW>@$APji&>B8 zym3313DPFf+>GgWx=@HN;P~h@>{r!RP%kWnKjaYlebYw&Kau6v2*qoMV&d3IJ4J}8 zfYM@s8Ga;LSH^(PCDN(BPJJnU3&-gt8?z1;>$AY{xRFFmQOzA&gnR6>2Aw~@w9d5z z2eK>@<1K(I??r5T%zR5%{ub|=73{z<`B3icFLJJW|GJ1N#M*bN`0A5|W~ZgXL+tvN z$)ZZGj@!HHUu!dYf3dug$i|0O1PuIa=FnBG!BRD0O*fPmm=b3eA-*0cRM^g$#@wp#Yilf!HAyxDlPcq56JRK z(PP&q0xd>lKV5La42J6D*Ecy^iL%=JPt^I|YSWTLUjB$~Yr6vfnxI@+H>Wn4H2BGL zbHUy*PMv$2FqD)R_tcdvo*cO!$90{N7w+dCIqVB~V}Dl&#(ZewC&1T;Zz3lSoY&F+ z8>+_IZ6GEAZm%DAMoLi;399dgcQqS0oGvAf!|m%m1sw-aDWsCr01`f7X#BW(Yp|X? zp?=&f-Q2tcJ)P`rY(4+~Md<$&J63O9WAznfcV44!Z4hXU%RcKpmLh?Yiqr32<{ohu z>xnx4)vyA4npq2*1R?d6-2BdIr(uk-*3A-G30XPlH7fgr#f6^Oq=G1=Agr*96-$rQ zSg1~5YY#ZweID6k#P{+~@o&z~QXFRHPM`&h-_N^QAI{^3=jf>aEs<5kxpp}v8sE1i zxxIHG_&}uMO}D2$LwxdtXR|yKgy%&Qy8VyQPQahxG@XefHj8VZj-mAG&Fu?-UGuQcs927zogooYCy<(2tHj&4{NU7AEYk2#91^0jbDNagr4S<$7 zM!KWbqhO5VSVN4?0BwW5Qz>Tpu=V2$(`^|W+`{EB8}3|lu+w=#k5Uc_cPSa(a}D$w zjuF?GsWPltzOTEGSVMvFBia6#oEXvqtv=}1HO>p8(GN<{u zfT9KVriBs*$AgTU77+)>?fIcXQTJp2%CjN37c)WqoOG~}EXU|y8w*LHGT1Vgg z?OG1*Se_Wf@d%O=&p=He{`%dnL0#?sw&}P&44^eOv`FhK-B9K}Wv(z^6mU#R7u7ob zIWn}>EdRO)dTKaX8r&MWR2N1nk3%o(dW+^Z8bQ;@Lr7Y;VaKGbVTs=cTE=~PnwqFq z#67mj3Xi|Y2e72CI!4}bg@Ce|*f7aJYJt{~whVQI9OPHGcL%(6h~lN3rGj7ubuvz^%Fhd+h=fp;?lawQOfX%n|W5OqjRQ_3J%AeT=-8%*8|2>Vo zg+;W8h0`l*NLz;GD5@OUzpG?=O*^lfZ5YKz@2Bhd zc<;-5=yJ*)k{&c0E-c<$CuM$-Srj6>?go$Jyxi8O@tuXv<$w@x5M@A=(LaLbvVPWU*~}9cP|b z7!o}3wi9Ky8^4I=8;!0*FCV`OQOSI;n_oW(m^LH1QOJ`GzQJ6+Zi6uiu>RY8=12oA zzWFy>s+kvpz99OR%Fg|VS)jlpx%Y191+B!I*sGlVoYD>;M;reK6*tfbPJ~YN*Dvdb z4~>CQ-x!u_2F9$wf_UJ8Bv44cZwEiNwp97^rLR6pIY>-iv+TB5#uJ7c)AsxekB8Q? z)Hjn}NqTfVCI98BHY=t~2|*`=&JD?r#NYj0%QQzU?izS*>5eA%%F+yI%wy|YP?d8k zQ%Rb*-Btmq?B4=Mh9rFz4_a(^jtxTP4ni)k{Kz8xjDHpN^#=Z7yELPq@EOX;hE@6< z$}tho6-cM>etf3KY4O|y_sFD3b~h+sD~97&wg$B4vNzS`pNm9^a2LAtc0C_0=$ZCP zMWc5&#W`&YLEE=|8_=HLvHNS%s|0u7bwA=HjbRDc7Zkv&VRWZeeqUyzZNR6b!~6Ru z&#;P5WRi6^b>#=q-X7eJEvHaGO#5@g!cg)T1-j#SNSlu=abg)I-hwJRzWOz+y0XZ6Y98Lj z1Y4n6Un&$JZ-+n_XXM>turDs~^*%I|{QDw*Ly*U3{_XPn=iwvI-#?P>bc#~hhsVdr z5Sw$LONAhP4JyjEi9@9zGsZNanH&UOj@IZy~&?E^KA47hP zRZxEL8E?{)+EJZh_B4o9yRrw$Uv_qj9`hlf?S`@Liu0D}d38NN&)lc|-3(TafXXoC zjIz1LC_F?Ta-MU)h&@0MbM4R{^P9Z*sd)kxmi~xC)I({o{$zCH#fSBHa-VNcBrWcz z2eEduW~j#&y~SUTyj?*xmaRJ461W2Y+1>PLB>cTb_z36h*J&m=FlqxR%mf353v}zr z9MpHF5Eb0D{*gozT#cetW)d0i=Ed7*=|uh2DHgx?o_AUx3lye&mLyL@QaIh1>Gzf z-bJUOrRjc58V-)v2LN%SOt6CLQa7maekwbDj=-cr5tR>rW=&XJ(TT?K zq2u8Tsg0y%9V73rUU+oUYQ2lRl56g6!-M5}irJ#^jm>Y^CwG-QSFyoT7}Y1Ns#mNQ z%^J(R;YIORB~K8)bujYA*i5T!gyWBB)3bQhk zRDSH=RIK|@iX3ax<8Ji4^l(ZsWQsHR8<8VJt)@xE#*LctB4}-qm;RMcpWm%OeC*U} zLEcD#p_9ce6~Lv=m_XJa@o9NjgjS4)$ikJuB-8h~>?0PC-aD8RR2cYgI>04DdO$$#}zW)>Do^6=z8$xEBL;{}L>8^%>?PE=1pOF)@rxi1dDw8}eo zr26@DKzUAuZp>9zK68ACH%V)1-isk}=P%msuhkDQN?tDbdz*S0+sEif5@)?x9WCCG z;2Qm_RwJbHZ+AvAAsSEow?2cro-7$9(`ZHMS&K;i{H~Jjr>8*&xoTR@@fS@!^X>Xg zh87ol?o614d~Dn4Y5PLFzvp&$>uYHTJ8V4Nf1`-0B5zlu{2d+YMuk~0UKvs zKvK!mv%%-bj~_S6iz|a*>(LHD$V`;;7tMI+?id)-v`YTp=-czGU9js#-)zIFJ z#$h@8KwfG`reJ8*kO_e*Ce1Rvf}n|sZOvEKA9!xV+`lJME$Ngy)fYr*%awtN$g0s= zLRy`?n@Y?INha$O#iU~yS)&QP?cX@-y|G-UWi9*`oo2EY?Cvn|tDs=v6S-~X zpp=!b`oKtEFo-jMBCqJc5OsIZUshA#W$(?z(&_vOnFyNQ1$3XU3Kf|fm=3D2t;%0c z2prEy>?EukAW91#K4g5YI<*p7Qu;vCmbJYYxG%$RR~Y)KihOW`o0n0qU5#gRw48l< zZY{zW2z;p_vHQl%|Br0zSyG&eN%sdH#HWFC*6GuC*=o(&gZZ2S#HQQZo7%dYF&Avw zgK=6HFG_zR%>e$hZZ`^z5F44Ge(2Bz6vecm`lCM{OU`7i`pjQOg*iFQ4^1ipogwaG z#;o2j@Xj$H)b`&AaCWW`sLN;@jM}P?vpElHxZ$W@qxeR}Iirc1IssooCTtlLW1R>& znvaILI(?>$UxuYh4x3|>@tc&I_K+nq)=i$EZj8tqdocwW1#G5?bG zub<>Tf}kIke4*u%cZfyM_Tw>}#&7y_4l$)}C~GLc`F24-TR&I`Z|G5eBn zr)NBG5FF1^C~y7(YB!T^)yreM6xi!5?$SsQCuklgSNPvaWPag!-;<9t#hP|?u1Z3R zFZO8qGd(ttT!huZw01H+FH~J5X}6UVB5(Ua?0cZwZ8_|{GJ2cpcLXbnWS2agz{=h? zW!}Xfsxqmde=;kajf4t87jCWOKjpK3A5agPgK?5bitk>7DNR5z79yW=jPp&3T+ECS z&o!D|N0ueYxvv{`#IBpXT?xo;xI>P+v`@C`UUHxawa0Lm<{wR*)LF2_!l=U?%$69o z<)9xOb;BxGCKT~NkEYSiYm^1OJVJ;Ss-JjzLsU(Jx)l)_+LP-AaqnGR zL+R7~8j0Nt)!P(ZdC37=DUC{!2kJa}K?Gb??|Wqpfw%cQgSUjxXWTuZsHFa21>c#$ zS00k8*X<;lcQz#)2UEkRhB@0vX)nFp{jR+KZ*T@bFY$e=a+SLPHJl+@=NEf6%aGg0 zNhjB*=JWCEp~aA0dax|I~d>EUtK0^7Ub zz0`TON0<1;-wC6-PuS$-x6dv1>FT|K;dmxhlGx#@?+IGPp}SJIYhFLQzbyMS z2AWP}XY?xQ#|h$pe?cO03WSQ$2o9s{7{l!z?&a=I4raXz9UUOOi-@dRbnKgTOSOz= zX{Ys|K$1zIjlLD0mu@vws@famERfskM=jfd7MB)A7*kF%e4h{mea~A*)SNtV!*L0C z*!#t`oBJ!`Ho9JDrHM@cU>vzRY=kn8OGVzJ29YBI-xToStz(PDS4Te~gbCT_`0+ol zc#Kz^>6C{mE{XiARd@(vir?88-8Zdv!EnK_&U+vYHmxhz+ov0naOWBl-p-=873x*K z_|owDyIs;%*h}!i?M2*$km@|-u9xrbb81o!0&}@V&EH;=Ziad--db1h*2YZrt7p7F zcKA1VqrI*;FXi0JPbk5 zX#fmxftRNbJTsFI&xD6lw@>6k;&>lUOH*nEw&c-4tIiW1jv2%aJO~N>u(t>Z6J$xCG81As|aI+ z(RC7N0&QQ(HY~N*Qrdk4(+a)Q4rrlo@N0?IC865w4m#zdG|vlXc(`>u+Pf`(AN0Hd?NhT*HADgY6-JL0|@l2{27JF)aOU%Fct(Nwlbm-409+%r_{;u}&(ZJs zsns7;f4_LZWuOsSheyCXJFdeeanE+|ewha(2c&Nk-b&DZY{~Tn>hiRyC->R{T(<1> zRBw2$m#>}wc}@(Bdjk8(J;FzB2vjSPu{E2FCMV$V&s(!g6OffU#tpu?#O-#KqkbyR zz5}?6axLu!>|eVA>%z$8rjWJEvy7$w0f;a6Ri!LWp2bb|^j1dQp>!nTn|o_^$mJbKfgOKGil$uehPc zI#|8lbVtH4D}xd<#7`FpNFTZx_nO`avoG>st<+zVQ3|*f#f}eAwVP`kiAIQ6|3$UH zg32v!JncBW>I?5?lxqfWBbWV;Bsb*dx@&SC%Gw$m5w+J^$PFu2XN%I+Hi5?bZy`x1 zTByE`Um=^okSEn9HFfajVo zBw%FL&%{+94+ajF-XUlKjy;0BR9H_^UaOW%|2H62(*ez8e`P&$MheZ?UaQz}w(nsBSQip>zA`IaOSH@U^&A_92Dc?TBRZ?XKh1Lah2J z4B)4P&D~es5D)PB)fm8d;g=Qt-cSzE_V}P`UC07`>8d`8n-P(9wREl$D1F*tmI_%D zxJbE|Upc%anna$&f_{IB(~-8#`l?f~D^iXpAQ(|b61tif>Iw=G*{BM_vzBHKiqCrG zjm9C=9os)ElBw%f5ITh7{n1t^qcV@+ha`pIs~mCs*{hF(b6s4PD;C>A-ZQj>KT^!` zR`|%jfbD&LGicvjX9SbPu$9$y*+W}Stk9j(Hgafu+1Y&t?F-4XS>ex;2QBh|)!_Vn zBWW>sO8>g9O3`B=>+Z(&OVIYXtKS;OkMdtSD&AfGSlU8AWg*N0p84J>`yuVD-BZQcQN2oPOA&CJUpXI_1?HEnRDJ^K)mSU1}*uiLT4trxmlEuF8S-e zy>9L4PrakclW+UFT+f3~Kd9)yL#yTzZxw^`XWg|P76#FSk&(wSA07;Vs!C`SvYBXU zEiG(^iMLKvh>pc6D`Ax;I1E5vgfRa1hHf-V+Nkctuyu2?3%37`kAbsT}u#n@!`ylowe1ME(a}+%f1Cv0bOuIWU(B(Izj)&Vq!I$EE zUQ@&Onm@Oe53h%vfnWerVfatqL+b*O2YW=XUy4T`?ZbE$q&JedmzQMgFx0c|wQp86{}RD4K!Jc&$vcZi?^Eac>BX=ijD#S~#P-tr zSTfDPWQeMx8=>#JIqh8{H}(OoZ-LUBN#{3;dQ1#MT#C1UUbW`ah`VUV_VX$?7c@`L zA>9wTI$DYjzW&h9Y(4yMp6yeuQHKxzXO;jgE)5NZgWN#&`ySVQ@j3~orCN+grhsP} zsFTq$^DFn?%-fMb0)^a+cTRW8S9ir%`>?}?_j3?1#H9QuLm5uO+u(jKM(+{594?L# z!ND28xTF6snt3vy(bfNWyRe8senw2c06E8(?dfo~2(i3*&FA-tK03t8SQ`^@B!SH{ zCj99+s6lhM_JXRR=#lRq){L7^|oICTuq?Rae{J zo7$x(SR6$7T*n2{W+IU&c$TG?BmUPdw*C;v`k94m7A#0D-Ngun1l3TLAE3{geBsmP zrIkWD+Z?M>PZ5=o2<+EBW9C}12}c3)t2950`6W-w7me`4sF+m5LVSm&h!31Q&Nq{w zhqmkQ31FM>;X-}eM9@DHsee!Zpf91w3-&$slT}>SHVJ0yH3j%6n_T957ljnxVtSxc z+o%ENsqZ5q8uVW%+Cmmr`OnAx>r;S4fgUnrN|U*AcSg*F4>FU!tMEuSek`XF%g zP9hPsN6ND)(5Hl!cHCUUdY+b6+H}C|3_reATIwT7TsHM#Ki$6-PD$m%r5NSg zd@<`Pzo%oPyOtq1;46+;(j}2yZYLuFReA(+S^knEwzz)Aanp6iS%KP^2~&4>r`_F% zUKmhBlJ9ITuvV;zHdYyz&nSP|5+kC0-H83eQSP0`9rF^mJ+CM@h*^*$C<@4%ki)Xu zyJx)a-0nTF1z86=GQuJ&I#lMDi~6chger1drf>d&66H?CgV05&*2`isAtC#xTxE7Y zr$iKG;4m^Ulze+A6TzS#xURx1VuE;1Tq)}GtyAK|4Lk3)iHS)g3*uXaC(bVQZMDd% z`G*7gi7!lPVa-SmL%6MFdYI3Y?qEs! z$|9@yDvdiM<34NmE&_V_rF)mC<}z0j-WNRX$O28D4LleixaJ232Z1zB%P9ocS~{=b z!JIOguKpiMV#Kh3nKseNv>f~<_!M?TkoR6e1?3Ar;zT#w>@LXoO4Ri9 z`zh?EpN`Y8IGppK@8vd~I;&vduXk9^%DA)qVDk=1>(N^^A(w}sKMONXjFOH_8>STx z!wz4J!jw0p2rsG$AKkLo3ln`ofwoG%_C{8XnKiGOb%%iE-rP?uD6I~X29g|XzF-zL zzUj|+%*Idt&=kg&V5mV&BaJWm4a=7J{ILjLu_Q%WNe>~M{G!y6!TfS2V-oDJtkd=W zND}4j&epfAC{B%;-Dg-AOy&l^MyRvi1~)@>?>9D$Bnlp06wf0qgucE&L(vtzJi{zs zeba;DE`x!q8UJdrxiXt&`NGA87C{ymucT^T$Pt}tIl!0~xdV+_JQ2W&mo?*w7_WUB zoS)+rNcC`KMim_!T6!LXp2oCYx}{mBwHrUKsl*)1@QZZC`FKkoe z`SFvvI(WH7CMGY$6OVfC<-5|U0iJYBR|tfVr3)ZtbU&k2Mm=&}QA>oLaryJ&M_*LH zm9sUmR@?SWHWh345{3<)6%{H zGm%3XeO!PeWE8*lRJFpa!3z#9-0I?-BlqBjc0%mddAj+fZ zpTpJo2!LwVOH3O&LkODvOs3aLWc_aDYw_=g9jd7ey#9mO50?cZPll^OHOHUaoChj7 z515;YOanOQ98X~vBo=iij=B#&Z;wzw{i!nrpu+m#m6iFu@V96Nsw!@2&2%H#rLN%`+5lQidr78 zD8^n9_E%8sZG+JdEG}(_U_V6hOS3%B7tJkE?gOP$@pZB6AI{V#z8?Nkb3;Qw1CU(7 zw>Rsq+rc0T`c-;;H46T175UI^^n%M$7!`w<_3hu|F=zxL&eW^Zt8C&>mt?~L@x)+C zY#mgY$J%|l!J3fwMk%-#r2{Z1!(b-=Nd`qZGkys54a972^R?WGr*7M8>}z zr(t*{ZBLubAeNusMtnQOf{8w(?rf`}>({)aU=G^XmA+q75O4hpDO+FqDkgx$GkEw* zC#`c&pZh}EeEu4n9G3ZCZ5Q44l}c|s*K<}*jQ;zIpn5}@N<*uE$^bB^MseCJG@CL_ z4s~iV6oZ~Sw{=_yDyp$G?NK^s&x0u0i%i7|_!*!BSwW%5y!9Bhlgv=Id$R_E%wOj> z4TalzgJiCh+xq^d884wH{w9Hf0$rx_`EqtXOwngPKcFs*eKVNd1)x&p3##t|=CA;m z+VeF-#n{vFeey*L5b$)Xo9)vhIHkAdBFUd!Q;}`oss_9P^?F4zGM}D_)HE42(YC^( z`n~U3*(ZBC(KS6{IvS;zENi#8N2sYtAx#>i7~kAmv6|LP!Xs8X#>L*#J=S}@-*+?p zm~gsuXQgTd>W?ApzNy{>r#&KzW`*ma#Xd!~F03c5)~s$zK-CCNsLSkEZ=xQgi!t$# z^(1!WR+m)Om3iUHtoa2#y+K$SogDVoRT^gk-`oB>)NwP0lFj~8vqBt)w7TY{H+=0f z=ic&~( zyM{kJ*!r1aGrPF6LS= z-b20J?E~xmYcr|Ec2@ZVK^mo%v1^nX!SoAMwX*l`AVpB^ZsLPI_`BDxukD?lid0>j z{U|2@W>9~d?Sc2;*GR+^{~1k9*t>_UKT#;UyAl)sZBJ#k;r)dPHvES@BqEX}h=3$b zE-vyR0K=dr7*oAl<}9VqV5`NJr5t@+WH}YbvQ-Xr6~R*bs$|8Nx-r#Pn-7J#?mUnc z?WOkukL3kFX3FRbDR1=SCfbAR=_@7<^^XDF>e=Ha6F$HjgryAh-A3LE=w8>dD3z86 z8W|jq$OKiiM=E+DoIjO@gladN>jv4iXkcAD z@O0JfSeMFZo8cS$Fn#m*)@7hw7>NHds<7o^uTaUDc>u*}@r}wX^z%zG7l*-c>o!xT z;5~VH1J2N_FnfxHelaU@;?`T{yKP+(F3qgiH1Nhi%;~~&9*g;D4qlmoKYx2ky^mQ( zQ(pD0hfNs(g?~NyKKl(@b-Cg;1Gkxaw*yVTo2r!ai$q%}e*;jK?j4YiG_%P8L?Q|Br>tAoGR%`LuhpUE^(Sg{7cMY%D?1{Jr zM7F-Iioyo$t;q!UZby2nCQ)<8BxCED==ho0sop_cxwrz{bnIEj)81UJ&@SS^DpqS-X8)x}dzepl%YZl$3nw8mFMVkI@Dx zQI0vSVw}yGynM)F=I?Is_%0!HhZeg5URiml_>cFS`og}A`ff=DdMAPo(*J?FVizAS z1w2x9@vQcVjbFjndz?IlP8=E-<(o&$L|BZF&!{D+Q!cY{s@$r8&1d;mO!PzQKb*qo zC`2`aY1`` zzSsgwu8fvH^qhkN{P!F0+;*cL!b~EQNBT(NP~h4#mPLZHKbc~>)}G)hPgHv^F2S?V zm`BWYG3W;sQCtA1Ta$;Po@lsTtChtB7`VI_n1|%b`K(?ez~2&NTAnRVrYL;m4Cd;- zC6Iea7E|WQ7OeE*u}sD7PAG`kp>a1gfRD3ee=pdBB+LSsyV$%k2MAxuU`&gSLxZ5k zN24T%>sU{<{#>x@&^*ZN`nqmYSFQwf$tPgpjW;|S2C4k}fPuSreF7En=< zLMS&|0j*|uH|oOYf-bj`gs4_ZI~IUB#2=c}dSxp0wRQAMl$zo=shq5%p4e{U=SD7~ zNY_eS>*11~ZI(!PNIL;HBs(Ey?>JHyaKqa$%Bq3|NBOpGLAi#KoYSln*BdN$gAS-t~b<-HRj z`vNj{5JMSIE1qZ|qP5yBG_zY#0{R9zG=~fGqK|&%%?jwNZp``_G#{v-z7x3Dbz2z8 z;DRcLxaB*MSKc{`1UJ1tN~$dn#@ihAom`9Dz@2j$b3OeY6vR$cDk^H+M@7e1Lx+Yt3D7!e*;m%eoem&fw17@ zIf7A1Os(nmYDRMF^?Zs|RPp~XR;Qfc&S0aWoC z7B4z4_nm@KS6}O_s@opSzZIyX0$r3QsXz>g8C`*3ySB+hfS>D-T7b|+$oTvjv-^n{ zog6MrRPYY*D(P<`Dz&;=+=b)_C4xGyh5Re(TrK*v?nv+LVWl_mZ}-Q!mnX+N}-7Valocm&nLC6yZzr7}! zep#BW5ab?LKzmBhszbawONnsw%%=0jLGi&L1bCWKS_-?|CK;d-ll#H_@H0UZV)Q)~ zVfrfQ%hQcY6g~HZ%(LyGglYXl{M|dUHcKq%oZPEfKx}Ki0NU@}hA^PDYw!HFb8KDV zb`tBd0C8t^=~xYqaTUkoNt)@u>&~u`e_7>9wo1{F%^)yZXcp7HU+2uvRix3Ad2?*k zwk!OHQ5aL*MNnEmqOdnyF^|9ewemcTo781aT}i(OY~*nm!DjBJWC9Z z!q=%qAoy!AIdO!q>u-OA4~n+z(0EZtvOp(dePx837i(bDKqz=JUae`AsdV*)I?cyC z8~xGAxG9{@knL*K{SK<(`27#4tNl2zS|v(xwVbceUy|z$ zN1WVmCb;UjFoM!G}!bUkG#R)gXymR*o@GE{r2bOA7M2E>xLv+f zoei3wJL~bGYm3qQ*SHNTTG_ECA$8^FMB|p>|q%e2}t# znA>X`9|lxTK2nIwiB{C_p-_Ha@h1F zvj8_dOwNGNUdp$IDCP#JR`o{I(-+)h6-VNSp;B(U#mnNTR%7H=6A9~K?folu=cf@I zT$?H21EEhyw?7i9z&f4Ju8zeRkp@tx6BM(BRywO@hhryWnfQZ@C?oLt33&jzNRi>dPf%d}KHU3sVlMtZ#}<`;D8La+Sw zYKVZBGGkuk-RN4CX(NzKjHtFy7~7_r4IkirrF3<_6{X7Ri5Qk z+jFIp$=SIc2zJFa`%(Cl;YX28i-*9Qz|1Y}8vWv?#?ggeWMf2;Q#sEdycY9|RR<~c z0)D3R_rIrNQy0C;McFj&^(Vn6Jn6>#Y~8ef^q_Nq2aAe^9c0jGhD^5QAfdBOc|G02 zf6zZPSwC+r;74*hP4Gd$32Q}x_y8){l&9vBei z@#6p>71-5F-`ODtc!x$z{YAlpeSO0J`JM2#p8Xa-`eLt;wF+J*1wv)-s9frvRZJ!D z<V~WIv9eK?V}5TzAiTx36_Xu zckkb`FnD9<@%n0`KOnsLJrC9de>L)=pCFYv7wtEdQ|ji)#TJS}W>BYudMpWwk79VtGnMfl4sNcTK5! z{y8-|^n*Gth9p1u#;__#yii&Q$Eu`GtucK0tRBX$Q9NqQ?jfft&iY7kV#&eigV5$) zg+U_+Fva)?H}F`?V58=~@!?9G@&EDmR?&4Wy_)FW0oyS%Gc(1^F*7s9%nWf%Gl`j* zDQ0G7UUm%2%*@Qpy|Upyr$_hg9``=n7mqnd)sj_Jl1lojq*-7tClbSO^X1AN`)x1| zo8!zkEhPaKp+@9_cR04d^}u+$4!A?ndG}WOM~Vdd>5Tgje#p5DcRbb#rYln6qtHm3 zf<6u*Rz=T(-_EtxZi4%C-l4M;Y3QD$JRh5lPG}WoqRbwHEB;_|k_>m08CUN2j5-;)6>-Mo=}ym4f^0BHaya z#8b5dIAqh;-af#H0WV$4`b7(_rJ&|^eIY4a`v|zRWj$AxGcv3X?-mcwW&(vkN{^qD2=Yjk z%*Bi{Ka=D1dc6RBoY?#V4@Io8`A4Bek0YRUiP4^@ToVXXBY4E(Mvse!cm9hib1iAJ zBUGfrJB%X?-)9QHMb$>LDhorcgwLVw?guEE#yGyasJ#+TB#@rFLT53^Jkt|Tq4f*} zbGBT(`av8}o_R@fmW2|Jh+Dl8C98^uqr>hTxX8=cmjxmt;%U`|9X;3sb>g%u1l%RY zO1OG80C$U6P=8(qxr40)h&&%gJmSg5Ta*qp~f(@u5r@VzvZ?Hd09Zo zxxa?l>~a3SAo}ijh=?wh`uRs#C5Jk-pg!G`5w_AL<+)KBvTxv#KFV9HR$BRuX};#^ zCydx_Zb`IGPFIRbWZU$D#gADcxvaE7G)`wOjUb!@}ya{ z3Qw{rb%Rw`IC|l#JmGIqf!(jh<}c+@)uR=@z}`~pEav2i#D}Gag3Yvwz0&Y6ebl8m zn5HqpJ}(g{S443Q0_JN9OI_x&Wqm`%T1^hX*_IN_z0Oj{GkB3xQSuL zGnu@i0P&XP{gYQ3CLYrqP38o+XnUDS;d=xm#+ikG1UZtME;S;aKIU#2CI}ReQXF5; z0{T6Pu5@R|#yf@+TWr?^Tz~dRgazI24qD=Wuqom8=*Wsdz1r_zn7z$?o2OrF0rz2` zVqSVb*5FhuIljtg zsj>OeX8NwJ>P2fkzxIpkuPlG6wsM_c5dktq4Htz~Dlu-#`UQ8T9&t=xOS$VOdS~-g zThHI?OaN+(&rI0LRR@B4iE%1Y3yQ{%`F4)_9j$spaSg(sj;!ZrXSPefiCV2{|4Eum zE--c5)JwcEOJ}+jaZ?-`+SPl^3PQno+Z3pl{gU&RR&N`{IAl~CWi!Usc+e6q1{;8# z-u(nm9@B4Ifge3h(O!>v7k^1vYniwvr)(G0Tux*=*w><_Gqt_NN8otEHO<6A%>8$& z-_`!)si2RZ!J@i|BvzCyyJd};+r7YQ{0m+td!3;3)*eo^w}>jdlA)^jb6z^@HukTD zMiOiT{~uk%%2N-yOp64{kU^8`$vskM0I|dE@W9r@N!gaq&kiy0>K)?TL^W*F~xg52#r2MYHf{+A>PSRln5Q!$d;m z*Dr_R9}{dg!kNs&_TGL|Q^&~@B6GRUmru|3KBif1PMgZ&b1W8!2Kx4`_XmD{JZ9%6 z=TD*qesYZ{W-m|r3kImnW}FMHatPdk?5 zn96@OR}K;ahv)Np`y}_>ri*wM`*yBO+5Ur>mKDNXq!q%*lU*1V=B{y$ zT!OEgQ_EPYVqIgRO02?{_Jjb)ur76p{~jv~pI#eb3Vs6TguNS#yt9x!)J%At`jvoNWc$P*M*%(drRb z=!uI99SSfcz6c!(`rNWGB#;blnEeXu&7fAr?~up8-bqZxP&K((?QdY(wt9aiW@rMR zjr-x(Mx`-Y5QsE2vO_( z6xz&@X|8OO{ZLhLAgk%%vjl{j-%JWZc)=OCpp$8U2};uuU5Ag{xo>me z*R5j95+sJL|5{R6U9_>j*cft^bGQ5jg)iXxj*|9R0Z~o2rAchGZwYu-iK>@CMGYjM zqkzFlt7U7*wrhiaeQ+RaZ#$Kg#g4b2*xOC@=(NN;JBe2FBdFvbbnCpKUi@=$F}*sg z#tXvB?}XS)QxQnAl}f%1v`vNJPyqM>!HK)tk$jmoqV-{39lz~VF-#68UxT5xuCAzB z`or1dx+?`Sp)F4)P}R)koqtQuFCaj;DM9&JWYewnyblqd)7TG8=InTMwVuS`*a((@ zi8fD$8=AH0vCg!I^HLu+|5Zt6dT(uVnUp8nq%btTL8Fq-=kQmauL@zKQ?2_T$wjv5 zr%lPFv!+Chk!03)md1g5VKN=_-_ek;!{bvI)-LbY+;jl*`jAucLj04DZRY!|+;U}| z?VEvXBclzULGQknRTIf*=s1%E$!5L?-5NZ*z_qW8WorcbJ$jay$NfrVrPl}4^CJ}| zMj3o_Po?JzQZ|v*cuWWDfA0M&EAyD>-fI6y(BhBmiovSlerCn(W>=%tTPiO8B*+tTwzgvf- zKtrac`n+e8CU8*x4G1N+YYYSM&+xJFrUKt9ssv$X;@Jkxw&(f}K$J{SfinPw+x@O2 zfRe55VcpXAMl8YIm^k_Z3he~0ooEJ?A41>P=1Fr_CYg1+oeocM=2|&lw&`>b6zSUb zR>}=EKYFoUu5p8qj+^lC?7(+>pyOKVsrK%)aqITATj%gek8za%2e=M(ENPa%XH^<( z??h|h`_8+vfG!z%eeEXB;isVLoGSA=cw&3my?d=h*y*IR$n*3(h$?&kQkLZ9QFU?J z|B-IPSRF8kf3NkS+ENB>MPE4(qEaP-&>Nxj=Vog0zlemqb+??+@0N~?<}c!GD!yew zc>FJI0{)vi?N#^nIBP&7nZ)}FZo_r7zTXImy#?(a(u?&{|G6$O)8Vgk@``IPAOC@I z)?HAIfhMe3!FxB>^IF-juc$6#7j`J#u#+K2tICmx{KX1qkozC za{f!fJYc6_mDAgv;pL(S*g!haZ>&Gl)^(5Sb<0}%;|vR^gQWCemuZ9qeIidgC5VmK zdWW_0V1tG@Z_Wln{Bk%t_yrNaOpq7qQj7Jf{^+`7Ce%Vuvo8mts*%+MKxJDyamgYV z<+b7rsps2yFc2(3!S1Q&k^22k8NFtfZ*9wD*g8 z#=bY1Hw4^WU}imC3UvV6SnEj9A41OX%U-w$s7|)XZfEU(S=rXDBv4dK#d;}&gZUb^ z1UNHO^_WU3FUmUNXl}jd@6xw(WRovCqr+FV1b%A;{`?(~zKwTOZP*)x(gjIhm&MB` zd%bkb(J!ks5-CX_Ba!}e`0&N?&_JMHgXVGVHj&Vm|0#1ldi4cK?S!SV{S3L({j9^? zB;B>Lgn6?u_UzDDB4=lx%3+r(!LW}wAZ8VxQ#>$z-)>d$Y0sRS%j2j(^Q`68WqDSQ zlc;Ca1F-|puGO3Ux;&2eW;VXo(m-`XVjGVkXM|$^Ztcb2-Q`$PZ#25R!8KK|pDUen znSc%I!)oh26MB0!B>OQrP*!vin(jPVa1N=f?KI1M%`d!}F_zLXGVP;Ypw3JiS`4M6 zCt>puH9^9;^UH%x5-SJEnRVk9i*uEevCdCf^3@hdNhn?C5ngxO!S%b_5ohMEZIR0f zfcUbWX^rQE_m0>ep4QIejhKPIRs4Gmtc}1&;K%!~qnmcK=zI?jjAl~;c|(12FPJZ$ zlQyl6lR3>xOGGc&UoyCGZLcf#tr?ucKb@Be_64J9pZm=7-$|*3>d`setIcjKCD%2t zcnX66cQzjbFO~=*`w4MNZqMvG>0gIBgcd_T0-YQ`dsVLLuR={X^gHw~6HaqmKL|p=IQ(tf@Hv21VX9;l@ zdF3T7IU|1He6cjQXjU@-#Xv7y>oh*~uXalSNbPuyRO$)wd({)|mzysUBKBpIx1dKs zX{0H-*=E<3ht4I*XDz(a$4?iG?G8Ze?b$MkZIok@prPy378JERr z^xT1EPj|yY1%5JM!Xr-Jx7kzCu-5sDjQOi<>q}{xmrzK$2z`gTcYq!VB%z-e6)_)B z$zN(P6)8Q;lTCJtYNy0A(qn>n`o34}^T>xD&=F4{bKa}L=msAy@}uEsMpEfdTrW)R zQ-e9y2dcwCM1h-^qkTCY;OUdW=V#6KJy%uscT8Wp_jlLrXGie8K07JM1V)9@!OeJ`bR3X%#*Qm8C7PaYH#q; zV3R&?S@>|RpF5r9eTv(BUH0JGDdYoM%kVRseFqyCpGjWS@t3H#OLw>X^#PEC?RlY= zCK@xUq({$?>7RLzZGnJaw)cjT)8i_^b;uiUhT@8O4S&w{2f?-lgw#n}>0SdD^_RXie&}BV zOO$tSRMVYz1j_e}dZ)g9J_EqKzd{-g+iy?7Fa9^ruP5F(hkBb1gZ4gILqV~JtrrdE z=c^B6+^ohlmhsjb!l3!u^#$v}Dvm>{X2MDH{eppAaF9>ruLC%dp=#K`Dl+ub2dwiF zoy3xJDUtbmXp6V1?s%{j&%9PkJK9;Buj2=<3rIw}7VT&I#UmbdK|tdvKKn=H1b5$$ z9V9X9MjF2ocB8HhAb}23!ENpDLw}bnApgHVEq#`0kd&8?c&Se*pJ=wED1SKK{63A_ z@cdbjVD;u6j_Y*C>9|`X1lz0peD3udWar~O^MK@UTtLhk1FLBomg9*fmq~uDHQI`n z6%F9bX#eqG_VBYPuKqK8ML6LK7@MTgN^p!$@&<3S&iF^;Gs1UkqF6f`x8Tk8a3TVB z{lFfU0OHf6bC2t;Mx4zn_KpV&oSBDZ2Tr>PE5ChO{`AQ5HC#csemOZs*cG!oCbCHBICD7f67#kDj zbfyd8^%#ehJmAv8IX?r8l@O7OlimiOXKmh`V6+Z^jKd41d7}TSo~vh`;cLPFQ=xY+YiPVq^XCHOO8MPdAUH8-wQ-++K0rT=z-%02OP5c^z;I z|FkonqiTVsf4ArCnI=Kz3du8ju)*iz)DL$izyv1Fy^YFoJ~W-uWj^3K-{RQzbItp` zwmf@#`j5>gZR_K;AqFLaR^{MZ-9}*2CFy|I& zufE|wFnC?z(h;+rfoXv1yI+q*3n2Zx>Vj0^DIWES0~N1iEPs(T=b7}^i-*Kv5HCzf zow*IjyRC&RIwv^=g_xjoZb{NKdi8>EeRxon5Ih-3lhm@>sh8Pq1BMrUaLX}z^L+z= zDWAeAjHmSSkk~I$-;UiIbTLMX1r{{Ny}9zI-BCVaswnGEtBDXY)13pTuSh*3!)4<_PD- z;5sAHyDAj2u1L%$o@2$?=xN5? zVVvyU>mNi|5^UY>29HE`cD&fLX_mH@aHec_{9i&YIMt9B-}#cGr)%J*rZ zkJxqXlcnVUKuqOOe+1!ZO;8wc@d9Q8@`I@AK0v%HSFitTXj}pC+T6ABD%4?uKdgBa zR@3ijekuZS4Q|VS*V9nSm;Jgn0I4sr`Z*B+QX+!4!zq_+co3G#EWU4uh!L)IE~;V4 z4Ir5i%zrD zmfOj0pvRtL&jH{n_bxb?#&E>LyONG}%`BUw6T9Jd$UixaLE?O;-gyn)l0;zhxeY5-w5CpUr)!@Tpmk)b6lpEt)bgkV`eC5Fh)G4 z#zB8CjK_hPH0Q(qV~LKaZ6e@~W|Ntul9mE}9`|DJ7zaR6?-SkG{Gws?inW?j=AE@% zm&os1qHj~{zsL2MVTZTtrP6QACwv-NRdYLi-0}#>OhLQm=ogV33%G!CJGq7iX(kP% zcuijSKp7&JK7`Dg+~LgfjJ%$VKMLIZHh8IJ@DiRX+WoO+BO+G-XmnhDLZM*+L0v=;G(-j`Xy#m0XMd<2;F=nns=liWmuWWyQS12p(YgSV zHx@~Dm5}guL;IR5^gG!c6gTs<^dUgQx--#H=uSoYINYYz$wLPPNxG^+sCi3QSNg)! zpWPDlCwa} zjEr~nDfY)7bvxwio%R#tSJg#4pfBrFjyKu%HeY0x1Nvy)50W zUqP+WJGoOC29vGf1+<4P5684T;PTfM?#s81yuN8~jl!^<>?H4sBTkTq+G7WjMhBOY zb42ug86Yk`&Cq&1xQ_S2>)752xd1(70z=o~%f5%V9O6ctuu8Kqu;1Y!yx);U!!Pnc zuX%lQ)c;LS&VB^#QLyn5SS8xhoHqXXm-j^r8A*>&d`XAJgnfzDGw?XSYGac^U``XY z99U(7BFrO^p<`6b4EdJ~{YDj=Cvnf&^o`x=2L_#D(vfS;?rrUqNcAs)Hzjz_p$b zbNz{3mom)xlcdS8xheRi3r)qSNlkn&q?FV~3VG34Fm4%q>RVot8G14pT|SMaSNed*DABBL;8Jy9 z--y3o!?Bi*%{Gawa5~rm{fXU<6)m zzzaLYV!jj<9@J0r_-;1<8P()mBel}5MA_yG*-K}t#{<*I#gHC+RA2D(_uj@aZakZ3 z&egZWSZ}r7PpbrQfmqcy=N7pZ@nz;-yOv)Qd?sG!HZ(?2hQ2hp*^zkMIVU3vyRn<; z$aQi#34^$Ji#&Uedv*9>NOA=?)f75k0Qnz+94&N@p^iWMFdo#yyJmoK)2&3*j;Fbj zC%<$q+U#kTgeu(r70~>SX7>xy$qUs@>`Q-)CclK=*)A)I-;uO_sTLORCIsJ%@)M zCAcuMCGoyIlJXYyiupe`y!B37IRFIredwzQNf?hG-P~S0Ewv$oEvfw&f!;RunF>W1 z28X_uoqdr+WVAi+WEhyoXo+bg-!1WkHh8UL5oK3vP_LWsK$Dj9a>^!%akQxt@y0Vx zHU98hSx>M1DunRf%|-Hk<-U{0(ZX0CH5G=Lk4I1E$^bzqlQ^jh*~Iz37~xxdDr7OK zyf%o#HpXUgQm}M=kFlW{Zfw74<4kY(3jO63jinb6fwI&bQh)IJbZa8{pSk>Nz}b$_ zt9$LSS4f-Rn2wOoyJlWB%U^GcfPlGh>YLKPe}$rZXB} zq;uP^datoa>)HyyQn^>{dmf>Zvj?H&4M8ptoAX;L_Wojw972!?OQY>kerwzBStj`O zTiX7C)S=k_V&}8Ck8HUAVTI^{jDjveqP*yNkR~d9`Y#`UGX>!rX8#Xd2^bO+=FQuF z(6t6BaGgh0-ho_n%nPvaqbp6f3xa%^Cu;l8uzl7`W5yM;kB_n^ICk*@y_Z{;cY6+|YUv*!=R8-mT) z>`rO7zzI&^$udNvTy7e~gu#&{Ukl2iTpR3(VX<{V1ySi#A!L?|f<(d-gd{ueuX7p_ zW{_@P&{&h!D?0q5x_oDe9)?4m?~fE;f!w{`^TzdKIZbEphjQkKBmY@Df^f_FDQCXB z$GXhT#QIvgpN@X;9^#Q*B3KHdH`u$RADI$><_{fTEf9*2u!Sw~A?;CJa1b$x>go~V zh;Y!6OGNG&?oXNmmw|NT+%Scq@O#et;cR;(W1;P*+13_1e9BKAO}P>RP=tZMBzfSE zAB$Ez#Enkm3&rtO?#&jc5plLq;CM1~`Tm2R7}ZYS5dV>+bavRuqcWIOPP?Ai*E?8F zFSB1@9uA-i_i?qOD?*_&JaM#Bfin1c(D6Cvri-cov7h=w4n`qgrYMT zCTv#tv3~U7#^mYT4<(5o=+?)WJm|Y%>QR5=Qi9Y;RKfR$`Oy2+`gKk*gY{2zJa4+< zMYEp6c66sPW`08FaeW$s*S-3R*) zrAWAvBaaqtg&##emt=x!mLIJi;}zG?QlwFqhKzu1CsXEJP#$UEQpb4Zjzv-O?HM=X)OuQG1`v_Zamy0n zElsMHsrD3_@9nhQ0!+E)t>*Oqyi0TBvNbaLykf$L+15zwvI04a4nLp4q<^XWb5@`O z$J;7gs}vKp@nMLmz>t8@=J^)sBA%>`UGCXbbN*F7yMyl)VpVq6AufwZOw>og!cy2A z5PZJ^cphsuyq+w(QsV|atpKArLb9_|MCHgK3Q~2p8iDK>_@z8}by-m0N4+E&)KmL> z(@D>?c&wwqjqrOyi>4YLG9s}u1p>`&RTFp#lZV57vKIc|-soO#ukNx`X1 zUo$SFamUj41hprG$V;mmdp%4=wHhTkfMd5X#KR@UZ=Tvj4yRpgGa?*@ff(hvGLL0! zc7gW|FKleUsX{(w316A}VUK#6+qrCMf{13{vm2%UV;A;t^`#d1T6So`=FD)`r=Fmw zv~Tk`o*Vl^R2wkSi%)Z?*yg*wY}mV&*E#bM%UaDh+|@Yzm=siV0paRMFE5QOVPR^= zt7y9lA8^IrCBr2*V9Dc{_4}dhMZ#ExNst?Y$3549ES2uv-*y>d(5qXr9CH)rTaEaA z)ai8`1SCF%OVIU55{A^Y&#n}rh|&}XBGjSZ$YTq-(lgfeU~W3BOi>ReDueBL=%r>` z?n6D&el|c&ZV-6l1$;bbs9FzZxZrXz1HhCc!bq2lNc0FxqX%! zngD8R^8Ed*i;Xh>Oyh}b85XsrZriz1XBXdm0{69ZZSOL)44Yo3GUWdCv7Vb=EuOay zE9W~N426ncuj@iIemdp!7PUg>X+yp1i~rcmoE0?1d~2G ziLJ{$lmgh;sD3SbA$++rD~;odzpb^&*#jc`=xwQ`I-{L$I-`xd!z_)?8r|t{s&jf_ z9MjvHsod?oBUZf)wNk|8aDDOmsL$jH+HFDi4-aegwE-h;X^q>|wK-oR%7KX7OwNo< ztFkwfw;}{SMH)-wYt7DS=hbDB*JYx0-X*<#hBpmV8z7i~?rox!7s;2krIC#0KtTSK z?#}qCqGRKz2mEx%#I?wW{d$cFw!Yd1+WaqZz3+)2D>H%8(#b`tgLGt&_GM76pXeC( z5s5+b>JFE$pn=T&YzwW#Rty_kkcQ&GS}~H#8Gk3N(jP3T2zyN9rdc(6E51HPT^~&r zL1;!0w%GhOa-{>ju=7ow@3t2Tpr4U0R&F*Ao38rQJRi8V-uR2#UTohzYnj%UaAGQ8 z_vmw?#o^pHROV)zr4YR01w4i3oAfr9>e;)y&Ov`Og;WffvG}hGK+wmKBM*B$ z%iZ_t-i-uwwq$*h)B2%XojR7nVQ>2A&N^XB+H!8vzs2OZAPdfqatPa~8RIlI@ZC*5 zUu))u!`KaHu#kL~oyTz5b&hj2)Bf!LYcK_aYg5kCrxLn4U-KNY6M=Ac1hi@p&FPn5 z+i+M&aGWC|FS2Tq*=e}G00^mWnt%Sin@eVXr<3r&AWE@)KV`(b!Vz*79Rp9k$O)kX*l^#yU0P zIKr#0;Cc0RP1CWKFj(sA)YOH@@3F;l^>6sh-q{Tk)~g&_+kFHEYx@=r>gP%nP?_yQ z5G`(aEJ$D6OnC(EZ5^I?y~twH3=MZZZ`06a)s+woN+r5}oYgVtr5C(QbCbr^Z}FjQ zuRYZBKFsZWg65(oG_xJtVVZ#oe*>BPfPTCxQ8>pWcI&W<5n8nP21B}x+8-R@np2+_ zqQBYDO;IG+)eQj@NPYK$l2r&2AGnM}u?TgR@9^b#kN)7Zt0=r+v+1r=-~tD8(@I4) zP1QV2R?cE}bYKkG=1eq>A8TAlwwXm3@X73e1LHGiHUp1$>~2Y0#EsYgn^)4c^}qO| z5p(ZB(P~`kuiEW3jKIYA!skedaN+V7&Sm}dH{gdAi?)lN8V@vB;ke}+wu*T}+rT8Y zH?wkTFH@?+$>b;u?tt8*ucJ6<@q5%ILAS2XF7$!R9P~WYMpDh{dv%^n7p zE`ig%_G1YLDXNorAO^e7phFr*59}Aw+^;-`Pu}OdIb}VXRnyHc7f{9nj?7E`ByJAN z`IREhob1M-%R5SB0ovco*EDe^F;>cT?d@9}jkQ50t%bW(1f#<^3;RzH8Qmhc6cvut z=UrJTEOhWG2d-2bS-y5uHJ%qnXh34czuXZweqHYBP;UELrLedO>%ceUVZEl0QXX){ znC1IV;h1vQnzh<*g1K0&(ZPebX3v9d9&~p5lIwO0-*w*X^7=KkxcC!H7!nDettr?a zRn`+0a>(^ZD@niN0NR%JkI2H|$h>_GXv|>5 z6tgAwE9%3ax-7)YTA{|LPr5D8>Wg&bq$rSSS)TDDPvZx&<5&JX-nArUOfl{Ig{K$s zT;}?0e5xCnw|+ZRT`#{glOJ0qL&8=!zi8VWG(4&YQRMxxbcyAi zbpZPfZ4SihTx^_`nWmH3mw%vg-wA5eUTP7BkNm*p^b%L;{KJijF_Dh4yaTm}iQnr zGA6xwC$;G?j;;jb4YrgrYgrSGmDE*d-fakLjY>Rct~4ctJ=ZjzjXkPRJsr$jwnMd)VA zkOdpB-|6VQ-3<~oLw|AKcWHIocHsl^ox?@RaKjJPMBkQqA5+wT{yq{jnh;@oojN)=tGdKUaNe z;xpc7)FpoHbl`7^gW2bI`|fDMOf--Z#JwxqYpHE1*J&x36yvNqR^}Wo>?Dz7I9&cW}3d;a*yQK(EUWSTtPC@s!?Q}*Jht`o? z!;f}FNB1$&zaHg2gzf4>%Yn*jjxP1;JGGJp51?7PYA2v5l4lT?RVSoa}R z|KMl^C*mtQ}4UEaj$` z(%7aRb~1kR8{s{5$gSqh=2dWa;)Y#%#48-oy5h=jcdrcH0=ms#AEN7rUTytoME+uS zpayQ`n9)7;KMn7j6g%*!&+4l2kSUm5JoNOOv;PQ*Iu6v_b^33R``rh-ioR>SV|oB( zM9%#DlY|6k_jL|;)LixLurwBV|9n9DapN|Er>kG_?JF$en797(=6ILKst(zAWS(@O zK<<;6pyh-nAEUDYmzw=27OTfXlf}Xu_p_q9n`9zKhzW2x)Tc@Nae1wy=cW0w!r9nM zxCsFc!*z~k=^|G-rv->inmJIVmQywCdl5!&m+q$YnqRqf46EuGO)-;=+1ZNF@s!h*Vm@tYIrD#ZQo%?G+bPMt8UuAU6S#D zU%%zvBP8FMKoMq8Y@I!kO!w=L%e)wts#o5taST>&yiZ~F5YKl^un>wp(_sUsOs=A zLyqfsi}=u$4=y?tWgIBMNv8I@n%6rTTsTr81FFJBMHOtlhwO zQv@D&+^B?J5R1_8Xk}ZW#F<4HXs=k+%x;3el@=Xh-q9O8D$%5V_k3_ie?@_+yOQ+Z z5G!xyrWN2n=+F)Fs8rXqdp=01!4W&6=&*yY6AWbZU28X{WJdm zBai>z_z0)F-cfksBxJ$uKb{UE;C1WVJpb9$gkx)Kdv@=2_V~<`bH|tn$OL})&%8ab z8uc*O!#6C3-`%;x27i$J!~%e-;z@fL() zO#GkU!|We&VST~gl+@KtZ_^!4p;KurAD5Zb$|raRklf7 zHFcmybE|~~JP99%yRlAnNTquiqjy>VMV{mtqsB=TIVWh|=(4wk7t#^T>y*pk$Ax6b zULpbSJr4O8mtr{Q`V8ZLNm95&`ofW4wEKt9*F7Db-?UwhlD;|i5?`Ef2*9gu_Jf5t z|1)P3+}VP>t`^4lU+?O|kHg8ZMsQ}q%o|re48UecHddPk(ziLn(fr}NeiJU!*C0xsJ;Rdz!s z9FVf%7US^`7S#V4DaR~>!yuiB{8R37>C>G;zjPBNRlqdT>dl*hD zL2I2>BWvIiyC@C(QPg{1I>_Q43-!qW0XFAl)G?$)yI)KnYmU}QwPvAHR-(TgRU z2KhRNd)in$Gw`nzv5qyqZrA;b1cS@)gUxc8&o}VQO*TWF%iWPzOEc!GjG^mo=6`@d z;x>!*a(EKM2Om`WKMR9ErNq%yQ7q9_(JV1lteZRdGH4u|rrq-98)PU98UGO?i>o;< z)N;N+y2WU(&9uRmyX?6J0Adv4d?NdE!vD-QHVHE+g+LjgN;0xwuB?x%$c$+Jj`nRd zA&x{g%{W0H-mdD>h*i+>V#A>ta`sYe28l71F|{#`F|F|-zV$9X42aVO6OxDU&l0H` z`4E>7JIb3b?uRLf>Owv?qP}NZ0uzkDngALz0Rh}gT%__20qOr;z-X5_AOe;~Mzcg| zlSaJ{;vx+|(c1oe5i>_(-0XU&&JO}{p^gZVCRKg}OVzsn%cBV~a_n0zGMZUbHy&ej zl-a4NT!MYQVXjoiNE2cdD$&dTT6_71Ffw_6?vx9F{#^dOPTC|hslCQJM~YrxSY6mx z^0&cj@PV6QkqLqSPTu}$FXaBA1H~fsI^;8lHkWHzB`t(F&NY1?OJbDOwKTz9zTf7f zC6Om?H;;_J4Q85P!lkz=?h$Bdu^E|vuX{DFbRJh5aTPPt)0B2MJ}VAN+9WP zw=-1J44iVMm4Wm1W|>t&I9v+Y#g>5#)H@(4jhj?*j*BdGgF#-OVd$f{n;ZWkw3>mZ=$O!%vvJ?dd`h+-f-K`0i9Gf50g*Hed>! zH^?RTUH7{498HwS#EH+c~0U;nBRSk49PF_BH=&9MC((v?J zP1LY8QBxXNB%CUJi5gjyQL2$C#ZKtk#h%5vAP!w}l8?L+fvRt_akZ_~Ql?A!w#>Ls z+EbLbOn0+?ipH};#`9}P7;rOGd*>^2+aCitQ!J-2TeNzY^BHejC#_U@EhM_#cV2%p zjqIa6lz9^JL_?uQh$sXAH~C2_ZEikkE2?vUcXs3`wz>DUffig~w{YM?lXj!cQsd*|L-`1b#l=Jq zgJ?Aj>jWqSbrNUU)U${?-c7{E9T}-k)pp2xiwVHebsrvi(L==kNWa+xKRA~wu;0Hw z)V_W)NZ|nr%pJ^T4p7qj6~KX+NldU*41%+}t#pFEDbts2FXtK3$>1s_+cO|E)UUtW zj?gX2K~>PhkcM-P&YK)&buFMpE3NrijaY|qF;q@rzKxkpPhQdG+gz-SzGF)EQPG}- z_OSbcC*h2Dk$h7r%CgTKQ#HF?=NXnLmblKe$xXkX3kt+B1?)4t>%%y%fB&vt+@DPo zWiNDd_`Ah(=r>pW?^_6&#w0F7KkC}DU|rp;T$;Hte-t39<@smnV8O~L;W#phwJGBg zEF#4z7cWjTS~CoW$SB5U1Xd3!Z<(7DGb~gbnhCI~wH%1i)Sr^f=PT*rG>sZAGF;uo zO&6~4IxMMhgMnW`tP$_@&jzi(fkyKux!INUm zf!zbrzDXo(MMYf>61gVXKMVgzMlEL$i?<~xDx+z5)AV)VgJv`2Lzaow@9C`G2E-vs zDLbp^!k4JNr>*T0Q!05V_SG5~8gWS>RgHz6auyd3r>+3lN+ejL((Sj4%M0x~CUWYv zQ*tGhMytPBit;Z?m!4}}Dr(1&xkdcplpbTW?Cd(K5pYvL_1lt|Bvwz-Nx+L&VVbLl z1#PBUJ`l1}nfavAN%W!!KhTC3(lQFi!{+VMnf8YqvCvp14-D7p3B8pQ3kX(W?0cCo zFi;CRIs&}nRHx=({j~Bk{C^DIbTq1CZIc!-yHg6aJx!#hhQ}bw$zB&Q>(Ee9Xg5iX zAD!G_WU83<2zJP6X&{ zq4ErMFiVdS?gzlfKTz?5EsWQT#G_Mko?>99rT`t|)ac@q4|!~uTPFTxHp<7!w^I65 z#*d%8!>7yn*v;JH#N(9II0}f7iq!hD#4{Yo0@88Lbx3(Akqrh(~DfrwHv4I0{P z+4UL=wy-520<07T=;=CC3-f1;R`ksA>7Qp|> z!hmI3O(48mmpD>_D;@en=157$j)_-e&_#`%b~`10kSWGMPfb71{Y$RM4DI_yp-2f1 z>9}m$>z{bfAwkg7d3}4IZ6k!kMS}Gbt?X^Xixsl*h9KJMI$WNWUkgKFWHQM3DV|^A zLZ*%IM+$0OtH9og!{_lu~UW4r0zAhl4_ zypN*FpLv^7J z$Q0k7F~bXE+6xaRE~lTh)yj7&@YSqNE~d)nHPuQN%(l^$Yv7b}Pv>#b69Liod_|S) z2XZ-8Z#sBw@hORXn0wY0umE&@WZ`J+r4er^wnYfpY85-ir%l7J;mfW+44dyqS(tf@DQd9}-6D6I0X0}HMTA4|gLu*+*C@VwQ@%SnL4cjtfG)v;-d_Z3 z#$F%`}K78{PU)_M7tF=3ASIi86})>Lc=E9s`vS(r1;g&C1`T zquQJkvWca&7}Xc-q`$~Z+prxE3wa!Xt%WJfJpCFA7ZtjTKA8r?+fc&7l^GPUOW_QR zjLvi&3{ulEWsi4h?g0kvrYE#%w?_&c-a~-Urz{rmhwDPxhT0px zU?g4H>Ez4;?d)=O?Pc)KITfqH5T%tQ)O801cA^{Qpy4IG(p=9eF093Xx;QVBlrE`} zPnKUvs+FfN={3Cdw+KfEJ}IfuvQA%?(N~n@M|-Fa6%!JGMco4STZf&Sya|I-ps!1Z zN7QG34U2!rmL>&cbCyz*xo2EUXp4O_qdidxlPT2A|9{YSUsm zOMDm-gWo)A%$%%$(hGksaalY1u<4{|WR1#B5|W2J15yR@zFEj+W4eaR%XOfzWAsIQ zl!zN*sG20r35TYQq)xt7=QuSWp4d#GNcSjdwf zulo_%3Ca&ZG|5_yJle;p9Oh6foJP3pG_D1glA?3d>q}X34>b6!NT~6WDLjsfXb0GS zE>XHo#h4gq;x;AOwRbsdg0ZRiAH=<7SX|$dH%bHu79==?;O-3pLV)1z4h;l%cin&7 z3GVLhuE858xVr=m?vS_1nR7<&Gjs3EoO^G7;Az;Kz1ON$wN}Zms-n)-SOs@RmVEUh zqTR=G>37KAJz4vhkqD&dg&@D<`7fSL6?uyHp6iN!uhhIF~7sjg4Fwu!>;(Cu?w z9yMbe(}jdQ!|?t_MO>D#MNp_)rD33pfvz9r7X3G7Xx?0rgl?U{<%`XrM~$&AR;B3z zGSRD_p^AvoszoK1$cnM<5d|9IH4_1>h)AE*gEu%^_)}9?Gh>gVH>x3UVM<)9KvxtW zsH~d{+4Wphx~XofqsEej=$pzE*@*jio)9ycQ2v2_ltCI+PTF+E{@I#3i2qZ2b)6ZR zO9g+p=?!jP{sKx-Im(0Ghwxa;A?m*t*5a+?7=5TS%S6&xf@I30`2 zwU@d=<+`HVhTPg_fTmc$6XKMEAB$s<*X$qZvoKnkin4(j;tn zXDO;jO*0(r0hQ`OLHV2YFMIQl$#3s#>hiTejMEzI7z9LEhPcJgcaFOQIrqlRP$O^8 z-C>b)Ln)DhezcUAS(7b{@PL86iY=_MEo0-f>74nxO7;*pFS0+jX>qw+EeXIz9i?*XBl9t z{@VV!ErgPEW}G6+W#Juwa$zaSm7TNOFH$R*@W!Mp8bYr!sFl!RADCVxuc89g@#yhu zkO(jRo4eMClBpq3pcM5qFADpKhOFzRpdkX{C6VWLEb9dNts%R_i?N1!110Qi>WTQk zSK#giNP=RZCf49 z#q~%5nGRc6+~rssc4a#K+&P;1Q4vdD9^d!gA$!K!qzDLp0+I^5t=)!bR&Qdu;wk3NiY(;*hTW4ESt7t(b(f7L* zjx+=9Q0eI~1H|6qTwFjz+uPCV+rFZqUzNo*?P{^zC3sj+MdN4NxSIKgM*RBM!pIb^ zd2!Su=mWR)_=3eBecmWnW6@RSQNp_(Sw$+nc6yrT#7~I^@H}>oLqJ;3(ut@wQ%Obx zS+^x6Fyx*=bj(m=sfGf~&#{;uToAB+{fzgMyC289xn0iCo479Tks_KUXxUYc3p3sEXvY7D=KnoTs-HkRsL*-qN(#L!;oe%)KAoI+rD>e%mMcP2Jp%+}(C5x`d?{AYW1n_BQbC)-JJ1l> zy_Wn+mpDLYU0GF;p}SBR%&WqlXBQucm^(xlq!_j3(i`Q7x|8#TZjqgu#;MdrOkD7U z?A^+qn!N7@sr#ZLBt8Ajl#*HnuFQa-`0cUM3XdJ8IMo!~%JIazeOkMyloBxaW@_fn zuoU3wso!!jRSF)uQI-#$uydD`mif5wOHWEzq@I1JE^oW#7DXBAO45@aX0y!U3}rG_ z?@@?4rqeW?>3EcFjk9Bw;dNwNc^X@s`^oHb<3X@4eoNwYb)d6RJQ>k5oCLDnGF9EE z2IJuWRu3I}uyv9#pB^N@BCx#~C|J)tk_EEeOt(zsDC#=UfBVq!Qv^!lC$^$MjRyB_p}m{buTC=I8fEE@?IjE)fF$E zwrk2-;z?Y*;GltwA+!ffXA>G?IRY;XXBEj7$4gsCsD^kwludh$uzb&FpYDnkVue4= z32Kck3{qBLMbvLlBB;C0WK~bBO#Bs}8ew7nE#MBKW{rk8t`?4w*NRiO>O3WlKmB>W zWZ+XGCEhhF`|*TNI{uTM=qFZ-6e(Bnq|Nrz%<}AE-W1A)$9cA8VzQR+$=`qw0nGTo zbZN4TSC?uNxuOfzvC;lu%fsR?rbU-YLzd1J>bcw43xVc)~8P~$KDu_rdoGT00$|uHf)^Y@XG1Wc$IRLY34l1 z2-^w#YCRQ=Y_cCsvgak!o%l2)3iV&^-TGgZP&&UW;-a3ZIEvGmJdaFD4?aAkhv>%J zQR}6dnCj+E#gQ?Av}i8WX@U65!DVJL*${;}hRuLf$*&pynY9Iac|eRth@@wK2Pu_d z@g4oEp;7A!aZ!GLnI3zB1v2Zm)eSHM^%yu-6XrArUhE>SVjjD)1%)jm>O6%y4%HFI zuj#KgBmIU+TePNoA%OgOY8=DkVEx;}*e5K`K6(lQ;T^0Wu=_+qN}iBtUbViuFCV%K zq3zHm9I>m(D?HUIS|=Kbho(}!>D~Q>9c^XS4#P_yB&Oyy?AlzXBfu@WYO`6Y;jj0D zzPOdQx#gm7!_GMRD@|)3Tu!r7kHmC?%ef?5r%qtE4(IGUCq!xdYE3l z9l3|Q2>mEPFpm|0KHHt(pT1{1;cPRMaSsBz2^>N(Zz&pwx=ZhLw8G66r`hvqdrM&Q;)($lX1(dz#O64Rv}Es89|fg& z$8A9MH}Y13>VfT8G>Bq<`-sg<%05&szi<8)e<$MSf*M2}JC2$G!f%ue&tBZdPIRDg zhc+5%8|jqPN>i*p>V;Lu?G9B2i|(`KFSE4kor>JcYB3Da8zLc2=y81918$4q&EKk( zm$!AV4c)Z4XeG}a2wpb$0J!@(_6KVk)-_KH&9%(lQ zCtl`#Eg%uT?rxTqpw0e3y5Oh~sac3=tr;SPA~C&NWA5sV4t4JoA+8{W?`zA+M&m{x zMaC}oy{)zlJVstzuGI~+?1Clo0`4F$>y zk8G^ ze|GAkP_ubpIt@%Maw^Rp@pT?7@6BQ7>+)nu553?t7w)Zwm+fcbZNrsaal`0q)KYue z8ngKk6PS7Niw|Xsh0PPFLDsQ^)0k=Z?LT%!mZn+>b!U`O)!*;hn|Mf1h==y-+oIf@eb zH2BC=(Tiej-IaV0*KXB+#0E{U4(eLgF-fYnUiladG5D) zSsa=1v<>R9bYMR=$GXEyXmRY6P7bP}WD_`$C^M&=eadqu! zl`t@hl>VN;%WGOtZKgEFiObUZ_d8(GjhV5P>t-g={mF%UG;NuXlSxSBuO-_qa4ON2 z*;gRugYA>bp-stY(-?qyTH)-$X|O`#mM3BTb%)xc zoOFclAJI9v;Q2xHPU@*D=7=|*onJ^FZ&nYOh}XZzF!O3!bFCLq$l%*^vH> zX5RtA*Br9?UXfASS8X_SGGp(&k$=C^9i%VYt=qkEXfL_MdD`>N_mY|exNj*~yT75e z2@pRo#{UfbUM@Tx>GDQ6aMbE6Q_I@7^$g#xldN>QAC=Cy7#UV%(|^-2^7o(=-p>oM zmba>jWHd8X8m^TsDCD*%71^!D>>G#?Q=Spud0p@Tz%q?DWixW?0muFAv1 zE?>Xp?;AM9vtNC{X2&Oq50K`qOV}I4)&8Z&BSeb@@TBd92Zvb(*iWN^Ku1Z-o3FhY z)=GzgsC|34nQ_w!n1|=n?mANa{FkBT5u%%z^KK9{crNCk5UHgRy0D;;&LQBI5$54p zF@4thC*Iu?MD!j)o2U%GvBf+C?UD$EB4ig8iFdHd0cQjJ8CBV1trN~TU}FE@qutV~U- z6!qa%BYWVI2$IM^Is(qBk$+zrl2_hV=G`Ju*kO7MqtpvB9UNg~0zuve)2#HGc{$=7 zHu$1pAC8en0p`Cyopt=@se-rIV2ymS@O-==&$d*knsphA$*X~1j6$97o!7!VkHjV@ z3}g(f3?h1xT;GK;2_gM!d^R}oIEPuHUcR|ktlDz%BRBh1*w6!sOqOo$A|w^}RlNQ5 z-zk8`in})jwRMxbu}q?X?gj%+EUVM)y7seToe7S}rbsT^(J1@Npx}2If1eB<@`cHE zkbG(yVy$8kHXkpqHn)6hgVnOxE@=w^G_m3xh>umZ&ws37@?Rkcv@Cq~La`R|?P-XO zrAla`PE1Bb1~Sk>(l5`+&v#MTULg z-=WD>yGK?fa6ONU#ol0Nh$|58ozuUjhP?_;hI?91?dPEVn8qCl+9lV?*#NSRMk)5*eu_DJbZh zPEe2~k(xwBvP8X+s!8=@;~!DuCy9h`Xx-mAKeAhB3|PJ|tv%J1Wbl(}O zqx;I23!gfbi!lQwn5l3WHN7G#AA?AlOvA&&Z}v+nDxHorEat2I1M8js3LBXz)4Ws* zmN$U*M0Z0rq#rRu2lZ`03oP$+adA-6kFFsTkoNv7ti~G(ROrGo%mD{-=XivI=&+&B zm){Wf=77UErC6qZ%<#ISX@9zdHppwV&4~aK&e`B5u?hD|F4XTB^@;UK^hxyGL+pP?}gQ+_S+@z`mU z*6QfymG|jcaXMoN*6@kDva8gb$jHHj4v^tj?g`70yQt3#N?gLg`dlcK}820la5B-5>0>%6Yq0O7N0?gG2p;g^C zGR9#fMtMOj(YREm`9%C(GF{tG5{>d*kiJaau=jnz=t3JK`)Iqg=$lepr_wx>^tez| z(7zO!B=JKg*E1tTC&iRBgU|-V*4gxMHv>TQ?Y5+$EIoL}&@6fBNNAm) z&uA=g$en)SS%Rr7VYs_&KDfpPihX{t2!Z+&(CJ-Z6HUcpXV&&%3qrnliSx2XTSWbt z_XU2N9w9ok(pdz{S6uxdkcG#)w+Vo>noR%-|*?FH&}5qS>8W`xifEL0;bzZ<)V z0NWkq+MT*u8DnjAI+?Clom}_tipEA+SVp;=C@sJ@jYt@8sV0`7Ji7-7AMScK{ta8z zlAc&jXp7OF-Cc^zaw;>=S;N}n*UM482IkV+NEHe>kQHK;+ruOJks6EbayBU90E6nVjVP$DOr>Qzw^WN?Jv$xSV|Sz-&P!P*c~C;ts!Sys3XAHKGu zeos)t3LUXV;YdyJJ?&JY(#M_5N;U#-+O$V;>6*TeplSR?fZASPi)y5pN}`3GtJCh1 zy?7aGy0FMv$SgUGpRsx(?3Au+hITqWEX-o7@X7!B5Bb{!E6SjR5=TIF&K~AYv)}f; z8Re)HOT8Iww4o}YChfh3$0<7+ZBJ&giIBc&Qc*cHRpqSCp$|vN<-bG_z zZs+F!?X9?m)8Q(5W}jFm&E&PrhXg#|o8f~Z*O|Wy#c`AqFUq_jA%KneOd;$F zsZ^xjmy=ft+m9ur)8T)sU@j>SmNzaC&8&hmq}VnYhD;tYLB#o`gUx{O{?V`NrlqRD z`&nz}Bax}txXe~w6jy)RHfE0fx&zu0Wl2HcbV?~}f<*}1u~5mfNM=x^9Sq__D)#NH zIzlv^_dcZ^RAf+jq-XVH4u~p-I-h3A7%JrYca5pCnj2rot%naYzL`>v&M3QARnQI{ zk0OQA2U4Cn3sp9twYH0D32@5C2@F?@E(rAh;?$?N=}YpEY2s@-sTbYP@guurnE-G< zr3Kq#JOjP6NT|q^t!u1#R-_5-{S6%HbS~njk~sq9M5jM#Oa7ufpT%j>6Cb?)L4J3U*0V>*NP>jkbuH zn6RefrqS%h&{$pwb<`KsV{A|F0g#a)kz@%;32{*wZAJxJI&?GRfiEH&6vYCh1oDbn z;jyvf)3g)yh=osEM#Re3RPUOak|L^(@bgDhVtO0yiL(pf;me>AVm9@0c2+q{{*s2LmNYj9?viB2m(9S)D7(3t z@+*C`C66+D62!>@2uIhKYQryx4Z9eBDy))r4m*-j)Cn{zbP7BQ7ndFj`waI2U!Lx0 zNMf@dAG&)RaEu@Hp$n4dE%gN3(_Z&+g};bOr7=z&Sk+0ZVOsaJ{}i*zr9#=E__s4x zjE{sum;n8=NR^DZs8K*$UB3JSvO$0vx?W&GIsSH@FhD&#CfaWIW0b};Fm*&XVStHN zREs+&K)6=Ly=OvRE99kOpi^(5(vM5s_^{Y8dV^VI{s>O={bITwiD~{}XhV`Y=Z@-Q~gI}{WLZ|dS_Yx1i@ z*3FNSxXa3`4i zX{lx~ObACSw0LV-5wZv=>_DNdvr*oe+@tDa z$2L(5Q_8b(Zpcv^&u7tx&)yWI*x`B}6D$&FJJ*7p zeT8kMHVP;_WD~%&9aI znpg8pG==mG!iHKoJb~M0$e(F>FCMVt3MUx~?o^dgrrp?&ojyG)Jx+L@U7Q;|MO)6o zKTyZ`*mucm&>IF;#oGsx!YYf)v>Zs`G@KV5O(aIv4HBwb6NJ^GMLU|EU zDWe#A{A7GEs+|*8s6mvEO$lkP*5iT8iz70?#wMleY0fL8|FIXZ_*fz-e>5aqyYp-W z=3d+Uy-vmEhU>dS=vle?t3mJ;68`7sY9kx`(xxwpL6VWHMFC4e`x63FhH=CV4W(p% z%YS&4c(0=!`Y$O4*KKiR%M>24yW6(mpxXmH*bcjVrAA@Z}h=PMyjh+d?2x9 z^-bz$cXEskuoJ?>;t2o}e5M-1ztQ()p6iuF9@iKQV0?ypiPSp0+TOoQI^FEw4CH$t znV6hB!mXxr*`6$;e(2{=t1Ft02$ouy6Iyb+OXoCNu;C84z+{fNAHvaYlHP z{q921a&A86UK2$f}xhgJO!H%s;e@ljo7|>8uH+h7cTDSYNFt8+ZIzU+n0>xk_Oc3iJm&Tk(vSep66t-B&po z^PFH|GtL8g1ux-cWo8!59=z7}3skeFOJ4GPkK<%xrV><`wC%!5*tBR3^=H3yisY9g+#Iy)- zkFRkf&~pag;f>GKE9`s&vTrX5( zJHDanlzhJg@pbmD(jnmTF03@88*81vZFhXMzw(&+Iv~h5Xb2D_e9sXo*)^R=e}aP&1{Oxyz}U%vKi3 zxFI1kCQHj31L>Hn-TZIk?KZOT0qEU2+DJP|F}w=*z=!hv`6jZJma(@_`+VnLQr#Xu zfp6B@I4OlyA|UlC2Ft%l1_wf-zjIPk(KB_x0 zZ#O){2W+PGs%Y|-xxOT*VeEkwjXsRhfKU@QHjW*6!9}wRWwe@QpZOTmPCvZCCrYn+%zYQ}^D0+n1 z){KBQqvgYJCr6ny9N~cq476t8zwE1v4S?n%t3eVVo5X3GeKlL5Q}L*sQ-!U}P6HX0 zY9R9?&ows6uF7BeX!fS_hzffTG6+|^-&JqIc{*jHFD7D?tn~?ni^7n45V4F-h+Rrj zFkWG59pLs6`RTcJp7}q*Yv06_*^r|KF{ELb@|9KC?Jv7zV zI6W9XVIJ>O*X&0?Ap+E8lRm(yz^XQ-p(@&X_F@A&#sJ|wk0qii6@-hW){X&X+Ozgy;#x|Oz% z2z&@x=S$c=3OvPa&6VITi7?VCgvzJxGPk#16O-a#L7!TRAywIs0C#)q@Zc+(?6XpiA_KRbE4?I`L8-ehz{fpUt0s=yy*Oh#P1 z%1d{pQrGv&T|m&+5$0zii`{o2rtF1eA1O@bL}lc+s&S~hZqai1hCjqx3=u{_qGrW( za*+xFOFp!kK&hy(*GCDSdFt{~Vau{cvsk}2O-^ocX~Zc}uw(aY()MBi!Lni%>snjENm+I}^VTj*CH;L);vU zP*?d>6=F6V#W_>oZzIe#Yim!vF>x-&Z{{_VSjVR~S4H-bJ7eD~J~ZrnoH35LC>fK2 zac@1!ioLZ5cDYnv!!Ez?*D#)PfGt?JP`bOec~lnN@CDk#nJjYVZ@N3aahZA%I)z`} zt|dKdB~I}FvYidYP?-Zzg?Ql?!j9Ykv;mDt$1D^HX5_|RypR8$4zH)EHu4B--JNz{ zP7B2#FK@m&d~-M|H`c*m*C3~=ns8d7wF-cXQ=p_nGWBjI_<@_h=?=9QH4;L7mcqVj zIcd-*@(dJP{wV0|Rsx)sIJq&?hN}A(v)1@a;Xff$a{E`nrtJUK$kV4+SP@e}aD1BR z1$p6eu45fQ)V_ZU^ZTjd10Q5=ETZyFMiZ8G8`AJR{C!a6&HGrZwD1_&&*Y85qIG~_ zSq+MWSHr{D&CW2L(z4)%N6+1G)YC~4g1Ti+QMcx=JC^<@WT^~S+J|55{$nv1KG$VD zGDdX@vL`6gwSw4|)3R$!I%(lLJ4Cq$yZ??rnD)$D1lFxDIy&y}84WbQA5?UdcSF_S z%q#bA4qKQ8Ir*6|fN)%$$%V_fnriq&EBzMt3hS%btj5BZ?3Y9?&|+5FkrjGpks0sn z9eO4URoP5t)j|hDBpidKa>YMd2FbI>#pUFeqhHo3QxA;^%GW7RWy2ZvZi_JuiyB#6 z{(?C_>{j}HH7bI;C~#F8C67X$4MlcsDH)95mT!N|3w%1#0?bo-5biY{9dUr6i0_=ALQO?E2w?0N8G*qq5bOTSFD_VOd_|#7nKl>n^OvaSmlb+6no`hxr zeX@+rvb#~IPn8>R4<;*)E`aFl{Z=bSJ)`@J>t!8(Us;})_xn{9ov#2FOi)ETa^Tye zv?gLG%QnCKo1VHoE{HlUc|TjO6>6rg{X<&Y6S!2iSZYLnM=AB4AO5{T{}mC9Iz=Jv zSU>^&ha@~a$S|F-rxT4tnz29ehg+_2>Y*V45fw%W0(&_P`5=tfz&B!~(|Tp`o$BW+T*hQmp9 z+mC3XxbY@hvGTYI$!1u$pZNL-h4Wx#7qE$Qb+niuTzVKDNqjgi<8(bnzxlB&Y5OxA z_`a>bSlOssXJ+yWo7aJ0=J7-$HG08a$M>$=xNrLo!OLwy<+F`E_S-~vY>9@{5cu@= zx9~wx;x;AsTU7~iY@0yi{)MmYi7wS_m2P=~+38XRLVq(|;pHzLLpe|LUJ)94T(oMD z{_W<~i>3PY?qbhr&4gHdse5B?2wB}bxR2oN9YnuzFx9wBWFpjl)O4=h;)a=a|64EqVpv}#z+k5H9Vzx34@<^NZjE|}J>DPz5OYUR$OV^&VUR99jka-3lk~ZbNW?#GR%@m3z zo#=#851lrZ@&ZfGoDo9Z!Rju=|6IFhJT zw8Qx6s#5Cqkj2$$8Yia{4F*PFC(4j}+nw%8;!^8&itq(Y?U?Is8db(k57iblFT8&3 z>T1!tCAFvaYlGdkgzK6&{NX!p-t(lfi?Htyb%_*+#{n5x?z&6OL$@pk_@f&$| zXQU30FgsL-Y90Gdn)Lj)t`aJ0*adH^F$~O4p1XX{6Up;({1nmzsf&e#moVe_4264S z5_K`+3_Ygy-jDa!k{w=;2IHCh^|CJ>r|)}lbYiK}T?FEpbgb@Ws2LgKOUj!E8S>x@ zUA3Oh)uRsD9f}-u^b;m4Yy^s-%^c=6$R&q>gY6`aD~TiTP1a1E=-h&f7;mGS1Qht~ zs*c0>3ciNrt=YvV5jJMK^ZS}51-EK^*G;O9=zLi~obiZ)s=UA5xOg@4_roQ^?Qn-S zCD~0GG7Or6wFNJE-Xg&kfhuy2ItonY=8Eg?d)NJ<0)t;GCcm+Rkw5T)dGF`PB($}G zbOPVWb^nl8cK!B?c}Bq6X&u6r5lZBJ1p(P4rGkEL%W3)xn9N;-k0m6WFJXShLX+=Z z&qp|pHbok&SFO0eDb3H%vwA(aEaraU{yL>IVtZ$Lp3K);BdZN||DvMG0l8}H-&*@Y z={i;pb15h|TLi zU;Oa@anozjKY#gBi2hHw3Hp8*nE&iiUr@)1w?mDF4(B^NT&utSP@t(WwV8Ctx?@#m zbB~I3?#}*kNt?hJId7jJCLDUMOe2Xi9N#2Kr}b%xR&r;ss~Z2lIZH2iSX;?zMI8nv zljltY42)YuHdnRHy1=h7Ot(-wfYxxJwO2vq*O{!aU|wtjW0Ww|GV!@mFr}uAelSP~ zBw}zjs=^d6qGt$3@tI0IS6AQ@G{V|$W?7Ht*00A@qK|H>F&^^CBdsyQev`ln19Kz@ zCE2(=IaSKJ1{X0j3p#;XbJj3lBi8t#+o){~E3R$EJ-Q%nZ1!yc^%)#M}B!xAm!fGMF$UM$Rz}~~Ccb2v= zp<3A9(AL#^SesKbJ2Y&$e$G?IV?{4QkZ#cu%Vk%*K&O&i&}f8?S3EOkrF5uN)M(%( zNOpU}wYpF@-&G5jN9O5CIPp9&g9&7WJrtJs&a}R&S}C5MCa!uAe*i)g*_8w`G~x%d zW#xk9cMF0}Qcvy`82Q z8G(a&_J;feVRHv8kn#?Gqp^|5vt9~?{2@ka)ulM z>h%PstM;ACl|~}7=Cg`;&RQ>EY<766EebrWd$o(&=`w(1GMK;8i}}q4CGyz1F<+DA z-OCix$3#Dn(iG~@hVG2iJths;cqTP^WYBoTEA0#pHz65jVNaOHLwtG-^Tm!!V)M?i z#nk(xl5$48c7|h95fuyhwx1ZKvVc<_2(83B9&9C`MyUFhv zQptoFhg6~Yk80SAMNv!Y_R>#an$e<2;ryuuJ)|Ki67F_Z8R@3jdg{X#%aVc1dP^(Y z{%fvzi<(s>vj{8ODCdWZF<28ePIRkG6%#ByxQ9)}g z$#gY{!V=i@VKba8wR{n-NQ2}}CiQ7n$EDyR^=d#48y;1{vx#22QHa*wXaKA=b4V)A zs7Z_@>A*jrz&xZA=u8x{b7NW)-uwXtt6HccVT&}WY;$)s8f-7kz_!bNHQvzH#-4{{ zpuN?~7&|XKpkS0AY;K5IQY{o8TU*el98Aw39gknH@I%0PgnU=h+e+5; zt1w{HF*pRu9ZzNA5MUZfq_jOBc7=t>Z1}U;a@B5*hy|9~8?0=&DVo^(kH{1km7>vT zl7`aRN!^ZM!r+X?B-Jy;2v>O~ZH?7>vTd2f5GkrLr5|DS3_aNC8aB~TUSxPbDbTBJ(;3Nhi_#+?BMo&Dt^oT!zxP%;UFW_n2<2@TW7g5EZqjO&{__wIlj5 zH6-I>#l4_J9UNi4#WPAU61NozrdfjPrqBPbDMyoM`y)%Dru{B#PEJtJpXTd9{Rr(@ zJpL%y5TliAK@|C6M6=+7%C~88N+2gXLeM2ZZETUq2F6rGTjx4D;cI&i5hTXfk zD+Zz!zt)$`wQ9x3Cbx;_Y6F83@gZB3rA!$8hxhc(M|&Ul-FiBVqA6A_zKIK!pF-QA z(1LbJFbL#r`@888VgAw%TzdmO58pUJnr*y?)8fds&#{9Zt9ZYZT#EWopJOMz^w=QH zHZv(?^Y>zSXny&%`pS@1(g-_tXhLkOd)z0@-89KZ&&#S!X{JTM>==+r0vU@)y=a#l z{EJJt`l~z`hMH;?lh+s4O-JScb}U(fri{aXCeew8D>}tGLRI?YhFnrtH;U#YUfB0j zK8&_TG>NdVzm;D>eznp*5|Um@bE4%?f?crsmg&^mON~nulqz;}jV%9LJC?=NO{eU3 z5n9^Ir9L>H=yN2)fLK5xZ@I#)sHm`^PF?SO+lWv@P+dXNh4Oon1|n+ZWFOstsehjJu?w`Dz?gCZ>zH-X1W>s$Ol9?uj3SeX>J- z=%80bZ*zN9QTOywWBf_!;dW;LLlHL|#jG$UcF=MvlRh7&7(kL3{+ZnP$dSP zAEEB)niLCQ4M+OicyS$);tZsIKQkKB{u(ma4Ec_sZ}w2@1aAHkKC6^#(}z4jt+gak z6FnzzlL~7X4Kj}(K4JRn4j<&t-N3K0+1WO=CgSP;b}`JSHd|YhCdsi@EjV%L)964$ zLubAE4}3E1PhIpaz1d2F{`6W3OrW|BLXKknrH>+jjCDCCreR|~dz^xHG*k-ii}LCt zlq+w?Usepvb_snmhJ#rfCVp1Eepv7`sG+GE8RQ}YR#BK((~|107BCbd=5@$28tEWd zFazpc-o#)YtF^rU7WPP$>?`$Lz~0!+mF1ST(gsv`={%T(9sLqAYKRPzP zDkn6WHW!QqM732zMHc;+>dK!2ivU zNs#r-ac&=LIskcqB``BNwY(Ho=LBiG0_!|ohj8^C~Q^DKA z);YzsV#vni0Kt%_GDLsOSAc+P${6BbCy3Y;4+=ra&=bu~O> zmw)%O^di^c30%ZHt2L}q3z}q&!dsCbm1%CfizTcv?BtbK4xeASTk<&7Tvc-mlVHtl z6pV^Wssr@+vNxj%(R=;sp#R5dKFeeTyO| z^kkNsZBRu|GZdEuI@3qm%>S|@tE!_;N@0kXZ}VZ6&o2hdtZ0<%v#h6BIr${$(6lXy zGqjP6$6CWIH(WCAlXtcLHNS`^AukkLvMH%yJPu@;nF;1DE{$@l2^*}=tG2N%N^qr> z(ru(}kb){j=QCP5Gyp|tf|#LhluOF&SHvzu1q}@*|NQUEX6S75^v3yO1KGj~*(3gk zRV+hVoU-xc7A;>9mlrM}6By9*Lu&3dnfiwVT8e5D`Cx9Rd}46D5ccT7#tzy7P1$jW zWc~Qp(f(+=0fvve-QV6OJu;*#6URx$*Snm__%5ql8;=^QHv#jD9(-u=Wd0yyvF#1v z>Yh}|-}oA>xdMnrSi*Pjeo$)pV@Vp=is#LC1Z%$w#gX*%8hZMOF+h__1ER$lBCT2O zJlBwCmJHeW#K5(8weQL>8pKt>zEA*(h6C}|qY@UC#)hf)zCZj9EnDjD?ltl;K50{d zR9FGC2F+3GNew zzFKZ)IBD|>!?WqCgXlzo`cC~@&$!X)x=dts0l=}tt*XT{~BTJyKql zK@_*l3OgG&hARszqQOk6-arwU9_i3-Fjuz^oHV(jfj4lg@EN+LevB0wE#W;f89lt| zM};bATt;o3=goz={D`}w?Dxl%C)>%J=u3f408Mmu7aWb2$%>*q4%B&@HJr{}BMd_= z>V6fD?<6zaP6Xe_Nfz_i~M0fgN3!x5%5hC?^#de@U zuR>`xPIlzk1g_2I&uGn&9<`HI=zat9*UC5Oo(2PhVG?;pVQ;uHflrgjO}DU$1Z4@5 zYI5GZ<`8{9yucin5H~Hm1t{?R2|EuMDrvHDkG|waduZI3l89DGj z5t@G@5rF@H#SaEb|Nqtc{co4=kNo`;>G|I!C-6`3AwKiz|CEP;|K4`}e^04}_3^$4MA1%Ok7#M%$Q&BWr63(>=+v0zMul z;9)Z(H(L)Vo0|P)Zx0cH5I|Yd?y=ng651O}8go_IY4!ED3C^m<4@)V2pmZ0wU_3yrx(PT%*#8^sGTFyAKHivCa$i5}wG?~Pw zzIFM*Za2cN+JBMt3g(O2Gs#j}Dy&?UpENF2T|N5`&PI=&x0V;2wIU$7wc=-U1w=7; zz@~8{3(rueFTCO9{xqYb-5t^+bO9+qAVs*hgg^UU2EXT?!A0;f;rn=};Y(2VyqIbBYJKojf@P5#yccg0*q;0l+JF2gXHfQP&?#qK`o`K+{^g4YIlffSz z7`d$3JQ2U3dgfK*^?aFd+vsxcK>Lt{*;%Jy41if4uG6EgjEyW@f5F_DC`WAlR+f6} zCIzHS+D){>J%mCEY+BqL$C~{W&;HWH-iqYi-Px22ZgJl+cfD?m{78_Om%n9iHgOBM za9scVevYFktsKnWP|Wm{@Lo%&|3PrUSuqR0EScS(hHG|Sj0{8nHk@n8OdxU3>;pvWfwm9#gW*a9W@EU9{jsCpQ?HaBW4h zMf^UQV%S9d?1j_Rp)L`n!?Layy$bp<$2?(z^O> zV!98IPFq{^u`<+&bRZpfJ0H?+ZbiHq>gen|viTLiWPjbD`PJF<3viAygMu>qt6RoXx#;@+Ki)*^0^eeTnG7J-KQ+AwF;C$vo^?nT|{zh{M>A{Ek9YwDtI zb7pQUu%9?!bP}HFr=jtUU(r2PX*@{Vz|byPX(Fr+3p~7aUe!Y{=aDN`q;w7?n^9Jw!$_;VJIqV+;7cnQTV%=VXXqqnO~B^M29q$kmPft=0}M z(3Kux9X`LTkCKs&H)jqHH+q%ucQvVKR;i%e7T!l z7c~h~0z1uBUpS21U@#B-VXIpK2j*(5?asRNYe$Ok{f)~OQT@Sn&p*tWo{5V{W4b=P z!Zh7~j+d90il&|_CdRY3Y(O>l80#L@Vw}(Oe0x>u&i#!k6qW1IhF*l0wz8asi-7qkZ6jOx|T<%N=|6@%ZB8Uu-7BQW>Ma zZ2d9L1PxKjE@g`(@oPg7x-F;?g4%TqU;I%a>o zC(^*A-eJ_~-)Odki`BeqD=k&8Ur!^}hU^jDDW;GMrKP2;^kh#>3%;wkh!}P?V1T21 zB>SdWnbG@TzHMlm8=Bl91`0n`5EWUvZQtX}~SAWq~mTcP367O%`7f=J(rm5h{RQH&I`+FJG7(*0T`JX1nG zw&;L&b<(6#yow;|b~X9{1L(E&e`9>@({=jMLji>$WzTMgpL6ggJ*>EI^$3PozBZ!h z)N@uc6y0Nd!RKexneU)l^oYDbqtWWc<80Na6>=R=>Z9U)@5142q#ORBi()DYpYuod z!E@Yg!H66-84))9S^5Cmhv9gx2m9D;YN!vv!idn7yJM8e)yTCkR)Fa(Eeo*HZ=bJy zsD#H#a(=!iEZK#;PwInP#B0&r`?-g0h(ABakV{@HEiSqj>gGIh!SZ0&)!^~Sy#A4S zyn~|W=t;cMH;UZrI;=zUv;4U{wLlV7q{k>+L%_xYKrl(tZ7ST?zos)ltb$g=%;*KZO76Upn z3lg4G;L9gogs)L8fm{_ zQ4_Wcq^jK}ALdJSH9e*eo1MqU%SRM_Jg!k6Vzg=6V25u;kW1%Ey@V;&L)ls!REf8{ zC0ZG3D~;OXCb^Sf|Bi97xCnl6n$>$LVGdn-){7hTp)ZIoUn0aArm$hbcM@mEQ20=I zz^%Hv=<~y$&?DcWJRguY1NixR*s+eiIv_8GYkt%|E^P(L{+uy&9A&SUR?S;%Yz&1- z`-sa6!B8I$!k>9gt?JUJc{zi=;KdF3a{Jj{vdjI-Qx3nuB?$T9hR+IOqKmZ>!3>73 z!jqIk3aWc=a3$x7pt!KRFy-6Peb3UyvA!>di!I{nA%ei4(2^{)zdQ7*sUjdSH2Ezz z{J+zgy`CiGbHc0s2m?L0Q@Nhu)n_#C|Jpm?y3cn1-_UNYNC@9CoM!d=Uocgi7^hQ# z!m(n(iu^7<5s4B7m>+=hy;o}b2?x2!fGX_R^2$2IYIq%rJnv+y!NqqQcP}g)pNy9729Sq}yW=!Z%d~AIa}FF8zBURuth_D8NA8<$qrhd*H~-B)>GwF@-h8`# zr(AAiuOsuL{WPM0R+6iZE(rXd6yZOJ zOL!dWc2z9jbB+n8Ul7F~NpMNj+cJaoyL`~e0Za}=LJa5v`X>7I^org1A(G&J4$^u> zhb}DhB4#0ZmcEN|kve9hhwaV2m1sm4$I&9u0jSw{c7u&O1G_tUS+k~WY#S$8Aj+67 zaG=jNQ%Wzp*ZrqD+OCp8-I@4)ugS9M+Rx$x4%O9#Xam$YEw7@FiS`|Qjvx!Gz5*~Z zt>MI<)?o4-#7#yKp0DOycfGA$VDef)PrkG0X=)?~H|b$g{$;Es$?n!fxGhg9>W4i4 zP=CZrp_0PzUHb6#p4snMYS4o024x6me;3mS3n^X7hQOOoo`Qd2Hv$cGmVKs_v%BZi z{n<-n`K~jeL^#ykvuXNt#$oPiK&ANUaZIqDY1yvZ@^Fh@Wq|p}&*2;Uqa?c|eVC!W z4QMU-NncN9Q*DV`43>C3hVU1zh+Ut3L-=71&gH7kR}L-4WY_pkTm6G10tB~SwN6KS z`;EVSdu4e}#3k_y z(&mJnVNsPJB; zBzDJo#8x*_7&@Z8Ux4ra5kfsK;`uC0in|(D1P^sd)XqWAU;6P_NkdruIlD_7Do?i$YMVDj;j^NG_UYjo3H+i}f>UC*Px7E0{VP4NU~tTXK9 z@`#rj@8G$Y?4Q6ba1#2E=p;sZu9uU!Ex+AAW*kf^9w~zZE{R(E1)A+XdJKe-HN}Py zw-VW}CkQ~!N8&j~?14h9 zKOVj$#eWp%q(Dllgaiamcixe8T@!2i{prXussY<>43-Fy5Z?YU@RH!ZK; zEkegtDq16SixjTCp)Z-I;Qiq`Z>nl1JCFRfx2kL1+3L+AfNwb#d8&BIkB>8T9)<}{ z655ZMI95Qov|3PG2Ugy(ve(VwS!fM^cQd2Z6oC_$<7-I+1MNrbE($;1t##2E> zH9XnX_+&~<2Jm{xdCB$q1sNIB+PWC@y!mEa102VGyM32T=}cuv%7W%sol(Xi5WtB4 zGmxfTDssp~e6SyHLyBzL(P5g8DMW; z(oGhSnp`Sz1V29^ScJe0mPtd^bdp>3=62+-0wo`ha9VGpZ~TJAZ(}1YYOEzQY(laG zAU;DvM>HTL%h;6^b_GAdW@*k?vGO3(viCi|>ODu?)=lK|58Bk&1FR z@Vz7}CtLc{C9?V&&PM)r5n2sp5zEfUfC?KBM=*APK5y#d{pT;;5f(Opq2^JW^hJ+4 z5wemFsPn3i+4O>7ipO;^|HL!>w}3^wPr-)1tb!WMVYBky8pxs?5jP+qUa-sesz{jL z#kVqz{8UtJ)y%P-vDI10vD674dWKhn!aWG%CwF(lY)t9_inu(mdUX zc(w?3j%MiE2M6ACjh+C{%BRr}d3ZTfw~e72{;;RVFbl7G_cAbyuZpHPCvDP1Ou|+U z^OdlsZEdvE@MK&sKByIE!hmGM>`M-Wf%ga{Ai$3h@>8m&t;T<~wXI>P6?m z!yMGv)!k6PRQ785$wFga`Tk=^gIqq`*e_Bq9zz3=6-}EDV?ATojX<@Omko-n?wJsj zcnpE7tEV$@-~KkJ_>1`+;#*r$Q;p43P?9TH$UnU1XwZK2(2u`xt1Oj*b-ZiF(ez%h z9G>nnSJkWz|8D%1beO*o7j9r+Xh;qM1@twReNvtlFiDHDa&9rFyX?CUJfRef+X1#c z_r=q?#w=SzT*AHu(J)I)(_X>g8h*T*>x2*p#3%q(?wrRx&ijbFKD+_5-QEpx@&1U+ zDwqAnLI53}}z1#T}MT7QCnS_?c>-=3c9{PuB&|Z(<{{ z;`)=Q77E9a=|M|7{|YLuJQUPbp;&I&o6Jm$^P%jNCrx7#ptYs$Pc~b7(Q4Xwtxfyh zJv4mn1-o{@^3cz3RChi`fA3v1H#hubHG$dB)OaS}ScG3N^W1;}2dNSR+3-!e!wA)* z-fVbsgG8%f*GA#ZI6wHIc+;p7KEL}#T-C!rNjC&E5H;hZy}tZ*=e_p0@o4vVgR{R? zPJy0QIyW${U2hSWKUJu3>Qq1h2nTnt(4gD^ueQzfFiOk1b>%LImyOuXq0dzcy17X` zZBq%InF*Ka28vLTo|P+4C>$$k6zfgFjKyGTp0YUqjzDtYWu?xaYw@)}-j;dcIQTJz zc^)fNdKA0%Gqk4syF#raoDMF=2`LI)xUlN9V#LTGRCY%`>zqwHXS9REEz+cX4&+ov zf&ximTi!64bNZE_94Vlz64ZQ#dh`>nNWqbYZuk~3CV|=hDl>XEDaW%}Unp!|1Y|n@ z+s@Y=Riww&i{H|7sry?>V2KBUqDD|DSD*aSvASIN-m7G}k0gN<3ccqh>ozK2Q>Bc# zAHKTa@@T_I^+~b5qPSr4ralLm$8e{u&6w-$1fkfspW0t|V=wjN0N@Q+MHai+xO)K4 zYX}$s;8k;atAXGuy23qUIbI|Y%x+H=;ziEAK7s7@wU^b(^2dee!{4V7c~+R z5_+|@(IlAO{wp>Mok{F1lcv7xD`pI#*YwW=%@7l+DOdy}m4VNqOa>Ib-_u)ddxSbcLRPph`R%XsEN`G?=et zFFl$}v}kvNJ$JFY1U+(dZveCo!i}5pxRMU{tBbk5;tdB|=h2lPdBM}H_Gfb)huS|R zXzs<4W9!;bY<$ad#UN*WGwFM(!Gnx?lYsI7W4+fIM_Y6ZAXWop(^}WWl3Hj&C%ekU zoKo8aqCo0TSb*Uaz=zy>6|~byn*H%~Kt{#b#DSU-T_ovqKJ;Dg*?b|Mzh4khd+%O_ z1=lUx)D6e0D1_v1=*y7wE7`f9VI6ih$rAfhI7nQkXsT%)^UVB1^nsL8Q#=li&lcOs zv>|(&)5rQ@dcrnU-QUm3>d3}8<)@SQAe<2{*iyo=bNkqU!mU3l(LO(vYPp8lqhrXP zhl`ClHoW@sd;PzVBoy=&%e+zp*+EQ;9i@3Or4w}imP^9dqvx8g+1Piy_*@^*8KQDg z;Y9Uu+23g6k*E|-oBk@*zzUzojG+u*ZEN8s; zK6|=%%%`~L@BXN}D_`0fzo1+#SgfE8prT{hb)KQGG#d^SmB_w!ND~-0pZVrzv@_|) znO-$je7BlUB|>3n@H_%H$tWNblr~p8zlL%*aVZWpzUE%%VTwxm6et5bIBY4cZg{o zE?geP{X%D7%55aZIVON1s3Nbb-voM7!63tA570x?`J;~BI^Og6BJK?o1)NJ^iQtA7+PZ53*ZSR zW7`AnTL#`>FW*QzGLF9jW;0}L+CEPgwy@89Mgq<#<$Ds2EzC1UoWe<9a-+6E@ym>DN%4nDc+*KbLY*43=wt?2IN=z z303pTirL3{EEbzssOivkalwA1GqyomYwPP5U@qy5rj0(IVaJSN3H*=cw@Gi`zRjGK z*a_)O+%O9tU0DFG_PEm%UmeXbSpKp)rTDv~L$1P9*or55RuP011XyaDY{6W)7CdXY zJELTn?BIWso(;U}KGih;IEhy-d)e+IZNGJb-hSb}y@e<);$IaLmR_J2{n2*6ICRRP zBSFwc=qhMWCW+`dOnr#In`ACRH={P?rn7Gfik(3;1NYgvj1&*dcC8^O1)~0-?DAi) z*z_8(k-fa+IBA$8w(#W+{Yz%qY}s=(1SQ^)xFIsoU}wjFa8>wB)xIhnthIb$XJ?GV1F6D2*N&}6!}5D<1EAiD{>S)-9eQq52pAjZ!)hA$fZnIR%Lq>>cpHeAmik@gres^z&<)QbA zxBL03-zR6Qb`n|_Tz6lhZZ7G%f}Z!8g(ogv9G?vkhHlVomZvWl1s=yj8$gJGDgIQVZ;O` znrpZ4JC!`*;r$^);fkTp;kB7BQB$v*&TVZ_rJlUg@~K30P6CUOK5yMH@=8KUKeQ?W zLeZx|TM|{kJ(3Zl5+80SEm4C1L8;CFk*=;X;~e+((odgmj8rW4=Basj>ulZ0s4(^> zxpAc=UHd{fd5B%dPmnKjpnO7JNYisa7u?SZ>qkm*ooKf;%g=vPM`72n71fI`F0lZ! zaM)O5;u-T{#!@>xIPfZJ3VBKHHpm0m$3D zPb=@I;8T4C=PS+_r`u<|N`LC1PC{SagegmlR&p7JU`62~ZUEN^IX;HPMPRxfA*kd6+x%)MP$Sdbp9^Al4p{wPUqRlqYgDPPf!Y+&f=PwWvo z^?qvY10rR5Tv)v8X^7I=$t%ILGRf)78sE2!hJc3{0S{$2SftAyFWGl+URtXGa0g99O6qJN=@yJ_amjUc5NLbKdMU+2Cj=;Xp1&)cX z;iJke;-*uGo=Lx!Y#U53tDFL%wlsS^#IX3aa9>Ug;<%t238;+cQaB49e~&oD%U#*3 z`a2jI(*c>R^ZJo3TdtS*4)Q_+&Dn`U8SQ9}>CUHZQaeZW4UJQJih!*8-_>YsQph5L zU1ftZ`84vbjhRR9n5|Wvs0*WUHCa&^D{a;nMc`7&isx7C1na%NuB{zlH%FNbBH+vR zK3~%;hl2fc(CMAwzOSYlFmk9V!c>Q8rsI;C$K7RSuD*m-i=rT3dfu2ltPON3{|T25 zTlibIuUCh!0n;)@#XM1y5Pga1^@dT;BdICk#JQC5$x9^7sEH)E z-+joW!YC)HQP^-WvBss~oM6$@n2oq~v4!Lp^}d5E$$s;1j*g66cDmyb=Ul-x+&1r&yYaFTJ9U zBwYm8u*7tss0`#Rwy_u`ASnQLuVj=~&0M2v`l(-ELl8ADNba^UyA+`F#4=g(HCeA` zz($i_^3i7Rkkx0vpa!M2NF%; z);#z`mhU>Q@TKCR0k+tHlR4^FA4oS&{uR6%PxLT8B86JA_tyjacbKX#8?xa-e=|;S zIp)+sC4;u28l}~qE_{dY3!j?jTccdys=kkpZs)Xb@B1m!Gn`=y%%cLzA6DwvKg-|u zY5vNg$6j7OVh?5|hH(GEIL&r4?AOppu0*8?7a&p0-#agCCuPE?qNWsk)eRQdVxD@s zR?o&KU;fmq4CWcclKGy9zC^t>4#1^xa5W>kXJYJDGk{PrscOECtwI_u0|c z`p-qPOQH&e?O?AJKrg6Fp6}>`2G6`|krRDLExF(|2P>=BKW{}kI5;(qegQG%^B~U# z45WteJFL25c+c40e+bKUNp#fdjaAH9^W)I4ZMKu>Y33GId5p+V+|LJ5A0Y^+<{5kZ zBEIejS#Es7a;-!5gChbWJhyuG@)NzrhAl5Cp=ECQEY0m{gI2@RT^l{MOM@hCXq?WG zEmEq33*q)cM$&1#%KVE|=K0;^(rZlxVmZ$O@jt~E@P0krc)r7WDek_f={sL=r=Pwm z<1w!FAF&v2bxk36PxHt*lV)H)ZH{c#E5^cPU&9Oio+}djp~Aq<4*^c-{8dd&yGxfY zJ*Iy2k}X;4KAZexAX}uex%qnlq{`TfP-6pw#cfA(3wtIE2Jy-Tyn5Bc>$+cd_;a1j z%0emnp8R&9JXi!ghAN1k5;**pf&y6r?=J)#H4PDDKtH_q=74cW&wfAbHxWJC^oGK3 zC$~cGY+%X@!oO29k~5UPvY(RQYrxQ}NB!`|o(WXkGYp}#e-bpg)Eq_#9(NncduLs* zpKGVZk|)k4IP>|u1+P&%`l|4C8sD&eXkW(mM&+NG)@;to)sP6*$h!0*o z6V=9|%jSeZyOHY;+%x#I1WR4T99cQ8;@7x&?rU`&M!bWI5?E1xVKeI@j9@3`)e0yW z^Kpk5>q34rB^+D=UQWLPmwXpH5fPx!(8>2&E25E)!%2}d{BPL#FB}gRmzF@E}Dc_`?RHUP3zc5A395=1bbY*j%>3(4!X$|yN(02r_WH%Ee1oQ#y1`6`$$Y?$zur zqs*&X?A#^|Xjl0l0LN!Ve;gDLv-7+E;qw(F)6tO=jrBH>7@NT6T=pm|-;?~|R9*11cYTvLokJ_Qf_ zJ={vResItB96D6oE$v7SG5u8$-O+^r;f2(ie78-g9y|`DW{-0wnw!>P5yqglSi6{|CCOGe+?xT*q)YcYW?j&-+3D2nY<|I5h$Lm`1%24 zcR}iI7+Ke9=>~nee=>%!rc4Mj;zKBq^nfKd-?M_icIP9j%ddUbokn<_TaEdZzW-S7 zYd|ZqbMiT;Id0N%{oyxuxPPls++`2Y;q)ziC#NMe$j%y)Rv1*Mr@l~3!Idd%k#uzF zhj9<12>J6azNe~bMcudfbDh*u2Q|so<_(q^Y01e~Dk@y-h0kzCZ^(xv{6f4K0K_#& zcdFT|pTXbeR;CPA@D}8Rev7;bA`Bj^GpzCbqo~BR9R{QemP@CMDU8fm_J!$RYRHFn zq(|cU9Pal@^U5__5UTU9sKKnf5>EJiHf|9Mo#*xdXPSiZDsbQuyaa}FWtHLYq+Y@F zDgfqsoGgrhLCxPnOYNNG1*#7eJx#0>yjO3U5=7E*>dAahU2PSOM$G>(yX&Jn+c|%y z#Busfk}OIPp1I)wwbzN%g;w2Eix|}8)TJ3mqFxNJ>~im_%ehySiP};}*|`StWEU3kwm5da11{00LHJdBW|B#O*?%!K z@kph>f%k7E?S6g>LQ$Wd4niwNuwO@g(}TKYSKld8xPbzW!_~bRX7|&XJH)lDzA)XL zJTdP(RxRBD-F^Oau0YH6RTVf18lL56SXK+dd%pisa1icuZJSdAKhGwCACQqrZzq=im7FZ* zybS3oXw}nwH7qI`GuZv}n?@}&PhKVLt-c$q<9ofw+%0?UjslCdYAniW_2|Wc@d?80!5xeyL#qq}G<&?P1;Ahh{0imiF30PdnqH>IaP3!PUf4z^ zu3qt$u5Q`VqxgxPM-Id)Slb&I>V0~50WfaI{ zr*)a8H<@?1IKOFe3j|?`<%x!glOL8mM67c@qc+c4bK1IyK=+G~J}$%_FQ>xaK0Rp@ zt=Q0o6*MJB{VlItJU3^KIwgRc)tH-}LG#`RC(@aVWx?~73x<#Ttk2DWMH|ry@~B8N z_~OfefJKgz8&B%GByoj$z6HmD+9x*ct+d{zyJ!uh8P*fJKHt~v5ag6+c+-_98=?=N zo_}BBGyVJc$osjKF*J)J1PgbODA;kxPQgV)kz*V>kLe4hx`EtEP0r}t!<=D9yM>%U zfDbPgx(%kO9UL3iK{jcGQiotO9u{GK^$|AqjaP}Kry7|Hhl7~%U{pcxkr);k%K zJS(s;^=%(pe@SVnp9jE?A19U%euy22h~0~+n*iz2qVP^X1-JwJRkB0orRs5r75sDn$EfVUvW%C&VH-Hhm=vOM7~Zx;p2J z-3<1T+;w3u=J8J!x5#k|8%i!g)T>*dRgf#qTKl$di6Z6HixY9u3!)879y_?p2pHPF zaN)w&(q+~TV{6lO+o{k{nN2ECXtKP%6hJ0j0G0?fDIi_e zFBoLiM6x$oO1YN5ql8i%Ssv0qd)wB2yT6wx(6sOk;!zQfO!z@lm|@_$lV=Z&)@pP;QsjRfDhhSsY{8nT{a5e8moOWRVM9W zo06S;K5O=I`*v~M^e(=R*}XRfO` zI2=t{@6((pRcFQZrz8@($2B%Rdn#}r;sU5FdyebR2tly0Q)_;d({ zVT-1~30R+j+0nBNU%V1jBD9^TsH$2@o>gFFupn8E!3P^rwnF0B%;+o=Sk3P!|!ZLh8Rn@qq zKXb*(mb}wnTia=pjKFKtj}G5`uy8j|P8ra!0jaKJkbXVs7wRx z3dXXsIWD~iQy)|Y`p?B6T%2nx-Z`I4cr)Z-EC!;5VP#k(J4L zEdgCMBxprtMG~o5m44CAuA0}BeEi>D&c>D}e^q6ea87@^6IXKW>9JD8ftq2oVM5Dl zHYSi_OXmY8LWOlG*-V~N!EZIXB!U{ey!wT_qT=_2%1a}ox`RBRkeYnO3hl6YztoNA zyP&VH4@l2wR4TP2lFpI6baF80c1NYnsFcLr7 zrrHD+-|EJF(_NU*?Wh6eUnq-u&o=+pg9i_i%83GAdfqG!c`vpv13ZQDWd!i#DDVDx zm0!|v6_tRYAEWLut9S3-od#Nc`_ig3x3z*NLMJYRSw9k2!DJ@x>#Stj!noIEWd=Km zA_HgVy>udl!Ae(my?;jee4WYY27`R=asr?k;meYwZ1Xoj8Ir11Q6cNOe4qbV)9hl^ zOmdt|I=FA#UVu+&|I@)6d~CSFPOxy9^ZxU2I@MnV%)cuvXXQ_^t{W_d6YDyt0G<)n zb?(QXPJ=Gr?LX57-uh2|2+aTbFKzGNHwUoR_g^@^f8XA}Zw~lRp3nbPd;h*UaQ^@G zi~K+7)SvbL&)!u3llEBu`fr;9{>ygy|F~1YzwBiFkK6nA&9UbHUv}IhxT=tE68W~8 zo!=zAd>OI@%IHFSmPCo*szBa9A9s4|EzloZ`JnYyI*W_JmiI^Op>ocgmCVTJefB29 z=PxnvCx3)+M8LxE)8oSXPJq(v2}{mj&k50c_(d-Q6qJ5PK{J4L{ga-0Jx6ve&XM}| zuP*O}d@1e2PT2HcjPdtqP{;NB5o4s%z`t)Dd zWM7i@L)Pn0uwLK)h?hnisQV|GloW ze)s>o=fMBb>~A(!{`vnprx_gRzv`iX;KpS0RN)8qO3vvM8 zdLzu45C&{(MB1GGbN|CI*_0v>`?ubCtXuXb^1`rR(nCd~g`jlBh-wW;ix0%?&BzhZxw^a-ak@|$g(eVOZN6|#@M6k4oDYOi%s z5?FVqQ%u9RX10Ei&liNPwa8$~J&9RZ#9|KhqYSpi&HbfOr_iMCKId{{I(uiSy$)5t z-OoNEUnIms$QMK!K?T-;MR&aR3yln$dim%*Vr_H3MEKud5hXeU(?E*|Ex=`utU+t< z?FFc_^v~O?(#Gxl0bcD$G{ejWLYp2b+TC)PvdIop5}V*6W2U#5VZd3<@zSn9?KN^g z(=fbY1_?Ks4Qn4_?rxWo68gOMJWSg)UkOtNoS!hGC0eJ{=GFtd?A)woL$%dnW7Vr? zBj-x9&F}hgl^O%yZUq@p6T#N?LH5Np+ck{sy14^oN-`&~rtLgAn7Psx2c{W+PZbD~ z3OC&p5A+U?V{pyLjAV=31r>BgFKUm!dA?5kZbzZls<#Zs6P6g_zIl3UZ8(chG@HAd zFB!ePb8YTP7`4^8uiN~WT8&F#prDG9$@+ZGa*VwqV|O$TnxL9!7hFo%rqW zoEu5Ir?(jlepu?c44(X@MO-BxqmK6Dkvp<&)I3VlQQ4EdI~ zjcNK)_*J{{0x}XnKOk&jYo8HYJSRM9OWaUt;)pn~dk2qs^lh$5ho4TQ{ppk#xR#;z zK)CbVx@~=S!6aRBEotp+^A<*P<=TYstYgor?^Mi93`TuN(7(=zYo&k=i4$1rq>fnksmftt z_>!&n{xY4Py!86+IqdCHbR|NVJsMAd%N>`S;Y>w|`+)ZzkB1$McBnybeZ-gf%<=7q z_Ag@vB+3G>ldVm`pbrffdO%beW2bnv3jZl^Ie0)euY_*-v!L9rvwVGwNqgMeCvC=T zw6QQz8kt$iAYV&&QE}+&4(w)BD|I4dtfcLB2e*fo`aA(Y+BogdX!+2RdmIqPNLpBP z8r>wvaZT9#0uS6Qk4;jwkuz*BbTnhKXKF?K?9t z4J7x=u<=l@3s7cU6<2*2G~R?azOk`L*Z{{FF6NK={zX_dF;&6 ztkm6dJf$XCFuVP6v(W&mREcM`WB3Vi6M+ej*LP2JHYDf}8vrUYDJNd4ySr_Mqh6+Y zG-kT_(D`l(#*o<@T4_Bu5YF@u_6&ZqE7gJ`JC{N!=SWXzH1eY1uQxDrHF;66E!^Ec+&Q5g}7n zYPL?hm{1xYtvC-t^jy!++-!Md)Vxc3(NNwt=LMi!f2W@A!7`k(1-CTCmlQCbhSSPR zLBZd9_$%}$`!I%;j2X=}o+cBaj6EEm;4Fso0wQko&CGte@R6;V446NiC$D_aGg#bi z|B0ma9|R_M24f+`v0Kp#9%4ftbz&b0&{>gKtoKY@wXZ7;{*HaR)K`F+S?kEzWT%+P z1A5cyz7szaBGcz~>3k{Fn)Pk6!Mm|ji0_PYpSJbAP7PU&%ZV83wJeN(t5KjmX`Dix z)1yRU;VBwQE$;0ysu)33u4XbNT53(>iD}h~0xf(%|9QLecYE1K>}hafw@H1 z$W>WP`?cLw)gMPj=xp!Lm^(0?hSvvxv8M|w$urETnj~$d@JAIwY;xnd$GlX%7;>kW zK97kF{Q~cXW}1tn=Cijt4Fhj>EJe9Dgre1XhfNdGB0#j|_^SX)NeS<_ z7+gaj)Y@kwu{Cp$-RtXHBYB#Dif7x$&7swXaVbOLBV{F1dpmB+v=Q4BLNRHe1$*{T^zjl8hBG%%p&nZ7C`gAmG~3#HlZ z5L;S2e>F^a2KG>c=?gY?Pk|*XM2rUW=~fg*h#vl;MaZhjq-~u)FpsoV5C|btZ`PPm zRD-^;PygzxqW|?|s%@ruhNhh(e5-?d=~7!xJXZ;HFD8{RGIMik&Y?dp#TS0R-;6UJVwm8_%B23UeBLUe*Z znZns+s=i!7%gaOFY!}q|M!aW93XL$z5vId`!3&xxF%r8J_*R?a9Cvu%{5D|)VWi3o z|1@rzwMwP;g&`XIh}&d>3K{cRx9cLkIDUb#>eK|LzR=ugzv68_s5kF@cGzhEM7YDG zaNHd@lqp`@cOysAVtLy=D;%$|0{PCpq1Q0=QST;%P6iTj(h~^?-jD;6Ez8{IxK(Xr z>jh}yART?EsXjtbE_^_V9xxQ;GyMF_v~gSbnrA)w z{IVajRTbXDm~Fh-OSwvEAtl&J0inUQ){29v+&whHxo>M}A;R{(`1tBv2`T4=;Ovp_ z!9Mt#WklL0!)xTHO-D<&tkpN+54=4U!xh=sRh&QoiTtZ`e+CGUsHNTsA zZ8xOJa|FM#O~NH@?u`75n~>gvDAzNpx1P-I(yJV0$uOnRxrqYPm}Z;HKAU*BnZW}Yj%2fBN+H!N1Y7W_E6du0`~kuwK^AJfu&%JY~lvg8@NAc;@z zzG>E?4GTdH*Z{!a<;yb06C=nUs{VK_(p7L~z@L)MeQMo@B;lpx1zrDShru?~g^YwE zB{Oq~5J07t_T+(6!cE_()3amBqRGfhLMa8!ZnoE^ICB&M=6oi=c&)J3P2Uusz*XMb z%JOXmS1}YB7)EJ*)an3yQnRyb{gmTQBFbynl{q&a%vaG13G-+l9+yC!OY@Hp`)bS0 zTpc^t2cbTbZ&^pq>Bq~_YZjK)EV^YVVWVL|p>rd%81;$PJJ>^84JzRpGL(ds0;zbw=Uka}6s8Xg062i;IY*%u7?f4ZEL|h|esq2jc%m@`yU^&WeuOVyLrU zTUM6mQoY8e-cvFGmN&=^st5!+H)o?oCYT!A%+&jWP8;p(3_m=r{Y4Y7v`L)G1CEK((7~Z zaHi%1uXMQ|t;E*#U7n_ZPqMT&fWg?z($p|jV{Emw46m=L1&uXjFxT3i8#Zi@`qgE_ zo7UM^dlBK$9&&SZ-RkDWbZ6#j#u+uh57@oty2tKfm8LS$YTI&y>4;z|) zx``?}>pL<%mAl-d>oeI@>;Jk-XBo1)1>5^P0ujlsPwyYSMX`f?FED zQ<-a?y2HXiF@53GeCxt4K&w98p@%O!29F~=zPi4^fVMZy@cCj~zX1?W#vEGrx;JyI zzMh6M?2~hClNmoRoC7;No$XZ{xrC@O<&h>QWUQ@WcT+w0415{>Do@ra52~Lc7G#H8 z6I5*Nl!sT>wq4aw*dKF-gYo0Eyk5`qWL!}JK)t9PebDcgf za_J^o9E4AhhOhRx+AB|<)r0?`XL;%q^9p)+>XuFNG})`)?qK_#*{_R( z+(ecb@la)NHGl2!%&pr)h(Z6_M8oH=I9TLfNl8`jyExL~f+70wBG3?j_I#yNW*(9) z%k1AtEOjEGOhUdsJ8qjIZMRqe80-MxUR$fHmd4P#iqWJ`&82;qvHN(QjO;`b!6?@YL}B;Xo_j z(5-`OXK|&I6=QXdK#Gt3(d3Qa=&kGUMRAS`QCfk|AxlgqVlEC%#fEe2&@65AXxb61 zZ|m!|1^_435Lt0BxEQ>|aV@#W&;*E>eRIPNT*uElub;ya+@(F;wDB?Kh&YE472>J6 zJP%~i74#-gUTxF)`Wfdo&No34pHfL5HD!58->taBHUZr8+66ZgMq8#;T7&e7R29=j zldT_kA2B7tEdw4Cye~t5d-&p5Z*UB~o1B4oRPTx7I$kA(?>k*?chyVAy{#e_XJ!Q? zl2j)3#_rf7swjHtDDq?V%I~~SLz;zy`#KWN??OkuIjFkMhRcvCGlF-s<}~m`e?$`1 z2UNNM^=ikzxkNj@b0g3b}-t`RYTpHoytVmX_1dv#pfI=61S;xeOM zU{VTk4S?Oq&JAM}A}V>qh1B=H^%xx8=3i`E0Z!f$`!L`!9~1cYU6&!{~~V)Omr(FoM%;?I}r zkZu^HPcpTQG003MlMhAFvSG3zwCO{a?XFkUh<==o<^JFj~X2TuO=^@@}!_ zS{4nFGiFSF_97d;0WUaVB16xx4#)D~KWGkTAt6$&!Y-ZM{#bV?;`1=W-&nJ2TG4h?MSQ>)N zQ8$}8T>Mn|b;gMED>m`POa!w_xZDHXQueQ_wIlH>=JN)Ail55heVj<_iVaghb$GOL z>qI>c91lhmP)-;g%5N}$pC+Zd;~@81{2-70@Y=A-4iRJdWh|fq2e!>TQa+A$%d*;` zwCQu)-4m~|cBY-Lu4EW{NEu{7nS9A2Y#skgpO*;$2JIWaraW zGUvJeSI!k(XQ2nwbP_sLl%ly*UlKnuv}`(YG7RAKnVJb{6x2<$2`(FfpznT6`Wc2y z3^T9%>tWWO8pJ6#laJ8kvA%PIEHEHh_W;J2gTbnyKYJLltqRS?y{;kBk7SD+^MqO( z`@}`d@pg%&7o^RMu&}J+N5O-|BP|pV)C9*z{HrIi!mMrk$zGlQ@Y%138cX3)&>;q3 zp1M4Adit*{TfDU-yV04K#ADoX4la|FRlZyM;}CDVg6yjLS)6F+{j?FDPm<%;5P)YX zjN#CcNK78)b>P;Wk2QDfi1&HH(mz0E?G~bu_xoB zw`QO(trbzku-LniRpMWLXqw?=OVeR0G7^cHurdyb%2^L#V2apx#w z!6gouN10LC>6qm>P2aEtU-&?T{L6E6POWd~wmH>yHtNjAYwTi7iEzT*#W4@`p#}Pj zbRR>Z(D%Z^D^v!Ui9&9|=U!UD#r`lHxcet7`wxa{c0<_(ff=4Tq*Yi^y7%Ugk=Y2E2mh`xdFe?Kn6TGk*Owb>DH? zUNdX;y`3@R!+Tm1g|wLJ4oy#zT&TsICVBNOrHe--j?POWaU1iTIzBxhJHI`gstXOlkmhTvRjJ7 z;n^uYKK-|D9y#-8;a zkjDs_Ni5#vHUWvhxJUiL=Y^N*i|EecLw)^1*{BZ-o~A>0BRDknpK0la@W%`aqpOyv zV=fuPTO`dI>V4^Nq`w%(CJhhDBbU%FZR}Cm@px*$ELDrGu9j;|&1-Z?clQT#Vj z)y!lQ$E275Trs!UD?)J!M!;CoHgJ%an3>034C5|y%nqVz-#%TsH-Pz6@;HIj;z;fN zJb8V*c}#b|b37c1rnkUJ8#cO&cJp3vfV3y)N`tfX(2sdH{4JfSF->-7tTvf7gr;Zf z*KE@88D}d+3{$WLVc)dKBA-|4ZbGu_ANoJF{q76a{q=|p?VZa}dDTIY;o@|yTzmo8>?}KEU(d z^wjR*UW2mG^)m@Rb}gOn6EdE`0rGJaM;%vlh~zC{KHr!>+DXATej=2LCE1eiiAq%O zz2j_mb;nb`?wkjj7mSVqn4zeK>1d{J+9Z$!8B^P53tBJShGDvm_mjn;Gug?A&NMY#>|FE}~1JXp#%X59=k1M`P`ajv(X9hGdGs6ffFLkNRNRvbPgvkecCUhnnT4+W8*0 zD6lrH=T= zJq`W1U9dkB=NaHc8%OZ@ok3Prf(;;4BgJ^Ho>4y{Dor08!$6 z>#fbWZ}YT8)x!DRJMDqYc{tq7og}B*8psm%sNXO{e2$1{-B*`7MjRoh6IkQp>KcUE zOZWr3i5hkk=eB72W)Qb;2)4$CzU*20GsUdwND<2bX?|_EyX7Q{s1~69avByDGO$FY zV_2&hYJeIY*qjM{JhEjd=i6|xM}J8AdHt`HsUNOIM^ilv$`%{mClmoxNgJ1Mrp*Q* z^%8Gici=wqL+=1qZE*F?f9CsA<09G~vqBo6x z*KwNW&N`u_STZKy6@T!#yEt3#U1Nb>IANMS)!OR!g8cM-A|hHq<9JlJ@Mx8gQ4{%0 z7xI7!GiNw<154#Rz9a=}3AnV{qWm#v&s`a()Hb|h9};p2te5a|9-B5is&A^~W7v&Zs-`mxvhZZ>;v{;c+BhEfS9j*{4mgOj zG+45@+otN8Ls}YlF=&)0{*2$~M?-(+Rleu04+G&I+T<^*zG?}!(zm*VS-BXNHfqhI z7RT8(Z2eLXGnzA%-9BbOlkXM^B6q_-B=p-P#IX1d=G&vD0pGrw=L3UA4Gr2#?V6jo zoI}tf+w--8X#Ta}u4|6YHS=3JBTF3S@hES>_sRJ^Ja^6edEo3LUfWUr1Kt+aqj8)< zls7z_m@QP756N&IJiR3tGtpJn-ud)~(S+oq#jPBsOJi&C?3a1gtEptjM-xThR9Hvi zvM`^Qviy>Pjm5g8IT-Rl&VVUR_*Z5iI+Xh~3vwlVd!kN@A#6+W5)}1e%Gzzu49h*p zq(T4ctK>xY5v*D8p_W|~N^G}%Z?BsLx0U-UL&jq$-2Y-2&4tg!a2^tWc~DBuNIbS$NAG%@zz4qTVf zu2=$QuDmB~o=s5&O(nl;PH>DhJ%)>b&M-=SdfdM41Qy^tBCB9&6=UOzUX+b1#Qdmc z2_y>re59F(8V`8M(?9693@Pdjv&dHKi+e4d@)GsqEdigU8D@cTY%AH`YOd{lAtMWj z6?%+tji~b9RC+!($7rI7cWKGR*Y6pKi$J}r?qR$e z#zpo*K1z;RWOn~>t&{K~e7{q}jjT~S^gtW)N~Fmb|3G$ORTn{(AYj?xyQx2xXF?2! z4L!%^id{qk6b@lBHCg;v{SOAPjJbR`{6PDhp5Qqv(Y$WowvfmT^?h)znPFzi+ z2Yhy!I{JjpZ*`gAHD$GAoxnFbqKx>0$ll`f^z1ovP9?F!^AVbC(`C%c9F--ykqCh# zf)SUnw+=x3VMU1sw9IraUuQ#4S*WtMRNl|KmKahGvwi80G`blBNN_c*wg;}M8{RZo zbnBj%Kl+f^v-c`zaAJNR4#%u;_f0~COd{&$PA4 zm$=Ysa<_5>yMW4b7{TPj1JF88QFJ_?O-=-kKXMN0e*E}q7GBuIM7aJ4vq_w%2GGp7 z=EIlQPsPuqMsFi)@Oqp78)0zE*?!i2hMipPTsh=CMq;dHSq4eR(8kAPnPspr469gV zSvK*ofXKrLtZIjgn%He-+G1%Ff(!s}MNDUkkHOb7ta3+}UO%D+;{(tOy!@SGq*G*J z`)+-gzxa$RQ3!3bfmxC$zolYr>-O5wVz;!2A&_f11Eis$x4D84-)cAEXGZ$@2It+9 zOOY(kT}2+lp~$@@ihT&rgl&a<{yFB;ObX46Iy@;Ux2GZGmbo)7a=e)bT#Lx$w-q(E z0v!nqd_18o@pGeLYp2W;ctr_4*BVe0@r8J-O zC#qdI8l6MPv${6?47ekor_G@)KNiHo*VzMA8x6;mr-*}b&6T~+P9Rqc7k2I;>pXAN zw(w$z2%4eKS)Yt_!wyUfZpDfMi_cIAW5((VS#fpE9R+acQ_9&BS1u>drUaoqiypj} zuP^||DfvOEaF5cDPvxVA3P)F?$rBv~n(0k{X2Iu|{s0+AftE~i9%m@euVwVi>grRc z;;ZXVY`()UYVS>IPC|s-`&evcfNP23+L?n^y8c! z**N#kEsGol&^-;vHOFP{y0lK?1~*MQ9tut1u10-JK-GKndYwP)nZ-c%`bL%IkyW0i zEfzl-|Jk$gL7?z^MW2A$8&ATlw$zAipWvYBT@&M!%mFJ~40{9$RAFW~TX72MA;L^o zWZ~OocCo`^TmJD6OHOa$w-cC@K$4zI0&6jd$pFma1dMum(IWJ2JJHez0gu9HMMlv_ zue$VXe#9vJrvEi|R4O>_@mkN3dimUC@=I>ngzprD0$7SF8} zi59%8J2NPp?Vwcgd6oC5ZkT9cPXn(mW{e7~A8nL7K;(Cfp|3aH>8`*a(Btgvq8Y&P z0es;$qm}G68ykOFYR^13Kjh*|OO`&9=uM#@LkaM0L+brvoDp{-oLn(4oLd;d%`$wL zf~_1{r(C?9P@mnTfgju=;*_E%{`~xmlUm7gS7*pmXbFOAj5I1qi`=7DvzAGGhW=r5 zIW1v}(aETK`8W0Qi6ht{85RO~!^C7G3isJ7jo6p(0qXl6G3XNsBeAZSk^TYyqV^MQ z$P8zUJu^`wJ00?1r%#1)NNFAR(8HDeVr2rteq8315Yba{KC1q>V(R;P*=Ba~i0EJ;PV7l$(@FeRdyRYNs7vTch&KgNybmyBYcE?diBNU!@$2hy zo(%PInjjAJ5$1Y%^kwMPql_!bNNLl&j>B#DRY6@ZDO3L)cm9cNa=_{gqPsjRo|YZd zP%bpT@2gY3e&WWHrGUBa6(enL;-i&rar@;;{6b*O9VU7z#N+iQKboDKcMVptKGz z^F`Ko0PioWxHbc?@KsJ+BSqApgcmie&$q%m>M5v?q$n}v@JdX1b2B_LM^SQnN}i-L zK2H)hVgt@Z$x4H~0GI+;DXFZG@}N!;|DaAOSOUD@`#+JAbg_3%;O%3u@wMx? zyWIbT>SqAPJHob0@73#c`J#MH!DB!8#u26tfg3;wfBP^h1Z@U#W;1-+{;s?smY93io^ShI*}yl4}M3JA|)Tb&$)8(HNKprbS;PE z@IZBFo5#cE&?j=(V}W%CNFvDZ0lIxGdq|gd3bZ}=Kpt z4&Z6f)zJX;2tUE>(PeY*AjyZXue^%Q)w*Ysw3th~xN*a5V9NF8xcbZsQoPrso(+*X z%n{|95<@LrcAa;~_HmZlu19Vk=Jm#3O||7JhIu21=TpN&VzOmjA3Wc7M{uEW%sA`z zy5JuEfbgn`)?)Ym2Q5^Y(UJF2nTs`@$zRP+k<|wyD?_b^<-W*hgFNMeKeBYe;bPO2JurTV1{CVw5dbh5r?%uR&~9Uq}0s@AMmy) z%iO3Rclz+%wQA|{Ci5d1uT%MoeCe{GCVcJStFN~|n4tTHc%rd(G^>dzw2nK{nXKP8 z7yR%q#ivp;AY*&RR1zr{bhLFI+(-siH6ZfXjEqO;jRRXh#7!K2l01Yr^^z7} zzvTVi36T7xwB7TSRGZct^tGuN)S7~w2^On@u1kHrYtYt?bO%(kk$=Jl_%kEl*L~)uNAcO zDh<`cBDk8Cl{sKfdjtetc&Jl9#D;KIuCrLATFi!)BC&&P(VGYeUY#h4o!#vi@* zN9#80hunxgqa71)C14R*@Mdy3bn}zT3MMFP?T)1{C0b$zGMoFpM^Zu>H7Z(mDI>q{ z#g_A&j@;nAO3-#(?b`UPOY19gDRcVJ*$KX$LvPCoQb16l*PEYU=)EM+@Wv&vE(A1y zi9`~sup2DoB%AL(zX{@Bo`&g&0f&y&?^aG`C&ljQi|vZG+jt~D>9+n&F?;3Mt*EpQ zrg}%qJ5G31DIH95Q8=V*L+PY7m7AP_eX>S!tIVZev&8}uvGwsze)x$1WC z*00ewLSHF{si;~yLBH6pChVS>UHJ#h$r)Ok0(N>)VTngcA z9BEr396`;W&3bB%c%o;x0UmJXeS~u1@TN`c+l&WR)jijKE_r%R&eh}bTgf$PTd!|= zQ1*CXjgV=vyINqL(mnHWC2JZW?fOviBuV-i5-|o-d ztN7Gna*snn3b!V{$crCejQp#STNw`&GOoWf{BXD8tl@`j{Lu)Bwjiup;doc%i;bv; zw^Vj<)Xqa8?FVbQuW3^UoJFs54)PjsKk45cc0O~=`aYDo+UNUeQ=^=QQ^Au{zQ$zE zvn}EP(gN3Y+I$MhaEi%DZxGzOw|n!6rmJ@9(Yp@@aRnJ7@v%E{LS4C!fd+SbrF3p| zVw_$uz?0`-Ti4Es?N1zr#_2RL{v7PI*e0<39BjY%NhxstJZuA~c^LNW`yGQ~r&-f`m=c8~5R$b;DPMLMH*uEB((Vs{$>+ z0@K;OJm2o(3TYHU6J>tKQU9$Z2`v>H9v*EJ6%yp@7xgOO`oFjP z>R^c*?2tHdGxm_NDk$v^-7@9eptIY$9V@1(3N8jhK&vYRT-*hYyTWuqHFrqJ*$tYy zL&B*QRRa^Owa#x=Fk+(TbYq$}y3aAPN$&6RQ7JIbaRGaE0vvb5~T>9Ki|> z{;$xh9uUxF3wk49>#?~f6+tym=o){s`xkic0Rc4oe*mo8VQDbj1GZCq#Nl7Cz*+j& z^#jv9A;PJn*b{czV7n(&tzRY7pZZrd#8w)_{Jlr41-yuWDTD95V7B6&XMSsi2dn=g z!`?al-%9kHUD>tH31U%=|CdD{0d=Tf zmD51~i~3xG(7}~9&`tn3p0H!!z(tsxcv9j&Dp*{M%eHGl)#)o*d~zb2m58Ps!1@mD}x&XAuh;N zRg;L%VoZ={QsgZVN^g` V5KK+(*s5cz{Gf}u``XHg^MAU;gN*9TNq=_o@5ExNp^)c*_G^DV(cSn27@_hj3W-2))d}NJgziI6)rHJAt$v!$?GBpIOf9ZIc|^ndPqxc*jeB(O`!=WlGE}oR zVX55Rab(J6E%b}NeO>tC*B4W^xd$H~x#MGTE)d{$MYx9Ud*1c(o$LH%+^B}TdO6O= zhqbVj=RR$Vti_{a(%2v>s$Xrd*!V-l#?QIZAr%< zUB{leO8N{uN|G*N2S?l9MVeN;&&195wcT>Dh;{#16ZiU7?BIavP2tyjSkvg`ULIU! zTExXjrHfLnkslJS->BUj*BFat+pBWZ;kJsJ`q<_+o>+cjDkMdOyQQe?6Wu2{-!Ve&gqWr9P3br_}E+BQ*^Z?_IXai(3CI{95{cB=H!tT7Or%W}H)%+M-&RBIfQy>M){e|l5m zXEjZ!2Tx=xAl%>exj^;?za8?9^cd!d1*vEHlV;>3dn+l^e?NxE+E&&WPByU05U5(o zGOn;vZx5F-%j%b1y}6)$`C=Tm+`(B)vKjv$joVcsSu91e9*^&Q;w98Gn&w8ge( ze`=Jod#m7`dIwcnlvD`9D?#zdKY*W$ncSdRT&+gOd6{-@(^~lhwF7anm!34W%65ds zDWRvi&VBomLuV`tdhEQHek%%rutOsdLI^-ehaid(Btuy0(h<`8JQ-8UtZqixLOjg+ zyuG^b*`s#Si>2rj8vd4*N-XyLZKATowWC6E1iQg?XC0fIKeT6Ayi#5YN!&OKI1Vj@~sb;FgN z!iW37)gm>*=%Qxzrp&Y(Ut5%n;^{Sql6p7GkPZKqS2Yg~TIWg}3qBze*A zuYU9ZkS`SfHWzTF+wnwaq4=ini#$r(lIPlWH8!0_Lf8r3;K?UJrbiQWe@ISUCd#i^ zcY z;ri#!pRKR68z;?T&nU@AIWbGK$ERQF%wf{8pYz=a%Vw_`s?{i;OIDjJ`7tBD?!JD9 zYl!v0<0*ps*|IT{fM?q*okY^(p-%W9`-u;>EzXlfa?vv`XHi(q!~ccMDIX#rv-*<^)Gic1`V-OR@Db4gUDI75 zYHgWSGUb;dMfILaCsYg}i;pB#s7sFEutg#6Qb8N_v6U->hdX-KGp$V5ru{eJJW#mHo_AH8~?Ts=n4J z8}*tPnS)xZPDW9a47*WO$n-f1#1r9D25-to)zG&`QD)3FsghQ#NUDe>d=aoRYDzh(o&B!~~JksuXn@Od>P<(Jjg?-)*J*z+U_;-q3-NTLjg!sjwfy%Ai^ zL~V+^!a_L~KTOR@U_%0h9Qf#B%RI>pE|B3-b)o|Y)jsSr6NqIPVzN)M5;GMsv`j^4 z@L*w!04H&!2?+}d7A9DjVPS!V6&5yF*kR$Itu%4+ekWcVGY zI4FO-aBO$rqq0kswrgx>SC@O2di~_dQLgnovBRTtEionGtQH=XcDd{1j>W!AE$$}@ zjvh?=rcrCpK5mS(`-<^Qe<{mNdVFy1JSL?lkNG{PQZj8cxqND9%ZB;fmW<=^^OR6m zd`zI8l~Os+7sB^nM(3N4263pl-BDIA$E-SJ8Gi_?lvo~_APkqX;flKUQ?)BYtB{3P zgWC%>n*C?z(<(786{7`H$yvq%9HXhlk2TdN2GM`L8_dzFLw~bQxUDf~@V;9y((9NR zNs2Xf+@^ni&k>czly}bkwj)I*vJ+3*;%;MS$CvcP>Jsq=AQO;p*_am0fp zy;3uM4th`M;$rVoUF53(Z16Hgyy0EOcD8E3g$Q}vB#vSxIm9#2+VlAr)isbeVT%cY z*xqJBIM`BNTX2Jq1@Hp0#X&cb96GFAv6=8m?L~Wd4pK!DWCE3n(9&{gOjd%NWyHy` z=qHhWT3T)^*V{z|wIw(F-ge76irMo23f2HUWC;cF0t`7P(e}H*GI- z@Pjxgafew7(n?I_aLopSw7ZMFqVhrH!o1{R;fLh`G`dCD=Z{{QQ`l|8fd57q?YO z;OI-0WigNVOr^cJSAqs8pTpMb>2taD-%TyhT@YC&$62v{KA@iZQox{}nFSXwEjaMR zW>8g-bs(yHm*<~DiUC@893uh_6Zt$U4WC|}6(3Ick|S!h_~t9|Uc{9>u-OPf*42B1htlAHkX-C7WA>=yD6k^^dLYwd?$zMo%t?%&L?& ztW-``_Dh zi<_IpXUTKU z|KUZN+m8>u=~pl-)lrJk%gVBP-tL91_0t~5wx##)A2&KHbOX^@a2*V$GPii4IIlYcF;@X+e0_qf>d{_6&Lsqk27uRRinOt z>#eIHf4bck@s<3kyDsD?MmSzj`k|6t3SnMbga=f_t!j%m6sjJA{wfh>S$_Di`@F5K z@6hxsi7(~aoE2?S8Hw5=L=6rdYXjZDEqd-YORuoRPy1~8$v!g2+c2TrU3mJX5FnKd zNpt+~(+XH8LrzFxP?`+sqHNiKMmi({mXjfE)Cu+-#UKUJMn;0L6vz%$%(;V&!x-uj z*N%cug|HM>3?DbV`hWk{xfv!+U<{j3?C9Tq6crv$keCX;Lt%E0MM?1PM8gap3*s1v zCf^Qnn}NVIAB(c&-$9P2L1N2!JjL4hpH;pV zrbvql0`*J?1L`y2`KqzMf!uUR2!t?z_mUJtIbl$c4ig1^t$)Vi@W6!#$%BvSu-n#d z${jIbAf5p!q2x4xRR(O>V8mb83-}pcZA4fR(W8(Ig~6Uo*lX4RcxA!{n1WzYHAWOE zePM71rXye%2?nqS@~m+bNh?keM1q}nnZhcNxd8VZZ^jsQWx_)hbIOdPD!{_uLty0s z9HnUixU(QF22a7FxDSC95@Z9mvmi9;w0)knDww(O-~3??jQpI=f9H>JWF&Mg3 zgkuw&fc+&%lEUZ80X#QE+hPZ^3{5L})d z5WNIv{rylTrx}y-xo`r*i*P${1pl+0mS-5DT9l^9f1=AFI|;c+a6`YC!&8(5<-S2f!P%nynI^Tk0eLSs2I%I&wY;+hK6$Y9 zV+5#z?@Yn6Xdoqz#(-aWZ~`MZ0h8A~G(c0iAke_b=|F)Y)Cd{`Q{eJoa))JNUPFVK zG=2!!!h8;l!VV}yMX<)OqZ!^uc=&-b1(IX%Jvdz%KZwnT6u>)%=J%ApumE zT?!5NjQ|4$kf_A}*a;f~!S}DAmxnOGybzK$|NXLn>17v8V*Z^s*9n903GsFa4+)J> e^9~93RgDck<6z6e%1C4h|H(oy?{USz+J695O}#w; diff --git a/docs/img/71.png b/docs/img/71.png new file mode 100644 index 0000000000000000000000000000000000000000..6a95b1b87609a7ac7bcc408af081e6142897b637 GIT binary patch literal 80335 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

    (JagH@4QsGU$r>& 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 Date: Sat, 25 May 2024 15:01:59 +0300 Subject: [PATCH 67/76] =?UTF-8?q?=D0=98=D0=BD=D1=81=D1=82=D1=80=D1=83?= =?UTF-8?q?=D0=BA=D1=86=D0=B8=D0=B8:=20=D1=84=D0=BE=D1=80=D0=BC=D0=B0?= =?UTF-8?q?=D1=82=D0=B8=D1=80=D0=BE=D0=B2=D0=B0=D0=BD=D0=B8=D0=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 3a1022e..3f0f232 100644 --- a/README.md +++ b/README.md @@ -1181,7 +1181,7 @@ const MyPanel = () => { `PKG_P8PANELS_VISUAL.TORDERS_SET_QUERY` - процедура, вспомогательная утилита, производит в тексте SQL-запроса, поданного на вход, замену указанного шаблона на конструкцию `order by`, сформированную с учётом переданной коллекции `RORDERS`\ `PKG_P8PANELS_VISUAL.TFILTERS_FROM_XML` - функция, служит для десериализации (как правило, полученного от клиентского приложения) состояния фильтров в коллекцию формата `TFILTERS`, на вход принимает `CLOB` с сериализованным состоянием фильтров таблицы в виде `BASE64(ИМЯЗНАЧЕНИЕЗНАЧЕНИЕ...)` (клиентское приложение должно обеспечить передачу состояния фильтров в этом формате, см. пример ниже)\ `PKG_P8PANELS_VISUAL.TFILTERS_SET_QUERY` - процедура, вспомогательная утилита, производит вызов указанной серверной процедуры отбора с учётом переданных переменных окружения и значений в `RFILTERS`\ -`PKG_P8PANELS_VISUAL.UTL_ROWS_LIMITS_CALC` - процедура, вспомогательная утилита, служит для конвертации номера страницы данных и размера страницы данных в границы диапазона строк выборки (как правило, клиентскому приложению удобнее прислать на сервер текущий номер страницы и её размер, в то время к в запросах, для выборки, удобнее применять границы диапазонов строк)\ +`PKG_P8PANELS_VISUAL.UTL_ROWS_LIMITS_CALC` - процедура, вспомогательная утилита, служит для конвертации номера страницы данных и размера страницы данных в границы диапазона строк выборки (как правило, клиентскому приложению удобнее прислать на сервер текущий номер страницы и её размер, в то время к в запросах, для выборки, удобнее применять границы диапазонов строк) **Пример** @@ -1815,7 +1815,7 @@ const MyPanel = () => { `PKG_P8PANELS_VISUAL.TGANTT_TASK_ADD_ATTR_VAL` - процедура, добавляет, к указанному объекту описания задачи, значение дополнительного атриабута\ `PKG_P8PANELS_VISUAL.TGANTT_TASK_ADD_DEPENDENCY` - процедура, добавляет, к указанному объекту описания задачи, ссылку на предшествующую задачу\ `PKG_P8PANELS_VISUAL.TGANTT_ADD_TASK` - процедура, добавляет, к указанному объекту описания диаграммы Ганта, новую задачу, ранее описанную через `TGANTT_TASK_MAKE`\ -`PKG_P8PANELS_VISUAL.TGANTT_TO_XML` - функция, производит сериализацию объекта, описывающего диаграмму Ганта, в специальный XML-формат, корректно интерпретируемый клиентским компонентом `P8PGantt` при передаче в WEB-приложение\ +`PKG_P8PANELS_VISUAL.TGANTT_TO_XML` - функция, производит сериализацию объекта, описывающего диаграмму Ганта, в специальный XML-формат, корректно интерпретируемый клиентским компонентом `P8PGantt` при передаче в WEB-приложение **Пример** @@ -2084,11 +2084,11 @@ const MyPanel = () => { `onClick` - необязательный, функция, будет вызвана при нажатии пользователем на изображение, сигнатура функции `f(event)`, результат функции не интерпретируется. В функцию будет передан типовой JS-объект `MouseEvent` с описанием события. Функция не будет вызвана, если произошло нажатие на интерактивный элемент и была вызвана функция `onItemClick` (см. ниже).\ `onItemClick` - необязательный, функция, будет вызвана при нажатии пользователем на интерактивный элемент изображения, сигнатура функции `f({item})`, результат функции не интерпретируется. В функцию будет передан объект в поле `item`, которого, будет содержаться элемент массива `items`, описывающий интерактивный элемент изображения, на котором произошло событие. Если функция была вызвана, то вызов функции `onClick` (см. выше) не происходит.\ `canvasStyle` - необязательный, объект, будет применён в качестве значения атрибута `style` контейнера `div` изображения\ -`fillOpacity` - необязательный, строка, прозрачность заливки интерактивных элементов, где "0" - 100% прозрачность, "0.5" - 50% прозрачность, "1" - 100% непрозрачность и т.п.\ +`fillOpacity` - необязательный, строка, прозрачность заливки интерактивных элементов, где "0" - 100% прозрачность, "0.5" - 50% прозрачность, "1" - 100% непрозрачность и т.п. **API на сервере БД** -Компонент компонент не имеет специального серверного API.\ +Компонент компонент не имеет специального серверного API. **Пример** From 7f0419eb3b68d942825ff63ce03d951bdd8df2a5 Mon Sep 17 00:00:00 2001 From: Mikhail Chechnev Date: Sun, 26 May 2024 14:12:10 +0300 Subject: [PATCH 68/76] =?UTF-8?q?=D0=98=D0=BD=D1=81=D1=82=D1=80=D1=83?= =?UTF-8?q?=D0=BA=D1=86=D0=B8=D0=B8:=20=D0=BE=D0=BF=D0=B8=D1=81=D0=B0?= =?UTF-8?q?=D0=BD=D0=B0=20=D0=B8=D0=BD=D1=82=D0=B5=D0=B3=D1=80=D0=B0=D1=86?= =?UTF-8?q?=D0=B8=D1=8F=20=D0=BF=D0=B0=D0=BD=D0=B5=D0=BB=D0=B5=D0=B9=20?= =?UTF-8?q?=D0=B2=20=D0=B4=D0=B5=D0=B9=D1=81=D1=82=D0=B2=D0=B8=D1=8F=20?= =?UTF-8?q?=D1=80=D0=B0=D0=B7=D0=B4=D0=B5=D0=BB=D0=BE=D0=B2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 38 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) diff --git a/README.md b/README.md index 3f0f232..0a2bb29 100644 --- a/README.md +++ b/README.md @@ -225,6 +225,44 @@ WEB-приложение "ПАРУС 8 Онлайн" поддерживает в ``` +### Интеграция в разделы - вызов из действия + +Панель может быть вызвана из действия раздела Системы (только для WEB-клиента). Для это необходимо зарегистрировать в разделе метод с кодом "P8PANELS_OPEN", при этом метод обязательно должен иметь "Тип метода" - "Встроенный", а "Доступность" - "Клиентский". Для метода необходимо настроить параметры: + +- `SPANEL` - строка, обязательный, уникальное имя (`name`) той панели из "p8panels.config", которая должна быть открыта действием +- `SCAPTION` - строка, необязательный, заголовок вкладки WEB-приложения "ПАРУС 8 Онлайн", в которой будет открыта панель, если не задан - будет использовано видимое наименование панели (`caption`) из "p8panels.config" +- `NIDENT` - число, необязательный, но требуется если предполагается, что панель должна работать со списком отмеченных документов, параметр следует привязать к контексту "Идентификатор отмеченных записей" + +Указанные параметры - зарезервированы и могут выполнять только указанную функцию. Тем не менее, метод может иметь произвольный набор прочих параметров, необходимых для работы панели. Все параметры (кроме `SPANEL` и `SCAPTION` - они системные и требуется непосредственно для корректного откытия панели, но не для её работы) будут переданы в панель в виде GET-запроса. Получить их значения в коде панели можно применив специальный API фреймворка, реализованный в `NavigationCtx`: + +``` +import { NavigationCtx } from "../../context/navigation"; //Контекст навигации + +const MyPanel = () => { + //Подключение к контексту навигации + const { getNavigationSearch } = useContext(NavigationCtx); + + //Считаем параметры, переданные из действия + const actionPrms = getNavigationSearch(); + + return ( +

    + {JSON.stringify(actionPrms)} +
    + ); +} +``` + +Далее настройка в разделе выполняется стандартно - регистрируется действие раздела, в качестве реализующего метода действия указывается "P8PANELS_OPEN". Действие может иметь визуализируемый диалог ввода параметров. + +Панель открывается в виде новой вкладки WEB-приложения "ПАРУС 8 Онлайн" после ввода пользователем значений визуализируемых параметров в диалоге (если таковой отображался). + +В настоящий момент в Системе можно зарегистрировать сколь угодно много методов с кодом "P8PANELS_OPEN", но не более одного в каждом разделе. Если есть необходимость открытия из одного раздела нескольких различных панелей, то рекомендуется: + +- Реализовать дополнительную навигацию в открываемой панели +- Реализовать в КОР-действии параметр с выпадающим списком (или иным интерфейсным элементом), позволяющим пользователю выбрать какую именно панель ему необходимо открыть сейчас +- Определять значение параметра `SPANEL` КОР-метода "P8PANELS_OPEN" из контекста (документа, атрибута, каталога и т.п.), таким образом автоматически определяя открываемую панель + ## VI. Разработка панелей > **Внимание:** данное руководство не является обучающим курсом по WEB-разработке как таковой. Изложенные ниже сведения о порядке реализации пользовательских панелей, даны с учётом приведённых ранее требований к разработчику. From 289ba71694aa1a4451eeec84a247324e93056162 Mon Sep 17 00:00:00 2001 From: Mikhail Chechnev Date: Sun, 26 May 2024 22:24:17 +0300 Subject: [PATCH 69/76] =?UTF-8?q?=D0=98=D0=BD=D1=81=D1=82=D1=80=D1=83?= =?UTF-8?q?=D0=BA=D1=86=D0=B8=D0=B8:=20=D0=B4=D0=BE=D0=BF=D0=B8=D1=81?= =?UTF-8?q?=D0=B0=D0=BD=D1=8B=20=D0=BF=D1=80=D0=B5=D0=B4=D0=BE=D1=81=D1=82?= =?UTF-8?q?=D0=B5=D1=80=D0=B5=D0=B6=D0=B5=D0=BD=D0=B8=D1=8F=20=D0=BE=20?= =?UTF-8?q?=D1=80=D0=B5=D0=B3=D0=B8=D1=81=D1=82=D1=80=D0=B5=20=D0=B2=20Lin?= =?UTF-8?q?ux/Unix=20=D0=B8=20=D0=BF=D0=BE=D0=B4=D0=B4=D0=B5=D1=80=D0=B6?= =?UTF-8?q?=D0=BA=D0=B5=20WOFF2=20=D0=B2=20=D1=83=D1=81=D1=82=D0=B0=D1=80?= =?UTF-8?q?=D0=B5=D0=B2=D1=88=D0=B8=D1=85=20Windows?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/README.md b/README.md index 0a2bb29..1a62919 100644 --- a/README.md +++ b/README.md @@ -97,6 +97,16 @@ git clone https://github.com/CITKParus/P8-Panels.git 7. Перезапустите сервер приложений "ПАРУС 8 Онлайн" +> **Внимание:** при установке учитывайте следующее: +> +> - **Для Linux/Unix** +> +> - Чувствительность к регистру - обращайте внимание на регистр в именах каталогов и файлов операционной системы и регистр в котором упоминаете их в конфигурационных файлах, несовпадение приводит к неработоспособности настроек +> - Права доступа - файлы конфигурации и файлы дистрибутива фреймворка должны быть доступны процессу WEB-сервера +> +> - **Для Windows 7 и прочих устаревших версий Windows** +> - Версия IIS, доступная для этих ОС, зачастую не имеет автоматической поддержки шрифтов в формате "WOFF2", применяемых фреймворком. Это может вызывать некорректное отображение панелей, иконок, некоторых элементов пользовательского интерфейса. Добавте в файл "web.config", сервера приложений "ПАРУС 8 Онлайн", строку для определения формата: ``. Путь для добавления данной настройки в файл "web.config": `configuration/system.webServer/staticContent/` + ## V. Подключение панелей ### Интеграция в приложение, главное меню, галерею и меню панелей From 4bf59d7b344eac9cfc6e1370c797d46c2546047d Mon Sep 17 00:00:00 2001 From: Mikhail Chechnev Date: Sun, 26 May 2024 22:49:12 +0300 Subject: [PATCH 70/76] =?UTF-8?q?=D0=98=D0=BD=D1=81=D1=82=D1=80=D1=83?= =?UTF-8?q?=D0=BA=D1=86=D0=B8=D0=B8:=20=D0=BA=D1=80=D0=B0=D1=82=D0=BA?= =?UTF-8?q?=D0=B8=D0=B5=20=D0=BF=D1=80=D0=B0=D0=B2=D0=B8=D0=BB=D0=B0=20?= =?UTF-8?q?=D1=80=D0=B0=D0=B7=D1=80=D0=B0=D0=B1=D0=BE=D1=82=D0=BA=D0=B8=20?= =?UTF-8?q?UI?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/README.md b/README.md index 1a62919..4e41d86 100644 --- a/README.md +++ b/README.md @@ -2241,3 +2241,14 @@ const Svg = ({ title }) => { ``` Полные актуальные исходные коды примера можно увидеть в "app/panels/samples/svg.js" данного репозитория соответственно. + +### Ограничения дизайна пользовательского интерфейса + +Фреймворк позволяет реализовать любые пользовательские интерфейсы, вёрстка которых не противоречит возможностям современного HTML. Тем не менее, при разработке пользовательских интерфейсов панелей важно придерживаться предложенных ниже правил. Это позволит создавать их в едином ключе и упростит работу конечного пользователя при их освоении. + +- Избегайте нестандартных реакций элементов пользовательского интерфейса на действия пользователя. Например, выпадающий список при активации должен отобразить состав своих элементов, а не вызывать бизнес-функцию отработки документа. +- Избегайте прямого применения HTML-тэгов. В библиотеке [MUI](https://mui.com/), включенной во фреймворк, есть всё необходимое для сборки интерфейса. +- Старайтесь не применять `
    ` для всёрстки - для этого в [MUI](https://mui.com/) есть группа компонентов разметки ("Layout"), используйте их (`Grid`, `Box`, `Container`, `Stack`, `Paper` и пр.). +- Старайтесь не использовать без острой необходимости атрибуты `sx` и `style` - всё необходимое для стилизации как правило есть в атрибутах компонента [MUI](https://mui.com/), изучите его документацию. Если применение собственного стиля неизбежно - старайтесь выносить стили в единое место в коде, переиспользовать их, и импортировать там, где это необходимо. +- Придерживайтесь единой цветовой гаммы при реализации всех панелей (в идеале) или, если не удаётся, панелей, отнесённых к одному прикладному участку (ПУДП, УЗСР, БУ, ПУП и т.п.). +- Изучите и применяйте `ThemeProvider` из состава инструментов стилизации библиотеки [MUI](https://mui.com/) для придания индивидуальности панелям и их компонентам. From 239ca73548cf1569a200e3f941a4eb6e368fee1d Mon Sep 17 00:00:00 2001 From: Mikhail Chechnev Date: Sun, 26 May 2024 22:52:19 +0300 Subject: [PATCH 71/76] =?UTF-8?q?=D0=98=D0=BD=D1=81=D1=82=D1=80=D1=83?= =?UTF-8?q?=D0=BA=D1=86=D0=B8=D0=B8:=20=D0=BF=D1=83=D0=BD=D0=BA=D1=82?= =?UTF-8?q?=D1=83=D0=B0=D1=86=D0=B8=D1=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 4e41d86..2adc8ca 100644 --- a/README.md +++ b/README.md @@ -2246,9 +2246,9 @@ const Svg = ({ title }) => { Фреймворк позволяет реализовать любые пользовательские интерфейсы, вёрстка которых не противоречит возможностям современного HTML. Тем не менее, при разработке пользовательских интерфейсов панелей важно придерживаться предложенных ниже правил. Это позволит создавать их в едином ключе и упростит работу конечного пользователя при их освоении. -- Избегайте нестандартных реакций элементов пользовательского интерфейса на действия пользователя. Например, выпадающий список при активации должен отобразить состав своих элементов, а не вызывать бизнес-функцию отработки документа. +- Избегайте нестандартных реакций элементов пользовательского интерфейса на действия пользователя. Например, выпадающий список, при активации, должен отображать состав своих элементов, а не вызывать бизнес-функцию отработки документа. - Избегайте прямого применения HTML-тэгов. В библиотеке [MUI](https://mui.com/), включенной во фреймворк, есть всё необходимое для сборки интерфейса. - Старайтесь не применять `
    ` для всёрстки - для этого в [MUI](https://mui.com/) есть группа компонентов разметки ("Layout"), используйте их (`Grid`, `Box`, `Container`, `Stack`, `Paper` и пр.). -- Старайтесь не использовать без острой необходимости атрибуты `sx` и `style` - всё необходимое для стилизации как правило есть в атрибутах компонента [MUI](https://mui.com/), изучите его документацию. Если применение собственного стиля неизбежно - старайтесь выносить стили в единое место в коде, переиспользовать их, и импортировать там, где это необходимо. +- Старайтесь не использовать, без острой необходимости, атрибуты `sx` и `style` - всё необходимое для стилизации как правило есть в типовых атрибутах компонента [MUI](https://mui.com/), изучите его документацию. Если применение собственного стиля неизбежно - старайтесь выносить стили в единое место в коде, переиспользовать их, и импортировать там, где это необходимо. - Придерживайтесь единой цветовой гаммы при реализации всех панелей (в идеале) или, если не удаётся, панелей, отнесённых к одному прикладному участку (ПУДП, УЗСР, БУ, ПУП и т.п.). - Изучите и применяйте `ThemeProvider` из состава инструментов стилизации библиотеки [MUI](https://mui.com/) для придания индивидуальности панелям и их компонентам. From b47fb2558dfaa4a1e7fbcd8d0867be5652f495dd Mon Sep 17 00:00:00 2001 From: Mikhail Chechnev Date: Mon, 27 May 2024 13:07:05 +0300 Subject: [PATCH 72/76] =?UTF-8?q?WEB=20APP:=20=D0=9F=D0=B0=D0=BD=D0=B5?= =?UTF-8?q?=D0=BB=D1=8C=20"=D0=9C=D0=BE=D0=BD=D0=B8=D1=82=D0=BE=D1=80?= =?UTF-8?q?=D0=B8=D0=BD=D0=B3=20=D1=81=D0=B1=D0=BE=D1=80=D0=BA=D0=B8=20?= =?UTF-8?q?=D0=B8=D0=B7=D0=B4=D0=B5=D0=BB=D0=B8=D0=B9"=20-=20=D0=B8=D0=BD?= =?UTF-8?q?=D0=B4=D0=B8=D0=B2=D0=B8=D0=B4=D1=83=D0=B0=D0=BB=D1=8C=D0=BD?= =?UTF-8?q?=D1=8B=D0=B5=20=D0=B8=D0=BD=D0=B4=D0=B8=D0=BA=D0=B0=D1=82=D0=BE?= =?UTF-8?q?=D1=80=D1=8B=20=D0=B7=D0=B0=D0=B3=D1=80=D1=83=D0=B7=D0=BA=D0=B8?= =?UTF-8?q?=20=D0=B4=D0=BB=D1=8F=20=D1=82=D0=B0=D0=B1=D0=BB=D0=B8=D1=86=20?= =?UTF-8?q?=D0=B4=D0=B5=D1=82=D0=B0=D0=BB=D0=B8=D0=B7=D0=B0=D1=86=D0=B8?= =?UTF-8?q?=D0=B8=20=D0=BC=D0=B0=D1=80=D1=88=D1=80=D1=83=D1=82=D0=B0=20?= =?UTF-8?q?=D0=B8=20=D0=BA=D0=BE=D0=BC=D0=BF=D0=BB=D0=B5=D0=BA=D1=82=D0=B0?= =?UTF-8?q?=D1=86=D0=B8=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../components/plan_detail.js | 17 ++++++++++------- app/panels/mech_rec_assembly_mon/hooks.js | 9 ++++++--- 2 files changed, 16 insertions(+), 10 deletions(-) diff --git a/app/panels/mech_rec_assembly_mon/components/plan_detail.js b/app/panels/mech_rec_assembly_mon/components/plan_detail.js index 9a9c47a..05d9df5 100644 --- a/app/panels/mech_rec_assembly_mon/components/plan_detail.js +++ b/app/panels/mech_rec_assembly_mon/components/plan_detail.js @@ -9,7 +9,7 @@ import React, { useEffect, useState } from "react"; //Классы React import PropTypes from "prop-types"; //Контроль свойств компонента -import { Box, Grid, Container, Button, Typography, Icon, Stack, IconButton } from "@mui/material"; //Интерфейсные элементы +import { Box, Grid, Container, Button, Typography, Icon, Stack, IconButton, CircularProgress } from "@mui/material"; //Интерфейсные элементы import { P8PDataGrid, P8P_DATA_GRID_SIZE } from "../../../components/p8p_data_grid"; //Таблица данных import { P8PSVG } from "../../../components/p8p_svg"; //Интерактивные изображения import { P8P_DATA_GRID_CONFIG_PROPS } from "../../../config_wrapper"; //Подключение компонентов к настройкам приложения @@ -69,7 +69,7 @@ const STYLES = { width: "280px", borderBottom: "1px solid" }, - TABLE_DETAILS: { height: "230px" }, + TABLE_DETAILS: { height: "240px" }, TABLE_DETAILS_HEADER_CELL: maxWidth => ({ padding: "2px 2px", fontSize: "11px", @@ -78,7 +78,7 @@ const STYLES = { ...(maxWidth ? { maxWidth } : {}) }), TABLE_DETAILS_DATA_CELL: textAlign => ({ padding: "2px 2px", fontSize: "11px", ...(textAlign ? { textAlign } : {}) }), - TABLE_DETAILS_MORE_BUTTON: { borderRadius: "25px" }, + TABLE_DETAILS_MORE_BUTTON: { borderRadius: "25px", height: "20px" }, CARD_DETAILS_CONTAINER: { minWidth: "1200px", maxWidth: "1400px" }, CARD_DETAILS_NAVIGATION_STACK: { width: "100%" } }; @@ -196,11 +196,14 @@ const ProductDetailsTable = ({ plan, product, stored, noProductMessage, noDataFo {noProductMessage} ) : ( <> - - {title} - + + + + {title} + + { //Хук для таблицы детализации изделия const useProductDetailsTable = (plan, product, orders, pageNumber, stored) => { //Собственное состояние - флаг загрузки - const [isLoading, setLoading] = useState(true); + const [isLoading, setLoading] = useState(false); //Собственное состояние - таблица данных const [data, setData] = useState({ + init: false, columnsDef: [], rows: [], morePages: true @@ -190,13 +191,15 @@ const useProductDetailsTable = (plan, product, orders, pageNumber, stored) => { NPAGE_SIZE: DATA_GRID_PAGE_SIZE, NINCLUDE_DEF: pageNumber == 1 ? 1 : 0 }, - respArg: "COUT" + respArg: "COUT", + loader: false }); setData(pv => ({ ...pv, columnsDef: data.XCOLUMNS_DEF ? [...data.XCOLUMNS_DEF] : pv.columnsDef, rows: pageNumber == 1 ? [...(data.XROWS || [])] : [...pv.rows, ...(data.XROWS || [])], - morePages: DATA_GRID_PAGE_SIZE == 0 ? false : (data.XROWS || []).length >= DATA_GRID_PAGE_SIZE + morePages: DATA_GRID_PAGE_SIZE == 0 ? false : (data.XROWS || []).length >= DATA_GRID_PAGE_SIZE, + init: true })); } finally { setLoading(false); From cdfbb386280929bd6312b6ef043550076b6f7ca3 Mon Sep 17 00:00:00 2001 From: Mikhail Chechnev Date: Mon, 27 May 2024 13:07:20 +0300 Subject: [PATCH 73/76] =?UTF-8?q?WEB=20APP:=20=D0=A1=D0=B2=D0=B5=D0=B6?= =?UTF-8?q?=D0=B0=D1=8F=20=D1=81=D0=B1=D0=BE=D1=80=D0=BA=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- dist/p8-panels.js | 26 ++++++++++++++++++++++++-- 1 file changed, 24 insertions(+), 2 deletions(-) diff --git a/dist/p8-panels.js b/dist/p8-panels.js index fb7fd08..b137e7f 100644 --- a/dist/p8-panels.js +++ b/dist/p8-panels.js @@ -679,6 +679,28 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac /***/ }), +/***/ "./node_modules/@mui/material/CircularProgress/CircularProgress.js": +/*!*************************************************************************!*\ + !*** ./node_modules/@mui/material/CircularProgress/CircularProgress.js ***! + \*************************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _babel_runtime_helpers_esm_objectWithoutPropertiesLoose__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/objectWithoutPropertiesLoose */ \"./node_modules/@babel/runtime/helpers/esm/objectWithoutPropertiesLoose.js\");\n/* harmony import */ var _babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/esm/extends */ \"./node_modules/@babel/runtime/helpers/esm/extends.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! prop-types */ \"./node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_11___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_11__);\n/* harmony import */ var clsx__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! clsx */ \"./node_modules/clsx/dist/clsx.mjs\");\n/* harmony import */ var _mui_utils__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! @mui/utils */ \"./node_modules/@mui/utils/esm/chainPropTypes/chainPropTypes.js\");\n/* harmony import */ var _mui_base_composeClasses__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @mui/base/composeClasses */ \"./node_modules/@mui/utils/esm/composeClasses/composeClasses.js\");\n/* harmony import */ var _mui_system__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @mui/system */ \"./node_modules/@emotion/react/dist/emotion-react.browser.esm.js\");\n/* harmony import */ var _utils_capitalize__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../utils/capitalize */ \"./node_modules/@mui/material/utils/capitalize.js\");\n/* harmony import */ var _styles_useThemeProps__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ../styles/useThemeProps */ \"./node_modules/@mui/material/styles/useThemeProps.js\");\n/* harmony import */ var _styles_styled__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../styles/styled */ \"./node_modules/@mui/material/styles/styled.js\");\n/* harmony import */ var _circularProgressClasses__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./circularProgressClasses */ \"./node_modules/@mui/material/CircularProgress/circularProgressClasses.js\");\n/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! react/jsx-runtime */ \"./node_modules/react/jsx-runtime.js\");\n'use client';\n\n\n\nconst _excluded = [\"className\", \"color\", \"disableShrink\", \"size\", \"style\", \"thickness\", \"value\", \"variant\"];\nlet _ = t => t,\n _t,\n _t2,\n _t3,\n _t4;\n\n\n\n\n\n\n\n\n\n\n\nconst SIZE = 44;\nconst circularRotateKeyframe = (0,_mui_system__WEBPACK_IMPORTED_MODULE_5__.keyframes)(_t || (_t = _`\n 0% {\n transform: rotate(0deg);\n }\n\n 100% {\n transform: rotate(360deg);\n }\n`));\nconst circularDashKeyframe = (0,_mui_system__WEBPACK_IMPORTED_MODULE_5__.keyframes)(_t2 || (_t2 = _`\n 0% {\n stroke-dasharray: 1px, 200px;\n stroke-dashoffset: 0;\n }\n\n 50% {\n stroke-dasharray: 100px, 200px;\n stroke-dashoffset: -15px;\n }\n\n 100% {\n stroke-dasharray: 100px, 200px;\n stroke-dashoffset: -125px;\n }\n`));\nconst useUtilityClasses = ownerState => {\n const {\n classes,\n variant,\n color,\n disableShrink\n } = ownerState;\n const slots = {\n root: ['root', variant, `color${(0,_utils_capitalize__WEBPACK_IMPORTED_MODULE_6__[\"default\"])(color)}`],\n svg: ['svg'],\n circle: ['circle', `circle${(0,_utils_capitalize__WEBPACK_IMPORTED_MODULE_6__[\"default\"])(variant)}`, disableShrink && 'circleDisableShrink']\n };\n return (0,_mui_base_composeClasses__WEBPACK_IMPORTED_MODULE_7__[\"default\"])(slots, _circularProgressClasses__WEBPACK_IMPORTED_MODULE_8__.getCircularProgressUtilityClass, classes);\n};\nconst CircularProgressRoot = (0,_styles_styled__WEBPACK_IMPORTED_MODULE_9__[\"default\"])('span', {\n name: 'MuiCircularProgress',\n slot: 'Root',\n overridesResolver: (props, styles) => {\n const {\n ownerState\n } = props;\n return [styles.root, styles[ownerState.variant], styles[`color${(0,_utils_capitalize__WEBPACK_IMPORTED_MODULE_6__[\"default\"])(ownerState.color)}`]];\n }\n})(({\n ownerState,\n theme\n}) => (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_1__[\"default\"])({\n display: 'inline-block'\n}, ownerState.variant === 'determinate' && {\n transition: theme.transitions.create('transform')\n}, ownerState.color !== 'inherit' && {\n color: (theme.vars || theme).palette[ownerState.color].main\n}), ({\n ownerState\n}) => ownerState.variant === 'indeterminate' && (0,_mui_system__WEBPACK_IMPORTED_MODULE_5__.css)(_t3 || (_t3 = _`\n animation: ${0} 1.4s linear infinite;\n `), circularRotateKeyframe));\nconst CircularProgressSVG = (0,_styles_styled__WEBPACK_IMPORTED_MODULE_9__[\"default\"])('svg', {\n name: 'MuiCircularProgress',\n slot: 'Svg',\n overridesResolver: (props, styles) => styles.svg\n})({\n display: 'block' // Keeps the progress centered\n});\n\nconst CircularProgressCircle = (0,_styles_styled__WEBPACK_IMPORTED_MODULE_9__[\"default\"])('circle', {\n name: 'MuiCircularProgress',\n slot: 'Circle',\n overridesResolver: (props, styles) => {\n const {\n ownerState\n } = props;\n return [styles.circle, styles[`circle${(0,_utils_capitalize__WEBPACK_IMPORTED_MODULE_6__[\"default\"])(ownerState.variant)}`], ownerState.disableShrink && styles.circleDisableShrink];\n }\n})(({\n ownerState,\n theme\n}) => (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_1__[\"default\"])({\n stroke: 'currentColor'\n}, ownerState.variant === 'determinate' && {\n transition: theme.transitions.create('stroke-dashoffset')\n}, ownerState.variant === 'indeterminate' && {\n // Some default value that looks fine waiting for the animation to kicks in.\n strokeDasharray: '80px, 200px',\n strokeDashoffset: 0 // Add the unit to fix a Edge 16 and below bug.\n}), ({\n ownerState\n}) => ownerState.variant === 'indeterminate' && !ownerState.disableShrink && (0,_mui_system__WEBPACK_IMPORTED_MODULE_5__.css)(_t4 || (_t4 = _`\n animation: ${0} 1.4s ease-in-out infinite;\n `), circularDashKeyframe));\n\n/**\n * ## ARIA\n *\n * If the progress bar is describing the loading progress of a particular region of a page,\n * you should use `aria-describedby` to point to the progress bar, and set the `aria-busy`\n * attribute to `true` on that region until it has finished loading.\n */\nconst CircularProgress = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2__.forwardRef(function CircularProgress(inProps, ref) {\n const props = (0,_styles_useThemeProps__WEBPACK_IMPORTED_MODULE_10__[\"default\"])({\n props: inProps,\n name: 'MuiCircularProgress'\n });\n const {\n className,\n color = 'primary',\n disableShrink = false,\n size = 40,\n style,\n thickness = 3.6,\n value = 0,\n variant = 'indeterminate'\n } = props,\n other = (0,_babel_runtime_helpers_esm_objectWithoutPropertiesLoose__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(props, _excluded);\n const ownerState = (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_1__[\"default\"])({}, props, {\n color,\n disableShrink,\n size,\n thickness,\n value,\n variant\n });\n const classes = useUtilityClasses(ownerState);\n const circleStyle = {};\n const rootStyle = {};\n const rootProps = {};\n if (variant === 'determinate') {\n const circumference = 2 * Math.PI * ((SIZE - thickness) / 2);\n circleStyle.strokeDasharray = circumference.toFixed(3);\n rootProps['aria-valuenow'] = Math.round(value);\n circleStyle.strokeDashoffset = `${((100 - value) / 100 * circumference).toFixed(3)}px`;\n rootStyle.transform = 'rotate(-90deg)';\n }\n return /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsx)(CircularProgressRoot, (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_1__[\"default\"])({\n className: (0,clsx__WEBPACK_IMPORTED_MODULE_3__[\"default\"])(classes.root, className),\n style: (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_1__[\"default\"])({\n width: size,\n height: size\n }, rootStyle, style),\n ownerState: ownerState,\n ref: ref,\n role: \"progressbar\"\n }, rootProps, other, {\n children: /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsx)(CircularProgressSVG, {\n className: classes.svg,\n ownerState: ownerState,\n viewBox: `${SIZE / 2} ${SIZE / 2} ${SIZE} ${SIZE}`,\n children: /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsx)(CircularProgressCircle, {\n className: classes.circle,\n style: circleStyle,\n ownerState: ownerState,\n cx: SIZE,\n cy: SIZE,\n r: (SIZE - thickness) / 2,\n fill: \"none\",\n strokeWidth: thickness\n })\n })\n }));\n});\n true ? CircularProgress.propTypes /* remove-proptypes */ = {\n // ----------------------------- Warning --------------------------------\n // | These PropTypes are generated from the TypeScript type definitions |\n // | To update them edit the d.ts file and run \"yarn proptypes\" |\n // ----------------------------------------------------------------------\n /**\n * Override or extend the styles applied to the component.\n */\n classes: (prop_types__WEBPACK_IMPORTED_MODULE_11___default().object),\n /**\n * @ignore\n */\n className: (prop_types__WEBPACK_IMPORTED_MODULE_11___default().string),\n /**\n * The color of the component.\n * It supports both default and custom theme colors, which can be added as shown in the\n * [palette customization guide](https://mui.com/material-ui/customization/palette/#adding-new-colors).\n * @default 'primary'\n */\n color: prop_types__WEBPACK_IMPORTED_MODULE_11___default().oneOfType([prop_types__WEBPACK_IMPORTED_MODULE_11___default().oneOf(['inherit', 'primary', 'secondary', 'error', 'info', 'success', 'warning']), (prop_types__WEBPACK_IMPORTED_MODULE_11___default().string)]),\n /**\n * If `true`, the shrink animation is disabled.\n * This only works if variant is `indeterminate`.\n * @default false\n */\n disableShrink: (0,_mui_utils__WEBPACK_IMPORTED_MODULE_12__[\"default\"])((prop_types__WEBPACK_IMPORTED_MODULE_11___default().bool), props => {\n if (props.disableShrink && props.variant && props.variant !== 'indeterminate') {\n return new Error('MUI: You have provided the `disableShrink` prop ' + 'with a variant other than `indeterminate`. This will have no effect.');\n }\n return null;\n }),\n /**\n * The size of the component.\n * If using a number, the pixel unit is assumed.\n * If using a string, you need to provide the CSS unit, e.g '3rem'.\n * @default 40\n */\n size: prop_types__WEBPACK_IMPORTED_MODULE_11___default().oneOfType([(prop_types__WEBPACK_IMPORTED_MODULE_11___default().number), (prop_types__WEBPACK_IMPORTED_MODULE_11___default().string)]),\n /**\n * @ignore\n */\n style: (prop_types__WEBPACK_IMPORTED_MODULE_11___default().object),\n /**\n * The system prop that allows defining system overrides as well as additional CSS styles.\n */\n sx: prop_types__WEBPACK_IMPORTED_MODULE_11___default().oneOfType([prop_types__WEBPACK_IMPORTED_MODULE_11___default().arrayOf(prop_types__WEBPACK_IMPORTED_MODULE_11___default().oneOfType([(prop_types__WEBPACK_IMPORTED_MODULE_11___default().func), (prop_types__WEBPACK_IMPORTED_MODULE_11___default().object), (prop_types__WEBPACK_IMPORTED_MODULE_11___default().bool)])), (prop_types__WEBPACK_IMPORTED_MODULE_11___default().func), (prop_types__WEBPACK_IMPORTED_MODULE_11___default().object)]),\n /**\n * The thickness of the circle.\n * @default 3.6\n */\n thickness: (prop_types__WEBPACK_IMPORTED_MODULE_11___default().number),\n /**\n * The value of the progress indicator for the determinate variant.\n * Value between 0 and 100.\n * @default 0\n */\n value: (prop_types__WEBPACK_IMPORTED_MODULE_11___default().number),\n /**\n * The variant to use.\n * Use indeterminate when there is no progress value.\n * @default 'indeterminate'\n */\n variant: prop_types__WEBPACK_IMPORTED_MODULE_11___default().oneOf(['determinate', 'indeterminate'])\n} : 0;\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (CircularProgress);\n\n//# sourceURL=webpack://parus_8_panels_plugin/./node_modules/@mui/material/CircularProgress/CircularProgress.js?"); + +/***/ }), + +/***/ "./node_modules/@mui/material/CircularProgress/circularProgressClasses.js": +/*!********************************************************************************!*\ + !*** ./node_modules/@mui/material/CircularProgress/circularProgressClasses.js ***! + \********************************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__),\n/* harmony export */ getCircularProgressUtilityClass: () => (/* binding */ getCircularProgressUtilityClass)\n/* harmony export */ });\n/* harmony import */ var _mui_utils__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @mui/utils */ \"./node_modules/@mui/utils/esm/generateUtilityClasses/generateUtilityClasses.js\");\n/* harmony import */ var _generateUtilityClass__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../generateUtilityClass */ \"./node_modules/@mui/utils/esm/generateUtilityClass/generateUtilityClass.js\");\n\n\nfunction getCircularProgressUtilityClass(slot) {\n return (0,_generateUtilityClass__WEBPACK_IMPORTED_MODULE_0__[\"default\"])('MuiCircularProgress', slot);\n}\nconst circularProgressClasses = (0,_mui_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"])('MuiCircularProgress', ['root', 'determinate', 'indeterminate', 'colorPrimary', 'colorSecondary', 'svg', 'circle', 'circleDeterminate', 'circleIndeterminate', 'circleDisableShrink']);\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (circularProgressClasses);\n\n//# sourceURL=webpack://parus_8_panels_plugin/./node_modules/@mui/material/CircularProgress/circularProgressClasses.js?"); + +/***/ }), + /***/ "./node_modules/@mui/material/Container/Container.js": /*!***********************************************************!*\ !*** ./node_modules/@mui/material/Container/Container.js ***! @@ -3777,7 +3799,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ PlanDetail: () => (/* binding */ PlanDetail)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! prop-types */ \"./node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_8___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_8__);\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Box/Box.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Typography/Typography.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Container/Container.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Grid/Grid.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Stack/Stack.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/IconButton/IconButton.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Icon/Icon.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Button/Button.js\");\n/* harmony import */ var _components_p8p_data_grid__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../components/p8p_data_grid */ \"./app/components/p8p_data_grid.js\");\n/* harmony import */ var _components_p8p_svg__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../../components/p8p_svg */ \"./app/components/p8p_svg.js\");\n/* harmony import */ var _config_wrapper__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../../config_wrapper */ \"./app/config_wrapper.js\");\n/* harmony import */ var _hooks__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../hooks */ \"./app/panels/mech_rec_assembly_mon/hooks.js\");\n/* harmony import */ var _progress_box__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./progress_box */ \"./app/panels/mech_rec_assembly_mon/components/progress_box.js\");\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n/*\r\n Парус 8 - Панели мониторинга - ПУП - Мониторинг сборки изделий\r\n Панель мониторинга: Детализация по объекту\r\n*/\n\n//---------------------\n//Подключение библиотек\n//---------------------\n\n //Классы React\n //Контроль свойств компонента\n //Интерфейсные элементы\n //Таблица данных\n //Интерактивные изображения\n //Подключение компонентов к настройкам приложения\n //Вспомогательные хуки\n //Информация по прогрессу объекта\n\n//---------\n//Константы\n//---------\n\n//Стили\nconst STYLES = {\n BOX_INFO_MAIN: {\n border: \"1px solid\",\n borderRadius: \"25px\",\n height: \"35vh\"\n },\n BOX_INFO_SUB: isMessage => ({\n overflow: \"hidden\",\n textAlign: \"center\",\n width: \"100%\",\n height: \"100%\",\n display: \"flex\",\n flexDirection: \"column\",\n justifyContent: isMessage ? \"center\" : \"flex-start\",\n paddingLeft: \"5px\",\n paddingRight: \"5px\",\n ...(isMessage ? {\n padding: \"5px\"\n } : {\n paddingTop: \"10px\"\n })\n }),\n DETAIL_INFO: {\n display: \"flex\",\n justifyContent: \"space-around\",\n alignItems: \"center\",\n border: \"1px solid\",\n borderRadius: \"25px\",\n height: \"17vh\"\n },\n PRODUCT_SELECTOR_CONTAINER: {\n display: \"flex\",\n justifyContent: \"center\",\n alignItems: \"center\",\n flexDirection: \"column\",\n border: \"1px solid\",\n borderRadius: \"25px\",\n height: \"53vh\",\n marginTop: \"16px\"\n },\n PRODUCT_SELECTOR_MODEL: {\n width: \"70%\"\n },\n PLAN_INFO_MAIN: {\n display: \"flex\",\n flexDirection: \"column\",\n gap: \"16px\"\n },\n PLAN_INFO_SUB: {\n display: \"flex\",\n justifyContent: \"space-between\",\n width: \"280px\",\n borderBottom: \"1px solid\"\n },\n TABLE_DETAILS: {\n height: \"230px\"\n },\n TABLE_DETAILS_HEADER_CELL: maxWidth => ({\n padding: \"2px 2px\",\n fontSize: \"11px\",\n textAlign: \"center\",\n lineHeight: \"1rem\",\n ...(maxWidth ? {\n maxWidth\n } : {})\n }),\n TABLE_DETAILS_DATA_CELL: textAlign => ({\n padding: \"2px 2px\",\n fontSize: \"11px\",\n ...(textAlign ? {\n textAlign\n } : {})\n }),\n TABLE_DETAILS_MORE_BUTTON: {\n borderRadius: \"25px\"\n },\n CARD_DETAILS_CONTAINER: {\n minWidth: \"1200px\",\n maxWidth: \"1400px\"\n },\n CARD_DETAILS_NAVIGATION_STACK: {\n width: \"100%\"\n }\n};\n\n//------------------------------------\n//Вспомогательные функции и компоненты\n//------------------------------------\n\n//Информация о плане\nconst PlanInfo = ({\n plan\n}) => {\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n sx: STYLES.PLAN_INFO_MAIN\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n sx: STYLES.PLAN_INFO_SUB\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_7__[\"default\"], {\n variant: \"UDO_body1\",\n mt: 1\n }, \"\\u041D\\u043E\\u043C\\u0435\\u0440 \\u0431\\u043E\\u0440\\u0442\\u0430:\"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_7__[\"default\"], {\n variant: \"subtitle2\"\n }, plan.SNUMB)), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n sx: STYLES.PLAN_INFO_SUB\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_7__[\"default\"], {\n variant: \"UDO_body1\",\n mt: 1\n }, \"\\u0413\\u043E\\u0434 \\u0432\\u044B\\u043F\\u0443\\u0441\\u043A\\u0430:\"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_7__[\"default\"], {\n variant: \"subtitle2\"\n }, plan.NYEAR))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_progress_box__WEBPACK_IMPORTED_MODULE_5__.ProgressBox, {\n progress: plan.NPROGRESS,\n detail: plan.SDETAIL,\n width: \"110px\",\n height: \"110px\",\n progressVariant: \"subtitle2\",\n detailVariant: \"body3\"\n }));\n};\n\n//Контроль свойств - Информация о плане\nPlanInfo.propTypes = {\n plan: (prop_types__WEBPACK_IMPORTED_MODULE_8___default().object)\n};\n\n//Модель выпуска плана\nconst PlanProductCompositionModel = ({\n model,\n products,\n onProductSelect\n}) => {\n //При выборе детали на модели\n const handleProductClick = ({\n item\n }) => {\n const product = products.find(p => p.SMODEL_ID == item.id);\n if (product && onProductSelect) onProductSelect(product);\n };\n\n //Генерация содержимого\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n sx: STYLES.PRODUCT_SELECTOR_MODEL\n }, model ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_components_p8p_svg__WEBPACK_IMPORTED_MODULE_2__.P8PSVG, {\n data: atob(model),\n items: products.map(p => ({\n id: p.SMODEL_ID,\n backgroundColor: p.SMODEL_BG_COLOR || \"red\",\n desc: p.SNAME,\n title: p.SNAME\n })),\n fillOpacity: \"0.3\",\n onItemClick: handleProductClick\n }) : /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_7__[\"default\"], {\n variant: \"subtitle2\"\n }, \"\\u041C\\u043E\\u0434\\u0435\\u043B\\u044C \\u0438\\u0437\\u0434\\u0435\\u043B\\u0438\\u044F \\u043D\\u0435 \\u0437\\u0430\\u0433\\u0440\\u0443\\u0436\\u0435\\u043D\\u0430\")));\n};\n\n//Контроль свойств - Модель выпуска плана\nPlanProductCompositionModel.propTypes = {\n model: (prop_types__WEBPACK_IMPORTED_MODULE_8___default().any),\n products: (prop_types__WEBPACK_IMPORTED_MODULE_8___default().array),\n onProductSelect: (prop_types__WEBPACK_IMPORTED_MODULE_8___default().func)\n};\n\n//Генерация представления ячейки заголовка\nconst headCellRender = ({\n columnDef\n}) => ({\n stackProps: {\n justifyContent: \"center\"\n },\n cellStyle: STYLES.TABLE_DETAILS_HEADER_CELL([\"NREMN_LABOUR\", \"NAPPLICABILITY\"].includes(columnDef.name) ? \"90px\" : [\"NDEFICIT\"].includes(columnDef.name) ? \"55px\" : null)\n});\n\n//Генерация заливки строки исходя от значений\nconst dataCellRender = ({\n row,\n columnDef\n}) => ({\n cellStyle: STYLES.TABLE_DETAILS_DATA_CELL([\"SOPERATION\", \"SNOMEN\"].includes(columnDef.name) ? null : \"center\"),\n data: row[columnDef]\n});\n\n//Таблица детализации изделия\nconst ProductDetailsTable = ({\n plan,\n product,\n stored,\n noProductMessage,\n noDataFoundMessage,\n title\n}) => {\n //Собственное состояние\n const [state, setState] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({\n plan: null,\n product: null,\n orders: null,\n pageNumber: 1\n });\n\n //Собственное состояние - данные таблицы\n const {\n data,\n isLoading\n } = (0,_hooks__WEBPACK_IMPORTED_MODULE_4__.useProductDetailsTable)(state.plan, state.product, state.orders, state.pageNumber, stored);\n\n //При изменении состояния сортировки\n const handleOrderChanged = ({\n orders\n }) => setState(pv => ({\n ...pv,\n orders: [...orders],\n pageNumber: 1\n }));\n\n //При изменении количества отображаемых страниц\n const handlePagesCountChanged = () => setState(pv => ({\n ...pv,\n pageNumber: pv.pageNumber + 1\n }));\n\n //При изменении изделия\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n setState(pv => ({\n ...pv,\n plan,\n product,\n orders: null,\n pageNumber: 1\n }));\n }, [product, plan]);\n\n //Генерация содержимого\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n sx: STYLES.BOX_INFO_SUB(!product || data.rows.length === 0)\n }, !product ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_7__[\"default\"], {\n variant: \"UDO_body2\"\n }, noProductMessage) : /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_7__[\"default\"], {\n variant: \"h4\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"b\", null, title)), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_components_p8p_data_grid__WEBPACK_IMPORTED_MODULE_1__.P8PDataGrid, _extends({}, _config_wrapper__WEBPACK_IMPORTED_MODULE_3__.P8P_DATA_GRID_CONFIG_PROPS, {\n noDataFoundText: isLoading ? \"\" : noDataFoundMessage,\n containerComponentProps: {\n sx: STYLES.TABLE_DETAILS,\n elevation: 0\n },\n columnsDef: data.columnsDef,\n rows: data.rows,\n size: _components_p8p_data_grid__WEBPACK_IMPORTED_MODULE_1__.P8P_DATA_GRID_SIZE.SMALL,\n morePages: data.morePages,\n morePagesBtnProps: {\n sx: STYLES.TABLE_DETAILS_MORE_BUTTON\n },\n fixedHeader: true,\n reloading: false,\n dataCellRender: dataCellRender,\n headCellRender: headCellRender,\n onOrderChanged: handleOrderChanged,\n onPagesCountChanged: handlePagesCountChanged\n }))));\n};\n\n//Контроль свойств - Таблица детализации изделия\nProductDetailsTable.propTypes = {\n plan: (prop_types__WEBPACK_IMPORTED_MODULE_8___default().number).isRequired,\n product: (prop_types__WEBPACK_IMPORTED_MODULE_8___default().number),\n stored: (prop_types__WEBPACK_IMPORTED_MODULE_8___default().string).isRequired,\n noProductMessage: (prop_types__WEBPACK_IMPORTED_MODULE_8___default().string).isRequired,\n noDataFoundMessage: (prop_types__WEBPACK_IMPORTED_MODULE_8___default().string).isRequired,\n title: (prop_types__WEBPACK_IMPORTED_MODULE_8___default().string).isRequired\n};\n\n//-----------\n//Тело модуля\n//-----------\n\n//Детализация по объекту\nconst PlanDetail = ({\n plan,\n disableNavigatePrev = false,\n disableNavigateNext = false,\n onNavigate,\n onBack\n}) => {\n //Собственное состояние - данные производственных составов SVG\n const [costProductComposition, setCostProductComposition] = (0,_hooks__WEBPACK_IMPORTED_MODULE_4__.useCostProductComposition)(plan.NRN);\n\n //Выбор элемента изделия\n const setProduct = product => {\n setCostProductComposition(pv => ({\n ...pv,\n selectedProduct: product ? {\n ...product\n } : null\n }));\n };\n\n //При навигации между карточками\n const handleNavigate = direction => {\n setProduct(null);\n if (onNavigate) onNavigate(direction);\n };\n\n //Формируем представление\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_9__[\"default\"], {\n maxWidth: false,\n sx: STYLES.CARD_DETAILS_CONTAINER\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_10__[\"default\"], {\n container: true,\n direction: \"row\",\n justifyContent: \"center\",\n alignItems: \"center\",\n spacing: 0\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_10__[\"default\"], {\n item: true,\n display: \"flex\",\n justifyContent: \"center\",\n xs: 1\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_11__[\"default\"], {\n display: \"flex\",\n direction: \"row\",\n justifyContent: \"flex-end\",\n alignItems: \"center\",\n sx: STYLES.CARD_DETAILS_NAVIGATION_STACK\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_12__[\"default\"], {\n disabled: disableNavigatePrev,\n onClick: () => handleNavigate(-1)\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_13__[\"default\"], null, \"navigate_before\")))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_10__[\"default\"], {\n item: true,\n xs: 10\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_9__[\"default\"], {\n maxWidth: false\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_14__[\"default\"], {\n onClick: () => onBack ? onBack() : null\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_11__[\"default\"], {\n direction: \"row\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_13__[\"default\"], null, \"chevron_left\"), \"\\u041D\\u0430\\u0437\\u0430\\u0434\")), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_10__[\"default\"], {\n container: true,\n spacing: 2,\n sx: {\n paddingTop: \"5px\"\n }\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_10__[\"default\"], {\n item: true,\n xs: 5\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n sx: STYLES.BOX_INFO_MAIN\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(ProductDetailsTable, {\n plan: plan.NRN,\n product: costProductComposition.selectedProduct?.NRN,\n stored: \"PKG_P8PANELS_MECHREC.FCROUTLST_DG_BY_PRDCMPSP_GET\",\n noProductMessage: \"Укажите элемент модели, чтобы увидеть информацию о маршрутных картах\",\n noDataFoundMessage: \"Маршрутные карты не найдены\",\n title: \"Маршрутные карты\"\n })), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n sx: STYLES.BOX_INFO_MAIN,\n mt: 2\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(ProductDetailsTable, {\n plan: plan.NRN,\n product: costProductComposition.selectedProduct?.NRN,\n stored: \"PKG_P8PANELS_MECHREC.FCDELIVSH_DG_BY_PRDCMPSP_GET\",\n noProductMessage: \"Укажите элемент модели, чтобы увидеть информацию о комплектовочных ведомостях\",\n noDataFoundMessage: \"Комплектовочные ведомости не найдены\",\n title: \"Дефицит комплектации\"\n }))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_10__[\"default\"], {\n item: true,\n xs: 7\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n sx: STYLES.DETAIL_INFO\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(PlanInfo, {\n plan: plan\n })), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n sx: STYLES.PRODUCT_SELECTOR_CONTAINER\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(PlanProductCompositionModel, {\n model: costProductComposition.model,\n products: costProductComposition.products,\n onProductSelect: setProduct\n })))))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_10__[\"default\"], {\n item: true,\n display: \"flex\",\n justifyContent: \"center\",\n xs: 1\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_11__[\"default\"], {\n display: \"flex\",\n direction: \"row\",\n justifyContent: \"flex-start\",\n alignItems: \"center\",\n sx: STYLES.CARD_DETAILS_NAVIGATION_STACK\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_12__[\"default\"], {\n disabled: disableNavigateNext,\n onClick: () => handleNavigate(1)\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_13__[\"default\"], null, \"navigate_next\"))))));\n};\n\n//Контроль свойств - Детализация по объекту\nPlanDetail.propTypes = {\n plan: (prop_types__WEBPACK_IMPORTED_MODULE_8___default().object),\n disableNavigatePrev: (prop_types__WEBPACK_IMPORTED_MODULE_8___default().bool),\n disableNavigateNext: (prop_types__WEBPACK_IMPORTED_MODULE_8___default().bool),\n onNavigate: (prop_types__WEBPACK_IMPORTED_MODULE_8___default().func),\n onBack: (prop_types__WEBPACK_IMPORTED_MODULE_8___default().func)\n};\n\n//----------------\n//Интерфейс модуля\n//----------------\n\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/panels/mech_rec_assembly_mon/components/plan_detail.js?"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ PlanDetail: () => (/* binding */ PlanDetail)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! prop-types */ \"./node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_8___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_8__);\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Box/Box.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Typography/Typography.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Stack/Stack.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/CircularProgress/CircularProgress.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Container/Container.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Grid/Grid.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/IconButton/IconButton.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Icon/Icon.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Button/Button.js\");\n/* harmony import */ var _components_p8p_data_grid__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../components/p8p_data_grid */ \"./app/components/p8p_data_grid.js\");\n/* harmony import */ var _components_p8p_svg__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../../components/p8p_svg */ \"./app/components/p8p_svg.js\");\n/* harmony import */ var _config_wrapper__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../../config_wrapper */ \"./app/config_wrapper.js\");\n/* harmony import */ var _hooks__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../hooks */ \"./app/panels/mech_rec_assembly_mon/hooks.js\");\n/* harmony import */ var _progress_box__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./progress_box */ \"./app/panels/mech_rec_assembly_mon/components/progress_box.js\");\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n/*\r\n Парус 8 - Панели мониторинга - ПУП - Мониторинг сборки изделий\r\n Панель мониторинга: Детализация по объекту\r\n*/\n\n//---------------------\n//Подключение библиотек\n//---------------------\n\n //Классы React\n //Контроль свойств компонента\n //Интерфейсные элементы\n //Таблица данных\n //Интерактивные изображения\n //Подключение компонентов к настройкам приложения\n //Вспомогательные хуки\n //Информация по прогрессу объекта\n\n//---------\n//Константы\n//---------\n\n//Стили\nconst STYLES = {\n BOX_INFO_MAIN: {\n border: \"1px solid\",\n borderRadius: \"25px\",\n height: \"35vh\"\n },\n BOX_INFO_SUB: isMessage => ({\n overflow: \"hidden\",\n textAlign: \"center\",\n width: \"100%\",\n height: \"100%\",\n display: \"flex\",\n flexDirection: \"column\",\n justifyContent: isMessage ? \"center\" : \"flex-start\",\n paddingLeft: \"5px\",\n paddingRight: \"5px\",\n ...(isMessage ? {\n padding: \"5px\"\n } : {\n paddingTop: \"10px\"\n })\n }),\n DETAIL_INFO: {\n display: \"flex\",\n justifyContent: \"space-around\",\n alignItems: \"center\",\n border: \"1px solid\",\n borderRadius: \"25px\",\n height: \"17vh\"\n },\n PRODUCT_SELECTOR_CONTAINER: {\n display: \"flex\",\n justifyContent: \"center\",\n alignItems: \"center\",\n flexDirection: \"column\",\n border: \"1px solid\",\n borderRadius: \"25px\",\n height: \"53vh\",\n marginTop: \"16px\"\n },\n PRODUCT_SELECTOR_MODEL: {\n width: \"70%\"\n },\n PLAN_INFO_MAIN: {\n display: \"flex\",\n flexDirection: \"column\",\n gap: \"16px\"\n },\n PLAN_INFO_SUB: {\n display: \"flex\",\n justifyContent: \"space-between\",\n width: \"280px\",\n borderBottom: \"1px solid\"\n },\n TABLE_DETAILS: {\n height: \"240px\"\n },\n TABLE_DETAILS_HEADER_CELL: maxWidth => ({\n padding: \"2px 2px\",\n fontSize: \"11px\",\n textAlign: \"center\",\n lineHeight: \"1rem\",\n ...(maxWidth ? {\n maxWidth\n } : {})\n }),\n TABLE_DETAILS_DATA_CELL: textAlign => ({\n padding: \"2px 2px\",\n fontSize: \"11px\",\n ...(textAlign ? {\n textAlign\n } : {})\n }),\n TABLE_DETAILS_MORE_BUTTON: {\n borderRadius: \"25px\",\n height: \"20px\"\n },\n CARD_DETAILS_CONTAINER: {\n minWidth: \"1200px\",\n maxWidth: \"1400px\"\n },\n CARD_DETAILS_NAVIGATION_STACK: {\n width: \"100%\"\n }\n};\n\n//------------------------------------\n//Вспомогательные функции и компоненты\n//------------------------------------\n\n//Информация о плане\nconst PlanInfo = ({\n plan\n}) => {\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n sx: STYLES.PLAN_INFO_MAIN\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n sx: STYLES.PLAN_INFO_SUB\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_7__[\"default\"], {\n variant: \"UDO_body1\",\n mt: 1\n }, \"\\u041D\\u043E\\u043C\\u0435\\u0440 \\u0431\\u043E\\u0440\\u0442\\u0430:\"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_7__[\"default\"], {\n variant: \"subtitle2\"\n }, plan.SNUMB)), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n sx: STYLES.PLAN_INFO_SUB\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_7__[\"default\"], {\n variant: \"UDO_body1\",\n mt: 1\n }, \"\\u0413\\u043E\\u0434 \\u0432\\u044B\\u043F\\u0443\\u0441\\u043A\\u0430:\"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_7__[\"default\"], {\n variant: \"subtitle2\"\n }, plan.NYEAR))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_progress_box__WEBPACK_IMPORTED_MODULE_5__.ProgressBox, {\n progress: plan.NPROGRESS,\n detail: plan.SDETAIL,\n width: \"110px\",\n height: \"110px\",\n progressVariant: \"subtitle2\",\n detailVariant: \"body3\"\n }));\n};\n\n//Контроль свойств - Информация о плане\nPlanInfo.propTypes = {\n plan: (prop_types__WEBPACK_IMPORTED_MODULE_8___default().object)\n};\n\n//Модель выпуска плана\nconst PlanProductCompositionModel = ({\n model,\n products,\n onProductSelect\n}) => {\n //При выборе детали на модели\n const handleProductClick = ({\n item\n }) => {\n const product = products.find(p => p.SMODEL_ID == item.id);\n if (product && onProductSelect) onProductSelect(product);\n };\n\n //Генерация содержимого\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n sx: STYLES.PRODUCT_SELECTOR_MODEL\n }, model ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_components_p8p_svg__WEBPACK_IMPORTED_MODULE_2__.P8PSVG, {\n data: atob(model),\n items: products.map(p => ({\n id: p.SMODEL_ID,\n backgroundColor: p.SMODEL_BG_COLOR || \"red\",\n desc: p.SNAME,\n title: p.SNAME\n })),\n fillOpacity: \"0.3\",\n onItemClick: handleProductClick\n }) : /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_7__[\"default\"], {\n variant: \"subtitle2\"\n }, \"\\u041C\\u043E\\u0434\\u0435\\u043B\\u044C \\u0438\\u0437\\u0434\\u0435\\u043B\\u0438\\u044F \\u043D\\u0435 \\u0437\\u0430\\u0433\\u0440\\u0443\\u0436\\u0435\\u043D\\u0430\")));\n};\n\n//Контроль свойств - Модель выпуска плана\nPlanProductCompositionModel.propTypes = {\n model: (prop_types__WEBPACK_IMPORTED_MODULE_8___default().any),\n products: (prop_types__WEBPACK_IMPORTED_MODULE_8___default().array),\n onProductSelect: (prop_types__WEBPACK_IMPORTED_MODULE_8___default().func)\n};\n\n//Генерация представления ячейки заголовка\nconst headCellRender = ({\n columnDef\n}) => ({\n stackProps: {\n justifyContent: \"center\"\n },\n cellStyle: STYLES.TABLE_DETAILS_HEADER_CELL([\"NREMN_LABOUR\", \"NAPPLICABILITY\"].includes(columnDef.name) ? \"90px\" : [\"NDEFICIT\"].includes(columnDef.name) ? \"55px\" : null)\n});\n\n//Генерация заливки строки исходя от значений\nconst dataCellRender = ({\n row,\n columnDef\n}) => ({\n cellStyle: STYLES.TABLE_DETAILS_DATA_CELL([\"SOPERATION\", \"SNOMEN\"].includes(columnDef.name) ? null : \"center\"),\n data: row[columnDef]\n});\n\n//Таблица детализации изделия\nconst ProductDetailsTable = ({\n plan,\n product,\n stored,\n noProductMessage,\n noDataFoundMessage,\n title\n}) => {\n //Собственное состояние\n const [state, setState] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({\n plan: null,\n product: null,\n orders: null,\n pageNumber: 1\n });\n\n //Собственное состояние - данные таблицы\n const {\n data,\n isLoading\n } = (0,_hooks__WEBPACK_IMPORTED_MODULE_4__.useProductDetailsTable)(state.plan, state.product, state.orders, state.pageNumber, stored);\n\n //При изменении состояния сортировки\n const handleOrderChanged = ({\n orders\n }) => setState(pv => ({\n ...pv,\n orders: [...orders],\n pageNumber: 1\n }));\n\n //При изменении количества отображаемых страниц\n const handlePagesCountChanged = () => setState(pv => ({\n ...pv,\n pageNumber: pv.pageNumber + 1\n }));\n\n //При изменении изделия\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n setState(pv => ({\n ...pv,\n plan,\n product,\n orders: null,\n pageNumber: 1\n }));\n }, [product, plan]);\n\n //Генерация содержимого\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n sx: STYLES.BOX_INFO_SUB(!product || data.rows.length === 0)\n }, !product ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_7__[\"default\"], {\n variant: \"UDO_body2\"\n }, noProductMessage) : /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_9__[\"default\"], {\n direction: \"row\",\n spacing: 2,\n justifyContent: \"center\",\n alignItems: \"center\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_10__[\"default\"], {\n size: 18,\n sx: {\n opacity: isLoading ? 1 : 0\n }\n }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_7__[\"default\"], {\n variant: \"h4\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"b\", null, title))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_components_p8p_data_grid__WEBPACK_IMPORTED_MODULE_1__.P8PDataGrid, _extends({}, _config_wrapper__WEBPACK_IMPORTED_MODULE_3__.P8P_DATA_GRID_CONFIG_PROPS, {\n noDataFoundText: isLoading || !data.init ? \"\" : noDataFoundMessage,\n containerComponentProps: {\n sx: STYLES.TABLE_DETAILS,\n elevation: 0\n },\n columnsDef: data.columnsDef,\n rows: data.rows,\n size: _components_p8p_data_grid__WEBPACK_IMPORTED_MODULE_1__.P8P_DATA_GRID_SIZE.SMALL,\n morePages: data.morePages,\n morePagesBtnProps: {\n sx: STYLES.TABLE_DETAILS_MORE_BUTTON\n },\n fixedHeader: true,\n reloading: false,\n dataCellRender: dataCellRender,\n headCellRender: headCellRender,\n onOrderChanged: handleOrderChanged,\n onPagesCountChanged: handlePagesCountChanged\n }))));\n};\n\n//Контроль свойств - Таблица детализации изделия\nProductDetailsTable.propTypes = {\n plan: (prop_types__WEBPACK_IMPORTED_MODULE_8___default().number).isRequired,\n product: (prop_types__WEBPACK_IMPORTED_MODULE_8___default().number),\n stored: (prop_types__WEBPACK_IMPORTED_MODULE_8___default().string).isRequired,\n noProductMessage: (prop_types__WEBPACK_IMPORTED_MODULE_8___default().string).isRequired,\n noDataFoundMessage: (prop_types__WEBPACK_IMPORTED_MODULE_8___default().string).isRequired,\n title: (prop_types__WEBPACK_IMPORTED_MODULE_8___default().string).isRequired\n};\n\n//-----------\n//Тело модуля\n//-----------\n\n//Детализация по объекту\nconst PlanDetail = ({\n plan,\n disableNavigatePrev = false,\n disableNavigateNext = false,\n onNavigate,\n onBack\n}) => {\n //Собственное состояние - данные производственных составов SVG\n const [costProductComposition, setCostProductComposition] = (0,_hooks__WEBPACK_IMPORTED_MODULE_4__.useCostProductComposition)(plan.NRN);\n\n //Выбор элемента изделия\n const setProduct = product => {\n setCostProductComposition(pv => ({\n ...pv,\n selectedProduct: product ? {\n ...product\n } : null\n }));\n };\n\n //При навигации между карточками\n const handleNavigate = direction => {\n setProduct(null);\n if (onNavigate) onNavigate(direction);\n };\n\n //Формируем представление\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_11__[\"default\"], {\n maxWidth: false,\n sx: STYLES.CARD_DETAILS_CONTAINER\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_12__[\"default\"], {\n container: true,\n direction: \"row\",\n justifyContent: \"center\",\n alignItems: \"center\",\n spacing: 0\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_12__[\"default\"], {\n item: true,\n display: \"flex\",\n justifyContent: \"center\",\n xs: 1\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_9__[\"default\"], {\n display: \"flex\",\n direction: \"row\",\n justifyContent: \"flex-end\",\n alignItems: \"center\",\n sx: STYLES.CARD_DETAILS_NAVIGATION_STACK\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_13__[\"default\"], {\n disabled: disableNavigatePrev,\n onClick: () => handleNavigate(-1)\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_14__[\"default\"], null, \"navigate_before\")))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_12__[\"default\"], {\n item: true,\n xs: 10\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_11__[\"default\"], {\n maxWidth: false\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_15__[\"default\"], {\n onClick: () => onBack ? onBack() : null\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_9__[\"default\"], {\n direction: \"row\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_14__[\"default\"], null, \"chevron_left\"), \"\\u041D\\u0430\\u0437\\u0430\\u0434\")), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_12__[\"default\"], {\n container: true,\n spacing: 2,\n sx: {\n paddingTop: \"5px\"\n }\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_12__[\"default\"], {\n item: true,\n xs: 5\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n sx: STYLES.BOX_INFO_MAIN\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(ProductDetailsTable, {\n plan: plan.NRN,\n product: costProductComposition.selectedProduct?.NRN,\n stored: \"PKG_P8PANELS_MECHREC.FCROUTLST_DG_BY_PRDCMPSP_GET\",\n noProductMessage: \"Укажите элемент модели, чтобы увидеть информацию о маршрутных картах\",\n noDataFoundMessage: \"Маршрутные карты не найдены\",\n title: \"Маршрутные карты\"\n })), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n sx: STYLES.BOX_INFO_MAIN,\n mt: 2\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(ProductDetailsTable, {\n plan: plan.NRN,\n product: costProductComposition.selectedProduct?.NRN,\n stored: \"PKG_P8PANELS_MECHREC.FCDELIVSH_DG_BY_PRDCMPSP_GET\",\n noProductMessage: \"Укажите элемент модели, чтобы увидеть информацию о комплектовочных ведомостях\",\n noDataFoundMessage: \"Комплектовочные ведомости не найдены\",\n title: \"Дефицит комплектации\"\n }))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_12__[\"default\"], {\n item: true,\n xs: 7\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n sx: STYLES.DETAIL_INFO\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(PlanInfo, {\n plan: plan\n })), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n sx: STYLES.PRODUCT_SELECTOR_CONTAINER\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(PlanProductCompositionModel, {\n model: costProductComposition.model,\n products: costProductComposition.products,\n onProductSelect: setProduct\n })))))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_12__[\"default\"], {\n item: true,\n display: \"flex\",\n justifyContent: \"center\",\n xs: 1\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_9__[\"default\"], {\n display: \"flex\",\n direction: \"row\",\n justifyContent: \"flex-start\",\n alignItems: \"center\",\n sx: STYLES.CARD_DETAILS_NAVIGATION_STACK\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_13__[\"default\"], {\n disabled: disableNavigateNext,\n onClick: () => handleNavigate(1)\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_14__[\"default\"], null, \"navigate_next\"))))));\n};\n\n//Контроль свойств - Детализация по объекту\nPlanDetail.propTypes = {\n plan: (prop_types__WEBPACK_IMPORTED_MODULE_8___default().object),\n disableNavigatePrev: (prop_types__WEBPACK_IMPORTED_MODULE_8___default().bool),\n disableNavigateNext: (prop_types__WEBPACK_IMPORTED_MODULE_8___default().bool),\n onNavigate: (prop_types__WEBPACK_IMPORTED_MODULE_8___default().func),\n onBack: (prop_types__WEBPACK_IMPORTED_MODULE_8___default().func)\n};\n\n//----------------\n//Интерфейс модуля\n//----------------\n\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/panels/mech_rec_assembly_mon/components/plan_detail.js?"); /***/ }), @@ -3821,7 +3843,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ useCostProductComposition: () => (/* binding */ useCostProductComposition),\n/* harmony export */ useFilteredPlanCtlgs: () => (/* binding */ useFilteredPlanCtlgs),\n/* harmony export */ useMechRecAssemblyMon: () => (/* binding */ useMechRecAssemblyMon),\n/* harmony export */ useProductDetailsTable: () => (/* binding */ useProductDetailsTable)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _context_backend__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../context/backend */ \"./app/context/backend.js\");\n/* harmony import */ var _core_utils__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../core/utils */ \"./app/core/utils.js\");\n/*\r\n Парус 8 - Панели мониторинга - ПУП - Мониторинг сборки изделий\r\n Кастомные хуки\r\n*/\n\n//---------------------\n//Подключение библиотек\n//---------------------\n\n //Классы React\n //Контекст взаимодействия с сервером\n //Вспомогательные функции\n\n//---------\n//Константы\n//---------\n\n//Размер страницы данных\nconst DATA_GRID_PAGE_SIZE = 50;\n\n//-----------\n//Тело модуля\n//-----------\n\n//Клиентский отбор каталогов по поисковой фразе и наличию планов\nconst useFilteredPlanCtlgs = (planCtlgs, filter) => {\n const filteredPlanCtlgs = react__WEBPACK_IMPORTED_MODULE_0___default().useMemo(() => {\n return planCtlgs.filter(catalog => catalog.SNAME.toString().toLowerCase().includes(filter.ctlgName) && (filter.haveDocs ? catalog.NCOUNT_DOCS > 0 : catalog.NCOUNT_DOCS >= 0));\n }, [planCtlgs, filter]);\n return filteredPlanCtlgs;\n};\n\n//Хук для основной таблицы панели\nconst useMechRecAssemblyMon = () => {\n //Собственное состояние\n let [state, setState] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({\n init: false,\n showPlanList: false,\n planCtlgs: [],\n planCtlgsLoaded: false,\n selectedPlanCtlg: {},\n plans: [],\n plansLoaded: false,\n selectedPlan: {}\n });\n\n //Подключение к контексту взаимодействия с сервером\n const {\n executeStored\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_backend__WEBPACK_IMPORTED_MODULE_1__[\"BackEndСtx\"]);\n\n //Инициализация каталогов планов\n const initPlanCtlgs = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async () => {\n if (!state.init) {\n const data = await executeStored({\n stored: \"PKG_P8PANELS_MECHREC.FCPRODPLAN_AM_CTLG_INIT\",\n args: {},\n respArg: \"COUT\",\n isArray: name => name === \"XFCPRODPLAN_CRNS\"\n });\n setState(pv => ({\n ...pv,\n init: true,\n planCtlgs: [...(data?.XFCPRODPLAN_CRNS || [])],\n planCtlgsLoaded: true\n }));\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [state.init, executeStored]);\n\n //Получение информации о планах каталога\n const loadPlans = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async NCRN => {\n if (NCRN) {\n const data = await executeStored({\n stored: \"PKG_P8PANELS_MECHREC.FCPRODPLAN_GET\",\n args: {\n NCRN: NCRN\n },\n respArg: \"COUT\",\n isArray: name => name === \"XFCPRODPLAN_INFO\"\n });\n setState(pv => ({\n ...pv,\n init: true,\n plans: [...(data?.XFCPRODPLAN_INFO || [])],\n plansLoaded: true\n }));\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [executeStored]);\n\n //Выбор каталога планов\n const selectPlanCtlg = planCtlg => {\n setState(pv => ({\n ...pv,\n selectedPlanCtlg: {\n ...planCtlg\n },\n selectedPlan: {},\n showPlanList: false\n }));\n };\n\n //Сброс выбора каталога планов\n const unselectPlanCtlg = () => setState(pv => ({\n ...pv,\n selectedPlanCtlg: {},\n selectedPlan: {},\n showPlanList: false\n }));\n\n //При подключении компонента к странице\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n initPlanCtlgs();\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n //При изменении каталога\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n //Если каталог выбран\n if (state.selectedPlanCtlg) {\n loadPlans(state.selectedPlanCtlg.NRN);\n } else {\n setState(pv => ({\n ...pv,\n plans: [],\n plansLoaded: false\n }));\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [state.selectedPlanCtlg]);\n return [state, setState, selectPlanCtlg, unselectPlanCtlg];\n};\n\n//Хук для информации по производственным составам\nconst useCostProductComposition = plan => {\n //Собственное состояние\n let [costProductComposition, setCostProductComposition] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({\n showPlanList: false,\n products: [],\n productsLoaded: false,\n model: null,\n selectedProduct: null\n });\n\n //Подключение к контексту взаимодействия с сервером\n const {\n executeStored\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_backend__WEBPACK_IMPORTED_MODULE_1__[\"BackEndСtx\"]);\n\n //При подключении компонента к странице\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n const loadData = async () => {\n const data = await executeStored({\n stored: \"PKG_P8PANELS_MECHREC.FCPRODCMP_DETAILS_GET\",\n args: {\n NFCPRODPLAN: plan\n },\n respArg: \"COUT\",\n isArray: name => name === \"XFCPRODCMP\"\n });\n setCostProductComposition(pv => ({\n ...pv,\n products: [...(data?.XFCPRODCMP || [])],\n productsLoaded: true,\n model: data?.BMODEL,\n selectedProduct: null\n }));\n };\n if (plan) loadData();\n }, [plan, executeStored]);\n\n //Вернём данные\n return [costProductComposition, setCostProductComposition];\n};\n\n//Хук для таблицы детализации изделия\nconst useProductDetailsTable = (plan, product, orders, pageNumber, stored) => {\n //Собственное состояние - флаг загрузки\n const [isLoading, setLoading] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(true);\n\n //Собственное состояние - таблица данных\n const [data, setData] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({\n columnsDef: [],\n rows: [],\n morePages: true\n });\n\n //Подключение к контексту взаимодействия с сервером\n const {\n executeStored,\n SERV_DATA_TYPE_CLOB\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_backend__WEBPACK_IMPORTED_MODULE_1__[\"BackEndСtx\"]);\n\n //Загрузка данных при изменении зависимостей\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n const loadData = async () => {\n try {\n setLoading(true);\n const data = await executeStored({\n stored,\n args: {\n NPRODCMPSP: product,\n NFCPRODPLAN: plan,\n CORDERS: {\n VALUE: (0,_core_utils__WEBPACK_IMPORTED_MODULE_2__.object2Base64XML)(orders, {\n arrayNodeName: \"orders\"\n }),\n SDATA_TYPE: SERV_DATA_TYPE_CLOB\n },\n NPAGE_NUMBER: pageNumber,\n NPAGE_SIZE: DATA_GRID_PAGE_SIZE,\n NINCLUDE_DEF: pageNumber == 1 ? 1 : 0\n },\n respArg: \"COUT\"\n });\n setData(pv => ({\n ...pv,\n columnsDef: data.XCOLUMNS_DEF ? [...data.XCOLUMNS_DEF] : pv.columnsDef,\n rows: pageNumber == 1 ? [...(data.XROWS || [])] : [...pv.rows, ...(data.XROWS || [])],\n morePages: DATA_GRID_PAGE_SIZE == 0 ? false : (data.XROWS || []).length >= DATA_GRID_PAGE_SIZE\n }));\n } finally {\n setLoading(false);\n }\n };\n if (plan && product) loadData();\n }, [plan, product, orders, pageNumber, stored, executeStored, SERV_DATA_TYPE_CLOB]);\n\n //Вернём данные\n return {\n data,\n isLoading\n };\n};\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/panels/mech_rec_assembly_mon/hooks.js?"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ useCostProductComposition: () => (/* binding */ useCostProductComposition),\n/* harmony export */ useFilteredPlanCtlgs: () => (/* binding */ useFilteredPlanCtlgs),\n/* harmony export */ useMechRecAssemblyMon: () => (/* binding */ useMechRecAssemblyMon),\n/* harmony export */ useProductDetailsTable: () => (/* binding */ useProductDetailsTable)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _context_backend__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../context/backend */ \"./app/context/backend.js\");\n/* harmony import */ var _core_utils__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../core/utils */ \"./app/core/utils.js\");\n/*\r\n Парус 8 - Панели мониторинга - ПУП - Мониторинг сборки изделий\r\n Кастомные хуки\r\n*/\n\n//---------------------\n//Подключение библиотек\n//---------------------\n\n //Классы React\n //Контекст взаимодействия с сервером\n //Вспомогательные функции\n\n//---------\n//Константы\n//---------\n\n//Размер страницы данных\nconst DATA_GRID_PAGE_SIZE = 50;\n\n//-----------\n//Тело модуля\n//-----------\n\n//Клиентский отбор каталогов по поисковой фразе и наличию планов\nconst useFilteredPlanCtlgs = (planCtlgs, filter) => {\n const filteredPlanCtlgs = react__WEBPACK_IMPORTED_MODULE_0___default().useMemo(() => {\n return planCtlgs.filter(catalog => catalog.SNAME.toString().toLowerCase().includes(filter.ctlgName) && (filter.haveDocs ? catalog.NCOUNT_DOCS > 0 : catalog.NCOUNT_DOCS >= 0));\n }, [planCtlgs, filter]);\n return filteredPlanCtlgs;\n};\n\n//Хук для основной таблицы панели\nconst useMechRecAssemblyMon = () => {\n //Собственное состояние\n let [state, setState] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({\n init: false,\n showPlanList: false,\n planCtlgs: [],\n planCtlgsLoaded: false,\n selectedPlanCtlg: {},\n plans: [],\n plansLoaded: false,\n selectedPlan: {}\n });\n\n //Подключение к контексту взаимодействия с сервером\n const {\n executeStored\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_backend__WEBPACK_IMPORTED_MODULE_1__[\"BackEndСtx\"]);\n\n //Инициализация каталогов планов\n const initPlanCtlgs = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async () => {\n if (!state.init) {\n const data = await executeStored({\n stored: \"PKG_P8PANELS_MECHREC.FCPRODPLAN_AM_CTLG_INIT\",\n args: {},\n respArg: \"COUT\",\n isArray: name => name === \"XFCPRODPLAN_CRNS\"\n });\n setState(pv => ({\n ...pv,\n init: true,\n planCtlgs: [...(data?.XFCPRODPLAN_CRNS || [])],\n planCtlgsLoaded: true\n }));\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [state.init, executeStored]);\n\n //Получение информации о планах каталога\n const loadPlans = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async NCRN => {\n if (NCRN) {\n const data = await executeStored({\n stored: \"PKG_P8PANELS_MECHREC.FCPRODPLAN_GET\",\n args: {\n NCRN: NCRN\n },\n respArg: \"COUT\",\n isArray: name => name === \"XFCPRODPLAN_INFO\"\n });\n setState(pv => ({\n ...pv,\n init: true,\n plans: [...(data?.XFCPRODPLAN_INFO || [])],\n plansLoaded: true\n }));\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [executeStored]);\n\n //Выбор каталога планов\n const selectPlanCtlg = planCtlg => {\n setState(pv => ({\n ...pv,\n selectedPlanCtlg: {\n ...planCtlg\n },\n selectedPlan: {},\n showPlanList: false\n }));\n };\n\n //Сброс выбора каталога планов\n const unselectPlanCtlg = () => setState(pv => ({\n ...pv,\n selectedPlanCtlg: {},\n selectedPlan: {},\n showPlanList: false\n }));\n\n //При подключении компонента к странице\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n initPlanCtlgs();\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n //При изменении каталога\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n //Если каталог выбран\n if (state.selectedPlanCtlg) {\n loadPlans(state.selectedPlanCtlg.NRN);\n } else {\n setState(pv => ({\n ...pv,\n plans: [],\n plansLoaded: false\n }));\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [state.selectedPlanCtlg]);\n return [state, setState, selectPlanCtlg, unselectPlanCtlg];\n};\n\n//Хук для информации по производственным составам\nconst useCostProductComposition = plan => {\n //Собственное состояние\n let [costProductComposition, setCostProductComposition] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({\n showPlanList: false,\n products: [],\n productsLoaded: false,\n model: null,\n selectedProduct: null\n });\n\n //Подключение к контексту взаимодействия с сервером\n const {\n executeStored\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_backend__WEBPACK_IMPORTED_MODULE_1__[\"BackEndСtx\"]);\n\n //При подключении компонента к странице\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n const loadData = async () => {\n const data = await executeStored({\n stored: \"PKG_P8PANELS_MECHREC.FCPRODCMP_DETAILS_GET\",\n args: {\n NFCPRODPLAN: plan\n },\n respArg: \"COUT\",\n isArray: name => name === \"XFCPRODCMP\"\n });\n setCostProductComposition(pv => ({\n ...pv,\n products: [...(data?.XFCPRODCMP || [])],\n productsLoaded: true,\n model: data?.BMODEL,\n selectedProduct: null\n }));\n };\n if (plan) loadData();\n }, [plan, executeStored]);\n\n //Вернём данные\n return [costProductComposition, setCostProductComposition];\n};\n\n//Хук для таблицы детализации изделия\nconst useProductDetailsTable = (plan, product, orders, pageNumber, stored) => {\n //Собственное состояние - флаг загрузки\n const [isLoading, setLoading] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(false);\n\n //Собственное состояние - таблица данных\n const [data, setData] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({\n init: false,\n columnsDef: [],\n rows: [],\n morePages: true\n });\n\n //Подключение к контексту взаимодействия с сервером\n const {\n executeStored,\n SERV_DATA_TYPE_CLOB\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_backend__WEBPACK_IMPORTED_MODULE_1__[\"BackEndСtx\"]);\n\n //Загрузка данных при изменении зависимостей\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n const loadData = async () => {\n try {\n setLoading(true);\n const data = await executeStored({\n stored,\n args: {\n NPRODCMPSP: product,\n NFCPRODPLAN: plan,\n CORDERS: {\n VALUE: (0,_core_utils__WEBPACK_IMPORTED_MODULE_2__.object2Base64XML)(orders, {\n arrayNodeName: \"orders\"\n }),\n SDATA_TYPE: SERV_DATA_TYPE_CLOB\n },\n NPAGE_NUMBER: pageNumber,\n NPAGE_SIZE: DATA_GRID_PAGE_SIZE,\n NINCLUDE_DEF: pageNumber == 1 ? 1 : 0\n },\n respArg: \"COUT\",\n loader: false\n });\n setData(pv => ({\n ...pv,\n columnsDef: data.XCOLUMNS_DEF ? [...data.XCOLUMNS_DEF] : pv.columnsDef,\n rows: pageNumber == 1 ? [...(data.XROWS || [])] : [...pv.rows, ...(data.XROWS || [])],\n morePages: DATA_GRID_PAGE_SIZE == 0 ? false : (data.XROWS || []).length >= DATA_GRID_PAGE_SIZE,\n init: true\n }));\n } finally {\n setLoading(false);\n }\n };\n if (plan && product) loadData();\n }, [plan, product, orders, pageNumber, stored, executeStored, SERV_DATA_TYPE_CLOB]);\n\n //Вернём данные\n return {\n data,\n isLoading\n };\n};\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/panels/mech_rec_assembly_mon/hooks.js?"); /***/ }), From 42f373564c6e3b3bf385d00eb0a5ec654df57ea9 Mon Sep 17 00:00:00 2001 From: Mikhail Chechnev Date: Tue, 28 May 2024 11:50:28 +0300 Subject: [PATCH 74/76] =?UTF-8?q?=D0=98=D0=BD=D1=81=D1=82=D1=80=D1=83?= =?UTF-8?q?=D0=BA=D1=86=D0=B8=D0=B8:=20=D0=B8=D1=81=D0=BF=D1=80=D0=B0?= =?UTF-8?q?=D0=B2=D0=B8=D0=BB=20=D0=BE=D0=BF=D0=B5=D1=87=D0=B0=D1=82=D0=BA?= =?UTF-8?q?=D1=83=20=D0=B2=20=D0=B3=D0=BB=D0=B0=D0=B2=D0=B5=20"=D0=9E?= =?UTF-8?q?=D0=B3=D1=80=D0=B0=D0=BD=D0=B8=D1=87=D0=B5=D0=BD=D0=B8=D1=8F=20?= =?UTF-8?q?=D0=B4=D0=B8=D0=B7=D0=B0=D0=B9=D0=BD=D0=B0=20=D0=BF=D0=BE=D0=BB?= =?UTF-8?q?=D1=8C=D0=B7=D0=BE=D0=B2=D0=B0=D1=82=D0=B5=D0=BB=D1=8C=D1=81?= =?UTF-8?q?=D0=BA=D0=BE=D0=B3=D0=BE=20=D0=B8=D0=BD=D1=82=D0=B5=D1=80=D1=84?= =?UTF-8?q?=D0=B5=D0=B9=D1=81=D0=B0"?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 2adc8ca..de1b040 100644 --- a/README.md +++ b/README.md @@ -2247,7 +2247,7 @@ const Svg = ({ title }) => { Фреймворк позволяет реализовать любые пользовательские интерфейсы, вёрстка которых не противоречит возможностям современного HTML. Тем не менее, при разработке пользовательских интерфейсов панелей важно придерживаться предложенных ниже правил. Это позволит создавать их в едином ключе и упростит работу конечного пользователя при их освоении. - Избегайте нестандартных реакций элементов пользовательского интерфейса на действия пользователя. Например, выпадающий список, при активации, должен отображать состав своих элементов, а не вызывать бизнес-функцию отработки документа. -- Избегайте прямого применения HTML-тэгов. В библиотеке [MUI](https://mui.com/), включенной во фреймворк, есть всё необходимое для сборки интерфейса. +- Избегайте прямого применения HTML-тэгов. В библиотеке [MUI](https://mui.com/), включенной в состав фреймворка, есть всё необходимое для сборки интерфейса. - Старайтесь не применять `
    ` для всёрстки - для этого в [MUI](https://mui.com/) есть группа компонентов разметки ("Layout"), используйте их (`Grid`, `Box`, `Container`, `Stack`, `Paper` и пр.). - Старайтесь не использовать, без острой необходимости, атрибуты `sx` и `style` - всё необходимое для стилизации как правило есть в типовых атрибутах компонента [MUI](https://mui.com/), изучите его документацию. Если применение собственного стиля неизбежно - старайтесь выносить стили в единое место в коде, переиспользовать их, и импортировать там, где это необходимо. - Придерживайтесь единой цветовой гаммы при реализации всех панелей (в идеале) или, если не удаётся, панелей, отнесённых к одному прикладному участку (ПУДП, УЗСР, БУ, ПУП и т.п.). From 57a37ae1670d0d45e7f58bb3321b7f6f202cd774 Mon Sep 17 00:00:00 2001 From: Dollerino Date: Thu, 30 May 2024 15:54:31 +0300 Subject: [PATCH 75/76] =?UTF-8?q?=D0=A6=D0=98=D0=A2=D0=9A-826=20-=20=D0=94?= =?UTF-8?q?=D0=BE=D1=80=D0=B0=D0=B1=D0=BE=D1=82=D0=BA=D0=B0=20=D0=BF=D0=B0?= =?UTF-8?q?=D0=BD=D0=B5=D0=BB=D0=B8=20"=D0=9F=D1=80=D0=BE=D0=B8=D0=B7?= =?UTF-8?q?=D0=B2=D0=BE=D0=B4=D1=81=D1=82=D0=B2=D0=B5=D0=BD=D0=BD=D1=8B?= =?UTF-8?q?=D0=B9=20=D0=BF=D0=BB=D0=B0=D0=BD=20=D1=86=D0=B5=D1=85=D0=B0"?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../fcroutlst.js | 126 +---- .../{fcroutlstord.js => fcroutlstsp.js} | 54 +- .../mech_rec_dept_cost_prod_plans.js | 5 +- db/PKG_P8PANELS_MECHREC.pck | 526 +++++++++--------- 4 files changed, 327 insertions(+), 384 deletions(-) rename app/panels/mech_rec_dept_cost_prod_plans/{fcroutlstord.js => fcroutlstsp.js} (68%) diff --git a/app/panels/mech_rec_dept_cost_prod_plans/fcroutlst.js b/app/panels/mech_rec_dept_cost_prod_plans/fcroutlst.js index 0a96738..b78e113 100644 --- a/app/panels/mech_rec_dept_cost_prod_plans/fcroutlst.js +++ b/app/panels/mech_rec_dept_cost_prod_plans/fcroutlst.js @@ -9,13 +9,12 @@ import React, { useState, useCallback, useEffect, useContext } from "react"; //Классы React import PropTypes from "prop-types"; //Контроль свойств компонента -import { Typography, Box, Paper, Dialog, DialogContent, DialogActions, Button, TextField } from "@mui/material"; //Интерфейсные элементы +import { Typography, Box, Paper, Dialog, DialogContent, DialogActions, Button, TextField, IconButton, Icon } from "@mui/material"; //Интерфейсные элементы import { P8PDataGrid, P8P_DATA_GRID_SIZE } from "../../components/p8p_data_grid"; //Таблица данных import { P8P_DATA_GRID_CONFIG_PROPS } from "../../config_wrapper"; //Подключение компонентов к настройкам приложения import { BackEndСtx } from "../../context/backend"; //Контекст взаимодействия с сервером import { object2Base64XML } from "../../core/utils"; //Вспомогательные функции -import { CostRouteListsOrdDataGrid } from "./fcroutlstord"; //Состояние таблицы заказов маршрутных листов -import { ApplicationСtx } from "../../context/application"; //Контекст приложения +import { CostRouteListsSpecsDataGrid } from "./fcroutlstsp"; //Состояние таблицы заказов маршрутных листов //--------- //Константы @@ -26,7 +25,6 @@ const STYLES = { CONTAINER: { textAlign: "center" }, TABLE: { paddingTop: "15px" }, TABLE_SUM: { textAlign: "right", paddingTop: "5px", paddingRight: "15px" }, - DIALOG_EDITOR: { maxWidth: "250px" }, DIALOG_BUTTONS: { marginTop: "10px", width: "240px" } }; @@ -38,37 +36,27 @@ const STYLES = { export const rowExpandRender = ({ row }) => { return ( - + ); }; //Форматирование значений колонок -const dataCellRender = ({ row, columnDef /*, handlePriorEditOpen, handleOrderEditOpen */ }) => { +const dataCellRender = ({ row, columnDef, handlePriorEditOpen }) => { //!!! Пока отключено - не удалять - // switch (columnDef.name) { - // case "NPRIOR_PARTY": - // return { - // data: ( - // <> - // {row["NPRIOR_PARTY"]} - // handlePriorEditOpen(row["NRN"], row["NPRIOR_PARTY"])}> - // edit - // - // - // ) - // }; - // case "NCHANGE_FACEACC": - // return { - // data: ( - // - // handleOrderEditOpen(row["NRN"], row["SPROD_ORDER"])}> - // inventory - // - // - // ) - // }; - // } + switch (columnDef.name) { + case "NPRIOR_PARTY": + return { + data: ( + <> + {row["NPRIOR_PARTY"]} + handlePriorEditOpen(row["NRN"], row["NPRIOR_PARTY"])}> + edit + + + ) + }; + } return { data: row[columnDef] }; @@ -90,17 +78,12 @@ const CostRouteListsDataGrid = ({ task }) => { pageNumber: 1, morePages: true, editPriorNRN: null, - editPriorValue: null, - editOrderNRN: null, - editOrderValue: null + editPriorValue: null }); //Подключение к контексту взаимодействия с сервером const { executeStored, SERV_DATA_TYPE_CLOB } = useContext(BackEndСtx); - //Подключение к контексту приложения - const { pOnlineShowDictionary } = useContext(ApplicationСtx); - //Размер страницы данных const DATA_GRID_PAGE_SIZE = 5; @@ -191,38 +174,10 @@ const CostRouteListsDataGrid = ({ task }) => { priorChange(costRouteLists.editPriorNRN, costRouteLists.editPriorValue, costRouteLists.rows); }; - //При открытии изменения заказа - const handleOrderEditOpen = (NRN, sProdOrderValue) => { - setCostRouteLists(pv => ({ ...pv, editOrderNRN: NRN, editOrderValue: sProdOrderValue })); - }; - - //При закрытии изменения заказа - const handleOrderEditClose = () => { - setCostRouteLists(pv => ({ ...pv, editOrderNRN: null, editOrderValue: null })); - }; - - //Изменение заказа - const setEditOrderValue = value => { - setCostRouteLists(pv => ({ ...pv, editOrderValue: value })); - }; - - //При изменении значения заказа - const handleOrderFormChanged = e => { - setEditOrderValue(e.target.value); - }; - - //При нажатии на изменение заказа - const handleOrderChange = () => { - //Изменяем значение - //priorChange(costRouteLists.editPriorNRN, costRouteLists.editPriorValue); - //Закрываем окно - handleOrderEditClose(); - }; - //Генерация содержимого return (
    - Маршрутные листы + В производстве {costRouteLists.dataLoaded ? ( <> @@ -237,13 +192,13 @@ const CostRouteListsDataGrid = ({ task }) => { rowExpandRender={rowExpandRender} onOrderChanged={handleOrderChanged} onPagesCountChanged={handlePagesCountChanged} - dataCellRender={prms => dataCellRender({ ...prms, handlePriorEditOpen, handleOrderEditOpen })} + dataCellRender={prms => dataCellRender({ ...prms, handlePriorEditOpen })} /> ) : null} {costRouteLists.editPriorNRN ? ( - handlePriorEditClose(null)} sx={STYLES.DIALOG_EDITOR}> + handlePriorEditClose(null)}> { ) : null} - {costRouteLists.editOrderNRN ? ( - handleOrderEditClose(null)} sx={STYLES.DIALOG_EDITOR}> - - - - - - - - - - - - - - - - ) : null}
    ); }; diff --git a/app/panels/mech_rec_dept_cost_prod_plans/fcroutlstord.js b/app/panels/mech_rec_dept_cost_prod_plans/fcroutlstsp.js similarity index 68% rename from app/panels/mech_rec_dept_cost_prod_plans/fcroutlstord.js rename to app/panels/mech_rec_dept_cost_prod_plans/fcroutlstsp.js index ec4ca3b..0161b88 100644 --- a/app/panels/mech_rec_dept_cost_prod_plans/fcroutlstord.js +++ b/app/panels/mech_rec_dept_cost_prod_plans/fcroutlstsp.js @@ -1,6 +1,6 @@ /* Парус 8 - Панели мониторинга - ПУП - Производственный план цеха - Компонент панели: Таблица заказов маршрутного листа + Компонент панели: Таблица строк маршрутного листа */ //--------------------- @@ -28,10 +28,10 @@ const STYLES = { //Тело модуля //----------- -//Таблица заказов маршрутного листа -const CostRouteListsOrdDataGrid = ({ mainRowRN }) => { +//Таблица строк маршрутного листа +const CostRouteListsSpecsDataGrid = ({ mainRowRN }) => { //Собственное состояние - таблица данных - const [costRouteListsOrd, setCostRouteListsOrd] = useState({ + const [costRouteListsSpecs, setCostRouteListsSpecs] = useState({ dataLoaded: false, columnsDef: [], orders: null, @@ -49,19 +49,19 @@ const CostRouteListsOrdDataGrid = ({ mainRowRN }) => { //Загрузка данных таблицы с сервера const loadData = useCallback(async () => { - if (costRouteListsOrd.reload) { + if (costRouteListsSpecs.reload) { const data = await executeStored({ - stored: "PKG_P8PANELS_MECHREC.FCROUTLSTORD_DEPT_DG_GET", + stored: "PKG_P8PANELS_MECHREC.FCROUTLSTSP_DEPT_DG_GET", args: { NFCROUTLST: mainRowRN, - CORDERS: { VALUE: object2Base64XML(costRouteListsOrd.orders, { arrayNodeName: "orders" }), SDATA_TYPE: SERV_DATA_TYPE_CLOB }, - NPAGE_NUMBER: costRouteListsOrd.pageNumber, + CORDERS: { VALUE: object2Base64XML(costRouteListsSpecs.orders, { arrayNodeName: "orders" }), SDATA_TYPE: SERV_DATA_TYPE_CLOB }, + NPAGE_NUMBER: costRouteListsSpecs.pageNumber, NPAGE_SIZE: DATA_GRID_PAGE_SIZE, - NINCLUDE_DEF: costRouteListsOrd.dataLoaded ? 0 : 1 + NINCLUDE_DEF: costRouteListsSpecs.dataLoaded ? 0 : 1 }, respArg: "COUT" }); - setCostRouteListsOrd(pv => ({ + setCostRouteListsSpecs(pv => ({ ...pv, columnsDef: data.XCOLUMNS_DEF ? [...data.XCOLUMNS_DEF] : pv.columnsDef, rows: pv.pageNumber == 1 ? [...(data.XROWS || [])] : [...pv.rows, ...(data.XROWS || [])], @@ -72,11 +72,11 @@ const CostRouteListsOrdDataGrid = ({ mainRowRN }) => { } // eslint-disable-next-line react-hooks/exhaustive-deps }, [ - costRouteListsOrd.reload, - costRouteListsOrd.filters, - costRouteListsOrd.orders, - costRouteListsOrd.dataLoaded, - costRouteListsOrd.pageNumber, + costRouteListsSpecs.reload, + costRouteListsSpecs.filters, + costRouteListsSpecs.orders, + costRouteListsSpecs.dataLoaded, + costRouteListsSpecs.pageNumber, executeStored, SERV_DATA_TYPE_CLOB ]); @@ -84,26 +84,26 @@ const CostRouteListsOrdDataGrid = ({ mainRowRN }) => { //При необходимости обновить данные таблицы useEffect(() => { loadData(); - }, [costRouteListsOrd.reload, loadData]); + }, [costRouteListsSpecs.reload, loadData]); //При изменении состояния сортировки - const handleOrderChanged = ({ orders }) => setCostRouteListsOrd(pv => ({ ...pv, orders: [...orders], pageNumber: 1, reload: true })); + const handleOrderChanged = ({ orders }) => setCostRouteListsSpecs(pv => ({ ...pv, orders: [...orders], pageNumber: 1, reload: true })); //При изменении количества отображаемых страниц - const handlePagesCountChanged = () => setCostRouteListsOrd(pv => ({ ...pv, pageNumber: pv.pageNumber + 1, reload: true })); + const handlePagesCountChanged = () => setCostRouteListsSpecs(pv => ({ ...pv, pageNumber: pv.pageNumber + 1, reload: true })); //Генерация содержимого return (
    - Заказы - {costRouteListsOrd.dataLoaded ? ( + Операции + {costRouteListsSpecs.dataLoaded ? ( @@ -112,8 +112,8 @@ const CostRouteListsOrdDataGrid = ({ mainRowRN }) => { ); }; -//Контроль свойств - Таблица заказов маршрутного листа -CostRouteListsOrdDataGrid.propTypes = { +//Контроль свойств - Таблица строк маршрутного листа +CostRouteListsSpecsDataGrid.propTypes = { mainRowRN: PropTypes.number.isRequired }; @@ -121,4 +121,4 @@ CostRouteListsOrdDataGrid.propTypes = { //Интерфейс модуля //---------------- -export { CostRouteListsOrdDataGrid }; +export { CostRouteListsSpecsDataGrid }; diff --git a/app/panels/mech_rec_dept_cost_prod_plans/mech_rec_dept_cost_prod_plans.js b/app/panels/mech_rec_dept_cost_prod_plans/mech_rec_dept_cost_prod_plans.js index 0c499e6..0e4a5b5 100644 --- a/app/panels/mech_rec_dept_cost_prod_plans/mech_rec_dept_cost_prod_plans.js +++ b/app/panels/mech_rec_dept_cost_prod_plans/mech_rec_dept_cost_prod_plans.js @@ -218,7 +218,8 @@ const MechRecDeptCostProdPlans = () => { stored: "PKG_P8PANELS_MECHREC.FCPRODPLAN_DEPT_INIT", args: {}, respArg: "COUT", - isArray: name => name === "XFCPRODPLANS" + isArray: name => name === "XFCPRODPLANS", + attributeValueProcessor: (name, val) => (name === "SPERIOD" ? undefined : val) }); setState(pv => ({ ...pv, init: true, planList: [...(data?.XFCPRODPLANS || [])], planListLoaded: true })); } @@ -352,7 +353,7 @@ const MechRecDeptCostProdPlans = () => {
    {state.dataLoaded ? ( - {`Производственный план цеха "${state.selectedPlan.SSUBDIV}" на ${state.selectedPlan.SPERIOD}`} + {`Производственный план цеха №${state.selectedPlan.SSUBDIV} на ${state.selectedPlan.SPERIOD}`} ) : null} diff --git a/db/PKG_P8PANELS_MECHREC.pck b/db/PKG_P8PANELS_MECHREC.pck index 777435e..4d7fda5 100644 --- a/db/PKG_P8PANELS_MECHREC.pck +++ b/db/PKG_P8PANELS_MECHREC.pck @@ -85,14 +85,6 @@ create or replace package PKG_P8PANELS_MECHREC as SPRIOR_PARTY in varchar -- Новое значение приоритета партии ); - /* Изменение заказа маршрутного листа */ - procedure FCROUTLST_FACEACC_UPDATE - ( - NFCROUTLST in number, -- Рег. номер маршрутного листа - SFACEACC_NUMB in varchar, -- Номер заказа - NFCPRODPLANSP in number -- Рег. номер строки плана - ); - /* Получение таблицы маршрутных листов, связанных со спецификацией плана */ procedure FCROUTLST_DEPT_DG_GET ( @@ -104,8 +96,8 @@ create or replace package PKG_P8PANELS_MECHREC as COUT out clob -- Сериализованная таблица данных ); - /* Получение таблицы заказов маршрутного листа */ - procedure FCROUTLSTORD_DEPT_DG_GET + /* Получение таблицы строк маршрутного листа */ + procedure FCROUTLSTSP_DEPT_DG_GET ( NFCROUTLST in number, -- Рег. номер маршрутного листа NPAGE_NUMBER in number, -- Номер страницы (игнорируется при NPAGE_SIZE=0) @@ -333,7 +325,8 @@ create or replace package body PKG_P8PANELS_MECHREC as STASK_ATTR_MEAS constant PKG_STD.TSTRING := 'meas'; -- Единица измнения /* Константы - дополнительные параметры */ - SCOL_PATTERN_DATE constant PKG_STD.TSTRING := 'dd_mm_yyyy'; -- Паттерн для динамической колонки граф ("день_месяц_год") + SCOL_PATTERN_DATE constant PKG_STD.TSTRING := 'dd_mm_yyyy'; -- Паттерн для динамической колонки граф ("день_месяц_год") + SFCROUTLSTSP_STATE_DOMAIN constant PKG_STD.TSTRING := 'TFCROUTLSTSP_STATE'; -- Мнемокод домена состояния спецификации маршрутного листа /* Константы - типовые присоединённые документы */ SFLINKTYPE_PREVIEW constant PKG_STD.TSTRING := 'Предпросмотр'; -- Тип ПД для изображений предпросмотра @@ -662,7 +655,7 @@ create or replace package body PKG_P8PANELS_MECHREC as and T.OUT_UNITCODE = 'CostProductPlansSpecs' and S.RN = T.IN_DOCUMENT and P.RN = S.PRN - and P.CATEGORY = 1 + and P.CATEGORY = NFCPRODPLAN_CATEGORY and P.COMPANY = NCOMPANY and ROWNUM = 1; exception @@ -2744,8 +2737,6 @@ create or replace package body PKG_P8PANELS_MECHREC as is RFCROUTLST FCROUTLST%rowtype; -- Запись маршрутного листа begin - /* Дорабатывается */ - P_EXCEPTION(0, 'На стадии разработки.'); /* Проверяем нет ли лишних символов */ if ((SPRIOR_PARTY is not null) and (REGEXP_COUNT(SPRIOR_PARTY, '[^0123456789]+') > 0)) then P_EXCEPTION(0, 'Значение приоритета должно быть целым числом.'); @@ -2803,61 +2794,6 @@ create or replace package body PKG_P8PANELS_MECHREC as SINT_NUMB => RFCROUTLST.INT_NUMB); end FCROUTLST_PRIOR_PARTY_UPDATE; - /* Изменение заказа маршрутного листа */ - procedure FCROUTLST_FACEACC_UPDATE - ( - NFCROUTLST in number, -- Рег. номер маршрутного листа - SFACEACC_NUMB in varchar, -- Номер заказа - NFCPRODPLANSP in number -- Рег. номер строки плана - ) - is - RFCROUTLST FCROUTLST%rowtype; -- Запись маршрутного листа - NFACEACC PKG_STD.TREF; -- Рег. номер лицевого счета - - /* Проверка наличия связей с другими строками плана */ - function FCROUTLST_CHECK_OTHER_PROD - ( - NFCROUTLST in number, -- Рег. номер маршрутного листа - NFCPRODPLANSP in number -- Рег. номер строки плана - ) return number -- Наличие других связей (0 - нет, 1 - да) - is - NRESULT PKG_STD.TNUMBER; -- Наличие других связей (0 - нет, 1 - да) - begin - /* Проверка наличия других связей */ - begin - select 1 - into NRESULT - from DUAL - where exists (select null - from DOCLINKS D - where D.OUT_UNITCODE = 'CostRouteLists' - and D.OUT_DOCUMENT = NFCROUTLST - and D.IN_UNITCODE = 'CostProductPlansSpecs' - and D.IN_DOCUMENT <> NFCPRODPLANSP); - exception - when others then - NRESULT := 0; - end; - /* Возвращаем результат */ - return NRESULT; - end FCROUTLST_CHECK_OTHER_PROD; - begin - /* Дорабатывается */ - P_EXCEPTION(0, 'На стадии разработки.'); - /* Считываем запись маршрутного листа */ - UTL_FCROUTLST_GET(NFCROUTLST => NFCROUTLST, RFCROUTLST => RFCROUTLST); - /* Определяем рег. номер лицевого счета */ - FIND_FACEACC_NUMB(NFLAG_SMART => 0, - NFLAG_OPTION => 1, - NCOMPANY => RFCROUTLST.COMPANY, - SNUMB => SFACEACC_NUMB, - NRN => NFACEACC); - /* Если есть связи с другими строками плана */ - if (FCROUTLST_CHECK_OTHER_PROD(NFCROUTLST => NFCROUTLST, NFCPRODPLANSP => NFCPRODPLANSP) = 1) then - null; - end if; - end FCROUTLST_FACEACC_UPDATE; - /* Получение таблицы маршрутных листов, связанных со спецификацией плана */ procedure FCROUTLST_DEPT_DG_GET ( @@ -3140,8 +3076,8 @@ create or replace package body PKG_P8PANELS_MECHREC as raise; end FCROUTLST_DEPT_DG_GET; - /* Получение таблицы заказов маршрутного листа */ - procedure FCROUTLSTORD_DEPT_DG_GET + /* Получение таблицы строк маршрутного листа */ + procedure FCROUTLSTSP_DEPT_DG_GET ( NFCROUTLST in number, -- Рег. номер маршрутного листа NPAGE_NUMBER in number, -- Номер страницы (игнорируется при NPAGE_SIZE=0) @@ -3159,62 +3095,32 @@ create or replace package body PKG_P8PANELS_MECHREC as NROW_TO PKG_STD.TREF; -- Номер строки по CSQL clob; -- Буфер для запроса ICURSOR integer; -- Курсор для исполнения запроса - SPROD_ORDER PKG_STD.TSTRING; -- Заказ МЛ - NQUANT PKG_STD.TLNUMBER; -- Количество МЛ - NPRIOR_ORDER PKG_STD.TLNUMBER; -- Приоритет заказа МЛ + NSTATE PKG_STD.TNUMBER; -- Состояние - /* Проверка наличия записей спецификации "Заказы" */ - function FCROUTLSTORD_EXISTS + /* Считывание текстового представления состояния строки маршрутного листа */ + function FCROUTLSTSP_STATE_NAME_GET ( - NFCROUTLST in number -- Рег. номер маршрутного листа - ) return number -- Наличие записей спецификации заказы (0 - нет, 1 - да) + NSTATE in number -- Состояние строки маршрутного листа + ) return varchar2 -- Наименование состояния строки маршрутного листа is - NRESULT PKG_STD.TNUMBER; -- Наличие записей спецификации заказы (0 - нет, 1 - да) + SRESULT PKG_STD.TSTRING; -- Наименование состояния строки маршрутного листа begin - /* Проверяем наличие */ + /* Считываем наименование состояния по домену */ begin - select 1 - into NRESULT - from DUAL - where exists (select null - from FCROUTLSTORD T - where T.PRN = NFCROUTLST - and ROWNUM = 1); + select V.NAME + into SRESULT + from DMSDOMAINS T, + DMSENUMVALUES V + where T.CODE = SFCROUTLSTSP_STATE_DOMAIN + and V.PRN = T.RN + and V.VALUE_NUM = NSTATE; exception when others then - NRESULT := 0; + SRESULT := null; end; /* Возвращаем результат */ - return NRESULT; - end FCROUTLSTORD_EXISTS; - - /* Получение значений из заголовка МЛ */ - procedure FCROUTLST_INFO_GET - ( - NFCROUTLST in number, -- Рег. номер маршрутного листа - SPROD_ORDER out varchar2, -- Заказ - NQUANT out number, -- Количество - NPRIOR_ORDER out number -- Приоритет заказа - ) - is - begin - /* Считываем информацию из заголовка */ - begin - select (select F.NUMB from FACEACC F where T.FACEACC = F.RN), - T.QUANT, - T.PRIOR_ORDER - into SPROD_ORDER, - NQUANT, - NPRIOR_ORDER - from FCROUTLST T - where T.RN = NFCROUTLST; - exception - when others then - SPROD_ORDER := null; - NQUANT := null; - NPRIOR_ORDER := null; - end; - end FCROUTLST_INFO_GET; + return SRESULT; + end FCROUTLSTSP_STATE_NAME_GET; begin /* Читем сортировки */ RO := PKG_P8PANELS_VISUAL.TORDERS_FROM_XML(CORDERS => CORDERS); @@ -3232,106 +3138,151 @@ create or replace package body PKG_P8PANELS_MECHREC as SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_NUMB, BVISIBLE => false); PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG, - SNAME => 'SPROD_ORDER', - SCAPTION => 'Заказ', + SNAME => 'SSTATE', + SCAPTION => 'Состояние', SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_STR, - BVISIBLE => true, - BORDER => true); + BVISIBLE => true); PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG, - SNAME => 'NQUANT', - SCAPTION => 'Количество', - SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_NUMB, - BVISIBLE => true, - BORDER => true); + SNAME => 'SOPER_NUMB', + SCAPTION => 'Номер операции', + SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_STR, + BVISIBLE => true); PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG, - SNAME => 'NPRIOR_ORDER', - SCAPTION => 'Приоритет заказа', + SNAME => 'SROUTSHTSP_NAME', + SCAPTION => 'Операция', + SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_STR, + BVISIBLE => true); + PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG, + SNAME => 'SSUBDIV', + SCAPTION => 'Цех, участок', + SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_STR, + BVISIBLE => true); + PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG, + SNAME => 'NQUANT_PLAN', + SCAPTION => 'План', SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_NUMB, - BVISIBLE => true, - BORDER => true); - /* Если у маршрутного листа есть записи спецификации "Заказы" - работаем по ним */ - if (FCROUTLSTORD_EXISTS(NFCROUTLST => NFCROUTLST) = 1) then - /* Обходим данные */ - begin - /* Добавляем подсказку совместимости */ - CSQL := PKG_SQL_BUILD.COMPATIBLE(SSQL => CSQL); - /* Формируем запрос */ - PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => 'select *'); - PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' from (select D.*,'); - PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => PKG_SQL_BUILD.SQLROWNUM() || ' NROW'); - PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' from (select T.RN NRN,'); - PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' F.NUMB SPROD_ORDER,'); - PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' T.QUANT NQUANT,'); - PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' T.PRIOR_ORDER NPRIOR_ORDER,'); - PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' from FCROUTLSTORD T'); - PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' left outer join FACEACC F on T.PROD_ORDER = F.RN'); - PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' where T.PRN = :NFCROUTLST'); - PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' and T.COMPANY = :NCOMPANY'); - PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' %ORDER_BY%) D) F'); - PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' where F.NROW between :NROW_FROM and :NROW_TO'); - /* Учтём сортировки */ - PKG_P8PANELS_VISUAL.TORDERS_SET_QUERY(RDATA_GRID => RDG, RORDERS => RO, SPATTERN => '%ORDER_BY%', CSQL => CSQL); - /* Разбираем его */ - ICURSOR := PKG_SQL_DML.OPEN_CURSOR(SWHAT => 'SELECT'); - PKG_SQL_DML.PARSE(ICURSOR => ICURSOR, SQUERY => CSQL); - /* Делаем подстановку параметров */ - PKG_SQL_DML.BIND_VARIABLE_NUM(ICURSOR => ICURSOR, SNAME => 'NCOMPANY', NVALUE => NCOMPANY); - PKG_SQL_DML.BIND_VARIABLE_NUM(ICURSOR => ICURSOR, SNAME => 'NROW_FROM', NVALUE => NROW_FROM); - PKG_SQL_DML.BIND_VARIABLE_NUM(ICURSOR => ICURSOR, SNAME => 'NROW_TO', NVALUE => NROW_TO); - PKG_SQL_DML.BIND_VARIABLE_NUM(ICURSOR => ICURSOR, SNAME => 'NFCROUTLST', NVALUE => NFCROUTLST); - /* Описываем структуру записи курсора */ - PKG_SQL_DML.DEFINE_COLUMN_NUM(ICURSOR => ICURSOR, IPOSITION => 1); - PKG_SQL_DML.DEFINE_COLUMN_STR(ICURSOR => ICURSOR, IPOSITION => 2); - PKG_SQL_DML.DEFINE_COLUMN_NUM(ICURSOR => ICURSOR, IPOSITION => 3); - PKG_SQL_DML.DEFINE_COLUMN_NUM(ICURSOR => ICURSOR, IPOSITION => 4); - PKG_SQL_DML.DEFINE_COLUMN_NUM(ICURSOR => ICURSOR, IPOSITION => 5); - /* Делаем выборку */ - if (PKG_SQL_DML.EXECUTE(ICURSOR => ICURSOR) = 0) then - null; - end if; - /* Обходим выбранные записи */ - while (PKG_SQL_DML.FETCH_ROWS(ICURSOR => ICURSOR) > 0) - loop - /* Добавляем колонки с данными */ - PKG_P8PANELS_VISUAL.TROW_ADD_CUR_COLN(RROW => RDG_ROW, - SNAME => 'NRN', - ICURSOR => ICURSOR, - NPOSITION => 1, - BCLEAR => true); - PKG_P8PANELS_VISUAL.TROW_ADD_CUR_COLS(RROW => RDG_ROW, - SNAME => 'SPROD_ORDER', - ICURSOR => ICURSOR, - NPOSITION => 2); - PKG_P8PANELS_VISUAL.TROW_ADD_CUR_COLN(RROW => RDG_ROW, SNAME => 'NQUANT', ICURSOR => ICURSOR, NPOSITION => 3); - PKG_P8PANELS_VISUAL.TROW_ADD_CUR_COLN(RROW => RDG_ROW, - SNAME => 'NPRIOR_ORDER', - ICURSOR => ICURSOR, - NPOSITION => 4); - /* Добавляем строку в таблицу */ - PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_ROW(RDATA_GRID => RDG, RROW => RDG_ROW); - end loop; - exception - when others then - PKG_SQL_DML.CLOSE_CURSOR(ICURSOR => ICURSOR); - raise; - end; - else - /* Считываем значения из заголовка МЛ */ - FCROUTLST_INFO_GET(NFCROUTLST => NFCROUTLST, - SPROD_ORDER => SPROD_ORDER, - NQUANT => NQUANT, - NPRIOR_ORDER => NPRIOR_ORDER); - /* Добавляем колонки с данными */ - PKG_P8PANELS_VISUAL.TROW_ADD_COL(RROW => RDG_ROW, SNAME => 'NRN', NVALUE => NFCROUTLST, BCLEAR => true); - PKG_P8PANELS_VISUAL.TROW_ADD_COL(RROW => RDG_ROW, SNAME => 'SPROD_ORDER', SVALUE => SPROD_ORDER); - PKG_P8PANELS_VISUAL.TROW_ADD_COL(RROW => RDG_ROW, SNAME => 'NQUANT', NVALUE => NQUANT); - PKG_P8PANELS_VISUAL.TROW_ADD_COL(RROW => RDG_ROW, SNAME => 'NPRIOR_ORDER', NVALUE => NPRIOR_ORDER); - /* Добавляем строку в таблицу */ - PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_ROW(RDATA_GRID => RDG, RROW => RDG_ROW); - end if; + BVISIBLE => true); + PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG, + SNAME => 'NQUANT_FACT', + SCAPTION => 'Факт', + SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_NUMB, + BVISIBLE => true); + PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG, + SNAME => 'NT_SHT_PLAN', + SCAPTION => 'Трудоемкость план', + SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_NUMB, + BVISIBLE => true); + PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG, + SNAME => 'NLABOUR_FACT', + SCAPTION => 'Трудоемкость факт', + SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_NUMB, + BVISIBLE => true); + PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG, + SNAME => 'SMUNIT', + SCAPTION => 'ЕИ трудоемкости', + SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_STR, + BVISIBLE => true); + /* Обходим данные */ + begin + /* Добавляем подсказку совместимости */ + CSQL := PKG_SQL_BUILD.COMPATIBLE(SSQL => CSQL); + /* Формируем запрос */ + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => 'select *'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' from (select D.*,'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => PKG_SQL_BUILD.SQLROWNUM() || ' NROW'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' from (select T.RN NRN,'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' T.STATE NSTATE,'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' T.OPER_NUMB SOPER_NUMB,'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' trim(T.OPER_NUMB) || '', '' || '); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' trim(COALESCE(( select O.NAME from FCOPERTYPES O where T.OPER_TPS = O.RN ), T.OPER_UK)) SROUTSHTSP_NAME,'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' ( select I.CODE from INS_DEPARTMENT I where T.SUBDIV = I.RN ) SSUBDIV,'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' T.QUANT_PLAN NQUANT_PLAN,'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' T.QUANT_FACT NQUANT_FACT,'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' T.T_SHT_PLAN NT_SHT_PLAN,'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' T.LABOUR_FACT NLABOUR_FACT,'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' ( select D.MEAS_MNEMO from DICMUNTS D where T.MUNIT = D.RN ) SMUNIT'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' from FCROUTLSTSP T'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' where T.PRN = :NFCROUTLST'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' and T.COMPANY = :NCOMPANY'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' %ORDER_BY%) D) F'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' where F.NROW between :NROW_FROM and :NROW_TO'); + /* Учтём сортировки */ + PKG_P8PANELS_VISUAL.TORDERS_SET_QUERY(RDATA_GRID => RDG, RORDERS => RO, SPATTERN => '%ORDER_BY%', CSQL => CSQL); + /* Разбираем его */ + ICURSOR := PKG_SQL_DML.OPEN_CURSOR(SWHAT => 'SELECT'); + PKG_SQL_DML.PARSE(ICURSOR => ICURSOR, SQUERY => CSQL); + /* Делаем подстановку параметров */ + PKG_SQL_DML.BIND_VARIABLE_NUM(ICURSOR => ICURSOR, SNAME => 'NCOMPANY', NVALUE => NCOMPANY); + PKG_SQL_DML.BIND_VARIABLE_NUM(ICURSOR => ICURSOR, SNAME => 'NROW_FROM', NVALUE => NROW_FROM); + PKG_SQL_DML.BIND_VARIABLE_NUM(ICURSOR => ICURSOR, SNAME => 'NROW_TO', NVALUE => NROW_TO); + PKG_SQL_DML.BIND_VARIABLE_NUM(ICURSOR => ICURSOR, SNAME => 'NFCROUTLST', NVALUE => NFCROUTLST); + /* Описываем структуру записи курсора */ + PKG_SQL_DML.DEFINE_COLUMN_NUM(ICURSOR => ICURSOR, IPOSITION => 1); + PKG_SQL_DML.DEFINE_COLUMN_NUM(ICURSOR => ICURSOR, IPOSITION => 2); + PKG_SQL_DML.DEFINE_COLUMN_STR(ICURSOR => ICURSOR, IPOSITION => 3); + PKG_SQL_DML.DEFINE_COLUMN_STR(ICURSOR => ICURSOR, IPOSITION => 4); + PKG_SQL_DML.DEFINE_COLUMN_STR(ICURSOR => ICURSOR, IPOSITION => 5); + PKG_SQL_DML.DEFINE_COLUMN_NUM(ICURSOR => ICURSOR, IPOSITION => 6); + PKG_SQL_DML.DEFINE_COLUMN_NUM(ICURSOR => ICURSOR, IPOSITION => 7); + PKG_SQL_DML.DEFINE_COLUMN_NUM(ICURSOR => ICURSOR, IPOSITION => 8); + PKG_SQL_DML.DEFINE_COLUMN_NUM(ICURSOR => ICURSOR, IPOSITION => 9); + PKG_SQL_DML.DEFINE_COLUMN_STR(ICURSOR => ICURSOR, IPOSITION => 10); + PKG_SQL_DML.DEFINE_COLUMN_NUM(ICURSOR => ICURSOR, IPOSITION => 11); + /* Делаем выборку */ + if (PKG_SQL_DML.EXECUTE(ICURSOR => ICURSOR) = 0) then + null; + end if; + /* Обходим выбранные записи */ + while (PKG_SQL_DML.FETCH_ROWS(ICURSOR => ICURSOR) > 0) + loop + /* Добавляем колонки с данными */ + PKG_P8PANELS_VISUAL.TROW_ADD_CUR_COLN(RROW => RDG_ROW, + SNAME => 'NRN', + ICURSOR => ICURSOR, + NPOSITION => 1, + BCLEAR => true); + /* Читаем состояние из курсора */ + PKG_SQL_DML.COLUMN_VALUE_NUM(ICURSOR => ICURSOR, IPOSITION => 2, NVALUE => NSTATE); + PKG_P8PANELS_VISUAL.TROW_ADD_COL(RROW => RDG_ROW, + SNAME => 'SSTATE', + SVALUE => FCROUTLSTSP_STATE_NAME_GET(NSTATE => NSTATE)); + PKG_P8PANELS_VISUAL.TROW_ADD_CUR_COLS(RROW => RDG_ROW, + SNAME => 'SOPER_NUMB', + ICURSOR => ICURSOR, + NPOSITION => 3); + PKG_P8PANELS_VISUAL.TROW_ADD_CUR_COLS(RROW => RDG_ROW, + SNAME => 'SROUTSHTSP_NAME', + ICURSOR => ICURSOR, + NPOSITION => 4); + PKG_P8PANELS_VISUAL.TROW_ADD_CUR_COLS(RROW => RDG_ROW, SNAME => 'SSUBDIV', ICURSOR => ICURSOR, NPOSITION => 5); + PKG_P8PANELS_VISUAL.TROW_ADD_CUR_COLN(RROW => RDG_ROW, + SNAME => 'NQUANT_PLAN', + ICURSOR => ICURSOR, + NPOSITION => 6); + PKG_P8PANELS_VISUAL.TROW_ADD_CUR_COLN(RROW => RDG_ROW, + SNAME => 'NQUANT_FACT', + ICURSOR => ICURSOR, + NPOSITION => 7); + PKG_P8PANELS_VISUAL.TROW_ADD_CUR_COLN(RROW => RDG_ROW, + SNAME => 'NT_SHT_PLAN', + ICURSOR => ICURSOR, + NPOSITION => 8); + PKG_P8PANELS_VISUAL.TROW_ADD_CUR_COLN(RROW => RDG_ROW, + SNAME => 'NLABOUR_FACT', + ICURSOR => ICURSOR, + NPOSITION => 9); + PKG_P8PANELS_VISUAL.TROW_ADD_CUR_COLS(RROW => RDG_ROW, SNAME => 'SMUNIT', ICURSOR => ICURSOR, NPOSITION => 10); + /* Добавляем строку в таблицу */ + PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_ROW(RDATA_GRID => RDG, RROW => RDG_ROW); + end loop; + exception + when others then + PKG_SQL_DML.CLOSE_CURSOR(ICURSOR => ICURSOR); + raise; + end; /* Сериализуем описание */ COUT := PKG_P8PANELS_VISUAL.TDATA_GRID_TO_XML(RDATA_GRID => RDG, NINCLUDE_DEF => NINCLUDE_DEF); - end FCROUTLSTORD_DEPT_DG_GET; + end FCROUTLSTSP_DEPT_DG_GET; /* Получение таблицы ПиП на основании маршрутного листа, связанных со спецификацией плана */ procedure INCOMEFROMDEPS_DEPT_DG_GET @@ -3370,6 +3321,11 @@ create or replace package body PKG_P8PANELS_MECHREC as SCAPTION => 'Рег. номер', SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_NUMB, BVISIBLE => false); + PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG, + SNAME => 'SSTATE', + SCAPTION => 'Состояние', + SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_STR, + BVISIBLE => true); PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG, SNAME => 'SDOC_INFO', SCAPTION => 'Документ (тип, №, дата)', @@ -3403,6 +3359,7 @@ create or replace package body PKG_P8PANELS_MECHREC as PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' from (select D.*,'); PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => PKG_SQL_BUILD.SQLROWNUM() || ' NROW'); PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' from (select T.RN NRN,'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' SUBSTR(F_DOCSTATE_PLAN_FACT(T.DOC_STATE), 1, 20) SSTATE,'); PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' DT.DOCCODE ||'); PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' '', '' || TRIM(T.DOC_PREF) ||'); PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' ''-'' || TRIM(T.DOC_NUMB) ||'); @@ -3444,9 +3401,10 @@ create or replace package body PKG_P8PANELS_MECHREC as /* Описываем структуру записи курсора */ PKG_SQL_DML.DEFINE_COLUMN_NUM(ICURSOR => ICURSOR, IPOSITION => 1); PKG_SQL_DML.DEFINE_COLUMN_STR(ICURSOR => ICURSOR, IPOSITION => 2); - PKG_SQL_DML.DEFINE_COLUMN_NUM(ICURSOR => ICURSOR, IPOSITION => 3); - PKG_SQL_DML.DEFINE_COLUMN_DATE(ICURSOR => ICURSOR, IPOSITION => 4); - PKG_SQL_DML.DEFINE_COLUMN_NUM(ICURSOR => ICURSOR, IPOSITION => 5); + PKG_SQL_DML.DEFINE_COLUMN_STR(ICURSOR => ICURSOR, IPOSITION => 3); + PKG_SQL_DML.DEFINE_COLUMN_NUM(ICURSOR => ICURSOR, IPOSITION => 4); + PKG_SQL_DML.DEFINE_COLUMN_DATE(ICURSOR => ICURSOR, IPOSITION => 5); + PKG_SQL_DML.DEFINE_COLUMN_NUM(ICURSOR => ICURSOR, IPOSITION => 6); /* Делаем выборку */ if (PKG_SQL_DML.EXECUTE(ICURSOR => ICURSOR) = 0) then null; @@ -3461,17 +3419,21 @@ create or replace package body PKG_P8PANELS_MECHREC as NPOSITION => 1, BCLEAR => true); PKG_P8PANELS_VISUAL.TROW_ADD_CUR_COLS(RROW => RDG_ROW, - SNAME => 'SDOC_INFO', + SNAME => 'SSTATE', ICURSOR => ICURSOR, NPOSITION => 2); + PKG_P8PANELS_VISUAL.TROW_ADD_CUR_COLS(RROW => RDG_ROW, + SNAME => 'SDOC_INFO', + ICURSOR => ICURSOR, + NPOSITION => 3); PKG_P8PANELS_VISUAL.TROW_ADD_CUR_COLN(RROW => RDG_ROW, SNAME => 'NQUANT_FACT', ICURSOR => ICURSOR, - NPOSITION => 3); + NPOSITION => 4); PKG_P8PANELS_VISUAL.TROW_ADD_CUR_COLD(RROW => RDG_ROW, SNAME => 'DDUE_DATE', ICURSOR => ICURSOR, - NPOSITION => 4); + NPOSITION => 5); /* Добавляем строку в таблицу */ PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_ROW(RDATA_GRID => RDG, RROW => RDG_ROW); end loop; @@ -3533,7 +3495,7 @@ create or replace package body PKG_P8PANELS_MECHREC as begin select F.NOMEN_MODIF into NRESULT - from FCPRODPLANSP T, + from FCPRODPLANSP T, FCMATRESOURCE F where T.RN = NFCPRODPLANSP and F.RN = T.MATRES; @@ -3579,7 +3541,40 @@ create or replace package body PKG_P8PANELS_MECHREC as SPARENT => 'NVALUE_BY_DAYS'); end loop; end INIT_DAYS; + + /* Расчет факта выпусков плана */ + procedure FCPRODPLANSP_CALC + ( + NFCPRODPLAN in number, -- Рег. номер планов и отчетов производства изделий + NCOMPANY in number -- Рег. номер организации + ) + is + NIDENT PKG_STD.TREF; -- Идентификатор отмеченных записей + NTMP PKG_STD.TREF; -- Буфер + begin + /* Генерируем идентификатор отмеченных записей */ + NIDENT := GEN_IDENT(); + /* Цикл по записям спецификации плана */ + for REC in (select T.RN from FCPRODPLANSP T where T.PRN = NFCPRODPLAN) + loop + /* Добавляем запись в отмеченные записи */ + P_SELECTLIST_INSERT(NIDENT => NIDENT, NDOCUMENT => REC.RN, SUNITCODE => 'CostProductPlansSpecs', NRN => NTMP); + end loop; + /* Расчет факта */ + P_FCPRODPLANSP_BASE_CALC_FACT(NCOMPANY => NCOMPANY, NIDENT => NIDENT); + /* Очистка отмеченных записей */ + P_SELECTLIST_CLEAR(NIDENT => NIDENT); + exception + when others then + /* Очистка отмеченных записей */ + P_SELECTLIST_CLEAR(NIDENT => NIDENT); + end FCPRODPLANSP_CALC; begin + /* Если это выбор плана */ + if (NINCLUDE_DEF = 1) then + /* Расчет факта выпусков плана */ + FCPRODPLANSP_CALC(NFCPRODPLAN => NFCPRODPLAN, NCOMPANY => NCOMPANY); + end if; /* Читем сортировки */ RO := PKG_P8PANELS_VISUAL.TORDERS_FROM_XML(CORDERS => CORDERS); /* Преобразуем номер и размер страницы в номер строк с и по */ @@ -3588,7 +3583,7 @@ create or replace package body PKG_P8PANELS_MECHREC as NROW_FROM => NROW_FROM, NROW_TO => NROW_TO); /* Инициализируем таблицу данных */ - RDG := PKG_P8PANELS_VISUAL.TDATA_GRID_MAKE(BFIXED_HEADER => true, NFIXED_COLUMNS => 6); + RDG := PKG_P8PANELS_VISUAL.TDATA_GRID_MAKE(BFIXED_HEADER => true, NFIXED_COLUMNS => 7); /* Описываем колонки таблицы данных */ PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG, SNAME => 'NRN', @@ -3629,6 +3624,13 @@ create or replace package body PKG_P8PANELS_MECHREC as BVISIBLE => true, BORDER => true, NWIDTH => 200); + PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG, + SNAME => 'SSUBDIV', + SCAPTION => 'Цех-получатель', + SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_STR, + BVISIBLE => true, + BORDER => true, + NWIDTH => 180); PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG, SNAME => 'NMAIN_QUANT', SCAPTION => 'План', @@ -3646,7 +3648,7 @@ create or replace package body PKG_P8PANELS_MECHREC as SCAPTION => 'Запущено', SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_NUMB, BVISIBLE => true, - NWIDTH => 80); + NWIDTH => 90); PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG, SNAME => 'NVALUE_BY_DAYS', SCAPTION => 'План/факт по дням', @@ -3682,6 +3684,7 @@ create or replace package body PKG_P8PANELS_MECHREC as PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' (select PORD.NUMB from FACEACC PORD where (PORD.RN = T.PROD_ORDER)) SPROD_ORDER,'); PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' MRES.CODE SMATRES_CODE,'); PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' MRES."NAME" SMATRES_NAME,'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' (select INS_D.CODE from INS_DEPARTMENT INS_D where INS_D.RN = T.SUBDIV) SSUBDIV,'); PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' T.MAIN_QUANT NMAIN_QUANT,'); PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' T.REL_FACT NREL_FACT,'); PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' (select COALESCE(sum(F.QUANT), ' || PKG_SQL_BUILD.WRAP_NUM(NVALUE => 0) || ')'); @@ -3702,6 +3705,7 @@ create or replace package body PKG_P8PANELS_MECHREC as PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' where P.RN = :NFCPRODPLAN'); PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' and P.COMPANY = :NCOMPANY'); PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' and T.PRN = P.RN'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' and T.MAIN_QUANT <> ' || PKG_SQL_BUILD.WRAP_NUM(NVALUE => 0)); PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' and T.MATRES = MRES.RN'); PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' and exists (select ' || PKG_SQL_BUILD.SET_HINT(SHINT => 'INDEX(UP I_USERPRIV_CATALOG_ROLEID)') || ' null'); PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' from USERPRIV UP'); @@ -3744,10 +3748,11 @@ create or replace package body PKG_P8PANELS_MECHREC as PKG_SQL_DML.DEFINE_COLUMN_STR(ICURSOR => ICURSOR, IPOSITION => 2); PKG_SQL_DML.DEFINE_COLUMN_STR(ICURSOR => ICURSOR, IPOSITION => 3); PKG_SQL_DML.DEFINE_COLUMN_STR(ICURSOR => ICURSOR, IPOSITION => 4); - PKG_SQL_DML.DEFINE_COLUMN_NUM(ICURSOR => ICURSOR, IPOSITION => 5); + PKG_SQL_DML.DEFINE_COLUMN_STR(ICURSOR => ICURSOR, IPOSITION => 5); PKG_SQL_DML.DEFINE_COLUMN_NUM(ICURSOR => ICURSOR, IPOSITION => 6); PKG_SQL_DML.DEFINE_COLUMN_NUM(ICURSOR => ICURSOR, IPOSITION => 7); PKG_SQL_DML.DEFINE_COLUMN_NUM(ICURSOR => ICURSOR, IPOSITION => 8); + PKG_SQL_DML.DEFINE_COLUMN_NUM(ICURSOR => ICURSOR, IPOSITION => 9); /* Делаем выборку */ if (PKG_SQL_DML.EXECUTE(ICURSOR => ICURSOR) = 0) then null; @@ -3772,18 +3777,19 @@ create or replace package body PKG_P8PANELS_MECHREC as SNAME => 'SMATRES_NAME', ICURSOR => ICURSOR, NPOSITION => 4); + PKG_P8PANELS_VISUAL.TROW_ADD_CUR_COLS(RROW => RDG_ROW, SNAME => 'SSUBDIV', ICURSOR => ICURSOR, NPOSITION => 5); PKG_P8PANELS_VISUAL.TROW_ADD_CUR_COLN(RROW => RDG_ROW, SNAME => 'NMAIN_QUANT', ICURSOR => ICURSOR, - NPOSITION => 5); + NPOSITION => 6); PKG_P8PANELS_VISUAL.TROW_ADD_CUR_COLN(RROW => RDG_ROW, SNAME => 'NREL_FACT', ICURSOR => ICURSOR, - NPOSITION => 6); + NPOSITION => 7); PKG_P8PANELS_VISUAL.TROW_ADD_CUR_COLN(RROW => RDG_ROW, SNAME => 'NFCROUTLST_QUANT', ICURSOR => ICURSOR, - NPOSITION => 7); + NPOSITION => 8); /* Считываем рег. номер связанной спецификации из "Производственная программа" */ NFCPRODPLANSP_MAIN := UTL_FCPRODPLANSP_MAIN_GET(NCOMPANY => NCOMPANY, NFCPRODPLANSP => NFCPRODPLANSP); /* Если есть связанная спецификация из производственной программы */ @@ -3798,39 +3804,54 @@ create or replace package body PKG_P8PANELS_MECHREC as NSUM_FACT := 0; /* Добавляем значения по графику сдачи */ for REC in (select TMP.DOC_DATE, - COALESCE(SUM(TMP.QUANT_PLAN), 0) QUANT_PLAN, - COALESCE(SUM(TMP.QUANT_FACT), 0) QUANT_FACT - from (select T.DOC_DATE, - T.QUANT_PLAN, - 0 QUANT_FACT + COALESCE(sum(TMP.QUANT_PLAN), 0) QUANT_PLAN, + COALESCE(sum(TMP.QUANT_FACT), 0) QUANT_FACT + from ( /* Указаны в спецификации */ + select T.DOC_DATE, + T.QUANT_PLAN, + 0 QUANT_FACT from FCPRODPLANDLVSH T where T.PRN = NFCPRODPLANSP and T.DOC_DATE >= DDATE_FROM and T.DOC_DATE <= DDATE_TO - union + union + /* Связаны со спецификацией плана или связанной строкой "Производственная программа" */ select D.WORK_DATE, - 0, - SUM(S.QUANT_FACT) - from FCROUTLST FL, - DOCLINKS DL, - INCOMEFROMDEPS D, - INCOMEFROMDEPSSPEC S - where FL.RN in (select SL.DOCUMENT - from SELECTLIST SL - where SL.IDENT = NFCROUTLST_IDENT - and SL.UNITCODE = 'CostRouteLists') - and FL.STATE = 1 - and DL.IN_DOCUMENT = FL.RN - and DL.IN_UNITCODE = 'CostRouteLists' - and DL.OUT_UNITCODE = 'IncomFromDeps' - and D.RN = DL.OUT_DOCUMENT - and D.DOC_STATE = 2 + 0, + sum(S.QUANT_FACT) + from INCOMEFROMDEPS D, + INCOMEFROMDEPSSPEC S + where ( /* Связь по МЛ связанной строки "Производственная программа" */ + (D.RN in (select DL.OUT_DOCUMENT + from SELECTLIST SL, + FCROUTLST FL, + DOCLINKS DL + where SL.IDENT = NFCROUTLST_IDENT + and SL.UNITCODE = 'CostRouteLists' + and FL.RN = SL.DOCUMENT + and FL.STATE = 1 + and DL.IN_DOCUMENT = FL.RN + and DL.IN_UNITCODE = 'CostRouteLists' + and DL.OUT_UNITCODE = 'IncomFromDeps')) or + /* Прямая связь со связанной строкой "Производственная программа" */ + (D.RN in (select L.OUT_DOCUMENT + from DOCLINKS L + where L.IN_DOCUMENT = NFCPRODPLANSP_MAIN + and L.IN_UNITCODE = 'CostProductPlansSpecs' + and L.OUT_UNITCODE = 'IncomFromDeps')) or + /* Прямая связь с обрабатываемой строкой */ + (D.RN in (select L.OUT_DOCUMENT + from DOCLINKS L + where L.IN_DOCUMENT = NFCPRODPLANSP + and L.IN_UNITCODE = 'CostProductPlansSpecs' + and L.OUT_UNITCODE = 'IncomFromDeps'))) + and D.DOC_STATE = NFCPRODPLAN_STATUS and D.WORK_DATE >= DDATE_FROM and D.WORK_DATE <= DDATE_TO and S.PRN = D.RN and S.NOMMODIF = NMODIF group by D.WORK_DATE) TMP - group by TMP.DOC_DATE) + group by TMP.DOC_DATE) loop /* Добавляем значение план/факт в соответствующую колонку */ PKG_P8PANELS_VISUAL.TROW_ADD_COL(RROW => RDG_ROW, @@ -3870,9 +3891,13 @@ create or replace package body PKG_P8PANELS_MECHREC as is NCOMPANY PKG_STD.TREF := GET_SESSION_COMPANY(); -- Организация сеанса NVERSION PKG_STD.TREF; -- Версия контрагентов + DDATE_FROM PKG_STD.TLDATE; -- Дата с + DDATE_TO PKG_STD.TLDATE; -- Дата по begin /* Считываем версию контрагентов */ FIND_VERSION_BY_COMPANY(NCOMPANY => NCOMPANY, SUNITCODE => 'AGNLIST', NVERSION => NVERSION); + /* Определяем период записей */ + P_FIRST_LAST_DAY(DCALCDATE => sysdate, DBGNDATE => DDATE_FROM, DENDDATE => DDATE_TO); /* Начинаем формирование XML */ PKG_XFAST.PROLOGUE(ITYPE => PKG_XFAST.CONTENT_); /* Открываем корень */ @@ -3882,7 +3907,7 @@ create or replace package body PKG_P8PANELS_MECHREC as DT.DOCCODE || ', ' || trim(P.PREFIX) || '-' || trim(P.NUMB) || ', ' || TO_CHAR(P.DOCDATE, 'dd.mm.yyyy') SDOC_INFO, D.CODE as SSUBDIV, - E.CODE as SPERIOD + TO_CHAR(E.STARTDATE, 'mm.yyyy') as SPERIOD from FCPRODPLAN P, FINSTATE FS, DOCTYPES DT, @@ -3891,7 +3916,6 @@ create or replace package body PKG_P8PANELS_MECHREC as where P.CATEGORY = NFCPRODPLAN_DEPT_CTGR and P.STATUS = NFCPRODPLAN_STATUS and P.COMPANY = NCOMPANY - and P.DOCDATE >= trunc(sysdate, 'mm') and P.SUBDIV in (select C.DEPTRN from CLNPSPFM C, CLNPSPFMTYPES CT @@ -3914,6 +3938,8 @@ create or replace package body PKG_P8PANELS_MECHREC as and D.RN = P.SUBDIV and DT.RN = P.DOCTYPE and E.RN = P.CALC_PERIOD + and E.STARTDATE >= DDATE_FROM + and E.ENDDATE <= DDATE_TO and exists (select /*+ INDEX(UP I_USERPRIV_JUR_PERS_ROLEID) */ null from USERPRIV UP From 548acf33d972cb8ba171e2008ac323554b86ddc5 Mon Sep 17 00:00:00 2001 From: davay-popozhe Date: Mon, 10 Jun 2024 11:27:20 +0300 Subject: [PATCH 76/76] =?UTF-8?q?=D0=A6=D0=98=D0=A2=D0=9A-823=20-=20=D0=A0?= =?UTF-8?q?=D0=B5=D0=B4=D0=B0=D0=BA=D1=82=D0=BE=D1=80=20=D0=BD=D0=B0=D1=81?= =?UTF-8?q?=D1=82=D1=80=D0=BE=D0=B9=D0=BA=D0=B8=20=D1=80=D0=B5=D0=B3=D0=BB?= =?UTF-8?q?=D0=B0=D0=BC=D0=B5=D0=BD=D1=82=D0=B8=D1=80=D0=BE=D0=B2=D0=B0?= =?UTF-8?q?=D0=BD=D0=BD=D0=BE=D0=B3=D0=BE=20=D0=BE=D1=82=D1=87=D1=91=D1=82?= =?UTF-8?q?=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/panels/rrp_conf_editor/custom_dialog.js | 155 ++++++ .../rrp_conf_editor/custom_form_control.js | 58 +++ .../rrp_conf_editor/custom_tab_panel.js | 41 ++ app/panels/rrp_conf_editor/index.js | 16 + app/panels/rrp_conf_editor/layouts.js | 46 ++ app/panels/rrp_conf_editor/rrp_conf_editor.js | 481 ++++++++++++++++++ db/PKG_P8PANELS_RRPCONFED.pck | 435 ++++++++++++++++ db/grants.sql | 1 + 8 files changed, 1233 insertions(+) create mode 100644 app/panels/rrp_conf_editor/custom_dialog.js create mode 100644 app/panels/rrp_conf_editor/custom_form_control.js create mode 100644 app/panels/rrp_conf_editor/custom_tab_panel.js create mode 100644 app/panels/rrp_conf_editor/index.js create mode 100644 app/panels/rrp_conf_editor/layouts.js create mode 100644 app/panels/rrp_conf_editor/rrp_conf_editor.js create mode 100644 db/PKG_P8PANELS_RRPCONFED.pck diff --git a/app/panels/rrp_conf_editor/custom_dialog.js b/app/panels/rrp_conf_editor/custom_dialog.js new file mode 100644 index 0000000..ec21389 --- /dev/null +++ b/app/panels/rrp_conf_editor/custom_dialog.js @@ -0,0 +1,155 @@ +/* + Кастомный Dialog +*/ + +//--------------------- +//Подключение библиотек +//--------------------- + +import React from "react"; //Классы React +import PropTypes from "prop-types"; //Контроль свойств компонента +import { Dialog, DialogTitle, IconButton, Icon, DialogContent, Typography, DialogActions, Button } from "@mui/material"; //Интерфейсные компоненты +import { CustomFormControl } from "./custom_form_control"; //Кастомные строки ввода +import { Statuses, STYLES } from "./layouts"; //Статусы и стили диалогового окна + +//----------- +//Тело модуля +//----------- + +const CustomDialog = props => { + const { + formOpen, + closeForm, + curStatus, + curCode, + curName, + curColCode, + curRowCode, + btnOkClick, + codeOnChange, + nameOnChange, + dictColumnClick, + dictRowClick + } = props; + + //Формирование заголовка диалогового окна + const formTitle = () => { + switch (curStatus) { + case Statuses.CREATE: + return "Добавление раздела"; + case Statuses.EDIT: + return "Исправление раздела"; + case Statuses.DELETE: + return "Удаление раздела"; + case Statuses.COLUMNROW_CREATE: + return "Добавление показателя раздела"; + case Statuses.COLUMNROW_EDIT: + return "Исправление показателя раздела"; + case Statuses.COLUMNROW_DELETE: + return "Удаление показателя раздела"; + } + }; + + //Отрисовка диалогового окна + const renderSwitch = () => { + var btnText = ""; + switch (curStatus) { + case Statuses.CREATE: + case Statuses.COLUMNROW_CREATE: + btnText = "Добавить"; + break; + case Statuses.EDIT: + case Statuses.COLUMNROW_EDIT: + btnText = "Исправить"; + break; + case Statuses.DELETE: + case Statuses.COLUMNROW_DELETE: + btnText = "Удалить"; + break; + } + return ( + + ); + }; + + return ( + + {formTitle()} + theme.palette.grey[500] + }} + > + close + + + {curStatus == Statuses.DELETE || curStatus == Statuses.COLUMNROW_DELETE ? ( + curStatus == Statuses.DELETE ? ( + Вы хотите удалить раздел {curName}? + ) : ( + Вы хотите удалить показатель раздела {curName}? + ) + ) : ( +
    + {curStatus != Statuses.COLUMNROW_EDIT ? ( + + ) : null} + + {curStatus == Statuses.COLUMNROW_CREATE ? ( +
    + + +
    + ) : null} +
    + )} +
    + + {renderSwitch()} + + +
    + ); +}; + +CustomDialog.propTypes = { + formOpen: PropTypes.bool.isRequired, + closeForm: PropTypes.func.isRequired, + curStatus: PropTypes.oneOf(Object.values(Statuses).filter(x => typeof x === "number")), + curCode: PropTypes.string, + curName: PropTypes.string, + curColCode: PropTypes.string, + curRowCode: PropTypes.string, + btnOkClick: PropTypes.func.isRequired, + codeOnChange: PropTypes.func.isRequired, + nameOnChange: PropTypes.func.isRequired, + dictColumnClick: PropTypes.func.isRequired, + dictRowClick: PropTypes.func.isRequired +}; + +//---------------- +//Интерфейс модуля +//---------------- + +export { CustomDialog }; diff --git a/app/panels/rrp_conf_editor/custom_form_control.js b/app/panels/rrp_conf_editor/custom_form_control.js new file mode 100644 index 0000000..2e9cc01 --- /dev/null +++ b/app/panels/rrp_conf_editor/custom_form_control.js @@ -0,0 +1,58 @@ +/* + Кастомный FormControl +*/ + +//--------------------- +//Подключение библиотек +//--------------------- + +import React from "react"; //Классы React +import PropTypes from "prop-types"; //Контроль свойств компонента +import { Box, FormControl, InputLabel, OutlinedInput, InputAdornment, IconButton, Icon } from "@mui/material"; //Интерфейсные компоненты +import { STYLES } from "./layouts"; //Стили диалогового окна + +//----------- +//Тело модуля +//----------- + +const CustomFormControl = props => { + const { elementCode, elementValue, labelText, changeFunc, withDictionary, ...other } = props; + + return ( + + + {labelText} + changeFunc(e.target.value) : null} + aria-describedby={`${elementCode}-outlined-helper-text`} + label={labelText} + endAdornment={ + withDictionary ? ( + + + list + + + ) : null + } + /> + + + ); +}; + +CustomFormControl.propTypes = { + elementCode: PropTypes.string.isRequired, + elementValue: PropTypes.string, + labelText: PropTypes.string.isRequired, + changeFunc: PropTypes.func.isRequired, + withDictionary: PropTypes.bool +}; + +//---------------- +//Интерфейс модуля +//---------------- + +export { CustomFormControl }; diff --git a/app/panels/rrp_conf_editor/custom_tab_panel.js b/app/panels/rrp_conf_editor/custom_tab_panel.js new file mode 100644 index 0000000..083db8e --- /dev/null +++ b/app/panels/rrp_conf_editor/custom_tab_panel.js @@ -0,0 +1,41 @@ +/* + Кастомный Tab +*/ + +//--------------------- +//Подключение библиотек +//--------------------- + +import React from "react"; //Классы React +import PropTypes from "prop-types"; //Контроль свойств компонента +import { Box, Typography } from "@mui/material"; //Интерфейсные компоненты + +//----------- +//Тело модуля +//----------- + +const CustomTabPanel = props => { + const { children, value, index, ...other } = props; + + return ( + + ); +}; + +CustomTabPanel.propTypes = { + children: PropTypes.node, + index: PropTypes.number.isRequired, + value: PropTypes.number.isRequired +}; + +//---------------- +//Интерфейс модуля +//---------------- + +export { CustomTabPanel }; diff --git a/app/panels/rrp_conf_editor/index.js b/app/panels/rrp_conf_editor/index.js new file mode 100644 index 0000000..f1804e9 --- /dev/null +++ b/app/panels/rrp_conf_editor/index.js @@ -0,0 +1,16 @@ +/* + Парус 8 - Панели мониторинга - Редактор настройки регламентированного отчёта + Панель мониторинга: Точка входа +*/ + +//--------------------- +//Подключение библиотек +//--------------------- + +import { RrpConfEditor } from "./rrp_conf_editor"; //Корневая панель выполнения работ + +//---------------- +//Интерфейс модуля +//---------------- + +export const RootClass = RrpConfEditor; \ No newline at end of file diff --git a/app/panels/rrp_conf_editor/layouts.js b/app/panels/rrp_conf_editor/layouts.js new file mode 100644 index 0000000..7e968df --- /dev/null +++ b/app/panels/rrp_conf_editor/layouts.js @@ -0,0 +1,46 @@ +/* + Парус 8 - + Дополнительная разметка и вёрстка клиентских элементов +*/ + +//--------------------- +//Подключение библиотек +//--------------------- + +import React from "react"; //Классы React +import { Stack, IconButton, Icon, Typography } from "@mui/material"; //Интерфейсные компоненты + +//--------- +//Константы +//--------- + +export const STYLES = { + DIALOG_WINDOW_WIDTH: { width: 400 }, + PADDING_DIALOG_BUTTONS_RIGHT: { paddingRight: "32px" } +}; + +//Статусы диалогового окна +export const Statuses = { CREATE: 0, EDIT: 1, DELETE: 2, COLUMNROW_CREATE: 3, COLUMNROW_EDIT: 4, COLUMNROW_DELETE: 5 }; + +//----------- +//Тело модуля +//----------- + +//Генерация представления ячейки c данными +export const dataCellRender = ({ row, columnDef }, editCR, deleteCR) => { + let data = row[columnDef.name]; + columnDef.name != "SROW_NAME" && data != undefined && columnDef.visible == true + ? (data = ( + + {row[columnDef.name]} + editCR(row["NRN_" + columnDef.name.substring(5)], row[columnDef.name])}> + edit + + deleteCR(row["NRN_" + columnDef.name.substring(5)], row[columnDef.name])}> + delete + + + )) + : null; + return { data }; +}; diff --git a/app/panels/rrp_conf_editor/rrp_conf_editor.js b/app/panels/rrp_conf_editor/rrp_conf_editor.js new file mode 100644 index 0000000..3cdc7db --- /dev/null +++ b/app/panels/rrp_conf_editor/rrp_conf_editor.js @@ -0,0 +1,481 @@ +/* + Парус 8 - Редактор настройки регламентированного отчёта +*/ + +//--------------------- +//Подключение библиотек +//--------------------- + +import React, { useCallback, useContext, useState, useEffect } from "react"; //Классы React +import { Box, Tab, Tabs, IconButton, Icon, Stack, Button } from "@mui/material"; //Интерфейсные компоненты +import { P8PDataGrid, P8P_DATA_GRID_SIZE } from "../../components/p8p_data_grid"; //Таблица данных +import { P8P_DATA_GRID_CONFIG_PROPS } from "../../config_wrapper"; //Подключение компонентов к настройкам приложения +import { BackEndСtx } from "../../context/backend"; //Контекст взаимодействия с сервером +import { NavigationCtx } from "../../context/navigation"; //Контекст навигации +import { CustomTabPanel } from "./custom_tab_panel"; //Кастомный Tab +import { ApplicationСtx } from "../../context/application"; //Контекст приложения +import { Statuses, dataCellRender } from "./layouts"; //Дополнительная разметка и вёрстка клиентских элементов +import { CustomDialog } from "./custom_dialog"; //Кастомное диалоговое окно + +//----------- +//Тело модуля +//----------- + +//Редактор настройки регламентированного отчёта +const RrpConfEditor = () => { + const dataGrid = { + rn: 0, + code: "", + name: "", + dataLoaded: false, + columnsDef: [], + groups: [], + rows: [], + reload: false + }; + + //Собственное состояние + const [rrpDoc, setRrpDoc] = useState({ + docLoaded: false, + sections: [], + reload: true + }); + + //Состояние массива данных разделов + const [dataGrids] = useState([]); + + //Состояние раздела + const [tabValue, setTabValue] = useState(""); + + //Состояние открытия диалогового окна + const [formOpen, setForm] = useState(false); + + //Состояние диалогового окна + const [formData, setFormData] = useState({ + filled: false, + rn: "", + prn: "", + sctnName: "", + sctnCode: "", + status: "", + code: "", + name: "", + colName: "", + colCode: "", + colVCode: "", + colVRn: 0, + rowName: "", + rowCode: "", + rowVCode: "", + rowVRn: 0 + }); + + //Открытие диалогового окна + const openForm = () => { + setForm(true); + }; + + //Закрытие диалогового окна + const closeForm = () => { + setForm(false); + }; + + //Очистка диалогового окна + const clearFormData = () => { + setFormData({ + rn: "", + code: "", + name: "" + }); + }; + + //Подключение к контексту взаимодействия с сервером + const { executeStored } = useContext(BackEndСtx); + + //Подключение к контексту приложения + const { pOnlineShowDictionary } = useContext(ApplicationСtx); + + //Подключение к контексту навигации + const { getNavigationSearch } = useContext(NavigationCtx); + + //Переключение раздела + const handleChange = (event, newValue) => { + setTabValue(newValue); + }; + + //Отработка нажатия на кнопку добавления секции + const addSectionClick = () => { + setFormData({ status: Statuses.CREATE, prn: Number(getNavigationSearch().NRN) }); + openForm(); + }; + + //Отработка нажатия на кнопку исправления секции + const editSectionClick = (rn, code, name) => { + setFormData({ rn: rn, code: code, name: name, status: Statuses.EDIT }); + openForm(); + }; + + //Отработка нажатия на кнопку удаления секции + const deleteSectionClick = (rn, code, name) => { + setFormData({ rn: rn, code: code, name: name, status: Statuses.DELETE }); + openForm(); + }; + + //Отработка нажатия на кнопку добавления показателя раздела + const addColumnRowClick = (prn, sctnCode, sctnName) => { + setFormData({ status: Statuses.COLUMNROW_CREATE, prn: prn, sctnCode: sctnCode, sctnName: sctnName }); + openForm(); + }; + + //Отработка нажатия на кнопку исправления показателя раздела + const editColumnRowClick = (rn, name) => { + setFormData({ status: Statuses.COLUMNROW_EDIT, rn: rn, name: name }); + openForm(); + }; + + //Отработка нажатия на кнопку удаления показателя раздела + const deleteColumnRowClick = (rn, name) => { + setFormData({ status: Statuses.COLUMNROW_DELETE, rn: rn, name: name }); + openForm(); + }; + + //Отработка нажатия на словарь граф + const dictColumnClick = () => { + pOnlineShowDictionary({ + unitCode: "RRPColumn", + callBack: res => + res.success === true + ? setFormData(pv => ({ + ...pv, + colCode: res.outParameters.out_CODE, + colVCode: res.outParameters.out_RRPVERSION_CODE, + colVRn: res.outParameters.out_RRPVERSION + })) + : null + }); + }; + + //Отработка нажатия на словарь строк + const dictRowClick = () => { + pOnlineShowDictionary({ + unitCode: "RRPRow", + callBack: res => + res.success === true + ? setFormData(pv => ({ + ...pv, + rowCode: res.outParameters.out_CODE, + rowVCode: res.outParameters.out_RRPVERSION_CODE, + rowVRn: res.outParameters.out_RRPVERSION + })) + : null + }); + }; + + //Нажатие на кнопку подтверждения создания/исправления/удаления на форме + const formBtnOkClick = () => { + let formStateProps = {}; + if (formData.status === (Statuses.CREATE || Statuses.EDIT || Statuses.COLUMNROW_CREATE)) + formStateProps = { ...formStateProps, code: document.querySelector("#code-outlined").value }; + if (formData.status === (Statuses.CREATE || Statuses.EDIT || Statuses.COLUMNROW_CREATE || Statuses.COLUMNROW_EDIT)) + formStateProps = { ...formStateProps, name: document.querySelector("#name-outlined").value }; + setFormData(pv => ({ + ...pv, + ...formStateProps, + filled: true + })); + closeForm(); + }; + + //Формирование разделов + const a11yProps = index => { + return { + id: `simple-tab-${index}`, + "aria-controls": `simple-tabpanel-${index}` + }; + }; + + //Отработка изменений в разделе или показателе раздела + const changeSections = useCallback(async () => { + if (formData.filled) { + switch (formData.status) { + case Statuses.CREATE: + insertSections(); + clearFormData(); + break; + case Statuses.EDIT: + updateSections(); + clearFormData(); + break; + case Statuses.DELETE: + deleteSections(); + clearFormData(); + break; + case Statuses.COLUMNROW_CREATE: + addColumnRow(); + clearFormData(); + break; + case Statuses.COLUMNROW_EDIT: + editColumnRow(); + clearFormData(); + break; + case Statuses.COLUMNROW_DELETE: + deleteColumnRow(); + clearFormData(); + break; + } + setRrpDoc(pv => ({ ...pv, reload: true })); + } + // eslint-disable-next-line react-hooks/exhaustive-deps + }, [formData]); + + //Добавление раздела + const insertSections = useCallback(async () => { + const data = await executeStored({ + stored: "PKG_P8PANELS_RRPCONFED.INSERT_RRPCONF_SECTIONS", + args: { + NPRN: formData.prn, + SCODE: formData.code, + SNAME: formData.name + } + }); + setFormData(pv => ({ + ...pv, + rn: Number(data.NRN) + })); + }, [formData.prn, formData.code, formData.name, executeStored]); + + //Исправление раздела + const updateSections = useCallback(async () => { + await executeStored({ + stored: "PKG_P8PANELS_RRPCONFED.UPDATE_RRPCONF_SECTIONS", + args: { + NRN: formData.rn, + SCODE: formData.code, + SNAME: formData.name + } + }); + }, [formData.name, formData.code, formData.rn, executeStored]); + + //Удаление раздела + const deleteSections = useCallback(async () => { + await executeStored({ + stored: "PKG_P8PANELS_RRPCONFED.DELETE_RRPCONF_SECTIONS", + args: { + NRN: formData.rn + } + }); + }, [formData.rn, executeStored]); + + //Добавление показателя раздела + const addColumnRow = useCallback(async () => { + await executeStored({ + stored: "PKG_P8PANELS_RRPCONFED.INSERT_RRPCONF_COLUMNROW", + args: { + NPRN: formData.prn, + SCODE: formData.code, + SNAME: formData.name, + SCOLCODE: formData.colCode, + SCOLVER: formData.colVCode, + SROWCODE: formData.rowCode, + SROWVER: formData.rowVCode + } + }); + }, [executeStored, formData.code, formData.colVCode, formData.colCode, formData.name, formData.prn, formData.rowCode, formData.rowVCode]); + + //Исправление показателя раздела + const editColumnRow = useCallback(async () => { + await executeStored({ + stored: "PKG_P8PANELS_RRPCONFED.UPDATE_RRPCONF_COLUMNROW", + args: { NRN: formData.rn, SNAME: formData.name } + }); + }, [executeStored, formData.name, formData.rn]); + + //Удаление показателя раздела + const deleteColumnRow = useCallback(async () => { + await executeStored({ stored: "PKG_P8PANELS_RRPCONFED.DELETE_RRPCONF_COLUMNROW", args: { NRN: formData.rn } }); + }, [executeStored, formData.rn]); + + //Получение мнемокода и наименования показателя раздела + const getSctnMrkCodeName = useCallback(async () => { + const data = await executeStored({ + stored: "PKG_P8PANELS_RRPCONFED.GET_RRPCONFSCTNMRK_CODE_NAME", + args: { SSCTNCODE: formData.sctnCode, SROWCODE: formData.rowCode, SCOLUMNCODE: formData.colCode } + }); + setFormData(pv => ({ + ...pv, + code: data.SCODE, + name: data.SNAME + })); + }, [executeStored, formData.colCode, formData.rowCode, formData.sctnCode]); + + //Загрузка данных разделов регламентированного отчёта + const loadData = useCallback(async () => { + if (rrpDoc.reload) { + //Переменная номера раздела с фокусом + let tabFocus = 0; + const data = await executeStored({ + stored: "PKG_P8PANELS_RRPCONFED.GET_RRPCONF_SECTIONS", + args: { + NRN_RRPCONF: Number(getNavigationSearch().NRN) + }, + respArg: "COUT" + }); + //Флаг первой загрузки данных + let firstLoad = dataGrids.length == 0 ? true : false; + //Копирование массива уже загруженных разделов + let cloneDGs = dataGrids.slice(); + //Массив из нескольких разделов и из одного + const sections = data.SECTIONS.length ? data.SECTIONS : [data.SECTIONS]; + //Заполнение очередного раздела по шаблону + sections.map(s => { + let dg = {}; + Object.assign(dg, dataGrid, { + rn: s.NRN, + code: s.SCODE, + name: s.SNAME, + dataLoaded: true, + columnsDef: [...(s.XDATA.XCOLUMNS_DEF || [])], + groups: [...(s.XDATA.XGROUPS || [])], + rows: [...(s.XDATA.XROWS || [])], + reload: false + }); + //Ищем загружен ли уже раздел с таким же ид. + const dgItem = dataGrids.find(x => x.rn === dg.rn); + //Его индекс, если нет соответствия, то -1 + let index = dataGrids.indexOf(dgItem); + //Если было соответствие + if (dgItem) { + //Если в нём не найдено изменений + if (JSON.stringify(dgItem, null, 4) === JSON.stringify(dg, null, 4)) { + //То из копированного массива его удаляем + cloneDGs.splice(cloneDGs.indexOf(cloneDGs.find(x => x.rn === dgItem.rn)), 1); + } else { + //Иначе обновляем раздел в массиве + dataGrids[index] = dg; + //Удаляем из копированного массива + cloneDGs.splice(cloneDGs.indexOf(cloneDGs.find(x => x.rn === dg.rn)), 1); + //Устанавливаем фокус на обновлённый раздел + tabFocus = index; + } + } else { + //Если раздел новый, то добавляем его в массив данных + dataGrids.push(dg); + //И устанавливаем на него фокус, если флаг первой загрузки = false + tabFocus = !firstLoad ? dataGrids.length - 1 : 0; + } + }); + //Обходим разделы, что остались в копированном массиве (на удаление) + cloneDGs.map(s => { + let curIndex = dataGrids.indexOf(dataGrids.find(x => x.rn === s.rn)); + //Устаревший раздел удаляем из массива данных + dataGrids.splice(curIndex, 1); + //Фокус на предшествующий раздел + tabFocus = curIndex - 1; + }); + setRrpDoc(pv => ({ + ...pv, + docLoaded: true, + reload: false, + sections: dataGrids + })); + setTabValue(tabFocus); + } + // eslint-disable-next-line react-hooks/exhaustive-deps + }, [rrpDoc.reload, rrpDoc.docLoaded, dataGrid.reload, dataGrid.docLoaded, executeStored]); + + //При необходимости обновить данные таблицы + useEffect(() => { + loadData(); + }, [rrpDoc.reload, dataGrid.reload, loadData]); + + //Обновление при изменении разделов + useEffect(() => { + changeSections(); + }, [changeSections]); + + //Получение наименования и мнемокода показателя раздела при заполнении необходимых полей + useEffect(() => { + formData.status == Statuses.COLUMNROW_CREATE && formData.sctnName && formData.sctnCode && formData.colCode && formData.rowCode + ? getSctnMrkCodeName() + : null; + }, [formData.colCode, formData.rowCode, formData.sctnCode, formData.sctnName, formData.status, getSctnMrkCodeName]); + + //Генерация содержимого + return ( + + {formOpen ? ( + setFormData(pv => ({ ...pv, code: v }))} + nameOnChange={v => setFormData(pv => ({ ...pv, name: v }))} + dictColumnClick={dictColumnClick} + dictRowClick={dictRowClick} + /> + ) : null} + {rrpDoc.docLoaded ? ( + + + + {rrpDoc.sections.map((s, i) => { + return ( + + {s.name} + editSectionClick(s.rn, s.code, s.name)}> + edit + + deleteSectionClick(s.rn, s.code, s.name)}> + delete + + + } + wrapped + /> + ); + })} + + + add + + + {rrpDoc.sections.map((s, i) => { + return ( + + + {s.dataLoaded ? ( + dataCellRender({ ...prms }, editColumnRowClick, deleteColumnRowClick)} + /> + ) : null} + + ); + })} + + ) : null} + + ); +}; + +//---------------- +//Интерфейс модуля +//---------------- + +export { RrpConfEditor }; diff --git a/db/PKG_P8PANELS_RRPCONFED.pck b/db/PKG_P8PANELS_RRPCONFED.pck new file mode 100644 index 0000000..74be876 --- /dev/null +++ b/db/PKG_P8PANELS_RRPCONFED.pck @@ -0,0 +1,435 @@ +create or replace package PKG_P8PANELS_RRPCONFED as + + /* Добавление раздела регламентированного отчёта */ + procedure INSERT_RRPCONF_SECTIONS + ( + NPRN in number, -- Ид. настройки форм регламентированного отчёта + SCODE in varchar2, -- Мнемокод + SNAME in varchar2, -- Наименование + NRN out number -- Ид. созданной записи + ); + + /* Исправление раздела регламентированного отчёта */ + procedure UPDATE_RRPCONF_SECTIONS + ( + NRN in number, -- Ид. раздела + SCODE in varchar2, -- Мнемокод раздела + SNAME in varchar2 -- Наименование раздела + ); + + /* Удаление раздела регламентированного отчёта */ + procedure DELETE_RRPCONF_SECTIONS + ( + NRN in number -- Ид. раздела + ); + + /* Добавление показателя раздела регламентированного отчёта */ + procedure INSERT_RRPCONF_COLUMNROW + ( + NPRN in number, -- Ид. раздела + SCODE in varchar2, -- Мнемокод показателя раздела + SNAME in varchar2, -- Наименование показателя раздела + SCOLCODE in varchar2, -- Мнемокод графы + SCOLVER in varchar2, -- Мнемокод редакции графы + SROWCODE in varchar2, -- Мнемокод строки + SROWVER in varchar2, -- Мнемокод редакции строки + NRN out number -- Ид. созданной записи + ); + + /* Исправление показателя раздела регламентированного отчёта */ + procedure UPDATE_RRPCONF_COLUMNROW + ( + NRN in number, -- Ид. показателя раздела + SNAME in varchar2 -- Новое наименование + ); + + /* Удаление показателя раздела регламентированного отчёта */ + procedure DELETE_RRPCONF_COLUMNROW + ( + NRN in number -- Ид. показателя раздела + ); + + /* Формирование кода и наименования показателя раздела регламентированного отчёта */ + procedure GET_RRPCONFSCTNMRK_CODE_NAME + ( + SSCTNCODE in varchar2, -- Мнемокод раздела + SROWCODE in varchar2, -- Мнемокод строки + SCOLUMNCODE in varchar2, -- Мнемокод графы + SCODE out varchar2, -- Мнемокод показателя раздела + SNAME out varchar2 -- Наименование показателя раздела + ); + + /* Получение разделов регламентированного отчёта */ + procedure GET_RRPCONF_SECTIONS + ( + NRN_RRPCONF in number, -- Ид. нстройки форм регламентированного отчёта + COUT out clob -- Список разделов + ); + +end PKG_P8PANELS_RRPCONFED; +/ +create or replace package body PKG_P8PANELS_RRPCONFED as + + /* Добавление раздела регламентированного отчёта */ + procedure INSERT_RRPCONF_SECTIONS + ( + NPRN in number, -- Ид. настройки форм регламентированного отчёта + SCODE in varchar2, -- Мнемокод + SNAME in varchar2, -- Наименование + NRN out number -- Ид. созданной записи + ) + is + NCOMPANY PKG_STD.TREF := GET_SESSION_COMPANY(); -- Рег. номер организации + begin + P_RRPCONFSCTN_INSERT(NCOMPANY => NCOMPANY, + NPRN => NPRN, + SCODE => SCODE, + SNAME => SNAME, + SRRPCONFSCTN => null, + SRRPPRMGRP => null, + SNOTE => null, + NHTML_HIDE => 0, + NHTML_HIDE_NAME_COL => 0, + NHTML_MAKE_HIER_GRP => 0, + SCLSF_CODE => null, + NLINKS_UPDATE => 0, + NDUP_RN => null, + NRN => NRN); + end INSERT_RRPCONF_SECTIONS; + + /* Исправление раздела регламентированного отчёта */ + procedure UPDATE_RRPCONF_SECTIONS + ( + NRN in number, -- Ид. раздела + SCODE in varchar2, -- Мнемокод раздела + SNAME in varchar2 -- Наименование раздела + ) + is + NCOMPANY PKG_STD.TREF := GET_SESSION_COMPANY(); -- Рег. номер организации + begin + P_RRPCONFSCTN_UPDATE(NRN => NRN, + NCOMPANY => NCOMPANY, + SCODE => SCODE, + SNAME => SNAME, + SRRPCONFSCTN => null, + SRRPPRMGRP => null, + SNOTE => null, + NHTML_HIDE => 0, + NHTML_HIDE_NAME_COL => 0, + NHTML_MAKE_HIER_GRP => 0, + SCLSF_CODE => null, + NFORMULA_UPDATE => 0, + NMARK_UPDATE => 0); + end UPDATE_RRPCONF_SECTIONS; + + /* Удаление раздела регламентированного отчёта */ + procedure DELETE_RRPCONF_SECTIONS + ( + NRN in number -- Ид. раздела + ) + is + NCOMPANY PKG_STD.TREF := GET_SESSION_COMPANY(); -- Рег. номер организации + begin + P_RRPCONFSCTN_DELETE(NRN => NRN, NCOMPANY => NCOMPANY); + end DELETE_RRPCONF_SECTIONS; + + /* Добавление показателя раздела регламентированного отчёта */ + procedure INSERT_RRPCONF_COLUMNROW + ( + NPRN in number, -- Ид. раздела + SCODE in varchar2, -- Мнемокод показателя раздела + SNAME in varchar2, -- Наименование показателя раздела + SCOLCODE in varchar2, -- Мнемокод графы + SCOLVER in varchar2, -- Мнемокод редакции графы + SROWCODE in varchar2, -- Мнемокод строки + SROWVER in varchar2, -- Мнемокод редакции строки + NRN out number -- Ид. созданной записи + ) + is + NCOMPANY PKG_STD.TREF := GET_SESSION_COMPANY(); -- Рег. номер организации + NCOUNT PKG_STD.TNUMBER; -- Счётчик показателей раздела + begin + select count(*) into NCOUNT from RRPCONFSCTNMRK T where T.PRN = NPRN; + P_RRPCONFSCTNMRK_INSERT(NCOMPANY => NCOMPANY, + NPRN => NPRN, + NNUMB => NCOUNT + 1, + SCODE => SCODE, + SNAME => SNAME, + SRRPROW => SROWCODE, + SRRPVERSION_ROW => SROWVER, + SRRPCOLUMN => SCOLCODE, + SRRPVERSION_COLUMN => SCOLVER, + SPKG_ROW => null, + SPRC_ROW => null, + SPKG_COL => null, + SPRC_COL => null, + SRRPPRM => null, + NIGNORE_ZOOM => 0, + NIGNORE_SHARP => 0, + SCLSF_CODE => null, + SNOTE => null, + NDUP_RN => null, + NRN => NRN); + end INSERT_RRPCONF_COLUMNROW; + + /* Исправление показателя раздела регламентированного отчёта */ + procedure UPDATE_RRPCONF_COLUMNROW + ( + NRN in number, -- Ид. показателя раздела + SNAME in varchar2 -- Новое наименование + ) + is + NCOMPANY PKG_STD.TREF := GET_SESSION_COMPANY(); -- Рег. номер организации + NNUMB PKG_STD.TNUMBER; -- Номер показателя раздела + SCODE PKG_STD.TSTRING; -- Мнемокод показателя раздела + SCOLCODE PKG_STD.TSTRING; -- Мнемокод графы + SCOLVER PKG_STD.TSTRING; -- Мнемокод редакции графы + SROWCODE PKG_STD.TSTRING; -- Мнемокод строки + SROWVER PKG_STD.TSTRING; -- Мнемокод редакции строки + begin + select T.NUMB, + T.CODE, + R.CODE, + RVER.CODE, + C.CODE, + CVER.CODE + into NNUMB, + SCODE, + SROWCODE, + SROWVER, + SCOLCODE, + SCOLVER + from RRPCONFSCTNMRK T, + RRPCOLUMN C, + RRPVERSION CVER, + RRPROW R, + RRPVERSION RVER + where T.RN = NRN + and T.RRPROW = R.RN(+) + and R.RRPVERSION = RVER.RN(+) + and T.RRPCOLUMN = C.RN(+) + and C.RRPVERSION = CVER.RN(+); + P_RRPCONFSCTNMRK_UPDATE(NRN => NRN, + NCOMPANY => NCOMPANY, + NNUMB => NNUMB, + SCODE => SCODE, + SNAME => SNAME, + SRRPROW => SROWCODE, + SRRPVERSION_ROW => SROWVER, + SRRPCOLUMN => SCOLCODE, + SRRPVERSION_COLUMN => SCOLVER, + SPKG_ROW => null, + SPRC_ROW => null, + SPKG_COL => null, + SPRC_COL => null, + SRRPPRM => null, + NIGNORE_ZOOM => 0, + NIGNORE_SHARP => 0, + SCLSF_CODE => null, + NFORMULA_UPDATE => 0, + SNOTE => null); + end UPDATE_RRPCONF_COLUMNROW; + + /* Удаление показателя раздела регламентированного отчёта */ + procedure DELETE_RRPCONF_COLUMNROW + ( + NRN in number -- Ид. показателя раздела + ) + is + NCOMPANY PKG_STD.TREF := GET_SESSION_COMPANY(); -- Рег. номер организации + begin + P_RRPCONFSCTNMRK_DELETE(NCOMPANY => NCOMPANY, NRN => NRN); + end DELETE_RRPCONF_COLUMNROW; + + /* Формирование кода и наименования показателя раздела регламентированного отчёта */ + procedure GET_RRPCONFSCTNMRK_CODE_NAME + ( + SSCTNCODE in varchar2, -- Мнемокод раздела + SROWCODE in varchar2, -- Мнемокод строки + SCOLUMNCODE in varchar2, -- Мнемокод графы + SCODE out varchar2, -- Мнемокод показателя раздела + SNAME out varchar2 -- Наименование показателя раздела + ) + is + NCOMPANY PKG_STD.TREF := GET_SESSION_COMPANY(); -- Рег. номер организации + NROWRN PKG_STD.TREF; -- Ид. строки + NCOLUMNRN PKG_STD.TREF; -- Ид. графы + begin + P_RRPCONFSCTNMRK_MAKE_CODE(SRRPCONFSCTN => SSCTNCODE, + SRRPROW => SROWCODE, + SRRPCOLUMN => SCOLUMNCODE, + SCODE => SCODE); + select R.RN into NROWRN from RRPROW R where R.CODE = SROWCODE; + select C.RN into NCOLUMNRN from RRPCOLUMN C where C.CODE = SCOLUMNCODE; + P_RRPCONFSCTNMRK_MAKE_NAME(NCOMPANY => NCOMPANY, + NRRPROW => NROWRN, + NRRPCOLUMN => NCOLUMNRN, + NCHANGE_NAME => 1, + NCHANGE_NAME_PARENT => 0, + SNAME => SNAME); + end GET_RRPCONFSCTNMRK_CODE_NAME; + + /* Получение разделов регламентированного отчёта */ + procedure GET_RRPCONF_SECTIONS + ( + NRN_RRPCONF in number, -- Ид. нстройки форм регламентированного отчёта + COUT out clob -- Список разделов + ) + is + NVERSION PKG_STD.TREF; -- Рег. номер версии словаря контрагентов + RDG PKG_P8PANELS_VISUAL.TDATA_GRID; -- Описание таблицы + RDG_ROW PKG_P8PANELS_VISUAL.TROW; -- Строка таблицы + CDG clob; -- XML данных раздела + CCURCLOB clob; -- XML текущего раздела + NCURRN PKG_STD.TREF; -- Ид. текущего раздела + SCURCODE PKG_STD.TSTRING; -- Мнемокод текущего раздела + SCURNAME PKG_STD.TSTRING; -- Наименование текущего раздела + SCUR_ROW PKG_STD.TSTRING := 'default'; -- Текущая строка таблицы + CXML PKG_CONTVALLOC2NS.TCONTAINER; -- Контейнер для данных XML + + /* Курсор с отбором показателей раздела по ид. раздела */ + cursor C1 (NSCTN_RN in number) is + select T.RN NRN, + T.PRN NPRN, + T.RRPCONF NRRPCONF, + T.RRPPRM NRRPPRM, + T.CODE SCODE, + T.NAME SNAME, + R.CODE SROW_CODE, + R.NAME SROW_NAME, + C.CODE SCOLUMN_CODE, + C.NAME SCOLUMN_NAME + from RRPCONFSCTNMRK T, + RRPROW R, + RRPCOLUMN C + where T.PRN in (select T2.RN + from RRPCONFSCTN T2 + where T2.PRN = NRN_RRPCONF + and T2.VERSION = NVERSION) + and T.VERSION = NVERSION + and T.RRPROW = R.RN (+) + and T.RRPCOLUMN = C.RN (+) + and T.PRN = NSCTN_RN + order by T.CODE; + + /* Курсор с отбором граф раздела по ид. раздела */ + cursor CN (NSCTN_RN in number) is + select distinct(C.CODE) SCOLUMN_CODE, + C.NAME SCOLUMN_NAME + from RRPCONFSCTNMRK T, + RRPCOLUMN C + where T.PRN in (select T2.RN + from RRPCONFSCTN T2 + where T2.PRN = NRN_RRPCONF + and T2.VERSION = NVERSION) + and T.VERSION = NVERSION + and T.RRPCOLUMN = C.RN (+) + and T.PRN = NSCTN_RN + order by SCOLUMN_CODE; + begin + /* Очистка контейнера */ + PKG_CONTVALLOC2NS.PURGE(RCONTAINER => CXML); + /* Определение версии раздела */ + NVERSION := GET_SESSION_VERSION(SUNITCODE => 'RRPConfig'); + /* Цикл по разделам настройки форм регламентированного отчёта */ + for C in (select T.RN NRN, + T.VERSION NVERSION, + T.CRN NCRN, + T.PRN NPRN, + T.CODE SCODE, + T.NAME SNAME + from RRPCONFSCTN T + where T.PRN = NRN_RRPCONF + and T.VERSION = NVERSION) + loop + /* Инициализируем таблицу данных */ + RDG := PKG_P8PANELS_VISUAL.TDATA_GRID_MAKE(); + /* Формируем структуру заголовка */ + PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG, + SNAME => 'SROW_NAME', + SCAPTION => 'Наименование строки', + SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_STR); + /* Цикл формирования колонок с графами */ + for CL in CN(C.NRN) + loop + PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG, + SNAME => 'SCOL_' || CL.SCOLUMN_CODE, + SCAPTION => CL.SCOLUMN_NAME, + SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_STR); + PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG, + SNAME => 'NRN_' || CL.SCOLUMN_CODE, + SCAPTION => CL.SCOLUMN_NAME || ' Идентификаторы', + SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_NUMB, + BVISIBLE => false); + end loop; + /* Для нового раздела очищаем переменную кода строки */ + SCUR_ROW := 'default'; + /* Инициализируем строку */ + RDG_ROW := PKG_P8PANELS_VISUAL.TROW_MAKE(); + /* Цикл заполнения строк данными о показателях раздела */ + for CR in C1(C.NRN) + loop + /* Если новая строка */ + if (SCUR_ROW != CR.SROW_CODE) then + /* Если строка не первая */ + if (SCUR_ROW != 'default') then + /* Добавим строку для раздела */ + PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_ROW(RDATA_GRID => RDG, RROW => RDG_ROW); + /* Инициализируем новую строку */ + RDG_ROW := PKG_P8PANELS_VISUAL.TROW_MAKE(); + end if; + /* Запоминаем мнемокод новой строки */ + SCUR_ROW := CR.SROW_CODE; + /* Заполняем наименование строки */ + PKG_P8PANELS_VISUAL.TROW_ADD_COL(RROW => RDG_ROW, SNAME => 'SROW_NAME', SVALUE => CR.SROW_NAME); + end if; + /* Заполняем наименование показателя раздела */ + PKG_P8PANELS_VISUAL.TROW_ADD_COL(RROW => RDG_ROW, SNAME => 'SCOL_' || CR.SCOLUMN_CODE, SVALUE => CR.SNAME); + /* Заполняем ид. показателя раздела */ + PKG_P8PANELS_VISUAL.TROW_ADD_COL(RROW => RDG_ROW, SNAME => 'NRN_' || CR.SCOLUMN_CODE, NVALUE => CR.NRN); + end loop; + /* Добавим последнюю строку для раздела */ + PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_ROW(RDATA_GRID => RDG, RROW => RDG_ROW); + /* Сериализуем описание */ + CDG := PKG_P8PANELS_VISUAL.TDATA_GRID_TO_XML(RDATA_GRID => RDG, NINCLUDE_DEF => 1); + /* Заполняем контейнер данными о разделе */ + PKG_CONTVALLOC2NS.PUTS(RCONTAINER => CXML, NTABID => C.NRN, SROWID => C.NRN || '_CODE', SVALUE => C.SCODE); + PKG_CONTVALLOC2NS.PUTS(RCONTAINER => CXML, NTABID => C.NRN, SROWID => C.NRN || '_NAME', SVALUE => C.SNAME); + PKG_CONTVALLOC2NS.PUTLC(RCONTAINER => CXML, NTABID => C.NRN, SROWID => C.NRN || '_CLOB', LCVALUE => CDG); + end loop; + /* Формируем XML с данными */ + PKG_XFAST.PROLOGUE(ITYPE => PKG_XFAST.CONTENT_); + PKG_XFAST.DOWN_NODE(SNAME => 'DATA'); + /* Цикл по контейнеру с данными о разделах */ + for X in 1 .. PKG_CONTVALLOC2NS.COUNT_(RCONTAINER => CXML) + loop + /* Ид. раздела */ + if (X = 1) then + NCURRN := PKG_CONTVALLOC2NS.FIRST_(RCONTAINER => CXML); + else + NCURRN := PKG_CONTVALLOC2NS.NEXT_(RCONTAINER => CXML, NTABID => NCURRN); + end if; + /* Мнемокод раздела */ + SCURCODE := PKG_CONTVALLOC2NS.GETS(RCONTAINER => CXML, NTABID => NCURRN, SROWID => NCURRN || '_CODE'); + /* Наименование раздела */ + SCURNAME := PKG_CONTVALLOC2NS.GETS(RCONTAINER => CXML, NTABID => NCURRN, SROWID => NCURRN || '_NAME'); + /* Clob с показателями раздела */ + CCURCLOB := PKG_CONTVALLOC2NS.GETLC(RCONTAINER => CXML, NTABID => NCURRN, SROWID => NCURRN || '_CLOB'); + /* Формирование элемента XML с данными о разделе */ + PKG_XFAST.DOWN_NODE(SNAME => 'SECTIONS'); + PKG_XFAST.ATTR(SNAME => 'NRN', NVALUE => NCURRN); + PKG_XFAST.ATTR(SNAME => 'SCODE', SVALUE => SCURCODE); + PKG_XFAST.ATTR(SNAME => 'SNAME', SVALUE => SCURNAME); + PKG_XFAST.VALUE_XML(LCVALUE => CCURCLOB); + PKG_XFAST.UP(); + end loop; + PKG_XFAST.UP(); + /* Сериализуем описание */ + COUT := PKG_XFAST.SERIALIZE_TO_CLOB(); + PKG_XFAST.EPILOGUE(); + /* Очистка контейнера */ + PKG_CONTVALLOC2NS.PURGE(RCONTAINER => CXML); + end GET_RRPCONF_SECTIONS; + +end PKG_P8PANELS_RRPCONFED; +/ diff --git a/db/grants.sql b/db/grants.sql index 695a5a6..c12f082 100644 --- a/db/grants.sql +++ b/db/grants.sql @@ -2,3 +2,4 @@ grant execute on PKG_P8PANELS to public; grant execute on PKG_P8PANELS_PROJECTS to public; grant execute on PKG_P8PANELS_SAMPLES to public; grant execute on PKG_P8PANELS_EQUIPSRV to public; +grant execute on PKG_P8PANELS_RRPCONFED to public; \ No newline at end of file

    Q}; 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¥&<8{hDjcyK#s_YLId1j}Krp89p-0h1} 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⋙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 Date: Sat, 25 May 2024 00:52:49 +0300 Subject: [PATCH 60/76] =?UTF-8?q?WEB=20APP:=20=D0=A1=D0=B2=D0=B5=D0=B6?= =?UTF-8?q?=D0=B0=D1=8F=20=D1=81=D0=B1=D0=BE=D1=80=D0=BA=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- dist/p8-panels.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dist/p8-panels.js b/dist/p8-panels.js index bb98985..8c9022d 100644 --- a/dist/p8-panels.js +++ b/dist/p8-panels.js @@ -3557,7 +3557,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ P8PGantt: () => (/* binding */ P8PGantt),\n/* harmony export */ P8P_GANTT_TASK_ATTRIBUTE_SHAPE: () => (/* binding */ P8P_GANTT_TASK_ATTRIBUTE_SHAPE),\n/* harmony export */ P8P_GANTT_TASK_COLOR_SHAPE: () => (/* binding */ P8P_GANTT_TASK_COLOR_SHAPE),\n/* harmony export */ P8P_GANTT_TASK_SHAPE: () => (/* binding */ P8P_GANTT_TASK_SHAPE),\n/* harmony export */ taskLegendDesc: () => (/* binding */ taskLegendDesc)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! prop-types */ \"./node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/ListItemText/ListItemText.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Dialog/Dialog.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/DialogContent/DialogContent.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/List/List.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/ListItem/ListItem.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Divider/Divider.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/TextField/TextField.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Slider/Slider.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/DialogActions/DialogActions.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Button/Button.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Typography/Typography.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Link/Link.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Box/Box.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/IconButton/IconButton.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Icon/Icon.js\");\n/* harmony import */ var _p8p_app_message__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./p8p_app_message */ \"./app/components/p8p_app_message.js\");\n/*\r\n Парус 8 - Панели мониторинга\r\n Компонент: Диаграмма Ганта\r\n*/\n\n//---------------------\n//Подключение библиотек\n//---------------------\n\n //Классы React\n //Контроль свойств компонента\n //Интерфейсные компоненты\n //Встраиваемое сообщение об ошибке\n\n//---------\n//Константы\n//---------\n\n//Уровни масштаба\nconst P8P_GANTT_ZOOM = [0, 1, 2, 3, 4];\n\n//Уровни масштаба (строковые наименования в терминах библиотеки)\nconst P8P_GANTT_ZOOM_VIEW_MODES = {\n 0: \"Quarter Day\",\n 1: \"Half Day\",\n 2: \"Day\",\n 3: \"Week\",\n 4: \"Month\"\n};\n\n//Структура задачи\nconst P8P_GANTT_TASK_SHAPE = prop_types__WEBPACK_IMPORTED_MODULE_2___default().shape({\n id: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().string).isRequired,\n rn: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().number).isRequired,\n numb: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().string).isRequired,\n name: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().string).isRequired,\n fullName: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().string).isRequired,\n start: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().string).isRequired,\n end: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().string).isRequired,\n progress: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().number),\n dependencies: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().array),\n readOnly: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().bool),\n readOnlyDates: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().bool),\n readOnlyProgress: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().bool),\n bgColor: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().string),\n textColor: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().string),\n bgProgressColor: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().string)\n});\n\n//Структура динамического атрибута задачи\nconst P8P_GANTT_TASK_ATTRIBUTE_SHAPE = prop_types__WEBPACK_IMPORTED_MODULE_2___default().shape({\n name: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().string).isRequired,\n caption: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().string).isRequired\n});\n\n//Структура описания цвета задачи\nconst P8P_GANTT_TASK_COLOR_SHAPE = prop_types__WEBPACK_IMPORTED_MODULE_2___default().shape({\n bgColor: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().string),\n textColor: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().string),\n bgProgressColor: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().string),\n desc: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().string).isRequired\n});\n\n//Стили\nconst STYLES = {\n TASK_EDITOR_CONTENT: {\n minWidth: 400,\n overflowX: \"auto\"\n },\n TASK_EDITOR_LIST: {\n width: \"100%\",\n minWidth: 300,\n maxWidth: 700,\n bgcolor: \"background.paper\"\n }\n};\n\n//--------------------------------\n//Вспомогательные классы и функции\n//--------------------------------\n\n//Проверка существования значения\nconst hasValue = value => typeof value !== \"undefined\" && value !== null && value !== \"\";\n\n//Формирование описания для легенды\nconst taskLegendDesc = ({\n task,\n taskColors\n}) => {\n if (Array.isArray(taskColors) && taskColors.length > 0) {\n const colorDesc = taskColors.find(color => task.bgColor === color.bgColor && task.textColor === color.textColor && task.bgProgressColor === color.bgProgressColor);\n if (colorDesc) return {\n text: colorDesc.desc,\n style: {\n ...(colorDesc.bgProgressColor ? {\n background: `linear-gradient(to right, ${colorDesc.bgProgressColor} ,${colorDesc.bgColor ? colorDesc.bgColor : \"transparent\"})`\n } : colorDesc.bgColor ? {\n backgroundColor: colorDesc.bgColor\n } : {}),\n ...(colorDesc.textColor ? {\n color: colorDesc.textColor\n } : {})\n }\n };else return null;\n } else return null;\n};\n\n//Редактор задачи\nconst P8PGanttTaskEditor = ({\n task,\n taskAttributes,\n taskColors,\n onOk,\n onCancel,\n taskAttributeRenderer,\n taskDialogRenderer,\n numbCaption,\n nameCaption,\n startCaption,\n endCaption,\n progressCaption,\n legendCaption,\n okBtnCaption,\n cancelBtnCaption\n}) => {\n //Собственное состояние\n const [state, setState] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({\n start: task.start,\n end: task.end,\n progress: task.progress\n });\n\n //Отображаемые атрибуты\n const dispTaskAttributes = Array.isArray(taskAttributes) && taskAttributes.length > 0 ? taskAttributes.filter(attr => attr.visible && hasValue(task[attr.name])) : [];\n\n //При сохранении\n const handleOk = () => onOk && state.start && state.end ? onOk({\n task,\n start: state.start,\n end: state.end,\n progress: state.progress\n }) : null;\n\n //При отмене\n const handleCancel = () => onCancel ? onCancel() : null;\n\n //При изменении сроков\n const handlePeriodChanged = e => setState(prev => ({\n ...prev,\n [e.target.name]: e.target.value\n }));\n\n //При изменении прогресса\n const handleProgressChanged = (e, newValue) => setState(prev => ({\n ...prev,\n progress: newValue\n }));\n\n //Описание легенды для задачи\n const legendDesc = taskLegendDesc({\n task,\n taskColors\n });\n let legend = legendDesc ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n secondaryTypographyProps: {\n p: 1,\n sx: legendDesc.style\n },\n primary: legendCaption,\n secondary: legendDesc.text\n }) : null;\n\n //Генерация содержимого\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n open: true,\n onClose: handleCancel\n }, taskDialogRenderer ? taskDialogRenderer({\n task,\n taskAttributes,\n taskColors,\n close: handleCancel\n }) : /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_5__[\"default\"], {\n sx: STYLES.TASK_EDITOR_CONTENT\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n sx: STYLES.TASK_EDITOR_LIST\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_7__[\"default\"], {\n alignItems: \"flex-start\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n primary: numbCaption,\n secondary: task.numb\n })), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_8__[\"default\"], {\n component: \"li\"\n }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_7__[\"default\"], {\n alignItems: \"flex-start\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n primary: nameCaption,\n secondary: task.fullName\n })), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_8__[\"default\"], {\n component: \"li\"\n }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_7__[\"default\"], {\n alignItems: \"flex-start\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n secondaryTypographyProps: {\n component: \"span\"\n },\n primary: startCaption,\n secondary: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_9__[\"default\"], {\n error: !state.start,\n disabled: task.readOnly === true || task.readOnlyDates === true,\n name: \"start\",\n fullWidth: true,\n required: true,\n InputLabelProps: {\n shrink: true\n },\n type: \"date\",\n value: state.start,\n onChange: handlePeriodChanged,\n variant: \"standard\",\n size: \"small\",\n margin: \"normal\"\n })\n })), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_8__[\"default\"], {\n component: \"li\"\n }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_7__[\"default\"], {\n alignItems: \"flex-start\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n secondaryTypographyProps: {\n component: \"span\"\n },\n primary: endCaption,\n secondary: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_9__[\"default\"], {\n error: !state.end,\n disabled: task.readOnly === true || task.readOnlyDates === true,\n name: \"end\",\n fullWidth: true,\n required: true,\n InputLabelProps: {\n shrink: true\n },\n type: \"date\",\n value: state.end,\n onChange: handlePeriodChanged,\n variant: \"standard\",\n size: \"small\",\n margin: \"normal\"\n })\n })), hasValue(task.progress) || legend || dispTaskAttributes.length > 0 ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_8__[\"default\"], {\n component: \"li\"\n }) : null, hasValue(task.progress) ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_7__[\"default\"], {\n alignItems: \"flex-start\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n secondaryTypographyProps: {\n component: \"span\"\n },\n primary: `${progressCaption}${task.readOnly === true || task.readOnlyProgress === true ? ` (${task.progress}%)` : \"\"}`,\n secondary: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_10__[\"default\"], {\n disabled: task.readOnly === true || task.readOnlyProgress === true,\n defaultValue: task.progress,\n valueLabelDisplay: \"auto\",\n onChange: handleProgressChanged\n })\n })), legend || dispTaskAttributes.length > 0 ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_8__[\"default\"], {\n component: \"li\"\n }) : null) : null, legend ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_7__[\"default\"], {\n alignItems: \"flex-start\"\n }, legend), dispTaskAttributes.length > 0 ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_8__[\"default\"], {\n component: \"li\"\n }) : null) : null, dispTaskAttributes.length > 0 ? dispTaskAttributes.map((attr, i) => {\n const defaultView = task[attr.name];\n const customView = taskAttributeRenderer ? taskAttributeRenderer({\n task,\n attribute: attr\n }) : null;\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), {\n key: i\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_7__[\"default\"], {\n alignItems: \"flex-start\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n primary: attr.caption,\n secondaryTypographyProps: {\n component: \"span\"\n },\n secondary: customView ? customView : defaultView\n })), i < dispTaskAttributes.length - 1 ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_8__[\"default\"], {\n component: \"li\"\n }) : null);\n }) : null)), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_11__[\"default\"], null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_12__[\"default\"], {\n disabled: !state.start || !state.end || task.readOnly,\n onClick: handleOk\n }, okBtnCaption), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_12__[\"default\"], {\n onClick: handleCancel\n }, cancelBtnCaption))));\n};\n\n//Контроль свойств - Редактор задачи\nP8PGanttTaskEditor.propTypes = {\n task: P8P_GANTT_TASK_SHAPE,\n taskAttributes: prop_types__WEBPACK_IMPORTED_MODULE_2___default().arrayOf(P8P_GANTT_TASK_ATTRIBUTE_SHAPE),\n taskColors: prop_types__WEBPACK_IMPORTED_MODULE_2___default().arrayOf(P8P_GANTT_TASK_COLOR_SHAPE),\n onOk: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().func),\n onCancel: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().func),\n taskAttributeRenderer: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().func),\n taskDialogRenderer: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().func),\n numbCaption: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().string).isRequired,\n nameCaption: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().string).isRequired,\n startCaption: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().string).isRequired,\n endCaption: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().string).isRequired,\n progressCaption: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().string).isRequired,\n legendCaption: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().string).isRequired,\n okBtnCaption: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().string).isRequired,\n cancelBtnCaption: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().string).isRequired\n};\n\n//-----------\n//Тело модуля\n//-----------\n\n//Диаграмма Ганта\nconst P8PGantt = ({\n height,\n title,\n titleStyle,\n onTitleClick,\n zoomBar,\n readOnly,\n readOnlyDates,\n readOnlyProgress,\n zoom,\n tasks,\n taskAttributes,\n taskColors,\n onTaskDatesChange,\n onTaskProgressChange,\n taskAttributeRenderer,\n taskDialogRenderer,\n noDataFoundText,\n numbTaskEditorCaption,\n nameTaskEditorCaption,\n startTaskEditorCaption,\n endTaskEditorCaption,\n progressTaskEditorCaption,\n legendTaskEditorCaption,\n okTaskEditorBtnCaption,\n cancelTaskEditorBtnCaption\n}) => {\n //Собственное состояние\n const [state, setState] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({\n noData: true,\n gantt: null,\n zoom: P8P_GANTT_ZOOM.includes(zoom) ? zoom : 3,\n editTask: null\n });\n\n //Отображение диаграммы\n const showGantt = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(() => {\n if (!state.gantt) {\n // eslint-disable-next-line no-undef\n const gantt = new Gantt(\"#__gantt__\", tasks, {\n view_mode: P8P_GANTT_ZOOM_VIEW_MODES[state.zoom],\n date_format: \"YYYY-MM-DD\",\n language: \"ru\",\n readOnly,\n readOnlyDates,\n readOnlyProgress,\n on_date_change: (task, start, end, isMain) => onTaskDatesChange ? onTaskDatesChange({\n task,\n start,\n end,\n isMain\n }) : null,\n on_progress_change: (task, progress) => onTaskProgressChange ? onTaskProgressChange({\n task,\n progress\n }) : null,\n on_click: openTaskEditor\n });\n setState(pv => ({\n ...pv,\n gantt,\n noData: false\n }));\n } else {\n state.gantt.refresh(tasks);\n setState(pv => ({\n ...pv,\n noData: false\n }));\n }\n }, [state.gantt, state.zoom, readOnly, readOnlyDates, readOnlyProgress, tasks, onTaskDatesChange, onTaskProgressChange]);\n\n //Обновление масштаба диаграммы\n const handleZoomChange = direction => setState(pv => ({\n ...pv,\n zoom: pv.zoom + direction < 0 ? 0 : pv.zoom + direction >= P8P_GANTT_ZOOM.length ? P8P_GANTT_ZOOM.length - 1 : pv.zoom + direction\n }));\n\n //Открытие редактора задачи\n const openTaskEditor = task => setState(pv => ({\n ...pv,\n editTask: {\n ...task\n }\n }));\n\n //При сохранении задачи в редакторе\n const handleTaskEditorSave = ({\n task,\n start,\n end,\n progress\n }) => {\n setState(pv => ({\n ...pv,\n editTask: null\n }));\n if (onTaskDatesChange && (task.start != start || task.end != end)) onTaskDatesChange({\n task,\n start,\n end,\n isMain: true\n });\n if (onTaskProgressChange && task.progress != progress) onTaskProgressChange({\n task,\n progress\n });\n };\n\n //При закрытии редактора задачи без сохранения\n const handleTaskEditorCancel = () => setState(pv => ({\n ...pv,\n editTask: null\n }));\n\n //При изменении масштаба\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n if (state.gantt) state.gantt.change_view_mode(P8P_GANTT_ZOOM_VIEW_MODES[state.zoom]);\n }, [state.gantt, state.zoom]);\n\n //При изменении списка задач\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n if (Array.isArray(tasks) && tasks.length > 0) showGantt();else setState(pv => ({\n ...pv,\n noData: true\n }));\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [tasks]);\n\n //Генерация содержимого\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", null, state.gantt && state.noData ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_p8p_app_message__WEBPACK_IMPORTED_MODULE_1__.P8PAppInlineError, {\n text: noDataFoundText\n }) : null, state.gantt && !state.noData && title ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_13__[\"default\"], {\n p: 1,\n sx: {\n ...(titleStyle ? titleStyle : {})\n },\n align: \"center\",\n color: \"textSecondary\",\n variant: \"subtitle1\"\n }, onTitleClick ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_14__[\"default\"], {\n component: \"button\",\n variant: \"body2\",\n underline: \"hover\",\n onClick: () => onTitleClick()\n }, title) : title) : null, state.gantt && !state.noData && zoomBar ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_15__[\"default\"], {\n p: 1\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_16__[\"default\"], {\n onClick: () => handleZoomChange(-1),\n disabled: state.zoom == 0\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_17__[\"default\"], null, \"zoom_in\")), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_16__[\"default\"], {\n onClick: () => handleZoomChange(1),\n disabled: state.zoom == P8P_GANTT_ZOOM.length - 1\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_17__[\"default\"], null, \"zoom_out\"))) : null, state.editTask ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(P8PGanttTaskEditor, {\n task: state.editTask,\n taskAttributes: taskAttributes,\n taskColors: taskColors,\n onOk: handleTaskEditorSave,\n onCancel: handleTaskEditorCancel,\n taskAttributeRenderer: taskAttributeRenderer,\n taskDialogRenderer: taskDialogRenderer,\n numbCaption: numbTaskEditorCaption,\n nameCaption: nameTaskEditorCaption,\n startCaption: startTaskEditorCaption,\n endCaption: endTaskEditorCaption,\n progressCaption: progressTaskEditorCaption,\n legendCaption: legendTaskEditorCaption,\n okBtnCaption: okTaskEditorBtnCaption,\n cancelBtnCaption: cancelTaskEditorBtnCaption\n }) : null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n style: {\n height,\n display: state.noData ? \"none\" : \"\"\n }\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"svg\", {\n id: \"__gantt__\",\n width: \"100%\"\n })));\n};\n\n//Контроль свойств - Диаграмма Ганта\nP8PGantt.propTypes = {\n height: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().string).isRequired,\n title: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().string),\n titleStyle: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().object),\n onTitleClick: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().func),\n zoomBar: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().bool),\n readOnly: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().bool),\n readOnlyDates: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().bool),\n readOnlyProgress: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().bool),\n zoom: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().number),\n tasks: prop_types__WEBPACK_IMPORTED_MODULE_2___default().arrayOf(P8P_GANTT_TASK_SHAPE).isRequired,\n taskAttributes: prop_types__WEBPACK_IMPORTED_MODULE_2___default().arrayOf(P8P_GANTT_TASK_ATTRIBUTE_SHAPE),\n taskColors: prop_types__WEBPACK_IMPORTED_MODULE_2___default().arrayOf(P8P_GANTT_TASK_COLOR_SHAPE),\n onTaskDatesChange: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().func),\n onTaskProgressChange: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().func),\n taskAttributeRenderer: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().func),\n taskDialogRenderer: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().func),\n noDataFoundText: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().string).isRequired,\n numbTaskEditorCaption: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().string).isRequired,\n nameTaskEditorCaption: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().string).isRequired,\n startTaskEditorCaption: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().string).isRequired,\n endTaskEditorCaption: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().string).isRequired,\n progressTaskEditorCaption: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().string).isRequired,\n legendTaskEditorCaption: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().string).isRequired,\n okTaskEditorBtnCaption: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().string).isRequired,\n cancelTaskEditorBtnCaption: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().string).isRequired\n};\n\n//----------------\n//Интерфейс модуля\n//----------------\n\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/components/p8p_gantt.js?"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ P8PGantt: () => (/* binding */ P8PGantt),\n/* harmony export */ P8P_GANTT_TASK_ATTRIBUTE_SHAPE: () => (/* binding */ P8P_GANTT_TASK_ATTRIBUTE_SHAPE),\n/* harmony export */ P8P_GANTT_TASK_COLOR_SHAPE: () => (/* binding */ P8P_GANTT_TASK_COLOR_SHAPE),\n/* harmony export */ P8P_GANTT_TASK_SHAPE: () => (/* binding */ P8P_GANTT_TASK_SHAPE),\n/* harmony export */ taskLegendDesc: () => (/* binding */ taskLegendDesc)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! prop-types */ \"./node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/ListItemText/ListItemText.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Dialog/Dialog.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/DialogContent/DialogContent.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/List/List.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/ListItem/ListItem.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Divider/Divider.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/TextField/TextField.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Slider/Slider.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/DialogActions/DialogActions.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Button/Button.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Typography/Typography.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Link/Link.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Box/Box.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/IconButton/IconButton.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Icon/Icon.js\");\n/* harmony import */ var _p8p_app_message__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./p8p_app_message */ \"./app/components/p8p_app_message.js\");\n/*\r\n Парус 8 - Панели мониторинга\r\n Компонент: Диаграмма Ганта\r\n*/\n\n//---------------------\n//Подключение библиотек\n//---------------------\n\n //Классы React\n //Контроль свойств компонента\n //Интерфейсные компоненты\n //Встраиваемое сообщение об ошибке\n\n//---------\n//Константы\n//---------\n\n//Уровни масштаба\nconst P8P_GANTT_ZOOM = [0, 1, 2, 3, 4];\n\n//Уровни масштаба (строковые наименования в терминах библиотеки)\nconst P8P_GANTT_ZOOM_VIEW_MODES = {\n 0: \"Quarter Day\",\n 1: \"Half Day\",\n 2: \"Day\",\n 3: \"Week\",\n 4: \"Month\"\n};\n\n//Структура задачи\nconst P8P_GANTT_TASK_SHAPE = prop_types__WEBPACK_IMPORTED_MODULE_2___default().shape({\n id: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().string).isRequired,\n rn: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().number).isRequired,\n numb: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().string).isRequired,\n name: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().string).isRequired,\n fullName: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().string).isRequired,\n start: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().string).isRequired,\n end: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().string).isRequired,\n progress: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().number),\n dependencies: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().array),\n readOnly: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().bool),\n readOnlyDates: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().bool),\n readOnlyProgress: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().bool),\n bgColor: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().string),\n textColor: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().string),\n bgProgressColor: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().string)\n});\n\n//Структура динамического атрибута задачи\nconst P8P_GANTT_TASK_ATTRIBUTE_SHAPE = prop_types__WEBPACK_IMPORTED_MODULE_2___default().shape({\n name: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().string).isRequired,\n caption: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().string).isRequired,\n visible: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().bool).isRequired\n});\n\n//Структура описания цвета задачи\nconst P8P_GANTT_TASK_COLOR_SHAPE = prop_types__WEBPACK_IMPORTED_MODULE_2___default().shape({\n bgColor: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().string),\n textColor: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().string),\n bgProgressColor: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().string),\n desc: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().string).isRequired\n});\n\n//Стили\nconst STYLES = {\n TASK_EDITOR_CONTENT: {\n minWidth: 400,\n overflowX: \"auto\"\n },\n TASK_EDITOR_LIST: {\n width: \"100%\",\n minWidth: 300,\n maxWidth: 700,\n bgcolor: \"background.paper\"\n }\n};\n\n//--------------------------------\n//Вспомогательные классы и функции\n//--------------------------------\n\n//Проверка существования значения\nconst hasValue = value => typeof value !== \"undefined\" && value !== null && value !== \"\";\n\n//Формирование описания для легенды\nconst taskLegendDesc = ({\n task,\n taskColors\n}) => {\n if (Array.isArray(taskColors) && taskColors.length > 0) {\n const colorDesc = taskColors.find(color => task.bgColor === color.bgColor && task.textColor === color.textColor && task.bgProgressColor === color.bgProgressColor);\n if (colorDesc) return {\n text: colorDesc.desc,\n style: {\n ...(colorDesc.bgProgressColor ? {\n background: `linear-gradient(to right, ${colorDesc.bgProgressColor} ,${colorDesc.bgColor ? colorDesc.bgColor : \"transparent\"})`\n } : colorDesc.bgColor ? {\n backgroundColor: colorDesc.bgColor\n } : {}),\n ...(colorDesc.textColor ? {\n color: colorDesc.textColor\n } : {})\n }\n };else return null;\n } else return null;\n};\n\n//Редактор задачи\nconst P8PGanttTaskEditor = ({\n task,\n taskAttributes,\n taskColors,\n onOk,\n onCancel,\n taskAttributeRenderer,\n taskDialogRenderer,\n numbCaption,\n nameCaption,\n startCaption,\n endCaption,\n progressCaption,\n legendCaption,\n okBtnCaption,\n cancelBtnCaption\n}) => {\n //Собственное состояние\n const [state, setState] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({\n start: task.start,\n end: task.end,\n progress: task.progress\n });\n\n //Отображаемые атрибуты\n const dispTaskAttributes = Array.isArray(taskAttributes) && taskAttributes.length > 0 ? taskAttributes.filter(attr => attr.visible && hasValue(task[attr.name])) : [];\n\n //При сохранении\n const handleOk = () => onOk && state.start && state.end ? onOk({\n task,\n start: state.start,\n end: state.end,\n progress: state.progress\n }) : null;\n\n //При отмене\n const handleCancel = () => onCancel ? onCancel() : null;\n\n //При изменении сроков\n const handlePeriodChanged = e => setState(prev => ({\n ...prev,\n [e.target.name]: e.target.value\n }));\n\n //При изменении прогресса\n const handleProgressChanged = (e, newValue) => setState(prev => ({\n ...prev,\n progress: newValue\n }));\n\n //Описание легенды для задачи\n const legendDesc = taskLegendDesc({\n task,\n taskColors\n });\n let legend = legendDesc ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n secondaryTypographyProps: {\n p: 1,\n sx: legendDesc.style\n },\n primary: legendCaption,\n secondary: legendDesc.text\n }) : null;\n\n //Генерация содержимого\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n open: true,\n onClose: handleCancel\n }, taskDialogRenderer ? taskDialogRenderer({\n task,\n taskAttributes,\n taskColors,\n close: handleCancel\n }) : /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_5__[\"default\"], {\n sx: STYLES.TASK_EDITOR_CONTENT\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n sx: STYLES.TASK_EDITOR_LIST\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_7__[\"default\"], {\n alignItems: \"flex-start\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n primary: numbCaption,\n secondary: task.numb\n })), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_8__[\"default\"], {\n component: \"li\"\n }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_7__[\"default\"], {\n alignItems: \"flex-start\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n primary: nameCaption,\n secondary: task.fullName\n })), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_8__[\"default\"], {\n component: \"li\"\n }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_7__[\"default\"], {\n alignItems: \"flex-start\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n secondaryTypographyProps: {\n component: \"span\"\n },\n primary: startCaption,\n secondary: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_9__[\"default\"], {\n error: !state.start,\n disabled: task.readOnly === true || task.readOnlyDates === true,\n name: \"start\",\n fullWidth: true,\n required: true,\n InputLabelProps: {\n shrink: true\n },\n type: \"date\",\n value: state.start,\n onChange: handlePeriodChanged,\n variant: \"standard\",\n size: \"small\",\n margin: \"normal\"\n })\n })), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_8__[\"default\"], {\n component: \"li\"\n }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_7__[\"default\"], {\n alignItems: \"flex-start\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n secondaryTypographyProps: {\n component: \"span\"\n },\n primary: endCaption,\n secondary: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_9__[\"default\"], {\n error: !state.end,\n disabled: task.readOnly === true || task.readOnlyDates === true,\n name: \"end\",\n fullWidth: true,\n required: true,\n InputLabelProps: {\n shrink: true\n },\n type: \"date\",\n value: state.end,\n onChange: handlePeriodChanged,\n variant: \"standard\",\n size: \"small\",\n margin: \"normal\"\n })\n })), hasValue(task.progress) || legend || dispTaskAttributes.length > 0 ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_8__[\"default\"], {\n component: \"li\"\n }) : null, hasValue(task.progress) ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_7__[\"default\"], {\n alignItems: \"flex-start\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n secondaryTypographyProps: {\n component: \"span\"\n },\n primary: `${progressCaption}${task.readOnly === true || task.readOnlyProgress === true ? ` (${task.progress}%)` : \"\"}`,\n secondary: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_10__[\"default\"], {\n disabled: task.readOnly === true || task.readOnlyProgress === true,\n defaultValue: task.progress,\n valueLabelDisplay: \"auto\",\n onChange: handleProgressChanged\n })\n })), legend || dispTaskAttributes.length > 0 ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_8__[\"default\"], {\n component: \"li\"\n }) : null) : null, legend ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_7__[\"default\"], {\n alignItems: \"flex-start\"\n }, legend), dispTaskAttributes.length > 0 ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_8__[\"default\"], {\n component: \"li\"\n }) : null) : null, dispTaskAttributes.length > 0 ? dispTaskAttributes.map((attr, i) => {\n const defaultView = task[attr.name];\n const customView = taskAttributeRenderer ? taskAttributeRenderer({\n task,\n attribute: attr\n }) : null;\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), {\n key: i\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_7__[\"default\"], {\n alignItems: \"flex-start\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n primary: attr.caption,\n secondaryTypographyProps: {\n component: \"span\"\n },\n secondary: customView ? customView : defaultView\n })), i < dispTaskAttributes.length - 1 ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_8__[\"default\"], {\n component: \"li\"\n }) : null);\n }) : null)), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_11__[\"default\"], null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_12__[\"default\"], {\n disabled: !state.start || !state.end || task.readOnly,\n onClick: handleOk\n }, okBtnCaption), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_12__[\"default\"], {\n onClick: handleCancel\n }, cancelBtnCaption))));\n};\n\n//Контроль свойств - Редактор задачи\nP8PGanttTaskEditor.propTypes = {\n task: P8P_GANTT_TASK_SHAPE,\n taskAttributes: prop_types__WEBPACK_IMPORTED_MODULE_2___default().arrayOf(P8P_GANTT_TASK_ATTRIBUTE_SHAPE),\n taskColors: prop_types__WEBPACK_IMPORTED_MODULE_2___default().arrayOf(P8P_GANTT_TASK_COLOR_SHAPE),\n onOk: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().func),\n onCancel: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().func),\n taskAttributeRenderer: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().func),\n taskDialogRenderer: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().func),\n numbCaption: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().string).isRequired,\n nameCaption: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().string).isRequired,\n startCaption: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().string).isRequired,\n endCaption: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().string).isRequired,\n progressCaption: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().string).isRequired,\n legendCaption: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().string).isRequired,\n okBtnCaption: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().string).isRequired,\n cancelBtnCaption: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().string).isRequired\n};\n\n//-----------\n//Тело модуля\n//-----------\n\n//Диаграмма Ганта\nconst P8PGantt = ({\n height,\n title,\n titleStyle,\n onTitleClick,\n zoomBar,\n readOnly,\n readOnlyDates,\n readOnlyProgress,\n zoom,\n tasks,\n taskAttributes,\n taskColors,\n onTaskDatesChange,\n onTaskProgressChange,\n taskAttributeRenderer,\n taskDialogRenderer,\n noDataFoundText,\n numbTaskEditorCaption,\n nameTaskEditorCaption,\n startTaskEditorCaption,\n endTaskEditorCaption,\n progressTaskEditorCaption,\n legendTaskEditorCaption,\n okTaskEditorBtnCaption,\n cancelTaskEditorBtnCaption\n}) => {\n //Собственное состояние\n const [state, setState] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({\n noData: true,\n gantt: null,\n zoom: P8P_GANTT_ZOOM.includes(zoom) ? zoom : 3,\n editTask: null\n });\n\n //Отображение диаграммы\n const showGantt = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(() => {\n if (!state.gantt) {\n // eslint-disable-next-line no-undef\n const gantt = new Gantt(\"#__gantt__\", tasks, {\n view_mode: P8P_GANTT_ZOOM_VIEW_MODES[state.zoom],\n date_format: \"YYYY-MM-DD\",\n language: \"ru\",\n readOnly,\n readOnlyDates,\n readOnlyProgress,\n on_date_change: (task, start, end, isMain) => onTaskDatesChange ? onTaskDatesChange({\n task,\n start,\n end,\n isMain\n }) : null,\n on_progress_change: (task, progress) => onTaskProgressChange ? onTaskProgressChange({\n task,\n progress\n }) : null,\n on_click: openTaskEditor\n });\n setState(pv => ({\n ...pv,\n gantt,\n noData: false\n }));\n } else {\n state.gantt.refresh(tasks);\n setState(pv => ({\n ...pv,\n noData: false\n }));\n }\n }, [state.gantt, state.zoom, readOnly, readOnlyDates, readOnlyProgress, tasks, onTaskDatesChange, onTaskProgressChange]);\n\n //Обновление масштаба диаграммы\n const handleZoomChange = direction => setState(pv => ({\n ...pv,\n zoom: pv.zoom + direction < 0 ? 0 : pv.zoom + direction >= P8P_GANTT_ZOOM.length ? P8P_GANTT_ZOOM.length - 1 : pv.zoom + direction\n }));\n\n //Открытие редактора задачи\n const openTaskEditor = task => setState(pv => ({\n ...pv,\n editTask: {\n ...task\n }\n }));\n\n //При сохранении задачи в редакторе\n const handleTaskEditorSave = ({\n task,\n start,\n end,\n progress\n }) => {\n setState(pv => ({\n ...pv,\n editTask: null\n }));\n if (onTaskDatesChange && (task.start != start || task.end != end)) onTaskDatesChange({\n task,\n start,\n end,\n isMain: true\n });\n if (onTaskProgressChange && task.progress != progress) onTaskProgressChange({\n task,\n progress\n });\n };\n\n //При закрытии редактора задачи без сохранения\n const handleTaskEditorCancel = () => setState(pv => ({\n ...pv,\n editTask: null\n }));\n\n //При изменении масштаба\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n if (state.gantt) state.gantt.change_view_mode(P8P_GANTT_ZOOM_VIEW_MODES[state.zoom]);\n }, [state.gantt, state.zoom]);\n\n //При изменении списка задач\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n if (Array.isArray(tasks) && tasks.length > 0) showGantt();else setState(pv => ({\n ...pv,\n noData: true\n }));\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [tasks]);\n\n //Генерация содержимого\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", null, state.gantt && state.noData ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_p8p_app_message__WEBPACK_IMPORTED_MODULE_1__.P8PAppInlineError, {\n text: noDataFoundText\n }) : null, state.gantt && !state.noData && title ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_13__[\"default\"], {\n p: 1,\n sx: {\n ...(titleStyle ? titleStyle : {})\n },\n align: \"center\",\n color: \"textSecondary\",\n variant: \"subtitle1\"\n }, onTitleClick ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_14__[\"default\"], {\n component: \"button\",\n variant: \"body2\",\n underline: \"hover\",\n onClick: () => onTitleClick()\n }, title) : title) : null, state.gantt && !state.noData && zoomBar ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_15__[\"default\"], {\n p: 1\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_16__[\"default\"], {\n onClick: () => handleZoomChange(-1),\n disabled: state.zoom == 0\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_17__[\"default\"], null, \"zoom_in\")), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_16__[\"default\"], {\n onClick: () => handleZoomChange(1),\n disabled: state.zoom == P8P_GANTT_ZOOM.length - 1\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_17__[\"default\"], null, \"zoom_out\"))) : null, state.editTask ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(P8PGanttTaskEditor, {\n task: state.editTask,\n taskAttributes: taskAttributes,\n taskColors: taskColors,\n onOk: handleTaskEditorSave,\n onCancel: handleTaskEditorCancel,\n taskAttributeRenderer: taskAttributeRenderer,\n taskDialogRenderer: taskDialogRenderer,\n numbCaption: numbTaskEditorCaption,\n nameCaption: nameTaskEditorCaption,\n startCaption: startTaskEditorCaption,\n endCaption: endTaskEditorCaption,\n progressCaption: progressTaskEditorCaption,\n legendCaption: legendTaskEditorCaption,\n okBtnCaption: okTaskEditorBtnCaption,\n cancelBtnCaption: cancelTaskEditorBtnCaption\n }) : null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n style: {\n height,\n display: state.noData ? \"none\" : \"\"\n }\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"svg\", {\n id: \"__gantt__\",\n width: \"100%\"\n })));\n};\n\n//Контроль свойств - Диаграмма Ганта\nP8PGantt.propTypes = {\n height: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().string).isRequired,\n title: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().string),\n titleStyle: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().object),\n onTitleClick: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().func),\n zoomBar: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().bool),\n readOnly: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().bool),\n readOnlyDates: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().bool),\n readOnlyProgress: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().bool),\n zoom: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().number),\n tasks: prop_types__WEBPACK_IMPORTED_MODULE_2___default().arrayOf(P8P_GANTT_TASK_SHAPE).isRequired,\n taskAttributes: prop_types__WEBPACK_IMPORTED_MODULE_2___default().arrayOf(P8P_GANTT_TASK_ATTRIBUTE_SHAPE),\n taskColors: prop_types__WEBPACK_IMPORTED_MODULE_2___default().arrayOf(P8P_GANTT_TASK_COLOR_SHAPE),\n onTaskDatesChange: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().func),\n onTaskProgressChange: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().func),\n taskAttributeRenderer: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().func),\n taskDialogRenderer: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().func),\n noDataFoundText: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().string).isRequired,\n numbTaskEditorCaption: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().string).isRequired,\n nameTaskEditorCaption: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().string).isRequired,\n startTaskEditorCaption: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().string).isRequired,\n endTaskEditorCaption: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().string).isRequired,\n progressTaskEditorCaption: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().string).isRequired,\n legendTaskEditorCaption: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().string).isRequired,\n okTaskEditorBtnCaption: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().string).isRequired,\n cancelTaskEditorBtnCaption: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().string).isRequired\n};\n\n//----------------\n//Интерфейс модуля\n//----------------\n\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/components/p8p_gantt.js?"); /***/ }), From 15ab6350457064c70f169dc920e24a3b8065adc7 Mon Sep 17 00:00:00 2001 From: Mikhail Chechnev Date: Sat, 25 May 2024 00:58:37 +0300 Subject: [PATCH 61/76] =?UTF-8?q?=D0=98=D0=BD=D1=81=D1=82=D1=80=D1=83?= =?UTF-8?q?=D0=BA=D1=86=D0=B8=D0=B8:=20=D0=BA=D0=BE=D1=80=D1=80=D0=B5?= =?UTF-8?q?=D0=BA=D1=82=D0=B8=D1=80=D0=BE=D0=B2=D0=BA=D0=B0=20=D0=B8=D0=B7?= =?UTF-8?q?=D0=BE=D0=B1=D1=80=D0=B0=D0=B6=D0=B5=D0=BD=D0=B8=D0=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/img/66.png | Bin 166511 -> 122176 bytes docs/img/68.png | Bin 54816 -> 73183 bytes 2 files changed, 0 insertions(+), 0 deletions(-) diff --git a/docs/img/66.png b/docs/img/66.png index caee3184345e462d6067feb73f9851ba2f0a4c85..7ddb599d2afdb66ca34d5a13f3b7b45a82e6a58c 100644 GIT binary patch literal 122176 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 literal 166511 zcmaI7byOU|^XLl!76L31+%34fLm;?@;O_43?jGFTf=h5++}$m>yF0wi_xro=-gp0a zdrqIT)3ZI>(_K?lpQ@VhA9CVAcwBf02ne90gvd__2&gV_D}Vz)KtMv@1fGIVKsx>u z7lx>sz&`>XK${B53PC{B#v;7x!+?)J+exT9LO`G&|7(!;Ng=8b5FbU7B0@@TI;UAM zdKjuJ?=K&nZ!Re=mFvd~zpb>*{o#X!snN|4tn(!7n>No0>6&@JHn;VC4{B~}Ydg6S zyh!8SqR^5E+qit+9Oic1kIHu6&r0LHUUF5meR0h;K~TAwGrXmw;=t>+Uxo{x)Mx)y z=jeE%wP^D_h<2x zG-AG@-|cb|GSC5N5mT0FFs~vV{iF21v~r_3NyqRGVu(b%R0JBUR}gz!&}yEFkquZc zvMnY-5dqnkZu3caLT~zYIltWEw|^{l254oa)oZ2B-@Bkr4Ol_Tc|O-t z1+Sb9zVFa(5-J2^^<|myM(N-vVc{r(c7-HdjScO3p$cpN6UH3C>s}ge4fP5AHWal#~ z#y9QEPbYW!J>_B{+$Y5CEH(iyRw5`zxA0Vl-X-tj(OIxHGiIPrKzi4W{e>nonE-6;h#o)W4KQ40mc0W>>YzDPO~lR$#RV8pH!%d*~QdSTQ*5Sh2uO zH5g!Hh@Bhf8!RQ_@>3(Yu60f$Rx4|-Vx?RdN|1S2n=BSS>0bUu#KkFMte_sft=Mhz zl!U0gt`8Z~9>z^7Q5OqVMYP2|ornCfNumorch-5R?u4`7?EogM>L+xBK1)7pjaepd zoyahnVmk_j<)@~sZKDhT*^8Wt5!i2&?bs1E&4U$xrl>8hK8Ci}# zKT8-hf2*XTQq0CAL@;Oe^z<}Tw1M^KPh3(`ks>!YcO4-+8*q?K+X$*WS~?mR6;;97 z*u=zvjMIL^b$VAqJ6bJi=#0(l`;YX~fKFP5oujU%Z%a?ksU``ZPO=OyeX1oTFy1~M zpZV2o=YDTJcJ9rxc)Ci_0#5npk_e7N1=E%Td#+E~2bldv|M?SjSxr?(kd z-tNj{uc`(4Lrgzb0q#PWha7fQbd&;acOPsm#q#b@B_$;(oEl0pUhbVV(^zK7N*mfr3IDYPw$DnyUhoVHFbOnL>U)jzy_xMXOv~;c%+NO~p;| zVJXbPo}HQb6(8SIMm9ZJ>x2d%XqzjJvs?qQDXjDyQa~1;=kcmYHgp&kgD<10s+Rh! zMXZ?e8>qGF`PX6{l$V#6{-u~f0WY-*gUtdeG$_bSDxCt5P@=y-mZnzw5pb&0;h7?n z!LtUMFLZ$NeP8Bv+v!!ozMsW1dzuhm;%Gs})QJ>pQpeJB|qJe zkx<|S_b}VsT|_xTrg5F5L>OZQO!@XJBd#3zO=mD#TJYg}EP_m{iN1vQK-g)W~(5nWG}SX7K4Ln0{IEZP>jTUZtsQ7B zkS}pwhB&W{^5Xs*I>djKSo?bQUB<9f;)2r|g7X88ZHXK9;%qlV0+JI%x(??W=Il=b z@R}iWjSG`9Qc@^4=tR0E7n01p*mQ8as>JpIHV|ewN93$`pV`?s?Z|}M6k7k}3*@CN zO*zqkya4;~uxw>49Fh0j`;LX7NXNT+s ztayiQ&YqRS@tRSm=Rri?w{bE@PufxklR1nx92^|jye<`9{J}17Wr>;TJ-{`!LyOH; zOx|YHJPh3pSalT+m&@CG5lNh1sp?@pKleQNz%u-8RAM9C!QQ^R!E({=?s)#?cq(9m z%j-R4NVm6ye_(5WJcG;mE<~c*;PG~xiM0b}=Z4e%a7)LGgeEVH$xYQBBoaIl=TxWn(STG+G z)FfO6kG%z0@I34}Wj^&MquElnp#_a%Mjg}Md~a=!e9%2*yivXy$@oCEK^LD*x6w8V z;U*ywmno-%THcaNpNZ&OuNBSy9WaKn)@&2;Y1+ov+&@fG^}H))vZd`|rVT*Y{>tHC zXxmGU%++XCL6@=SQzVlCWyAZt8D&fJV>?KeY}MeA$^%}Qo0QPwk;BX2#y7|{!|Eu>6zItwa>-^$CK8SRNMN2KZE0Q~o6e|0TriVUp zk?LZji->dbPyj^{Y$6PrtxhRsow4wZrDTOE&FoDFNWUjTOb>P`&se4Lq5N0zppjo+ zif~n(1v!nM^9b^zwt2<`nu}2Ua?z%)0IY#L!onScC{)?ORt6tDKrX>t&m)V;8#i0I zsjjBx*EYbW*n*{6;U}KkWsN>I1)Kgg^RlLDslF#iC|0h}-QN5z6OGyM~>n(?% z=N6KsMFLutu~1t-TE4MZ;>QWmAQ;cy4b_KFf)*Cnz*8)gs9(gsk590qQ?ts;^vlhSlC@T@wo~13t1<`nmFefxbSr=)j5*qv@=`B)2YE zd34Gbh;SE)J0<{2fQYE^(hv(VX(@E2Ppbd++VT1b&kPHen9Ebm7{tJ-L%$lDvp{~3 z)URXmVt*|W&8prxR-sf5!%qWMSAB;`a;Y8HbQELh;V`3Eh6hM{D(kR{L9F{#>0Z6L zJk8TxUSc_oil$;6J|lGux|Hk~XE>743m|BI4#~;hGS(tXAtGgSP8Hcgj?1^d#_HM@ z^PpV=4=!3RF6{UB_iIQql{3+kcyvNS23>BMla}JSGXKvjt!ApSurL*^iu(F_TGb8q zj0z`!1+3TYn>bCi2oZbeCFj|7TQ+uA!Zd)7(*NZ|{M%lzA^LxPj5r{E`mfbo_?XdY z^}kH{=7K!&z*CIm0KX-xvCKaZ@676IwI*cugxtYU;*%riwEIYPf~B4h=V~=>FpX#2 zQM$fwKnl~U?Zaiu8fRp&oDJVWdQDe+Zuid%43LNGCCFo^{9Cx#lsDzkjig^oAv&kk z!7jXrop9&j1&sKH#9EDge@LY#O5(53h71?tA6C$89p-=b^-s>fWAnRw3fOjJww-3V zJzFGNtkmB1!p-UYsl!PnfIK*{?w6p8?s6&!Uwx@`D&T}~$zj!NTxr~FWfIGd*F;9w z0w?&s^qtO-<5Pe0{5w19I8XhL9oYra$?rt)+&z*5c4sWMCZuqM71k8W+>Q3cP z;zf2GQBOSfPoErcF=GUzpk73b1z4_Qyz0N=rOtcZsY$e7zjH{b0}C?S`HT+s7h25L zV&o<;itkc$maM1gN&L~pgI>u3n2sgT+pF=CQ{sfT|7@ANLi@*&Vy0Su3k!oer-liO zkgxi2F)HUd<=uppNg#`wo~o)g(?iB8DP30lMZ zH7|_3MPfpl@j@IPRfGQ;zcJjSwvz+9aTZ-jpQQ!JC{ZqQA_Yh)(C&M>r;ZY?Po}F zEk(Q$rb=MuVLGARms-1XRU-J7bLta?%HCPE)~v`l!(KV4)mwHof<+$?+;*Iy zU0iDrE7X?Rs(MLQJlOM73ia4F(0f$oa(&nEknahu6W0}*Am#7CxYOnfwK&SAO$=lK zQoylCi0Sa$*$8U;<*Z44reXAfFaM_x6yB(30~oq%zY-pt?X>Jw6sn#V#r0^tFUmoA zx^%r=9#$a7^@Yt264TnlDHy&5XS~1I&Zv`4>Y<#WsY6#bJZHgSgfSA<%Y73ND8MU-_vro zvNHLL-R%|_AB>S~RA9yWTMwem?~pHpn8aJzS~Y`$U|E5{idu%LYTC0n2NOFw ze}WX_TUc1w@8rWRBixV><8%fGEZH_~4`sgX7)OEV8BMBpk41EI?hmZFMvUxd&G zv2vzIEI#v>*e0TYZ|P2QOgbL#qUwyt`x=>OlnahxZ&B|ziPf1R8P)!A;z%|OM8VV) zHgy%5mywTyCB19}`rndSHGG~C#uy0urVk1yK|$ex%|toB3H0lw#Xo~#4^|ya_?K5# zaTgsk^QkNO(cSCo+JwrB`vh__Z;C$YB0w-)dR(bEIn`T z@CEw1Z^?o(GBl$_Vu}Y${ugxSy>oS!d6we&TK~5H7qSq(>~DUOzY&|(8fqh}(`c2}o|oU~ItDh3=3=R>p$oL$_>s8HjhyTY;2r?D z2k((2mD{m6F~YNzVm4?C-~&ek#uN6+U{GZBd(erE{o!BN&#e!-;TI)Vsx<5@ z|Mi0?hE#REi-zY3Z8j-J@(mlg_7VbUh0-3~uaUgw^mB_Rd-GC&_@*6DwC#Qb0wC54 zZ^*(HNKpm2woZ-Pj+gcy`5*KZy!PU=cV;uE_?c<(em&`o-~R-|kbB+UU2tut`Vj#e^Cl|-AFYq5@$aO%@jf0giF~fgO{muYp)TPOfJ2=LpVH#d z`ykx0(cD4#M`naAvX~_gE}?~fCI4IcjbZ$7XTgky7hyY{hqBIUyh9O5=9OV zNzAVV=3eFlHH;mN{mZ7YC21%bd?eAiJB^_IscC{*;gJOw_#bS{%=TvL7DCS#?fwf4 z9dCX+1THn5Qsk8%Z^- z2Ze;>Yqz;L6e#2^8iQ~8iv^VLW!FaubxVq_uQG$$?eRQ9rA9+f+eIe=85voHW|Lep zno}%BbR@3h~!0>=8#xATj;Y3#Y28%J=blV`pav z%CPMWpD#Z$osIzC(Lao=0()g5&HgR^mO${}9^h*jo87l>etZU1$kVGH|0U|z3Eqob zFmJMa+^^b>5|JK4@_k_k@T2}-sEq09`40XOf;Lblf1q$~X6DP;YEw#yoD+15d^6wAg=)V_zVBlP<_CNXA9%*AV2dHA~AthDF#0foQ+rug@G;2i#V{3OV(asUf zVR3PBv&Y>rl=IFrJDt@F;eA#|a1LVf_HjeT;hiy~7TO-?ID_GQH*2%~4uGK&kN9MA z%>i2#%O`M-Z!achLD$CLGx55e9lY&AqY`aDJrI0^g@v;s1|*x#rr2l-a)6l_^dh?O z6Fm_RD^$ifB&kdKaPosTMqfib}uHrX(l%)cgKAG#yQYmG7P7##U(}xI8Pg z&Lya>YW<3P@P=C@$$2?e8p+n;K{~Gd{)x|bjkp$B7NrHfFrsT(MJ&}ttfj+bbI81= z-TudZ!f8~k-X06_B!SbzYz4o|QkzGl){`aYX^JypAM&JNu<8bwJ>Q?3i+A6@uFy^G zT8JmuY(DK2n>%29mK^Gy$19cqDs=L>+zdG5|A9|2&eJ2IG5ZrhWse9OQ8x|%`$EPA!V*Y#U{~HH zoBj3cM-Viud6HnOMLd{9dH*+wDnYS2BNOmDLU9`Yi_prp`e$uBP09#GjM;pIkS?A5lf3T= zRIm=OKLi@Oo7FTTB%KQbh-A`$>j2_L{>iYv0h@1DKegC)K8is5t<_m5!M=uv%qdhr zo7b2+KP2z&C)#vtA#CqaH`~twb|%?G!XhP8nZ*EsvNBnygnGQ@X#qJ&w4(6Ylfc8z zd>-@uIXOh-NFpaJOiU=l!^79iDJwsA02IIDjbQcaHnGguF!P2T*L&K49k~AQn1XeZr{SDoyz>tDgwoWk3ZpEkZ^YzBtAIIZF$!jOy zl*v_7z<=4%X|PF9yGM_k>y$Yl5-4Ko7g$9)!SbSX1Tz{ z4n6vF&^t4YrC2-}GM&6`;7zr24=){eBW3M4KcmnXDsD&WLc|wCi|M-SR{EEo7dfrO zWA1Dhi+*;{E1%^`g8F)T#xSd7d1RfUJWcAfSbbb|2Gnh^xb8Uu`LxQi*Rbd6jiJ%> z^r^d69q!9|-e>oGtsn(dQkq3&XR2oGErXrUQJB4b`@~cfic)7pR6Wqqkpq(M>J-PN zZw(l@7_l`&T-+VsP=EgJ^vkT7bE8qZ&mWFGz< zO5?8{vo&s`m(RtY*Sz5ti7~qGPVqlOk72{@r><$-$LnUf8bW51*MrBykZM$qBR!nl z@?})jFW9_LDkG(OkK!v<$Jo!`RIfe=J!MPoL9iODo|-T1NA>WpxIZ{V40-891@3H1^goquvT z&a~z#y>CgDGew-n@Q03u@dg-8KgpRG&_lXw|GUa3nz|Pz!6|t|9`*gcK@+L=&ovgW z-+m^b{~)ZLD2x< zF8TR}*BKD6ESef!GNBai5@+LYEguc{>M%aH{3Bt!Uh&R+7uCZR53q;#wE%t&@yMnM5e#7~%pYLls2K~Y6rbQ;~`|JVs-=$MvwH~Zm_EPNCM#TWa zn`<`>GFOW}**>C1a2`SQWpy_1RrhaNxG_jNc>+)?j`Y>foVQ1_ZrN0A-e}Y_#4Ev$ z``j~sJuMVoR3drg%)hO`w=NCjojW{~WQ_JXe zxpBO z>zY9P_FI>4MpRN*hdMj!lwrROJ-nsJ&1>Xs5hqd^tF_wyD8#@Trr-3qLYx$eNC}8v zj-86#_|0$yrgMo5QLETJatOAkMt&R}fcaE6^V3|9l!ptI)6oc%15yB$pK+U4@JL%%2fn#8N6Q06|}pD>$5AXIhe zWsz)fdRu7K-VrZgg{akz8Bdfv(f&h#M>JLq17nyodqIhfPf{R&d_a1q2hdUFIcuV%z(mn(v)d5uMQqiE)g-zCA3f@ibJA;kje!jZewzw;Cj#>MS)?$~366)zgc`V8_&;+b0@# z0dJ*W1a;2=2gW;07Q1k2j}&3?C{KM@5niYaH1+4~1ic=OdENFjT(E5e4WZE;tVqpY z^ZQo|eqq=V=(b-mK4wHEJ5wM%;!+1yJ;o;X_84M=1?l}8f)SOIt>8Yg5SqQUR)@Ei@ ze0+Snnpbm^W*X}1%9_VaE-o&1&dy1?s!_4Awjo$G*u`6=dU_Zv=mawsADJR?@jl?{ z2QxQZdIKaNw1{-@NY+3yJ?$dlg(0_Yqg0C{LVmh+h8gfC0QD3YWylIE4|zyyW>)) zIn$&3kGkK%2}LBt0$a9L|M{1Kqpi=F(z=V!KTQ02u%CGm5dIx`9KPR*kR?8ehB zWp7GZ7Ka153WzcYX0eT=xdu+(D*i2%OYL zby!%~Cl4cdfkck|NNU`9Q2nRFW9HsNs3bBb>#pdxp95l?b`la{#mI_irxW-+jn=Cp zduW4Q#*0|3h%ygYHU4S1hD`3bU$zZU2neFFbuBBFe1&FV!54(IWK`eaoDZ1 zxNM`3Wpe+~3VE3@e`az9;;DfECbt+IHGaS`zA()<-qBkvJ*3P6gqrQ2C_jX1jYJQCzqV9uQc(r_%hNt8z$dq-S00PlO7UG4?`u z(fPs<1(js;wBl!lj1Pp-c*qVwt^Obw=E(5Rgjic<13Yzy>KU?qF;-BaLR^DI4}pR? z8oFAA={lSBgLXuBvksoFzlbwv{4{i(xKlYMq^K)fb$?H0Q7^}^F$Oba&`dcc3h5`X$fLE$GpSzXt3mRJB?X8o!fkt+j9u&e7=oz_zB%I^5zMc&l8rtl6EfV~pSiH?8 zkauu!Xz?#+A^x{g3%)dXOB)-yvn8bU{ZFRUuC8fibUN*7#nvnJan&#? zC!(UFdCn&bEb`TrID$TW3_9&px}1C#b5!bb&@eE=@8H^w^tCFg=&&%qrY24RGGP=F z0gv87g?jo5#%BZsLnuKycIL}gNhi@i9(48en3g;m`?{VVp6C>wkfM@YZLMhA_%fHX z36tAJ$SWkvFZeF&5&bueT``Qlhk+_YofM(&Z+DCR8xhF;7Y~pW&f1~#XTH;keE6SZ zMjRX7?%lQqim$@PAjQ^Y22%3|jaw95s!UozZMI&1LA-5KKdr*JAye#o*nyf94dNM) zthLs2`s$%@U1F2ZVsO+4IseK*%)kFw1`)kpe3(BUVp(nC{y>A8)NWKxuym_%sfsf% zyKqliVE4SILOsw|xM&tYEgWVee!zX4Oc!{D!D|N0^?_t&^XvRCT;bN|^r03ZIBMQ+ zm;fr1{>t@}{+@TozB+H;@U;{}h55VVXFQwMyOhXoH^T_?7ank4QdHv6H zg8F2RVC;AX=jerzc8ddyj*gDoPBf>H@3Rf2H{QuYrKVb|6SYc(8p)_KkIU)rVPznA z&Qrn`c&R$H(ib5nN3n-AjNt+R@%@?io&o_Og`5~TGwwr5at#XY(eel%Rud>y7AA4M zx4@NON?CAgiCb`5Q2*o%FBLcjSTLl)OFi!!86ThLoo*Zi_(*_H$vXq_v9Z+{c)FBE zk0z+kJfg`t?0|YuCxY|rOx8=)?bq;C+HDkVr2^V;`RB`jOm~)Q4O0cY!4b?u)Gn~U zqn2*b6ZH9-k^xw2jls+S>l*-dd#1J$x#!U26Jf4PT+; z+x^XDbdvD{8SNZY^yO5n&NpjGK(3h#9!t24wjzOs6QIa=c?iqh*FNUhX%)Y?$)<;s z4%7V!W+=)&B)S2kC!tQy#wJEfq1ck|A%Q2Bt&44g?PER|NcYcNg5>UTy%&1y!!PtTq4#R?-4 zNr^3?j32M2uP3Fx+rES+CDf(#SJxM7WCu*{lg4SBOZE!IB7?)cMrH2h)`8$9nwta7 znpDp1-XfQ*pBS%vNWjI5rk}Z@N2=Z>8*|{W#1+E3Uu=+dEwUMpa73}(L**yEM1_vI zbOS4)U>?R5jaoq*1O>3xpfU3deX}WG*S+GzvViSf;A44vxzu_^a%Ibl2Oe1p9dtHM z`B52xAm0bNj`xjd>CeIfXq=(>TT8irhK0c2y3eMCO))bzON+8?aQ#QVZNRML8egu~ zZ!Y>zCqXWw3Np4QdKR*Sz5@OSI$j#b)xK}E@7F1VmR5Qx(d%{|KE9cEvi&{UlzJ}i zXfh=(p>M}>&3}H=4xF_UpOjX|Z@7_QQ}p)9m2Yw|v`~QD#vn2sVtR&cHHY8h()^U2 zIM#Z`w~QW3>3H|z5O@Bl+M8SZqAxS_&6lgzZjhj6#Abb0^FT%7r3iff zXM!&Ssf7|N9jKBsHe(3HOpUY6J5QVL7j`X>@zkc80Ve4@CaN(zYiYBjeH7bsrHVsH zs*RH}s18RCic!%HQueR;r83o-0>O@^Nh#1;jm4(Xqq}w%L7n!LD8*I!EY({5KVpDY z9@H1Ip4k5!2_{7haQwE9JJ#WM#gYpC4E$mK{IZQM$n}INj#jwwGSXG*bEjGKdFJCMUqCHof)mjLgVDx&E!rpBBe$b4nkZ z%U91W*aovauMdE!WW3qkQ=h?MlStIUqR|G8MnOb-;c7q1luGA?C-|{OMDLpsvG=wS z9GxK;(!r13i$y=EnN!idtX+N;?$2x^N>)_0<8|@w(m4;N% zC%L@87V}G?|I~4|sqcWzZx1{8lUwKiWcpQ1H@AGkN)NoVCI8u3G2Q>H;(t~HZ05*Y z?Cpvcxm5y#8;h7?qeSgl_=n>W(2b#BK1*CN0pJsUV4E_IAo$^Xj7xn6ekz2Ge83(Mi3~jq>qqXPRk+VD(XhsSf)2+SvnXQu?jh9+Rm~rniTC zmU&B!D_I_wG8E4k-w#cPgz9!h(h%~xUxozwiBMCtti6Kq_4y0FE-#+qB(#35CG$Sw zYG`gEi_FRia8O3?R*DkeX`<&<`K0Dq3?GwT&0lmef68#ng02N8m|&H2=xPpzv3=$X zR8y*DYdTSx|HWEMF92M8teV&GU{RQvnF*h7yQsuq$WA{kJ)?|)xqDQhsHyx{4p*bT z5&#RUisHS#701qWHhqYORqt?^fOVUOFk-o3J7Q3pPte(zhb#3jvqtSbofCuIP~?Mu z7RSsagdl|=<5~6i=;r3`-aRoP#}S{Dgb_La68h3C>>MoeykVIUyV{;)2st9l7vABr`K zuoqy0%^&jr&xUb;zlPZ$gWB64;OMVC_a%~KPnmNDYWgqAHrf)BtCojdYUPvP?$-2L ztzQH`ULD+J9El~GrgZ*WBda{5Aj3q?GhIWb@zCbZ1#1D z6?1CPp~Xy-7gYy^+>M`)Yep`Qxf&F$ab(hBa(rG<$;6`jSE5(@9}~8Yu>ue4e0uGSJ?{#jKE;$|s(Gl^xw96ppG(%`E ze#>k%g7-sc*1QWqi z?;S%Rs314Fzz%Uxt+|sPOx7M`i%F;BPw*nUi4_;(oZ;Hj&8pP6;Y>@(OoV0p0WM)n zj&*GBMwj_w?a;plDO9^$7v(g_DpQP!q*GUQ&%x(7@#&P4J5WzyV_p!jAlF%^g}cPa zQ?5QLNP+M-E=^;787^$R^hZhYb@WId*YsoSbLsQmqONmtLQH0>mH;E?>-EKvZ#Byv zoAZOE*caY?dQdKQk=(Ch24~oQ_+f|E+^+-V z&!u#%f)wDrZ(X?+f+U$mcUCQOGyXx(*G zN(86lSn|lVNyj|cq2a{_XHWEPJL1iP*11z#OUv%@QeUgfr=#ckSE0Z8ca~IdrT1c| z?jB7WwY@KR9S;rj*p76VdGrAS9q^B0XUJewZ^ZjTwdaIU0g;j9_J`7*4d%#-cd&D zXD_j;_$t2-Y81h;CaR}H!(pq2*z2C~D^t^tJR#I@?g*|gn9HzVey4V6NM+$-rbD&g zz7GqeAhWSO2GCk^KrC?K+8HBY)LL$bnw=OlXd1@Ezk>7{nGwk_`hFVLe|wm}MppJH z{1~YiJo|nX7Tq4SH{j28K*-RPFi40;wP2cE;VO%rD!~YCGL{*IthbLeMyA*q0Sd_9s{&uY z)twr}FFrD^Q0Z0;E0zo|F5REbm$%C#vDH)$)uh+v6OvjFu>83OCE>Z=inS)^)fM`? zrc?O!8yw{n`ez9z?z}wr(9c5N}Z-g58qNfOzibU+xz73GE@mzbcLS+1tp!%8Ay>43J!5v@TUN$x5K z%wU-Fe_7w_x5%d91izzKs#Id!c*yod(V63bp3+D-(1eDxGglnAw5J(#Qc4ad?GSoV z8M(y#0P!3v@HOjZ(}H`aDdm< z1A`cxG<|PZYek^0m_YVfBU0}wjzOSh?e9N?{*XRyMU!%TS8pEJT5`QR`R}Flnpf3T zCsP)cc=z1KWE@{{1t#{n+B|uaWz+*^nT_4#q68VV(;hD8eyTke8m`;Bran;#9z2Sg za(3pIG3u)Pndb+bQz7Cf|NPXI$`=H)VmSKA&?(C*ipWHrIE3T)E3ycMr`}?I?^4ST z=A$82<}exh5OFc;Qv*j-%!KG~jHB1~$1In=!Tu?ld);IMFbWECYV20Pg_Sny6IYiG6JZBQ^^(mo`{J08ns+yY#2LJ_>1ypRrP`U7 zu+K1;Hl56Pev0@yzcaQK?WBtXgcGFq=4CG=!1c(!yBOUTRjq@dI}&RsOInsngQmvq zpke2v!Qu@~!VG&`b&;a;Rur5iRqP%zI>qYU35&*fK#UaDfxGz~C2kkP_rn4wdZNgA zwRnJ!eliv~3;7-n95XnoT>^m;+8?TWrt@nX^=vT|KlCdt!^hmodv-UxvXT7{^ zi0kSQ6q2(-g$RQ$V`(8+97h(BBbA9f{QUVZ`@TNF&uGh|3YA)HcJ$N}xnpc$=x;VC zM5GOax=F`TNukgn4Zb(IMu`fkAZ6?BhRP=J{lZ8IQQji&sdojwZjC@QBNNVmae(Te;PG(yaBj1cV@`!-5E zNTlXSpk4+rbD8L+kwy*XQ_d|nu}mpRzLw?&WX~$dV+fVDU83P|HT^(OOx~8&*PEsF zulr~-aesWkCt7PM64`uj!a%EDKGGzt{h%ky?GY#a^bw87cVm+_a>L3W?ElC3eOdIK z%jebxnga2`jYN7(Ivo3A2IrjRIXV0(4^HOMy>Ck|@i+0aXLEly&-b+Vk8m@3BNGx4!q)e}#JP!lJwPM|9sB!J__d5sF zNW^ws5k2iUCn@ZDVp>&K!T7@qur|CQDGh$OU;NThB%#_;Rz*_8^6BJw(BLTJxF1A^ zS+3vrzq5+}p9JIS-X6@qtO39cGjje`)W_M$NeMACAt7*VOvcE_XszJ(_SPe=%Dh&s z;yC;@J*mi@5_4Tdh=!hio_a4(j+}~tp(<(a>ev6uO{$ygxv&1hTnSN$)>KmZs;s7_ zW;lIW7B`PW%#5hWdd_TTyn~63PAn)$%O!9}M&>oA zWy6IlLb){>t;&xqv`p~Bk|q^Cb}r;Mk5U9vjFUrCc9JGNhP)zuUkN@QZl#ClVg5cj zBJeFHUFH==H8xnphV zL`kJx1>6+`;5VnrB4;L-`k+Ij<%ilE4`0*snMB|BzXU5o34V-uHhY=X4i)t>04463 z;`aClv-?{8=?ndPh{?FYWQ z^eJH<(thLxQ{T7c<=+6G9Y))&nGr!f^NTQL$^hnyz@LB3PaSTL9+R0a6>#P`PnRMh z^`G3l4gt$Kh-(H*m}#a^i~KVni(BPM@15=KbLN$W@Qt39cz4NaB;9at&uA3t>+dnm zWDGQ)?5DS|FAY_LLZ7#mcIAya{vXQTGAi!o+Zt?~gvQ<7-5o-(U?D()ySoKpG`PFF&5u0K|K4}*nmcRe6TMi~)#Y{SoW1u+S-v6eGi`AjJE4lW8QEp? z=*oSjor=k6543H+U><9~mb9C-BaRF+)c=&z7l-NfS`{B+7TX$gBPcl0bhzzy^)s2G z|8A{9@j)(i50$@k;zaGVXC^0qb7+j5u;6AvPjjWUy#;}@%b@z%XgQ{5I&IP9DQkJ# z$b28?W~FQfjj?kVHDTs!*N|c!)jZf?uo*mq4c=pE+Bnx_YGw%098)Up?0UvdfTXKgvnNEROiD!yT75En5KOk|TqWJOSFJT(On?nS|u!z>8hs#e5Xav@={gog- zeu1@M5zo`LT;y54TIOD#3+T+FSs4{Y(L?`0l_PHZ4W;iQA08f7Ha3D5 z8tl5}=QRfh2Y+ZP?@v{_9{r(T#{b@+eAdGlQp^va0n9T}QEYbY(}$&S>vzOp1!@aR zexWkXqmLgCVL9)bQAV5@FKsy?;B;|uUE`&GP>|oENQjT8*Zh)Z1vJ7^dtS_b!z6Y7 z>lB2+n1usBd|19vMUtkpyf!rdw9)~;(AF*2|I@E9Z8bx@Lfh}j{`esl>3?JF|DPQ$ z|9e4&LC8gUX|JCy+nWj`Lp<;N0ld_vv;lBOOR)cAFZIUk!es-QEz*~1}oZ3 zs(vV|aUZbHRecBoV@IHft}ig3_ZZ^HmG#aoMjq5j(uPcP#9WPjY(ffJZppoUnkCUE;}0Tquk7LmazOed#i)~weej_`$_^_p1I3@+d}%IZ5i zJB_(aUtD-V0P|vlC<{Tf8veb!{4c-}Iu-ijN}r)NnQgKmthcB&Id@UuS0R0I>#hh; zjgSHi`%*F+9F(IFsO9T%C-yqP(+!j-?}W%T5Q_l>pkEvGQ{2K>G^OW>y9IOJE54ne z{azQbP}U_ZYMD0&aIiU<5u?j>;{NxtUe7w78-k-$Y#|axz1`s`R{nMKMw(mcof&YR(R4jN$yXbir?^M^)22FUmRxi!->{Om1rd0lr!Ghpzo>6Lix?zq1~y$0{czvl*dD3FNzJkUH6#P z(MpCz->JiWaC+4uHDy0R#`TSP(-A7OmN+lPlszzRmli8cWTNLwDd2Aing&xWb_z3( zU&YOzrj^fuVK?7{HzmMrm)D=L03MHt`V}^>-$p`pF|OWhH-8>)=t6jN;I1T>+Vi>Y zol2Zjal^Yn$@r}RRi!4r6bD%C6SFjZFp zlvi`q>kW0u>K-CkENS8I6pBJQ4Ob3n!FyuxG3d{+9jD#a1|M-@;qNK?JaNlQ_lnr< z6S*qSHn+7K;oSPQ75+O)@o&uLZxE>!@?Oh&MYyK39YI0*++Ua8%EpFSk~G{5Mw9~H=YG-kw3qQ&OjDcU>ir|JoS94K zIcsawW6e%X6*M^G(C^jE+Jw!D<*W(JqiN$xkS~5yv}gbnCo!87#M;;x*P#EcYi0zr z$9sWjdfc@M_Y-KQO8K`HRa%L!ELP22-T`p_mKr~j=D?HRA6+jN*H9~l#L`9P6Cteh zdI@$Sz^ugP`9DfDXKOtoY(3q*ns0xAnntno7hFKD>{@XZx>j|)$Tp5uoR98qyiGAk zpaBalqU+Eec9g1g+&J7QdHpuP^QidgH!<|bfkK}BL}fYZO^#mC>iH;qs;Qd_XF+o! z4z8u6GZKE|F$QmH`i%$#(%FgJ%*=~ut>2MvzS66I|EEbbhy|nk7q!iX6cftVh6r)< zL0<0P@W2G(d_n%>^&wh}uu?=O>p0XOnJG8e7={=1aR1@Hd!CNmx;l+*Z2a5nH&EkC ztp8U?ZO0_7;pHvi*hP=`JW7d`$jkC6eg1CqZbB`moeiIqlr^7?Sf-A#b1xMGgDgQD@&j6>|7Fe|!A+Ly zQpajn=n!g61prK#I$iG@T7AA*N1an>0n~9ETVBGHIXO98q4DwPI4s&>FZeHk=f`7T z69MyavY*JUSMydc05^c&NZC-7CFr`gF_2JMQl-w=F$dbs6KYU&g|mkdOMlLy^{^o$}!Ba-SoM%^=_pJUj{!UGpmr zf@r(tHt&<`>(G)C#$;AK7RnP`JumWor=vd_M_{0MXlLhJ3%Wc2=A&L^2JglbRMB17n9&VYgi-#S z(eow#m6%iOg`^R`&|wyPsl%?r2Sh!rFtTuqx6kYMyiO7?s z`wM10lWhM8(HZS%&=z5)-)bCO`j?P(1Mr_jV3hqrc`C_z)-!3Y^^XWF?~5rvUMX0Cp%71+S2Vcw#IDDV>vSf4CQFW@f42ehpewBnp5_AA!4*H zjBxBJ`u6n7Q5=Yos+vYyE043arZ}d^8DY029xxL)Z&Xc;;{16n0E07UDp-4d$G`l0;*m?kn4ZCqa8h_N)aqp*& ze`+fdfLA@PrhthhDQk&87vpvO(7v-{p4M)^8bEZs_q$|MN28+c?#F}o?7{*evsQiL z=U zDxm-l3P2gDQXEQZ+))Z36hx=kx;r^KPS%z_t*)$mcv^vFPAE6|jRVB9=O9r}VmAHg zf3Zm_vk)MdUHKB=gsJhr1VFC*`~@RM0UU0qY4LFtNXfFBSrz;{iF{^uy4 zw|U3I>Ei3OBzMv@&7Z4YD zc%@dc+&M8cbGoDm-)Q0tJ5!<46RV=S{wtzQU37=|Pm4R|K71Qx-_NZR{8D~LcvIZz zj)xU_bq%f6>Ofp3Axif3bvq@BVL5n_$vfc@j1bB#3h#zu@SLRVtACMRwH?YE1<0u= z`MaZx9^we$w%z6t%G@Xa-Tz`PiXwj|#V--%*RNXf^iw!z4|>H~0N zp~;rXEd5$!)oW;+7g$u0zufDj*c5lFt*#MH8F~54B5L^6n0%NoTtys5Pp>%Y7Pw(t z>gy}9e?(w5{Ej4y;;Efb)|!Numn!6;p7`l7@-axmvz(HTiR2c}Ff;h}tgbfgmg`7} z?>?kscvw3zt#eT_bzt;UAKwwH^OLzQFb6GaymuHcpj`s>M}bwf-mf?B%+498riN2oR} zKhms9I8MjxOYXQsF=o}ZB5KtO%cN~EymtwsO?DZ%8-sB~m{0ZwNoR+K2SLaEWHjH}4zi7<**zwI8@P*)nZ2lbjP&O0J{V zq+_Xsmew4Kn>5AuUA4>|86wyP6qZ<2@~jrP)3v*R!F)MQ#mnN0ovAAY+|rh9c0$Rw zuISTfZk7^@dA?Go%Ol@-kCRxZabifWUZllS+!m|`r@*k8j(?ncJ}XD!t9^5e$nPzC z6US$$_viZaoQ=JZ{J}>dNi=1Y$5&IB_4Z6?%~WFw)y-XOo1gQ$-2$2Ms&0sq6|=*m z^Wn*PSHKu$qX8lx-lEq;O%VXtdO=y`aaQ>?;hl{R{=`EEUeo3r%r zYONj~@lsqhgB3$j^+i>Y4@)&_iZ@eIIr_-H1}6oaN%;se+{FuKXjl*T48fJJL~*0e6G+eO;` z9HDmymZ&dmzA`7gnb9On^>G~uw};~BelL%PUomXq-%DtFWx6(uXJ6R@<#|j8=xhx- zaD4IiF zOlfRDx^xbzD(@LvZu6oj_Z_=+HDCWLfcM+u5{d4jPjRKyOO}2Gm&U8#aDl{sB>3v* ztlI^VJZq`s#35Xxha}O!hQ`3ES?n?Oi@6qX$7QdS&i4mPI|8bZs!{CGX>hCs_d}_r?(J9pP|szle~dUPVKrQ1 z*{mHj_~Z#D`T6mnRWX0o)Sv0R04CLt>`p=uOR)59I@^=TkhwMQdB-7kph3;MpKU8> zIg|=fURGEdWAP^V1A`L;hl~t*MW%n>wx1k4<~-clL-{0|Jwn_OfwuN?v331=G4@}G z1}bJ_>)*p+MzclWFjW+(HWSH~4soo96Q}aM9JC3yEQ4F#8YEY9WePaUlI+bd39z!- zrs;}AuS+Ye5U4sVaI`x}7eXmH-ARaU2n)Tu>{H#zSoTdg98Xu)>rje)6C&(+xs$kE9k#|fqy*=JB)i@N9kP{5>ROs=4yhnGrY++Jlrb}{lPNHt4nA;b)iu94_ z@hl-h`FB7+X(fJMB&KaOVHmZo@?F+#Y1Jo1nP=Fdc04rgcRH^7z+_jXotu|&_}=9K ztb%|VV5ZDIZM_(|_}Qbw#X@UN)OzfLyvQoeIrrbE5+`b>ARL~F6S0vLtAq=cPMq?R z2XG+TMrGFEro~uQnav_W_y@)5_FbkJ6QI%X5(15y8zQ>a z*-RQsBUp_q82{F$f^Aj5>|GF3v6Z$90qdV#Q^q@5FnNq}iY@aDBB4ca$ASxxjuZKq zR0LpgcM3wB!GA~pN8TUE?Zsyd`#&`BP=ggx7)|Gc&RJ)MuuWxO`q7r~Z=3J(1XnTz z2^)2Rr~YL}+o9m5U4M{W*cnekQ^n@YVyO4`6aFU zr#;gu0$Jd(41;`Ne?$Uv|Kriy%VD5{aKfJj(XlQdHk9(Mw@#(`6Va@mCKB#>S7p0C zqOTgE8`4NNKNOEygHf*pjJ)+N6nw*exZV;;@DXXd|I|Wnm;Rs||I);mZ*;j$)XALY zXRni|nVWtHY>m$|-hSU@4_BZh_Ezkrc_iR%8ieFav33Les)7(zjuSB?#qPUBDZdhK zDeDI5${gCxx85sGHk9Q8KRcKE2#0W(d+W+L(Ft%+y5f%`R)yG}3V0m^*@(QC?%?iI zF2svshS2e`nfn$V5h%g8lZeMCS)s+G4dM$HeQdttxOnrn3}7=KWrHX6*m__j38YtE zpV5y2imZ^n8O0KL8S#KXV-Y$CDO5+t2`cz)F5US#YEbMfKJ4B7pa<6zMBf({;cnpR ztD)B@Z+&N=;Wardz@0!le6)}o0ZmcG3uG`XS;ki5x` zv)CTV2n|NU1w_ASpjq(*6%stz=BgUdU4{^Cl4sX4kTg=yuJHIIaPlwv8TsgWF2)41 zIxlJ*)OogWojA@q?)Z;8Op16{aQ31e{4nzv zC5O#h>}zqM6>!3dLrJTJb_hl1-UKAQi?l!^n_n9He6-)xr)b|z`k!!8Feeso)^op^ zwIFC2o#psJtm}TNp`dmy5#3^}$y3Q@udIA2;>-Sd&rsp0W20NpPb7&F*^398Fx1D- zLTz%QX$US;0S*4h4MP|w-ROoja@?T|0cCiXJoNrLR4=mKkdpP2NOyw$wx7JO0B&p| zMOqm)sWTwW;I0DJj?ljL4y#!XCNnZvc>s|O%HQz5yHRAE@0|;n9wp+a^cFEy#1F7g z%b)Na)EKTC>P#2=Y*MG_i(_$v9qlg{XV?b*%B$MpoWy1y6KQ`fQ)Nz(9{R-}&S560 zHm0hnlC+CC;Nf=`Q!;}G=C}GZ0@=M=mhf!h8C7+4JV3CSQ~?GT2*&gC z|NH~#?d|0-fvIsSt^x}gb|V5$?*T6p7~qX3nhswW3@DCBSX%B0hmKq8C$n%T`vdgJ zq4OkUB7FStmKGuR`SEc8#|tnHXY!KXhLXR3|Gu)SDjwOy#H7cNTP7_nO-5;HWCZ#2 z^z`gwTnrs4fD5jztR1ht&g(K4zZLT4&dp#%#5mkaLqo%j2})v_ z$*YHc{M0-)Vvo3R3(4^Yvz@r~9?QYJbAzT8+3hwb;-acN)(LZXnpzbokDTTewQ1x?|4d&KcC)G(e0;ev#uj&r$K3 zcOQoRMxT!frpB0e>OmidSKKs91^h=B&#nI}qB=0D8H|7{HYhV-%PaIOAL)PPp#JY+ zum3?-{T~IRxK2pUVJp>{9uv6i&EK-5H^27~Gjmr_5i_V7J@ZUDN24$KDNDe|$ASQ$ zXAz@DVK-#}tqMT7pK*+F@u%|qqNOfz%;2vFW>?e2Ar9G@2}K`=sxw8xa6D!$=hT;*!OXMysG#h&DkPAQkTOqHputO zu?}TGl!2I~Z34hQGm)lfZXfX-6(*fqHVBAtuoZZsW=VXou0JTcDr!pn(N)s*eg9K) z%$1N zs(-6=<-sxW7pfvr-wDS?Af|Si8R39QGvL#PUVIWMALyx{nW>iEP}%JTi&!zy_@~FI zm}IxfJb$IpdN{2CFzfp_RTtQCMZONCGT+Vd-49rN_{n9To7z~Ak4l%tZw5v4J{z7? z$^VQC61+ccC^cz+x@A+U*^ItqK!1YExk8#nKGid%*7crgc#aVV5reYeG|pDN8PeNB zI_fjgXuBImBJ80*9`|*&(HWH`W3Ee)X}rEwTA$70N9psFqNof24ks_Hd6i;2XZX-P za0AG$`x~~1K3;IXDALJiu_NsB9QyqXBD6UOyGS?CdQOP-zp|<+_xc>~|UP z%9o>B4fzlZ9;g{-mTIC{o+ccNGN8ckC(j18}xhuDN^VeiLS=TUS5o$R?{vQ zFfk9boLX7JBa8&)B-eDr=GW5+GXeTV&l{@xi0GqwEi`Be-snF2MboPMfk5eZ6v_DI zDTLIQ`R8< z&s#%|4CfevLb4X#O0o-qDYI8*BRXN2hWAa@wygW*%hdq+5Om}HD*wM*bv z;Pu5k(l~0Azd}6_anr6}?l9Um@zs1U>zlan=(Njk_N=ZU<^CltFolTLCa|QNN1xuM zpNsUP^b0s1X++0Z|L_RL5YEz7R6R{#5bN@`wZgnx$e>m~>+#c1_}+b{>sTco%{sw~ z-0yFnr8NMp**&Hi+Q*YFRDmI@5>np>rNT*wh?0i>Zb}O&#bt~ao=NoufO5Z}6=F~6 zF$APRRAGvRK#c8tFDDPC4wqTg(O%(C!cL<#bR6QoA4WQ@4$|8K72$(0_V!-y;WPx` zS5M%yGHXs+i*jsD_UVTFm&>>jBdU9Rp1rajNu~U&G?bg}xa$LcU1Z;?Od~yhSE+hf zl@wLqVX%8QarWsqyqJSwnvB5RZ*@a2+54GOH&SIW_QA7~!$m5I1-Qt9f_+mKIy#28 zJ_h6^G0uluS+Dm6sHh|cJ3FC8L`3*ppP<*)*Bx#PO@cj|K9czD@?c;bu4D>RuB@Qb zhzk023^%vrB+jB+x+3%%>nF-EJ=m2?nrq`oMTyV{M*AAGNs)wiZW}3fZ4bVV62?Ku z*)Lg*&kR(`iwe1XtAUU;mJC{+{jH$IW9 zwi#(F^)+xzHAqz^dl;Du{MZvRw|q@^(y2M>$ecs@Cu0l&@g0gUs=3vqs4E-wyJ69Y zZx?J~>^)|{)X(Cg5>&>NLIssxBARtiYi;|YbRwh(GwlzyW;VkF@qtC?^2{80YSa3;y}`XpW3sW~WmpX#AcWoGxW;C1!eYHxix)l@t}c9r z^;S}6Y=M?-OP;GYhR9Fic>&LJ8Ywd5AYe28H(uR>WDKiRZHWMC>pgPY^BFCUK~G*9 zBF>QFp^djGOq93ZkXCFL=Ms!CElF3jji5bu;YTp#y!9N$A1AJ^Uo}d64NI`w<<{LU z2{3#NAzx2}`)>5ls4#=VVYm!3&fM{Y9p)D;tQ4Q27WWnfl${qxEb)494aXsei0_6a z^G0xpTxCK|H&DBIP7wkkgsRMQ1Rr8!du^Nfh}hlKY#CibdshSW(4QWQpc+jt1V%jz zlVgw5izBx*a3L0BhTm`_PjYqA2tM`QZs{=%Pex;{{uBmH-ECI&m;dOIm!zM=2WHkk=}&Pz22&E<-{eax^?8 zv!;;Zv>19tebeQ)%UXZP)1L4-cHb!EfBr6K*zC@8CdWmr0DcYG^Qf<@3kEPrfByW@ zUq4_R0&)Tb0^vS#AtCK0Z%LEq^Y&-0BL`=7Wp@xt*g*1~&yMK>he682o||d;Y}ye| zu&kNQYh}^ZQLxScw9oi&eJTTgwu}*)%-P)q~b` zH$Shghtu8dveVn`9HhG5*ZUOc`l4@}?OZ!~yVaachrA|X-v^F4-b?zVv zCrPuic-54qYtjdpY3CZ6)DLn8vk(W2muLs78 z^xU_P1g*PM5@FvrN+NBqUyUrfxkAWFbG$Lg*Q_=1eMeN95@Kx;Hb2HrH9~{2pk@^h zBG*bAR)So~vq>6oMEd&Hb1Q_O?q)$jK|0+s+e|`>CJZfklPjN{xL9DR4If;PQp;?^ zYez` ze&!dQpy7puIQoFChprf`uZ*xOgygO;m0dBn{pcMoKqeMM!FI4(r(>K!4L-l2^0}Ix z1iL~4v^_hU*{1uqNJuuhKn!bYZ~zUF-*LSjPYkgj4NO&Yvmg->kv%|pZ)|E>^Bce~ z^Jtnn1C=i6-ljD4<#mlSv$=w?7UwoMnQ(v?JgNl(0DJukDz(beYcvRak*MR{dx{KA6quFU#?@z#j#0SFdTj3bH%dNCt+3p0 zhOi0W^-3ArvOJ*UcTEt{O+Mz_4Hz&wtG&aFm~cN+dT5+hDlUm9vZGE)+5es|Y;EpX zmFYVc#^fF?Lf>4gJ)i-%Gi^(qeLsOX_E<^4?0T!VvrLruB_&kMCV5qYE>7u#!|lEn zJ%2$Z@-Pm982{|&9>sp#IcmQ;-(_DHojlOEwvZ#CY^wSKwybrtbTzvKG9fK=gw!59ll$p&M$JOhg3$TSWuoR zYES}rM3U-X5Cjz3LXK6lyRI1zE3GEb5BS{SjFJh~RRy}8WGii+4Ddq3y?%UfM2C;% z4UyJ-)t2gpRYg%?dtGZ-%gGmlX2<>=%?*Q|Bw5BGk1SadLIR&-A)G zRVZZ=X%!X3PZOV!pg%{lJy?ln$}x5IS4?-Za1%dI86an)pSySR60;)n1a+rK5{cVFbRV1U8!5`P33h9R!5M!@p_={4s+Hqcq~lr>=Y%mosdMtJ=`Tx z2|}zYQ@=5ZtXcMQpQ%5)r!85MXrHN8XKI~-fnkH|#;fA|)J!Rvot;6Y)ZilW_P~pt z6fl1+y$fyE~M?19=jR*2qr0buLY~@A(9YMl(>Pr;g@nxjA`a0>t0(Z zl)RUlxJZI_0pkMB}yTK8*Kjel;Gc*co z^VOx}^I`-JiQO@;!{J%Eqg0eqku zp!Ue$h-;wXzlA8j55TRMnYk^Mq&4kV?@5nEUOr~NTPVGfmeaikN`7MX*a1DP9Z*RW z;)r}$mCL#9kq_gl-*PHW zx@rtlpNFrK7O}XVD4U8$n<<{x3=5VJ&W~f-N76yH>=%9K6weP#ie5BlAGZ^z+o}%= zOrENr%|f86AIg3X+LM;QezTt>OYE%8I-=D3tX%-Q%;8^hB>7G%LwwXDyJ@3(N58H` zwx!1@Jb8~)+qWG(ZI~^pvBwx%U@(X(wRIce{wc)Ws?F8?ag2M2YGw?~+R~)Gp>`YT zSa3x6IdRou-f~f~=cc$dJ8c(fnS+dr3VBiWcI8+_IH}1n{W#27+}VOe7j50<=f_=^ zl+-cTZVn&%$r*{qZ438e`O;^#?fX?Ec4kdA*0IZY=O;##Qr&!q^0S0ZyRg#MZ?GY>AP~_ChpB%X&Ov8a-x^xP&WnqgA0Wu097j<9Mcry8}|#;;+t;T z#|j-GSB2r1qjt}1j|RI{Ts>K zJMx3FW=LnIwopUA+Lab-z%6bG%&H2s#7*~#QH~*&@%G9w1sT9K%M9s7bU?EgmQzhh zj5xj2+z5_U3x6B`e2-C~o!q0N`x!b;Z&Ho~m>p?5gw~`^uREkL5ZKcG|aD&Qh z6}jt;#`XSgwwtAY4pDn}xaVzScGfC_M_vC2p`lKgA2&}fES!enlLU~(O5VIyTlb?_Etbr(SLf< zrihQfozxDDtz&}6Jik4#*}=ufbLc9bvS>*E8tJrCGhHnYT+`S5HAjm)qPn_LZdg@U zmgkA8_jaL*h>REYnNx{rtdoqLnjLk!g}px?t$<&{O%HZ0S{JTgVX$|Zq0IB;mZueV z0s#y`(l%W}^g^nYOB=xQ8XrS%JE)$^|KO8(fQ$oKhL3YTK!f#Rmjlx%B zOrEkTU1uN}wos(D{JdBKF$Egiv!8L$@ww@T;=#eK_(rVE>}rb0o*|u}D(N9Zp0WIW zGVR#UYR*n(olKS(5mr7bnVMnx`9_kpvJ_(RTWH+q+f=94DGPD;5SQ^VirLM=vi=!h z2rPDn&Bodv6N4RTgcv(vL8TU6Mx{2q_r#D~RIbg)Co0u$+446ty{DAjpa=QZP)jnY zuB`}!M)*daJ~_REotiX!kSAtFxuU`Z>|G_Am4IwE>cyEgmgm6o^3Wm2j#hsj*9Om$H93rBeSM& zLaBhA%5!?u^m1l-s~|($Kkhj=xLkcxy#C@q{ z9^&isBb2FVXj1V5z77tySUihW$@&wa&KAz&)BAOd$4z{D(-=O_PlGua{t0`JDpSnV zXHGw_Zqr=*So>&0?AB?a-Ler2*Att3(anm3(uz68_Jl-ew*p6l==D{8wqP-b6g{*T zTJ_R?%ZAcxJz}_@VB5QRQW&Bbd}2}7H09643vH5j0=*H78ujDMn>-awKl8Op-sML( z-sGc=G>{Y($oS@<0xB^1=7ZJ$+udEcl#)RuMUVM8gYG_bOW7H2;zrWXOL=&vhBMLK z%d|d4sL_Ia@R|8+%zQqu@czKbri8m}}svz)iKw^JBdSt|k@Uvk$b6^SVq>G6LkktUvp((s(a3o*be{OYC;YSSD4 z1d~o+Opms;u|dYkiMhMG3rL`fIXZFxFk3=xE*)h}O#%)Mj<}>G>TLz&VW+rU;wXMJ zPH-1nwErlmlsJk3LHD&j)-Vt`G4adSFWQ&hDx|sV$Us3cZ`<_~6BcjNBQphlFZFIC z8|2l#BG(~{+~VYdPfT3KIlddXlj}b^O^>!OK)FR$`fS__2VwMY+wR6P3!xxmAZ>eJ zPB)#%jbI&f?5C5vC8wp?IG;}5jQH-{MbgrN5Dn)&^2sw#^L7rZ`FV=Y^ErZQ5UQ zl3)=CRT}Rma1)OU$e5wG(s$K0Qz^x6TR1)>BB6#ZRANstj$;*s+(IbhL{RCWja{&8 z1sJEIUONTqsTU4!7X@`ptK53!$37|qnW=(v2FRD}kl?F&}2Z?ObJDi+{~M&T8vXm!u2}yyz2Z)MB~y&{jrhp7^pe2dU#U+A{Jo{rNt8 zJ%lR*Ya=AHXZ|KLh*xWU%GWpI&BU))?>$d}gtpZzjsX*SlG6BbVP9J0XVw2e ziVrzYl#YwjC!1l3bR&-YSianz>OEm^560rYUU6T5ZeS(tUM77O^D&%sd{lQLuEtQ^ zGHvwIr+J#zN!uEAZ_hivS){N}Tkj5WxUoLL&=6_r;&j_Oj$MC#x=_5x_z8nm{*tgL zo0DhYso$~7>bOB_Us2b8s+BevTb=9TGdRs1O%(^Hvato%PWYZfK0gWM=Fy>ev#<9Y z&|dEb#rv2D1N9n`bCE>>lNr6~?DVifT`C}xgMi%87b_a`hPv%_!07}gGupS^_pzrv zWm;Q!e@c*5NszvnbO{K>sB~wtt3JE~Q;RegE0Gy%UR+y#;?* z!7e;7jRTO{?OmsI>G$dGhSDsnil%~%z{82NXzs9YKC55NuMhfms+QhQjlIh8G6EF| zUg2Hs)|`YzN(CYAH6uJBHz^(Qq+jaH~pbOHpz(#hbo>?p^va_?F$*bQx za^=AB3fIC^UJpp#RFCnc#j@#yUVB6(-u4J*cMa|j&J{QJJ-8FDxRP# zR)bKv`eDU~J=R7vaug(J`IDLJyS&8L`OFh*;kJ%m0KYi*S!mOmeaMqn)9Dk8J*&L# zI?egSmet7snF7dm0a}V=uu;MEA;=+v$e@1B78KJ`htKMg5gGir+|g7*UVY%hL@@vQ z+=YI5X1doZ5=s+U_p1}u?fRprXegS);CrZ>A(@P%v)5sq`sjXvCI>7%yVR{G0}`8W z%p_6(mokm!7VVWSTo>kG+C!yX4n$^|Ded^Nxc{C}%tya(#(q3_^mEP0W5zQ?%&O{) zO7doRvClz-OYs#%oY#Et7+$}78N$i>^o{?6Y!5GU&I)LF2X6D_B>nP>u$+! zyAvFnjfTxZFs`0EHV=ETz`Ys{+{z3NNgu$3(6{q^#k{N?NT<}+x?D1A;Dsg^QrF3@ zmu`!-mIuTg^ke6AmIG8IxP%nPAaU5zm1gT7A1Zq_@%7@6bRWIS5c}i#c-DI?;a1|} z&~7u>7MT?g2#NggZIm;kCwxv8YfA2`YVDAi8o$93$y76IhSe-ODbRMY$(tN`!k5D9 zdjy5DOih;51Ox^;!?W8+_H-MKHyp3;j@?m`F{qjme=_LU!ZWn4*bx82?zW>8G>_kP zlHRUND+K0*M|l&KT7S4(wsSdTH|sory-F@}W7HV#SkL6-d=65Fzh5iHZIjH=^X&lS zjsrxz@78-#?#Y`XhL**|#Lf<~N6&VZ1rhXL?oskaJCLgH^KTItAR*->ez#LN^yx|r z>B_*gQTl-$1PTfY5g9qj46=6&0XhfVgdw?uAbGKHmN6P?>H+=DwY5Cp6wCln>8sn@ zYENElS-Vqbla8NHOn_^1FXJ^->Ns}LE|YpIQaX#cAV2?rTtgGImJ06T?ZL_lh?JD{ zmhQ`y&bZgr5F5CQ3+oygLiJi|K9*wQ_?r`rynhsQYFQbxwvLXoPj4lCcmRuzZGC-x z^0^!WI)FSN@_K2J)Ot3kG!LHq^*gN8UqcgEl{;0$m%&6>vw-*8n2m>TWUU3s4wKrw)jOw?TzDOn7N8;WM#^PC7l}*h+=^3*=*ddNG?0g}4&GVD zmD^b;sw4@B?mak+zl?bLYgBAM#(d)bca|TflRfI^&?dPb2hZObz8EpRg{n}E0z0q$ zF6n`(51ByN69&E5Lg3G=f9Dpj5FOY?KvUVGL4Q|Ahy^U)-xBha5U5n(D+UBmD3F(L zOd;BX{u)M7elTn=z2k!Z|5L@azsSb%?ru1+&4NNhDJdxOG$N9j>F5xBe0(1GrGd7> z2f^4=|5;pAQdj@J>v8c8pj<N(wxGO6wLu+YirKYEM0wNNF z!^2=49Gw2Kv6)}WCnqQ48!z3y^Mk2`7dZb72etX=_KNaheSpypWL| z@2`iv-oAwfgTZWOqeT3uKo+p%O;{Zk5+Fq~_{%T5)3u&PfUzRG-p-8C6%h!!hk$TzY{&n?iq30m+a|A$R5X89ohd zq)rwZ!uth&atI)&la<3m9o_c`@be#!UM74G1qDJt_l6srj!!Y2OJ)lb6O-NN!7Z(V z8K5+CjB9FYCL`zwoKqK@buj?uI4XGOW&IwmfJ))uvVb&;0ER0#nVp743f@C=Yp}bw z*YV|~C^q8*?fZ=i>|QTOzq%Vq@j)0H9{!d1vJ@|0A?QOb(m9I?Gwf)(ygV7~ga?JH zp&HMm-tY=oMA|C<^@S}KpZV0E`P?Y2$0I@Jqswez_j&>KZ<&kxA_k9IAk9LRI(N#I z$fw0IRg}T``z`5UX$FuLptkPz+fR=0m2k2+>$exhlCgs?JGUC2ng(CqKF(^W^RAO^ zNmo_16`x>g2%<=P$R7G(^$#H>@Os=QlTu=Yu)yM1;T@mCaZ=e1l(^UB23`Y%wnsu= zpwyAuu$*>xn5d~GRsPN^65wXASeCojpU1UAFhGHfgx$mGHBr4C>zL%MdKsm~ukb5T zQD7hm914){C(#ZOkSRv?t3598W;=}h`_u6HcfXH-|NmJsAR*~a|XZcSU}Das?n0<79?Mh z1%CBv;+OHu(3*62HExk+dG}f;wcq?s65bIJk}a6yDON4Opx+{)Q}PMQ6Tb0 z6ws9&8x{gE6+f`=S=F{i6~@=W2|?so+7DtOVlmSANm*mKA54s`j^8OLrZr)+tWm%bH2zdaqw#qM`a z4aRO*L-+6?5g~4c3TyP!g)v**nZCU-ITGQw37LRHSoyIE8iq=>kmrJO8||c?tv2E0 zv77!fK_H*Q4!o`K&{HOC?(owT>K8&J%>o>3mO$1*cCq`R$p*V=WCuhO_{rhb5pVxE zgEMJIzvqt`^*gF`Yo|v2qz&K__IJ9!Rrg@V>c5uGSuKe_uEjePxko3VkKf@mEGwNl z-zHsk`z-1)w#?d$FNI6wR}uol2858;C>$cuWy0RLAIC2Q7R(gbPP-Z zLxo3txN$79NbGj+%)mN67zH1TyGe!H9-#Gn9>9;`;g zi@lOJYj8|_N0bcK5J1NNUE>APmi2sWjr2_J*bgnXoIfNk4!4d(dQWWF?7X1{quGS^ zuAc)ld^4HsZ0$ki1i(wk&q_hek}bK6s~aHj9Ve~IX1czg{N?4gW3&iB)06b%fcuGz zmmG&*@=OR94&R}l{+ky*hEeDL#oAj&#nm)zqqw`f2X}YZU_pWehu}_dch}(V5Zv8^ zyA19G1_|y?z9IJ`@4MD_&iQlJ;tvdac6V1-m-JOvp(iHMjhh(%l8VS9BQE2k2;U3$ zbV`GuDxzDn({LjCS@=t(Jc8~qeH0EkPE<_p-!pQ+MD4v>d+SvW>QUuK_3h5EDH?mh6%4pPP1oe3qujZOvHcQCBDm_b^u-`PmJgsF8Vc246mF>RkFXR4!Ent!1d%{8jZTXzp?~_46g8k* z7ZAx=_(`3XK}=UXv@$a@Cpc}H%0o@ov3q$$>d(4@C$ehUkHSurGRY*F;ei5w`eYnR z;e@GA@(E~!G%WeRq7M|@0ZMTJKuBS61uKdIlU>KJclHhyL*4YC+J7}OrQv;{&5ZA> zVge(ez8#kzEJ9~F{%XZGHHrUi3_JQf0KgHiqg6mxMm%pfuQa(4t^gSHcD9F#+?{9d zdDZgc(n{Jh8tT0}Wb-6EOq+LpsDZ z#v=6vpvv(T)81}|VxEl_aFP(?WF@`Eu@J=Gi4c-W5Lpy1V-kxzLY@0wKvF zw+7&cdVqlv3URi>%)fp$!)rNlgNY3V)jicCcEd$MKLU_#XUA-oVc3Cz5a?KWuk070L68m$4q*Er$8Z9YR#sVxZ7|@M?$-kV zpFRBd#P0*bRD>(ggS1$$h(}6hzYRVG1~#hCAkSEq@o}QDJ0Th z>6HHx&A_32H$AQ(q53h@iKmG-OcCdqdR4@9AMjYo+oGr_ZYCzI`a>Ampb{xJNva>0 zoJpt6h5ZAad~6{viw+V?$&##__P2kXDIoX%HxWwj=YH_CzeX*)A7s>c!M=f+-Jtnh z_w#<;FFo>1qV1c#wcbfB(zOHiZ^rUJJv}wDwe^W(WMVS)dq0`@z<4n4l%I)x33}dH z4Pv3dJRF4&7k~GpeVb8DsnNS>P*7%mMK=Elp7dw)lR}PdR;!hyd}LB?KuNNWe*VAcZDf;KY(vu#e{?`^B&PO zp0Pta|0zFzgXWcwGZ@y{iQ~gn+3tY-#u6F$)!duUnGKn2-;G!Jw;;+&eTCJ>NCXwF zd0w{`VMeoI@14Zry=M}HJY>D0*o zG9|4m4x&(oq;;sJUP@DyPmt6F+A%|~w5}%~mIb?c4*TMP*Pe#2C6*3?tjJ+fjLU46 zU?_IlVVNkUtmaD^H|ZyEskUmh4;dl_g@p-8DKTrA!zTS6I=cLVh(Y`9Mqzzq4{DXP zF=AW#m?{{?(Fgi3ESv5?5#GbBAgJf6hyD?y2%_)%fZBk*u6p0afH#5Lq0DYenMDQTS zG2bpQIkw!QdKmB9iJ&qifo6rU-wzRj=m531FT{%A0QG-cO&-F?tLr2d09+*E)n4`w z(+^T3Q=?Kw0ld~2`phHaDJ~xoLRO?oK5;0B>63H;p*$YPv`y=NDEH5@s;ADeSG_?$ zwvCLcF$bx7q%5b;pcH@FO#c$vxlRO1kw-oa(k>_#dOHT0)_?7OPF_%l z4j;MmS8DsYVlNDjq@>i;;qu~nm$GV|FVl_PO_24g)Gq(=my8Io^n4j z-P#qwSO3hmm)zNlv2ybBDVS3Lu`Nm6BVfc39_ShUodTGd}7B)=>S|k4bW=4WsZirPpP>=|MwF=RJAZ(zk2L+NF z)!y6d>!8w78c;xGXl7R8$Ou5=<>&v|*9U%fc6M=lD+MAIv%$3@ZK`r^GI5cD)gbaG zMS?XHhBQlq5xXUim})$X2Gw22yxkEJ5+eHf0jso7A)#YIO|n1J)6vPPd8QsO)r=Dh zX9E+qhNJNdkNQ95#Y9GaPtCX7P#1=zUVssX{KvJyFA@9XBU^3@R?_?Y-rabI$7UG} zR8PSd3*w&W5-00+J9d75FOr-*TZ{GNy!jAx@<2M&O{p{Hs=CLo?E+@-%PU#UKZj8}+ z5M_Ig2Zn&_N&KzFhRs&D-qaR|B*U}^6cUaZO5F+x3VsE928Dybw@MJ>M*Y-Gz67wn zn4O@To)?Tq_^(H*5R~^6U&H_g03K%K!5HeTvw*3UpY5eG=}?cW&x0xSfqGE~IjvV$ zSJy{F)Dql8AmTEQK!!mh;;6&*Hrj*In+Y4%i zlq5r5fHH0~-9BEAYmdDFkRWiESP%>-uHH~(twBKPjX{Oo=11r)4q0ja;d@n#G8*C5 z`;DcGI_|{4{*j))$})o`Um3MM+8pTJ9XZu?bSOZI`RCEzv^zxKqSQO&hp?Oz&myQK zaG!z2I7trhqH7SHjGp6_zBtZ+$9Z2sJ1V|KlS^ly`RC2!yJ}r}{!_d}U^>(nt@GZ1utK8F5QC4{*b23tQc+n|Nb zTi;&AC?gHWkEd#=+`o4|klRfz~$J(8R0H*9cD zFJ6?5jTSfbjdsYk^|4V3jE#Yal=BBe5KqX*4X%c-8QHlsOZ{`7d&cb~bqx2=5l#}c z*x%}xTLDA-nN)Ppibl3$QXDE;kk>v8#s;?T`C)@oOk&Q=^<`%+sOMZRTflY;?TY|LHo0}7I8J?P|BN&Evg)cDDz z6wZE1`zo3_;lzNIp5Lpb1+pz4MfxGQ_#?22mp z@_<1i4&942FN>V4w~5(&6-(p#_&9lP2PRBA=RJ|Zr=21n*>A||oLXNUDZ%RYQ$=M2 z~@+qLbe{cY^^9Jp& zevmJvh`tb3GzQ*U5=YL)74~=C-dz|@xN=lEB7Z{Cze)j$vylK~paotq1*`teM&-GN zDby^{U3%b0ijy%d6@{|{I$x5X`z zScMWR3WV<~3cA0VfLhwU-;sj41?+VP<}?()LNAo|N?j|Bi%&xUI3{lR6%pnLP?{2@Y}^$nGJFuo;pBUO#(#d(Tws z3AFX(`2;_yMrHEYkMS6*fN7wD(OT%YJ0InMDfE9LzOB-_p+MyVGwAaCoKgm!HpFAt z3#QHePUTV#p0=O3hzmUmC{-S>Zx8(6OX-5{|Cts|6Qz?Y7A|01O$gx-LFfUA8PjsEaO9?%n@Ov}GT z@_+=|Bpm-sN+ekRO~-Y=m9btxZ)g5r=P)c3)CiC8tTmAk6MQe{`u&z)TndxUW+BLcVfTljroL$$19<7sW*EpoWaloRF9Gen|IT{K|7c?j zbUonYap7}RoVvHsW#xCp+oh8(sB~`8?fc3PazN_5ADuw?+5Y8atwpcnsuna5dDVgW zW~Yaf2pg!^8eiOvk{Nxe<7}rYzvHigD?wtondf|v)rz@3m_A;>f7t^urANi=gRO`E zcO_NzpbRk_P?%My$GFN~pJb^6WibkX$JKD;M=t@U+hyA<~kC!_hvV7oh+51@FpT@Jg~3ywLjZnKq-I zrX;oLG9_NjI{jdFpe}!O;(@{X0s!veD({)v626iy|H9f zXDJshlAprI$Da#BM@PRx0nX2>YfA^DPsI{y9)(}POV-Pl34GwjV~e1x7hGK;lq>t_ z;hlzxp(^RaHZ2^mBRefC@yVTYjv4uT$$bJ%&b+UYvLufXM5`853+merx*OOzIbqDb?fP~Q>mA!NyLT9xEie76fu(2g zGPAjra-6vCn<0yC$0_5Ln}g@=C-1wJgNKJTyH;aMR2og#m(`$ey4zuD& z--h84{Ww5Hc8Nqa6{V2WFPkLUzJ$<(Ud0oG*90ke+5Wr4uxuz^FY7ANpkCm3&D(jp zxHKuZAdc(T<_EM`ro)Jelrits^ohX)YmHi-^dQQmswB&0Jd@W1LSrrStPMd-1MfHF zyYzNSK}M{)2ut3tyeI~L1knQMGPY>~Pw&Jk5^5s6%yy*vM1Or5^4|eZ$8XzHcP|4@bJ-DWUTRj8QusEeD6%8;M*_(N^%$y_{zq4791nX_0SW zygu*u_;@n=&VmM`CwS4<)6`W7+st;5rT$k?9|Q52ASvK?MFkDfPNgUo;5vmBFNZ}- zpr*Z|ZR|_nCu~LOqBrMRd@FyPzQ|MM_T`V2&iseJqIu7;flABkW;DJHAtB_XEAFin`8nwW+i0gbP(Kbf~GyKvLBd6WJNzFq$PJ^tv5GIIOX6;q@gmm zLsN(^8m9fuKUKtl4lbeGK71n7a+&xtVacdr%O<5=_G=g)Rw<%qFs<{v{X~QIXRz(T zz-$N{ML|VjpT>@8h!O|NNK(5%3%9DB?%4HkZxhcTFQIGOf{Pw$fM&?w)ma39t(W)9 z;VC~#V5JzJmJ%nuQH00-af+Ze2*0)ECl}b}q$Wm~N%~Ad33aN;XTd+mR@eWLt(~zl zn+rw6`6&3@uPqX)qoFo6aXM_aWn9YnZg82BM2ibVhy9#4yrRViDprCmcgqYM*rCy| z=O}Iae$9Qojh~)d|EB~r=D{RLvkbu*)88nHN>ICUYo;G1{>-&8_#SQ&XFtbC8sBXg zs%=@x{*xnXN9Z;EAggk|Q6q5$c)0+?i4@4hksMy`P9I+Rc&TKB_3gIMVh=dpjIyb5 zJ?h$U=LulLs|dTcQyYL4MsRR>Fo9~cZqss0C<%2+NU$yOV<(CIL%gPphO;tdYkS~! z35O23ER-G#VWwz!B0tr{qnm_ndESJ`e=qSLL6*s^TQ!G9ma+4MVw_|`&(zPOLzhoM zgHjt`lf@C>PYxE<)Y^0vjoqI`48h9M@gveZ8{F*>e|VYJxsM{L+Ldj|r>kAq8b#snRA=UjD#91x-F@{RF0(lRsqf38EI zYyZxel!^C?rbd-~5QyM6t8I3}4O1&A{c1uQ5gas zd)@)$(9gU)Jzq7a&^k$D@a|!=7U7gKOrq2mnl)uY(`o-w+ETxE&R-K$Hv?KX=x1jrv zsvch;@vwvlW602AJDJwC1}Cd55*BOKi{WvXS&E2#$I ze!2xmLkz1FhJzQmQ5AUqCUk*e*_e!u@)%__h5xGvs2I(@NYp8rY19~TD7NQbcEl=3R^vJaI=smY4#j(3iIeotZjzczyuA?B1UL>{2(45!I8ihc zfnJd%uxb^1!MgpOkizvFzm`?Cs1cF*K+Jh2Ky%DgZsy>gANjmQD^Q8N^>*moQ<*H* zsmXlxUnSZ^eNc&DCbZb`E*PfK3fxlueB`+d*Rc=@@=ro*$ z_-|l^q)%!`_aIEK0N(HtY{D=##CSdSTT8-zUQQmMpLn3-7`3Aa z{f?ADci_)h5<^}#{bufNjZ*IQdWT#MT^y0~)Vf#7C!_i+m>BoSkP*}C2Dk7VfMv#h zfGVp|gBj5#X9n7C6q*(b);1AkRtVQL%`qBf&YzRehsY%wcl$f5ibQ}vmQ#61#n_$;*O~nz^`=U+&>VLYTC2V z}mNF1Y{-BRx?|$yS zMG93YX6m2avFL9ds8u0RyLjSms;y#C-v|9>elvb<#jM~YQ!_rwTbCbFf*OD5il8~r z?d54H)w6y4yu-Z4&e{gFS_ysOZPc}`YUDsF#7tGp-XS%Pj5!bj(}dK$!2ad3ID85= zX^G@+axf^WOT-HS{|jtIsRr5j3bc8$(ULSHM>}e)h9FZ~vOd&UyPaJSKHVL~)J3_D zbFkhW`%39blig*6{Q8x|JR-+2{9y@-PjTzfla;$WCbU0^u-zHa9sk7S=d538I%@?o zO4{&GUl)^suME2h195y*y`I`80~M*dx+(oi2=3(Gm}KTdyTkQg!+yoKw1-6)Z)br& zp%OzHOtt~2mIzsKp5u>qK)3-%P7u8+%^Ydavs*9yGkdTANl<3&aV}E7I-0KuGLZ?F zz{e5OWvPga5{p$C>$|Qw!}Z!Yja6uLO%T~72~TpL;hRIWj-%u^xdJ3F`?fLeWPijc zG#2`-wzFsSc#5HqbphI1+{}|J6`yyNe|}zr;;qq(^nJB7I13Z&r}?$CP>@3CghCCT zLEuqGdiFs3`HuCv5O2nu*XCDJ+e1zU@@-kdhi)3QG<~v+VN*5LJxGARa}re6AQ;=9 z?k=yLk9iMSQk$%ZW0J84M!eQm;~rB2J6Uhr5WT#VbpqVE`$I6}tlawG5t5NgRo zT&vBN#dYE^3h6f0)&&l+)k>?E5rls#|LMjN{mQxIjT!B*tosbk`H07M`oqF3e@zz% z@1pm`hPDUt&G^799Ftg18nJdf>uhsGeEMxXd20bzV7thLw<+JJA?C{SVpT`KO-(fNR8n=uV}-55(Wo+m=m%9l*3|h@yNVx8p}ThSy#K+MYLjU z$K~FP6%%=s6R%@L`PZuP9u%&x&%ep|#M@Dyc6{iFkWw@swWL0+ac{?gcOPTZnRqp+ zO|ogAdp6z59T4jc;p;+6Mr5?*N5^&xlQae_phX|H%5HYOoQ6hj#V%3(cQla~nGUM< zbW;~YX|t5?p&!yo3+h`74|zCAH1mZ(2L^h&|4#WaP-NC|vlZirfH0GE!=D_WK@p?h znt9@nEIoF<7=b)qlPd3Zd?lA=>7a2h zHQHWct!hAg6hqy#y2r|XQMX!x1{_t}$#9N*~RS9Wxb(_kWwxuE>h(&T&e|b zx9rmVYxT4SQMMU=xzeMP>T(=rmSqJF)|S4jn&Xw8nrVJGe>ao$)c?xc&U0dy?HjNO zuR=$O8TX<*mnKytE(?mtv_J#%ng#IJu{6P>JaeMUe zCM4|4K|{_+xoK+MzgKFXTr%U7*3Z{z1{+ecXtqifo>hw#Q)jxOhGb%Zm;tyl9o)w> zNvRL;u5(!ABwXxZUrxAJfWw+@Tog)jVeJkv~kDz-B4_2C#dF2nLON#EIal& zCp!DA6Q6D616-Hor#JPAxtU`)B^J>UMV}w2O$c3WC7s#4UsW6_HEjQyLsmo(j;v(W z=>I0oee$eTvrxr@Bd)-RWp7yz2<%y_ekDa6{u}e#P?KP%`@}+DLMSWdO_XEy&pE1R zi*7OAaG@(FByb9_5Uz23AEr5HOOYVow3ssj!X10UYlFR$V9tVl()Q2F4*{)*#e!ga zGCshj?=1&PQh|$Qz$b+NoCG8h?lyT#ua*{VO6U$-ITE#w<2Wyuz;jug6qk)v>|Ha) z-p;o1ZJe4-Y3S(VYYsbDx)!Zl%P*Jem17Ezmfs$0;~{N#G7CDtlqKXm=^wxmbyW#= z*9-T*+pPCVr^!$t;<#d)4%&V58dy7#daQ7UKCsnAGxq_LOWvGwbIT+NoEIqJTsBw_ z!}b(NNH1O2Eml2g&|WM#)p!l|kk>E<0m>+%YCZHxi5!&!PU}a*$1DCA8~@){@_*_@ zzq-JG6xpbp_^;K_em@`=Q2x&T*LbN21PcobN?8Any4u{_97v;jAr|34+{&5#I}W@H zSQrjUN>h*$K$ds?gV=ZA&9Xv)=jGtI4tPIaE3j(gMn=1IYHioJH&(hKQ%HRIOM#$& zDg_qy49*^6JN?MqelGWph?%{XZ;?fds7!RZ58tGQ=vPZ=>Iu_N_GnwFs z0SYP#YFMhp6Eqa)!iNaFTl}FLyx<7hp41>X3|igUS`ilwiy|~+#Pv5R21&q79@q*o z7D)*{4VJLJu@)W^fH0tM=i&}y_xXWbkOCsWS2*J+8A?Vv(j{C}>xWh-9t~r!=1r+b z*iZRNd96IBcyufx>ZO%o7SRK5ULusRpYP(jphR$A4@Tzo_ywh80Xz&)#Crn+e}=QH zKDqk<@#<4&zj*+Ma?$@7BM|~+djT9M%p&<#lyt8~T8E`_YBGk{Bs&%>^ zII+*zUF_55-PuDGvG+o<;KgoE9+i^sm{piy#kzE%XU+>t*y5*F!$CL*Sd?g5dimtR>ipFCLt=VZ&nL{71}U1q7uD zd_V#V>u=-vE2bqwglOH71+WgZKRuai+KEoWH6`%QKw6K+YZ-I z(nzEcb!xc1bOV@)A`b}U#yJxFF2RK@h`t`T*6txtCig!{E)bA^4sLL;eLW)Tp`dF=rNg+0Q1&zQmd4Af&g5{W@OaYwH4-oSx`MG;N>(;Y=P z6|l@{2^NZ!8>;WKO0J;Bap1s9^sjCB!7ywbPf$G7eIdH{!GmV6$yg5{Vo7fF{5V7B zxY5t|Z|OT=zi)A(sa({59S$JHD7*XDnf`b4|MLL>xSAUXIRnxfhjQ}vq6%V=nrrz! zzOci9FsHvma&9Z-JO8>FIPY*fe4+fl)Jo-ID-EK-xvr|@(>j@cqGq(l@J>TYqMNA_ z?yOA*SrnR|F`C;pXiY%Fj~yvm-ds=~J4;C(w}kM2I8F66k!Xy12bl7d(cL`}A)KV- z?ZCKm5#sw#W2>d79j*7az%a6BZts~7m)+nx3!(;a%|i-fZw7%zYm2+aCfYk`Y7j9I z6`IT=X0PPPr<;C+x!zY16V~U^Xx5X0b{2>r?nlIp4!5wnx;jQT?Op^%!%HB5RLms- z+X=E^zXss^>Lc4Le-@g5T-i|I9V-pM=B8D;lqxJfFtoFZZu*uQ^`?T?xkp=RXCMvW z#*N?cA&6N6)x1uf&XgZxQwbOZ7Y`Aa^0+}F6wWxDC~2i_1#DjNje&{7wVt+j;H{b0 z9gg%SE#CXZ;vIMK9-PI(uWhK{nMBy7{*LqC4e@u&ST%|6(<8_8LRvludC9vzEVqY} zSEIzUSq`g*qET2BffU#+JQNzm*g06-EsfonX#&*X@eiZC!MgV8T@t4p#X+l{UOWf( z*VeQ4ed(Wkf3^G7Y)6`)508ss-?9nq%}N-!PIaWI-p`UMngQyY-n7qQhUUI79Hlu@ z0q4FiEgmw?N2~CVG*ue=lyD#-47Cy-wm*54XpY1jEKuZYE*#P}Jt!3&xV0|#&{#6- zLocVeJMJbt)Ro_Y?)SAV$QL_wN^#PfMhRob7b!ofX~ZmKvULBj#%n(-(mL1CYIy#k zH3D5J;)iU_qGbXkxa0|9x5-$=&4xi5sJ!h+fgmdFvIzbASR{s#?z1J*l5gQm?4%4 zaPrtq>IG!j`J<1oF!rE3j-6R8t6yGKT$2z1nfDm zEQ9#*2-qiwKQ?U2tr%}YkHST04k5-x$15hcwpu9aYhl7!HjmnTXR@_~ki5>%<$oeczGBJKsJlb~!YEl1xU z8k(3mDZ{upoGoN?{3WSf@%dRO(*N&U#*FC`wR@GxRv}72MXcj2nQvOMm7trF`%^|x znG2&KO4xPkRU>?>W{v*6&!!AIYjT%*v#Pd&DSPsy72hO;Z{SP{tIudiNXR=-yk;UY zBBIR6d~{?))Z1I|-FZrHZRO1djsTMWc@{dTdB?7po70$>m{6M7+UjjqZ^XU(TJ&0 z+OI{|^Ke>HIzLyrjLN|Q33wZ5qAh~}bWs1fN+jZ9N01wHFfGF*Q>IW{pFE~TZ(TOA zQ2l5%es8%`hRK@mJNml`=ILsIu;CCjP<)B%-Rn{FQ5n~~4Q04Zx&}C}YG;>D zcJ#35po8mR!ZfW%{5T^n^69M#MHnqKc!DAg`m51fG2Y6#Wpp?SbBEiARnD|?g zim&9yR9M*G0)|;{u|f8A{+svi)#VGP+lyBn>RZP;E?-EoyJI`-Tf+cs&D2fra8&2z zrgs9genBWWr~Wa^@T)^UPqn9+#r{uL1)rezs1k&`278Z9K!`%HcZ&@w*a7W{_d1y} zNUgs$FKV#0?-fvZB`BcLg8pBDxc5B-HA>_6|NrX?MBDuPF~0E;P3@*Zfwm)WiEc0X zB_9x8ej*Vbo6_RG#vUH~SXS}N(pdkS(&4v?+}E0k=X0e$nwS~!K^!@vpKR{BUI+Q- z_dQ=$X4=bUxjL(zc=EuYLk90})Rr2A&j^3tb(GRAs_B_GkxJ?LS(W#ba8?uDB}s1x zFTDC_=9IQqE%>gk332Xho{JLS8=YFUtSXgt3jQwnak~1t;Og>HepUNufvOqyIj4ol zz`FI$yK#8IuE%;e6ofgVWaXB3tpI#d^IEZ*w_NZjpXI9N&slxTb99!kMKAA4ySrCe(OTY)YxI_PNG5sy)+{p)>%AU4Xh4nz2TW?c#m zdgWML+E9aTQ+PxfQoh$8Y`aEZjiI+L)EN!BNctT4;KD}-(k?M~aFb&tXqZRNuq$|a z`vi~{tHIOwzoDE6Nf;gABbj`ofr>&s!A%cE&U72ORb5iH&CudA>HCg-1?h6S`nh^( z#)z`^xR)(U&`-~oZqsNKkK35a^-LhLssq({Wz413^eFml!>e~e1cp*NuJ6uA#^LIx z%gxamZUCFM(;E%Tx_`IUnSVggOrZ?wayzU^hE~tuxW;aEb{ME_jji>`vKLfhiBeEm zHVq6aKD~&2{6ppNly1OVN;V#^1*_-X3AA-8*hEGL7$Q!MKZrdt>n*mbW4#-bS`mG1 z0TvP#H9$v{@d*`=_N`Ws)qY1+AxjWhgW30RqqHW=E_V5>QOPrO4cK|a0UDFC_X@OA zSCEu!@7wIy0bK0#;6Cy50B$xzvrO{~$~~z7qIs@t+iCMTUvzB|M4K?@S^ei@$Fiwd&_bXtg?jNU8opgK#ETxz&oT<3=36=Dl}V z$LqV3@vzI#%Rjp{@Kfqd=oKM5}EI3^p#eKfvT*rhUP_ z)pZ!9=g(Wmi+(6FDL75tTVphn0IK2ij+$1ZGj{ag{Zm*Ps*h%u=WXE5T^FzSRY6)e zwgRKxjM|NW`-@;`98pZn+MVIa1N_yw_wq#ouiI_x%gOQJ))P3J(kGi(-5!BA=n)o1 zdIN*4aP`ZUMd)mP*Wg6^q8CCAZnuFIh89x+pYt0xVxrWjVumHF?o^_>bwp!Vq-#}$$0|c*ST$}P3iftXd?*F*2_SJPQ$Xo_>@#h0d(Wg{s>Jq+d4=l~s5zSutUYMS`a0g?yi^Kae> zgH{DQkuQF~dn8U+o(G#nJcnfQmAy&63;}SS1acb;>(=#U2AkWy+JKv1ZZKhP^_84H zOKM|BauISz^fbsDiy+7El46;zfn@90KcSK&MYFdRk>15)HjzOy)^Kz6c!&PXnOrrm zRmG}7aSNaNRLKfA>fQ>Y~1v8tfW3?2UJdNq$43{*3PRiWli!n9K@VGoTaCzD{PUD0TeXg1 z*2|02=C5<>K?0wLNOq563(pYh@#*5JOpJnb)K|T^w`S8Nu{Ophfx;_BR%$}?7=^u7 z^(kIYfN+sQMJ2%79g5~x3GJV_><$DLm6VxUse-Kh>95Bm6k}PRjeXcn|703(U85)` zm=4<#y49WQ$NSx@nNJKU*1cNlH|#SH?5L#<@J2ZODLfAg1>EpV5N$K>S5yau&>mNB z)L~ycC7P174bE?>r68Xf>zCXWoZ#%vwyW|f>Qmv)xfU2TzCsLkv%B@FKI#!})X#aJ zF<$CDjoF?vjS+p@k#k80LfqjJh8fd;-Nw(LSX;7LX2i*&`U6JnQ)s%Q{AxaJ5S{)j zNX5^DL9=Kq3g|IH6!}(DUXGr*$#9@T^M?Id?^+pGrs|@R43Ib?%P@>-Daf?81yok0}q7d9DQKaU!0Sw892c&%v~ZsS!btHLUaw9Y4QJ z#0lg2z%2DbIa_QgDfN7Yv-!DK*2?s@3=1DH_wZJ5A?$RApi#92hk7aV5inz(2yi<` zxsRvv022k&%x*}WWl99EFRAiF8cwkA*dhEr zTk4`L230f%=TvW>rt~^0PpKHPb5LGR1D*GIus{YMDW}c0U&Z6;O=Zg#+UoIj2}-aOXdh9*q68X z{C?oQ*UJlXB`z$hG&T3tc?inPlztaO>G6`E|8l_9*wW;HGF)rkkIprDEVG*yxh-O! zmYc`nsB?=R9Z*)4kz=5Fxbp0*_$O*k`(Q+_JD> z1)eh9M%iPV8Ho4hx}BG%5CI|nM_&1lbHa~d4?4wH3)-?5N%6!!_Km1>&D`IvBs!XH zCABeW-iF*p&uwy-am^4cJ)?p|F&x}fQXb&J6)->^|5J6@id3|<4UpmwNlMKMS!#Ygm zYTbOh3R|yO+H3UOfPD!+fg2t(1{Bq5xU$)|)jAW{I@>v*dFd;NoLmBrg`P~K0781B zQK_-Z;!m!iPs&4w!gnCeZSe1p`>= zNi9VRUGKM{PS8(pvgckbpR9ig6xde!hO+Hak5CgQ&E1P0?-Ag!Jhwp&j5_74T6(DC zs6DSsjemV6R?*J4TeTkxgMXZJn{Tq_(KgESZQM|hlG4EEsSxk&E|>u&m$(M?m*%J-C~JiGs5>E9-w8&82Mw>CgI~EQhQbwnl}D?B={i$u^8JIu;y?R(_SO; zp2YfX|1s3O_W&bN;AA zk_4lkSC&tT+3_gVKgolELb7uaS5g|Kj?}}#mi~~hV!~;+4z;T!IqG{u74L6B?;qlf zF^~{wp>Z?a>GmWe=Z%xXnI2HP%o#0!&GKA!4UaWm8Y6aGRZYVM8GN(nZl!k32LS}+ zCB6NAvQU;kX3UJs(p}bH3{tj2uZ+Gy&#V;eEAbXCz(QOc+qr^;fPSk(cz!r{l*;}4z30zY}VM(pO@|o+~ z6*@KcaC)rQYd8fytd9TSH!5obF~?J3um>dKDp9hFdDj5P(XLBf2{aj%?@C=STgs|S zb!7aH#yZ}08H!*Ebew|8z%b?9&?`*{eE4D-9N z=J1GcgXVPb`>E#M8lK>b$yahQ=w^N;psx0Y?4mM?UhZCYDqSPgB8A%&@-!JD7sL#6&u~)-~Wr#aK2RJn|-GIk8I=DEwpUP@eCZoz6 z=vc|Yb!yC%yzJnKQ&jytGsxDAQG0-P1ym&&_kv~C%QoQg{hh%1kv@xJAm#4NST7Ey znSNN|Ae(y$&d<3Ku$_ExEpte`(+ujO0h$lSPl57U8;(4Jx+jjS90uj9;o_pWFn}}I;PBTc}|8NuZ+x+kkp!S z6l8?F9rk<$YEg~@hGaH1x}h$1Y}^w>;mZSX69%TCpGeJb1kk`l9MPOkf1*nkV^gp< z6?wPWt^zo8NNd-FA#8LgyE)j9UBU)K4W|y}S%nP&Np?`$;xSF>^Ja*P8NC8z zd|PZl&-fnIG=30u&O{R05L0Km>8xe?)o5@a2rgH!=|=vc1M47#Sc2`g13&V5965nywZ*_k?H*iQG|qWU^)C?lm!El)iIewrp9*gZo9I zvu;%o7E@WuXgw)vnJpjs=XXhDL1Di?ahM_Hw&30iUIoEyID7J~CRhJmWXNTb z%nv~M@nZ9&?w14s0yc4A^G)(I+>lNDOiW&tbnv!{C&Ogz}pQqUJqw@ihhV$OHDFwAHBL!3h3