@@ -15,27 +15,5 @@ frappe.ui.form.on('Print Settings', { | |||||
}, | }, | ||||
onload: function(frm) { | onload: function(frm) { | ||||
frm.script_manager.trigger("print_style"); | 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", | "allow_print_for_cancelled", | ||||
"server_printer", | "server_printer", | ||||
"enable_print_server", | "enable_print_server", | ||||
"server_ip", | |||||
"printer_name", | |||||
"port", | |||||
"default_printer_setting", | |||||
"raw_printing_section", | "raw_printing_section", | ||||
"enable_raw_printing", | "enable_raw_printing", | ||||
"print_style_section", | "print_style_section", | ||||
@@ -107,29 +105,11 @@ | |||||
}, | }, | ||||
{ | { | ||||
"default": "0", | "default": "0", | ||||
"depends_on": "enable_print_server", | |||||
"fieldname": "enable_print_server", | "fieldname": "enable_print_server", | ||||
"fieldtype": "Check", | "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", | "fieldname": "raw_printing_section", | ||||
@@ -177,13 +157,19 @@ | |||||
"fieldname": "font_size", | "fieldname": "font_size", | ||||
"fieldtype": "Float", | "fieldtype": "Float", | ||||
"label": "Font Size" | "label": "Font Size" | ||||
}, | |||||
{ | |||||
"fieldname": "default_printer_setting", | |||||
"fieldtype": "Link", | |||||
"label": "Default Printer Setting", | |||||
"options": "Printer Settings" | |||||
} | } | ||||
], | ], | ||||
"icon": "fa fa-cog", | "icon": "fa fa-cog", | ||||
"index_web_pages_for_search": 1, | "index_web_pages_for_search": 1, | ||||
"issingle": 1, | "issingle": 1, | ||||
"links": [], | "links": [], | ||||
"modified": "2021-02-15 14:16:18.474254", | |||||
"modified": "2021-09-09 11:07:23.042310", | |||||
"modified_by": "Administrator", | "modified_by": "Administrator", | ||||
"module": "Printing", | "module": "Printing", | ||||
"name": "Print Settings", | "name": "Print Settings", | ||||
@@ -12,26 +12,6 @@ class PrintSettings(Document): | |||||
def on_update(self): | def on_update(self): | ||||
frappe.clear_cache() | 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() | @frappe.whitelist() | ||||
def is_print_server_enabled(): | def is_print_server_enabled(): | ||||
if not hasattr(frappe.local, 'enable_print_server'): | 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; | ).$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( | this.letterhead_selector_df = this.add_sidebar_item( | ||||
{ | { | ||||
fieldtype: 'Autocomplete', | fieldtype: 'Autocomplete', | ||||
@@ -150,6 +161,26 @@ frappe.ui.form.PrintView = class { | |||||
return field; | 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) { | get_default_option_for_select(value) { | ||||
return { | return { | ||||
label: value, | label: value, | ||||
@@ -470,9 +501,10 @@ frappe.ui.form.PrintView = class { | |||||
args: { | args: { | ||||
doctype: me.frm.doc.doctype, | doctype: me.frm.doc.doctype, | ||||
name: me.frm.doc.name, | name: me.frm.doc.name, | ||||
printer_setting: me.printer_sel.val(), | |||||
print_format: me.selected_format(), | print_format: me.selected_format(), | ||||
no_letterhead: me.with_letterhead(), | no_letterhead: me.with_letterhead(), | ||||
letterhead: this.get_letterhead(), | |||||
letterhead: me.get_letterhead(), | |||||
}, | }, | ||||
callback: function() {}, | callback: function() {}, | ||||
}); | }); | ||||
@@ -98,8 +98,8 @@ def report_to_pdf(html, orientation="Landscape"): | |||||
frappe.local.response.type = "pdf" | frappe.local.response.type = "pdf" | ||||
@frappe.whitelist() | @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: | try: | ||||
import cups | import cups | ||||
except ImportError: | except ImportError: | ||||
@@ -123,4 +123,4 @@ def print_by_server(doctype, name, print_format=None, doc=None, no_letterhead=0) | |||||
except cups.IPPError: | except cups.IPPError: | ||||
frappe.throw(_("Printing failed")) | frappe.throw(_("Printing failed")) | ||||
finally: | finally: | ||||
cleanup(file,{}) | |||||
return |