Rename Offer Letter to Job Offer (#12934)

This commit is contained in:
Shreya Shah
2018-02-16 10:49:34 +05:30
committed by Rushabh Mehta
parent 5a5f73e46a
commit 394b7a2fa3
26 changed files with 126 additions and 80 deletions

View File

@@ -46,7 +46,7 @@ def get_data():
}, },
{ {
"type": "doctype", "type": "doctype",
"name": "Offer Letter", "name": "Job Offer",
"description": _("Offer candidate a Job."), "description": _("Offer candidate a Job."),
}, },
] ]

View File

Before

Width:  |  Height:  |  Size: 141 KiB

After

Width:  |  Height:  |  Size: 141 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 54 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 97 KiB

View File

@@ -6,7 +6,7 @@ salary-and-payroll
appraisal appraisal
job-applicant job-applicant
job-opening job-opening
offer-letter job-offer
tools tools
human-resources-reports human-resources-reports
setup setup

View File

@@ -7,12 +7,12 @@ Ein ERPNext können Sie einen Datensatz zu den Angebotsschreiben, die Sie an Bew
> Personalwesen > Dokumente > Angebotsschreiben > Neu > Personalwesen > Dokumente > Angebotsschreiben > Neu
<img class="screenshot" alt="Angebotsschreiben" src="{{docs_base_url}}/assets/img/human-resources/offer-letter.png"> <img class="screenshot" alt="Angebotsschreiben" src="{{docs_base_url}}/assets/img/human-resources/job-offer.png">
> Anmerkung: Angebotsschreiben kann nur zu einem [Bewerber](/docs/user/manual/de/human-resources/job-applicant.html) erstellt werden. > Anmerkung: Angebotsschreiben kann nur zu einem [Bewerber](/docs/user/manual/de/human-resources/job-applicant.html) erstellt werden.
Es gibt ein vordefiniertes Druckformat zum Angebotsschreiben. Es gibt ein vordefiniertes Druckformat zum Angebotsschreiben.
<img class="screenshot" alt="Angebotsschreiben" src="{{docs_base_url}}/assets/img/human-resources/offer-letter-print.png"> <img class="screenshot" alt="Angebotsschreiben" src="{{docs_base_url}}/assets/img/human-resources/job-offer-print.png">
{next} {next}

View File

@@ -8,7 +8,7 @@ payroll-entry
appraisal appraisal
job-applicant job-applicant
job-opening job-opening
offer-letter job-offer
training training
tools tools
human-resources-reports human-resources-reports

View File

@@ -0,0 +1,18 @@
# Job Offer
Job Offer is given to candidate after Interview & selection which states the offered salary package,
designation, grade, department working, no of days entitled for leave.
In ERPNext you can make a record of the Job Offers that you can given to candidates. To create a new Job Offer go to
> Human Resource > Job Offer > New
<img class="screenshot" alt="Job Offer" src="{{docs_base_url}}/assets/img/human-resources/job-offer.png">
> Note: A Job Offer can be made only against a [Job Applicant](/docs/user/manual/en/human-resources/job-applicant.html)
There is a pre-designed print format to print you Job Offer.
<img class="screenshot" alt="Job Offer" src="{{docs_base_url}}/assets/img/human-resources/job-offer-print.png">
{next}

View File

@@ -1,18 +0,0 @@
# Offer Letter
Offer Letter is given to candidate after Interview & selection which states the offered salary package,
designation, grade, department working, no of days entitled for leave.
In ERPNext you can make a record of the Offer Letters that you can given to candidates. To create a new offer Letter go to
> Human Resource > Offer Letter > New
<img class="screenshot" alt="Offer Letter" src="{{docs_base_url}}/assets/img/human-resources/offer-letter.png">
> Note: An offer letter can be made only against a [Job Applicant](/docs/user/manual/en/human-resources/job-applicant.html)
There is a pre-designed print format to print you offer letter.
<img class="screenshot" alt="Offer Letter" src="{{docs_base_url}}/assets/img/human-resources/offer-letter-print.png">
{next}

