#set ($EDIT_BACKLOG_TITLE = $CommonFunctions.getEncodedTermFromResourceBundle($currentUserId, "gbacklogmgmt", "gbacklogmgmt.edittitle")) #set ($ADD_BACKLOG_TITLE = $CommonFunctions.getEncodedTermFromResourceBundle($currentUserId, "gbacklogmgmt", "gbacklogmgmt.addtitle")) #set ($BACKLOG_HEADER_ID= $CommonFunctions.getEncodedTermFromResourceBundle($currentUserId, "gbacklogmgmt", "gbacklogmgmt.header.id")) #set ($BACKLOG_HEADER_NAME = $CommonFunctions.getEncodedTermFromResourceBundle($currentUserId, "gbacklogmgmt", "gbacklogmgmt.header.name")) #set ($BACKLOG_HEADER_PROJECT = $CommonFunctions.getEncodedTermFromResourceBundle($currentUserId, "gbacklogmgmt", "gbacklogmgmt.header.project")) #set ($BACKLOG_HEADER_PUBLIC = $CommonFunctions.getEncodedTermFromResourceBundle($currentUserId, "gbacklogmgmt", "gbacklogmgmt.header.public")) #set ($BACKLOG_HEADER_LINKS = $CommonFunctions.getEncodedTermFromResourceBundle($currentUserId, "gbacklogmgmt", "gbacklogmgmt.header.links")) #set ($BACKLOG_HEADER_STORIES = $CommonFunctions.getEncodedTermFromResourceBundle($currentUserId, "gbacklogmgmt", "gbacklogmgmt.header.stories")) #set ($BACKLOG_HEADER_OWNER = $CommonFunctions.getEncodedTermFromResourceBundle($currentUserId, "gbacklogmgmt", "gbacklogmgmt.header.owner")) #set ($BACKLOG_HEADER_LASTSYNCHED = $CommonFunctions.getEncodedTermFromResourceBundle($currentUserId, "gbacklogmgmt", "gbacklogmgmt.header.lastsynched")) #set ($ADD_NEW_BACKLOG_TTIP = $CommonFunctions.encodeJavaScriptString($CommonFunctions.getTermFromResourceBundle($currentUserId, "gbacklogmgmt", "gbacklogmgmt.addnewbacklogttip"))) #set ($ADD_BACKLOG_BUTTON = $CommonFunctions.encodeJavaScriptString($CommonFunctions.getTermFromResourceBundle($currentUserId, "gbacklogmgmt", "gbacklogmgmt.addbacklogbutton"))) #set ($DELETE_BACKLOG_TTIP = $CommonFunctions.encodeJavaScriptString($CommonFunctions.getTermFromResourceBundle($currentUserId, "gbacklogmgmt", "gbacklogmgmt.deletebacklogtitle"))) #set ($DELETE_BACKLOG_BUTTON = $CommonFunctions.encodeJavaScriptString($CommonFunctions.getTermFromResourceBundle($currentUserId, "gbacklogmgmt", "gbacklogmgmt.deletebacklogbutton"))) #set ($DELETE_BACKLOG_MSG = $CommonFunctions.encodeJavaScriptString($CommonFunctions.getTermFromResourceBundle($currentUserId, "gbacklogmgmt", "gbacklogmgmt.deletebacklogmsg"))) #set ($DELETE_BACKLOG_TITLE = $CommonFunctions.encodeJavaScriptString($CommonFunctions.getTermFromResourceBundle($currentUserId, "gbacklogmgmt", "gbacklogmgmt.deletebacklogtitle"))) #set ($DELETE_MASTER_BACKLOG = $CommonFunctions.encodeJavaScriptString($CommonFunctions.getTermFromResourceBundle($currentUserId, "gbacklogmgmt", "gbacklogmgmt.deletemasterbacklog"))) #set ($CLOSE_TEXT = $CommonFunctions.encodeJavaScriptString($CommonFunctions.getTermFromResourceBundle($currentUserId, "gbacklogmgmt", "gbacklogmgmt.closetext"))) #set ($SYNC_THIS_BACKLOG = $CommonFunctions.encodeJavaScriptString($CommonFunctions.getTermFromResourceBundle($currentUserId, "gbacklogmgmt", "gbacklogmgmt.syncbacklog"))) #set ($REFRESH_THIS_BACKLOG = $CommonFunctions.encodeJavaScriptString($CommonFunctions.getTermFromResourceBundle($currentUserId, "gbacklogmgmt", "gbacklogmgmt.refreshbacklog"))) #set ($MANAGE_BACKLOG_TITLE = $CommonFunctions.encodeJavaScriptString($CommonFunctions.getTermFromResourceBundle($currentUserId, "gbacklogmgmt", "gbacklogmgmt.managebacklogtitile"))) #set ($CONTACT_ADMIN_MSG = $CommonFunctions.encodeJavaScriptString($CommonFunctions.getTermFromResourceBundle($currentUserId, "gbacklogmgmt", "gbacklogmgmt.contactadminmsg"))) #set ($ERROR_LOADING_BACKLOGS = $CommonFunctions.encodeJavaScriptString($CommonFunctions.getTermFromResourceBundle($currentUserId, "gbacklogmgmt", "gbacklogmgmt.backlogloaderror"))) #set ($NUMBER_OF_BACKLOGS = $CommonFunctions.encodeJavaScriptString($CommonFunctions.getTermFromResourceBundle($currentUserId, "gbacklogmgmt", "gbacklogmgmt.totalbacklogs"))) #set ($NUMBER_OF_PROJECTS = $CommonFunctions.encodeJavaScriptString($CommonFunctions.getTermFromResourceBundle($currentUserId, "gbacklogmgmt", "gbacklogmgmt.totalprojects"))) #set ($OWNER = $CommonFunctions.encodeJavaScriptString($CommonFunctions.getTermFromResourceBundle($currentUserId, "gbacklogmgmt", "gbacklogmgmt.owner"))) #set ($PROJECT = $CommonFunctions.encodeJavaScriptString($CommonFunctions.getTermFromResourceBundle($currentUserId, "gbacklogmgmt", "gbacklogmgmt.project"))) #set ($STORY_REP_CONNECTION = $CommonFunctions.encodeJavaScriptString($CommonFunctions.getTermFromResourceBundle($currentUserId, "gbacklogmgmt", "gbacklogmgmt.storyrepconnect"))) #set ($DEFAULT_DATA_STORE = $CommonFunctions.encodeJavaScriptString($CommonFunctions.getTermFromResourceBundle($currentUserId, "gbacklogmgmt", "gbacklogmgmt.defaultdatastore"))) #set ($ID_LABEL = $CommonFunctions.encodeJavaScriptString($CommonFunctions.getTermFromResourceBundle($currentUserId, "gbacklogmgmt", "gbacklogmgmt.ID"))) #set ($BLANK_ENTRY_MSG = $CommonFunctions.encodeJavaScriptString($CommonFunctions.getTermFromResourceBundle($currentUserId, "gbacklogmgmt", "gbacklogmgmt.blankmsg"))) #set ($SAVE_TEXT = $CommonFunctions.encodeJavaScriptString($CommonFunctions.getTermFromResourceBundle($currentUserId, "gbacklogmgmt", "gbacklogmgmt.savetext"))) #set ($INVALID_MSG = $CommonFunctions.encodeJavaScriptString($CommonFunctions.getTermFromResourceBundle($currentUserId, "gbacklogmgmt", "gbacklogmgmt.invalidmsg"))) #set ($SAVE_BACKLOG_TITLE = $CommonFunctions.encodeJavaScriptString($CommonFunctions.getTermFromResourceBundle($currentUserId, "gbacklogmgmt", "gbacklogmgmt.savebacklogtitle"))) #set ($CANCEL_TEXT = $CommonFunctions.encodeJavaScriptString($CommonFunctions.getTermFromResourceBundle($currentUserId, "gbacklogmgmt", "gbacklogmgmt.canceltext"))) #set ($SAVING_BACKLOG = $CommonFunctions.encodeJavaScriptString($CommonFunctions.getTermFromResourceBundle($currentUserId, "gbacklogmgmt", "gbacklogmgmt.savingbacklog"))) #set ($SAVE_BACKLOG_ERROR = $CommonFunctions.encodeJavaScriptString($CommonFunctions.getTermFromResourceBundle($currentUserId, "gbacklogmgmt", "gbacklogmgmt.savebacklogerror"))) #set ($SYNCHRONIZE_BACKLOG = $CommonFunctions.encodeJavaScriptString($CommonFunctions.getTermFromResourceBundle($currentUserId, "gbacklogmgmt", "gbacklogmgmt.synchronizebacklog"))) #set ($BACKLOG_PUBLIC = $CommonFunctions.encodeJavaScriptString($CommonFunctions.getTermFromResourceBundle($currentUserId, "gbacklogmgmt", "gbacklogmgmt.backlogpublic"))) #set ($ERROR_TITLE = $CommonFunctions.encodeJavaScriptString($CommonFunctions.getTermFromResourceBundle($currentUserId, "gbacklogmgmt", "gbacklogmgmt.backlog.error"))) #set ($LOAD_ERROR = $CommonFunctions.encodeJavaScriptString($CommonFunctions.getTermFromResourceBundle($currentUserId, "gbacklogmgmt", "gbacklogmgmt.backlog.loaderror"))) // HTMLComponent - An extension of BoxComponent to allow inline HTML // while preserving lazy rendering Ext.HTMLComponent = function(config) { Ext.apply(this,config); Ext.HTMLComponent.superclass.constructor.call(this); this.on('beforerender',function() { if ( !this.el ) { this.el = Ext.DomHelper.append(Ext.getBody(),{ tag:'div', html:this.html },true); } return true; },this); } Ext.extend(Ext.HTMLComponent,Ext.BoxComponent); var backlogmgmt = { mgmtDialog : null, ds : null, gridCtrl : null, addButton : null, closeButton : null, topText : null, backlogDialog : null, // backlog dialog and forms entries bdlgFormCtrl : null, bdlgFormRec : null, bdlgNewFormRec : null, bdlgProjCombo : null, // backlog dialog project combo bdlgProjCombods : null, // combo ds bdlgUserCombo : null, // backlog dialog user combo bdlgUserCombods : null, // combo ds comboRec: null, syncmenu : null, // context menu entry for sync backlog refreshPBX: false, init : function() { backlogmgmt.createMgmtDialog(); backlogmgmt.createBacklogDialog(); }, // ---------- Backlog Management Dialog ---------- createMgmtDialog : function() { backlogmgmt.reader = new Ext.data.JsonReader({}, [ {name: 'id'}, {name: 'name', sortType:'asUCString'}, {name: 'project', sortType:'asUCString'}, {name: 'projid'}, {name: 'activated'}, {name: 'lcount', type:'int' }, {name: 'scount', type:'int' }, {name: 'owner', sortType:'asUCString'}, {name: 'lastsynched'}, {name: 'warningMsg'}, {name: 'errorcodes'}, {name: 'repositoryid'}, {name: 'ismaster'} ]); var ds = new Ext.data.Store({ proxy: new Ext.data.HttpProxy({url:'pbv/PBVAsyncHandler?action=LOAD-BACKLOGS'}), reader: backlogmgmt.reader, sortInfo:{field: 'project', direction: "ASC"}, listeners : { load : backlogmgmt.updateTopText } }); ds.on('load', backlogmgmt.loadHandler); ds.on('loadexception', backlogmgmt.httpLexHandler); //ds.load({waitMsg:'$LOADING',params:{start:0, limit:25}}); backlogmgmt.ds = ds; backlogmgmt.gridCtrl = new Ext.grid.GridPanel({ ds: backlogmgmt.ds, autoExpandColumn: 'name', autoExpandMin: 100, columns: [ {header: "$BACKLOG_HEADER_ID", width: 40, sortable: true, dataIndex: 'id', renderer: TBLRender.Id }, {id:'name',header: "$BACKLOG_HEADER_NAME", width: 100, sortable: true, dataIndex: 'name', renderer: backlogmgmt.renderName }, {header: "$BACKLOG_HEADER_PROJECT", width: 100, sortable: true, dataIndex: 'project' }, {header: "$BACKLOG_HEADER_PUBLIC", width: 40, sortable: true, dataIndex: 'activated', renderer: TBLRender.YBoolean }, {header: "$BACKLOG_HEADER_LINKS", width: 40, sortable: true, dataIndex: 'lcount', renderer: TBLRender.Number }, {header: "$BACKLOG_HEADER_STORIES", width: 40, sortable: true, dataIndex: 'scount', renderer: backlogmgmt.renderStoryCount }, {header: "$BACKLOG_HEADER_OWNER", width: 90, sortable: true, dataIndex: 'owner' }, {header: "$BACKLOG_HEADER_LASTSYNCHED", width: 104, sortable: true, dataIndex: 'lastsynched' } ], loadMask: {msg: '$LOADING'}, frame:true, collapsible: false, animCollapse: false, tbar: [], layout:'fit', headerAsText:false, renderTo: document.body }); if(!backlogmgmt.mgmtDialog) { backlogmgmt.addButton = new Ext.Button({id: 'addPBlButton', text:'$ADD_BACKLOG_BUTTON', tooltip:'$ADD_NEW_BACKLOG_TTIP', iconCls: 'add'}); backlogmgmt.addButton.on('click', function() { backlogmgmt.addNewBacklog(backlogmgmt.addButton.getEl()); }); backlogmgmt.removeButton = new Ext.Button({text:'$DELETE_BACKLOG_BUTTON', tooltip:'$DELETE_BACKLOG_TTIP', iconCls: 'remove'}); backlogmgmt.removeButton.on('click', function() { var selections = backlogmgmt.gridCtrl.selModel.getSelections(); var selectlen = selections.length; if(selectlen > 0) { // check if it a master backlog for(var i = 0; i < selectlen; i++) { var srow = selections[i]; var master = srow.get('ismaster'); if(master) { BxtUtil.showErrorMsg("$DELETE_MASTER_BACKLOG" + "
" + srow.get('name') + ""); return; } } var msg2 = '$DELETE_BACKLOG_MSG'; Ext.Msg.show({ title:'$DELETE_BACKLOG_TITLE', msg: '' + msg2 +'', buttons: Ext.Msg.OKCANCEL, fn: backlogmgmt.onRemoveBacklog, icon: Ext.MessageBox.QUESTION, animEl : backlogmgmt.removeButton.getEl() }); } }); backlogmgmt.closeButton = new Ext.Toolbar.Button({id: 'backlogMgmtCloseButton', text:'$CLOSE_TEXT'}); backlogmgmt.closeButton.on('click', function() { backlogmgmt.mgmtDialog.hide(); }); // Toolbar var toolbar = backlogmgmt.gridCtrl.getTopToolbar(); backlogmgmt.topText = new Ext.Toolbar.TextItem(); toolbar.add(backlogmgmt.topText); toolbar.add('->'); toolbar.add( backlogmgmt.addButton ); toolbar.add( backlogmgmt.removeButton ); // context menu backlogmgmt.contextMenu = new Ext.menu.Menu(); // handler for context menu items function contextMenuHandler(item, e) { switch (item.id) { case 'refreshBacklogs': backlogmgmt.ds.reload({waitMsg:'$LOADING',params:{start:0, limit:25}}); break; } } backlogmgmt.mgmtDialog = new Ext.Window({ title: '$MANAGE_BACKLOG_TITLE', width:700, height:420, closeAction:'hide', plain: true, items: backlogmgmt.gridCtrl, modal: true, resizable : true, closable: true, layout: 'fit', buttons:[{ text:'$CLOSE_TEXT', id: 'backlogMgmtCloseButton' ,handler:function(){backlogmgmt.mgmtDialog.hide()} }], renderTo: document.body }); } }, httpLexHandler : function(proxy, store, response, e) { BxtUtil.showErrorMsg(response.statusText); }, loadHandler : function(store, records, opts) { var errorHandled = false; if(records.length == 1 && (records[0].json.success != undefined)) { if(!records[0].json.success) { errorHandled = true; var msg = records[0].json.data[0].msg; var msgtype = records[0].json.data[0].type; store.removeAll(); store.commitChanges(); if(msgtype == undefined) { BxtUtil.showErrorMsg( msg + ' $CONTACT_ADMIN_MSG'); var subaction = opts.params.subaction; if('SYNC' == subaction){ // attempt to reload backlog list backlogmgmt.ds.reload({waitMsg:'$SYNCHING', params:{start:0, limit:25}}); } } else if(msgtype == 'warn') { BxtUtil.showWarningMsg(msg); var subaction = opts.params.subaction; if('SYNC' == subaction){ // attempt to reload backlog list backlogmgmt.ds.reload({waitMsg:'$LOADING', params:{start:0, limit:25}}); } } } } if (!errorHandled) { ErrorHandlerLib.OnStoreLoad(store, records, opts, "$ERROR_LOADING_BACKLOGS"); } }, updateTopText : function(ds, records, opts) { // calculate and update backlog and project count. var rlen = records.length; var pmap = []; // proj map var pcount = 0; // proj count for(var i=0; i < records.length; i++) { var p = records[i].get('projid'); if(p != "") { if(pmap[p] == null) { // not already counted? pcount++; pmap[p] = 'v'; } } } var s = pcount; var msg1 = '$NUMBER_OF_BACKLOGS ' + ds.getCount(); var msg2 = '$NUMBER_OF_PROJECTS ' + s; backlogmgmt.topText.getEl().innerHTML = msg1 + "
" + msg2; }, renderName : function(value, p, record, rowindex, colindex, store) { var backlogId = backlogmgmt.ds.getAt(rowindex).get('id'); return "" + value + ""; }, renderStoryCount : function(value, p, record, rowindex, colindex, store) { var backlogId = backlogmgmt.ds.getAt(rowindex).get('id'); p.attr = 'style="text-align:right;vertical-align:middle;"'; return "" + value + ""; }, //used by watir getBacklogId : function(projectid,bname) { for(var i=0; i < backlogmgmt.ds.getCount(); i++) { var backlogId = backlogmgmt.ds.getAt(i).get('id'); var backlogName = backlogmgmt.ds.getAt(i).get('name'); var project = backlogmgmt.ds.getAt(i).get('project'); var projid = backlogmgmt.ds.getAt(i).get('projid'); if(projectid == projid && backlogName == bname) { return backlogId; } } return ""; }, showBacklogMgmtDialog : function(el) { backlogmgmt.ds.load({waitMsg:'$LOADING', params:{start:0, limit:25}, failure : BxtUtil.showLoadError}); backlogmgmt.mgmtDialog.show(el); }, // ---------- Add/Edit Backlog Dialog ---------- createBacklogDialog : function() { backlogmgmt.comboRec = Ext.data.Record.create( [ { name:'id' }, { name:'name', sortType:'asUCString' } ]); backlogmgmt.bdlgFormRec = Ext.data.Record.create( [ { name:'backlogId' }, { name:'name' }, { name:'category' }, { name:'desc' }, { name:'owner' }, { name:'projectId' }, { name:'activated' } ]); if(backlogmgmt.bdlgProjCombods == null ) { backlogmgmt.bdlgProjCombods = new Ext.data.Store({ id : 0, proxy: new Ext.data.HttpProxy({url:'pbv/PBVAsyncHandler?action=PROJECTLIST'}), reader: new Ext.data.JsonReader({}, backlogmgmt.comboRec), sortInfo:{field: 'name', direction: "ASC"} }); backlogmgmt.bdlgNewFormRec = new backlogmgmt.bdlgFormRec( { backlogId: '$SYSTEM_ASSIGNED', activated: false }); } // user combo if(backlogmgmt.bdlgUserCombo == null) { backlogmgmt.bdlgUserCombods = new Ext.data.Store({ id : 0, proxy: new Ext.data.HttpProxy({url:'pbv/PBVAsyncHandler?action=USERLIST'}), reader: new Ext.data.JsonReader({}, backlogmgmt.comboRec), sortInfo:{field: 'name', direction: "ASC"} }); backlogmgmt.bdlgUserCombo = new Ext.form.ComboBox({ autoCreate: {tag: "input", type: "combo", id: "bdlgOwnerCombo"}, fieldLabel: '$OWNER', hiddenName: 'owner', name: 'owner', store: backlogmgmt.bdlgUserCombods, displayField: 'name', valueField: 'id', selectOnFocus: true, forceSelection : false, listClass: 'x-combo-list-small', mode: 'local', allowBlank: true, triggerAction: 'all', editable: false, anchor: '94%' }); } // project combo if(backlogmgmt.bdlgProjCombo == null) { backlogmgmt.bdlgProjCombo = new Ext.form.ComboBox({ autoCreate: {tag: "input", type: "combo", id: "bdlgProjCombo"}, tpl: '
{name}
', fieldLabel: '$PROJECT', hiddenName: 'projectId', name: 'projectId', store: backlogmgmt.bdlgProjCombods, displayField: 'name', valueField: 'id', selectOnFocus: true, forceSelection : false, listClass: 'x-combo-list-small', mode: 'local', allowBlank: false, triggerAction: 'all', editable: false, anchor: '94%' //listeners: { select: projectChangeHandler, loadexception: BxtUtil.lexHandler } }); } backlogmgmt.bdlgIdField = new Ext.form.TextField({ fieldLabel: '$ID_LABEL', name: 'backlogId', allowBlank: false, readOnly: true, cls: 'x-item-disabled', anchor:'94%', tabIndex: -1, hidden: true, hideLabel: true, height: 0 }); backlogmgmt.bdlgTitleField = new Ext.form.TextField ({ autoCreate: {tag: "input", type: "text", id: "bdlgTitleField"}, fieldLabel: '$NAME', name: 'name', allowBlank: false, anchor:'94%', maxLength: 36, validator: function(v) { if(v!=null && v.trim() == '') { return '$BLANK_ENTRY_MSG' } return true; } }); // backlog dialog form backlogmgmt.bdlgFormCtrl = new Ext.FormPanel({ buttonAlign: 'right', labelAlign: 'right', labelWidth: 78, frame:true, width: 480, reader: new Ext.data.JsonReader({}, backlogmgmt.bdlgFormRec), items: [{ layout: 'form', items: [ backlogmgmt.bdlgIdField , backlogmgmt.bdlgTitleField ,{ autoCreate: {tag: "textarea", id: "bdlgDescField"}, xtype:'textarea', fieldLabel: '$DESC', name: 'desc', anchor:'94%', maxLength: 2000, height: 92 }, backlogmgmt.bdlgUserCombo , { autoCreate: {tag: "input", type: "checkbox", id: "bdlgFormCtrlCheckbox"}, xtype:'checkbox', name: 'activated', fieldLabel: '', labelSeparator: '', boxLabel: '$BACKLOG_PUBLIC', anchor: '94%' , checked: false , autoWidth : true } , backlogmgmt.bdlgProjCombo ] }], buttons: [{ id: 'bdlgFormCtrlSaveButton', text: '$SAVE_TEXT', handler: function(){ backlogmgmt.preSaveHandler(); } }, { id: 'bdlgFormCtrlCancelButton', text: '$CANCEL_TEXT', handler: function() { backlogmgmt.backlogDialog.hide(); } }] }); if(!backlogmgmt.backlogDialog){ backlogmgmt.backlogDialog = new Bxt.BMSWindow({ id: 'blgdlg-win', layout:'fit', width: 460, height:290, closeAction:'hide', plain: true, items: backlogmgmt.bdlgFormCtrl, modal: true, resizable : false, closable: true, renderTo: document.body, saveFunc: backlogmgmt.preSaveHandler, formCtrl: backlogmgmt.bdlgFormCtrl }); }; // Intercept backspace key on dialog var keymap = new Ext.KeyMap('blgdlg-win', { key: Ext.EventObject.BACKSPACE, fn: function(k, e) { if(!BxtUtil.handleBACKSPACEKey(k,e)) { var tid = e.getTarget().id; if( tid === 'bdlgOwnerCombo' || tid === 'bdlgProjCombo' ) { // drop downs e.preventDefault(); } } } }); backlogmgmt.backlogDialog.on('show', function(){ backlogmgmt.bdlgTitleField.getEl().dom.focus(); }, null, {delay: 100}); }, preSaveHandler : function() { if(!backlogmgmt.bdlgFormCtrl.form.isValid()) { BxtUtil.showErrorMsg("$INVALID_MSG") return; } backlogmgmt.backlogDialog.confirmHide = true; var id = backlogmgmt.bdlgIdField.getValue(); var newbklog = ((id == "") || ('$SYSTEM_ASSIGNED' == id)); backlogmgmt.submitBacklog("ok"); }, // ---------- Backlog Dialog Form Submit ---------- submitBacklog : function(ans) { if(ans == 'ok') { backlogmgmt.bdlgFormCtrl.form.submit({url:'pbv/PBVAsyncHandler', waitMsg : ' ', waitTitle : '$SAVING_BACKLOG', settings: {show: true, title:'$SAVE_BACKLOG_ERROR'}, params:{action:'SAVE-BACKLOG', projectId: backlogmgmt.bdlgProjCombo.getValue()}, success:function(form, action) { var res = action.result; if (res.success) { backlogmgmt.backlogDialog.hide(); backlogmgmt.ds.reload({waitMsg:'$LOADING', params:{start:0, limit:25}, callback: backlogmgmt.reloadBacklogtableCombos}); } else { ErrorHandlerLib.onFormFailure(form, action); } }, failure:function(form, action) { backlogmgmt.backlogDialog.confirmHide = false; ErrorHandlerLib.onFormFailure(form, action); } }); } }, // ---------- Sync Backlogs from Backlog Management Dialog ---------- syncBacklogs : function() { var selections = backlogmgmt.gridCtrl.selModel.getSelections(); var selectlen = selections.length; if(selectlen > 0) { var srow = selections[0]; var msg = BxtUtil.formatId(srow.get('id')) + ': ' + srow.get('name') + ''; var msg2 = '$SYNC_WARN3_1ST ' + msg + '? '+ '$SYNC_WARN3_2ND'; Ext.Msg.show({ title:'$SYNCHRONIZE_BACKLOG', msg: '' + msg2 +'', buttons: Ext.Msg.OKCANCEL, fn: backlogmgmt.onSyncBacklog, icon: Ext.MessageBox.QUESTION }); } }, onSyncBacklog : function(val) { if(val == 'ok'){ var pId = backlogtable.projectCombobox.getValue(); var bId = backlogtable.pbCombobox.getValue(); var selections = backlogmgmt.gridCtrl.selModel.getSelections(); var ids = ""; for (i = 0; i < selections.length; i++) { var record = selections[i]; if (ids != "") { ids += ","; } ids += record.data.id; if(bId == record.data.id) { backlogmgmt.refreshPBX = true; } } backlogmgmt.ds.reload({waitMsg:'$SYNCHING', callback: backlogmgmt.afterSync, params:{start:0, limit:25, subaction:'SYNC', ids:ids}}); } }, afterSync: function() { if(backlogmgmt.refreshPBX) { backlogmgmt.refreshPBX = false; backlogtable.loadPBxTable(backlogtable.onLoadStories); } }, // ---------- Add Backlog ---------- addNewBacklog : function( el ) { backlogmgmt.backlogDialog.confirmHide = false; var fc = backlogmgmt.bdlgFormCtrl; fc.form.reset(); backlogmgmt.bdlgProjCombods.reload( { add: false, params: { projs:'Agile' } } ); backlogmgmt.bdlgUserCombods.reload( { add: false } ); backlogmgmt.backlogDialog.setTitle("$ADD_BACKLOG_TITLE"); fc.form.loadRecord( backlogmgmt.bdlgNewFormRec, false ); backlogmgmt.bdlgProjCombo.setDisabled(false); backlogmgmt.backlogDialog.show(el); }, // ---------- Edit Backlog ---------- showBacklogDetails : function( backlogId, el) { backlogmgmt.backlogDialog.confirmHide = false; var fc = backlogmgmt.bdlgFormCtrl; fc.form.reset(); backlogmgmt.bdlgProjCombods.reload( { params: { projs:'BacklogProject', backlogid: backlogId }, callback : backlogmgmt.loadForm, localvars: { el: el} } ); // backlogmgmt.bdlgUserCombods.reload( { add: false } ); backlogmgmt.backlogDialog.setTitle( "$EDIT_BACKLOG_TITLE" + ": " + BxtUtil.formatId(backlogId)); backlogmgmt.bdlgProjCombo.setDisabled(true); }, loadForm : function(recs, options, success) { if(success) { var fc = backlogmgmt.bdlgFormCtrl; var backlogId = options.params.backlogid; var el = options.localvars.el; fc.form.load({ url: 'pbv/PBVAsyncHandler?action=LOAD-BACKLOG&backlogId=' + backlogId, loadMask: {msg: '$LOADING'}, failure : backlogmgmt.handleLoadFailure }); backlogmgmt.backlogDialog.show(el); } else { backlogmgmt.handleLoadFailure(); } }, handleLoadFailure : function( form, action) { // TODO: Better error handling in general. Ext.MessageBox.show({ title: '$ERROR_TITLE', msg: '$LOAD_ERROR', buttons: Ext.MessageBox.OK, icon: Ext.MessageBox.ERROR }); }, // ---------- Delete backlog ---------- onRemoveBacklog : function(val) { if(val == 'ok'){ var selections = backlogmgmt.gridCtrl.selModel.getSelections(); var ids = ""; for (i = 0; i < selections.length; i++) { var record = selections[i]; if (ids != "") { ids += ","; } ids += record.data.id; } backlogmgmt.ds.reload({waitMsg:'$DELETING', params:{start:0, limit:25, subaction: 'DELETE', deleteids:ids}, callback: backlogmgmt.reloadBacklogtableCombos}); } }, // !!! External Linkage to product backlog and story dialog reloadBacklogtableCombos : function(rec, options, success) { if(success) { backlogtable.loadBacklogList(); //sprintplanning.loadProjectList(); //sprintplanning.loadBacklogList(); storyDialog.updaterdlgBklogCombodsByDS(backlogtable.pbCombods); } else { BxtUtil.showErrorMsg("Error in loading backlog combobox"); } } }