Current File : /home/escuelai/public_html/it/js/planning.min.js
/**
 * ---------------------------------------------------------------------
 *
 * GLPI - Gestionnaire Libre de Parc Informatique
 *
 * http://glpi-project.org
 *
 * @copyright 2015-2022 Teclib' and contributors.
 * @copyright 2003-2014 by the INDEPNET Development Team.
 * @licence   https://www.gnu.org/licenses/gpl-3.0.html
 *
 * ---------------------------------------------------------------------
 *
 * LICENSE
 *
 * This file is part of GLPI.
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program.  If not, see <https://www.gnu.org/licenses/>.
 *
 * ---------------------------------------------------------------------
 */
var GLPIPlanning={calendar:null,dom_id:"",all_resources:[],visible_res:[],drag_object:null,last_view:null,display:function(e){var n=typeof e!=="undefined"?e:{};var t={full_view:true,default_view:"timeGridWeek",height:GLPIPlanning.getHeight,plugins:["dayGrid","interaction","list","timeGrid","resourceTimeline","rrule","bootstrap"],license_key:"",resources:[],now:null,can_create:false,can_delete:false,rand:"",header:{left:"prev,next,today",center:"title",right:"dayGridMonth, timeGridWeek, timeGridDay, listFull, resourceWeek"}};n=Object.assign({},t,n);GLPIPlanning.dom_id="planning"+n.rand;var i=true;var a=false;var r=false;var l=false;this.all_resources=n.resources;this.visible_res=Object.keys(this.all_resources).filter((function(e){return GLPIPlanning.all_resources[e].is_visible}));var o=[0,1,2,3,4,5,6];var s=CFG_GLPI.planning_work_days;var c=o.filter((e=>!s.some((n=>n==e))));this.calendar=new FullCalendar.Calendar(document.getElementById(GLPIPlanning.dom_id),{plugins:n.plugins,height:n.height,timeZone:"UTC",theme:true,weekNumbers:n.full_view?true:false,defaultView:n.default_view,timeFormat:"H:mm",eventLimit:true,minTime:CFG_GLPI.planning_begin,maxTime:CFG_GLPI.planning_end,schedulerLicenseKey:n.license_key,resourceAreaWidth:"15%",editable:true,droppable:false,nowIndicator:true,now:n.now,listDayAltFormat:false,agendaEventMinHeight:13,header:n.header,hiddenDays:c,resources:function(e,t){var i=[];i=n.resources.filter((function(e,n){return GLPIPlanning.visible_res.indexOf(n.toString())!==-1}));t(i)},views:{listFull:{type:"list",titleFormat:function(){return""},visibleRange:function(e){var n=e.getFullYear();return{start:new Date(e.getTime()).setFullYear(n-5),end:new Date(e.getTime()).setFullYear(n+5)}}},resourceWeek:{type:"resourceTimeline",buttonText:"Timeline Week",duration:{weeks:1},groupByDateAndResource:true,slotLabelFormat:[{week:"short"},{weekday:"short",day:"numeric",month:"numeric",omitCommas:true},function(e){return e.date.hour}]}},resourceRender:function(e){var n="";var t=e.resource._resource.extendedProps.itemtype||"";switch(t.toLowerCase()){case"group":case"group_user":n="users";break;case"user":n="user"}$(e.el).find(".fc-cell-text").prepend('<i class="fas fa-'+n+'"></i>&nbsp;');if(e.resource._resource.extendedProps.itemtype=="Group_User"){e.el.style.backgroundColor="lightgray"}},eventRender:function(e){var t=e.event;var a=t.extendedProps;var l=$(e.el);var o=e.view;l.data("myevent",t);var s='<span class="event_type" style="background-color: '+a.typeColor+'"></span>';l.append(s);var c=a.content;var d=a.tooltip;if(o.type!=="dayGridMonth"&&o.type.indexOf("list")<0&&t.rendering!="background"&&!t.allDay){l.append('<div class="content">'+c+"</div>")}if("icon"in a){var u="";if("icon_alt"in a){u=a.icon_alt}l.find(".fc-title, .fc-list-item-title").append("&nbsp;<i class='"+a.icon+"' title='"+u+"'></i>")}var f="";if(typeof t.end!=="undefined"&&t.end!==null){var g=new Date;var p=t.end;f=p.getTime()<g.getTime()?" event_past":"";f+=p.getTime()>g.getTime()?" event_future":"";f+=p.toDateString()===g.toDateString()?" event_today":""}if(a.state!=""){f+=a.state==0?" event_info":a.state==1?" event_todo":a.state==2?" event_done":""}if(f!=""){l.addClass(f)}if(!r){var _={target:"mouse",adjust:{mouse:false},viewport:$(window)};if(o.type.indexOf("list")>=0){_.target=l.find("a")}l.qtip({position:_,content:d,style:{classes:"qtip-shadow qtip-bootstrap"},show:{solo:true,delay:100},hide:{fixed:true,delay:100},events:{show:function(e){if(!i){e.preventDefault()}}}})}l.on("contextmenu",(function(e){e.preventDefault();var i=l.offset();$(".planning-context-menu").remove();var a="";if(n.can_create){a+='<li class="clone-event"><i class="far fa-clone"></i>'+__("Clone")+"</li>"}if(n.can_delete){a+='<li class="delete-event"><i class="fas fa-trash"></i>'+__("Delete")+"</li>"}if(a==""){return}var r=$('<ul class="planning-context-menu" data-event-id="">'+a+"</ul>");$("body").append(r);r.css({left:i.left+l.outerWidth()/4,top:i.top});var o=t.extendedProps;var s={};var c={};if(typeof t.getresources==="function"){s=t.getresources()}if(s.length===1){c={itemtype:s[0].extendedProps.itemtype||null,items_id:s[0].extendedProps.items_id||null}}$(".planning-context-menu .clone-event").on("click",(function(){$.ajax({url:CFG_GLPI.root_doc+"/ajax/planning.php",type:"POST",data:{action:"clone_event",event:{old_itemtype:o.itemtype,old_items_id:o.items_id,actor:c,start:t.start.toISOString(),end:t.end.toISOString()}},success:function(){GLPIPlanning.refresh()}})}));$(".planning-context-menu .delete-event").on("click",(function(){var e=function(e){e=e||false;$.ajax({url:CFG_GLPI.root_doc+"/ajax/planning.php",type:"POST",data:{action:"delete_event",event:{itemtype:o.itemtype,items_id:o.items_id,day:t.start.toISOString().substring(0,10),instance:e?1:0}},success:function(){GLPIPlanning.refresh()}})};if(!("is_recurrent"in o)||!o.is_recurrent){e()}else{glpi_html_dialog({title:__("Make a choice"),body:__("Delete the whole serie of the recurrent event")+"<br>"+__("or just add an exception by deleting this instance?"),buttons:[{label:__("Serie"),click:function(){e(false)}},{label:_n("Instance","Instances",1),click:function(){e(true)}}]})}}))}))},datesRender:function(e){var n=e.view;if(a){GLPIPlanning.refresh()}else{a=true}$("#"+GLPIPlanning.dom_id+" .fc-toolbar .fc-center h2").after($('<i id="refresh_planning" class="fa fa-sync pointer"></i>')).after($('<div id="planning_datepicker"><a data-toggle><i class="far fa-calendar-alt fa-lg pointer"></i></a>'));if(n.type=="listFull"){if($("#planning_datepicker").length>0&&"_flatpickr"in $("#planning_datepicker")[0]){$("#planning_datepicker")[0]._flatpickr.destroy()}$("#planning_datepicker").hide();$("#planning .fc-left .fc-button-group").hide()}else{$("#planning_datepicker").show();GLPIPlanning.initFCDatePicker(new Date(n.currentStart));$("#planning .fc-left .fc-button-group").show()}GLPIPlanning.setEndofDays(e.view);$("#refresh_planning").on("click",(function(){GLPIPlanning.refresh()}))},viewSkeletonRender:function(e){var t=e.view.type;GLPIPlanning.last_view=t;$.ajax({url:CFG_GLPI.root_doc+"/ajax/planning.php",type:"POST",data:{action:"view_changed",view:t}}).done((function(){if(!n.full_view){$(document).trigger("masonry_grid:layout")}}));GLPIPlanning.setEndofDays(e.view)},events:{url:CFG_GLPI.root_doc+"/ajax/planning.php",type:"POST",extraParams:function(){var e=GLPIPlanning.calendar?GLPIPlanning.calendar.state.viewType:n.default_view;var t=1;if(e.indexOf("list")>=0){t=0}return{action:"get_events",display_done_events:t,view_name:e}},success:function(e){if(!n.full_view&&e.length==0){GLPIPlanning.calendar.setOption("height",0)}},failure:function(e){console.error("there was an error while fetching events!",e)}},eventResize:function(e){var n=e.event;var t=n.extendedProps;var i=t.is_recurrent||false;if(i){glpi_html_dialog({title:__("Recurring event resized"),body:__("The resized event is a recurring event. Do you want to change the serie or instance ?"),buttons:[{label:__("Serie"),click:function(){GLPIPlanning.editEventTimes(e)}},{label:_n("Instance","Instances",1),click:function(){GLPIPlanning.editEventTimes(e,true)}}]})}else{GLPIPlanning.editEventTimes(e)}},eventResizeStart:function(){l=true;r=true},eventResizeStop:function(){setTimeout((function(){l=false;r=false}),300)},eventDragStart:function(){r=true},eventDrop:function(e){r=false;var n=e.event;var t=n.extendedProps;var i=t.is_recurrent||false;if(i){glpi_html_dialog({title:__("Recurring event dragged"),body:__("The dragged event is a recurring event. Do you want to move the serie or instance ?"),buttons:[{label:__("Serie"),click:function(){GLPIPlanning.editEventTimes(e)}},{label:_n("Instance","Instances",1),click:function(){GLPIPlanning.editEventTimes(e,true)}}]})}else{GLPIPlanning.editEventTimes(e)}},eventClick:function(e){var n=e.event;var t=n.extendedProps._editable;if(n.extendedProps.ajaxurl&&t&&!l){var i=n.start;var a=n.extendedProps.ajaxurl+"&start="+i.toISOString();e.jsEvent.preventDefault();glpi_ajax_dialog({url:a,close:function(){GLPIPlanning.refresh()},dialogclass:"modal-lg",title:__("Edit an event")})}},selectable:true,select:function(e){if(!n.can_create){GLPIPlanning.calendar.unselect();return false}var t=((((e||{}).resource||{})._resource||{}).extendedProps||{}).itemtype||"";var i=((((e||{}).resource||{})._resource||{}).extendedProps||{}).items_id||0;if(t==="Group_User"){GLPIPlanning.calendar.unselect();return false}var a=e.start;var r=e.end;glpi_ajax_dialog({url:CFG_GLPI.root_doc+"/ajax/planning.php",params:{action:"add_event_fromselect",begin:a.toISOString(),end:r.toISOString(),res_itemtype:t,res_items_id:i},dialogclass:"modal-lg",title:__("Add an event")});GLPIPlanning.calendar.unselect()}});var d=Object.keys(FullCalendarLocales);if(d.length===1){GLPIPlanning.calendar.setOption("locale",d[0])}$(".planning_on_central a").mousedown((function(){r=true;$(".qtip").hide()})).mouseup((function(){r=false}));window.onblur=function(){i=false};window.onfocus=function(){i=true};GLPIPlanning.calendar.render();GLPIPlanning.initFCDatePicker();$(window).focus();$(document).click((function(){$(".planning-context-menu").remove()}))},refresh:function(){if(typeof GLPIPlanning.calendar.refetchResources=="function"){GLPIPlanning.calendar.refetchResources()}GLPIPlanning.calendar.refetchEvents();GLPIPlanning.calendar.rerenderEvents();window.displayAjaxMessageAfterRedirect()},toggleResource:function(e,n){var t=GLPIPlanning.all_resources.findIndex((function(n){return n.id==e}));if(t!==-1){if(n&&GLPIPlanning.visible_res.indexOf(t.toString())===-1){GLPIPlanning.visible_res.push(t.toString())}else if(!n){GLPIPlanning.visible_res.splice(GLPIPlanning.visible_res.indexOf(t.toString()),1)}}},setEndofDays:function(e){if(e.constructor.name==="ResourceTimelineView"){var n=CFG_GLPI.planning_begin.split(":");var t=CFG_GLPI.planning_end.split(":");var i=parseInt(n[0])*60+parseInt(n[1]);var a=parseInt(t[0])*60+parseInt(t[1]);var r=a-i;var l=Math.ceil(r/60);$("#planning .fc-time-area.fc-widget-header table tr:nth-child(2) th").addClass("end-of-day");$("#planning .fc-time-area.fc-widget-header table tr:nth-child(3) th:nth-child("+l+"n)").addClass("end-of-day");$("#planning .fc-time-area.fc-widget-content table td:nth-child("+l+"n)").addClass("end-of-day")}},planningFilters:function(){$("#planning_filter a.planning_add_filter").on("click",(function(e){e.preventDefault();var n=$(this).attr("href");glpi_ajax_dialog({url:n,title:__("Add a calendar")})}));$("#planning_filter .filter_option").on("click",(function(){$(this).children("ul").toggle()}));$(document).click((function(e){if($(e.target).closest("#planning_filter .filter_option").length===0){$("#planning_filter .filter_option ul").hide()}}));$("#planning_filter .delete_planning").on("click",(function(){var e=$(this);var n=e.closest("ul.filters > li");$.ajax({url:CFG_GLPI.root_doc+"/ajax/planning.php",type:"POST",data:{action:"delete_filter",filter:e.attr("value"),type:n.attr("event_type")},success:function(){n.remove();GLPIPlanning.refresh()}})}));var e=function(e,n){var t=e.parents("li");var i=null;if(t.parent("ul.group_listofusers").length==1){i=t.parent("ul.group_listofusers").parent("li").attr("event_name")}var a=t.attr("event_name");var r=t.attr("event_type");var l=e.is(":checked");return $.ajax({url:CFG_GLPI.root_doc+"/ajax/planning.php",type:"POST",data:{action:"toggle_filter",name:a,type:r,parent:i,display:l},success:function(){GLPIPlanning.toggleResource(a,l);if(n){GLPIPlanning.refresh()}}})};$('#planning_filter li:not(li.group_users) input[type="checkbox"]').on("click",(function(){e($(this),true)}));$('#planning_filter li.group_users > input[type="checkbox"]').on("change",(function(){var n=$(this);var t=n.parents("li");var i=n.prop("checked");var a=t.attr("event_name");var r=n.parents("li.group_users").find('ul.group_listofusers input[type="checkbox"]');r.prop("checked",i);var l=[];r.each((function(){l.push(e($(this),false))}));GLPIPlanning.toggleResource(a,i);$.when.apply($,l).then((function(){GLPIPlanning.refresh()}))}));$("#planning_filter .color_input input").on("change",(function(){var e=$(this).parents("li");var n=null;if(e.length>=1){n=e.eq(1).attr("event_name");e=e.eq(0)}$.ajax({url:CFG_GLPI.root_doc+"/ajax/planning.php",type:"POST",data:{action:"color_filter",name:e.attr("event_name"),type:e.attr("event_type"),parent:n,color:$(this).val()},success:function(){GLPIPlanning.refresh()}})}));$("#planning_filter li.group_users .toggle").on("click",(function(){$(this).closest(".group_users").toggleClass("expanded")}));$("#planning_filter_toggle > a.toggle").on("click",(function(){$("#planning_filter_content").animate({width:"toggle"},300,"swing",(function(){$("#planning_filter").toggleClass("folded");$("#planning_container").toggleClass("folded")}))}))},editEventTimes:function(e,n){n=n||false;var t=e.event;var i=e.revert;var a=t.extendedProps;var r=null;var l=null;var o=null;var s=null;if("newResource"in e&&e.newResource!==null){var c=e.newResource._resource.extendedProps;o=c.itemtype;s=c.items_id}if("oldResource"in e&&e.oldResource!==null){var d=e.oldResource._resource.extendedProps;r=d.itemtype;l=d.items_id}var u=t.start;var f=t.end;if(typeof f==="undefined"||f===null){f=new Date(u.getTime());if(t.allDay){f.setDate(f.getDate()+1)}else{f.setHours(f.getHours()+2)}}var g=e.oldEvent||{};var p=g.start||u;$.ajax({url:CFG_GLPI.root_doc+"/ajax/planning.php",type:"POST",data:{action:"update_event_times",start:u.toISOString(),end:f.toISOString(),itemtype:a.itemtype,items_id:a.items_id,move_instance:n,old_start:p.toISOString(),new_actor_itemtype:o,new_actor_items_id:s,old_actor_itemtype:r,old_actor_items_id:l},success:function(e){if(!e){i()}GLPIPlanning.refresh()},error:function(){i()}})},initFCDatePicker:function(e){$("#planning_datepicker").flatpickr({defaultDate:e,onChange:function(e){var n=new Date(Date.UTC(e[0].getFullYear(),e[0].getMonth(),e[0].getDate()));GLPIPlanning.calendar.gotoDate(n)}})},getHeight:function(){var e=$(window).height()-272;if($("#debugajax").length>0){e-=$("#debugajax").height()}var n=300;if(e<n){e=n}return e}};