Changeset 17903
- Timestamp:
- 08/19/08 11:01:56 (3 months ago)
- Files:
-
- trunk/core/src/net/project/hibernate/service/impl/PnAssignmentServiceImpl.java (modified) (3 diffs)
- trunk/core/src/net/project/view/pages/assignments/MyAssignments.java (modified) (9 diffs)
- trunk/core/web/html/assignments/MyAssignments.html (modified) (1 diff)
- trunk/core/web/src/components/myAssignment-treeGrid.js (modified) (2 diffs)
- trunk/core/web/src/components/myAssignments-dashboard.js (modified) (8 diffs)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
trunk/core/src/net/project/hibernate/service/impl/PnAssignmentServiceImpl.java
r17892 r17903 27 27 import net.project.resource.Assignment; 28 28 import net.project.util.DateFormat; 29 29 import net.project.util.Node; 30 import net.project.util.NodeFactory; 31 32 import org.apache.commons.collections.CollectionUtils; 33 import org.apache.commons.collections.MapUtils; 30 34 import org.apache.commons.lang.StringUtils; 31 35 import org.apache.log4j.Logger; … … 681 685 String treeViewParamerer 682 686 ) { 683 if (treeViewParamerer.equals("flat")) { 684 return getFlatGridData(pnAssignmentDAO.getAssignmentDetailsWithFilters(personId, assigneeORAssignor, 687 return getMyAssignmentGridDataString(pnAssignmentDAO.getAssignmentDetailsWithFilters(personId, assigneeORAssignor, 685 688 projectIds, businessId, assignmentTypes, lateAssignment, comingDueDate, shouldHaveStart, 686 689 InProgress, startDate, endDate, statusId, percentComplete, PercentCompleteComparator, 687 assignmentName, assignmentNameComparator), userDateFormat); 688 } else { 689 return getTreeGridData(pnAssignmentDAO.getAssignmentDetailsWithFilters(personId, assigneeORAssignor, 690 projectIds, businessId, assignmentTypes, lateAssignment, comingDueDate, shouldHaveStart, 691 InProgress, startDate, endDate, statusId, percentComplete, PercentCompleteComparator, 692 assignmentName, assignmentNameComparator), userDateFormat); 693 } 690 assignmentName, assignmentNameComparator), userDateFormat, treeViewParamerer); 694 691 } 695 692 … … 709 706 return workRmaining; 710 707 } 711 712 private String getTreeGridData(List<PnAssignment> assignments, DateFormat userDateFormat) { 713 String treeString = "["; 714 if (assignments != null) { 715 int left = 1; 716 int right = 1; 717 int projectId = 0; 708 709 private String getMyAssignmentGridDataString(List<PnAssignment> assignments, DateFormat userDateFormat, String treeViewParamerer){ 710 final List<String> columns = new ArrayList<String>(3); 711 columns.add("objectId"); 712 columns.add("objectName"); 713 columns.add("objectType"); 714 columns.add("dueDate"); 715 columns.add("workRemaining"); 716 columns.add("workSpace"); 717 columns.add("assignorName"); 718 columns.add("assigneeName"); 719 720 final NodeFactory factory = new NodeFactory(columns); 721 int projectId = 0; 722 if (!assignments.isEmpty()) { 723 Node parentNode = null; 724 Node childNode = null; 718 725 for (PnAssignment assignment : assignments) { 719 726 if (isAssignableType(assignment.getPnObjectType().getObjectType())) { 720 if (!treeString.equals("[")) { 721 treeString += ","; 727 if (projectId != assignment.getPnProjectSpace().getProjectId() && !treeViewParamerer.equals("flat")) { 728 parentNode = factory.nextNode(); 729 parentNode.set("objectId", assignment.getPnProjectSpace().getProjectId()); 730 parentNode.set("objectName", assignment.getPnProjectSpace().getProjectName().replaceAll("'", "´")); 731 parentNode.set("objectType", "project"); 732 parentNode.set("dueDate", ""); 733 parentNode.set("workRemaining", ""); 734 parentNode.set("workSpace",""); 735 parentNode.set("assignorName",""); 736 parentNode.set("assigneeName",""); 722 737 } 723 if (projectId != assignment.getPnProjectSpace().getProjectId().intValue()) { 724 left = right; 725 right = right + 100; 726 treeString += "{ objectId: " + assignment.getPnProjectSpace().getProjectId() 727 + ", objectName:'"+ assignment.getPnProjectSpace().getProjectName().replaceAll("'", "´") 728 + "', workSpace:'', objectType:'project' ,dueDate:'' ,workRemaining:'', assigneeName:'', assignorName:''" 729 + ", _id:" + assignment.getPnProjectSpace().getProjectId() 730 + ", _parent:null ,_level:1 , _lft:" + left++ + ", _rgt:" + right-- 731 + " ,_is_leaf:false },"; 738 childNode = factory.nextNode(); 739 childNode.set("objectId", assignment.getPnObjectName().getObjectId()); 740 childNode.set("objectName", assignment.getPnObjectName().getName().replaceAll("'", "´")); 741 childNode.set("objectType", assignment.getPnObjectType().getObjectType()); 742 childNode.set("dueDate", userDateFormat.formatDate(assignment.getEndDate(),"MM/dd/yyyy")); 743 childNode.set("workRemaining", getWorkRemainingInHours(assignment.getWork(), assignment 744 .getWorkComplete(), assignment.getWorkUnits())); 745 childNode.set("workSpace", assignment.getPnProjectSpace().getProjectName().replaceAll("'", "´")); 746 childNode.set("assignorName", (StringUtils.isNotEmpty(assignment.getAssignorName()) ? 747 assignment.getAssignorName().replaceAll("'", "´") : "")); 748 childNode.set("assigneeName", assignment.getPersonName().replaceAll("'", "´")); 749 if(parentNode!= null){ 750 parentNode.add(childNode); 751 childNode = null; 732 752 } 733 treeString += "{ objectId:"+ assignment.getPnObjectName().getObjectId()734 + ", objectName:'"+ assignment.getPnObjectName().getName().replaceAll("'", "´")735 + "', workSpace:'"+ assignment.getPnProjectSpace().getProjectName().replaceAll("'", "´")736 + "', objectType:'"+ assignment.getPnObjectType().getObjectType()737 + "', dueDate:'"+ userDateFormat.formatDate(assignment.getEndDate(), "MM/dd/yyyy")738 + "', workRemaining:'" + getWorkRemainingInHours(assignment.getWork(),739 assignment.getWorkComplete(), assignment.getWorkUnits())740 + "', assigneeName:'" + assignment.getPersonName().replaceAll("'", "´")741 + "', assignorName:'" + (StringUtils.isNotEmpty(assignment.getAssignorName())742 ? assignment.getAssignorName().replaceAll("'", "´") : "")743 + "', _id : "+ assignment.getPnObjectName().getObjectId()744 + ", _parent : "+ assignment.getPnProjectSpace().getProjectId()745 + " ,_level:2 ,_lft:" + left++ + ", _rgt:"+ right-- + " ,_is_leaf:true }";746 753 projectId = assignment.getPnProjectSpace().getProjectId(); 747 754 } 748 755 } 749 756 } 750 treeString += "]"; 751 752 return treeString; 753 } 754 755 private String getFlatGridData(List<PnAssignment> assignments, DateFormat userDateFormat) { 756 String treeString = "["; 757 if (assignments != null) { 758 int left = 1; 759 int right = assignments.size() + 100; 760 for (PnAssignment assignment : assignments) { 761 if (isAssignableType(assignment.getPnObjectType().getObjectType())) { 762 if (!treeString.equals("[")) { 763 treeString += ","; 764 } 765 treeString += "{ objectId:" 766 + assignment.getPnObjectName().getObjectId() 767 + ", objectName:'" 768 + assignment.getPnObjectName().getName().replaceAll("'", "´") 769 + "', workSpace:'" 770 + assignment.getPnProjectSpace().getProjectName().replaceAll("'", "´") 771 + "', objectType:'" 772 + assignment.getPnObjectType().getObjectType() 773 + "', dueDate:'" 774 + userDateFormat.formatDate(assignment.getEndDate(),"MM/dd/yyyy") 775 + "', workRemaining:'" 776 + getWorkRemainingInHours(assignment.getWork(), assignment.getWorkComplete(), assignment 777 .getWorkUnits()) 778 + "', assigneeName:'" + assignment.getPersonName().replaceAll("'", "´") 779 + "', assignorName:'" + (StringUtils.isNotEmpty(assignment.getAssignorName()) 780 ? assignment.getAssignorName().replaceAll("'", "´") : "") 781 + "', _id : "+ assignment.getPnObjectName().getObjectId() 782 + ", _parent : null, _level:1 , _lft:"+left ++ +" , _rgt:"+right-- +" ,_is_leaf:true }"; 783 } 784 } 785 } 786 treeString += "]"; 787 return treeString; 788 } 757 758 StringBuilder json = new StringBuilder(); 759 List<Node> nodes = factory.getNodes(); 760 if (CollectionUtils.isNotEmpty(nodes)) { 761 int order = 1; 762 for (Node node : nodes) { 763 /* 764 * Check whether this node has a parent. In such a case 765 * it will be added to the json represention by its parent. 766 */ 767 if (null == MapUtils.getString(node.getMap(), "_parent")) { 768 node.order(order); 769 order = node.getRight() + 1; 770 json.append(node.toJSON()); 771 json.append(','); 772 } 773 } 774 json.deleteCharAt(json.length()-1); 775 } 776 return "[" + json.toString() + "]"; 777 } 789 778 790 779 private boolean isAssignableType(String assignmentType){ trunk/core/src/net/project/view/pages/assignments/MyAssignments.java
r17897 r17903 15 15 import net.project.business.BusinessSpace; 16 16 import net.project.business.BusinessSpaceFinder; 17 import net.project.channel.ScopeType; 17 18 import net.project.hibernate.constants.WeblogConstants; 18 19 import net.project.hibernate.model.PnObjectType; … … 27 28 import net.project.hibernate.service.ServiceFactory; 28 29 import net.project.persistence.PersistenceException; 30 import net.project.resource.PersonProperty; 29 31 import net.project.security.SessionManager; 30 32 import net.project.space.Space; … … 129 131 private String userId; 130 132 133 private final String COLUMN_PROPERTY_CONTEXT = "net.project.column.MyProject"; 134 135 private static final String PROPERTY = "MyAssignmentscolumn"; 136 137 private String myAssignmentsColumn; 138 139 131 140 private enum AssignmentsAction { 132 SETFILTERPARAMETER, GETASSIGNMENTSTREEDATA, LOADBLOGENTRIES, SETVIEWPARAMETER 141 SETFILTERPARAMETER, GETASSIGNMENTSTREEDATA, LOADBLOGENTRIES, SETVIEWPARAMETER, REPLACEMYASSIGNMENTCOLUMN 133 142 } 134 143 … … 136 145 GET_TIME_SHEET_ENTRIES, UPDATE_TIME_SHEET_ENTRIES, GET_TIME_VALUES_ARRAY, SUBMIT_TIME_SHEET_ENTRIES, GET_ERROR_MESSAGE 137 146 } 138 147 139 148 /** 140 149 * … … 160 169 createUserBusinessOptionsString(); 161 170 createUserProjectOptionsString(); 171 initializeMyAssignmentsColumn(); 162 172 } 163 173 … … 186 196 .getParameter("view") : "indent"); 187 197 } 188 if (action.equalsIgnoreCase(AssignmentsAction.SETFILTERPARAMETER.toString())) {198 else if (action.equalsIgnoreCase(AssignmentsAction.SETFILTERPARAMETER.toString())) { 189 199 setAllFilterParameter(request); 190 200 } 191 if (action.equalsIgnoreCase(AssignmentsAction.GETASSIGNMENTSTREEDATA.toString())) {201 else if (action.equalsIgnoreCase(AssignmentsAction.GETASSIGNMENTSTREEDATA.toString())) { 192 202 return getAssignmentTreeData(); 193 203 } 194 if (action.equalsIgnoreCase((AssignmentsAction.LOADBLOGENTRIES).toString())) {204 else if (action.equalsIgnoreCase((AssignmentsAction.LOADBLOGENTRIES).toString())) { 195 205 String assignmentId = request.getParameter("assignmentId"); 196 206 if (assignmentId != null) { … … 198 208 } 199 209 } 210 else if (action.equalsIgnoreCase(AssignmentsAction.REPLACEMYASSIGNMENTCOLUMN.toString())) { 211 replaceMyAssignmentsColumn(request); 212 } 213 200 214 // Action To generate the time sheet enteries from database ,if exist 201 215 // otherwise generate a blank time sheet div for js and return … … 460 474 && request.getParameter("inProgress").equals("true")); 461 475 } 476 477 private void initializeMyAssignmentsColumn(){ 478 String columns[] = {"objectName","workSpace","dueDate","workRemaining","objectId","objectType","assigneeName","assignorName"}; 479 myAssignmentsColumn = "[{"; 480 for(String column : columns){ 481 if(!myAssignmentsColumn.equals("[{")){ 482 myAssignmentsColumn += ","; 483 } 484 myAssignmentsColumn += "'" + column + "' : "+getColumnValue(column); 485 } 486 myAssignmentsColumn += "}]"; 487 } 488 489 private String getColumnValue(String column){ 490 PersonProperty personProperty = new PersonProperty(); 491 personProperty.setScope(ScopeType.GLOBAL.makeScope(SessionManager.getUser())); 492 return (personProperty.get(COLUMN_PROPERTY_CONTEXT + "_" + column, PROPERTY) != null 493 && personProperty.get(COLUMN_PROPERTY_CONTEXT + "_" + column, PROPERTY).length > 0 494 ? personProperty.get(COLUMN_PROPERTY_CONTEXT + "_" + column, PROPERTY)[0] : "null"); 495 } 496 497 private void replaceMyAssignmentsColumn(HttpServletRequest request) { 498 String column = request.getParameter("column"); 499 String value = request.getParameter("value"); 500 501 if (StringUtils.isNotEmpty(column) && StringUtils.isNotEmpty(value)) { 502 PersonProperty personProperty = new PersonProperty(); 503 try { 504 personProperty.setScope(ScopeType.GLOBAL.makeScope(SessionManager.getUser())); 505 personProperty.removeAllValues(COLUMN_PROPERTY_CONTEXT + "_" + column, PROPERTY); 506 personProperty.put(COLUMN_PROPERTY_CONTEXT + "_" + column, PROPERTY, value); 507 } catch (PersistenceException pnetEx) { 508 pnetEx.printStackTrace(); 509 } 510 } 511 } 462 512 463 513 /** … … 763 813 } 764 814 815 /** 816 * @return the myAssignmentsColumn 817 */ 818 public String getMyAssignmentsColumn() { 819 return myAssignmentsColumn; 820 } 821 822 /** 823 * @param myAssignmentsColumn the myAssignmentsColumn to set 824 */ 825 public void setMyAssignmentsColumn(String myAssignmentsColumn) { 826 this.myAssignmentsColumn = myAssignmentsColumn; 827 } 828 765 829 } trunk/core/web/html/assignments/MyAssignments.html
r17897 r17903 47 47 var validationMessageForBlogComment = '${validationMessageForBlogComment}'; 48 48 var noSelectionErrMes = 'Please select a node from tree before posting a blog entry.'; 49 var assigneeOrAssignorParameter = '${assigneeOr assignorParameter}';49 var assigneeOrAssignorParameter = '${assigneeOrAssignorParameter}'; 50 50 var projectOptionsData = ${projectOptionsString}; 51 51 var businessOptionsData = ${businessOptionsString}; 52 52 var treeViewParamerer ='${treeViewParamerer}'; 53 var myAssignmentsColumn = ${myAssignmentsColumn}; 53 54 54 55 // About Timeline trunk/core/web/src/components/myAssignment-treeGrid.js
r17890 r17903 45 45 columns: [ 46 46 {id:'objectName', header: "Assignment Name", width: 310, sortable: true, dataIndex: 'objectName'}, 47 {id:'workSpace', header: "Work Space", sortable: true, dataIndex: 'workSpace'}, 48 {id:'dueDate', header: "Due Date", renderer: rederDueDate, width: 95, sortable: true, dataIndex: 'dueDate'}, 47 {id:'objectType', header: "Type", hidden: true, sortable: true, dataIndex: 'objectType'}, 48 {id:'workSpace', resizable : false, header: "Work Space", sortable: true, dataIndex: 'workSpace'}, 49 {id:'dueDate', resizable : false, header: "Due Date", renderer: rederDueDate, width: 95, sortable: true, dataIndex: 'dueDate'}, 49 50 {id:'workRemaining', header: "Work Remaining", renderer: rederWorkRemaining, width: 95, sortable: true, dataIndex: 'workRemaining'}, 50 {id:'objectId', header: "ID", hidden: true, dataIndex: 'objectId'},51 {id:'objectType', header: "Type", hidden: true, sortable: true, dataIndex: 'objectType'},52 51 {id:'assigneeName', header: "Assignee", renderer: removeNull, hidden: true, sortable: true, dataIndex: 'assigneeName'}, 53 {id:'assignorName', header: "Assignor", renderer: removeNull, hidden: true, sortable: true, dataIndex: 'assignorName'} 52 {id:'assignorName', header: "Assignor", renderer: removeNull, hidden: true, sortable: true, dataIndex: 'assignorName'}, 53 {id:'objectId', header: "ID", hidden: true, sortable: true, dataIndex: 'objectId'} 54 54 55 ], 55 56 stripeRows: true, … … 78 79 handler : function(){ 79 80 if(collapsed){ 80 expandAllNodes();81 expandAllNodes(); 81 82 }else { 82 collapseAllNodes();83 collapseAllNodes(); 83 84 } 84 85 } trunk/core/web/src/components/myAssignments-dashboard.js
r17897 r17903 9 9 var windowHeight = 0; 10 10 var selectedTask; 11 11 var myColumnViewRecord; 12 12 13 Ext.onReady(function(){ 13 14 Ext.QuickTips.init(); … … 15 16 16 17 getWindowHeightWidth(); 18 17 19 blogPanel = new Ext.Panel({ 18 20 id: 'blog', … … 62 64 63 65 assignmentPanel.render('assignmentPanelPosition'); 64 initializeProjectColumn(); 66 initializeMyColumnViewRecord(); 67 personalizeAssignmentColumn(); 65 68 initializeToggleButtons(); 66 69 70 //-----------Adding Listeners..------------------ 71 67 72 filterForm.on('expand',function(panel){ 68 73 assignmentTreeGrid.setHeight(windowHeight-406); … … 72 77 assignmentTreeGrid.setHeight(windowHeight-175); 73 78 }); 79 80 assignmentTreeGrid.addListener('rowdblclick', function(grid, rowIndex, e){ 81 assignmentTreeNodeId = grid.getStore().getAt(rowIndex).get('objectId'); 82 objectType=grid.getStore().getAt(rowIndex).get('objectType'); 83 selectedTask=grid.getStore().getAt(rowIndex).get('objectName'); 84 if(objectType.toString() == 'project'){ 85 extAlert('Error', 'Selected object is not an assignment, Please select an assignment to view detail.', Ext.MessageBox.ERROR); 86 } else{ 87 window.location.href = JSPRootURL+'/servlet/AssignmentController/View?module='+moduleId+'&objectID='+assignmentTreeNodeId+'&personID='+userId +'&returnTo=/assignments/My?module='+moduleId; 88 } 89 }); 90 91 assignmentTreeGrid.addListener('rowclick', function(grid, rowIndex, e){ 92 assignmentTreeNodeId = grid.getStore().getAt(rowIndex).get('objectId'); 93 objectType=grid.getStore().getAt(rowIndex).get('objectType'); 94 selectedTask=grid.getStore().getAt(rowIndex).get('objectName'); 95 loadBlogEntriesForAssignment(); 96 }); 97 98 assignmentTreeGrid.getColumnModel().addListener('hiddenchange', replaceMyAssignmentColumn); 99 100 //-------------- Widget resizeing on browser window resize ------------ 74 101 75 102 window.onresize = resizeGrid; … … 83 110 }catch(err){} 84 111 } 85 86 assignmentTreeGrid.addListener('rowdblclick', function(grid, rowIndex, e){87 assignmentTreeNodeId = grid.getStore().getAt(rowIndex).get('objectId');88 objectType=grid.getStore().getAt(rowIndex).get('objectType');89 selectedTask=grid.getStore().getAt(rowIndex).get('objectName');90 if(objectType.toString() == 'project'){91 extAlert('Error', 'Selected object is not an assignment, Please select an assignment to view detail.', Ext.MessageBox.ERROR);92 } else{93 window.location.href = JSPRootURL+'/servlet/AssignmentController/View?module='+moduleId+'&objectID='+assignmentTreeNodeId+'&personID='+userId +'&returnTo=/assignments/My?module='+moduleId;94 }95 });96 97 assignmentTreeGrid.addListener('rowclick', function(grid, rowIndex, e){98 assignmentTreeNodeId = grid.getStore().getAt(rowIndex).get('objectId');99 objectType=grid.getStore().getAt(rowIndex).get('objectType');100 selectedTask=grid.getStore().getAt(rowIndex).get('objectName');101 loadBlogEntriesForAssignment();102 });103 112 }); 104 105 113 106 114 … … 182 190 assignmentTreeGrid.getStore().reload(); 183 191 assignmentTreeGrid.getView().refresh(); 184 initializeProjectColumn();192 personalizeAssignmentColumn() 185 193 toggleExpandCollapse.setIconClass('expandall-icon'); 186 194 }, … … 201 209 } 202 210 203 function initializeProjectColumn(){204 var hide = true;205 if(treeViewParamerer == 'flat'){206 hide = false;207 }208 var cm = assignmentTreeGrid.getColumnModel();209 var count = cm.getColumnCount();210 for(var i = 0; i < count; i++){211 if('workSpace' == cm.getDataIndex(i)) {212 cm.setHidden(i, hide);213 break;214 }215 }216 }217 218 211 function initializeToggleButtons(){ 219 212 if(collapsed){ … … 231 224 } 232 225 226 function replaceMyAssignmentColumn(thisColumnModel, columnIndex ,hidden){ 227 var value = 1 228 if(hidden){ 229 value = 0; 230 } 231 Ext.Ajax.request({ 232 url: JSPRootURL+'/assignments/My/replaceMyAssignmentColumn', 233 params: {module: moduleId , column : thisColumnModel.getDataIndex(columnIndex), value: value}, 234 method: 'POST', 235 success: function(result, request){ 236 myColumnViewRecord.set(thisColumnModel.getDataIndex(columnIndex), value); 237 }, 238 failure: function(result, response){ 239 extAlert('Error', 'Server request failed please try again...', Ext.MessageBox.ERROR); 240 } 241 }); 242 } 243 244 function personalizeAssignmentColumn(){ 245 var cm = assignmentTreeGrid.getColumnModel(); 246 var count = cm.getColumnCount(); 247 for(var i = 0; i < count; i++){ 248 cm.setHidden(i, getBoolean(cm.getDataIndex(i))); 249 } 250 } 251 252 function getBoolean(column){ 253 value = myColumnViewRecord.get(column); 254 if(value == '0'){ 255 return true; 256 } else if(value == '1'){ 257 return false; 258 } else { 259 if(column == 'objectName'){ 260 return false; 261 } 262 else if(column == 'dueDate'){ 263 return false; 264 } 265 else if(column == 'workRemaining'){ 266 return false; 267 } 268 else if(column == 'workSpace' && treeViewParamerer == 'flat' ){ 269 return false; 270 } else{ 271 return true; 272 } 273 } 274 } 275 function initializeMyColumnViewRecord(){ 276 var columnStore = new Ext.data.Store({ 277 autoLoad : true, 278 reader: new Ext.data.JsonReader({id: '_id'}, 279 Ext.data.Record.create([ 280 {name: 'objectName'}, 281 {name: 'workSpace'}, 282 {name: 'dueDate'}, 283 {name: 'workRemaining'}, 284 {name: 'objectId'}, 285 {name: 'objectType'}, 286 {name: 'assigneeName'}, 287 {name: 'assignorName'}, 288 ]) 289 ), 290 data: myAssignmentsColumn 291 }); 292 myColumnViewRecord = columnStore.getAt(0); 293 } 233 294 234 295 function getWindowHeightWidth(){
