Commit d117ee8d authored by Project Open's avatar Project Open

- Moved Controller to separate file

parent 13a44744
;; This buffer is for text that is not saved, and for Lisp evaluation.
;; To create a file, visit it with C-x C-f and enter text in its buffer.
text: "Project",
flex: 1,
dataIndex: 'project_id',
renderer: hourGridProjectRenderer,
editor: {
xtype: 'treecombo',
store: taskTreeStore,
rootVisible: false,
displayField: 'project_name',
valueField: 'id',
allowBlank: false
}
}, {
{text: 'Task Match', coltype: 'config', flex: 1, dataIndex: 'match_task_id', sortable: true,
renderer: function(task_id) { var taskModel = taskTreeStore.getById(task_id); if (!taskModel) return ""; return taskModel.get('project_name'); },
getEditor: function(record, defaultField) {
var objectType = record.get('object_type'); if ("im_budget_item" !== objectType) return false;
return Ext.create('Ext.grid.CellEditor', {
field: Ext.create('PO.view.field.POComboTree', {
queryMode: 'local', store: taskTreeStore, displayField: 'project_name', valueField: 'id'
})
});
}
},
text: 'Task',
flex: 1,
dataIndex: 'task_id',
renderer: function(task_id) {
var taskModel = taskTreeStore.getById(task_id);
if (!taskModel) return "";
return taskModel.get('project_name');
},
getEditor: function(record, defaultField) {
if (!record) return;
var objectType = record.get('object_type');
if ("im_hour" !== objectType) return false;
return Ext.create('Ext.grid.CellEditor', {
field: Ext.create('PO.view.field.POComboTree', {
queryMode: 'local', store: taskTreeStore, displayField: 'project_name', valueField: 'id'
})
});
}
}, {
renderer: function(task_id) {
var taskModel = taskTreeStore.getById(task_id);
if (!taskModel) return "";
return taskModel.get('project_name');
},
getEditor: function(record, defaultField) {
if (!record) return;
var objectType = record.get('object_type');
if ("im_hour" !== objectType) return false;
return Ext.create('Ext.grid.CellEditor', {
field: Ext.create('PO.view.field.POComboTree', {
queryMode: 'local', store: taskTreeStore, displayField: 'project_name', valueField: 'id'
})
});
}
;; This buffer is for text that is not saved, and for Lisp evaluation.
;; To create a file, visit it with C-x C-f and enter text in its buffer.
text: "Project",
flex: 1,
dataIndex: 'project_id',
renderer: hourGridProjectRenderer,
editor: {
xtype: 'treecombo',
store: taskTreeStore,
rootVisible: false,
displayField: 'project_name',
valueField: 'id',
allowBlank: false
}
}, {
text: 'Task',
flex: 1,
dataIndex: 'task_id',
renderer: function(task_id) {
var taskModel = taskTreeStore.getById(task_id);
if (!taskModel) return "";
return taskModel.get('project_name');
},
getEditor: function(record, defaultField) {
if (!record) return;
var objectType = record.get('object_type');
if ("im_hour" !== objectType) return false;
return Ext.create('Ext.grid.CellEditor', {
field: Ext.create('PO.view.field.POComboTree', {
queryMode: 'local', store: taskTreeStore, displayField: 'project_name', valueField: 'id'
})
});
}
}, {
......@@ -16,6 +16,7 @@ Ext.Loader.setPath('PO.class', '/sencha-core/class');
Ext.Loader.setPath('Ext.ux', '/sencha-core/ux');
Ext.Loader.setPath('PO.view', '/sencha-core/view');
Ext.Loader.setPath('PO.controller', '/sencha-core/controller');
Ext.Loader.setPath('PO.tsweekly', '/intranet-timesheet2-weekly/js');
// Disable the ?_dc=123456789 parameter from loader
Ext.Loader.setConfig({disableCaching: false});
......@@ -245,290 +246,8 @@ function launchTimesheetWeeklyLogging(){
]
});
// -----------------------------------------------------------------------
// Controller
//
Ext.define('PO.controller.timesheet.HourWeeklyController', {
extend: 'Ext.app.Controller',
id: 'hourWeeklyController',
// Parameters
debug: true,
hourButtonPanel: null,
hourController: null,
hourGrid: null,
// Setup the various listeners to receive events here
init: function() {
var me = this;
if (me.debug) { console.log('PO.controller.timesheet.HourWeeklyController: init'); }
this.control({
'#buttonAddEntry': { click: this.onButtonAddEntry },
'#buttonDeleteEntry': { click: this.onButtonDeleteEntry },
scope: me
});
// Listen to the Grid Editor that allows to specify start- and end time
me.hourGrid.on('edit', this.onGridEdit, me);
me.hourGrid.on('beforeedit', this.onGridBeforeEdit, me);
// Trying to crate a "change" event from the Project combo,
// but this didn't work. Now just hard-wiring...
var rowEditing = me.hourGrid.editingPlugin;
// Catch a global key strokes. This is used to abort entry with Esc.
// For some reaons this doesn't work on the level of the HourButtonPanel, so we go for the global "window"
Ext.EventManager.on(window, 'keydown', this.onWindowKeyDown, me);
return this;
},
/**
* The value of the Project field has changed in the RowEditing.
*/
onProjectChanged: function(projectId, combo, hourGrid) {
// Load taskTreeStore with new parameter
taskTreeStore.getProxy().extraParams = { project_id: projectId };
taskTreeStore.reload({
callback: function(records, operation, success) {
var me = this;
if (hourGrid.debug) console.log('PO.store.timesheet.TaskTreeStore: loaded');
if (!success) {
PO.Utilities.reportStoreError("TaskTreeStore", operation);
return;
}
var mainProjectNode = records[0];
mainProjectNode.set('sort_order','0');
me.setRootNode(mainProjectNode);
}
});
},
/*
* The user has double-clicked on the row editor in order to
* manually fill in the values. This procedure automatically
* fills in the end_time.
*/
onGridBeforeEdit: function(editor, context, eOpts) {
console.log('GanttButtonController.onGridBeforeEdit');
// console.log(context.record);
// Return true to indicate to the editor that it's OK to edit
return true;
},
/**
* Gets called after finishing an edit using the "Update" button
*/
onGridEdit: function(editor, context) {
console.log('GanttButtonController.onGridEdit');
var rec = context.record;
var interval_date = rec.get('interval_date');
var interval_start = rec.get('interval_start');
var interval_start_time = rec.get('interval_start_time');
var interval_end = rec.get('interval_end');
var interval_end_time = rec.get('interval_end_time');
if ("" == interval_start_time) { interval_start_time = null; }
if ("" == interval_end_time) { interval_end_time = null; }
// start == end => Delete the entry
if (interval_start_time != null && interval_end_time != null) {
if (interval_start_time == interval_end_time) {
rec.destroy();
return;
}
}
if (interval_date != null) {
// The interval_date has been overwritten by the editor with a Date
var value = new Date(interval_date);
rec.set('interval_date', Ext.Date.format(value, 'Y-m-d'));
}
if (interval_date != null && interval_start_time != null) {
var value = new Date(interval_date);
value.setHours(interval_start_time.substring(0,2));
value.setMinutes(interval_start_time.substring(3,5));
rec.set('interval_start', Ext.Date.format(value, 'Y-m-d H:i:s'));
}
if (interval_date != null && interval_end_time != null) {
var value = new Date(interval_date);
value.setHours(interval_end_time.substring(0,2));
value.setMinutes(interval_end_time.substring(3,5));
rec.set('interval_end', Ext.Date.format(value, 'Y-m-d H:i:s'));
}
rec.save();
rec.commit();
},
// Esc (Escape) button pressed somewhere in the application window
onWindowKeyDown: function(e) {
var keyCode = e.getKey();
var keyCtrl = e.ctrlKey;
console.log('GanttButtonController.onWindowKeyDown: code='+keyCode+', ctrl='+keyCtrl);
// cancel hour logging with Esc key
if (27 == keyCode) {
// Cancel Edit
}
if (46 == keyCode) { this.onButtonDeleteEntry(); }
},
// Click into the empty space below the grid entries in order to start creating a new entry
onGridContainerClick: function() {
console.log('GanttButtonController.GridContainerClick');
var buttonStartLogging = Ext.getCmp('buttonStartLogging');
var disabled = buttonStartLogging.disabled;
if (!disabled) {
this.onButtonStartLogging();
}
},
/*
* Start logging the time.
* Before calling this procedure, the user must have selected a single
* leaf in the task tree for logging hours.
*/
onButtonStartLogging: function() {
console.log('GanttButtonController.ButtonStartLogging');
},
/*
* Start logging the time, for entirely manual entries.
*/
onButtonAddEntry: function() {
console.log('GanttButtonController.ButtonManualLogging');
var buttonAddEntry = Ext.getCmp('buttonAddEntry');
var buttonDeleteEntry = Ext.getCmp('buttonDeleteEntry');
// buttonAddEntry.disable();
// buttonDeleteEntry.enable();
rowEditing.cancelEdit();
var day = PO.Utilities.dateToPg(new Date());
var hour = new Ext.create('PO.model.timesheet.Hour', {
user_id: @current_user_id@,
day: day
});
hourStore.add(hour);
rowEditing.startEdit(hour, 0);
},
onButtonDeleteEntry: function() {
var me = this;
console.log('GanttButtonController.ButtonDeleteLogging');
var buttonAddEntry = Ext.getCmp('buttonAddEntry');
// var buttonDeleteEntry = Ext.getCmp('buttonDeleteEntry');
buttonAddEntry.enable();
// buttonDeleteEntry.enable();
rowEditing.cancelEdit();
var records = hourGrid.getSelectionModel().getSelection();
// Not logging already - enable the "start" button
if (1 == records.length) { // Exactly one record enabled
var record = records[0];
hourStore.remove(record);
record.destroy();
}
},
/**
* Control the enabled/disabled status of the Start/Stop logging buttons.
* Skip logging hours when changing the selection.
*/
onTreePanelSelectionChange: function(view, records) {
if (this.debug) { console.log('GanttButtonController.onTreePanelSelectionChange'); }
var buttonStartLogging = Ext.getCmp('buttonStartLogging');
var buttonAddEntry = Ext.getCmp('buttonAddEntry');
// Not logging already - enable the "start" button
if (1 == records.length) { // Exactly one record enabled
} else { // Zero or two or more records enabled
buttonStartLogging.setDisabled(true);
buttonAddEntry.setDisabled(true);
}
},
/**
* Clicking around in the grid part of the screen,
* Enable or disable the "Delete" button
*/
onGridSelectionChange: function(view, records) {
if (this.debug) { console.log('GanttButtonController.onGridSelectionChange'); }
var buttonDeleteEntry = Ext.getCmp('buttonDeleteEntry');
buttonDeleteEntry.setDisabled(1 != records.length);
},
/**
* Handle various key actions
*/
onCellKeyDown: function(table, htmlTd, cellIndex, record, htmlTr, rowIndex, e, eOpts) {
console.log('GanttButtonController.onCellKeyDown');
var keyCode = e.getKey();
var keyCtrl = e.ctrlKey;
console.log('GanttButtonController.onCellKeyDown: code='+keyCode+', ctrl='+keyCtrl);
},
/**
* The windows as a whole was resized
*/
onWindowsResize: function(width, height) {
console.log('GanttButtonController.onWindowResize');
var me = this;
var sideBar = Ext.get('sidebar'); // ]po[ left side bar component
var sideBarSize = sideBar.getSize();
me.onResize(sideBarSize.width);
},
/**
* The ]po[ left sideBar was resized
*/
onSideBarResize: function(event, el, config) {
console.log('GanttButtonController.onSideBarResize');
var me = this;
var sideBar = Ext.get('sidebar'); // ]po[ left side bar component
var sideBarSize = sideBar.getSize();
// We get the event _before_ the sideBar has changed it's size.
// So we actually need to the the oposite of the sidebar size:
if (sideBarSize.width > 100) {
sideBarSize.width = -5;
} else {
sideBarSize.width = 245;
}
me.onResize(sideBarSize.width);
},
/**
* Generic resizing function, called with the target width of the sideBar
*/
onResize: function(sideBarWidth) {
console.log('GanttButtonController.onResize: '+sideBarWidth);
var me = this;
var screenSize = Ext.getBody().getViewSize();
var height = me.hourButtonPanel.getSize().height;
var width = screenSize.width - sideBarWidth - 75;
me.hourButtonPanel.setSize(width, height);
}
});
var sideBarTab = Ext.get('sideBarTab');
var hourController = Ext.create('PO.controller.timesheet.HourWeeklyController', {
var hourController = Ext.create('PO.tsweekly.HourWeeklyController', {
'hourButtonPanel': hourButtonPanel,
'hourController': hourController,
'hourGrid': hourGrid
......
// -----------------------------------------------------------------------
// Controller
//
Ext.define('PO.tsweekly.HourWeeklyController', {
extend: 'Ext.app.Controller',
id: 'hourWeeklyController',
// Parameters
debug: true,
hourButtonPanel: null,
hourController: null,
hourGrid: null,
// Setup the various listeners to receive events here
init: function() {
var me = this;
if (me.debug) { console.log('PO.tsweekly.HourWeeklyController: init'); }
this.control({
'#buttonAddEntry': { click: this.onButtonAddEntry },
'#buttonDeleteEntry': { click: this.onButtonDeleteEntry },
scope: me
});
// Listen to the Grid Editor that allows to specify start- and end time
me.hourGrid.on('edit', this.onGridEdit, me);
me.hourGrid.on('beforeedit', this.onGridBeforeEdit, me);
// Trying to crate a "change" event from the Project combo,
// but this didn't work. Now just hard-wiring...
var rowEditing = me.hourGrid.editingPlugin;
// Catch a global key strokes. This is used to abort entry with Esc.
// For some reaons this doesn't work on the level of the HourButtonPanel, so we go for the global "window"
Ext.EventManager.on(window, 'keydown', this.onWindowKeyDown, me);
return this;
},
/**
* The value of the Project field has changed in the RowEditing.
*/
onProjectChanged: function(projectId, combo, hourGrid) {
// Load taskTreeStore with new parameter
taskTreeStore.getProxy().extraParams = { project_id: projectId };
taskTreeStore.reload({
callback: function(records, operation, success) {
var me = this;
if (hourGrid.debug) console.log('PO.store.timesheet.TaskTreeStore: loaded');
if (!success) {
PO.Utilities.reportStoreError("TaskTreeStore", operation);
return;
}
var mainProjectNode = records[0];
mainProjectNode.set('sort_order','0');
me.setRootNode(mainProjectNode);
}
});
},
/*
* The user has double-clicked on the row editor in order to
* manually fill in the values. This procedure automatically
* fills in the end_time.
*/
onGridBeforeEdit: function(editor, context, eOpts) {
console.log('GanttButtonController.onGridBeforeEdit');
// console.log(context.record);
// Return true to indicate to the editor that it's OK to edit
return true;
},
/**
* Gets called after finishing an edit using the "Update" button
*/
onGridEdit: function(editor, context) {
console.log('GanttButtonController.onGridEdit');
var rec = context.record;
var interval_date = rec.get('interval_date');
var interval_start = rec.get('interval_start');
var interval_start_time = rec.get('interval_start_time');
var interval_end = rec.get('interval_end');
var interval_end_time = rec.get('interval_end_time');
if ("" == interval_start_time) { interval_start_time = null; }
if ("" == interval_end_time) { interval_end_time = null; }
// start == end => Delete the entry
if (interval_start_time != null && interval_end_time != null) {
if (interval_start_time == interval_end_time) {
rec.destroy();
return;
}
}
if (interval_date != null) {
// The interval_date has been overwritten by the editor with a Date
var value = new Date(interval_date);
rec.set('interval_date', Ext.Date.format(value, 'Y-m-d'));
}
if (interval_date != null && interval_start_time != null) {
var value = new Date(interval_date);
value.setHours(interval_start_time.substring(0,2));
value.setMinutes(interval_start_time.substring(3,5));
rec.set('interval_start', Ext.Date.format(value, 'Y-m-d H:i:s'));
}
if (interval_date != null && interval_end_time != null) {
var value = new Date(interval_date);
value.setHours(interval_end_time.substring(0,2));
value.setMinutes(interval_end_time.substring(3,5));
rec.set('interval_end', Ext.Date.format(value, 'Y-m-d H:i:s'));
}
rec.save();
rec.commit();
},
// Esc (Escape) button pressed somewhere in the application window
onWindowKeyDown: function(e) {
var keyCode = e.getKey();
var keyCtrl = e.ctrlKey;
console.log('GanttButtonController.onWindowKeyDown: code='+keyCode+', ctrl='+keyCtrl);
// cancel hour logging with Esc key
if (27 == keyCode) {
// Cancel Edit
}
if (46 == keyCode) { this.onButtonDeleteEntry(); }
},
// Click into the empty space below the grid entries in order to start creating a new entry
onGridContainerClick: function() {
console.log('GanttButtonController.GridContainerClick');
var buttonStartLogging = Ext.getCmp('buttonStartLogging');
var disabled = buttonStartLogging.disabled;
if (!disabled) {
this.onButtonStartLogging();
}
},
/*
* Start logging the time.
* Before calling this procedure, the user must have selected a single
* leaf in the task tree for logging hours.
*/
onButtonStartLogging: function() {
console.log('GanttButtonController.ButtonStartLogging');
},
/*
* Start logging the time, for entirely manual entries.
*/
onButtonAddEntry: function() {
console.log('GanttButtonController.ButtonManualLogging');
var buttonAddEntry = Ext.getCmp('buttonAddEntry');
var buttonDeleteEntry = Ext.getCmp('buttonDeleteEntry');
// buttonAddEntry.disable();
// buttonDeleteEntry.enable();
rowEditing.cancelEdit();
var day = PO.Utilities.dateToPg(new Date());
var hour = new Ext.create('PO.model.timesheet.Hour', {
user_id: @current_user_id@,
day: day
});
hourStore.add(hour);
rowEditing.startEdit(hour, 0);
},
onButtonDeleteEntry: function() {
var me = this;
console.log('GanttButtonController.ButtonDeleteLogging');
var buttonAddEntry = Ext.getCmp('buttonAddEntry');
// var buttonDeleteEntry = Ext.getCmp('buttonDeleteEntry');
buttonAddEntry.enable();
// buttonDeleteEntry.enable();
rowEditing.cancelEdit();
var records = hourGrid.getSelectionModel().getSelection();
// Not logging already - enable the "start" button
if (1 == records.length) { // Exactly one record enabled
var record = records[0];
hourStore.remove(record);
record.destroy();
}
},
/**
* Control the enabled/disabled status of the Start/Stop logging buttons.
* Skip logging hours when changing the selection.
*/
onTreePanelSelectionChange: function(view, records) {
if (this.debug) { console.log('GanttButtonController.onTreePanelSelectionChange'); }
var buttonStartLogging = Ext.getCmp('buttonStartLogging');
var buttonAddEntry = Ext.getCmp('buttonAddEntry');
// Not logging already - enable the "start" button
if (1 == records.length) { // Exactly one record enabled
} else { // Zero or two or more records enabled
buttonStartLogging.setDisabled(true);
buttonAddEntry.setDisabled(true);
}
},
/**
* Clicking around in the grid part of the screen,
* Enable or disable the "Delete" button
*/
onGridSelectionChange: function(view, records) {
if (this.debug) { console.log('GanttButtonController.onGridSelectionChange'); }
var buttonDeleteEntry = Ext.getCmp('buttonDeleteEntry');
buttonDeleteEntry.setDisabled(1 != records.length);
},
/**
* Handle various key actions
*/
onCellKeyDown: function(table, htmlTd, cellIndex, record, htmlTr, rowIndex, e, eOpts) {
console.log('GanttButtonController.onCellKeyDown');
var keyCode = e.getKey();
var keyCtrl = e.ctrlKey;
console.log('GanttButtonController.onCellKeyDown: code='+keyCode+', ctrl='+keyCtrl);
},
/**
* The windows as a whole was resized
*/
onWindowsResize: function(width, height) {
console.log('GanttButtonController.onWindowResize');
var me = this;
var sideBar = Ext.get('sidebar'); // ]po[ left side bar component
var sideBarSize = sideBar.getSize();
me.onResize(sideBarSize.width);
},
/**
* The ]po[ left sideBar was resized
*/
onSideBarResize: function(event, el, config) {
console.log('GanttButtonController.onSideBarResize');
var me = this;
var sideBar = Ext.get('sidebar'); // ]po[ left side bar component
var sideBarSize = sideBar.getSize();
// We get the event _before_ the sideBar has changed it's size.
// So we actually need to the the oposite of the sidebar size:
if (sideBarSize.width > 100) {
sideBarSize.width = -5;
} else {
sideBarSize.width = 245;
}
me.onResize(sideBarSize.width);
},
/**
* Generic resizing function, called with the target width of the sideBar
*/
onResize: function(sideBarWidth) {
console.log('GanttButtonController.onResize: '+sideBarWidth);
var me = this;
var screenSize = Ext.getBody().getViewSize();
var height = me.hourButtonPanel.getSize().height;
var width = screenSize.width - sideBarWidth - 75;
me.hourButtonPanel.setSize(width, height);
}
});
set current_user_id [ad_conn user_id]
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment