Merge pull request #8129 from rohitwaghchaure/pos_v8_enhance_and_issue

[fix] customer edit, numeric keypad visibility, on selection of item highlight the background issue in the pos
diff --git a/erpnext/accounts/doctype/account/chart_of_accounts/verified/standard_chart_of_accounts.py b/erpnext/accounts/doctype/account/chart_of_accounts/verified/standard_chart_of_accounts.py
index c6495c1..1a541ca 100644
--- a/erpnext/accounts/doctype/account/chart_of_accounts/verified/standard_chart_of_accounts.py
+++ b/erpnext/accounts/doctype/account/chart_of_accounts/verified/standard_chart_of_accounts.py
@@ -107,7 +107,7 @@
 	            _("Office Maintenance Expenses"): {},
 	            _("Office Rent"): {},
 	            _("Postal Expenses"): {},
-	            _("Print and Stationary"): {},
+	            _("Print and Stationery"): {},
 	            _("Round Off"): {
 	                "account_type": "Round Off"
 	            },
diff --git a/erpnext/accounts/doctype/asset/asset_list.js b/erpnext/accounts/doctype/asset/asset_list.js
new file mode 100644
index 0000000..961ab3f
--- /dev/null
+++ b/erpnext/accounts/doctype/asset/asset_list.js
@@ -0,0 +1,3 @@
+frappe.listview_settings['Asset'] = {
+    add_fields: ['image']
+}
\ No newline at end of file
diff --git a/erpnext/buying/doctype/purchase_common/purchase_common.py b/erpnext/buying/doctype/purchase_common/purchase_common.py
index b35044a..844a655 100644
--- a/erpnext/buying/doctype/purchase_common/purchase_common.py
+++ b/erpnext/buying/doctype/purchase_common/purchase_common.py
@@ -65,7 +65,7 @@
 			validate_end_of_life(d.item_code, item.end_of_life, item.disabled)
 
 			# validate stock item
-			if item.is_stock_item==1 and d.qty and not d.warehouse:
+			if item.is_stock_item==1 and d.qty and not d.warehouse and not d.delivered_by_supplier:
 				frappe.throw(_("Warehouse is mandatory for stock Item {0} in row {1}").format(d.item_code, d.idx))
 
 			items.append(cstr(d.item_code))
diff --git a/erpnext/controllers/accounts_controller.py b/erpnext/controllers/accounts_controller.py
index 67d4822..518f686 100644
--- a/erpnext/controllers/accounts_controller.py
+++ b/erpnext/controllers/accounts_controller.py
@@ -426,7 +426,7 @@
 					max_allowed_amt = flt(ref_amt * (100 + tolerance) / 100)
 
 					if total_billed_amt - max_allowed_amt > 0.01:
-						frappe.throw(_("Cannot overbill for Item {0} in row {1} more than {2}. To allow overbilling, please set in Stock Settings").format(item.item_code, item.idx, max_allowed_amt))
+						frappe.throw(_("Cannot overbill for Item {0} in row {1} more than {2}. To allow over-billing, please set in Buying Settings").format(item.item_code, item.idx, max_allowed_amt))
 
 	def get_company_default(self, fieldname):
 		from erpnext.accounts.utils import get_company_default
diff --git a/erpnext/controllers/item_variant.py b/erpnext/controllers/item_variant.py
index f8c9c0a..53421b7 100644
--- a/erpnext/controllers/item_variant.py
+++ b/erpnext/controllers/item_variant.py
@@ -12,19 +12,42 @@
 class ItemTemplateCannotHaveStock(frappe.ValidationError): pass
 
 @frappe.whitelist()
