Index: /trunk/grails-app/controllers/InventoryItemPurchaseDetailedController.groovy
===================================================================
--- /trunk/grails-app/controllers/InventoryItemPurchaseDetailedController.groovy	(revision 609)
+++ /trunk/grails-app/controllers/InventoryItemPurchaseDetailedController.groovy	(revision 610)
@@ -276,4 +276,5 @@
         }
 
+        params.errorMessage = g.message(code: result.error.code, args: result.error.args)
         render(view:'create', model:['inventoryItemPurchaseInstance': result.inventoryItemPurchaseInstance])
     }
Index: /trunk/grails-app/domain/InventoryItem.groovy
===================================================================
--- /trunk/grails-app/domain/InventoryItem.groovy	(revision 609)
+++ /trunk/grails-app/domain/InventoryItem.groovy	(revision 610)
@@ -21,5 +21,5 @@
     boolean isActive = true
     boolean isObsolete = false
-    boolean enableReorder = true
+    boolean enableReorder = true /// @todo: rename to enableReorderListing.
 
     static mapping = {
Index: /trunk/grails-app/i18n/messages.properties
===================================================================
--- /trunk/grails-app/i18n/messages.properties	(revision 609)
+++ /trunk/grails-app/i18n/messages.properties	(revision 610)
@@ -200,6 +200,9 @@
 task.associatedAssets.help=These assets are to be associated with this task, but costs will not be assigned.
 
+# InventoryItem Messages.
 inventory.item.is.obsolete=This item has been flagged as obsolete.
 inventory.item.not.active=This item has been flagged as not active.
+inventory.item.reorder.not.allowed=Reorder not allowed.
+inventory.item.reorder.listing.disabled=This item has reorder listing disabled and will not appear on reorder lists.
 inventory.item.already.has.picture=Inventory item already has a picture, please delete the old picture first.
 inventory.item.picture.file.unrecognised=Image file [{0}]: type not recognised.
@@ -214,4 +217,5 @@
 inventoryItemPurchase.delete.failure.received.exists=Could not delete, items have been received.
 inventoryItemPurchase.delete.failure.payment.approved=Could not delete, payment has been approved.
+inventoryItemPurchase.operation.not.permitted.on.inactive.or.obsolete.item=This operation is not permitted on an inactive or obsolete inventory item.
 
 assignedGroup.task.not.found=Please select a task and then ''Add Assigned Group''.
Index: /trunk/grails-app/services/InventoryPurchaseService.groovy
===================================================================
--- /trunk/grails-app/services/InventoryPurchaseService.groovy	(revision 609)
+++ /trunk/grails-app/services/InventoryPurchaseService.groovy	(revision 610)
@@ -264,4 +264,10 @@
             result.inventoryItemPurchaseInstance.inventoryItem.unitOfMeasure
 
+            // Prevent ordering on obsolete or inactive inventoryItem.
+            def isObsolete = result.inventoryItemPurchaseInstance.inventoryItem?.isObsolete
+            def isActive = result.inventoryItemPurchaseInstance.inventoryItem?.isActive
+            if(isObsolete || !isActive)
+                return fail(code:"inventoryItemPurchase.operation.not.permitted.on.inactive.or.obsolete.item")
+
             if(result.inventoryItemPurchaseInstance.hasErrors() || !result.inventoryItemPurchaseInstance.save())
                 return fail(code:"default.create.failure")
Index: /trunk/grails-app/views/inventoryItemDetailed/create.gsp
===================================================================
--- /trunk/grails-app/views/inventoryItemDetailed/create.gsp	(revision 609)
+++ /trunk/grails-app/views/inventoryItemDetailed/create.gsp	(revision 610)
@@ -84,5 +84,5 @@
                             <tr class="prop">
                                 <td valign="top" class="name">
-                                    <label for="enableReorder">Enable Reorder:</label>
+                                    <label for="enableReorder">Enable Reorder Listing:</label>
                                 </td>
                                 <td valign="top" class="value ${hasErrors(bean:inventoryItemInstance,field:'enableReorder','errors')}">
Index: /trunk/grails-app/views/inventoryItemDetailed/edit.gsp
===================================================================
--- /trunk/grails-app/views/inventoryItemDetailed/edit.gsp	(revision 609)
+++ /trunk/grails-app/views/inventoryItemDetailed/edit.gsp	(revision 610)
@@ -129,5 +129,5 @@
                             <tr class="prop">
                                 <td valign="top" class="name">
-                                    <label for="enableReorder">Enable Reorder:</label>
+                                    <label for="enableReorder">Enable Reorder Listing:</label>
                                 </td>
                                 <td valign="top" class="value ${hasErrors(bean:inventoryItemInstance,field:'enableReorder','errors')}">
Index: /trunk/grails-app/views/inventoryItemDetailed/show.gsp
===================================================================
--- /trunk/grails-app/views/inventoryItemDetailed/show.gsp	(revision 609)
+++ /trunk/grails-app/views/inventoryItemDetailed/show.gsp	(revision 610)
@@ -25,5 +25,10 @@
                             <li><g:message code="inventory.item.not.active" /><li>
                         </g:if>
-                    <ul>
+                    </ul>
+                </div>
+            </g:if>
+            <g:if test="${!inventoryItemInstance.enableReorder}" >
+                <div class="message">
+                    <g:message code="inventory.item.reorder.listing.disabled" />
                 </div>
             </g:if>
@@ -247,5 +252,5 @@
 
                                     <tr class="prop">
-                                        <td valign="top" class="name">Enable Reorder:</td>
+                                        <td valign="top" class="name">Enable Reorder Listing:</td>
                                         <td valign="top" class="value">${fieldValue(bean:inventoryItemInstance, field:'enableReorder')}</td>
                                     </tr>
@@ -433,8 +438,17 @@
 
                             <div class="buttons">
-                                <g:form controller="inventoryItemPurchaseDetailed">
-                                    <g:hiddenField name="inventoryItem.id" value="${inventoryItemInstance.id}" />
-                                    <span class="button"><g:actionSubmit action="create" class="add" value="Order" /></span>
-                                </g:form>
+                                <!--Fake button to prevent ordering disabled inventory items-->
+                                <g:if test="${inventoryItemInstance.isObsolete || !inventoryItemInstance.isActive}" >
+                                    <g:form controller="inventoryItemDetailed">
+                                        <g:hiddenField name="id" value="${inventoryItemInstance.id}" />
+                                        <span class="button"><g:actionSubmit action="show" class="add" value="${g.message(code:'inventory.item.reorder.not.allowed')}" /></span>
+                                    </g:form>
+                                </g:if>
+                                <g:else><!--Real order button.-->
+                                    <g:form controller="inventoryItemPurchaseDetailed">
+                                        <g:hiddenField name="inventoryItem.id" value="${inventoryItemInstance.id}" />
+                                        <span class="button"><g:actionSubmit action="create" class="add" value="Order" /></span>
+                                    </g:form>
+                                </g:else>
                             </div>
 
@@ -551,9 +565,21 @@
 
                             <div class="buttons">
-                                <g:form controller="inventoryItemPurchaseDetailed">
-                                    <g:hiddenField name="inventoryItem.id" value="${inventoryItemInstance.id}" />
-                                    Results: ${inventoryItemPurchases.size()} / ${inventoryItemPurchasesTotal}
-                                    <span class="button"><g:actionSubmit action="create" class="add" value="Order" /></span>
-                                </g:form>
+                                <!--Fake button to prevent ordering disabled inventory items-->
+                                <g:if test="${inventoryItemInstance.isObsolete || !inventoryItemInstance.isActive}" >
+                                    <g:form controller="inventoryItemDetailed">
+                                        <g:hiddenField name="id" value="${inventoryItemInstance.id}" />
+                                        Results: ${inventoryItemPurchases.size()} / ${inventoryItemPurchasesTotal}
+                                        <span class="button">
+                                            <g:actionSubmit action="show" class="add" value="${g.message(code:'inventory.item.reorder.not.allowed')}" />
+                                        </span>
+                                    </g:form>
+                                </g:if>
+                                <g:else><!--Real order button.-->
+                                    <g:form controller="inventoryItemPurchaseDetailed">
+                                        <g:hiddenField name="inventoryItem.id" value="${inventoryItemInstance.id}" />
+                                        Results: ${inventoryItemPurchases.size()} / ${inventoryItemPurchasesTotal}
+                                        <span class="button"><g:actionSubmit action="create" class="add" value="Order" /></span>
+                                    </g:form>
+                                </g:else>
                             </div>
 
