Index: trunk/grails-app/domain/InventoryItemPurchase.groovy
===================================================================
--- trunk/grails-app/domain/InventoryItemPurchase.groovy	(revision 608)
+++ trunk/grails-app/domain/InventoryItemPurchase.groovy	(revision 609)
@@ -7,4 +7,5 @@
     InventoryItemPurchaseType inventoryItemPurchaseType
     Supplier supplier
+    TaskBudgetStatus taskBudgetStatus
 
     Date date = new Date()
Index: trunk/grails-app/i18n/messages.properties
===================================================================
--- trunk/grails-app/i18n/messages.properties	(revision 608)
+++ trunk/grails-app/i18n/messages.properties	(revision 609)
@@ -40,4 +40,8 @@
 person.pass.blank=Password cannot be blank
 person.pass.doesNotMatch=Passwords must match
+
+#
+# Help Balloon messages.
+#
 
 person.personGroups=Person Groups
@@ -59,4 +63,35 @@
 person.authorities.help=Give this person authority to do things in the application. \
     The user must logout for changes to take effect.
+
+# InventoryItemPurchase properties.
+inventoryItemPurchase.purchaseOrderNumber=Purchase Order #
+inventoryItemPurchase.purchaseOrderNumber.help=This number must be exact in case and spacing. \
+    All purchase received and invoice approval requires this number to track correctly. \
+    The number may only appear once for each inventory item. \
+    To enter multiple line items for a purchase order # 'M123' use 'M123.1' and 'M123.2' for example.
+inventoryItemPurchase.order.placed.date=Date
+inventoryItemPurchase.order.placed.date.help=The date that the order was placed. \
+    May be adjusted at the end of financial years. Also see the 'date created' and 'last updated' properties.
+inventoryItemPurchase.cost.code=Cost Code
+inventoryItemPurchase.cost.code.help=Cost codes assign cost to the correct asset and accouting ledger number/account. \
+    Ideally cost codes should be asset based and reflect the asset tree.
+inventoryItemPurchase.task.budget.status=Budget Status
+inventoryItemPurchase.task.budget.status.help=Was this purchase planned for in the budget or is it an unplanned spend.
+inventoryItemPurchase.supplier=Supplier
+inventoryItemPurchase.supplier.help=The supplier to make the purchase out to.
+inventoryItemPurchase.quantity=Quantity
+inventoryItemPurchase.quantity.help=The number of inventory item units purchased.
+inventoryItemPurchase.receive.quantity=Receive Quantity
+inventoryItemPurchase.receive.quantity.help=The number of inventory item units received.
+inventoryItemPurchase.approve.quantity=Approve Quantity
+inventoryItemPurchase.approve.quantity.help=The number of inventory item units to approve payment for.
+inventoryItemPurchase.order.value=Order Value
+inventoryItemPurchase.order.value.help=The total value of this line item.
+inventoryItemPurchase.receive.value=Receive Value
+inventoryItemPurchase.receive.value.help=The value of items received.
+inventoryItemPurchase.approve.value=Approve Value
+inventoryItemPurchase.approve.value.help=The value to approve payment for.
+inventoryItemPurchase.invoice.number=Invoice Number
+inventoryItemPurchase.invoice.number.help=The invoice number that this line item approves payment for.
 
 entry.duration=Duration
Index: trunk/grails-app/views/inventoryItemPurchaseDetailed/approveInvoicePayment.gsp
===================================================================
--- trunk/grails-app/views/inventoryItemPurchaseDetailed/approveInvoicePayment.gsp	(revision 608)
+++ trunk/grails-app/views/inventoryItemPurchaseDetailed/approveInvoicePayment.gsp	(revision 609)
@@ -22,4 +22,5 @@
                 <g:hiddenField name="receivedId" value="${receivedId}" />
                 <g:hiddenField name="supplier.id" value="${inventoryItemPurchaseInstance.supplier?.id}" />
+                <g:hiddenField name="taskBudgetStatus.id" value="${inventoryItemPurchaseInstance.taskBudgetStatus?.id}" />
                 <g:hiddenField name="returnTo" value="${params.returnTo}" />
                 <div class="dialog">
@@ -60,8 +61,18 @@
                             <tr class="prop">
                                 <td valign="top" class="name">
