var ExampleDefaults = { width : '100%', height : '100%' }; Ext.ns('App'); Ext.Loader.setConfig({ enabled : true, disableCaching : true }); Ext.Loader.setPath('Sch', '../../js/Sch'); Ext.require([ 'Sch.panel.SchedulerGrid' ]); Ext.onReady(function() { App.SchedulerDemo.init(); }); Ext.define('MyTimeAxis', { extend : "Sch.data.TimeAxis", continuous : false, generateTicks : function(start, end, unit, increment) { // Use our own custom time intervals for day time-axis if (unit === Sch.util.Date.DAY) { var ticks = [], intervalEnd; while (start < end) { if (start.getDay() === 6) { // Saturday start.setHours(7); intervalEnd = Sch.util.Date.add(start, Sch.util.Date.HOUR, 6); } else { start.setHours(7); intervalEnd = Sch.util.Date.add(start, Sch.util.Date.HOUR, 13); } ticks.push({ start : start, end : intervalEnd }); start = Sch.util.Date.add(start, Sch.util.Date.DAY, 1); } return ticks; } else { return MyTimeAxis.superclass.generateTicks.apply(this, arguments); } } }); App.SchedulerDemo = { // Initialize application init : function() { Ext.define('Event', { extend : 'Sch.model.Event', fields : [ {name: 'Title'}, {name: 'Details'} ] }); Ext.define('Zone', { extend : 'Sch.model.Range', fields: [ 'Type' ] }); Sch.preset.Manager.registerPreset("cintelDay", { timeColumnWidth : 20, rowHeight: 20, // Only used in horizontal orientation resourceColumnWidth : 120, // Only used in vertical orientation displayDateFormat : 'Y-m-d', shiftUnit : "MINUTE", shiftIncrement : 30, defaultSpan : 6, // By default, show 6 weeks timeResolution : { unit : "MINUTE", increment : 30 }, headerConfig : { middle : { unit : "MINUTE", increment : 30, renderer : function(start, end, cfg) { cfg.align = 'left'; return Ext.Date.format(start, 'H:i'); } }, top : { unit : "MONTH", dateFormat : 'M Y' } } }); Sch.preset.Manager.registerPreset('cintelWeek', { timeColumnWidth : 10, displayDateFormat : 'G:i', shiftIncrement : 1, shiftUnit : "WEEK", timeResolution : { unit : "MINUTE", increment : 30 }, headerConfig : { middle: { unit : "DAY", //dateFormat:'D' renderer : function(start, end, cfg) { cfg.headerCls = 'sch-hdr-startend'; return Ext.String.format('{0}{1}', Ext.Date.format(start, 'G'), Ext.Date.format(end, 'G')); } }, top : { unit : "DAY", dateFormat : 'D d M' } } }); var start = Ext.Date.clearTime(new Date()); var end = Ext.Date.clearTime(new Date()); start.setHours(7, 0, 0, 0); end.setHours(20, 0, 0, 0); var startRepas = Ext.Date.clearTime(new Date()); var endRepas = Ext.Date.clearTime(new Date()); startRepas.setHours(11, 30, 0, 0); endRepas.setHours(14, 30, 0, 0); zoneStore = Ext.create('Ext.data.JsonStore', { model : 'Zone', data : [ { StartDate : startRepas, EndDate : endRepas, Type : '', Cls : 'myZoneStyle' } ] }); var ta = new MyTimeAxis(); var sched = Ext.create("Sch.panel.SchedulerGrid", { height : ExampleDefaults.height, width : ExampleDefaults.width, passStartEndParameters : true, eventBarTextField : 'Title', timeAxis : ta, viewPreset : 'cintelDay', startDate : start, endDate : end, orientation : 'vertical', constrainDragToResource : false, snapToIncrement : false, eventResizeHandles : 'end', eventBodyTemplate : new Ext.XTemplate( '{Title} {Type}' ), eventRenderer : function(event, resource, data) { return event.data; }, resizeValidatorFn : function(resourceRecord, eventRecord, start, end) { // If the view is per week, duration not allowed if (sched.viewPreset === "cintelDay") { return true; } return false; }, lockedViewConfig : { stripeRows : false, getRowClass : function(resource) { return resource.data.Name; } }, // Setup static columns columns : [ {header : 'Name', sortable:true, width:100, dataIndex : 'Name'} ], // Store holding all the resources resourceStore : Ext.create("Sch.data.ResourceStore", { autoLoad: true, model : 'Sch.model.Resource', proxy : { type : 'ajax', url : '../rest/schedulerResources', reader : { type : 'json' } } }), // Store holding all the events eventStore : Ext.create("Sch.data.EventStore", { autoLoad: true, autoSync: true, model : 'Event', proxy : { type : 'ajax', url : '../rest/schedulerEvents', reader : { type : 'json' } } }), listeners : { eventcontextmenu : this.onEventContextMenu, eventdblclick : this.onEventDblClick, schedulecontextmenu : this.onScheduleContextMenu, }, plugins : [ // 'bufferedrenderer', this.zonePlugin = Ext.create("Sch.plugin.Zones", { // If you want, show some extra meta data for each zone innerTpl : '{Type}', store : zoneStore }) ], tbar : [ { id: 'span3', enableToggle: true, text: 'Date', toggleGroup: 'span', scope : this, menu : Ext.create('Ext.menu.DatePicker', { handler: function(dp, date){ if (sched.viewPreset === "cintelDay") { sched.setTimeSpan(Ext.Date.add(date, Ext.Date.HOUR, 7), Ext.Date.add(date, Ext.Date.HOUR, 20)); var startRepas = new Date(date); var endRepas = new Date(date); startRepas.setHours(11, 30, 0, 0); endRepas.setHours(14, 30, 0, 0); zoneStore.clearData(); zoneStore.add( new Zone( { StartDate : startRepas, EndDate : endRepas, Type : '', Cls : 'myZoneStyle' })); } else { sched.setTimeSpan(date, Ext.Date.add(date, Ext.Date.DAY, 7)); zoneStore.clearData(); for (var i=0; i<7 ; i++) { var startRepas = Ext.Date.add(date, Ext.Date.DAY, i); var endRepas = Ext.Date.add(date, Ext.Date.DAY, i); startRepas.setHours(11, 30, 0, 0); endRepas.setHours(14, 30, 0, 0); zoneStore.add( new Zone( { StartDate : startRepas, EndDate : endRepas, Type : '', Cls : 'myZoneStyle' }) ); } } sched.eventStore.load(); //sched.getDockedItems('toolbar')[ 0 ].child('span3').setValue(date); }, scope : this }) }, { text : 'Jour', pressed : true, //iconCls : 'icon-vertical', enableToggle : true, toggleGroup : 'echelle', handler : function() { var date = Ext.Date.clearTime(sched.startDate); sched.eventResizeHandles="end"; sched.setTimeSpan(Ext.Date.add(date, Ext.Date.HOUR, 7), Ext.Date.add(date, Ext.Date.HOUR, 20)); sched.switchViewPreset('cintelDay', Ext.Date.add(date, Ext.Date.HOUR, 7), Ext.Date.add(date, Ext.Date.HOUR, 20)); sched.setOrientation('vertical'); sched.eventStore.load(); var startRepas = new Date(date); var endRepas = new Date(date); startRepas.setHours(11, 30, 0, 0); endRepas.setHours(14, 30, 0, 0); zoneStore.clearData(); zoneStore.add( new Zone( { StartDate : startRepas, EndDate : endRepas, Type : '', Cls : 'myZoneStyle' })); } }, { text : 'Semaine', enableToggle : true, //iconCls : 'icon-horizontal', toggleGroup : 'echelle', handler : function() { var date = Ext.Date.clearTime(sched.startDate); sched.setTimeSpan(date, Ext.Date.add(date, Ext.Date.DAY, 7)); sched.eventResizeHandles="none"; sched.switchViewPreset('cintelWeek', date, Ext.Date.add(date, Ext.Date.DAY, 7)); sched.setOrientation('horizontal'); sched.eventStore.load(); zoneStore.clearData(); for (var i=0; i<7 ; i++) { var startRepas = Ext.Date.add(date, Ext.Date.DAY, i); var endRepas = Ext.Date.add(date, Ext.Date.DAY, i); startRepas.setHours(11, 30, 0, 0); endRepas.setHours(14, 30, 0, 0); zoneStore.add( new Zone( { StartDate : startRepas, EndDate : endRepas, Type : '', Cls : 'myZoneStyle' }) ); } } } ] , tooltipTpl : new Ext.XTemplate( '
', '{Title} {Type}', '
' ).compile() }); sched.render(Ext.getBody()); var task = { run: function(){ sched.eventStore.load(); sched.refresh(); }, interval:60000 }; var runner = new Ext.util.TaskRunner(60000); // 50 ms timer resolution runner.start(task); }, //"eventdblclick", "eventcontextmenu", "scheduledblclick", "schedulecontextmenu" onEventContextMenu: function (s, rec, e) { e.stopEvent(); console.log("PlannerCommand;onEventContextMenu;" + rec.data.Id); }, onEventDblClick:function (s, rec, e) { e.stopEvent(); console.log("PlannerCommand;onEventDblClick;" + rec.data.Id); }, onScheduleContextMenu:function (scheduler, date, index, resource, e) { e.stopEvent(); } };