Index: /trunk/grails-app/controllers/AssetDetailedController.groovy
===================================================================
--- /trunk/grails-app/controllers/AssetDetailedController.groovy	(revision 748)
+++ /trunk/grails-app/controllers/AssetDetailedController.groovy	(revision 749)
@@ -11,4 +11,5 @@
     def assetService
     def assetTreeService
+    def taskService
 
     // the delete, save and update actions only accept POST requests
@@ -235,6 +236,9 @@
             flash.message = "Asset not found with id ${params.id}"
             redirect(action:search)
-        }
-        else { return [ assetInstance : assetInstance ] }
+            return
+        }
+
+        return [ assetInstance : assetInstance,
+                        parentPMs: taskService.getParentPMs(assetInstance)]
     }
 
@@ -275,8 +279,11 @@
             flash.message = "Asset not found with id ${params.id}"
             redirect(action:search)
-        }
-        else {
-            return [ assetInstance : assetInstance, possibleAssetSubItems: assetService.possibleAssetSubItems() ]
-        }
+            return
+        }
+
+        return [ assetInstance : assetInstance,
+                        possibleAssetSubItems: assetService.possibleAssetSubItems(),
+                        parentPMs: taskService.getParentPMs(assetInstance) ]
+
     }
 
@@ -286,36 +293,42 @@
     def update = {
         def assetInstance = Asset.get( params.id )
-        if(assetInstance) {
-            if(params.version) {
-                def version = params.version.toLong()
-                if(assetInstance.version > version) {
-
-                    assetInstance.errors.rejectValue("version", "default.optimistic.locking.failure")
-                    render(view:'edit',model:[assetInstance:assetInstance, possibleAssetSubItems: assetService.possibleAssetSubItems()])
-                    return
-                }
+
+        if(!assetInstance) {
+            flash.message = "Asset not found with id ${params.id}"
+            redirect(action:search)
+            return
+        }
+
+        if(params.version) {
+            def version = params.version.toLong()
+            if(assetInstance.version > version) {
+
+                assetInstance.errors.rejectValue("version", "default.optimistic.locking.failure")
+                render(view:'edit',model:[assetInstance:assetInstance,
+                                                            possibleAssetSubItems: assetService.possibleAssetSubItems(),
+                                                            parentPMs: taskService.getParentPMs(assetInstance)] )
+                return
             }
-
-            assetInstance.properties = params
-
-            use(WordUtils) {
-                assetInstance.name = assetInstance.name.capitalize()
-                assetInstance.description = assetInstance.description.capitalize()
-            }
-
-            assetInstance.setAssetSubItemsFromCheckBoxList(params.assetSubItems)
-
-            if(!assetInstance.hasErrors() && assetInstance.save(flush: true)) {
-                flash.message = "Asset '${assetInstance.name}' updated"
-                redirect(action:show,id:assetInstance.id)
-            }
-            else {
-                render(view:'edit',model:[assetInstance:assetInstance, possibleAssetSubItems: assetService.possibleAssetSubItems()])
-            }
+        }
+
+        assetInstance.properties = params
+
+        use(WordUtils) {
+            assetInstance.name = assetInstance.name.capitalize()
+            assetInstance.description = assetInstance.description.capitalize()
+        }
+
+        assetInstance.setAssetSubItemsFromCheckBoxList(params.assetSubItems)
+
+        if(!assetInstance.hasErrors() && assetInstance.save(flush: true)) {
+            flash.message = "Asset '${assetInstance.name}' updated"
+            redirect(action:show,id:assetInstance.id)
         }
         else {
-            flash.message = "Asset not found with id ${params.id}"
-            redirect(action:search)
-        }
+            render(view:'edit',model:[assetInstance:assetInstance,
+                                                        possibleAssetSubItems: assetService.possibleAssetSubItems(),
+                                                        parentPMs: taskService.getParentPMs(assetInstance)] )
+        }
+
     }
 
Index: /trunk/grails-app/services/CreateDataService.groovy
===================================================================
--- /trunk/grails-app/services/CreateDataService.groovy	(revision 748)
+++ /trunk/grails-app/services/CreateDataService.groovy	(revision 749)
@@ -816,4 +816,7 @@
         taskTypeInstance = new TaskType(name:"Project") // #5
         saveAndTest(taskTypeInstance)
+
+        taskTypeInstance = new TaskType(name:"Parent PM") // #6
+        saveAndTest(taskTypeInstance)
     }
 