+                                    <label for="taskBudgetStatus">Budget Status:</label>
+                                </td>
+                                <td valign="top" class="value ${hasErrors(bean:inventoryItemPurchaseInstance,field:'taskBudgetStatus','errors')}">
+                                    ${inventoryItemPurchaseInstance.taskBudgetStatus.encodeAsHTML()}
+                                </td>
+                            </tr> 
+                        
+                            <tr class="prop">
+                                <td valign="top" class="name">
                                     <label for="quantity">Invoice #:</label>
                                 </td>
                                 <td valign="top" class="value ${hasErrors(bean:inventoryItemPurchaseInstance,field:'invoiceNumber','errors')}">
                                     <input type="text" id="invoiceNumber" name="invoiceNumber" value="${fieldValue(bean:inventoryItemPurchaseInstance,field:'invoiceNumber')}" />
+                                    <g:helpBalloon code="inventoryItemPurchase.invoice.number" />
                                 </td>
                             </tr> 
@@ -74,4 +85,5 @@
                                     <input type="text" id="quantity" name="quantity" value="${fieldValue(bean:inventoryItemPurchaseInstance,field:'quantity')}" />
                                     ${inventoryItemPurchaseInstance.inventoryItem.unitOfMeasure.encodeAsHTML()}
+                                    <g:helpBalloon code="inventoryItemPurchase.approve.quantity" />
                                 </td>
                             </tr> 
@@ -79,5 +91,5 @@
                             <tr class="prop">
                                 <td valign="top" class="name">
-                                    <label for="orderValue">Purchase Order $:</label>
+                                    <label for="orderValue">Approve Value:</label>
                                 </td>
                                 <td valign="top">
@@ -86,4 +98,5 @@
                                                     value="${fieldValue(bean:inventoryItemPurchaseInstance,field:'orderValueAmount')}" />
                                     ${inventoryItemPurchaseInstance.orderValueCurrency?.encodeAsHTML()}
+                                    <g:helpBalloon code="inventoryItemPurchase.approve.value" />
                                 </td>
                             </tr> 
Index: trunk/grails-app/views/inventoryItemPurchaseDetailed/create.gsp
===================================================================
--- trunk/grails-app/views/inventoryItemPurchaseDetailed/create.gsp	(revision 608)
+++ trunk/grails-app/views/inventoryItemPurchaseDetailed/create.gsp	(revision 609)
@@ -46,4 +46,5 @@
                                 <td valign="top" class="value ${hasErrors(bean:inventoryItemPurchaseInstance,field:'purchaseOrderNumber','errors')}">
                                     <input type="text" maxlength="50" id="purchaseOrderNumber" name="purchaseOrderNumber" value="${fieldValue(bean:inventoryItemPurchaseInstance,field:'purchaseOrderNumber')}"/>
+                                    <g:helpBalloon code="inventoryItemPurchase.purchaseOrderNumber" />
                                 </td>
                             </tr> 
@@ -55,4 +56,5 @@
                                 <td valign="top" class="value ${hasErrors(bean:inventoryItemPurchaseInstance,field:'date','errors')}">
                                     <richui:dateChooser name="date" format="dd-MM-yyyy" value="${inventoryItemPurchaseInstance.date}" />
+                                    <g:helpBalloon code="inventoryItemPurchase.order.placed.date" />
                                 </td>
                             </tr> 
@@ -67,5 +69,22 @@
                                                         name="costCode.id"
                                                         value="${inventoryItemPurchaseInstance?.costCode?.id}"
-                                                        noSelection="['null':/${g.message(code:'default.please.select.text')}/]"></g:select>
+                                                        noSelection="['null':/${g.message(code:'default.please.select.text')}/]">
+                                    </g:select>
+                                    <g:helpBalloon code="inventoryItemPurchase.cost.code" />
+                                </td>
+                            </tr>
+                        
+                            <tr class="prop">
+                                <td valign="top" class="name">
+                                    <label for="taskBudgetStatus">Budget Status:</label>
+                                </td>
+                                <td valign="top" class="value ${hasErrors(bean:inventoryItemPurchaseInstance,field:'taskBudgetStatus','errors')}">
+                                    <g:select optionKey="id"
+                                                        from="${ TaskBudgetStatus.findAllByIsActive(true).sort { p1, p2 -> p1.name.compareToIgnoreCase(p2.name) } }"
+                                                        name="taskBudgetStatus.id"
+                                                        value="${inventoryItemPurchaseInstance?.taskBudgetStatus?.id}"
+                                                        noSelection="['null':/${g.message(code:'default.please.select.text')}/]">
+                                    </g:select>
+                                    <g:helpBalloon code="inventoryItemPurchase.task.budget.status" />
                                 </td>
                             </tr>
