Index: trunk/grails-app/controllers/AssignedGroupController.groovy
===================================================================
--- trunk/grails-app/controllers/AssignedGroupController.groovy	(revision 242)
+++ trunk/grails-app/controllers/AssignedGroupController.groovy	(revision 242)
@@ -0,0 +1,99 @@
+import org.codehaus.groovy.grails.plugins.springsecurity.Secured
+
+class AssignedGroupController extends BaseAppAdminController {
+    
+    def index = { redirect(action:list,params:params) }
+
+    // the delete, save and update actions only accept POST requests
+    static allowedMethods = [delete:'POST', save:'POST', update:'POST']
+
+    def list = {
+        params.max = Math.min( params.max ? params.max.toInteger() : 10,  100)
+        [ assignedGroupInstanceList: AssignedGroup.list( params ), assignedGroupInstanceTotal: AssignedGroup.count() ]
+    }
+
+    def show = {
+        def assignedGroupInstance = AssignedGroup.get( params.id )
+
+        if(!assignedGroupInstance) {
+            flash.message = "AssignedGroup not found with id ${params.id}"
+            redirect(action:list)
+        }
+        else { return [ assignedGroupInstance : assignedGroupInstance ] }
+    }
+
+    def delete = {
+        def assignedGroupInstance = AssignedGroup.get( params.id )
+        if(assignedGroupInstance) {
+            try {
+                assignedGroupInstance.delete(flush:true)
+                flash.message = "AssignedGroup ${params.id} deleted"
+                redirect(action:list)
+            }
+            catch(org.springframework.dao.DataIntegrityViolationException e) {
+                flash.message = "AssignedGroup ${params.id} could not be deleted"
+                redirect(action:show,id:params.id)
+            }
+        }
+        else {
+            flash.message = "AssignedGroup not found with id ${params.id}"
+            redirect(action:list)
+        }
+    }
+
+    def edit = {
+        def assignedGroupInstance = AssignedGroup.get( params.id )
+
+        if(!assignedGroupInstance) {
+            flash.message = "AssignedGroup not found with id ${params.id}"
+            redirect(action:list)
+        }
+        else {
+            return [ assignedGroupInstance : assignedGroupInstance ]
+        }
+    }
+
+    def update = {
+        def assignedGroupInstance = AssignedGroup.get( params.id )
+        if(assignedGroupInstance) {
+            if(params.version) {
+                def version = params.version.toLong()
+                if(assignedGroupInstance.version > version) {
+                    
+                    assignedGroupInstance.errors.rejectValue("version", "assignedGroup.optimistic.locking.failure", "Another user has updated this AssignedGroup while you were editing.")
+                    render(view:'edit',model:[assignedGroupInstance:assignedGroupInstance])
+                    return
+                }
+            }
+            assignedGroupInstance.properties = params
+            if(!assignedGroupInstance.hasErrors() && assignedGroupInstance.save(flush: true)) {
+                flash.message = "AssignedGroup ${params.id} updated"
+                redirect(action:show,id:assignedGroupInstance.id)
+            }
+            else {
+                render(view:'edit',model:[assignedGroupInstance:assignedGroupInstance])
+            }
+        }
+        else {
+            flash.message = "AssignedGroup not found with id ${params.id}"
+            redirect(action:list)
+        }
+    }
+
+    def create = {
+        def assignedGroupInstance = new AssignedGroup()
+        assignedGroupInstance.properties = params
+        return ['assignedGroupInstance':assignedGroupInstance]
+    }
+
+    def save = {
+        def assignedGroupInstance = new AssignedGroup(params)
+        if(!assignedGroupInstance.hasErrors() && assignedGroupInstance.save(flush: true)) {
+            flash.message = "AssignedGroup ${assignedGroupInstance.id} created"
+            redirect(action:show,id:assignedGroupInstance.id)
+        }
+        else {
+            render(view:'create',model:[assignedGroupInstance:assignedGroupInstance])
+        }
+    }
+}
Index: trunk/grails-app/controllers/AssignedGroupDetailedController.groovy
===================================================================
--- trunk/grails-app/controllers/AssignedGroupDetailedController.groovy	(revision 242)
+++ trunk/grails-app/controllers/AssignedGroupDetailedController.groovy	(revision 242)
@@ -0,0 +1,107 @@
+import org.codehaus.groovy.grails.plugins.springsecurity.Secured
+
+class AssignedGroupDetailedController extends BaseController {
+
+    def index = { redirect(action:list,params:params) }
+
+    // the delete, save and update actions only accept POST requests
+    static allowedMethods = [delete:'POST', save:'POST', update:'POST']
+
+    def list = {
+        params.max = Math.min( params.max ? params.max.toInteger() : 10,  100)
+        [ assignedGroupInstanceList: AssignedGroup.list( params ), assignedGroupInstanceTotal: AssignedGroup.count() ]
+    }
+
+    def show = {
+        def assignedGroupInstance = AssignedGroup.get( params.id )
+
+        if(!assignedGroupInstance) {
+            flash.message = "AssignedGroup not found with id ${params.id}"
+            redirect(action:list)
+        }
+        else { return [ assignedGroupInstance : assignedGroupInstance ] }
+    }
+
+    def delete = {
+        def assignedGroupInstance = AssignedGroup.get( params.id )
+        if(assignedGroupInstance) {
+            try {
+                def taskId = assignedGroupInstance.task.id
+                assignedGroupInstance.delete()
+                flash.message = "AssignedGroup ${params.id} deleted"
+                redirect(controller:"taskDetailed", action:"show", id: taskId)
+            }
+            catch(org.springframework.dao.DataIntegrityViolationException e) {
+                flash.message = "AssignedGroup ${params.id} could not be deleted"
+                redirect(action:show,id:params.id)
+            }
+        }
+        else {
+            flash.message = "AssignedGroup not found with id ${params.id}"
+            redirect(action:list)
+        }
+    }
+
+    def edit = {
+        def assignedGroupInstance = AssignedGroup.get( params.id )
+
+        if(!assignedGroupInstance) {
+            flash.message = "AssignedGroup not found with id ${params.id}"
+            redirect(action:list)
+        }
+        else {
+            return [ assignedGroupInstance : assignedGroupInstance ]
+        }
+    }
+
+    def update = {
+        def assignedGroupInstance = AssignedGroup.get( params.id )
+        if(assignedGroupInstance) {
+            if(params.version) {
+                def version = params.version.toLong()
+                if(assignedGroupInstance.version > version) {
+
+                    assignedGroupInstance.errors.rejectValue("version", "assignedGroup.optimistic.locking.failure", "Another user has updated this AssignedGroup while you were editing.")
+                    render(view:'edit',model:[assignedGroupInstance:assignedGroupInstance])
+                    return
+                }
+            }
+            assignedGroupInstance.properties = params
+            if(!assignedGroupInstance.hasErrors() && assignedGroupInstance.save(flush: true)) {
+                flash.message = "AssignedGroup ${params.id} updated"
+                redirect(action:show,id:assignedGroupInstance.id)
+            }
+            else {
+                render(view:'edit',model:[assignedGroupInstance:assignedGroupInstance])
+            }
+        }
+        else {
+            flash.message = "AssignedGroup not found with id ${params.id}"
+            redirect(action:edit,id:params.id)
+        }
+    }
+
+    def create = {
+        if(!params.task?.id) {
+            flash.message = "Please select a task and then 'Add Assigned Group'"
+            redirect(controller: "taskDetailed", action: "search")
+        }
+        else {
+            def assignedGroupInstance = new AssignedGroup()
+            assignedGroupInstance.properties = params
+            return ['assignedGroupInstance':assignedGroupInstance]
+        }
+    }
+
+    def save = {
+        def assignedGroupInstance = new AssignedGroup(params)
+
+        if(!assignedGroupInstance.hasErrors() && assignedGroupInstance.save(flush: true)) {
+            flash.message = "AssignedGroup ${assignedGroupInstance.id} created"
+            redirect(controller:"taskDetailed", action:"show", id: params.task.id)
+        }
+        else {
+            render(view:'create',model:[assignedGroupInstance:assignedGroupInstance])
+        }
+    }
+}
Index: trunk/grails-app/domain/AssignedGroup.groovy
===================================================================
--- trunk/grails-app/domain/AssignedGroup.groovy	(revision 242)
+++ trunk/grails-app/domain/AssignedGroup.groovy	(revision 242)
@@ -0,0 +1,18 @@
+class AssignedGroup {
+
+    PersonGroup personGroup
+    Task task
+    Integer estimatedHour = 0
+    Integer estimatedMinute = 0
+
+    static constraints = {
+        task()
+        personGroup()
+        estimatedHour(min:0)
+        estimatedMinute(min:0,max:59)
+    }
+
+    String toString() {
+        "${personGroup.name} - ${estimatedHour}h : ${estimatedMinute}min"
+    }
+}
Index: trunk/grails-app/domain/Task.groovy
===================================================================
--- trunk/grails-app/domain/Task.groovy	(revision 241)
+++ trunk/grails-app/domain/Task.groovy	(revision 242)
@@ -21,4 +21,5 @@
     static hasMany = [entries: Entry, 
                         taskModifications: TaskModification,
+                        assignedGroups: AssignedGroup,
                         assignedPersons: AssignedPerson,
                         subTasks: Task,
Index: trunk/grails-app/i18n/messages.properties
===================================================================
--- trunk/grails-app/i18n/messages.properties	(revision 241)
+++ trunk/grails-app/i18n/messages.properties	(revision 242)
@@ -4,7 +4,6 @@
 
 person.personGroups=Person Groups
-person.personGroups.help= Groups are for grouping people for information purposes. \
-For example a person with training in an area can be added to that group and that group assigned to a task. \
-This group then provides a record of persons trained in that area. \
+person.personGroups.help=Groups may be assigned to tasks and \
+may also provide a record of persons qualified or trained in a specific area. \
 Use Ctrl or Shift to select multiple groups. \
 Groups provide no application authorisations.
@@ -35,6 +34,11 @@
 Include condition and contributing factors.
 
+assignedGroup.estimatedDuration=Estimated Duration
+assignedGroup.estimatedDuration.help=The estimated amount of time (hh:mm) that you would \
+like to assign this group to the task.
+
 assignedPerson.estimatedDuration=Estimated Duration
-assignedPerson.estimatedDuration.help=The estimated amount of time (hh:mm) that you would like to assign this person to the task.
+assignedPerson.estimatedDuration.help=The estimated amount of time (hh:mm) that you would \
+like to assign this person to the task.
 
 task.notFound=Could not complete operation, task not found.
@@ -47,4 +51,6 @@
 taskRecurringSchedule.notFound=Could not complete operation, recurring schedule not found.
 
+task.assignedGroups=Assigned Groups
+task.assignedGroups.help=The person groups assigned to work on this task during planning along with estimated time.
 task.assignedPersons=Assigned Persons
 task.assignedPersons.help=The persons assigned to work on this task during planning along with estimated time.
Index: trunk/grails-app/services/CreateDataService.groovy
===================================================================
--- trunk/grails-app/services/CreateDataService.groovy	(revision 241)
+++ trunk/grails-app/services/CreateDataService.groovy	(revision 242)
@@ -110,4 +110,5 @@
         createDemoTasks()
         createDemoEntries()
+        createDemoAssignedGroups()
         createDemoAssignedPersons()
         createDemoTaskRecurringSchedules()
@@ -655,4 +656,24 @@
     }
 
