Files
gzth/yuthon_will_task/controllers/main.py
T

282 lines
12 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
import base64
import json
from odoo import http, fields
from odoo.http import request
from urllib.parse import quote
class YuthonWillTask(http.Controller):
@http.route('/yuthon/yuthon/will/task', methods=['POST'], type='http', auth='none', csrf=False)
def index2(self, **kwargs):
id = kwargs.get('id')
data = request.env['yuthon.will.task'].sudo().search(domain = [("id", "=", int(id))])
request.env['yuthon.will.task'].create({
'fields':kwargs.get('id'),
})
file_list = []
pdf = ['application/pdf']
for file in data.documents_ids:
base_url = request.env['ir.config_parameter'].sudo().get_param('web.base.url')
file_url = f"http://view.officeapps.live.com/op/view.aspx?src=https://oa.thtzjt.com/web/content/office_preview/{file.id}"
if file.mimetype in pdf:
file_url = f"{base_url}/web/content/preview/{file.id}"
file_list.append({
'file_url': file_url,
'file_name': file.name,
})
employee_ids = []
for em in data.employee_ids:
employee_ids.append({
'id':em.id,
'name':em.name,
'image_1920':em.image_128.decode('utf-8') if em.image_128 else '',
})
result = {
'id':data.id,
'name':data.name,
'code':data.code,
'start_date':fields.Date.to_string(data.start_date),
'request_hour_from':data.request_hour_from,
'request_hour_to':data.request_hour_to,
'priority':data.priority,
'user_id':data.user_id.name,
'user_avatar':base64.b64decode(data.user_id.avatar_128).decode('utf-8') if data.user_id.avatar_128 else '',
'remarks':data.remarks,
'address':data.address,
'employee_ids':employee_ids,
'file_list': file_list,
}
# 转换 request_hour_from 和 request_hour_to 取模型 yuthon.will.task 的 request_hour_from 的selection
request_hour_from_selection = request.env['yuthon.will.task'].sudo().fields_get(allfields=['request_hour_from'])['request_hour_from']['selection']
request_hour_to_selection = request.env['yuthon.will.task'].sudo().fields_get(allfields=['request_hour_to'])['request_hour_to']['selection']
for f in request_hour_from_selection:
if f[0] == data.request_hour_from:
result['request_hour_from'] = f[1]
for f in request_hour_to_selection:
if f[0] == data.request_hour_to:
result['request_hour_to'] = f[1]
# 计算 start_date 星期几
result['start_date_week'] = fields.Date.from_string(result['start_date']).strftime('%A')
return json.dumps({
'data':result,
'code':200,
'message':'success'
})
@http.route('/will/task/list', methods=['POST'], type='http', auth='public', csrf=False)
def will_task_list(self, **kwargs):
start = kwargs.get('start')
request_hour_selection = request.env['yuthon.will.task'].sudo().fields_get(allfields=['request_hour_from'])['request_hour_from']['selection']
result_list = []
task_ids = request.env['yuthon.will.task'].sudo().search([('users_ids', 'in', [int(kwargs.get('users_id'))])], offset=start, limit=20)
for task in task_ids:
weekday_str = ["周一", "周二", "周三", "周四", "周五", "周六", "周日"][task.start_date.weekday()]
result = {
'id': task.id,
'name': task.name,
'employee_id': task.employee_id.name,
'employee_ids': ', '.join(task.employee_ids.mapped('name')),
'employee_num': len(task.employee_ids),
'start_date': fields.Date.to_string(task.start_date),
'weekday': weekday_str,
'request_hour_from': '',
'request_hour_to': '',
}
hour_dict = dict(request_hour_selection)
result['request_hour_from'] = hour_dict.get(task.request_hour_from)
result['request_hour_to'] = hour_dict.get(task.request_hour_to)
result_list.append(result)
return json.dumps({
'data': result_list,
'code': 200,
'message': 'success'
})
@http.route('/will/task/record', methods=['POST'], type='http', auth='public', csrf=False)
def will_task_record(self, **kwargs):
task_id = kwargs.get('id')
task = request.env['yuthon.will.task'].sudo().search([('id', '=', task_id)])
request_hour_selection = request.env['yuthon.will.task'].sudo().fields_get(allfields=['request_hour_from'])['request_hour_from']['selection']
file_list = []
pdf = ['application/pdf']
for file in task.document_ids:
base_url = request.env['ir.config_parameter'].sudo().get_param('web.base.url')
file_url = f"http://view.officeapps.live.com/op/view.aspx?src=https://oa.thtzjt.com/web/content/office_preview/{file.id}"
if file.mimetype in pdf:
file_url = f"{base_url}/web/content/preview/{file.id}"
file_list.append({
'file_url': file_url,
'file_name': file.name,
})
weekday_str = ["周一", "周二", "周三", "周四", "周五", "周六", "周日"][task.start_date.weekday()]
result = {
'id': task.id,
'name': task.name,
'employee_id': task.employee_id.name,
'employee_ids': ','.join(task.employee_ids.mapped('name')),
'employee_ids2': ','.join(task.employee_ids2.mapped('name')),
'task_time_ids': ','.join(task.task_time_ids.mapped('name')),
'drivers': task.employee_ids2.read(['name']),
'employee': task.employee_ids.read(['name']),
'task_time': task.task_time_ids.read(['name']),
'employee_num': len(task.employee_ids),
'start_date': fields.Date.to_string(task.start_date),
'weekday': weekday_str,
'request_hour_from': task.request_hour_from,
'request_hour_to': task.request_hour_to,
'remarks': task.remarks,
'address': task.address,
'file_list': file_list,
'priority': task.priority,
}
hour_dict = dict(request_hour_selection)
result['request_hour_from'] = hour_dict.get(task.request_hour_from)
result['request_hour_to'] = hour_dict.get(task.request_hour_to)
return json.dumps({
'data': result,
'code': 200,
'message': 'success'
})
@http.route('/will/task/create', methods=['POST'], type='http', auth='public', csrf=False)
def will_task_create(self, **kwargs):
"""
手机端创建日程接口
"""
request.env['yuthon.will.task'].sudo().create({
'name': kwargs.get('name'),
'employee_id': kwargs.get('id'),
'employee_ids': kwargs.get('id'),
'start_date': kwargs.get('id'),
'request_hour_from': '',
'request_hour_to': '',
'remarks': kwargs.get('remarks'),
'address': kwargs.get('address'),
})
return json.dumps({
'code': 200,
'message': '数据创建成功'
})
@http.route('/phone/employee/self', type='http', auth="none", csrf=False, cors='*')
def phone_employee_self(self, **kw):
"""
relation: 'ilike'
"""
value = kw.get('value', False)
domain = []
if value:
domain.append(('name', 'ilike', value))
# users_id = int(kw.get('users_id'))
# user = request.env['res.users'].sudo().browse(int(users_id))
# employee_id = user.with_company(user.company_id.id).employee_id.id
records = request.env['hr.employee'].sudo().search(domain, limit=15)
data = records.read(['name'])
return json.dumps({'data': data, 'code': 200, 'message': ''})
@http.route('/phone/employee/driver', type='http', auth="none", csrf=False, cors='*')
def phone_employee_driver(self, **kw):
"""
relation: 'ilike', '=', '!='
"""
feild = kw.get('feild', False)
relation = kw.get('relation', False)
value = kw.get('value', False)
domain = []
if feild and value and relation:
domain.append((feild, relation, value))
# users_id = int(kw.get('users_id'))
# user = request.env['res.users'].sudo().browse(int(users_id))
# employee_id = user.with_company(user.company_id.id).employee_id.id
records = request.env['hr.employee'].sudo().search(domain, limit=15)
data = records.read(['name'])
return json.dumps({'data': data, 'code': 200, 'message': ''})
@http.route('/phone/task/time', type='http', auth="none", csrf=False, cors='*')
def phone_task_time(self, **kw):
"""
relation: 'ilike'
"""
value = kw.get('value', False)
domain = []
if value:
domain.append(('name', 'ilike', value))
# users_id = int(kw.get('users_id'))
# user = request.env['res.users'].sudo().browse(int(users_id))
# employee_id = user.with_company(user.company_id.id).employee_id.id
records = request.env['yuthon.task.time'].sudo().search(domain, limit=15)
data = records.read(['name'])
return json.dumps({'data': data, 'code': 200, 'message': ''})
@http.route('/phone/task/create', type='http', auth="none", csrf=False, cors='*')
def phone_task_create(self, **kw):
"""
record_id : 记录id(根据这个判断是否创建还是更新,创建的时候不传,更新的时候传)
request_hour_from:开始时间
request_hour_to: 结束时间
priority: 优先级
name: 任务内容
remarks: 备注
employee_ids: 关联员工
employee_ids2: 关联司机
task_time_ids: 提醒
address: 地址
start_date: 任务日期
"""
employee_ids = kw.get('employee_ids', [])
employee_ids2 = kw.get('employee_ids2', [])
task_time_ids = kw.get('task_time_ids', [])
if not isinstance(task_time_ids, list):
return json.dumps({'data': '', 'code': 201, 'message': '提醒参数错误'})
if not isinstance(employee_ids2, list):
return json.dumps({'data': '', 'code': 201, 'message': '司机参数错误'})
if not isinstance(employee_ids, list):
return json.dumps({'data': '', 'code': 201, 'message': '关联员工参数错误'})
data = {
'request_hour_from': kw.get('request_hour_from', False),
'request_hour_to': kw.get('request_hour_to', False),
'priority': kw.get('priority', False),
'name': kw.get('name', False),
'remarks': kw.get('remarks', False),
'employee_ids': [(6, 0, employee_ids)],
'employee_ids2': [(6, 0, employee_ids2)],
'task_time_ids': [(6, 0, task_time_ids)],
'address': kw.get('address', False),
'start_date': kw.get('start_date', False)
}
record_id = kw.get('record_id', False)
if record_id:
# 获取要更新的日程
record = request.env['yuthon.will.task'].sudo().browse(int(record_id))
record.sudo().write(data)
else:
#创建日程
users_id = int(kw.get('users_id'))
user = request.env['res.users'].sudo().browse(int(users_id))
request.env.user = user
record = request.env['yuthon.will.task'].sudo().create(data)
# users_id = int(kw.get('users_id'))
# user = request.env['res.users'].sudo().browse(int(users_id))
# employee_id = user.with_company(user.company_id.id).employee_id.id
return json.dumps({'data': record.id, 'code': 200, 'message': ''})
@http.route('/phone/task/unlink', type='http', auth="none", csrf=False, cors='*')
def phone_task_unlink(self, **kw):
record_id = kw.get('record_id', False)
if record_id:
# 获取要更新的日程
record = request.env['yuthon.will.task'].sudo().browse(int(record_id))
record.sudo().unlink()
else:
return json.dumps({'data': '', 'code': 201, 'message': '记录不存在'})
return json.dumps({'data': 'success', 'code': 200, 'message': ''})