40 lines
1.5 KiB
Python
40 lines
1.5 KiB
Python
# Part of Odoo. See LICENSE file for full copyright and licensing details.
|
|
|
|
import uuid
|
|
from odoo import fields, models, api
|
|
|
|
class PosBusMixin(models.AbstractModel):
|
|
_name = "pos.bus.mixin"
|
|
_description = "Bus Mixin"
|
|
|
|
access_token = fields.Char('Security Token', copy=False)
|
|
|
|
@api.model_create_multi
|
|
def create(self, vals_list):
|
|
records = super().create(vals_list)
|
|
for record in records:
|
|
record._ensure_access_token()
|
|
return records
|
|
|
|
def _ensure_access_token(self):
|
|
if self.access_token:
|
|
return self.access_token
|
|
token = self.access_token = str(uuid.uuid4())
|
|
return token
|
|
|
|
def _notify(self, *notifications, private=True) -> None:
|
|
""" Send a notification to the bus.
|
|
ex: one notification: ``self._notify('STATUS', {'status': 'closed'})``
|
|
multiple notifications: ``self._notify(('STATUS', {'status': 'closed'}), ('TABLE_ORDER_COUNT', {'count': 2}))``
|
|
"""
|
|
self.ensure_one()
|
|
self._ensure_access_token()
|
|
if isinstance(notifications[0], str):
|
|
if len(notifications) != 2:
|
|
raise ValueError("If you want to send a single notification, you must provide a name: str and a message: any")
|
|
notifications = [notifications]
|
|
for name, message in notifications:
|
|
self.env["bus.bus"]._sendone(
|
|
self.access_token, f"{self.access_token}-{name}" if private else name, message
|
|
)
|