Printing done

This commit is contained in:
CAnetzberger
2022-01-31 15:24:52 +01:00
parent 884cca1159
commit 14a8467d33
34 changed files with 2215 additions and 509 deletions

73
label_printing/api.py Normal file
View File

@@ -0,0 +1,73 @@
from __future__ import unicode_literals
import frappe, os
import json
from frappe import _
from frappe.utils.pdf import get_pdf,cleanup
from frappe.core.doctype.access_log.access_log import make_access_log
from PyPDF2 import PdfFileWriter
@frappe.whitelist()
def print_label(values):
values = json.loads(values)
printer_setting = frappe.db.get_single_value('Label Printer Settings', 'label_printer'),
for label in values["labels"]:
doc = frappe.new_doc('Label')
doc.item_code = values["item_code"]
doc.item_name = values["item_name"]
doc.delivery_date = values["delivery_date"]
doc.customer = values["customer"]
doc.batch = values["batch"]
doc.qty = label["item_qty"]
newdoc = doc.insert()
print_label_by_server("Label", newdoc.name, label["label_qty"], printer_setting[0],"Label", doc=None, no_letterhead=0, file_path=None)
return 200
def print_label_by_server(doctype, name, qty, printer_setting, print_format=None, doc=None, no_letterhead=0, file_path=None):
pdf_options = {
'page-height': frappe.db.get_single_value('Label Printer Settings', 'label_height'),
'page-width': frappe.db.get_single_value('Label Printer Settings', 'label_width'),
}
print_settings = frappe.get_doc("Network Printer Settings", printer_setting)
try:
import cups
except ImportError:
frappe.throw(_("You need to install pycups to use this feature!"))
try:
cups.setServer(print_settings.server_ip)
cups.setPort(print_settings.port)
conn = cups.Connection()
output = PdfFileWriter()
output = frappe.get_print(doctype, name, print_format, doc=doc, no_letterhead=no_letterhead, as_pdf = True, output = output, pdf_options=pdf_options)
print("Here")
print(output)
if not file_path:
file_path = os.path.join("/", "tmp", "frappe-pdf-{0}.pdf".format(frappe.generate_hash()))
output.write(open(file_path,"wb"))
for _ in range(qty):
conn.printFile(print_settings.printer_name,file_path , name, {})
except IOError as e:
if ("ContentNotFoundError" in e.message
or "ContentOperationNotPermittedError" in e.message
or "UnknownContentError" in e.message
or "RemoteHostClosedError" in e.message):
frappe.throw(_("PDF generation failed"))
except cups.IPPError:
frappe.throw(_("Printing failed"))
finally:
return
@frappe.whitelist()
def get_associated_stockentry(workorder):
return frappe.get_last_doc('Stock Entry', filters = {"work_order": "PRO-01530"})