+    def createDemoAssignedGroups() {
+
+        //AssignedGroup
+        def assignedGroupInstance
+
+        //AssignedGroup #1
+        assignedGroupInstance = new AssignedGroup(personGroup: PersonGroup.get(1),
+                                                                                        task: Task.get(1),
+                                                                                        estimatedHour: 2,
+                                                                                        estimatedMinute: 30)
+        saveAndTest(assignedGroupInstance)
+
+        //AssignedGroup #2
+        assignedGroupInstance = new AssignedGroup(personGroup: PersonGroup.get(2),
+                                                                                        task: Task.get(1),
+                                                                                        estimatedHour: 1,
+                                                                                        estimatedMinute: 0)
+        saveAndTest(assignedGroupInstance)
+    }
+
     def createDemoAssignedPersons() {
 
Index: trunk/grails-app/views/assignedGroup/create.gsp
===================================================================
--- trunk/grails-app/views/assignedGroup/create.gsp	(revision 242)
+++ trunk/grails-app/views/assignedGroup/create.gsp	(revision 242)
@@ -0,0 +1,73 @@
+
+
+<html>
+    <head>
+        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
+        <meta name="layout" content="main" />
+        <title>Create AssignedGroup</title>
+    </head>
+    <body>
+        <div class="nav">
+            <span class="menuButton"><g:link class="list" action="list">AssignedGroup List</g:link></span>
+        </div>
+        <div class="body">
+            <h1>Create AssignedGroup</h1>
+            <g:if test="${flash.message}">
+            <div class="message">${flash.message}</div>
+            </g:if>
+            <g:hasErrors bean="${assignedGroupInstance}">
+            <div class="errors">
+                <g:renderErrors bean="${assignedGroupInstance}" as="list" />
+            </div>
+            </g:hasErrors>
+            <g:form action="save" method="post" >
+                <div class="dialog">
+                    <table>
+                        <tbody>
+                        
+                            <tr class="prop">
+                                <td valign="top" class="name">
+                                    <label for="task">Task:</label>
+                                </td>
+                                <td valign="top" class="value ${hasErrors(bean:assignedGroupInstance,field:'task','errors')}">
+                                    <g:select optionKey="id" from="${Task.list()}" name="task.id" value="${assignedGroupInstance?.task?.id}" ></g:select>
+                                </td>
+                            </tr> 
+                        
+                            <tr class="prop">
+                                <td valign="top" class="name">
+                                    <label for="personGroup">Person Group:</label>
+                                </td>
+                                <td valign="top" class="value ${hasErrors(bean:assignedGroupInstance,field:'personGroup','errors')}">
+                                    <g:select optionKey="id" from="${PersonGroup.list()}" name="personGroup.id" value="${assignedGroupInstance?.personGroup?.id}" ></g:select>
+                                </td>
+                            </tr> 
+                        
+                            <tr class="prop">
+                                <td valign="top" class="name">
+                                    <label for="estimatedHour">Estimated Hour:</label>
+                                </td>
+                                <td valign="top" class="value ${hasErrors(bean:assignedGroupInstance,field:'estimatedHour','errors')}">
+                                    <input type="text" id="estimatedHour" name="estimatedHour" value="${fieldValue(bean:assignedGroupInstance,field:'estimatedHour')}" />
+                                </td>
+                            </tr> 
+                        
+                            <tr class="prop">
+                                <td valign="top" class="name">
+                                    <label for="estimatedMinute">Estimated Minute:</label>
+                                </td>
+                                <td valign="top" class="value ${hasErrors(bean:assignedGroupInstance,field:'estimatedMinute','errors')}">
+                                    <input type="text" id="estimatedMinute" name="estimatedMinute" value="${fieldValue(bean:assignedGroupInstance,field:'estimatedMinute')}" />
+                                </td>
+                            </tr> 
+                        
+                        </tbody>
+                    </table>
+                </div>
+                <div class="buttons">
+                    <span class="button"><input class="save" type="submit" value="Create" /></span>
+                </div>
+            </g:form>
+        </div>
+    </body>
+</html>
Index: trunk/grails-app/views/assignedGroup/edit.gsp
===================================================================
--- trunk/grails-app/views/assignedGroup/edit.gsp	(revision 242)
+++ trunk/grails-app/views/assignedGroup/edit.gsp	(revision 242)
@@ -0,0 +1,77 @@
+
+
+<html>
+    <head>
+        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
+        <meta name="layout" content="main" />
+        <title>Edit AssignedGroup</title>
+    </head>
+    <body>
+        <div class="nav">
+            <span class="menuButton"><g:link class="list" action="list">AssignedGroup List</g:link></span>
+            <span class="menuButton"><g:link class="create" action="create">New AssignedGroup</g:link></span>
+        </div>
+        <div class="body">
+            <h1>Edit AssignedGroup</h1>
+            <g:if test="${flash.message}">
+            <div class="message">${flash.message}</div>
+            </g:if>
+            <g:hasErrors bean="${assignedGroupInstance}">
+            <div class="errors">
+                <g:renderErrors bean="${assignedGroupInstance}" as="list" />
+            </div>
+            </g:hasErrors>
+            <g:form method="post" >
+                <input type="hidden" name="id" value="${assignedGroupInstance?.id}" />
+                <input type="hidden" name="version" value="${assignedGroupInstance?.version}" />
+                <div class="dialog">
+                    <table>
+                        <tbody>
+                        
+                            <tr class="prop">
+                                <td valign="top" class="name">
+                                    <label for="task">Task:</label>
+                                </td>
+                                <td valign="top" class="value ${hasErrors(bean:assignedGroupInstance,field:'task','errors')}">
+                                    <g:select optionKey="id" from="${Task.list()}" name="task.id" value="${assignedGroupInstance?.task?.id}" ></g:select>
+                                </td>
+                            </tr> 
+                        
+                            <tr class="prop">
+                                <td valign="top" class="name">
+                                    <label for="personGroup">Person Group:</label>
+                                </td>
+                                <td valign="top" class="value ${hasErrors(bean:assignedGroupInstance,field:'personGroup','errors')}">
+                                    <g:select optionKey="id" from="${PersonGroup.list()}" name="personGroup.id" value="${assignedGroupInstance?.personGroup?.id}" ></g:select>
+                                </td>
+                            </tr> 
+                        
+                            <tr class="prop">
+                                <td valign="top" class="name">
+                                    <label for="estimatedHour">Estimated Hour:</label>
+                                </td>
+                                <td valign="top" class="value ${hasErrors(bean:assignedGroupInstance,field:'estimatedHour','errors')}">
+                                    <input type="text" id="estimatedHour" name="estimatedHour" value="${fieldValue(bean:assignedGroupInstance,field:'estimatedHour')}" />
+                                </td>
+                            </tr> 
+                        
+                            <tr class="prop">
+                                <td valign="top" class="name">
+                                    <label for="estimatedMinute">Estimated Minute:</label>
+                                </td>
+                                <td valign="top" class="value ${hasErrors(bean:assignedGroupInstance,field:'estimatedMinute','errors')}">
+                                    <input type="text" id="estimatedMinute" name="estimatedMinute" value="${fieldValue(bean:assignedGroupInstance,field:'estimatedMinute')}" />
+                                </td>
+                            </tr> 
+                        
+                        </tbody>
+                    </table>
+                </div>
+                <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>
+                </div>
+            </g:form>
+        </div>
+    </body>
+</html>
Index: trunk/grails-app/views/assignedGroup/list.gsp
===================================================================
--- trunk/grails-app/views/assignedGroup/list.gsp	(revision 242)
+++ trunk/grails-app/views/assignedGroup/list.gsp	(revision 242)
@@ -0,0 +1,59 @@
+
+
+<html>
+    <head>
+        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
+        <meta name="layout" content="main" />
+        <title>AssignedGroup List</title>
+    </head>
+    <body>
+        <div class="nav">
+            <span class="menuButton"><g:link class="create" action="create">New AssignedGroup</g:link></span>
+        </div>
+        <div class="body">
+            <h1>AssignedGroup List</h1>
+            <g:if test="${flash.message}">
+            <div class="message">${flash.message}</div>
+            </g:if>
+            <div class="list">
+                <table>
+                    <thead>
+                        <tr>
+                        
+                   	        <g:sortableColumn property="id" title="Id" />
+                        
+                   	        <th>Task</th>
+                   	    
+                   	        <th>Person Group</th>
+                   	    
+                   	        <g:sortableColumn property="estimatedHour" title="Estimated Hour" />
+                        
+                   	        <g:sortableColumn property="estimatedMinute" title="Estimated Minute" />
+                        
+                        </tr>
+                    </thead>
+                    <tbody>
+                    <g:each in="${assignedGroupInstanceList}" status="i" var="assignedGroupInstance">
+                        <tr class="${(i % 2) == 0 ? 'odd' : 'even'}">
+                        
+                            <td><g:link action="show" id="${assignedGroupInstance.id}">${fieldValue(bean:assignedGroupInstance, field:'id')}</g:link></td>
+                        
+                            <td>${fieldValue(bean:assignedGroupInstance, field:'task')}</td>
+                        
+                            <td>${fieldValue(bean:assignedGroupInstance, field:'personGroup')}</td>
+                        
+                            <td>${fieldValue(bean:assignedGroupInstance, field:'estimatedHour')}</td>
+                        
+                            <td>${fieldValue(bean:assignedGroupInstance, field:'estimatedMinute')}</td>
+                        
+                        </tr>
+                    </g:each>
+                    </tbody>
+                </table>
+            </div>
+            <div class="paginateButtons">
+                <g:paginate total="${assignedGroupInstanceTotal}" />
+            </div>
+        </div>
+    </body>
+</html>
Index: trunk/grails-app/views/assignedGroup/show.gsp
===================================================================
--- trunk/grails-app/views/assignedGroup/show.gsp	(revision 242)
+++ trunk/grails-app/views/assignedGroup/show.gsp	(revision 242)
@@ -0,0 +1,71 @@
+
+
+<html>
+    <head>
+        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
+        <meta name="layout" content="main" />
+        <title>Show AssignedGroup</title>
+    </head>
+    <body>
+        <div class="nav">
+            <span class="menuButton"><g:link class="list" action="list">AssignedGroup List</g:link></span>
+            <span class="menuButton"><g:link class="create" action="create">New AssignedGroup</g:link></span>
+        </div>
+        <div class="body">
+            <h1>Show AssignedGroup</h1>
+            <g:if test="${flash.message}">
+            <div class="message">${flash.message}</div>
+            </g:if>
+            <div class="dialog">
+                <table>
+                    <tbody>
+
+                    
+                        <tr class="prop">
+                            <td valign="top" class="name">Id:</td>
+                            
+                            <td valign="top" class="value">${fieldValue(bean:assignedGroupInstance, field:'id')}</td>
+                            
+                        </tr>
+                    
+                        <tr class="prop">
+                            <td valign="top" class="name">Task:</td>
+                            
+                            <td valign="top" class="value"><g:link controller="task" action="show" id="${assignedGroupInstance?.task?.id}">${assignedGroupInstance?.task?.encodeAsHTML()}</g:link></td>
+                            
+                        </tr>
+                    
+                        <tr class="prop">
+                            <td valign="top" class="name">Person Group:</td>
+                            
+                            <td valign="top" class="value"><g:link controller="personGroup" action="show" id="${assignedGroupInstance?.personGroup?.id}">${assignedGroupInstance?.personGroup?.encodeAsHTML()}</g:link></td>
+                            
+                        </tr>
+                    
+                        <tr class="prop">
+                            <td valign="top" class="name">Estimated Hour:</td>
+                            
+                            <td valign="top" class="value">${fieldValue(bean:assignedGroupInstance, field:'estimatedHour')}</td>
+                            
+                        </tr>
+                    
+                        <tr class="prop">
+                            <td valign="top" class="name">Estimated Minute:</td>
+                            
+                            <td valign="top" class="value">${fieldValue(bean:assignedGroupInstance, field:'estimatedMinute')}</td>
+                            
+                        </tr>
+                    
+                    </tbody>
+                </table>
+            </div>
+            <div class="buttons">
+                <g:form>
+                    <input type="hidden" name="id" value="${assignedGroupInstance?.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:form>
+            </div>
+        </div>
+    </body>
+</html>
Index: trunk/grails-app/views/assignedGroupDetailed/create.gsp
===================================================================
--- trunk/grails-app/views/assignedGroupDetailed/create.gsp	(revision 242)
+++ trunk/grails-app/views/assignedGroupDetailed/create.gsp	(revision 242)
@@ -0,0 +1,74 @@
+
+
+<html>
+    <head>
+        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
+        <meta name="layout" content="main" />
+        <title>Create Assigned Group</title>
+    </head>
+    <body>
+        <div class="nav">
+            <h1>Create Assigned Group</h1>
+        </div>
+        <div class="body">
+            <g:if test="${flash.message}">
+            <div class="message">${flash.message}</div>
+            </g:if>
+            <g:hasErrors bean="${assignedGroupInstance}">
+            <div class="errors">
+                <g:renderErrors bean="${assignedGroupInstance}" as="list" />
+            </div>
+            </g:hasErrors>
+            <g:form action="save" method="post" >
+                <input type="hidden"  name="task.id" value="${assignedGroupInstance?.task?.id}" />
+                <div class="dialog">
+                    <table>
+                        <tbody>
+                        
+                            <tr class="prop">
+                                <td valign="top" class="name">
+                                    <label for="task">Task:</label>
+                                </td>
+                                <td valign="top" class="name">
+                                    <g:link controller="taskDetailed" action="show" id="${assignedGroupInstance.task.id}" >
+                                        ${assignedGroupInstance?.task.encodeAsHTML()}
+                                    </g:link>
+                                </td>
+                            </tr>
+                        
+                            <tr class="prop">
+                                <td valign="top" class="name">
+                                    <label for="personGroup">Group:</label>
+                                </td>
+                                <td valign="top" class="value ${hasErrors(bean:assignedGroupInstance,field:'personGroup','errors')}">
+                                    <g:select optionKey="id" from="${PersonGroup.list()}" name="personGroup.id" value="${assignedGroupInstance?.personGroup?.id}" ></g:select>
+                                </td>
+                            </tr> 
+                        
+                            <tr class="prop">
+                                <td valign="top" class="name">
+                                    <label for="durationHour">Estimated Duration:</label>
+                                </td>
+
+                                <td valign="top" class="value">
+                                    <input class="time ${hasErrors(bean:assignedGroupInstance,field:'estimatedHour','errors')}"
+                                        type="text" id="estimatedHour" name="estimatedHour" 
+                                        value="${fieldValue(bean:assignedGroupInstance,field:'estimatedHour')}" />
+                                    :
+                                    <input class="time ${hasErrors(bean:assignedGroupInstance,field:'estimatedMinute','errors')}"
+                                        type="text" id="estimatedMinute" name="estimatedMinute" 
+                                        value="${fieldValue(bean:assignedGroupInstance,field:'estimatedMinute')}" />
+                                    <g:helpBalloon code="assignedGroup.estimatedDuration" />
+                                </td> 
+                            </tr>
+                        
+                        </tbody>
+                    </table>
+                </div>
+                <div class="buttons">
+                    <span class="button"><input class="save" type="submit" value="Create" /></span>
+                </div>
+            </g:form>
+        </div>
+    </body>
+</html>
Index: trunk/grails-app/views/assignedGroupDetailed/edit.gsp
===================================================================
--- trunk/grails-app/views/assignedGroupDetailed/edit.gsp	(revision 242)
+++ trunk/grails-app/views/assignedGroupDetailed/edit.gsp	(revision 242)
@@ -0,0 +1,75 @@
+
+
+<html>
+    <head>
+        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
+        <meta name="layout" content="main" />
+        <title>Edit AssignedGroup</title>
+    </head>
+    <body>
+        <div class="nav">
+            <h1>Edit Assigned Group</h1>
+        </div>
+        <div class="body">
+            <g:if test="${flash.message}">
+            <div class="message">${flash.message}</div>
+            </g:if>
+            <g:hasErrors bean="${assignedGroupInstance}">
+            <div class="errors">
+                <g:renderErrors bean="${assignedGroupInstance}" as="list" />
+            </div>
+            </g:hasErrors>
+            <g:form method="post" >
+                <input type="hidden" name="id" value="${assignedGroupInstance?.id}" />
+                <input type="hidden" name="version" value="${assignedGroupInstance?.version}" />
+                <div class="dialog">
+                    <table>
+                        <tbody>
+                        
+                            <tr class="prop">
+                                <td valign="top" class="name">
+                                    <label for="task">Task:</label>
+                                </td>
+                                <td valign="top" class="name">
+                                    <g:link controller="taskDetailed" action="show" id="${assignedGroupInstance.task.id}" >
+                                        ${assignedGroupInstance?.task.encodeAsHTML()}
+                                    </g:link>
+                                </td>
+                            </tr>
+                        
+                            <tr class="prop">
+                                <td valign="top" class="name">
+                                    <label for="personGroup">Group:</label>
+                                </td>
+                                <td valign="top" class="value ${hasErrors(bean:assignedGroupInstance,field:'personGroup','errors')}">
+                                    <g:select optionKey="id" from="${PersonGroup.list()}" name="personGroup.id" value="${assignedGroupInstance?.personGroup?.id}" ></g:select>
+                                </td>
+                            </tr>
+
+                            <tr class="prop">
+                                <td valign="top" class="name">
+                                    <label for="durationHour">Estimated Duration:</label>
+                                </td>
+                                <td valign="top" class="value">
+                                    <input class="time ${hasErrors(bean:assignedGroupInstance,field:'estimatedHour','errors')}"
+                                        type="text" id="estimatedHour" name="estimatedHour" 
+                                        value="${fieldValue(bean:assignedGroupInstance,field:'estimatedHour')}" />
+                                    :
+                                    <input class="time ${hasErrors(bean:assignedGroupInstance,field:'estimatedMinute','errors')}"
+                                        type="text" id="estimatedMinute" name="estimatedMinute" 
+                                        value="${fieldValue(bean:assignedGroupInstance,field:'estimatedMinute')}" />
+                                    <g:helpBalloon code="assignedGroup.estimatedDuration" />
+                                </td> 
+                            </tr>
+
+                        </tbody>
+                    </table>
+                </div>
+                <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>
+                </div>
+            </g:form>
+        </div>
+    </body>
+</html>
Index: trunk/grails-app/views/assignedGroupDetailed/list.gsp
===================================================================
--- trunk/grails-app/views/assignedGroupDetailed/list.gsp	(revision 242)
+++ trunk/grails-app/views/assignedGroupDetailed/list.gsp	(revision 242)
@@ -0,0 +1,58 @@
+
+
+<html>
+    <head>
+        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
+        <meta name="layout" content="main" />
+        <title>AssignedGroup List</title>
+    </head>
+    <body>
+        <div class="nav">
+            <h1>Assigned Group List</h1>
+        </div>
+        <div class="body">
+            <g:if test="${flash.message}">
+            <div class="message">${flash.message}</div>
+            </g:if>
+            <div class="list">
+                <table>
+                    <thead>
+                        <tr>
+                        
+                   	        <g:sortableColumn property="id" title="Id" />
+                        
+                   	        <th>Task</th>
+                   	    
+                   	        <th>Group</th>
+                   	    
+                   	        <g:sortableColumn property="estimatedHour" title="Estimated Hour" />
+                        
+                   	        <g:sortableColumn property="estimatedMinute" title="Estimated Minute" />
+                        
+                        </tr>
+                    </thead>
+                    <tbody>
+                    <g:each in="${assignedGroupInstanceList}" status="i" var="assignedGroupInstance">
+                        <tr class="${(i % 2) == 0 ? 'odd' : 'even'}">
+                        
+                            <td><g:link action="show" id="${assignedGroupInstance.id}">${fieldValue(bean:assignedGroupInstance, field:'id')}</g:link></td>
+                        
+                            <td>${fieldValue(bean:assignedGroupInstance, field:'task')}</td>
+                        
+                            <td>${fieldValue(bean:assignedGroupInstance, field:'personGroup')}</td>
+                        
+                            <td>${fieldValue(bean:assignedGroupInstance, field:'estimatedHour')}</td>
+                        
+                            <td>${fieldValue(bean:assignedGroupInstance, field:'estimatedMinute')}</td>
+                        
+                        </tr>
+                    </g:each>
+                    </tbody>
+                </table>
+            </div>
+            <div class="paginateButtons">
+                <g:paginate total="${assignedGroupInstanceTotal}" />
+            </div>
+        </div>
+    </body>
+</html>
Index: trunk/grails-app/views/assignedGroupDetailed/show.gsp
===================================================================
--- trunk/grails-app/views/assignedGroupDetailed/show.gsp	(revision 242)
+++ trunk/grails-app/views/assignedGroupDetailed/show.gsp	(revision 242)
@@ -0,0 +1,60 @@
+
+
+<html>
+    <head>
+        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
+        <meta name="layout" content="main" />
+        <title>Show AssignedGroup</title>
+    </head>
+    <body>
+        <div class="nav">
+            <h1>Show Assigned Group</h1>
+        </div>
+        <div class="body">
+            <g:if test="${flash.message}">
+            <div class="message">${flash.message}</div>
+            </g:if>
+            <div class="dialog">
+                <table>
+                    <tbody>
+
+                    
+                        <tr class="prop">
+                            <td valign="top" class="name">Id:</td>
+                            
+                            <td valign="top" class="value">${fieldValue(bean:assignedGroupInstance, field:'id')}</td>
+                            
+                        </tr>
+                    
+                        <tr class="prop">
+                            <td valign="top" class="name">Task:</td>
+                            
+                            <td valign="top" class="value"><g:link controller="taskDetailed" action="show" id="${assignedGroupInstance?.task?.id}">${assignedGroupInstance?.task?.encodeAsHTML()}</g:link></td>
+                            
+                        </tr>
+                    
+                        <tr class="prop">
+                            <td valign="top" class="name">Group:</td>
+                            
+                            <td valign="top" class="value"><g:link controller="personGroup" action="show" id="${assignedGroupInstance?.personGroup?.id}">${assignedGroupInstance?.personGroup?.encodeAsHTML()}</g:link></td>
+                            
+                        </tr>
+                    
+                        <tr class="prop">
+                            <td valign="top" class="name">Estimated Duration:</td>
+                            <td valign="top" class="value">${assignedGroupInstance.estimatedHour}h : ${assignedGroupInstance.estimatedMinute}min</td>
+                        </tr>
+
+                    </tbody>
+                </table>
+            </div>
+            <div class="buttons">
+                <g:form>
+                    <input type="hidden" name="id" value="${assignedGroupInstance?.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:form>
+            </div>
+        </div>
+    </body>
+</html>
Index: trunk/grails-app/views/assignedPersonDetailed/create.gsp
===================================================================
--- trunk/grails-app/views/assignedPersonDetailed/create.gsp	(revision 241)
+++ trunk/grails-app/views/assignedPersonDetailed/create.gsp	(revision 242)
@@ -30,8 +30,10 @@
                                     <label for="task">Task:</label>
                                 </td>
-                                <td valign="top" class="value ${hasErrors(bean:assignedPersonInstance,field:'task','errors')}">
-                                    ${assignedPersonInstance?.task}
+                                <td valign="top" class="name">
+                                    <g:link controller="taskDetailed" action="show" id="${assignedPersonInstance.task.id}" >
+                                        ${assignedPersonInstance?.task.encodeAsHTML()}
+                                    </g:link>
                                 </td>
-                            </tr> 
+                            </tr>
                         
                             <tr class="prop">
Index: trunk/grails-app/views/assignedPersonDetailed/edit.gsp
===================================================================
--- trunk/grails-app/views/assignedPersonDetailed/edit.gsp	(revision 241)
+++ trunk/grails-app/views/assignedPersonDetailed/edit.gsp	(revision 242)
@@ -31,8 +31,10 @@
                                     <label for="task">Task:</label>
                                 </td>
-                                <td valign="top" class="value ${hasErrors(bean:assignedPersonInstance,field:'task','errors')}">
-                                    <g:select optionKey="id" from="${Task.list()}" name="task.id" value="${assignedPersonInstance?.task?.id}" ></g:select>
+                                <td valign="top" class="name">
+                                    <g:link controller="taskDetailed" action="show" id="${assignedPersonInstance.task.id}" >
+                                        ${assignedPersonInstance?.task.encodeAsHTML()}
+                                    </g:link>
                                 </td>
-                            </tr> 
+                            </tr>
                         
                             <tr class="prop">
Index: trunk/grails-app/views/task/edit.gsp
===================================================================
--- trunk/grails-app/views/task/edit.gsp	(revision 241)
+++ trunk/grails-app/views/task/edit.gsp	(revision 242)
@@ -139,4 +139,20 @@
                             <tr class="prop">
                                 <td valign="top" class="name">
+                                    <label for="assignedGroups">Assigned Groups:</label>
+                                </td>
+                                <td valign="top" class="value ${hasErrors(bean:taskInstance,field:'assignedGroups','errors')}">
+                                    
+<ul>
+<g:each var="a" in="${taskInstance?.assignedGroups?}">
+    <li><g:link controller="assignedGroup" action="show" id="${a.id}">${a?.encodeAsHTML()}</g:link></li>
+</g:each>
+</ul>
+<g:link controller="assignedGroup" params="['task.id':taskInstance?.id]" action="create">Add AssignedGroup</g:link>
+
+                                </td>
+                            </tr> 
+                        
+                            <tr class="prop">
+                                <td valign="top" class="name">
                                     <label for="assignedPersons">Assigned Persons:</label>
                                 </td>
Index: trunk/grails-app/views/task/show.gsp
===================================================================
--- trunk/grails-app/views/task/show.gsp	(revision 241)
+++ trunk/grails-app/views/task/show.gsp	(revision 242)
@@ -114,4 +114,17 @@
                     
                         <tr class="prop">
+                            <td valign="top" class="name">Assigned Groups:</td>
+                            
+                            <td  valign="top" style="text-align:left;" class="value">
+                                <ul>
+                                <g:each var="a" in="${taskInstance.assignedGroups}">
+                                    <li><g:link controller="assignedGroup" action="show" id="${a.id}">${a?.encodeAsHTML()}</g:link></li>
+                                </g:each>
+                                </ul>
+                            </td>
+                            
+                        </tr>
+                    
+                        <tr class="prop">
                             <td valign="top" class="name">Assigned Persons:</td>
                             
Index: trunk/grails-app/views/taskDetailed/edit.gsp
===================================================================
--- trunk/grails-app/views/taskDetailed/edit.gsp	(revision 241)
+++ trunk/grails-app/views/taskDetailed/edit.gsp	(revision 242)
@@ -151,4 +151,19 @@
                             <tr class="prop">
                                 <td valign="top" class="name">
+                                    <label for="assignedPersons">Assigned Groups:</label>
+                                </td>
+                                <td valign="top" class="value ${hasErrors(bean:taskInstance,field:'assignedGroups','errors')}">
+                                    
+                                <ul>
+                                <g:each var="a" in="${taskInstance?.assignedGroups?}">
+                                    <li><g:link controller="assignedGroupDetailed" action="edit" id="${a.id}">${a?.encodeAsHTML()}</g:link></li>
+                                </g:each>
+                                </ul>
+
+                                </td>
+                            </tr>
+
+                            <tr class="prop">
+                                <td valign="top" class="name">
                                     <label for="assignedPersons">Assigned Persons:</label>
                                 </td>
Index: trunk/grails-app/views/taskDetailed/show.gsp
===================================================================
--- trunk/grails-app/views/taskDetailed/show.gsp	(revision 241)
+++ trunk/grails-app/views/taskDetailed/show.gsp	(revision 242)
@@ -183,4 +183,19 @@
 
                                     <tr class="prop">
+                                        <td valign="top" class="name">Assigned Groups:</td>
+
+                                        <td  valign="top" style="text-align:left;" class="value">
+                                            <ul>
+                                            <g:each var="a" in="${taskInstance.assignedGroups}">
+                                                <li><g:link controller="assignedGroupDetailed" action="edit" id="${a.id}">${a?.encodeAsHTML()}</g:link></li>
+                                            </g:each>
+                                            </ul>
+                                            <g:link controller="assignedGroupDetailed" params="['task.id':taskInstance?.id]" action="create">Add Assigned Group</g:link>
+                                        </td>
+
+                                    </tr>
+
+
+                                    <tr class="prop">
                                         <td valign="top" class="name">Assigned Persons:</td>
 
@@ -191,5 +206,5 @@
                                             </g:each>
                                             </ul>
-                                            <g:link controller="assignedPersonDetailed" params="['task.id':taskInstance?.id]" action="create">Add AssignedPerson</g:link>
+                                            <g:link controller="assignedPersonDetailed" params="['task.id':taskInstance?.id]" action="create">Add Assigned Person</g:link>
                                         </td>
 
