diff --git a/yuthon_base/__manifest__.py b/yuthon_base/__manifest__.py index ff8205825..c7ff83e86 100644 --- a/yuthon_base/__manifest__.py +++ b/yuthon_base/__manifest__.py @@ -12,6 +12,7 @@ 'views/ir_cron_act_views.xml', 'views/yuthon_timed_tasks_views.xml', 'views/yuthon_timed_tasks_views.xml', + 'views/yuthon_phone_lotter.xml', 'views/menu.xml', ], 'assets': { diff --git a/yuthon_base/controllers/phone.py b/yuthon_base/controllers/phone.py index 61012342f..1182ffedf 100644 --- a/yuthon_base/controllers/phone.py +++ b/yuthon_base/controllers/phone.py @@ -1,7 +1,7 @@ import json +from odoo import http, fields from odoo.http import request, Response import logging -from odoo import http, fields _logger = logging.getLogger(__name__) @@ -100,3 +100,68 @@ class YuThonPhone(http.Controller): 'sex': kw.get('sex'), } return json.dumps({'data': data, 'code': 200, 'message': ''}) + + # 抽签项目列表接口 + @http.route('/phone/lottery/list', type='http', auth="none", csrf=False, cors='*', methods=['GET']) + def lottery_list(self, **kw): + """ + 获取抽签项目列表 + 返回:id、项目名称、人员列表、人数 + """ + try: + lottery_records = request.env['phone.lottery'].sudo().search([]) + data_list = [] + for record in lottery_records: + employee_list = [{ + 'id': emp.id, + 'name': emp.name, + } for emp in record.employee_ids] + + data_list.append({ + 'id': record.id, + 'name': record.name, + 'employees': employee_list, + 'employee_count': len(record.employee_ids), + }) + + return json.dumps({'data': data_list, 'code': 200, 'message': ''}) + except Exception as e: + _logger.error(f"获取抽签项目列表失败: {e}") + return json.dumps({'data': [], 'code': 500, 'message': str(e)}) + + # 创建抽签结果接口 + @http.route('/phone/lottery/result', type='http', auth="none", csrf=False, cors='*', methods=['POST']) + def lottery_create_result(self, **kw): + """ + 创建抽签结果 + 参数:lottery_id (项目ID), result (结果文本) + """ + + lottery_id = kw.get('lottery_id') + result = kw.get('result') + + if not lottery_id: + return json.dumps({'data': {}, 'code': 400, 'message': '缺少项目ID参数'}) + + if not result: + return json.dumps({'data': {}, 'code': 400, 'message': '缺少结果参数'}) + + try: + lottery_record = request.env['phone.lottery'].sudo().browse(int(lottery_id)) + if not lottery_record.exists(): + return json.dumps({'data': {}, 'code': 404, 'message': '项目不存在'}) + + # 更新结果 + lottery_record.write({'outcome': result}) + + return json.dumps({ + 'data': { + 'id': lottery_record.id, + 'name': lottery_record.name, + 'outcome': lottery_record.outcome, + }, + 'code': 200, + 'message': '结果保存成功' + }) + except Exception as e: + return json.dumps({'data': {}, 'code': 500, 'message': str(e)}) diff --git a/yuthon_base/models/__init__.py b/yuthon_base/models/__init__.py index 38ec55d94..b39548246 100644 --- a/yuthon_base/models/__init__.py +++ b/yuthon_base/models/__init__.py @@ -4,4 +4,5 @@ from . import system_version from . import fields_piyin from . import ir_cron_act from . import yuthon_timed_tasks -# from . import res_partner \ No newline at end of file +from . import yuthon_phone_lottery +from . import res_partner \ No newline at end of file diff --git a/yuthon_base/models/yuthon_phone_lottery.py b/yuthon_base/models/yuthon_phone_lottery.py new file mode 100644 index 000000000..f69325f13 --- /dev/null +++ b/yuthon_base/models/yuthon_phone_lottery.py @@ -0,0 +1,11 @@ +from odoo import models, fields, api, _ + +class PhoneLottery(models.Model): + _name = 'phone.lottery' + _description = '手机抽签配置' + _order = 'sequence, id' + + sequence = fields.Integer(string="序号", default=10) + name = fields.Char(string="项目名称") + employee_ids = fields.Many2many('hr.employee', string='人员范围') + outcome = fields.Text(string="结果") \ No newline at end of file diff --git a/yuthon_base/security/ir.model.access.csv b/yuthon_base/security/ir.model.access.csv index cc8505a56..6489e8400 100644 --- a/yuthon_base/security/ir.model.access.csv +++ b/yuthon_base/security/ir.model.access.csv @@ -2,4 +2,5 @@ id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink access_system_version,system_version,model_system_version,base.group_system,1,1,1,1 access_ir_cron_type,ir.cron.type,model_ir_cron_type,base.group_system,1,1,1,1 access_yuthon_timed_tasks,yuthon.timed.tasks,model_yuthon_timed_tasks,base.group_system,1,1,1,1 -access_users_home_batch_wizard,access_users_home_batch_wizard,model_users_home_batch_wizard,base.group_user,1,1,1,1 \ No newline at end of file +access_users_home_batch_wizard,access_users_home_batch_wizard,model_users_home_batch_wizard,base.group_user,1,1,1,1 +access_phone_lottery,phone.lottery,model_phone_lottery,base.group_user,1,1,1,1 \ No newline at end of file diff --git a/yuthon_base/views/menu.xml b/yuthon_base/views/menu.xml index 1c7da27fb..61740d213 100644 --- a/yuthon_base/views/menu.xml +++ b/yuthon_base/views/menu.xml @@ -28,4 +28,9 @@ parent="cron_type_menu_root" action="base.reports_action" sequence="5"/> + \ No newline at end of file diff --git a/yuthon_base/views/yuthon_phone_lotter.xml b/yuthon_base/views/yuthon_phone_lotter.xml new file mode 100644 index 000000000..602e206bd --- /dev/null +++ b/yuthon_base/views/yuthon_phone_lotter.xml @@ -0,0 +1,21 @@ + + + + yuthon.lottery.tree + phone.lottery + + + + + + + + + + + 手机抽签配置 + phone.lottery + tree + + + \ No newline at end of file