Index: /trunk/grails-app/services/TaskService.groovy
===================================================================
--- /trunk/grails-app/services/TaskService.groovy	(revision 748)
+++ /trunk/grails-app/services/TaskService.groovy	(revision 749)
@@ -44,4 +44,19 @@
                 }
         }
+    }
+
+    /**
+    * Determines and returns a list of parentPM tasks for an asset.
+    * @param asset The asset to get parentPM tasks for.
+    * @returns A list of the possible task types.
+    */
+    def getParentPMs(asset) {
+        def parentPMs = Task.withCriteria {
+                                                eq("primaryAsset", asset)
+                                                taskType {
+                                                    idEq(6L)
+                                                }
+                                                maxResults(1000)
+                                        }
     }
 
@@ -202,5 +217,10 @@
         p.taskStatus = TaskStatus.get(1) // A new subTask must always be "Not Started".
         p.taskPriority = parentTask.taskPriority
+
         p.taskType = params.taskType ?: parentTask.taskType
+         // Convert "Parent PM" tasks to "Preventative Maintenance" tasks.
+        if(p.taskType.id == 6)
+            p.taskType = TaskType.get(4)
+
         p.leadPerson = params.leadPerson ?: parentTask.leadPerson
         p.primaryAsset = params.primaryAsset ?: parentTask.primaryAsset
Index: /trunk/grails-app/views/assetDetailed/edit.gsp
===================================================================
--- /trunk/grails-app/views/assetDetailed/edit.gsp	(revision 748)
+++ /trunk/grails-app/views/assetDetailed/edit.gsp	(revision 749)
@@ -130,20 +130,53 @@
                                 </td>
                             </tr> 
-                        
-                            <tr class="prop">
-                                <td valign="top" class="groupHeader">
-                                    <label for="maintenanceActions">Maintenance Actions</label>
-                                </td>
-                                <td valign="top" class="value">
-                                </td>
-                            </tr> 
-                        
-                            <g:each var="m" in="${assetInstance?.maintenanceActions?}">
+
+                            <tr class="prop">
+                                <td valign="top" class="groupHeader">Life Plan</td>
+
+                                <td  valign="top" style="text-align:left;" class="value">
+                                </td>
+
+                            </tr>
+                            
+                            <g:each var="t" in="${parentPMs}">
                                 <tr class="prop">
-                                    <td valign="top" class="name">
+                                    <td valign="top" class="name"></td>
+                                    
+                                    <td  valign="top" style="text-align:left;" class="value">
+                                        <g:link controller="taskDetailed" action="show" id="${t.id}">
+                                            Task #${t.id}
+                                        </g:link>
+                                        <g:if test="${t.approved}" >
+                                            <img  src="${resource(dir:'images/skin',file:'cog.png')}" alt="Approved" title="Approved" />
+                                        </g:if>
+                                        <g:if test="${t.taskRecurringSchedule?.enabled}" >
+                                            <img  src="${resource(dir:'images/skin',file:'arrow_refresh.png')}" alt="Recurrence Enabled" title="Recurrence Enabled" />
+                                        </g:if>
+                                        <g:if test="${t.taskStatus.id == 2}" >
+                                            <img  src="${resource(dir:'images/skin',file:'arrow_right.png')}" alt="In Progress" title="In Progress" />
+                                        </g:if>
+                                        <g:if test="${t.attentionFlag}" >
+                                            <img  src="${resource(dir:'images/skin',file:'flag_red.png')}" alt="Attention Flag" title="Attention Flag" />
+                                        </g:if>
+                                        <g:if test="${t.taskStatus.id == 3}" >
+                                            <img  src="${resource(dir:'images/skin',file:'tick.png')}" alt="Complete" title="Complete" />
+                                        </g:if>
+                                        <br />
+                                        ${fieldValue(bean:t, field:'description')}
+                                        <br />
+                                        <g:if test="${t.safetyRequirement}" >
+                                            <img  src="${resource(dir:'images/skin',file:'lightning.png')}" alt="Safety Requirement" title="Safety Requirement" />
+                                            Safety
+                                        </g:if>
+                                        <g:if test="${t.regulatoryRequirement}" >
+                                            <img  src="${resource(dir:'images/skin',file:'script_lightning.png')}" alt="Regulatory Requirement" title="Regulatory Requirement" />
+                                            Regulatory
+                                        </g:if>
+                                        <g:if test="${t.mandatoryRequirement}" >
+                                            <img  src="${resource(dir:'images/skin',file:'script.png')}" alt="Mandatory Requirement" title="Mandatory Requirement" />
+                                            Mandatory
+                                        </g:if>
                                     </td>
