feat: provision to add multiple network printers
This commit is contained in:
parent
1c48bd81f5
commit
ec938c960e
10 changed files with 201 additions and 71 deletions
|
|
@ -15,27 +15,5 @@ frappe.ui.form.on('Print Settings', {
|
|||
},
|
||||
onload: function(frm) {
|
||||
frm.script_manager.trigger("print_style");
|
||||
},
|
||||
server_ip: function(frm) {
|
||||
frm.trigger("connect_print_server");
|
||||
},
|
||||
port:function(frm) {
|
||||
frm.trigger("connect_print_server");
|
||||
},
|
||||
connect_print_server:function(frm) {
|
||||
if(frm.doc.server_ip && frm.doc.port){
|
||||
frappe.call({
|
||||
"doc": frm.doc,
|
||||
"method": "get_printers",
|
||||
"args": {
|
||||
ip: frm.doc.server_ip,
|
||||
port: frm.doc.port
|
||||
},
|
||||
callback: function(data) {
|
||||
frm.set_df_property('printer_name', 'options', [""].concat(data.message));
|
||||
},
|
||||
error: (data) => frm.set_value("enable_print_server", 0)
|
||||
});
|
||||
}
|
||||
}
|
||||
});
|
||||
|
|
|
|||
|
|
@ -19,9 +19,7 @@
|
|||
"allow_print_for_cancelled",
|
||||
"server_printer",
|
||||
"enable_print_server",
|
||||
"server_ip",
|
||||
"printer_name",
|
||||
"port",
|
||||
"default_printer_setting",
|
||||
"raw_printing_section",
|
||||
"enable_raw_printing",
|
||||
"print_style_section",
|
||||
|
|
@ -107,29 +105,11 @@
|
|||
},
|
||||
{
|
||||
"default": "0",
|
||||
"depends_on": "enable_print_server",
|
||||
"fieldname": "enable_print_server",
|
||||
"fieldtype": "Check",
|
||||
"label": "Enable Print Server"
|
||||
},
|
||||
{
|
||||
"default": "localhost",
|
||||
"depends_on": "enable_print_server",
|
||||
"fieldname": "server_ip",
|
||||
"fieldtype": "Data",
|
||||
"label": "Server IP"
|
||||
},
|
||||
{
|
||||
"depends_on": "enable_print_server",
|
||||
"fieldname": "printer_name",
|
||||
"fieldtype": "Select",
|
||||
"label": "Printer Name"
|
||||
},
|
||||
{
|
||||
"default": "631",
|
||||
"depends_on": "enable_print_server",
|
||||
"fieldname": "port",
|
||||
"fieldtype": "Int",
|
||||
"label": "Port"
|
||||
"label": "Enable Print Server",
|
||||
"mandatory_depends_on": "enable_print_server"
|
||||
},
|
||||
{
|
||||
"fieldname": "raw_printing_section",
|
||||
|
|
@ -177,13 +157,19 @@
|
|||
"fieldname": "font_size",
|
||||
"fieldtype": "Float",
|
||||
"label": "Font Size"
|
||||
},
|
||||
{
|
||||
"fieldname": "default_printer_setting",
|
||||
"fieldtype": "Link",
|
||||
"label": "Default Printer Setting",
|
||||
"options": "Printer Settings"
|
||||
}
|
||||
],
|
||||
"icon": "fa fa-cog",
|
||||
"index_web_pages_for_search": 1,
|
||||
"issingle": 1,
|
||||
"links": [],
|
||||
"modified": "2021-02-15 14:16:18.474254",
|
||||
"modified": "2021-09-09 11:07:23.042310",
|
||||
"modified_by": "Administrator",
|
||||
"module": "Printing",
|
||||
"name": "Print Settings",
|
||||
|
|
|
|||
|
|
@ -12,26 +12,6 @@ class PrintSettings(Document):
|
|||
def on_update(self):
|
||||
frappe.clear_cache()
|
||||
|
||||
@frappe.whitelist()
|
||||
def get_printers(self,ip="localhost",port=631):
|
||||
printer_list = []
|
||||
try:
|
||||
import cups
|
||||
except ImportError:
|
||||
frappe.throw(_("You need to install pycups to use this feature!"))
|
||||
return
|
||||
try:
|
||||
cups.setServer(self.server_ip)
|
||||
cups.setPort(self.port)
|
||||
conn = cups.Connection()
|
||||
printers = conn.getPrinters()
|
||||
printer_list = printers.keys()
|
||||
except RuntimeError:
|
||||
frappe.throw(_("Failed to connect to server"))
|
||||
except frappe.ValidationError:
|
||||
frappe.throw(_("Failed to connect to server"))
|
||||
return printer_list
|
||||
|
||||
@frappe.whitelist()
|
||||
def is_print_server_enabled():
|
||||
if not hasattr(frappe.local, 'enable_print_server'):
|
||||
|
|
|
|||
0
frappe/printing/doctype/printer_settings/__init__.py
Normal file
0
frappe/printing/doctype/printer_settings/__init__.py
Normal file
32
frappe/printing/doctype/printer_settings/printer_settings.js
Normal file
32
frappe/printing/doctype/printer_settings/printer_settings.js
Normal file
|
|
@ -0,0 +1,32 @@
|
|||
// Copyright (c) 2021, Frappe Technologies and contributors
|
||||
// For license information, please see license.txt
|
||||
|
||||
frappe.ui.form.on('Printer Settings', {
|
||||
onload (frm) {
|
||||
if(!frm.is_new()) {
|
||||
frm.trigger("connect_print_server");
|
||||
}
|
||||
},
|
||||
server_ip (frm) {
|
||||
frm.trigger("connect_print_server");
|
||||
},
|
||||
port (frm) {
|
||||
frm.trigger("connect_print_server");
|
||||
},
|
||||
connect_print_server (frm) {
|
||||
if(frm.doc.server_ip && frm.doc.port){
|
||||
frappe.call({
|
||||
"doc": frm.doc,
|
||||
"method": "get_printers_list",
|
||||
"args": {
|
||||
ip: frm.doc.server_ip,
|
||||
port: frm.doc.port
|
||||
},
|
||||
callback: function(data) {
|
||||
console.log(data.message);
|
||||
frm.set_df_property('printer_name', 'options', [""].concat(data.message));
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
});
|
||||
|
|
@ -0,0 +1,74 @@
|
|||
{
|
||||
"actions": [],
|
||||
"autoname": "format:{server_ip}-{printer_name}",
|
||||
"creation": "2021-09-07 11:13:57.724404",
|
||||
"doctype": "DocType",
|
||||
"editable_grid": 1,
|
||||
"engine": "InnoDB",
|
||||
"field_order": [
|
||||
"server_ip",
|
||||
"printer_name",
|
||||
"port",
|
||||
"column_break_4",
|
||||
"reference_doctype"
|
||||
],
|
||||
"fields": [
|
||||
{
|
||||
"default": "localhost",
|
||||
"fieldname": "server_ip",
|
||||
"fieldtype": "Data",
|
||||
"in_list_view": 1,
|
||||
"label": "Server IP",
|
||||
"reqd": 1
|
||||
},
|
||||
{
|
||||
"fieldname": "printer_name",
|
||||
"fieldtype": "Select",
|
||||
"in_list_view": 1,
|
||||
"label": "Printer Name",
|
||||
"reqd": 1
|
||||
},
|
||||
{
|
||||
"default": "631",
|
||||
"fieldname": "port",
|
||||
"fieldtype": "Int",
|
||||
"in_list_view": 1,
|
||||
"label": "Port",
|
||||
"reqd": 1
|
||||
},
|
||||
{
|
||||
"fieldname": "column_break_4",
|
||||
"fieldtype": "Column Break"
|
||||
},
|
||||
{
|
||||
"fieldname": "reference_doctype",
|
||||
"fieldtype": "Link",
|
||||
"label": "Reference DocType",
|
||||
"options": "DocType"
|
||||
}
|
||||
],
|
||||
"index_web_pages_for_search": 1,
|
||||
"links": [],
|
||||
"modified": "2021-09-07 13:17:26.978129",
|
||||
"modified_by": "Administrator",
|
||||
"module": "Printing",
|
||||
"name": "Printer Settings",
|
||||
"owner": "Administrator",
|
||||
"permissions": [
|
||||
{
|
||||
"create": 1,
|
||||
"delete": 1,
|
||||
"email": 1,
|
||||
"export": 1,
|
||||
"print": 1,
|
||||
"read": 1,
|
||||
"report": 1,
|
||||
"role": "System Manager",
|
||||
"share": 1,
|
||||
"write": 1
|
||||
}
|
||||
],
|
||||
"sort_field": "modified",
|
||||
"sort_order": "DESC",
|
||||
"track_changes": 1
|
||||
}
|
||||
40
frappe/printing/doctype/printer_settings/printer_settings.py
Normal file
40
frappe/printing/doctype/printer_settings/printer_settings.py
Normal file
|
|
@ -0,0 +1,40 @@
|
|||
# Copyright (c) 2021, Frappe Technologies and contributors
|
||||
# For license information, please see license.txt
|
||||
|
||||
import frappe
|
||||
from frappe.model.document import Document
|
||||
from frappe import _
|
||||
|
||||
class PrinterSettings(Document):
|
||||
@frappe.whitelist()
|
||||
def get_printers_list(self,ip="localhost",port=631):
|
||||
print("``````````````````````````````````")
|
||||
print(ip)
|
||||
print(port)
|
||||
printer_list = []
|
||||
try:
|
||||
import cups
|
||||
except ImportError:
|
||||
frappe.throw(_("You need to install pycups to use this feature!"))
|
||||
return
|
||||
try:
|
||||
cups.setServer(self.server_ip)
|
||||
cups.setPort(self.port)
|
||||
conn = cups.Connection()
|
||||
printers = conn.getPrinters()
|
||||
for printer_id,printer in printers.items():
|
||||
printer_list.append({
|
||||
'value': printer_id,
|
||||
'label': printer['printer-make-and-model']
|
||||
})
|
||||
print(printer_list)
|
||||
print("``````````````````````````````````")
|
||||
except RuntimeError:
|
||||
frappe.throw(_("Failed to connect to server"))
|
||||
except frappe.ValidationError:
|
||||
frappe.throw(_("Failed to connect to server"))
|
||||
return printer_list
|
||||
|
||||
@frappe.whitelist()
|
||||
def get_printer_setting(doctype):
|
||||
return frappe.db.get_value('Printer Settings', {'reference_doctype': doctype})
|
||||
|
|
@ -0,0 +1,8 @@
|
|||
# Copyright (c) 2021, Frappe Technologies and Contributors
|
||||
# See license.txt
|
||||
|
||||
# import frappe
|
||||
import unittest
|
||||
|
||||
class TestPrinterSettings(unittest.TestCase):
|
||||
pass
|
||||
|
|
@ -113,6 +113,17 @@ frappe.ui.form.PrintView = class {
|
|||
},
|
||||
).$input;
|
||||
|
||||
if(cint(this.print_settings.enable_print_server)) {
|
||||
this.printer_sel = this.add_sidebar_item({
|
||||
fieldtype:'Link',
|
||||
fieldname: 'printer',
|
||||
placeholder: __('Printer'),
|
||||
options:'Printer Settings',
|
||||
default: this.printer_setting
|
||||
}).$input;
|
||||
this.get_printer_settings();
|
||||
}
|
||||
|
||||
this.letterhead_selector_df = this.add_sidebar_item(
|
||||
{
|
||||
fieldtype: 'Autocomplete',
|
||||
|
|
@ -150,6 +161,26 @@ frappe.ui.form.PrintView = class {
|
|||
return field;
|
||||
}
|
||||
|
||||
get_printer_settings() {
|
||||
let route = frappe.get_route();
|
||||
let doctype = route[1];
|
||||
let me = this
|
||||
frappe.call({
|
||||
method: 'frappe.printing.doctype.printer_settings.printer_settings.get_printer_setting',
|
||||
args: {
|
||||
doctype: doctype,
|
||||
},
|
||||
callback: function(r) {
|
||||
if (r.message) {
|
||||
me.printer_setting = r.message;
|
||||
}
|
||||
else {
|
||||
me.printer_setting = me.print_settings.default_printer_setting;
|
||||
}
|
||||
me.printer_sel.val(me.printer_setting);
|
||||
},
|
||||
});
|
||||
}
|
||||
get_default_option_for_select(value) {
|
||||
return {
|
||||
label: value,
|
||||
|
|
@ -470,9 +501,10 @@ frappe.ui.form.PrintView = class {
|
|||
args: {
|
||||
doctype: me.frm.doc.doctype,
|
||||
name: me.frm.doc.name,
|
||||
printer_setting: me.printer_sel.val(),
|
||||
print_format: me.selected_format(),
|
||||
no_letterhead: me.with_letterhead(),
|
||||
letterhead: this.get_letterhead(),
|
||||
letterhead: me.get_letterhead(),
|
||||
},
|
||||
callback: function() {},
|
||||
});
|
||||
|
|
|
|||
|
|
@ -98,8 +98,8 @@ def report_to_pdf(html, orientation="Landscape"):
|
|||
frappe.local.response.type = "pdf"
|
||||
|
||||
@frappe.whitelist()
|
||||
def print_by_server(doctype, name, print_format=None, doc=None, no_letterhead=0):
|
||||
print_settings = frappe.get_doc("Print Settings")
|
||||
def print_by_server(doctype, name, printer_setting, print_format=None, doc=None, no_letterhead=0):
|
||||
print_settings = frappe.get_doc("Printer Settings", printer_setting)
|
||||
try:
|
||||
import cups
|
||||
except ImportError:
|
||||
|
|
@ -123,4 +123,4 @@ def print_by_server(doctype, name, print_format=None, doc=None, no_letterhead=0)
|
|||
except cups.IPPError:
|
||||
frappe.throw(_("Printing failed"))
|
||||
finally:
|
||||
cleanup(file,{})
|
||||
return
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue