Added webform for Job Opening
diff --git a/erpnext/hooks.py b/erpnext/hooks.py
index d77c0f7..2de8774 100644
--- a/erpnext/hooks.py
+++ b/erpnext/hooks.py
@@ -68,6 +68,13 @@
 			"doctype": "Delivery Note",
 			"parents": [{"title": _("Shipments"), "name": "shipments"}]
 		}
+	},
+	{"from_route": "/jobs", "to_route": "Job Opening"},
+	{"from_route": "/jobs/<path:name>", "to_route": "job_opening",
+		"defaults": {
+			"doctype": "Job Opening",
+			"parents": [{"title": _("Job Opening"), "name": "jobs"}]
+		}
 	}
 ]
 
diff --git a/erpnext/hr/doctype/job_applicant/job_applicant.json b/erpnext/hr/doctype/job_applicant/job_applicant.json
index 423ab7e..fc579cb 100644
--- a/erpnext/hr/doctype/job_applicant/job_applicant.json
+++ b/erpnext/hr/doctype/job_applicant/job_applicant.json
@@ -108,7 +108,7 @@
    "allow_on_submit": 0, 
    "bold": 0, 
    "collapsible": 0, 
-   "fieldname": "job_opening", 
+   "fieldname": "job_title", 
    "fieldtype": "Link", 
    "hidden": 0, 
    "ignore_user_permissions": 0, 
@@ -184,7 +184,7 @@
  "issingle": 0, 
  "istable": 0, 
  "max_attachments": 0, 
- "modified": "2016-02-12 00:38:31.773297", 
+ "modified": "2016-02-19 16:43:24.705867", 
  "modified_by": "Administrator", 
  "module": "HR", 
  "name": "Job Applicant", 
@@ -204,11 +204,33 @@
    "print": 1, 
    "read": 1, 
    "report": 1, 
+   "restrict": 0, 
+   "restricted": 0, 
    "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
   }
  ], 
  "read_only": 0, 
diff --git a/erpnext/hr/doctype/job_applicant/job_applicant.py b/erpnext/hr/doctype/job_applicant/job_applicant.py
index b0482cd..f1c0362 100644
--- a/erpnext/hr/doctype/job_applicant/job_applicant.py
+++ b/erpnext/hr/doctype/job_applicant/job_applicant.py
@@ -7,10 +7,12 @@
 from frappe.model.document import Document
 import frappe
 from frappe import _
-from frappe.utils import comma_and
+from frappe.utils import comma_and, validate_email_add
 
 sender_field = "email_id"
 
+class DuplicationError(frappe.ValidationError): pass
+
 class JobApplicant(Document):
 	def onload(self):
 		offer_letter = frappe.get_all("Offer Letter", filters={"job_applicant": self.name})
@@ -25,6 +27,14 @@
 
 	def validate(self):
 		self.check_email_id_is_unique()
+		validate_email_add(self.email_id, True)
+		if frappe.db.sql("""select applicant_name from `tabJob Applicant` where email_id= %s and job_title= %s""",
+				(self.email_id, self.job_title)):
+					frappe.throw(_("Application already exist for {0} against Job Opening - {1}")
+						.format(self.applicant_name, self.job_title), DuplicationError)
+		
+		if not self.get("__islocal") and not self.upload_cv:
+			frappe.throw(_("CV Required"))
 
 	def check_email_id_is_unique(self):
 		if self.email_id:
@@ -33,3 +43,5 @@
 
 			if names:
 				frappe.throw(_("Email id must be unique, already exists for {0}").format(comma_and(names)), frappe.DuplicateEntryError)