-def get_variant(template, args, variant=None):
-	"""Validates Attributes and their Values, then looks for an exactly matching Item Variant
+def get_variant(template, args=None, variant=None, manufacturer=None,
+	manufacturer_part_no=None):
+	"""Validates Attributes and their Values, then looks for an exactly
+		matching Item Variant
 
 		:param item: Template Item
 		:param args: A dictionary with "Attribute" as key and "Attribute Value" as value
 	"""
-	if isinstance(args, basestring):
-		args = json.loads(args)
+	item_template = frappe.get_doc('Item', template)
 
-	if not args:
-		frappe.throw(_("Please specify at least one attribute in the Attributes table"))
+	if item_template.variant_based_on=='Manufacturer' and manufacturer:
+		return make_variant_based_on_manufacturer(item_template, manufacturer,
+			manufacturer_part_no)
+	else:
+		if isinstance(args, basestring):
+			args = json.loads(args)
 
-	return find_variant(template, args, variant)
+		if not args:
+			frappe.throw(_("Please specify at least one attribute in the Attributes table"))
+		return find_variant(template, args, variant)
+
+def make_variant_based_on_manufacturer(template, manufacturer, manufacturer_part_no):
+	'''Make and return a new variant based on manufacturer and
+		manufacturer part no'''
+	from frappe.model.naming import append_number_if_name_exists
+
+	variant = frappe.new_doc('Item')
+
+	copy_attributes_to_variant(template, variant)
+
+	variant.manufacturer = manufacturer
+	variant.manufacturer_part_no = manufacturer_part_no
+
+	variant.item_code = append_number_if_name_exists('Item', template.name)
+
+	return variant
 
 def validate_item_variant_attributes(item, args=None):
 	if isinstance(item, basestring):
@@ -131,6 +154,7 @@
 
 	template = frappe.get_doc("Item", item)
 	variant = frappe.new_doc("Item")
+	variant.variant_based_on = 'Item Attribute'
 	variant_attributes = []
 
 	for d in template.attributes:
@@ -147,17 +171,28 @@
 
 def copy_attributes_to_variant(item, variant):
 	from frappe.model import no_value_fields
+
+	# copy non no-copy fields
+
+	exclude_fields = ["item_code", "item_name", "show_in_website"]
+
+	if item.variant_based_on=='Manufacturer':
+		# don't copy manufacturer values if based on part no
+		exclude_fields += ['manufacturer', 'manufacturer_part_no']
+
 	for field in item.meta.fields:
 		if field.fieldtype not in no_value_fields and (not field.no_copy)\
-			and field.fieldname not in ("item_code", "item_name", "show_in_website"):
+			and field.fieldname not in exclude_fields:
 			if variant.get(field.fieldname) != item.get(field.fieldname):
 				variant.set(field.fieldname, item.get(field.fieldname))
 	variant.variant_of = item.name
 	variant.has_variants = 0
-	if variant.attributes:
-		variant.description += "\n"
-		for d in variant.attributes:
-			variant.description += "<p>" + d.attribute + ": " + cstr(d.attribute_value) + "</p>"
+
+	if item.variant_based_on=='Item Attribute':
+		if variant.attributes:
+			variant.description += "\n"
+			for d in variant.attributes:
+				variant.description += "<p>" + d.attribute + ": " + cstr(d.attribute_value) + "</p>"
 
 def make_variant_item_code(template_item_code, variant):
 	"""Uses template's item code and abbreviations to make variant's item code"""
diff --git a/erpnext/docs/assets/img/setup/workflow-1.png b/erpnext/docs/assets/img/setup/workflow-1.png
index 632e1fb..7fd6f17 100644
--- a/erpnext/docs/assets/img/setup/workflow-1.png
+++ b/erpnext/docs/assets/img/setup/workflow-1.png
Binary files differ
diff --git a/erpnext/docs/assets/img/setup/workflow-2.png b/erpnext/docs/assets/img/setup/workflow-2.png
index 2041860..1023a39 100644
--- a/erpnext/docs/assets/img/setup/workflow-2.png
+++ b/erpnext/docs/assets/img/setup/workflow-2.png
Binary files differ
diff --git a/erpnext/docs/assets/img/setup/workflow-3.png b/erpnext/docs/assets/img/setup/workflow-3.png
new file mode 100644
index 0000000..fc29c88
--- /dev/null
+++ b/erpnext/docs/assets/img/setup/workflow-3.png
Binary files differ
diff --git a/erpnext/docs/assets/img/setup/workflow-4.png b/erpnext/docs/assets/img/setup/workflow-4.png
new file mode 100644
index 0000000..ee991f9
--- /dev/null
+++ b/erpnext/docs/assets/img/setup/workflow-4.png
Binary files differ
diff --git a/erpnext/docs/assets/img/setup/workflow-5.png b/erpnext/docs/assets/img/setup/workflow-5.png
new file mode 100644
index 0000000..ad360c6
--- /dev/null
+++ b/erpnext/docs/assets/img/setup/workflow-5.png
Binary files differ
diff --git a/erpnext/docs/assets/img/stock/select-mfg-for-variant.png b/erpnext/docs/assets/img/stock/select-mfg-for-variant.png
new file mode 100644
index 0000000..4da1d6c
--- /dev/null
+++ b/erpnext/docs/assets/img/stock/select-mfg-for-variant.png
Binary files differ
diff --git a/erpnext/docs/assets/img/stock/set-variant-by-mfg.png b/erpnext/docs/assets/img/stock/set-variant-by-mfg.png
new file mode 100644
index 0000000..2eaa8f0
--- /dev/null
+++ b/erpnext/docs/assets/img/stock/set-variant-by-mfg.png
Binary files differ
diff --git a/erpnext/docs/install.md b/erpnext/docs/install.md
index c6a87cb..26ad128 100644
--- a/erpnext/docs/install.md
+++ b/erpnext/docs/install.md
@@ -8,7 +8,7 @@
 
 After you have installed Frappe Bench, go to you bench folder, which is     `frappe.bench` by default and setup **erpnext**.
 
-    bench get-app erpnext https://github.com/frappe/erpnext
+    bench get-app erpnext {{ source_link }}
 
 Then create a new site to install the app.
 
@@ -27,4 +27,4 @@
 Fire up your browser and go to http://localhost:8000 and you should see the login screen. Login as **Administrator** and **admin** (or the password you set at the time of `new-site`) and you are set.
 
 <!-- jinja -->
-<!-- autodoc -->
+<!-- autodoc -->
\ No newline at end of file
diff --git a/erpnext/docs/license.html b/erpnext/docs/license.html
index 43d90cf..1d50b78 100644
--- a/erpnext/docs/license.html
+++ b/erpnext/docs/license.html
@@ -7,7 +7,7 @@
 <p>Version 3, 29 June 2007</p>
 
 <p>Copyright (C) 2007 Free Software Foundation, Inc.
-<a href="http://fsf.org/" rel="nofollow">http://fsf.org/</a></p>
+<a href="http://fsf.org/">http://fsf.org/</a></p>
 
 <p>Everyone is permitted to copy and distribute verbatim copies of this
 license document, but changing it is not allowed.</p>
@@ -654,7 +654,7 @@
     GNU General Public License for more details.
 
     You should have received a copy of the GNU General Public License
-    along with this program.  If not, see &lt;<a href="http://www.gnu.org/licenses/" rel="nofollow">http://www.gnu.org/licenses/</a>&gt;.
+    along with this program.  If not, see &lt;<a href="http://www.gnu.org/licenses/">http://www.gnu.org/licenses/</a>&gt;.
 </code></pre>
 
 <p>Also add information on how to contact you by electronic and paper
@@ -677,14 +677,14 @@
 <p>You should also get your employer (if you work as a programmer) or
 school, if any, to sign a "copyright disclaimer" for the program, if
 necessary. For more information on this, and how to apply and follow
-the GNU GPL, see <a href="http://www.gnu.org/licenses/" rel="nofollow">http://www.gnu.org/licenses/</a>.</p>
+the GNU GPL, see <a href="http://www.gnu.org/licenses/">http://www.gnu.org/licenses/</a>.</p>
 
 <p>The GNU General Public License does not permit incorporating your
 program into proprietary programs. If your program is a subroutine
 library, you may consider it more useful to permit linking proprietary
 applications with the library. If this is what you want to do, use the
 GNU Lesser General Public License instead of this License. But first,
-please read <a href="http://www.gnu.org/philosophy/why-not-lgpl.html" rel="nofollow">http://www.gnu.org/philosophy/why-not-lgpl.html</a>.</p>
+please read <a href="http://www.gnu.org/philosophy/why-not-lgpl.html">http://www.gnu.org/philosophy/why-not-lgpl.html</a>.</p>
 
 
 <!-- autodoc -->
\ No newline at end of file
diff --git a/erpnext/docs/user/manual/en/introduction/the-champion.md b/erpnext/docs/user/manual/en/introduction/the-champion.md
index 21a2383..472cd94 100644
--- a/erpnext/docs/user/manual/en/introduction/the-champion.md
+++ b/erpnext/docs/user/manual/en/introduction/the-champion.md
@@ -12,7 +12,7 @@
 
 Like exercise.
 
-Human body may seem like it does not require exercise today or even tomorrow,
+The human body may seem like it does not require exercise today or even tomorrow,
 but in the long run, if you wish to maintain your body and its health, you
 should get on the treadmill.
 
diff --git a/erpnext/docs/user/manual/en/setting-up/workflows.md b/erpnext/docs/user/manual/en/setting-up/workflows.md
index a4ddc38..5593a53 100644
--- a/erpnext/docs/user/manual/en/setting-up/workflows.md
+++ b/erpnext/docs/user/manual/en/setting-up/workflows.md
@@ -4,9 +4,9 @@
 
 Example of a leave application workflow is given below:
 
-If an user applies for a leave, then his request will be sent to the HR
-department. The HR department(HR User) will either reject or approve this
-request. Once this process is completed, the user's Manager(leave approver)
+If a user applies for a leave, then his request will be sent to the HR
+department. The HR department (HR User) will either reject or approve this
+request. Once this process is completed, the user's Manager (leave approver)
 will get an indication that the HR department has Accepted or Rejected. The
 Manager, who is the approving authority, will either Approve or Reject this
 request. Accordingly,the user will get his Approved or Rejected status.
@@ -44,23 +44,17 @@
 
 #### Example of a Leave Application Process:  
 
-Go to the Human Resources Module and click on Leave Application. Apply for a
-Leave.
+When a Leave Application is saved by Employee, the status of the document changes to "Applied"
 
-When a Leave Application is submitted, the status on the right hand corner of
-the page shows as "Applied"
-
-![Workflow Employee LA]({{docs_base_url}}/assets/old_images/erpnext/workflow-employee-la.png)
+![Workflow Employee LA]({{docs_base_url}}/assets/img/setup/workflow-3.png)
 
 When the HR User logs in, he can either Approve or Reject. If approved the
-status on the right hand corner of the page shows as Approved. However, a blue
-band of information is displayed saying approval is pending by leave approver.
+status of the document changes to "Approved by HR". However, it is yet to be approved by Leave Approver.
 
-![Leave Approver]({{docs_base_url}}/assets/old_images/erpnext/workflow-hr-user-la.png)
+![Leave Approver]({{docs_base_url}}/assets/img/setup/workflow-4.png)
 
-When the leave approver opens the Leave Application page, he should select the
-status and convert to Approved or Rejected.
+When the Leave Approver opens the Leave Application page, he can finally "Approve" or "Reject" the Leave Application.
 
-![Workflow Leave Approver]({{docs_base_url}}/assets/old_images/erpnext/workflow-leave-approver-la.png)
+![Workflow Leave Approver]({{docs_base_url}}/assets/img/setup/workflow-5.png)
 
 {next}
diff --git a/erpnext/docs/user/manual/en/stock/item/item-variants.md b/erpnext/docs/user/manual/en/stock/item/item-variants.md
index cdca6ed..7514404 100644
--- a/erpnext/docs/user/manual/en/stock/item/item-variants.md
+++ b/erpnext/docs/user/manual/en/stock/item/item-variants.md
@@ -1,15 +1,28 @@
+# Item Variants
+
+### What are Variants?
+
 A Item Variant is a version of a Item, such as differing sizes or differing colours (like a _blue_ t-shirt in size _small_ rather then just a t-shirt).
-Without Item variants, you would have to treat the _small, medium_ and _large_ versions of a t-shirt as three separate Items; 
+Without Item variants, you would have to treat the _small, medium_ and _large_ versions of a t-shirt as three separate Items;
 Item variants let you treat the _small, medium_ and _large_ versions of a t-shirt as variations of the one Item 't-shirt'.
 
+### Using Variants
+
+Variants can be based on two things
+
+1. Item Attributes
+1. Manufacturers
+
+### Variants Based on Item Attributes
+
 To use Item Variants in ERPNext, create an Item and check 'Has Variants'.
 
-* The Item shall then be referred to as a so called 'Template'. Such a Template is not identical to a regular 'Item' any longer. For example it (the Template) can not be used directly in any Transactions (Sales Order, Delivery Note, Purchase Invoice) itself. Only the Variants of an Item (_blue_ t-shirt in size _small)_ can be practically used in such. Therefore it would be ideal to decide whether an item 'Has Variants' or not directly when creating it. 
+* The Item shall then be referred to as a so called 'Template'. Such a Template is not identical to a regular 'Item' any longer. For example it (the Template) can not be used directly in any Transactions (Sales Order, Delivery Note, Purchase Invoice) itself. Only the Variants of an Item (_blue_ t-shirt in size _small)_ can be practically used in such. Therefore it would be ideal to decide whether an item 'Has Variants' or not directly when creating it.
 
 <img class="screenshot" alt="Has Variants" src="{{docs_base_url}}/assets/img/stock/item-has-variants.png">
 
 On selecting 'Has Variants' a table shall appear. Specify the variant attributes for the Item in the table.
-In case the attribute has Numeric Values, you can specify the range and increment values here. 
+In case the attribute has Numeric Values, you can specify the range and increment values here.
 
 <img class="screenshot" alt="Valid Attributes" src="{{docs_base_url}}/assets/img/stock/item-attributes.png">
 
@@ -22,3 +35,17 @@
 <img class="screenshot" alt="Make Variants" src="{{docs_base_url}}/assets/img/stock/make-variant-1.png">
 
 To learn more about setting Attributes Master check [Item Attributes]({{docs_base_url}}/user/manual/en/stock/setup/item-attribute.html)
+
+### Variants Based on Manufacturers
+
+To setup variants based on Manufactueres, in your Item template, set "Variants Based On" as "Manufacturers"
+
+<img class='screenshot' alt='Setup Item Variant by Manufacturer'
+	src='{{docs_base_url}}/assets/img/stock/select-mfg-for-variant.png'>
+
+When you make a new Variant, the system will prompt you to select a Manufacturer. You can also optionally put in a Manufacturer Part Number
+
+<img class='screenshot' alt='Setup Item Variant by Manufacturer'
+	src='{{docs_base_url}}/assets/img/stock/set-variant-by-mfg.png'>
+
+The naming of the variant will be the name (ID) of the template Item with a number suffix. e.g. "ITEM000" will have variant "ITEM000-1"
\ No newline at end of file
diff --git a/erpnext/docs/user/videos/learn/.txt b/erpnext/docs/user/videos/learn/.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/erpnext/docs/user/videos/learn/.txt
diff --git a/erpnext/docs/user/videos/learn/budgeting.md b/erpnext/docs/user/videos/learn/budgeting.md
new file mode 100644
index 0000000..35e2b75
--- /dev/null
+++ b/erpnext/docs/user/videos/learn/budgeting.md
@@ -0,0 +1,7 @@
+# Budgeting
+
+<iframe width="660" height="371" src="https://www.youtube.com/embed/pDDhR-D45eI" frameborder="0" allowfullscreen></iframe>
+
+**Duration: 3:26**
+
+Budgeting feature will help you from over-spending. In ERPNext, you can define budgets based on Cost Center and Projects.
\ No newline at end of file
diff --git a/erpnext/docs/user/videos/learn/bulk-update.md b/erpnext/docs/user/videos/learn/bulk-update.md
new file mode 100644
index 0000000..a0b80a3
--- /dev/null
+++ b/erpnext/docs/user/videos/learn/bulk-update.md
@@ -0,0 +1,7 @@
+# Bulk Update Data
+
+<iframe width="660" height="371" src="https://www.youtube.com/embed/J46-6qtyZ9U" frameborder="0" allowfullscreen></iframe>
+
+**Duration: 1:38**
+
+Bulk Update Tool help you in over-writing value in the specific field of exitsting records.
\ No newline at end of file
diff --git a/erpnext/docs/user/videos/learn/chart-of-accounts.md b/erpnext/docs/user/videos/learn/chart-of-accounts.md
index f71013f..6677fa6 100644
--- a/erpnext/docs/user/videos/learn/chart-of-accounts.md
+++ b/erpnext/docs/user/videos/learn/chart-of-accounts.md
@@ -1,9 +1,9 @@
 # Chart of Accounts
 
-<iframe width="660" height="371" src="https://www.youtube.com/embed/DyR-DST-PyA" frameborder="0" allowfullscreen></iframe>
+<iframe width="660" height="371" src="https://www.youtube.com/embed/AcfMCT7wLLo" frameborder="0" allowfullscreen></iframe>
 
-**Duration: 2:26**
+**Duration: 3:10**
 
 This tutorial walks you through setting up Accounts in the Chart of Account master. This is the most crucial master for getting your financial statement and other accounting reports correct.
 
-Chart of Account is a tree structure master which allows user to define parent and child relationship between accounts. Also there are various account types (like Income a/c, Expense a/c, Bank a/c, Tax a/c etc.) which helps you segregate and filter out other accounts while creating transactions.
+Chart of Account is a tree structure master which allows user to define parent and child relationship between accounts. Also there are various account types (like Income a/c, Expense a/c, Bank a/c, Tax a/c etc.) which helps you segregate and filter out other accounts while creating transactions.
\ No newline at end of file
diff --git a/erpnext/docs/user/videos/learn/customer-and-supplier.md b/erpnext/docs/user/videos/learn/customer-and-supplier.md
index ba0c5b8..f9b8d5b 100644
--- a/erpnext/docs/user/videos/learn/customer-and-supplier.md
+++ b/erpnext/docs/user/videos/learn/customer-and-supplier.md
@@ -1,7 +1,7 @@
 # Customer and Supplier
 
-<iframe width="660" height="371" src="https://www.youtube.com/embed/anoGi_RpQ20" frameborder="0" allowfullscreen></iframe>
+<iframe width="660" height="371" src="https://www.youtube.com/embed/zsrrVDk6VBs" frameborder="0" allowfullscreen></iframe>
 
-**Duration: 3:21**
+**Duration: 4:35**
 
 This video demonstrate creating Customer and Suppliers in ERPNext. It also covers setting up masters required for creating Customer and Supplier like Customer Group, Territory and Supplier Type.
diff --git a/erpnext/docs/user/videos/learn/data-import-tool.md b/erpnext/docs/user/videos/learn/data-import-tool.md
index a3272e9..586c9b7 100644
--- a/erpnext/docs/user/videos/learn/data-import-tool.md
+++ b/erpnext/docs/user/videos/learn/data-import-tool.md
@@ -2,6 +2,6 @@
 
 <iframe width="660" height="371" src="https://www.youtube.com/embed/Ta2Xx3QoK3E" frameborder="0" allowfullscreen></iframe>
 
-**Duration: 6:32**
+**Duration: 6:31**
 
 This video walks you through on importing data in ERPNext from spreadsheet files. This tools allows you in faster migration of masters and transactions from legacy system into ERPNext. You can also use this tool to export data from ERPNext, and keep it as a backup of specific document type.
diff --git a/erpnext/docs/user/videos/learn/distributors.md b/erpnext/docs/user/videos/learn/distributors.md
new file mode 100644
index 0000000..9471f9e
--- /dev/null
+++ b/erpnext/docs/user/videos/learn/distributors.md
@@ -0,0 +1,7 @@
+# ERPNext for Distributors
+
+<iframe width="660" height="371" src="https://www.youtube.com/embed/YoHc35XNBus" frameborder="0" allowfullscreen></iframe>
+
+**Duration: 51:47**
+
+This video is a recording of a webinar on how a distribution business can use ERPNext. It covers Selling, Buying, Stock and Accounts module. Also, you can can learn how serialised and batchwise inventory can be maintained in ERPNext.
\ No newline at end of file
diff --git a/erpnext/docs/user/videos/learn/employee.md b/erpnext/docs/user/videos/learn/employee.md
index e7f78a3..b7c46e6 100644
--- a/erpnext/docs/user/videos/learn/employee.md
+++ b/erpnext/docs/user/videos/learn/employee.md
@@ -1,7 +1,7 @@
 # Employee
 
-<iframe width="660" height="371" src="https://www.youtube.com/embed/USfIUdZlUhw" frameborder="0" allowfullscreen></iframe>
+<iframe width="660" height="371" src="https://www.youtube.com/embed/kkwOzeU4wFU" frameborder="0" allowfullscreen></iframe>
 
-**Duration: 1:59**
+**Duration: 3:26**
 
-This video walks you through adding Employee in ERPNext.
+This is a help video on how to add and manage Employees in ERPNext.
diff --git a/erpnext/docs/user/videos/learn/fixed-assets.md b/erpnext/docs/user/videos/learn/fixed-assets.md
new file mode 100644
index 0000000..31ccc94
--- /dev/null
+++ b/erpnext/docs/user/videos/learn/fixed-assets.md
@@ -0,0 +1,7 @@
+# Fixed Assets Management
+
+<iframe width="660" height="371" src="https://www.youtube.com/embed/I-K8pLRmvSo" frameborder="0" allowfullscreen></iframe>
+
+**Duration: 6:35**
+
+In this video, you will learn how to add Assets and manage Asset Depreciation in ERPNext.
\ No newline at end of file
diff --git a/erpnext/docs/user/videos/learn/index.md b/erpnext/docs/user/videos/learn/index.md
index a583524..faaf49c 100644
--- a/erpnext/docs/user/videos/learn/index.md
+++ b/erpnext/docs/user/videos/learn/index.md
@@ -9,12 +9,35 @@
         </div>
     </div>
     <br>
+    <h3>ERPNext Demonstrations</h3>
+    <ul class="list-unstyled video-list">
+        <li><a href="{{docs_base_url}}/user/videos/learn/services.html">
+              ERPNext for Services Business</a>
+            <span class="text-muted pull-right">52:50</span>
+        </li>
+        <li><a href="{{docs_base_url}}/user/videos/learn/distributors.html">
+              ERPNext for Distributors</a>
+            <span class="text-muted pull-right">51:47</span>
+        </li>
+        <li><a href="{{docs_base_url}}/user/videos/learn/manufacturing-make-to-order.html">
+              ERPNext for Manufacturers</a>
+            <span class="text-muted pull-right">14:26</span>
+        </li>
+        <li><a href="{{docs_base_url}}/user/videos/learn/retailers.html">
+              ERPNext for Retailers</a>
+            <span class="text-muted pull-right">39:21</span>
+        </li>
+        <li><a href="{{docs_base_url}}/user/videos/learn/schools.html">
+              ERPNext for Schools</a>
+            <span class="text-muted pull-right">39:21</span>
+        </li>
+    </ul>
+    <br>
     <h3>Using ERPNext</h3>
     <ul class="list-unstyled video-list">
-        <li>
-            <a href="{{docs_base_url}}/user/videos/learn/navigation.html">
+        <li><a href="{{docs_base_url}}/user/videos/learn/navigation.html">
               User Interface and Navigation</a>
-            <span class="text-muted pull-right">1:17</span>
+            <span class="text-muted pull-right">2:17</span>
         </li>
     </ul>
     <br>
@@ -26,11 +49,11 @@
         </li>
         <li><a href="{{docs_base_url}}/user/videos/learn/user-and-permission.html">
             User and Permissions</a>
-            <span class="text-muted pull-right">4:20</span>
+            <span class="text-muted pull-right">6:16</span>
         </li>
         <li><a href="{{docs_base_url}}/user/videos/learn/data-import-tool.html">
             Data Import Tool</a>
-            <span class="text-muted pull-right">3:24</span>
+            <span class="text-muted pull-right">6:31</span>
     	</li>
         <li><a href="{{docs_base_url}}/user/videos/learn/printing-and-branding.html">
             Printing and Branding</a>
@@ -38,23 +61,23 @@
         </li>
         <li><a href="{{docs_base_url}}/user/videos/learn/customer-and-supplier.html">
             Customer and Supplier</a>
-            <span class="text-muted pull-right">3:21</span>
+            <span class="text-muted pull-right">4:35</span>
         </li>
         <li><a href="{{docs_base_url}}/user/videos/learn/item.html">
             Item and Pricing</a>
-            <span class="text-muted pull-right">3:17</span>
+            <span class="text-muted pull-right">3:55</span>
         </li>
         <li><a href="{{docs_base_url}}/user/videos/learn/opening-stock.html">
             Opening Stock</a>
-            <span class="text-muted pull-right">2:06</span>
+            <span class="text-muted pull-right">4:27</span>
         </li>
         <li><a href="{{docs_base_url}}/user/videos/learn/chart-of-accounts.html">
             Chart of Accounts</a>
-            <span class="text-muted pull-right">2:26</span>
+            <span class="text-muted pull-right">3:10</span>
         </li>
         <li><a href="{{docs_base_url}}/user/videos/learn/opening-account-balances.html">
             Opening Account Balances</a>
-            <span class="text-muted pull-right">3:46</span>
+            <span class="text-muted pull-right">4:40</span>
         </li>
         <li><a href="{{docs_base_url}}/user/videos/learn/email-account.html">
             Email Account</a>
@@ -69,8 +92,12 @@
     <h3>CRM and Sales</h3>
     <ul class="list-unstyled video-list">
         <li><a href="{{docs_base_url}}/user/videos/learn/lead-to-quotation.html">
-            Lead to Quotation</a>
-            <span class="text-muted pull-right">2:00</span>
+            Customer Relationship Management</a>
+            <span class="text-muted pull-right">3:29</span>
+        </li>
+        <li><a href="{{docs_base_url}}/user/videos/learn/customer-and-supplier.html">
+            Customer</a>
+            <span class="text-muted pull-right">4:35</span>
         </li>
         <li><a href="{{docs_base_url}}/user/videos/learn/sales-cycle.html">
             Sales Order to Payment</a>
@@ -96,17 +123,25 @@
     <br>
     <h3>Buying</h3>
     <ul class="list-unstyled video-list">
+        <li><a href="{{docs_base_url}}/user/videos/learn/customer-and-supplier.html">
+            Supplier</a>
+            <span class="text-muted pull-right">4:35</span>
+        </li>
         <li><a href="{{docs_base_url}}/user/videos/learn/material-request-to-purchase-order.html">
             Material Request to Purchase Order</a>
             <span class="text-muted pull-right">2:25</span>
         </li>
+        <li><a href="{{docs_base_url}}/user/videos/learn/request-for-quotation.html">
+            Request for Quotation</a>
+            <span class="text-muted pull-right">3:17</span>
+        </li>
         <li><a href="{{docs_base_url}}/user/videos/learn/purchase-cycle.html">
             Purchase Order to Payment</a>
               <span class="text-muted pull-right">3:16</span>
         </li>
         <li><a href="{{docs_base_url}}/user/videos/learn/taxes.html">
             Taxes</a>
-            <span class="text-muted pull-right">3:00</span>
+            <span class="text-muted pull-right">5:13</span>
         </li>
     </ul>
     <br>
@@ -121,19 +156,19 @@
             <span class="text-muted pull-right">2:38</span>
         </li>
         <li><a href="{{docs_base_url}}/user/videos/learn/opening-stock.html">
-            Opening Stock</a>
-            <span class="text-muted pull-right">2:06</span>
+            Stock Opening Balance</a>
+            <span class="text-muted pull-right">4:27</span>
         </li>
         <li><a href="{{docs_base_url}}/user/videos/learn/stock-entries.html">
             Stock Entries</a>
               <span class="text-muted pull-right">3:46</span>
         </li>
         <li><a href="{{docs_base_url}}/user/videos/learn/serialized-inventory.html">
-            Seriralized Inventory</a>
+            Serialized Inventory</a>
             <span class="text-muted pull-right">4:12</span>
         </li>
         <li><a href="{{docs_base_url}}/user/videos/learn/batch-inventory.html">
-            Batch Inventory</a>
+            Batched Inventory</a>
             <span class="text-muted pull-right">3:46</span>
         </li>
         <li><a href="{{docs_base_url}}/user/videos/learn/subcontracting.html">
@@ -144,26 +179,34 @@
             Quality Inspection</a>
             <span class="text-muted pull-right">2:36</span>
         </li>
+        <li><a href="{{docs_base_url}}/user/videos/learn/fixed-assets.html">
+              Fixed Assets Management</a>
+            <span class="text-muted pull-right">6:35</span>
+        </li>
     </ul>
     <br>
     <h3>Accounts</h3>
     <ul class="list-unstyled video-list">
         <li><a href="{{docs_base_url}}/user/videos/learn/chart-of-accounts.html">
             Chart of Accounts</a>
-            <span class="text-muted pull-right">2:26</span>
+            <span class="text-muted pull-right">3:10</span>
         </li>
         <li><a href="{{docs_base_url}}/user/videos/learn/opening-account-balances.html">
-            Opening Account Balances</a>
-            <span class="text-muted pull-right">3:46</span>
+            Accounts Opening Balances</a>
+            <span class="text-muted pull-right">4:40</span>
         </li>
         <li><a href="{{docs_base_url}}/user/videos/learn/taxes.html">
             Taxes</a>
-              <span class="text-muted pull-right">3:00</span>
+              <span class="text-muted pull-right">5:13</span>
         </li>
         <li><a href="{{docs_base_url}}/user/videos/learn/advance-payments.html">
             Advance Payments</a>
               <span class="text-muted pull-right">2:52</span>
         </li>
+        <li><a href="{{docs_base_url}}/user/videos/learn/budgeting.html">
+              Budgeting</a>
+            <span class="text-muted pull-right">3:26</span>
+        </li>
     </ul>
     <br>
     <h3>Manufacturing</h3>
@@ -180,12 +223,22 @@
             Production Order</a>
             <span class="text-muted pull-right">2:24</span>
         </li>
+        <li>
+            <a href="{{docs_base_url}}/user/videos/learn/manufacturing-make-to-order.html">
+              ERPNext for Manufacturers (Make to Order)</a>
+            <span class="text-muted pull-right">14:26</span>
+        </li>
+        <li>
+            <a href="{{docs_base_url}}/user/videos/learn/manufacturing-enigneer-to-order.html">
+              ERPNext for Manufacturers (Engineer to Order)</a>
+            <span class="text-muted pull-right">44:40</span>
+        </li>
     </ul>
     <br>
     <h3>Human Resource</h3>
     <ul class="list-unstyled video-list">
         <li><a href="{{docs_base_url}}/user/videos/learn/employee.html">
-            Employee</a>
+            Employees</a>
             <span class="text-muted pull-right">1:59</span>
         </li>
         <li><a href="{{docs_base_url}}/user/videos/learn/processing-payroll.html">
@@ -197,7 +250,7 @@
             <span class="text-muted pull-right">2:50</span>
         </li>
         <li><a href="{{docs_base_url}}/user/videos/learn/expense-claim.html">
-            Expense Claim</a>
+            Expense Claims</a>
             <span class="text-muted pull-right">2:52</span>
         </li>
     </ul>
@@ -208,6 +261,10 @@
             Point of Sale</a>
             <span class="text-muted pull-right">2:34</span>
         </li>
+        <li><a href="{{docs_base_url}}/user/videos/learn/retailers.html">
+              ERPNext for Retailers (Demo)</a>
+            <span class="text-muted pull-right">39:21</span>
+        </li>
     </ul>
     <br>
     <h3>Project</h3>
@@ -235,6 +292,10 @@
             Field Customization</a>
             <span class="text-muted pull-right">3:10</span>
         </li>
+        <li><a href="{{docs_base_url}}/user/videos/learn/bulk-update.html">
+            Bulk Update Data</a>
+            <span class="text-muted pull-right">1:38</span>
+        </li>
         <li><a href="{{docs_base_url}}/user/videos/learn/workflow.html">
             Workflow</a>
             <span class="text-muted pull-right">3:38</span>
diff --git a/erpnext/docs/user/videos/learn/index.txt b/erpnext/docs/user/videos/learn/index.txt
index b9f567d..5510922 100644
--- a/erpnext/docs/user/videos/learn/index.txt
+++ b/erpnext/docs/user/videos/learn/index.txt
@@ -39,4 +39,8 @@
 file-manager
 publish-items-on-website
 shopping-cart
-report-builder
\ No newline at end of file
+report-builder
+services
+distributors
+manufacturing-make-to-order
+manufacturing-enigneer-to-order
\ No newline at end of file
diff --git a/erpnext/docs/user/videos/learn/item.md b/erpnext/docs/user/videos/learn/item.md
index 79d5caf..fdd6688 100644
--- a/erpnext/docs/user/videos/learn/item.md
+++ b/erpnext/docs/user/videos/learn/item.md
@@ -1,7 +1,7 @@
 # Item and Pricing
 
-<iframe width="660" height="371" src="https://www.youtube.com/embed/qXaEwld4_Ps" frameborder="0" allowfullscreen></iframe>
+<iframe width="660" height="371" src="https://www.youtube.com/embed/FcOsV-e8ymE" frameborder="0" allowfullscreen></iframe>
 
-**Duration: 3:17**
+**Duration: 3:55**
 
 This tutorial walks you through managing stock and service item in ERPNext. For each item, you can track its standard selling and buying price using Price List.
diff --git a/erpnext/docs/user/videos/learn/lead-to-quotation.md b/erpnext/docs/user/videos/learn/lead-to-quotation.md
index dcfef68..a0bab2d 100644
--- a/erpnext/docs/user/videos/learn/lead-to-quotation.md
+++ b/erpnext/docs/user/videos/learn/lead-to-quotation.md
@@ -1,8 +1,8 @@
-# Lead to Quotation
+# Customer Relationship Management (CRM)
 
-<iframe width="660" height="371" src="https://www.youtube.com/embed/TxYX4r4JAKA" frameborder="0" allowfullscreen></iframe>
+<iframe width="660" height="371" src="https://www.youtube.com/embed/o9XCSZHJfpA" frameborder="0" allowfullscreen></iframe>
 
-**Duration: 2:00**
+**Duration: 3:29**
 
 This video walks you through creating Lead in the CRM module. You can convert Lead into Opportunity, one which has good probability of conversion. When customer ask for the Quotation,
 you can fetch Lead and item details from Opportunity to Quotation.
diff --git a/erpnext/docs/user/videos/learn/manufacturing-enigneer-to-order.md b/erpnext/docs/user/videos/learn/manufacturing-enigneer-to-order.md
new file mode 100644
index 0000000..b883b35
--- /dev/null
+++ b/erpnext/docs/user/videos/learn/manufacturing-enigneer-to-order.md
@@ -0,0 +1,7 @@
+# ERPNext for Manufacturers (Engineer-to-Order)
+
+<iframe width="660" height="371" src="https://www.youtube.com/embed/GANHuLUptBQ" frameborder="0" allowfullscreen></iframe>
+
+**Duration: 44:40**
+
+This video is a recording of a webinar on how a manufacturing company operating based on **engineer to order **. This session covers modules like Selling, Manufacturing, Buying and Accounts.
\ No newline at end of file
diff --git a/erpnext/docs/user/videos/learn/manufacturing-make-to-order.md b/erpnext/docs/user/videos/learn/manufacturing-make-to-order.md
new file mode 100644
index 0000000..f1fe8d9
--- /dev/null
+++ b/erpnext/docs/user/videos/learn/manufacturing-make-to-order.md
@@ -0,0 +1,7 @@
+# ERPNext for Manufacturers (Make-to-Order)
+
+<iframe width="660" height="371" src="https://www.youtube.com/embed/xE74wdQU5cc" frameborder="0" allowfullscreen></iframe>
+
+**Duration: 14:26**
+
+This video is a recording of a webinar on how a manufacturing company operating based on **make to order** can use ERPNext. This session covers modules like Selling, Manufacturing, Buying and Accounts. You can learn how to make a Bill of Materials of production item and plan for item's production from Sales Order.
\ No newline at end of file
diff --git a/erpnext/docs/user/videos/learn/navigation.md b/erpnext/docs/user/videos/learn/navigation.md
index 40adb82..6099940 100644
--- a/erpnext/docs/user/videos/learn/navigation.md
+++ b/erpnext/docs/user/videos/learn/navigation.md
@@ -1,7 +1,7 @@
 # User Interface and Navigation
 
-<iframe width="660" height="371" src="https://www.youtube.com/embed/YDoI2DF4Lmc?list=PL3lFfCEoMxvxDHtYyQFJeUYkWzQpXwFM9" frameborder="0" allowfullscreen></iframe>
+<iframe width="660" height="371" src="https://www.youtube.com/embed/HdblX7kOWWs" frameborder="0" allowfullscreen></iframe>
 
-**Duration: 1:17**
+**Duration: 2:17**
 
 This video walks you through using the ERPNext "Desk" interface. The ERPNext User Interface is very web friendly and if you have used a website or mobile app before, the navigation should be very intuitive.
diff --git a/erpnext/docs/user/videos/learn/opening-account-balances.md b/erpnext/docs/user/videos/learn/opening-account-balances.md
index 518b892..5521a5d 100644
--- a/erpnext/docs/user/videos/learn/opening-account-balances.md
+++ b/erpnext/docs/user/videos/learn/opening-account-balances.md
@@ -1,7 +1,7 @@
 # Opening Account Balances
 
-<iframe width="660" height="371" src="https://www.youtube.com/embed/kdgM20Q-q68" frameborder="0" allowfullscreen></iframe>
+<iframe width="660" height="371" src="https://www.youtube.com/embed/U5wPIvEn-0c" frameborder="0" allowfullscreen></iframe>
 
-**Duration: 3:46**
+**Duration: 4:40**
 
 This video walks you through step to update opening account balances in ERPNext. Before updating opening balance for accounts, you should close your financial statements in the previous system. Closing balance of your legacy system should be updated as opening balance in ERPNext.
diff --git a/erpnext/docs/user/videos/learn/opening-stock.md b/erpnext/docs/user/videos/learn/opening-stock.md
index 6048039..6009b40 100644
--- a/erpnext/docs/user/videos/learn/opening-stock.md
+++ b/erpnext/docs/user/videos/learn/opening-stock.md
@@ -1,9 +1,7 @@
 # Opening Stock
 
-<iframe width="660" height="371" src="https://www.youtube.com/embed/0yPgrtfeCTs" frameborder="0" allowfullscreen></iframe>
+<iframe width="660" height="371" src="https://www.youtube.com/embed/nlHX0ZZ84Lw" frameborder="0" allowfullscreen></iframe>
 
-**Duration: 2:06**
+**Duration: 4:27**
 
-This tutorial demonstrates updating opening stock balance of an item. Following same steps, you can also reconcile stock of an item with respect to physical stock in a warehouse.
-
-If you maintain serialized inventory, [click here]({{docs_base_url}}/user/videos/learn/serialized-inventory.html) for the tutorial on updating it's opening stock in ERPNext.
+This tutorial demonstrates updating opening stock balance of an item. Following same steps, you can also reconcile stock of an item with respect to physical stock in a warehouse.
\ No newline at end of file
diff --git a/erpnext/docs/user/videos/learn/request-for-quotation.md b/erpnext/docs/user/videos/learn/request-for-quotation.md
new file mode 100644
index 0000000..2e3bfcb
--- /dev/null
+++ b/erpnext/docs/user/videos/learn/request-for-quotation.md
@@ -0,0 +1,7 @@
+# Request for Quotation
+
+<iframe width="660" height="371" src="https://www.youtube.com/embed/q85GFvWfZGI" frameborder="0" allowfullscreen></iframe>
+
+**Duration: 3:17**
+
+Request for Quotation feature allows you invite multiple Suppliers to provide their quotation. Suppliers can also provide quotation by logging into your ERPNext account. Based on the price quoted by them, Supplier Quotation will be created in your ERPNext account.
\ No newline at end of file
diff --git a/erpnext/docs/user/videos/learn/retailers.md b/erpnext/docs/user/videos/learn/retailers.md
new file mode 100644
index 0000000..8460e40
--- /dev/null
+++ b/erpnext/docs/user/videos/learn/retailers.md
@@ -0,0 +1,7 @@
+# ERPNext for Retailers
+
+<iframe width="660" height="371" src="https://www.youtube.com/embed/JYUHEAeJO-M" frameborder="0" allowfullscreen></iframe>
+
+**Duration: 24:27**
+
+This video is a recording of a webinar on how retailers can use ERPNext. For the ease of invoicing for retailers, we have a dedicated POS view. It takes care of invoicing, delivery and payment in one entry. Given the limitation of time availability and frequency of transaction, you can also create POS Invoices in the offline mode.
\ No newline at end of file
diff --git a/erpnext/docs/user/videos/learn/schools.md b/erpnext/docs/user/videos/learn/schools.md
new file mode 100644
index 0000000..3553a53
--- /dev/null
+++ b/erpnext/docs/user/videos/learn/schools.md
@@ -0,0 +1,7 @@
+# ERPNext for Schools
+
+<iframe width="660" height="371" src="https://www.youtube.com/embed/f6foQOyGzdA" frameborder="0" allowfullscreen></iframe>
+
+**Duration: 39:21**
+
+This video is a recording of a webinar on how education institutes can use ERPNext Schools module. It covers management of Student Applications, managing masters like Students, Programs and Courses. Also, you can manage processes like Course Scheduling, Student Assessment, Fees and Attendance.
\ No newline at end of file
diff --git a/erpnext/docs/user/videos/learn/services.md b/erpnext/docs/user/videos/learn/services.md
new file mode 100644
index 0000000..e08a75c
--- /dev/null
+++ b/erpnext/docs/user/videos/learn/services.md
@@ -0,0 +1,7 @@
+# ERPNext for Services Business
+
+<iframe width="660" height="371" src="https://www.youtube.com/embed/mI8IkiGhaPA" frameborder="0" allowfullscreen></iframe>
+
+**Duration: 52:50**
+
+This video is a recording of a webinar on how service company can use ERPNext. It covers creating a Service Item, service Quotation and Sales Order, Managing Projects, Tasks and billing Customer based on Timesheet. Also you will learn how to manage customer support in ERPNext by using features like Issues and Warranty Claims.
\ No newline at end of file
diff --git a/erpnext/docs/user/videos/learn/taxes.md b/erpnext/docs/user/videos/learn/taxes.md
index 992aa1d..4a16480 100644
--- a/erpnext/docs/user/videos/learn/taxes.md
+++ b/erpnext/docs/user/videos/learn/taxes.md
@@ -1,7 +1,7 @@
 # Taxes
 
-<iframe width="660" height="371" src="https://www.youtube.com/embed/nQ1zZdPgdaQ" frameborder="0" allowfullscreen></iframe>
+<iframe width="660" height="371" src="https://www.youtube.com/embed/a8Eh4zLIrkU" frameborder="0" allowfullscreen></iframe>
 
-**Duration: 3:00**
+**Duration: 5:13**
 
 This video walks you through setting up tax accounts in the Chart of Account. Based on the taxation rules, you can create multiple sales and purchase tax templates in ERPNext.
diff --git a/erpnext/docs/user/videos/learn/user-and-permission.md b/erpnext/docs/user/videos/learn/user-and-permission.md
index 62d728d..e1262c1 100644
--- a/erpnext/docs/user/videos/learn/user-and-permission.md
+++ b/erpnext/docs/user/videos/learn/user-and-permission.md
@@ -1,7 +1,7 @@
 # User and Permissions
 
-<iframe width="660" height="371" src="https://www.youtube.com/embed/fnBoRhBrwR4" frameborder="0" allowfullscreen></iframe>
+<iframe width="660" height="371" src="https://www.youtube.com/embed/8Slw1hsTmUI" frameborder="0" allowfullscreen></iframe>
 
-**Duration: 4:20**
+**Duration: 6:16**
 
 This video tutorial walks you through setting up User and their permissions in ERPNext. Role Permission Manager tool allows you to define restricted access for the user, based on various criterion like, value in the specific field on the form, creator of the document etc.
diff --git a/erpnext/hr/doctype/job_opening/job_opening.json b/erpnext/hr/doctype/job_opening/job_opening.json
index 39bc75f..cde97e5 100644
--- a/erpnext/hr/doctype/job_opening/job_opening.json
+++ b/erpnext/hr/doctype/job_opening/job_opening.json
@@ -1,201 +1,228 @@
 {
- "allow_copy": 0,
- "allow_import": 0,
- "allow_rename": 0,
- "autoname": "field:route",
- "beta": 0,
- "creation": "2013-01-15 16:13:36",
- "custom": 0,
- "description": "Description of a Job Opening",
- "docstatus": 0,
- "doctype": "DocType",
- "document_type": "Document",
- "editable_grid": 0,
- "engine": "InnoDB",
+ "allow_copy": 0, 
+ "allow_guest_to_view": 0, 
+ "allow_import": 0, 
+ "allow_rename": 0, 
+ "autoname": "field:route", 
+ "beta": 0, 
+ "creation": "2013-01-15 16:13:36", 
+ "custom": 0, 
+ "description": "Description of a Job Opening", 
+ "docstatus": 0, 
+ "doctype": "DocType", 
+ "document_type": "Document", 
+ "editable_grid": 0, 
+ "engine": "InnoDB", 
  "fields": [
   {
-   "allow_on_submit": 0,
-   "bold": 0,
-   "collapsible": 0,
-   "columns": 0,
-   "fieldname": "job_title",
-   "fieldtype": "Data",
-   "hidden": 0,
-   "ignore_user_permissions": 0,
-   "ignore_xss_filter": 0,
-   "in_filter": 0,
-   "in_list_view": 1,
-   "in_standard_filter": 0,
-   "label": "Job Title",
-   "length": 0,
-   "no_copy": 0,
-   "permlevel": 0,
-   "print_hide": 0,
-   "print_hide_if_no_value": 0,
-   "read_only": 0,
-   "remember_last_selected_value": 0,
-   "report_hide": 0,
-   "reqd": 1,
-   "search_index": 0,
-   "set_only_once": 0,
+   "allow_on_submit": 0, 
+   "bold": 0, 
+   "collapsible": 0, 
+   "columns": 0, 
+   "fieldname": "job_title", 
+   "fieldtype": "Data", 
+   "hidden": 0, 
+   "ignore_user_permissions": 0, 
+   "ignore_xss_filter": 0, 
+   "in_filter": 0, 
+   "in_global_search": 0, 
+   "in_list_view": 1, 
+   "in_standard_filter": 0, 
+   "label": "Job Title", 
+   "length": 0, 
+   "no_copy": 0, 
+   "permlevel": 0, 
+   "print_hide": 0, 
+   "print_hide_if_no_value": 0, 
+   "read_only": 0, 
+   "remember_last_selected_value": 0, 
+   "report_hide": 0, 
+   "reqd": 1, 
+   "search_index": 0, 
+   "set_only_once": 0, 
    "unique": 0
-  },
+  }, 
   {
-   "allow_on_submit": 0,
-   "bold": 0,
-   "collapsible": 0,
-   "columns": 0,
-   "fieldname": "publish",
-   "fieldtype": "Check",
-   "hidden": 0,
-   "ignore_user_permissions": 0,
-   "ignore_xss_filter": 0,
-   "in_filter": 0,
-   "in_list_view": 0,
-   "in_standard_filter": 0,
-   "label": "Publish on website",
-   "length": 0,
-   "no_copy": 0,
-   "permlevel": 0,
-   "precision": "",
-   "print_hide": 0,
-   "print_hide_if_no_value": 0,
-   "read_only": 0,
-   "remember_last_selected_value": 0,
-   "report_hide": 0,
-   "reqd": 0,
-   "search_index": 0,
-   "set_only_once": 0,
+   "allow_on_submit": 0, 
+   "bold": 0, 
+   "collapsible": 0, 
+   "columns": 0, 
+   "fieldname": "publish", 
+   "fieldtype": "Check", 
+   "hidden": 0, 
+   "ignore_user_permissions": 0, 
+   "ignore_xss_filter": 0, 
+   "in_filter": 0, 
+   "in_global_search": 0, 
+   "in_list_view": 0, 
+   "in_standard_filter": 0, 
+   "label": "Publish on website", 
+   "length": 0, 
+   "no_copy": 0, 
+   "permlevel": 0, 
+   "precision": "", 
+   "print_hide": 0, 
+   "print_hide_if_no_value": 0, 
+   "read_only": 0, 
+   "remember_last_selected_value": 0, 
+   "report_hide": 0, 
+   "reqd": 0, 
+   "search_index": 0, 
+   "set_only_once": 0, 
    "unique": 0
-  },
+  }, 
   {
-   "allow_on_submit": 0,
-   "bold": 0,
-   "collapsible": 0,
-   "columns": 0,
-   "depends_on": "publish",
-   "fieldname": "route",
-   "fieldtype": "Data",
-   "hidden": 0,
-   "ignore_user_permissions": 0,
-   "ignore_xss_filter": 0,
-   "in_filter": 0,
-   "in_list_view": 0,
-   "in_standard_filter": 0,
-   "label": "Route",
-   "length": 0,
-   "no_copy": 0,
-   "permlevel": 0,
-   "precision": "",
-   "print_hide": 0,
-   "print_hide_if_no_value": 0,
-   "read_only": 0,
-   "remember_last_selected_value": 0,
-   "report_hide": 0,
-   "reqd": 0,
-   "search_index": 0,
-   "set_only_once": 0,
+   "allow_on_submit": 0, 
+   "bold": 0, 
+   "collapsible": 0, 
+   "columns": 0, 
+   "depends_on": "publish", 
+   "fieldname": "route", 
+   "fieldtype": "Data", 
+   "hidden": 0, 
+   "ignore_user_permissions": 0, 
+   "ignore_xss_filter": 0, 
+   "in_filter": 0, 
+   "in_global_search": 0, 
+   "in_list_view": 0, 
+   "in_standard_filter": 0, 
+   "label": "Route", 
+   "length": 0, 
+   "no_copy": 0, 
+   "permlevel": 0, 
+   "precision": "", 
+   "print_hide": 0, 
+   "print_hide_if_no_value": 0, 
+   "read_only": 0, 
+   "remember_last_selected_value": 0, 
+   "report_hide": 0, 
+   "reqd": 0, 
+   "search_index": 0, 
+   "set_only_once": 0, 
    "unique": 1
-  },
+  }, 
   {
-   "allow_on_submit": 0,
-   "bold": 0,
-   "collapsible": 0,
-   "columns": 0,
-   "fieldname": "status",
-   "fieldtype": "Select",
-   "hidden": 0,
-   "ignore_user_permissions": 0,
-   "ignore_xss_filter": 0,
-   "in_filter": 0,
-   "in_list_view": 1,
-   "in_standard_filter": 1,
-   "label": "Status",
-   "length": 0,
-   "no_copy": 0,
-   "options": "Open\nClosed",
-   "permlevel": 0,
-   "print_hide": 0,
-   "print_hide_if_no_value": 0,
-   "read_only": 0,
-   "remember_last_selected_value": 0,
-   "report_hide": 0,
-   "reqd": 0,
-   "search_index": 0,
-   "set_only_once": 0,
+   "allow_on_submit": 0, 
+   "bold": 0, 
+   "collapsible": 0, 
+   "columns": 0, 
+   "fieldname": "status", 
+   "fieldtype": "Select", 
+   "hidden": 0, 
+   "ignore_user_permissions": 0, 
+   "ignore_xss_filter": 0, 
+   "in_filter": 0, 
+   "in_global_search": 0, 
+   "in_list_view": 1, 
+   "in_standard_filter": 1, 
+   "label": "Status", 
+   "length": 0, 
+   "no_copy": 0, 
+   "options": "Open\nClosed", 
+   "permlevel": 0, 
+   "print_hide": 0, 
+   "print_hide_if_no_value": 0, 
+   "read_only": 0, 
+   "remember_last_selected_value": 0, 
+   "report_hide": 0, 
+   "reqd": 0, 
+   "search_index": 0, 
+   "set_only_once": 0, 
    "unique": 0
-  },
+  }, 
   {
-   "allow_on_submit": 0,
-   "bold": 0,
-   "collapsible": 0,
-   "columns": 0,
-   "description": "Job profile, qualifications required etc.",
-   "fieldname": "description",
-   "fieldtype": "Text Editor",
-   "hidden": 0,
-   "ignore_user_permissions": 0,
-   "ignore_xss_filter": 0,
-   "in_filter": 0,
-   "in_list_view": 1,
-   "in_standard_filter": 0,
-   "label": "Description",
-   "length": 0,
-   "no_copy": 0,
-   "permlevel": 0,
-   "print_hide": 0,
-   "print_hide_if_no_value": 0,
-   "read_only": 0,
-   "remember_last_selected_value": 0,
-   "report_hide": 0,
-   "reqd": 0,
-   "search_index": 0,
-   "set_only_once": 0,
+   "allow_on_submit": 0, 
+   "bold": 0, 
+   "collapsible": 0, 
+   "columns": 0, 
+   "description": "Job profile, qualifications required etc.", 
+   "fieldname": "description", 
+   "fieldtype": "Text Editor", 
+   "hidden": 0, 
+   "ignore_user_permissions": 0, 
+   "ignore_xss_filter": 0, 
+   "in_filter": 0, 
+   "in_global_search": 0, 
+   "in_list_view": 1, 
+   "in_standard_filter": 0, 
+   "label": "Description", 
+   "length": 0, 
+   "no_copy": 0, 
+   "permlevel": 0, 
+   "print_hide": 0, 
+   "print_hide_if_no_value": 0, 
+   "read_only": 0, 
+   "remember_last_selected_value": 0, 
+   "report_hide": 0, 
+   "reqd": 0, 
+   "search_index": 0, 
+   "set_only_once": 0, 
    "unique": 0
   }
- ],
- "hide_heading": 0,
- "hide_toolbar": 0,
- "icon": "fa fa-bookmark",
- "idx": 1,
- "image_view": 0,
- "in_create": 0,
- "in_dialog": 0,
- "is_submittable": 0,
- "issingle": 0,
- "istable": 0,
- "max_attachments": 0,
- "modified": "2016-12-19 05:54:38.298496",
- "modified_by": "Administrator",
- "module": "HR",
- "name": "Job Opening",
- "owner": "Administrator",
+ ], 
+ "has_web_view": 0, 
+ "hide_heading": 0, 
+ "hide_toolbar": 0, 
+ "icon": "fa fa-bookmark", 
+ "idx": 1, 
+ "image_view": 0, 
+ "in_create": 0, 
+ "is_submittable": 0, 
+ "issingle": 0, 
+ "istable": 0, 
+ "max_attachments": 0, 
+ "modified": "2017-03-22 12:36:26.807200", 
+ "modified_by": "Administrator", 
+ "module": "HR", 
+ "name": "Job Opening", 
+ "owner": "Administrator", 
  "permissions": [
   {
-   "amend": 0,
-   "apply_user_permissions": 0,
-   "cancel": 0,
-   "create": 1,
-   "delete": 1,
-   "email": 1,
-   "export": 0,
-   "if_owner": 0,
-   "import": 0,
-   "is_custom": 0,
-   "permlevel": 0,
-   "print": 1,
-   "read": 1,
-   "report": 1,
-   "role": "HR User",
-   "set_user_permissions": 0,
-   "share": 1,
-   "submit": 0,
+   "amend": 0, 
+   "apply_user_permissions": 0, 
+   "cancel": 0, 
+   "create": 1, 
+   "delete": 1, 
+   "email": 1, 
+   "export": 0, 
+   "if_owner": 0, 
+   "import": 0, 
+   "permlevel": 0, 
+   "print": 1, 
+   "read": 1, 
+   "report": 1, 
+   "role": "HR User", 
+   "set_user_permissions": 0, 
+   "share": 1, 
+   "submit": 0, 
    "write": 1
+  }, 
+  {
+   "amend": 0, 
+   "apply_user_permissions": 0, 
+   "cancel": 0, 
+   "create": 0, 
+   "delete": 0, 
+   "email": 0, 
+   "export": 0, 
+   "if_owner": 0, 
+   "import": 0, 
+   "permlevel": 0, 
+   "print": 0, 
+   "read": 1, 
+   "report": 0, 
+   "role": "Guest", 
+   "set_user_permissions": 0, 
+   "share": 0, 
+   "submit": 0, 
+   "write": 0
   }
- ],
- "quick_entry": 0,
- "read_only": 0,
- "read_only_onload": 0,
- "sort_order": "ASC",
+ ], 
+ "quick_entry": 0, 
+ "read_only": 0, 
+ "read_only_onload": 0, 
+ "show_name_in_global_search": 0, 
+ "sort_order": "ASC", 
+ "track_changes": 0, 
  "track_seen": 0
 }
\ No newline at end of file
diff --git a/erpnext/hr/doctype/salary_slip/salary_slip.py b/erpnext/hr/doctype/salary_slip/salary_slip.py
index b8382ec..c629e87 100644
--- a/erpnext/hr/doctype/salary_slip/salary_slip.py
+++ b/erpnext/hr/doctype/salary_slip/salary_slip.py
@@ -148,10 +148,9 @@
 				})
 
 	def get_date_details(self):
-		if not self.end_date:
-			date_details = get_start_end_dates(self.payroll_frequency, self.start_date or self.posting_date)
-			self.start_date = date_details.start_date
-			self.end_date = date_details.end_date
+		date_details = get_start_end_dates(self.payroll_frequency, self.start_date or self.posting_date)
+		self.start_date = date_details.start_date
+		self.end_date = date_details.end_date
 
 	def check_sal_struct(self, joining_date, relieving_date):
 		cond = ''
diff --git a/erpnext/manufacturing/doctype/production_order/production_order.js b/erpnext/manufacturing/doctype/production_order/production_order.js
index 7d42f41..836024c 100644
--- a/erpnext/manufacturing/doctype/production_order/production_order.js
+++ b/erpnext/manufacturing/doctype/production_order/production_order.js
@@ -213,7 +213,10 @@
 	production_item: function(doc) {
 		frappe.call({
 			method: "erpnext.manufacturing.doctype.production_order.production_order.get_item_details",
-			args: { item: doc.production_item },
+			args: {
+					item: doc.production_item,
+					project: doc.project
+					},
 			callback: function(r) {
 				$.each(["description", "stock_uom", "bom_no"], function(i, field) {
 					cur_frm.set_value(field, r.message[field]);
@@ -226,6 +229,10 @@
 		});
 	},
 
+	project: function(doc) {
+		cur_frm.cscript.production_item(doc)
+	},
+
 	make_se: function(purpose) {
 		var me = this;
 		var max = (purpose === "Manufacture") ?
diff --git a/erpnext/manufacturing/doctype/production_order/production_order.json b/erpnext/manufacturing/doctype/production_order/production_order.json
index f9b99ab..c1ea17d 100644
--- a/erpnext/manufacturing/doctype/production_order/production_order.json
+++ b/erpnext/manufacturing/doctype/production_order/production_order.json
@@ -1,5 +1,6 @@
 {
  "allow_copy": 0, 
+ "allow_guest_to_view": 0, 
  "allow_import": 1, 
  "allow_rename": 0, 
  "autoname": "naming_series:", 
@@ -139,6 +140,37 @@
    "bold": 0, 
    "collapsible": 0, 
    "columns": 0, 
+   "fieldname": "project", 
+   "fieldtype": "Link", 
+   "hidden": 0, 
+   "ignore_user_permissions": 0, 
+   "ignore_xss_filter": 0, 
+   "in_filter": 0, 
+   "in_global_search": 0, 
+   "in_list_view": 0, 
+   "in_standard_filter": 0, 
+   "label": "Project", 
+   "length": 0, 
+   "no_copy": 0, 
+   "oldfieldname": "project", 
+   "oldfieldtype": "Link", 
+   "options": "Project", 
+   "permlevel": 0, 
+   "print_hide": 0, 
+   "print_hide_if_no_value": 0, 
+   "read_only": 0, 
+   "remember_last_selected_value": 0, 
+   "report_hide": 0, 
+   "reqd": 0, 
+   "search_index": 0, 
+   "set_only_once": 0, 
+   "unique": 0
+  }, 
+  {
+   "allow_on_submit": 0, 
+   "bold": 0, 
+   "collapsible": 0, 
+   "columns": 0, 
    "depends_on": "", 
    "description": "", 
    "fieldname": "bom_no", 
@@ -1127,37 +1159,6 @@
    "bold": 0, 
    "collapsible": 0, 
    "columns": 0, 
-   "fieldname": "project", 
-   "fieldtype": "Link", 
-   "hidden": 0, 
-   "ignore_user_permissions": 0, 
-   "ignore_xss_filter": 0, 
-   "in_filter": 0, 
-   "in_global_search": 0, 
-   "in_list_view": 0, 
-   "in_standard_filter": 0, 
-   "label": "Project", 
-   "length": 0, 
-   "no_copy": 0, 
-   "oldfieldname": "project", 
-   "oldfieldtype": "Link", 
-   "options": "Project", 
-   "permlevel": 0, 
-   "print_hide": 0, 
-   "print_hide_if_no_value": 0, 
-   "read_only": 0, 
-   "remember_last_selected_value": 0, 
-   "report_hide": 0, 
-   "reqd": 0, 
-   "search_index": 0, 
-   "set_only_once": 0, 
-   "unique": 0
-  }, 
-  {
-   "allow_on_submit": 0, 
-   "bold": 0, 
-   "collapsible": 0, 
-   "columns": 0, 
    "description": "Manufacture against Material Request", 
    "fieldname": "material_request", 
    "fieldtype": "Link", 
@@ -1275,18 +1276,18 @@
    "unique": 0
   }
  ], 
+ "has_web_view": 0, 
  "hide_heading": 0, 
  "hide_toolbar": 0, 
  "icon": "fa fa-cogs", 
  "idx": 1, 
  "image_view": 0, 
  "in_create": 0, 
- "in_dialog": 0, 
  "is_submittable": 1, 
  "issingle": 0, 
  "istable": 0, 
  "max_attachments": 0, 
- "modified": "2017-02-17 17:26:47.310275", 
+ "modified": "2017-03-16 16:24:16.773317", 
  "modified_by": "Administrator", 
  "module": "Manufacturing", 
  "name": "Production Order", 
diff --git a/erpnext/manufacturing/doctype/production_order/production_order.py b/erpnext/manufacturing/doctype/production_order/production_order.py
index af9fff1..907a4b3 100644
--- a/erpnext/manufacturing/doctype/production_order/production_order.py
+++ b/erpnext/manufacturing/doctype/production_order/production_order.py
@@ -448,7 +448,7 @@
 
 
 @frappe.whitelist()
-def get_item_details(item):
+def get_item_details(item, project = None):
 	res = frappe.db.sql("""select stock_uom, description
 		from `tabItem` where disabled=0 and (end_of_life is null or end_of_life='0000-00-00' or end_of_life > %s)
 		and name=%s""", (nowdate(), item), as_dict=1)
@@ -457,13 +457,22 @@
 
 	res = res[0]
 
-	res["bom_no"] = frappe.db.get_value("BOM", filters={"item": item, "is_default": 1})
+	filters = {"item": item, "is_default": 1}
+
+	if project:
+		filters = {"item": item, "project": project}
+
+	res["bom_no"] = frappe.db.get_value("BOM", filters = filters)
+
 	if not res["bom_no"]:
 		variant_of= frappe.db.get_value("Item", item, "variant_of")
+
 		if variant_of:
 			res["bom_no"] = frappe.db.get_value("BOM", filters={"item": variant_of, "is_default": 1})
 
 	if not res["bom_no"]:
+		if project:
+			frappe.throw(_("Default BOM for {0} not found for Project {1}").format(item, project))
 		frappe.throw(_("Default BOM for {0} not found").format(item))
 
 	res.update(check_if_scrap_warehouse_mandatory(res["bom_no"]))
diff --git a/erpnext/public/css/erpnext.css b/erpnext/public/css/erpnext.css
index 697c078..7b6e5a1 100644
--- a/erpnext/public/css/erpnext.css
+++ b/erpnext/public/css/erpnext.css
@@ -144,6 +144,19 @@
   background-color: #fff;
   margin-left: -4px;
 }
+@media (max-width: 1199px) {
+  body[data-route="pos"] .numeric-keypad {
+    height: 45px;
+    width: 45px;
+    font-size: 14px;
+  }
+}
+@media (max-width: 991px) {
+  body[data-route="pos"] .numeric-keypad {
+    height: 40px;
+    width: 40px;
+  }
+}
 body[data-route="pos"] .numeric_keypad {
   margin-left: -15px;
 }
@@ -307,9 +320,17 @@
   padding: 5px;
   padding-left: 15px;
 }
+body[data-route="pos"] .pos-selected-item-action .pos-list-row:first-child {
+  padding-top: 0;
+}
 body[data-route="pos"] .pos-selected-item-action > .pos-list-row {
   border: none;
 }
+@media (max-width: 1199px) {
+  body[data-route="pos"] .pos-selected-item-action > .pos-list-row {
+    padding: 5px 15px;
+  }
+}
 body[data-route="pos"] .edit-customer-btn {
   position: absolute;
   right: 57px;
@@ -327,4 +348,3 @@
 body[data-route="pos"] .collapse-btn {
   cursor: pointer;
 }
-
diff --git a/erpnext/public/less/erpnext.less b/erpnext/public/less/erpnext.less
index 0a48970..c06bdf9 100644
--- a/erpnext/public/less/erpnext.less
+++ b/erpnext/public/less/erpnext.less
@@ -176,6 +176,17 @@
 		border-radius: 0;
 		background-color: #fff;
 		margin-left:-4px;
+
+		@media (max-width: @screen-md) {
+			height: 45px;
+			width: 45px;
+			font-size: 14px;
+		}
+
+		@media (max-width: @screen-sm) {
+			height: 40px;
+			width: 40px;
+		}
 	}
 
 	.numeric_keypad {
@@ -371,8 +382,18 @@
 		padding-left: 15px;
 	}
 
-	.pos-selected-item-action > .pos-list-row {
-		border: none;
+	.pos-selected-item-action {
+		.pos-list-row:first-child {
+			padding-top: 0;
+		}
+
+		&> .pos-list-row {
+			border: none;
+
+			@media (max-width: @screen-md) {
+				padding: 5px 15px;
+			}
+		}
 	}
 
 	.edit-customer-btn {
diff --git a/erpnext/selling/doctype/sales_order/sales_order.js b/erpnext/selling/doctype/sales_order/sales_order.js
index 891f37c..f149baf 100644
--- a/erpnext/selling/doctype/sales_order/sales_order.js
+++ b/erpnext/selling/doctype/sales_order/sales_order.js
@@ -177,11 +177,11 @@
 							fields: [
 								{fieldtype:'Read Only', fieldname:'item_code',
 									label: __('Item Code'), in_list_view:1},
-								{fieldtype:'Link', fieldname:'bom', options: 'BOM',
+								{fieldtype:'Link', fieldname:'bom', options: 'BOM', reqd: 1,
 									label: __('Select BOM'), in_list_view:1, get_query: function(doc) {
 										return {filters: {item: doc.item_code}};
 									}},
-								{fieldtype:'Float', fieldname:'pending_qty',
+								{fieldtype:'Float', fieldname:'pending_qty', reqd: 1,
 									label: __('Qty'), in_list_view:1},
 							],
 							get_data: function() {
diff --git a/erpnext/shopping_cart/cart.py b/erpnext/shopping_cart/cart.py
index b427b94..61ec78c 100644
--- a/erpnext/shopping_cart/cart.py
+++ b/erpnext/shopping_cart/cart.py
@@ -31,10 +31,14 @@
 		doc = quotation
 		set_cart_count(quotation)
 
+	addresses = get_address_docs(party=party)
+
 	return {
 		"doc": decorate_quotation_doc(doc),
-		"addresses": [{"name": address.name, "display": address.display}
-			for address in get_address_docs(party=party)],
+		"shipping_addresses": [{"name": address.name, "display": address.display}
+			for address in addresses if address.address_type == "Shipping"],
+		"billing_addresses": [{"name": address.name, "display": address.display}
+			for address in addresses if address.address_type == "Billing"],
 		"shipping_rules": get_applicable_shipping_rules(party)
 	}
 
diff --git a/erpnext/shopping_cart/doctype/shopping_cart_settings/shopping_cart_settings.json b/erpnext/shopping_cart/doctype/shopping_cart_settings/shopping_cart_settings.json
index 75880ad..c5efdf8 100644
--- a/erpnext/shopping_cart/doctype/shopping_cart_settings/shopping_cart_settings.json
+++ b/erpnext/shopping_cart/doctype/shopping_cart_settings/shopping_cart_settings.json
@@ -1,5 +1,6 @@
 {
  "allow_copy": 0, 
+ "allow_guest_to_view": 0, 
  "allow_import": 0, 
  "allow_rename": 0, 
  "beta": 0, 
@@ -22,6 +23,7 @@
    "ignore_user_permissions": 0, 
    "ignore_xss_filter": 0, 
    "in_filter": 0, 
+   "in_global_search": 0, 
    "in_list_view": 1, 
    "in_standard_filter": 0, 
    "label": "Enable Shopping Cart", 
@@ -49,6 +51,7 @@
    "ignore_user_permissions": 0, 
    "ignore_xss_filter": 0, 
    "in_filter": 0, 
+   "in_global_search": 0, 
    "in_list_view": 0, 
    "in_standard_filter": 0, 
    "length": 0, 
@@ -75,6 +78,7 @@
    "ignore_user_permissions": 0, 
    "ignore_xss_filter": 0, 
    "in_filter": 0, 
+   "in_global_search": 0, 
    "in_list_view": 1, 
    "in_standard_filter": 0, 
    "label": "Company", 
@@ -104,6 +108,7 @@
    "ignore_user_permissions": 0, 
    "ignore_xss_filter": 0, 
    "in_filter": 0, 
+   "in_global_search": 0, 
    "in_list_view": 0, 
    "in_standard_filter": 0, 
    "label": "Price List", 
@@ -127,12 +132,42 @@
    "bold": 0, 
    "collapsible": 0, 
    "columns": 0, 
+   "fieldname": "show_quantity_in_website", 
+   "fieldtype": "Check", 
+   "hidden": 0, 
+   "ignore_user_permissions": 0, 
+   "ignore_xss_filter": 0, 
+   "in_filter": 0, 
+   "in_global_search": 0, 
+   "in_list_view": 0, 
+   "in_standard_filter": 0, 
+   "label": "Show Quantity in Website", 
+   "length": 0, 
+   "no_copy": 0, 
+   "permlevel": 0, 
+   "precision": "", 
+   "print_hide": 0, 
+   "print_hide_if_no_value": 0, 
+   "read_only": 0, 
+   "remember_last_selected_value": 0, 
+   "report_hide": 0, 
+   "reqd": 0, 
+   "search_index": 0, 
+   "set_only_once": 0, 
+   "unique": 0
+  }, 
+  {
+   "allow_on_submit": 0, 
+   "bold": 0, 
+   "collapsible": 0, 
+   "columns": 0, 
    "fieldname": "column_break_4", 
    "fieldtype": "Column Break", 
    "hidden": 0, 
    "ignore_user_permissions": 0, 
    "ignore_xss_filter": 0, 
    "in_filter": 0, 
+   "in_global_search": 0, 
    "in_list_view": 0, 
    "in_standard_filter": 0, 
    "length": 0, 
@@ -160,6 +195,7 @@
    "ignore_user_permissions": 1, 
    "ignore_xss_filter": 0, 
    "in_filter": 0, 
+   "in_global_search": 0, 
    "in_list_view": 0, 
    "in_standard_filter": 0, 
    "label": "Default Customer Group", 
@@ -188,6 +224,7 @@
    "ignore_user_permissions": 0, 
    "ignore_xss_filter": 0, 
    "in_filter": 0, 
+   "in_global_search": 0, 
    "in_list_view": 0, 
    "in_standard_filter": 0, 
    "label": "Quotation Series", 
@@ -216,6 +253,7 @@
    "ignore_user_permissions": 0, 
    "ignore_xss_filter": 0, 
    "in_filter": 0, 
+   "in_global_search": 0, 
    "in_list_view": 0, 
    "in_standard_filter": 0, 
    "label": "Checkout Settings", 
@@ -244,6 +282,7 @@
    "ignore_user_permissions": 0, 
    "ignore_xss_filter": 0, 
    "in_filter": 0, 
+   "in_global_search": 0, 
    "in_list_view": 0, 
    "in_standard_filter": 0, 
    "label": "Enable Checkout", 
@@ -274,6 +313,7 @@
    "ignore_user_permissions": 0, 
    "ignore_xss_filter": 0, 
    "in_filter": 0, 
+   "in_global_search": 0, 
    "in_list_view": 0, 
    "in_standard_filter": 0, 
    "label": "Payment Success Url", 
@@ -303,6 +343,7 @@
    "ignore_user_permissions": 0, 
    "ignore_xss_filter": 0, 
    "in_filter": 0, 
+   "in_global_search": 0, 
    "in_list_view": 0, 
    "in_standard_filter": 0, 
    "length": 0, 
@@ -330,6 +371,7 @@
    "ignore_user_permissions": 0, 
    "ignore_xss_filter": 0, 
    "in_filter": 0, 
+   "in_global_search": 0, 
    "in_list_view": 0, 
    "in_standard_filter": 0, 
    "label": "Payment Gateway Account", 
@@ -349,18 +391,18 @@
    "unique": 0
   }
  ], 
+ "has_web_view": 0, 
  "hide_heading": 0, 
  "hide_toolbar": 0, 
  "icon": "fa fa-shopping-cart", 
  "idx": 1, 
  "image_view": 0, 
  "in_create": 0, 
- "in_dialog": 0, 
  "is_submittable": 0, 
  "issingle": 1, 
  "istable": 0, 
  "max_attachments": 0, 
- "modified": "2017-01-17 05:30:29.333104", 
+ "modified": "2017-03-21 15:42:08.574497", 
  "modified_by": "Administrator", 
  "module": "Shopping Cart", 
  "name": "Shopping Cart Settings", 
@@ -376,7 +418,6 @@
    "export": 0, 
    "if_owner": 0, 
    "import": 0, 
-   "is_custom": 0, 
    "permlevel": 0, 
    "print": 1, 
    "read": 1, 
@@ -391,6 +432,7 @@
  "quick_entry": 0, 
  "read_only": 0, 
  "read_only_onload": 0, 
+ "show_name_in_global_search": 0, 
  "sort_order": "ASC", 
  "track_changes": 0, 
  "track_seen": 0
diff --git a/erpnext/shopping_cart/doctype/shopping_cart_settings/shopping_cart_settings.py b/erpnext/shopping_cart/doctype/shopping_cart_settings/shopping_cart_settings.py
index 6915ef5..4e24d2e 100644
--- a/erpnext/shopping_cart/doctype/shopping_cart_settings/shopping_cart_settings.py
+++ b/erpnext/shopping_cart/doctype/shopping_cart_settings/shopping_cart_settings.py
@@ -82,6 +82,9 @@
 def is_cart_enabled():
 	return get_shopping_cart_settings().enabled
 
+def show_quantity_in_website():
+	return get_shopping_cart_settings().show_quantity_in_website
+
 def check_shopping_cart_enabled():
 	if not get_shopping_cart_settings().enabled:
 		frappe.throw(_("You need to enable Shopping Cart"), ShoppingCartSetupError)
diff --git a/erpnext/shopping_cart/product.py b/erpnext/shopping_cart/product.py
index 24e4d42..d7afc3b 100644
--- a/erpnext/shopping_cart/product.py
+++ b/erpnext/shopping_cart/product.py
@@ -7,7 +7,7 @@
 from frappe.utils import cint, fmt_money, flt
 from erpnext.shopping_cart.cart import _get_cart_quotation
 from erpnext.shopping_cart.doctype.shopping_cart_settings.shopping_cart_settings \
-	import is_cart_enabled, get_shopping_cart_settings
+	import is_cart_enabled, get_shopping_cart_settings, show_quantity_in_website
 from erpnext.accounts.doctype.pricing_rule.pricing_rule import get_pricing_rule_for_item
 
 @frappe.whitelist(allow_guest=True)
@@ -19,7 +19,9 @@
 	qty = 0
 	cart_quotation = _get_cart_quotation()
 	template_item_code = frappe.db.get_value("Item", item_code, "variant_of")
-	in_stock = get_qty_in_stock(item_code, template_item_code)
+	stock_status = get_qty_in_stock(item_code, template_item_code)
+	in_stock = stock_status.in_stock
+	stock_qty = stock_status.stock_qty
 	price = get_price(item_code, template_item_code, cart_quotation.selling_price_list)
 
 	if price:
@@ -36,9 +38,11 @@
 
 	return {
 		"price": price,
-		"stock": in_stock,
+		"stock_qty": stock_qty,
+		"in_stock": in_stock,
 		"uom": frappe.db.get_value("Item", item_code, "stock_uom"),
-		"qty": qty
+		"qty": qty,
+		"show_stock_qty": show_quantity_in_website()
 	}
 
 def get_qty_in_stock(item_code, template_item_code):
@@ -47,15 +51,14 @@
 		warehouse = frappe.db.get_value("Item", template_item_code, "website_warehouse")
 
 	if warehouse:
-		in_stock = frappe.db.sql("""select actual_qty from tabBin where
+		stock_qty = frappe.db.sql("""select actual_qty from tabBin where
 			item_code=%s and warehouse=%s""", (item_code, warehouse))
