feat: create QR Code field if not existing

This commit is contained in:
Dany Robert 2021-12-07 12:11:43 +05:30 committed by GitHub
parent ef53eb7fcd
commit 276bf73974
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -1,36 +1,42 @@
import io import io
import os import os
from base64 import b64encode from base64 import b64encode
from pyqrcode import create as qr_create
import frappe import frappe
from frappe import _ from frappe import _
from frappe.custom.doctype.custom_field.custom_field import create_custom_fields
from frappe.utils.data import add_to_date, get_time, getdate from frappe.utils.data import add_to_date, get_time, getdate
from pyqrcode import create as qr_create
from erpnext import get_region from erpnext import get_region
def create_qr_code(doc, method): def create_qr_code(doc, method):
"""Create QR Code after inserting Sales Inv
"""
region = get_region(doc.company) region = get_region(doc.company)
if region not in ['Saudi Arabia']: if region not in ['Saudi Arabia']:
return return
# if QR Code field not present, do nothing # if QR Code field not present, create it. Invoices without QR are invalid as per law.
if not hasattr(doc, 'qr_code'): if not hasattr(doc, 'ksa_einv_qr'):
return create_custom_fields({
'Sales Invoice': [
dict(
fieldname='ksa_einv_qr',
label='QR Code',
fieldtype='Attach Image',
read_only=1, no_copy=1, hidden=1
)
]
})
# Don't create QR Code if it already exists # Don't create QR Code if it already exists
qr_code = doc.get("qr_code") qr_code = doc.get("ksa_einv_qr")
if qr_code and frappe.db.exists({"doctype": "File", "file_url": qr_code}): if qr_code and frappe.db.exists({"doctype": "File", "file_url": qr_code}):
return return
meta = frappe.get_meta('Sales Invoice') meta = frappe.get_meta(doc.doctype)
for field in meta.get_image_fields(): if "ksa_einv_qr" in [d.fieldname for d in meta.get_image_fields()]:
if field.fieldname == 'qr_code':
''' TLV conversion for ''' TLV conversion for
1. Seller's Name 1. Seller's Name
2. VAT Number 2. VAT Number
@ -112,29 +118,25 @@ def create_qr_code(doc, method):
"content": qr_image.getvalue(), "content": qr_image.getvalue(),
"attached_to_doctype": doc.get("doctype"), "attached_to_doctype": doc.get("doctype"),
"attached_to_name": doc.get("name"), "attached_to_name": doc.get("name"),
"attached_to_field": "qr_code" "attached_to_field": "ksa_einv_qr"
}) })
_file.save() _file.save()
# assigning to document # assigning to document
doc.db_set('qr_code', _file.file_url) doc.db_set('ksa_einv_qr', _file.file_url)
doc.notify_update() doc.notify_update()
break
def delete_qr_code_file(doc, method):
"""Delete QR Code on deleted sales invoice"""
def delete_qr_code_file(doc, method=None):
region = get_region(doc.company) region = get_region(doc.company)
if region not in ['Saudi Arabia']: if region not in ['Saudi Arabia']:
return return
if hasattr(doc, 'qr_code'): if hasattr(doc, 'ksa_einv_qr'):
if doc.get('qr_code'): if doc.get('ksa_einv_qr'):
file_doc = frappe.get_list('File', { file_doc = frappe.get_list('File', {
'file_url': doc.get('qr_code') 'file_url': doc.get('ksa_einv_qr')
}) })
if len(file_doc): if len(file_doc):
frappe.delete_doc('File', file_doc[0].name) frappe.delete_doc('File', file_doc[0].name)
@ -143,5 +145,6 @@ def delete_vat_settings_for_company(doc, method):
if doc.country != 'Saudi Arabia': if doc.country != 'Saudi Arabia':
return return
settings_doc = frappe.get_doc('KSA VAT Setting', {'company': doc.name}) settings_doc = frappe.get_all('KSA VAT Setting', filters={'company': doc.name}, pluck='name')
settings_doc.delete() for settings in settings_doc:
frappe.delete_doc('KSA VAT Setting', settings)