From b8c088edb739aa3c6d1bc3acc41f4a344fd3e0b1 Mon Sep 17 00:00:00 2001 From: Charles-Henri Decultot Date: Wed, 21 Feb 2018 06:37:33 +0100 Subject: [PATCH] Transaction Log for France (#12795) * Regional overrides for France * Addition of tests and documentation --- .../user/manual/en/regional/france/index.txt | 1 + .../en/regional/france/local_overrides.md | 7 ++++ erpnext/hooks.py | 13 +++++-- erpnext/regional/france/utils.py | 35 +++++++++++++++++++ erpnext/tests/test_regional.py | 5 ++- 5 files changed, 58 insertions(+), 3 deletions(-) create mode 100644 erpnext/docs/user/manual/en/regional/france/local_overrides.md create mode 100644 erpnext/regional/france/utils.py diff --git a/erpnext/docs/user/manual/en/regional/france/index.txt b/erpnext/docs/user/manual/en/regional/france/index.txt index 2edf323e63..84fcb9e36d 100644 --- a/erpnext/docs/user/manual/en/regional/france/index.txt +++ b/erpnext/docs/user/manual/en/regional/france/index.txt @@ -1 +1,2 @@ fichier_des_ecritures_comptables +local_overrides diff --git a/erpnext/docs/user/manual/en/regional/france/local_overrides.md b/erpnext/docs/user/manual/en/regional/france/local_overrides.md new file mode 100644 index 0000000000..59eb199646 --- /dev/null +++ b/erpnext/docs/user/manual/en/regional/france/local_overrides.md @@ -0,0 +1,7 @@ +# Sales and Payment Transactions + +In order to be compliant with the latest finance law applicable to POS software, ERPNext automatically registers all sales and payment transactions in a chained log. + +If your country is set to "France", the deletion of sales and payment transactions will also not be permitted, even if the appropriate permissions are given to the user. + +Please note that ERPNext is not yet fully compliant with the 2016 Finance Law. diff --git a/erpnext/hooks.py b/erpnext/hooks.py index 45abbdb0ec..442ddf507f 100644 --- a/erpnext/hooks.py +++ b/erpnext/hooks.py @@ -198,13 +198,19 @@ doc_events = { "Website Settings": { "validate": "erpnext.portal.doctype.products_settings.products_settings.home_page_is_products" }, + "Sales Invoice": { + 'validate': 'erpnext.regional.india.utils.set_place_of_supply', + "on_submit": "erpnext.regional.france.utils.create_transaction_log", + "on_trash": "erpnext.regional.france.utils.check_deletion_permission" + }, "Payment Entry": { - "on_submit": "erpnext.accounts.doctype.payment_request.payment_request.make_status_as_paid" + "on_submit": ["erpnext.regional.france.utils.create_transaction_log", "erpnext.accounts.doctype.payment_request.payment_request.make_status_as_paid"], + "on_trash": "erpnext.regional.france.utils.check_deletion_permission" }, 'Address': { 'validate': 'erpnext.regional.india.utils.validate_gstin_for_india' }, - ('Sales Invoice', 'Purchase Invoice'): { + 'Purchase Invoice': { 'validate': 'erpnext.regional.india.utils.set_place_of_supply' } } @@ -257,6 +263,9 @@ get_site_info = 'erpnext.utilities.get_site_info' payment_gateway_enabled = "erpnext.accounts.utils.create_payment_gateway_account" regional_overrides = { + 'France': { + 'erpnext.tests.test_regional.test_method': 'erpnext.regional.france.utils.test_method' + }, 'India': { 'erpnext.tests.test_regional.test_method': 'erpnext.regional.india.utils.test_method', 'erpnext.controllers.taxes_and_totals.get_itemised_tax_breakup_header': 'erpnext.regional.india.utils.get_itemised_tax_breakup_header', diff --git a/erpnext/regional/france/utils.py b/erpnext/regional/france/utils.py new file mode 100644 index 0000000000..c963d7431f --- /dev/null +++ b/erpnext/regional/france/utils.py @@ -0,0 +1,35 @@ +# Copyright (c) 2018, Frappe Technologies and contributors +# For license information, please see license.txt + +import frappe +from frappe import _ +from erpnext import get_region + +def create_transaction_log(doc, method): + region = get_region() + if region not in ["France"]: + return + + else: + + data = str(doc.as_dict()) + + frappe.get_doc({ + "doctype": "Transaction Log", + "reference_doctype": doc.doctype, + "document_name": doc.name, + "data": data + }).insert(ignore_permissions=True) + +def check_deletion_permission(doc, method): + region = get_region() + if region not in ["France"]: + return + + else: + frappe.throw(_("Deletion is not permitted for country {0}".format(region))) + +# don't remove this function it is used in tests +def test_method(): + '''test function''' + return 'overridden' diff --git a/erpnext/tests/test_regional.py b/erpnext/tests/test_regional.py index 5d9628f64e..7524ccca06 100644 --- a/erpnext/tests/test_regional.py +++ b/erpnext/tests/test_regional.py @@ -10,4 +10,7 @@ class TestInit(unittest.TestCase): self.assertEqual(test_method(), 'overridden') frappe.flags.country = 'Nepal' - self.assertEqual(test_method(), 'original') \ No newline at end of file + self.assertEqual(test_method(), 'original') + + frappe.flags.country = 'France' + self.assertEqual(test_method(), 'overridden')