Ext.require([ 'Ext.form.*', 'Ext.grid.*', 'Ext.tree.*', 'Ext.data.*', 'Ext.util.*', 'Ext.window.MessageBox', 'Ext.tip.*', 'Ext.state.*' ]); Ext.onReady(function(){ Ext.QuickTips.init(); function formatDate(value){ if ( value != '' ) { var dt = new Date(value); var date = Ext.Date.dateFormat(dt, 'Y-m-d'); return date; } else { return ''; } } var tabValue = new Array(); var saveneeded = false; var indexsaveneed = 0; var insertnew = true; getSortOrder = function(precedent,suivant){ if ( precedent != undefined ){ var dprec = precedent.data; } if ( suivant != undefined ) { var dnext = suivant.data; } var precorder = 0 ; var nextorder = 0; if ( dprec != undefined ) { Ext.Object.each(dprec,function(key,value,index){ if (key == 'sort_order'){ if(value.length > 0 ){ precorder = value; return false; }else{ precorder = 0; return false; } } }); } if (dnext != undefined ){ Ext.Object.each(dnext,function(key,value,index){ if (key == 'sort_order'){ if(value.length > 0 ){ nextorder = value; return false; }else{ nextorder = 0; return false; } } }); } var sortorder = 10000; if( precorder == 0 ){ return sortorder; } else if ( nextorder == 0 ) { return (parseInt(precorder) + 1000); }else{ sortorder = (nextorder - precorder); sortorder = parseInt(precorder) + (sortorder / 2) ; return sortorder; } }, getNodeId = function(node,type){ var idNext = 0 ; Ext.Object.each(node,function(key, value, myself) { // alert(Ext.Object.toQueryString(node)); if (key === type) { Ext.Object.each(value,function(key, value, myself) { // alert(Ext.Object.toQueryString(value)); // alert(' 2 ' + key + value); if ( key == 'internalId'){ if ( value.length > 0 ) { idNext = value; }else{ idNext = 0; } } }); } }); return idNext; }, genData2 = function(tab,view){ //var ss = materialstore.findRecord('data','Training Day'); var final = view; var couples = tab.split(';'); var size = couples.length; for ( var i = 1 ; i < 6 ; i++ ) { var keyvalue = couples[i].split(':'); var ssize = keyvalue.length; for ( var z = 1; z < ssize ; z++) { if ( keyvalue[(ssize - 1)] != "" ){ var value = keyvalue[(ssize - 1)]; var test = keyvalue[0].concat('store'); var prefix = "var c = keyvalue[0] + 'store';"; ok=true; try{ eval(prefix) eval(c) } catch(err){ ok=false; } final += keyvalue[0]; final += ':' if(ok == true){ var store = Ext.getStore(eval(c)); var index = store.findRecord('data',value); var modif = index.get('id'); if ( index != null ) { var rg = new RegExp(value,'gi'); tab = tab.replace(rg,modif); var rep = ''; final += keyvalue[1].replace(rg,modif); if ( keyvalue[1] != '' ) { final += ';'; } } } else { final += keyvalue[1]; final += ';'; } } else { final += keyvalue[0]; final += ':' final += keyvalue[1]; final += ';' } } } return final; } genParam = function(tab) { var equal = new RegExp("=",'gi'); var newTab = tab.replace(equal,":"); var start = "view_name:'im_timesheet_task_list_extjs';"; var view = "view_name:'im_timesheet_task_list_extjs';"; var et = new RegExp("&", 'gi'); start += newTab; start += ""; var total = start.replace(et,";"); total = decodeURIComponent(total); total = genData2(total,view); var mdlid = monPreeditgrid.getStore().getAt(0).get('id'); var node = monPrestore.getNodeById(mdlid); total = total +'id:'+mdlid+ ';parentId:' + node.data.parentId + ';project_id' + ':' + id;; alert(total); return total; } genSaveNeedParam = function(tab,id) { var equal = new RegExp("=",'gi'); var newTab = tab.replace(equal,":"); var start = "view_name:'im_timesheet_task_list_extjs';"; var view = "view_name:'im_timesheet_task_list_extjs';"; var et = new RegExp("&", 'gi'); start += newTab; start += ""; var total = start.replace(et,";"); total = decodeURIComponent(total); total = genData2(total,view); var mdlid = monPreeditgrid.getStore().getAt(0).get('id'); var node = monPrestore.getNodeById(mdlid); total = total +'id:'+id+ ';parentId:' + node.data.parentId + ';project_id' + ':' + id;; alert(total); return total; } function showResult(btn){ if (btn == 'yes') { var mdlexpanded = monPretree.getView().getSelectedRecords()[0]; var nodeexpanded = monPrestore.getNodeById(mdlexpanded.get('id')); var idexpanded = nodeexpanded.parentNode.internalId; var test = 0; var mm = monPrepanel.getValues(); var arrayValue = Ext.Object.getValues(mm); var tab = Ext.Object.toQueryString(mm); Ext.Ajax.request({ url : 'update_task.tcl', method : 'POST', success: function (response){ var text = response.responseText; monPretree.getStore().load(); // Ext.Msg.alert('success Updates ...', text); }, failure: function(response){ var text = response.responseText; Ext.Msg.alert('failure Updates ...', text); }, params : { param : genParam(tab) } }); } }; Ext.define('Task', { extend : 'Ext.data.Model', fields : [ {name : 'task', type: 'string'} , {name : 'material', type: 'string'} , {name : 'start_date', type: 'string'} , {name : 'short_desc', type: 'string'} , {name : 'sort_order', type: 'string'} , {name : 'id', type: 'string'} ] }); Ext.define('Combox', { extend : 'Ext.data.Model', fields : [ {name : 'id', type: 'int'} , {name : 'data', type: 'string'} ] }); var taskdefaultvalue = ''; var materialstore = Ext.create('Ext.data.Store',{ //fields : [ 'id','data'], model :'Combox', data : [ { "id" : "12270", "data" : "Basic Monthly Support Contract"} , { "id" : "12261", "data" : "Business Analysis Hour"} , { "id" : "12812", "data" : "Default"} , { "id" : "12275", "data" : "Installation Day"} , { "id" : "12274", "data" : "Installation Hour"} , { "id" : "12260", "data" : "Java Development Hour"} , { "id" : "12303", "data" : "Process Analysis Hour"} , { "id" : "12264", "data" : "Project/Consulting -Base System-"} , { "id" : "15276", "data" : "Project Management Hour"} , { "id" : "12390", "data" : "Project Management Hour"} , { "id" : "12263", "data" : "Project/Translation -Base System-"} , { "id" : "12265", "data" : "Project/Translation Freelance Extension"} , { "id" : "12266", "data" : "Project/Translation Quality Extension"} , { "id" : "12271", "data" : "Silver Monthly Support Contract"} , { "id" : "12262", "data" : "Software Design Hour"} , { "id" : "12269", "data" : "Software Update Service"} , { "id" : "15275", "data" : "Specification Development Hour"} , { "id" : "12267", "data" : "Support Hour"} , { "id" : "12256", "data" : "TCL Programming Hour"} , { "id" : "12268", "data" : "Testing Hour"} , { "id" : "12277", "data" : "Training Day"} , { "id" : "12273", "data" : "Training Hour"} , { "id" : "30818", "data" : "Translation Task"} , { "id" : "15283", "data" : "Type3 Customization Hour"} , { "id" : "15271", "data" : "Typo3 Installation Hour"} , { "id" : "15269", "data" : "Web Design Hour"} ] }); // var materialdefaultvalue = 'default'; var dvalue = materialstore.findRecord('id',12812); var data = dvalue.get('data') var materialdefaultvalue = data; var start_datedefaultvalue = ''; var short_descdefaultvalue = ''; var sort_orderdefaultvalue = ''; var iddefaultvalue = ''; var monPrestore = Ext.create('Ext.data.TreeStore',{ model : 'Task', proxy : { model : 'Task', appendId: true, type : 'ajax', url : '/intranet-timesheet2-tasks-extjs/getJSON.tcl', extraParams : { user_id : '624', project_id : '32001' }, reader : { type : 'json' }, writer : { type : 'json' } } }); var fieldmanda = new Object(); fieldmanda["Short_desc"] = "Short_desc"; var cellEditing = Ext.create('Ext.grid.plugin.CellEditing', { clicksToEdit: 1 }); var monPreeditstore = Ext.create('Ext.data.Store', { //fields : [ {name : 'budgettype', type: 'string'} , {name : 'description', type: 'string'} , {name : 'costcenter', type: 'string'} , {name : 'material', type: 'string'} , {name : 'plannedunits', type: 'string'} , {name : 'uom', type: 'string'} , {name : 'amount', type: 'string'} , {name : 'company', type: 'string'} , {name : 'lineamount', type: 'string'} , {name : 'id', type: 'string'} ], model : Task, data:{ 'items': []}, proxy: { type: 'memory', reader: { type: 'json', root: 'items' }, writer : { type: 'json', root: 'items' } } }); var monPreeditgrid = Ext.create('Ext.grid.Panel', { store : monPreeditstore, plugins : [cellEditing], columns : [ { header : 'Task', dataIndex : 'task', id : 'Taskgridid', flex : 3, field : { xtype : 'textfield', anchor : '40%', itemId: 'Task', allowBlank : true } } , { header : 'Material', dataIndex : 'material', id : 'Materialgridid', flex : 2, field : { xtype : 'combobox', anchor : '35%', store : materialstore, itemId : 'Material', queryMode: 'local', displayField: 'data', width : 50, valueField: 'data', editable : false, clsm : 'my-combo-lst', grow : true, enforceMaxLength : true, listeners : { render : function(me){ var obj = materialstore.findRecord('data',materialdefaultvalue); if ( obj != null ){ me.setValue(obj.get('data'),obj); } } }, allowBlank : true } } , { header : 'Start Date', dataIndex : 'start_date', id : 'Start_Dategridid', flex : 2, xtype : 'datecolumn', format : 'Y-m-d', renderer: formatDate, //renderer: Ext.util.Format.dateRenderer('Y/m/d'), field : { xtype : 'datefield', anchor : '20%', itemId: 'Start_Date', disabledDays : [0,6], submitFormat : 'Y-m-d', submitValue : false, //format : 'Y/m/d', format : 'Y-m-d', editable: false, value : '""', listeners : { blur : function(me,opt){ //me.setValue(Ext.Date.parse(me.getValue(),'Y-m-d')); var date = me.getValue(); alert(me.getValue()); } }, allowBlank : true } } , { header : "Short_description (*)", dataIndex : 'short_desc', id : 'Short_descgridid', flex : 2, field : { xtype : 'textfield', anchor : '40%', itemId: 'Short_desc', allowBlank : false } } , { header : 'Sort Order', dataIndex : 'sort_order', id : 'sort_ordergridid', flex : 2, field : { xtype : 'textfield', anchor : '40%', itemId: 'sort_order', allowBlank : true } } , { header : 'MESSAGE KEY MISSING: \'intranet-timesheet2-tasks-extjs.Id\'', dataIndex : 'id', id : 'Idgridid', hidden : true, flex : 2, field : { xtype : 'hiddenfield', itemId: 'Id', allowBlank : true } } ,], dockedItems: [{ xtype: 'toolbar', dock: 'bottom', height : 22, items: [ { xtype : 'button', id : 'treetbarbpmode', text : 'Mode : add Leaf', enableToggle : true, iconCls : 'tbar_leaf', scale : 'small', width : 170, toggleGroup : 'monGroup', listeners : { toggle : function(me,pressed){ if ( pressed == true ) { this.setText('Mode : add Sub_project'); this.setIconCls('tbar_subproject'); } else { this.setText('Mode : add Leaf'); this.setIconCls('tbar_leaf'); } } } }, '->',{ xtype : 'button', id : 'updatebtn', text : 'update', scall : 'small', height : 20, iconCls : 'icon_submit', handler : function() { var mdlid = monPreeditgrid.getStore().getAt(0).get('id'); //var node = monPrestore.getNodeById(mdlid); //var mdlexpanded = monPretree.getView().getSelectedRecords()[0]; if ( mdlid != undefined ) { var nodeexpanded = monPrestore.getNodeById(mdlid); var idexpanded = nodeexpanded.parentNode.internalId; monPrestore.getProxy().extraParams = { user_id : '624', project_id : '32001', expanded : idexpanded } var compt = 0; var fielderror = new Array(); Ext.Object.each(monPreeditgrid.columns, function(key,value){ Ext.Object.each(value ,function(key,value){ if(key == 'field'){ Ext.Object.each(value ,function(key,val){ var record = monPreeditstore.getAt(0); if ( key == 'itemId') { var nom = val.toLowerCase(); if ( fieldmanda[val] != undefined ) { if (record.get(nom) == '') { fielderror[compt] = fieldmanda[val]; compt++; } } } }); } }); }); var test = 0; //var mm = monPrepanel.getValues(); var mm = monPreeditgrid.getStore().getAt(0); var tab = Ext.Object.toQueryString(mm.data); if (fielderror.length == 0 ){ Ext.Ajax.request({ url : 'update_task.tcl', method : 'GET', success: function (response){ var text = response.responseText; monPretree.getStore().load(); saveneeded = false; insertnew = true; // Ext.Msg.alert('success Updates ...', text); }, failure: function(response){ var text = response.responseText; Ext.Msg.alert('failure Updates ...', text); }, params : { param : genParam(tab) , expanded : idexpanded } }); } else { var msg = 'Fields are mandatory : '.concat(fielderror.toString()); Ext.Msg.show({ title:'Mandatory fields', msg: msg, buttons: Ext.Msg.OK, icon: Ext.Msg.WARNING }); } } } },'-',{ xtype : 'button', text : 'delete', iconCls : 'icon_delete', id : 'deletebtn', scall : 'small', height : 20, handler : function() { var mm = monPreeditgrid.getStore().getAt(0); var tab = Ext.Object.toQueryString(mm); if ( monPreeditgrid.getStore().getAt(0).get('id').charAt(0) != 'X' ){ Ext.Ajax.request({ url : 'task-delete.tcl', method : 'POST', success: function (response){ var text = response.responseText; monPretree.getStore().load(); saveneeded = false; //Ext.example.msg('success Deleting ...', text); // Ext.Msg.alert('success Deleting ...', text); }, failure: function (response){ var text = response.responseText; Ext.Msg.alert('failure Deleting ...', text); }, params : { task_id : monPreeditgrid.getStore().getAt(0).get('id') , project_id : 32001 , return_url : "" } }); } else { if(monPreeditgrid.getStore().getAt(0).get('id').charAt(0) == 'X') { var node = monPrestore.getNodeById(monPreeditgrid.getStore().getAt(0).get('id')); node.remove(false); monPrestore.load(); } } } }] }] }); monPreeditgrid.on('edit',onvalidatEdit, this); function onvalidatEdit(editor,e,opt) { //alert(e.value + ' --- '+e.record.data); Ext.Object.each(e.record.data,function(key,value){ //alert( key + ' _ ' + value ); if (key == e.column.dataIndex){ if ( value == e.value ) { saveneeded = false; } else if (e.value == '' ) { saveneeded = true; } else { saveneeded = true; } } }); var mdl = monPreeditgrid.getStore().getAt(0); // alert(Ext.Object.toQueryString(e)); //var sel = monPretree.getView().getSelectedRecords(); tabValue["e.column.dataIndex"] = mdl.get(e.column.dataIndex); indexsaveneed = mdl.get('id'); // saveneeded = true; } var mesfields = new Array; var monPretree = Ext.create('Ext.tree.Panel',{ id : 'treepanel', title : 'MESSAGE KEY MISSING: \'intranet-timesheet2-tasks-extjs.treetitle\'', width : 500, useArrows : true, autoScroll : true, singleExpand : false, store : monPrestore, enableDD : true, rootVisible : false, viewConfig : { plugins : { ptype: 'treeviewdragdrop', } }, listeners : { beforeitemclick : function(me,model,item,index,e,opt){ var fielderror = new Array(); if ( monPreeditgrid.getStore().getAt(0) != undefined ) { var mdl = monPreeditgrid.getStore().getAt(0); } if ( saveneeded == true ){ var node = monPrestore.getNodeById(indexsaveneed); var tab = Ext.Object.toQueryString(mdl.data); var id = mdl.get('id'); function update_budget(btn){ if ( btn == 'yes'){ var compt = 0; Ext.Object.each(monPreeditgrid.columns, function(key,value){ Ext.Object.each(value ,function(key,value){ if(key == 'field'){ Ext.Object.each(value ,function(key,val){ var record = monPreeditstore.getAt(0); if ( key == 'itemId') { var nom = val.toLowerCase(); if ( fieldmanda[val] != undefined ) { if (record.get(nom) == '') { fielderrorsave[compt] = fieldmanda[val]; compt++; } } } }); } }); }); if ( fielderror.length > 0 ){ var msg = 'Fields are mandatory : '.concat(fielderrorsave.toString()); Ext.Msg.show({ title:'Mandatory fields', msg: msg, buttons: Ext.Msg.OK, icon: Ext.Msg.WARNING }); } else { Ext.Ajax.request({ url : 'update_task.tcl', method : 'GET', success: function (response){ var text = response.responseText; monPretree.getStore().load(); saveneeded = false; insertnew = true; }, failure: function(response){ var text = response.responseText; Ext.Msg.alert('failure Updates ...', text); }, params : { param : genSaveNeedParam(tab,id) } }); } } } Ext.Msg.show({ title:'Save Changes?', msg: 'MESSAGE KEY MISSING: \'intranet-timesheet2-tasks-extjs.worksave\'', buttons: Ext.Msg.YESNO, fn : update_budget, icon: Ext.window.MessageBox.QUESTION }); saveneeded = false; } }, itemclick : function(a,model,c,index,e){ monPreeditgrid.getView().refresh(); if ( model instanceof Task ) { var node = monPrestore.getNodeById(model.get('id')); if (node.isLeaf() ){ Ext.getCmp('updatebtn').setDisabled(false); Ext.getCmp('deletebtn').setDisabled(false); var i = 0; var Taskgrididcmp = Ext.getCmp('Taskgridid'); //alert(Taskgrididcmp); if ( 'Y' == 'Y' ) { if (mesfields[i] != undefined ) { Ext.apply(Taskgrididcmp,{ field : mesfields[i] }); } } else { Ext.apply(Taskgrididcmp,{ field : '' }); } i++; var Materialgrididcmp = Ext.getCmp('Materialgridid'); //alert(Materialgrididcmp); if ( 'N' == 'Y' ) { if (mesfields[i] != undefined ) { Ext.apply(Materialgrididcmp,{ field : mesfields[i] }); } } else { Ext.apply(Materialgrididcmp,{ field : '' }); } i++; var Start_Dategrididcmp = Ext.getCmp('Start_Dategridid'); //alert(Start_Dategrididcmp); if ( 'Y' == 'Y' ) { if (mesfields[i] != undefined ) { Ext.apply(Start_Dategrididcmp,{ field : mesfields[i] }); } } else { Ext.apply(Start_Dategrididcmp,{ field : '' }); } i++; var Short_descgrididcmp = Ext.getCmp('Short_descgridid'); //alert(Short_descgrididcmp); if ( 'Y' == 'Y' ) { if (mesfields[i] != undefined ) { Ext.apply(Short_descgrididcmp,{ field : mesfields[i] }); } } else { Ext.apply(Short_descgrididcmp,{ field : '' }); } i++; var sort_ordergrididcmp = Ext.getCmp('sort_ordergridid'); //alert(sort_ordergrididcmp); if ( 'Y' == 'Y' ) { if (mesfields[i] != undefined ) { Ext.apply(sort_ordergrididcmp,{ field : mesfields[i] }); } } else { Ext.apply(sort_ordergrididcmp,{ field : '' }); } i++; var Idgrididcmp = Ext.getCmp('Idgridid'); //alert(Idgrididcmp); if ( 'N' == 'Y' ) { if (mesfields[i] != undefined ) { Ext.apply(Idgrididcmp,{ field : mesfields[i] }); } } else { Ext.apply(Idgrididcmp,{ field : '' }); } i++; monPreeditstore.removeAll(false); monPreeditstore.insert(0,model); //PROJECT } else { Ext.getCmp('updatebtn').setDisabled(true); Ext.getCmp('deletebtn').setDisabled(true); monPreeditstore.removeAll(false); monPreeditstore.insert(0,model); } } }, itemdblclick : function(view, model, htmlitem, index, e ) { if ( insertnew == true ) { var cmp = Ext.getCmp('treetbarbpmode'); var node = monPrestore.getNodeById(model.get('id')); var papa = node.parentNode; var idparent = 'X'+papa.internalId; var mdata = papa.data; var sdate = 0 ; Ext.Object.each(mdata, function(key, value, myself) { if (key === 'start_date') { sdate = value; return false; // stop the iteration } }); //If mode => SUB PROJECT ( Bpn pressed ) if ( cmp.pressed == true ){ //Add Sub Project : var project = {task: taskdefaultvalue,material: materialdefaultvalue,start_date: sdate,short_desc: short_descdefaultvalue,sort_order: sort_orderdefaultvalue,id: idparent,children : [] }; var rechild = papa.insertBefore(project,node); } else { var child = {task: taskdefaultvalue, material: materialdefaultvalue, start_date: sdate, short_desc: short_descdefaultvalue, sort_order: sort_orderdefaultvalue, id: idparent, leaf : true}; var rechild = papa.insertBefore(child,node); } if ( node.getDepth() != 1 ) { var idNext = getNodeId(node,'nextSibling'); var nodeNext = monPrestore.getNodeById(idNext); var sortorder = getSortOrder(node,nodeNext); rechild.data.sort_order = sortorder; var renode = papa.replaceChild(rechild,node); papa.insertBefore(renode,rechild); monPretree.getView().getSelectionModel().select(rechild); monPretree.fireEvent('itemclick',monPretree.getView(),rechild); } else { var rechild = node.appendChild(rechild); rechild.data.sort_order = 10000; monPretree.getView().refresh(); monPretree.getView().getSelectionModel().select(rechild); monPretree.fireEvent('itemclick',monPretree.getView(),rechild); } insertnew = false; } } }, columns : [ { xtype : 'treecolumn', flex :3, text : 'Task', width : 100, dataIndex : 'task', sortable : true } , { flex : 2, text : 'Material', width : 100, dataIndex : 'material', sortable : true } , { flex : 2, text : 'Start Date', width : 100, dataIndex : 'start_date', sortable : true } , { flex : 2, text : 'Short_description', width : 100, dataIndex : 'short_desc', sortable : true } , { flex : 2, text : 'Sort Order', width : 100, dataIndex : 'sort_order', sortable : true } , { flex : 2, hidden : true, align : 'right', text : 'MESSAGE KEY MISSING: \'intranet-timesheet2-tasks-extjs.Id\'', width : 100, dataIndex : 'id', sortable : true } , ] }); monPretree.getView().on('drop',function( node, data, overModel, dropPosition, options ){ var node = ''; Ext.Array.each(data.records, function(name, index, countriesItSelf) { node = monPrestore.getNodeById(name.internalId); }); if ( node != undefined) { var papaid = getNodeId(node,'parentNode'); var nextid = getNodeId(node,'nextSibling'); var previd = getNodeId(node,'previousSibling'); var mdl = monPreeditgrid.getStore().getAt(0); if ( mdl != undefined ) { var nodenxt = monPrestore.getNodeById(nextid); var nodesvt = monPrestore.getNodeById(previd); var sortorder = getSortOrder(nodesvt,nodenxt); node.data.sort_order = sortorder; node.data.parentId = papaid; var ndata = node.data; var node = monPrestore.getNodeById(indexsaveneed); var tab = Ext.Object.toQueryString(mdl.data); alert(genParam(tab)); Ext.Ajax.request({ url : 'update_task.tcl', method : 'GET', success: function (response){ var text = response.responseText; //monPretree.getStore().load(); saveneeded = false; //Ext.Msg.alert('success Updates ...', text); }, failure: function(response){ var text = response.responseText; Ext.Msg.alert('failure Updates ...', text); }, params : { param : genParam(tab) } }); } } }); monPretree.getView().refresh(); var mainPan = Ext.create('Ext.form.Panel',{ title : 'MESSAGE KEY MISSING: \'intranet-timesheet2-tasks-extjs.title\'', resizable : true, height : 800, width : 1200, layout : { type : 'anchor' }, items : [ { anchor : '100% 13%', layout : 'fit', split : true, items : [monPreeditgrid] }, { anchor : '100% 80%', //margin : '0 0 3 0', layout : 'fit', split : true, items : [monPretree] } ], renderTo : 'mongrid' }); });