Your IP : 216.73.216.170
<?
require($_SERVER["DOCUMENT_ROOT"]."/bitrix/header.php");
$APPLICATION->SetTitle("Новый гантт");
Bitrix\Main\Page\Asset::getInstance()->addCss('/gantt/platform.css');
Bitrix\Main\Page\Asset::getInstance()->addCss('/gantt/libs/jquery/dateField/jquery.dateField.css');
Bitrix\Main\Page\Asset::getInstance()->addCss('/gantt/gantt.css');
Bitrix\Main\Page\Asset::getInstance()->addCss('/gantt/libs/jquery/valueSlider/mb.slider.css');
Bitrix\Main\Page\Asset::getInstance()->addJs('/gantt/libs/jquery/jquery.livequery.1.1.1.min.js');
Bitrix\Main\Page\Asset::getInstance()->addJs('/gantt/libs/jquery/jquery.timers.js');
Bitrix\Main\Page\Asset::getInstance()->addJs('/gantt/libs/utilities.js');
Bitrix\Main\Page\Asset::getInstance()->addJs('/gantt/libs/forms.js');
Bitrix\Main\Page\Asset::getInstance()->addJs('/gantt/libs/date.js');
Bitrix\Main\Page\Asset::getInstance()->addJs('/gantt/libs/dialogs.js');
Bitrix\Main\Page\Asset::getInstance()->addJs('/gantt/libs/layout.js');
Bitrix\Main\Page\Asset::getInstance()->addJs('/gantt/libs/i18nJs.js');
Bitrix\Main\Page\Asset::getInstance()->addJs('/gantt/libs/jquery/dateField/jquery.dateField.js');
Bitrix\Main\Page\Asset::getInstance()->addJs('/gantt/libs/jquery/JST/jquery.JST.js');
Bitrix\Main\Page\Asset::getInstance()->addJs('/gantt/libs/jquery/valueSlider/jquery.mb.slider.js');
Bitrix\Main\Page\Asset::getInstance()->addJs('/gantt/libs/jquery/svg/jquery.svg.min.js');
Bitrix\Main\Page\Asset::getInstance()->addJs('/gantt/libs/jquery/svg/jquery.svgdom.1.8.js');
Bitrix\Main\Page\Asset::getInstance()->addJs('/gantt/ganttUtilities.js');
Bitrix\Main\Page\Asset::getInstance()->addJs('/gantt/ganttTask.js');
Bitrix\Main\Page\Asset::getInstance()->addJs('/gantt/ganttDrawerSVG.js');
Bitrix\Main\Page\Asset::getInstance()->addJs('/gantt/ganttZoom.js');
Bitrix\Main\Page\Asset::getInstance()->addJs('/gantt/ganttGridEditor.js');
Bitrix\Main\Page\Asset::getInstance()->addJs('/gantt/ganttMaster.js');
?>
<div id="workSpace" style="overflow-y: auto; overflow-x: hidden; position: relative;"></div>
<form id="gimmeBack" style="display: none;" action="../gimmeBack.jsp" method="post" target="_blank">
<input type="hidden" name="prj" id="gimBaPrj" />
</form>
<script type="text/javascript">
let ge;
$(function () {
// here starts gantt initialization
ge = new GanttMaster();
ge.set100OnClose = true;
ge.shrinkParent = true;
setTimeout(() => {
ge.init($("#workSpace"));
loadI18n(); //overwrite with localized ones
//in order to force compute the best-fitting zoom level
delete ge.gantt.zoom;
ge.loadProject({
tasks: [
{
id: -1,
name: "1 \u041f\u0420\u0415\u0414\u0412\u0410\u0420\u0418\u0422\u0415\u041b\u042c\u041d\u042b\u0419 \u042d\u0422\u0410\u041f",
progress: 0,
progressByWorklog: false,
relevance: 0,
type: "",
typeId: "",
description: "",
code: "",
level: 0,
status: "STATUS_ACTIVE",
depends: "",
canWrite: true,
start: 1658468629000,
duration: 30,
startPlan: 1657950229000,
durationPlan: 15,
startIsMilestone: false,
endIsMilestone: false,
collapsed: false,
assigs: [],
hasChild: true,
},
{
id: -2,
name: "1.1 \u041f\u0440\u0435\u0434\u0432\u0430\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u044d\u0442\u0430\u043f - \u0413\u043e\u0441\u0443\u0434\u0430\u0440\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0435 \u043a\u043e\u043d\u0442\u0440\u0430\u043a\u0442\u044b",
progress: 0,
progressByWorklog: false,
relevance: 0,
type: "",
typeId: "",
description: "",
code: "",
level: 1,
status: "STATUS_ACTIVE",
depends: "",
canWrite: true,
start: 1658468629000,
duration: 10,
startPlan: 1657950229000,
durationPlan: 9,
startIsMilestone: false,
endIsMilestone: false,
collapsed: false,
assigs: [],
hasChild: true,
},
{
id: -3,
name: "1.1.1 \u041d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0432 \u0414\u041e \u0440\u0430\u0441\u043f\u043e\u0440\u044f\u0436\u0435\u043d\u0438\u044f \u043e \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043a\u0435 \u043e\u0431\u043e\u0441\u043d\u043e\u0432\u0430\u043d\u0438\u0439 \u043d\u043e\u0432\u044b\u0445 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432 \u0441 \u0444\u043e\u0440\u043c\u0430\u0442\u043e\u043c \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u043d\u0430 \u041d\u0422\u0421 \u0438 \u0434\u0430\u0442\u043e\u0439",
progress: 0,
progressByWorklog: false,
relevance: 0,
type: "",
typeId: "",
description: "",
code: "",
level: 2,
status: "STATUS_ACTIVE",
depends: "",
canWrite: true,
start: 1659159829000,
duration: 2,
startPlan: 1659073429000,
durationPlan: 3,
startIsMilestone: false,
endIsMilestone: false,
collapsed: false,
assigs: [],
hasChild: false,
},
{
id: -4,
name: "1.1.2 \u041f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043a\u0430 \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b\u043e\u0432 \u0432 \u0414\u041e",
progress: 0,
progressByWorklog: false,
relevance: 0,
type: "",
typeId: "",
description: "",
code: "",
level: 2,
status: "STATUS_ACTIVE",
depends: "3",
canWrite: true,
start: 1659332629000,
duration: 4,
startPlan: 1659419029000,
durationPlan: 2,
startIsMilestone: false,
endIsMilestone: false,
collapsed: false,
assigs: [],
hasChild: false,
},
{
id: -5,
name: "1.2.1 \u0420\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0435\u043d\u0438\u0435 \u043e\u0431\u043e\u0441\u043d\u043e\u0432\u0430\u043d\u0438\u0439 \u0432 \u0423\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0438 \u0422\u041f\u0418 \u0420\u043e\u0441\u043d\u0435\u0434\u0440\u0430",
progress: 0,
progressByWorklog: false,
relevance: 0,
type: "",
typeId: "",
description: "",
code: "",
level: 1,
status: "STATUS_ACTIVE",
depends: "2",
canWrite: true,
start: 1659159829000,
duration: 5,
startPlan: 1659159829000,
durationPlan: 6,
startIsMilestone: false,
endIsMilestone: false,
collapsed: false,
assigs: [],
hasChild: true,
},
{
id: -6,
name: "1.2.2 \u0420\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0435\u043d\u0438\u0435 \u043e\u0431\u043e\u0441\u043d\u043e\u0432\u0430\u043d\u0438\u0439 \u043d\u0430 \u0440\u0430\u0431\u043e\u0447\u0435\u0439 \u0433\u0440\u0443\u043f\u043f\u0435 \u0420\u043e\u0441\u043d\u0435\u0434\u0440\u0430",
progress: 0,
progressByWorklog: false,
relevance: 0,
type: "",
typeId: "",
description: "",
code: "",
level: 2,
status: "STATUS_ACTIVE",
depends: "",
canWrite: true,
start: 1659159829000,
duration: 4,
startPlan: 1659159829000,
durationPlan: 3,
startIsMilestone: false,
endIsMilestone: false,
collapsed: false,
assigs: [],
hasChild: false,
},
{
id: -7,
name: "1.2.3 \u0414\u043e\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u0430 \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0435\u043d\u0438\u0435 \u0420\u043e\u0441\u043d\u0435\u0434\u0440\u0430",
progress: 0,
progressByWorklog: false,
relevance: 0,
type: "",
typeId: "",
description: "",
code: "",
level: 2,
status: "STATUS_ACTIVE",
depends: "",
canWrite: true,
start: 1659419029000,
duration: 3,
startPlan: 1659332629000,
durationPlan: 3,
startIsMilestone: false,
endIsMilestone: false,
collapsed: false,
assigs: [],
hasChild: false,
},
{
id: -8,
name: "1.2.4 \u0418\u0437\u0434\u0430\u043d\u0438\u0435 \u043f\u0440\u0438\u043a\u0430\u0437\u0430 \u0420\u043e\u0441\u043d\u0435\u0434\u0440\u0430 \u043e \u043d\u043e\u0432\u044b\u0445 \u043e\u0431\u044a\u0435\u043a\u0442\u0430\u0445 \u0434\u043b\u044f \u043f\u043e\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438 \u043d\u0430 \u0433\u043e\u0434",
progress: 0,
progressByWorklog: false,
relevance: 0,
type: "",
typeId: "",
description: "",
code: "",
level: 2,
status: "STATUS_ACTIVE",
depends: "",
canWrite: true,
start: 1659591829000,
duration: 2,
startPlan: 1659419029000,
durationPlan: 5,
startIsMilestone: false,
endIsMilestone: false,
collapsed: false,
assigs: [],
hasChild: false,
},
],
canWrite: true,
canDelete: true,
canWriteOnParent: true,
canAdd: true,
});
}, 0)
});
</script>
<div id="gantEditorTemplates" style="display: none">
<div class="__template__" type="GANTBUTTONS">
<!--
<div class="ganttButtonBar noprint">
<div class="buttons">
<button onclick="$('#workSpace').trigger('zoomMinus.gantt'); return false;" class="" title="zoom out"><span class="teamworkIcon">)</span></button>
<button onclick="$('#workSpace').trigger('zoomPlus.gantt');return false;" class="" title="zoom in"><span class="teamworkIcon">(</span></button>
<button onclick="ge.gantt.showCriticalPath=!ge.gantt.showCriticalPath; ge.redraw();return false;" class="requireCanSeeCriticalPath" title="CRITICAL_PATH"><span class="teamworkIcon">£</span></button>
</div>
-->
</div>
<div class="__template__" type="TASKSEDITHEAD">
<!--
<table class="gdfTable" cellspacing="0" cellpadding="0">
<thead>
<tr style="height: 48px;">
<th class="gdfColHeader" style="width: 45px;">№<br />н.н.</th>
<th class="gdfColHeader gdfResizable" style="width: 250px;">Этап/Задача</th>
<th class="gdfColHeader gdfResizable" style="width: 150px;">Вид работ</th>
<th class="gdfColHeader gdfResizable" style="width: 94px;">План нач.<br /><span class="green">Факт нач.</span></th>
<th class="gdfColHeader gdfResizable" style="width: 94px;">План окон.<br /><span class="green">Факт окон.</span></th>
<th class="gdfColHeader gdfResizable" style="width: 150px;">Ответственный</th>
<th class="gdfColHeader gdfResizable" style="width: 56px;">Дней</th>
<th class="gdfColHeader gdfResizable" style="width: 144px;">План объем работ<br /><span class="red">Факт объем работ</span></th>
<th class="gdfColHeader gdfResizable" style="width: 500px; text-align: left; padding-left: 10px;">Процент<br />выполнения</th>
</tr>
</thead>
</table>
-->
</div>
<div class="__template__" type="TASKROW">
<!--
<tr id="tid_(#=obj.id#)" taskId="(#=obj.id#)" class="taskEditRow (#=obj.isParent()?'isParent':''#) (#=obj.collapsed?'collapsed':''#)" level="(#=level#)">
<td class="gdfCell"><span class="taskRowIndex">(#=obj.getRow()+1#)</span></td>
<td class="gdfCell indentCell" style="padding-left:(#=obj.level*10+18#)px;">
<div class="exp-controller" align="center"></div>
<input type="text" name="name" value="(#=obj.name#)" placeholder="name">
</td>
<td class="gdfCell">
<select name="works_type" class="select2">
<option value="">Не выбрано</option>
<option value="1">Вид работ 1</option>
<option value="2">Вид работ 2</option>
<option value="3">Вид работ 3</option>
</select>
</td>
<td class="gdfCell">
<input type="text" name="startPlan" value="" class="date">
<input type="text" name="start" value="" class="date green">
</td>
<td class="gdfCell">
<input type="text" name="endPlan" value="" class="date">
<input type="text" name="end" value="" class="date green">
</td>
<td class="gdfCell"></td>
<td class="gdfCell"><input type="text" name="duration" autocomplete="off" value="(#=obj.duration#)"></td>
<td class="gdfCell"></td>
<td class="gdfCell"><input type="text" name="progress" class="validated" entrytype="PERCENTILE" autocomplete="off" value="(#=obj.progress?obj.progress:''#)" (#=obj.progressByWorklog?"readOnly":""#)></td>
</tr>
-->
</div>
<div class="__template__" type="TASKEMPTYROW">
<!--
<tr class="taskEditRow emptyRow" >
<th class="gdfCell"></th>
<td class="gdfCell"></td>
<td class="gdfCell"></td>
<td class="gdfCell"></td>
<td class="gdfCell"></td>
<td class="gdfCell"></td>
<td class="gdfCell"></td>
<td class="gdfCell"></td>
<td class="gdfCell"></td>
</tr>
-->
</div>
</div>
<script type="text/javascript">
setTimeout(() => {
$.JST.loadDecorator("RESOURCE_ROW", function (resTr, res) {
resTr.find(".delRes").click(function () {
$(this).closest("tr").remove();
});
});
$.JST.loadDecorator("ASSIGNMENT_ROW", function (assigTr, taskAssig) {
var resEl = assigTr.find("[name=resourceId]");
var opt = $("<option>");
resEl.append(opt);
for (var i = 0; i < taskAssig.task.master.resources.length; i++) {
var res = taskAssig.task.master.resources[i];
opt = $("<option>");
opt.val(res.id).html(res.name);
if (taskAssig.assig.resourceId == res.id)
opt.attr("selected", "true");
resEl.append(opt);
}
var roleEl = assigTr.find("[name=roleId]");
for (var i = 0; i < taskAssig.task.master.roles.length; i++) {
var role = taskAssig.task.master.roles[i];
var optr = $("<option>");
optr.val(role.id).html(role.name);
if (taskAssig.assig.roleId == role.id) optr.attr("selected", "true");
roleEl.append(optr);
}
if (
taskAssig.task.master.permissions.canWrite &&
taskAssig.task.canWrite
) {
assigTr.find(".delAssig").click(function () {
var tr = $(this)
.closest("[assId]")
.fadeOut(200, function () {
$(this).remove();
});
});
}
});
}, 0)
function loadI18n() {
GanttMaster.messages = {
CANNOT_WRITE: "No permission to change the following task:",
CHANGE_OUT_OF_SCOPE:
"Project update not possible as you lack rights for updating a parent project.",
START_IS_MILESTONE: "Start date is a milestone.",
END_IS_MILESTONE: "End date is a milestone.",
TASK_HAS_CONSTRAINTS: "Task has constraints.",
GANTT_ERROR_DEPENDS_ON_OPEN_TASK:
"Error: there is a dependency on an open task.",
GANTT_ERROR_DESCENDANT_OF_CLOSED_TASK:
"Error: due to a descendant of a closed task.",
TASK_HAS_EXTERNAL_DEPS: "This task has external dependencies.",
GANNT_ERROR_LOADING_DATA_TASK_REMOVED:
"GANNT_ERROR_LOADING_DATA_TASK_REMOVED",
CIRCULAR_REFERENCE: "Circular reference.",
CANNOT_DEPENDS_ON_ANCESTORS: "Cannot depend on ancestors.",
INVALID_DATE_FORMAT:
"The data inserted are invalid for the field format.",
GANTT_ERROR_LOADING_DATA_TASK_REMOVED:
"An error has occurred while loading the data. A task has been trashed.",
CANNOT_CLOSE_TASK_IF_OPEN_ISSUE:
"Cannot close a task with open issues",
TASK_MOVE_INCONSISTENT_LEVEL:
"You cannot exchange tasks of different depth.",
CANNOT_MOVE_TASK: "CANNOT_MOVE_TASK",
PLEASE_SAVE_PROJECT: "PLEASE_SAVE_PROJECT",
GANTT_SEMESTER: "Semester",
GANTT_SEMESTER_SHORT: "s.",
GANTT_QUARTER: "Quarter",
GANTT_QUARTER_SHORT: "q.",
GANTT_WEEK: "Week",
GANTT_WEEK_SHORT: "w.",
};
}
</script>
<?require($_SERVER["DOCUMENT_ROOT"]."/bitrix/footer.php");?>