refactor(regional): moved methos to region specific utils for  KSA
diff --git a/erpnext/hooks.py b/erpnext/hooks.py
index 050ce2e..c41a108 100644
--- a/erpnext/hooks.py
+++ b/erpnext/hooks.py
@@ -262,7 +262,7 @@
 		"validate": "erpnext.regional.india.utils.validate_tax_category"
 	},
 	"Sales Invoice": {
-		"after_insert": "erpnext.regional.create_qr_code",
+		"after_insert": "erpnext.regional.saudi_arabia.utils.create_qr_code",
 		"on_submit": [
 			"erpnext.regional.create_transaction_log",
 			"erpnext.regional.italy.utils.sales_invoice_on_submit",
@@ -274,7 +274,7 @@
 		],
 		"on_trash": [
 			"erpnext.regional.check_deletion_permission",
-			"erpnext.regional.delete_qr_code_file"
+			"erpnext.regional.saudi_arabia.utils.delete_qr_code_file"
 			],
 		"validate": [
 			"erpnext.regional.india.utils.validate_document_name",
diff --git a/erpnext/regional/__init__.py b/erpnext/regional/__init__.py
index 6b68bc0..d7dcbf4 100644
--- a/erpnext/regional/__init__.py
+++ b/erpnext/regional/__init__.py
@@ -7,9 +7,6 @@
 from frappe import _
 
 from erpnext import get_region
-from pyqrcode import create as qr_create
-import io
-import os
 
 
 def check_deletion_permission(doc, method):
@@ -35,69 +32,3 @@
 		"data": data
 	}).insert(ignore_permissions=True)
 
-
-def create_qr_code(doc, method):
-	"""Create QR Code after inserting Sales Inv
-	"""
-
-	region = get_region(doc.company)
-	if region not in ['Saudi Arabia']:
-		return
-
-	# if QR Code field not present, do nothing
-	if not hasattr(doc, 'qr_code'):
-		return
-
-	# Don't create QR Code if it already exists
-	qr_code = doc.get("qr_code")
-	if qr_code and frappe.db.exists({"doctype": "File", "file_url": qr_code}):
-		return
-
-	fields = frappe.get_meta('Sales Invoice').fields
-	
-	for field in fields:
-		if field.fieldname == 'qr_code' and field.fieldtype == 'Attach Image':
-			# Creating public url to print format
-			default_print_format = frappe.db.get_value('Property Setter', dict(property='default_print_format', doc_type=doc.doctype), "value")
-			
-			# System Language
-			language = frappe.get_system_settings('language')
-			
-			# creating qr code for the url
-			url = f"{ frappe.utils.get_url() }/{ doc.doctype }/{ doc.name }?format={ default_print_format or 'Standard' }&_lang={ language }&key={ doc.get_signature() }"
-			qr_image = io.BytesIO()
-			url = qr_create(url, error='L')
-			url.png(qr_image, scale=2, quiet_zone=1)
-			
-			# making file
-			filename = f"QR-CODE-{doc.name}.png".replace(os.path.sep, "__")
-			_file = frappe.get_doc({
-				"doctype": "File",
-				"file_name": filename,
-				"is_private": 0,
-				"content": qr_image.getvalue()
-			})
-
-			_file.save()
-
-			# assigning to document
-			doc.db_set('qr_code', _file.file_url)
-			doc.notify_update()
-
-			break
-
-
-def delete_qr_code_file(doc, method):
-	"""Delete QR Code on deleted sales invoice"""
-	
-	region = get_region(doc.company)
-	if region not in ['Saudi Arabia']:
-		return
-
-	if hasattr(doc, 'qr_code'):
-		if doc.get('qr_code'):
-			file_doc = frappe.get_list('File', {
-				'file_url': doc.qr_code
-			})
-			if len(file_doc):
-				frappe.delete_doc('File', file_doc[0].name)
\ No newline at end of file
diff --git a/erpnext/regional/saudi_arabia/utils.py b/erpnext/regional/saudi_arabia/utils.py
new file mode 100644
index 0000000..4431ba0
--- /dev/null
+++ b/erpnext/regional/saudi_arabia/utils.py
@@ -0,0 +1,73 @@
+import frappe
+from frappe import _
+from erpnext import get_region
+from pyqrcode import create as qr_create
+import io
+import os
+
+
+def create_qr_code(doc, method):
+	"""Create QR Code after inserting Sales Inv
+	"""
+
+	region = get_region(doc.company)
+	if region not in ['Saudi Arabia']:
+		return
+
+	# if QR Code field not present, do nothing
+	if not hasattr(doc, 'qr_code'):
+		return
+
+	# Don't create QR Code if it already exists
+	qr_code = doc.get("qr_code")
+	if qr_code and frappe.db.exists({"doctype": "File", "file_url": qr_code}):
+		return
+
+	fields = frappe.get_meta('Sales Invoice').fields
+	
+	for field in fields:
+		if field.fieldname == 'qr_code' and field.fieldtype == 'Attach Image':
+			# Creating public url to print format
+			default_print_format = frappe.db.get_value('Property Setter', dict(property='default_print_format', doc_type=doc.doctype), "value")
+			
+			# System Language
+			language = frappe.get_system_settings('language')
+			
+			# creating qr code for the url
+			url = f"{ frappe.utils.get_url() }/{ doc.doctype }/{ doc.name }?format={ default_print_format or 'Standard' }&_lang={ language }&key={ doc.get_signature() }"
+			qr_image = io.BytesIO()
+			url = qr_create(url, error='L')
+			url.png(qr_image, scale=2, quiet_zone=1)
+			
+			# making file
+			filename = f"QR-CODE-{doc.name}.png".replace(os.path.sep, "__")
+			_file = frappe.get_doc({
+				"doctype": "File",
+				"file_name": filename,
+				"is_private": 0,
+				"content": qr_image.getvalue()
+			})
+
+			_file.save()
+
+			# assigning to document
+			doc.db_set('qr_code', _file.file_url)
+			doc.notify_update()
+
+			break
+
+
+def delete_qr_code_file(doc, method):
+	"""Delete QR Code on deleted sales invoice"""
+	
+	region = get_region(doc.company)
+	if region not in ['Saudi Arabia']:
+		return
+
+	if hasattr(doc, 'qr_code'):
+		if doc.get('qr_code'):
+			file_doc = frappe.get_list('File', {
+				'file_url': doc.qr_code
+			})
+			if len(file_doc):
+				frappe.delete_doc('File', file_doc[0].name)
\ No newline at end of file