TaskContext=function(id){ Workflow.call(this,id); }; TaskContext.prototype=new Workflow; TaskContext.prototype.type="TaskContext"; TaskContext.prototype.editTaskSteps = function(_3252){ var taskExtObj = new TaskContext(); var pro_uid = _3252.scope.workflow.getUrlVars(); var taskId = _3252.scope.workflow.currentSelection.id; var stepsFields = Ext.data.Record.create([ { name: 'STEP_TITLE', type: 'string' }, { name: 'STEP_UID', type: 'string' }, { name: 'STEP_TYPE_OBJ', type: 'string' }, { name: 'STEP_CONDITION', type: 'string' }, { name: 'STEP_POSITION', type: 'string' }, { name: 'STEP_MODE', type: 'string' }, { name: 'STEP_UID_OBJ', type: 'string' } ]); var editor = new Ext.ux.grid.RowEditor({ saveText: 'Update' }); var btnAdd = new Ext.Button({ id: 'btnAdd', text: 'Assign Step', iconCls: 'application_add', handler: function(){ var User = grid.getStore(); var e = new stepsFields({ //STEP_TITLE: User.data.items[0].data.STEP_TITLE, STEP_UID : '', STEP_TYPE_OBJ : '', STEP_CONDITION : '', STEP_POSITION : '', STEP_MODE : '', STEP_UID_OBJ : '' }); if(availableSteps.data.items.length == 0) Ext.MessageBox.alert ('Status','No steps are available. All Steps have been already assigned.'); else { editor.stopEditing(); taskSteps.insert(0, e); grid.getView().refresh(); //grid.getSelectionModel().selectRow(0); editor.startEditing(0, 0); } } }); var btnRemove = new Ext.Button({ id: 'btnRemove', text: 'Remove Step', iconCls: 'application_delete', handler: function (s) { editor.stopEditing(); var s = grid.getSelectionModel().getSelections(); for(var i = 0, r; r = s[i]; i++){ //First Deleting step from Database using Ajax var stepUID = r.data.STEP_UID; var stepPosition = r.data.STEP_POSITION; //if STEP_UID is properly defined (i.e. set to valid value) then only delete the row //else its a BLANK ROW for which Ajax should not be called. if(r.data.STEP_UID != "") { Ext.Ajax.request({ url : '../steps/steps_Delete.php', method: 'POST', params: { TASK : taskId, STEP_UID : stepUID, STEP_POSITION : stepPosition }, success: function(response) { Ext.MessageBox.alert ('Status','Step has been removed successfully.'); //Secondly deleting from Grid taskSteps.remove(r); //Reloading store after removing steps taskSteps.reload(); } }); } else taskSteps.remove(r); } } }); var tb = new Ext.Toolbar({ items: [btnAdd, btnRemove] }); // create the Data Store of all Steps that are already been assigned to a task var taskSteps = new Ext.data.JsonStore({ root : 'data', totalProperty: 'totalCount', idProperty : 'gridIndex', remoteSort : true, fields : stepsFields, proxy : new Ext.data.HttpProxy({ url : 'proxyExtjs?tid='+taskId+'&action=getAssignedSteps' }) }); //taskUsers.setDefaultSort('LABEL', 'asc'); taskSteps.load(); // create the Data Store of all Steps that are not been assigned to a task i.e available steps var availableSteps = new Ext.data.JsonStore({ root : 'data', url : 'proxyExtjs?pid='+pro_uid+'&tid='+taskId+'&action=getAvailableSteps', totalProperty : 'totalCount', idProperty : 'gridIndex', remoteSort : false, autoLoad : true, fields : stepsFields }); //availableSteps.load(); var conditionsColumns = new Ext.grid.ColumnModel({ columns: [ { id: 'STEP_TITLE', header: 'Title', dataIndex: 'STEP_TITLE', width: 280, editor: new Ext.form.TextField({ //allowBlank: false }) }, { //id: 'STEP_TITLE', header: 'Condition', dataIndex: 'STEP_CONDITION', width: 250, editable: true, editor: new Ext.form.TextField({ }) }, { header: 'Assign Condition', width: 200, renderer: function(val){return '';} } ] }); var grid = new Ext.grid.GridPanel({ store : taskSteps, id : 'mygrid', loadMask : true, loadingText : 'Loading...', renderTo : 'cases-grid', frame : false, autoHeight : false, enableDragDrop : true, ddGroup : 'firstGridDDGroup', clicksToEdit: 1, minHeight :400, height :400, layout : 'form', plugins : [editor], columns : [{ id: 'STEP_TITLE', header: 'Title', dataIndex: 'STEP_TITLE', width: 200, sortable: true, editor: new Ext.form.ComboBox({ xtype : 'combo', fieldLabel : 'Users_groups', //hiddenName : 'number', store : availableSteps, displayField : 'STEP_TITLE' , valueField : 'STEP_TITLE', //name : 'STEP_TITLE', scope : this, triggerAction: 'all', emptyText : 'Select Step', allowBlank : false, onSelect: function(record, index){ var User = grid.getStore(); if(typeof _3252.scope.workflow.currentrowIndex == 'undefined') var selectedrowIndex = '0'; else selectedrowIndex = _3252.scope.workflow.currentrowIndex; //getting Index of the row that has been edited //User.data.items[0].data.STEP_TITLE= record.data.STEP_TITLE; User.data.items[selectedrowIndex].data.STEP_UID= record.data.STEP_UID; User.data.items[selectedrowIndex].data.STEP_TYPE_OBJ=record.data.STEP_TYPE_OBJ; User.data.items[selectedrowIndex].data.STEP_CONDITION=record.data.STEP_CONDITION; User.data.items[selectedrowIndex].data.STEP_POSITION=record.data.STEP_POSITION; User.data.items[selectedrowIndex].data.STEP_UID_OBJ=record.data.STEP_UID_OBJ; User.data.items[selectedrowIndex].data.STEP_MODE=record.data.STEP_MODE; this.setValue(record.data[this.valueField || this.displayField]); this.collapse(); } }) }, { id: 'STEP_MODE', header: 'Mode', dataIndex: 'STEP_MODE', width: 100, sortable: true, editor: new Ext.form.ComboBox ({ editable : false, triggerAction: 'all', lazyRender:true, allowBlank : false, emptyText : 'Select Mode', mode: 'local', scope: this, store: new Ext.data.ArrayStore({ id: 0, fields: [ 'STEP_MODE', 'STEP_MODE' ], data: [['EDIT', 'Edit'], ['VIEW', 'View']] }), valueField: 'STEP_MODE', defaultValue: 'EDIT', displayField: 'STEP_MODE', onSelect: function(record, index){ var User = grid.getStore(); User.data.items[0].data.STEP_MODE=record.data.STEP_MODE; this.setValue(record.data[this.valueField || this.displayField]); this.collapse(); } }) }, { sortable: false, renderer: function() { return String.format("Edit",pro_uid,taskId); } } ], sm: new Ext.grid.RowSelectionModel({ singleSelect: true, listeners: { rowselect: function(smObj, rowIndex, record) { _3252.scope.workflow.currentrowIndex = rowIndex; } } }), stripeRows: true, viewConfig: {forceFit: true}, tbar: tb }); editor.on({ scope: this, afteredit: function(roweditor, changes, record, rowIndex) { var stepUIDObj = record.data.STEP_UID_OBJ; var stepTypeObj = record.data.STEP_TYPE_OBJ; var stepMode = record.data.STEP_MODE; Ext.Ajax.request({ url : '../steps/steps_Save.php', method: 'POST', params: { sProcess : pro_uid, sTask : taskId, sType : stepTypeObj, sUID : stepUIDObj, sMode : stepMode }, success: function(response) { Ext.MessageBox.alert ('Status','Step has been assigned successfully.'); } }); availableSteps.reload(); //Deleting previously assigned step on updating/replacing with new step. if(changes != '' && typeof record.json != 'undefined') { var stepUID = record.json.STEP_UID; var stepPosition = record.json.STEP_POSITION; Ext.Ajax.request({ url : '../steps/steps_Delete.php', method: 'POST', params: { TASK : taskId, STEP_UID : stepUID, STEP_POSITION : stepPosition }, success: function(response) { //Ext.MessageBox.alert ('Status','Step has been updated successfully.'); } }); } } }); // Setup Drop Targets // This will make sure we only drop to the view scroller element var firstGridDropTargetEl = grid.getView().scroller.dom; var firstGridDropTarget = new Ext.dd.DropTarget(firstGridDropTargetEl, { ddGroup : 'firstGridDDGroup', notifyDrop : function(ddSource, e, data){ var records = ddSource.dragData.selections; Ext.each(records, ddSource.grid.store.remove, ddSource.grid.store); grid.store.add(records); grid.store.commitChanges(); //firstGrid.store.sort('gridIndex', 'ASC'); return true } }); firstGridDropTarget.addToGroup('firstGridDDGroup'); //Getting triggers data using stepTriggers function var treeGrid = taskExtObj.stepTriggers(_3252); treeGrid.render(document.body); var taskStepsTabs = new Ext.FormPanel({ labelWidth: 100, bodyStyle :'padding:5px 5px 0', width : 850, height : 500, items: { xtype:'tabpanel', activeTab: 0, defaults:{ autoHeight:true, bodyStyle:'padding:10px' }, items:[{ title:'Steps', layout:'fit', defaults: { width: 400 }, items:[grid] },{ title:'Condition', layout:'fit', defaults: { width: 400 }, items:[{ xtype: 'grid', ds: taskSteps, cm: conditionsColumns, height: 350, loadMask : true, loadingText : 'Loading...', border: false }] },{ title:'Triggers', layout:'form', defaults: { width: 400 }, items:[treeGrid] }] } }); taskStepsTabs.render(document.body); _3252.scope.workflow.taskStepsTabs = taskStepsTabs; var window = new Ext.Window({ title: 'Steps Of', collapsible: false, maximizable: false, width: 700, height: 380, minWidth: 200, minHeight: 150, layout: 'fit', plain: true, bodyStyle: 'padding:5px;', buttonAlign: 'center', items: taskStepsTabs /*buttons: [{ text: 'Save', handler: function(){ //var getstore = grid.getStore(); //var getData = getstore.data.items; //taskExtObj.saveTaskSteps(getData); } },{ text: 'Cancel', handler: function(){ // when this button clicked, window.close(); } }]*/ }); window.show(); } TaskContext.prototype.editUsers= function(_5625) { var taskExtObj = new TaskContext(); var pro_uid = workflow.getUrlVars(); var taskId = workflow.currentSelection.id; var userFields = Ext.data.Record.create([ { name: 'LABEL', type: 'string' }, { name: 'TU_TYPE', type: 'string' }, { name: 'TU_RELATION', type: 'string' }, { name: 'TAS_UID', type: 'string' }, { name: 'USR_UID', type: 'string' } ]); var editor = new Ext.ux.grid.RowEditor({ saveText: 'Update' }); var btnAdd = new Ext.Button({ id: 'btnAdd', text: 'Assign User', iconCls: 'application_add', handler: function(){ var User = grid.getStore(); var e = new userFields({ //LABEL: 'Select User or Group', //LABEL: User.data.items[0].data.LABEL, TAS_UID: '', TU_TYPE: '', USR_UID: '', TU_RELATION: '' }); //storeUsers.reload(); if(storeUsers.data.items.length == 0) Ext.MessageBox.alert ('Status','No users are available. All users have been already assigned.'); else { editor.stopEditing(); taskUsers.insert(0, e); grid.getView().refresh(); //grid.getSelectionModel().selectRow(0); editor.startEditing(0, 0); } } }); var btnRemove = new Ext.Button({ id: 'btnRemove', text: 'Remove User', iconCls: 'application_delete', handler: function (s) { editor.stopEditing(); var s = grid.getSelectionModel().getSelections(); for(var i = 0, r; r = s[i]; i++){ //First Deleting assigned users from Database var user_TURel = r.data.TU_RELATION; var userUID = r.data.USR_UID; var user_TUtype = r.data.TU_TYPE; var urlparams = '?action=ofToAssign&data={"TAS_UID":"'+taskId+'","TU_RELATION":"'+user_TURel+'","USR_UID":"'+userUID+'","TU_TYPE":"'+user_TUtype+'"}'; //if USR_UID is properly defined (i.e. set to valid value) then only delete the row //else its a BLANK ROW for which Ajax should not be called. if(r.data.USR_UID != "") { Ext.Ajax.request({ url : 'processes_Ajax.php' +urlparams , /*method: 'POST', params: { functions : 'ofToAssign', TAS_UID : taskId, TU_RELATION : user_TURel, USR_UID : userUID, TU_TYPE : user_TUtype },*/ success: function(response) { Ext.MessageBox.alert ('Status','User has been removed successfully.'); //Secondly deleting from Grid taskUsers.remove(r); //Reloading available user store taskUsers.reload(); } }); } else taskUsers.remove(r); } } }); var tb = new Ext.Toolbar({ items: [btnAdd, btnRemove] }); // create the Data Store of users that are already assigned to a task var taskUsers = new Ext.data.JsonStore({ root : 'data', totalProperty: 'totalCount', idProperty : 'gridIndex', remoteSort : true, fields : userFields, proxy: new Ext.data.HttpProxy({ url: 'proxyExtjs?pid='+pro_uid+'&tid='+taskId+'&action=getAssignedUsersList' }) }); //taskUsers.setDefaultSort('LABEL', 'asc'); taskUsers.load(); // create the Data Store of users that are not assigned to a task var storeUsers = new Ext.data.JsonStore({ root : 'data', url : 'proxyExtjs?tid='+taskId+'&action=getAvailableUsersList', totalProperty : 'totalCount', idProperty : 'gridIndex', remoteSort : false, //true, autoLoad : true, fields : userFields }); var grid = new Ext.grid.GridPanel({ store: taskUsers, id : 'mygrid', //cm: cm, loadMask: true, loadingText: 'Loading...', renderTo: 'cases-grid', frame: false, autoHeight:false, clicksToEdit: 1, minHeight:400, height :400, layout: 'fit', plugins: [editor], columns: [ new Ext.grid.RowNumberer(), { id: 'LABEL', header: 'Group or User', dataIndex: 'LABEL', width: 100, sortable: true, editor: new Ext.form.ComboBox({ xtype: 'combo', fieldLabel: 'Users_groups', hiddenName: 'number', store : storeUsers, displayField : 'LABEL' , valueField : 'LABEL', name : 'LABEL', scope : _5625, triggerAction: 'all', emptyText: 'Select User or Group', allowBlank: false, onSelect: function(record, index){ var User = grid.getStore(); if(typeof _5625.scope.workflow.currentrowIndex == 'undefined') var selectedrowIndex = '0'; else selectedrowIndex = _5625.scope.workflow.currentrowIndex; //getting Index of the row that has been edited //User.data.items[0].data.LABEL= record.data.LABEL; User.data.items[selectedrowIndex].data.TAS_UID = record.data.TAS_UID; User.data.items[selectedrowIndex].data.TU_TYPE = record.data.TU_TYPE; User.data.items[selectedrowIndex].data.USR_UID = record.data.USR_UID; User.data.items[selectedrowIndex].data.TU_RELATION = record.data.TU_RELATION; this.setValue(record.data[this.valueField || this.displayField]); this.collapse(); } }) } ], sm: new Ext.grid.RowSelectionModel({ singleSelect: true, listeners: { rowselect: function(smObj, rowIndex, record) { _5625.scope.workflow.currentrowIndex = rowIndex; } } }), stripeRows: true, viewConfig: {forceFit: true}, tbar: tb }); storeUsers.load(); editor.on({ scope: this, afteredit: function(roweditor, changes, record, rowIndex) { var taskId = record.data.TAS_UID; var userId = record.data.USR_UID; var tu_Type = record.data.TU_TYPE; var tu_Relation = record.data.TU_RELATION; var urlparams = '?action=assign&data={"TAS_UID":"'+taskId+'","USR_UID":"'+userId+'","TU_TYPE":"'+tu_Type+'","TU_RELATION":"'+tu_Relation+'"}'; Ext.Ajax.request({ url: 'processes_Ajax.php' +urlparams , success: function (response) { // When saving data success Ext.MessageBox.alert ('Status','User has been successfully assigned'); }, failure: function () { // when saving data failed Ext.MessageBox.alert ('Status','Failed saving User Assigned to Task'); } }); //Updating the user incase if already assigned user has been replaced by other user if(changes != '' && typeof record.json != 'undefined') { var user_TURel = record.json.TU_RELATION; var userUID = record.json.USR_UID; var user_TUtype = record.json.TU_TYPE; urlparams = '?action=ofToAssign&data={"TAS_UID":"'+taskId+'","TU_RELATION":"'+user_TURel+'","USR_UID":"'+userUID+'","TU_TYPE":"'+user_TUtype+'"}'; Ext.Ajax.request({ url : 'processes_Ajax.php' +urlparams , success: function(response) { //Ext.MessageBox.alert ('Status','User has been updated successfully.'); } }); } storeUsers.reload(); } }); var panel = new Ext.Panel({ id: 'panel', renderTo: Ext.getBody(), items: [grid] }); var window = new Ext.Window({ title: 'Users and User Groups', collapsible: false, maximizable: false, width: 400, height: 350, minWidth: 200, minHeight: 150, layout: 'fit', plain: true, bodyStyle: 'padding:5px;', buttonAlign: 'center', items: panel /*buttons: [{ text: 'Save', handler: function(){ Ext.MessageBox.alert ("User has been successfully assigned"); //var getstore = grid.getStore(); //var getData = getstore.data.items; //taskExtObj.saveTaskUsers(getData); } },{ text: 'Cancel', handler: function(){ // when this button clicked, window.close(); } }]*/ }); window.show(); } TaskContext.prototype.editTaskProperties= function(_5625) { var taskExtObj = new TaskContext(); var taskId = _5625.scope.workflow.currentSelection.id; /*function setTaskAssignType(formData){ for(var i=0;i