From 1b204c8e4e3bf197db98a208b5b7161bfe789b93 Mon Sep 17 00:00:00 2001 From: Kanchan Chauhan Date: Thu, 9 Feb 2017 14:13:35 +0530 Subject: [PATCH] Accrual Payroll System --- .../ae_uae_chart_template_standard.json | 4 +- .../in_standard_chart_of_accounts.json | 3 +- .../verified/sg_default_coa.json | 3 +- .../verified/sg_fnb_coa.json | 3 +- .../verified/standard_chart_of_accounts.py | 3 +- .../hr/doctype/employee_loan/employee_loan.js | 10 + .../doctype/employee_loan/employee_loan.json | 60 ++-- .../process_payroll/process_payroll.js | 65 ++-- .../process_payroll/process_payroll.json | 140 ++++++-- .../process_payroll/process_payroll.py | 108 ++++-- .../process_payroll/test_process_payroll.py | 2 +- .../salary_component/salary_component.js | 5 +- .../salary_component/salary_component.py | 2 +- erpnext/hr/doctype/salary_slip/salary_slip.js | 16 +- .../hr/doctype/salary_slip/salary_slip.json | 307 +++++++++++------- erpnext/hr/doctype/salary_slip/salary_slip.py | 13 +- .../doctype/salary_slip/test_salary_slip.py | 10 +- .../salary_structure/test_salary_structure.py | 6 +- .../salary_slip_standard.json | 2 +- .../report/salary_register/salary_register.py | 5 +- erpnext/patches.txt | 3 +- ...ar_leave_encashment_as_salary_component.py | 32 ++ erpnext/setup/doctype/company/company.js | 12 +- erpnext/setup/doctype/company/company.json | 94 ++---- erpnext/setup/doctype/company/company.py | 2 +- .../company/fixtures/india/__init__.py | 4 +- .../setup/setup_wizard/install_fixtures.py | 3 + 27 files changed, 562 insertions(+), 355 deletions(-) create mode 100644 erpnext/patches/v7_2/arrear_leave_encashment_as_salary_component.py diff --git a/erpnext/accounts/doctype/account/chart_of_accounts/verified/ae_uae_chart_template_standard.json b/erpnext/accounts/doctype/account/chart_of_accounts/verified/ae_uae_chart_template_standard.json index 68ab3fcb0c6..9a9342305c6 100644 --- a/erpnext/accounts/doctype/account/chart_of_accounts/verified/ae_uae_chart_template_standard.json +++ b/erpnext/accounts/doctype/account/chart_of_accounts/verified/ae_uae_chart_template_standard.json @@ -341,9 +341,7 @@ "Post Dated Cheques Paid": { "account_type": "Payable" }, - "Staff Payable": { - "account_type": "Payable" - }, + "Staff Payable": {}, "Suppliers Price Protection": { "account_type": "Payable" }, diff --git a/erpnext/accounts/doctype/account/chart_of_accounts/verified/in_standard_chart_of_accounts.json b/erpnext/accounts/doctype/account/chart_of_accounts/verified/in_standard_chart_of_accounts.json index c7a80455044..b3c789162e2 100644 --- a/erpnext/accounts/doctype/account/chart_of_accounts/verified/in_standard_chart_of_accounts.json +++ b/erpnext/accounts/doctype/account/chart_of_accounts/verified/in_standard_chart_of_accounts.json @@ -136,7 +136,8 @@ "Accounts Payable": { "Creditors": { "account_type": "Payable" - } + }, + "Payroll Payable": {} }, "Stock Liabilities": { "Stock Received But Not Billed": { diff --git a/erpnext/accounts/doctype/account/chart_of_accounts/verified/sg_default_coa.json b/erpnext/accounts/doctype/account/chart_of_accounts/verified/sg_default_coa.json index b2669148c8a..58a89b53a54 100644 --- a/erpnext/accounts/doctype/account/chart_of_accounts/verified/sg_default_coa.json +++ b/erpnext/accounts/doctype/account/chart_of_accounts/verified/sg_default_coa.json @@ -265,7 +265,8 @@ "Accounts Payable": { "Creditors": { "account_type": "Payable" - } + }, + "Payroll Payable": {} }, "Duties and Taxes": { "Deferred Tax Liabilities-Current": {}, diff --git a/erpnext/accounts/doctype/account/chart_of_accounts/verified/sg_fnb_coa.json b/erpnext/accounts/doctype/account/chart_of_accounts/verified/sg_fnb_coa.json index 961912deee7..15c2468492e 100644 --- a/erpnext/accounts/doctype/account/chart_of_accounts/verified/sg_fnb_coa.json +++ b/erpnext/accounts/doctype/account/chart_of_accounts/verified/sg_fnb_coa.json @@ -142,7 +142,8 @@ "Accounts Payable": { "Creditors":{ "account_type": "Payable" - } + }, + "Payroll Payable": {} }, "Duties and Taxes": { "account_type": "Tax", 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 5824704fb34..c6495c18a69 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 @@ -137,7 +137,8 @@ def get(): _("Accounts Payable"): { _("Creditors"): { "account_type": "Payable" - } + }, + _("Payroll Payable"): {}, }, _("Stock Liabilities"): { _("Stock Received But Not Billed"): { diff --git a/erpnext/hr/doctype/employee_loan/employee_loan.js b/erpnext/hr/doctype/employee_loan/employee_loan.js index a03dbda4b15..cb9216f7419 100644 --- a/erpnext/hr/doctype/employee_loan/employee_loan.js +++ b/erpnext/hr/doctype/employee_loan/employee_loan.js @@ -12,6 +12,16 @@ frappe.ui.form.on('Employee Loan', { } }; }); + + frm.set_query("interest_income_account", function() { + return { + "filters": { + "company": frm.doc.company, + "root_type": "Income", + "is_group": 0 + } + }; + }); $.each(["payment_account", "employee_loan_account"], function(i, field) { frm.set_query(field, function() { diff --git a/erpnext/hr/doctype/employee_loan/employee_loan.json b/erpnext/hr/doctype/employee_loan/employee_loan.json index 560515fde99..b3e5c5a39de 100644 --- a/erpnext/hr/doctype/employee_loan/employee_loan.json +++ b/erpnext/hr/doctype/employee_loan/employee_loan.json @@ -22,7 +22,6 @@ "hidden": 0, "ignore_user_permissions": 0, "ignore_xss_filter": 0, - "in_filter": 0, "in_list_view": 0, "in_standard_filter": 0, "label": "Employee", @@ -51,7 +50,6 @@ "hidden": 0, "ignore_user_permissions": 0, "ignore_xss_filter": 0, - "in_filter": 0, "in_list_view": 0, "in_standard_filter": 0, "label": "Employee Name", @@ -80,7 +78,6 @@ "hidden": 0, "ignore_user_permissions": 0, "ignore_xss_filter": 0, - "in_filter": 0, "in_list_view": 0, "in_standard_filter": 0, "label": "Employee Loan Application", @@ -109,7 +106,6 @@ "hidden": 0, "ignore_user_permissions": 0, "ignore_xss_filter": 0, - "in_filter": 0, "in_list_view": 1, "in_standard_filter": 0, "label": "Loan Type", @@ -138,7 +134,6 @@ "hidden": 0, "ignore_user_permissions": 0, "ignore_xss_filter": 0, - "in_filter": 0, "in_list_view": 0, "in_standard_filter": 0, "length": 0, @@ -166,7 +161,6 @@ "hidden": 0, "ignore_user_permissions": 0, "ignore_xss_filter": 0, - "in_filter": 0, "in_list_view": 1, "in_standard_filter": 0, "label": "Posting Date", @@ -194,7 +188,6 @@ "hidden": 0, "ignore_user_permissions": 0, "ignore_xss_filter": 0, - "in_filter": 1, "in_list_view": 0, "in_standard_filter": 0, "label": "Company", @@ -223,7 +216,6 @@ "hidden": 0, "ignore_user_permissions": 0, "ignore_xss_filter": 0, - "in_filter": 0, "in_list_view": 0, "in_standard_filter": 0, "label": "Status", @@ -252,7 +244,6 @@ "hidden": 0, "ignore_user_permissions": 0, "ignore_xss_filter": 0, - "in_filter": 0, "in_list_view": 0, "in_standard_filter": 0, "label": "Repay from Salary", @@ -280,7 +271,6 @@ "hidden": 0, "ignore_user_permissions": 0, "ignore_xss_filter": 0, - "in_filter": 0, "in_list_view": 0, "in_standard_filter": 0, "label": "Loan Details", @@ -308,7 +298,6 @@ "hidden": 0, "ignore_user_permissions": 0, "ignore_xss_filter": 0, - "in_filter": 0, "in_list_view": 0, "in_standard_filter": 0, "label": "Loan Amount", @@ -337,7 +326,6 @@ "hidden": 0, "ignore_user_permissions": 0, "ignore_xss_filter": 0, - "in_filter": 0, "in_list_view": 0, "in_standard_filter": 0, "label": "Rate of Interest (%) / Year", @@ -366,7 +354,6 @@ "hidden": 0, "ignore_user_permissions": 0, "ignore_xss_filter": 0, - "in_filter": 0, "in_list_view": 0, "in_standard_filter": 0, "label": "Disbursement Date", @@ -394,7 +381,6 @@ "hidden": 0, "ignore_user_permissions": 0, "ignore_xss_filter": 0, - "in_filter": 0, "in_list_view": 0, "in_standard_filter": 0, "length": 0, @@ -422,7 +408,6 @@ "hidden": 0, "ignore_user_permissions": 0, "ignore_xss_filter": 0, - "in_filter": 0, "in_list_view": 0, "in_standard_filter": 0, "label": "Repayment Method", @@ -453,7 +438,6 @@ "hidden": 0, "ignore_user_permissions": 0, "ignore_xss_filter": 0, - "in_filter": 0, "in_list_view": 0, "in_standard_filter": 0, "label": "Repayment Period in Months", @@ -483,7 +467,6 @@ "hidden": 0, "ignore_user_permissions": 0, "ignore_xss_filter": 0, - "in_filter": 0, "in_list_view": 0, "in_standard_filter": 0, "label": "Repayment Amount", @@ -511,7 +494,6 @@ "hidden": 0, "ignore_user_permissions": 0, "ignore_xss_filter": 0, - "in_filter": 0, "in_list_view": 0, "in_standard_filter": 0, "label": "Account Info", @@ -539,7 +521,6 @@ "hidden": 0, "ignore_user_permissions": 0, "ignore_xss_filter": 0, - "in_filter": 0, "in_list_view": 0, "in_standard_filter": 0, "label": "Mode of Payment", @@ -568,7 +549,6 @@ "hidden": 0, "ignore_user_permissions": 0, "ignore_xss_filter": 0, - "in_filter": 0, "in_list_view": 0, "in_standard_filter": 0, "label": "Payment Account", @@ -597,7 +577,6 @@ "hidden": 0, "ignore_user_permissions": 0, "ignore_xss_filter": 0, - "in_filter": 0, "in_list_view": 0, "in_standard_filter": 0, "length": 0, @@ -624,7 +603,6 @@ "hidden": 0, "ignore_user_permissions": 0, "ignore_xss_filter": 0, - "in_filter": 0, "in_list_view": 0, "in_standard_filter": 0, "label": "Employee Loan Account", @@ -643,6 +621,34 @@ "set_only_once": 0, "unique": 0 }, + { + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "interest_income_account", + "fieldtype": "Link", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Interest Income Account", + "length": 0, + "no_copy": 0, + "options": "Account", + "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, @@ -653,7 +659,6 @@ "hidden": 0, "ignore_user_permissions": 0, "ignore_xss_filter": 0, - "in_filter": 0, "in_list_view": 0, "in_standard_filter": 0, "label": "Repayment Schedule", @@ -681,7 +686,6 @@ "hidden": 0, "ignore_user_permissions": 0, "ignore_xss_filter": 0, - "in_filter": 0, "in_list_view": 0, "in_standard_filter": 0, "label": "Repayment Schedule", @@ -710,7 +714,6 @@ "hidden": 0, "ignore_user_permissions": 0, "ignore_xss_filter": 0, - "in_filter": 0, "in_list_view": 0, "in_standard_filter": 0, "label": "Totals", @@ -739,7 +742,6 @@ "hidden": 0, "ignore_user_permissions": 0, "ignore_xss_filter": 0, - "in_filter": 0, "in_list_view": 0, "in_standard_filter": 0, "label": "Total Payment", @@ -767,7 +769,6 @@ "hidden": 0, "ignore_user_permissions": 0, "ignore_xss_filter": 0, - "in_filter": 0, "in_list_view": 0, "in_standard_filter": 0, "length": 0, @@ -795,7 +796,6 @@ "hidden": 0, "ignore_user_permissions": 0, "ignore_xss_filter": 0, - "in_filter": 0, "in_list_view": 0, "in_standard_filter": 0, "label": "Total Interest Payable", @@ -823,7 +823,6 @@ "hidden": 0, "ignore_user_permissions": 0, "ignore_xss_filter": 0, - "in_filter": 0, "in_list_view": 0, "in_standard_filter": 0, "label": "Amended From", @@ -852,7 +851,7 @@ "issingle": 0, "istable": 0, "max_attachments": 0, - "modified": "2017-01-17 07:13:10.704520", + "modified": "2017-02-08 06:18:43.454692", "modified_by": "Administrator", "module": "HR", "name": "Employee Loan", @@ -869,7 +868,6 @@ "export": 1, "if_owner": 0, "import": 0, - "is_custom": 0, "permlevel": 0, "print": 1, "read": 1, diff --git a/erpnext/hr/doctype/process_payroll/process_payroll.js b/erpnext/hr/doctype/process_payroll/process_payroll.js index 128e533ba53..e1bea622234 100644 --- a/erpnext/hr/doctype/process_payroll/process_payroll.js +++ b/erpnext/hr/doctype/process_payroll/process_payroll.js @@ -20,6 +20,21 @@ frappe.ui.form.on("Process Payroll", { "company": frm.doc.company } } + }), + frm.set_query("cost_center", function() { + return { + filters: { + "is_group": 0, + company: frm.doc.company + } + } + }), + frm.set_query("project", function() { + return { + filters: { + company: frm.doc.company + } + } }) }, @@ -63,7 +78,7 @@ frappe.ui.form.on("Process Payroll", { } }) } - } + }, }) cur_frm.cscript.display_activity_log = function(msg) { @@ -108,46 +123,18 @@ cur_frm.cscript.submit_salary_slip = function(doc, cdt, cdn) { }); } -cur_frm.cscript.make_bank_entry = function(doc,cdt,cdn){ +cur_frm.cscript.make_bank_entry = function(doc, cdt, cdn){ if(doc.company && doc.start_date && doc.end_date){ - return cur_frm.cscript.reference_entry(doc,cdt,cdn); + return frappe.call({ + doc: cur_frm.doc, + method: "make_payment_entry", + callback: function(r) { + if (r.message) + var doc = frappe.model.sync(r.message)[0]; + frappe.set_route("Form", doc.doctype, doc.name); + } + }); } else { msgprint(__("Company, From Date and To Date is mandatory")); } -} - -cur_frm.cscript.reference_entry = function(doc,cdt,cdn){ - var dialog = new frappe.ui.Dialog({ - title: __("Bank Transaction Reference"), - fields: [ - { - "label": __("Reference Number"), - "fieldname": "reference_number", - "fieldtype": "Data", - "reqd": 1 - }, - { - "label": __("Reference Date"), - "fieldname": "reference_date", - "fieldtype": "Date", - "reqd": 1, - "default": get_today() - } - ] - }); - dialog.set_primary_action(__("Make"), function() { - args = dialog.get_values(); - if(!args) return; - dialog.hide(); - return frappe.call({ - doc: cur_frm.doc, - method: "make_journal_entry", - args: {"reference_number": args.reference_number, "reference_date":args.reference_date}, - callback: function(r) { - if (r.message) - cur_frm.cscript.display_activity_log(r.message); - } - }); - }); - dialog.show(); } \ No newline at end of file diff --git a/erpnext/hr/doctype/process_payroll/process_payroll.json b/erpnext/hr/doctype/process_payroll/process_payroll.json index 7d84910efe2..2b847b3ea78 100644 --- a/erpnext/hr/doctype/process_payroll/process_payroll.json +++ b/erpnext/hr/doctype/process_payroll/process_payroll.json @@ -20,7 +20,6 @@ "hidden": 0, "ignore_user_permissions": 0, "ignore_xss_filter": 0, - "in_filter": 0, "in_list_view": 0, "in_standard_filter": 0, "label": "Select Employees", @@ -47,7 +46,6 @@ "hidden": 0, "ignore_user_permissions": 0, "ignore_xss_filter": 0, - "in_filter": 0, "in_list_view": 0, "in_standard_filter": 0, "length": 0, @@ -75,7 +73,6 @@ "hidden": 0, "ignore_user_permissions": 0, "ignore_xss_filter": 0, - "in_filter": 0, "in_list_view": 1, "in_standard_filter": 0, "label": "Company", @@ -104,7 +101,6 @@ "hidden": 0, "ignore_user_permissions": 0, "ignore_xss_filter": 0, - "in_filter": 0, "in_list_view": 0, "in_standard_filter": 0, "label": "Posting Date", @@ -134,7 +130,6 @@ "hidden": 0, "ignore_user_permissions": 0, "ignore_xss_filter": 0, - "in_filter": 0, "in_list_view": 0, "in_standard_filter": 0, "label": "Payroll Frequency", @@ -163,7 +158,6 @@ "hidden": 0, "ignore_user_permissions": 0, "ignore_xss_filter": 0, - "in_filter": 0, "in_list_view": 0, "in_standard_filter": 0, "length": 0, @@ -190,7 +184,6 @@ "hidden": 0, "ignore_user_permissions": 0, "ignore_xss_filter": 0, - "in_filter": 0, "in_list_view": 1, "in_standard_filter": 0, "label": "Branch", @@ -218,7 +211,6 @@ "hidden": 0, "ignore_user_permissions": 0, "ignore_xss_filter": 0, - "in_filter": 0, "in_list_view": 0, "in_standard_filter": 0, "label": "Department", @@ -246,7 +238,6 @@ "hidden": 0, "ignore_user_permissions": 0, "ignore_xss_filter": 0, - "in_filter": 0, "in_list_view": 0, "in_standard_filter": 0, "label": "Designation", @@ -274,7 +265,6 @@ "hidden": 0, "ignore_user_permissions": 0, "ignore_xss_filter": 0, - "in_filter": 0, "in_list_view": 0, "in_standard_filter": 0, "length": 0, @@ -301,7 +291,6 @@ "hidden": 0, "ignore_user_permissions": 0, "ignore_xss_filter": 0, - "in_filter": 0, "in_list_view": 0, "in_standard_filter": 0, "label": "Salary Slip Based on Timesheet", @@ -329,7 +318,6 @@ "hidden": 0, "ignore_user_permissions": 0, "ignore_xss_filter": 0, - "in_filter": 0, "in_list_view": 0, "in_standard_filter": 0, "label": "Select Payroll Period", @@ -358,7 +346,6 @@ "hidden": 0, "ignore_user_permissions": 0, "ignore_xss_filter": 0, - "in_filter": 0, "in_list_view": 0, "in_standard_filter": 0, "label": "Start Date", @@ -386,7 +373,6 @@ "hidden": 0, "ignore_user_permissions": 0, "ignore_xss_filter": 0, - "in_filter": 0, "in_list_view": 0, "in_standard_filter": 0, "length": 0, @@ -414,7 +400,6 @@ "hidden": 0, "ignore_user_permissions": 0, "ignore_xss_filter": 0, - "in_filter": 0, "in_list_view": 0, "in_standard_filter": 0, "label": "End Date", @@ -432,6 +417,115 @@ "set_only_once": 0, "unique": 0 }, + { + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "section_break_16", + "fieldtype": "Section Break", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Accounts", + "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": "cost_center", + "fieldtype": "Link", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Cost Center", + "length": 0, + "no_copy": 0, + "options": "Cost Center", + "permlevel": 0, + "precision": "", + "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": "column_break_18", + "fieldtype": "Column Break", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "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": "project", + "fieldtype": "Link", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Project", + "length": 0, + "no_copy": 0, + "options": "Project", + "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, @@ -442,7 +536,6 @@ "hidden": 0, "ignore_user_permissions": 0, "ignore_xss_filter": 0, - "in_filter": 0, "in_list_view": 0, "in_standard_filter": 0, "label": "Process Payroll", @@ -470,7 +563,6 @@ "hidden": 0, "ignore_user_permissions": 0, "ignore_xss_filter": 0, - "in_filter": 0, "in_list_view": 0, "in_standard_filter": 0, "length": 0, @@ -498,7 +590,6 @@ "hidden": 0, "ignore_user_permissions": 0, "ignore_xss_filter": 0, - "in_filter": 0, "in_list_view": 0, "in_standard_filter": 0, "label": "Create Salary Slip", @@ -525,7 +616,6 @@ "hidden": 0, "ignore_user_permissions": 0, "ignore_xss_filter": 0, - "in_filter": 0, "in_list_view": 0, "in_standard_filter": 0, "length": 0, @@ -553,7 +643,6 @@ "hidden": 0, "ignore_user_permissions": 0, "ignore_xss_filter": 0, - "in_filter": 0, "in_list_view": 0, "in_standard_filter": 0, "label": "Submit Salary Slip", @@ -580,10 +669,9 @@ "hidden": 0, "ignore_user_permissions": 0, "ignore_xss_filter": 0, - "in_filter": 0, "in_list_view": 0, "in_standard_filter": 0, - "label": "Account", + "label": "Payment Entry", "length": 0, "no_copy": 0, "permlevel": 0, @@ -609,7 +697,6 @@ "hidden": 0, "ignore_user_permissions": 0, "ignore_xss_filter": 0, - "in_filter": 0, "in_list_view": 0, "in_standard_filter": 0, "label": "Payment Account", @@ -640,7 +727,6 @@ "hidden": 1, "ignore_user_permissions": 0, "ignore_xss_filter": 0, - "in_filter": 0, "in_list_view": 0, "in_standard_filter": 0, "label": "Make Bank Entry", @@ -667,7 +753,6 @@ "hidden": 0, "ignore_user_permissions": 0, "ignore_xss_filter": 0, - "in_filter": 0, "in_list_view": 0, "in_standard_filter": 0, "length": 0, @@ -693,7 +778,6 @@ "hidden": 0, "ignore_user_permissions": 0, "ignore_xss_filter": 0, - "in_filter": 0, "in_list_view": 0, "in_standard_filter": 0, "label": "Activity Log", @@ -722,7 +806,7 @@ "issingle": 1, "istable": 0, "max_attachments": 0, - "modified": "2016-12-14 01:48:22.326326", + "modified": "2017-02-08 02:34:59.130475", "modified_by": "Administrator", "module": "HR", "name": "Process Payroll", @@ -738,7 +822,6 @@ "export": 0, "if_owner": 0, "import": 0, - "is_custom": 0, "permlevel": 0, "print": 0, "read": 1, @@ -755,5 +838,6 @@ "read_only_onload": 0, "sort_field": "modified", "sort_order": "DESC", + "track_changes": 0, "track_seen": 0 } \ No newline at end of file diff --git a/erpnext/hr/doctype/process_payroll/process_payroll.py b/erpnext/hr/doctype/process_payroll/process_payroll.py index 7bfde1ca182..22e9fbb1deb 100644 --- a/erpnext/hr/doctype/process_payroll/process_payroll.py +++ b/erpnext/hr/doctype/process_payroll/process_payroll.py @@ -140,7 +140,7 @@ class ProcessPayroll(Document): Submit all salary slips based on selected criteria """ self.check_permission('write') - + jv_name = "" ss_list = self.get_sal_slip_list(ss_status=0) submitted_ss = [] not_submitted_ss = [] @@ -158,10 +158,12 @@ class ProcessPayroll(Document): submitted_ss.append(ss_dict) except frappe.ValidationError: not_submitted_ss.append(ss_dict) + if submitted_ss: + jv_name = self.make_accural_jv_entry() - return self.create_submit_log(submitted_ss, not_submitted_ss) + return self.create_submit_log(submitted_ss, not_submitted_ss, jv_name) - def create_submit_log(self, submitted_ss, not_submitted_ss): + def create_submit_log(self, submitted_ss, not_submitted_ss, jv_name): log = '' if not submitted_ss and not not_submitted_ss: log = "No salary slip found to submit for the above selected criteria" @@ -171,9 +173,12 @@ class ProcessPayroll(Document): dict(ss_list=submitted_ss, keys=sorted(submitted_ss[0].keys()), title=_('Submitted Salary Slips'))) + if jv_name: + log += "" + _("Accural Journal Entry Submitted") + "\ + %s" % '
''{0}'.format(jv_name) if not_submitted_ss: - log += frappe.render_template(self.get_log_template(), + log += frappe.render_template("templates/includes/salary_slip_log.html", dict(ss_list=not_submitted_ss, keys=sorted(not_submitted_ss[0].keys()), title=_('Not Submitted Salary Slips'))) @@ -188,17 +193,23 @@ class ProcessPayroll(Document): return ['{0}'.format(salary_slip)] - def get_total_salary(self): + def get_total_salary_and_loan_amounts(self): """ - Get total salary amount from submitted salary slip based on selected criteria + Get total loan principal, loan interest and salary amount from submitted salary slip based on selected criteria """ cond = self.get_filter_condition() - tot = frappe.db.sql(""" - select sum(rounded_total) from `tabSalary Slip` t1 + totals = frappe.db.sql(""" + select sum(principal_amount) as total_principal_amount, sum(interest_amount) as total_interest_amount, + sum(total_loan_repayment) as total_loan_repayment, sum(rounded_total) as rounded_total from `tabSalary Slip` t1 where t1.docstatus = 1 and start_date >= %s and end_date <= %s %s - """ % ('%s', '%s', cond), (self.start_date, self.end_date)) - - return flt(tot[0][0]) + """ % ('%s', '%s', cond), (self.start_date, self.end_date), as_dict=True) + return totals[0] + + def get_loan_accounts(self): + loan_accounts = frappe.get_all("Employee Loan", fields=["employee_loan_account", "interest_income_account"], + filters = {"company": self.company, "docstatus":1}) + if loan_accounts: + return loan_accounts[0] def get_salary_component_account(self, salary_component): account = frappe.db.get_value("Salary Component Account", @@ -233,18 +244,31 @@ class ProcessPayroll(Document): account = self.get_salary_component_account(s) account_dict[account] = account_dict.get(account, 0) + a return account_dict + + def get_default_payroll_payable_account(self): + payroll_payable_account = frappe.db.get_value("Company", + {"company_name": self.company}, "default_payroll_payable_account") + + if not payroll_payable_account: + frappe.throw(_("Please set Default Payroll Payable Account in Company {0}") + .format(self.company)) + + return payroll_payable_account - def make_journal_entry(self, reference_number = None, reference_date = None): + def make_accural_jv_entry(self): self.check_permission('write') earnings = self.get_salary_component_total(component_type = "earnings") or {} deductions = self.get_salary_component_total(component_type = "deductions") or {} + default_payroll_payable_account = self.get_default_payroll_payable_account() + loan_amounts = self.get_total_salary_and_loan_amounts() + loan_accounts = self.get_loan_accounts() jv_name = "" if earnings or deductions: journal_entry = frappe.new_doc('Journal Entry') - journal_entry.voucher_type = 'Bank Entry' - journal_entry.user_remark = _('Payment of salary from {0} to {1}').format(self.start_date, + journal_entry.voucher_type = 'Journal Entry' + journal_entry.user_remark = _('Accural Journal Entry for salaries from {0} to {1}').format(self.start_date, self.end_date) journal_entry.company = self.company journal_entry.posting_date = nowdate() @@ -255,22 +279,34 @@ class ProcessPayroll(Document): adjustment_amt = adjustment_amt+amt account_amt_list.append({ "account": acc, - "debit_in_account_currency": amt + "debit_in_account_currency": amt, + "cost_center": self.cost_center, + "project": self.project }) for acc, amt in deductions.items(): adjustment_amt = adjustment_amt-amt account_amt_list.append({ "account": acc, - "credit_in_account_currency": amt + "credit_in_account_currency": amt, + "cost_center": self.cost_center, + "project": self.project }) + #employee loan account_amt_list.append({ - "account": self.payment_account, + "account": loan_accounts.employee_loan_account, + "credit_in_account_currency": loan_amounts.total_principal_amount + }) + account_amt_list.append({ + "account": loan_accounts.interest_income_account, + "credit_in_account_currency": loan_amounts.total_interest_amount + }) + adjustment_amt = adjustment_amt-(loan_amounts.total_loan_repayment) + + account_amt_list.append({ + "account": default_payroll_payable_account, "credit_in_account_currency": adjustment_amt }) journal_entry.set("accounts", account_amt_list) - journal_entry.cheque_no = reference_number - journal_entry.cheque_date = reference_date - journal_entry.multi_currency = 1 journal_entry.save() try: journal_entry.submit() @@ -278,15 +314,33 @@ class ProcessPayroll(Document): self.update_salary_slip_status(jv_name = jv_name) except Exception, e: frappe.msgprint(e) - return self.create_jv_log(jv_name) + return jv_name + def make_payment_entry(self): + self.check_permission('write') + total_salary_amount = self.get_total_salary_and_loan_amounts() + default_payroll_payable_account = self.get_default_payroll_payable_account() - def create_jv_log(self, jv_name): - log = "

" + _("No submitted Salary Slip found") + "

" - if jv_name: - log = "" + _("Journal Entry Submitted") + "\ - %s" % '
''{0}'.format(jv_name) - return log + if total_salary_amount.rounded_total: + journal_entry = frappe.new_doc('Journal Entry') + journal_entry.voucher_type = 'Bank Entry' + journal_entry.user_remark = _('Payment of salary from {0} to {1}').format(self.start_date, + self.end_date) + journal_entry.company = self.company + journal_entry.posting_date = nowdate() + + account_amt_list = [] + + account_amt_list.append({ + "account": self.payment_account, + "credit_in_account_currency": total_salary_amount.rounded_total + }) + account_amt_list.append({ + "account": default_payroll_payable_account, + "debit_in_account_currency": total_salary_amount.rounded_total + }) + journal_entry.set("accounts", account_amt_list) + return journal_entry.as_dict() def update_salary_slip_status(self, jv_name = None): ss_list = self.get_sal_slip_list(ss_status=1) diff --git a/erpnext/hr/doctype/process_payroll/test_process_payroll.py b/erpnext/hr/doctype/process_payroll/test_process_payroll.py index 2eb1c6b76b3..6347a2a2353 100644 --- a/erpnext/hr/doctype/process_payroll/test_process_payroll.py +++ b/erpnext/hr/doctype/process_payroll/test_process_payroll.py @@ -29,7 +29,7 @@ class TestProcessPayroll(unittest.TestCase): process_payroll.create_salary_slips() process_payroll.submit_salary_slips() if process_payroll.get_sal_slip_list(ss_status = 1): - r = process_payroll.make_journal_entry(reference_number=random_string(10),reference_date=nowdate()) + r = process_payroll.make_payment_entry() def get_salary_component_account(sal_comp): diff --git a/erpnext/hr/doctype/salary_component/salary_component.js b/erpnext/hr/doctype/salary_component/salary_component.js index 3a2492ca171..86203ab44e7 100644 --- a/erpnext/hr/doctype/salary_component/salary_component.js +++ b/erpnext/hr/doctype/salary_component/salary_component.js @@ -5,13 +5,14 @@ frappe.ui.form.on('Salary Component', { setup: function(frm) { frm.set_query("default_account", "accounts", function(doc, cdt, cdn) { var d = locals[cdt][cdn]; + var root_types = ["Expense", "Liability"]; return { filters: { - "root_type": "Expense", + "root_type": ["in", root_types], "is_group": 0, "company": d.company } } }) } -}); +}); \ No newline at end of file diff --git a/erpnext/hr/doctype/salary_component/salary_component.py b/erpnext/hr/doctype/salary_component/salary_component.py index 8af7311f8f4..c02d952ac1f 100644 --- a/erpnext/hr/doctype/salary_component/salary_component.py +++ b/erpnext/hr/doctype/salary_component/salary_component.py @@ -21,4 +21,4 @@ class SalaryComponent(Document): frappe.throw(_("Abbreviation cannot have more than 5 characters")) if frappe.db.sql("select salary_component_abbr from `tabSalary Component` where name!=%s and salary_component_abbr=%s", (self.name, self.salary_component_abbr)): - frappe.throw(_("Abbreviation already used for another salary component")) \ No newline at end of file + frappe.throw(_("Abbreviation {0} already used for another salary component").format(self.salary_component_abbr)) \ No newline at end of file diff --git a/erpnext/hr/doctype/salary_slip/salary_slip.js b/erpnext/hr/doctype/salary_slip/salary_slip.js index 02622598551..afff67bdef9 100644 --- a/erpnext/hr/doctype/salary_slip/salary_slip.js +++ b/erpnext/hr/doctype/salary_slip/salary_slip.js @@ -38,6 +38,7 @@ frappe.ui.form.on("Salary Slip", { refresh: function(frm) { frm.trigger("toggle_fields") + frm.trigger("toggle_reqd_fields") salary_detail_fields = ['formula', 'abbr'] cur_frm.fields_dict['earnings'].grid.set_column_disp(salary_detail_fields,false); cur_frm.fields_dict['deductions'].grid.set_column_disp(salary_detail_fields,false); @@ -58,9 +59,9 @@ frappe.ui.form.on("Salary Slip", { frm.toggle_display(['payment_days', 'total_working_days', 'leave_without_pay'], frm.doc.payroll_frequency!=""); } + }) - // Get leave details //--------------------------------------------------------------------- cur_frm.cscript.start_date = function(doc, dt, dn){ @@ -130,7 +131,7 @@ var calculate_earning_total = function(doc, dt, dn, reset_amount) { total_earn += flt(tbl[i].amount); } - doc.gross_pay = total_earn + flt(doc.arrear_amount) + flt(doc.leave_encashment_amount); + doc.gross_pay = total_earn; refresh_many(['amount','gross_pay']); } @@ -161,17 +162,6 @@ var calculate_net_pay = function(doc, dt, dn) { refresh_many(['net_pay', 'rounded_total']); } -// trigger on arrear -// ------------------------------------------------------------------------ -cur_frm.cscript.arrear_amount = function(doc,dt,dn){ - calculate_earning_total(doc, dt, dn); - calculate_net_pay(doc, dt, dn); -} - -// trigger on encashed amount -// ------------------------------------------------------------------------ -cur_frm.cscript.leave_encashment_amount = cur_frm.cscript.arrear_amount; - // validate // ------------------------------------------------------------------------ cur_frm.cscript.validate = function(doc, dt, dn) { diff --git a/erpnext/hr/doctype/salary_slip/salary_slip.json b/erpnext/hr/doctype/salary_slip/salary_slip.json index 7d5dbe9c9aa..9f3c29907e4 100644 --- a/erpnext/hr/doctype/salary_slip/salary_slip.json +++ b/erpnext/hr/doctype/salary_slip/salary_slip.json @@ -21,7 +21,6 @@ "hidden": 0, "ignore_user_permissions": 0, "ignore_xss_filter": 0, - "in_filter": 0, "in_list_view": 0, "in_standard_filter": 0, "length": 0, @@ -50,7 +49,6 @@ "hidden": 0, "ignore_user_permissions": 0, "ignore_xss_filter": 0, - "in_filter": 0, "in_list_view": 0, "in_standard_filter": 0, "label": "Posting Date", @@ -78,7 +76,6 @@ "hidden": 0, "ignore_user_permissions": 0, "ignore_xss_filter": 0, - "in_filter": 1, "in_list_view": 0, "in_standard_filter": 1, "label": "Employee", @@ -108,7 +105,6 @@ "hidden": 0, "ignore_user_permissions": 0, "ignore_xss_filter": 0, - "in_filter": 1, "in_list_view": 0, "in_standard_filter": 0, "label": "Employee Name", @@ -138,7 +134,6 @@ "hidden": 0, "ignore_user_permissions": 0, "ignore_xss_filter": 0, - "in_filter": 1, "in_list_view": 0, "in_standard_filter": 1, "label": "Department", @@ -169,7 +164,6 @@ "hidden": 0, "ignore_user_permissions": 0, "ignore_xss_filter": 0, - "in_filter": 1, "in_list_view": 0, "in_standard_filter": 0, "label": "Designation", @@ -199,7 +193,6 @@ "hidden": 0, "ignore_user_permissions": 0, "ignore_xss_filter": 0, - "in_filter": 1, "in_list_view": 0, "in_standard_filter": 1, "label": "Branch", @@ -229,7 +222,6 @@ "hidden": 0, "ignore_user_permissions": 0, "ignore_xss_filter": 0, - "in_filter": 0, "in_list_view": 0, "in_standard_filter": 0, "length": 0, @@ -257,7 +249,6 @@ "hidden": 0, "ignore_user_permissions": 0, "ignore_xss_filter": 0, - "in_filter": 0, "in_list_view": 0, "in_standard_filter": 0, "label": "Status", @@ -282,16 +273,16 @@ "collapsible": 0, "columns": 0, "fieldname": "journal_entry", - "fieldtype": "Data", + "fieldtype": "Link", "hidden": 0, "ignore_user_permissions": 0, "ignore_xss_filter": 0, - "in_filter": 0, "in_list_view": 0, "in_standard_filter": 0, "label": "Journal Entry", "length": 0, "no_copy": 0, + "options": "Journal Entry", "permlevel": 0, "precision": "", "print_hide": 0, @@ -314,7 +305,6 @@ "hidden": 0, "ignore_user_permissions": 0, "ignore_xss_filter": 0, - "in_filter": 1, "in_list_view": 0, "in_standard_filter": 1, "label": "Company", @@ -342,7 +332,6 @@ "hidden": 0, "ignore_user_permissions": 1, "ignore_xss_filter": 0, - "in_filter": 0, "in_list_view": 0, "in_standard_filter": 0, "label": "Letter Head", @@ -370,7 +359,6 @@ "hidden": 0, "ignore_user_permissions": 0, "ignore_xss_filter": 0, - "in_filter": 0, "in_list_view": 0, "in_standard_filter": 0, "length": 0, @@ -398,7 +386,6 @@ "hidden": 0, "ignore_user_permissions": 0, "ignore_xss_filter": 0, - "in_filter": 0, "in_list_view": 0, "in_standard_filter": 0, "label": "Salary Slip Based on Timesheet", @@ -428,7 +415,6 @@ "hidden": 0, "ignore_user_permissions": 0, "ignore_xss_filter": 0, - "in_filter": 0, "in_list_view": 0, "in_standard_filter": 0, "label": "Start Date", @@ -458,7 +444,6 @@ "hidden": 0, "ignore_user_permissions": 0, "ignore_xss_filter": 0, - "in_filter": 0, "in_list_view": 0, "in_standard_filter": 0, "label": "End Date", @@ -486,7 +471,6 @@ "hidden": 0, "ignore_user_permissions": 0, "ignore_xss_filter": 0, - "in_filter": 0, "in_list_view": 0, "in_standard_filter": 0, "length": 0, @@ -514,7 +498,6 @@ "hidden": 0, "ignore_user_permissions": 0, "ignore_xss_filter": 0, - "in_filter": 0, "in_list_view": 0, "in_standard_filter": 0, "label": "Salary Structure", @@ -545,7 +528,6 @@ "hidden": 0, "ignore_user_permissions": 0, "ignore_xss_filter": 0, - "in_filter": 0, "in_list_view": 0, "in_standard_filter": 0, "label": "Payroll Frequency", @@ -575,7 +557,6 @@ "hidden": 0, "ignore_user_permissions": 0, "ignore_xss_filter": 0, - "in_filter": 0, "in_list_view": 0, "in_standard_filter": 0, "label": "Working Days", @@ -605,7 +586,6 @@ "hidden": 0, "ignore_user_permissions": 0, "ignore_xss_filter": 0, - "in_filter": 0, "in_list_view": 0, "in_standard_filter": 0, "label": "Leave Without Pay", @@ -635,7 +615,6 @@ "hidden": 0, "ignore_user_permissions": 0, "ignore_xss_filter": 0, - "in_filter": 0, "in_list_view": 0, "in_standard_filter": 0, "label": "Payment Days", @@ -665,7 +644,6 @@ "hidden": 0, "ignore_user_permissions": 0, "ignore_xss_filter": 0, - "in_filter": 0, "in_list_view": 0, "in_standard_filter": 0, "label": "", @@ -694,7 +672,6 @@ "hidden": 0, "ignore_user_permissions": 0, "ignore_xss_filter": 0, - "in_filter": 0, "in_list_view": 0, "in_standard_filter": 0, "label": "Salary Slip Timesheet", @@ -723,7 +700,6 @@ "hidden": 0, "ignore_user_permissions": 0, "ignore_xss_filter": 0, - "in_filter": 0, "in_list_view": 0, "in_standard_filter": 0, "length": 0, @@ -750,7 +726,6 @@ "hidden": 0, "ignore_user_permissions": 0, "ignore_xss_filter": 0, - "in_filter": 0, "in_list_view": 0, "in_standard_filter": 0, "label": "Total Working Hours", @@ -778,7 +753,6 @@ "hidden": 0, "ignore_user_permissions": 0, "ignore_xss_filter": 0, - "in_filter": 0, "in_list_view": 0, "in_standard_filter": 0, "label": "Hour Rate", @@ -807,7 +781,6 @@ "hidden": 0, "ignore_user_permissions": 0, "ignore_xss_filter": 0, - "in_filter": 0, "in_list_view": 0, "in_standard_filter": 0, "label": "", @@ -835,7 +808,6 @@ "hidden": 0, "ignore_user_permissions": 0, "ignore_xss_filter": 0, - "in_filter": 0, "in_list_view": 0, "in_standard_filter": 0, "label": "Bank Name", @@ -864,7 +836,6 @@ "hidden": 0, "ignore_user_permissions": 0, "ignore_xss_filter": 0, - "in_filter": 0, "in_list_view": 0, "in_standard_filter": 0, "label": "Bank Account No.", @@ -893,7 +864,6 @@ "hidden": 0, "ignore_user_permissions": 0, "ignore_xss_filter": 0, - "in_filter": 0, "in_list_view": 0, "in_standard_filter": 0, "length": 0, @@ -920,7 +890,6 @@ "hidden": 0, "ignore_user_permissions": 1, "ignore_xss_filter": 0, - "in_filter": 0, "in_list_view": 0, "in_standard_filter": 0, "label": "Amended From", @@ -950,7 +919,6 @@ "hidden": 0, "ignore_user_permissions": 0, "ignore_xss_filter": 0, - "in_filter": 0, "in_list_view": 0, "in_standard_filter": 0, "label": "Earning & Deduction", @@ -978,7 +946,6 @@ "hidden": 0, "ignore_user_permissions": 0, "ignore_xss_filter": 0, - "in_filter": 0, "in_list_view": 0, "in_standard_filter": 0, "label": "Earning", @@ -1008,7 +975,6 @@ "hidden": 0, "ignore_user_permissions": 0, "ignore_xss_filter": 0, - "in_filter": 0, "in_list_view": 0, "in_standard_filter": 0, "label": "Earnings", @@ -1038,7 +1004,6 @@ "hidden": 0, "ignore_user_permissions": 0, "ignore_xss_filter": 0, - "in_filter": 0, "in_list_view": 0, "in_standard_filter": 0, "label": "Deduction", @@ -1067,7 +1032,6 @@ "hidden": 0, "ignore_user_permissions": 0, "ignore_xss_filter": 0, - "in_filter": 0, "in_list_view": 0, "in_standard_filter": 0, "label": "Deductions", @@ -1097,7 +1061,6 @@ "hidden": 0, "ignore_user_permissions": 0, "ignore_xss_filter": 0, - "in_filter": 0, "in_list_view": 0, "in_standard_filter": 0, "label": "", @@ -1115,66 +1078,6 @@ "set_only_once": 0, "unique": 0 }, - { - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "fieldname": "arrear_amount", - "fieldtype": "Currency", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Arrear Amount", - "length": 0, - "no_copy": 0, - "oldfieldname": "arrear_amount", - "oldfieldtype": "Currency", - "options": "Company:company:default_currency", - "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, - "fieldname": "leave_encashment_amount", - "fieldtype": "Currency", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Leave Encashment Amount", - "length": 0, - "no_copy": 0, - "oldfieldname": "encashment_amount", - "oldfieldtype": "Currency", - "options": "Company:company:default_currency", - "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, @@ -1185,7 +1088,6 @@ "hidden": 0, "ignore_user_permissions": 0, "ignore_xss_filter": 0, - "in_filter": 0, "in_list_view": 0, "in_standard_filter": 0, "label": "Gross Pay", @@ -1215,7 +1117,6 @@ "hidden": 0, "ignore_user_permissions": 0, "ignore_xss_filter": 0, - "in_filter": 0, "in_list_view": 0, "in_standard_filter": 0, "length": 0, @@ -1241,7 +1142,6 @@ "hidden": 0, "ignore_user_permissions": 0, "ignore_xss_filter": 0, - "in_filter": 0, "in_list_view": 0, "in_standard_filter": 0, "label": "Total Deduction", @@ -1266,17 +1166,45 @@ "bold": 0, "collapsible": 0, "columns": 0, + "depends_on": "total_loan_repayment", "fieldname": "loan_repayment", + "fieldtype": "Section Break", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Loan repayment", + "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": "principal_amount", "fieldtype": "Currency", "hidden": 0, "ignore_user_permissions": 0, "ignore_xss_filter": 0, - "in_filter": 0, "in_list_view": 0, "in_standard_filter": 0, - "label": "Loan Repayment", + "label": "Principal Amount", "length": 0, "no_copy": 0, + "options": "Company:company:default_currency", "permlevel": 0, "precision": "", "print_hide": 0, @@ -1294,13 +1222,121 @@ "bold": 0, "collapsible": 0, "columns": 0, - "description": "Gross Pay + Arrear Amount + Encashment Amount - Total Deduction - Loan Repayment", + "fieldname": "interest_amount", + "fieldtype": "Currency", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Interest Amount", + "length": 0, + "no_copy": 0, + "options": "Company:company:default_currency", + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 1, + "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_48", + "fieldtype": "Column Break", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "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": "total_loan_repayment", + "fieldtype": "Currency", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Total Loan Repayment", + "length": 0, + "no_copy": 0, + "options": "Company:company:default_currency", + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 1, + "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": "net_pay_info", + "fieldtype": "Section Break", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "net pay info", + "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, + "description": "Gross Pay - Total Deduction - Loan Repayment", "fieldname": "net_pay", "fieldtype": "Currency", "hidden": 0, "ignore_user_permissions": 0, "ignore_xss_filter": 0, - "in_filter": 0, "in_list_view": 0, "in_standard_filter": 0, "label": "Net Pay", @@ -1320,6 +1356,32 @@ "set_only_once": 0, "unique": 0 }, + { + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "column_break_53", + "fieldtype": "Column Break", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "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": 1, @@ -1330,7 +1392,6 @@ "hidden": 0, "ignore_user_permissions": 0, "ignore_xss_filter": 0, - "in_filter": 0, "in_list_view": 0, "in_standard_filter": 0, "label": "Rounded Total", @@ -1348,6 +1409,32 @@ "set_only_once": 0, "unique": 0 }, + { + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "section_break_55", + "fieldtype": "Section Break", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "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, @@ -1359,7 +1446,6 @@ "hidden": 0, "ignore_user_permissions": 0, "ignore_xss_filter": 0, - "in_filter": 0, "in_list_view": 0, "in_standard_filter": 0, "label": "Total in words", @@ -1390,7 +1476,7 @@ "issingle": 0, "istable": 0, "max_attachments": 0, - "modified": "2017-01-09 12:37:03.802501", + "modified": "2017-02-09 02:23:53.851332", "modified_by": "Administrator", "module": "HR", "name": "Salary Slip", @@ -1406,7 +1492,6 @@ "export": 0, "if_owner": 0, "import": 0, - "is_custom": 0, "permlevel": 0, "print": 1, "read": 1, @@ -1428,7 +1513,6 @@ "export": 0, "if_owner": 0, "import": 0, - "is_custom": 0, "permlevel": 0, "print": 1, "read": 1, @@ -1449,7 +1533,6 @@ "export": 0, "if_owner": 0, "import": 0, - "is_custom": 0, "permlevel": 0, "print": 0, "read": 1, diff --git a/erpnext/hr/doctype/salary_slip/salary_slip.py b/erpnext/hr/doctype/salary_slip/salary_slip.py index 9d57a5d562c..55314ac1837 100644 --- a/erpnext/hr/doctype/salary_slip/salary_slip.py +++ b/erpnext/hr/doctype/salary_slip/salary_slip.py @@ -324,25 +324,28 @@ class SalarySlip(TransactionBase): disable_rounded_total = cint(frappe.db.get_value("Global Defaults", None, "disable_rounded_total")) - self.gross_pay = flt(self.arrear_amount) + flt(self.leave_encashment_amount) self.total_deduction = 0 + self.gross_pay = 0 self.sum_components('earnings', 'gross_pay') self.sum_components('deductions', 'total_deduction') self.set_loan_repayment() - self.net_pay = flt(self.gross_pay) - (flt(self.total_deduction) + flt(self.loan_repayment)) + self.net_pay = flt(self.gross_pay) - (flt(self.total_deduction) + flt(self.total_loan_repayment)) self.rounded_total = rounded(self.net_pay, self.precision("net_pay") if disable_rounded_total else 0) def set_loan_repayment(self): - employee_loan = frappe.db.sql("""select sum(total_payment) as loan_repayment from `tabRepayment Schedule` + employee_loan = frappe.db.sql("""select sum(principal_amount) as principal_amount, sum(interest_amount) as interest_amount, + sum(total_payment) as total_loan_repayment from `tabRepayment Schedule` where payment_date between %s and %s and parent in (select name from `tabEmployee Loan` where employee = %s and repay_from_salary = 1 and docstatus = 1)""", - (self.start_date, self.end_date, self.employee), as_dict=True) + (self.start_date, self.end_date, self.employee), as_dict=True) if employee_loan: - self.loan_repayment = employee_loan[0].loan_repayment + self.principal_amount = employee_loan[0].principal_amount + self.interest_amount = employee_loan[0].interest_amount + self.total_loan_repayment = employee_loan[0].total_loan_repayment def on_submit(self): if self.net_pay < 0: diff --git a/erpnext/hr/doctype/salary_slip/test_salary_slip.py b/erpnext/hr/doctype/salary_slip/test_salary_slip.py index 9999f1ec088..cf76ee79207 100644 --- a/erpnext/hr/doctype/salary_slip/test_salary_slip.py +++ b/erpnext/hr/doctype/salary_slip/test_salary_slip.py @@ -14,7 +14,7 @@ from erpnext.hr.doctype.process_payroll.process_payroll import get_month_details class TestSalarySlip(unittest.TestCase): def setUp(self): - make_earning_salary_component(["Basic Salary", "Allowance", "HRA"]) + make_earning_salary_component(["Basic Salary", "Special Allowance", "HRA"]) make_deduction_salary_component(["Professional Tax", "TDS"]) for dt in ["Leave Application", "Leave Allocation", "Salary Slip"]: @@ -143,8 +143,8 @@ class TestSalarySlip(unittest.TestCase): ss = frappe.get_doc("Salary Slip", self.make_employee_salary_slip("test_employee@salary.com", "Monthly")) ss.submit() - self.assertEquals(ss.loan_repayment, 582) - self.assertEquals(ss.net_pay, (flt(ss.gross_pay) - (flt(ss.total_deduction) + flt(ss.loan_repayment)))) + self.assertEquals(ss.total_loan_repayment, 582) + self.assertEquals(ss.net_pay, (flt(ss.gross_pay) - (flt(ss.total_deduction) + flt(ss.total_loan_repayment)))) def test_payroll_frequency(self): fiscal_year = get_fiscal_year(nowdate(), company="_Test Company")[0] @@ -322,8 +322,8 @@ def get_earnings_component(): "idx": 3 }, { - "salary_component": 'Allowance', - "abbr":'A', + "salary_component": 'Special Allowance', + "abbr":'SA', "condition": 'H < 10000', "formula": 'BS*.5', "idx": 4 diff --git a/erpnext/hr/doctype/salary_structure/test_salary_structure.py b/erpnext/hr/doctype/salary_structure/test_salary_structure.py index 36e50d319af..665f8a85584 100644 --- a/erpnext/hr/doctype/salary_structure/test_salary_structure.py +++ b/erpnext/hr/doctype/salary_structure/test_salary_structure.py @@ -17,7 +17,7 @@ class TestSalaryStructure(unittest.TestCase): def setUp(self): self.make_holiday_list() frappe.db.set_value("Company", erpnext.get_default_company(), "default_holiday_list", "Salary Structure Test Holiday List") - make_earning_salary_component(["Basic Salary", "Allowance", "HRA"]) + make_earning_salary_component(["Basic Salary", "Special Allowance", "HRA"]) make_deduction_salary_component(["Professional Tax", "TDS"]) make_employee("test_employee@salary.com") make_employee("test_employee_2@salary.com") @@ -139,8 +139,8 @@ def get_earnings_component(): "idx": 3 }, { - "salary_component": 'Allowance', - "abbr":'A', + "salary_component": 'Special Allowance', + "abbr":'SA', "condition": 'H < 10000', "formula": 'BS*.5', "idx": 4 diff --git a/erpnext/hr/print_format/salary_slip_standard/salary_slip_standard.json b/erpnext/hr/print_format/salary_slip_standard/salary_slip_standard.json index 0c38d4541aa..cb4003a28ef 100644 --- a/erpnext/hr/print_format/salary_slip_standard/salary_slip_standard.json +++ b/erpnext/hr/print_format/salary_slip_standard/salary_slip_standard.json @@ -6,7 +6,7 @@ "docstatus": 0, "doctype": "Print Format", "font": "Default", - "format_data": "[{\"fieldname\": \"print_heading_template\", \"fieldtype\": \"HTML\", \"options\": \"

{{doc.name}}

\\n
\\n
\\n
\"}, {\"fieldtype\": \"Section Break\"}, {\"fieldtype\": \"Column Break\"}, {\"print_hide\": 0, \"fieldname\": \"employee\"}, {\"print_hide\": 0, \"fieldname\": \"company\"}, {\"print_hide\": 0, \"fieldname\": \"employee_name\"}, {\"print_hide\": 0, \"fieldname\": \"department\"}, {\"print_hide\": 0, \"fieldname\": \"designation\"}, {\"print_hide\": 0, \"fieldname\": \"branch\"}, {\"fieldtype\": \"Column Break\"}, {\"print_hide\": 0, \"fieldname\": \"start_date\"}, {\"print_hide\": 0, \"fieldname\": \"end_date\"}, {\"print_hide\": 0, \"fieldname\": \"total_working_days\"}, {\"print_hide\": 0, \"fieldname\": \"leave_without_pay\"}, {\"print_hide\": 0, \"fieldname\": \"payment_days\"}, {\"fieldtype\": \"Section Break\"}, {\"fieldtype\": \"Column Break\"}, {\"visible_columns\": [{\"print_hide\": 0, \"fieldname\": \"salary_component\", \"print_width\": \"\"}, {\"print_hide\": 0, \"fieldname\": \"amount\", \"print_width\": \"\"}, {\"print_hide\": 0, \"fieldname\": \"depends_on_lwp\", \"print_width\": \"\"}], \"print_hide\": 0, \"fieldname\": \"earnings\"}, {\"fieldtype\": \"Column Break\"}, {\"visible_columns\": [{\"print_hide\": 0, \"fieldname\": \"salary_component\", \"print_width\": \"\"}, {\"print_hide\": 0, \"fieldname\": \"amount\", \"print_width\": \"\"}, {\"print_hide\": 0, \"fieldname\": \"depends_on_lwp\", \"print_width\": \"\"}], \"print_hide\": 0, \"fieldname\": \"deductions\"}, {\"fieldtype\": \"Section Break\"}, {\"fieldtype\": \"Column Break\"}, {\"fieldtype\": \"Column Break\"}, {\"print_hide\": 0, \"fieldname\": \"arrear_amount\"}, {\"print_hide\": 0, \"fieldname\": \"leave_encashment_amount\"}, {\"print_hide\": 0, \"fieldname\": \"gross_pay\"}, {\"print_hide\": 0, \"fieldname\": \"total_deduction\"}, {\"print_hide\": 0, \"fieldname\": \"net_pay\"}, {\"print_hide\": 0, \"fieldname\": \"rounded_total\"}, {\"print_hide\": 0, \"fieldname\": \"total_in_words\"}]", + "format_data": "[{\"fieldname\": \"print_heading_template\", \"fieldtype\": \"HTML\", \"options\": \"

{{doc.name}}

\\n
\\n
\\n
\"}, {\"fieldtype\": \"Section Break\"}, {\"fieldtype\": \"Column Break\"}, {\"print_hide\": 0, \"fieldname\": \"employee\"}, {\"print_hide\": 0, \"fieldname\": \"company\"}, {\"print_hide\": 0, \"fieldname\": \"employee_name\"}, {\"print_hide\": 0, \"fieldname\": \"department\"}, {\"print_hide\": 0, \"fieldname\": \"designation\"}, {\"print_hide\": 0, \"fieldname\": \"branch\"}, {\"fieldtype\": \"Column Break\"}, {\"print_hide\": 0, \"fieldname\": \"start_date\"}, {\"print_hide\": 0, \"fieldname\": \"end_date\"}, {\"print_hide\": 0, \"fieldname\": \"total_working_days\"}, {\"print_hide\": 0, \"fieldname\": \"leave_without_pay\"}, {\"print_hide\": 0, \"fieldname\": \"payment_days\"}, {\"fieldtype\": \"Section Break\"}, {\"fieldtype\": \"Column Break\"}, {\"visible_columns\": [{\"print_hide\": 0, \"fieldname\": \"salary_component\", \"print_width\": \"\"}, {\"print_hide\": 0, \"fieldname\": \"amount\", \"print_width\": \"\"}, {\"print_hide\": 0, \"fieldname\": \"depends_on_lwp\", \"print_width\": \"\"}], \"print_hide\": 0, \"fieldname\": \"earnings\"}, {\"fieldtype\": \"Column Break\"}, {\"visible_columns\": [{\"print_hide\": 0, \"fieldname\": \"salary_component\", \"print_width\": \"\"}, {\"print_hide\": 0, \"fieldname\": \"amount\", \"print_width\": \"\"}, {\"print_hide\": 0, \"fieldname\": \"depends_on_lwp\", \"print_width\": \"\"}], \"print_hide\": 0, \"fieldname\": \"deductions\"}, {\"fieldtype\": \"Section Break\"}, {\"fieldtype\": \"Column Break\"}, {\"fieldtype\": \"Column Break\"}, {\"print_hide\": 0, \"fieldname\": \"gross_pay\"}, {\"print_hide\": 0, \"fieldname\": \"total_deduction\"}, {\"print_hide\": 0, \"fieldname\": \"net_pay\"}, {\"print_hide\": 0, \"fieldname\": \"rounded_total\"}, {\"print_hide\": 0, \"fieldname\": \"total_in_words\"}]", "idx": 0, "modified": "2016-08-22 00:21:42.600548", "modified_by": "Administrator", diff --git a/erpnext/hr/report/salary_register/salary_register.py b/erpnext/hr/report/salary_register/salary_register.py index 1e36b92e22a..88f6f470b1e 100644 --- a/erpnext/hr/report/salary_register/salary_register.py +++ b/erpnext/hr/report/salary_register/salary_register.py @@ -22,7 +22,7 @@ def execute(filters=None): for e in earning_types: row.append(ss_earning_map.get(ss.name, {}).get(e)) - row += [ss.arrear_amount, ss.leave_encashment_amount, ss.gross_pay] + row += [ss.gross_pay] for d in ded_types: row.append(ss_ded_map.get(ss.name, {}).get(d)) @@ -50,8 +50,7 @@ def get_columns(salary_slips): salary_components[_(component.type)].append(component.salary_component) columns = columns + [(e + ":Currency:120") for e in salary_components[_("Earning")]] + \ - [ _("Arrear Amount") + ":Currency:120", _("Leave Encashment Amount") + ":Currency:150", - _("Gross Pay") + ":Currency:120"] + [(d + ":Currency:120") for d in salary_components[_("Deduction")]] + \ + [_("Gross Pay") + ":Currency:120"] + [(d + ":Currency:120") for d in salary_components[_("Deduction")]] + \ [_("Total Deduction") + ":Currency:120", _("Net Pay") + ":Currency:120"] return columns, salary_components[_("Earning")], salary_components[_("Deduction")] diff --git a/erpnext/patches.txt b/erpnext/patches.txt index e041a2b5178..0f3f1984f62 100644 --- a/erpnext/patches.txt +++ b/erpnext/patches.txt @@ -370,4 +370,5 @@ erpnext.patches.v7_2.set_null_value_to_fields erpnext.patches.v7_2.update_guardian_name_in_student_master erpnext.patches.v7_2.update_abbr_in_salary_slips erpnext.patches.v7_2.rename_evaluation_criteria -erpnext.patches.v7_2.update_party_type \ No newline at end of file +erpnext.patches.v7_2.update_party_type +erpnext.patches.v7_2.arrear_leave_encashment_as_salary_component \ No newline at end of file diff --git a/erpnext/patches/v7_2/arrear_leave_encashment_as_salary_component.py b/erpnext/patches/v7_2/arrear_leave_encashment_as_salary_component.py new file mode 100644 index 00000000000..0e5dab3eb03 --- /dev/null +++ b/erpnext/patches/v7_2/arrear_leave_encashment_as_salary_component.py @@ -0,0 +1,32 @@ +import frappe + +def execute(): + frappe.reload_doctype('Salary Slip', 'Salary Component') + salary_components = ['Arrear', 'Leave Encashment'] + for salary_component in salary_components: + if not frappe.db.exists('Salary Component', salary_component): + sal_comp = frappe.get_doc({ + "doctype": "Salary Component", + "salary_component": salary_component, + "type": "Earning" + }).insert() + + salary_slips = frappe.db.sql("""select name, arrear_amount, leave_encashment_amount from `tabSalary Slip` + where docstatus !=2 and (arrear_amount > 0 or leave_encashment_amount > 0)""", as_dict=True) + + for salary_slip in salary_slips: + doc = frappe.get_doc('Salary Slip', salary_slip.name) + + if salary_slip.get("arrear_amount") > 0: + r = doc.append('earnings', { + 'salary_component': 'Arrear', + 'amount': salary_slip.arrear_amount + }) + r.db_update() + + if salary_slip.get("leave_encashment_amount") > 0: + r = doc.append('earnings', { + 'salary_component': 'Leave Encashment', + 'amount': salary_slip.leave_encashment_amount + }) + r.db_update() \ No newline at end of file diff --git a/erpnext/setup/doctype/company/company.js b/erpnext/setup/doctype/company/company.js index 5dd8ceb7bd6..0d8b41f7e2c 100644 --- a/erpnext/setup/doctype/company/company.js +++ b/erpnext/setup/doctype/company/company.js @@ -5,17 +5,6 @@ frappe.provide("erpnext.company"); frappe.ui.form.on("Company", { setup: function(frm) { - frm.fields_dict['default_payable_account'].get_query = function() { - return{ - filters: { - "root_type": "Liability", - "account_type": "Payable" - } - } - } - }, - - onload: function(frm) { erpnext.company.setup_queries(frm); }, @@ -146,6 +135,7 @@ erpnext.company.setup_queries = function(frm) { ["default_payable_account", {"account_type": "Payable"}], ["default_expense_account", {"root_type": "Expense"}], ["default_income_account", {"root_type": "Income"}], + ["default_payroll_payable_account", {"root_type": "Liability"}], ["round_off_account", {"root_type": "Expense"}], ["write_off_account", {"root_type": "Expense"}], ["exchange_gain_loss_account", {"root_type": "Expense"}], diff --git a/erpnext/setup/doctype/company/company.json b/erpnext/setup/doctype/company/company.json index fabbd512935..1c436b24cd6 100644 --- a/erpnext/setup/doctype/company/company.json +++ b/erpnext/setup/doctype/company/company.json @@ -22,7 +22,6 @@ "hidden": 0, "ignore_user_permissions": 0, "ignore_xss_filter": 0, - "in_filter": 0, "in_list_view": 0, "in_standard_filter": 0, "label": "", @@ -50,7 +49,6 @@ "hidden": 0, "ignore_user_permissions": 0, "ignore_xss_filter": 0, - "in_filter": 0, "in_list_view": 0, "in_standard_filter": 0, "label": "Company", @@ -80,7 +78,6 @@ "hidden": 0, "ignore_user_permissions": 0, "ignore_xss_filter": 0, - "in_filter": 0, "in_list_view": 0, "in_standard_filter": 0, "label": "Abbr", @@ -110,7 +107,6 @@ "hidden": 0, "ignore_user_permissions": 0, "ignore_xss_filter": 0, - "in_filter": 0, "in_list_view": 0, "in_standard_filter": 0, "label": "Change Abbreviation", @@ -137,7 +133,6 @@ "hidden": 0, "ignore_user_permissions": 0, "ignore_xss_filter": 0, - "in_filter": 0, "in_list_view": 0, "in_standard_filter": 0, "length": 0, @@ -163,7 +158,6 @@ "hidden": 0, "ignore_user_permissions": 0, "ignore_xss_filter": 0, - "in_filter": 0, "in_list_view": 0, "in_standard_filter": 0, "label": "Domain", @@ -191,7 +185,6 @@ "hidden": 0, "ignore_user_permissions": 0, "ignore_xss_filter": 0, - "in_filter": 0, "in_list_view": 0, "in_standard_filter": 0, "label": "Default Values", @@ -218,7 +211,6 @@ "hidden": 0, "ignore_user_permissions": 0, "ignore_xss_filter": 0, - "in_filter": 0, "in_list_view": 0, "in_standard_filter": 0, "label": "Default Letter Head", @@ -247,7 +239,6 @@ "hidden": 0, "ignore_user_permissions": 0, "ignore_xss_filter": 0, - "in_filter": 0, "in_list_view": 0, "in_standard_filter": 0, "label": "Default Holiday List", @@ -276,7 +267,6 @@ "hidden": 0, "ignore_user_permissions": 0, "ignore_xss_filter": 0, - "in_filter": 0, "in_list_view": 0, "in_standard_filter": 0, "label": "Default Terms", @@ -304,7 +294,6 @@ "hidden": 0, "ignore_user_permissions": 1, "ignore_xss_filter": 0, - "in_filter": 0, "in_list_view": 0, "in_standard_filter": 0, "label": "Default Currency", @@ -332,7 +321,6 @@ "hidden": 0, "ignore_user_permissions": 0, "ignore_xss_filter": 0, - "in_filter": 0, "in_list_view": 0, "in_standard_filter": 0, "length": 0, @@ -359,7 +347,6 @@ "hidden": 0, "ignore_user_permissions": 0, "ignore_xss_filter": 0, - "in_filter": 0, "in_list_view": 1, "in_standard_filter": 0, "label": "Country", @@ -387,7 +374,6 @@ "hidden": 0, "ignore_user_permissions": 0, "ignore_xss_filter": 0, - "in_filter": 0, "in_list_view": 0, "in_standard_filter": 0, "label": "Create Chart Of Accounts Based On", @@ -417,7 +403,6 @@ "hidden": 0, "ignore_user_permissions": 0, "ignore_xss_filter": 0, - "in_filter": 0, "in_list_view": 0, "in_standard_filter": 0, "label": "Chart Of Accounts Template", @@ -447,7 +432,6 @@ "hidden": 0, "ignore_user_permissions": 0, "ignore_xss_filter": 0, - "in_filter": 0, "in_list_view": 0, "in_standard_filter": 0, "label": "Existing Company ", @@ -476,7 +460,6 @@ "hidden": 0, "ignore_user_permissions": 0, "ignore_xss_filter": 0, - "in_filter": 0, "in_list_view": 0, "in_standard_filter": 0, "label": "Accounts Settings", @@ -505,7 +488,6 @@ "hidden": 0, "ignore_user_permissions": 1, "ignore_xss_filter": 0, - "in_filter": 0, "in_list_view": 0, "in_standard_filter": 0, "label": "Default Bank Account", @@ -536,7 +518,6 @@ "hidden": 0, "ignore_user_permissions": 1, "ignore_xss_filter": 0, - "in_filter": 0, "in_list_view": 0, "in_standard_filter": 0, "label": "Default Cash Account", @@ -565,7 +546,6 @@ "hidden": 0, "ignore_user_permissions": 1, "ignore_xss_filter": 0, - "in_filter": 0, "in_list_view": 0, "in_standard_filter": 0, "label": "Default Receivable Account", @@ -595,7 +575,6 @@ "hidden": 0, "ignore_user_permissions": 0, "ignore_xss_filter": 0, - "in_filter": 0, "in_list_view": 0, "in_standard_filter": 0, "label": "Round Off Account", @@ -624,7 +603,6 @@ "hidden": 0, "ignore_user_permissions": 0, "ignore_xss_filter": 0, - "in_filter": 0, "in_list_view": 0, "in_standard_filter": 0, "label": "Write Off Account", @@ -653,7 +631,6 @@ "hidden": 0, "ignore_user_permissions": 0, "ignore_xss_filter": 0, - "in_filter": 0, "in_list_view": 0, "in_standard_filter": 0, "label": "Exchange Gain / Loss Account", @@ -682,7 +659,6 @@ "hidden": 0, "ignore_user_permissions": 0, "ignore_xss_filter": 0, - "in_filter": 0, "in_list_view": 0, "in_standard_filter": 0, "length": 0, @@ -711,7 +687,6 @@ "hidden": 0, "ignore_user_permissions": 1, "ignore_xss_filter": 0, - "in_filter": 0, "in_list_view": 0, "in_standard_filter": 0, "label": "Default Payable Account", @@ -742,7 +717,6 @@ "hidden": 0, "ignore_user_permissions": 1, "ignore_xss_filter": 0, - "in_filter": 0, "in_list_view": 0, "in_standard_filter": 0, "label": "Default Cost of Goods Sold Account", @@ -771,7 +745,6 @@ "hidden": 0, "ignore_user_permissions": 1, "ignore_xss_filter": 0, - "in_filter": 0, "in_list_view": 0, "in_standard_filter": 0, "label": "Default Income Account", @@ -789,6 +762,35 @@ "set_only_once": 0, "unique": 0 }, + { + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "depends_on": "eval:!doc.__islocal", + "fieldname": "default_payroll_payable_account", + "fieldtype": "Link", + "hidden": 0, + "ignore_user_permissions": 1, + "ignore_xss_filter": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Default Payroll Payable Account", + "length": 0, + "no_copy": 1, + "options": "Account", + "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, @@ -799,7 +801,6 @@ "hidden": 0, "ignore_user_permissions": 0, "ignore_xss_filter": 0, - "in_filter": 0, "in_list_view": 0, "in_standard_filter": 0, "label": "Round Off Cost Center", @@ -828,7 +829,6 @@ "hidden": 0, "ignore_user_permissions": 0, "ignore_xss_filter": 0, - "in_filter": 0, "in_list_view": 0, "in_standard_filter": 0, "length": 0, @@ -856,7 +856,6 @@ "hidden": 0, "ignore_user_permissions": 1, "ignore_xss_filter": 0, - "in_filter": 0, "in_list_view": 0, "in_standard_filter": 0, "label": "Default Cost Center", @@ -885,7 +884,6 @@ "hidden": 0, "ignore_user_permissions": 0, "ignore_xss_filter": 0, - "in_filter": 0, "in_list_view": 0, "in_standard_filter": 0, "label": "Credit Limit", @@ -915,7 +913,6 @@ "hidden": 0, "ignore_user_permissions": 0, "ignore_xss_filter": 0, - "in_filter": 0, "in_list_view": 0, "in_standard_filter": 0, "length": 0, @@ -942,7 +939,6 @@ "hidden": 0, "ignore_user_permissions": 0, "ignore_xss_filter": 0, - "in_filter": 0, "in_list_view": 0, "in_standard_filter": 0, "label": "Credit Days Based On", @@ -972,7 +968,6 @@ "hidden": 0, "ignore_user_permissions": 0, "ignore_xss_filter": 0, - "in_filter": 0, "in_list_view": 0, "in_standard_filter": 0, "label": "Credit Days", @@ -1002,7 +997,6 @@ "hidden": 0, "ignore_user_permissions": 0, "ignore_xss_filter": 0, - "in_filter": 0, "in_list_view": 0, "in_standard_filter": 0, "label": "Stock Settings", @@ -1029,7 +1023,6 @@ "hidden": 0, "ignore_user_permissions": 1, "ignore_xss_filter": 0, - "in_filter": 0, "in_list_view": 0, "in_standard_filter": 0, "label": "Stock Received But Not Billed", @@ -1057,7 +1050,6 @@ "hidden": 0, "ignore_user_permissions": 1, "ignore_xss_filter": 0, - "in_filter": 0, "in_list_view": 0, "in_standard_filter": 0, "label": "Stock Adjustment Account", @@ -1085,7 +1077,6 @@ "hidden": 0, "ignore_user_permissions": 0, "ignore_xss_filter": 0, - "in_filter": 0, "in_list_view": 0, "in_standard_filter": 0, "length": 0, @@ -1112,7 +1103,6 @@ "hidden": 0, "ignore_user_permissions": 1, "ignore_xss_filter": 0, - "in_filter": 0, "in_list_view": 0, "in_standard_filter": 0, "label": "Expenses Included In Valuation", @@ -1140,7 +1130,6 @@ "hidden": 0, "ignore_user_permissions": 0, "ignore_xss_filter": 0, - "in_filter": 0, "in_list_view": 0, "in_standard_filter": 0, "label": "Fixed Asset Depreciation Settings", @@ -1168,7 +1157,6 @@ "hidden": 0, "ignore_user_permissions": 0, "ignore_xss_filter": 0, - "in_filter": 0, "in_list_view": 0, "in_standard_filter": 0, "label": "Accumulated Depreciation Account", @@ -1197,7 +1185,6 @@ "hidden": 0, "ignore_user_permissions": 0, "ignore_xss_filter": 0, - "in_filter": 0, "in_list_view": 0, "in_standard_filter": 0, "label": "Depreciation Expense Account", @@ -1226,7 +1213,6 @@ "hidden": 0, "ignore_user_permissions": 0, "ignore_xss_filter": 0, - "in_filter": 0, "in_list_view": 0, "in_standard_filter": 0, "length": 0, @@ -1253,7 +1239,6 @@ "hidden": 0, "ignore_user_permissions": 0, "ignore_xss_filter": 0, - "in_filter": 0, "in_list_view": 0, "in_standard_filter": 0, "label": "Gain/Loss Account on Asset Disposal", @@ -1282,7 +1267,6 @@ "hidden": 0, "ignore_user_permissions": 0, "ignore_xss_filter": 0, - "in_filter": 0, "in_list_view": 0, "in_standard_filter": 0, "label": "Asset Depreciation Cost Center", @@ -1312,7 +1296,6 @@ "hidden": 0, "ignore_user_permissions": 0, "ignore_xss_filter": 0, - "in_filter": 0, "in_list_view": 0, "in_standard_filter": 0, "label": "Company Info", @@ -1339,7 +1322,6 @@ "hidden": 0, "ignore_user_permissions": 0, "ignore_xss_filter": 0, - "in_filter": 0, "in_list_view": 0, "in_standard_filter": 0, "label": "Address", @@ -1368,7 +1350,6 @@ "hidden": 0, "ignore_user_permissions": 0, "ignore_xss_filter": 0, - "in_filter": 0, "in_list_view": 0, "in_standard_filter": 0, "length": 0, @@ -1396,7 +1377,6 @@ "hidden": 0, "ignore_user_permissions": 0, "ignore_xss_filter": 0, - "in_filter": 0, "in_list_view": 0, "in_standard_filter": 0, "label": "Phone No", @@ -1426,7 +1406,6 @@ "hidden": 0, "ignore_user_permissions": 0, "ignore_xss_filter": 0, - "in_filter": 0, "in_list_view": 0, "in_standard_filter": 0, "label": "Fax", @@ -1456,7 +1435,6 @@ "hidden": 0, "ignore_user_permissions": 0, "ignore_xss_filter": 0, - "in_filter": 0, "in_list_view": 0, "in_standard_filter": 0, "label": "Email", @@ -1486,7 +1464,6 @@ "hidden": 0, "ignore_user_permissions": 0, "ignore_xss_filter": 0, - "in_filter": 0, "in_list_view": 0, "in_standard_filter": 0, "label": "Website", @@ -1516,7 +1493,6 @@ "hidden": 0, "ignore_user_permissions": 0, "ignore_xss_filter": 0, - "in_filter": 0, "in_list_view": 0, "in_standard_filter": 0, "label": "", @@ -1546,7 +1522,6 @@ "hidden": 0, "ignore_user_permissions": 0, "ignore_xss_filter": 0, - "in_filter": 0, "in_list_view": 0, "in_standard_filter": 0, "label": "Registration Details", @@ -1575,7 +1550,6 @@ "hidden": 0, "ignore_user_permissions": 0, "ignore_xss_filter": 0, - "in_filter": 0, "in_list_view": 0, "in_standard_filter": 0, "label": "Delete Company Transactions", @@ -1606,7 +1580,7 @@ "istable": 0, "max_attachments": 0, "menu_index": 0, - "modified": "2016-11-23 16:32:04.893315", + "modified": "2017-02-08 01:25:21.168998", "modified_by": "Administrator", "module": "Setup", "name": "Company", @@ -1622,7 +1596,6 @@ "export": 0, "if_owner": 0, "import": 0, - "is_custom": 0, "permlevel": 0, "print": 1, "read": 1, @@ -1643,7 +1616,6 @@ "export": 0, "if_owner": 0, "import": 0, - "is_custom": 0, "permlevel": 0, "print": 1, "read": 1, @@ -1664,7 +1636,6 @@ "export": 0, "if_owner": 0, "import": 0, - "is_custom": 0, "permlevel": 0, "print": 0, "read": 1, @@ -1685,7 +1656,6 @@ "export": 0, "if_owner": 0, "import": 0, - "is_custom": 0, "permlevel": 0, "print": 0, "read": 1, @@ -1706,7 +1676,6 @@ "export": 0, "if_owner": 0, "import": 0, - "is_custom": 0, "permlevel": 0, "print": 0, "read": 1, @@ -1727,7 +1696,6 @@ "export": 0, "if_owner": 0, "import": 0, - "is_custom": 0, "permlevel": 0, "print": 0, "read": 1, @@ -1748,7 +1716,6 @@ "export": 0, "if_owner": 0, "import": 0, - "is_custom": 0, "permlevel": 0, "print": 0, "read": 1, @@ -1764,5 +1731,6 @@ "read_only": 0, "read_only_onload": 0, "sort_order": "ASC", + "track_changes": 0, "track_seen": 0 } \ No newline at end of file diff --git a/erpnext/setup/doctype/company/company.py b/erpnext/setup/doctype/company/company.py index 93f02f8e3fe..dd7bca9f73a 100644 --- a/erpnext/setup/doctype/company/company.py +++ b/erpnext/setup/doctype/company/company.py @@ -50,7 +50,7 @@ class Company(Document): def validate_default_accounts(self): for field in ["default_bank_account", "default_cash_account", "default_receivable_account", "default_payable_account", "default_expense_account", "default_income_account", "stock_received_but_not_billed", - "stock_adjustment_account", "expenses_included_in_valuation"]: + "stock_adjustment_account", "expenses_included_in_valuation", "default_payroll_payable_account"]: if self.get(field): for_company = frappe.db.get_value("Account", self.get(field), "company") if for_company != self.name: diff --git a/erpnext/setup/doctype/company/fixtures/india/__init__.py b/erpnext/setup/doctype/company/fixtures/india/__init__.py index 0f4bd4f59cb..2cf43c9b436 100644 --- a/erpnext/setup/doctype/company/fixtures/india/__init__.py +++ b/erpnext/setup/doctype/company/fixtures/india/__init__.py @@ -10,7 +10,9 @@ def install(company): {'doctype': 'Salary Component', 'salary_component': 'Professional Tax', 'description': 'Professional Tax', 'type': 'Deduction'}, {'doctype': 'Salary Component', 'salary_component': 'Provident Fund', 'description': 'Provident fund', 'type': 'Deduction'}, {'doctype': 'Salary Component', 'salary_component': 'House Rent Allowance', 'description': 'House Rent Allowance', 'type': 'Earning'}, - {'doctype': 'Salary Component', 'salary_component': 'Basic', 'description': 'Basic', 'type': 'Earning'} + {'doctype': 'Salary Component', 'salary_component': 'Basic', 'description': 'Basic', 'type': 'Earning'}, + {'doctype': 'Salary Component', 'salary_component': 'Arrear', 'description': 'Arrear', 'type': 'Earning'}, + {'doctype': 'Salary Component', 'salary_component': 'Leave Encashment', 'description': 'Leave Encashment', 'type': 'Earning'} ] for d in docs: diff --git a/erpnext/setup/setup_wizard/install_fixtures.py b/erpnext/setup/setup_wizard/install_fixtures.py index 5e08203c5af..e6b4208ed82 100644 --- a/erpnext/setup/setup_wizard/install_fixtures.py +++ b/erpnext/setup/setup_wizard/install_fixtures.py @@ -33,6 +33,9 @@ def install(country=None): # salary component {'doctype': 'Salary Component', 'salary_component': _('Income Tax'), 'description': _('Income Tax'), 'type': 'Deduction'}, {'doctype': 'Salary Component', 'salary_component': _('Basic'), 'description': _('Basic'), 'type': 'Earning'}, + {'doctype': 'Salary Component', 'salary_component': _('Arrear'), 'description': _('Arrear'), 'type': 'Earning'}, + {'doctype': 'Salary Component', 'salary_component': _('Leave Encashment'), 'description': _('Leave Encashment'), 'type': 'Earning'}, + # expense claim type {'doctype': 'Expense Claim Type', 'name': _('Calls'), 'expense_type': _('Calls')},