blob: fed2a7f9b118a6c495407939cbff2dd5cc96176b [file] [log] [blame]
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('<span class="sch-hdr-start">{0}</span><span class="sch-hdr-end">{1}</span>', 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 : '<span class="zone-type">{Type}</span>',
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(
'<dl class="eventTip">',
'{Title} {Type}',
'</dl>'
).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();
}
};