65 lines
1.4 KiB
Python

import base64
import io
import frappe
import pyqrcode
def generate_work_order_feedback_qr(doc, method=None):
"""Attach a small QR code for the public WO feedback page to custom_wo_qr."""
if not doc.name:
return
meta = frappe.get_meta("Work_Order")
if not meta.has_field("custom_wo_qr"):
return
if doc.get("custom_wo_qr"):
return
if frappe.db.exists(
"File",
{
"attached_to_doctype": "Work_Order",
"attached_to_name": doc.name,
"attached_to_field": "custom_wo_qr",
},
):
return
try:
site_url = frappe.utils.get_url().rstrip("/")
feedback_url = f"{site_url}/asm_app/wo-feedback?work_order={doc.name}"
qr_obj = pyqrcode.create(feedback_url, error="H")
buffer = io.BytesIO()
qr_obj.png(buffer, scale=6)
encoded_content = base64.b64encode(buffer.getvalue()).decode("utf-8")
file_doc = frappe.get_doc(
{
"doctype": "File",
"file_name": f"{doc.name}-wo-feedback-qr.png",
"attached_to_doctype": "Work_Order",
"attached_to_name": doc.name,
"attached_to_field": "custom_wo_qr",
"content": encoded_content,
"decode": True,
"is_private": 0,
}
)
file_doc.insert(ignore_permissions=True)
frappe.db.set_value(
"Work_Order",
doc.name,
"custom_wo_qr",
file_doc.file_url,
update_modified=False,
)
except Exception:
frappe.log_error(
f"Error generating WO feedback QR for {doc.name}",
"Work Order QR Generation Error",
)