Index: trunk/grails-app/controllers/TaskDetailedController.groovy
===================================================================
--- trunk/grails-app/controllers/TaskDetailedController.groovy	(revision 180)
+++ trunk/grails-app/controllers/TaskDetailedController.groovy	(revision 181)
@@ -11,6 +11,6 @@
     def exportService
 
-    // the delete, save and update actions only accept POST requests
-    static allowedMethods = [delete:'POST', save:'POST', update:'POST']
+    // these actions only accept POST requests
+    static allowedMethods = [save:'POST', update:'POST', restore:'POST', trash:'POST', approve:'POST', renegeApproval:'POST', complete:'POST', reopen:'POST']
 
     def index = { redirect(action:search,params:params) }
@@ -223,21 +223,152 @@
     }
 
-    def delete = {
-        def taskInstance = Task.get( params.id )
-        if(taskInstance) {
-            try {
-                taskInstance.isActive = false
-                flash.message = "Task ${params.id} has been set to inactive."
-                redirect(action:search)
-            }
-            catch(org.springframework.dao.DataIntegrityViolationException e) {
-                flash.message = "Task ${params.id} could not be deleted"
-                redirect(action:show,id:params.id)
-            }
-        }
-        else {
+    def restore = {
+
+        if(!Task.exists(params.id)) {
             flash.message = "Task not found with id ${params.id}"
-            redirect(action:search)
-        }
+            redirect(action:'search')
+        }
+
+        def result = taskService.restore(params)
+
+        if(!result.error) {
+                flash.message = "Task ${params.id} has been restored."
+                redirect(action:show,id:result.taskInstance.id)
+        }
+        else {
+            if(result.taskInstance) {
+                render(view:'edit',model:[taskInstance:result.taskInstance])
+            }
+            else {
+                flash.message = "Task could not be updated."
+                redirect(action:'search')
+            }
+        }
+
+    }
+
+    def trash = {
+
+        if(!Task.exists(params.id)) {
+            flash.message = "Task not found with id ${params.id}."
+            redirect(action:'search')
+        }
+
+        def result = taskService.trash(params)
+
+        if(!result.error) {
+                flash.message = "Task ${params.id} has been moved to trash."
+                redirect(action:'search')
+        }
+        else {
+            if(result.taskInstance) {
+                render(view:'edit',model:[taskInstance:result.taskInstance])
+            }
+            else {
+                flash.message = "Task could not be updated."
+                redirect(action:'search')
+            }
+        }
+
+    }
+
+    def approve = {
+
+        if(!Task.exists(params.id)) {
+            flash.message = "Task not found with id ${params.id}."
+            redirect(action:'search')
+        }
+
+        def result = taskService.approve(params)
+
+        if(!result.error) {
+                flash.message = "Task ${params.id} has been approved."
+                redirect(action:show,id:result.taskInstance.id)
+        }
+        else {
+            if(result.taskInstance) {
+                render(view:'edit',model:[taskInstance:result.taskInstance])
+            }
+            else {
+                flash.message = "Task could not be updated."
+                redirect(action:'search')
+            }
+        }
+
+    }
+
+    def renegeApproval = {
+
+        if(!Task.exists(params.id)) {
+            flash.message = "Task not found with id ${params.id}."
+            redirect(action:'search')
+        }
+
+        def result = taskService.renegeApproval(params)
+
+        if(!result.error) {
+                flash.message = "Task ${params.id} has had approval removed."
+                redirect(action:show,id:result.taskInstance.id)
+        }
+        else {
+            if(result.taskInstance) {
+                render(view:'edit',model:[taskInstance:result.taskInstance])
+            }
+            else {
+                flash.message = "Task could not be updated."
+                redirect(action:'search')
+            }
+        }
+
+    }
+
+    def complete = {
+
+        if(!Task.exists(params.id)) {
+            flash.message = "Task not found with id ${params.id}."
+            redirect(action:'search')
+        }
+
+        def result = taskService.complete(params)
+
+        if(!result.error) {
+                flash.message = "Task ${params.id} has been completed."
+                redirect(action:show,id:result.taskInstance.id)
+        }
+        else {
+            if(result.taskInstance) {
+                render(view:'edit',model:[taskInstance:result.taskInstance])
+            }
+            else {
+                flash.message = "Task could not be updated."
+                redirect(action:'search')
+            }
+        }
+
+    }
+
+    def reopen = {
+
+        if(!Task.exists(params.id)) {
+            flash.message = "Task not found with id ${params.id}."
+            redirect(action:'search')
+        }
+
+        def result = taskService.reopen(params)
+
+        if(!result.error) {
+                flash.message = "Task ${params.id} has been reopened."
+                redirect(action:show,id:result.taskInstance.id)
+        }
+        else {
+            if(result.taskInstance) {
+                render(view:'edit',model:[taskInstance:result.taskInstance])
+            }
+            else {
+                flash.message = "Task could not be updated."
+                redirect(action:'search')
+            }
+        }
+
     }
 
@@ -255,4 +386,8 @@
         }
         else {
+            if(taskInstance.trash) {
+                flash.message = "You may not edit items in the trash."
+                redirect(action:show,id:taskInstance.id)
+            }
             def criteria = taskInstance.createCriteria()
             def possibleParentList = criteria {
@@ -320,4 +455,6 @@
     def create = {
         def taskInstance = new Task()
+        // Default leadPerson to current user.
+        taskInstance.leadPerson = Person.get(authenticateService.userDomain().id)
         taskInstance.properties = params
         return ['taskInstance':taskInstance]
Index: trunk/grails-app/domain/Task.groovy
===================================================================
--- trunk/grails-app/domain/Task.groovy	(revision 180)
+++ trunk/grails-app/domain/Task.groovy	(revision 181)
@@ -15,7 +15,7 @@
     Date targetStartDate = new Date()
     Date targetCompletionDate = new Date()
-    boolean isScheduled = false
-    boolean isApproved = false
-    boolean isActive = true
+    boolean scheduled = false
+    boolean approved = false
+    boolean trash = false
 
     static hasMany = [entries: Entry, 
Index: trunk/grails-app/i18n/messages.properties
===================================================================
--- trunk/grails-app/i18n/messages.properties	(revision 180)
+++ trunk/grails-app/i18n/messages.properties	(revision 181)
@@ -114,7 +114,7 @@
 fp.property.text.associatedAssets.name=Associated Asset
 fp.property.text.primaryAsset.name=Primary Asset
-fp.property.text.isActive=Active
-fp.property.text.isScheduled=Scheduled
-fp.property.text.isApproved=Approved
+fp.property.text.trash=Trash
+fp.property.text.scheduled=Scheduled
+fp.property.text.approved=Approved
 fp.property.text.isObsolete=Obsolete
 fp.property.text.taskGroup.name=Group
Index: trunk/grails-app/services/CreateDataService.groovy
===================================================================
--- trunk/grails-app/services/CreateDataService.groovy	(revision 180)
+++ trunk/grails-app/services/CreateDataService.groovy	(revision 181)
@@ -410,11 +410,11 @@
         def taskStatusInstance
 
-        taskStatusInstance = new TaskStatus(name:"Not Started")
+        taskStatusInstance = new TaskStatus(name:"Not Started") // #1
         saveAndTest(taskStatusInstance)
 
-        taskStatusInstance = new TaskStatus(name:"In Progress")
+        taskStatusInstance = new TaskStatus(name:"In Progress") // #2
         saveAndTest(taskStatusInstance)
 
-        taskStatusInstance = new TaskStatus(name:"Completed")
+        taskStatusInstance = new TaskStatus(name:"Completed") // #3
         saveAndTest(taskStatusInstance)
     }
Index: trunk/grails-app/services/TaskSearchService.groovy
===================================================================
--- trunk/grails-app/services/TaskSearchService.groovy	(revision 180)
+++ trunk/grails-app/services/TaskSearchService.groovy	(revision 181)
@@ -19,5 +19,5 @@
                 ge("targetStartDate", dateUtilService.getToday())
                 lt("targetStartDate", dateUtilService.getTomorrow())
-                eq("isActive", true)
+                eq("trash", false)
             }
     }
@@ -37,5 +37,5 @@
                 ge("targetStartDate", dateUtilService.getToday())
                 lt("targetStartDate", dateUtilService.getTomorrow())
-                eq("isActive", true)
+                eq("trash", false)
             }
     }
