是呀模块化迭代多了,对于不熟悉模块的人来说很痛苦。
Q
qiaogang
@qiaogang
-
在odoo12自带模块上进行二次开发,怎么很快摸清自带模块表关系和功能点 -
请教大神瞬态模型的应用场景以及方法,谢谢!!!就在odoo中向导(wizard)会使用吧
-
在odoo12自带模块上进行二次开发,怎么很快摸清自带模块表关系和功能点公司已经在odoo12自带库存(stock)、采购(purchase)、销售(sale)、开票(account)等模块基础上有扩展很多基本功能。我现在要在这之上在进行开发新功能,但是odoo自带模块内容也特别多,摸索进度特别慢。感觉不弄清楚很难进行二次发开,问下有经验的大佬们都是怎么做的?现在很自闭!!
-
odoo中有自带的实现后台主动通知客户端的功能嘛??我现在的项目需要定期检查商品的效期,然后低于某个值之后需要通知到客户端有弹窗提醒。我不清楚odoo有没有自带的后台主动通知客户端的功能。我本来是准备是用websocket试试的,结果有些问题,代码如下:
import asyncio from tornado import websocket, web, ioloop import logging import threading _logger = logging.getLogger(__name__) class EchoWebSocket(websocket.WebSocketHandler): live_web_sockets = set() def check_origin(self, origin): return True def open(self): _logger.info("连接打开") self.set_nodelay(True) self.live_web_sockets.add(self) self.write_message("你已经连接上WS服务") def on_message(self, message): self.write_message(u"你发送的数据: " + message) @classmethod def send_message(cls, message): removable = set() for ws in cls.live_web_sockets: if not ws.ws_connection or not ws.ws_connection.stream.socket: removable.add(ws) else: ws.write_message(message) for ws in removable: cls.live_web_sockets.remove(ws) def on_close(self): _logger.info("连接关闭") class WebSocketServer(threading.Thread): def run(self) -> None: asyncio.set_event_loop(asyncio.new_event_loop()) application = web.Application([ (r'/websocket', EchoWebSocket) ]) application.listen(8888) ioloop.IOLoop.instance().start() WebSocketServer().start()
然后在编写了检查效期的方法:
import datetime from odoo import models, fields, api from .socketserver import EchoWebSocket class CronJob(models.Model): _inherit = "cron.job" def check_endvalidate(self): """ 近效期查询弹窗提示 :return: """ records = self.env['bicon_press_doc_v'].search([]) for record in records: endvalidate = record.endvalidate now = datetime.date.today() limit = self.env['sys.params'].search([('key', '=', 'endvalidate_limit')]).value if (endvalidate - now).days < int(limit): EchoWebSocket.send_message('存在近效期小于一年的商品,请前往业务大厅中的药品近效期促销表中查看!')
js中就在右上角的UserMenu中添加了如下代码占时测试:
var host = "ws://" + window.location.hostname + ":8888/websocket"; var ws = new WebSocket(host); ws.onmessage = function (evt) { alert(evt.data); };
之后页面打开会有你已经连接上WS服务的弹窗提醒,说明websocket是连接上的,然后,在odoo自带的定时器中设置定时执行check_endvalidate方法后就会报错:ValueError: <class 'RuntimeError'>: "There is no current event loop in thread 'odoo.service.cron.cron0'." while evaluating
'model.check_endvalidate()'
我很懵逼呀!
所以想问下odoo自带的有没有后台主动通知客户端的功能,我需要定时执行一些逻辑后通知页面。希望各位大佬指点一哈!!!