Index: /trunk/grails-app/controllers/InventoryItemDetailedController.groovy
===================================================================
--- /trunk/grails-app/controllers/InventoryItemDetailedController.groovy	(revision 224)
+++ /trunk/grails-app/controllers/InventoryItemDetailedController.groovy	(revision 225)
@@ -4,9 +4,11 @@
 
     def filterService
+    def inventoryItemService
+    def inventoryMovementService
 
     def index = { redirect(action:search, params:params) }
 
     // the delete, save and update actions only accept POST requests
-    static allowedMethods = [delete:'POST', save:'POST', update:'POST']
+    static allowedMethods = [delete:'POST', save:'POST', update:'POST', useInventoryItem:'POST']
 
     def list = {
@@ -29,17 +31,52 @@
     }
 
+    /**
+    * Simply assigns a passed in task id to a session variable and redirects to search.
+    */
+    def findInventoryItemForMovement = {
+        if(!params.task?.id) {
+            flash.message = "No task id supplied, please select a task then the inventory tab."
+            redirect(controller: "taskDetailed", action: "search")
+            return
+        }
+
+        session.inventoryMovementTaskId = params.task.id
+        flash.message = "Please find and then select the inventory item."
+        redirect(action: search)
+    }
+
     def show = {
-        
+
         // In the case of an actionSubmit button, rewrite action name from 'index'.
         if(params._action_Show)
         { params.action='show' }
-        
-        def inventoryItemInstance = InventoryItem.get( params.id )
 
-        if(!inventoryItemInstance) {
+        if(!InventoryItem.exists(params.id)) {
             flash.message = "InventoryItem not found with id ${params.id}"
             redirect(action:search)
+            return
         }
-        else { return [ inventoryItemInstance : inventoryItemInstance ] }
+
+        def result = inventoryItemService.prepareShowData(params)
+
+        if(result.error) {
+            flash.message = "Could not to prepare the data to show item with id: ${params.id}."
+            redirect(action:search)
+            return
+        }
+
+        def model = [ inventoryItemInstance: result.inventoryItemInstance,
+                                inventoryMovementList: result.inventoryMovementList,
+                                inventoryMovementListTotal: result.inventoryMovementListTotal,
+                                inventoryMovementListMax: result.inventoryMovementListMax,
+                                showTab: result.showTab]
+
+        if(session.inventoryMovementTaskId) {
+            model.inventoryMovementInstance = new InventoryMovement()
+            model.inventoryMovementInstance.task = Task.get(session.inventoryMovementTaskId)
+            model.inventoryMovementInstance.quantity = 1
+        }
+
+        return model
     }
 
@@ -123,3 +160,40 @@
         }
     }
+
+    /**
+    * Handles the use inventory item form submit in the show view.
+    */
+    def useInventoryItem = {
+
+        params.inventoryMovementType = InventoryMovementType.get(1) // used.
+        def result = inventoryMovementService.move(params)
+
+        if(!result.error) {
+            flash.message = "Inventory Movement for ${result.inventoryMovementInstance.inventoryItem.name.encodeAsHTML()} created."
+            redirect(controller:"taskDetailed", action:"show", id: result.taskId)
+        }
+        else {
+            if(result.inventoryMovementInstance) {
+                def p = [:]
+                p.id = result.inventoryMovementInstance.inventoryItem?.id
+                def r = inventoryItemService.prepareShowData(p)
+
+                def model = [ inventoryItemInstance: r.inventoryItemInstance,
+                                        inventoryMovementList: r.inventoryMovementList,
+                                        inventoryMovementListTotal: r.inventoryMovementListTotal,
+                                        inventoryMovementListMax: r.inventoryMovementListMax,
+                                        showTab: r.showTab]
+
+                model.inventoryMovementInstance = result.inventoryMovementInstance
+
+                render(view: 'show', model: model)
+            }
+            else {
+                flash.message = "Could not create inventory movement."
+                redirect(action:"search")
+            }
+
+        }
+    }
+
 }
Index: /trunk/grails-app/controllers/TaskDetailedController.groovy
===================================================================
--- /trunk/grails-app/controllers/TaskDetailedController.groovy	(revision 224)
+++ /trunk/grails-app/controllers/TaskDetailedController.groovy	(revision 225)
@@ -154,4 +154,22 @@
         { params.action='show' }
 
+        def showTab = [:]
+        switch (params.showTab) {
+            case "showProcedureTab":
+                showTab.procedure =  new String("true")
+                break
+            case "showRecurrenceTab":
+                showTab.recurrence =  new String("true")
+                break
+            case "showInventoryTab":
+                showTab.inventory = new String("true")
+                break
+            case "showSubTasksTab":
+                showTab.subTasks = new String("true")
+                break
+            default:
+                showTab.task = new String("true")
+        }
+
         def taskInstance = Task.get( params.id )
 