@@ -82,4 +101,5 @@
                                                         noSelection="['null':/${g.message(code:'default.please.select.text')}/]">
                                     </g:select>
+                                    <g:helpBalloon code="inventoryItemPurchase.supplier" />
                                     <p><g:link controller="supplierDetailed" action="create">+Add Supplier</g:link></p>
                                 </td>
@@ -93,4 +113,5 @@
                                     <input type="text" id="quantity" name="quantity" value="${fieldValue(bean:inventoryItemPurchaseInstance,field:'quantity')}" />
                                     ${inventoryItemPurchaseInstance.inventoryItem.unitOfMeasure.encodeAsHTML()}
+                                    <g:helpBalloon code="inventoryItemPurchase.quantity" />
                                 </td>
                             </tr> 
@@ -108,4 +129,5 @@
                                                                         from="${grailsApplication.config.currencyList}">
                                     </g:currencySelect>
+                                    <g:helpBalloon code="inventoryItemPurchase.order.value" />
                                 </td>
                             </tr>
Index: trunk/grails-app/views/inventoryItemPurchaseDetailed/edit.gsp
===================================================================
--- trunk/grails-app/views/inventoryItemPurchaseDetailed/edit.gsp	(revision 608)
+++ trunk/grails-app/views/inventoryItemPurchaseDetailed/edit.gsp	(revision 609)
@@ -6,4 +6,5 @@
         <meta name="layout" content="main" />
         <title>Edit InventoryItemPurchase</title>
+        <resource:dateChooser />
     </head>
     <body>
@@ -45,4 +46,5 @@
                                 <td valign="top" class="value ${hasErrors(bean:inventoryItemPurchaseInstance,field:'purchaseOrderNumber','errors')}">
                                     <input type="text" maxlength="50" id="purchaseOrderNumber" name="purchaseOrderNumber" value="${fieldValue(bean:inventoryItemPurchaseInstance,field:'purchaseOrderNumber')}"/>
+                                    <g:helpBalloon code="inventoryItemPurchase.purchaseOrderNumber" />
                                 </td>
                             </tr>
@@ -54,4 +56,5 @@
                                 <td valign="top" class="value ${hasErrors(bean:inventoryItemPurchaseInstance,field:'date','errors')}">
                                     <richui:dateChooser name="date" format="dd-MM-yyyy" value="${inventoryItemPurchaseInstance.date}" />
+                                    <g:helpBalloon code="inventoryItemPurchase.order.placed.date" />
                                 </td>
                             </tr> 
@@ -65,5 +68,21 @@
                                                         from="${ CostCode.findAllByIsActive(true).sort { p1, p2 -> p1.name.compareToIgnoreCase(p2.name) } }"
                                                         name="costCode.id"
-                                                        value="${inventoryItemPurchaseInstance?.costCode?.id}" ></g:select>
+                                                        value="${inventoryItemPurchaseInstance?.costCode?.id}" >
+                                    </g:select>
+                                    <g:helpBalloon code="inventoryItemPurchase.cost.code" />
+                                </td>
+                            </tr>
+                        
+                            <tr class="prop">
+                                <td valign="top" class="name">
+                                    <label for="taskBudgetStatus">Budget Status:</label>
+                                </td>
+                                <td valign="top" class="value ${hasErrors(bean:inventoryItemPurchaseInstance,field:'taskBudgetStatus','errors')}">
+                                    <g:select optionKey="id"
+                                                        from="${ TaskBudgetStatus.findAllByIsActive(true).sort { p1, p2 -> p1.name.compareToIgnoreCase(p2.name) } }"
+                                                        name="taskBudgetStatus.id"
+                                                        value="${inventoryItemPurchaseInstance?.taskBudgetStatus?.id}" >
+                                    </g:select>
+                                    <g:helpBalloon code="inventoryItemPurchase.task.budget.status" />
                                 </td>
                             </tr>
@@ -80,4 +99,5 @@
                                                         noSelection="['null':/${g.message(code:'default.please.select.text')}/]">
                                     </g:select>
