Your IP : 216.73.216.170
<?
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");?>