@@ -177,5 +195,4 @@
             def subTaskInstanceList = Task.findAllByParentTaskAndTrash(taskInstance, false, params)
             def subTaskInstanceTotal = Task.countByParentTaskAndTrash(taskInstance, false)
-            def showTaskTab = new String("true")
 
             def inventoryMovementList = InventoryMovement.findAllByTask(taskInstance, [max:100, sort:"id", order:"desc", offset:0])
@@ -204,5 +221,5 @@
                             taskProcedureInstance: taskProcedureInstance,
                             taskProcedureExits: taskProcedureExits,
-                            showTaskTab: showTaskTab,
+                            showTab: showTab,
                             subTaskInstanceList: subTaskInstanceList,
                             subTaskInstanceTotal: subTaskInstanceTotal,
Index: /trunk/grails-app/i18n/messages.properties
===================================================================
--- /trunk/grails-app/i18n/messages.properties	(revision 224)
+++ /trunk/grails-app/i18n/messages.properties	(revision 225)
@@ -66,4 +66,7 @@
 task.associatedAssets=Associated Assets
 task.associatedAssets.help=These assets are to be associated with this task, but costs will not be assigned.
+
+
+inventoryItem.notFound=Could not complete operation, inventory item not found.
 
 inventoryMovement.quantity.insufficientItemsInStock=Could not complete operation, insufficient items in stock.