-		if in_stock:
-			in_stock = in_stock[0][0] > 0 and 1 or 0
+		if stock_qty:
+			in_stock = stock_qty[0][0] > 0 and 1 or 0
+		else:
+			in_stock = 0
 
-	else:
-		in_stock = 0
-
-	return in_stock
+	return frappe._dict({"in_stock": in_stock, "stock_qty": stock_qty})
 
 def get_price(item_code, template_item_code, price_list, qty=1):
 	if price_list:
diff --git a/erpnext/startup/report_data_map.py b/erpnext/startup/report_data_map.py
index e4bbd87..ffdc66d 100644
--- a/erpnext/startup/report_data_map.py
+++ b/erpnext/startup/report_data_map.py
@@ -241,7 +241,7 @@
 		}
 	},
 	"Purchase Invoice Item": {
-		"columns": ["name", "parent", "item_code", "stock_qty as qty", "base_net_amount"],
+		"columns": ["name", "parent", "item_code", "(qty * conversion_factor) as qty", "base_net_amount"],
 		"conditions": ["docstatus=1", "ifnull(parent, '')!=''"],
 		"order_by": "parent",
 		"links": {
diff --git a/erpnext/stock/doctype/item/item.js b/erpnext/stock/doctype/item/item.js
index 7068c99..8327ea7 100644
--- a/erpnext/stock/doctype/item/item.js
+++ b/erpnext/stock/doctype/item/item.js
@@ -261,6 +261,44 @@
 	make_variant: function(frm) {
 		var fields = []
 
+		if(frm.doc.variant_based_on==="Item Attribute") {
+			erpnext.item.show_modal_for_item_attribute_selection(frm);
+		} else {
+			erpnext.item.show_modal_for_manufacturers(frm);
+		}
+	},
+
+	show_modal_for_manufacturers: function(frm) {
+		var dialog = new frappe.ui.Dialog({
+			fields: [
+				{fieldtype:'Link', options:'Manufacturer',
+					reqd:1, label:'Manufacturer'},
+				{fieldtype:'Data', label:'Manufacturer Part Number',
+					fieldname: 'manufacturer_part_no'},
+			]
+		});
+
+		dialog.set_primary_action(__('Make'), function() {
+			var data = dialog.get_values();
+			if(!data) return;
+
+			// call the server to make the variant
+			data.template = frm.doc.name;
+			frappe.call({
+				method:"erpnext.controllers.item_variant.get_variant",
+				args: data,
+				callback: function(r) {
+					var doclist = frappe.model.sync(r.message);
+					dialog.hide();
+					frappe.set_route("Form", doclist[0].doctype, doclist[0].name);
+				}
+			});
+		})
+
+		dialog.show();
+	},
+
+	show_modal_for_item_attribute_selection: function(frm) {
 		for(var i=0;i< frm.doc.attributes.length;i++){
 			var fieldtype, desc;
 			var row = frm.doc.attributes[i];
@@ -371,13 +409,42 @@
 				})
 		});
 	},
