fix: remove HR/Payroll patches
diff --git a/erpnext/patches.txt b/erpnext/patches.txt
index 892e89d..e57fdf9 100644
--- a/erpnext/patches.txt
+++ b/erpnext/patches.txt
@@ -6,11 +6,9 @@
erpnext.patches.v11_0.refactor_autoname_naming
erpnext.patches.v14_0.change_is_subcontracted_fieldtype
execute:frappe.reload_doc("accounts", "doctype", "POS Payment Method") #2020-05-28
-execute:frappe.reload_doc("HR", "doctype", "HR Settings") #2020-01-16 #2020-07-24
erpnext.patches.v4_2.update_requested_and_ordered_qty #2021-03-31
erpnext.patches.v5_7.update_item_description_based_on_item_master
erpnext.patches.v4_2.repost_reserved_qty #2021-03-31
-execute:frappe.reload_doc("Payroll", "doctype", "salary_slip")
erpnext.patches.v8_1.setup_gst_india #2017-06-27
erpnext.patches.v8_1.removed_roles_from_gst_report_non_indian_account #16-08-2018
erpnext.patches.v8_7.sync_india_custom_fields
@@ -18,27 +16,20 @@
erpnext.patches.v10_0.rename_price_to_rate_in_pricing_rule
erpnext.patches.v10_0.set_currency_in_pricing_rule
erpnext.patches.v10_0.update_translatable_fields
-erpnext.patches.v10_0.rename_offer_letter_to_job_offer
execute:frappe.delete_doc('DocType', 'Production Planning Tool', ignore_missing=True)
-erpnext.patches.v10_0.migrate_daily_work_summary_settings_to_daily_work_summary_group # 24-12-2018
erpnext.patches.v10_0.add_default_cash_flow_mappers
erpnext.patches.v11_0.rename_duplicate_item_code_values
erpnext.patches.v11_0.make_quality_inspection_template
erpnext.patches.v11_0.merge_land_unit_with_location
erpnext.patches.v11_0.add_index_on_nestedset_doctypes
erpnext.patches.v11_0.remove_modules_setup_page
-erpnext.patches.v11_0.move_leave_approvers_from_employee #13-06-2018
erpnext.patches.v11_0.update_department_lft_rgt
-erpnext.patches.v11_0.add_default_email_template_for_leave
-erpnext.patches.v11_0.set_default_email_template_in_hr #08-06-2018
erpnext.patches.v11_0.uom_conversion_data #30-06-2018
erpnext.patches.v11_0.update_account_type_in_party_type
erpnext.patches.v11_0.rename_supplier_type_to_supplier_group
erpnext.patches.v10_1.transfer_subscription_to_auto_repeat
erpnext.patches.v11_0.update_brand_in_item_price
erpnext.patches.v11_0.create_default_success_action
-erpnext.patches.v11_0.rename_field_max_days_allowed
-erpnext.patches.v11_0.create_salary_structure_assignments
erpnext.patches.v11_0.rebuild_tree_for_company
erpnext.patches.v11_0.create_department_records_for_each_company
erpnext.patches.v11_0.make_location_from_warehouse
@@ -53,10 +44,8 @@
erpnext.patches.v11_0.update_total_qty_field
erpnext.patches.v11_0.update_sales_partner_type
erpnext.patches.v11_0.rename_asset_adjustment_doctype
-erpnext.patches.v11_0.set_salary_component_properties
erpnext.patches.v11_0.set_user_permissions_for_department
erpnext.patches.v11_0.hr_ux_cleanups
-erpnext.patches.v11_0.skip_user_permission_check_for_department
erpnext.patches.v11_0.set_department_for_doctypes
erpnext.patches.v11_0.update_allow_transfer_for_manufacture
erpnext.patches.v11_0.add_item_group_defaults
@@ -70,13 +59,11 @@
execute:frappe.delete_doc_if_exists("Page", "stock-analytics")
execute:frappe.delete_doc_if_exists("Page", "production-analytics")
erpnext.patches.v11_0.ewaybill_fields_gst_india #2018-11-13 #2019-01-09 #2019-04-01 #2019-04-26 #2019-05-03
-erpnext.patches.v11_0.drop_column_max_days_allowed
erpnext.patches.v10_0.item_barcode_childtable_migrate # 16-02-2019
erpnext.patches.v11_0.update_delivery_trip_status
erpnext.patches.v11_0.set_missing_gst_hsn_code
erpnext.patches.v11_0.rename_bom_wo_fields
erpnext.patches.v12_0.set_default_homepage_type
-erpnext.patches.v11_0.rename_additional_salary_component_additional_salary
erpnext.patches.v11_0.renamed_from_to_fields_in_project
erpnext.patches.v11_0.add_permissions_in_gst_settings #2020-04-04
erpnext.patches.v11_1.setup_guardian_role
@@ -97,7 +84,6 @@
erpnext.patches.v12_0.move_item_tax_to_item_tax_template
erpnext.patches.v11_1.set_variant_based_on
erpnext.patches.v11_1.woocommerce_set_creation_user
-erpnext.patches.v11_1.set_salary_details_submittable
erpnext.patches.v11_1.rename_depends_on_lwp
execute:frappe.delete_doc("Report", "Inactive Items")
erpnext.patches.v11_1.delete_scheduling_tool
@@ -129,7 +115,6 @@
execute:frappe.reload_doc('desk', 'doctype', 'dashboard_chart')
execute:frappe.reload_doc('desk', 'doctype', 'dashboard_chart_field')
erpnext.patches.v12_0.remove_bank_remittance_custom_fields
-erpnext.patches.v12_0.generate_leave_ledger_entries #04-11-2020
execute:frappe.delete_doc_if_exists("Report", "Loan Repayment")
erpnext.patches.v12_0.move_credit_limit_to_customer_credit_limit
erpnext.patches.v12_0.add_variant_of_in_item_attribute_table
@@ -143,7 +128,6 @@
erpnext.patches.v12_0.set_payment_entry_status
erpnext.patches.v12_0.update_owner_fields_in_acc_dimension_custom_fields
erpnext.patches.v12_0.add_export_type_field_in_party_master
-erpnext.patches.v12_0.remove_denied_leaves_from_leave_ledger
erpnext.patches.v12_0.update_price_or_product_discount
erpnext.patches.v12_0.set_production_capacity_in_workstation
erpnext.patches.v12_0.set_employee_preferred_emails
@@ -152,7 +136,6 @@
erpnext.patches.v12_0.add_eway_bill_in_delivery_note
erpnext.patches.v12_0.set_lead_title_field
erpnext.patches.v12_0.set_permission_einvoicing
-erpnext.patches.v12_0.set_job_offer_applicant_email
erpnext.patches.v12_0.create_irs_1099_field_united_states
erpnext.patches.v12_0.move_bank_account_swift_number_to_bank
erpnext.patches.v12_0.rename_bank_reconciliation
@@ -165,17 +148,11 @@
erpnext.patches.v12_0.set_total_batch_quantity
erpnext.patches.v12_0.rename_mws_settings_fields
erpnext.patches.v12_0.set_updated_purpose_in_pick_list
-erpnext.patches.v12_0.set_default_payroll_based_on
erpnext.patches.v12_0.repost_stock_ledger_entries_for_target_warehouse
erpnext.patches.v12_0.update_end_date_and_status_in_email_campaign
-erpnext.patches.v13_0.move_tax_slabs_from_payroll_period_to_income_tax_slab #123
erpnext.patches.v12_0.fix_quotation_expired_status
erpnext.patches.v12_0.rename_pos_closing_doctype
erpnext.patches.v13_0.replace_pos_payment_mode_table #2020-12-29
-erpnext.patches.v12_0.remove_duplicate_leave_ledger_entries #2020-05-22
-erpnext.patches.v13_0.patch_to_fix_reverse_linking_in_additional_salary_encashment_and_incentive
-execute:frappe.reload_doc("HR", "doctype", "Employee Advance")
-erpnext.patches.v12_0.move_due_advance_amount_to_pending_amount
execute:frappe.delete_doc_if_exists("Page", "appointment-analytic")
execute:frappe.rename_doc("Desk Page", "Getting Started", "Home", force=True)
erpnext.patches.v12_0.unset_customer_supplier_based_on_type_of_item_price
@@ -202,11 +179,8 @@
erpnext.patches.v12_0.set_multi_uom_in_rfq
erpnext.patches.v13_0.delete_old_sales_reports
execute:frappe.delete_doc_if_exists("DocType", "Bank Reconciliation")
-erpnext.patches.v13_0.move_doctype_reports_and_notification_from_hr_to_payroll #22-06-2020
-erpnext.patches.v13_0.move_payroll_setting_separately_from_hr_settings #22-06-2020
erpnext.patches.v12_0.create_itc_reversal_custom_fields
execute:frappe.reload_doc("regional", "doctype", "e_invoice_settings")
-erpnext.patches.v13_0.check_is_income_tax_component #22-06-2020
erpnext.patches.v13_0.loyalty_points_entry_for_pos_invoice #22-07-2020
erpnext.patches.v12_0.add_taxjar_integration_field
erpnext.patches.v12_0.fix_percent_complete_for_projects
@@ -218,7 +192,6 @@
erpnext.patches.v12_0.update_state_code_for_daman_and_diu
erpnext.patches.v12_0.rename_lost_reason_detail
erpnext.patches.v13_0.drop_razorpay_payload_column
-erpnext.patches.v13_0.update_start_end_date_for_old_shift_assignment
erpnext.patches.v13_0.setting_custom_roles_for_some_regional_reports
erpnext.patches.v13_0.rename_issue_doctype_fields
erpnext.patches.v13_0.change_default_pos_print_format
@@ -227,8 +200,6 @@
erpnext.patches.v13_0.print_uom_after_quantity_patch
erpnext.patches.v13_0.set_payment_channel_in_payment_gateway_account
erpnext.patches.v12_0.setup_einvoice_fields #2020-12-02
-erpnext.patches.v13_0.updates_for_multi_currency_payroll
-erpnext.patches.v13_0.update_reason_for_resignation_in_employee
execute:frappe.delete_doc("Report", "Quoted Item Comparison")
erpnext.patches.v13_0.update_member_email_address
erpnext.patches.v13_0.update_pos_closing_entry_in_merge_log
@@ -237,7 +208,6 @@
execute:frappe.rename_doc("Workspace", "Loan", "Loan Management", ignore_if_exists=True, force=True)
erpnext.patches.v13_0.create_uae_pos_invoice_fields
erpnext.patches.v13_0.update_project_template_tasks
-erpnext.patches.v13_0.set_company_in_leave_ledger_entry
erpnext.patches.v13_0.convert_qi_parameter_to_link_field
erpnext.patches.v13_0.add_naming_series_to_old_projects # 1-02-2021
erpnext.patches.v13_0.update_payment_terms_outstanding
@@ -257,16 +227,13 @@
erpnext.patches.v12_0.purchase_receipt_status
erpnext.patches.v13_0.fix_non_unique_represents_company
erpnext.patches.v12_0.add_document_type_field_for_italy_einvoicing
-erpnext.patches.v13_0.make_non_standard_user_type #13-04-2021 #17-01-2022
erpnext.patches.v13_0.update_shipment_status
erpnext.patches.v13_0.remove_attribute_field_from_item_variant_setting
erpnext.patches.v12_0.add_ewaybill_validity_field
erpnext.patches.v13_0.set_pos_closing_as_failed
-erpnext.patches.v13_0.rename_stop_to_send_birthday_reminders
execute:frappe.rename_doc("Workspace", "Loan Management", "Loans", force=True)
erpnext.patches.v13_0.update_timesheet_changes
erpnext.patches.v13_0.add_doctype_to_sla #14-06-2021
-erpnext.patches.v13_0.set_training_event_attendance
erpnext.patches.v13_0.bill_for_rejected_quantity_in_purchase_invoice
erpnext.patches.v13_0.rename_issue_status_hold_to_on_hold
erpnext.patches.v13_0.update_response_by_variance
@@ -304,7 +271,6 @@
erpnext.patches.v13_0.modify_invalid_gain_loss_gl_entries #2
erpnext.patches.v13_0.fix_additional_cost_in_mfg_stock_entry
erpnext.patches.v13_0.set_status_in_maintenance_schedule_table
-erpnext.patches.v13_0.add_default_interview_notification_templates
erpnext.patches.v13_0.enable_scheduler_job_for_item_reposting
erpnext.patches.v13_0.requeue_failed_reposts
erpnext.patches.v13_0.update_job_card_status
@@ -322,7 +288,6 @@
erpnext.patches.v13_0.wipe_serial_no_field_for_0_qty
erpnext.patches.v13_0.disable_ksa_print_format_for_others # 16-12-2021
erpnext.patches.v13_0.update_tax_category_for_rcm
-erpnext.patches.v14_0.set_payroll_cost_centers
erpnext.patches.v13_0.agriculture_deprecation_warning
erpnext.patches.v13_0.hospitality_deprecation_warning
erpnext.patches.v13_0.update_asset_quantity_field
@@ -334,7 +299,6 @@
[post_model_sync]
execute:frappe.delete_doc_if_exists('Workspace', 'ERPNext Integrations Settings')
erpnext.patches.v14_0.rename_ongoing_status_in_sla_documents
-erpnext.patches.v14_0.add_default_exit_questionnaire_notification_template
erpnext.patches.v14_0.delete_shopify_doctypes
erpnext.patches.v14_0.delete_healthcare_doctypes
erpnext.patches.v14_0.delete_hub_doctypes
@@ -343,7 +307,6 @@
erpnext.patches.v14_0.delete_education_doctypes
erpnext.patches.v14_0.delete_datev_doctypes
erpnext.patches.v14_0.rearrange_company_fields
-erpnext.patches.v14_0.update_leave_notification_template
erpnext.patches.v14_0.restore_einvoice_fields
erpnext.patches.v13_0.update_sane_transfer_against
erpnext.patches.v12_0.add_company_link_to_einvoice_settings
@@ -358,20 +321,16 @@
erpnext.patches.v13_0.update_accounts_in_loan_docs
erpnext.patches.v14_0.update_batch_valuation_flag
erpnext.patches.v14_0.delete_non_profit_doctypes
-erpnext.patches.v13_0.update_employee_advance_status
erpnext.patches.v13_0.add_cost_center_in_loans
erpnext.patches.v13_0.set_return_against_in_pos_invoice_references
erpnext.patches.v13_0.remove_unknown_links_to_prod_plan_items # 24-03-2022
-erpnext.patches.v13_0.update_expense_claim_status_for_paid_advances
erpnext.patches.v13_0.create_gst_custom_fields_in_quotation
erpnext.patches.v13_0.copy_custom_field_filters_to_website_item
erpnext.patches.v13_0.change_default_item_manufacturer_fieldtype
erpnext.patches.v13_0.requeue_recoverable_reposts
erpnext.patches.v14_0.discount_accounting_separation
-erpnext.patches.v14_0.delete_employee_transfer_property_doctype
erpnext.patches.v13_0.create_accounting_dimensions_in_orders
erpnext.patches.v13_0.set_per_billed_in_return_delivery_note
execute:frappe.delete_doc("DocType", "Naming Series")
-erpnext.patches.v13_0.set_payroll_entry_status
erpnext.patches.v13_0.job_card_status_on_hold
erpnext.patches.v14_0.delete_hr_payroll_doctypes
\ No newline at end of file
diff --git a/erpnext/patches/v10_0/migrate_daily_work_summary_settings_to_daily_work_summary_group.py b/erpnext/patches/v10_0/migrate_daily_work_summary_settings_to_daily_work_summary_group.py
deleted file mode 100644
index 2cbbe05..0000000
--- a/erpnext/patches/v10_0/migrate_daily_work_summary_settings_to_daily_work_summary_group.py
+++ /dev/null
@@ -1,58 +0,0 @@
-# Copyright (c) 2018, Frappe and Contributors
-# License: GNU General Public License v3. See license.txt
-
-
-import frappe
-
-
-def execute():
- if not frappe.db.table_exists("Daily Work Summary Group"):
- frappe.reload_doc("hr", "doctype", "daily_work_summary_group")
- frappe.reload_doc("hr", "doctype", "daily_work_summary_group_user")
-
- # check if Daily Work Summary Settings Company table exists
- try:
- frappe.db.sql("DESC `tabDaily Work Summary Settings Company`")
- except Exception:
- return
-
- # get the previously saved settings
- previous_setting = get_previous_setting()
- if previous_setting["companies"]:
- for d in previous_setting["companies"]:
- users = frappe.get_list(
- "Employee", dict(company=d.company, user_id=("!=", " ")), "user_id as user"
- )
- if len(users):
- # create new group entry for each company entry
- new_group = frappe.get_doc(
- dict(
- doctype="Daily Work Summary Group",
- name="Daily Work Summary for " + d.company,
- users=users,
- send_emails_at=d.send_emails_at,
- subject=previous_setting["subject"],
- message=previous_setting["message"],
- )
- )
- new_group.flags.ignore_permissions = True
- new_group.flags.ignore_validate = True
- new_group.insert(ignore_if_duplicate=True)
-
- frappe.delete_doc("DocType", "Daily Work Summary Settings")
- frappe.delete_doc("DocType", "Daily Work Summary Settings Company")
-
-
-def get_previous_setting():
- obj = {}
- setting_data = frappe.db.sql(
- "select field, value from tabSingles where doctype='Daily Work Summary Settings'"
- )
- for field, value in setting_data:
- obj[field] = value
- obj["companies"] = get_setting_companies()
- return obj
-
-
-def get_setting_companies():
- return frappe.db.sql("select * from `tabDaily Work Summary Settings Company`", as_dict=True)
diff --git a/erpnext/patches/v10_0/rename_offer_letter_to_job_offer.py b/erpnext/patches/v10_0/rename_offer_letter_to_job_offer.py
deleted file mode 100644
index a2deab6..0000000
--- a/erpnext/patches/v10_0/rename_offer_letter_to_job_offer.py
+++ /dev/null
@@ -1,10 +0,0 @@
-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")
diff --git a/erpnext/patches/v11_0/add_default_email_template_for_leave.py b/erpnext/patches/v11_0/add_default_email_template_for_leave.py
deleted file mode 100644
index 1fddc7f..0000000
--- a/erpnext/patches/v11_0/add_default_email_template_for_leave.py
+++ /dev/null
@@ -1,38 +0,0 @@
-import os
-
-import frappe
-from frappe import _
-
-
-def execute():
- frappe.reload_doc("email", "doctype", "email_template")
-
- if not frappe.db.exists("Email Template", _("Leave Approval Notification")):
- base_path = frappe.get_app_path("erpnext", "hr", "doctype")
- response = frappe.read_file(
- os.path.join(base_path, "leave_application/leave_application_email_template.html")
- )
- frappe.get_doc(
- {
- "doctype": "Email Template",
- "name": _("Leave Approval Notification"),
- "response": response,
- "subject": _("Leave Approval Notification"),
- "owner": frappe.session.user,
- }
- ).insert(ignore_permissions=True)
-
- if not frappe.db.exists("Email Template", _("Leave Status Notification")):
- base_path = frappe.get_app_path("erpnext", "hr", "doctype")
- response = frappe.read_file(
- os.path.join(base_path, "leave_application/leave_application_email_template.html")
- )
- frappe.get_doc(
- {
- "doctype": "Email Template",
- "name": _("Leave Status Notification"),
- "response": response,
- "subject": _("Leave Status Notification"),
- "owner": frappe.session.user,
- }
- ).insert(ignore_permissions=True)
diff --git a/erpnext/patches/v11_0/create_salary_structure_assignments.py b/erpnext/patches/v11_0/create_salary_structure_assignments.py
deleted file mode 100644
index b81e867..0000000
--- a/erpnext/patches/v11_0/create_salary_structure_assignments.py
+++ /dev/null
@@ -1,91 +0,0 @@
-# Copyright (c) 2017, Frappe and Contributors
-# License: GNU General Public License v3. See license.txt
-
-
-from datetime import datetime
-
-import frappe
-from frappe.utils import getdate
-
-from erpnext.payroll.doctype.salary_structure_assignment.salary_structure_assignment import (
- DuplicateAssignment,
-)
-
-
-def execute():
- frappe.reload_doc("Payroll", "doctype", "Salary Structure")
- frappe.reload_doc("Payroll", "doctype", "Salary Structure Assignment")
- frappe.db.sql(
- """
- delete from `tabSalary Structure Assignment`
- where salary_structure in (select name from `tabSalary Structure` where is_active='No' or docstatus!=1)
- """
- )
- if frappe.db.table_exists("Salary Structure Employee"):
- ss_details = frappe.db.sql(
- """
- select sse.employee, sse.employee_name, sse.from_date, sse.to_date,
- sse.base, sse.variable, sse.parent as salary_structure, ss.company
- from `tabSalary Structure Employee` sse, `tabSalary Structure` ss
- where ss.name = sse.parent AND ss.is_active='Yes'
- AND sse.employee in (select name from `tabEmployee` where ifNull(status, '') != 'Left')""",
- as_dict=1,
- )
- else:
- cols = ""
- if "base" in frappe.db.get_table_columns("Salary Structure"):
- cols = ", base, variable"
-
- ss_details = frappe.db.sql(
- """
- select name as salary_structure, employee, employee_name, from_date, to_date, company {0}
- from `tabSalary Structure`
- where is_active='Yes'
- AND employee in (select name from `tabEmployee` where ifNull(status, '') != 'Left')
- """.format(
- cols
- ),
- as_dict=1,
- )
-
- all_companies = frappe.db.get_all("Company", fields=["name", "default_currency"])
- for d in all_companies:
- company = d.name
- company_currency = d.default_currency
-
- frappe.db.sql(
- """update `tabSalary Structure` set currency = %s where company=%s""",
- (company_currency, company),
- )
-
- for d in ss_details:
- try:
- joining_date, relieving_date = frappe.db.get_value(
- "Employee", d.employee, ["date_of_joining", "relieving_date"]
- )
- from_date = d.from_date
- if joining_date and getdate(from_date) < joining_date:
- from_date = joining_date
- elif relieving_date and getdate(from_date) > relieving_date:
- continue
- company_currency = frappe.db.get_value("Company", d.company, "default_currency")
-
- s = frappe.new_doc("Salary Structure Assignment")
- s.employee = d.employee
- s.employee_name = d.employee_name
- s.salary_structure = d.salary_structure
- s.from_date = from_date
- s.to_date = d.to_date if isinstance(d.to_date, datetime) else None
- s.base = d.get("base")
- s.variable = d.get("variable")
- s.company = d.company
- s.currency = company_currency
-
- # to migrate the data of the old employees
- s.flags.old_employee = True
- s.save()
- s.submit()
- except DuplicateAssignment:
- pass
-
- frappe.db.sql("update `tabSalary Structure` set docstatus=1")
diff --git a/erpnext/patches/v11_0/drop_column_max_days_allowed.py b/erpnext/patches/v11_0/drop_column_max_days_allowed.py
deleted file mode 100644
index 4b4770d..0000000
--- a/erpnext/patches/v11_0/drop_column_max_days_allowed.py
+++ /dev/null
@@ -1,7 +0,0 @@
-import frappe
-
-
-def execute():
- if frappe.db.exists("DocType", "Leave Type"):
- if "max_days_allowed" in frappe.db.get_table_columns("Leave Type"):
- frappe.db.sql("alter table `tabLeave Type` drop column max_days_allowed")
diff --git a/erpnext/patches/v11_0/move_leave_approvers_from_employee.py b/erpnext/patches/v11_0/move_leave_approvers_from_employee.py
deleted file mode 100644
index f91a7db..0000000
--- a/erpnext/patches/v11_0/move_leave_approvers_from_employee.py
+++ /dev/null
@@ -1,34 +0,0 @@
-import frappe
-from frappe.model.utils.rename_field import rename_field
-
-
-def execute():
- frappe.reload_doc("hr", "doctype", "department_approver")
- frappe.reload_doc("hr", "doctype", "employee")
- frappe.reload_doc("hr", "doctype", "department")
-
- if frappe.db.has_column("Department", "leave_approver"):
- rename_field("Department", "leave_approver", "leave_approvers")
-
- if frappe.db.has_column("Department", "expense_approver"):
- rename_field("Department", "expense_approver", "expense_approvers")
-
- if not frappe.db.table_exists("Employee Leave Approver"):
- return
-
- approvers = frappe.db.sql(
- """select distinct app.leave_approver, emp.department from
- `tabEmployee Leave Approver` app, `tabEmployee` emp
- where app.parenttype = 'Employee'
- and emp.name = app.parent
- """,
- as_dict=True,
- )
-
- for record in approvers:
- if record.department:
- department = frappe.get_doc("Department", record.department)
- if not department:
- return
- if not len(department.leave_approvers):
- department.append("leave_approvers", {"approver": record.leave_approver}).db_insert()
diff --git a/erpnext/patches/v11_0/rename_additional_salary_component_additional_salary.py b/erpnext/patches/v11_0/rename_additional_salary_component_additional_salary.py
deleted file mode 100644
index 036ae8e..0000000
--- a/erpnext/patches/v11_0/rename_additional_salary_component_additional_salary.py
+++ /dev/null
@@ -1,11 +0,0 @@
-import frappe
-
-# this patch should have been included with this PR https://github.com/frappe/erpnext/pull/14302
-
-
-def execute():
- if frappe.db.table_exists("Additional Salary Component"):
- if not frappe.db.table_exists("Additional Salary"):
- frappe.rename_doc("DocType", "Additional Salary Component", "Additional Salary")
-
- frappe.delete_doc("DocType", "Additional Salary Component")
diff --git a/erpnext/patches/v11_0/rename_field_max_days_allowed.py b/erpnext/patches/v11_0/rename_field_max_days_allowed.py
deleted file mode 100644
index 0813770..0000000
--- a/erpnext/patches/v11_0/rename_field_max_days_allowed.py
+++ /dev/null
@@ -1,15 +0,0 @@
-import frappe
-from frappe.model.utils.rename_field import rename_field
-
-
-def execute():
- frappe.db.sql(
- """
- UPDATE `tabLeave Type`
- SET max_days_allowed = '0'
- WHERE trim(coalesce(max_days_allowed, '')) = ''
- """
- )
- frappe.db.sql_ddl("""ALTER table `tabLeave Type` modify max_days_allowed int(8) NOT NULL""")
- frappe.reload_doc("hr", "doctype", "leave_type")
- rename_field("Leave Type", "max_days_allowed", "max_continuous_days_allowed")
diff --git a/erpnext/patches/v11_0/set_default_email_template_in_hr.py b/erpnext/patches/v11_0/set_default_email_template_in_hr.py
deleted file mode 100644
index ee083ca..0000000
--- a/erpnext/patches/v11_0/set_default_email_template_in_hr.py
+++ /dev/null
@@ -1,9 +0,0 @@
-import frappe
-from frappe import _
-
-
-def execute():
- hr_settings = frappe.get_single("HR Settings")
- hr_settings.leave_approval_notification_template = _("Leave Approval Notification")
- hr_settings.leave_status_notification_template = _("Leave Status Notification")
- hr_settings.save()
diff --git a/erpnext/patches/v11_0/set_department_for_doctypes.py b/erpnext/patches/v11_0/set_department_for_doctypes.py
index 4900458..b784772 100644
--- a/erpnext/patches/v11_0/set_department_for_doctypes.py
+++ b/erpnext/patches/v11_0/set_department_for_doctypes.py
@@ -6,19 +6,6 @@
def execute():
doctypes_to_update = {
- "hr": [
- "Appraisal",
- "Leave Allocation",
- "Expense Claim",
- "Salary Slip",
- "Attendance",
- "Training Feedback",
- "Training Result Employee",
- "Leave Application",
- "Employee Advance",
- "Training Event Employee",
- "Payroll Employee Detail",
- ],
"projects": ["Activity Cost", "Timesheet"],
"setup": ["Sales Person"],
}
diff --git a/erpnext/patches/v11_0/set_salary_component_properties.py b/erpnext/patches/v11_0/set_salary_component_properties.py
deleted file mode 100644
index 3ec9f8a..0000000
--- a/erpnext/patches/v11_0/set_salary_component_properties.py
+++ /dev/null
@@ -1,22 +0,0 @@
-import frappe
-
-
-def execute():
- frappe.reload_doc("Payroll", "doctype", "salary_detail")
- frappe.reload_doc("Payroll", "doctype", "salary_component")
-
- frappe.db.sql("update `tabSalary Component` set is_tax_applicable=1 where type='Earning'")
-
- frappe.db.sql(
- """update `tabSalary Component` set variable_based_on_taxable_salary=1
- where type='Deduction' and name in ('TDS', 'Tax Deducted at Source')"""
- )
-
- frappe.db.sql(
- """update `tabSalary Detail` set is_tax_applicable=1
- where parentfield='earnings' and statistical_component=0"""
- )
- frappe.db.sql(
- """update `tabSalary Detail` set variable_based_on_taxable_salary=1
- where parentfield='deductions' and salary_component in ('TDS', 'Tax Deducted at Source')"""
- )
diff --git a/erpnext/patches/v11_0/skip_user_permission_check_for_department.py b/erpnext/patches/v11_0/skip_user_permission_check_for_department.py
deleted file mode 100644
index 1327da9..0000000
--- a/erpnext/patches/v11_0/skip_user_permission_check_for_department.py
+++ /dev/null
@@ -1,85 +0,0 @@
-import frappe
-from frappe.desk.form.linked_with import get_linked_doctypes
-
-# Skips user permission check for doctypes where department link field was recently added
-# https://github.com/frappe/erpnext/pull/14121
-
-
-def execute():
- doctypes_to_skip = []
- for doctype in [
- "Appraisal",
- "Leave Allocation",
- "Expense Claim",
- "Instructor",
- "Salary Slip",
- "Attendance",
- "Training Feedback",
- "Training Result Employee",
- "Leave Application",
- "Employee Advance",
- "Activity Cost",
- "Training Event Employee",
- "Timesheet",
- "Sales Person",
- "Payroll Employee Detail",
- ]:
- if frappe.db.exists("Custom Field", {"dt": doctype, "fieldname": "department"}):
- continue
- doctypes_to_skip.append(doctype)
-
- frappe.reload_doctype("User Permission")
-
- user_permissions = frappe.get_all(
- "User Permission",
- filters=[["allow", "=", "Department"], ["applicable_for", "in", [None] + doctypes_to_skip]],
- fields=["name", "applicable_for"],
- )
-
- user_permissions_to_delete = []
- new_user_permissions_list = []
-
- for user_permission in user_permissions:
- if user_permission.applicable_for:
- # simply delete user permission record since it needs to be skipped.
- user_permissions_to_delete.append(user_permission.name)
- else:
- # if applicable_for is `None` it means that user permission is applicable for every doctype
- # to avoid this we need to create other user permission records and only skip the listed doctypes in this patch
- linked_doctypes = get_linked_doctypes(user_permission.allow, True).keys()
- applicable_for_doctypes = list(set(linked_doctypes) - set(doctypes_to_skip))
-
- user_permissions_to_delete.append(user_permission.name)
-
- for doctype in applicable_for_doctypes:
- if doctype:
- # Maintain sequence (name, user, allow, for_value, applicable_for, apply_to_all_doctypes)
- new_user_permissions_list.append(
- (
- frappe.generate_hash("", 10),
- user_permission.user,
- user_permission.allow,
- user_permission.for_value,
- doctype,
- 0,
- )
- )
-
- if new_user_permissions_list:
- frappe.db.sql(
- """
- INSERT INTO `tabUser Permission`
- (`name`, `user`, `allow`, `for_value`, `applicable_for`, `apply_to_all_doctypes`)
- VALUES {}""".format(
- ", ".join(["%s"] * len(new_user_permissions_list))
- ), # nosec
- tuple(new_user_permissions_list),
- )
-
- if user_permissions_to_delete:
- frappe.db.sql(
- "DELETE FROM `tabUser Permission` WHERE `name` IN ({})".format( # nosec
- ",".join(["%s"] * len(user_permissions_to_delete))
- ),
- tuple(user_permissions_to_delete),
- )
diff --git a/erpnext/patches/v11_0/update_department_lft_rgt.py b/erpnext/patches/v11_0/update_department_lft_rgt.py
index bca5e9e..778392e 100644
--- a/erpnext/patches/v11_0/update_department_lft_rgt.py
+++ b/erpnext/patches/v11_0/update_department_lft_rgt.py
@@ -5,7 +5,7 @@
def execute():
"""assign lft and rgt appropriately"""
- frappe.reload_doc("hr", "doctype", "department")
+ frappe.reload_doc("setup", "doctype", "department")
if not frappe.db.exists("Department", _("All Departments")):
frappe.get_doc(
{"doctype": "Department", "department_name": _("All Departments"), "is_group": 1}
diff --git a/erpnext/patches/v11_1/rename_depends_on_lwp.py b/erpnext/patches/v11_1/rename_depends_on_lwp.py
deleted file mode 100644
index 4e71838..0000000
--- a/erpnext/patches/v11_1/rename_depends_on_lwp.py
+++ /dev/null
@@ -1,14 +0,0 @@
-# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
-# License: GNU General Public License v3. See license.txt
-
-
-import frappe
-from frappe import scrub
-from frappe.model.utils.rename_field import rename_field
-
-
-def execute():
- for doctype in ("Salary Component", "Salary Detail"):
- if "depends_on_lwp" in frappe.db.get_table_columns(doctype):
- frappe.reload_doc("Payroll", "doctype", scrub(doctype))
- rename_field(doctype, "depends_on_lwp", "depends_on_payment_days")
diff --git a/erpnext/patches/v11_1/set_salary_details_submittable.py b/erpnext/patches/v11_1/set_salary_details_submittable.py
deleted file mode 100644
index e5ecce6..0000000
--- a/erpnext/patches/v11_1/set_salary_details_submittable.py
+++ /dev/null
@@ -1,11 +0,0 @@
-import frappe
-
-
-def execute():
- frappe.db.sql(
- """
- update `tabSalary Structure` ss, `tabSalary Detail` sd
- set sd.docstatus=1
- where ss.name=sd.parent and ss.docstatus=1 and sd.parenttype='Salary Structure'
- """
- )
diff --git a/erpnext/patches/v12_0/generate_leave_ledger_entries.py b/erpnext/patches/v12_0/generate_leave_ledger_entries.py
deleted file mode 100644
index 354c509..0000000
--- a/erpnext/patches/v12_0/generate_leave_ledger_entries.py
+++ /dev/null
@@ -1,100 +0,0 @@
-# Copyright (c) 2018, Frappe and Contributors
-# License: GNU General Public License v3. See license.txt
-
-
-import frappe
-from frappe.utils import getdate, today
-
-
-def execute():
- """Generates leave ledger entries for leave allocation/application/encashment
- for last allocation"""
- frappe.reload_doc("HR", "doctype", "Leave Ledger Entry")
- frappe.reload_doc("HR", "doctype", "Leave Encashment")
- frappe.reload_doc("HR", "doctype", "Leave Type")
-
- if not frappe.get_meta("Leave Allocation").has_field("unused_leaves"):
- frappe.reload_doc("HR", "doctype", "Leave Allocation")
- update_leave_allocation_fieldname()
-
- generate_allocation_ledger_entries()
- generate_application_leave_ledger_entries()
- generate_encashment_leave_ledger_entries()
- generate_expiry_allocation_ledger_entries()
-
-
-def update_leave_allocation_fieldname():
- """maps data from old field to the new field"""
- frappe.db.sql(
- """
- UPDATE `tabLeave Allocation`
- SET `unused_leaves` = `carry_forwarded_leaves`
- """
- )
-
-
-def generate_allocation_ledger_entries():
- """fix ledger entries for missing leave allocation transaction"""
- allocation_list = get_allocation_records()
-
- for allocation in allocation_list:
- if not frappe.db.exists(
- "Leave Ledger Entry",
- {"transaction_type": "Leave Allocation", "transaction_name": allocation.name},
- ):
- allocation_obj = frappe.get_doc("Leave Allocation", allocation)
- allocation_obj.create_leave_ledger_entry()
-
-
-def generate_application_leave_ledger_entries():
- """fix ledger entries for missing leave application transaction"""
- leave_applications = get_leaves_application_records()
-
- for application in leave_applications:
- if not frappe.db.exists(
- "Leave Ledger Entry",
- {"transaction_type": "Leave Application", "transaction_name": application.name},
- ):
- frappe.get_doc("Leave Application", application.name).create_leave_ledger_entry()
-
-
-def generate_encashment_leave_ledger_entries():
- """fix ledger entries for missing leave encashment transaction"""
- leave_encashments = get_leave_encashment_records()
-
- for encashment in leave_encashments:
- if not frappe.db.exists(
- "Leave Ledger Entry",
- {"transaction_type": "Leave Encashment", "transaction_name": encashment.name},
- ):
- frappe.get_doc("Leave Encashment", encashment).create_leave_ledger_entry()
-
-
-def generate_expiry_allocation_ledger_entries():
- """fix ledger entries for missing leave allocation transaction"""
- from erpnext.hr.doctype.leave_ledger_entry.leave_ledger_entry import expire_allocation
-
- allocation_list = get_allocation_records()
-
- for allocation in allocation_list:
- if not frappe.db.exists(
- "Leave Ledger Entry",
- {"transaction_type": "Leave Allocation", "transaction_name": allocation.name, "is_expired": 1},
- ):
- allocation_obj = frappe.get_doc("Leave Allocation", allocation)
- if allocation_obj.to_date <= getdate(today()):
- expire_allocation(allocation_obj)
-
-
-def get_allocation_records():
- return frappe.get_all(
- "Leave Allocation", filters={"docstatus": 1}, fields=["name"], order_by="to_date ASC"
- )
-
-
-def get_leaves_application_records():
- return frappe.get_all("Leave Application", filters={"docstatus": 1}, fields=["name"])
-
-
-def get_leave_encashment_records():
- return frappe.get_all("Leave Encashment", filters={"docstatus": 1}, fields=["name"])
diff --git a/erpnext/patches/v12_0/move_due_advance_amount_to_pending_amount.py b/erpnext/patches/v12_0/move_due_advance_amount_to_pending_amount.py
deleted file mode 100644
index 8b8d963..0000000
--- a/erpnext/patches/v12_0/move_due_advance_amount_to_pending_amount.py
+++ /dev/null
@@ -1,12 +0,0 @@
-# Copyright (c) 2019, Frappe and Contributors
-# License: GNU General Public License v3. See license.txt
-
-
-import frappe
-
-
-def execute():
- """Move from due_advance_amount to pending_amount"""
-
- if frappe.db.has_column("Employee Advance", "due_advance_amount"):
- frappe.db.sql(""" UPDATE `tabEmployee Advance` SET pending_amount=due_advance_amount """)
diff --git a/erpnext/patches/v12_0/remove_denied_leaves_from_leave_ledger.py b/erpnext/patches/v12_0/remove_denied_leaves_from_leave_ledger.py
deleted file mode 100644
index 4029a3f..0000000
--- a/erpnext/patches/v12_0/remove_denied_leaves_from_leave_ledger.py
+++ /dev/null
@@ -1,35 +0,0 @@
-# Copyright (c) 2018, Frappe and Contributors
-# License: GNU General Public License v3. See license.txt
-
-
-import frappe
-
-
-def execute():
- """Delete leave ledger entry created
- via leave applications with status != Approved"""
- if not frappe.db.a_row_exists("Leave Ledger Entry"):
- return
-
- leave_application_list = get_denied_leave_application_list()
- if leave_application_list:
- delete_denied_leaves_from_leave_ledger_entry(leave_application_list)
-
-
-def get_denied_leave_application_list():
- return frappe.db.sql_list(
- """ Select name from `tabLeave Application` where status <> 'Approved' """
- )
-
-
-def delete_denied_leaves_from_leave_ledger_entry(leave_application_list):
- if leave_application_list:
- frappe.db.sql(
- """ Delete
- FROM `tabLeave Ledger Entry`
- WHERE
- transaction_type = 'Leave Application'
- AND transaction_name in (%s) """
- % (", ".join(["%s"] * len(leave_application_list))), # nosec
- tuple(leave_application_list),
- )
diff --git a/erpnext/patches/v12_0/remove_duplicate_leave_ledger_entries.py b/erpnext/patches/v12_0/remove_duplicate_leave_ledger_entries.py
deleted file mode 100644
index 8247734..0000000
--- a/erpnext/patches/v12_0/remove_duplicate_leave_ledger_entries.py
+++ /dev/null
@@ -1,55 +0,0 @@
-# Copyright (c) 2018, Frappe and Contributors
-# License: GNU General Public License v3. See license.txt
-
-
-import frappe
-
-
-def execute():
- """Delete duplicate leave ledger entries of type allocation created."""
- frappe.reload_doc("hr", "doctype", "leave_ledger_entry")
- if not frappe.db.a_row_exists("Leave Ledger Entry"):
- return
-
- duplicate_records_list = get_duplicate_records()
- delete_duplicate_ledger_entries(duplicate_records_list)
-
-
-def get_duplicate_records():
- """Fetch all but one duplicate records from the list of expired leave allocation."""
- return frappe.db.sql(
- """
- SELECT name, employee, transaction_name, leave_type, is_carry_forward, from_date, to_date
- FROM `tabLeave Ledger Entry`
- WHERE
- transaction_type = 'Leave Allocation'
- AND docstatus = 1
- AND is_expired = 1
- GROUP BY
- employee, transaction_name, leave_type, is_carry_forward, from_date, to_date
- HAVING
- count(name) > 1
- ORDER BY
- creation
- """
- )
-
-
-def delete_duplicate_ledger_entries(duplicate_records_list):
- """Delete duplicate leave ledger entries."""
- if not duplicate_records_list:
- return
- for d in duplicate_records_list:
- frappe.db.sql(
- """
- DELETE FROM `tabLeave Ledger Entry`
- WHERE name != %s
- AND employee = %s
- AND transaction_name = %s
- AND leave_type = %s
- AND is_carry_forward = %s
- AND from_date = %s
- AND to_date = %s
- """,
- tuple(d),
- )
diff --git a/erpnext/patches/v12_0/set_default_payroll_based_on.py b/erpnext/patches/v12_0/set_default_payroll_based_on.py
deleted file mode 100644
index de641c6..0000000
--- a/erpnext/patches/v12_0/set_default_payroll_based_on.py
+++ /dev/null
@@ -1,6 +0,0 @@
-import frappe
-
-
-def execute():
- frappe.reload_doc("hr", "doctype", "hr_settings")
- frappe.db.set_value("HR Settings", None, "payroll_based_on", "Leave")
diff --git a/erpnext/patches/v12_0/set_job_offer_applicant_email.py b/erpnext/patches/v12_0/set_job_offer_applicant_email.py
deleted file mode 100644
index 0e3b5c4..0000000
--- a/erpnext/patches/v12_0/set_job_offer_applicant_email.py
+++ /dev/null
@@ -1,14 +0,0 @@
-import frappe
-
-
-def execute():
- frappe.reload_doc("hr", "doctype", "job_offer")
-
- frappe.db.sql(
- """
- UPDATE
- `tabJob Offer` AS offer
- SET
- applicant_email = (SELECT email_id FROM `tabJob Applicant` WHERE name = offer.job_applicant)
- """
- )
diff --git a/erpnext/patches/v13_0/add_default_interview_notification_templates.py b/erpnext/patches/v13_0/add_default_interview_notification_templates.py
deleted file mode 100644
index 9a47efe..0000000
--- a/erpnext/patches/v13_0/add_default_interview_notification_templates.py
+++ /dev/null
@@ -1,44 +0,0 @@
-import os
-
-import frappe
-from frappe import _
-
-
-def execute():
- if not frappe.db.exists("Email Template", _("Interview Reminder")):
- base_path = frappe.get_app_path("erpnext", "hr", "doctype")
- response = frappe.read_file(
- os.path.join(base_path, "interview/interview_reminder_notification_template.html")
- )
-
- frappe.get_doc(
- {
- "doctype": "Email Template",
- "name": _("Interview Reminder"),
- "response": response,
- "subject": _("Interview Reminder"),
- "owner": frappe.session.user,
- }
- ).insert(ignore_permissions=True)
-
- if not frappe.db.exists("Email Template", _("Interview Feedback Reminder")):
- base_path = frappe.get_app_path("erpnext", "hr", "doctype")
- response = frappe.read_file(
- os.path.join(base_path, "interview/interview_feedback_reminder_template.html")
- )
-
- frappe.get_doc(
- {
- "doctype": "Email Template",
- "name": _("Interview Feedback Reminder"),
- "response": response,
- "subject": _("Interview Feedback Reminder"),
- "owner": frappe.session.user,
- }
- ).insert(ignore_permissions=True)
-
- hr_settings = frappe.get_doc("HR Settings")
- hr_settings.interview_reminder_template = _("Interview Reminder")
- hr_settings.feedback_reminder_notification_template = _("Interview Feedback Reminder")
- hr_settings.flags.ignore_links = True
- hr_settings.save()
diff --git a/erpnext/patches/v13_0/check_is_income_tax_component.py b/erpnext/patches/v13_0/check_is_income_tax_component.py
deleted file mode 100644
index 0ae3a3e..0000000
--- a/erpnext/patches/v13_0/check_is_income_tax_component.py
+++ /dev/null
@@ -1,62 +0,0 @@
-# Copyright (c) 2019, Frappe and Contributors
-# License: GNU General Public License v3. See license.txt
-
-
-import frappe
-from frappe.custom.doctype.custom_field.custom_field import create_custom_field
-
-import erpnext
-
-
-def execute():
-
- doctypes = [
- "salary_component",
- "Employee Tax Exemption Declaration",
- "Employee Tax Exemption Proof Submission",
- "Employee Tax Exemption Declaration Category",
- "Employee Tax Exemption Proof Submission Detail",
- "gratuity_rule",
- "gratuity_rule_slab",
- "gratuity_applicable_component",
- ]
-
- for doctype in doctypes:
- frappe.reload_doc("Payroll", "doctype", doctype, force=True)
-
- reports = ["Professional Tax Deductions", "Provident Fund Deductions", "E-Invoice Summary"]
- for report in reports:
- frappe.reload_doc("Regional", "Report", report)
- frappe.reload_doc("Regional", "Report", report)
-
- if erpnext.get_region() == "India":
- create_custom_field(
- "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"',
- ),
- )
-
- if frappe.db.exists("Salary Component", "Income Tax"):
- frappe.db.set_value("Salary Component", "Income Tax", "is_income_tax_component", 1)
- if frappe.db.exists("Salary Component", "TDS"):
- frappe.db.set_value("Salary Component", "TDS", "is_income_tax_component", 1)
-
- components = frappe.db.sql(
- "select name from `tabSalary Component` where variable_based_on_taxable_salary = 1", as_dict=1
- )
- for component in components:
- frappe.db.set_value("Salary Component", component.name, "is_income_tax_component", 1)
-
- if erpnext.get_region() == "India":
- if frappe.db.exists("Salary Component", "Provident Fund"):
- frappe.db.set_value("Salary Component", "Provident Fund", "component_type", "Provident Fund")
- if frappe.db.exists("Salary Component", "Professional Tax"):
- frappe.db.set_value(
- "Salary Component", "Professional Tax", "component_type", "Professional Tax"
- )
diff --git a/erpnext/patches/v13_0/make_non_standard_user_type.py b/erpnext/patches/v13_0/make_non_standard_user_type.py
deleted file mode 100644
index e2c0685..0000000
--- a/erpnext/patches/v13_0/make_non_standard_user_type.py
+++ /dev/null
@@ -1,44 +0,0 @@
-# Copyright (c) 2019, Frappe and Contributors
-# License: GNU General Public License v3. See license.txt
-
-
-import frappe
-
-from erpnext.setup.install import add_non_standard_user_types
-
-
-def execute():
- doctype_dict = {
- "projects": ["Timesheet"],
- "payroll": [
- "Salary Slip",
- "Employee Tax Exemption Declaration",
- "Employee Tax Exemption Proof Submission",
- "Employee Benefit Application",
- "Employee Benefit Claim",
- ],
- "hr": [
- "Employee",
- "Expense Claim",
- "Leave Application",
- "Attendance Request",
- "Compensatory Leave Request",
- "Holiday List",
- "Employee Advance",
- "Training Program",
- "Training Feedback",
- "Shift Request",
- "Employee Grievance",
- "Employee Referral",
- "Travel Request",
- ],
- }
-
- for module, doctypes in doctype_dict.items():
- for doctype in doctypes:
- frappe.reload_doc(module, "doctype", doctype)
-
- frappe.flags.ignore_select_perm = True
- frappe.flags.update_select_perm_after_migrate = True
-
- add_non_standard_user_types()
diff --git a/erpnext/patches/v13_0/move_doctype_reports_and_notification_from_hr_to_payroll.py b/erpnext/patches/v13_0/move_doctype_reports_and_notification_from_hr_to_payroll.py
deleted file mode 100644
index 0290af0..0000000
--- a/erpnext/patches/v13_0/move_doctype_reports_and_notification_from_hr_to_payroll.py
+++ /dev/null
@@ -1,52 +0,0 @@
-# Copyright (c) 2019, Frappe and Contributors
-# License: GNU General Public License v3. See license.txt
-
-
-import frappe
-
-
-def execute():
- frappe.db.sql(
- """UPDATE `tabPrint Format`
- SET module = 'Payroll'
- WHERE name IN ('Salary Slip Based On Timesheet', 'Salary Slip Standard')"""
- )
-
- frappe.db.sql("""UPDATE `tabNotification` SET module='Payroll' WHERE name='Retention Bonus';""")
-
- doctypes_moved = [
- "Employee Benefit Application Detail",
- "Employee Tax Exemption Declaration Category",
- "Salary Component",
- "Employee Tax Exemption Proof Submission Detail",
- "Income Tax Slab Other Charges",
- "Taxable Salary Slab",
- "Payroll Period Date",
- "Salary Slip Timesheet",
- "Payroll Employee Detail",
- "Salary Detail",
- "Employee Tax Exemption Sub Category",
- "Employee Tax Exemption Category",
- "Employee Benefit Claim",
- "Employee Benefit Application",
- "Employee Other Income",
- "Employee Tax Exemption Proof Submission",
- "Employee Tax Exemption Declaration",
- "Employee Incentive",
- "Retention Bonus",
- "Additional Salary",
- "Income Tax Slab",
- "Payroll Period",
- "Salary Slip",
- "Payroll Entry",
- "Salary Structure Assignment",
- "Salary Structure",
- ]
-
- for doctype in doctypes_moved:
- frappe.delete_doc_if_exists("DocType", doctype)
-
- reports = ["Salary Register", "Bank Remittance"]
-
- for report in reports:
- frappe.delete_doc_if_exists("Report", report)
diff --git a/erpnext/patches/v13_0/move_payroll_setting_separately_from_hr_settings.py b/erpnext/patches/v13_0/move_payroll_setting_separately_from_hr_settings.py
deleted file mode 100644
index 37a3c35..0000000
--- a/erpnext/patches/v13_0/move_payroll_setting_separately_from_hr_settings.py
+++ /dev/null
@@ -1,30 +0,0 @@
-# Copyright (c) 2019, Frappe and Contributors
-# License: GNU General Public License v3. See license.txt
-
-
-import frappe
-
-
-def execute():
- data = frappe.db.sql(
- """SELECT *
- FROM `tabSingles`
- WHERE
- doctype = "HR Settings"
- AND
- field in (
- "encrypt_salary_slips_in_emails",
- "email_salary_slip_to_employee",
- "daily_wages_fraction_for_half_day",
- "disable_rounded_total",
- "include_holidays_in_total_working_days",
- "max_working_hours_against_timesheet",
- "payroll_based_on",
- "password_policy"
- )
- """,
- as_dict=1,
- )
-
- for d in data:
- frappe.db.set_value("Payroll Settings", None, d.field, d.value)
diff --git a/erpnext/patches/v13_0/move_tax_slabs_from_payroll_period_to_income_tax_slab.py b/erpnext/patches/v13_0/move_tax_slabs_from_payroll_period_to_income_tax_slab.py
deleted file mode 100644
index f84a739..0000000
--- a/erpnext/patches/v13_0/move_tax_slabs_from_payroll_period_to_income_tax_slab.py
+++ /dev/null
@@ -1,135 +0,0 @@
-# Copyright (c) 2019, Frappe and Contributors
-# License: GNU General Public License v3. See license.txt
-
-
-import frappe
-
-
-def execute():
- if not (
- frappe.db.table_exists("Payroll Period") and frappe.db.table_exists("Taxable Salary Slab")
- ):
- return
-
- for doctype in (
- "income_tax_slab",
- "salary_structure_assignment",
- "employee_other_income",
- "income_tax_slab_other_charges",
- ):
- frappe.reload_doc("Payroll", "doctype", doctype)
-
- standard_tax_exemption_amount_exists = frappe.db.has_column(
- "Payroll Period", "standard_tax_exemption_amount"
- )
-
- select_fields = "name, start_date, end_date"
- if standard_tax_exemption_amount_exists:
- select_fields = "name, start_date, end_date, standard_tax_exemption_amount"
-
- for company in frappe.get_all("Company"):
- payroll_periods = frappe.db.sql(
- """
- SELECT
- {0}
- FROM
- `tabPayroll Period`
- WHERE company=%s
- ORDER BY start_date DESC
- """.format(
- select_fields
- ),
- company.name,
- as_dict=1,
- )
-
- for i, period in enumerate(payroll_periods):
- income_tax_slab = frappe.new_doc("Income Tax Slab")
- income_tax_slab.name = "Tax Slab:" + period.name
-
- if i == 0:
- income_tax_slab.disabled = 0
- else:
- income_tax_slab.disabled = 1
-
- income_tax_slab.effective_from = period.start_date
- income_tax_slab.company = company.name
- income_tax_slab.allow_tax_exemption = 1
- if standard_tax_exemption_amount_exists:
- income_tax_slab.standard_tax_exemption_amount = period.standard_tax_exemption_amount
-
- income_tax_slab.flags.ignore_mandatory = True
- income_tax_slab.submit()
-
- frappe.db.sql(
- """ UPDATE `tabTaxable Salary Slab`
- SET parent = %s , parentfield = 'slabs' , parenttype = "Income Tax Slab"
- WHERE parent = %s
- """,
- (income_tax_slab.name, period.name),
- as_dict=1,
- )
-
- if i == 0:
- frappe.db.sql(
- """
- UPDATE
- `tabSalary Structure Assignment`
- set
- income_tax_slab = %s
- where
- company = %s
- and from_date >= %s
- and docstatus < 2
- """,
- (income_tax_slab.name, company.name, period.start_date),
- )
-
- # move other incomes to separate document
- if not frappe.db.table_exists("Employee Tax Exemption Proof Submission"):
- return
-
- migrated = []
- proofs = frappe.get_all(
- "Employee Tax Exemption Proof Submission",
- filters={"docstatus": 1},
- fields=["payroll_period", "employee", "company", "income_from_other_sources"],
- )
- for proof in proofs:
- if proof.income_from_other_sources:
- employee_other_income = frappe.new_doc("Employee Other Income")
- employee_other_income.employee = proof.employee
- employee_other_income.payroll_period = proof.payroll_period
- employee_other_income.company = proof.company
- employee_other_income.amount = proof.income_from_other_sources
-
- try:
- employee_other_income.submit()
- migrated.append([proof.employee, proof.payroll_period])
- except Exception:
- pass
-
- if not frappe.db.table_exists("Employee Tax Exemption Declaration"):
- return
-
- declerations = frappe.get_all(
- "Employee Tax Exemption Declaration",
- filters={"docstatus": 1},
- fields=["payroll_period", "employee", "company", "income_from_other_sources"],
- )
-
- for declaration in declerations:
- if (
- declaration.income_from_other_sources
- and [declaration.employee, declaration.payroll_period] not in migrated
- ):
- employee_other_income = frappe.new_doc("Employee Other Income")
- employee_other_income.employee = declaration.employee
- employee_other_income.payroll_period = declaration.payroll_period
- employee_other_income.company = declaration.company
- employee_other_income.amount = declaration.income_from_other_sources
-
- try:
- employee_other_income.submit()
- except Exception:
- pass
diff --git a/erpnext/patches/v13_0/rename_stop_to_send_birthday_reminders.py b/erpnext/patches/v13_0/rename_stop_to_send_birthday_reminders.py
deleted file mode 100644
index 434dbb4..0000000
--- a/erpnext/patches/v13_0/rename_stop_to_send_birthday_reminders.py
+++ /dev/null
@@ -1,21 +0,0 @@
-import frappe
-from frappe.model.utils.rename_field import rename_field
-
-
-def execute():
- frappe.reload_doc("hr", "doctype", "hr_settings")
-
- try:
- # Rename the field
- rename_field("HR Settings", "stop_birthday_reminders", "send_birthday_reminders")
-
- # Reverse the value
- old_value = frappe.db.get_single_value("HR Settings", "send_birthday_reminders")
-
- frappe.db.set_value(
- "HR Settings", "HR Settings", "send_birthday_reminders", 1 if old_value == 0 else 0
- )
-
- except Exception as e:
- if e.args[0] != 1054:
- raise
diff --git a/erpnext/patches/v13_0/set_company_in_leave_ledger_entry.py b/erpnext/patches/v13_0/set_company_in_leave_ledger_entry.py
deleted file mode 100644
index adc8784..0000000
--- a/erpnext/patches/v13_0/set_company_in_leave_ledger_entry.py
+++ /dev/null
@@ -1,12 +0,0 @@
-import frappe
-
-
-def execute():
- frappe.reload_doc("HR", "doctype", "Leave Allocation")
- frappe.reload_doc("HR", "doctype", "Leave Ledger Entry")
- frappe.db.sql(
- """update `tabLeave Ledger Entry` as lle set company = (select company from `tabEmployee` where employee = lle.employee)"""
- )
- frappe.db.sql(
- """update `tabLeave Allocation` as la set company = (select company from `tabEmployee` where employee = la.employee)"""
- )
diff --git a/erpnext/patches/v13_0/set_payroll_entry_status.py b/erpnext/patches/v13_0/set_payroll_entry_status.py
deleted file mode 100644
index 97adff9..0000000
--- a/erpnext/patches/v13_0/set_payroll_entry_status.py
+++ /dev/null
@@ -1,16 +0,0 @@
-import frappe
-from frappe.query_builder import Case
-
-
-def execute():
- PayrollEntry = frappe.qb.DocType("Payroll Entry")
-
- (
- frappe.qb.update(PayrollEntry).set(
- "status",
- Case()
- .when(PayrollEntry.docstatus == 0, "Draft")
- .when(PayrollEntry.docstatus == 1, "Submitted")
- .else_("Cancelled"),
- )
- ).run()
diff --git a/erpnext/patches/v13_0/set_training_event_attendance.py b/erpnext/patches/v13_0/set_training_event_attendance.py
deleted file mode 100644
index 7b55758..0000000
--- a/erpnext/patches/v13_0/set_training_event_attendance.py
+++ /dev/null
@@ -1,11 +0,0 @@
-import frappe
-
-
-def execute():
- frappe.reload_doc("hr", "doctype", "training_event")
- frappe.reload_doc("hr", "doctype", "training_event_employee")
-
- frappe.db.sql("update `tabTraining Event Employee` set `attendance` = 'Present'")
- frappe.db.sql(
- "update `tabTraining Event Employee` set `is_mandatory` = 1 where `attendance` = 'Mandatory'"
- )
diff --git a/erpnext/patches/v13_0/update_employee_advance_status.py b/erpnext/patches/v13_0/update_employee_advance_status.py
deleted file mode 100644
index fc9e05e..0000000
--- a/erpnext/patches/v13_0/update_employee_advance_status.py
+++ /dev/null
@@ -1,29 +0,0 @@
-import frappe
-
-
-def execute():
- frappe.reload_doc("hr", "doctype", "employee_advance")
-
- advance = frappe.qb.DocType("Employee Advance")
- (
- frappe.qb.update(advance)
- .set(advance.status, "Returned")
- .where(
- (advance.docstatus == 1)
- & ((advance.return_amount) & (advance.paid_amount == advance.return_amount))
- & (advance.status == "Paid")
- )
- ).run()
-
- (
- frappe.qb.update(advance)
- .set(advance.status, "Partly Claimed and Returned")
- .where(
- (advance.docstatus == 1)
- & (
- (advance.claimed_amount & advance.return_amount)
- & (advance.paid_amount == (advance.return_amount + advance.claimed_amount))
- )
- & (advance.status == "Paid")
- )
- ).run()
diff --git a/erpnext/patches/v13_0/update_expense_claim_status_for_paid_advances.py b/erpnext/patches/v13_0/update_expense_claim_status_for_paid_advances.py
deleted file mode 100644
index 2bc17ae..0000000
--- a/erpnext/patches/v13_0/update_expense_claim_status_for_paid_advances.py
+++ /dev/null
@@ -1,25 +0,0 @@
-import frappe
-
-
-def execute():
- """
- Update Expense Claim status to Paid if:
- - the entire required amount is already covered via linked advances
- - the claim is partially paid via advances and the rest is reimbursed
- """
-
- ExpenseClaim = frappe.qb.DocType("Expense Claim")
-
- (
- frappe.qb.update(ExpenseClaim)
- .set(ExpenseClaim.status, "Paid")
- .where(
- (
- (ExpenseClaim.grand_total == 0)
- | (ExpenseClaim.grand_total == ExpenseClaim.total_amount_reimbursed)
- )
- & (ExpenseClaim.approval_status == "Approved")
- & (ExpenseClaim.docstatus == 1)
- & (ExpenseClaim.total_sanctioned_amount > 0)
- )
- ).run()
diff --git a/erpnext/patches/v13_0/update_reason_for_resignation_in_employee.py b/erpnext/patches/v13_0/update_reason_for_resignation_in_employee.py
index 31aa292..6ee7090 100644
--- a/erpnext/patches/v13_0/update_reason_for_resignation_in_employee.py
+++ b/erpnext/patches/v13_0/update_reason_for_resignation_in_employee.py
@@ -6,7 +6,7 @@
def execute():
- frappe.reload_doc("hr", "doctype", "employee")
+ frappe.reload_doc("setup", "doctype", "employee")
if frappe.db.has_column("Employee", "reason_for_resignation"):
frappe.db.sql(
diff --git a/erpnext/patches/v13_0/update_start_end_date_for_old_shift_assignment.py b/erpnext/patches/v13_0/update_start_end_date_for_old_shift_assignment.py
deleted file mode 100644
index 6d26ac5..0000000
--- a/erpnext/patches/v13_0/update_start_end_date_for_old_shift_assignment.py
+++ /dev/null
@@ -1,15 +0,0 @@
-# Copyright (c) 2019, Frappe and Contributors
-# License: GNU General Public License v3. See license.txt
-
-
-import frappe
-
-
-def execute():
- frappe.reload_doc("hr", "doctype", "shift_assignment")
- if frappe.db.has_column("Shift Assignment", "date"):
- frappe.db.sql(
- """update `tabShift Assignment`
- set end_date=date, start_date=date
- where date IS NOT NULL and start_date IS NULL and end_date IS NULL;"""
- )
diff --git a/erpnext/patches/v13_0/updates_for_multi_currency_payroll.py b/erpnext/patches/v13_0/updates_for_multi_currency_payroll.py
deleted file mode 100644
index b395c01c..0000000
--- a/erpnext/patches/v13_0/updates_for_multi_currency_payroll.py
+++ /dev/null
@@ -1,133 +0,0 @@
-# Copyright (c) 2019, Frappe and Contributors
-# License: GNU General Public License v3. See license.txt
-
-import frappe
-from frappe import _
-from frappe.model.utils.rename_field import rename_field
-
-
-def execute():
-
- frappe.reload_doc("Accounts", "doctype", "Salary Component Account")
- if frappe.db.has_column("Salary Component Account", "default_account"):
- rename_field("Salary Component Account", "default_account", "account")
-
- doctype_list = [
- {"module": "HR", "doctype": "Employee Advance"},
- {"module": "HR", "doctype": "Leave Encashment"},
- {"module": "Payroll", "doctype": "Additional Salary"},
- {"module": "Payroll", "doctype": "Employee Benefit Application"},
- {"module": "Payroll", "doctype": "Employee Benefit Claim"},
- {"module": "Payroll", "doctype": "Employee Incentive"},
- {"module": "Payroll", "doctype": "Employee Tax Exemption Declaration"},
- {"module": "Payroll", "doctype": "Employee Tax Exemption Proof Submission"},
- {"module": "Payroll", "doctype": "Income Tax Slab"},
- {"module": "Payroll", "doctype": "Payroll Entry"},
- {"module": "Payroll", "doctype": "Retention Bonus"},
- {"module": "Payroll", "doctype": "Salary Structure"},
- {"module": "Payroll", "doctype": "Salary Structure Assignment"},
- {"module": "Payroll", "doctype": "Salary Slip"},
- ]
-
- for item in doctype_list:
- frappe.reload_doc(item["module"], "doctype", item["doctype"])
-
- # update company in employee advance based on employee company
- for dt in [
- "Employee Incentive",
- "Leave Encashment",
- "Employee Benefit Application",
- "Employee Benefit Claim",
- ]:
- frappe.db.sql(
- """
- update `tab{doctype}`
- set company = (select company from tabEmployee where name=`tab{doctype}`.employee)
- """.format(
- doctype=dt
- )
- )
-
- # update exchange rate for employee advance
- frappe.db.sql("update `tabEmployee Advance` set exchange_rate=1")
-
- # get all companies and it's currency
- all_companies = frappe.db.get_all(
- "Company", fields=["name", "default_currency", "default_payroll_payable_account"]
- )
- for d in all_companies:
- company = d.name
- company_currency = d.default_currency
- default_payroll_payable_account = d.default_payroll_payable_account
-
- if not default_payroll_payable_account:
- default_payroll_payable_account = frappe.db.get_value(
- "Account",
- {
- "account_name": _("Payroll Payable"),
- "company": company,
- "account_currency": company_currency,
- "is_group": 0,
- },
- )
-
- # update currency in following doctypes based on company currency
- doctypes_for_currency = [
- "Employee Advance",
- "Leave Encashment",
- "Employee Benefit Application",
- "Employee Benefit Claim",
- "Employee Incentive",
- "Additional Salary",
- "Employee Tax Exemption Declaration",
- "Employee Tax Exemption Proof Submission",
- "Income Tax Slab",
- "Retention Bonus",
- "Salary Structure",
- ]
-
- for dt in doctypes_for_currency:
- frappe.db.sql(
- """update `tab{doctype}` set currency = %s where company=%s""".format(doctype=dt),
- (company_currency, company),
- )
-
- # update fields in payroll entry
- frappe.db.sql(
- """
- update `tabPayroll Entry`
- set currency = %s,
- exchange_rate = 1,
- payroll_payable_account=%s
- where company=%s
- """,
- (company_currency, default_payroll_payable_account, company),
- )
-
- # update fields in Salary Structure Assignment
- frappe.db.sql(
- """
- update `tabSalary Structure Assignment`
- set currency = %s,
- payroll_payable_account=%s
- where company=%s
- """,
- (company_currency, default_payroll_payable_account, company),
- )
-
- # update fields in Salary Slip
- frappe.db.sql(
- """
- update `tabSalary Slip`
- set currency = %s,
- exchange_rate = 1,
- base_hour_rate = hour_rate,
- base_gross_pay = gross_pay,
- base_total_deduction = total_deduction,
- base_net_pay = net_pay,
- base_rounded_total = rounded_total,
- base_total_in_words = total_in_words
- where company=%s
- """,
- (company_currency, company),
- )
diff --git a/erpnext/patches/v14_0/add_default_exit_questionnaire_notification_template.py b/erpnext/patches/v14_0/add_default_exit_questionnaire_notification_template.py
deleted file mode 100644
index 001c8ef..0000000
--- a/erpnext/patches/v14_0/add_default_exit_questionnaire_notification_template.py
+++ /dev/null
@@ -1,29 +0,0 @@
-import os
-
-import frappe
-from frappe import _
-
-
-def execute():
- template = frappe.db.exists("Email Template", _("Exit Questionnaire Notification"))
- if not template:
- base_path = frappe.get_app_path("erpnext", "hr", "doctype")
- response = frappe.read_file(
- os.path.join(base_path, "exit_interview/exit_questionnaire_notification_template.html")
- )
-
- template = frappe.get_doc(
- {
- "doctype": "Email Template",
- "name": _("Exit Questionnaire Notification"),
- "response": response,
- "subject": _("Exit Questionnaire Notification"),
- "owner": frappe.session.user,
- }
- ).insert(ignore_permissions=True)
- template = template.name
-
- hr_settings = frappe.get_doc("HR Settings")
- hr_settings.exit_questionnaire_notification_template = template
- hr_settings.flags.ignore_links = True
- hr_settings.save()
diff --git a/erpnext/patches/v14_0/delete_employee_transfer_property_doctype.py b/erpnext/patches/v14_0/delete_employee_transfer_property_doctype.py
deleted file mode 100644
index b50e010..0000000
--- a/erpnext/patches/v14_0/delete_employee_transfer_property_doctype.py
+++ /dev/null
@@ -1,5 +0,0 @@
-import frappe
-
-
-def execute():
- frappe.delete_doc("DocType", "Employee Transfer Property", ignore_missing=True)
diff --git a/erpnext/patches/v14_0/set_payroll_cost_centers.py b/erpnext/patches/v14_0/set_payroll_cost_centers.py
deleted file mode 100644
index 0951e39..0000000
--- a/erpnext/patches/v14_0/set_payroll_cost_centers.py
+++ /dev/null
@@ -1,29 +0,0 @@
-import frappe
-
-
-def execute():
- frappe.reload_doc("payroll", "doctype", "employee_cost_center")
- frappe.reload_doc("payroll", "doctype", "salary_structure_assignment")
-
- employees = frappe.get_all("Employee", fields=["department", "payroll_cost_center", "name"])
-
- employee_cost_center = {}
- for d in employees:
- cost_center = d.payroll_cost_center
- if not cost_center and d.department:
- cost_center = frappe.get_cached_value("Department", d.department, "payroll_cost_center")
-
- if cost_center:
- employee_cost_center.setdefault(d.name, cost_center)
-
- salary_structure_assignments = frappe.get_all(
- "Salary Structure Assignment", filters={"docstatus": ["!=", 2]}, fields=["name", "employee"]
- )
-
- for d in salary_structure_assignments:
- cost_center = employee_cost_center.get(d.employee)
- if cost_center:
- assignment = frappe.get_doc("Salary Structure Assignment", d.name)
- if not assignment.get("payroll_cost_centers"):
- assignment.append("payroll_cost_centers", {"cost_center": cost_center, "percentage": 100})
- assignment.save()
diff --git a/erpnext/patches/v14_0/update_leave_notification_template.py b/erpnext/patches/v14_0/update_leave_notification_template.py
deleted file mode 100644
index aec5f8b..0000000
--- a/erpnext/patches/v14_0/update_leave_notification_template.py
+++ /dev/null
@@ -1,19 +0,0 @@
-import os
-
-import frappe
-from frappe import _
-
-
-def execute():
- base_path = frappe.get_app_path("erpnext", "hr", "doctype")
- response = frappe.read_file(
- os.path.join(base_path, "leave_application/leave_application_email_template.html")
- )
-
- template = frappe.db.exists("Email Template", _("Leave Approval Notification"))
- if template:
- frappe.db.set_value("Email Template", template, "response", response)
-
- template = frappe.db.exists("Email Template", _("Leave Status Notification"))
- if template:
- frappe.db.set_value("Email Template", template, "response", response)
diff --git a/erpnext/patches/v8_7/sync_india_custom_fields.py b/erpnext/patches/v8_7/sync_india_custom_fields.py
index e1b9a73..02a954a 100644
--- a/erpnext/patches/v8_7/sync_india_custom_fields.py
+++ b/erpnext/patches/v8_7/sync_india_custom_fields.py
@@ -8,12 +8,6 @@
if not company:
return
- frappe.reload_doc("Payroll", "doctype", "payroll_period")
- frappe.reload_doc("Payroll", "doctype", "employee_tax_exemption_declaration")
- frappe.reload_doc("Payroll", "doctype", "employee_tax_exemption_proof_submission")
- frappe.reload_doc("Payroll", "doctype", "employee_tax_exemption_declaration_category")
- frappe.reload_doc("Payroll", "doctype", "employee_tax_exemption_proof_submission_detail")
-
frappe.reload_doc("accounts", "doctype", "tax_category")
for doctype in ["Sales Invoice", "Delivery Note", "Purchase Invoice"]: