odoo-addon-base-report-to-printer 18.0.1.1.6__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (77) hide show
  1. odoo/addons/base_report_to_printer/README.rst +205 -0
  2. odoo/addons/base_report_to_printer/__init__.py +9 -0
  3. odoo/addons/base_report_to_printer/__manifest__.py +39 -0
  4. odoo/addons/base_report_to_printer/data/neutralize.sql +2 -0
  5. odoo/addons/base_report_to_printer/data/printing_data.xml +27 -0
  6. odoo/addons/base_report_to_printer/i18n/am.po +936 -0
  7. odoo/addons/base_report_to_printer/i18n/base_report_to_printer.pot +932 -0
  8. odoo/addons/base_report_to_printer/i18n/bg.po +939 -0
  9. odoo/addons/base_report_to_printer/i18n/ca.po +936 -0
  10. odoo/addons/base_report_to_printer/i18n/de.po +994 -0
  11. odoo/addons/base_report_to_printer/i18n/el_GR.po +937 -0
  12. odoo/addons/base_report_to_printer/i18n/es.po +1004 -0
  13. odoo/addons/base_report_to_printer/i18n/es_AR.po +987 -0
  14. odoo/addons/base_report_to_printer/i18n/es_ES.po +937 -0
  15. odoo/addons/base_report_to_printer/i18n/fi.po +939 -0
  16. odoo/addons/base_report_to_printer/i18n/fr.po +999 -0
  17. odoo/addons/base_report_to_printer/i18n/gl.po +936 -0
  18. odoo/addons/base_report_to_printer/i18n/hr.po +966 -0
  19. odoo/addons/base_report_to_printer/i18n/hr_HR.po +941 -0
  20. odoo/addons/base_report_to_printer/i18n/it.po +985 -0
  21. odoo/addons/base_report_to_printer/i18n/nl.po +939 -0
  22. odoo/addons/base_report_to_printer/i18n/nl_NL.po +950 -0
  23. odoo/addons/base_report_to_printer/i18n/pt.po +936 -0
  24. odoo/addons/base_report_to_printer/i18n/pt_BR.po +940 -0
  25. odoo/addons/base_report_to_printer/i18n/pt_PT.po +937 -0
  26. odoo/addons/base_report_to_printer/i18n/sl.po +943 -0
  27. odoo/addons/base_report_to_printer/i18n/sv.po +983 -0
  28. odoo/addons/base_report_to_printer/i18n/tr.po +936 -0
  29. odoo/addons/base_report_to_printer/i18n/zh_CN.po +958 -0
  30. odoo/addons/base_report_to_printer/models/__init__.py +8 -0
  31. odoo/addons/base_report_to_printer/models/ir_actions_report.py +253 -0
  32. odoo/addons/base_report_to_printer/models/printing_action.py +26 -0
  33. odoo/addons/base_report_to_printer/models/printing_job.py +131 -0
  34. odoo/addons/base_report_to_printer/models/printing_printer.py +268 -0
  35. odoo/addons/base_report_to_printer/models/printing_report_xml_action.py +48 -0
  36. odoo/addons/base_report_to_printer/models/printing_server.py +275 -0
  37. odoo/addons/base_report_to_printer/models/printing_tray.py +21 -0
  38. odoo/addons/base_report_to_printer/models/res_users.py +55 -0
  39. odoo/addons/base_report_to_printer/readme/CONFIGURE.md +13 -0
  40. odoo/addons/base_report_to_printer/readme/CONTRIBUTORS.md +18 -0
  41. odoo/addons/base_report_to_printer/readme/CREDITS.md +1 -0
  42. odoo/addons/base_report_to_printer/readme/DESCRIPTION.md +27 -0
  43. odoo/addons/base_report_to_printer/readme/HISTORY.md +7 -0
  44. odoo/addons/base_report_to_printer/readme/INSTALL.md +10 -0
  45. odoo/addons/base_report_to_printer/readme/ROADMAP.md +3 -0
  46. odoo/addons/base_report_to_printer/readme/USAGE.md +15 -0
  47. odoo/addons/base_report_to_printer/security/ir.model.access.csv +2 -0
  48. odoo/addons/base_report_to_printer/security/security.xml +151 -0
  49. odoo/addons/base_report_to_printer/static/description/icon.png +0 -0
  50. odoo/addons/base_report_to_printer/static/description/index.html +561 -0
  51. odoo/addons/base_report_to_printer/static/src/js/qweb_action_manager.esm.js +92 -0
  52. odoo/addons/base_report_to_printer/tests/__init__.py +13 -0
  53. odoo/addons/base_report_to_printer/tests/test_ir_actions_report.py +350 -0
  54. odoo/addons/base_report_to_printer/tests/test_printing_job.py +70 -0
  55. odoo/addons/base_report_to_printer/tests/test_printing_printer.py +198 -0
  56. odoo/addons/base_report_to_printer/tests/test_printing_printer_tray.py +256 -0
  57. odoo/addons/base_report_to_printer/tests/test_printing_printer_wizard.py +94 -0
  58. odoo/addons/base_report_to_printer/tests/test_printing_report_xml_action.py +98 -0
  59. odoo/addons/base_report_to_printer/tests/test_printing_server.py +219 -0
  60. odoo/addons/base_report_to_printer/tests/test_printing_tray.py +49 -0
  61. odoo/addons/base_report_to_printer/tests/test_report.py +226 -0
  62. odoo/addons/base_report_to_printer/tests/test_res_users.py +53 -0
  63. odoo/addons/base_report_to_printer/views/ir_actions_report.xml +21 -0
  64. odoo/addons/base_report_to_printer/views/printing_job.xml +46 -0
  65. odoo/addons/base_report_to_printer/views/printing_printer.xml +147 -0
  66. odoo/addons/base_report_to_printer/views/printing_report.xml +39 -0
  67. odoo/addons/base_report_to_printer/views/printing_server.xml +79 -0
  68. odoo/addons/base_report_to_printer/views/res_users.xml +33 -0
  69. odoo/addons/base_report_to_printer/wizards/__init__.py +2 -0
  70. odoo/addons/base_report_to_printer/wizards/print_attachment_report.py +80 -0
  71. odoo/addons/base_report_to_printer/wizards/print_attachment_report.xml +56 -0
  72. odoo/addons/base_report_to_printer/wizards/printing_printer_update_wizard.py +27 -0
  73. odoo/addons/base_report_to_printer/wizards/printing_printer_update_wizard_view.xml +37 -0
  74. odoo_addon_base_report_to_printer-18.0.1.1.6.dist-info/METADATA +222 -0
  75. odoo_addon_base_report_to_printer-18.0.1.1.6.dist-info/RECORD +77 -0
  76. odoo_addon_base_report_to_printer-18.0.1.1.6.dist-info/WHEEL +5 -0
  77. odoo_addon_base_report_to_printer-18.0.1.1.6.dist-info/top_level.txt +1 -0