+                                    <g:helpBalloon code="inventoryItemPurchase.supplier" />
                                     <p><g:link controller="supplierDetailed" action="create">+Add Supplier</g:link></p>
                                 </td>
@@ -87,5 +107,8 @@
                                 <td valign="top" class="name">Quantity:</td>
                                 
-                                <td valign="top" class="value">${fieldValue(bean:inventoryItemPurchaseInstance, field:'quantity')}</td>
+                                <td valign="top" class="value">
+                                    ${fieldValue(bean:inventoryItemPurchaseInstance, field:'quantity')}
+                                    <g:helpBalloon code="inventoryItemPurchase.quantity" />
+                                </td>
                                 
                             </tr>
@@ -101,4 +124,5 @@
                                                                         from="${grailsApplication.config.currencyList}">
                                     </g:currencySelect>
+                                    <g:helpBalloon code="inventoryItemPurchase.order.value" />
                                 </td>
                             </tr>
@@ -111,4 +135,5 @@
                                     <td valign="top" class="value ${hasErrors(bean:inventoryItemPurchaseInstance,field:'invoiceNumber','errors')}">
                                         <input type="text" maxlength="50" id="invoiceNumber" name="invoiceNumber" value="${fieldValue(bean:inventoryItemPurchaseInstance,field:'invoiceNumber')}"/>
+                                    <g:helpBalloon code="inventoryItemPurchase.invoice.number" />
                                     </td>
                                 </tr>
Index: trunk/grails-app/views/inventoryItemPurchaseDetailed/receive.gsp
===================================================================
--- trunk/grails-app/views/inventoryItemPurchaseDetailed/receive.gsp	(revision 608)
+++ trunk/grails-app/views/inventoryItemPurchaseDetailed/receive.gsp	(revision 609)
@@ -23,4 +23,5 @@
                 <g:hiddenField name="orderId" value="${orderId}" />
                 <g:hiddenField name="supplier.id" value="${inventoryItemPurchaseInstance.supplier?.id}" />
+                <g:hiddenField name="taskBudgetStatus.id" value="${inventoryItemPurchaseInstance.taskBudgetStatus?.id}" />
                 <g:hiddenField name="returnTo" value="${params.returnTo}" />
                 <div class="dialog">
@@ -81,4 +82,5 @@
                                     <input type="text" id="quantity" name="quantity" value="${fieldValue(bean:inventoryItemPurchaseInstance,field:'quantity')}" />
                                     ${inventoryItemPurchaseInstance.inventoryItem.unitOfMeasure.encodeAsHTML()}
+                                    <g:helpBalloon code="inventoryItemPurchase.receive.quantity" />
                                 </td>
                             </tr> 
@@ -86,5 +88,5 @@
                             <tr class="prop">
                                 <td valign="top" class="name">
-                                    <label for="orderValueAmount">Purchase Order $:</label>
+                                    <label for="orderValueAmount">Receive Value:</label>
                                 </td>
                                 <td valign="top">
@@ -93,4 +95,5 @@
                                                     value="${fieldValue(bean:inventoryItemPurchaseInstance,field:'orderValueAmount')}" />
                                     ${inventoryItemPurchaseInstance.orderValueCurrency?.encodeAsHTML()}
+                                    <g:helpBalloon code="inventoryItemPurchase.receive.value" />
                                 </td>
                             </tr> 
Index: trunk/grails-app/views/inventoryItemPurchaseDetailed/show.gsp
===================================================================
--- trunk/grails-app/views/inventoryItemPurchaseDetailed/show.gsp	(revision 608)
+++ trunk/grails-app/views/inventoryItemPurchaseDetailed/show.gsp	(revision 609)
@@ -50,4 +50,11 @@
                             
                             <td valign="top" class="value"><g:link controller="costCodeDetailed" action="show" id="${inventoryItemPurchaseInstance?.costCode?.id}">${inventoryItemPurchaseInstance?.costCode?.encodeAsHTML()}</g:link></td>
+                            
+                        </tr>
+                    
+                        <tr class="prop">
+                            <td valign="top" class="name">Budget Status:</td>
+                            
+                            <td valign="top" class="value">${inventoryItemPurchaseInstance?.taskBudgetStatus?.encodeAsHTML()}</td>
                             
                         </tr>
