| import io |
| import os |
| |
| import frappe |
| from pyqrcode import create as qr_create |
| |
| from erpnext import get_region |
| |
| |
| 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 |
| |
| meta = frappe.get_meta('Sales Invoice') |
| |
| for field in meta.get_image_fields(): |
| if field.fieldname == 'qr_code': |
| from urllib.parse import urlencode |
| |
| # 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') |
| |
| params = urlencode({ |
| 'format': default_print_format or 'Standard', |
| '_lang': language, |
| 'key': doc.get_signature() |
| }) |
| |
| # creating qr code for the url |
| url = f"{ frappe.utils.get_url() }/{ doc.doctype }/{ doc.name }?{ params }" |
| 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(), |
| "attached_to_doctype": doc.get("doctype"), |
| "attached_to_name": doc.get("name"), |
| "attached_to_field": "qr_code" |
| }) |
| |
| _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.get('qr_code') |
| }) |
| if len(file_doc): |
| frappe.delete_doc('File', file_doc[0].name) |
| |
| def delete_vat_settings_for_company(doc, method): |
| if doc.country != 'Saudi Arabia': |
| return |
| |
| settings_doc = frappe.get_doc('KSA VAT Setting', {'company': doc.name}) |
| settings_doc.delete() |