@@ -0,0 +1,49 @@
1
+ # Copyright 2016 LasLabs Inc.
2
+ # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
3
+
4
+ from odoo.tests.common import TransactionCase
5
+
6
+ model = "odoo.addons.base_report_to_printer.models.printing_server"
7
+
8
+
9
+ class TestPrintingTray(TransactionCase):
10
+ def setUp(self):
11
+ super().setUp()
12
+ self.Model = self.env["printing.tray"]
13
+ self.server = self.env["printing.server"].create({})
14
+ self.printer = self.env["printing.printer"].create(
15
+ {
16
+ "name": "Printer",
17
+ "server_id": self.server.id,
18
+ "system_name": "Sys Name",
19
+ "default": True,
20
+ "status": "unknown",
21
+ "status_message": "Msg",
22
+ "model": "res.users",
23
+ "location": "Location",
24
+ "uri": "URI",
25
+ }
26
+ )
27
+ self.tray_vals = {
28
+ "name": "Tray",
29
+ "system_name": "TrayName",
30
+ "printer_id": self.printer.id,
31
+ }
32
+
33
+ def new_tray(self):
34
+ return self.env["printing.tray"].create(self.tray_vals)
35
+
36
+ def test_report_behaviour(self):
37
+ """It should add the selected tray in the report data"""
38
+ ir_report = self.env["ir.actions.report"].search([], limit=1)
39
+ report = self.env["printing.report.xml.action"].create(
40
+ {"user_id": self.env.user.id, "report_id": ir_report.id, "action": "server"}
41
+ )
42
+ report.printer_tray_id = False
43
+ behaviour = report.behaviour()
44
+ self.assertEqual(behaviour["tray"], False)
45
+
46
+ # Check that we have te right value
47
+ report.printer_tray_id = self.new_tray()
48
+ behaviour = report.behaviour()
49
+ self.assertEqual(behaviour["tray"], report.printer_tray_id.system_name)
@@ -0,0 +1,226 @@
1
+ # Copyright 2016 LasLabs Inc.
2
+ # Copyright 2017 Tecnativa - Jairo Llopis
3
+ # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
4
+
5
+ import logging
6
+ from unittest import mock
7
+
8
+ from odoo import exceptions
9
+ from odoo.tests import common
10
+
11
+
12
+ class TestReport(common.HttpCase):
13
+ def setUp(self):
14
+ super().setUp()
15
+ self.Model = self.env["ir.actions.report"].with_context(
16
+ skip_printer_exception=True
17
+ )
18
+ self.server = self.env["printing.server"].create({})
19
+ self.report_vals = {
20
+ "name": "Test Report",
21
+ "model": "ir.actions.report",
22
+ "report_name": "Test Report",
23
+ }
24
+ self.report_pdf_view = self.env["ir.ui.view"].create(
25
+ {
26
+ "name": "Test",
27
+ "type": "qweb",
28
+ "arch": """<t t-name="base_report_to_printer.test">
29
+ <div>Test</div>
30
+ </t>""",
31
+ }
32
+ )
33
+ self.report_pdf_imd = (
34
+ self.env["ir.model.data"]
35
+ .sudo()
36
+ .create(
37
+ {
38
+ "name": "test_pdf",
39
+ "module": "base_report_to_printer",
40
+ "model": "ir.ui.view",
41
+ "res_id": self.report_pdf_view.id,
42
+ }
43
+ )
44
+ )
45
+ self.report_text_view = self.env["ir.ui.view"].create(
46
+ {
47
+ "name": "Test",
48
+ "type": "qweb",
49
+ "arch": """<t t-name="base_report_to_printer.test_text">
50
+ Test
51
+ </t>""",
52
+ }
53
+ )
54
+ self.report_text_imd = (
55
+ self.env["ir.model.data"]
56
+ .sudo()
57
+ .create(
58
+ {
59
+ "name": "test_text",
60
+ "module": "base_report_to_printer",
61
+ "model": "ir.ui.view",
62
+ "res_id": self.report_text_view.id,
63
+ }
64
+ )
65
+ )
66
+ self.report = self.Model.create(
67
+ {
68
+ "name": "Test",
69
+ "report_type": "qweb-pdf",
70
+ "model": "res.partner",
71
+ "report_name": "base_report_to_printer.test_pdf",
72
+ }
73
+ )
74
+ self.report_text = self.Model.create(
75
+ {
76
+ "name": "Test",
77
+ "report_type": "qweb-text",
78
+ "model": "res.partner",
79
+ "report_name": "base_report_to_printer.test_text",
80
+ }
81
+ )
82
+ self.partners = self.env["res.partner"]
83
+ for n in range(5):
84
+ self.partners += self.env["res.partner"].create({"name": "Test %d" % n})
85
+
86
+ def new_record(self):
87
+ return self.Model.create(self.report_vals)
88
+
89
+ def new_printer(self):
90
+ return self.env["printing.printer"].create(
91
+ {
92
+ "name": "Printer",
93
+ "server_id": self.server.id,
94
+ "system_name": "Sys Name",
95
+ "default": True,
96
+ "status": "unknown",
97
+ "status_message": "Msg",
98
+ "model": "res.users",
99
+ "location": "Location",
100
+ "uri": "URI",
101
+ }
102
+ )
103
+
104
+ def test_can_print_report_context_skip(self):
105
+ """It should return False based on context"""
106
+ rec_id = self.new_record().with_context(must_skip_send_to_printer=True)
107
+ res = rec_id._can_print_report({"action": "server"}, True, True)
108
+ self.assertFalse(res)
109
+
110
+ def test_can_print_report_true(self):
111
+ """It should return True when server print allowed"""
112
+ res = self.new_record()._can_print_report({"action": "server"}, True, True)
113
+ self.assertTrue(res)
114
+
115
+ def test_can_print_report_false(self):
116
+ """It should return False when server print not allowed"""
117
+ res = self.new_record()._can_print_report({"action": "server"}, True, False)
118
+ self.assertFalse(res)
119
+
120
+ def test_render_qweb_pdf_not_printable(self):
121
+ """It should print the report, only if it is printable"""
122
+ with mock.patch(
123
+ "odoo.addons.base_report_to_printer.models."
124
+ "printing_printer.PrintingPrinter."
125
+ "print_document"
126
+ ) as print_document:
127
+ self.report._render_qweb_pdf(self.report.report_name, self.partners.ids)
128
+ print_document.assert_not_called()
129
+
130
+ def test_render_qweb_pdf_printable(self):
131
+ """It should print the report, only if it is printable"""
132
+ with (
133
+ mock.patch(
134
+ "odoo.addons.base_report_to_printer.models."
135
+ "printing_printer.PrintingPrinter."
136
+ "print_document"
137
+ ) as print_document,
138
+ self.assertLogs(level=logging.WARNING) as logs,
139
+ ):
140
+ self.report.property_printing_action_id.action_type = "server"
141
+ self.report.printing_printer_id = self.new_printer()
142
+ document = self.report._render_qweb_pdf(
143
+ self.report.report_name, self.partners.ids
144
+ )
145
+ print_document.assert_called_once_with(
146
+ self.report,
147
+ document[0],
148
+ action="server",
149
+ doc_format="qweb-pdf",
150
+ tray=False,
151
+ )
152
+ self.assertEqual(len(logs.records), 1)
153
+ self.assertEqual(logs.records[0].levelno, logging.WARNING)
154
+
155
+ def test_render_qweb_text_printable(self):
156
+ """It should print the report, only if it is printable"""
157
+ with (
158
+ mock.patch(
159
+ "odoo.addons.base_report_to_printer.models."
160
+ "printing_printer.PrintingPrinter."
161
+ "print_document"
162
+ ) as print_document,
163
+ self.assertLogs(level=logging.WARNING) as logs,
164
+ ):
165
+ self.report_text.property_printing_action_id.action_type = "server"
166
+ self.report_text.printing_printer_id = self.new_printer()
167
+ document = self.report_text._render_qweb_text(
168
+ self.report_text.report_name, self.partners.ids
169
+ )
170
+ print_document.assert_called_once_with(
171
+ self.report_text,
172
+ document[0],
173
+ action="server",
174
+ doc_format="qweb-text",
175
+ tray=False,
176
+ )
177
+ self.assertEqual(len(logs.records), 1)
178
+ self.assertEqual(logs.records[0].levelno, logging.WARNING)
179
+
180
+ def test_print_document_not_printable(self):
181
+ """It should print the report, regardless of the defined behaviour"""
182
+ self.report.printing_printer_id = self.new_printer()
183
+ with (
184
+ mock.patch(
185
+ "odoo.addons.base_report_to_printer.models."
186
+ "printing_printer.PrintingPrinter."
187
+ "print_document"
188
+ ) as print_document,
189
+ self.assertLogs(level=logging.WARNING) as logs,
190
+ ):
191
+ self.report.print_document(self.partners.ids)
192
+ print_document.assert_called_once()
193
+ self.assertEqual(len(logs.records), 2)
194
+ self.assertEqual(logs.records[0].levelno, logging.WARNING)
195
+
196
+ def test_print_document_printable(self):
197
+ """It should print the report, regardless of the defined behaviour"""
198
+ self.report.property_printing_action_id.action_type = "server"
199
+ self.report.printing_printer_id = self.new_printer()
200
+ with (
201
+ mock.patch(
202
+ "odoo.addons.base_report_to_printer.models."
203
+ "printing_printer.PrintingPrinter."
204
+ "print_document"
205
+ ) as print_document,
206
+ self.assertLogs(level=logging.WARNING) as logs,
207
+ ):
208
+ self.report.print_document(self.partners.ids)
209
+ print_document.assert_called_once()
210
+ self.assertEqual(len(logs.records), 2)
211
+ self.assertEqual(logs.records[0].levelno, logging.WARNING)
212
+
213
+ def test_print_document_no_printer(self):
214
+ """It should raise an error"""
215
+ with self.assertRaises(exceptions.UserError):
216
+ self.report.print_document(self.partners.ids)
217
+
218
+ def test_print_document_string(self):
219
+ """Test string encoding"""
220
+ with mock.patch(
221
+ "odoo.addons.base_report_to_printer.models."
222
+ "printing_printer.PrintingPrinter."
223
+ "print_file"
224
+ ) as print_file:
225
+ self.new_printer().print_document("", "test")
226
+ print_file.assert_called_once()
@@ -0,0 +1,53 @@
1
+ # Copyright 2016 LasLabs Inc.
2
+ # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
3
+
4
+ from odoo.tests import common
5
+
6
+
7
+ class TestResUsers(common.TransactionCase):
8
+ def setUp(self):
9
+ super().setUp()
10
+ self.user_vals = {"name": "Test", "login": "login"}
11
+
12
+ def new_record(self):
13
+ return self.env["res.users"].create(self.user_vals)
14
+
15
+ def test_available_action_types_excludes_user_default(self):
16
+ """It should not contain `user_default` in avail actions"""
17
+ self.user_vals["printing_action"] = "user_default"
18
+ with self.assertRaises(ValueError):
19
+ self.new_record()
20
+
21
+ def test_available_action_types_includes_something_else(self):
22
+ """It should still contain other valid keys"""
23
+ self.user_vals["printing_action"] = "server"
24
+ self.assertTrue(self.new_record())
25
+
26
+ def test_onchange_printer_tray_id_empty(self):
27
+ user = self.env["res.users"].new({"printer_tray_id": False})
28
+ user.onchange_printing_printer_id()
29
+ self.assertFalse(user.printer_tray_id)
30
+
31
+ def test_onchange_printer_tray_id_not_empty(self):
32
+ server = self.env["printing.server"].create({})
33
+ printer = self.env["printing.printer"].create(
34
+ {
35
+ "name": "Printer",
36
+ "server_id": server.id,
37
+ "system_name": "Sys Name",
38
+ "default": True,
39
+ "status": "unknown",
40
+ "status_message": "Msg",
41
+ "model": "res.users",
42
+ "location": "Location",
43
+ "uri": "URI",
44
+ }
45
+ )
46
+ tray = self.env["printing.tray"].create(
47
+ {"name": "Tray", "system_name": "TrayName", "printer_id": printer.id}
48
+ )
49
+
50
+ user = self.env["res.users"].new({"printer_tray_id": tray.id})
51
+ self.assertEqual(user.printer_tray_id, tray)
52
+ user.onchange_printing_printer_id()
53
+ self.assertFalse(user.printer_tray_id)
@@ -0,0 +1,21 @@
1
+ <?xml version="1.0" ?>
2
+ <odoo>
3
+ <record model="ir.ui.view" id="act_report_xml_view">
4
+ <field name="name">ir.actions.report.form (in base_report_to_printer)</field>
5
+ <field name="model">ir.actions.report</field>
6
+ <field name="inherit_id" ref="base.act_report_xml_view" />
7
+ <field name="arch" type="xml">
8
+ <page name="security" position="before">
9
+ <page string="Print" name="print">
10
+ <group>
11
+ <field name="property_printing_action_id" />
12
+ <field name="printing_printer_id" />
13
+ <field name="printer_tray_id" />
14
+ </group>
15
+ <separator string="Specific actions per user" />
16
+ <field name="printing_action_ids" />
17
+ </page>
18
+ </page>
19
+ </field>
20
+ </record>
21
+ </odoo>
@@ -0,0 +1,46 @@
1
+ <?xml version="1.0" ?>
2
+ <odoo>
3
+ <record model="ir.ui.view" id="printing_job_view_form">
4
+ <field name="name">printing.job.form (in base_report_to_printer)</field>
5
+ <field name="model">printing.job</field>
6
+ <field name="arch" type="xml">
7
+ <form>
8
+ <header>
9
+ <button
10
+ name="action_cancel"
11
+ type="object"
12
+ string="Cancel"
13
+ invisible="job_state in ['canceled','aborted','completed']"
14
+ />
15
+ <field name="job_state" widget="statusbar" />
16
+ </header>
17
+ <sheet>
18
+ <group>
19
+ <group>
20
+ <field name="name" />
21
+ <field name="job_id_cups" />
22
+ <field name="job_media_progress" widget="progressbar" />
23
+ <field name="job_state_reason" />
24
+ </group>
25
+ <group>
26
+ <field name="time_at_creation" />
27
+ <field name="time_at_processing" />
28
+ <field name="time_at_completed" />
29
+ </group>
30
+ </group>
31
+ </sheet>
32
+ </form>
33
+ </field>
34
+ </record>
35
+ <record model="ir.ui.view" id="printing_job_view_tree">
36
+ <field name="name">printing.job.tree (in base_report_to_printer)</field>
37
+ <field name="model">printing.job</field>
38
+ <field name="arch" type="xml">
39
+ <list>
40
+ <field name="name" />
41
+ <field name="job_id_cups" />
42
+ <field name="job_state" />
43
+ </list>
44
+ </field>
45
+ </record>
46
+ </odoo>
@@ -0,0 +1,147 @@
1
+ <?xml version="1.0" ?>
2
+ <odoo>
3
+ <menuitem
4
+ name="Printing"
5
+ id="printing_menu"
6
+ sequence="1"
7
+ parent="base.menu_administration"
8
+ groups="printing_group_manager"
9
+ />
10
+ <record model="ir.ui.view" id="printing_printer_view_form">
11
+ <field name="name">printing.printer.form (in base_report_to_printer)</field>
12
+ <field name="model">printing.printer</field>
13
+ <field name="arch" type="xml">
14
+ <form>
15
+ <header>
16
+ <button
17
+ name="enable"
18
+ type="object"
19
+ string="Enable"
20
+ invisible="status in ['available','printing']"
21
+ />
22
+ <button
23
+ name="disable"
24
+ type="object"
25
+ string="Disable"
26
+ invisible="status == 'unavailable'"
27
+ />
28
+ <button
29
+ name="action_cancel_all_jobs"
30
+ type="object"
31
+ string="Cancel all running jobs"
32
+ confirm="Are you sure to want to cancel all jobs of this printer?"
33
+ />
34
+ <button
35
+ name="print_test_page"
36
+ type="object"
37
+ string="Print Test Page"
38
+ confirm="Are you sure to want to print a test page?"
39
+ />
40
+ </header>
41
+ <sheet>
42
+ <widget
43
+ name="web_ribbon"
44
+ text="Archived"
45
+ bg_color="bg-danger"
46
+ invisible="active"
47
+ />
48
+ <field name="active" invisible="1" />
49
+ <div class="oe_title">
50
+ <h1>
51
+ <field name="name" />
52
+ </h1>
53
+ </div>
54
+ <group name="name">
55
+ <field name="system_name" />
56
+ <field name="server_id" />
57
+ </group>
58
+ <group col="4" colspan="4" name="default">
59
+ <field name="default" />
60
+ <button
61
+ name="set_default"
62
+ string="Set Default"
63
+ type="object"
64
+ invisible="default"
65
+ colspan="2"
66
+ />
67
+ <button
68
+ name="unset_default"
69
+ string="Unset Default"
70
+ type="object"
71
+ invisible="not default"
72
+ colspan="2"
73
+ />
74
+ </group>
75
+ <group name="details">
76
+ <field name="uri" />
77
+ <field name="model" />
78
+ <field name="location" />
79
+ <field name="status" />
80
+ <field name="status_message" />
81
+ <field name="multi_thread" />
82
+ </group>
83
+ <group string="Trays" name="trays">
84
+ <field name="tray_ids" nolabel="1" colspan="2">
85
+ <form>
86
+ <group name="name_fields">
87
+ <field name="name" />
88
+ <field name="system_name" />
89
+ </group>
90
+ </form>
91
+ </field>
92
+ </group>
93
+ <group name="jobs" string="Jobs">
94
+ <field name="job_ids" nolabel="1" colspan="2" />
95
+ </group>
96
+ </sheet>
97
+ </form>
98
+ </field>
99
+ </record>
100
+ <record model="ir.ui.view" id="printing_printer_view_tree">
101
+ <field name="name">printing.printer.tree (in base_report_to_printer)</field>
102
+ <field name="model">printing.printer</field>
103
+ <field name="arch" type="xml">
104
+ <list
105
+ decoration-success="status=='available'"
106
+ decoration-warning="status=='printing'"
107
+ decoration-danger="status not in ['printing', 'available']"
108
+ >
109
+ <field name="default" />
110
+ <field name="name" />
111
+ <field name="system_name" />
112
+ <field name="server_id" />
113
+ <field name="status" />
114
+ </list>
115
+ </field>
116
+ </record>
117
+ <record model="ir.ui.view" id="printing_printer_view_search">
118
+ <field name="name">printing.printer.search (in base_report_to_printer)</field>
119
+ <field name="model">printing.printer</field>
120
+ <field name="arch" type="xml">
121
+ <search string="Printers">
122
+ <field name="name" />
123
+ <field name="system_name" />
124
+ <field name="location" />
125
+ <field name="status" />
126
+ <filter
127
+ string="Archived"
128
+ name="inactive"
129
+ domain="[('active', '=', False)]"
130
+ />
131
+ </search>
132
+ </field>
133
+ </record>
134
+ <record model="ir.actions.act_window" id="printing_printer_action">
135
+ <field name="name">Show Printers</field>
136
+ <field name="type">ir.actions.act_window</field>
137
+ <field name="res_model">printing.printer</field>
138
+ <field name="view_mode">list,form</field>
139
+ </record>
140
+ <menuitem
141
+ name="Printers"
142
+ sequence="20"
143
+ id="printing_printer_menu"
144
+ parent="printing_menu"
145
+ action="printing_printer_action"
146
+ />
147
+ </odoo>
@@ -0,0 +1,39 @@
1
+ <?xml version="1.0" ?>
2
+ <odoo>
3
+ <record model="ir.ui.view" id="printing_report_xml_action_view_form">
4
+ <field name="name">printing.report.xml.action.form (in base_report_to_printer)
5
+ </field>
6
+ <field name="model">printing.report.xml.action</field>
7
+ <field name="arch" type="xml">
8
+ <form>
9
+ <group col="2">
10
+ <field name="user_id" />
11
+ <field name="action" />
12
+ <field name="printer_id" select="1" />
13
+ <field name="printer_tray_id" />
14
+ </group>
15
+ </form>
16
+ </field>
17
+ </record>
18
+ <record model="ir.ui.view" id="printing_report_xml_action_view_tree">
19
+ <field
20
+ name="name"
21
+ >printing.report.xml.action.tree (in base_report_to_printer)</field>
22
+ <field name="model">printing.report.xml.action</field>
23
+ <field name="arch" type="xml">
24
+ <list>
25
+ <field name="user_id" />
26
+ <field name="action" />
27
+ <field name="printer_id" />
28
+ <field name="printer_tray_id" />
29
+ </list>
30
+ </field>
31
+ </record>
32
+ <!-- Add a shorcut to "Actions/Report" in the Printing menu -->
33
+ <menuitem
34
+ id="printing_report_xml_action_menu"
35
+ sequence="30"
36
+ parent="printing_menu"
37
+ action="base.ir_action_report"
38
+ />
39
+ </odoo>
@@ -0,0 +1,79 @@
1
+ <?xml version="1.0" ?>
2
+ <odoo>
3
+ <record model="ir.ui.view" id="printing_server_view_form">
4
+ <field name="name">printing.server.form (in base_report_to_printer)</field>
5
+ <field name="model">printing.server</field>
6
+ <field name="arch" type="xml">
7
+ <form>
8
+ <header>
9
+ <button
10
+ name="action_update_printers"
11
+ type="object"
12
+ string="Update Printers"
13
+ />
14
+ <button
15
+ name="action_update_jobs"
16
+ type="object"
17
+ string="Update Jobs"
18
+ />
19
+ </header>
20
+ <sheet>
21
+ <div class="oe_title">
22
+ <h1>
23
+ <field name="name" />
24
+ </h1>
25
+ </div>
26
+ <group>
27
+ <group>
28
+ <field name="address" />
29
+ <field name="port" />
30
+ </group>
31
+ <group>
32
+ <field name="user" />
33
+ <field name="password" />
34
+ <field name="encryption_policy" />
35
+ <field name="multi_thread" />
36
+ </group>
37
+ </group>
38
+ <separator name="printers" string="Printers" />
39
+ <field name="printer_ids" />
40
+ </sheet>
41
+ </form>
42
+ </field>
43
+ </record>
44
+ <record model="ir.ui.view" id="printing_server_view_tree">
45
+ <field name="name">printing.server.tree (in base_report_to_printer)</field>
46
+ <field name="model">printing.server</field>
47
+ <field name="arch" type="xml">
48
+ <list>
49
+ <field name="name" />
50
+ <field name="address" />
51
+ <field name="port" />
52
+ </list>
53
+ </field>
54
+ </record>
55
+ <record model="ir.ui.view" id="printing_server_view_search">
56
+ <field name="name">printing.server.search (in base_report_to_printer)</field>
57
+ <field name="model">printing.server</field>
58
+ <field name="arch" type="xml">
59
+ <search string="Servers">
60
+ <field name="name" />
61
+ <field name="address" />
62
+ <field name="port" />
63
+ </search>
64
+ </field>
65
+ </record>
66
+ <record model="ir.actions.act_window" id="printing_server_action">
67
+ <field name="name">Servers</field>
68
+ <field name="type">ir.actions.act_window</field>
69
+ <field name="res_model">printing.server</field>
70
+ <field name="view_mode">list,form</field>
71
+ </record>
72
+ <menuitem
73
+ name="Servers"
74
+ sequence="10"
75
+ id="printing_server_menu"
76
+ parent="printing_menu"
77
+ action="printing_server_action"
78
+ />
79
+ </odoo>