Changeset 798


Ignore:
Timestamp:
Feb 8, 2011, 11:00:27 PM (8 years ago)
Author:
gav
Message:

Svn merge -r752:r797 branches/features/taskProcedureRework into trunk/.

Location:
trunk
Files:
5 deleted
14 edited
11 copied

Legend:

Unmodified
Added
Removed
  • trunk/application.properties

    r612 r798  
    11#Grails Metadata file
    2 #Wed Jun 02 11:20:51 EST 2010
     2#Thu Jan 27 17:24:52 EST 2011
    33app.grails.version=1.2.2
    44app.name=gnuMims
  • trunk/grails-app/controllers/TaskProcedureDetailedController.groovy

    r403 r798  
    55
    66    def filterService
     7    def assetService
     8    def taskProcedureService
    79
    810    def index = { redirect(action:list,params:params) }
     
    4042
    4143        if(!taskProcedureInstance) {
    42             flash.message = "TaskProcedure not found with id ${params.id}"
    43             redirect(action:list)
    44         }
    45         else { return [ taskProcedureInstance : taskProcedureInstance ] }
     44            flash.errorMessage = "TaskProcedure not found with id ${params.id}"
     45            redirect(controller:'taskDetailed', action:'search')
     46            return
     47        }
     48
     49        redirect(controller:'taskDetailed',
     50                        action:'show',
     51                        id:taskProcedureInstance.linkedTask?.id,
     52                        params:[showTab:"showProcedureTab"])
    4653    }
    4754
     
    4956        def taskProcedureInstance = TaskProcedure.get( params.id )
    5057        if(taskProcedureInstance) {
     58            def taskInstance = taskProcedureInstance.linkedTask
    5159            try {
     60                taskProcedureInstance.tasks.each {
     61                    it.taskProcedure = null
     62                }
    5263                taskProcedureInstance.delete(flush:true)
    5364                flash.message = "TaskProcedure ${params.id} deleted"
    54                 redirect(action:list)
     65                redirect(controller:'taskDetailed',
     66                                action:'show',
     67                                id:taskInstance.id,
     68                                params:[showTab:"showProcedureTab"])
    5569            }
    5670            catch(org.springframework.dao.DataIntegrityViolationException e) {
    57                 flash.message = "TaskProcedure ${params.id} could not be deleted"
    58                 redirect(action:show,id:params.id)
     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"])
    5976            }
    6077        }
    6178        else {
    62             flash.message = "TaskProcedure not found with id ${params.id}"
     79            flash.errorMessage = "TaskProcedure not found with id ${params.id}"
    6380            redirect(action:list)
    6481        }
     
    7491
    7592        if(!taskProcedureInstance) {
    76             flash.message = "TaskProcedure not found with id ${params.id}"
     93            flash.errorMessage = "TaskProcedure not found with id ${params.id}"
    7794            redirect(action:list)
    7895        }
    7996        else {
    80             return [ taskProcedureInstance : taskProcedureInstance ]
     97            def assemblies = assetService.getAssemblies(taskProcedureInstance.linkedTask.primaryAsset)
     98            return [ taskProcedureInstance : taskProcedureInstance,
     99                            assemblies: assemblies ]
    81100        }
    82101    }
    83102
    84103    def update = {
    85         def taskProcedureInstance = TaskProcedure.get( params.id )
    86         if(taskProcedureInstance) {
    87             if(params.version) {
    88                 def version = params.version.toLong()
    89                 if(taskProcedureInstance.version > version) {
    90 
    91                     taskProcedureInstance.errors.rejectValue("version", "default.optimistic.locking.failure")
    92                     render(view:'edit',model:[taskProcedureInstance:taskProcedureInstance])
    93                     return
    94                 }
    95             }
    96             taskProcedureInstance.properties = params
    97             if(!taskProcedureInstance.hasErrors() && taskProcedureInstance.save(flush: true)) {
    98                 flash.message = "TaskProcedure ${params.id} updated"
    99                 redirect(action:show,id:taskProcedureInstance.id)
    100             }
    101             else {
    102                 render(view:'edit',model:[taskProcedureInstance:taskProcedureInstance])
    103             }
    104         }
    105         else {
    106             flash.message = "TaskProcedure not found with id ${params.id}"
     104        def result = taskProcedureService.update(params)
     105
     106        if(!result.error) {
     107            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"])
     112            return
     113        }
     114
     115        if(result.error.code == "default.not.found") {
     116            flash.errorMessage = g.message(code: result.error.code, args: result.error.args)
    107117            redirect(action:list)
    108         }
     118            return
     119        }
     120
     121        if(result.error.code == "default.optimistic.locking.failure") {
     122            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"])
     127            return
     128        }
     129
     130        def assemblies = assetService.getAssemblies(result.taskProcedureInstance.linkedTask.primaryAsset)
     131        render(view:'edit', model:[taskProcedureInstance: result.taskProcedureInstance,
     132                                                assemblies: assemblies])
    109133    }
    110134
    111135    def create = {
    112         if(params.taskInstance?.id) {
    113             def taskInstance = Task.get(params.taskInstance.id)
    114 
    115             def taskProcedureInstance = new TaskProcedure()
    116             taskProcedureInstance.properties = params
    117             return ['taskProcedureInstance':taskProcedureInstance,
    118                             taskInstance: taskInstance]
    119         } else {
    120             flash.message = "Please select or create a task, then go to the Procedure tab."
     136
     137        if(!params.taskInstance?.id) {
     138            flash.errorMessage = "Please select or create a task, then go to the Procedure tab."
    121139            redirect(controller:"taskDetailed", action:"search")
    122         }
     140            return
     141        }
     142
     143        params.linkedTask = Task.get(params.taskInstance.id)
     144
     145        // Task already has a taskProcedure.
     146        if(params.linkedTask.taskProcedure) {
     147            flash.errorMessage = g.message(code: 'default.optimistic.locking.failure')
     148            redirect(controller:'taskDetailed',
     149                            action:'show',
     150                            id:params.linkedTask.id,
     151                            params:[showTab:"showProcedureTab"])
     152            return
     153        }
     154
     155        // Task does not have a primaryAsset.
     156        if(!params.linkedTask?.primaryAsset) {
     157            flash.errorMessage = "Please set a Primary Asset first, then go to the Procedure tab."
     158            redirect(controller:"taskDetailed", action:"show", id:params.linkedTask?.id)
     159            return
     160        }
     161
     162        def taskProcedureInstance = new TaskProcedure()
     163        taskProcedureInstance.properties = params
     164
     165        // Populate a couple of maintenanceActions for the first assembly.
     166        def assemblies = assetService.getAssemblies(params.linkedTask.primaryAsset)
     167        if(assemblies) {
     168            def assembly = assemblies[0]
     169            def ma = taskProcedureInstance.maintenanceActionLazyList.get(0)
     170            ma.assetSubItem = assembly
     171            ma.procedureStepNumber = 10
     172            ma = taskProcedureInstance.maintenanceActionLazyList.get(1)
     173            ma.assetSubItem = assembly
     174            ma.procedureStepNumber = 20
     175        }
     176
     177        return ['taskProcedureInstance':taskProcedureInstance, 'assemblies': assemblies]
    123178    }
    124179
    125180    def save = {
    126         def taskProcedureInstance = new TaskProcedure(params)
    127         def taskInstance = Task.get(params.taskInstance.id)
    128 
    129         if(!taskProcedureInstance.hasErrors() && taskProcedureInstance.save(flush: true)) {
    130             taskProcedureInstance.addToTasks(taskInstance)
    131             flash.message = "TaskProcedure ${taskProcedureInstance.id} created."
    132             redirect(action:show,id:taskProcedureInstance.id)
    133         }
    134         else {
    135             render(view:'create',model:[taskProcedureInstance:taskProcedureInstance, taskInstance: taskInstance])
    136         }
    137     }
     181        def result = taskProcedureService.save(params)
     182
     183        if(!result.error) {
     184            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"])
     189            return
     190        }
     191
     192        if(result.error.code == "default.optimistic.locking.failure") {
     193            flash.errorMessage = g.message(code: result.error.code, args: result.error.args)
     194            redirect(controller:'taskDetailed',
     195                            action:'show',
     196                            id:result.taskProcedureInstance.linkedTask.id,
     197                            params:[showTab:"showProcedureTab"])
     198            return
     199        }
     200
     201        def assemblies = assetService.getAssemblies(result.taskProcedureInstance.linkedTask.primaryAsset)
     202        render(view:'create', model:[taskProcedureInstance: result.taskProcedureInstance,
     203                                                    assemblies: assemblies])
     204    }
     205
    138206}
  • trunk/grails-app/domain/MaintenanceAction.groovy

    r268 r798  
    88
    99    String description
    10     String reasoning = ""
     10    String pageRef = ""
    1111    Integer procedureStepNumber
    12     boolean isActive = true
     12
     13    Boolean toBeDeleted
     14    Boolean isNew
     15    static transients = [ 'toBeDeleted', 'isNew' ]
    1316
    1417//     static hasMany = []
    1518
    16 //     static belongsTo = []
     19    static belongsTo = [TaskProcedure]
    1720
    1821    static constraints = {
     
    2225        maintenancePolicy(nullable:true)
    2326        procedureStepNumber(nullable:true)
    24         description()
    25         reasoning()
    26         isActive()
     27        description(blank:false,maxSize:100)
     28        pageRef(maxSize:100)
    2729    }
    2830
  • trunk/grails-app/domain/TaskProcedure.groovy

    r131 r798  
     1import org.apache.commons.collections.list.LazyList
     2import org.apache.commons.collections.FactoryUtils
     3
    14class TaskProcedure {
    25
    3     String name
    4     String description = ""
    5     Boolean isActive = true
     6    Task linkedTask
     7    Person createdBy
     8    Person lastUpdatedBy
     9    Date dateCreated = new Date() // autoTimestamp
     10    Date lastUpdated = new Date() // autoTimestamp
    611
    7     static hasMany = [tasks: Task, maintenanceActions: MaintenanceAction]
     12    def getDescription() { linkedTask.description }
     13    def getAsset() { linkedTask.primaryAsset }
     14
     15    List maintenanceActions = new ArrayList()
     16    List documentReferences = new ArrayList()
     17
     18    static hasMany = [tasks: Task,
     19                                    maintenanceActions: MaintenanceAction,
     20                                    documentReferences: DocumentReference]
     21
     22    def getMaintenanceActionLazyList() {
     23        return LazyList.decorate(maintenanceActions, FactoryUtils.instantiateFactory(MaintenanceAction.class))
     24    }
     25
     26    def getDocumentReferenceLazyList() {
     27        return LazyList.decorate(documentReferences, FactoryUtils.instantiateFactory(DocumentReference.class))
     28    }
     29
     30    static mappedBy = [tasks:"taskProcedure"]
     31
     32    static mapping = {
     33        maintenanceActions cascade:"all-delete-orphan"
     34        documentReferences cascade:"all-delete-orphan"
     35    }
    836
    937//     static belongsTo = []
    1038
    1139    static constraints = {
    12         name(maxSize:75,unique:true,blank:false)
    13         description(maxSize:100)
    1440    }
    1541
    1642    String toString() {
    17         "${this.name}"
     43        "${this.id}"
    1844    }
    1945}
  • trunk/grails-app/services/AssetService.groovy

    r689 r798  
    2222                }
    2323        }
     24    }
     25
     26    /**
     27    * Determines and returns a list of assemblies for an asset.
     28    * This is purely a 'load from database' type method since a new hibernateSession is used.
     29    * @params Asset to get the subItems for.
     30    * @returns A list of the assemblies.
     31    */
     32    def getAssemblies(asset) {
     33        def assemblies = []
     34        if(!(asset instanceof Asset))
     35            return assemblies
     36        // Database efficiency:
     37        // The asset is configured to batch fetch assetSubItems which
     38        // in turn are configured to batch fetch subItems.
     39        Asset.withNewSession {
     40            Asset.get(asset.id).assetSubItems.each {
     41                assemblies.addAll(it.subItems)
     42            }
     43        }
     44        assemblies.sort { p1, p2 -> p1.name.compareToIgnoreCase(p2.name) }
     45        return assemblies
    2446    }
    2547
  • trunk/grails-app/services/CreateDataService.groovy

    r751 r798  
    33/**
    44* Provides a data service to create base and demo data.
    5 * Beware that most, if not all, base data is referenced by "Id" throughout the program.
     5* Beware that most, if not all, BASE data is referenced by "Id" throughout the program.
    66* This allows changing the text of the 'name' property to something of the same meaning.
    77* But be sure to maintain the correct Id during creation, indicated by #1, #2 etc.
     8* Task.list()[0] is used to allow integration testing with DEMO data, where Id's may change due to create-delete.
    89*/
    910class  CreateDataService {
     
    846847        //Task #1
    847848        p = [taskGroup:TaskGroup.findByName("Engineering Activites"),
    848                 taskPriority:TaskPriority.get(2),
     849                taskPriority:TaskPriority.get(1),
    849850                taskType:TaskType.get(1),
    850851                leadPerson:Person.get(2),
     
    10971098        //TaskProcedure
    10981099        def taskProcedureInstance
    1099 
    1100         taskProcedureInstance = new TaskProcedure(name: "Daily check")
     1100        def taskInstance
     1101        def person = Person.get(3)
     1102
     1103        taskInstance = Task.list()[6]
     1104        taskProcedureInstance = new TaskProcedure(linkedTask: taskInstance,
     1105                                                                                    createdBy: person,
     1106                                                                                    lastUpdatedBy: person)
    11011107        saveAndTest(taskProcedureInstance)
    1102         taskProcedureInstance.addToTasks(Task.list()[0])
    1103 
    1104         taskProcedureInstance = new TaskProcedure(name: "100hr Service")
     1108        taskProcedureInstance.addToTasks(taskInstance)
     1109
     1110        taskInstance = Task.list()[4]
     1111        taskProcedureInstance = new TaskProcedure(linkedTask: taskInstance,
     1112                                                                                    createdBy: person,
     1113                                                                                    lastUpdatedBy: person)
    11051114        saveAndTest(taskProcedureInstance)
    1106         taskProcedureInstance.addToTasks(Task.list()[6])
     1115        taskProcedureInstance.addToTasks(taskInstance)
    11071116    }
    11081117
     
    11111120        //MaintenanceAction
    11121121        def maintenanceActionInstance
     1122        def taskProcedure = TaskProcedure.get(1)
     1123        def assetSubItem = AssetSubItem.get(6)
    11131124
    11141125        //MaintenanceAction #1
    11151126        maintenanceActionInstance = new MaintenanceAction(description: "Check all E-stops, activate E-stops S1-S12 and ensure machine cannot run",
    11161127                                                                                                        procedureStepNumber: 10,
    1117                                                                                                         maintenancePolicy: MaintenancePolicy.get(1),
    1118                                                                                                         taskProcedure: TaskProcedure.get(1))
    1119         saveAndTest(maintenanceActionInstance)
     1128                                                                                                        assetSubItem: assetSubItem,
     1129                                                                                                        taskProcedure: taskProcedure)
     1130        taskProcedure.addToMaintenanceActions(maintenanceActionInstance)
    11201131
    11211132        //MaintenanceAction #2
    11221133        maintenanceActionInstance = new MaintenanceAction(description: "Do more pushups",
    11231134                                                                                                        procedureStepNumber: 20,
    1124                                                                                                         maintenancePolicy: MaintenancePolicy.get(1),
    1125                                                                                                         taskProcedure: TaskProcedure.get(1))
    1126         saveAndTest(maintenanceActionInstance)
     1135                                                                                                        assetSubItem: assetSubItem,
     1136                                                                                                        taskProcedure: taskProcedure)
     1137        taskProcedure.addToMaintenanceActions(maintenanceActionInstance)
    11271138
    11281139        //MaintenanceAction #3
    11291140        maintenanceActionInstance = new MaintenanceAction(description: "Ok just one more pushup",
    11301141                                                                                                        procedureStepNumber: 30,
    1131                                                                                                         maintenancePolicy: MaintenancePolicy.get(1),
    1132                                                                                                         taskProcedure: TaskProcedure.get(1))
    1133         saveAndTest(maintenanceActionInstance)
     1142                                                                                                        assetSubItem: assetSubItem,
     1143                                                                                                        taskProcedure: taskProcedure)
     1144        taskProcedure.addToMaintenanceActions(maintenanceActionInstance)
     1145
     1146        saveAndTest(taskProcedure)
    11341147    }
    11351148
     
    14751488                                                                section: Section.get(1))
    14761489        saveAndTest(assetInstance1)
    1477 //        assetInstance.addToMaintenanceActions(MaintenanceAction.get(1))
    14781490
    14791491        //Asset #2
  • trunk/grails-app/taglib/CustomTagLib.groovy

    r672 r798  
     1//import org.apache.commons.validator.UrlValidator
     2import org.codehaus.groovy.grails.validation.routines.UrlValidator
     3import org.codehaus.groovy.grails.validation.routines.RegexValidator
    14
    25/**
     
    238241    } // jasperButtons
    239242
     243    /**
     244    * Easily create a link from a hopeful url string.
     245    * If the supplied url is not considered a valid url the string is simply displayed.
     246    *
     247    * Fields:
     248    *  url - String url to use.
     249    *  body - If no body is supplied in the GSP then url.encodeAsHTML() is displayed.
     250    *
     251    * Example:
     252    * <!--
     253    * <custom:easyUrl url="${docRef.location}" />
     254    * -->
     255    */
     256    def easyUrl = {attrs, body ->
     257
     258        def url = attrs.url
     259
     260        def html
     261
     262        body = body()
     263        if(!body)
     264            body = url.encodeAsHTML()
     265
     266        html = "${body}"
     267
     268        if(isURLValid(url)) {
     269            html = """
     270                        <a href="${url}">
     271                            ${html}
     272                        </a>
     273                        """
     274        }
     275
     276        out << html
     277    }
     278
     279    /**
     280    * Determine if a supplied string is considered a url or not.
     281    * The scheme/protocol can be adjusted, file:// has been excluded here.
     282    * A domainValidator regex is used to allow localhost domain.
     283    * A Grails branched version of commons.validator is used, this should
     284    * be compatible with the apache 1.4 version release.
     285    * See: http://jira.codehaus.org/browse/GRAILS-1692 for more on Grails url validation.
     286    */
     287    private Boolean isURLValid(url) {
     288
     289        def schemes = ["http","https", "ftp"] as String[]
     290        def domainValidator = new RegexValidator("localhost(:(\\d{1,5}))?")
     291        def validator = new UrlValidator(schemes, domainValidator, UrlValidator.ALLOW_2_SLASHES)
     292        return validator.isValid(url)
     293
     294    }
     295
    240296} // end class
  • trunk/grails-app/views/layouts/main.gsp

    r711 r798  
    55        <link rel="stylesheet" href="${resource(dir:'css',file:'main.css')}" />
    66        <link rel="shortcut icon" href="${resource(dir:'images',file:'gnuMimsIcon.ico')}" type="image/x-icon" />
     7        <g:javascript library="jquery" />
    78        <g:javascript library="prototype/prototype" />
    89        <g:javascript library="prototype/effects" />
  • trunk/grails-app/views/taskDetailed/show.gsp

    r736 r798  
    513513                                        <tr class="prop">
    514514                                            <td valign="top" class="name">Procedure Id:</td>
    515 
    516                                             <td valign="top" class="value">${fieldValue(bean:taskProcedureInstance, field:'id')}</td>
    517 
    518                                         </tr>
    519 
    520                                         <tr class="prop">
    521                                             <td valign="top" class="name">Name:</td>
    522 
    523                                             <td valign="top" class="value">${fieldValue(bean:taskProcedureInstance, field:'name')}</td>
    524 
    525                                         </tr>
    526 
    527                                         <tr class="prop">
    528                                             <td valign="top" class="name">Description:</td>
    529 
    530                                             <td valign="top" class="value">${fieldValue(bean:taskProcedureInstance, field:'description')}</td>
    531 
    532                                         </tr>
    533 
    534                                         <tr class="prop">
    535                                             <td valign="top" class="name">Is Active:</td>
    536 
    537                                             <td valign="top" class="value">${fieldValue(bean:taskProcedureInstance, field:'isActive')}</td>
    538 
     515                                            <td valign="top" class="value">
     516                                                ${fieldValue(bean:taskProcedureInstance, field:'id')}
     517                                            </td>
     518                                        </tr>
     519
     520                                        <tr class="prop">
     521                                            <td valign="top" class="name">Linked Task:</td>
     522                                            <td valign="top" class="value">
     523                                                <g:link controller="taskDetailed"
     524                                                                action="show"
     525                                                                id="${taskProcedureInstance.linkedTask.id}">
     526                                                    ${taskProcedureInstance.linkedTask.encodeAsHTML()}
     527                                                </g:link>
     528                                            </td>
     529                                        </tr>
     530
     531                                        <tr class="prop">
     532                                            <td valign="top" class="name">Linked Asset:</td>
     533                                            <td valign="top" class="value">
     534                                                <g:render template="/shared/assetTreeCompact" model="['assetInstance': taskProcedureInstance.linkedTask.primaryAsset]" />
     535                                            </td>
     536                                        </tr>
     537
     538                                        <tr class="prop">
     539                                            <td valign="top" class="name">Version:</td>
     540                                            <td valign="top" class="value">
     541                                                    ${fieldValue(bean:taskProcedureInstance, field:'version')}
     542                                            </td>
     543                                        </tr>
     544
     545                                        <tr class="prop">
     546                                            <td valign="top" class="name">Last Updated:</td>
     547                                            <td valign="top" class="value">
     548                                                <g:formatDate date="${taskProcedureInstance.lastUpdated}"
     549                                                                            format="EEE, dd-MMM-yyyy"/>
     550                                            </td>
    539551                                        </tr>
    540552
     
    549561                            </div>
    550562
     563                            <br />
     564
     565                            <g:if test="${taskProcedureInstance.documentReferences}">
     566                                <div class="list">
     567                                    <table>
     568                                        <thead>
     569                                            <tr>
     570                                                <th>Document Reference</th>
     571                                                <th>Location</th>
     572                                            </tr>
     573                                        </thead>
     574                                        <tbody>
     575                                            <g:each in="${taskProcedureInstance.documentReferences}" status="i" var="docRef">
     576                                                <tr class="${(i % 2) == 0 ? 'odd' : 'even'}">
     577
     578                                                    <td valign="top" class="name">
     579                                                        ${fieldValue(bean:docRef, field:'name')}
     580                                                    </td>
     581
     582                                                    <td  valign="top" style="text-align:left;" class="value">
     583                                                        <custom:easyUrl url="${docRef.location}" />
     584                                                    </td>
     585
     586                                                </tr>
     587                                            </g:each>
     588
     589                                        </tbody>
     590                                    </table>
     591                                </div>
     592                            </g:if>
     593
     594                            <br />
     595
    551596                            <div class="list">
    552597                                <table>
     
    554599                                        <tr>
    555600                                            <th>Step</th>
     601                                            <th>Assembly</th>
    556602                                            <th>Description</th>
    557                                             <th>Reasoning</th>
    558                                             <th>Asset</th>
    559                                             <th>Sub Item</th>
     603                                            <th>Page Ref</th>
     604                                            <th>Condition</th>
    560605                                        </tr>
    561606                                    </thead>
     
    569614
    570615                                                <td  valign="top" style="text-align:left;" class="value">
     616                                                    <g:if test="${maintenanceAction.assetSubItem}">
     617                                                        ${maintenanceAction.assetSubItem.parentItem?.encodeAsHTML()}
     618                                                        --
     619                                                        ${maintenanceAction.assetSubItem.encodeAsHTML()}
     620                                                    </g:if>
     621                                                </td>
     622
     623                                                <td  valign="top" style="text-align:left;" class="value">
    571624                                                    ${fieldValue(bean:maintenanceAction, field:'description')}
    572625                                                </td>
    573626
    574627                                                <td  valign="top" style="text-align:left;" class="value">
    575                                                     ${fieldValue(bean:maintenanceAction, field:'reasoning')}
     628                                                    ${fieldValue(bean:maintenanceAction, field:'pageRef')}
    576629                                                </td>
    577630
    578631                                                <td  valign="top" style="text-align:left;" class="value">
    579                                                     ${fieldValue(bean:maintenanceAction, field:'asset')}
    580                                                 </td>
    581 
    582                                                 <td  valign="top" style="text-align:left;" class="value">
    583                                                     ${fieldValue(bean:maintenanceAction, field:'assetSubItem')}
    584632                                                </td>
    585633
  • trunk/grails-app/views/taskProcedureDetailed/create.gsp

    r173 r798  
    77        <title>Create TaskProcedure</title>
    88        <nav:resources override="true"/>
     9        <g:javascript src="dynamicOneToMany.js" />
    910    </head>
    1011    <body>
     
    1314        </div>
    1415        <div class="body">
    15             <g:if test="${flash.message}">
    16             <div class="message">${flash.message}</div>
    17             </g:if>
     16            <g:render template="/shared/messages" />
     17
    1818            <g:hasErrors bean="${taskProcedureInstance}">
    19             <div class="errors">
    20                 <g:renderErrors bean="${taskProcedureInstance}" as="list" />
    21             </div>
     19                <div class="errors">
     20                    <g:renderErrors bean="${taskProcedureInstance}" as="list" />
     21                </div>
    2222            </g:hasErrors>
     23
    2324            <g:form action="save" method="post" >
    24             <input type="hidden" name="taskInstance.id" value="${taskInstance?.id}" />
     25                <input type="hidden" name="linkedTask.id" value="${taskProcedureInstance.linkedTask.id}" />
    2526
    26                 <div class="dialog">
    27                     <table>
    28                         <tbody>
     27                <g:render template="taskProcedure" model="['taskProcedureInstance': taskProcedureInstance]" />
    2928
    30                             <tr class="prop">
    31                                 <td valign="top" class="name">
    32                                     <label for="name">Name:</label>
    33                                 </td>
    34                                 <td valign="top" class="value ${hasErrors(bean:taskProcedureInstance,field:'name','errors')}">
    35                                     <input type="text"  class="description" maxlength="75" id="name" name="name" value="${fieldValue(bean:taskProcedureInstance,field:'name')}"/>
    36                                 </td>
    37                             </tr>
    38 
    39                             <tr class="prop">
    40                                 <td valign="top" class="name">
    41                                     <label for="description">Description:</label>
    42                                 </td>
    43                                 <td valign="top" class="value ${hasErrors(bean:taskProcedureInstance,field:'description','errors')}">
    44                                     <input type="text"  class="description" maxlength="100" id="description" name="description" value="${fieldValue(bean:taskProcedureInstance,field:'description')}"/>
    45                                 </td>
    46                             </tr>
    47 
    48                             <tr class="prop">
    49                                 <td valign="top" class="name">
    50                                     <label for="isActive">Is Active:</label>
    51                                 </td>
    52                                 <td valign="top" class="value ${hasErrors(bean:taskProcedureInstance,field:'isActive','errors')}">
    53                                     <g:checkBox name="isActive" value="${taskProcedureInstance?.isActive}" ></g:checkBox>
    54                                 </td>
    55                             </tr>
    56 
    57                             <g:if test="${taskInstance}">
    58                                 <tr class="prop">
    59                                     <td valign="top" class="name">
    60                                         <label for="taskInstance">Linking with Task:</label>
    61                                     </td>
    62                                     <td valign="top" name="taskInstance" class="value">
    63                                         ${taskInstance}
    64                                     </td>
    65                                 </tr>
    66                             </g:if>
    67 
    68                         </tbody>
    69                     </table>
    70                 </div>
    7129                <div class="buttons">
    7230                    <span class="button"><input class="save" type="submit" value="Create" /></span>
     
    7432            </g:form>
    7533        </div>
     34        <table style="display:none;">
     35            <g:render template="documentReference" model="['docRef': null,
     36                                                                                                        'i': '_clone']" />
     37        </table>
     38        <table style="display:none;">
     39            <g:render template="maintenanceAction" model="['tp': null,
     40                                                                                                'ma': null,
     41                                                                                                'i': '_clone',
     42                                                                                                'assemblies': assemblies]" />
     43        </table>
    7644    </body>
    7745</html>
  • trunk/grails-app/views/taskProcedureDetailed/edit.gsp

    r410 r798  
    77        <title>Edit TaskProcedure</title>
    88        <nav:resources override="true"/>
     9        <g:javascript src="dynamicOneToMany.js" />
    910    </head>
    1011    <body>
     
    1314        </div>
    1415        <div class="body">
    15             <g:if test="${flash.message}">
    16             <div class="message">${flash.message}</div>
    17             </g:if>
     16            <g:render template="/shared/messages" />
     17
    1818            <g:hasErrors bean="${taskProcedureInstance}">
    19             <div class="errors">
    20                 <g:renderErrors bean="${taskProcedureInstance}" as="list" />
    21             </div>
     19                <div class="errors">
     20                    <g:renderErrors bean="${taskProcedureInstance}" as="list" />
     21                </div>
    2222            </g:hasErrors>
     23
    2324            <g:form method="post" >
    2425                <input type="hidden" name="id" value="${taskProcedureInstance?.id}" />
    2526                <input type="hidden" name="version" value="${taskProcedureInstance?.version}" />
    26                 <div class="dialog">
    27                     <table>
    28                         <tbody>
    29                        
    30                             <tr class="prop">
    31                                 <td valign="top" class="name">
    32                                     <label for="name">Name:</label>
    33                                 </td>
    34                                 <td valign="top" class="value ${hasErrors(bean:taskProcedureInstance,field:'name','errors')}">
    35                                     <input type="text"  class="description" maxlength="75" id="name" name="name" value="${fieldValue(bean:taskProcedureInstance,field:'name')}"/>
    36                                 </td>
    37                             </tr>
    38                        
    39                             <tr class="prop">
    40                                 <td valign="top" class="name">
    41                                     <label for="description">Description:</label>
    42                                 </td>
    43                                 <td valign="top" class="value ${hasErrors(bean:taskProcedureInstance,field:'description','errors')}">
    44                                     <input type="text"  class="description" maxlength="100" id="description" name="description" value="${fieldValue(bean:taskProcedureInstance,field:'description')}"/>
    45                                 </td>
    46                             </tr>
    47                        
    48                             <tr class="prop">
    49                                 <td valign="top" class="name">
    50                                     <label for="isActive">Is Active:</label>
    51                                 </td>
    52                                 <td valign="top" class="value ${hasErrors(bean:taskProcedureInstance,field:'isActive','errors')}">
    53                                     <g:checkBox name="isActive" value="${taskProcedureInstance?.isActive}" ></g:checkBox>
    54                                 </td>
    55                             </tr>
    56                        
    57                             <tr class="prop">
    58                                 <td valign="top" class="name">
    59                                     <label for="maintenanceActions">Maintenance Actions:</label>
    60                                 </td>
    61                                 <td valign="top" class="value ${hasErrors(bean:taskProcedureInstance,field:'maintenanceActions','errors')}">
    62                                    
    63 <ul>
    64 <g:each var="m" in="${taskProcedureInstance?.maintenanceActions?}">
    65     <li><g:link controller="maintenanceActionDetailed" action="show" id="${m.id}">${m?.encodeAsHTML()}</g:link></li>
    66 </g:each>
    67 </ul>
    68 <g:link controller="maintenanceActionDetailed" params="['taskProcedure.id':taskProcedureInstance?.id]" action="create">+Add MaintenanceAction</g:link>
    6927
    70                                 </td>
    71                             </tr>
    72                        
    73                             <tr class="prop">
    74                                 <td valign="top" class="name">
    75                                     <label for="tasks">Tasks:</label>
    76                                 </td>
    77                                 <td valign="top" class="value ${hasErrors(bean:taskProcedureInstance,field:'tasks','errors')}">
    78                                    
    79 <ul>
    80 <g:each var="t" in="${taskProcedureInstance?.tasks?}">
    81     <li><g:link controller="taskDetailed" action="show" id="${t.id}">${t?.encodeAsHTML()}</g:link></li>
    82 </g:each>
    83 </ul>
    84 <g:link controller="taskDetailed" params="['taskProcedure.id':taskProcedureInstance?.id]" action="create">+Add Task</g:link>
     28                <g:render template="taskProcedure" model="['taskProcedureInstance': taskProcedureInstance]" />
    8529
    86                                 </td>
    87                             </tr>
    88                        
    89                         </tbody>
    90                     </table>
    91                 </div>
    9230                <div class="buttons">
    9331                    <span class="button"><g:actionSubmit class="save" value="Update" /></span>
     32                    <span class="button"><g:actionSubmit class="cancel" value="Cancel" action="Show"/></span>
    9433                    <span class="button"><g:actionSubmit class="delete" onclick="return confirm('Are you sure?');" value="Delete" /></span>
    9534                </div>
    9635            </g:form>
    9736        </div>
     37        <table style="display:none;">
     38            <g:render template="documentReference" model="['docRef': null,
     39                                                                                                        'i': '_clone']" />
     40        </table>
     41        <table style="display:none;">
     42            <g:render template="maintenanceAction" model="['tp': null,
     43                                                                                                'ma': null,
     44                                                                                                'i': '_clone',
     45                                                                                                'assemblies': assemblies]" />
     46        </table>
    9847    </body>
    9948</html>
  • trunk/grails-app/views/taskProcedureDetailed/list.gsp

    r467 r798  
    3737                        <thead>
    3838                            <tr>
    39                            
     39
    4040                                <g:sortableColumn property="id" title="Id"  params="${filterParams}" />
    41                            
    42                                 <g:sortableColumn property="name" title="Name"  params="${filterParams}" />
    43                            
    44                                 <g:sortableColumn property="description" title="Description"  params="${filterParams}" />
    45                            
    46                                 <g:sortableColumn property="isActive" title="Is Active"  params="${filterParams}" />
     41                                <th>Description</th>
     42                                <th>Asset</th>
    4743
    4844                                <th></th>
    49                            
     45
    5046                            </tr>
    5147                        </thead>
     
    5349                        <g:each in="${taskProcedureInstanceList}" status="i" var="taskProcedureInstance">
    5450                            <tr class="${(i % 2) == 0 ? 'clickableOdd' : 'clickableEven'}" onclick='window.location = "${request.getContextPath()}/taskProcedureDetailed/show/${taskProcedureInstance.id}"'/>
    55                            
     51
    5652                                <td>${fieldValue(bean:taskProcedureInstance, field:'id')}</td>
    57                            
    58                                 <td>${fieldValue(bean:taskProcedureInstance, field:'name')}</td>
    59                            
    60                                 <td>${fieldValue(bean:taskProcedureInstance, field:'description')}</td>
    61                            
    62                                 <td>${fieldValue(bean:taskProcedureInstance, field:'isActive')}</td>
    63                                
     53
     54                                <td>${taskProcedureInstance.description.encodeAsHTML()}</td>
     55
     56                                <td>${taskProcedureInstance.asset?.encodeAsHTML()}</td>
     57
    6458                                <td>
    6559                                    <g:link action="show" id="${taskProcedureInstance.id}">
     
    6761                                    </g:link>
    6862                                </td>
    69                            
     63
    7064                            </tr>
    7165                        </g:each>
     
    8377                                    action="list"
    8478                                    class="overlayPane"
    85                                     excludeProperties="" />
     79                                    additionalProperties="id"
     80                                    excludeProperties=""
     81                                    associatedProperties="linkedTask.description" />
    8682        </div>
    8783    </body>
  • trunk/web-app/css/main.css

    r729 r798  
    690690div.static_tree {
    691691}
     692div.static_tree_compact {
     693    height:10em;
     694    width:100%;
     695    overflow:auto;
     696}
    692697div.static_tree ul {
    693698    list-style-type: none;
  • trunk/web-app/js/jsUtil.js

    r714 r798  
    119119    }
    120120}
     121
     122function openWindow(url) {
     123    window.open(url);
     124}
Note: See TracChangeset for help on using the changeset viewer.