Index: /trunk/grails-app/controllers/EntryDetailedController.groovy
===================================================================
--- /trunk/grails-app/controllers/EntryDetailedController.groovy	(revision 190)
+++ /trunk/grails-app/controllers/EntryDetailedController.groovy	(revision 191)
@@ -96,4 +96,5 @@
             def entryInstance = new Entry()
             entryInstance.task = taskInstance
+            entryInstance.entryType = EntryType.get(params.entryType.id)
             return ['entryInstance':entryInstance]
         }
Index: /trunk/grails-app/controllers/InventoryMovementDetailedController.groovy
===================================================================
--- /trunk/grails-app/controllers/InventoryMovementDetailedController.groovy	(revision 190)
+++ /trunk/grails-app/controllers/InventoryMovementDetailedController.groovy	(revision 191)
@@ -34,9 +34,11 @@
         else {
             if(result.inventoryMovementInstance) {
-                render(view:'show',model:[inventoryMovementInstance:result.inventoryMovementInstance])
+                // For some reason we have to call refresh() here to get a hibernate session
+                // and avoid a lazy initialisation error.
+                render(view:'show',model:[inventoryMovementInstance:result.inventoryMovementInstance.refresh()])
             }
             else {
                 flash.message = "Could not delete inventory movement."
-                redirect(controller:"taskDetailed", action:"search", id:result.taskId)
+                redirect(controller:"taskDetailed", action:"search")
             }
         }
Index: /trunk/grails-app/i18n/messages.properties
===================================================================
--- /trunk/grails-app/i18n/messages.properties	(revision 190)
+++ /trunk/grails-app/i18n/messages.properties	(revision 191)
@@ -26,4 +26,5 @@
 
 task.modifications.failedToSave=Could not complete operation, as task modification record failed to save.
+task.operationNotPermittedOnCompleteTask=This operation is not permitted on a complete task.
 
 task.assignedPersons=Assigned Persons
@@ -55,5 +56,4 @@
 entry.task.failedToSave=Could not complete operation, task failed to save.
 entry.task.failedToSaveTaskModification=Could not complete operation, task modification failed to save.
-entry.task.taskIsComplete=This operation is not permitted on a complete task.
 
 default.doesnt.match.message=Property [{0}] of class [{1}] with value [{2}] does not match the required pattern [{3}]
