Skip to content

Commit 1a4aced

Browse files
Merge PR #1 into 16.0
Signed-off-by legalsylvain
2 parents 65ab4d6 + 2e7c72c commit 1a4aced

22 files changed

+747
-0
lines changed

pos_odoo_driver_display/README.rst

Whitespace-only changes.

pos_odoo_driver_display/__init__.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
from . import models
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
# Copyright (C) 2024 - Today: GRAP (http://www.grap.coop)
2+
# @author: Sylvain LE GAL (https://twitter.com/legalsylvain)
3+
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
4+
5+
{
6+
"name": "Point of Sale - LED Customer Display (odoo-pos-driver)",
7+
"version": "16.0.1.0.0",
8+
"category": "Point Of Sale",
9+
"summary": "Communicate with LEC Customer Display via odoo-pos-driver library",
10+
"author": "GRAP",
11+
"website": "https://github.com/grap/odoo-addons-pos",
12+
"license": "AGPL-3",
13+
"depends": ["point_of_sale"],
14+
"assets": {
15+
"point_of_sale.assets": [
16+
"pos_odoo_driver_display/static/src/js/devices.esm.js",
17+
"pos_odoo_driver_display/static/src/js/ProxyStatus.esm.js",
18+
"pos_odoo_driver_display/static/src/js/models.esm.js",
19+
"pos_odoo_driver_display/static/src/js/Chrome.esm.js",
20+
"pos_odoo_driver_display/static/src/js/PaymentScreen.esm.js",
21+
],
22+
},
23+
"data": ["views/view_pos_config.xml"],
24+
"installable": True,
25+
}

pos_odoo_driver_display/i18n/fr.po