@@ -54,5 +54,5 @@
                 ge("targetStartDate", dateUtilService.getToday()-7)
                 lt("targetStartDate", dateUtilService.getTomorrow())
-                eq("isActive", true)
+                eq("trash", false)
             }
     }
@@ -72,5 +72,5 @@
                 ge("targetStartDate", dateUtilService.getToday()-7)
                 lt("targetStartDate", dateUtilService.getTomorrow())
-                eq("isActive", true)
+                eq("trash", false)
             }
     }
@@ -90,5 +90,5 @@
                 ge("targetStartDate", dateUtilService.getToday()-7)
                 lt("targetStartDate", dateUtilService.getTomorrow())
-                eq("isActive", true)
+                eq("trash", false)
             }
     }
@@ -108,5 +108,5 @@
                 ge("targetStartDate", dateUtilService.getToday()-7)
                 lt("targetStartDate", dateUtilService.getTomorrow())
-                eq("isActive", true)
+                eq("trash", false)
             }
     }
Index: trunk/grails-app/services/TaskService.groovy
===================================================================
--- trunk/grails-app/services/TaskService.groovy	(revision 180)
+++ trunk/grails-app/services/TaskService.groovy	(revision 181)
@@ -9,4 +9,6 @@
         Task.withTransaction { status ->
             def result = [:]
+            // Default status to "not started" if not supplied.
+            params.taskStatus = params.taskStatus ?: TaskStatus.get(1)
             def taskInstance = new Task(params)
             result.taskInstance = taskInstance
@@ -59,5 +61,4 @@
                 }
 
