feat: New Payroll module (#21990)
* feat: Moved Document to Payroll Module
* feat: Moved Reports to Payroll Module
* feat: Moved Print fromat With Patch
* feat: Moved Notifiction to Payroll Module and patches
* feat: added dashboard and desk page to Payroll
* feat: Payroll Dashboard
* feat: Module onboarding
* feat: Income tax Deductions Report
* feat: Ecs Checklist Report
* feat: Provident Fund Report
* feat: Professional Fund report and commonified Code
* feat: Total Payments Based On Payment Mode Report
* fix: refactor and added chart Total Payments Based On Payment Mode
* feat: Payroll Settings
* fix: Bank remittance Report
* feat(Payroll based on): Considered unmarked days
* feat: Added Help for condition an formula in Salary structure
* fix: requested changes
* fix: rename report Ecs checklist to salary_payments_via_ecs
* fix: renamed report report/total_payments_based_on_payment_mode
* fix: added role via setup.py for regional report
* feat: added All reports to desk page
* fix: frappe.reload doc in all patches
* fix: codacy
* fix: frappe.reload_doctype for patches
* patch: is_income_tax_component and component_type for salary component
* fix: uncommented code
* test: fixture
* fix: test
* test: test_payment_days_based_on_attendance
diff --git a/erpnext/regional/india/setup.py b/erpnext/regional/india/setup.py
index 8593966..290694a 100644
--- a/erpnext/regional/india/setup.py
+++ b/erpnext/regional/india/setup.py
@@ -60,6 +60,19 @@
]
)).insert()
+ for report_name in ('Professional Tax Deductions', 'Provident Fund Deductions'):
+
+ if not frappe.db.get_value('Custom Role', dict(report=report_name)):
+ frappe.get_doc(dict(
+ doctype='Custom Role',
+ report=report_name,
+ roles= [
+ dict(role='HR User'),
+ dict(role='HR Manager'),
+ dict(role='Employee')
+ ]
+ )).insert()
+
def add_permissions():
for doctype in ('GST HSN Code', 'GST Settings', 'GSTR 3B Report', 'Lower Deduction Certificate'):
add_permission(doctype, 'All', 0)
@@ -402,10 +415,45 @@
'Purchase Receipt Item': [hsn_sac_field, nil_rated_exempt, is_non_gst],
'Purchase Invoice Item': [hsn_sac_field, nil_rated_exempt, is_non_gst],
'Material Request Item': [hsn_sac_field, nil_rated_exempt, is_non_gst],
+ 'Salary Component': [
+ dict(fieldname= 'component_type',
+ label= 'Component Type',
+ fieldtype= 'Select',
+ insert_after= 'description',
+ options= "\nProvident Fund\nAdditional Provident Fund\nProvident Fund Loan\nProfessional Tax",
+ depends_on = 'eval:doc.type == "Deduction"'
+ )
+ ],
'Employee': [
- dict(fieldname='ifsc_code', label='IFSC Code',
- fieldtype='Data', insert_after='bank_ac_no', print_hide=1,
- depends_on='eval:doc.salary_mode == "Bank"')
+ dict(fieldname='ifsc_code',
+ label='IFSC Code',
+ fieldtype='Data',
+ insert_after='bank_ac_no',
+ print_hide=1,
+ depends_on='eval:doc.salary_mode == "Bank"'
+ ),
+ dict(
+ fieldname = 'pan_number',
+ label = 'PAN Number',
+ fieldtype = 'Data',
+ insert_after = 'payroll_cost_center',
+ print_hide = 1
+ ),
+ dict(
+ fieldname = 'micr_code',
+ label = 'MICR Code',
+ fieldtype = 'Data',
+ insert_after = 'ifsc_code',
+ print_hide = 1,
+ depends_on='eval:doc.salary_mode == "Bank"'
+ ),
+ dict(
+ fieldname = 'provident_fund_account',
+ label = 'Provident Fund Account',
+ fieldtype = 'Data',
+ insert_after = 'pan_number'
+ )
+
],
'Company': [
dict(fieldname='hra_section', label='HRA Settings',
diff --git a/erpnext/regional/india/utils.py b/erpnext/regional/india/utils.py
index 9fe29eb..05ffa87 100644
--- a/erpnext/regional/india/utils.py
+++ b/erpnext/regional/india/utils.py
@@ -6,7 +6,7 @@
from erpnext.controllers.taxes_and_totals import get_itemised_tax, get_itemised_taxable_amount
from erpnext.controllers.accounts_controller import get_taxes_and_charges
from erpnext.hr.utils import get_salary_assignment
-from erpnext.hr.doctype.salary_structure.salary_structure import make_salary_slip
+from erpnext.payroll.doctype.salary_structure.salary_structure import make_salary_slip
from erpnext.regional.india import number_state_mapping
from six import string_types
from erpnext.accounts.general_ledger import make_gl_entries