Transaction Log for France (#12795)
* Regional overrides for France * Addition of tests and documentation
This commit is contained in:
parent
7c744acc49
commit
b8c088edb7
@ -1 +1,2 @@
|
|||||||
fichier_des_ecritures_comptables
|
fichier_des_ecritures_comptables
|
||||||
|
local_overrides
|
||||||
|
@ -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.
|
@ -198,13 +198,19 @@ doc_events = {
|
|||||||
"Website Settings": {
|
"Website Settings": {
|
||||||
"validate": "erpnext.portal.doctype.products_settings.products_settings.home_page_is_products"
|
"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": {
|
"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': {
|
'Address': {
|
||||||
'validate': 'erpnext.regional.india.utils.validate_gstin_for_india'
|
'validate': 'erpnext.regional.india.utils.validate_gstin_for_india'
|
||||||
},
|
},
|
||||||
('Sales Invoice', 'Purchase Invoice'): {
|
'Purchase Invoice': {
|
||||||
'validate': 'erpnext.regional.india.utils.set_place_of_supply'
|
'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"
|
payment_gateway_enabled = "erpnext.accounts.utils.create_payment_gateway_account"
|
||||||
|
|
||||||
regional_overrides = {
|
regional_overrides = {
|
||||||
|
'France': {
|
||||||
|
'erpnext.tests.test_regional.test_method': 'erpnext.regional.france.utils.test_method'
|
||||||
|
},
|
||||||
'India': {
|
'India': {
|
||||||
'erpnext.tests.test_regional.test_method': 'erpnext.regional.india.utils.test_method',
|
'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',
|
'erpnext.controllers.taxes_and_totals.get_itemised_tax_breakup_header': 'erpnext.regional.india.utils.get_itemised_tax_breakup_header',
|
||||||
|
35
erpnext/regional/france/utils.py
Normal file
35
erpnext/regional/france/utils.py
Normal file
@ -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'
|
@ -10,4 +10,7 @@ class TestInit(unittest.TestCase):
|
|||||||
self.assertEqual(test_method(), 'overridden')
|
self.assertEqual(test_method(), 'overridden')
|
||||||
|
|
||||||
frappe.flags.country = 'Nepal'
|
frappe.flags.country = 'Nepal'
|
||||||
self.assertEqual(test_method(), 'original')
|
self.assertEqual(test_method(), 'original')
|
||||||
|
|
||||||
|
frappe.flags.country = 'France'
|
||||||
|
self.assertEqual(test_method(), 'overridden')
|
||||||
|
Loading…
x
Reference in New Issue
Block a user