Index: /trunk/grails-app/services/InventoryItemService.groovy
===================================================================
--- /trunk/grails-app/services/InventoryItemService.groovy	(revision 225)
+++ /trunk/grails-app/services/InventoryItemService.groovy	(revision 225)
@@ -0,0 +1,57 @@
+/**
+* Provides a service class for the InventoryItem domain class.
+*/
+class InventoryItemService {
+
+    boolean transactional = false
+
+    /**
+    * Prepare the data for the show view.
+    * The result can be used to easily construct the model for the show view.
+    * @param params The incoming params as normally passed to the show view
+    * primarily including the id of the inventoryItem.
+    * @returns A map containing result.error=true (if any error) and result.inventoryItemInstance (if available)
+    * and 
+    */
+    def prepareShowData(params) {
+        def result = [:]
+
+        def fail = { Object[] args ->
+            if(args.size() == 2) result.errors = [args[0], args[1]]
+            log.debug result.errors
+            result.error = true
+            return result
+        }
+
+        result.showTab = [:]
+        switch (params.showTab) {
+            case "showDetailTab":
+                result.showTab.detail =  new String("true")
+                break
+            case "showMovementTab":
+                result.showTab.movement =  new String("true")
+                break
+            default:
+                result.showTab.inventory = new String("true")
+        }
+
+        result.inventoryItemInstance = InventoryItem.get( params.id )
+
+        if(!result.inventoryItemInstance)
+            return fail("inventoryItem", "inventoryItem.notFound")
+
+        log.debug "WTF are we doing here"
+
+        def p = [:]
+        p.max = result.inventoryMovementListMax = 10
+        p.order = "desc"
+        p.sort = "id"
+        result.inventoryMovementList = InventoryMovement.findAllByInventoryItem(result.inventoryItemInstance, p)
+        result.inventoryMovementListTotal = InventoryMovement.countByInventoryItem(result.inventoryItemInstance)
+
+        // Success
+        return result
+
+    } // end prepareShowData()
+
+} // end class
Index: /trunk/grails-app/services/InventoryMovementService.groovy
===================================================================
--- /trunk/grails-app/services/InventoryMovementService.groovy	(revision 224)
+++ /trunk/grails-app/services/InventoryMovementService.groovy	(revision 225)
@@ -10,6 +10,26 @@
             result.inventoryMovementInstance = InventoryMovement.lock(params.id)
             if(result.inventoryMovementInstance) {
+
+                // Used type must have a task that is not complete or in the trash
+                if(result.inventoryMovementInstance.inventoryMovementType.id == 1)  {
+
+                    // Unlike move, if the task does not exist at all then deletion is still allowed.
+                    if(result.inventoryMovementInstance.task?.trash) {
+                        status.setRollbackOnly()
+                        result.inventoryMovementInstance.errors.rejectValue("task", "task.operationNotPermittedOnTaskInTrash")
+                        result.error = true
+                        return result
+                    }
+
+                    if(result.inventoryMovementInstance.task?.taskStatus?.id == 3) {
+                        status.setRollbackOnly()
+                        result.inventoryMovementInstance.errors.rejectValue('task', "task.operationNotPermittedOnCompleteTask")
+                        result.error = true
+                        return result
+                    }
+                }
+
                 def inventoryItem = InventoryItem.lock(result.inventoryMovementInstance.inventoryItem.id)
-                result.taskId = result.inventoryMovementInstance.task.id
+                result.taskId = result.inventoryMovementInstance.task?.id
 
                 if(!inventoryItem) {
@@ -70,4 +90,29 @@
             result.inventoryMovementInstance.person = personService.currentUser
 
+            // Used type must have a task that is not complete or in the trash
+            if(result.inventoryMovementInstance.inventoryMovementType.id == 1)  {
+
+                if(!result.inventoryMovementInstance.task) {
+                    status.setRollbackOnly()
+                    result.inventoryMovementInstance.errors.rejectValue('task', "task.notFound")
+                    result.error = true
+                    return result
+                }
+
+                if(result.inventoryMovementInstance.task.trash) {
+                    status.setRollbackOnly()
+                    result.inventoryMovementInstance.errors.rejectValue("task", "task.operationNotPermittedOnTaskInTrash")
+                    result.error = true
+                    return result
+                }
+
+                if(result.inventoryMovementInstance.task.taskStatus.id == 3) {
+                    status.setRollbackOnly()
+                    result.inventoryMovementInstance.errors.rejectValue('task', "task.operationNotPermittedOnCompleteTask")
+                    result.error = true
+                    return result
+                }
+            }
+
             if(result.inventoryMovementInstance.validate()) {
                 def inventoryItem = InventoryItem.lock(result.inventoryMovementInstance.inventoryItem.id)
@@ -77,11 +122,4 @@
                     status.setRollbackOnly()
                     result.inventoryMovementInstance.errors.rejectValue('inventoryItem', "inventoryMovement.inventoryItem.notFound")
-                    result.error = true
-                    return result
-                }
-
-                if(result.inventoryMovementInstance.task.taskStatus.id == 3) {
-                    status.setRollbackOnly()
-                    result.inventoryMovementInstance.errors.rejectValue('task', "task.operationNotPermittedOnCompleteTask")
                     result.error = true
                     return result
Index: /trunk/grails-app/views/inventoryItemDetailed/show.gsp
===================================================================
--- /trunk/grails-app/views/inventoryItemDetailed/show.gsp	(revision 224)
+++ /trunk/grails-app/views/inventoryItemDetailed/show.gsp	(revision 225)
@@ -7,4 +7,5 @@
         <title>Show InventoryItem</title>
         <nav:resources override="true"/>
+        <resource:tabView skin="tabviewCustom" />
         <g:render template="/shared/pictureHead" />
     </head>
@@ -14,222 +15,345 @@
         </div>
         <div class="body">
+            <g:hasErrors bean="${inventoryMovementInstance}">
+            <div class="errors">
+                <g:renderErrors bean="${inventoryMovementInstance}" as="list" />
+            </div>
+            </g:hasErrors>
             <g:if test="${flash.message}">
-            <div class="message">${flash.message}</div>
+                <div class="message">${flash.message}</div>
             </g:if>
-            <div class="dialog">
-                <table>
-                    <tbody>
-                    
-                        <tr class="prop">
-                            <td valign="top" class="name">Picture:</td>
-                            <td valign="top" class="value">
-                                <g:if test="${inventoryItemInstance.picture}" >
-                                    <span class='gallery'><wa:pictureLightboxAnchor picture="${inventoryItemInstance.picture}" size="${Image.Medium}" lightboxSize="${Image.Large}" target="_blank" title="Show Original" /></span>
-                                </g:if>
-                                <g:else>
-                                    <g:link controller="pictureDetailed"
-                                                    params="['inventoryItem.id':inventoryItemInstance?.id]"
-                                                    action="create">
-                                        Add Picture
-                                    </g:link>
-                                </g:else>
-                            </td>
-                        </tr>
-                    
-                        <tr class="prop">
-                            <td valign="top" class="name">Id:</td>
-                            
-                            <td valign="top" class="value">${fieldValue(bean:inventoryItemInstance, field:'id')}</td>
-                            
-                        </tr>
-                    
-                        <tr class="prop">
-                            <td valign="top" class="name">Name:</td>
-                            
-                            <td valign="top" class="value">${fieldValue(bean:inventoryItemInstance, field:'name')}</td>
-                            
-                        </tr>
-                    
-                        <tr class="prop">
-                            <td valign="top" class="name">Description:</td>
-                            
-                            <td valign="top" class="value">${fieldValue(bean:inventoryItemInstance, field:'description')}</td>
-                            
-                        </tr>
-                        
-                        <tr class="prop">
-                            <td valign="top" class="name">Location:</td>
-                            
-                            <td valign="top" class="value">
-                                <g:link controller="inventoryLocationDetailed" action="show" id="${inventoryItemInstance?.inventoryLocation?.id}">
-                                    ${inventoryItemInstance?.inventoryLocation?.encodeAsHTML()}
-                                </g:link>
-                                    in ${inventoryItemInstance?.inventoryLocation?.inventoryStore.encodeAsHTML()}
-                            </td>
-                            
-                        </tr>
-                        
-                        <tr class="prop">
-                            <td valign="top" class="name">In Stock:</td>
-                            
-                            <td valign="top" class="value">
-                                ${fieldValue(bean:inventoryItemInstance, field:'unitsInStock')} ${inventoryItemInstance?.unitOfMeasure?.encodeAsHTML()}
-                            </td>
-                            
-                        </tr>
-                    
-                        <tr class="prop">
-                            <td valign="top" class="name">Reorder Point:</td>
-                            
-                            <td valign="top" class="value">${fieldValue(bean:inventoryItemInstance, field:'reorderPoint')}</td>
-                            
-                        </tr>
-                    
-                        <tr class="prop">
-                            <td valign="top" class="name">Enable Reorder:</td>
-                            
-                            <td valign="top" class="value">${fieldValue(bean:inventoryItemInstance, field:'enableReorder')}</td>
-                            
-                        </tr>
-                        
-                        <tr class="prop">
-                            <td valign="top" class="name">Recommended Reorder Point:</td>
-                            
-                            <td valign="top" class="value">${fieldValue(bean:inventoryItemInstance, field:'recommendedReorderPoint')}</td>
-                            
-                        </tr>
-                    
-                        <tr class="prop">
-                            <td valign="top" class="name">Active:</td>
-                            
-                            <td valign="top" class="value">${fieldValue(bean:inventoryItemInstance, field:'isActive')}</td>
-                            
-                        </tr>
-                    
-                        <tr class="prop">
-                            <td valign="top" class="name">Obsolete:</td>
-                            
-                            <td valign="top" class="value">${fieldValue(bean:inventoryItemInstance, field:'isObsolete')}</td>
-                            
-                        </tr>
-                    
-                        <tr class="prop">
-                            <td valign="top" class="name">Inventory Group:</td>
-                            
-                            <td valign="top" class="value">${inventoryItemInstance?.inventoryGroup?.encodeAsHTML()}</td>
-                            
-                        </tr>
-
-                    
-                        <tr class="prop">
-                            <td valign="top" class="name">Inventory Type:</td>
-                            
-                            <td valign="top" class="value">${inventoryItemInstance?.inventoryType?.encodeAsHTML()}</td>
-                            
-                        </tr>
-                    
-                        <tr class="prop">
-                            <td valign="top" class="name">Manufacturers Part Number:</td>
-                            
-                            <td valign="top" class="value">${fieldValue(bean:inventoryItemInstance, field:'manufacturersPartNumber')}</td>
-                            
-                        </tr>
-                    
-                        <tr class="prop">
-                            <td valign="top" class="name">Suppliers Part Number:</td>
-                            
-                            <td valign="top" class="value">${fieldValue(bean:inventoryItemInstance, field:'suppliersPartNumber')}</td>
-                            
-                        </tr>
-                    
-                        <tr class="prop">
-                            <td valign="top" class="name">Recommended Reorder Point:</td>
-                            
-                            <td valign="top" class="value">${fieldValue(bean:inventoryItemInstance, field:'recommendedReorderPoint')}</td>
-                            
-                        </tr>
-                    
-                        <tr class="prop">
-                            <td valign="top" class="name">Average Delivery Time:</td>
-                            
-                            <td valign="top" class="value">${fieldValue(bean:inventoryItemInstance, field:'averageDeliveryTime')}</td>
-                            
-                        </tr>
-                    
-                        <tr class="prop">
-                            <td valign="top" class="name">Alternate Items:</td>
-                            
-                            <td  valign="top" style="text-align:left;" class="value">
-                                <ul>
-                                <g:each var="a" in="${inventoryItemInstance.alternateItems}">
-                                    <li><g:link controller="inventoryItemDetailed" action="show" id="${a.id}">${a?.encodeAsHTML()}</g:link></li>
-                                </g:each>
-                                </ul>
-                            </td>
-                            
-                        </tr>
-                    
-                        <tr class="prop">
-                            <td valign="top" class="name">Inventory Movements:</td>
-                            
-                            <td  valign="top" style="text-align:left;" class="value">
-                                <ul>
-                                <g:each var="i" in="${inventoryItemInstance.inventoryMovements}">
-                                    <li><g:link controller="inventoryMovementDetailed" action="show" id="${i.id}">${i?.encodeAsHTML()}</g:link></li>
-                                </g:each>
-                                </ul>
-                            </td>
-                            
-                        </tr>
-                    
-                        <tr class="prop">
-                            <td valign="top" class="name">Manufacturers:</td>
-                            
-                            <td  valign="top" style="text-align:left;" class="value">
-                                <ul>
-                                <g:each var="m" in="${inventoryItemInstance.manufacturers}">
-                                    <li><g:link controller="manufacturerDetailed" action="show" id="${m.id}">${m?.encodeAsHTML()}</g:link></li>
-                                </g:each>
-                                </ul>
-                            </td>
-                            
-                        </tr>
-                    
-                        <tr class="prop">
-                            <td valign="top" class="name">Spare For:</td>
-                            
-                            <td  valign="top" style="text-align:left;" class="value">
-                                <ul>
-                                <g:each var="s" in="${inventoryItemInstance.spareFor}">
-                                    <li><g:link controller="assetDetailed" action="show" id="${s.id}">${s?.encodeAsHTML()}</g:link></li>
-                                </g:each>
-                                </ul>
-                            </td>
-                            
-                        </tr>
-                    
-                        <tr class="prop">
-                            <td valign="top" class="name">Suppliers:</td>
-                            
-                            <td  valign="top" style="text-align:left;" class="value">
-                                <ul>
-                                <g:each var="s" in="${inventoryItemInstance.suppliers}">
-                                    <li><g:link controller="supplierDetailed" action="show" id="${s.id}">${s?.encodeAsHTML()}</g:link></li>
-                                </g:each>
-                                </ul>
-                            </td>
-                            
-                        </tr>
-                    
-                    </tbody>
-                </table>
+
+            <g:hasErrors bean="${inventoryItemInstance}">
+            <div class="errors">
+                <g:renderErrors bean="${inventoryItemInstance}" as="list" />
             </div>
-            <div class="buttons">
-                <g:form>
-                    <input type="hidden" name="id" value="${inventoryItemInstance?.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>
+            </g:hasErrors>
+
+            <richui:tabView id="tabView">
+
+                <richui:tabLabels>
+                    <richui:tabLabel selected="${showTab.inventory}" title="Inventory Item" />
+                    <richui:tabLabel selected="${showTab.detail}" title="Detail" />
+                    <richui:tabLabel selected="${showTab.movement}" title="Movement" />
+                </richui:tabLabels>
+
+                <richui:tabContents>
+
+<!-- Start Inventory tab -->
+                    <richui:tabContent>
+
+                        <g:if test="${inventoryMovementInstance}" >
+
+                            <g:form controller="inventoryItemDetailed" method="post" >
+                                <div class="dialog">
+                                    <table>
+                                        <tbody>
+                                                <g:hiddenField name="task.id" value="${inventoryMovementInstance.task.id}"/>
+                                                <g:hiddenField name="inventoryItem.id" value="${inventoryItemInstance.id}"/>
+                                                <tr class="prop">
+                                                    <td valign="top" class="name">Use on task:</td>
+                                                    <td valign="top" class="value">
+                                                        <g:link controller="taskDetailed" action="show" id="${inventoryMovementInstance.task.id}" >
+                                                            ${Task.get(inventoryMovementInstance.task.id).encodeAsHTML()}
+                                                        </g:link>
+                                                    </td>
+                                                </tr>
+
+                                                <tr class="prop">
+                                                    <td valign="top" class="name">
+                                                        <label for="quantity">Quantity:</label>
+                                                    </td>
+                                                    <td valign="top">
+                                                        <input class="medium ${hasErrors(bean:inventoryMovementInstance,field:'quantity','errors')}"
+                                                                    type="text" id="quantity" name="quantity"
+                                                                    value="${fieldValue(bean:inventoryMovementInstance,field:'quantity')}"/>
+                                                        ${inventoryItemInstance.unitOfMeasure?.encodeAsHTML()}
+
+                                                        <span class="buttons">
+                                                            <g:actionSubmit action="useInventoryItem" class="save" value="${InventoryMovementType.get(1)}" />
+                                                        </span>
+
+                                                    </td>
+                                                </tr>
+
+                                        </tbody>
+                                    </table>
+                                </div>
+                            </g:form>
+
+                            <br />
+
+                        </g:if>
+
+                        <div class="dialog">
+                            <table>
+                                <tbody>
+
+                                    <tr class="prop">
+                                        <td valign="top" class="name">Picture:</td>
+                                        <td valign="top" class="value">
+                                            <g:if test="${inventoryItemInstance.picture}" >
+                                                <span class='gallery'><wa:pictureLightboxAnchor picture="${inventoryItemInstance.picture}" size="${Image.Medium}" lightboxSize="${Image.Large}" target="_blank" title="Show Original" /></span>
+                                            </g:if>
+                                            <g:else>
+                                                <g:link controller="pictureDetailed"
+                                                                params="['inventoryItem.id':inventoryItemInstance.id]"
+                                                                action="create">
+                                                    Add Picture
+                                                </g:link>
+                                            </g:else>
+                                        </td>
+                                    </tr>
+
+                                    <tr class="prop">
+                                        <td valign="top" class="name">Name:</td>
+
+                                        <td valign="top" class="value">${fieldValue(bean:inventoryItemInstance, field:'name')}</td>
+                                    </tr>
+
+                                    <tr class="prop">
+                                        <td valign="top" class="name">Description:</td>
+
+                                        <td valign="top" class="value">${fieldValue(bean:inventoryItemInstance, field:'description')}</td>
+                                    </tr>
+
+                                    <tr class="prop">
+                                        <td valign="top" class="name">In Stock:</td>
+
+                                        <td valign="top" class="value">
+                                            ${fieldValue(bean:inventoryItemInstance, field:'unitsInStock')} ${inventoryItemInstance.unitOfMeasure.encodeAsHTML()}
+                                        </td>
+                                    </tr>
+
+                                    <tr class="prop">
+                                        <td valign="top" class="name">Location:</td>
+
+                                        <td valign="top" class="value">
+                                            <g:link controller="inventoryLocationDetailed" action="show" id="${inventoryItemInstance.inventoryLocation?.id}">
+                                                ${inventoryItemInstance.inventoryLocation?.encodeAsHTML()}
+                                            </g:link>
+                                                in ${inventoryItemInstance.inventoryLocation?.inventoryStore.encodeAsHTML()}
+                                        </td>
+                                    </tr>
+
+                                    <tr class="prop">
+                                        <td valign="top" class="name">Active:</td>
+
+                                        <td valign="top" class="value">${fieldValue(bean:inventoryItemInstance, field:'isActive')}</td>
+                                    </tr>
+
+                                    <tr class="prop">
+                                        <td valign="top" class="name">Alternate Items:</td>
+
+                                        <td  valign="top" style="text-align:left;" class="value">
+                                            <ul>
+                                            <g:each var="a" in="${inventoryItemInstance.alternateItems}">
+                                                <li><g:link controller="inventoryItemDetailed" action="show" id="${a.id}">${a?.encodeAsHTML()}</g:link></li>
+                                            </g:each>
+                                            </ul>
+                                        </td>
+                                    </tr>
+
+                                    <tr class="prop">
+                                        <td valign="top" class="name">Spare For:</td>
+
+                                        <td  valign="top" style="text-align:left;" class="value">
+                                            <ul>
+                                            <g:each var="s" in="${inventoryItemInstance.spareFor}">
+                                                <li><g:link controller="assetDetailed" action="show" id="${s.id}">${s?.encodeAsHTML()}</g:link></li>
+                                            </g:each>
+                                            </ul>
+                                        </td>
+                                    </tr>
+
+                                </tbody>
+                            </table>
+                        </div>
+                        <div class="buttons">
+                            <g:form>
+                                <g:hiddenField name="id" value="${inventoryItemInstance.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>
+
+                        <br />
+
+                    </richui:tabContent>
+<!-- End Inventory tab -->
+
+<!-- Start Detail tab -->
+                    <richui:tabContent>
+
+                        <div class="dialog">
+                            <table>
+                                <tbody>
+
+                                    <tr class="prop">
+                                        <td valign="top" class="name">Id:</td>
+                                        <td valign="top" class="value">${fieldValue(bean:inventoryItemInstance, field:'id')}</td>
+                                    </tr>
+
+                                    <tr class="prop">
+                                        <td valign="top" class="name">Obsolete:</td>
+                                        <td valign="top" class="value">${fieldValue(bean:inventoryItemInstance, field:'isObsolete')}</td>
+                                    </tr>
+
+                                    <tr class="prop">
+                                        <td valign="top" class="name">Inventory Group:</td>
+                                        <td valign="top" class="value">${inventoryItemInstance.inventoryGroup?.encodeAsHTML()}</td>
+                                    </tr>
+
+                                    <tr class="prop">
+                                        <td valign="top" class="name">Inventory Type:</td>
+                                        <td valign="top" class="value">${inventoryItemInstance.inventoryType?.encodeAsHTML()}</td>
+                                    </tr>
+
+                                    <tr class="prop">
+                                        <td valign="top" class="name">Reorder Point:</td>
+                                        <td valign="top" class="value">${fieldValue(bean:inventoryItemInstance, field:'reorderPoint')}</td>
+                                    </tr>
+
+                                    <tr class="prop">
+                                        <td valign="top" class="name">Enable Reorder:</td>
+                                        <td valign="top" class="value">${fieldValue(bean:inventoryItemInstance, field:'enableReorder')}</td>
+                                    </tr>
+
+                                    <tr class="prop">
+                                        <td valign="top" class="name">Recommended Reorder Point:</td>
+                                        <td valign="top" class="value">${fieldValue(bean:inventoryItemInstance, field:'recommendedReorderPoint')}</td>
+                                    </tr>
+
+                                    <tr class="prop">
+                                        <td valign="top" class="name">Suppliers Part Number:</td>
+                                        <td valign="top" class="value">${fieldValue(bean:inventoryItemInstance, field:'suppliersPartNumber')}</td>
+                                    </tr>
+
+                                    <tr class="prop">
+                                        <td valign="top" class="name">Suppliers:</td>
+
+                                        <td  valign="top" style="text-align:left;" class="value">
+                                            <ul>
+                                            <g:each var="s" in="${inventoryItemInstance.suppliers}">
+                                                <li><g:link controller="supplierDetailed" action="show" id="${s.id}">${s?.encodeAsHTML()}</g:link></li>
+                                            </g:each>
+                                            </ul>
+                                        </td>
+                                    </tr>
+
+                                    <tr class="prop">
+                                        <td valign="top" class="name">Average Delivery Time:</td>
+                                        <td valign="top" class="value">
+                                        ${fieldValue(bean:inventoryItemInstance, field:'averageDeliveryTime')}
+                                        ${fieldValue(bean:inventoryItemInstance, field:'averageDeliveryPeriod')}
+                                        </td>
+                                    </tr>
+
+                                    <tr class="prop">
+                                        <td valign="top" class="name">Manufacturers Part Number:</td>
+                                        <td valign="top" class="value">${fieldValue(bean:inventoryItemInstance, field:'manufacturersPartNumber')}</td>
+                                    </tr>
+
+                                    <tr class="prop">
+                                        <td valign="top" class="name">Manufacturers:</td>
+
+                                        <td  valign="top" style="text-align:left;" class="value">
+                                            <ul>
+                                            <g:each var="m" in="${inventoryItemInstance.manufacturers}">
+                                                <li><g:link controller="manufacturerDetailed" action="show" id="${m.id}">${m?.encodeAsHTML()}</g:link></li>
+                                            </g:each>
+                                            </ul>
+                                        </td>
+                                    </tr>
+
+
+                                </tbody>
+                            </table>
+                        </div>
+                        <div class="buttons">
+                            <g:form>
+                                <g:hiddenField name="id" value="${inventoryItemInstance.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>
+                    </richui:tabContent>
+<!-- End Detail tab -->
+
+<!-- Start Movement tab -->
+                    <richui:tabContent>
+
+                        <g:if test="${inventoryMovementList.isEmpty()}">
+                            <br />
+                            No Inventory Movements.
+                            <br />
+                            <br />
+
+                            <div class="buttons">
+                                <g:form controller="inventoryMovementDetailed">
+                                    <g:hiddenField name="id" value="${inventoryItemInstance?.id}" />
+                                    <span class="button"><g:actionSubmit action="create" class="add" value="Create" /></span>
+                                </g:form>
+                            </div>
+
+                        </g:if>
+                        <g:else>
+
+                            <div class="list">
+                                <table>
+                                    <thead>
+                                        <tr>
+                                            <th>Quantity</th>
+                                            <th>Movement Type</th>
+                                            <th>Date</th>
+                                            <th>Person</th>
+                                            <th></th>
+                                        </tr>
+                                    </thead>
+                                    <tbody>
+                                        <g:each in="${inventoryMovementList}" status="i" var="movements">
+                                            <tr class="${(i % 2) == 0 ? 'clickableOdd' : 'clickableEven'}" onclick='window.location = "${request.getContextPath()}/inventoryMovementDetailed/show/${movements.id}"'/>
+
+                                                <td>${fieldValue(bean:movements, field:'quantity')}</td>
+                                                <td>${fieldValue(bean:movements, field:'inventoryMovementType')}</td>
+                                                <td><g:formatDate date="${movements.date}" format="EEE, dd-MMM-yyyy"/></td>
+                                                <td>${fieldValue(bean:movements, field:'person')}</td>
+                                                <td>
+                                                    <g:link controller="inventoryMovementDetailed" action="show" id="${movements.id}">
+                                                        <img  src="${resource(dir:'images/skin',file:'database_go.png')}" alt="Show" />
+                                                    </g:link>
+                                                </td>
+
+                                            </tr>
+                                        </g:each>
+                                    </tbody>
+                                </table>
+                            </div>
+
+                            <div class="buttons">
+                                <g:form controller="inventoryMovementDetailed">
+                                    <g:hiddenField name="id" value="${inventoryItemInstance?.id}" />
+                                    <g:if test="${inventoryMovementListTotal > inventoryMovementListMax}">
+                                        Showing ${inventoryMovementListMax} of ${inventoryMovementListTotal}
+                                        <br />
+                                    </g:if>
+                                    <g:else>
+                                        Total ${inventoryMovementListTotal}
+                                        <br />
+                                    </g:else>
+                                    <span class="button"><g:actionSubmit action="listInventoryMovements" class="table" value="List" /></span>
+                                    <span class="button"><g:actionSubmit action="create" class="add" value="Create" /></span>
+                                </g:form>
+                            </div>
+
+                        </g:else>
+
+                    </richui:tabContent>
+<!-- End Movement tab -->
+
+                </richui:tabContents>
+            </richui:tabView>
+
+
         </div>
     </body>
Index: /trunk/grails-app/views/inventoryMovementDetailed/create.gsp
===================================================================
--- /trunk/grails-app/views/inventoryMovementDetailed/create.gsp	(revision 224)
+++ /trunk/grails-app/views/inventoryMovementDetailed/create.gsp	(revision 225)
@@ -56,5 +56,5 @@
                                 <tr class="prop">
                                     <td valign="top" class="name">
-                                        <label for="taskInstance">Linking with Task:</label>
+                                        <label for="taskInstance">Linking with task:</label>
                                     </td>
                                     <td valign="top" name="inventoryMovementInstance.task" class="value">
Index: /trunk/grails-app/views/taskDetailed/show.gsp
===================================================================
--- /trunk/grails-app/views/taskDetailed/show.gsp	(revision 224)
+++ /trunk/grails-app/views/taskDetailed/show.gsp	(revision 225)
@@ -30,9 +30,9 @@
 
                 <richui:tabLabels>
-                    <richui:tabLabel selected="${showTaskTab}" title="Task #${taskInstance.id}" />
-                    <richui:tabLabel selected="${showProcedureTab}" title="Procedure" />
-                    <richui:tabLabel selected="${showRecurrenceTab}" title="Recurrence" />
-                    <richui:tabLabel selected="${showInventoryTab}" title="Inventory" />
-                    <richui:tabLabel selected="${showSubTasksTab}" title="Sub Tasks" />
+                    <richui:tabLabel selected="${showTab.task}" title="Task #${taskInstance.id}" />
+                    <richui:tabLabel selected="${showTab.procedure}" title="Procedure" />
+                    <richui:tabLabel selected="${showTab.recurrence}" title="Recurrence" />
+                    <richui:tabLabel selected="${showTab.inventory}" title="Inventory" />
+                    <richui:tabLabel selected="${showTab.subTasks}" title="Sub Tasks" />
                 </richui:tabLabels>
 
@@ -530,5 +530,5 @@
                         <g:if test="${inventoryMovementList.isEmpty()}">
                             <br />
-                            No Inventory Used.
+                            No Inventory Movements.
                             <br />
                             <br />
@@ -567,6 +567,6 @@
                         </g:else>
 
-                        <g:form controller="inventoryMovementDetailed" >
-                            <input type="hidden" name="task.id" value="${taskInstance?.id}" />
+                        <g:form controller="inventoryItemDetailed" >
+                            <g:hiddenField name="task.id" value="${taskInstance?.id}" />
                             <div class="buttons">
                                 <g:if test="${!inventoryMovementList.isEmpty()}">
@@ -575,5 +575,5 @@
                                 </g:if>
                                 <span class="button">
-                                    <g:actionSubmit value="Add" action="create"  class="add"/>
+                                    <g:actionSubmit action="findInventoryItemForMovement" class="add" value="Add"/>
                                 </span>
                             </div>