-                                    <td valign="top" class="value ${hasErrors(bean:assetInstance,field:'maintenanceActions','errors')}">
-                                        <g:link controller="maintenanceActionDetailed" action="show" id="${m.id}">${m?.encodeAsHTML()}</g:link>
-                                    </td>
+                                    
                                 </tr>
                             </g:each>
@@ -152,5 +185,5 @@
                                 <td valign="top" class="name"></td>
                                 <td  valign="top" style="text-align:left;" class="value">
-                                    <g:link controller="maintenanceActionDetailed" params="['asset.id':assetInstance?.id]" action="create">+Add Maintenance Action</g:link>
+                                    <g:link controller="taskDetailed" params="['primaryAsset.id':assetInstance?.id, 'taskType.id':6]" action="create">+Add ParentPM</g:link>
                                 </td>
                             </tr>
Index: /trunk/grails-app/views/assetDetailed/show.gsp
===================================================================
--- /trunk/grails-app/views/assetDetailed/show.gsp	(revision 748)
+++ /trunk/grails-app/views/assetDetailed/show.gsp	(revision 749)
@@ -110,5 +110,5 @@
                             
                             <tr class="prop">
-                                <td valign="top" class="groupHeader">Maintenance Actions</td>
+                                <td valign="top" class="groupHeader">Life Plan</td>
                                 
                                 <td  valign="top" style="text-align:left;" class="value">
@@ -117,13 +117,42 @@
                             </tr>
 
-                            
-                            <g:each var="m" in="${assetInstance.maintenanceActions}">
+                            <g:each var="t" in="${parentPMs}">
                                 <tr class="prop">
                                     <td valign="top" class="name"></td>
                                     
                                     <td  valign="top" style="text-align:left;" class="value">
-                                        <g:link controller="maintenanceActionDetailed" action="show" id="${m.id}">
-                                            ${m?.encodeAsHTML()}
+                                        <g:link controller="taskDetailed" action="show" id="${t.id}">
+                                            Task #${t.id}
                                         </g:link>
+                                        <g:if test="${t.approved}" >
+                                            <img  src="${resource(dir:'images/skin',file:'cog.png')}" alt="Approved" title="Approved" />
+                                        </g:if>
+                                        <g:if test="${t.taskRecurringSchedule?.enabled}" >
+                                            <img  src="${resource(dir:'images/skin',file:'arrow_refresh.png')}" alt="Recurrence Enabled" title="Recurrence Enabled" />
+                                        </g:if>
+                                        <g:if test="${t.taskStatus.id == 2}" >
+                                            <img  src="${resource(dir:'images/skin',file:'arrow_right.png')}" alt="In Progress" title="In Progress" />
+                                        </g:if>
+                                        <g:if test="${t.attentionFlag}" >
+                                            <img  src="${resource(dir:'images/skin',file:'flag_red.png')}" alt="Attention Flag" title="Attention Flag" />
+                                        </g:if>
+                                        <g:if test="${t.taskStatus.id == 3}" >
+                                            <img  src="${resource(dir:'images/skin',file:'tick.png')}" alt="Complete" title="Complete" />
+                                        </g:if>
+                                        <br />
+                                        ${fieldValue(bean:t, field:'description')}
+                                        <br />
+                                        <g:if test="${t.safetyRequirement}" >
+                                            <img  src="${resource(dir:'images/skin',file:'lightning.png')}" alt="Safety Requirement" title="Safety Requirement" />
+                                            Safety
+                                        </g:if>
+                                        <g:if test="${t.regulatoryRequirement}" >
+                                            <img  src="${resource(dir:'images/skin',file:'script_lightning.png')}" alt="Regulatory Requirement" title="Regulatory Requirement" />
+                                            Regulatory
+                                        </g:if>
+                                        <g:if test="${t.mandatoryRequirement}" >
+                                            <img  src="${resource(dir:'images/skin',file:'script.png')}" alt="Mandatory Requirement" title="Mandatory Requirement" />
+                                            Mandatory
+                                        </g:if>
                                     </td>
                                     
