Merge branch 'dev' of https://gitee.com/jinan-pengyusen-data/gzth into dev_wang
This commit is contained in:
@@ -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
|
||||
@@ -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,
|
||||
|
||||
@@ -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"/>
|
||||
|
||||
@@ -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 ''
|
||||
|
||||
@@ -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'})
|
||||
|
||||
|
||||
@@ -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="详细信息")
|
||||
|
||||
Reference in New Issue
Block a user