Index: trunk/grails-app/controllers/EntryDetailedController.groovy
===================================================================
--- trunk/grails-app/controllers/EntryDetailedController.groovy	(revision 826)
+++ trunk/grails-app/controllers/EntryDetailedController.groovy	(revision 833)
@@ -31,8 +31,8 @@
         if(entryInstance) {
             if(entryInstance.enteredBy.loginName == authService.currentUser.loginName) {
-                def taskID = entryInstance.task.id
+                def taskId = entryInstance.task.id
                 entryInstance.delete(flush:true)
                 flash.message = "Entry ${params.id} deleted"
-                redirect(controller: 'taskDetailed', action: 'show', id: taskID)
+                redirect(controller: 'taskDetailed', action: 'show', id: taskId)
             }
             else {
@@ -94,6 +94,7 @@
     def ajaxCreate = {
         if(!params.taskId || !params.entryTypeId) {
-            flash.message = g.message(code:"entry.create.no.params")
-            redirect(controller:"taskDetailed", action:"search")
+            response.status = 403
+            params.errorMessage = g.message(code: "entry.create.no.params.ajax")
+            render(template: "/shared/messages")
             return
         }
@@ -102,6 +103,7 @@
 
         if(!taskInstance) {
-            flash.message = g.message(code:"task.notFound")
-            redirect(controller:"taskDetailed", action:"search")
+            response.status = 403
+            params.errorMessage = g.message(code:"default.not.found", args:['Task',params.taskId])
+            render(template: "/shared/messages")
             return
         }
@@ -109,9 +111,11 @@
         // Check for Complete task.
         if(taskInstance.taskStatus.id == 3) {
-            flash.errorMessage = g.message(code:"task.operationNotPermittedOnCompleteTask")
-            redirect(controller:"taskDetailed", action:"show", id: taskInstance.id)
+            response.status = 403
+            params.errorMessage = g.message(code:"task.operationNotPermittedOnCompleteTask")
+            render(template: "/shared/messages")
             return
         }
 
+        // Success.
         def entryInstance = new Entry()
         entryInstance.task = taskInstance
@@ -119,4 +123,30 @@
         render(template: "create", model: ['entryInstance': entryInstance])
     }
+
+    def ajaxSave = {
+        def result = taskService.saveEntry(params)
+
+        // Success.
+        if(!result.error) {
+            def entryList = Entry.withCriteria {
+                                                                eq("entryType", result.entryInstance.entryType)
+                                                                task {
+                                                                    idEq(result.taskId)
+                                                                }
+                                                        }
+            render(template: "list", model: ['entryList': entryList])
+            return
+        }
+
+        if(result.error.code != "default.create.failure") {
+            response.status = 403
+            params.errorMessage = g.message(code: result.error.code)
+            render(template: "/shared/messages")
+            return
+        }
+
+        response.status = 403
+        render(template: "create", model: ['entryInstance': result.entryInstance])
+    } // ajaxSave
 
     def create = {
Index: trunk/grails-app/controllers/TaskDetailedController.groovy
===================================================================
--- trunk/grails-app/controllers/TaskDetailedController.groovy	(revision 826)
+++ trunk/grails-app/controllers/TaskDetailedController.groovy	(revision 833)
@@ -424,4 +424,9 @@
                                                         }
 
+            def entryPMList = Entry.withCriteria {
+                                                                eq("entryType", EntryType.get(6))
+                                                                eq("task", taskInstance)
+                                                        }
+
             def subTaskInstanceList = Task.findAllByParentTaskAndTrash(taskInstance, false, params)
             def subTaskInstanceTotal = Task.countByParentTaskAndTrash(taskInstance, false)
@@ -450,4 +455,5 @@
                             entryCauseList: entryCauseList,
                             entryWorkDoneList: entryWorkDoneList,
+                            entryPMList: entryPMList,
                             taskProcedureRevision: taskProcedureRevision,
                             taskProcedureExits: taskProcedureExits,
