Files
test/sf_wxwork_approval/models/wxwork_settings.py
2023-11-20 13:23:37 +08:00

420 lines
24 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.

# -*- coding: utf-8 -*-
import json
from odoo import api, fields, models
from odoo.addons.sf_wxwork_approval.models import wx_work_api
class WxSettings(models.Model):
_name = 'wxwork.settings'
_description = '企业微信设置'
wx_work_app = fields.Char(string='企业微信应用名称')
wx_work_corp_id = fields.Char(string='企业微信CorpID')
wx_work_secret = fields.Char(string='企业微信Secret')
wx_work_template_ids = fields.Many2many('wxwork.template.settings', string='审批模板')
def update_template(self):
template_dict = {}
template_list = []
print(self.wx_work_template_ids)
for template in self.wx_work_template_ids:
# template_dict[template.sp_name] = template.template_id
template_list.append(template.template_id)
# template_dict = {}
# print(template_list)
wx = wx_work_api.WxWorkAPI(self.wx_work_corp_id, self.wx_work_secret)
# print(wx)
# 获取模型中的所有记录
all_records = self.env['wxwork.approval.template'].search([])
all_records1 = self.env['wxwork.approval.template.controls'].search([])
# 删除所有记录
all_records.unlink()
all_records1.unlink()
content_data_list = []
template_data = {}
controls_data = []
for template in template_list:
print('====================')
temp_dict = {'template_id': template}
# print(json.dumps(temp_dict))
# aa = json.dumps(temp_dict)
template_detail = wx.get_template_detail(temp_dict)
print('template_detail%s' % template_detail)
#
# # 准备用于创建记录的字段值
# values = {
# 'process_code': template,
# 'name': template_detail['template_names'][0]['text'],
# # 如果需要设置content_ids请按照正确格式添加关联数据
# }
# # 使用create方法创建记录
# new_record = self.env['wxwork.approval.template'].create(values)
# 解析template_detail中的内容数据
# print('jjjjjjjj', template_detail['template_content'])
# print('jjjjjjjjjj', template_detail['template_content']['controls'])
for control_data in template_detail['template_content']['controls']:
# print('control_data', control_data)
property_data = control_data['property']
# print('property_data', property_data)
config_values = {}
if 'config' in control_data:
config_data = control_data['config']
print('config_data', config_data)
# 先提取table_children数据
table_children_data = config_data.get('table', {}).get('children', [])
# 创建一个空列表用于存储table_children记录
table_children_records = []
# 遍历table_children_data并为每个子控件创建记录
for child_data in table_children_data:
print('child_data====================', child_data)
# 提取property相关数据
child_property_data = {
# 'control_type': child_data.get('property', {}).get('control', None),
# 'unique_control_id': child_data.get('property', {}).get('id', None),
# 'title': child_data.get('property', {}).get('title', [{}])[0].get('text', None),
# 'placeholder': child_data.get('property', {}).get('placeholder', [{}])[0].
# get('text', None),
# 'require': child_data.get('property', {}).get('require', None),
# 'un_print': child_data.get('property', {}).get('un_print', None),
# 'un_replace': child_data.get('property', {}).get('un_replace', None),
# 'display': child_data.get('property', {}).get('display', None),
'control_type': child_data.get('property', {}).get('control', None),
'unique_control_id': child_data.get('property', {}).get('id', None),
'title': child_data.get('property', {}).get('title', [{}])[0].get('text', None),
'placeholder': child_data.get('property', {}).get('placeholder', [{}])[0].get('text', None),
'require': child_data.get('property', {}).get('require', None),
'un_print': child_data.get('property', {}).get('un_print', None),
'un_replace': child_data.get('property', {}).get('un_replace', None),
'display': child_data.get('property', {}).get('display', None),
}
# 在这里根据控件类型为每个子控件创建相应的config_id数据
# 例如:
config_id_data = {
'date_type': [(0, 0, {'date_type': child_data.get('config', {}).get('date', {}).get('type',
None)})]
if 'date' in child_data.get(
'config', {}) else [],
'selector_type': [(0, 0, {
'selector_type': 'single',
'options': [(0, 0, {'key': 'opt1', 'text': '选项1'})],
})] if 'selector' in child_data.get('config', {}) else [],
'contact_type': [
(0, 0, {'contact_type': config_data.get('contact', {}).get('type', None),
'contact_mode': config_data.get('contact', {}).get('mode',
None)})] if 'contact' in
child_data.get(
'config', {}).get('contact', {}) else [],
'file_type': [
(0, 0, {'is_only_photo': config_data.get('file', {}).get('is_only_photo',
None)})] if 'file' in
child_data.get(
'config', {}).get('file', {}) else [],
}
# 将config_id_data添加到property_data中如果有的话
if config_id_data:
child_property_data['child_control_id'] = config_id_data
# 将property_data添加到table_children_records中
table_children_records.append((0, 0, child_property_data))
# 创建一个包含多个wxwork.approval.template.controls的字典列表
controls_data = [
(0, 0, {
'property_id': [(0, 0, {
'control_type': property_data.get('control', ''),
'unique_control_id': property_data.get('id', ''),
'title': property_data['title'][0]['text'] if 'title' in property_data else '',
'placeholder': property_data['placeholder'][0][
'text'] if 'placeholder' in property_data else '',
'require': property_data.get('require', None),
'un_print': property_data.get('un_print', None),
'un_replace': property_data.get('un_replace', None),
'display': property_data.get('display', None),
})],
'config_id': [(0, 0, {
'date_type': [(0, 0, {'date_type':
config_data.get('date', {}).get(
'type', None)})] if 'date' in config_data else [],
'selector_type': [
(0, 0, {
'selector_type': child.get('config', {}).get('selector', {}).get('type', None),
'options': [
(0, 0, {'key': option['key'], 'text': option['value'][0]['text']})
for option in child.get('config', {}).get('selector', {}).get('options', [])
],
})
for child in config_data.get('table', {}).get('children', [])
if 'selector' in child.get('config', {})
],
'contact_type': [
(0, 0, {'contact_type': config_data.get('contact', {}).get('type', None),
'contact_mode': config_data.get('contact', {}).get('mode',
None)})]
if 'contact' in config_data else [],
'file_type': [
(0, 0, {'is_only_photo': config_data.get('file', {}).get('is_only_photo',
None)})]
if 'file' in config_data else [],
'table_type': [(0, 0, {
'table_children': table_children_records,
})] if 'table' in config_data else [],
# 'contact_type': [
# (0, 0, {'contact_type': config_data.get('contact', {}).get('type', None)})],
# 'contact_mode': [
# (0, 0, {'contact_mode': config_data.get('contact', {}).get('mode', None)})],
# 'table_type': [(0, 0, {
# 'table_children': [
# (0, 0,
# {'control_type': 'Text', 'unique_control_id': 'text_2', 'title': '文本框2'})],
# })],
# # [
# # (0, 0, {'control_type': config_data.get('table', {}).get('children', {})[0].
# # get('property', {}).get('control', None), 'unique_control_id': 'text_2',
# # 'title': '文本框2'})]
'attendance_type': [(0, 0, {'attendance_type': '1',
'attendance_date_range_type': 'hour'})]
if 'attendance' in config_data else [],
})],
}),
# 在这里添加更多的控件数据
]
else:
# 创建一个包含多个wxwork.approval.template.controls的字典列表
controls_data = [
(0, 0, {
'property_id': [(0, 0, {
'control_type': property_data.get('control', ''),
'unique_control_id': property_data.get('id', ''),
'title': property_data['title'][0]['text'] if 'title' in property_data else '',
'placeholder': property_data['placeholder'][0][
'text'] if 'placeholder' in property_data else '',
'require': property_data.get('require', None),
'un_print': property_data.get('un_print', None),
'un_replace': property_data.get('un_replace', None),
'display': property_data.get('display', None),
})],
}),
# 在这里添加更多的控件数据
]
# 从vacation_list中提取假期类型数据
vacation_items = []
vacation_items_data = template_detail.get('vacation_list', [])
# 将假期类型数据转换为适用于vacation_items字段的格式
if vacation_items_data and 'item' in vacation_items_data:
items = []
for item in vacation_items_data['item']:
id = item.get('id')
name = item.get('name')[0].get('text')
items.append({'id': id, 'name': name})
print(items)
# if vacation_items_data:
# print('vacation_items_data', vacation_items_data)
# print('vacation_items_data', type(vacation_items_data))
# print('vacation_items_data', vacation_items_data['items'])
# print('vacation_items_data', vacation_items_data[0])
vacation_items = [(0, 0, {
'vacation_id': item['id'],
'name': item['name'],
'lang': 'zh_CN',
}) for item in items]
# 创建一个包含WxWorkApprovalTemplate和关联记录数据的字典
template_data = {
'process_code': template,
'name': template_detail['template_names'][0]['text'],
'content_ids': controls_data,
# 'vacation_config_id': [(0, 0, {
# # 在这里添加wxwork.approval.vacation.config模型的字段数据
# 'vacation_id': template_detail.get('vacation_id', None),
# 'name': template_detail.get('vacation_name', None),
# 'lang': template_detail.get('vacation_lang', None),
# # ...
# })],
'vacation_config_id': vacation_items
}
# 检查数据库中是否已经存在具有相同process_code的模板
existing_template = self.env['wxwork.approval.template'].search(
[('process_code', '=', template)], limit=1)
if existing_template:
# 如果模板已经存在更新其content_ids字段即添加控件记录
existing_template.write({'content_ids': controls_data})
else:
# 如果模板不存在,创建一个新的模板及其关联记录
# 调用create方法创建记录
template_record = self.env['wxwork.approval.template'].create(template_data)
# # print(property_data)
# # 准备用于创建记录的字段值
# property_values = {
# 'control_type': property_data.get('control', ''),
# 'unique_control_id': property_data.get('id', ''),
# 'title': property_data['title'][0]['text'] if 'title' in property_data else '',
# 'placeholder': property_data['placeholder'][0]['text'] if 'placeholder' in property_data else '',
# 'require': property_data.get('require', None),
# 'un_print': property_data.get('un_print', None),
# 'un_replace': property_data.get('un_replace', None),
# 'display': property_data.get('display', None),
# # 'un_replace': template_detail['template_names'][0]['text'],
# # 如果需要设置content_ids请按照正确格式添加关联数据
# }
# # print('property_values', property_values)
# # config_data = None
#
# if 'config' in control_data:
#
# config_data = control_data['config']
# # print('config_data===', config_data)
# if '"date":' in config_data:
# # config_values = {
# # 'date_type': config_data.get('type', ''),
# # }
# config_values['date_type'] = config_data.get('type', '')
# if '"selector":' in config_data:
# # config_values = {
# # 'selector_type': config_data.get('type', ''),
# # # 'options': config_data['title'][0]['text'] if 'title' in property_data else '',
# # }
# config_values['selector_type'] = config_data.get('type', '')
# if '"contact":' in config_data:
# # config_values = {
# # 'contact_type': config_data.get('type', ''),
# # 'contact_mode': config_data.get('mode', ''),
# #
# # }
# config_values['contact_type'] = config_data.get('type', '')
# config_values['contact_mode'] = config_data.get('mode', '')
# if '"table":' in config_data:
# pass
# # config_values = {
# # 'table_children': config_data.get('un_print', None),
# # }
# if '"attendance":' in config_data:
# pass
# # config_values = {
# # 'attendance_type': config_data.get('un_replace', None),
# # 'attendance_date_range_type': config_data.get('display', None),
# # # 如果需要设置content_ids请按照正确格式添加关联数据
# # }
# if '"vacation_list":' in config_data:
# pass
# # config_values = {
# # 'vacation_list': config_data['template_names'][0]['text'],
# # # 如果需要设置content_ids请按照正确格式添加关联数据
# # }
#
# content_data_list.append((0, 0, {
# 'property_id': [(0, 0, property_values)],
# 'config_id': [(0, 0, config_values)],
# }))
# else:
# content_data_list.append((0, 0, {
# 'property_id': [(0, 0, property_values)],
# # 'config_id': [(0, 0, config_values)],
# }))
# # 准备用于创建记录的字段值
# property_values = {
# 'control_type': property_data.get('control', ''),
# 'unique_control_id': property_data.get('id', ''),
# 'title': property_data['title'][0]['text'] if 'title' in property_data else '',
# 'placeholder': property_data['placeholder'][0]['text'] if 'placeholder' in property_data else '',
# 'require': property_data.get('require', None),
# 'un_print': property_data.get('un_print', None),
# 'un_replace': property_data.get('un_replace', None),
# 'display': property_data.get('display', None),
# }
#
# if 'config' in control_data:
# config_data = control_data['config']
#
# # 根据config_data为config.model的One2many字段如options和table_children构建命令列表
# option_vals = [
# (0, 0, {'key': 'option_key_1', 'text': 'option_text_1', 'lang': 'zh_CN'}),
# (0, 0, {'key': 'option_key_2', 'text': 'option_text_2', 'lang': 'zh_CN'})
# ]
# vacation_vals = [{'key': 'vacation_key_1', 'text': 'vacation_text_1', 'lang': 'zh_CN'},
# {'key': 'vacation_key_2', 'text': 'vacation_text_2', 'lang': 'zh_CN'}]
# table_children_vals = [
# (0, 0, {
# 'control_type': 'Text',
# 'unique_control_id': 'control_id_1',
# 'title': '控件名称1',
# 'placeholder': '控件说明1',
# 'require': True
# }),
# (0, 0, {
# 'control_type': 'Number',
# 'unique_control_id': 'control_id_2',
# 'title': '控件名称2',
# 'placeholder': '控件说明2',
# 'require': False
# })
# ]
#
# # property_vals = [
# # (0, 0, {
# # 'control_type': 'Text',
# # 'unique_control_id': 'control_id_1',
# # 'title': '控件名称1',
# # 'placeholder': '控件说明1',
# # 'require': True
# # }),
# # (0, 0, {
# # 'control_type': 'Number',
# # 'unique_control_id': 'control_id_2',
# # 'title': '控件名称2',
# # 'placeholder': '控件说明2',
# # 'require': False
# # })
# # ]
#
# config_values = {
# 'date_type': config_data.get('type', '') if '"date":' in config_data else '',
# 'selector_type': config_data.get('type', '') if '"selector":' in config_data else '',
# 'contact_type': config_data.get('type', '') if '"contact":' in config_data else '',
# 'contact_mode': config_data.get('mode', '') if '"contact":' in config_data else '',
# 'options': option_vals if '"selector":' in config_data else [(6, 0, [])], # 使用示例中的option_vals
# 'table_children': table_children_vals if '"table":' in config_data else [(6, 0, [])],
# # 使用示例中的property_vals
# 'vacation_list': vacation_vals if '"vacation_list":' in config_data else [] # 添加vacation_vals
# }
#
# content_data_list.append((0, 0, {
# 'property_id': [(0, 0, property_values)],
# 'config_id': [(0, 0, config_values)] if 'config' in control_data else [(6, 0, [])],
# }))
#
# # 准备用于创建记录的字段值包括content_ids数据
# values = {
# 'process_code': template,
# 'name': template_detail['template_names'][0]['text'],
# 'content_ids': content_data_list,
# }
#
# # 使用create方法创建记录
# new_record = self.env['wxwork.approval.template'].create(values)
class WxTemplateSettings(models.Model):
_name = 'wxwork.template.settings'
_description = '企业微信模板设置'
sp_name = fields.Char(string='审批模板名称')
template_id = fields.Char(string='审批模板ID')
# wxwork_id = fields.Many2one('wxwork.settings', string='企业微信')