View File

@@ -9,18 +9,18 @@ cur_frm.email_field = "email_id";
frappe.ui.form.on("Job Applicant", { frappe.ui.form.on("Job Applicant", {
refresh: function(frm) { refresh: function(frm) {
if (!frm.doc.__islocal) { if (!frm.doc.__islocal) {
if (frm.doc.__onload && frm.doc.__onload.offer_letter) { if (frm.doc.__onload && frm.doc.__onload.job_offer) {
frm.add_custom_button(__("Offer Letter"), function() { frm.add_custom_button(__("Job Offer"), function() {
frappe.set_route("Form", "Offer Letter", frm.doc.__onload.offer_letter); frappe.set_route("Form", "Job Offer", frm.doc.__onload.job_offer);
}, __("View")); }, __("View"));
} else { } else {
frm.add_custom_button(__("Offer Letter"), function() { frm.add_custom_button(__("Job Offer"), function() {
frappe.route_options = { frappe.route_options = {
"job_applicant": frm.doc.name, "job_applicant": frm.doc.name,
"applicant_name": frm.doc.applicant_name, "applicant_name": frm.doc.applicant_name,
"designation": frm.doc.job_opening, "designation": frm.doc.job_opening,
}; };
frappe.new_doc("Offer Letter"); frappe.new_doc("Job Offer");
}); });
} }
} }

View File

@@ -15,9 +15,9 @@ class DuplicationError(frappe.ValidationError): pass
class JobApplicant(Document): class JobApplicant(Document):
def onload(self): def onload(self):
offer_letter = frappe.get_all("Offer Letter", filters={"job_applicant": self.name}) job_offer = frappe.get_all("Job Offer", filters={"job_applicant": self.name})
if offer_letter: if job_offer:
self.get("__onload").offer_letter = offer_letter[0].name self.get("__onload").job_offer = job_offer[0].name
def autoname(self): def autoname(self):
keys = filter(None, (self.applicant_name, self.email_id, self.job_title)) keys = filter(None, (self.applicant_name, self.email_id, self.job_title))

View File

@@ -1,9 +1,9 @@
// Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors // Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
// License: GNU General Public License v3. See license.txt // License: GNU General Public License v3. See license.txt
frappe.provide("erpnext.offer_letter"); frappe.provide("erpnext.job_offer");
frappe.ui.form.on("Offer Letter", { frappe.ui.form.on("Job Offer", {
select_terms: function (frm) { select_terms: function (frm) {
erpnext.utils.get_terms(frm.doc.select_terms, frm.doc, function (r) { erpnext.utils.get_terms(frm.doc.select_terms, frm.doc, function (r) {
if (!r.exc) { if (!r.exc) {
@@ -16,7 +16,7 @@ frappe.ui.form.on("Offer Letter", {
if ((!frm.doc.__islocal) && (frm.doc.status == 'Accepted') && (frm.doc.docstatus === 1)) { if ((!frm.doc.__islocal) && (frm.doc.status == 'Accepted') && (frm.doc.docstatus === 1)) {
frm.add_custom_button(__('Make Employee'), frm.add_custom_button(__('Make Employee'),
function () { function () {
erpnext.offer_letter.make_employee(frm) erpnext.job_offer.make_employee(frm);
} }
); );
} }
@@ -24,9 +24,9 @@ frappe.ui.form.on("Offer Letter", {
}); });
erpnext.offer_letter.make_employee = function (frm) { erpnext.job_offer.make_employee = function (frm) {
frappe.model.open_mapped_doc({ frappe.model.open_mapped_doc({
method: "erpnext.hr.doctype.offer_letter.offer_letter.make_employee", method: "erpnext.hr.doctype.job_offer.job_offer.make_employee",
frm: frm frm: frm
}); });
}; };

View File

@@ -1,18 +1,20 @@
{ {
"allow_copy": 0, "allow_copy": 0,
"allow_guest_to_view": 0,
"allow_import": 1, "allow_import": 1,
"allow_rename": 0, "allow_rename": 0,
"autoname": "Offer-.#####", "autoname": "Offer-.#####",
"beta": 0, "beta": 0,
"creation": "2015-03-04 14:20:17.662207", "creation": "2015-03-04 14:20:17.662207",
"custom": 0, "custom": 0,
"default_print_format": "Offer Letter", "default_print_format": "",
"docstatus": 0, "docstatus": 0,
"doctype": "DocType", "doctype": "DocType",
"document_type": "Document", "document_type": "Document",
"editable_grid": 0, "editable_grid": 0,
"fields": [ "fields": [
{ {
"allow_bulk_edit": 0,
"allow_on_submit": 0, "allow_on_submit": 0,
"bold": 0, "bold": 0,
"collapsible": 0, "collapsible": 0,
@@ -24,7 +26,7 @@
"ignore_xss_filter": 0, "ignore_xss_filter": 0,
"in_filter": 0, "in_filter": 0,
"in_global_search": 0, "in_global_search": 0,
"in_list_view": 0, "in_list_view": 1,
"in_standard_filter": 0, "in_standard_filter": 0,
"label": "Job Applicant", "label": "Job Applicant",
"length": 0, "length": 0,
@@ -43,6 +45,7 @@
"unique": 0 "unique": 0
}, },
{ {
"allow_bulk_edit": 0,
"allow_on_submit": 0, "allow_on_submit": 0,
"bold": 0, "bold": 0,
"collapsible": 0, "collapsible": 0,
@@ -54,7 +57,7 @@
"ignore_xss_filter": 0, "ignore_xss_filter": 0,
"in_filter": 0, "in_filter": 0,
"in_global_search": 1, "in_global_search": 1,
"in_list_view": 0, "in_list_view": 1,
"in_standard_filter": 0, "in_standard_filter": 0,
"label": "Applicant Name", "label": "Applicant Name",
"length": 0, "length": 0,
@@ -73,6 +76,7 @@
"unique": 0 "unique": 0
}, },
{ {
"allow_bulk_edit": 0,
"allow_on_submit": 0, "allow_on_submit": 0,
"bold": 0, "bold": 0,
"collapsible": 0, "collapsible": 0,
@@ -101,6 +105,7 @@
"unique": 0 "unique": 0
}, },
{ {
"allow_bulk_edit": 0,
"allow_on_submit": 1, "allow_on_submit": 1,
"bold": 0, "bold": 0,
"collapsible": 0, "collapsible": 0,
@@ -131,6 +136,7 @@
"unique": 0 "unique": 0
}, },
{ {
"allow_bulk_edit": 0,
"allow_on_submit": 0, "allow_on_submit": 0,
"bold": 0, "bold": 0,
"collapsible": 0, "collapsible": 0,
@@ -161,6 +167,7 @@
"unique": 0 "unique": 0
}, },
{ {
"allow_bulk_edit": 0,
"allow_on_submit": 0, "allow_on_submit": 0,
"bold": 0, "bold": 0,
"collapsible": 0, "collapsible": 0,
@@ -172,7 +179,7 @@
"ignore_xss_filter": 0, "ignore_xss_filter": 0,
"in_filter": 0, "in_filter": 0,
"in_global_search": 0, "in_global_search": 0,
"in_list_view": 0, "in_list_view": 1,
"in_standard_filter": 0, "in_standard_filter": 0,
"label": "Designation", "label": "Designation",
"length": 0, "length": 0,
@@ -191,6 +198,7 @@
"unique": 0 "unique": 0
}, },
{ {
"allow_bulk_edit": 0,
"allow_on_submit": 0, "allow_on_submit": 0,
"bold": 0, "bold": 0,
"collapsible": 0, "collapsible": 0,
@@ -202,7 +210,7 @@
"ignore_xss_filter": 0, "ignore_xss_filter": 0,
"in_filter": 0, "in_filter": 0,
"in_global_search": 0, "in_global_search": 0,
"in_list_view": 0, "in_list_view": 1,
"in_standard_filter": 0, "in_standard_filter": 0,
"label": "Company", "label": "Company",
"length": 0, "length": 0,
@@ -221,6 +229,7 @@
"unique": 0 "unique": 0
}, },
{ {
"allow_bulk_edit": 0,
"allow_on_submit": 0, "allow_on_submit": 0,
"bold": 0, "bold": 0,
"collapsible": 0, "collapsible": 0,
@@ -249,6 +258,7 @@
"unique": 0 "unique": 0
}, },
{ {
"allow_bulk_edit": 0,
"allow_on_submit": 0, "allow_on_submit": 0,
"bold": 0, "bold": 0,
"collapsible": 0, "collapsible": 0,
@@ -262,10 +272,10 @@
"in_global_search": 0, "in_global_search": 0,
"in_list_view": 0, "in_list_view": 0,
"in_standard_filter": 0, "in_standard_filter": 0,
"label": "Offer Letter Terms", "label": "Job Offer Terms",
"length": 0, "length": 0,
"no_copy": 0, "no_copy": 0,
"options": "Offer Letter Term", "options": "Job Offer Term",
"permlevel": 0, "permlevel": 0,
"precision": "", "precision": "",
"print_hide": 0, "print_hide": 0,
@@ -279,6 +289,7 @@
"unique": 0 "unique": 0
}, },
{ {
"allow_bulk_edit": 0,
"allow_on_submit": 0, "allow_on_submit": 0,
"bold": 0, "bold": 0,
"collapsible": 0, "collapsible": 0,
@@ -307,6 +318,7 @@
"unique": 0 "unique": 0
}, },
{ {
"allow_bulk_edit": 0,
"allow_on_submit": 0, "allow_on_submit": 0,
"bold": 0, "bold": 0,
"collapsible": 0, "collapsible": 0,
@@ -337,6 +349,7 @@
"unique": 0 "unique": 0
}, },
{ {
"allow_bulk_edit": 0,
"allow_on_submit": 0, "allow_on_submit": 0,
"bold": 0, "bold": 0,
"collapsible": 0, "collapsible": 0,
@@ -367,6 +380,7 @@
"unique": 0 "unique": 0
}, },
{ {
"allow_bulk_edit": 0,
"allow_on_submit": 0, "allow_on_submit": 0,
"bold": 0, "bold": 0,
"collapsible": 0, "collapsible": 0,
@@ -383,7 +397,7 @@
"label": "Amended From", "label": "Amended From",
"length": 0, "length": 0,
"no_copy": 1, "no_copy": 1,
"options": "Offer Letter", "options": "Job Offer",
"permlevel": 0, "permlevel": 0,
"print_hide": 1, "print_hide": 1,
"print_hide_if_no_value": 0, "print_hide_if_no_value": 0,
@@ -396,20 +410,20 @@
"unique": 0 "unique": 0
} }
], ],
"has_web_view": 0,
"hide_heading": 0, "hide_heading": 0,
"hide_toolbar": 0, "hide_toolbar": 0,
"idx": 0, "idx": 0,
"image_view": 0, "image_view": 0,
"in_create": 0, "in_create": 0,
"in_dialog": 0,
"is_submittable": 1, "is_submittable": 1,
"issingle": 0, "issingle": 0,
"istable": 0, "istable": 0,
"max_attachments": 0, "max_attachments": 0,
"modified": "2017-02-17 16:52:59.334325", "modified": "2018-02-15 03:32:54.903013",
"modified_by": "Administrator", "modified_by": "Administrator",
"module": "HR", "module": "HR",
"name": "Offer Letter", "name": "Job Offer",
"name_case": "", "name_case": "",
"owner": "Administrator", "owner": "Administrator",
"permissions": [ "permissions": [

View File

@@ -6,15 +6,15 @@ import frappe
from frappe.model.document import Document from frappe.model.document import Document
from frappe.model.mapper import get_mapped_doc from frappe.model.mapper import get_mapped_doc
class OfferLetter(Document): class JobOffer(Document):
pass pass
@frappe.whitelist() @frappe.whitelist()
def make_employee(source_name, target_doc=None): def make_employee(source_name, target_doc=None):
def set_missing_values(source, target): def set_missing_values(source, target):
target.personal_email = frappe.db.get_value("Job Applicant", source.job_applicant, "email_id") target.personal_email = frappe.db.get_value("Job Applicant", source.job_applicant, "email_id")
doc = get_mapped_doc("Offer Letter", source_name, { doc = get_mapped_doc("Job Offer", source_name, {
"Offer Letter": { "Job Offer": {
"doctype": "Employee", "doctype": "Employee",
"field_map": { "field_map": {
"applicant_name": "employee_name", "applicant_name": "employee_name",

View File

@@ -1,12 +1,12 @@
QUnit.module('hr'); QUnit.module('hr');
QUnit.test("Test: Offer Letter [HR]", function (assert) { QUnit.test("Test: Job Offer [HR]", function (assert) {
assert.expect(3); assert.expect(3);
let done = assert.async(); let done = assert.async();
frappe.run_serially([ frappe.run_serially([
// Offer Letter Creation // Job Offer Creation
() => { () => {
frappe.tests.make('Offer Letter', [ frappe.tests.make('Job Offer', [
{ job_applicant: 'Utkarsh Goswami - goswamiutkarsh0@gmail.com - software-developer'}, { job_applicant: 'Utkarsh Goswami - goswamiutkarsh0@gmail.com - software-developer'},
{ applicant_name: 'Utkarsh Goswami'}, { applicant_name: 'Utkarsh Goswami'},
{ status: 'Accepted'}, { status: 'Accepted'},
@@ -39,11 +39,11 @@ QUnit.test("Test: Offer Letter [HR]", function (assert) {
assert.ok(cur_frm.get_field('designation').value=='Software Developer', assert.ok(cur_frm.get_field('designation').value=='Software Developer',
'Designation of applicant is correct'); 'Designation of applicant is correct');
}, },
() => frappe.set_route('List','Offer Letter','List'), () => frappe.set_route('List','Job Offer','List'),
() => frappe.timeout(2), () => frappe.timeout(2),
// Checking the submission of and offer letter // Checking the submission of and Job Offer
() => { () => {
assert.ok(cur_list.data[0].docstatus==1,'Offer Letter Submitted successfully'); assert.ok(cur_list.data[0].docstatus==1,'Job Offer Submitted successfully');
}, },
() => frappe.timeout(2), () => frappe.timeout(2),
() => done() () => done()

View File

@@ -5,7 +5,7 @@ from __future__ import unicode_literals
import frappe import frappe
import unittest import unittest
# test_records = frappe.get_test_records('Offer Letter') # test_records = frappe.get_test_records('Job Offer')
class TestOfferLetter(unittest.TestCase): class TestJobOffer(unittest.TestCase):
pass pass

View File

@@ -1,5 +1,6 @@
{ {
"allow_copy": 0, "allow_copy": 0,
"allow_guest_to_view": 0,
"allow_import": 0, "allow_import": 0,
"allow_rename": 0, "allow_rename": 0,
"beta": 0, "beta": 0,
@@ -11,16 +12,20 @@
"editable_grid": 1, "editable_grid": 1,
"fields": [ "fields": [
{ {
"allow_bulk_edit": 0,
"allow_on_submit": 0, "allow_on_submit": 0,
"bold": 0, "bold": 0,
"collapsible": 0, "collapsible": 0,
"columns": 0,
"fieldname": "offer_term", "fieldname": "offer_term",
"fieldtype": "Link", "fieldtype": "Link",
"hidden": 0, "hidden": 0,
"ignore_user_permissions": 0, "ignore_user_permissions": 0,
"ignore_xss_filter": 0, "ignore_xss_filter": 0,
"in_filter": 0, "in_filter": 0,
"in_global_search": 0,
"in_list_view": 1, "in_list_view": 1,
"in_standard_filter": 0,
"label": "Offer Term", "label": "Offer Term",
"length": 0, "length": 0,
"no_copy": 0, "no_copy": 0,
@@ -30,6 +35,7 @@
"print_hide": 0, "print_hide": 0,
"print_hide_if_no_value": 0, "print_hide_if_no_value": 0,
"read_only": 0, "read_only": 0,
"remember_last_selected_value": 0,
"report_hide": 0, "report_hide": 0,
"reqd": 1, "reqd": 1,
"search_index": 0, "search_index": 0,
@@ -37,16 +43,20 @@
"unique": 0 "unique": 0
}, },
{ {
"allow_bulk_edit": 0,
"allow_on_submit": 0, "allow_on_submit": 0,
"bold": 0, "bold": 0,
"collapsible": 0, "collapsible": 0,
"columns": 0,
"fieldname": "column_break_2", "fieldname": "column_break_2",
"fieldtype": "Column Break", "fieldtype": "Column Break",
"hidden": 0, "hidden": 0,
"ignore_user_permissions": 0, "ignore_user_permissions": 0,
"ignore_xss_filter": 0, "ignore_xss_filter": 0,
"in_filter": 0, "in_filter": 0,
"in_global_search": 0,
"in_list_view": 0, "in_list_view": 0,
"in_standard_filter": 0,
"length": 0, "length": 0,
"no_copy": 0, "no_copy": 0,
"permlevel": 0, "permlevel": 0,
@@ -54,6 +64,7 @@
"print_hide": 0, "print_hide": 0,
"print_hide_if_no_value": 0, "print_hide_if_no_value": 0,
"read_only": 0, "read_only": 0,
"remember_last_selected_value": 0,
"report_hide": 0, "report_hide": 0,
"reqd": 0, "reqd": 0,
"search_index": 0, "search_index": 0,
@@ -61,16 +72,20 @@
"unique": 0 "unique": 0
}, },
{ {
"allow_bulk_edit": 0,
"allow_on_submit": 0, "allow_on_submit": 0,
"bold": 0, "bold": 0,
"collapsible": 0, "collapsible": 0,
"columns": 0,
"fieldname": "value", "fieldname": "value",
"fieldtype": "Small Text", "fieldtype": "Small Text",
"hidden": 0, "hidden": 0,
"ignore_user_permissions": 0, "ignore_user_permissions": 0,
"ignore_xss_filter": 0, "ignore_xss_filter": 0,
"in_filter": 0, "in_filter": 0,
"in_global_search": 0,
"in_list_view": 1, "in_list_view": 1,
"in_standard_filter": 0,
"label": "Value / Description", "label": "Value / Description",
"length": 0, "length": 0,
"no_copy": 0, "no_copy": 0,
@@ -79,6 +94,7 @@
"print_hide": 0, "print_hide": 0,
"print_hide_if_no_value": 0, "print_hide_if_no_value": 0,
"read_only": 0, "read_only": 0,
"remember_last_selected_value": 0,
"report_hide": 0, "report_hide": 0,
"reqd": 1, "reqd": 1,
"search_index": 0, "search_index": 0,
@@ -86,27 +102,29 @@
"unique": 0 "unique": 0
} }
], ],
"has_web_view": 0,
"hide_heading": 0, "hide_heading": 0,
"hide_toolbar": 0, "hide_toolbar": 0,
"idx": 0, "idx": 0,
"image_view": 0, "image_view": 0,
"in_create": 0, "in_create": 0,
"in_dialog": 0,
"is_submittable": 0, "is_submittable": 0,
"issingle": 0, "issingle": 0,
"istable": 1, "istable": 1,
"max_attachments": 0, "max_attachments": 0,
"modified": "2016-07-11 03:28:02.786855", "modified": "2018-02-15 03:30:56.020668",
"modified_by": "Administrator", "modified_by": "Administrator",
"module": "HR", "module": "HR",
"name": "Offer Letter Term", "name": "Job Offer Term",
"name_case": "", "name_case": "",
"owner": "Administrator", "owner": "Administrator",
"permissions": [], "permissions": [],
"quick_entry": 0, "quick_entry": 0,
"read_only": 0, "read_only": 0,
"read_only_onload": 0, "read_only_onload": 0,
"show_name_in_global_search": 0,
"sort_field": "modified", "sort_field": "modified",
"sort_order": "DESC", "sort_order": "DESC",
"track_changes": 0,
"track_seen": 0 "track_seen": 0
} }

View File

@@ -5,5 +5,5 @@ from __future__ import unicode_literals
import frappe import frappe
from frappe.model.document import Document from frappe.model.document import Document
class OfferLetterTerm(Document): class JobOfferTerm(Document):
pass pass

View File

@@ -0,0 +1,21 @@
{
"align_labels_right": 0,
"creation": "2015-03-05 14:34:26.751210",
"custom_format": 1,
"disabled": 0,
"doc_type": "Job Offer",
"docstatus": 0,
"doctype": "Print Format",
"html": "{% set terms_exist = doc.terms and (doc.terms|striptags).strip() or \"\" %}\n\n{% if letter_head and not no_letterhead -%}\n <div class=\"letter-head\">{{ letter_head }}</div>\n <hr>\n{%- endif %}\n\n<div {% if terms_exist -%} class=\"page-break\" {%- endif %}>\n<p>\n\n<!-- job offer content starts here, <br> is used to create new lines -->\nDate: {{ doc.offer_date }}\n<br><br>\n\nDear {{ doc.applicant_name }}, \n\n<br><br>\n\nWe are pleased to appoint you in the services of {{ doc.company }} on the terms and conditions detailed in this letter.\n\n<br><br>\n\nYour designation shall be <b>{{ doc.designation }}</b>.\n\n<br><br>\n\n<!-- job offer terms and description from the table -->\n\n{%- if doc.offer_terms -%}\n {%- for row in doc.offer_terms -%}\n <b>{{ row.offer_term }}:</b> {{ row.value }}\n\n <br>\n {%- endfor -%}\n{%- endif -%}\n\n<br>\n\n<!-- job offer content continues -->\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<br><br>\n\n<p class=\"strong\">\n\nYours truly,\n\n<br><br><br><br>\n\nAuthorized Signatory\n\n<br>\n\n{{ doc.company }}\n\n<!-- job offer content ends here -->\n\n</p>\n</div>\n\n<!-- job offer terms and conditions -->\n{% if terms_exist %}\n<div> {{ doc.terms }} </div>\n{% endif %}",
"idx": 0,
"line_breaks": 0,
"modified": "2018-02-15 03:03:55.844085",
"modified_by": "Administrator",
"module": "HR",
"name": "Job Offer",
"owner": "Administrator",
"print_format_builder": 0,
"print_format_type": "Server",
"show_section_headings": 0,
"standard": "Yes"
}

View File

@@ -1,17 +0,0 @@
{
"creation": "2015-03-05 14:34:26.751210",
"custom_format": 1,
"disabled": 0,
"doc_type": "Offer Letter",
"docstatus": 0,
"doctype": "Print Format",
"html": "{% set terms_exist = doc.terms and (doc.terms|striptags).strip() or \"\" %}\n\n{% if letter_head and not no_letterhead -%}\n <div class=\"letter-head\">{{ letter_head }}</div>\n <hr>\n{%- endif %}\n\n<div {% if terms_exist -%} class=\"page-break\" {%- endif %}>\n<p>\n\n<!-- offer letter content starts here, <br> is used to create new lines -->\nDate: {{ doc.offer_date }}\n<br><br>\n\nDear {{ doc.applicant_name }}, \n\n<br><br>\n\nWe are pleased to appoint you in the services of {{ doc.company }} on the terms and conditions detailed in this letter.\n\n<br><br>\n\nYour designation shall be <b>{{ doc.designation }}</b>.\n\n<br><br>\n\n<!-- offer letter terms and description from the table -->\n\n{%- if doc.offer_terms -%}\n {%- for row in doc.offer_terms -%}\n <b>{{ row.offer_term }}:</b> {{ row.value }}\n\n <br>\n {%- endfor -%}\n{%- endif -%}\n\n<br>\n\n<!-- offer letter content continues -->\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<br><br>\n\n<p class=\"strong\">\n\nYours truly,\n\n<br><br><br><br>\n\nAuthorized Signatory\n\n<br>\n\n{{ doc.company }}\n\n<!-- offer letter content ends here -->\n\n</p>\n</div>\n\n<!-- offer letter terms and conditions -->\n{% if terms_exist %}\n<div> {{ doc.terms }} </div>\n{% endif %}",
"idx": 0,
"modified": "2015-12-04 11:46:28.897657",
"modified_by": "Administrator",
"name": "Offer Letter",
"owner": "Administrator",
"print_format_builder": 0,
"print_format_type": "Server",
"standard": "Yes"
}

View File

@@ -496,3 +496,4 @@ erpnext.patches.v10_0.added_extra_gst_custom_field_in_gstr2 #2018-02-13
erpnext.patches.v10_0.item_barcode_childtable_migrate erpnext.patches.v10_0.item_barcode_childtable_migrate
erpnext.patches.v10_0.set_b2c_limit erpnext.patches.v10_0.set_b2c_limit
erpnext.patches.v10_0.update_translatable_fields erpnext.patches.v10_0.update_translatable_fields
erpnext.patches.v10_0.rename_offer_letter_to_job_offer

View File

@@ -0,0 +1,9 @@
import frappe
def execute():
if frappe.db.table_exists("Offer Letter") and not frappe.db.table_exists("Job Offer"):
frappe.rename_doc("DocType", "Offer Letter", "Job Offer", force=True)
frappe.rename_doc("DocType", "Offer Letter Term", "Job Offer Term", force=True)
frappe.reload_doc("hr", "doctype", "job_offer")
frappe.reload_doc("hr", "doctype", "job_offer_term")
frappe.delete_doc("Print Format", "Offer Letter")

View File

@@ -56,7 +56,7 @@ erpnext/hr/doctype/salary_structure/test_salary_structure.js
erpnext/hr/doctype/salary_slip/test_salary_slip.js erpnext/hr/doctype/salary_slip/test_salary_slip.js
erpnext/hr/doctype/job_opening/test_job_opening.js erpnext/hr/doctype/job_opening/test_job_opening.js
erpnext/hr/doctype/job_applicant/test_job_applicant.js erpnext/hr/doctype/job_applicant/test_job_applicant.js
erpnext/hr/doctype/offer_letter/test_offer_letter.js erpnext/hr/doctype/job_offer/test_job_offer.js
erpnext/hr/doctype/appraisal_template/test_appraisal_template.js erpnext/hr/doctype/appraisal_template/test_appraisal_template.js
erpnext/hr/doctype/appraisal/test_appraisal.js erpnext/hr/doctype/appraisal/test_appraisal.js
erpnext/hr/doctype/expense_claim_type/test_expense_claim_type.js erpnext/hr/doctype/expense_claim_type/test_expense_claim_type.js