const dp = new DayPilot.Scheduler("dp", { CssOnly: true, theme: "scheduler_white", eventHeight: 25, cellWidth: 15, heightSpec: "full", scale: "CellDuration", cellDuration: 15, startDate: DayPilot.Date.today().firstDayOfWeek(), infiniteScrollingEnabled:true, days: 365, businessBeginsHour: 7, businessEndsHour: 16.15, snapToGrid: true, eventMovingStartEndEnabled: false, eventResizingStartEndEnabled: false, eventMoveSkipNonBusiness: true, businessWeekends: false, showNonBusiness: false, groupConcurrentEvents: true, timeRangeSelectingStartEndEnabled: true, timeFormat: 24, timeHeaders: [ {"groupBy": "Week"}, {"groupBy": "Day","format": "dddd, d MMMM yyyy"}, {"groupBy": "Hour"}, {"groupBy": "Cell","format": "mm"} ], crosshairType: "Header", treeEnabled: true, treePreventParentUsage: true, linkBottomMargin: 20, jointEventsMove: true, jointEventsResize: false, onBeforeResHeaderRender: (args) => { if (args.resource.children && args.resource.children.length > 0) { // args.resource.eventHeight = 30; }scheduler }, onTimeRangeSelected: async (args) => { const modal = await DayPilot.Modal.prompt("Create a new Operation:", "SO:"); dp.clearSelection(); if (modal.canceled) { return; } var params = { start: args.start, end: args.end, text: modal.result, resource: args.resource }; const {data: result} = await DayPilot.Http.post("backend_events_create.php", params); const list = result.events; list.forEach(data => { var e = dp.events.find(data.id); if (e) { e.data.text = text; dp.events.update(e); } else { dp.events.add(data); } }); dp.message("Job created"); }, onEventMove: async (args) => { if (args.areaData === "event-copy") { args.preventDefault(); const params = { start: args.newStart, end: args.newEnd, text: args.e.text(), resource: args.newResource, link: { from: args.e.id() } }; const {data: result} = await DayPilot.Http.post("backend_events_create.php", params); const list = result.events; list.forEach(data => { const e = dp.events.find(data.id); if (e) { e.data.hasNext = data.hasNext; dp.events.update(e); } else { dp.events.add(data); dp.links.add({ from: args.e.id(), to: data.id }); } }); dp.message("Job created"); } else { const params = { id: args.e.id(), start: args.newStart, end: args.newEnd, resource: args.newResource }; const {data: result} = await DayPilot.Http.post("backend_events_move.php", params); dp.message("Job moved"); } }, onEventResize: async (args) => { const params = { id: args.e.id(), start: args.newStart, end: args.newEnd, resource: args.e.resource() }; const {data: result} = await DayPilot.Http.post("backend_events_move.php", params); dp.message("Job resized"); }, onBeforeEventRender: (args) => { args.data.barColor = args.data.color; if (args.data.hasNext) { return; } args.data.areas = [ { right: 2, top: 3, width: 16, height: 16, backColor: "#fff", style: "box-sizing: border-box; border-radius: 7px; padding-left: 3px; border: 1px solid #ccc;font-size: 14px;line-height: 14px;color: #999;", html: "»", toolTip: "Drag to schedule next step", action: "Move", data: "event-copy" } ]; }, onEventMoving: (args) => { if (args.areaData && args.areaData === "event-copy") { args.link = { from: args.e, color: "#666" }; args.start = args.end.addHours(-1); if (args.e.end() > args.start) { args.allowed = false; args.link.color = "red"; } } }, // CONTEXT MENU contextMenu: new DayPilot.Menu({ items: [ {text:"Show Job Info", icon: "icon icon-blue", onclick: function() {DayPilot.Modal.prompt("Blurb: " + this.source.data.Contract + " - " + this.source.data.Part + " - " + this.source.data.Operation);} }, {text: "Job Card", onClick: args => window.open(args.source.data.Filelocation, '_blank')}, // { // // text: "Delete", // onClick: async (args) => { // const params = { // id: args.source.id(), // }; // // const {data: result} = await DayPilot.Http.post("backend_events_delete.php", params); // // result.deleted.forEach(id => { // dp.events.removeById(id); // }); // result.updated.forEach(data => { // const e = dp.events.find(data.id); // if (e) { // e.data.hasNext = data.hasNext; // dp.events.update(e); // } // }); // // dp.message("Job deleted"); // } // }, // { // text: "-" // }, // { // text: "Contract", // icon: "icon icon-blue", // color: "#979A9A", // onClick: (args) => { updateColor(args.source, args.item.color); } // }, // // ] }) }); dp.init(); // CROSSHAIR FUCTION const app = { init() { const options = document.querySelectorAll("input[name='crosshair']"); options.forEach(e => { e.addEventListener("change", () => { const value = document.querySelector("input[name='crosshair']:checked").value; dp.crosshairType = value; }); }); } }; app.init(); // CELL WIDTH FUCTION document.querySelector("#cellwidth").addEventListener("input", function(ev) { var cellwidth = parseInt(this.value); document.querySelector("#label").innerText = cellwidth; var start = dp.getViewPort().start; dp.cellWidth = cellwidth; dp.update(); dp.scrollTo(start); }); // EVENT SEARCH FUNCTION document.querySelector("#find").addEventListener("click", function() { var query = document.querySelector("#filter").value; var e = dp.events.find(function (e) { var match = e.text().toUpperCase().indexOf(query.toUpperCase()) > -1; return match; }); dp.multiselect.clear(); if (e) { dp.multiselect.add(e); dp.events.scrollIntoView(e); } }); document.querySelector("#clear").addEventListener("click", function(ev) { ev.preventDefault(); document.querySelector("#filter").value = ""; }); // DISABLE FRIDAY AFTERNOON dp.onBeforeCellRender = function (args) { if ( args.cell.start.getDayOfWeek() === 5 && args.cell.start.getHours() > 11|| args.cell.resource === "D") { args.cell.disabled = false; args.cell.backColor = "#ccc"; } }; dp.rows.load("backend_resources.php"); dp.events.load("backend_events.php"); dp.links.load("backend_links.php"); async function updateColor(e, color) { const params = { join: e.data.join, color: color }; const {data: result} = await DayPilot.Http.post("backend_events_setcolor.php", params); const list = result.events; list.forEach(data => { const e = dp.events.find(data.id); if (e) { e.data.color = color; dp.events.update(e); } }); dp.message("Color updated"); } // EVENT CLICK POPUP PROMPT // onEventClick: async (args) => { // const modal = await DayPilot.Modal.prompt("Task name:", args.e.text()); // // if (modal.canceled) { // return; // } // const text = modal.result; // const params = { // join: args.e.data.join, // // }; // // const {data: result} = await DayPilot.Http.post("backend_events_settext.php", params); // // const list = result.events; // list.forEach(data => { // var e = dp.events.find(data.id); // if (e) { // e.data.text = text; // dp.events.update(e); // } // }); // dp.message("Text updated"); // }, // FIXED HEADER window.onscroll = function() {myFunction()}; var header = document.getElementById("myHeader"); var sticky = header.offsetTop; function myFunction() { if (window.pageYOffset > sticky) { header.classList.add("sticky"); } else { header.classList.remove("sticky"); } }