Lines changed: 182 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,182 @@
1+
# Translation of Odoo Server.
2+
# This file contains the translation of the following modules:
3+
# * pos_odoo_driver_display
4+
#
5+
msgid ""
6+
msgstr ""
7+
"Project-Id-Version: Odoo Server 16.0\n"
8+
"Report-Msgid-Bugs-To: \n"
9+
"POT-Creation-Date: 2024-09-10 11:21+0000\n"
10+
"PO-Revision-Date: 2024-09-10 11:21+0000\n"
11+
"Last-Translator: \n"
12+
"Language-Team: \n"
13+
"MIME-Version: 1.0\n"
14+
"Content-Type: text/plain; charset=UTF-8\n"
15+
"Content-Transfer-Encoding: \n"
16+
"Plural-Forms: \n"
17+
18+
#. module: pos_odoo_driver_display
19+
#: model:ir.model.fields.selection,name:pos_odoo_driver_display.selection__pos_config__customer_display_format__2_20
20+
msgid "2 Lines of 20 Characters"
21+
msgstr "2 lignes de 20 caractères"
22+
23+
#. module: pos_odoo_driver_display
24+
#: model:ir.model,name:pos_odoo_driver_display.model_res_config_settings
25+
msgid "Config Settings"
26+
msgstr "Paramètres de configuration"
27+
28+
#. module: pos_odoo_driver_display
29+
#: model:ir.model.fields,field_description:pos_odoo_driver_display.field_pos_config__customer_display_format
30+
#: model:ir.model.fields,field_description:pos_odoo_driver_display.field_res_config_settings__pos_customer_display_format
31+
msgid "Customer Display Format"
32+
msgstr "Format de l'afficheur client"
33+
34+
#. module: pos_odoo_driver_display
35+
#. odoo-javascript
36+
#: code:addons/pos_odoo_driver_display/static/src/js/ProxyStatus.esm.js:0
37+
#, python-format
38+
msgid "Display"
39+
msgstr "Afficheur"
40+
41+
#. module: pos_odoo_driver_display
42+
#. odoo-javascript
43+
#: code:addons/pos_odoo_driver_display/static/src/js/ProxyStatus.esm.js:0
44+
#, python-format
45+
msgid "Display Offline"
46+
msgstr "Afficheur Hors ligne"
47+
48+
#. module: pos_odoo_driver_display
49+
#: model:ir.model.fields,help:pos_odoo_driver_display.field_pos_config__iface_customer_display
50+
#: model:ir.model.fields,help:pos_odoo_driver_display.field_res_config_settings__pos_iface_customer_display
51+
msgid "Display data on the customer display"
52+
msgstr "Afficher les données sur l'afficheur client"
53+
54+
#. module: pos_odoo_driver_display
55+
#: model:ir.model.fields,help:pos_odoo_driver_display.field_pos_config__customer_display_msg_next_l1
56+
#: model:ir.model.fields,help:pos_odoo_driver_display.field_res_config_settings__pos_customer_display_msg_next_l1
57+
msgid ""
58+
"First line of the message on the customer display which is displayed after "
59+
"starting POS and also after validation of an order"
60+
msgstr ""
61+
"Première ligne du message de l'afficheur client qui est affiché après le "
62+
"démarrage de la caisse et également après validation d'une commande client"
63+
64+
#. module: pos_odoo_driver_display
65+
#: model:ir.model.fields,help:pos_odoo_driver_display.field_pos_config__customer_display_msg_closed_l1
66+
#: model:ir.model.fields,help:pos_odoo_driver_display.field_res_config_settings__pos_customer_display_msg_closed_l1
67+
msgid ""
68+
"First line of the message on the customer display which is displayed when "
69+
"POS is closed"
70+
msgstr ""
71+
"Première ligne du message de l'afficheur client qui est affiché quand la "
72+
"caisse est fermée"
73+
74+
#. module: pos_odoo_driver_display
75+
#: model:ir.model.fields,field_description:pos_odoo_driver_display.field_pos_config__iface_customer_display
76+
#: model:ir.model.fields,field_description:pos_odoo_driver_display.field_res_config_settings__pos_iface_customer_display
77+
#: model_terms:ir.ui.view,arch_db:pos_odoo_driver_display.view_res_config_settings_form
78+
msgid "LED Customer Display"
79+
msgstr "Afficheur client LED"
80+
81+
#. module: pos_odoo_driver_display
82+
#: model:ir.model.fields,help:pos_odoo_driver_display.field_pos_config__customer_display_line_length
83+
msgid "Length of the LEDs lines of the customer display"
84+
msgstr "Longueur des lignes de l'afficheur client (nombre de caractères)"
85+
86+
#. module: pos_odoo_driver_display
87+
#: model:ir.model.fields,field_description:pos_odoo_driver_display.field_pos_config__customer_display_line_length
88+
msgid "Line Length"
89+
msgstr "Longueur des lignes"
90+
91+
#. module: pos_odoo_driver_display
92+
#: model:ir.model.fields,field_description:pos_odoo_driver_display.field_pos_config__customer_display_msg_next_l1
93+
#: model:ir.model.fields,field_description:pos_odoo_driver_display.field_res_config_settings__pos_customer_display_msg_next_l1
94+
msgid "Next Customer (Line 1)"
95+
msgstr "Client suivant (ligne 1)"
96+
97+
#. module: pos_odoo_driver_display
98+
#: model:ir.model.fields,field_description:pos_odoo_driver_display.field_pos_config__customer_display_msg_next_l2
99+
#: model:ir.model.fields,field_description:pos_odoo_driver_display.field_res_config_settings__pos_customer_display_msg_next_l2
100+
msgid "Next Customer (Line 2)"
101+
msgstr "Client suivant (ligne 2)"
102+
103+
#. module: pos_odoo_driver_display
104+
#: model:ir.model.fields,field_description:pos_odoo_driver_display.field_pos_config__customer_display_msg_closed_l1
105+
#: model:ir.model.fields,field_description:pos_odoo_driver_display.field_res_config_settings__pos_customer_display_msg_closed_l1
106+
msgid "PoS Closed (Line 1)"
107+
msgstr "Caisse fermée (Ligne 1)"
108+
109+
#. module: pos_odoo_driver_display
110+
#: model:ir.model.fields,field_description:pos_odoo_driver_display.field_pos_config__customer_display_msg_closed_l2
111+
#: model:ir.model.fields,field_description:pos_odoo_driver_display.field_res_config_settings__pos_customer_display_msg_closed_l2
112+
msgid "PoS Closed (Line 2)"
113+
msgstr "Caisse fermée (Ligne 2)"
114+
115+
#. module: pos_odoo_driver_display
116+
#. odoo-python
117+
#: code:addons/pos_odoo_driver_display/models/pos_config.py:0
118+
#, python-format
119+
msgid "Point of Sale Closed"
120+
msgstr "Caisse fermée"
121+
122+
#. module: pos_odoo_driver_display
123+
#: model:ir.model,name:pos_odoo_driver_display.model_pos_config
124+
msgid "Point of Sale Configuration"
125+
msgstr "Configuration du point de vente"
126+
127+
#. module: pos_odoo_driver_display
128+
#. odoo-python
129+
#: code:addons/pos_odoo_driver_display/models/pos_config.py:0
130+
#, python-format
131+
msgid "Point of Sale Open"
132+
msgstr "Caisse ouverte"
133+
134+
#. module: pos_odoo_driver_display
135+
#: model:ir.model,name:pos_odoo_driver_display.model_pos_session
136+
msgid "Point of Sale Session"
137+
msgstr "Session du point de vente"
138+
139+
#. module: pos_odoo_driver_display
140+
#: model:ir.model.fields,help:pos_odoo_driver_display.field_pos_config__customer_display_msg_next_l2
141+
#: model:ir.model.fields,help:pos_odoo_driver_display.field_res_config_settings__pos_customer_display_msg_next_l2
142+
msgid ""
143+
"Second line of the message on the customer display which is displayed after "
144+
"starting POS and also after validation of an order"
145+
msgstr ""
146+
"Deuxième ligne du message de l'afficheur client qui est affiché après le "
147+
"démarrage de la caisse et également après validation d'une commande client"
148+
149+
#. module: pos_odoo_driver_display
150+
#: model:ir.model.fields,help:pos_odoo_driver_display.field_pos_config__customer_display_msg_closed_l2
151+
#: model:ir.model.fields,help:pos_odoo_driver_display.field_res_config_settings__pos_customer_display_msg_closed_l2
152+
msgid ""
153+
"Second line of the message on the customer display which is displayed when "
154+
"POS is closed"
155+
msgstr ""
156+
"Deuxième ligne du message de l'afficheur client qui est affiché quand la "
157+
"caisse est fermée"
158+
159+
#. module: pos_odoo_driver_display
160+
#. odoo-python
161+
#: code:addons/pos_odoo_driver_display/models/pos_config.py:0
162+
#, python-format
163+
msgid "See you soon!"
164+
msgstr "Au revoir !"
165+
166+
#. module: pos_odoo_driver_display
167+
#. odoo-python
168+
#: code:addons/pos_odoo_driver_display/models/pos_config.py:0
169+
#, python-format
170+
msgid ""
171+
"The message for customer display '%(field_name)s' is too long: it has "
172+
"%(current_size)d chars whereas the maximum is %(maxsize)d chars."
173+
msgstr ""
174+
"Le message de l'afficheur client '%(field_name)s' est trop long : il contient %(current_size)d "
175+
"caractères alors que le maximum est de %(maxsize)d caractères."
176+
177+
#. module: pos_odoo_driver_display
178+
#. odoo-python
179+
#: code:addons/pos_odoo_driver_display/models/pos_config.py:0
180+
#, python-format
181+
msgid "Welcome!"
182+
msgstr "Bienvenue !"
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
from . import pos_config
2+
from . import res_config_settings
3+
from . import pos_session
Lines changed: 101 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,101 @@
1+
# © 2014-2016 Aurélien DUMAINE
2+
# © 2015-2016 Akretion (Alexis de Lattre <alexis.delattre@akretion.com>)
3+
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
4+
5+
from odoo import _, api, fields, models
6+
from odoo.exceptions import ValidationError
7+
8+
9+
class PosConfig(models.Model):
10+
_inherit = "pos.config"
11+
12+
_CUSTOMER_DISPLAY_FORMAT_SELECTION = [
13+
("2_20", "2 Lines of 20 Characters"),
14+
]
15+
16+
iface_customer_display = fields.Boolean(
17+
string="LED Customer Display", help="Display data on the customer display"
18+
)
19+
20+
customer_display_format = fields.Selection(
21+
selection=_CUSTOMER_DISPLAY_FORMAT_SELECTION,
22+
default="2_20",
23+
required=True,
24+
)
25+
26+
customer_display_line_length = fields.Integer(
27+
string="Line Length",
28+
compute="_compute_customer_display_line_length",
29+
store=True,
30+
help="Length of the LEDs lines of the customer display",
31+
)
32+
customer_display_msg_next_l1 = fields.Char(
33+
string="Next Customer (Line 1)",
34+
default=lambda x: x._default_customer_display_msg("next_l1"),
35+
help="First line of the message on the customer display which is "
36+
"displayed after starting POS and also after validation of an order",
37+
)
38+
customer_display_msg_next_l2 = fields.Char(
39+
string="Next Customer (Line 2)",
40+
default=lambda x: x._default_customer_display_msg("next_l2"),
41+
help="Second line of the message on the customer display which is "
42+
"displayed after starting POS and also after validation of an order",
43+
)
44+
customer_display_msg_closed_l1 = fields.Char(
45+
string="PoS Closed (Line 1)",
46+
default=lambda x: x._default_customer_display_msg("closed_l1"),
47+
help="First line of the message on the customer display which "
48+
"is displayed when POS is closed",
49+
)
50+
customer_display_msg_closed_l2 = fields.Char(
51+
string="PoS Closed (Line 2)",
52+
default=lambda x: x._default_customer_display_msg("closed_l2"),
53+
help="Second line of the message on the customer display which "
54+
"is displayed when POS is closed",
55+
)
56+
57+
@api.model
58+
def _default_customer_display_msg(self, line):
59+
if line == "next_l1":
60+
return _("Point of Sale Open")
61+
elif line == "next_l2":
62+
return _("Welcome!")
63+
elif line == "closed_l1":
64+
return _("Point of Sale Closed")
65+
elif line == "closed_l2":
66+
return _("See you soon!")
67+
68+
@api.depends("customer_display_format")
69+
def _compute_customer_display_line_length(self):
70+
for config in self:
71+
config.customer_display_line_length = int(
72+
config.customer_display_format.split("_")[1]
73+
)
74+
75+
@api.constrains(
76+
"iface_customer_display",
77+
"customer_display_format",
78+
"customer_display_msg_next_l1",
79+
"customer_display_msg_next_l2",
80+
"customer_display_msg_closed_l1",
81+
"customer_display_msg_closed_l2",
82+
)
83+
def _check_customer_display_length(self):
84+
for config in self.filtered(lambda x: x.customer_display_line_length):
85+
maxsize = config.customer_display_line_length
86+
fields_to_check = [
87+
x for x in self._fields.keys() if "customer_display_msg_" in x
88+
]
89+
for field_name in fields_to_check:
90+
value = getattr(config, field_name)
91+
if value and len(value) > maxsize:
92+
raise ValidationError(
93+
_(
94+
"The message for customer display '%(field_name)s' is too "
95+
"long: it has %(current_size)d chars whereas the maximum "
96+
"is %(maxsize)d chars.",
97+
field_name=self._fields[field_name].string,
98+
current_size=len(value),
99+
maxsize=maxsize,
100+
)
101+
)
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
# Copyright (C) 2024 - Today: GRAP (http://www.grap.coop)
2+
# @author: Sylvain LE GAL (https://twitter.com/legalsylvain)
3+
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
4+
5+
from odoo import models
6+
7+
8+
class PosSession(models.Model):
9+
_inherit = "pos.session"
10+
11+
def _get_pos_ui_pos_config(self, params):
12+
config = super()._get_pos_ui_pos_config(params)
13+
config["use_proxy"] = config["use_proxy"] or (
14+
config["is_posbox"] and config["iface_customer_display"]
15+
)
16+
return config
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
# Copyright (C) 2024 - Today: GRAP (http://www.grap.coop)
2+
# @author: Sylvain LE GAL (https://twitter.com/legalsylvain)
3+
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
4+
5+
from odoo import fields, models
6+
7+
8+
class ResConfigSettings(models.TransientModel):
9+
_inherit = "res.config.settings"
10+
11+
pos_iface_customer_display = fields.Boolean(
12+
related="pos_config_id.iface_customer_display", readonly=False
13+
)
14+
pos_customer_display_format = fields.Selection(
15+
related="pos_config_id.customer_display_format",
16+
readonly=False,
17+
required=True,
18+
)
19+
pos_customer_display_msg_next_l1 = fields.Char(
20+
related="pos_config_id.customer_display_msg_next_l1", readonly=False
21+
)
22+
pos_customer_display_msg_next_l2 = fields.Char(
23+
related="pos_config_id.customer_display_msg_next_l2", readonly=False
24+
)
25+
pos_customer_display_msg_closed_l1 = fields.Char(
26+
related="pos_config_id.customer_display_msg_closed_l1", readonly=False
27+
)
28+
pos_customer_display_msg_closed_l2 = fields.Char(
29+
related="pos_config_id.customer_display_msg_closed_l2", readonly=False
30+
)
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
To configure this module,
2+
* go to the menu Point of Sale > Configuration > Point of Sale
3+
* edit the point of sale for which you want to enable the LED:
4+
5+
* In the IotBox section, activate the option *LED Customer Display*,
6+
* configure the format of your LED screen. (2 lines of 20 characters, by default)
7+
8+
* optionaly, you can customize the *Next customer* message and the *POS closed* message
9+
10+
.. figure:: ../static/img/pos_config_form.png
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
This module is a full refactor of the OCA V12 module ``pos_customer_display``.
2+
Original authors and ideas are:
3+
4+
* Aurélien Dumaine
5+
* Alexis de Lattre <alexis.delattre@akretion.com>
6+
* Father Odilon (`Barroux Abbey <http://www.barroux.org/>`_)
7+
* Daniel Kraft
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
This module extends the Point of Sale odoo module, to add compatibility with the ``odoo-pos-driver``
2+
python library, when using LED Customer display.
3+
4+
More information: https://pypi.org/project/odoo-pos-driver/

0 commit comments

Comments
 (0)