* [optimize]: bin updates
* [optimise]: use frappe.get_cached_value instead of get_value for item
* [fix]: change db.get_cached_value to get_cached_value
* Add Defaults table in Item Group
* Fetch defaults from Item group if not found in Item
* Add patch
* Remove default fields from Item Group
* Set query for defaults
* Fix Codacy
* Modify test records
* Modify budget.py and sales_order.py
* Remove join from query
* Else condition to avoid error if no defaults found
* refrain from making item test records before item_group
* default cost center fetch correction
* Remove tab item group from query
* First Cut for the Loyalty Program
* finished the collection part
* redmeption for the loyalty point
update the loyalty point entry in the FIFO style
make the accounting entry knocking the debtors account against the expense account selected in the loyalty program
update the outstanding balance in the client side
* completed for the desk viewe
* wrap up for the desk and shopping cart
* pos
* fix and test the travis
* Added test cases for asset accounting, asset value adjustment
* Accounting entry for the asset created manually
* Added asset movement test cases and validation
* Added validation to make asset from purchase receupt, invoice only
- Creaete Sales or Purchase order from the blanket order
- If there is any blanket order for the customer/supplier rates will be fetched from that order
- Manually selecting the Blanket order will change the rates accordingly
- Upon submission of the order, the ordered qty will be updated in the Blanket Order
* validate items to see if they are saleable
* check if items are subcontractable or saleable
* improvise name,error message and code
Validate type function validates item if they are of proper type for that transaction and throws descriptive error.
* add doctypes allowed to group items, average the rate
* add check field to group items during print
* call common before_print in delivery note
* fix precision issue while calculating average