Files
gzth/yuthon_catering/controllers/restaurant.py
T
2026-09-07 15:16:30 +08:00

154 lines
6.7 KiB
Python

import json
import logging
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()
first_day = date(year, 1, 1)
last_day = date(year, 12, 31)
records = Menu.search([('menu_date', '<=', last_day), ('menu_date', '>=', first_day)], order='menu_date asc')
result = []
if records:
for record in records:
result.append(record.menu_date.strftime(DATE_FORMAT))
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()
record = Menu.search([('menu_date', '=', menu_date)], limit=1, order='id desc')
result = {}
if record:
result = {
'id': record.id,
'menu_date': record.menu_date.strftime(DATE_FORMAT) if record.menu_date else '',
'breakfast': ','.join(record.breakfast_ids.mapped('name')) if record.breakfast_ids else '',
'lunch': ','.join(record.lunch_ids.mapped('name')) if record.lunch_ids else '',
'remark': record.remake or '',
}
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())
employee = request.env['hr.employee'].sudo().search([('user_id', '=', user_id)])
existing_record = request.env['yuthon.catering'].search([
('date', '=', menu_date),
('employee_id', '=', employee.id)
], limit=1)
if not existing_record:
record = request.env['yuthon.catering'].create({
'date': menu_date,
'employee_id': employee.id,
'breakfast': kwargs.get('breakfast') == 'true',
'lunch': kwargs.get('lunch') == 'true',
'menu_day_id': kwargs.get('menu_id'),
'state': 'confirmed'
})
catering_data = {
'id': record.id,
'user_id': employee.user_id.id,
'menu_id': record.menu_day_id.id,
'breakfast': record.breakfast,
'lunch': record.lunch,
'state': record.state
}
return json.dumps({'data': catering_data, 'code': 200, 'message': '提交成功'})
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'))
user = request.env['res.users'].sudo().browse(user_id).exists()
employee = request.env['hr.employee'].sudo().search([('user_id', '=', user_id)])
catering = request.env['yuthon.catering'].with_user(user).browse(catering_id).exists()
if not catering:
return json.dumps({'data': '', 'code': 500, 'message': '修改失败,记录不存在'})
catering.write({
'employee_id': employee.id,
'breakfast': kwargs.get('breakfast') == 'true',
'lunch': kwargs.get('lunch') == 'true',
'menu_day_id': kwargs.get('menu_id'),
'state': 'modifying'
})
catering_data = {
'id': catering.id,
'user_id': employee.user_id.id,
'menu_id': catering.menu_day_id.id,
'breakfast': catering.breakfast,
'lunch': catering.lunch,
'state': catering.state
}
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 = int(kwargs.get('menu_id'))
if not user_id or not menu_date or not menu_id:
return json.dumps({'data': '', 'code': 500, 'message': '请求失败'})
employee = request.env['hr.employee'].sudo().search([('user_id', '=', user_id)])
catering = request.env['yuthon.catering'].sudo().search([
('employee_id', '=', employee.id),
('date', '=', menu_date),
# ('menu_day_id', '=', menu_id),
], limit=1, order='id desc')
if catering:
catering_data = {
'id': catering.id,
'user_id': employee.user_id.id,
'menu_id': catering.menu_day_id.id,
'breakfast': catering.breakfast,
'lunch': catering.lunch,
'state': catering.state
}
return json.dumps({'data': catering_data, 'code': 200, 'message': ''})
return json.dumps({'data': '', 'code': 200, 'message': '没有查询到数据'})
@route('/phone/restaurant/get_catering_statistics', methods=['POST'], type='http', auth="none", csrf=False, cors='*')
@exception_handle
def get_catering_statistics(self, **kwargs):
menu_date = kwargs.get('menu_date', date.today())
if not menu_date:
return json.dumps({'data': '', 'code': 500, 'message': '参数错误'})
caterings = request.env['yuthon.catering'].sudo().search([
('date', '=', menu_date),
])
catering_data = {
'breakfast': 0,
'lunch': 0,
}
if caterings:
catering_data = {
'breakfast': len(caterings.filtered(lambda x: x.breakfast)),
'lunch': len(caterings.filtered(lambda x: x.lunch)),
}
return json.dumps({'data': catering_data, 'code': 200, 'message': ''})
return json.dumps({'data': catering_data, 'code': 200, 'message': ''})