Index: /trunk/grails-app/services/InventoryMovementService.groovy
===================================================================
--- /trunk/grails-app/services/InventoryMovementService.groovy	(revision 190)
+++ /trunk/grails-app/services/InventoryMovementService.groovy	(revision 191)
@@ -6,29 +6,34 @@
         InventoryMovement.withTransaction { status ->
             def result = [:]
-            def inventoryMovementInstance = InventoryMovement.lock(params.id)
-            if(inventoryMovementInstance) {
-                def inventoryItem = InventoryItem.lock(inventoryMovementInstance.inventoryItem.id)
-                result.taskId = inventoryMovementInstance.task.id
+            result.inventoryMovementInstance = InventoryMovement.lock(params.id)
+            if(result.inventoryMovementInstance) {
+                def inventoryItem = InventoryItem.lock(result.inventoryMovementInstance.inventoryItem.id)
+                result.taskId = result.inventoryMovementInstance.task.id
 
                 if(!inventoryItem) {
                         status.setRollbackOnly()
-                        inventoryMovementInstance.errors.rejectValue('inventoryItem', "inventoryMovement.inventoryItem.notFound")
-                        result.inventoryMovementInstance = inventoryMovementInstance
+                        result.inventoryMovementInstance.errors.rejectValue('inventoryItem', "inventoryMovement.inventoryItem.notFound")
                         result.error = true
                         return result
                 }
 
+                if(result.inventoryMovementInstance.task.taskStatus.id == 3) {
+                    status.setRollbackOnly()
+                    result.inventoryMovementInstance.errors.rejectValue('task', "task.operationNotPermittedOnCompleteTask")
+                    result.error = true
+                    return result
+                }
+
                 // Reverse the movement of inventory.
-                if(!inventoryMovementInstance.inventoryMovementType.incrementsInventory) {
-                    inventoryItem.unitsInStock += inventoryMovementInstance.quantity
+                if(!result.inventoryMovementInstance.inventoryMovementType.incrementsInventory) {
+                    inventoryItem.unitsInStock += result.inventoryMovementInstance.quantity
                 }
                 else {
-                    if(inventoryItem.unitsInStock >= inventoryMovementInstance.quantity) {
-                        inventoryItem.unitsInStock -= inventoryMovementInstance.quantity
+                    if(inventoryItem.unitsInStock >= result.inventoryMovementInstance.quantity) {
+                        inventoryItem.unitsInStock -= result.inventoryMovementInstance.quantity
                     }
                     else {
                         status.setRollbackOnly()
-                        inventoryMovementInstance.errors.rejectValue('quantity', "inventoryMovement.quantity.insufficientItemsInStock")
-                        result.inventoryMovementInstance = inventoryMovementInstance
+                        result.inventoryMovementInstance.errors.rejectValue('quantity', "inventoryMovement.quantity.insufficientItemsInStock")
                         result.error = true
                         return result
@@ -37,5 +42,6 @@
 
                 if(inventoryItem.save() ) {
-                    inventoryMovementInstance.delete()
+                    // All went well if we get to this point.
+                    result.inventoryMovementInstance.delete()
                     return result
                 }
@@ -58,30 +64,35 @@
         InventoryMovement.withTransaction { status ->
             def result = [:]
-            def inventoryMovementInstance = new InventoryMovement(params)
+            result.inventoryMovementInstance = new InventoryMovement(params)
 
-            if(inventoryMovementInstance.validate()) {
-                def inventoryItem = InventoryItem.lock(inventoryMovementInstance.inventoryItem.id)
-                result.taskId = inventoryMovementInstance.task.id
+            if(result.inventoryMovementInstance.validate()) {
+                def inventoryItem = InventoryItem.lock(result.inventoryMovementInstance.inventoryItem.id)
+                result.taskId = result.inventoryMovementInstance.task.id
 
                 if(!inventoryItem) {
-                        status.setRollbackOnly()
-                        inventoryMovementInstance.errors.rejectValue('inventoryItem', "inventoryMovement.inventoryItem.notFound")
-                        result.inventoryMovementInstance = inventoryMovementInstance
-                        result.error = true
-                        return result
+                    status.setRollbackOnly()
+                    result.inventoryMovementInstance.errors.rejectValue('inventoryItem', "inventoryMovement.inventoryItem.notFound")
+                    result.error = true
+                    return result
+                }
+
+                if(result.inventoryMovementInstance.task.taskStatus.id == 3) {
+                    status.setRollbackOnly()
+                    result.inventoryMovementInstance.errors.rejectValue('task', "task.operationNotPermittedOnCompleteTask")
+                    result.error = true
+                    return result
                 }
 
                 // Perform the movement of inventory.
-                if(inventoryMovementInstance.inventoryMovementType.incrementsInventory) {
-                    inventoryItem.unitsInStock += inventoryMovementInstance.quantity
+                if(result.inventoryMovementInstance.inventoryMovementType.incrementsInventory) {
+                    inventoryItem.unitsInStock += result.inventoryMovementInstance.quantity
                 }
                 else {
-                    if(inventoryItem.unitsInStock >= inventoryMovementInstance.quantity) {
-                        inventoryItem.unitsInStock -= inventoryMovementInstance.quantity
+                    if(inventoryItem.unitsInStock >= result.inventoryMovementInstance.quantity) {
+                        inventoryItem.unitsInStock -= result.inventoryMovementInstance.quantity
                     }
                     else {
                         status.setRollbackOnly()
-                        inventoryMovementInstance.errors.rejectValue('quantity', "inventoryMovement.quantity.insufficientItemsInStock")
-                        result.inventoryMovementInstance = inventoryMovementInstance
+                        result.inventoryMovementInstance.errors.rejectValue('quantity', "inventoryMovement.quantity.insufficientItemsInStock")
                         result.error = true
                         return result
@@ -89,11 +100,10 @@
                 }
 
-                if(inventoryItem.save() && inventoryMovementInstance.save()) {
-                    result.inventoryMovementInstance = inventoryMovementInstance
+                if(inventoryItem.save() && result.inventoryMovementInstance.save()) {
+                    // All went well if we get to this point.
                     return result
                 }
                 else {
                     status.setRollbackOnly()
-                    result.inventoryMovementInstance = inventoryMovementInstance
                     result.error = true
                     return result
@@ -102,5 +112,4 @@
             }
             else {
-                result.inventoryMovementInstance = inventoryMovementInstance
                 result.error = true
                 return result
Index: /trunk/grails-app/services/TaskService.groovy
===================================================================
--- /trunk/grails-app/services/TaskService.groovy	(revision 190)
+++ /trunk/grails-app/services/TaskService.groovy	(revision 191)
@@ -55,5 +55,5 @@
                 if(taskInstance.taskStatus.id == 3) {
                     status.setRollbackOnly()
-                    result.entryInstance.errors.rejectValue('task', "entry.task.taskIsComplete")
+                    result.entryInstance.errors.rejectValue('task', "task.operationNotPermittedOnCompleteTask")
                     result.error = true
                     return result
Index: /trunk/grails-app/views/entryDetailed/create.gsp
===================================================================
--- /trunk/grails-app/views/entryDetailed/create.gsp	(revision 190)
+++ /trunk/grails-app/views/entryDetailed/create.gsp	(revision 191)
@@ -24,4 +24,5 @@
             <g:form action="save" method="post" >
                 <g:hiddenField name="task.id" value="${entryInstance.task.id}" />
+                <g:hiddenField name="entryType.id" value="${entryInstance.entryType.id}" />
                 <div class="dialog">
                     <table>
@@ -33,11 +34,13 @@
                                 </td>
                                 <td valign="top" class="name">
-                                    ${entryInstance?.task}
+                                    <g:link controller="taskDetailed" action="show" id="${entryInstance.task.id}" >
+                                        ${entryInstance?.task}
+                                    </g:link>
                                 </td>
-                            </tr> 
+                            </tr>
                         
                             <tr class="prop">
                                 <td valign="top" class="name">
-                                    <label for="comment">Comment:</label>
+                                    <label for="comment">${entryInstance?.entryType}:</label>
                                 </td>
                                 <td valign="top" class="value ${hasErrors(bean:entryInstance,field:'comment','errors')}">
@@ -71,13 +74,4 @@
                                 </td> 
                             </tr>
-                     
-                            <tr class="prop">
-                                <td valign="top" class="name">
-                                    <label for="entryType">Entry Type:</label>
-                                </td>
-                                <td valign="top" class="value ${hasErrors(bean:entryInstance,field:'entryType','errors')}">
-                                    <g:select optionKey="id" from="${EntryType.list()}" name="entryType.id" value="${entryInstance?.entryType?.id}" ></g:select>
-                                </td>
-                            </tr> 
                         
                         </tbody>
Index: /trunk/grails-app/views/inventoryMovementDetailed/create.gsp
===================================================================
--- /trunk/grails-app/views/inventoryMovementDetailed/create.gsp	(revision 190)
+++ /trunk/grails-app/views/inventoryMovementDetailed/create.gsp	(revision 191)
@@ -59,6 +59,8 @@
                                     </td>
                                     <td valign="top" name="inventoryMovementInstance.task" class="value">
-                                        <input type="hidden" id="task.id" name="task.id" value="${inventoryMovementInstance.task.id}" />
-                                        ${inventoryMovementInstance.task}
+                                        <g:hiddenField name="task.id" value="${inventoryMovementInstance.task.id}" />
+                                        <g:link controller="taskDetailed" action="show" id="${inventoryMovementInstance.task.id}" >
+                                            ${inventoryMovementInstance.task}
+                                        </g:link>
                                     </td>
                                 </tr>
Index: /trunk/grails-app/views/taskDetailed/show.gsp
===================================================================
--- /trunk/grails-app/views/taskDetailed/show.gsp	(revision 190)
+++ /trunk/grails-app/views/taskDetailed/show.gsp	(revision 191)
@@ -231,77 +231,102 @@
                         </div>
 
-                        <div class="list">
-                            <h1>Faults</h1>
-                            <table>
-                                <thead>
-                                    <tr>
-                                        <th>Comment</th>
-                                        <th>Date Done</th>
-                                        <th>Duration</th>
-                                        <th>Entered By</th>
-                                        <th></th>
-                                    </tr>
-                                </thead>
-                                <tbody>
-                                <g:each in="${entryFaultList}" status="i" var="entry">
-                                        <tr class="${(i % 2) == 0 ? 'clickableOdd' : 'clickableEven'}" onclick='window.location = "${request.getContextPath()}/entryDetailed/edit/${entry.id}"'/>
-
-                                            <td style="width:65%">${entry.comment}</td>
-                                            <td><g:formatDate date="${entry.dateDone}" format="EEE, dd-MMM-yyyy"/></td>
-                                            <td>${entry.durationHour}:${entry.durationMinute}</td>
-                                            <td>${entry.enteredBy}</td>
-
-                                            <td>
-                                                <g:link controller="entryDetailed" action="edit" id="${entry.id}">
-                                                    <img  src="${resource(dir:'images/skin',file:'database_edit.png')}" alt="Edit" />
-                                                </g:link>
-                                            </td>
-
-                                        </tr>
-                                </g:each>
-                                </tbody>
-                            </table>
-                        </div>
-
-                        <div class="list">
-                            <h1>Work Done</h1>
-                            <table>
-                                <thead>
-                                    <tr>
-                                        <th>Comment</th>
-                                        <th>Date Done</th>
-                                        <th>Duration</th>
-                                        <th>Entered By</th>
-                                        <th></th>
-                                    </tr>
-                                </thead>
-                                <tbody>
-                                <g:each in="${entryWorkDoneList}" status="i" var="entry">
-                                        <tr class="${(i % 2) == 0 ? 'clickableOdd' : 'clickableEven'}" onclick='window.location = "${request.getContextPath()}/entryDetailed/edit/${entry.id}"'/>
-
-                                            <td width="65%">${entry.comment}</td>
-                                            <td><g:formatDate date="${entry.dateDone}" format="EEE, dd-MMM-yyyy"/></td>
-                                            <td>${entry.durationHour}:${entry.durationMinute}</td>
-                                            <td>${entry.enteredBy}</td>
-
-                                            <td>
-                                                <g:link controller="entryDetailed" action="edit" id="${entry.id}">
-                                                    <img  src="${resource(dir:'images/skin',file:'database_edit.png')}" alt="Edit" />
-                                                </g:link>
-                                            </td>
-
-                                        </tr>
-                                </g:each>
-                                </tbody>
-                            </table>
-                        </div>
-
                         <br />
+
+                        <g:if test="${entryFaultList.isEmpty()}">
+                            <h1>No Faults</h1>
+                            <br />
+                        </g:if>
+                        <g:else>
+                            <div class="list">
+                                <h1>Faults</h1>
+                                <table>
+                                    <thead>
+                                        <tr>
+                                            <th>Comment</th>
+                                            <th>Date Done</th>
+                                            <th>Duration</th>
+                                            <th>Entered By</th>
+                                            <th></th>
+                                        </tr>
+                                    </thead>
+                                    <tbody>
+                                        <g:each in="${entryFaultList}" status="i" var="entry">
+                                                <tr class="${(i % 2) == 0 ? 'clickableOdd' : 'clickableEven'}" onclick='window.location = "${request.getContextPath()}/entryDetailed/edit/${entry.id}"'/>
+
+                                                    <td style="width:65%">${entry.comment}</td>
+                                                    <td><g:formatDate date="${entry.dateDone}" format="EEE, dd-MMM-yyyy"/></td>
+                                                    <td>${entry.durationHour}:${entry.durationMinute}</td>
+                                                    <td>${entry.enteredBy}</td>
+
+                                                    <td>
+                                                        <g:link controller="entryDetailed" action="edit" id="${entry.id}">
+                                                            <img  src="${resource(dir:'images/skin',file:'database_edit.png')}" alt="Edit" />
+                                                        </g:link>
+                                                    </td>
+
+                                                </tr>
+                                        </g:each>
+                                    </tbody>
+                                </table>
+                            </div>
+                        </g:else>
 
                         <div class="buttons">
                             <g:form controller="entryDetailed">
-                                <input type="hidden" name="taskInstance.id" value="${taskInstance?.id}" />
+                                <g:hiddenField name="taskInstance.id" value="${taskInstance?.id}" />
+                                <g:hiddenField name="entryType.id" value="1" />
                                 <span class="button">
-                                    <g:actionSubmit value="Add Entry" action="create"  class="add"/>
+                                    <g:actionSubmit value="Add Fault" action="create"  class="add"/>
+                                </span>
+                            </g:form>
+                        </div>
+
+                        <br />
+
+                        <g:if test="${entryWorkDoneList.isEmpty()}">
+                            <h1>No Work Done</h1>
+                            <br />
+                        </g:if>
+                        <g:else>
+                            <div class="list">
+                                <h1>Work Done</h1>
+                                <table>
+                                    <thead>
+                                        <tr>
+                                            <th>Comment</th>
+                                            <th>Date Done</th>
+                                            <th>Duration</th>
+                                            <th>Entered By</th>
+                                            <th></th>
+                                        </tr>
+                                    </thead>
+                                    <tbody>
+                                        <g:each in="${entryWorkDoneList}" status="i" var="entry">
+                                                <tr class="${(i % 2) == 0 ? 'clickableOdd' : 'clickableEven'}" onclick='window.location = "${request.getContextPath()}/entryDetailed/edit/${entry.id}"'/>
+
+                                                    <td width="65%">${entry.comment}</td>
+                                                    <td><g:formatDate date="${entry.dateDone}" format="EEE, dd-MMM-yyyy"/></td>
+                                                    <td>${entry.durationHour}:${entry.durationMinute}</td>
+                                                    <td>${entry.enteredBy}</td>
+
+                                                    <td>
+                                                        <g:link controller="entryDetailed" action="edit" id="${entry.id}">
+                                                            <img  src="${resource(dir:'images/skin',file:'database_edit.png')}" alt="Edit" />
+                                                        </g:link>
+                                                    </td>
+
+                                                </tr>
+                                        </g:each>
+                                    </tbody>
+                                </table>
+                            </div>
+                        </g:else>
+
+                        <div class="buttons">
+                            <g:form controller="entryDetailed">
+                                <g:hiddenField name="taskInstance.id" value="${taskInstance?.id}" />
+                                <g:hiddenField name="entryType.id" value="2" />
+                                <span class="button">
+                                    <g:actionSubmit value="Add Work Done" action="create"  class="add"/>
                                 </span>
                             </g:form>
