diff --git a/frappe/printing/doctype/printer_settings/__init__.py b/frappe/printing/doctype/network_printer_settings/__init__.py similarity index 100% rename from frappe/printing/doctype/printer_settings/__init__.py rename to frappe/printing/doctype/network_printer_settings/__init__.py diff --git a/frappe/printing/doctype/printer_settings/printer_settings.js b/frappe/printing/doctype/network_printer_settings/network_printer_settings.js similarity index 93% rename from frappe/printing/doctype/printer_settings/printer_settings.js rename to frappe/printing/doctype/network_printer_settings/network_printer_settings.js index 7324344a94..6e33e20792 100644 --- a/frappe/printing/doctype/printer_settings/printer_settings.js +++ b/frappe/printing/doctype/network_printer_settings/network_printer_settings.js @@ -1,7 +1,7 @@ // Copyright (c) 2021, Frappe Technologies and contributors // For license information, please see license.txt -frappe.ui.form.on('Printer Settings', { +frappe.ui.form.on('Network Printer Settings', { onload (frm) { if (!frm.is_new()) { frm.trigger("connect_print_server"); diff --git a/frappe/printing/doctype/printer_settings/printer_settings.json b/frappe/printing/doctype/network_printer_settings/network_printer_settings.json similarity index 66% rename from frappe/printing/doctype/printer_settings/printer_settings.json rename to frappe/printing/doctype/network_printer_settings/network_printer_settings.json index 51563bc659..cbef4b8ba4 100644 --- a/frappe/printing/doctype/printer_settings/printer_settings.json +++ b/frappe/printing/doctype/network_printer_settings/network_printer_settings.json @@ -1,17 +1,15 @@ { "actions": [], - "autoname": "format:{server_ip}-{printer_name}", - "creation": "2021-09-07 11:13:57.724404", + "autoname": "Prompt", + "creation": "2021-09-17 11:26:06.943999", "doctype": "DocType", "editable_grid": 1, "engine": "InnoDB", "field_order": [ "server_ip", - "printer_name", "port", "column_break_4", - "reference_doctype", - "reference_name" + "printer_name" ], "fields": [ { @@ -22,13 +20,6 @@ "label": "Server IP", "reqd": 1 }, - { - "fieldname": "printer_name", - "fieldtype": "Select", - "in_list_view": 1, - "label": "Printer Name", - "reqd": 1 - }, { "default": "631", "fieldname": "port", @@ -42,24 +33,18 @@ "fieldtype": "Column Break" }, { - "fieldname": "reference_doctype", - "fieldtype": "Link", - "label": "Reference DocType", - "options": "DocType" - }, - { - "fieldname": "reference_name", - "fieldtype": "Dynamic Link", - "label": "Reference Name", - "options": "reference_doctype" + "fieldname": "printer_name", + "fieldtype": "Select", + "label": "Printer Name", + "reqd": 1 } ], "index_web_pages_for_search": 1, "links": [], - "modified": "2021-09-13 17:19:30.713385", + "modified": "2021-09-17 11:30:16.781655", "modified_by": "Administrator", "module": "Printing", - "name": "Printer Settings", + "name": "Network Printer Settings", "owner": "Administrator", "permissions": [ { diff --git a/frappe/printing/doctype/printer_settings/printer_settings.py b/frappe/printing/doctype/network_printer_settings/network_printer_settings.py similarity index 85% rename from frappe/printing/doctype/printer_settings/printer_settings.py rename to frappe/printing/doctype/network_printer_settings/network_printer_settings.py index db1800b96d..d24d0695db 100644 --- a/frappe/printing/doctype/printer_settings/printer_settings.py +++ b/frappe/printing/doctype/network_printer_settings/network_printer_settings.py @@ -5,7 +5,7 @@ import frappe from frappe.model.document import Document from frappe import _ -class PrinterSettings(Document): +class NetworkPrinterSettings(Document): @frappe.whitelist() def get_printers_list(self,ip="localhost",port=631): printer_list = [] @@ -32,5 +32,5 @@ class PrinterSettings(Document): return printer_list @frappe.whitelist() -def get_printer_setting(doctype): - return frappe.db.get_value('Printer Settings', {'reference_doctype': doctype}) \ No newline at end of file +def get_network_printer_settings(): + return frappe.db.get_list('Network Printer Settings', pluck='name') diff --git a/frappe/printing/doctype/printer_settings/test_printer_settings.py b/frappe/printing/doctype/network_printer_settings/test_network_printer_settings.py similarity index 68% rename from frappe/printing/doctype/printer_settings/test_printer_settings.py rename to frappe/printing/doctype/network_printer_settings/test_network_printer_settings.py index 81ac1bb289..86509b239f 100644 --- a/frappe/printing/doctype/printer_settings/test_printer_settings.py +++ b/frappe/printing/doctype/network_printer_settings/test_network_printer_settings.py @@ -4,5 +4,5 @@ # import frappe import unittest -class TestPrinterSettings(unittest.TestCase): +class TestNetworkPrinterSettings(unittest.TestCase): pass diff --git a/frappe/printing/doctype/print_settings/print_settings.json b/frappe/printing/doctype/print_settings/print_settings.json index 9a052a1f18..babbae248d 100644 --- a/frappe/printing/doctype/print_settings/print_settings.json +++ b/frappe/printing/doctype/print_settings/print_settings.json @@ -19,7 +19,6 @@ "allow_print_for_cancelled", "server_printer", "enable_print_server", - "default_printer_setting", "raw_printing_section", "enable_raw_printing", "print_style_section", @@ -157,19 +156,13 @@ "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-09-09 11:07:23.042310", + "modified": "2021-09-17 12:59:14.783694", "modified_by": "Administrator", "module": "Printing", "name": "Print Settings", diff --git a/frappe/printing/page/print/print.js b/frappe/printing/page/print/print.js index 6df738b10d..0b2620c3f4 100644 --- a/frappe/printing/page/print/print.js +++ b/frappe/printing/page/print/print.js @@ -113,17 +113,6 @@ 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', @@ -161,25 +150,6 @@ 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, @@ -195,10 +165,7 @@ frappe.ui.form.PrintView = class { frappe.set_route('Form', 'Print Settings'); }); - if ( - frappe.model.get_doc(':Print Settings', 'Print Settings') - .enable_raw_printing == '1' - ) { + if (this.print_settings.enable_raw_printing == '1') { this.page.add_menu_item(__('Raw Printing Setting'), () => { this.printer_setting_dialog(); }); @@ -209,6 +176,12 @@ frappe.ui.form.PrintView = class { this.edit_print_format() ); } + + if (this.print_settings.enable_print_server) { + this.page.add_menu_item(__('Select Network Printer'), () => + this.network_printer_setting_dialog() + ); + } } show(frm) { @@ -490,73 +463,109 @@ frappe.ui.form.PrintView = class { printit() { let me = this; - frappe.call({ - method: - 'frappe.printing.doctype.print_settings.print_settings.is_print_server_enabled', - callback: function(data) { - if (data.message) { - frappe.call({ - method: 'frappe.utils.print_format.print_by_server', - 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: me.get_letterhead(), - }, - callback: function() {}, - }); - } else if (me.get_mapped_printer().length === 1) { - // printer is already mapped in localstorage (applies for both raw and pdf ) - if (me.is_raw_printing()) { - me.get_raw_commands(function(out) { - frappe.ui.form - .qz_connect() - .then(function() { - let printer_map = me.get_mapped_printer()[0]; - let data = [out.raw_commands]; - let config = qz.configs.create(printer_map.printer); - return qz.print(config, data); - }) - .then(frappe.ui.form.qz_success) - .catch((err) => { - frappe.ui.form.qz_fail(err); - }); + + if (me.print_settings.enable_print_server) { + if (localStorage.getItem('network_printer')) { + me.print_by_server(); + } else { + me.network_printer_setting_dialog(() => me.print_by_server()); + } + } else if (me.get_mapped_printer().length === 1) { + // printer is already mapped in localstorage (applies for both raw and pdf ) + if (me.is_raw_printing()) { + me.get_raw_commands(function(out) { + frappe.ui.form + .qz_connect() + .then(function() { + let printer_map = me.get_mapped_printer()[0]; + let data = [out.raw_commands]; + let config = qz.configs.create(printer_map.printer); + return qz.print(config, data); + }) + .then(frappe.ui.form.qz_success) + .catch((err) => { + frappe.ui.form.qz_fail(err); }); - } else { - frappe.show_alert( + }); + } else { + frappe.show_alert( + { + message: __('PDF printing via "Raw Print" is not supported.'), + subtitle: __( + 'Please remove the printer mapping in Printer Settings and try again.' + ), + indicator: 'info', + }, + 14 + ); + //Note: need to solve "Error: Cannot parse (FILE) as a PDF file" to enable qz pdf printing. + } + } else if (me.is_raw_printing()) { + // printer not mapped in localstorage and the current print format is raw printing + frappe.show_alert( + { + message: __('Printer mapping not set.'), + subtitle: __( + 'Please set a printer mapping for this print format in the Printer Settings' + ), + indicator: 'warning', + }, + 14 + ); + me.printer_setting_dialog(); + } else { + me.render_page('/printview?', true); + } + } + + print_by_server() { + let me = this; + if (localStorage.getItem('network_printer')) { + frappe.call({ + method: 'frappe.utils.print_format.print_by_server', + args: { + doctype: me.frm.doc.doctype, + name: me.frm.doc.name, + printer_setting: localStorage.getItem('network_printer'), + print_format: me.selected_format(), + no_letterhead: me.with_letterhead(), + letterhead: me.get_letterhead(), + }, + callback: function() {}, + }); + } + } + network_printer_setting_dialog(callback) { + let me = this; + frappe.call({ + method: 'frappe.printing.doctype.network_printer_settings.network_printer_settings.get_network_printer_settings', + callback: function(r) { + if(r.message) { + let d = new frappe.ui.Dialog({ + title: __('Select Network Printer'), + fields: [ { - message: __('PDF printing via "Raw Print" is not supported.'), - subtitle: __( - 'Please remove the printer mapping in Printer Settings and try again.' - ), - indicator: 'info', - }, - 14 - ); - //Note: need to solve "Error: Cannot parse (FILE) as a PDF file" to enable qz pdf printing. - } - } else if (me.is_raw_printing()) { - // printer not mapped in localstorage and the current print format is raw printing - frappe.show_alert( - { - message: __('Printer mapping not set.'), - subtitle: __( - 'Please set a printer mapping for this print format in the Printer Settings' - ), - indicator: 'warning', + "label" : "Printer", + "fieldname": "printer", + "fieldtype": "Select", + "reqd": 1, + "options": r.message + } + ], + primary_action: function() { + localStorage.setItem('network_printer', d.get_values().printer); + if (typeof callback == "function") { + callback(); + } + d.hide(); }, - 14 - ); - me.printer_setting_dialog(); - } else { - me.render_page('/printview?', true); + primary_action_label: __('Select') + }); + d.show(); } }, }); } - render_page(method, printit = false) { let w = window.open( frappe.urllib.get_full_url( diff --git a/frappe/utils/print_format.py b/frappe/utils/print_format.py index 6ced99e9ce..130ee24f21 100644 --- a/frappe/utils/print_format.py +++ b/frappe/utils/print_format.py @@ -99,7 +99,7 @@ def report_to_pdf(html, orientation="Landscape"): @frappe.whitelist() 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) + print_settings = frappe.get_doc("Network Printer Settings", printer_setting) try: import cups except ImportError: