diff --git a/erpnext/config/hr.py b/erpnext/config/hr.py index 4353733a311..608e1bb5fa8 100644 --- a/erpnext/config/hr.py +++ b/erpnext/config/hr.py @@ -47,6 +47,11 @@ def get_data(): "name": "Job Opening", "description": _("Opening for a Job."), }, + { + "type": "doctype", + "name": "Offer Letter", + "description": _("Offer candidate a Job."), + }, ] }, { diff --git a/erpnext/hr/doctype/job_applicant/job_applicant.js b/erpnext/hr/doctype/job_applicant/job_applicant.js index ee0acc5fd3e..1ca750ad15f 100644 --- a/erpnext/hr/doctype/job_applicant/job_applicant.js +++ b/erpnext/hr/doctype/job_applicant/job_applicant.js @@ -5,7 +5,25 @@ // for communication cur_frm.email_field = "email_id"; -cur_frm.cscript = { - refresh: function(doc) { - }, -} + +frappe.ui.form.on("Job Applicant", { + refresh: function(frm) { + if (!frm.doc.__islocal) { + if (frm.doc.__onload && frm.doc.__onload.offer_letter) { + frm.add_custom_button(__("View Offer Letter"), function() { + frappe.set_route("Form", "Offer Letter", frm.doc.__onload.offer_letter); + }); + } else { + frm.add_custom_button(__("Make Offer Letter"), function() { + frappe.route_options = { + "job_applicant": frm.doc.name, + "applicant_name": frm.doc.applicant_name, + "designation": frm.doc.job_opening, + }; + new_doc("Offer Letter"); + }); + } + } + + } +}); \ No newline at end of file diff --git a/erpnext/hr/doctype/job_applicant/job_applicant.json b/erpnext/hr/doctype/job_applicant/job_applicant.json index fbedc1f0b4e..f35cacda073 100644 --- a/erpnext/hr/doctype/job_applicant/job_applicant.json +++ b/erpnext/hr/doctype/job_applicant/job_applicant.json @@ -1,5 +1,5 @@ { - "autoname": "", + "autoname": "JA-.######", "creation": "2013-01-29 19:25:37", "description": "Applicant for a Job", "docstatus": 0, @@ -85,5 +85,7 @@ "share": 1, "write": 1 } - ] + ], + "search_fields": "applicant_name", + "title_field": "applicant_name" } \ No newline at end of file diff --git a/erpnext/hr/doctype/job_applicant/job_applicant.py b/erpnext/hr/doctype/job_applicant/job_applicant.py index 1bdd8fc51ee..90b0ec90a2f 100644 --- a/erpnext/hr/doctype/job_applicant/job_applicant.py +++ b/erpnext/hr/doctype/job_applicant/job_applicant.py @@ -10,6 +10,11 @@ from frappe import _ from frappe.utils import comma_and class JobApplicant(Document): + def onload(self): + offer_letter = frappe.get_all("Offer Letter", filters={"job_applicant": self.name}) + if offer_letter: + self.__onload.offer_letter = offer_letter[0].name + def autoname(self): keys = filter(None, (self.applicant_name, self.email_id)) if not keys: diff --git a/erpnext/hr/doctype/offer_letter/__init__.py b/erpnext/hr/doctype/offer_letter/__init__.py new file mode 100644 index 00000000000..e69de29bb2d diff --git a/erpnext/hr/doctype/offer_letter/offer_letter.js b/erpnext/hr/doctype/offer_letter/offer_letter.js new file mode 100644 index 00000000000..62cfc83bc45 --- /dev/null +++ b/erpnext/hr/doctype/offer_letter/offer_letter.js @@ -0,0 +1,10 @@ +// Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors +// License: GNU General Public License v3. See license.txt + +frappe.ui.form.on("Offer Letter", { + select_terms: function(frm) { + frappe.model.get_value("Terms and Conditions", frm.doc.select_terms, "terms", function(value) { + frm.set_value("terms", value.terms); + }); + } +}); diff --git a/erpnext/hr/doctype/offer_letter/offer_letter.json b/erpnext/hr/doctype/offer_letter/offer_letter.json new file mode 100644 index 00000000000..ec93bb004b4 --- /dev/null +++ b/erpnext/hr/doctype/offer_letter/offer_letter.json @@ -0,0 +1,193 @@ +{ + "allow_copy": 0, + "allow_import": 1, + "allow_rename": 0, + "autoname": "Offer-.#####", + "creation": "2015-03-04 14:20:17.662207", + "custom": 0, + "default_print_format": "Offer Letter", + "docstatus": 0, + "doctype": "DocType", + "document_type": "Transaction", + "fields": [ + { + "allow_on_submit": 0, + "fieldname": "job_applicant", + "fieldtype": "Link", + "hidden": 0, + "ignore_user_permissions": 0, + "in_filter": 0, + "in_list_view": 0, + "label": "Job Applicant", + "no_copy": 0, + "options": "Job Applicant", + "permlevel": 0, + "precision": "", + "print_hide": 1, + "read_only": 0, + "report_hide": 0, + "reqd": 1, + "search_index": 0, + "set_only_once": 0 + }, + { + "fieldname": "applicant_name", + "fieldtype": "Data", + "label": "Applicant Name", + "options": "job_applicant.applicant_name", + "permlevel": 0, + "precision": "", + "read_only": 1, + "reqd": 1 + }, + { + "fieldname": "column_break_3", + "fieldtype": "Column Break", + "permlevel": 0, + "precision": "" + }, + { + "allow_on_submit": 1, + "fieldname": "status", + "fieldtype": "Select", + "label": "Status", + "options": "Awaiting Response\nAccepted\nRejected ", + "permlevel": 0, + "precision": "", + "print_hide": 1 + }, + { + "default": "", + "fieldname": "offer_date", + "fieldtype": "Date", + "label": "Offer Date", + "permlevel": 0, + "precision": "" + }, + { + "allow_on_submit": 0, + "fieldname": "designation", + "fieldtype": "Link", + "hidden": 0, + "ignore_user_permissions": 0, + "in_filter": 0, + "in_list_view": 0, + "label": "Designation", + "no_copy": 0, + "options": "Designation", + "permlevel": 0, + "precision": "", + "print_hide": 0, + "read_only": 0, + "report_hide": 0, + "reqd": 1, + "search_index": 0, + "set_only_once": 0 + }, + { + "fieldname": "company", + "fieldtype": "Link", + "label": "Company", + "options": "Company", + "permlevel": 0, + "precision": "", + "print_hide": 1, + "reqd": 1 + }, + { + "fieldname": "section_break_4", + "fieldtype": "Section Break", + "permlevel": 0, + "precision": "" + }, + { + "fieldname": "offer_terms", + "fieldtype": "Table", + "label": "Offer Letter Terms", + "options": "Offer Letter Term", + "permlevel": 0, + "precision": "" + }, + { + "fieldname": "section_break_14", + "fieldtype": "Section Break", + "permlevel": 0, + "precision": "" + }, + { + "allow_on_submit": 0, + "fieldname": "select_terms", + "fieldtype": "Link", + "hidden": 0, + "ignore_user_permissions": 0, + "in_filter": 0, + "in_list_view": 0, + "label": "Select Terms and Conditions", + "no_copy": 0, + "options": "Terms and Conditions", + "permlevel": 0, + "precision": "", + "print_hide": 1, + "read_only": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0 + }, + { + "fieldname": "terms", + "fieldtype": "Text Editor", + "label": "Terms and Conditions", + "options": "", + "permlevel": 0, + "precision": "" + }, + { + "fieldname": "amended_from", + "fieldtype": "Link", + "label": "Amended From", + "no_copy": 1, + "options": "Offer Letter", + "permlevel": 0, + "print_hide": 1, + "read_only": 1 + } + ], + "hide_heading": 0, + "hide_toolbar": 0, + "in_create": 0, + "in_dialog": 0, + "is_submittable": 1, + "issingle": 0, + "istable": 0, + "modified": "2015-04-01 05:51:39.841591", + "modified_by": "Administrator", + "module": "HR", + "name": "Offer Letter", + "name_case": "", + "owner": "Administrator", + "permissions": [ + { + "amend": 1, + "cancel": 1, + "create": 1, + "delete": 1, + "email": 1, + "export": 1, + "import": 1, + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "HR User", + "share": 1, + "submit": 1, + "write": 1 + } + ], + "read_only": 0, + "read_only_onload": 0, + "sort_field": "modified", + "sort_order": "DESC", + "title_field": "applicant_name" +} \ No newline at end of file diff --git a/erpnext/hr/doctype/offer_letter/offer_letter.py b/erpnext/hr/doctype/offer_letter/offer_letter.py new file mode 100644 index 00000000000..b3eb865f142 --- /dev/null +++ b/erpnext/hr/doctype/offer_letter/offer_letter.py @@ -0,0 +1,9 @@ +# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors and contributors +# For license information, please see license.txt + +from __future__ import unicode_literals +import frappe +from frappe.model.document import Document + +class OfferLetter(Document): + pass diff --git a/erpnext/hr/doctype/offer_letter/test_offer_letter.py b/erpnext/hr/doctype/offer_letter/test_offer_letter.py new file mode 100644 index 00000000000..69d2df691e8 --- /dev/null +++ b/erpnext/hr/doctype/offer_letter/test_offer_letter.py @@ -0,0 +1,11 @@ +# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors and Contributors +# See license.txt +from __future__ import unicode_literals + +import frappe +import unittest + +# test_records = frappe.get_test_records('Offer Letter') + +class TestOfferLetter(unittest.TestCase): + pass diff --git a/erpnext/hr/doctype/offer_letter_term/__init__.py b/erpnext/hr/doctype/offer_letter_term/__init__.py new file mode 100644 index 00000000000..e69de29bb2d diff --git a/erpnext/hr/doctype/offer_letter_term/offer_letter_term.json b/erpnext/hr/doctype/offer_letter_term/offer_letter_term.json new file mode 100644 index 00000000000..4ab1911d56a --- /dev/null +++ b/erpnext/hr/doctype/offer_letter_term/offer_letter_term.json @@ -0,0 +1,75 @@ +{ + "allow_copy": 0, + "allow_import": 0, + "allow_rename": 0, + "creation": "2015-03-05 12:53:45.342292", + "custom": 0, + "docstatus": 0, + "doctype": "DocType", + "document_type": "", + "fields": [ + { + "allow_on_submit": 0, + "fieldname": "offer_term", + "fieldtype": "Link", + "hidden": 0, + "ignore_user_permissions": 0, + "in_filter": 0, + "in_list_view": 1, + "label": "Offer Term", + "no_copy": 0, + "options": "Offer Term", + "permlevel": 0, + "precision": "", + "print_hide": 0, + "read_only": 0, + "report_hide": 0, + "reqd": 1, + "search_index": 0, + "set_only_once": 0 + }, + { + "fieldname": "column_break_2", + "fieldtype": "Column Break", + "permlevel": 0, + "precision": "" + }, + { + "allow_on_submit": 0, + "fieldname": "value", + "fieldtype": "Small Text", + "hidden": 0, + "ignore_user_permissions": 0, + "in_filter": 0, + "in_list_view": 1, + "label": "Value / Description", + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "read_only": 0, + "report_hide": 0, + "reqd": 1, + "search_index": 0, + "set_only_once": 0 + } + ], + "hide_heading": 0, + "hide_toolbar": 0, + "in_create": 0, + "in_dialog": 0, + "is_submittable": 0, + "issingle": 0, + "istable": 1, + "modified": "2015-04-01 03:46:49.530328", + "modified_by": "Administrator", + "module": "HR", + "name": "Offer Letter Term", + "name_case": "", + "owner": "Administrator", + "permissions": [], + "read_only": 0, + "read_only_onload": 0, + "sort_field": "modified", + "sort_order": "DESC" +} \ No newline at end of file diff --git a/erpnext/hr/doctype/offer_letter_term/offer_letter_term.py b/erpnext/hr/doctype/offer_letter_term/offer_letter_term.py new file mode 100644 index 00000000000..3396a9d2689 --- /dev/null +++ b/erpnext/hr/doctype/offer_letter_term/offer_letter_term.py @@ -0,0 +1,9 @@ +# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors and contributors +# For license information, please see license.txt + +from __future__ import unicode_literals +import frappe +from frappe.model.document import Document + +class OfferLetterTerm(Document): + pass diff --git a/erpnext/hr/doctype/offer_term/__init__.py b/erpnext/hr/doctype/offer_term/__init__.py new file mode 100644 index 00000000000..e69de29bb2d diff --git a/erpnext/hr/doctype/offer_term/offer_term.json b/erpnext/hr/doctype/offer_term/offer_term.json new file mode 100644 index 00000000000..61e45a4b4d3 --- /dev/null +++ b/erpnext/hr/doctype/offer_term/offer_term.json @@ -0,0 +1,70 @@ +{ + "allow_copy": 0, + "allow_import": 1, + "allow_rename": 0, + "autoname": "field:offer_term", + "creation": "2015-03-05 13:00:30.900471", + "custom": 0, + "docstatus": 0, + "doctype": "DocType", + "document_type": "Master", + "fields": [ + { + "allow_on_submit": 0, + "fieldname": "offer_term", + "fieldtype": "Data", + "hidden": 0, + "ignore_user_permissions": 0, + "in_filter": 0, + "in_list_view": 0, + "label": "Offer Term", + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "read_only": 0, + "report_hide": 0, + "reqd": 1, + "search_index": 0, + "set_only_once": 0 + } + ], + "hide_heading": 0, + "hide_toolbar": 0, + "in_create": 0, + "in_dialog": 0, + "is_submittable": 0, + "issingle": 0, + "istable": 0, + "modified": "2015-03-10 18:19:23.032194", + "modified_by": "Administrator", + "module": "HR", + "name": "Offer Term", + "name_case": "", + "owner": "Administrator", + "permissions": [ + { + "amend": 0, + "apply_user_permissions": 0, + "cancel": 0, + "create": 1, + "delete": 1, + "email": 0, + "export": 0, + "import": 0, + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "HR User", + "set_user_permissions": 0, + "share": 0, + "submit": 0, + "write": 1 + } + ], + "read_only": 0, + "read_only_onload": 0, + "sort_field": "modified", + "sort_order": "DESC" +} \ No newline at end of file diff --git a/erpnext/hr/doctype/offer_term/offer_term.py b/erpnext/hr/doctype/offer_term/offer_term.py new file mode 100644 index 00000000000..6a632011060 --- /dev/null +++ b/erpnext/hr/doctype/offer_term/offer_term.py @@ -0,0 +1,9 @@ +# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors and contributors +# For license information, please see license.txt + +from __future__ import unicode_literals +import frappe +from frappe.model.document import Document + +class OfferTerm(Document): + pass diff --git a/erpnext/hr/doctype/offer_term/test_offer_term.py b/erpnext/hr/doctype/offer_term/test_offer_term.py new file mode 100644 index 00000000000..d0dd14d1e62 --- /dev/null +++ b/erpnext/hr/doctype/offer_term/test_offer_term.py @@ -0,0 +1,11 @@ +# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors and Contributors +# See license.txt +from __future__ import unicode_literals + +import frappe +import unittest + +# test_records = frappe.get_test_records('Offer Term') + +class TestOfferTerm(unittest.TestCase): + pass diff --git a/erpnext/hr/print_format/__init__.py b/erpnext/hr/print_format/__init__.py new file mode 100644 index 00000000000..e69de29bb2d diff --git a/erpnext/hr/print_format/offer_letter/__init__.py b/erpnext/hr/print_format/offer_letter/__init__.py new file mode 100644 index 00000000000..e69de29bb2d diff --git a/erpnext/hr/print_format/offer_letter/offer_letter.json b/erpnext/hr/print_format/offer_letter/offer_letter.json new file mode 100644 index 00000000000..d480159b661 --- /dev/null +++ b/erpnext/hr/print_format/offer_letter/offer_letter.json @@ -0,0 +1,16 @@ +{ + "creation": "2015-03-05 14:34:26.751210", + "custom_format": 1, + "disabled": 0, + "doc_type": "Offer Letter", + "docstatus": 0, + "doctype": "Print Format", + "html": "{% if letter_head and not no_letterhead -%}\n
\n\n\nDate: {{ doc.offer_date }}\n
\n\nDear {{ doc.applicant_name }}, \n\n
\n\nWe are pleased to appoint you in the services of {{ doc.company }} on the terms and conditions detailed in this letter.\n\n
\n\nYour designation shall be {{ doc.designation }}.\n\n
\n\n\n\n{%- if doc.offer_terms -%}\n {%- for row in doc.offer_terms -%}\n {{ row.offer_term }}: {{ row.value }}\n\n
\n {%- endfor -%}\n{%- endif -%}\n\n
\n\n\n\n\nPlease read the detailed terms as below. If you have any queries, feel free to get in touch with us.\nWe look forward to your long and fruitful career association with our organisation.\nIf you decide to join us, 'Welcome to {{ doc.company }} !'\n\n
\n\n
\n\nYours truly,\n\n
\n\nAuthorized Signatory\n\n
\n\n{{ doc.company }}\n\n\n\n