-	toggle_attributes: function(frm) {
-		frm.toggle_display("attributes", frm.doc.has_variants || frm.doc.variant_of);
-		frm.fields_dict.attributes.grid.toggle_reqd("attribute_value", frm.doc.variant_of ? 1 : 0);
-		frm.fields_dict.attributes.grid.set_column_disp("attribute_value", frm.doc.variant_of ? 1 : 0);
 
-		frm.toggle_enable("attributes", !frm.doc.variant_of);
-		frm.fields_dict.attributes.grid.toggle_enable("attribute", !frm.doc.variant_of);
-		frm.fields_dict.attributes.grid.toggle_enable("attribute_value", !frm.doc.variant_of);
+	toggle_attributes: function(frm) {
+		if((frm.doc.has_variants || frm.doc.variant_of)
+			&& frm.doc.variant_based_on==='Item Attribute') {
+			frm.toggle_display("attributes", true);
+
+			var grid = frm.fields_dict.attributes.grid;
+
+			if(frm.doc.variant_of) {
+				// variant
+
+				// value column is displayed but not editable
+				grid.set_column_disp("attribute_value", true);
+				grid.toggle_enable("attribute_value", false);
+
+				grid.toggle_enable("attribute", false);
+
+				// can't change attributes since they are
+				// saved when the variant was created
+				frm.toggle_enable("attributes", false);
+			} else {
+				// template - values not required!
+
+				// make the grid editable
+				frm.toggle_enable("attributes", true);
+
+				// value column is hidden
+				grid.set_column_disp("attribute_value", false);
+
+				// enable the grid so you can add more attributes
+				grid.toggle_enable("attribute", true);
+			}
+
+		} else {
+			// nothing to do with attributes, hide it
+			frm.toggle_display("attributes", false);
+		}
 	}
 });
