fix: remove patches
This commit is contained in:
parent
5159e2e6c5
commit
b90a134d91
@ -10,9 +10,6 @@ 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.v5_7.update_item_description_based_on_item_master
|
||||||
erpnext.patches.v4_2.repost_reserved_qty #2021-03-31
|
erpnext.patches.v4_2.repost_reserved_qty #2021-03-31
|
||||||
execute:frappe.reload_doc("Payroll", "doctype", "salary_slip")
|
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
|
|
||||||
erpnext.patches.v10_0.fichier_des_ecritures_comptables_for_france
|
erpnext.patches.v10_0.fichier_des_ecritures_comptables_for_france
|
||||||
erpnext.patches.v10_0.rename_price_to_rate_in_pricing_rule
|
erpnext.patches.v10_0.rename_price_to_rate_in_pricing_rule
|
||||||
erpnext.patches.v10_0.set_currency_in_pricing_rule
|
erpnext.patches.v10_0.set_currency_in_pricing_rule
|
||||||
@ -46,7 +43,6 @@ erpnext.patches.v11_0.check_buying_selling_in_currency_exchange
|
|||||||
erpnext.patches.v11_0.move_item_defaults_to_child_table_for_multicompany #02-07-2018 #19-06-2019
|
erpnext.patches.v11_0.move_item_defaults_to_child_table_for_multicompany #02-07-2018 #19-06-2019
|
||||||
erpnext.patches.v11_0.rename_overproduction_percent_field
|
erpnext.patches.v11_0.rename_overproduction_percent_field
|
||||||
erpnext.patches.v11_0.update_backflush_subcontract_rm_based_on_bom
|
erpnext.patches.v11_0.update_backflush_subcontract_rm_based_on_bom
|
||||||
erpnext.patches.v11_0.inter_state_field_for_gst
|
|
||||||
erpnext.patches.v11_0.rename_members_with_naming_series #04-06-2018
|
erpnext.patches.v11_0.rename_members_with_naming_series #04-06-2018
|
||||||
erpnext.patches.v11_0.set_update_field_and_value_in_workflow_state
|
erpnext.patches.v11_0.set_update_field_and_value_in_workflow_state
|
||||||
erpnext.patches.v11_0.update_total_qty_field
|
erpnext.patches.v11_0.update_total_qty_field
|
||||||
@ -68,20 +64,15 @@ execute:frappe.delete_doc_if_exists("Page", "sales-analytics")
|
|||||||
execute:frappe.delete_doc_if_exists("Page", "purchase-analytics")
|
execute:frappe.delete_doc_if_exists("Page", "purchase-analytics")
|
||||||
execute:frappe.delete_doc_if_exists("Page", "stock-analytics")
|
execute:frappe.delete_doc_if_exists("Page", "stock-analytics")
|
||||||
execute:frappe.delete_doc_if_exists("Page", "production-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.v11_0.drop_column_max_days_allowed
|
||||||
erpnext.patches.v10_0.item_barcode_childtable_migrate # 16-02-2019
|
erpnext.patches.v10_0.item_barcode_childtable_migrate # 16-02-2019
|
||||||
erpnext.patches.v11_0.update_delivery_trip_status
|
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.v11_0.rename_bom_wo_fields
|
||||||
erpnext.patches.v12_0.set_default_homepage_type
|
erpnext.patches.v12_0.set_default_homepage_type
|
||||||
erpnext.patches.v11_0.rename_additional_salary_component_additional_salary
|
erpnext.patches.v11_0.rename_additional_salary_component_additional_salary
|
||||||
erpnext.patches.v11_0.renamed_from_to_fields_in_project
|
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
|
erpnext.patches.v11_1.setup_guardian_role
|
||||||
execute:frappe.delete_doc('DocType', 'Notification Control')
|
execute:frappe.delete_doc('DocType', 'Notification Control')
|
||||||
erpnext.patches.v12_0.set_gst_category
|
|
||||||
erpnext.patches.v12_0.update_gst_category
|
|
||||||
erpnext.patches.v11_0.remove_barcodes_field_from_copy_fields_to_variants
|
erpnext.patches.v11_0.remove_barcodes_field_from_copy_fields_to_variants
|
||||||
erpnext.patches.v12_0.set_task_status
|
erpnext.patches.v12_0.set_task_status
|
||||||
erpnext.patches.v11_0.make_italian_localization_fields # 26-03-2019
|
erpnext.patches.v11_0.make_italian_localization_fields # 26-03-2019
|
||||||
@ -118,7 +109,6 @@ execute:frappe.delete_doc("DocType", "Project Task")
|
|||||||
erpnext.patches.v11_1.update_default_supplier_in_item_defaults
|
erpnext.patches.v11_1.update_default_supplier_in_item_defaults
|
||||||
erpnext.patches.v12_0.update_due_date_in_gle
|
erpnext.patches.v12_0.update_due_date_in_gle
|
||||||
erpnext.patches.v12_0.add_default_buying_selling_terms_in_company
|
erpnext.patches.v12_0.add_default_buying_selling_terms_in_company
|
||||||
erpnext.patches.v12_0.update_ewaybill_field_position
|
|
||||||
erpnext.patches.v12_0.create_accounting_dimensions_in_missing_doctypes #2020-05-11
|
erpnext.patches.v12_0.create_accounting_dimensions_in_missing_doctypes #2020-05-11
|
||||||
erpnext.patches.v11_1.set_status_for_material_request_type_manufacture
|
erpnext.patches.v11_1.set_status_for_material_request_type_manufacture
|
||||||
erpnext.patches.v12_0.move_plaid_settings_to_doctype
|
erpnext.patches.v12_0.move_plaid_settings_to_doctype
|
||||||
@ -141,14 +131,12 @@ erpnext.patches.v12_0.replace_accounting_with_accounts_in_home_settings
|
|||||||
erpnext.patches.v12_0.set_automatically_process_deferred_accounting_in_accounts_settings
|
erpnext.patches.v12_0.set_automatically_process_deferred_accounting_in_accounts_settings
|
||||||
erpnext.patches.v12_0.set_payment_entry_status
|
erpnext.patches.v12_0.set_payment_entry_status
|
||||||
erpnext.patches.v12_0.update_owner_fields_in_acc_dimension_custom_fields
|
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.remove_denied_leaves_from_leave_ledger
|
||||||
erpnext.patches.v12_0.update_price_or_product_discount
|
erpnext.patches.v12_0.update_price_or_product_discount
|
||||||
erpnext.patches.v12_0.set_production_capacity_in_workstation
|
erpnext.patches.v12_0.set_production_capacity_in_workstation
|
||||||
erpnext.patches.v12_0.set_employee_preferred_emails
|
erpnext.patches.v12_0.set_employee_preferred_emails
|
||||||
erpnext.patches.v12_0.set_against_blanket_order_in_sales_and_purchase_order
|
erpnext.patches.v12_0.set_against_blanket_order_in_sales_and_purchase_order
|
||||||
erpnext.patches.v12_0.set_cost_center_in_child_table_of_expense_claim
|
erpnext.patches.v12_0.set_cost_center_in_child_table_of_expense_claim
|
||||||
erpnext.patches.v12_0.add_eway_bill_in_delivery_note
|
|
||||||
erpnext.patches.v12_0.set_lead_title_field
|
erpnext.patches.v12_0.set_lead_title_field
|
||||||
erpnext.patches.v12_0.set_permission_einvoicing
|
erpnext.patches.v12_0.set_permission_einvoicing
|
||||||
erpnext.patches.v12_0.set_job_offer_applicant_email
|
erpnext.patches.v12_0.set_job_offer_applicant_email
|
||||||
@ -196,7 +184,6 @@ erpnext.patches.v12_0.set_italian_import_supplier_invoice_permissions
|
|||||||
erpnext.patches.v13_0.update_subscription
|
erpnext.patches.v13_0.update_subscription
|
||||||
erpnext.patches.v12_0.unhide_cost_center_field
|
erpnext.patches.v12_0.unhide_cost_center_field
|
||||||
erpnext.patches.v13_0.update_sla_enhancements
|
erpnext.patches.v13_0.update_sla_enhancements
|
||||||
erpnext.patches.v12_0.update_address_template_for_india
|
|
||||||
erpnext.patches.v13_0.update_deferred_settings
|
erpnext.patches.v13_0.update_deferred_settings
|
||||||
erpnext.patches.v12_0.set_multi_uom_in_rfq
|
erpnext.patches.v12_0.set_multi_uom_in_rfq
|
||||||
erpnext.patches.v13_0.delete_old_sales_reports
|
erpnext.patches.v13_0.delete_old_sales_reports
|
||||||
@ -225,7 +212,6 @@ erpnext.patches.v13_0.set_youtube_video_id
|
|||||||
erpnext.patches.v13_0.set_app_name
|
erpnext.patches.v13_0.set_app_name
|
||||||
erpnext.patches.v13_0.print_uom_after_quantity_patch
|
erpnext.patches.v13_0.print_uom_after_quantity_patch
|
||||||
erpnext.patches.v13_0.set_payment_channel_in_payment_gateway_account
|
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.updates_for_multi_currency_payroll
|
||||||
erpnext.patches.v13_0.update_reason_for_resignation_in_employee
|
erpnext.patches.v13_0.update_reason_for_resignation_in_employee
|
||||||
execute:frappe.delete_doc("Report", "Quoted Item Comparison")
|
execute:frappe.delete_doc("Report", "Quoted Item Comparison")
|
||||||
@ -245,22 +231,18 @@ erpnext.patches.v12_0.add_state_code_for_ladakh
|
|||||||
erpnext.patches.v13_0.item_reposting_for_incorrect_sl_and_gl
|
erpnext.patches.v13_0.item_reposting_for_incorrect_sl_and_gl
|
||||||
erpnext.patches.v13_0.delete_old_bank_reconciliation_doctypes
|
erpnext.patches.v13_0.delete_old_bank_reconciliation_doctypes
|
||||||
erpnext.patches.v13_0.update_vehicle_no_reqd_condition
|
erpnext.patches.v13_0.update_vehicle_no_reqd_condition
|
||||||
erpnext.patches.v12_0.add_einvoice_status_field #2021-03-17
|
|
||||||
erpnext.patches.v12_0.add_einvoice_summary_report_permissions
|
|
||||||
erpnext.patches.v13_0.setup_fields_for_80g_certificate_and_donation
|
erpnext.patches.v13_0.setup_fields_for_80g_certificate_and_donation
|
||||||
erpnext.patches.v13_0.rename_membership_settings_to_non_profit_settings
|
erpnext.patches.v13_0.rename_membership_settings_to_non_profit_settings
|
||||||
erpnext.patches.v13_0.setup_gratuity_rule_for_india_and_uae
|
erpnext.patches.v13_0.setup_gratuity_rule_for_india_and_uae
|
||||||
erpnext.patches.v13_0.setup_uae_vat_fields
|
erpnext.patches.v13_0.setup_uae_vat_fields
|
||||||
execute:frappe.db.set_value('System Settings', None, 'app_name', 'ERPNext')
|
execute:frappe.db.set_value('System Settings', None, 'app_name', 'ERPNext')
|
||||||
erpnext.patches.v12_0.create_taxable_value_field
|
erpnext.patches.v12_0.create_taxable_value_field
|
||||||
erpnext.patches.v12_0.add_gst_category_in_delivery_note
|
|
||||||
erpnext.patches.v12_0.purchase_receipt_status
|
erpnext.patches.v12_0.purchase_receipt_status
|
||||||
erpnext.patches.v13_0.fix_non_unique_represents_company
|
erpnext.patches.v13_0.fix_non_unique_represents_company
|
||||||
erpnext.patches.v12_0.add_document_type_field_for_italy_einvoicing
|
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.make_non_standard_user_type #13-04-2021 #17-01-2022
|
||||||
erpnext.patches.v13_0.update_shipment_status
|
erpnext.patches.v13_0.update_shipment_status
|
||||||
erpnext.patches.v13_0.remove_attribute_field_from_item_variant_setting
|
erpnext.patches.v13_0.remove_attribute_field_from_item_variant_setting
|
||||||
erpnext.patches.v12_0.add_ewaybill_validity_field
|
|
||||||
erpnext.patches.v13_0.germany_make_custom_fields
|
erpnext.patches.v13_0.germany_make_custom_fields
|
||||||
erpnext.patches.v13_0.germany_fill_debtor_creditor_number
|
erpnext.patches.v13_0.germany_fill_debtor_creditor_number
|
||||||
erpnext.patches.v13_0.set_pos_closing_as_failed
|
erpnext.patches.v13_0.set_pos_closing_as_failed
|
||||||
@ -276,9 +258,7 @@ erpnext.patches.v13_0.update_job_card_details
|
|||||||
erpnext.patches.v13_0.add_missing_fg_item_for_stock_entry
|
erpnext.patches.v13_0.add_missing_fg_item_for_stock_entry
|
||||||
erpnext.patches.v13_0.update_subscription_status_in_memberships
|
erpnext.patches.v13_0.update_subscription_status_in_memberships
|
||||||
erpnext.patches.v13_0.update_amt_in_work_order_required_items
|
erpnext.patches.v13_0.update_amt_in_work_order_required_items
|
||||||
erpnext.patches.v12_0.show_einvoice_irn_cancelled_field
|
|
||||||
erpnext.patches.v13_0.delete_orphaned_tables
|
erpnext.patches.v13_0.delete_orphaned_tables
|
||||||
erpnext.patches.v13_0.update_export_type_for_gst #2021-08-16
|
|
||||||
erpnext.patches.v13_0.update_tds_check_field #3
|
erpnext.patches.v13_0.update_tds_check_field #3
|
||||||
erpnext.patches.v13_0.add_custom_field_for_south_africa #2
|
erpnext.patches.v13_0.add_custom_field_for_south_africa #2
|
||||||
erpnext.patches.v13_0.update_recipient_email_digest
|
erpnext.patches.v13_0.update_recipient_email_digest
|
||||||
@ -291,7 +271,6 @@ execute:frappe.reload_doc("erpnext_integrations", "doctype", "TaxJar Settings")
|
|||||||
execute:frappe.reload_doc("erpnext_integrations", "doctype", "Product Tax Category")
|
execute:frappe.reload_doc("erpnext_integrations", "doctype", "Product Tax Category")
|
||||||
erpnext.patches.v13_0.custom_fields_for_taxjar_integration #08-11-2021
|
erpnext.patches.v13_0.custom_fields_for_taxjar_integration #08-11-2021
|
||||||
erpnext.patches.v13_0.set_operation_time_based_on_operating_cost
|
erpnext.patches.v13_0.set_operation_time_based_on_operating_cost
|
||||||
erpnext.patches.v13_0.create_gst_payment_entry_fields #27-11-2021
|
|
||||||
erpnext.patches.v13_0.fix_invoice_statuses
|
erpnext.patches.v13_0.fix_invoice_statuses
|
||||||
erpnext.patches.v13_0.create_website_items #30-09-2021
|
erpnext.patches.v13_0.create_website_items #30-09-2021
|
||||||
erpnext.patches.v13_0.populate_e_commerce_settings
|
erpnext.patches.v13_0.populate_e_commerce_settings
|
||||||
@ -299,7 +278,6 @@ erpnext.patches.v13_0.make_homepage_products_website_items
|
|||||||
erpnext.patches.v13_0.replace_supplier_item_group_with_party_specific_item
|
erpnext.patches.v13_0.replace_supplier_item_group_with_party_specific_item
|
||||||
erpnext.patches.v13_0.update_dates_in_tax_withholding_category
|
erpnext.patches.v13_0.update_dates_in_tax_withholding_category
|
||||||
erpnext.patches.v14_0.update_opportunity_currency_fields
|
erpnext.patches.v14_0.update_opportunity_currency_fields
|
||||||
erpnext.patches.v13_0.gst_fields_for_pos_invoice
|
|
||||||
erpnext.patches.v13_0.create_accounting_dimensions_in_pos_doctypes
|
erpnext.patches.v13_0.create_accounting_dimensions_in_pos_doctypes
|
||||||
erpnext.patches.v13_0.trim_sales_invoice_custom_field_length
|
erpnext.patches.v13_0.trim_sales_invoice_custom_field_length
|
||||||
erpnext.patches.v13_0.create_custom_field_for_finance_book
|
erpnext.patches.v13_0.create_custom_field_for_finance_book
|
||||||
@ -316,7 +294,6 @@ erpnext.patches.v13_0.healthcare_deprecation_warning
|
|||||||
erpnext.patches.v13_0.item_naming_series_not_mandatory
|
erpnext.patches.v13_0.item_naming_series_not_mandatory
|
||||||
erpnext.patches.v14_0.delete_healthcare_doctypes
|
erpnext.patches.v14_0.delete_healthcare_doctypes
|
||||||
erpnext.patches.v13_0.update_category_in_ltds_certificate
|
erpnext.patches.v13_0.update_category_in_ltds_certificate
|
||||||
erpnext.patches.v13_0.create_pan_field_for_india #2
|
|
||||||
erpnext.patches.v13_0.fetch_thumbnail_in_website_items
|
erpnext.patches.v13_0.fetch_thumbnail_in_website_items
|
||||||
erpnext.patches.v13_0.update_maintenance_schedule_field_in_visit
|
erpnext.patches.v13_0.update_maintenance_schedule_field_in_visit
|
||||||
erpnext.patches.v13_0.create_ksa_vat_custom_fields # 07-01-2022
|
erpnext.patches.v13_0.create_ksa_vat_custom_fields # 07-01-2022
|
||||||
@ -324,7 +301,6 @@ erpnext.patches.v14_0.migrate_crm_settings
|
|||||||
erpnext.patches.v13_0.rename_ksa_qr_field
|
erpnext.patches.v13_0.rename_ksa_qr_field
|
||||||
erpnext.patches.v13_0.wipe_serial_no_field_for_0_qty
|
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.disable_ksa_print_format_for_others # 16-12-2021
|
||||||
erpnext.patches.v13_0.update_tax_category_for_rcm
|
|
||||||
execute:frappe.delete_doc_if_exists('Workspace', 'ERPNext Integrations Settings')
|
execute:frappe.delete_doc_if_exists('Workspace', 'ERPNext Integrations Settings')
|
||||||
erpnext.patches.v14_0.set_payroll_cost_centers
|
erpnext.patches.v14_0.set_payroll_cost_centers
|
||||||
erpnext.patches.v13_0.agriculture_deprecation_warning
|
erpnext.patches.v13_0.agriculture_deprecation_warning
|
||||||
@ -342,9 +318,7 @@ erpnext.patches.v14_0.delete_hospitality_doctypes # 20-01-2022
|
|||||||
erpnext.patches.v14_0.delete_agriculture_doctypes
|
erpnext.patches.v14_0.delete_agriculture_doctypes
|
||||||
erpnext.patches.v14_0.rearrange_company_fields
|
erpnext.patches.v14_0.rearrange_company_fields
|
||||||
erpnext.patches.v14_0.update_leave_notification_template
|
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.v13_0.update_sane_transfer_against
|
||||||
erpnext.patches.v12_0.add_company_link_to_einvoice_settings
|
|
||||||
erpnext.patches.v14_0.migrate_cost_center_allocations
|
erpnext.patches.v14_0.migrate_cost_center_allocations
|
||||||
erpnext.patches.v13_0.convert_to_website_item_in_item_card_group_template
|
erpnext.patches.v13_0.convert_to_website_item_in_item_card_group_template
|
||||||
erpnext.patches.v13_0.shopping_cart_to_ecommerce
|
erpnext.patches.v13_0.shopping_cart_to_ecommerce
|
||||||
|
|||||||
@ -1,13 +0,0 @@
|
|||||||
import frappe
|
|
||||||
|
|
||||||
from erpnext.regional.india.setup import add_permissions
|
|
||||||
|
|
||||||
|
|
||||||
def execute():
|
|
||||||
company = frappe.get_all('Company', filters = {'country': 'India'})
|
|
||||||
if not company:
|
|
||||||
return
|
|
||||||
|
|
||||||
frappe.reload_doc("regional", "doctype", "lower_deduction_certificate")
|
|
||||||
frappe.reload_doc("regional", "doctype", "gstr_3b_report")
|
|
||||||
add_permissions()
|
|
||||||
@ -1,11 +0,0 @@
|
|||||||
import frappe
|
|
||||||
|
|
||||||
from erpnext.regional.india.setup import make_custom_fields
|
|
||||||
|
|
||||||
|
|
||||||
def execute():
|
|
||||||
company = frappe.get_all('Company', filters = {'country': 'India'})
|
|
||||||
if not company:
|
|
||||||
return
|
|
||||||
|
|
||||||
make_custom_fields()
|
|
||||||
@ -1,72 +0,0 @@
|
|||||||
import frappe
|
|
||||||
|
|
||||||
from erpnext.regional.india.setup import make_custom_fields
|
|
||||||
|
|
||||||
|
|
||||||
def execute():
|
|
||||||
company = frappe.get_all('Company', filters = {'country': 'India'})
|
|
||||||
if not company:
|
|
||||||
return
|
|
||||||
frappe.reload_doc("Payroll", "doctype", "Employee Tax Exemption Declaration")
|
|
||||||
frappe.reload_doc("Payroll", "doctype", "Employee Tax Exemption Proof Submission")
|
|
||||||
frappe.reload_doc("hr", "doctype", "Employee Grade")
|
|
||||||
frappe.reload_doc("hr", "doctype", "Leave Policy")
|
|
||||||
|
|
||||||
frappe.reload_doc("accounts", "doctype", "Bank Account")
|
|
||||||
frappe.reload_doc("accounts", "doctype", "Tax Withholding Category")
|
|
||||||
frappe.reload_doc("accounts", "doctype", "Allowed To Transact With")
|
|
||||||
frappe.reload_doc("accounts", "doctype", "Finance Book")
|
|
||||||
frappe.reload_doc("accounts", "doctype", "Loyalty Program")
|
|
||||||
|
|
||||||
frappe.reload_doc("stock", "doctype", "Item Barcode")
|
|
||||||
|
|
||||||
make_custom_fields()
|
|
||||||
|
|
||||||
frappe.reload_doc("accounts", "doctype", "sales_taxes_and_charges")
|
|
||||||
frappe.reload_doc("accounts", "doctype", "purchase_taxes_and_charges")
|
|
||||||
frappe.reload_doc("accounts", "doctype", "sales_taxes_and_charges_template")
|
|
||||||
frappe.reload_doc("accounts", "doctype", "purchase_taxes_and_charges_template")
|
|
||||||
|
|
||||||
# set is_inter_state in Taxes And Charges Templates
|
|
||||||
if frappe.db.has_column("Sales Taxes and Charges Template", "is_inter_state") and\
|
|
||||||
frappe.db.has_column("Purchase Taxes and Charges Template", "is_inter_state"):
|
|
||||||
|
|
||||||
igst_accounts = set(frappe.db.sql_list('''SELECT igst_account from `tabGST Account` WHERE parent = "GST Settings"'''))
|
|
||||||
cgst_accounts = set(frappe.db.sql_list('''SELECT cgst_account FROM `tabGST Account` WHERE parenttype = "GST Settings"'''))
|
|
||||||
|
|
||||||
when_then_sales = get_formatted_data("Sales Taxes and Charges", igst_accounts, cgst_accounts)
|
|
||||||
when_then_purchase = get_formatted_data("Purchase Taxes and Charges", igst_accounts, cgst_accounts)
|
|
||||||
|
|
||||||
if when_then_sales:
|
|
||||||
frappe.db.sql('''update `tabSales Taxes and Charges Template`
|
|
||||||
set is_inter_state = Case {when_then} Else 0 End
|
|
||||||
'''.format(when_then=" ".join(when_then_sales)))
|
|
||||||
|
|
||||||
if when_then_purchase:
|
|
||||||
frappe.db.sql('''update `tabPurchase Taxes and Charges Template`
|
|
||||||
set is_inter_state = Case {when_then} Else 0 End
|
|
||||||
'''.format(when_then=" ".join(when_then_purchase)))
|
|
||||||
|
|
||||||
def get_formatted_data(doctype, igst_accounts, cgst_accounts):
|
|
||||||
# fetch all the rows data from child table
|
|
||||||
all_details = frappe.db.sql('''
|
|
||||||
select parent, account_head from `tab{doctype}`
|
|
||||||
where parenttype="{doctype} Template"'''.format(doctype=doctype), as_dict=True)
|
|
||||||
|
|
||||||
# group the data in the form "parent: [list of accounts]""
|
|
||||||
group_detail = {}
|
|
||||||
for i in all_details:
|
|
||||||
if not i['parent'] in group_detail: group_detail[i['parent']] = []
|
|
||||||
for j in all_details:
|
|
||||||
if i['parent']==j['parent']:
|
|
||||||
group_detail[i['parent']].append(j['account_head'])
|
|
||||||
|
|
||||||
# form when_then condition based on - if list of accounts for a document
|
|
||||||
# matches any account in igst_accounts list and not matches any in cgst_accounts list
|
|
||||||
when_then = []
|
|
||||||
for i in group_detail:
|
|
||||||
temp = set(group_detail[i])
|
|
||||||
if not temp.isdisjoint(igst_accounts) and temp.isdisjoint(cgst_accounts):
|
|
||||||
when_then.append('''When name='{name}' Then 1'''.format(name=i))
|
|
||||||
|
|
||||||
return when_then
|
|
||||||
@ -1,45 +0,0 @@
|
|||||||
import frappe
|
|
||||||
|
|
||||||
from erpnext.controllers.taxes_and_totals import get_itemised_tax_breakup_html
|
|
||||||
|
|
||||||
|
|
||||||
def execute():
|
|
||||||
company = frappe.db.sql_list("select name from tabCompany where country = 'India'")
|
|
||||||
if not company:
|
|
||||||
return
|
|
||||||
|
|
||||||
doctypes = ["Quotation", "Sales Order", "Delivery Note", "Sales Invoice",
|
|
||||||
"Supplier Quotation", "Purchase Order", "Purchase Receipt", "Purchase Invoice"]
|
|
||||||
|
|
||||||
for dt in doctypes:
|
|
||||||
date_field = "posting_date"
|
|
||||||
if dt in ["Quotation", "Sales Order", "Supplier Quotation", "Purchase Order"]:
|
|
||||||
date_field = "transaction_date"
|
|
||||||
|
|
||||||
transactions = frappe.db.sql("""
|
|
||||||
select dt.name, dt_item.name as child_name
|
|
||||||
from `tab{dt}` dt, `tab{dt} Item` dt_item
|
|
||||||
where dt.name = dt_item.parent
|
|
||||||
and dt.`{date_field}` > '2018-06-01'
|
|
||||||
and dt.docstatus = 1
|
|
||||||
and ifnull(dt_item.gst_hsn_code, '') = ''
|
|
||||||
and ifnull(dt_item.item_code, '') != ''
|
|
||||||
and dt.company in ({company})
|
|
||||||
""".format(dt=dt, date_field=date_field, company=", ".join(['%s']*len(company))), tuple(company), as_dict=1)
|
|
||||||
|
|
||||||
if not transactions:
|
|
||||||
continue
|
|
||||||
|
|
||||||
transaction_rows_name = [d.child_name for d in transactions]
|
|
||||||
|
|
||||||
frappe.db.sql("""
|
|
||||||
update `tab{dt} Item` dt_item
|
|
||||||
set dt_item.gst_hsn_code = (select gst_hsn_code from tabItem where name=dt_item.item_code)
|
|
||||||
where dt_item.name in ({rows_name})
|
|
||||||
""".format(dt=dt, rows_name=", ".join(['%s']*len(transaction_rows_name))), tuple(transaction_rows_name))
|
|
||||||
|
|
||||||
parent = set([d.name for d in transactions])
|
|
||||||
for t in list(parent):
|
|
||||||
trans_doc = frappe.get_doc(dt, t)
|
|
||||||
hsnwise_tax = get_itemised_tax_breakup_html(trans_doc)
|
|
||||||
frappe.db.set_value(dt, t, "other_charges_calculation", hsnwise_tax, update_modified=False)
|
|
||||||
@ -1,18 +0,0 @@
|
|||||||
from __future__ import unicode_literals
|
|
||||||
|
|
||||||
import frappe
|
|
||||||
|
|
||||||
|
|
||||||
def execute():
|
|
||||||
company = frappe.get_all('Company', filters = {'country': 'India'})
|
|
||||||
if not company or not frappe.db.count('E Invoice User'):
|
|
||||||
return
|
|
||||||
|
|
||||||
frappe.reload_doc("regional", "doctype", "e_invoice_user")
|
|
||||||
for creds in frappe.db.get_all('E Invoice User', fields=['name', 'gstin']):
|
|
||||||
company_name = frappe.db.sql("""
|
|
||||||
select dl.link_name from `tabAddress` a, `tabDynamic Link` dl
|
|
||||||
where a.gstin = %s and dl.parent = a.name and dl.link_doctype = 'Company'
|
|
||||||
""", (creds.get('gstin')))
|
|
||||||
if company_name and len(company_name) > 0:
|
|
||||||
frappe.db.set_value('E Invoice User', creds.get('name'), 'company', company_name[0][0])
|
|
||||||
@ -1,72 +0,0 @@
|
|||||||
from __future__ import unicode_literals
|
|
||||||
|
|
||||||
import json
|
|
||||||
|
|
||||||
import frappe
|
|
||||||
from frappe.custom.doctype.custom_field.custom_field import create_custom_fields
|
|
||||||
|
|
||||||
|
|
||||||
def execute():
|
|
||||||
company = frappe.get_all('Company', filters = {'country': 'India'})
|
|
||||||
if not company:
|
|
||||||
return
|
|
||||||
|
|
||||||
# move hidden einvoice fields to a different section
|
|
||||||
custom_fields = {
|
|
||||||
'Sales Invoice': [
|
|
||||||
dict(fieldname='einvoice_section', label='E-Invoice Fields', fieldtype='Section Break', insert_after='gst_vehicle_type',
|
|
||||||
print_hide=1, hidden=1),
|
|
||||||
|
|
||||||
dict(fieldname='ack_no', label='Ack. No.', fieldtype='Data', read_only=1, hidden=1, insert_after='einvoice_section',
|
|
||||||
no_copy=1, print_hide=1),
|
|
||||||
|
|
||||||
dict(fieldname='ack_date', label='Ack. Date', fieldtype='Data', read_only=1, hidden=1, insert_after='ack_no', no_copy=1, print_hide=1),
|
|
||||||
|
|
||||||
dict(fieldname='irn_cancel_date', label='Cancel Date', fieldtype='Data', read_only=1, hidden=1, insert_after='ack_date',
|
|
||||||
no_copy=1, print_hide=1),
|
|
||||||
|
|
||||||
dict(fieldname='signed_einvoice', label='Signed E-Invoice', fieldtype='Code', options='JSON', hidden=1, insert_after='irn_cancel_date',
|
|
||||||
no_copy=1, print_hide=1, read_only=1),
|
|
||||||
|
|
||||||
dict(fieldname='signed_qr_code', label='Signed QRCode', fieldtype='Code', options='JSON', hidden=1, insert_after='signed_einvoice',
|
|
||||||
no_copy=1, print_hide=1, read_only=1),
|
|
||||||
|
|
||||||
dict(fieldname='qrcode_image', label='QRCode', fieldtype='Attach Image', hidden=1, insert_after='signed_qr_code',
|
|
||||||
no_copy=1, print_hide=1, read_only=1),
|
|
||||||
|
|
||||||
dict(fieldname='einvoice_status', label='E-Invoice Status', fieldtype='Select', insert_after='qrcode_image',
|
|
||||||
options='\nPending\nGenerated\nCancelled\nFailed', default=None, hidden=1, no_copy=1, print_hide=1, read_only=1),
|
|
||||||
|
|
||||||
dict(fieldname='failure_description', label='E-Invoice Failure Description', fieldtype='Code', options='JSON',
|
|
||||||
hidden=1, insert_after='einvoice_status', no_copy=1, print_hide=1, read_only=1)
|
|
||||||
]
|
|
||||||
}
|
|
||||||
create_custom_fields(custom_fields, update=True)
|
|
||||||
|
|
||||||
if frappe.db.exists('E Invoice Settings') and frappe.db.get_single_value('E Invoice Settings', 'enable'):
|
|
||||||
frappe.db.sql('''
|
|
||||||
UPDATE `tabSales Invoice` SET einvoice_status = 'Pending'
|
|
||||||
WHERE
|
|
||||||
posting_date >= '2021-04-01'
|
|
||||||
AND ifnull(irn, '') = ''
|
|
||||||
AND ifnull(`billing_address_gstin`, '') != ifnull(`company_gstin`, '')
|
|
||||||
AND ifnull(gst_category, '') in ('Registered Regular', 'SEZ', 'Overseas', 'Deemed Export')
|
|
||||||
''')
|
|
||||||
|
|
||||||
# set appropriate statuses
|
|
||||||
frappe.db.sql('''UPDATE `tabSales Invoice` SET einvoice_status = 'Generated'
|
|
||||||
WHERE ifnull(irn, '') != '' AND ifnull(irn_cancelled, 0) = 0''')
|
|
||||||
|
|
||||||
frappe.db.sql('''UPDATE `tabSales Invoice` SET einvoice_status = 'Cancelled'
|
|
||||||
WHERE ifnull(irn_cancelled, 0) = 1''')
|
|
||||||
|
|
||||||
# set correct acknowledgement in e-invoices
|
|
||||||
einvoices = frappe.get_all('Sales Invoice', {'irn': ['is', 'set']}, ['name', 'signed_einvoice'])
|
|
||||||
|
|
||||||
if einvoices:
|
|
||||||
for inv in einvoices:
|
|
||||||
signed_einvoice = inv.get('signed_einvoice')
|
|
||||||
if signed_einvoice:
|
|
||||||
signed_einvoice = json.loads(signed_einvoice)
|
|
||||||
frappe.db.set_value('Sales Invoice', inv.get('name'), 'ack_no', signed_einvoice.get('AckNo'), update_modified=False)
|
|
||||||
frappe.db.set_value('Sales Invoice', inv.get('name'), 'ack_date', signed_einvoice.get('AckDt'), update_modified=False)
|
|
||||||
@ -1,20 +0,0 @@
|
|||||||
from __future__ import unicode_literals
|
|
||||||
|
|
||||||
import frappe
|
|
||||||
|
|
||||||
|
|
||||||
def execute():
|
|
||||||
company = frappe.get_all('Company', filters = {'country': 'India'})
|
|
||||||
if not company:
|
|
||||||
return
|
|
||||||
|
|
||||||
if frappe.db.exists('Report', 'E-Invoice Summary') and \
|
|
||||||
not frappe.db.get_value('Custom Role', dict(report='E-Invoice Summary')):
|
|
||||||
frappe.get_doc(dict(
|
|
||||||
doctype='Custom Role',
|
|
||||||
report='E-Invoice Summary',
|
|
||||||
roles= [
|
|
||||||
dict(role='Accounts User'),
|
|
||||||
dict(role='Accounts Manager')
|
|
||||||
]
|
|
||||||
)).insert()
|
|
||||||
@ -1,20 +0,0 @@
|
|||||||
import frappe
|
|
||||||
from frappe.custom.doctype.custom_field.custom_field import create_custom_field
|
|
||||||
|
|
||||||
|
|
||||||
def execute():
|
|
||||||
company = frappe.get_all('Company', filters = {'country': 'India'})
|
|
||||||
|
|
||||||
if not company:
|
|
||||||
return
|
|
||||||
|
|
||||||
create_custom_field('Delivery Note', {
|
|
||||||
'fieldname': 'ewaybill',
|
|
||||||
'label': 'E-Way Bill No.',
|
|
||||||
'fieldtype': 'Data',
|
|
||||||
'depends_on': 'eval:(doc.docstatus === 1)',
|
|
||||||
'allow_on_submit': 1,
|
|
||||||
'insert_after': 'customer_name_in_arabic',
|
|
||||||
'translatable': 0,
|
|
||||||
'owner': 'Administrator'
|
|
||||||
})
|
|
||||||
@ -1,18 +0,0 @@
|
|||||||
from __future__ import unicode_literals
|
|
||||||
|
|
||||||
import frappe
|
|
||||||
from frappe.custom.doctype.custom_field.custom_field import create_custom_fields
|
|
||||||
|
|
||||||
|
|
||||||
def execute():
|
|
||||||
company = frappe.get_all('Company', filters = {'country': 'India'})
|
|
||||||
if not company:
|
|
||||||
return
|
|
||||||
|
|
||||||
custom_fields = {
|
|
||||||
'Sales Invoice': [
|
|
||||||
dict(fieldname='eway_bill_validity', label='E-Way Bill Validity', fieldtype='Data', no_copy=1, print_hide=1,
|
|
||||||
depends_on='ewaybill', read_only=1, allow_on_submit=1, insert_after='ewaybill')
|
|
||||||
]
|
|
||||||
}
|
|
||||||
create_custom_fields(custom_fields, update=True)
|
|
||||||
@ -1,41 +0,0 @@
|
|||||||
import frappe
|
|
||||||
|
|
||||||
from erpnext.regional.india.setup import make_custom_fields
|
|
||||||
|
|
||||||
|
|
||||||
def execute():
|
|
||||||
|
|
||||||
company = frappe.get_all('Company', filters = {'country': 'India'})
|
|
||||||
if not company:
|
|
||||||
return
|
|
||||||
|
|
||||||
make_custom_fields()
|
|
||||||
|
|
||||||
frappe.reload_doctype('Tax Category')
|
|
||||||
frappe.reload_doctype('Sales Taxes and Charges Template')
|
|
||||||
frappe.reload_doctype('Purchase Taxes and Charges Template')
|
|
||||||
|
|
||||||
# Create tax category with inter state field checked
|
|
||||||
tax_category = frappe.db.get_value('Tax Category', {'name': 'OUT OF STATE'}, 'name')
|
|
||||||
|
|
||||||
if not tax_category:
|
|
||||||
inter_state_category = frappe.get_doc({
|
|
||||||
'doctype': 'Tax Category',
|
|
||||||
'title': 'OUT OF STATE',
|
|
||||||
'is_inter_state': 1
|
|
||||||
}).insert()
|
|
||||||
|
|
||||||
tax_category = inter_state_category.name
|
|
||||||
|
|
||||||
for doctype in ('Sales Taxes and Charges Template', 'Purchase Taxes and Charges Template'):
|
|
||||||
if not frappe.get_meta(doctype).has_field('is_inter_state'): continue
|
|
||||||
|
|
||||||
template = frappe.db.get_value(doctype, {'is_inter_state': 1, 'disabled': 0}, ['name'])
|
|
||||||
if template:
|
|
||||||
frappe.db.set_value(doctype, template, 'tax_category', tax_category)
|
|
||||||
|
|
||||||
frappe.db.sql("""
|
|
||||||
DELETE FROM `tabCustom Field`
|
|
||||||
WHERE fieldname = 'is_inter_state'
|
|
||||||
AND dt IN ('Sales Taxes and Charges Template', 'Purchase Taxes and Charges Template')
|
|
||||||
""")
|
|
||||||
@ -1,19 +0,0 @@
|
|||||||
import frappe
|
|
||||||
from frappe.custom.doctype.custom_field.custom_field import create_custom_fields
|
|
||||||
|
|
||||||
|
|
||||||
def execute():
|
|
||||||
company = frappe.get_all('Company', filters = {'country': 'India'})
|
|
||||||
if not company:
|
|
||||||
return
|
|
||||||
|
|
||||||
custom_fields = {
|
|
||||||
'Delivery Note': [
|
|
||||||
dict(fieldname='gst_category', label='GST Category',
|
|
||||||
fieldtype='Select', insert_after='gst_vehicle_type', print_hide=1,
|
|
||||||
options='\nRegistered Regular\nRegistered Composition\nUnregistered\nSEZ\nOverseas\nConsumer\nDeemed Export\nUIN Holders',
|
|
||||||
fetch_from='customer.gst_category', fetch_if_empty=1),
|
|
||||||
]
|
|
||||||
}
|
|
||||||
|
|
||||||
create_custom_fields(custom_fields, update=True)
|
|
||||||
@ -1,52 +0,0 @@
|
|||||||
import frappe
|
|
||||||
|
|
||||||
from erpnext.regional.india.setup import make_custom_fields
|
|
||||||
|
|
||||||
|
|
||||||
def execute():
|
|
||||||
|
|
||||||
company = frappe.get_all('Company', filters = {'country': 'India'})
|
|
||||||
if not company:
|
|
||||||
return
|
|
||||||
|
|
||||||
frappe.reload_doc('accounts', 'doctype', 'Tax Category')
|
|
||||||
|
|
||||||
make_custom_fields()
|
|
||||||
|
|
||||||
for doctype in ['Sales Invoice', 'Purchase Invoice']:
|
|
||||||
has_column = frappe.db.has_column(doctype,'invoice_type')
|
|
||||||
|
|
||||||
if has_column:
|
|
||||||
update_map = {
|
|
||||||
'Regular': 'Registered Regular',
|
|
||||||
'Export': 'Overseas',
|
|
||||||
'SEZ': 'SEZ',
|
|
||||||
'Deemed Export': 'Deemed Export',
|
|
||||||
}
|
|
||||||
|
|
||||||
for old, new in update_map.items():
|
|
||||||
frappe.db.sql("UPDATE `tab{doctype}` SET gst_category = %s where invoice_type = %s".format(doctype=doctype), (new, old)) #nosec
|
|
||||||
|
|
||||||
frappe.delete_doc('Custom Field', 'Sales Invoice-invoice_type')
|
|
||||||
frappe.delete_doc('Custom Field', 'Purchase Invoice-invoice_type')
|
|
||||||
|
|
||||||
itc_update_map = {
|
|
||||||
"ineligible": "Ineligible",
|
|
||||||
"input service": "Input Service Distributor",
|
|
||||||
"capital goods": "Import Of Capital Goods",
|
|
||||||
"input": "All Other ITC"
|
|
||||||
}
|
|
||||||
|
|
||||||
has_gst_fields = frappe.db.has_column('Purchase Invoice','eligibility_for_itc')
|
|
||||||
|
|
||||||
if has_gst_fields:
|
|
||||||
for old, new in itc_update_map.items():
|
|
||||||
frappe.db.sql("UPDATE `tabPurchase Invoice` SET eligibility_for_itc = %s where eligibility_for_itc = %s ", (new, old))
|
|
||||||
|
|
||||||
for doctype in ["Customer", "Supplier"]:
|
|
||||||
|
|
||||||
frappe.db.sql(""" UPDATE `tab{doctype}` t1, `tabAddress` t2, `tabDynamic Link` t3 SET t1.gst_category = "Registered Regular"
|
|
||||||
where t3.link_name = t1.name and t3.parent = t2.name and t2.gstin IS NOT NULL and t2.gstin != '' """.format(doctype=doctype)) #nosec
|
|
||||||
|
|
||||||
frappe.db.sql(""" UPDATE `tab{doctype}` t1, `tabAddress` t2, `tabDynamic Link` t3 SET t1.gst_category = "Overseas"
|
|
||||||
where t3.link_name = t1.name and t3.parent = t2.name and t2.country != 'India' """.format(doctype=doctype)) #nosec
|
|
||||||
@ -1,59 +0,0 @@
|
|||||||
from __future__ import unicode_literals
|
|
||||||
|
|
||||||
import frappe
|
|
||||||
from frappe.custom.doctype.custom_field.custom_field import create_custom_fields
|
|
||||||
|
|
||||||
from erpnext.regional.india.setup import add_permissions, add_print_formats
|
|
||||||
|
|
||||||
|
|
||||||
def execute():
|
|
||||||
company = frappe.get_all('Company', filters = {'country': 'India'})
|
|
||||||
if not company:
|
|
||||||
return
|
|
||||||
|
|
||||||
frappe.reload_doc("custom", "doctype", "custom_field")
|
|
||||||
frappe.reload_doc("regional", "doctype", "e_invoice_settings")
|
|
||||||
custom_fields = {
|
|
||||||
'Sales Invoice': [
|
|
||||||
dict(fieldname='irn', label='IRN', fieldtype='Data', read_only=1, insert_after='customer', no_copy=1, print_hide=1,
|
|
||||||
depends_on='eval:in_list(["Registered Regular", "SEZ", "Overseas", "Deemed Export"], doc.gst_category) && doc.irn_cancelled === 0'),
|
|
||||||
|
|
||||||
dict(fieldname='ack_no', label='Ack. No.', fieldtype='Data', read_only=1, hidden=1, insert_after='irn', no_copy=1, print_hide=1),
|
|
||||||
|
|
||||||
dict(fieldname='ack_date', label='Ack. Date', fieldtype='Data', read_only=1, hidden=1, insert_after='ack_no', no_copy=1, print_hide=1),
|
|
||||||
|
|
||||||
dict(fieldname='irn_cancelled', label='IRN Cancelled', fieldtype='Check', no_copy=1, print_hide=1,
|
|
||||||
depends_on='eval:(doc.irn_cancelled === 1)', read_only=1, allow_on_submit=1, insert_after='customer'),
|
|
||||||
|
|
||||||
dict(fieldname='eway_bill_cancelled', label='E-Way Bill Cancelled', fieldtype='Check', no_copy=1, print_hide=1,
|
|
||||||
depends_on='eval:(doc.eway_bill_cancelled === 1)', read_only=1, allow_on_submit=1, insert_after='customer'),
|
|
||||||
|
|
||||||
dict(fieldname='signed_einvoice', fieldtype='Code', options='JSON', hidden=1, no_copy=1, print_hide=1, read_only=1),
|
|
||||||
|
|
||||||
dict(fieldname='signed_qr_code', fieldtype='Code', options='JSON', hidden=1, no_copy=1, print_hide=1, read_only=1),
|
|
||||||
|
|
||||||
dict(fieldname='qrcode_image', label='QRCode', fieldtype='Attach Image', hidden=1, no_copy=1, print_hide=1, read_only=1)
|
|
||||||
]
|
|
||||||
}
|
|
||||||
create_custom_fields(custom_fields, update=True)
|
|
||||||
add_permissions()
|
|
||||||
add_print_formats()
|
|
||||||
|
|
||||||
einvoice_cond = 'in_list(["Registered Regular", "SEZ", "Overseas", "Deemed Export"], doc.gst_category)'
|
|
||||||
t = {
|
|
||||||
'mode_of_transport': [{'default': None}],
|
|
||||||
'distance': [{'mandatory_depends_on': f'eval:{einvoice_cond} && doc.transporter'}],
|
|
||||||
'gst_vehicle_type': [{'mandatory_depends_on': f'eval:{einvoice_cond} && doc.mode_of_transport == "Road"'}],
|
|
||||||
'lr_date': [{'mandatory_depends_on': f'eval:{einvoice_cond} && in_list(["Air", "Ship", "Rail"], doc.mode_of_transport)'}],
|
|
||||||
'lr_no': [{'mandatory_depends_on': f'eval:{einvoice_cond} && in_list(["Air", "Ship", "Rail"], doc.mode_of_transport)'}],
|
|
||||||
'vehicle_no': [{'mandatory_depends_on': f'eval:{einvoice_cond} && doc.mode_of_transport == "Road"'}],
|
|
||||||
'ewaybill': [
|
|
||||||
{'read_only_depends_on': 'eval:doc.irn && doc.ewaybill'},
|
|
||||||
{'depends_on': 'eval:((doc.docstatus === 1 || doc.ewaybill) && doc.eway_bill_cancelled === 0)'}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
|
|
||||||
for field, conditions in t.items():
|
|
||||||
for c in conditions:
|
|
||||||
[(prop, value)] = c.items()
|
|
||||||
frappe.db.set_value('Custom Field', { 'fieldname': field }, prop, value)
|
|
||||||
@ -1,14 +0,0 @@
|
|||||||
from __future__ import unicode_literals
|
|
||||||
|
|
||||||
import frappe
|
|
||||||
|
|
||||||
|
|
||||||
def execute():
|
|
||||||
company = frappe.get_all('Company', filters = {'country': 'India'})
|
|
||||||
if not company:
|
|
||||||
return
|
|
||||||
|
|
||||||
irn_cancelled_field = frappe.db.exists('Custom Field', {'dt': 'Sales Invoice', 'fieldname': 'irn_cancelled'})
|
|
||||||
if irn_cancelled_field:
|
|
||||||
frappe.db.set_value('Custom Field', irn_cancelled_field, 'depends_on', 'eval: doc.irn')
|
|
||||||
frappe.db.set_value('Custom Field', irn_cancelled_field, 'read_only', 0)
|
|
||||||
@ -1,14 +0,0 @@
|
|||||||
# Copyright (c) 2020, Frappe and Contributors
|
|
||||||
# License: GNU General Public License v3. See license.txt
|
|
||||||
|
|
||||||
|
|
||||||
import frappe
|
|
||||||
|
|
||||||
from erpnext.regional.address_template.setup import set_up_address_templates
|
|
||||||
|
|
||||||
|
|
||||||
def execute():
|
|
||||||
if frappe.db.get_value('Company', {'country': 'India'}, 'name'):
|
|
||||||
address_template = frappe.db.get_value('Address Template', 'India', 'template')
|
|
||||||
if not address_template or "gstin" not in address_template:
|
|
||||||
set_up_address_templates(default_country='India')
|
|
||||||
@ -1,27 +0,0 @@
|
|||||||
import frappe
|
|
||||||
|
|
||||||
|
|
||||||
def execute():
|
|
||||||
company = frappe.get_all('Company', filters = {'country': 'India'})
|
|
||||||
|
|
||||||
if not company:
|
|
||||||
return
|
|
||||||
|
|
||||||
field = frappe.db.get_value("Custom Field", {"dt": "Sales Invoice", "fieldname": "ewaybill"})
|
|
||||||
|
|
||||||
if field:
|
|
||||||
ewaybill_field = frappe.get_doc("Custom Field", field)
|
|
||||||
|
|
||||||
ewaybill_field.flags.ignore_validate = True
|
|
||||||
|
|
||||||
ewaybill_field.update({
|
|
||||||
'fieldname': 'ewaybill',
|
|
||||||
'label': 'e-Way Bill No.',
|
|
||||||
'fieldtype': 'Data',
|
|
||||||
'depends_on': 'eval:(doc.docstatus === 1)',
|
|
||||||
'allow_on_submit': 1,
|
|
||||||
'insert_after': 'tax_id',
|
|
||||||
'translatable': 0
|
|
||||||
})
|
|
||||||
|
|
||||||
ewaybill_field.save()
|
|
||||||
@ -1,19 +0,0 @@
|
|||||||
import frappe
|
|
||||||
|
|
||||||
|
|
||||||
def execute():
|
|
||||||
|
|
||||||
company = frappe.get_all('Company', filters = {'country': 'India'})
|
|
||||||
if not company:
|
|
||||||
return
|
|
||||||
|
|
||||||
frappe.db.sql(""" UPDATE `tabSales Invoice` set gst_category = 'Unregistered'
|
|
||||||
where gst_category = 'Registered Regular'
|
|
||||||
and ifnull(customer_gstin, '')=''
|
|
||||||
and ifnull(billing_address_gstin,'')=''
|
|
||||||
""")
|
|
||||||
|
|
||||||
frappe.db.sql(""" UPDATE `tabPurchase Invoice` set gst_category = 'Unregistered'
|
|
||||||
where gst_category = 'Registered Regular'
|
|
||||||
and ifnull(supplier_gstin, '')=''
|
|
||||||
""")
|
|
||||||
@ -1,37 +0,0 @@
|
|||||||
# Copyright (c) 2021, 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_fields
|
|
||||||
|
|
||||||
|
|
||||||
def execute():
|
|
||||||
frappe.reload_doc('accounts', 'doctype', 'advance_taxes_and_charges')
|
|
||||||
frappe.reload_doc('accounts', 'doctype', 'payment_entry')
|
|
||||||
|
|
||||||
if frappe.db.exists('Company', {'country': 'India'}):
|
|
||||||
custom_fields = {
|
|
||||||
'Payment Entry': [
|
|
||||||
dict(fieldname='gst_section', label='GST Details', fieldtype='Section Break', insert_after='deductions',
|
|
||||||
print_hide=1, collapsible=1),
|
|
||||||
dict(fieldname='company_address', label='Company Address', fieldtype='Link', insert_after='gst_section',
|
|
||||||
print_hide=1, options='Address'),
|
|
||||||
dict(fieldname='company_gstin', label='Company GSTIN',
|
|
||||||
fieldtype='Data', insert_after='company_address',
|
|
||||||
fetch_from='company_address.gstin', print_hide=1, read_only=1),
|
|
||||||
dict(fieldname='place_of_supply', label='Place of Supply',
|
|
||||||
fieldtype='Data', insert_after='company_gstin',
|
|
||||||
print_hide=1, read_only=1),
|
|
||||||
dict(fieldname='customer_address', label='Customer Address', fieldtype='Link', insert_after='place_of_supply',
|
|
||||||
print_hide=1, options='Address', depends_on = 'eval:doc.party_type == "Customer"'),
|
|
||||||
dict(fieldname='customer_gstin', label='Customer GSTIN',
|
|
||||||
fieldtype='Data', insert_after='customer_address',
|
|
||||||
fetch_from='customer_address.gstin', print_hide=1, read_only=1)
|
|
||||||
]
|
|
||||||
}
|
|
||||||
|
|
||||||
create_custom_fields(custom_fields, update=True)
|
|
||||||
else:
|
|
||||||
fields = ['gst_section', 'company_address', 'company_gstin', 'place_of_supply', 'customer_address', 'customer_gstin']
|
|
||||||
for field in fields:
|
|
||||||
frappe.delete_doc_if_exists("Custom Field", f"Payment Entry-{field}")
|
|
||||||
@ -1,29 +0,0 @@
|
|||||||
import frappe
|
|
||||||
from frappe.custom.doctype.custom_field.custom_field import create_custom_fields
|
|
||||||
|
|
||||||
|
|
||||||
def execute():
|
|
||||||
frappe.reload_doc('buying', 'doctype', 'supplier', force=True)
|
|
||||||
frappe.reload_doc('selling', 'doctype', 'customer', force=True)
|
|
||||||
frappe.reload_doc('core', 'doctype', 'doctype', force=True)
|
|
||||||
|
|
||||||
custom_fields = {
|
|
||||||
'Supplier': [
|
|
||||||
{
|
|
||||||
'fieldname': 'pan',
|
|
||||||
'label': 'PAN',
|
|
||||||
'fieldtype': 'Data',
|
|
||||||
'insert_after': 'supplier_type'
|
|
||||||
}
|
|
||||||
],
|
|
||||||
'Customer': [
|
|
||||||
{
|
|
||||||
'fieldname': 'pan',
|
|
||||||
'label': 'PAN',
|
|
||||||
'fieldtype': 'Data',
|
|
||||||
'insert_after': 'customer_type'
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
|
|
||||||
create_custom_fields(custom_fields, update=True)
|
|
||||||
@ -1,42 +0,0 @@
|
|||||||
import frappe
|
|
||||||
from frappe.custom.doctype.custom_field.custom_field import create_custom_fields
|
|
||||||
|
|
||||||
|
|
||||||
def execute():
|
|
||||||
company = frappe.get_all('Company', filters = {'country': 'India'}, fields=['name'])
|
|
||||||
if not company:
|
|
||||||
return
|
|
||||||
|
|
||||||
hsn_sac_field = dict(fieldname='gst_hsn_code', label='HSN/SAC',
|
|
||||||
fieldtype='Data', fetch_from='item_code.gst_hsn_code', insert_after='description',
|
|
||||||
allow_on_submit=1, print_hide=1, fetch_if_empty=1)
|
|
||||||
nil_rated_exempt = dict(fieldname='is_nil_exempt', label='Is Nil Rated or Exempted',
|
|
||||||
fieldtype='Check', fetch_from='item_code.is_nil_exempt', insert_after='gst_hsn_code',
|
|
||||||
print_hide=1)
|
|
||||||
is_non_gst = dict(fieldname='is_non_gst', label='Is Non GST',
|
|
||||||
fieldtype='Check', fetch_from='item_code.is_non_gst', insert_after='is_nil_exempt',
|
|
||||||
print_hide=1)
|
|
||||||
taxable_value = dict(fieldname='taxable_value', label='Taxable Value',
|
|
||||||
fieldtype='Currency', insert_after='base_net_amount', hidden=1, options="Company:company:default_currency",
|
|
||||||
print_hide=1)
|
|
||||||
sales_invoice_gst_fields = [
|
|
||||||
dict(fieldname='billing_address_gstin', label='Billing Address GSTIN',
|
|
||||||
fieldtype='Data', insert_after='customer_address', read_only=1,
|
|
||||||
fetch_from='customer_address.gstin', print_hide=1),
|
|
||||||
dict(fieldname='customer_gstin', label='Customer GSTIN',
|
|
||||||
fieldtype='Data', insert_after='shipping_address_name',
|
|
||||||
fetch_from='shipping_address_name.gstin', print_hide=1),
|
|
||||||
dict(fieldname='place_of_supply', label='Place of Supply',
|
|
||||||
fieldtype='Data', insert_after='customer_gstin',
|
|
||||||
print_hide=1, read_only=1),
|
|
||||||
dict(fieldname='company_gstin', label='Company GSTIN',
|
|
||||||
fieldtype='Data', insert_after='company_address',
|
|
||||||
fetch_from='company_address.gstin', print_hide=1, read_only=1),
|
|
||||||
]
|
|
||||||
|
|
||||||
custom_fields = {
|
|
||||||
'POS Invoice': sales_invoice_gst_fields,
|
|
||||||
'POS Invoice Item': [hsn_sac_field, nil_rated_exempt, is_non_gst, taxable_value],
|
|
||||||
}
|
|
||||||
|
|
||||||
create_custom_fields(custom_fields, update=True)
|
|
||||||
@ -1,33 +0,0 @@
|
|||||||
import frappe
|
|
||||||
|
|
||||||
|
|
||||||
def execute():
|
|
||||||
company = frappe.get_all('Company', filters = {'country': 'India'})
|
|
||||||
if not company:
|
|
||||||
return
|
|
||||||
|
|
||||||
# Update custom fields
|
|
||||||
fieldname = frappe.db.get_value('Custom Field', {'dt': 'Customer', 'fieldname': 'export_type'})
|
|
||||||
if fieldname:
|
|
||||||
frappe.db.set_value('Custom Field', fieldname,
|
|
||||||
{
|
|
||||||
'default': '',
|
|
||||||
'mandatory_depends_on': 'eval:in_list(["SEZ", "Overseas", "Deemed Export"], doc.gst_category)'
|
|
||||||
})
|
|
||||||
|
|
||||||
fieldname = frappe.db.get_value('Custom Field', {'dt': 'Supplier', 'fieldname': 'export_type'})
|
|
||||||
if fieldname:
|
|
||||||
frappe.db.set_value('Custom Field', fieldname,
|
|
||||||
{
|
|
||||||
'default': '',
|
|
||||||
'mandatory_depends_on': 'eval:in_list(["SEZ", "Overseas"], doc.gst_category)'
|
|
||||||
})
|
|
||||||
|
|
||||||
# Update Customer/Supplier Masters
|
|
||||||
frappe.db.sql("""
|
|
||||||
UPDATE `tabCustomer` set export_type = '' WHERE gst_category NOT IN ('SEZ', 'Overseas', 'Deemed Export')
|
|
||||||
""")
|
|
||||||
|
|
||||||
frappe.db.sql("""
|
|
||||||
UPDATE `tabSupplier` set export_type = '' WHERE gst_category NOT IN ('SEZ', 'Overseas')
|
|
||||||
""")
|
|
||||||
@ -1,31 +0,0 @@
|
|||||||
import frappe
|
|
||||||
from frappe.custom.doctype.custom_field.custom_field import create_custom_fields
|
|
||||||
|
|
||||||
from erpnext.regional.india import states
|
|
||||||
|
|
||||||
|
|
||||||
def execute():
|
|
||||||
company = frappe.get_all('Company', filters = {'country': 'India'})
|
|
||||||
if not company:
|
|
||||||
return
|
|
||||||
|
|
||||||
create_custom_fields({
|
|
||||||
'Tax Category': [
|
|
||||||
dict(fieldname='is_inter_state', label='Is Inter State',
|
|
||||||
fieldtype='Check', insert_after='disabled', print_hide=1),
|
|
||||||
dict(fieldname='is_reverse_charge', label='Is Reverse Charge', fieldtype='Check',
|
|
||||||
insert_after='is_inter_state', print_hide=1),
|
|
||||||
dict(fieldname='tax_category_column_break', fieldtype='Column Break',
|
|
||||||
insert_after='is_reverse_charge'),
|
|
||||||
dict(fieldname='gst_state', label='Source State', fieldtype='Select',
|
|
||||||
options='\n'.join(states), insert_after='company')
|
|
||||||
]
|
|
||||||
}, update=True)
|
|
||||||
|
|
||||||
tax_category = frappe.qb.DocType("Tax Category")
|
|
||||||
|
|
||||||
frappe.qb.update(tax_category).set(
|
|
||||||
tax_category.is_reverse_charge, 1
|
|
||||||
).where(
|
|
||||||
tax_category.name.isin(['Reverse Charge Out-State', 'Reverse Charge In-State'])
|
|
||||||
).run()
|
|
||||||
@ -1,24 +0,0 @@
|
|||||||
import frappe
|
|
||||||
from frappe.custom.doctype.custom_field.custom_field import create_custom_fields
|
|
||||||
|
|
||||||
from erpnext.regional.india.setup import add_permissions, add_print_formats
|
|
||||||
|
|
||||||
|
|
||||||
def execute():
|
|
||||||
# restores back the 2 custom fields that was deleted while removing e-invoicing from v14
|
|
||||||
company = frappe.get_all('Company', filters = {'country': 'India'})
|
|
||||||
if not company:
|
|
||||||
return
|
|
||||||
|
|
||||||
custom_fields = {
|
|
||||||
'Sales Invoice': [
|
|
||||||
dict(fieldname='irn_cancelled', label='IRN Cancelled', fieldtype='Check', no_copy=1, print_hide=1,
|
|
||||||
depends_on='eval:(doc.irn_cancelled === 1)', read_only=1, allow_on_submit=1, insert_after='customer'),
|
|
||||||
|
|
||||||
dict(fieldname='eway_bill_cancelled', label='E-Way Bill Cancelled', fieldtype='Check', no_copy=1, print_hide=1,
|
|
||||||
depends_on='eval:(doc.eway_bill_cancelled === 1)', read_only=1, allow_on_submit=1, insert_after='customer'),
|
|
||||||
]
|
|
||||||
}
|
|
||||||
create_custom_fields(custom_fields, update=True)
|
|
||||||
add_permissions()
|
|
||||||
add_print_formats()
|
|
||||||
@ -1,19 +0,0 @@
|
|||||||
# Copyright (c) 2017, Frappe and Contributors
|
|
||||||
# License: GNU General Public License v3. See license.txt
|
|
||||||
|
|
||||||
|
|
||||||
import frappe
|
|
||||||
|
|
||||||
|
|
||||||
def execute():
|
|
||||||
frappe.reload_doc('core', 'doctype', 'has_role')
|
|
||||||
company = frappe.get_all('Company', filters = {'country': 'India'})
|
|
||||||
|
|
||||||
if not company:
|
|
||||||
frappe.db.sql("""
|
|
||||||
delete from
|
|
||||||
`tabHas Role`
|
|
||||||
where
|
|
||||||
parenttype = 'Report' and parent in('GST Sales Register',
|
|
||||||
'GST Purchase Register', 'GST Itemised Sales Register',
|
|
||||||
'GST Itemised Purchase Register', 'Eway Bill')""")
|
|
||||||
@ -1,53 +0,0 @@
|
|||||||
import frappe
|
|
||||||
from frappe.email import sendmail_to_system_managers
|
|
||||||
|
|
||||||
|
|
||||||
def execute():
|
|
||||||
frappe.reload_doc('stock', 'doctype', 'item')
|
|
||||||
frappe.reload_doc("stock", "doctype", "customs_tariff_number")
|
|
||||||
frappe.reload_doc("accounts", "doctype", "payment_terms_template")
|
|
||||||
frappe.reload_doc("accounts", "doctype", "payment_schedule")
|
|
||||||
|
|
||||||
company = frappe.get_all('Company', filters = {'country': 'India'})
|
|
||||||
if not company:
|
|
||||||
return
|
|
||||||
|
|
||||||
frappe.reload_doc('regional', 'doctype', 'gst_settings')
|
|
||||||
frappe.reload_doc('regional', 'doctype', 'gst_hsn_code')
|
|
||||||
|
|
||||||
for report_name in ('GST Sales Register', 'GST Purchase Register',
|
|
||||||
'GST Itemised Sales Register', 'GST Itemised Purchase Register'):
|
|
||||||
|
|
||||||
frappe.reload_doc('regional', 'report', frappe.scrub(report_name))
|
|
||||||
|
|
||||||
from erpnext.regional.india.setup import setup
|
|
||||||
delete_custom_field_tax_id_if_exists()
|
|
||||||
setup(patch=True)
|
|
||||||
send_gst_update_email()
|
|
||||||
|
|
||||||
def delete_custom_field_tax_id_if_exists():
|
|
||||||
for field in frappe.db.sql_list("""select name from `tabCustom Field` where fieldname='tax_id'
|
|
||||||
and dt in ('Sales Order', 'Sales Invoice', 'Delivery Note')"""):
|
|
||||||
frappe.delete_doc("Custom Field", field, ignore_permissions=True)
|
|
||||||
frappe.db.commit()
|
|
||||||
|
|
||||||
def send_gst_update_email():
|
|
||||||
message = """Hello,
|
|
||||||
|
|
||||||
<p>ERPNext is now GST Ready!</p>
|
|
||||||
|
|
||||||
<p>To start making GST Invoices from 1st of July, you just need to create new Tax Accounts,
|
|
||||||
Templates and update your Customer's and Supplier's GST Numbers.</p>
|
|
||||||
|
|
||||||
<p>Please refer {gst_document_link} to know more about how to setup and implement GST in ERPNext.</p>
|
|
||||||
|
|
||||||
<p>Please contact us at support@erpnext.com, if you have any questions.</p>
|
|
||||||
|
|
||||||
<p>Thanks,</p>
|
|
||||||
ERPNext Team.
|
|
||||||
""".format(gst_document_link="<a href='http://frappe.github.io/erpnext/user/manual/en/regional/india/'> ERPNext GST Document </a>")
|
|
||||||
|
|
||||||
try:
|
|
||||||
sendmail_to_system_managers("[Important] ERPNext GST updates", message)
|
|
||||||
except Exception as e:
|
|
||||||
pass
|
|
||||||
@ -1,35 +0,0 @@
|
|||||||
import frappe
|
|
||||||
|
|
||||||
from erpnext.regional.india.setup import make_custom_fields
|
|
||||||
|
|
||||||
|
|
||||||
def execute():
|
|
||||||
company = frappe.get_all('Company', filters = {'country': 'India'})
|
|
||||||
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"]:
|
|
||||||
frappe.db.sql("""delete from `tabCustom Field` where dt = %s
|
|
||||||
and fieldname in ('port_code', 'shipping_bill_number', 'shipping_bill_date')""", doctype)
|
|
||||||
|
|
||||||
make_custom_fields()
|
|
||||||
|
|
||||||
frappe.db.sql("""
|
|
||||||
update `tabCustom Field`
|
|
||||||
set reqd = 0, `default` = ''
|
|
||||||
where fieldname = 'reason_for_issuing_document'
|
|
||||||
""")
|
|
||||||
|
|
||||||
frappe.db.sql("""
|
|
||||||
update tabAddress
|
|
||||||
set gst_state_number=concat("0", gst_state_number)
|
|
||||||
where ifnull(gst_state_number, '') != '' and gst_state_number<10
|
|
||||||
""")
|
|
||||||
Loading…
x
Reference in New Issue
Block a user