@@ -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,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 | |||
} |
@@ -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 |