diff --git a/erpnext/stock/doctype/item/item.json b/erpnext/stock/doctype/item/item.json
index 4a5094e..db327cc 100644
--- a/erpnext/stock/doctype/item/item.json
+++ b/erpnext/stock/doctype/item/item.json
@@ -1,5 +1,6 @@
 {
  "allow_copy": 0, 
+ "allow_guest_to_view": 0, 
  "allow_import": 1, 
  "allow_rename": 1, 
  "autoname": "field:item_code", 
@@ -1218,7 +1219,39 @@
    "bold": 0, 
    "collapsible": 0, 
    "columns": 0, 
-   "depends_on": "", 
+   "default": "Item Attribute", 
+   "depends_on": "has_variants", 
+   "fieldname": "variant_based_on", 
+   "fieldtype": "Select", 
+   "hidden": 0, 
+   "ignore_user_permissions": 0, 
+   "ignore_xss_filter": 0, 
+   "in_filter": 0, 
+   "in_global_search": 0, 
+   "in_list_view": 0, 
+   "in_standard_filter": 0, 
+   "label": "Variant Based On", 
+   "length": 0, 
+   "no_copy": 0, 
+   "options": "Item Attribute\nManufacturer", 
+   "permlevel": 0, 
+   "precision": "", 
+   "print_hide": 0, 
+   "print_hide_if_no_value": 0, 
+   "read_only": 0, 
+   "remember_last_selected_value": 0, 
+   "report_hide": 0, 
+   "reqd": 0, 
+   "search_index": 0, 
+   "set_only_once": 0, 
+   "unique": 0
+  }, 
+  {
+   "allow_on_submit": 0, 
+   "bold": 0, 
+   "collapsible": 0, 
+   "columns": 0, 
+   "depends_on": "eval:doc.has_variants && doc.variant_based_on==='Item Attribute'", 
    "fieldname": "attributes", 
    "fieldtype": "Table", 
    "hidden": 1, 
@@ -2792,6 +2825,7 @@
    "unique": 0
   }
  ], 