-
                 result.taskInstance.properties = params
 
@@ -86,26 +87,260 @@
     }  // end update()
 
-    def complete() {
-        //TaskModificationType.get(4)
+    def complete(params) {
+        Task.withTransaction { status ->
+            def result = [:]
+            result.taskInstance = Task.get(params.id)
+            if(result.taskInstance) {
+
+                // Optimistic locking check.
+                if(params.version) {
+                    def version = params.version.toLong()
+                    if(result.taskInstance.version > version) {
+                        status.setRollbackOnly()
+                        result.taskInstance.errors.rejectValue("version", "task.optimistic.locking.failure", "Another user has updated this Task while you were editing.")
+                        result.error = true
+                        return result
+                    }
+                }
+
+                result.taskInstance.taskStatus = TaskStatus.get(3)
+
+                if(result.taskInstance.save()) {
+                    def taskModification = new TaskModification(person:Person.get(authenticateService.userDomain().id),
+                                                            taskModificationType: TaskModificationType.get(4),
+                                                            task: result.taskInstance)
+                    if(taskModification.save()) {
+                        // All went well.
+                        return result
+                    }
+                    else {
+                        status.setRollbackOnly()
+                        result.taskInstance.errors.rejectValue("taskModifications", "task.modifications.failedToSave")
+                        result.error = true
+                        return result
+                    }
+                }
+            }
+            // Something failed.
+            status.setRollbackOnly()
+            result.error = true
+            return result
+
+        } //end withTransaction
     }  // end complete()
 
-    def reopen() {
-        //TaskModificationType.get(5)
+    def reopen(params) {
+        Task.withTransaction { status ->
+            def result = [:]
+            result.taskInstance = Task.get(params.id)
+            if(result.taskInstance) {
+
+                // Optimistic locking check.
+                if(params.version) {
+                    def version = params.version.toLong()
+                    if(result.taskInstance.version > version) {
+                        status.setRollbackOnly()
+                        result.taskInstance.errors.rejectValue("version", "task.optimistic.locking.failure", "Another user has updated this Task while you were editing.")
+                        result.error = true
+                        return result
+                    }
+                }
+
+                result.taskInstance.taskStatus = TaskStatus.get(2)
+
+                if(result.taskInstance.save()) {
+                    def taskModification = new TaskModification(person:Person.get(authenticateService.userDomain().id),
+                                                            taskModificationType: TaskModificationType.get(5),
+                                                            task: result.taskInstance)
+                    if(taskModification.save()) {
+                        // All went well.
+                        return result
+                    }
+                    else {
+                        status.setRollbackOnly()
+                        result.taskInstance.errors.rejectValue("taskModifications", "task.modifications.failedToSave")
+                        result.error = true
+                        return result
+                    }
+                }
+            }
+            // Something failed.
+            status.setRollbackOnly()
+            result.error = true
+            return result
+
+        } //end withTransaction
     }  // end reopen()
 
-    def trash() {
-        //TaskModificationType.get(6)
+    def trash(params) {
+        Task.withTransaction { status ->
+            def result = [:]
+            result.taskInstance = Task.get(params.id)
+            if(result.taskInstance) {
+
+                // Optimistic locking check.
+                if(params.version) {
+                    def version = params.version.toLong()
+                    if(result.taskInstance.version > version) {
+                        status.setRollbackOnly()
+                        result.taskInstance.errors.rejectValue("version", "task.optimistic.locking.failure", "Another user has updated this Task while you were editing.")
+                        result.error = true
+                        return result
+                    }
+                }
+
+                result.taskInstance.trash = true
+
+                if(result.taskInstance.save()) {
+                    def taskModification = new TaskModification(person:Person.get(authenticateService.userDomain().id),
+                                                            taskModificationType: TaskModificationType.get(6),
+                                                            task: result.taskInstance)
+                    if(taskModification.save()) {
+                        // All went well.
+                        return result
+                    }
+                    else {
+                        status.setRollbackOnly()
+                        result.taskInstance.errors.rejectValue("taskModifications", "task.modifications.failedToSave")
+                        result.error = true
+                        return result
+                    }
+                }
+            }
+            // Something failed.
+            status.setRollbackOnly()
+            result.error = true
+            return result
+
+        } //end withTransaction
     }  // end trash()
 
-    def restore() {
-        //TaskModificationType.get(7)
+    def restore(params) {
+        Task.withTransaction { status ->
+            def result = [:]
+            result.taskInstance = Task.get(params.id)
+            if(result.taskInstance) {
+
+                // Optimistic locking check.
+                if(params.version) {
+                    def version = params.version.toLong()
+                    if(result.taskInstance.version > version) {
+                        status.setRollbackOnly()
+                        result.taskInstance.errors.rejectValue("version", "task.optimistic.locking.failure", "Another user has updated this Task while you were editing.")
+                        result.error = true
+                        return result
+                    }
+                }
+
+                result.taskInstance.trash = false
+
+                if(result.taskInstance.save()) {
+                    def taskModification = new TaskModification(person:Person.get(authenticateService.userDomain().id),
+                                                            taskModificationType: TaskModificationType.get(7),
+                                                            task: result.taskInstance)
+                    if(taskModification.save()) {
+                        // All went well.
+                        return result
+                    }
+                    else {
+                        status.setRollbackOnly()
+                        result.taskInstance.errors.rejectValue("taskModifications", "task.modifications.failedToSave")
+                        result.error = true
+                        return result
+                    }
+                }
+            }
+            // Something failed.
+            status.setRollbackOnly()
+            result.error = true
+            return result
+
+        } //end withTransaction
     }  // end restore()
 
-    def approve() {
-        //TaskModificationType.get(8)
+    def approve(params) {
+        Task.withTransaction { status ->
+            def result = [:]
+            result.taskInstance = Task.get(params.id)
+            if(result.taskInstance) {
+
+                // Optimistic locking check.
+                if(params.version) {
+                    def version = params.version.toLong()
+                    if(result.taskInstance.version > version) {
+                        status.setRollbackOnly()
+                        result.taskInstance.errors.rejectValue("version", "task.optimistic.locking.failure", "Another user has updated this Task while you were editing.")
+                        result.error = true
+                        return result
+                    }
+                }
+
+                result.taskInstance.approved = true
+
+                if(result.taskInstance.save()) {
+                    def taskModification = new TaskModification(person:Person.get(authenticateService.userDomain().id),
+                                                            taskModificationType: TaskModificationType.get(8),
+                                                            task: result.taskInstance)
+                    if(taskModification.save()) {
+                        // All went well.
+                        return result
+                    }
+                    else {
+                        status.setRollbackOnly()
+                        result.taskInstance.errors.rejectValue("taskModifications", "task.modifications.failedToSave")
+                        result.error = true
+                        return result
+                    }
+                }
+            }
+            // Something failed.
+            status.setRollbackOnly()
+            result.error = true
+            return result
+
+        } //end withTransaction
     }  // end approve()
 
-    def renegeApproval() {
-        //TaskModificationType.get(9)
+    def renegeApproval(params) {
+        Task.withTransaction { status ->
+            def result = [:]
+            result.taskInstance = Task.get(params.id)
+            if(result.taskInstance) {
+
+                // Optimistic locking check.
+                if(params.version) {
+                    def version = params.version.toLong()
+                    if(result.taskInstance.version > version) {
+                        status.setRollbackOnly()
+                        result.taskInstance.errors.rejectValue("version", "task.optimistic.locking.failure", "Another user has updated this Task while you were editing.")
+                        result.error = true
+                        return result
+                    }
+                }
+
+                result.taskInstance.approved = false
+
+                if(result.taskInstance.save()) {
+                    def taskModification = new TaskModification(person:Person.get(authenticateService.userDomain().id),
+                                                            taskModificationType: TaskModificationType.get(9),
+                                                            task: result.taskInstance)
+                    if(taskModification.save()) {
+                        // All went well.
+                        return result
+                    }
+                    else {
+                        status.setRollbackOnly()
+                        result.taskInstance.errors.rejectValue("taskModifications", "task.modifications.failedToSave")
+                        result.error = true
+                        return result
+                    }
+                }
+            }
+            // Something failed.
+            status.setRollbackOnly()
+            result.error = true
+            return result
+
+        } //end withTransaction
     }  // end renegeApproval()
 
Index: trunk/grails-app/views/_about.gsp
===================================================================
--- trunk/grails-app/views/_about.gsp	(revision 180)
+++ trunk/grails-app/views/_about.gsp	(revision 181)
@@ -63,6 +63,9 @@
         <tbody>
             <tr class="prop">
-                <td valign="top" class="name">Silk icon set acknowledgement.</td>
-                <td></td>
+                <td valign="top" class="name">
+                    Silk icon set acknowledgement.<br />
+                    Many thanks for the fabulous silk icon set.
+                </td>
+
 
             </tr>
Index: trunk/grails-app/views/task/create.gsp
===================================================================
--- trunk/grails-app/views/task/create.gsp	(revision 180)
+++ trunk/grails-app/views/task/create.gsp	(revision 181)
@@ -127,8 +127,8 @@
                             <tr class="prop">
                                 <td valign="top" class="name">
-                                    <label for="isActive">Is Active:</label>
+                                    <label for="approved">Approved:</label>
                                 </td>
-                                <td valign="top" class="value ${hasErrors(bean:taskInstance,field:'isActive','errors')}">
-                                    <g:checkBox name="isActive" value="${taskInstance?.isActive}" ></g:checkBox>
+                                <td valign="top" class="value ${hasErrors(bean:taskInstance,field:'approved','errors')}">
+                                    <g:checkBox name="approved" value="${taskInstance?.approved}" ></g:checkBox>
                                 </td>
                             </tr> 
@@ -136,17 +136,8 @@
                             <tr class="prop">
                                 <td valign="top" class="name">
-                                    <label for="isApproved">Is Approved:</label>
+                                    <label for="scheduled">Scheduled:</label>
                                 </td>
-                                <td valign="top" class="value ${hasErrors(bean:taskInstance,field:'isApproved','errors')}">
-                                    <g:checkBox name="isApproved" value="${taskInstance?.isApproved}" ></g:checkBox>
-                                </td>
-                            </tr> 
-                        
-                            <tr class="prop">
-                                <td valign="top" class="name">
-                                    <label for="isScheduled">Is Scheduled:</label>
-                                </td>
-                                <td valign="top" class="value ${hasErrors(bean:taskInstance,field:'isScheduled','errors')}">
-                                    <g:checkBox name="isScheduled" value="${taskInstance?.isScheduled}" ></g:checkBox>
+                                <td valign="top" class="value ${hasErrors(bean:taskInstance,field:'scheduled','errors')}">
+                                    <g:checkBox name="scheduled" value="${taskInstance?.scheduled}" ></g:checkBox>
                                 </td>
                             </tr> 
@@ -170,4 +161,13 @@
                             </tr> 
                         
+                            <tr class="prop">
+                                <td valign="top" class="name">
+                                    <label for="trash">Trash:</label>
+                                </td>
+                                <td valign="top" class="value ${hasErrors(bean:taskInstance,field:'trash','errors')}">
+                                    <g:checkBox name="trash" value="${taskInstance?.trash}" ></g:checkBox>
+                                </td>
+                            </tr> 
+                        
                         </tbody>
                     </table>
Index: trunk/grails-app/views/task/edit.gsp
===================================================================
--- trunk/grails-app/views/task/edit.gsp	(revision 180)
+++ trunk/grails-app/views/task/edit.gsp	(revision 181)
@@ -130,4 +130,13 @@
                             <tr class="prop">
                                 <td valign="top" class="name">
+                                    <label for="approved">Approved:</label>
+                                </td>
+                                <td valign="top" class="value ${hasErrors(bean:taskInstance,field:'approved','errors')}">
+                                    <g:checkBox name="approved" value="${taskInstance?.approved}" ></g:checkBox>
+                                </td>
+                            </tr> 
+                        
+                            <tr class="prop">
+                                <td valign="top" class="name">
                                     <label for="assignedPersons">Assigned Persons:</label>
                                 </td>
@@ -191,26 +200,8 @@
                             <tr class="prop">
                                 <td valign="top" class="name">
-                                    <label for="isActive">Is Active:</label>
-                                </td>
-                                <td valign="top" class="value ${hasErrors(bean:taskInstance,field:'isActive','errors')}">
-                                    <g:checkBox name="isActive" value="${taskInstance?.isActive}" ></g:checkBox>
-                                </td>
-                            </tr> 
-                        
-                            <tr class="prop">
-                                <td valign="top" class="name">
-                                    <label for="isApproved">Is Approved:</label>
-                                </td>
-                                <td valign="top" class="value ${hasErrors(bean:taskInstance,field:'isApproved','errors')}">
-                                    <g:checkBox name="isApproved" value="${taskInstance?.isApproved}" ></g:checkBox>
-                                </td>
-                            </tr> 
-                        
-                            <tr class="prop">
-                                <td valign="top" class="name">
-                                    <label for="isScheduled">Is Scheduled:</label>
-                                </td>
-                                <td valign="top" class="value ${hasErrors(bean:taskInstance,field:'isScheduled','errors')}">
-                                    <g:checkBox name="isScheduled" value="${taskInstance?.isScheduled}" ></g:checkBox>
+                                    <label for="scheduled">Scheduled:</label>
+                                </td>
+                                <td valign="top" class="value ${hasErrors(bean:taskInstance,field:'scheduled','errors')}">
+                                    <g:checkBox name="scheduled" value="${taskInstance?.scheduled}" ></g:checkBox>
                                 </td>
                             </tr> 
@@ -263,4 +254,13 @@
                                 <td valign="top" class="value ${hasErrors(bean:taskInstance,field:'taskType','errors')}">
                                     <g:select optionKey="id" from="${TaskType.list()}" name="taskType.id" value="${taskInstance?.taskType?.id}" ></g:select>
+                                </td>
+                            </tr> 
+                        
+                            <tr class="prop">
+                                <td valign="top" class="name">
+                                    <label for="trash">Trash:</label>
+                                </td>
+                                <td valign="top" class="value ${hasErrors(bean:taskInstance,field:'trash','errors')}">
+                                    <g:checkBox name="trash" value="${taskInstance?.trash}" ></g:checkBox>
                                 </td>
                             </tr> 
Index: trunk/grails-app/views/task/show.gsp
===================================================================
--- trunk/grails-app/views/task/show.gsp	(revision 180)
+++ trunk/grails-app/views/task/show.gsp	(revision 181)
@@ -107,4 +107,11 @@
                     
                         <tr class="prop">
+                            <td valign="top" class="name">Approved:</td>
+                            
+                            <td valign="top" class="value">${fieldValue(bean:taskInstance, field:'approved')}</td>
+                            
+                        </tr>
+                    
+                        <tr class="prop">
                             <td valign="top" class="name">Assigned Persons:</td>
                             
@@ -159,21 +166,7 @@
                     
                         <tr class="prop">
-                            <td valign="top" class="name">Is Active:</td>
-                            
-                            <td valign="top" class="value">${fieldValue(bean:taskInstance, field:'isActive')}</td>
-                            
-                        </tr>
-                    
-                        <tr class="prop">
-                            <td valign="top" class="name">Is Approved:</td>
-                            
-                            <td valign="top" class="value">${fieldValue(bean:taskInstance, field:'isApproved')}</td>
-                            
-                        </tr>
-                    
-                        <tr class="prop">
-                            <td valign="top" class="name">Is Scheduled:</td>
-                            
-                            <td valign="top" class="value">${fieldValue(bean:taskInstance, field:'isScheduled')}</td>
+                            <td valign="top" class="name">Scheduled:</td>
+                            
+                            <td valign="top" class="value">${fieldValue(bean:taskInstance, field:'scheduled')}</td>
                             
                         </tr>
@@ -216,4 +209,11 @@
                             
                             <td valign="top" class="value"><g:link controller="taskType" action="show" id="${taskInstance?.taskType?.id}">${taskInstance?.taskType?.encodeAsHTML()}</g:link></td>
+                            
+                        </tr>
+                    
+                        <tr class="prop">
+                            <td valign="top" class="name">Trash:</td>
+                            
+                            <td valign="top" class="value">${fieldValue(bean:taskInstance, field:'trash')}</td>
                             
                         </tr>
Index: trunk/grails-app/views/taskDetailed/create.gsp
===================================================================
--- trunk/grails-app/views/taskDetailed/create.gsp	(revision 180)
+++ trunk/grails-app/views/taskDetailed/create.gsp	(revision 181)
@@ -106,39 +106,12 @@
                                     <g:select optionKey="id" from="${TaskPriority.list()}" name="taskPriority.id" value="${taskInstance?.taskPriority?.id}" ></g:select>
                                 </td>
-                            </tr> 
+                            </tr>
                         
                             <tr class="prop">
                                 <td valign="top" class="name">
-                                    <label for="taskStatus">Task Status:</label>
+                                    <label for="scheduled">Scheduled:</label>
                                 </td>
-                                <td valign="top" class="value ${hasErrors(bean:taskInstance,field:'taskStatus','errors')}">
-                                    <g:select optionKey="id" from="${TaskStatus.list()}" name="taskStatus.id" value="${taskInstance?.taskStatus?.id}" ></g:select>
-                                </td>
-                            </tr> 
-                        
-                            <tr class="prop">
-                                <td valign="top" class="name">
-                                    <label for="isActive">Is Active:</label>
-                                </td>
-                                <td valign="top" class="value ${hasErrors(bean:taskInstance,field:'isActive','errors')}">
-                                    <g:checkBox name="isActive" value="${taskInstance?.isActive}" ></g:checkBox>
-                                </td>
-                            </tr> 
-                        
-                            <tr class="prop">
-                                <td valign="top" class="name">
-                                    <label for="isApproved">Is Approved:</label>
-                                </td>
-                                <td valign="top" class="value ${hasErrors(bean:taskInstance,field:'isApproved','errors')}">
-                                    <g:checkBox name="isApproved" value="${taskInstance?.isApproved}" ></g:checkBox>
-                                </td>
-                            </tr> 
-                        
-                            <tr class="prop">
-                                <td valign="top" class="name">
-                                    <label for="isScheduled">Is Scheduled:</label>
-                                </td>
-                                <td valign="top" class="value ${hasErrors(bean:taskInstance,field:'isScheduled','errors')}">
-                                    <g:checkBox name="isScheduled" value="${taskInstance?.isScheduled}" ></g:checkBox>
+                                <td valign="top" class="value ${hasErrors(bean:taskInstance,field:'scheduled','errors')}">
+                                    <g:checkBox name="scheduled" value="${taskInstance?.scheduled}" ></g:checkBox>
                                 </td>
                             </tr>
Index: trunk/grails-app/views/taskDetailed/edit.gsp
===================================================================
--- trunk/grails-app/views/taskDetailed/edit.gsp	(revision 180)
+++ trunk/grails-app/views/taskDetailed/edit.gsp	(revision 181)
@@ -114,35 +114,8 @@
                             <tr class="prop">
                                 <td valign="top" class="name">
-                                    <label for="taskStatus">Task Status:</label>
+                                    <label for="scheduled">Scheduled:</label>
                                 </td>
-                                <td valign="top" class="value ${hasErrors(bean:taskInstance,field:'taskStatus','errors')}">
-                                    <g:select optionKey="id" from="${TaskStatus.list()}" name="taskStatus.id" value="${taskInstance?.taskStatus?.id}" ></g:select>
-                                </td>
-                            </tr> 
-                        
-                            <tr class="prop">
-                                <td valign="top" class="name">
-                                    <label for="isActive">Is Active:</label>
-                                </td>
-                                <td valign="top" class="value ${hasErrors(bean:taskInstance,field:'isActive','errors')}">
-                                    <g:checkBox name="isActive" value="${taskInstance?.isActive}" ></g:checkBox>
-                                </td>
-                            </tr> 
-                        
-                            <tr class="prop">
-                                <td valign="top" class="name">
-                                    <label for="isApproved">Is Approved:</label>
-                                </td>
-                                <td valign="top" class="value ${hasErrors(bean:taskInstance,field:'isApproved','errors')}">
-                                    <g:checkBox name="isApproved" value="${taskInstance?.isApproved}" ></g:checkBox>
-                                </td>
-                            </tr> 
-                        
-                            <tr class="prop">
-                                <td valign="top" class="name">
-                                    <label for="isScheduled">Is Scheduled:</label>
-                                </td>
-                                <td valign="top" class="value ${hasErrors(bean:taskInstance,field:'isScheduled','errors')}">
-                                    <g:checkBox name="isScheduled" value="${taskInstance?.isScheduled}" ></g:checkBox>
+                                <td valign="top" class="value ${hasErrors(bean:taskInstance,field:'scheduled','errors')}">
+                                    <g:checkBox name="scheduled" value="${taskInstance?.scheduled}" ></g:checkBox>
                                 </td>
                             </tr>
@@ -181,16 +154,13 @@
                                 <td valign="top" class="value ${hasErrors(bean:taskInstance,field:'assignedPersons','errors')}">
                                     
-								<ul>
-								<g:each var="a" in="${taskInstance?.assignedPersons?}">
-									<li><g:link controller="assignedPersonDetailed" action="edit" id="${a.id}">${a?.encodeAsHTML()}</g:link></li>
-								</g:each>
-								</ul>
-								<g:link controller="assignedPersonDetailed" params="['task.id':taskInstance?.id]" action="create">Add AssignedPerson</g:link>
+                                <ul>
+                                <g:each var="a" in="${taskInstance?.assignedPersons?}">
+                                    <li><g:link controller="assignedPersonDetailed" action="edit" id="${a.id}">${a?.encodeAsHTML()}</g:link></li>
+                                </g:each>
+                                </ul>
 
                                 </td>
-                            </tr> 
+                            </tr>
 
-
-                        
                         </tbody>
                     </table>
@@ -198,5 +168,6 @@
                 <div class="buttons">
                     <span class="button"><g:actionSubmit class="save" value="Update" /></span>
-                    <span class="button"><g:actionSubmit class="delete" onclick="return confirm('Are you sure?');" value="Delete" /></span>
+                    <span class="button"><g:actionSubmit class="cancel" value="Cancel" action="show"/></span>
+                    <span class="button"><g:actionSubmit class="trash" onclick="return confirm('Are you sure?');" value="Trash" /></span>
                 </div>
             </g:form>
Index: trunk/grails-app/views/taskDetailed/searchCalendar.gsp
===================================================================
--- trunk/grails-app/views/taskDetailed/searchCalendar.gsp	(revision 180)
+++ trunk/grails-app/views/taskDetailed/searchCalendar.gsp	(revision 181)
@@ -44,5 +44,5 @@
                                     class="overlayPane"
                                     additionalProperties="id"
-                                    excludeProperties="isActive, comment, targetCompletionDate"
+                                    excludeProperties="trash, comment, targetCompletionDate"
                                     associatedProperties="leadPerson.lastName, taskPriority.name"
                                     filterPropertyValues="${['taskPriority.name':[values:TaskPriority.list()],
Index: trunk/grails-app/views/taskDetailed/show.gsp
===================================================================
--- trunk/grails-app/views/taskDetailed/show.gsp	(revision 180)
+++ trunk/grails-app/views/taskDetailed/show.gsp	(revision 181)
@@ -16,4 +16,9 @@
             <div class="message">${flash.message}</div>
             </g:if>
+            <g:if test="${taskInstance.trash}" >
+                <div class="errors">
+                        This task is in the trash bin, but can be restored if required.
+                </div>
+            </g:if>
             <g:hasErrors bean="${taskInstance}">
             <div class="errors">
@@ -75,5 +80,5 @@
                                                                                     showElement('modControlOpened');
                                                                                     hideElement('modControlClosed'); return false;">
-                                                    Modifications <img  src="${resource(dir:'images/skin',file:'sorted_asc.gif')}" alt="Show" />
+                                                    Modifications <img  src="${resource(dir:'images/skin',file:'bullet_toggle_plus.png')}" alt="Show" />
                                                 </a>
                                             </div>
@@ -83,5 +88,5 @@
                                                                                     showElement('modControlClosed');
                                                                                     return false;">
-                                                    Modifications <img  src="${resource(dir:'images/skin',file:'sorted_desc.gif')}" alt="Show" />
+                                                    Modifications <img  src="${resource(dir:'images/skin',file:'bullet_toggle_minus.png')}" alt="Show" />
                                                 </a>
                                             </div>
@@ -142,14 +147,7 @@
 
                                     <tr class="prop">
-                                        <td valign="top" class="name">Active:</td>
-
-                                        <td valign="top" class="value">${fieldValue(bean:taskInstance, field:'isActive')}</td>
-
-                                    </tr>
-
-                                    <tr class="prop">
                                         <td valign="top" class="name">Approved:</td>
 
-                                        <td valign="top" class="value">${fieldValue(bean:taskInstance, field:'isApproved')}</td>
+                                        <td valign="top" class="value">${fieldValue(bean:taskInstance, field:'approved')}</td>
 
                                     </tr>
@@ -158,5 +156,5 @@
                                         <td valign="top" class="name">Scheduled:</td>
 
-                                        <td valign="top" class="value">${fieldValue(bean:taskInstance, field:'isScheduled')}</td>
+                                        <td valign="top" class="value">${fieldValue(bean:taskInstance, field:'scheduled')}</td>
 
                                     </tr>
@@ -204,6 +202,29 @@
                             <g:form>
                                 <input type="hidden" name="id" value="${taskInstance?.id}" />
-                                <span class="button"><g:actionSubmit class="edit" value="Edit" /></span>
-                                <span class="button"><g:actionSubmit class="delete" onclick="return confirm('Are you sure?');" value="Delete" /></span>
+
+                                <g:if test="${taskInstance.trash}" >
+                                    <span class="button"><g:actionSubmit class="restore" onclick="return confirm('Are you sure?');" value="Restore" /></span>
+                                </g:if>
+                                <g:else>
+
+                                    <g:if test="${taskInstance.taskStatus.id != 3}" >
+                                        <span class="button"><g:actionSubmit class="complete" value="Complete" /></span>
+
+                                        <g:if test="${taskInstance.approved}" >
+                                            <span class="button"><g:actionSubmit class="renegeApproval" value="Renege Approval" action="renegeApproval" /></span>
+                                        </g:if>
+                                        <g:else>
+                                            <span class="button"><g:actionSubmit class="approve" value="Approve" /></span>
+                                        </g:else>
+
+                                        <span class="button"><g:actionSubmit class="edit" value="Edit" /></span>
+                                        <span class="button"><g:actionSubmit class="trash" onclick="return confirm('Are you sure?');" value="Trash" /></span>
+
+                                    </g:if>
+                                    <g:else>
+                                        <span class="button"><g:actionSubmit class="reopen" value="Reopen" /></span>
+                                    </g:else>
+
+                                </g:else>
                             </g:form>
                         </div>
@@ -252,10 +273,4 @@
                                         <th>Entered By</th>
                                         <th></th>
-
-            <!--                            <g:sortableColumn property="commentW" title="Comment" />
-
-                                        <g:sortableColumn property="dateDoneW" title="Date Done" />
-
-                                        <g:sortableColumn property="enteredByW" title="Entered By" />-->
                                     </tr>
                                 </thead>
Index: trunk/web-app/css/main.css
===================================================================
--- trunk/web-app/css/main.css	(revision 180)
+++ trunk/web-app/css/main.css	(revision 181)
@@ -344,4 +344,32 @@
 .buttons input.delete {
     background: transparent url(../images/skin/database_delete.png) 5px 50% no-repeat;
+    padding-left: 28px;
+}
+.buttons input.trash {
+    background: transparent url(../images/skin/bin_closed.png) 5px 50% no-repeat;
+    padding-left: 28px;
+}
+.buttons input.restore {
+    background: transparent url(../images/skin/bin_empty.png) 5px 50% no-repeat;
+    padding-left: 28px;
+}
+.buttons input.cancel {
+    background: transparent url(../images/skin/cross.png) 5px 50% no-repeat;
+    padding-left: 28px;
+}
+.buttons input.complete {
+    background: transparent url(../images/skin/tick.png) 5px 50% no-repeat;
+    padding-left: 28px;
+}
+.buttons input.reopen {
+    background: transparent url(../images/skin/door_open.png) 5px 50% no-repeat;
+    padding-left: 28px;
+}
+.buttons input.approve {
+    background: transparent url(../images/skin/database_gear.png) 5px 50% no-repeat;
+    padding-left: 28px;
+}
+.buttons input.renegeApproval {
+    background: transparent url(../images/skin/cog_delete.png) 5px 50% no-repeat;
     padding-left: 28px;
 }