+
+		
\ No newline at end of file
diff --git a/erpnext/hr/doctype/job_opening/job_opening.js b/erpnext/hr/doctype/job_opening/job_opening.js
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/erpnext/hr/doctype/job_opening/job_opening.js
diff --git a/erpnext/hr/doctype/job_opening/job_opening.json b/erpnext/hr/doctype/job_opening/job_opening.json
index f4380ad..d05fe48 100644
--- a/erpnext/hr/doctype/job_opening/job_opening.json
+++ b/erpnext/hr/doctype/job_opening/job_opening.json
@@ -25,6 +25,7 @@
    "no_copy": 0, 
    "permlevel": 0, 
    "print_hide": 0, 
+   "print_hide_if_no_value": 0, 
    "read_only": 0, 
    "report_hide": 0, 
    "reqd": 1, 
@@ -48,6 +49,7 @@
    "options": "Open\nClosed", 
    "permlevel": 0, 
    "print_hide": 0, 
+   "print_hide_if_no_value": 0, 
    "read_only": 0, 
    "report_hide": 0, 
    "reqd": 0, 
@@ -71,6 +73,7 @@
    "no_copy": 0, 
    "permlevel": 0, 
    "print_hide": 0, 
+   "print_hide_if_no_value": 0, 
    "read_only": 0, 
    "report_hide": 0, 
    "reqd": 0, 
@@ -89,7 +92,7 @@
  "issingle": 0, 
  "istable": 0, 
  "max_attachments": 0, 
- "modified": "2015-11-16 06:29:48.769149", 
+ "modified": "2016-02-17 17:29:04.401527", 
  "modified_by": "Administrator", 
  "module": "HR", 
  "name": "Job Opening", 
@@ -114,8 +117,29 @@
    "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
   }
  ], 
  "read_only": 0, 
- "read_only_onload": 0
+ "read_only_onload": 0, 
+ "sort_order": "ASC"
 }
\ No newline at end of file
diff --git a/erpnext/templates/generators/item_group.html b/erpnext/templates/generators/item_group.html
index eb1278c..0bb3c25 100644
--- a/erpnext/templates/generators/item_group.html
+++ b/erpnext/templates/generators/item_group.html
@@ -25,7 +25,7 @@
 				{{ item }}
 			{% endfor %}
 		</div>
-			{% if (items|length)==100 %}
+			{% if (items|length)==3 %}
 				<div class="text-muted info">Showing top 100 items.</div>
 			{% endif %}
 		{% else %}
diff --git a/erpnext/templates/pages/job_opening.html b/erpnext/templates/pages/job_opening.html
new file mode 100644
index 0000000..6a7ceb1
--- /dev/null
+++ b/erpnext/templates/pages/job_opening.html
@@ -0,0 +1,20 @@
+
+<head>
+<title>{{doc.job_title}}</title>
+</head>
+{% extends "templates/web.html" %}
+{% block header %}
+<h1>{{ doc.job_title }}</h1>
+{% endblock %}
+
+{% block breadcrumbs %}
+	{% include "templates/includes/breadcrumbs.html" %}
+{% endblock %}
+
+{% block page_content %}
+
+<p>{{ doc.description }}</p>
+
+<input class="btn btn-large btn-primary" type="button" onclick="location.href='/job_application?job_title={{ doc.job_title }}';" value="Apply Now" />
+
+{% endblock %}
\ No newline at end of file
diff --git a/erpnext/templates/pages/job_opening.py b/erpnext/templates/pages/job_opening.py
new file mode 100644
index 0000000..1bcfce2
--- /dev/null
+++ b/erpnext/templates/pages/job_opening.py
@@ -0,0 +1,16 @@
+# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
+# License: GNU General Public License v3. See license.txt
+
+from __future__ import unicode_literals
+import frappe
+
+from frappe import _
+
+def get_context(context):
+	context.no_cache = 1
+	context.doc = frappe.get_doc(frappe.form_dict.doctype, frappe.form_dict.name)
+	context.parents = frappe.form_dict.parents
+
+	if not context.doc.has_website_permission("read"):
+		frappe.throw(_("Not Permitted"), frappe.PermissionError)
+