From fe39364f0716ff7dd63a1c1b37f0a971475bce34 Mon Sep 17 00:00:00 2001 From: Sylvain LE GAL Date: Tue, 10 Sep 2024 19:30:05 +0200 Subject: [PATCH] [ADD] pos_odoo_driver_device_list --- pos_odoo_driver_device_list/README.rst | 0 pos_odoo_driver_device_list/__init__.py | 1 + pos_odoo_driver_device_list/__manifest__.py | 25 ++++ pos_odoo_driver_device_list/i18n/fr.po | 141 ++++++++++++++++++ .../models/__init__.py | 2 + .../models/pos_config.py | 53 +++++++ .../models/pos_device.py | 39 +++++ .../readme/CONTRIBUTORS.rst | 1 + .../readme/DESCRIPTION.rst | 4 + pos_odoo_driver_device_list/readme/USAGE.rst | 9 ++ .../security/ir.model.access.csv | 3 + .../security/ir_rule.xml | 19 +++ .../static/description/pos_device_tree.png | Bin 0 -> 46329 bytes .../static/src/js/devices.esm.js | 41 +++++ .../views/view_pos_device.xml | 39 +++++ setup/.setuptools-odoo-make-default-ignore | 2 + setup/README | 2 + .../odoo/addons/pos_odoo_driver_device_list | 1 + setup/pos_odoo_driver_device_list/setup.py | 6 + 19 files changed, 388 insertions(+) create mode 100644 pos_odoo_driver_device_list/README.rst create mode 100644 pos_odoo_driver_device_list/__init__.py create mode 100644 pos_odoo_driver_device_list/__manifest__.py create mode 100644 pos_odoo_driver_device_list/i18n/fr.po create mode 100644 pos_odoo_driver_device_list/models/__init__.py create mode 100644 pos_odoo_driver_device_list/models/pos_config.py create mode 100644 pos_odoo_driver_device_list/models/pos_device.py create mode 100644 pos_odoo_driver_device_list/readme/CONTRIBUTORS.rst create mode 100644 pos_odoo_driver_device_list/readme/DESCRIPTION.rst create mode 100644 pos_odoo_driver_device_list/readme/USAGE.rst create mode 100644 pos_odoo_driver_device_list/security/ir.model.access.csv create mode 100644 pos_odoo_driver_device_list/security/ir_rule.xml create mode 100644 pos_odoo_driver_device_list/static/description/pos_device_tree.png create mode 100644 pos_odoo_driver_device_list/static/src/js/devices.esm.js create mode 100644 pos_odoo_driver_device_list/views/view_pos_device.xml create mode 100644 setup/.setuptools-odoo-make-default-ignore create mode 100644 setup/README create mode 120000 setup/pos_odoo_driver_device_list/odoo/addons/pos_odoo_driver_device_list create mode 100644 setup/pos_odoo_driver_device_list/setup.py diff --git a/pos_odoo_driver_device_list/README.rst b/pos_odoo_driver_device_list/README.rst new file mode 100644 index 0000000..e69de29 diff --git a/pos_odoo_driver_device_list/__init__.py b/pos_odoo_driver_device_list/__init__.py new file mode 100644 index 0000000..0650744 --- /dev/null +++ b/pos_odoo_driver_device_list/__init__.py @@ -0,0 +1 @@ +from . import models diff --git a/pos_odoo_driver_device_list/__manifest__.py b/pos_odoo_driver_device_list/__manifest__.py new file mode 100644 index 0000000..efded3e --- /dev/null +++ b/pos_odoo_driver_device_list/__manifest__.py @@ -0,0 +1,25 @@ +# Copyright (C) 2024 - Today: GRAP (http://www.grap.coop) +# @author: Sylvain LE GAL (https://twitter.com/legalsylvain) +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). + +{ + "name": "Point of Sale - Devices List (odoo-pos-driver)", + "version": "16.0.1.0.0", + "category": "Point Of Sale", + "summary": "Get devices information from odoo-pos-driver library", + "author": "GRAP", + "website": "https://github.com/grap/odoo-addons-pos", + "license": "AGPL-3", + "depends": ["point_of_sale"], + "assets": { + "point_of_sale.assets": [ + "pos_odoo_driver_device_list/static/src/js/devices.esm.js", + ], + }, + "data": [ + "security/ir.model.access.csv", + "security/ir_rule.xml", + "views/view_pos_device.xml", + ], + "installable": True, +} diff --git a/pos_odoo_driver_device_list/i18n/fr.po b/pos_odoo_driver_device_list/i18n/fr.po new file mode 100644 index 0000000..6180a5a --- /dev/null +++ b/pos_odoo_driver_device_list/i18n/fr.po @@ -0,0 +1,141 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * pos_odoo_driver_device_list +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 16.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2024-09-14 13:15+0000\n" +"PO-Revision-Date: 2024-09-14 13:15+0000\n" +"Last-Translator: \n" +"Language-Team: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: \n" + +#. module: pos_odoo_driver_device_list +#: model:ir.model.fields,field_description:pos_odoo_driver_device_list.field_pos_device__company_id +msgid "Company" +msgstr "Société" + +#. module: pos_odoo_driver_device_list +#: model:ir.model.fields,field_description:pos_odoo_driver_device_list.field_pos_device__config_id +msgid "Config" +msgstr "Point de vente" + +#. module: pos_odoo_driver_device_list +#: model:ir.model.fields,field_description:pos_odoo_driver_device_list.field_pos_device__create_uid +msgid "Created by" +msgstr "Créé par" + +#. module: pos_odoo_driver_device_list +#: model:ir.model.fields,field_description:pos_odoo_driver_device_list.field_pos_device__create_date +msgid "Created on" +msgstr "Créé le" + +#. module: pos_odoo_driver_device_list +#: model:ir.model.fields.selection,name:pos_odoo_driver_device_list.selection__pos_device__device_type__display +msgid "Customer Display" +msgstr "Afficheur client" + +#. module: pos_odoo_driver_device_list +#: model:ir.model.fields,field_description:pos_odoo_driver_device_list.field_pos_config__device_ids +msgid "Device" +msgstr "Périphérique" + +#. module: pos_odoo_driver_device_list +#: model:ir.model.fields,field_description:pos_odoo_driver_device_list.field_pos_device__device_type +msgid "Device Type" +msgstr "Type de périphérique" + +#. module: pos_odoo_driver_device_list +#: model:ir.model.fields,field_description:pos_odoo_driver_device_list.field_pos_device__display_name +msgid "Display Name" +msgstr "Nom complet" + +#. module: pos_odoo_driver_device_list +#: model:ir.model.fields,field_description:pos_odoo_driver_device_list.field_pos_device__id +msgid "ID" +msgstr "" + +#. module: pos_odoo_driver_device_list +#: model:ir.model.fields,field_description:pos_odoo_driver_device_list.field_pos_device__last_connexion_date +msgid "Last Connexion Date" +msgstr "Date de dernière connexion" + +#. module: pos_odoo_driver_device_list +#: model:ir.model.fields,field_description:pos_odoo_driver_device_list.field_pos_device____last_update +msgid "Last Modified on" +msgstr "Dernière mise à jour le" + +#. module: pos_odoo_driver_device_list +#: model:ir.model.fields,field_description:pos_odoo_driver_device_list.field_pos_device__write_uid +msgid "Last Updated by" +msgstr "Dernière mise à jour par" + +#. module: pos_odoo_driver_device_list +#: model:ir.model.fields,field_description:pos_odoo_driver_device_list.field_pos_device__write_date +msgid "Last Updated on" +msgstr "Dernière mise à jour le" + +#. module: pos_odoo_driver_device_list +#: model:ir.model.fields,field_description:pos_odoo_driver_device_list.field_pos_device__manufacturer +msgid "Manufacturer" +msgstr "" + +#. module: pos_odoo_driver_device_list +#: model:ir.model.fields,field_description:pos_odoo_driver_device_list.field_pos_device__name +msgid "Name" +msgstr "" + +#. module: pos_odoo_driver_device_list +#: model:ir.model.fields.selection,name:pos_odoo_driver_device_list.selection__pos_device__device_type__payment +msgid "Payment Terminal" +msgstr "" + +#. module: pos_odoo_driver_device_list +#: model:ir.ui.menu,name:pos_odoo_driver_device_list.menu_pos_device +msgid "PoS Devices" +msgstr "" + +#. module: pos_odoo_driver_device_list +#: model:ir.model,name:pos_odoo_driver_device_list.model_pos_config +msgid "Point of Sale Configuration" +msgstr "Configuration du point de vente" + +#. module: pos_odoo_driver_device_list +#: model:ir.model,name:pos_odoo_driver_device_list.model_pos_device +msgid "Point of Sale Devices" +msgstr "" + +#. module: pos_odoo_driver_device_list +#: model:ir.actions.act_window,name:pos_odoo_driver_device_list.action_pos_device +msgid "Pos Devices" +msgstr "" + +#. module: pos_odoo_driver_device_list +#: model:ir.model.fields.selection,name:pos_odoo_driver_device_list.selection__pos_device__device_type__printer +msgid "Printer" +msgstr "" + +#. module: pos_odoo_driver_device_list +#: model:ir.model.fields,field_description:pos_odoo_driver_device_list.field_pos_device__product_name +msgid "Product Name" +msgstr "" + +#. module: pos_odoo_driver_device_list +#: model:ir.model.fields.selection,name:pos_odoo_driver_device_list.selection__pos_device__device_type__scale +msgid "Scale" +msgstr "" + +#. module: pos_odoo_driver_device_list +#: model:ir.model.fields,field_description:pos_odoo_driver_device_list.field_pos_device__serial_number +msgid "Serial Number" +msgstr "" + +#. module: pos_odoo_driver_device_list +#: model:ir.model.fields,field_description:pos_odoo_driver_device_list.field_pos_device__vendor_product_code +msgid "Vendor Product Code" +msgstr "" diff --git a/pos_odoo_driver_device_list/models/__init__.py b/pos_odoo_driver_device_list/models/__init__.py new file mode 100644 index 0000000..9044dab --- /dev/null +++ b/pos_odoo_driver_device_list/models/__init__.py @@ -0,0 +1,2 @@ +from . import pos_config +from . import pos_device diff --git a/pos_odoo_driver_device_list/models/pos_config.py b/pos_odoo_driver_device_list/models/pos_config.py new file mode 100644 index 0000000..e115bd0 --- /dev/null +++ b/pos_odoo_driver_device_list/models/pos_config.py @@ -0,0 +1,53 @@ +# Copyright (C) 2024 - Today: GRAP (http://www.grap.coop) +# @author: Sylvain LE GAL (https://twitter.com/legalsylvain) +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). + +from datetime import datetime + +from odoo import api, fields, models + + +class PosConfig(models.Model): + _inherit = "pos.config" + + device_ids = fields.One2many(comodel_name="pos.device", inverse_name="config_id") + + @api.model + def update_pos_device(self, config_id, changes): + PosDevice = self.env["pos.device"] + for device_type, device_info in changes.items(): + existing_device = PosDevice.search( + [ + ("config_id", "=", config_id), + ("device_type", "=", device_type), + ("name", "=", device_info.get("device_name", False)), + ("product_name", "=", device_info.get("product_name", False)), + ("manufacturer", "=", device_info.get("manufacturer", False)), + ("serial_number", "=", device_info.get("serial_number", False)), + ( + "vendor_product_code", + "=", + device_info.get("vendor_product_code", False), + ), + ], + limit=1, + order="last_connexion_date desc", + ) + if existing_device: + existing_device.write({"last_connexion_date": datetime.now()}) + else: + PosDevice.create( + { + "config_id": config_id, + "device_type": device_type, + "name": device_info.get("device_name", False), + "product_name": device_info.get("product_name", False), + "manufacturer": device_info.get("manufacturer", False), + "serial_number": device_info.get("serial_number", False), + "vendor_product_code": device_info.get( + "vendor_product_code", False + ), + "last_connexion_date": datetime.now(), + } + ) + return True diff --git a/pos_odoo_driver_device_list/models/pos_device.py b/pos_odoo_driver_device_list/models/pos_device.py new file mode 100644 index 0000000..43b0243 --- /dev/null +++ b/pos_odoo_driver_device_list/models/pos_device.py @@ -0,0 +1,39 @@ +# Copyright (C) 2024 - Today: GRAP (http://www.grap.coop) +# @author: Sylvain LE GAL (https://twitter.com/legalsylvain) +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). + +from odoo import fields, models + + +class PosDevice(models.Model): + _name = "pos.device" + _description = "Point of Sale Devices" + _order = "last_connexion_date desc, name" + + device_type = fields.Selection( + selection=[ + ("display", "Customer Display"), + ("payment", "Payment Terminal"), + ("scale", "Scale"), + ("printer", "Printer"), + ] + ) + + config_id = fields.Many2one(comodel_name="pos.config") + + company_id = fields.Many2one(related="config_id.company_id") + + name = fields.Char(readonly=True) + + product_name = fields.Char(readonly=True) + + vendor_product_code = fields.Char(readonly=True) + + serial_number = fields.Char(readonly=True) + + manufacturer = fields.Char(readonly=True) + + last_connexion_date = fields.Datetime(readonly=True) + + def _default_company_id(self): + return self.env.company diff --git a/pos_odoo_driver_device_list/readme/CONTRIBUTORS.rst b/pos_odoo_driver_device_list/readme/CONTRIBUTORS.rst new file mode 100644 index 0000000..ae6f43a --- /dev/null +++ b/pos_odoo_driver_device_list/readme/CONTRIBUTORS.rst @@ -0,0 +1 @@ +* Sylvain LE GAL (https://twitter.com/legalsylvain) diff --git a/pos_odoo_driver_device_list/readme/DESCRIPTION.rst b/pos_odoo_driver_device_list/readme/DESCRIPTION.rst new file mode 100644 index 0000000..bc4d21a --- /dev/null +++ b/pos_odoo_driver_device_list/readme/DESCRIPTION.rst @@ -0,0 +1,4 @@ +This module extends the Point of Sale odoo module, to add compatibility +with the ``odoo-pos-driver`` python library. + +It will store connected devices information in Odoo for analysis. diff --git a/pos_odoo_driver_device_list/readme/USAGE.rst b/pos_odoo_driver_device_list/readme/USAGE.rst new file mode 100644 index 0000000..2104a27 --- /dev/null +++ b/pos_odoo_driver_device_list/readme/USAGE.rst @@ -0,0 +1,9 @@ +* Open the Point of sale, with usb devices connected. + +* Close the point of sale. + +* Go to " / Devices". + +you can see the devices information, with last usage date. + +.. figure:: ../static/img/pos_device_tree.png diff --git a/pos_odoo_driver_device_list/security/ir.model.access.csv b/pos_odoo_driver_device_list/security/ir.model.access.csv new file mode 100644 index 0000000..bc7e685 --- /dev/null +++ b/pos_odoo_driver_device_list/security/ir.model.access.csv @@ -0,0 +1,3 @@ +id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink +access_pos_device_user,access_pos_device_user,pos_odoo_driver_device_list.model_pos_device,point_of_sale.group_pos_user,1,1,1,0 +access_pos_device_manager,access_pos_device_manager,pos_odoo_driver_device_list.model_pos_device,base.group_system,1,1,1,1 diff --git a/pos_odoo_driver_device_list/security/ir_rule.xml b/pos_odoo_driver_device_list/security/ir_rule.xml new file mode 100644 index 0000000..b0a4acc --- /dev/null +++ b/pos_odoo_driver_device_list/security/ir_rule.xml @@ -0,0 +1,19 @@ + + + + + + PoS Device Rule + + + [('company_id', 'in', company_ids + [False])] + + + diff --git a/pos_odoo_driver_device_list/static/description/pos_device_tree.png b/pos_odoo_driver_device_list/static/description/pos_device_tree.png new file mode 100644 index 0000000000000000000000000000000000000000..2ee31ce924a3c9220ca566695724eef0c32f235c GIT binary patch literal 46329 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
gL+pIazc3Rv=ImmTv6rEp$#eM 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 { + if (driver_value.status === "connected") { + if (JSON.stringify(driver_value) !== JSON.stringify(old_drivers[driver_name])) { + changes[driver_name] = driver_value; + } + } + }) + if (Object.keys(changes).length !== 0) { + this.env.services.rpc({ + model: 'pos.config', + method: 'update_pos_device', + args: [this.env.pos.config.id, changes], + kwargs: {context: this.env.session.user_context}, + }, {}) + .then(function (result) { + console.log("THEN: ", result) + }).catch(function (error){ + console.warn('catch: ', error); + }); + + console.log("CHANGES: ", changes) + } + } + set_connection_status_super.call(this, status, drivers, msg); + }; + +}); diff --git a/pos_odoo_driver_device_list/views/view_pos_device.xml b/pos_odoo_driver_device_list/views/view_pos_device.xml new file mode 100644 index 0000000..84e73b7 --- /dev/null +++ b/pos_odoo_driver_device_list/views/view_pos_device.xml @@ -0,0 +1,39 @@ + + + + + + pos.device + + + + + + + + + + + + + + + + + Pos Devices + pos.device + tree + + + + PoS Devices + + + + + + diff --git a/setup/.setuptools-odoo-make-default-ignore b/setup/.setuptools-odoo-make-default-ignore new file mode 100644 index 0000000..207e615 --- /dev/null +++ b/setup/.setuptools-odoo-make-default-ignore @@ -0,0 +1,2 @@ +# addons listed in this file are ignored by +# setuptools-odoo-make-default (one addon per line) diff --git a/setup/README b/setup/README new file mode 100644 index 0000000..a63d633 --- /dev/null +++ b/setup/README @@ -0,0 +1,2 @@ +To learn more about this directory, please visit +https://pypi.python.org/pypi/setuptools-odoo diff --git a/setup/pos_odoo_driver_device_list/odoo/addons/pos_odoo_driver_device_list b/setup/pos_odoo_driver_device_list/odoo/addons/pos_odoo_driver_device_list new file mode 120000 index 0000000..0ddc385 --- /dev/null +++ b/setup/pos_odoo_driver_device_list/odoo/addons/pos_odoo_driver_device_list @@ -0,0 +1 @@ +../../../../pos_odoo_driver_device_list \ No newline at end of file diff --git a/setup/pos_odoo_driver_device_list/setup.py b/setup/pos_odoo_driver_device_list/setup.py new file mode 100644 index 0000000..28c57bb --- /dev/null +++ b/setup/pos_odoo_driver_device_list/setup.py @@ -0,0 +1,6 @@ +import setuptools + +setuptools.setup( + setup_requires=['setuptools-odoo'], + odoo_addon=True, +)