Current Path : /home/bitrix/ext_www/rgc.yacl.site/summaries/ |
Current File : /home/bitrix/ext_www/rgc.yacl.site/summaries/index.php |
<? require($_SERVER["DOCUMENT_ROOT"]."/bitrix/header.php"); $APPLICATION->SetTitle("Ежедневные сводки"); Bitrix\Main\Page\Asset::getInstance()->addCss('/summaries/css/style.css'); //okp($typeList); $taskId = intval($_GET['task']); $nosummary = false; if (!$taskId) { $nosummary = true; } $inputFields = [ 'UF_PLAN' => 'Запланировано работ', 'UF_FACT' => 'Выполнено работ', 'UF_EMPLOYEES_TOTAL' => 'Сотрудников всего', 'UF_EMPLOYEES' => 'Сотрудников заболело', 'UF_OUTAGE' => 'Наличие простоя', 'UF_INCIDENTS' => 'Инциденты', ]; $filter = [ '!UF_WORKS_KINDS_HLBLOCK' => false, '!START_DATE_PLAN' => false, '!END_DATE_PLAN' => false, '!UF_PROJECT' => false, '!ZOMBIE' => 'Y', ]; if (!$USER->IsAdmin()) { $filter['RESPONSIBLE_ID'] = $USER->GetID(); } if ($taskId) { $filter['ID'] = $taskId; } $list = CTasks::GetList(['ID' => 'DESC'], $filter, ['ID', 'TITLE', 'UF_PROJECT', 'START_DATE_PLAN', 'END_DATE_PLAN']); $task = $list->Fetch(); if (!$taskId && $task['ID']) { LocalRedirect($APPLICATION->GetCurUri('task=' . $task['ID'])); } foreach (['START_DATE_PLAN', 'END_DATE_PLAN'] as $dateCode) { if (!$task[$dateCode]) { ShowError('Не заданы плановые значения дат для выбранной задачи!'); return; } $task[$dateCode] = date('d.m.Y', strtotime($task[$dateCode])); } $project = Project::getProjectLink($task['UF_PROJECT']); $projectId = $task['UF_PROJECT']; $summaryHelper = new HighloadBlockHelper('TpiDaily'); $existingList = $summaryHelper->getList([ 'filter' => ['UF_TASK' => $task['ID']], 'order' => ['UF_DATE' => 'ASC'], ]); $existing = []; while ($existingItem = $existingList->fetch()) { // okp($existingItem); if ($existingItem['UF_DATE'] instanceof \Bitrix\Main\Type\Date) { $existing[$existingItem['UF_DATE']->toString()] = $existingItem; } } if (!empty($_POST)) { if ($task['ID'] && $_POST['UF_DATE']) { $fields = ['UF_TASK' => $task['ID']]; foreach ($_POST as $code => $value) { $fields[$code] = htmlspecialchars($value); } } $searchFields = [ 'UF_DATE' => $fields['UF_DATE'], 'UF_TASK' => $fields['UF_TASK'], ]; $existingSummary = $summaryHelper->getList(['filter' => $searchFields])->fetch(); $fields['UF_USER'] = $USER->GetID(); if (!$fields['UF_OUTAGE']) { $fields['UF_OUTAGE'] = false; } if (!$existingSummary) { $summaryHelper->add($fields); } else { $summaryHelper->update($existingSummary['ID'], $fields); } $summaryFact = 0; $summaryPlan = 0; $summaryList = $summaryHelper->getList(['filter' => ['UF_TASK' => $fields['UF_TASK']]])->fetchAll(); foreach ($summaryList as $summary) { $summaryFact += $summary['UF_FACT']; $summaryPlan += $summary['UF_PLAN']; } CTaskItem::getInstance($fields['UF_TASK'], $USER->GetID())->update(['UF_VOLUME_FACT' => $summaryFact]); LocalRedirect($APPLICATION->GetCurUri()); } $summaryDate = htmlspecialchars($_GET['date']); if (!$summaryDate) { for ($date = $task['START_DATE_PLAN']; strtotime($date) <= strtotime($task['END_DATE_PLAN']); $date = date('d.m.Y', strtotime($date) + 86400)) { if ($existing[$date] !== NULL) { $lastValue = $existing[$date]; continue; } else { $summaryDate = $date; break; } // okp($date); okp($existing[$date]); } } if (!$summaryDate) { LocalRedirect($APPLICATION->GetCurUri('date=' . $task['START_DATE_PLAN']));; } $previous = $summaryHelper->getList([ 'filter' => ['UF_TASK' => $task['ID']], 'order' => ['ID' => 'DESC'], ])->fetch(); $editSummary = !empty($existing[$summaryDate]); $canEditPlan = $USER->IsAdmin() || Project::isRpOrAssistant($projectId); $listFilter = [ // 'RESPONSIBLE_ID' => $USER->GetID(), '!UF_WORKS_KINDS_HLBLOCK' => false, '!START_DATE_PLAN' => false, '!END_DATE_PLAN' => false, '!UF_PROJECT' => false, '!ZOMBIE' => 'Y', ]; if (!$USER->IsAdmin() && !Project::isRpOrAssistant($projectId)) { $listFilter['RESPONSIBLE_ID'] = $USER->GetID(); } $projectTaskList = \Bitrix\Tasks\Internals\TaskTable::getList([ 'filter' => $listFilter, 'select' => ['ID', 'TITLE', 'UF_PROJECT'], 'group' => ['UF_PROJECT'] ])->fetchAll(); $taskOptionList = $tasks = []; foreach ($projectTaskList as &$taskInfo) { $taskOptionList[$taskInfo['UF_PROJECT']][$taskInfo['ID']] = '[' . $taskInfo['ID'] . '] ' . $taskInfo['TITLE']; } //okp($summaryDate); //okp($editSummary); ?> <div class="wrapper"> <?getSummariesHead($_GET['taskId']);?> <?if (!$nosummary) {?> <div class="form" id="form_1"> <div class="content"> <div class="calendar"> <div class="dates"> <a class="prev" href="/summaries/calendar/?task=<?=$task['ID']?>&month=<?=date('m', strtotime($summaryDate))?>&year=<?=date('Y', strtotime($summaryDate))?>"></a> <a class="date" href="/summaries/calendar/?task=<?=$task['ID']?>&month=<?=date('m', strtotime($summaryDate))?>&year=<?=date('Y', strtotime($summaryDate))?>">Вернуться к календарю</a> </div> <a href="period/?task=<?=$task['ID'];?>" class="show_all">Весь период</a> </div> <div class="calendar-block"> <?if (strtotime($summaryDate) > strtotime($task['START_DATE_PLAN'])) {?> <a class="prev" href="<?=$APPLICATION->GetCurPageParam('date=' . date('d.m.Y', strtotime($summaryDate) - 86400), ['date']);?>"></a> <?} else {?> <div style="width: 100px;"> </div> <?}?> <div class="calendar_itog"> <?if (strtotime($summaryDate) >= strtotime(date('d.m.Y', time() + 86400))) {?> <div class="error-title">Нельзя заполнить фактические данные на будущие даты!</div> <?} else {?> <div class="text text_title"><?=$summaryDate?></div> <div class="text text_title"><?=$editSummary ? 'Изменить сводку' : "Заполнить сводку"?></div> <form action="" method="post"> <input type="hidden" name="UF_DATE" value="<?=$summaryDate?>"> <?foreach ($inputFields as $code => $title) { if ($code == 'UF_PLAN') {?> <div class="text"><?=$title?>:</div> <span style="width: 100%; display: block; text-align: center; font-size: 1.4rem;"><?=$existing[$summaryDate][$code] ? $existing[$summaryDate][$code] : 'не задано' ?></span> <? } else { ?> <? if ($code == 'UF_OUTAGE') { ?> <div class="text"><?= $title ?>: <input type="checkbox" class="" style="width: 1.1rem; height: 1.1rem; text-align: center; vertical-align: text-bottom;" <?= ($existing[$summaryDate][$code] && $editSummary) || ($previous[$code] && !$editSummary) ? 'checked' : '' ?> name="<?= $code ?>" value="1"> </div> <? } elseif ($code == 'UF_INCIDENTS') { ?> <div class="text"><?= $title ?>:</div> <textarea class="finished_count text" name="<?= $code ?>"><?= $editSummary ? $existing[$summaryDate][$code] : $previous[$code] ?> </textarea> <? } else { ?> <div class="text"><?= $title ?>:</div> <input type="text" class="finished_count text" value="<?= $editSummary ? $existing[$summaryDate][$code] : $previous[$code] ?>" name="<?= $code ?>"> <? } }?> <?/* <div class="plan_count text"><?=$existing['plan'][$summaryDate] ? $existing['plan'][$summaryDate] : 'не указано'?></div>*/?> <?}?> <input type="submit" class="send text" value="<?=$editSummary ? 'Изменить' : "Заполнить"?>" style="cursor: pointer;"> </form> <?}?> </div> <?if (strtotime($summaryDate) < strtotime($task['END_DATE_PLAN'])) {?> <a class="next" href="<?=$APPLICATION->GetCurPageParam('date=' . date('d.m.Y', strtotime($summaryDate) + 86400), ['date']);?>"></a> <?} else {?> <div style="width: 100px;"> </div> <?}?> </div> </div> </div> <?}?> </div> <script> $(function () { $('.select2').select2(); }); </script> <?require($_SERVER["DOCUMENT_ROOT"]."/bitrix/footer.php");?>