blob: 0c036f905ceb26807c5d43c9f0f8a7a13e1b0592 [file] [log] [blame]
Ahmad8a425702021-09-14 14:45:23 +05001import io
2import os
3
Ahmad940db712021-09-17 01:14:41 +05004import frappe
5from pyqrcode import create as qr_create
6
7from erpnext import get_region
8
Ahmad8a425702021-09-14 14:45:23 +05009
10def create_qr_code(doc, method):
11 """Create QR Code after inserting Sales Inv
12 """
13
14 region = get_region(doc.company)
15 if region not in ['Saudi Arabia']:
16 return
17
18 # if QR Code field not present, do nothing
19 if not hasattr(doc, 'qr_code'):
20 return
21
22 # Don't create QR Code if it already exists
23 qr_code = doc.get("qr_code")
24 if qr_code and frappe.db.exists({"doctype": "File", "file_url": qr_code}):
25 return
26
Ahmadf1e5a642021-09-17 01:33:32 +050027 meta = frappe.get_meta('Sales Invoice')
Ahmad940db712021-09-17 01:14:41 +050028
Ahmadf1e5a642021-09-17 01:33:32 +050029 for field in meta.get_image_fields():
30 if field.fieldname == 'qr_code':
Saqib Ansariac273912021-11-20 11:22:19 +053031 from urllib.parse import urlencode
32
Ahmad8a425702021-09-14 14:45:23 +050033 # Creating public url to print format
34 default_print_format = frappe.db.get_value('Property Setter', dict(property='default_print_format', doc_type=doc.doctype), "value")
Ahmad940db712021-09-17 01:14:41 +050035
Ahmad8a425702021-09-14 14:45:23 +050036 # System Language
37 language = frappe.get_system_settings('language')
Ahmad940db712021-09-17 01:14:41 +050038
Saqib Ansariac273912021-11-20 11:22:19 +053039 params = urlencode({
40 'format': default_print_format or 'Standard',
41 '_lang': language,
42 'key': doc.get_signature()
43 })
44
Ahmad8a425702021-09-14 14:45:23 +050045 # creating qr code for the url
Saqib Ansariac273912021-11-20 11:22:19 +053046 url = f"{ frappe.utils.get_url() }/{ doc.doctype }/{ doc.name }?{ params }"
Ahmad8a425702021-09-14 14:45:23 +050047 qr_image = io.BytesIO()
48 url = qr_create(url, error='L')
49 url.png(qr_image, scale=2, quiet_zone=1)
Ahmad940db712021-09-17 01:14:41 +050050
Ahmad8a425702021-09-14 14:45:23 +050051 # making file
52 filename = f"QR-CODE-{doc.name}.png".replace(os.path.sep, "__")
53 _file = frappe.get_doc({
54 "doctype": "File",
55 "file_name": filename,
56 "is_private": 0,
Ahmad05321d72021-09-17 01:28:52 +050057 "content": qr_image.getvalue(),
58 "attached_to_doctype": doc.get("doctype"),
59 "attached_to_name": doc.get("name"),
60 "attached_to_field": "qr_code"
Ahmad8a425702021-09-14 14:45:23 +050061 })
62
63 _file.save()
64
65 # assigning to document
66 doc.db_set('qr_code', _file.file_url)
67 doc.notify_update()
68
69 break
70
71
72def delete_qr_code_file(doc, method):
73 """Delete QR Code on deleted sales invoice"""
Ahmad940db712021-09-17 01:14:41 +050074
Ahmad8a425702021-09-14 14:45:23 +050075 region = get_region(doc.company)
76 if region not in ['Saudi Arabia']:
77 return
78
79 if hasattr(doc, 'qr_code'):
80 if doc.get('qr_code'):
81 file_doc = frappe.get_list('File', {
Ahmad95b3b9c2021-09-17 01:27:37 +050082 'file_url': doc.get('qr_code')
Ahmad8a425702021-09-14 14:45:23 +050083 })
84 if len(file_doc):
85 frappe.delete_doc('File', file_doc[0].name)