- Timestamp:
- Feb 16, 2011, 8:10:39 PM (14 years ago)
- Location:
- trunk/grails-app
- Files:
-
- 3 added
- 15 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/grails-app/controllers/TaskDetailedController.groovy
r747 r809 434 434 def assignedPersonList = taskInstance.assignedPersons.sort { p1, p2 -> p1.person.firstName.compareToIgnoreCase(p2.person.firstName) } 435 435 436 def taskProcedure Instance = TaskProcedure.get(taskInstance.taskProcedure?.id)436 def taskProcedureRevision = TaskProcedureRevision.get(taskInstance.taskProcedureRevision?.id) 437 437 def taskProcedureExits = new Boolean("true") 438 if(!taskProcedure Instance) {438 if(!taskProcedureRevision) { 439 439 taskProcedureExits = false 440 440 } 441 442 def maParams = [:]443 maParams.max = 100444 maParams.order = "asc"445 maParams.sort = "procedureStepNumber"446 def maintenanceActionList = MaintenanceAction.findAllByTaskProcedure(taskProcedureInstance, maParams)447 441 448 442 def taskRecurringScheduleInstance = TaskRecurringSchedule.get(taskInstance.taskRecurringSchedule?.id) … … 456 450 entryCauseList: entryCauseList, 457 451 entryWorkDoneList: entryWorkDoneList, 458 taskProcedure Instance: taskProcedureInstance,452 taskProcedureRevision: taskProcedureRevision, 459 453 taskProcedureExits: taskProcedureExits, 460 454 showTab: showTab, … … 462 456 subTaskInstanceTotal: subTaskInstanceTotal, 463 457 subTaskInstanceMax: params.max, 464 maintenanceActionList: maintenanceActionList,465 458 taskRecurringScheduleInstance: taskRecurringScheduleInstance, 466 459 taskRecurringScheduleExits: taskRecurringScheduleExits, -
trunk/grails-app/controllers/TaskProcedureDetailedController.groovy
r798 r809 43 43 if(!taskProcedureInstance) { 44 44 flash.errorMessage = "TaskProcedure not found with id ${params.id}" 45 redirect( controller:'taskDetailed', action:'search')45 redirect(action:'list') 46 46 return 47 47 } 48 48 49 redirect(controller:'taskDetailed',50 action:'show',51 id:taskProcedureInstance.linkedTask?.id,52 params:[showTab:"showProcedureTab"])53 }49 def taskProcedureRevision 50 if(params.revision?.toInteger()) 51 taskProcedureRevision = taskProcedureInstance.getRevision( params.revision ) 52 else 53 taskProcedureRevision = taskProcedureInstance.latestRevision 54 54 55 def delete = { 56 def taskProcedureInstance = TaskProcedure.get( params.id ) 57 if(taskProcedureInstance) { 58 def taskInstance = taskProcedureInstance.linkedTask 59 try { 60 taskProcedureInstance.tasks.each { 61 it.taskProcedure = null 62 } 63 taskProcedureInstance.delete(flush:true) 64 flash.message = "TaskProcedure ${params.id} deleted" 65 redirect(controller:'taskDetailed', 66 action:'show', 67 id:taskInstance.id, 68 params:[showTab:"showProcedureTab"]) 69 } 70 catch(org.springframework.dao.DataIntegrityViolationException e) { 71 flash.errorMessage = "TaskProcedure ${params.id} could not be deleted" 72 redirect(controller:'taskDetailed', 73 action:'show', 74 id:taskInstance.id, 75 params:[showTab:"showProcedureTab"]) 76 } 55 if(!taskProcedureRevision) { 56 flash.errorMessage = "TaskProcedure ${params.id} revision ${params.revision} not found" 57 redirect(action:'list') 58 return 77 59 } 78 else { 79 flash.errorMessage = "TaskProcedure not found with id ${params.id}" 80 redirect(action:list) 81 } 60 61 return [taskProcedureRevision: taskProcedureRevision] 62 82 63 } 83 64 … … 85 66 86 67 // In the case of an actionSubmit button, rewrite action name from 'index'. 87 if(params._action_Edit)68 //if(params._action_Edit) 88 69 params.action='edit' 89 70 … … 106 87 if(!result.error) { 107 88 flash.message = g.message(code: "default.update.success", args: ["TaskProcedure", params.id]) 108 redirect(controller:'taskDetailed', 109 action:'show', 110 id:result.taskProcedureInstance.linkedTask.id, 111 params:[showTab:"showProcedureTab"]) 89 redirect(action:'show', id:result.taskProcedureInstance.id) 112 90 return 113 91 } … … 121 99 if(result.error.code == "default.optimistic.locking.failure") { 122 100 flash.errorMessage = g.message(code: result.error.code, args: result.error.args) 123 redirect(controller:'taskDetailed', 124 action:'show', 125 id:result.taskProcedureInstance.linkedTask.id, 126 params:[showTab:"showProcedureTab"]) 101 redirect(action:'show', id:result.taskProcedureInstance.id) 127 102 return 128 103 } … … 144 119 145 120 // Task already has a taskProcedure. 146 if(params.linkedTask.taskProcedure ) {121 if(params.linkedTask.taskProcedureRevision) { 147 122 flash.errorMessage = g.message(code: 'default.optimistic.locking.failure') 148 123 redirect(controller:'taskDetailed', … … 183 158 if(!result.error) { 184 159 flash.message = g.message(code: "default.create.success", args: ["TaskProcedure", result.taskProcedureInstance.id]) 185 redirect(controller:'taskDetailed', 186 action:'show', 187 id:result.taskProcedureInstance.linkedTask.id, 188 params:[showTab:"showProcedureTab"]) 160 redirect(action:'show', id:result.taskProcedureInstance.id) 189 161 return 190 162 } 191 163 164 // Task already has a taskProcedure. 192 165 if(result.error.code == "default.optimistic.locking.failure") { 193 166 flash.errorMessage = g.message(code: result.error.code, args: result.error.args) 194 167 redirect(controller:'taskDetailed', 195 168 action:'show', 196 id: result.taskProcedureInstance.linkedTask.id,169 id:params.linkedTask.id, 197 170 params:[showTab:"showProcedureTab"]) 198 171 return -
trunk/grails-app/domain/DocumentReference.groovy
r798 r809 10 10 // static hasMany = [] 11 11 12 static belongsTo = [TaskProcedure] 12 static belongsTo = [TaskProcedure, TaskProcedureRevision] 13 14 static mapping = { 15 batchSize 10 16 } 13 17 14 18 static constraints = { -
trunk/grails-app/domain/MaintenanceAction.groovy
r798 r809 1 1 class MaintenanceAction { 2 2 3 TaskProcedure taskProcedure4 3 MaintenancePolicy maintenancePolicy 5 4 Section section … … 17 16 // static hasMany = [] 18 17 19 static belongsTo = [TaskProcedure] 18 static mapping = { 19 batchSize 10 20 } 21 22 static belongsTo = [TaskProcedure, TaskProcedureRevision] 20 23 21 24 static constraints = { … … 26 29 procedureStepNumber(nullable:true) 27 30 description(blank:false,maxSize:100) 28 pageRef(maxSize: 100)31 pageRef(maxSize:25) 29 32 } 30 33 -
trunk/grails-app/domain/Task.groovy
r807 r809 13 13 AssetSubItem assetSubItem 14 14 TaskRecurringSchedule taskRecurringSchedule 15 TaskProcedure taskProcedure15 TaskProcedureRevision taskProcedureRevision 16 16 17 17 String description … … 61 61 assetSubItem(nullable:true) 62 62 taskRecurringSchedule(nullable:true) 63 taskProcedure (nullable:true)63 taskProcedureRevision(nullable:true) 64 64 65 65 } -
trunk/grails-app/domain/TaskProcedure.groovy
r798 r809 5 5 6 6 Task linkedTask 7 Person createdBy8 Person lastUpdatedBy9 Date dateCreated = new Date() // autoTimestamp10 Date lastUpdated = new Date() // autoTimestamp11 7 12 8 def getDescription() { linkedTask.description } … … 15 11 List maintenanceActions = new ArrayList() 16 12 List documentReferences = new ArrayList() 13 List revisions = new ArrayList() 17 14 18 static hasMany = [ tasks: Task,19 maintenanceActions: MaintenanceAction,20 documentReferences: DocumentReference]15 static hasMany = [maintenanceActions: MaintenanceAction, 16 documentReferences: DocumentReference, 17 revisions: TaskProcedureRevision] 21 18 22 19 def getMaintenanceActionLazyList() { … … 28 25 } 29 26 30 static mappedBy = [tasks:"taskProcedure"] 27 // The current revision number is equal to the count of the revisions created. 28 // More efficient than loading the entire revisions list and using size(). 29 // WithTransaction is used to allow calling in a transaction however objects 30 // in the current transaction must not trigger DataIntegrityViolationException. 31 def getRevision() { 32 def revision 33 TaskProcedure.withTransaction { 34 revision = TaskProcedureRevision.countByTaskProcedure(this) 35 } 36 return revision 37 } 38 39 // Get a specific revision. 40 def getRevision(revision) { 41 def taskProcedureRevision 42 TaskProcedure.withTransaction { 43 taskProcedureRevision = TaskProcedureRevision.findByTaskProcedureAndRevision(this, revision) 44 } 45 return taskProcedureRevision 46 } 47 48 // Get the latest revision of this procedure. 49 def getLatestRevision() { 50 def taskProcedureRevision 51 TaskProcedure.withTransaction { 52 taskProcedureRevision = TaskProcedureRevision.findByTaskProcedureAndRevision(this, this.revision) 53 } 54 return taskProcedureRevision 55 } 31 56 32 57 static mapping = { 58 linkedTask lazy:false 59 revisions batchSize: 10 33 60 maintenanceActions cascade:"all-delete-orphan" 34 61 documentReferences cascade:"all-delete-orphan" 62 revisions cascade:"all-delete-orphan" 35 63 } 36 64 -
trunk/grails-app/i18n/messages.properties
r803 r809 154 154 task.operationNotPermittedOnTaskHavingSubTasksWithoutAuth=This operation is not permitted \ 155 155 on a task that has sub tasks without authorisation. 156 task.operationNotPermittedOnTaskLinkedToProcedure =This operation is not permitted \157 on a task that is linked to a procedure .156 task.operationNotPermittedOnTaskLinkedToProcedureWithoutAuth=This operation is not permitted \ 157 on a task that is linked to a procedure without authorisation. 158 158 task.operationNotPermittedOnParentPmTask=This operation is not permitted \ 159 159 on a Parent PM task. … … 317 317 default.create.success={0} {1} created. 318 318 default.create.failure={0} could not be created. 319 default.create.revision.failure=Could not create revision. 319 320 default.optimistic.locking.failure=Another user has updated this item while you were editing, please check the updated values. 320 321 default.file.over.max.size=Supplied file is greater than max size of {0} {1}. -
trunk/grails-app/services/CreateDataService.groovy
r798 r809 140 140 createDemoAssignedGroups() 141 141 createDemoAssignedPersons() 142 createDemoTaskProcedure()143 createDemoMaintenanceActions()142 // createDemoTaskProcedure() 143 // createDemoMaintenanceActions() 144 144 createDemoTaskRecurringSchedules() 145 145 -
trunk/grails-app/services/TaskProcedureService.groovy
r798 r809 7 7 8 8 def authService 9 def dateUtilService 9 10 10 11 /** … … 23 24 result.error = [ code: m.code, args: ["TaskProcedure", params.id] ] 24 25 // Fetch to prevent lazy initialization error. 25 result.taskProcedureInstance?.linkedTask.primaryAsset 26 result.taskProcedureInstance?.createdBy 26 result.taskProcedureInstance.revisions.each {it.createdBy.toString()} 27 27 return result 28 28 } … … 40 40 41 41 result.taskProcedureInstance.properties = params 42 result.taskProcedureInstance.lastUpdatedBy = authService.currentUser43 result.taskProcedureInstance.lastUpdated = new Date() // Required to trigger version increment.44 42 45 43 // Gaps in the html index's can be created by adding 2 items and removing the first one. … … 80 78 } 81 79 80 def r = createRevision(result.taskProcedureInstance) 81 if(r.error) 82 return fail(field:'id', code:"default.create.revision.failure") 83 84 // Also sets: taskInstance.taskProcedureRevision = taskProcedureRevision 85 r.taskProcedureRevision.addToTasks(result.taskProcedureInstance.linkedTask) 86 87 // Update tasks that are using previousRevision. 88 // Only those that are not started and due to be started today or in the future. 89 def previousRevision = result.taskProcedureInstance.getRevision(r.taskProcedureRevision.revision - 1) 90 if(previousRevision) { 91 Task.withCriteria { 92 eq("taskProcedureRevision", previousRevision) 93 ge("targetStartDate", dateUtilService.today) 94 taskStatus { 95 idEq(1L) // Not Started. 96 } 97 maxResults(10000) 98 }.each { 99 it.taskProcedureRevision = r.taskProcedureRevision 100 } 101 } 102 82 103 // Success. 83 104 return result 84 105 85 } // end withTransaction106 } // end withTransaction 86 107 } // end update() 87 108 … … 96 117 def fail = { Map m -> 97 118 status.setRollbackOnly() 98 if(result.taskProcedureInstance && m.field) 119 if(result.taskProcedureInstance && m.field) 99 120 result.taskProcedureInstance.errors.rejectValue(m.field, m.code) 100 121 result.error = [ code: m.code, args: ["TaskProcedure", params.id] ] … … 107 128 108 129 // Optimistic locking check on linkedTask. 109 if(result.taskProcedureInstance.linkedTask.taskProcedure )130 if(result.taskProcedureInstance.linkedTask.taskProcedureRevision) 110 131 return fail(field:"version", code:"default.optimistic.locking.failure") 111 112 result.taskProcedureInstance.createdBy = authService.currentUser113 result.taskProcedureInstance.lastUpdatedBy = authService.currentUser114 132 115 133 // Gaps in the html index's can be created by adding 2 items and removing the first one. … … 124 142 } 125 143 126 // Also sets: taskInstance.taskProcedure = taskProcedureInstance127 result.taskProcedureInstance.addToTasks(result.taskProcedureInstance.linkedTask)128 129 144 if(result.taskProcedureInstance.hasErrors() || !result.taskProcedureInstance.save()) { 130 145 // Populate collection errors for display. … … 134 149 } 135 150 136 } //end withTransaction 137 138 result.taskProcedureInstance.lastUpdated = new Date() // Required to trigger version increment to 1. 139 140 // success 151 def r = createRevision(result.taskProcedureInstance) 152 if(r.error) 153 return fail(field:'id', code:"default.create.revision.failure") 154 155 // Also sets: taskInstance.taskProcedureRevision = taskProcedureRevision 156 r.taskProcedureRevision.addToTasks(result.taskProcedureInstance.linkedTask) 157 158 } // end withTransaction 159 160 // Success. 141 161 return result 142 162 } // end save() 143 163 164 /** 165 * Creates a new taskProcedureRevision. 166 * @param taskProcedureInstance The taskProcedure to create the revision for. 167 * @returns A map containing result.error (if any error) and result.taskProcedureRevision. 168 */ 169 def createRevision(taskProcedureInstance) { 170 def result = [:] 171 TaskProcedureRevision.withTransaction { status -> 172 def fail = { Map m -> 173 status.setRollbackOnly() 174 if(result.taskProcedureRevision && m.field) 175 result.taskProcedureRevision.errors.rejectValue(m.field, m.code) 176 result.error = [ code: m.code, args: ["TaskProcedureRevision"] ] 177 return result 178 } 179 180 result.taskProcedureRevision = new TaskProcedureRevision() 181 taskProcedureInstance.addToRevisions(result.taskProcedureRevision) 182 183 result.taskProcedureRevision.taskProcedure = taskProcedureInstance 184 result.taskProcedureRevision.linkedTask = taskProcedureInstance.linkedTask 185 result.taskProcedureRevision.createdBy = authService.currentUser 186 result.taskProcedureRevision.revision = 0 // init to prevent DataIntegrityViolationException 187 result.taskProcedureRevision.revision = taskProcedureInstance.revision 188 taskProcedureInstance.maintenanceActions.each { 189 result.taskProcedureRevision.addToMaintenanceActions(new MaintenanceAction(it.properties)) 190 } 191 taskProcedureInstance.documentReferences.each { 192 result.taskProcedureRevision.addToDocumentReferences(new DocumentReference(it.properties)) 193 } 194 195 if(result.taskProcedureRevision.hasErrors() || !result.taskProcedureRevision.save()) { 196 log.error result.taskProcedureRevision.errors 197 return fail(code:"default.create.failure") 198 } 199 200 } // end withTransaction 201 202 // Success. 203 return result 204 } // end createRevision() 205 144 206 } // end class -
trunk/grails-app/services/TaskRecurringScheduleService.groovy
r445 r809 68 68 p.targetStartDate = it.nextTargetStartDate 69 69 p.targetCompletionDate = it.nextTargetCompletionDate 70 if(it.task.taskProcedure ) p.taskProcedure = it.task.taskProcedure70 if(it.task.taskProcedureRevision) p.taskProcedureRevision = it.task.taskProcedureRevision 71 71 if(it.task.assignedGroups) p.assignedGroups = new ArrayList(it.task.assignedGroups) 72 72 if(it.task.assignedPersons) p.assignedPersons = new ArrayList(it.task.assignedPersons) -
trunk/grails-app/services/TaskService.groovy
r802 r809 188 188 * Creates a subTask copying sane attributes from the parentTask unless otherwise specified in params. 189 189 * The targetStartDate and targetCompletionDate default to today since that is the sane thing to do. 190 * The taskProcedure is only assigned to the sub task if supplied in params.190 * The taskProcedureRevision is only assigned to the sub task if supplied in params. 191 191 * The assignedPersons and assignedGroups are only added to the sub task if supplied in params. 192 192 * The positiveFault property is never set on the subTask. … … 228 228 229 229 // Supplied by recurring tasks. 230 if(params.taskProcedure ) p.taskProcedure = params.taskProcedure230 if(params.taskProcedureRevision) p.taskProcedureRevision = params.taskProcedureRevision 231 231 if(params.assignedGroups) p.assignedGroups = params.assignedGroups // Collection. 232 232 if(params.assignedPersons) p.assignedPersons = params.assignedPersons // Collection. … … 691 691 } 692 692 693 // Check for taskProcedure using this task as linkedTask. 694 if(result.taskInstance.taskProcedure?.linkedTask?.id == result.taskInstance.id) 695 return fail(field:"taskProcedure", code:"task.operationNotPermittedOnTaskLinkedToProcedure") 693 // Check for taskProcedureRevision using this task as linkedTask. 694 if(result.taskInstance.taskProcedureRevision?.linkedTask?.id == result.taskInstance.id) { 695 if(!authenticateService.ifAnyGranted('ROLE_AppAdmin,ROLE_Manager,ROLE_TaskManager')) 696 return fail(field:"taskProcedureRevision", code:"task.operationNotPermittedOnTaskLinkedToProcedureWithoutAuth") 697 } 696 698 697 699 // Check for Parent PM task type. 698 700 if(result.taskInstance.taskType.id == 6) 699 return fail(field:"task Procedure", code:"task.operationNotPermittedOnParentPmTask")701 return fail(field:"taskType", code:"task.operationNotPermittedOnParentPmTask") 700 702 701 703 result.taskInstance.trash = true -
trunk/grails-app/views/taskDetailed/show.gsp
r803 r809 524 524 </g:if> 525 525 <g:else> 526 <div class="dialog"> 527 <table> 528 <tbody> 529 530 <tr class="prop"> 531 <td valign="top" class="name">Procedure Id:</td> 532 <td valign="top" class="value"> 533 ${fieldValue(bean:taskProcedureInstance, field:'id')} 534 </td> 535 </tr> 536 537 <tr class="prop"> 538 <td valign="top" class="name">Linked Task:</td> 539 <td valign="top" class="value"> 540 <g:link controller="taskDetailed" 541 action="show" 542 id="${taskProcedureInstance.linkedTask.id}"> 543 ${taskProcedureInstance.linkedTask.encodeAsHTML()} 544 </g:link> 545 </td> 546 </tr> 547 548 <tr class="prop"> 549 <td valign="top" class="name">Linked Asset:</td> 550 <td valign="top" class="value"> 551 <g:render template="/shared/assetTreeCompact" model="['assetInstance': taskProcedureInstance.linkedTask.primaryAsset]" /> 552 </td> 553 </tr> 554 555 <tr class="prop"> 556 <td valign="top" class="name">Version:</td> 557 <td valign="top" class="value"> 558 ${fieldValue(bean:taskProcedureInstance, field:'version')} 559 </td> 560 </tr> 561 562 <tr class="prop"> 563 <td valign="top" class="name">Last Updated:</td> 564 <td valign="top" class="value"> 565 <g:formatDate date="${taskProcedureInstance.lastUpdated}" 566 format="EEE, dd-MMM-yyyy"/> 567 </td> 568 </tr> 569 570 </tbody> 571 </table> 572 </div> 573 <div class="buttons"> 574 <g:form controller="taskProcedureDetailed"> 575 <input type="hidden" name="id" value="${taskProcedureInstance?.id}" /> 576 <span class="button"><g:actionSubmit class="edit" value="Edit" /></span> 577 </g:form> 578 </div> 579 580 <br /> 581 582 <g:if test="${taskProcedureInstance.documentReferences}"> 583 <div class="list"> 584 <table> 585 <thead> 586 <tr> 587 <th>Document Reference</th> 588 <th>Location</th> 589 </tr> 590 </thead> 591 <tbody> 592 <g:each in="${taskProcedureInstance.documentReferences}" status="i" var="docRef"> 593 <tr class="${(i % 2) == 0 ? 'odd' : 'even'}"> 594 595 <td valign="top" class="name"> 596 ${fieldValue(bean:docRef, field:'name')} 597 </td> 598 599 <td valign="top" style="text-align:left;" class="value"> 600 <custom:easyUrl url="${docRef.location}" /> 601 </td> 602 603 </tr> 604 </g:each> 605 606 </tbody> 607 </table> 608 </div> 609 </g:if> 610 611 <br /> 612 613 <div class="list"> 614 <table> 615 <thead> 616 <tr> 617 <th>Step</th> 618 <th>Assembly</th> 619 <th>Description</th> 620 <th>Page Ref</th> 621 <th>Condition</th> 622 </tr> 623 </thead> 624 <tbody> 625 <g:each in="${maintenanceActionList}" status="i" var="maintenanceAction"> 626 <tr class="${(i % 2) == 0 ? 'odd' : 'even'}"> 627 628 <td valign="top" class="name"> 629 ${fieldValue(bean:maintenanceAction, field:'procedureStepNumber')} 630 </td> 631 632 <td valign="top" style="text-align:left;" class="value"> 633 <g:if test="${maintenanceAction.assetSubItem}"> 634 ${maintenanceAction.assetSubItem.parentItem?.encodeAsHTML()} 635 -- 636 ${maintenanceAction.assetSubItem.encodeAsHTML()} 637 </g:if> 638 </td> 639 640 <td valign="top" style="text-align:left;" class="value"> 641 ${fieldValue(bean:maintenanceAction, field:'description')} 642 </td> 643 644 <td valign="top" style="text-align:left;" class="value"> 645 ${fieldValue(bean:maintenanceAction, field:'pageRef')} 646 </td> 647 648 <td valign="top" style="text-align:left;" class="value"> 649 </td> 650 651 </tr> 652 </g:each> 653 654 </tbody> 655 </table> 656 </div> 657 526 <g:render template="/taskProcedureDetailed/taskProcedureRevision" 527 model="['taskProcedureRevision':taskProcedureRevision]" /> 658 528 </g:else> 659 529 -
trunk/grails-app/views/taskProcedureDetailed/_taskProcedure.gsp
r798 r809 31 31 </tr> 32 32 33 <g:if test="${taskProcedureInstance. version}">33 <g:if test="${taskProcedureInstance.id}"> 34 34 <tr class="prop"> 35 <td valign="top" class="name"> Version:</td>35 <td valign="top" class="name">Revisions:</td> 36 36 <td valign="top" class="value"> 37 ${fieldValue(bean:taskProcedureInstance, field:'version')} 38 </td> 39 </tr> 40 41 <tr class="prop"> 42 <td valign="top" class="name">Created By:</td> 43 <td valign="top" class="value"> 44 ${fieldValue(bean:taskProcedureInstance, field:'createdBy')} 45 on 46 <g:formatDate date="${taskProcedureInstance.dateCreated}" format="EEE, dd-MMM-yyyy @ HH:mm"/> 47 </td> 48 </tr> 49 50 <tr class="prop"> 51 <td valign="top" class="name">Last Updated By:</td> 52 <td valign="top" class="value"> 53 ${fieldValue(bean:taskProcedureInstance, field:'lastUpdatedBy')} 54 on 55 <g:formatDate date="${taskProcedureInstance.lastUpdated}" format="EEE, dd-MMM-yyyy @ HH:mm"/> 37 <ul> 38 <g:each var="r" in="${taskProcedureInstance.revisions}"> 39 <li> 40 <g:link action="show" id="${taskProcedureInstance.id}" params="['revision':r.revision]"> 41 ${r.fullRevisionString.encodeAsHTML()} 42 </g:link> 43 </li> 44 </g:each> 45 </ul> 56 46 </td> 57 47 </tr> -
trunk/grails-app/views/taskProcedureDetailed/edit.gsp
r798 r809 31 31 <span class="button"><g:actionSubmit class="save" value="Update" /></span> 32 32 <span class="button"><g:actionSubmit class="cancel" value="Cancel" action="Show"/></span> 33 <span class="button"><g:actionSubmit class="delete" onclick="return confirm('Are you sure?');" value="Delete" /></span>34 33 </div> 35 34 </g:form> -
trunk/grails-app/views/taskProcedureDetailed/list.gsp
r798 r809 14 14 </div> 15 15 <div class="body"> 16 <g:if test="${flash.message}"> 17 <div class="message">${flash.message}</div> 18 </g:if> 16 <g:render template="/shared/messages" /> 19 17 <filterpane:currentCriteria domainBean="TaskProcedure" 20 18 action="list"
Note: See TracChangeset
for help on using the changeset viewer.