This commit is contained in:
李鹏宇
2026-03-04 14:58:15 +08:00
9 changed files with 71 additions and 13 deletions
+23
View File
@@ -0,0 +1,23 @@
# -*- coding: utf-8 -*-
import json
import logging
from functools import wraps
from odoo.exceptions import AccessDenied, UserError, ValidationError
_logger = logging.getLogger(__name__)
def exception_handle(func):
@wraps(func)
def wrapper(*args, **kwargs):
try:
return func(*args, **kwargs)
except (AccessDenied, UserError, ValidationError) as e:
_logger.info(str(e))
return json.dumps({'data': '', 'code': 500, 'message': str(e)})
except Exception as e:
_logger.exception(e)
return json.dumps({'data': '', 'code': 500, 'message': str(e)})
return wrapper
+11 -4
View File
@@ -4,12 +4,14 @@ from datetime import date
from odoo.tools import DEFAULT_SERVER_DATE_FORMAT as DATE_FORMAT
from odoo.http import request, Controller, route
from .decorators import exception_handle
_logger = logging.getLogger(__name__)
class RestaurantController(Controller):
@route('/phone/restaurant/menu_days', methods=['POST'], type='http', auth="none", csrf=False, cors='*')
@exception_handle
def get_menu_days(self, **kwargs):
year = int(kwargs.get('year', date.today().year))
Menu = request.env['yuthon.menu.setting'].sudo()
@@ -23,6 +25,7 @@ class RestaurantController(Controller):
return json.dumps({'data': result, 'code': 200, 'message': ''})
@route('/phone/restaurant/menus', methods=['POST'], type='http', auth="none", csrf=False, cors='*')
@exception_handle
def get_menus(self, **kwargs):
menu_date = kwargs.get('menu_date', date.today())
Menu = request.env['yuthon.menu.setting'].sudo()
@@ -41,6 +44,7 @@ class RestaurantController(Controller):
return json.dumps({'data': result, 'code': 200, 'message': ''})
@route('/phone/restaurant/collect_catering', methods=['POST'], type='http', auth="none", csrf=False, cors='*')
@exception_handle
def collect_catering(self, **kwargs):
user_id = int(kwargs.get('user_id'))
menu_date = kwargs.get('menu_date', date.today())
@@ -53,7 +57,8 @@ class RestaurantController(Controller):
'employee_id': employee.id,
'breakfast': kwargs.get('breakfast') == 'true',
'lunch': kwargs.get('lunch') == 'true',
'menu_day_id': kwargs.get('menu_id')
'menu_day_id': kwargs.get('menu_id'),
'state': 'confirmed'
})
if record:
catering_data = {
@@ -68,6 +73,7 @@ class RestaurantController(Controller):
return json.dumps({'data': '', 'code': 500, 'message': '提交失败'})
@route('/phone/restaurant/update_catering', methods=['POST'], type='http', auth="none", csrf=False, cors='*')
@exception_handle
def update_catering(self, **kwargs):
user_id = int(kwargs.get('user_id'))
catering_id = int(kwargs.get('id'))
@@ -95,10 +101,11 @@ class RestaurantController(Controller):
return json.dumps({'data': catering_data, 'code': 200, 'message': '修改成功'})
@route('/phone/restaurant/get_catering', methods=['POST'], type='http', auth="none", csrf=False, cors='*')
@exception_handle
def get_catering(self, **kwargs):
user_id = int(kwargs.get('user_id'))
menu_date = kwargs.get('menu_date', date.today())
menu_id = kwargs.get('menu_id')
menu_id = int(kwargs.get('menu_id'))
if not user_id or not menu_date or not menu_id:
return json.dumps({'data': '', 'code': 500, 'message': '请求失败'})
@@ -107,8 +114,8 @@ class RestaurantController(Controller):
catering = request.env['yuthon.catering'].sudo().search([
('employee_id', '=', employee.id),
('date', '=', menu_date),
('menu_day_id', '=', menu_id),
])
# ('menu_day_id', '=', menu_id),
], limit=1, order='id desc')
if catering:
catering_data = {
'id': catering.id,
+27
View File
@@ -254,6 +254,33 @@ class YuthonCatering(models.Model):
btntxt="查看详情"
)
# 一次性,生成3.1-3.3所有数据,状态为已确认
def test_1(self):
employee_ids = self.env['yuthon.catering.conf'].search([])[0].employee_ids
for emp in employee_ids:
self.env['yuthon.catering'].create({
'date': '2026-03-01',
'state': 'confirmed',
'employee_id': emp.id,
'breakfast': True,
'lunch': True,
})
self.env['yuthon.catering'].create({
'date': '2026-03-02',
'state': 'confirmed',
'employee_id': emp.id,
'breakfast': True,
'lunch': True,
})
self.env['yuthon.catering'].create({
'date': '2026-03-03',
'state': 'confirmed',
'employee_id': emp.id,
'breakfast': True,
'lunch': True,
})
# 定义批量提醒方法
def batch_remind_catering(self):
"""
@@ -4,6 +4,7 @@ from odoo import api, fields, models
class YuthonMenuSetting(models.Model):
_name = 'yuthon.menu.setting'
_description = '菜单配置'
_rec_name = 'id'
breakfast_ids = fields.Many2many(
'yuthon.dishes.setting',
@@ -9,6 +9,7 @@
<tree string="餐饮" editable="top">
<header>
<button name="batch_remind_catering" string="批量提醒" type="object" class="btn btn-primary"/>
<!-- <button name="test_1" string="test" type="object" class="btn btn-primary"/>-->
</header>
<field name="date"/>
<field name="state"/>
+1 -1
View File
@@ -48,7 +48,7 @@ class CardApprovals(models.Model):
('vacation_date', '=', vacation_date),
], limit=1)
if vacation_report:
vacation_report.vacation_date()
vacation_report._compute_number_card()
self.number_cards_replaced = vacation_report.number_card
@@ -2139,7 +2139,6 @@ class VacationOverline(models.Model):
if res_model and res_id and res_model in self.env:
overtime_id = rec.env[res_model].search([('id', '=', res_id)], limit=1)
if overtime_id:
rec.meal = overtime_id.meal
rec.reason_application = overtime_id.reason_application
rec.overtime_name = overtime_id.name or ''
rec.start_time = overtime_id.start_time or ''
+1 -1
View File
@@ -102,7 +102,7 @@ class YuthonNotice(http.Controller):
def yuthon_notice_confirm(self, **kwargs):
notice_id = kwargs.get('id')
employee_id = kwargs.get('employee_id')
confirm_id = request.env['yuthon.confirm.users'].sudo().search([('notice_id', '=', notice_id), ('employee_id', '=', employee_id)])
confirm_id = request.env['yuthon.confirm.users'].sudo().search([('notice_id', '=', int(notice_id)), ('employee_id.user_id', '=', employee_id)])
confirm_id.write({'state': 'yes'})
return json.dumps({'code': 200, 'message': 'OK'})
+6 -6
View File
@@ -32,7 +32,7 @@ class YuthonConfirmUsers(models.Model):
for record in self.search([('state', '=', 'no')]):
partner_ids = record.employee_id.user_id.partner_id.id
record.with_context(lang=record.env.lang)._message_auto_subscribe_notify(partner_ids, 'yuthon_notice.message_yuthon_confirm_users_data')
url = f'https://phone.thtzjt.com/phone/Notice/110?employee_id={record.employee_id.id}'
url = f'https://phone.thtzjt.com/phone/Notice/{self.notice_id.id}?employee_id={record.employee_id.id}'
self.sudo().env["wecom.apps"].sync_send_message_textcard(category='notice', touser=record.employee_id.wecom_userid, title="通知公告",
description="您有待确认的通知公告请尽快确认", url=url, btntxt="详细信息")
@@ -41,9 +41,9 @@ class YuthonConfirmUsers(models.Model):
confirm_noice_ids = self.env["yuthon.confirm.users"].browse(self._context.get('active_ids', self._context.get('active_id')))
i = 0
for rec in confirm_noice_ids:
if rec.state in ['yes', 'to_sent']:
continue
url = f'https://phone.thtzjt.com/phone/Notice/110?employee_id={rec.employee_id.id}'
# if rec.state in ['yes', 'to_sent']:
# continue
url = f'https://phone.thtzjt.com/phone/Notice/{self.notice_id.id}?employee_id={rec.employee_id.id}'
result_data = self.sudo().env["wecom.apps"].sync_send_message_textcard(category='notice', touser=rec.employee_id.wecom_userid,
title="通知公告", description="您有待确认的通知公告请尽快确认",
url=url, btntxt="详细信息")
@@ -51,7 +51,7 @@ class YuthonConfirmUsers(models.Model):
res_dict = result_data[1]
if res_dict.get('errmsg') == 'ok':
i = i + 1
url = f'https://phone.thtzjt.com/phone/Notice/110?employee_id=298'
url = f'https://phone.thtzjt.com/phone/Notice/{self.notice_id.id}?employee_id=298'
self.sudo().env["wecom.apps"].sync_send_message_textcard(category='notice',
touser='18562027762',
title="通知公告",
@@ -71,7 +71,7 @@ class YuthonConfirmUsers(models.Model):
if rec.employee_id.wecom_userid:
we_id_list.append(rec.employee_id.wecom_userid)
touser = "|".join(we_id_list) if we_id_list else ""
url = f'https://phone.thtzjt.com/phone/Notice/110?employee_id={self.users_id.id}'
url = f'https://phone.thtzjt.com/phone/Notice/{self.notice_id.id}?employee_id={self.users_id.id}'
self.sudo().env["wecom.apps"].sync_send_message_textcard(category='notice', touser=touser, title="通知公告",
description=self.name + '发布人:' + self.users_id.name,
url=url, btntxt="详细信息")