+ "has_web_view": 0, 
  "hide_heading": 0, 
  "hide_toolbar": 0, 
  "icon": "fa fa-tag", 
@@ -2799,12 +2833,11 @@
  "image_field": "image", 
  "image_view": 0, 
  "in_create": 0, 
- "in_dialog": 0, 
  "is_submittable": 0, 
  "issingle": 0, 
  "istable": 0, 
  "max_attachments": 1, 
- "modified": "2017-02-20 13:26:45.446617", 
+ "modified": "2017-03-21 21:03:10.715674", 
  "modified_by": "Administrator", 
  "module": "Stock", 
  "name": "Item", 
diff --git a/erpnext/stock/doctype/item/item.py b/erpnext/stock/doctype/item/item.py
index 0f0205b..4d0c3ac 100644
--- a/erpnext/stock/doctype/item/item.py
+++ b/erpnext/stock/doctype/item/item.py
@@ -643,7 +643,7 @@
 					.format(self.stock_uom, template_uom))
 
 	def validate_attributes(self):
-		if self.has_variants or self.variant_of:
+		if (self.has_variants or self.variant_of) and self.variant_based_on=='Item Attribute':
 			attributes = []
 			if not self.attributes:
 				frappe.throw(_("Attribute table is mandatory"))
@@ -654,7 +654,7 @@
 					attributes.append(d.attribute)
 
 	def validate_variant_attributes(self):
-		if self.variant_of:
+		if self.variant_of and self.variant_based_on=='Item Attribute':
 			args = {}
 			for d in self.attributes:
 				if not d.attribute_value:
