Index: trunk/grails-app/services/TaskService.groovy
===================================================================
--- trunk/grails-app/services/TaskService.groovy	(revision 851)
+++ trunk/grails-app/services/TaskService.groovy	(revision 873)
@@ -338,15 +338,8 @@
             }
 
-            if(!taskInstance)
-                return fail(field:"task", code:"task.notFound")
-
-            if(taskInstance.taskStatus.id == 3)
-                return fail(field:"task", code:"task.operationNotPermittedOnCompleteTask")
-
-            // Check for authorisation on recurring tasks.
-            if(taskInstance.taskRecurringSchedule) {
-                if(!authenticateService.ifAnyGranted('ROLE_AppAdmin,ROLE_Manager,ROLE_TaskManager'))
-                    return fail(field:"task", code:"task.operationNotPermittedOnRecurringTaskWithoutAuth")
-            }
+            // Check if we should create this entry.
+            def checkResult = checkCreateEntry(result.entryInstance)
+            if(checkResult.error)
+                return fail(field:"task", code: checkResult.error.code)
 
             if(result.entryInstance.hasErrors() || !result.entryInstance.save())
@@ -1065,3 +1058,41 @@
     } // end saveImmediateCallout()
 
+    /**
+    * Check if we should create an entry.
+    * @param entryInstance The entry to check.
+    * @returns A map containing result.error (if any error) and result.taskInstance.
+    */
+    def checkCreateEntry(entryInstance) {
+        def result = [:]
+
+        def fail = { Map m ->
+            result.error = [ code: m.code, args: [] ]
+            return result
+        }
+
+        def taskInstance = entryInstance.task
+        if(!taskInstance)
+            return fail(code:"task.notFound")
+
+        // Check for tashed task.
+        if(taskInstance.trash)
+            return fail(code:"task.operationNotPermittedOnTaskInTrash")
+
+        // Check for Complete task.
+        if(taskInstance.taskStatus.id == 3)
+            return fail(code: "task.operationNotPermittedOnCompleteTask")
+
+        // Check for recurring schedule.
+        if(taskInstance.taskRecurringSchedule)
+            return fail(code:"task.operationNotPermittedOnRecurringTask")
+
+        // Check for procedure and ensure we are creating a PM Entry.
+        if(taskInstance.taskProcedureRevision && (entryInstance.entryType.id != 6) )
+            return fail(code:"task.createEntryNotPermittedOnTaskWithProcedure")
+
+        // Success.
+        return result
+
+    } // checkCreateEntry()
+
 } // end TaskService