@@ -675,7 +675,7 @@
 		from `tabStock Ledger Entry` where item_code=%s
 			and posting_date > date_sub(curdate(), interval 1 year)
 			group by posting_date''', name))
-	
+
 	for date, count in items.iteritems():
 		timestamp = get_timestamp(date)
 		out.update({ timestamp: count })
diff --git a/erpnext/stock/doctype/item/test_item.py b/erpnext/stock/doctype/item/test_item.py
index 15a1118..2a8e434 100644
--- a/erpnext/stock/doctype/item/test_item.py
+++ b/erpnext/stock/doctype/item/test_item.py
@@ -7,7 +7,7 @@
 
 from frappe.test_runner import make_test_records
 from erpnext.controllers.item_variant import (create_variant, ItemVariantExistsError,
-	InvalidItemAttributeValueError)
+	InvalidItemAttributeValueError, get_variant)
 
 from frappe.model.rename_doc import rename_doc
 from erpnext.stock.doctype.stock_entry.stock_entry_utils import make_stock_entry
@@ -167,31 +167,66 @@
 		variant.item_name = "_Test Numeric Variant Large 1.1m"
 		self.assertRaises(InvalidItemAttributeValueError, variant.save)
 
-		variant = create_variant("_Test Numeric Template Item", 
+		variant = create_variant("_Test Numeric Template Item",
 			{"Test Size": "Large", "Test Item Length": 1.5})
 		self.assertEquals(variant.item_code, "_Test Numeric Template Item-L-1.5")
 		variant.item_code = "_Test Numeric Variant-L-1.5"
 		variant.item_name = "_Test Numeric Variant Large 1.5m"
 		variant.save()
-		
-	def test_item_merging(self):		
+
+	def test_item_merging(self):
 		create_item("Test Item for Merging 1")
 		create_item("Test Item for Merging 2")
-		
-		make_stock_entry(item_code="Test Item for Merging 1", target="_Test Warehouse - _TC", 
+
+		make_stock_entry(item_code="Test Item for Merging 1", target="_Test Warehouse - _TC",
 			qty=1, rate=100)
-		make_stock_entry(item_code="Test Item for Merging 2", target="_Test Warehouse 1 - _TC", 
+		make_stock_entry(item_code="Test Item for Merging 2", target="_Test Warehouse 1 - _TC",
 			qty=1, rate=100)
-		
+
 		rename_doc("Item", "Test Item for Merging 1", "Test Item for Merging 2", merge=True)
-		
+
 		self.assertFalse(frappe.db.exists("Item", "Test Item for Merging 1"))
-		
-		self.assertTrue(frappe.db.get_value("Bin", 
+
+		self.assertTrue(frappe.db.get_value("Bin",
 			{"item_code": "Test Item for Merging 2", "warehouse": "_Test Warehouse - _TC"}))
-			
-		self.assertTrue(frappe.db.get_value("Bin", 
-			{"item_code": "Test Item for Merging 2", "warehouse": "_Test Warehouse 1 - _TC"}))		
+
+		self.assertTrue(frappe.db.get_value("Bin",
+			{"item_code": "Test Item for Merging 2", "warehouse": "_Test Warehouse 1 - _TC"}))
+
+	def test_item_variant_by_manufacturer(self):
+		if frappe.db.exists('Item', '_Test Variant Mfg'):
+			frappe.delete_doc('Item', '_Test Variant Mfg')
+		if frappe.db.exists('Item', '_Test Variant Mfg-1'):
+			frappe.delete_doc('Item', '_Test Variant Mfg-1')
+		if frappe.db.exists('Manufacturer', 'MSG1'):
+			frappe.delete_doc('Manufacturer', 'MSG1')
+
+		template = frappe.get_doc(dict(
+			doctype='Item',
+			item_code='_Test Variant Mfg',
+			has_variant=1,
+			item_group='Products',
+			variant_based_on='Manufacturer'
+		)).insert()
+
+		manufacturer = frappe.get_doc(dict(
+			doctype='Manufacturer',
+			short_name='MSG1'
+		)).insert()
+
+		variant = get_variant(template.name, manufacturer=manufacturer.name)
+		self.assertEquals(variant.item_code, '_Test Variant Mfg-1')
+		self.assertEquals(variant.description, '_Test Variant Mfg')
+		self.assertEquals(variant.manufacturer, 'MSG1')
+		variant.insert()
+
+		variant = get_variant(template.name, manufacturer=manufacturer.name,
+			manufacturer_part_no='007')
+		self.assertEquals(variant.item_code, '_Test Variant Mfg-2')
+		self.assertEquals(variant.description, '_Test Variant Mfg')
+		self.assertEquals(variant.manufacturer, 'MSG1')
+		self.assertEquals(variant.manufacturer_part_no, '007')
+
 
 def make_item_variant():
 	if not frappe.db.exists("Item", "_Test Variant Item-S"):
@@ -215,6 +250,5 @@
 		item.item_name = item_code
 		item.description = item_code
 		item.item_group = "All Item Groups"
-		item.is_stock_item = is_stock_item or 1		
+		item.is_stock_item = is_stock_item or 1
 		item.save()
-		
\ No newline at end of file
diff --git a/erpnext/support/doctype/issue/issue.py b/erpnext/support/doctype/issue/issue.py
index a1f8077..8a0be85 100644
--- a/erpnext/support/doctype/issue/issue.py
+++ b/erpnext/support/doctype/issue/issue.py
@@ -63,7 +63,7 @@
 		'no_breadcrumbs': True
 	}
 
-def get_issue_list(doctype, txt, filters, limit_start, limit_page_length=20):
+def get_issue_list(doctype, txt, filters, limit_start, limit_page_length=20, order_by=None):
 	from frappe.www.list import get_list
 	user = frappe.session.user
 	ignore_permissions = False
diff --git a/erpnext/templates/includes/address_row.html b/erpnext/templates/includes/address_row.html
index 2c5056a..bfc035a 100644
--- a/erpnext/templates/includes/address_row.html
+++ b/erpnext/templates/includes/address_row.html
@@ -4,7 +4,7 @@
 	        <div class="col-xs-3">
 	                 <span class="indicator {{ "red" if doc.address_type=="Office" else "green" if doc.address_type=="Billing" else "blue" if doc.address_type=="Shipping" else "darkgrey" }}">{{ doc.address_title }}</span>
 			</div>
-			<div class="col-xs-2"> {{ doc.address_type }} </div>
+			<div class="col-xs-2"> {{ _(doc.address_type) }} </div>
 			<div class="col-xs-2"> {{ doc.city }} </div>
 			<div class="col-xs-5 text-right small text-muted">
 	            {{ frappe.get_doc(doc).get_display() }}
diff --git a/erpnext/templates/includes/cart.js b/erpnext/templates/includes/cart.js
index dbb93a9..ee98b23 100644
--- a/erpnext/templates/includes/cart.js
+++ b/erpnext/templates/includes/cart.js
@@ -24,9 +24,17 @@
 			if($(this).prop("checked")) {
 				var me = this;
 
+				// uncheck other shipping or billing addresses:
+				if ( $(this).is('input[data-fieldname=customer_address]') ) {
+					$('input[data-fieldname=customer_address]').not(this).prop('checked', false);
+				} else {
+					$('input[data-fieldname=shipping_address_name]').not(this).prop('checked', false);
+				}
+
 				return frappe.call({
 					type: "POST",
 					method: "erpnext.shopping_cart.cart.update_cart_address",
+					freeze: true,
 					args: {
 						address_fieldname: $(this).attr("data-fieldname"),
 						address_name: $(this).attr("data-address-name")
diff --git a/erpnext/templates/includes/cart/cart_address.html b/erpnext/templates/includes/cart/cart_address.html
index 29d4f4b..7bd9256 100644
--- a/erpnext/templates/includes/cart/cart_address.html
+++ b/erpnext/templates/includes/cart/cart_address.html
@@ -7,7 +7,7 @@
 		<div class="h6 text-uppercase">{{ _("Shipping Address") }}</div>
 		<div id="cart-shipping-address" class="panel-group"
 			data-fieldname="shipping_address_name">
-            {% for address in addresses %}
+            {% for address in shipping_addresses %}
                 {{ show_address(address, doc, "shipping_address_name", select_address) }}
             {% endfor %}
         </div>
@@ -15,10 +15,10 @@
 			{{ _("Manage Addresses") }}</a>
 	</div>
 	<div class="col-sm-6">
-		<div class="h6 text-uppercase">Billing Address</div>
+        <div class="h6 text-uppercase">{{ _("Billing Address") }}</div>
 		<div id="cart-billing-address" class="panel-group"
 			data-fieldname="customer_address">
-            {% for address in addresses %}
+            {% for address in billing_addresses %}
                 {{ show_address(address, doc, "customer_address", select_address) }}
             {% endfor %}
         </div>
diff --git a/erpnext/templates/includes/product_page.js b/erpnext/templates/includes/product_page.js
index 4b23d5e..b37f7aa 100644
--- a/erpnext/templates/includes/product_page.js
+++ b/erpnext/templates/includes/product_page.js
@@ -17,12 +17,16 @@
 				$(".item-price")
 					.html(r.message.price.formatted_price + " per " + r.message.uom);
 
-				if(r.message.stock==0) {
-					$(".item-stock").html("<div style='color: red'>Not in stock</div>");
+				if(r.message.in_stock==0) {
+					$(".item-stock").html("<div style='color: red'> <i class='fa fa-close'></i> Not in stock</div>");
 				}
-				else if(r.message.stock==1) {
+				else if(r.message.in_stock==1) {
+					qty_display = "In stock"
+					if (r.message.show_stock_qty) {
+						qty_display = "Available ("+r.message.stock_qty+ " in stock)"
+					}
 					$(".item-stock").html("<div style='color: green'>\
-						<i class='fa fa-check'></i> Available (in stock)</div>");
+						<i class='fa fa-check'></i> "+__(qty_display)+"</div>");
 				}
 
 				if(r.message.qty) {
diff --git a/erpnext/templates/pages/cart.html b/erpnext/templates/pages/cart.html
index 7f6bf01..6cff5b1 100644
--- a/erpnext/templates/pages/cart.html
+++ b/erpnext/templates/pages/cart.html
@@ -1,6 +1,6 @@
 {% extends "templates/web.html" %}
 
-{% block title %} {{ "Shopping Cart" }} {% endblock %}
+{% block title %} {{ _("Shopping Cart") }} {% endblock %}
 
 {% block header %}<h2>{{ _("My Cart") }}</h2>{% endblock %}
 
diff --git a/erpnext/templates/pages/product_search.html b/erpnext/templates/pages/product_search.html
index 6875ba5..c7134b0 100644
--- a/erpnext/templates/pages/product_search.html
+++ b/erpnext/templates/pages/product_search.html
@@ -1,8 +1,8 @@
 {% extends "templates/web.html" %}
 
-{% block title %} {{ "Product Search" }} {% endblock %}
+{% block title %} {{ _("Product Search") }} {% endblock %}
 
-{% block header %}<h2>Product Search</h2>{% endblock %}
+{% block header %}<h2>{{ _("Product Search") }}</h2>{% endblock %}
 
 {% block page_content %}
 <script>{% include "templates/includes/product_list.js" %}</script>
@@ -10,7 +10,7 @@
 <script>
 frappe.ready(function() {
 	var txt = get_url_arg("search");
-	$(".search-results").html("Search results for: " + txt);
+	$(".search-results").html("{{ _('Search results for') }}: " + txt);
 	window.search = txt;
 	window.start = 0;
 	window.get_product_list();
@@ -18,14 +18,14 @@
 </script>
 
 <div class="product-search-content">
-	<h3 class="search-results">Search Results</h3>
+    <h3 class="search-results">{{ _("Search Results") }}</h3>
 	<div id="search-list" class="row">
 
 	</div>
 	<div style="text-align: center;">
 		<div class="more-btn"
 			style="display: none; text-align: center;">
-			<button class="btn btn-default">More...</button>
+            <button class="btn btn-default">{{ _("More...") }}</button>
 		</div>
 	</div>
 </div>
diff --git a/erpnext/translations/de.csv b/erpnext/translations/de.csv
index 7703211..0bd991c 100644
--- a/erpnext/translations/de.csv
+++ b/erpnext/translations/de.csv
@@ -518,7 +518,7 @@
 DocType: Timesheet Detail,Hrs,Std
 apps/erpnext/erpnext/accounts/doctype/journal_entry/journal_entry.js +317,Please select Company,Bitte Firma auswählen
 DocType: Stock Entry Detail,Difference Account,Differenzkonto
-apps/erpnext/erpnext/projects/doctype/task/task.py +46,Cannot close task as its dependant task {0} is not closed.,"Aufgabe kann nicht geschlossen werden, da die von ihr abhängige Aufgabe {0} nicht geschlossen ist."
+apps/erpnext/erpnext/projects/doctype/task/task.py +46,Cannot close task as its dependant task {0} is not closed.,"Aufgabe kann nicht abgeschlossen werden, da die von ihr abhängige Aufgabe {0} nicht abgeschlossen ist."
 apps/erpnext/erpnext/manufacturing/doctype/production_planning_tool/production_planning_tool.py +433,Please enter Warehouse for which Material Request will be raised,"Bitte das Lager eingeben, für das eine Materialanfrage erhoben wird"
 DocType: Production Order,Additional Operating Cost,Zusätzliche Betriebskosten
 apps/erpnext/erpnext/setup/setup_wizard/industry_type.py +20,Cosmetics,Kosmetika
@@ -775,7 +775,7 @@
 
 #### Description of Columns
 
-1. Calculation Type: 
+1. Calculation Type:
     - This can be on **Net Total** (that is the sum of basic amount).
     - **On Previous Row Total / Amount** (for cumulative taxes or charges). If you select this option, the tax will be applied as a percentage of the previous row (in the tax table) amount or total.
     - **Actual** (as mentioned).
@@ -786,15 +786,15 @@
 6. Amount: Tax amount.
 7. Total: Cumulative total to this point.
 8. Enter Row: If based on ""Previous Row Total"" you can select the row number which will be taken as a base for this calculation (default is the previous row).
-9. Is this Tax included in Basic Rate?: If you check this, it means that this tax will not be shown below the item table, but will be included in the Basic Rate in your main item table. This is useful where you want give a flat price (inclusive of all taxes) price to customers.","Standard-Steuer-Vorlage, die für alle Kauftransaktionen angewandt werden kann. Diese Vorlage kann eine Liste der Steuern und auch anderer Kosten wie ""Versand"", ""Versicherung"", ""Handhabung"" usw. enthalten. 
+9. Is this Tax included in Basic Rate?: If you check this, it means that this tax will not be shown below the item table, but will be included in the Basic Rate in your main item table. This is useful where you want give a flat price (inclusive of all taxes) price to customers.","Standard-Steuer-Vorlage, die für alle Kauftransaktionen angewandt werden kann. Diese Vorlage kann eine Liste der Steuern und auch anderer Kosten wie ""Versand"", ""Versicherung"", ""Handhabung"" usw. enthalten.
 
- #### Hinweis 
+ #### Hinweis
 
 Der Steuersatz, den sie hier definieren, wird der Standardsteuersatz für alle Artikel. Wenn es Artikel mit davon abweichenden Steuersätzen gibt, müssen diese in der Tabelle ""Artikelsteuer"" im Artikelstamm hinzugefügt werden.
 
- #### Beschreibung der Spalten 
+ #### Beschreibung der Spalten
 
-1. Berechnungsart: 
+1. Berechnungsart:
 - Dies kann sein ""Auf Nettosumme"" (das ist die Summe der Grundbeträge).
 - ""Auf vorherige Zeilensumme/-Betrag"" (für kumulative Steuern oder Abgaben). Wenn diese Option ausgewählt wird, wird die Steuer als Prozentsatz der vorherigen Zeilesumme/des vorherigen Zeilenbetrags (in der Steuertabelle) angewendet.
 - ""Unmittelbar"" (wie bereits erwähnt).
@@ -1010,7 +1010,7 @@
 apps/erpnext/erpnext/accounts/doctype/journal_entry/journal_entry.py +125,Row {0}: Payment against Sales/Purchase Order should always be marked as advance,"Zeile {0}: ""Zahlung zu Kunden-/Lieferantenauftrag"" sollte immer als ""Vorkasse"" eingestellt werden"
 apps/erpnext/erpnext/setup/setup_wizard/industry_type.py +16,Chemical,Chemische Industrie
 DocType: Salary Component Account,Default Bank / Cash account will be automatically updated in Salary Journal Entry when this mode is selected.,"Standard Bank / Geldkonto wird automatisch in Gehalts Journal Entry aktualisiert werden, wenn dieser Modus ausgewählt ist."
-apps/erpnext/erpnext/schools/doctype/grading_structure/grading_structure.py +24,"The intervals for Grade Code {0} overlaps with the grade intervals for other grades. 
+apps/erpnext/erpnext/schools/doctype/grading_structure/grading_structure.py +24,"The intervals for Grade Code {0} overlaps with the grade intervals for other grades.
                     Please check intervals {0} and {1} and try again",Die Intervalle für Grade-Code {0} überlappt mit der Note Intervalle für andere Typen. Bitte überprüfen Sie Intervalle {0} und {1} und versuchen Sie es erneut
 DocType: BOM,Raw Material Cost(Company Currency),Rohstoffkosten (Gesellschaft Währung)
 apps/erpnext/erpnext/stock/doctype/stock_entry/stock_entry.py +715,All items have already been transferred for this Production Order.,Alle Artikel wurden schon für diesen Fertigungsauftrag übernommen.
@@ -1430,7 +1430,7 @@
 apps/erpnext/erpnext/public/js/setup_wizard.js +307,We buy this Item,Wir kaufen diesen Artikel
 apps/erpnext/erpnext/accounts/doctype/gl_entry/gl_entry.py +54,{0} {1}: Customer is required against Receivable account {2},{0} {1}: Der Kunde muss gegen Receivable Konto {2}
 DocType: Purchase Invoice,Total Taxes and Charges (Company Currency),Gesamte Steuern und Gebühren (Firmenwährung)
-apps/erpnext/erpnext/accounts/report/trial_balance/trial_balance.js +60,Show unclosed fiscal year's P&L balances,Zeigen Sie nicht geschlossene Geschäftsjahr des P &amp; L-Waagen
+apps/erpnext/erpnext/accounts/report/trial_balance/trial_balance.js +60,Show unclosed fiscal year's P&L balances,Zeigen Sie nicht abgeschlossene Geschäftsjahr des P &amp; L-Waagen
 DocType: Shipping Rule,Shipping Account,Versandkonto
 apps/erpnext/erpnext/accounts/doctype/gl_entry/gl_entry.py +93,{0} {1}: Account {2} is inactive,{0} {1}: Konto {2} ist inaktiv
 apps/erpnext/erpnext/utilities/activation.py +85,Make Sales Orders to help you plan your work and deliver on-time,Machen Sie Kundenaufträge Sie Ihre Arbeit planen und liefern on-time
@@ -1468,7 +1468,7 @@
 DocType: Cost Center,Parent Cost Center,Übergeordnete Kostenstelle
 apps/erpnext/erpnext/buying/doctype/request_for_quotation/request_for_quotation.js +816,Select Possible Supplier,Wählen Mögliche Lieferant
 DocType: Sales Invoice,Source,Quelle
-apps/erpnext/erpnext/templates/pages/projects.html +31,Show closed,Zeige geschlossen
+apps/erpnext/erpnext/templates/pages/projects.html +31,Show closed,Zeige abgeschlossen
 DocType: Leave Type,Is Leave Without Pay,Ist unbezahlter Urlaub
 apps/erpnext/erpnext/stock/doctype/item/item.py +237,Asset Category is mandatory for Fixed Asset item,Anlagekategorie ist obligatorisch für Posten des Anlagevermögens
 apps/erpnext/erpnext/accounts/doctype/payment_reconciliation/payment_reconciliation.py +145,No records found in the Payment table,"Keine Datensätze in der Tabelle ""Zahlungen"" gefunden"
@@ -1578,7 +1578,7 @@
 apps/erpnext/erpnext/accounts/doctype/payment_request/payment_request.py +23,Payment Request already exists {0},Zahlungsanordnung bereits vorhanden ist {0}
 apps/erpnext/erpnext/projects/report/project_wise_stock_tracking/project_wise_stock_tracking.py +27,Cost of Issued Items,Aufwendungen für in Umlauf gebrachte Artikel
 apps/erpnext/erpnext/manufacturing/doctype/production_order/production_order.js +246,Quantity must not be more than {0},Menge darf nicht mehr als {0} sein
-apps/erpnext/erpnext/accounts/report/balance_sheet/balance_sheet.py +107,Previous Financial Year is not closed,Zurück Geschäftsjahr nicht geschlossen
+apps/erpnext/erpnext/accounts/report/balance_sheet/balance_sheet.py +107,Previous Financial Year is not closed,Zurück Geschäftsjahr nicht abgeschlossen
 apps/erpnext/erpnext/accounts/report/accounts_receivable/accounts_receivable.py +44,Age (Days),Alter (Tage)
 DocType: Quotation Item,Quotation Item,Angebotsposition
 DocType: Account,Account Name,Kontenname
@@ -2282,7 +2282,7 @@
 DocType: Operation,Default Workstation,Standard-Arbeitsplatz
 DocType: Notification Control,Expense Claim Approved Message,Benachrichtigung über genehmigte Aufwandsabrechnung
 DocType: Payment Entry,Deductions or Loss,Abzüge oder Verlust
-apps/erpnext/erpnext/accounts/doctype/journal_entry/journal_entry.py +240,{0} {1} is closed,{0} {1} ist geschlossen
+apps/erpnext/erpnext/accounts/doctype/journal_entry/journal_entry.py +240,{0} {1} is closed,{0} {1} ist abgeschlossen
 DocType: Email Digest,How frequently?,Wie häufig?
 DocType: Purchase Receipt,Get Current Stock,Aktuellen Lagerbestand aufrufen
 apps/erpnext/erpnext/config/manufacturing.py +46,Tree of Bill of Materials,Stücklistenstruktur
@@ -2326,7 +2326,7 @@
 
 #### Description of Columns
 
-1. Calculation Type: 
+1. Calculation Type:
     - This can be on **Net Total** (that is the sum of basic amount).
     - **On Previous Row Total / Amount** (for cumulative taxes or charges). If you select this option, the tax will be applied as a percentage of the previous row (in the tax table) amount or total.
     - **Actual** (as mentioned).
@@ -2338,15 +2338,15 @@
 7. Total: Cumulative total to this point.
 8. Enter Row: If based on ""Previous Row Total"" you can select the row number which will be taken as a base for this calculation (default is the previous row).
 9. Consider Tax or Charge for: In this section you can specify if the tax / charge is only for valuation (not a part of total) or only for total (does not add value to the item) or for both.
-10. Add or Deduct: Whether you want to add or deduct the tax.","Standard-Steuer-Vorlage, die für alle Kauftransaktionen angewandt werden kann. Diese Vorlage kann eine Liste der Steuern und auch anderer Kosten wie ""Versand"", ""Versicherung"", ""Handhabung"" usw. enthalten. 
+10. Add or Deduct: Whether you want to add or deduct the tax.","Standard-Steuer-Vorlage, die für alle Kauftransaktionen angewandt werden kann. Diese Vorlage kann eine Liste der Steuern und auch anderer Kosten wie ""Versand"", ""Versicherung"", ""Handhabung"" usw. enthalten.
 
- #### Hinweis 
+ #### Hinweis
 
 Der Steuersatz, den sie hier definieren, wird der Standardsteuersatz für alle Artikel. Wenn es Artikel mit davon abweichenden Steuersätzen gibt, müssen diese in der Tabelle ""Artikelsteuer"" im Artikelstamm hinzugefügt werden.
 
- #### Beschreibung der Spalten 
+ #### Beschreibung der Spalten
 
-1. Berechnungsart: 
+1. Berechnungsart:
 - Dies kann sein ""Auf Nettosumme"" (das ist die Summe der Grundbeträge).
 - ""Auf vorherige Zeilensumme/-Betrag"" (für kumulative Steuern oder Abgaben). Wenn diese Option ausgewählt wird, wird die Steuer als Prozentsatz der vorherigen Zeilesumme/des vorherigen Zeilenbetrags (in der Steuertabelle) angewendet.
 - ""Unmittelbar"" (wie bereits erwähnt).
@@ -2557,7 +2557,7 @@
 1. Ways of addressing disputes, indemnity, liability, etc.
 1. Address and Contact of your Company.","Allgemeine Geschäftsbedingungen, die bei Ver- und Einkäufen verwendet werden können.
 
- Beispiele: 
+ Beispiele:
 
 1. Gültigkeit des Angebots.
 2. Zahlungsbedingungen (Vorkasse, auf Rechnung, Teilweise Vorkasse usw.)
@@ -2566,7 +2566,7 @@
 5. Garantie, falls vorhanden.
 6. Rückgabebedingungen.
 7. Lieferbedingungen, falls zutreffend.
-8. Beschwerdemanagement, Schadensersatz, Haftung usw. 
+8. Beschwerdemanagement, Schadensersatz, Haftung usw.
 9. Adresse und Kontaktdaten des Unternehmens."
 DocType: Attendance,Leave Type,Urlaubstyp
 apps/erpnext/erpnext/controllers/stock_controller.py +222,Expense / Difference account ({0}) must be a 'Profit or Loss' account,"Aufwands-/Differenz-Konto ({0}) muss ein ""Gewinn oder Verlust""-Konto sein"
@@ -2583,6 +2583,7 @@
 DocType: Payment Reconciliation Invoice,Outstanding Amount,Ausstehender Betrag
 apps/erpnext/erpnext/templates/generators/bom.html +71,Time(in mins),Zeit (in Min)
 DocType: Project Task,Working,In Bearbeitung
+DocType: Project Task,Closed,Abgeschlossen
 DocType: Stock Ledger Entry,Stock Queue (FIFO),Lagerverfahren (FIFO)
 apps/erpnext/erpnext/accounts/doctype/pos_profile/pos_profile.py +39,{0} does not belong to Company {1},{0} gehört nicht zu Firma {1}
 apps/erpnext/erpnext/accounts/report/asset_depreciations_and_balances/asset_depreciations_and_balances.py +119,Cost as on,"Kosten, da auf"
@@ -2805,7 +2806,7 @@
 DocType: Quality Inspection,Outgoing,Ausgang
 DocType: Material Request,Requested For,Angefordert für
 DocType: Quotation Item,Against Doctype,Zu DocType
-apps/erpnext/erpnext/controllers/buying_controller.py +380,{0} {1} is cancelled or closed,{0} {1} wurde abgebrochen oder geschlossen
+apps/erpnext/erpnext/controllers/buying_controller.py +380,{0} {1} is cancelled or closed,{0} {1} wurde abgebrochen oder abgeschlossen
 DocType: Delivery Note,Track this Delivery Note against any Project,Diesen Lieferschein in jedem Projekt nachverfolgen
 apps/erpnext/erpnext/accounts/report/cash_flow/cash_flow.py +30,Net Cash from Investing,Nettocashflow aus Investitionen
 ,Is Primary Address,Ist Hauptadresse
@@ -2838,7 +2839,7 @@
 DocType: Sales Invoice Item,Available Qty at Warehouse,Verfügbarer Lagerbestand
 apps/erpnext/erpnext/accounts/report/delivered_items_to_be_billed/delivered_items_to_be_billed.py +20,Billed Amount,Rechnungsbetrag
 DocType: Asset,Double Declining Balance,Doppelte degressive
-apps/erpnext/erpnext/selling/doctype/sales_order/sales_order.py +166,Closed order cannot be cancelled. Unclose to cancel.,Geschlossen Auftrag nicht abgebrochen werden kann. Unclose abzubrechen.
+apps/erpnext/erpnext/selling/doctype/sales_order/sales_order.py +166,Closed order cannot be cancelled. Unclose to cancel.,Abgeschlossen Auftrag kann nicht abgebrochen werden. Abschließen rückgängig machen um abzubrechen.
 DocType: Student Guardian,Father,Vater
 apps/erpnext/erpnext/controllers/accounts_controller.py +568,'Update Stock' cannot be checked for fixed asset sale,'Update Bestand' kann nicht für einen festen Asset-Verkauf überprüft werden
 DocType: Bank Reconciliation,Bank Reconciliation,Kontenabgleich
@@ -3724,7 +3725,7 @@
 DocType: Production Order Operation,Production Order Operation,Arbeitsgang im Fertigungsauftrag
 DocType: Pricing Rule,Disable,Deaktivieren
 apps/erpnext/erpnext/hr/doctype/expense_claim/expense_claim.py +153,Mode of payment is required to make a payment,"Modus der Zahlung ist erforderlich, um eine Zahlung zu leisten"
-DocType: Project Task,Pending Review,Wartet auf Überprüfung
+DocType: Project Task,Pending Review,Warte auf Überprüfung
 apps/erpnext/erpnext/accounts/doctype/asset/depreciation.py +106,"Asset {0} cannot be scrapped, as it is already {1}","Asset-{0} kann nicht verschrottet werden, als es ohnehin schon ist {1}"
 DocType: Task,Total Expense Claim (via Expense Claim),Gesamtbetrag der Aufwandsabrechnung (über Aufwandsabrechnung)
 apps/erpnext/erpnext/accounts/report/sales_register/sales_register.py +70,Customer Id,Kunden-ID
@@ -3800,7 +3801,7 @@
 apps/erpnext/erpnext/accounts/report/bank_reconciliation_statement/bank_reconciliation_statement.py +34,Bank Statement balance as per General Ledger,Kontoauszug Bilanz nach Hauptbuch
 DocType: Job Applicant,Applicant Name,Bewerbername
 DocType: Authorization Rule,Customer / Item Name,Kunde / Artikelname
-DocType: Product Bundle,"Aggregate group of **Items** into another **Item**. This is useful if you are bundling a certain **Items** into a package and you maintain stock of the packed **Items** and not the aggregate **Item**. 
+DocType: Product Bundle,"Aggregate group of **Items** into another **Item**. This is useful if you are bundling a certain **Items** into a package and you maintain stock of the packed **Items** and not the aggregate **Item**.
 
 The package **Item** will have ""Is Stock Item"" as ""No"" and ""Is Sales Item"" as ""Yes"".
 
@@ -4151,7 +4152,7 @@
 apps/erpnext/erpnext/accounts/doctype/fiscal_year/fiscal_year.py +82,Year start date or end date is overlapping with {0}. To avoid please set company,Jahresbeginn oder Enddatum überlappt mit {0}. Um dies zu verhindern setzen Sie eine Firma.
 apps/erpnext/erpnext/maintenance/doctype/maintenance_schedule/maintenance_schedule.py +157,Start date should be less than end date for Item {0},Startdatum sollte für den Artikel {0} vor dem Enddatum liegen
 DocType: Item,"Example: ABCD.#####
-If series is set and Serial No is not mentioned in transactions, then automatic serial number will be created based on this series. If you always want to explicitly mention Serial Nos for this item. leave this blank.","Beispiel: ABCD.##### 
+If series is set and Serial No is not mentioned in transactions, then automatic serial number will be created based on this series. If you always want to explicitly mention Serial Nos for this item. leave this blank.","Beispiel: ABCD.#####
  Wenn ""Serie"" eingestellt ist und ""Seriennummer"" in den Transaktionen nicht aufgeführt ist, dann wird eine Seriennummer automatisch auf der Grundlage dieser Serie erstellt. Wenn immer explizit Seriennummern für diesen Artikel aufgeführt werden sollen, muss das Feld leer gelassen werden."
 DocType: Upload Attendance,Upload Attendance,Anwesenheit hochladen
 apps/erpnext/erpnext/stock/doctype/stock_entry/stock_entry.js +300,BOM and Manufacturing Quantity are required,Stückliste und Fertigungsmenge werden benötigt