80 lines
3.0 KiB
Python
80 lines
3.0 KiB
Python
# -*- coding: utf-8 -*-
|
|
from odoo import api, fields, models, _
|
|
from datetime import datetime
|
|
import pytz
|
|
|
|
|
|
class SoongNote(models.Model):
|
|
_name = 'soong.note'
|
|
|
|
name = fields.Char(string="审批意见")
|
|
sequence = fields.Char(string='序号', store=True)
|
|
note_setting_id = fields.Many2one('soong.note.setting', string="意见类型")
|
|
create_note = fields.Text(string="创建信息", readonly=True)
|
|
write_note = fields.Text(string="修改信息", readonly=True)
|
|
use_info = fields.Text(string="使用信息", readonly=True)
|
|
use_count = fields.Integer(string="使用次数", default=0, readonly=True)
|
|
|
|
def _get_tz_now(self):
|
|
"""返回东八区当前时间字符串"""
|
|
tz = pytz.timezone('Asia/Shanghai')
|
|
return datetime.now(pytz.utc).astimezone(tz).strftime('%Y-%m-%d %H:%M:%S')
|
|
|
|
@api.model_create_multi
|
|
def create(self, vals_list):
|
|
now = self._get_tz_now()
|
|
user_name = self.env.user.name
|
|
for vals in vals_list:
|
|
note_name = vals.get('name', '')
|
|
line = f"{user_name} {now} {note_name}"
|
|
vals['create_note'] = line
|
|
vals['write_note'] = line
|
|
vals['use_count'] = 1
|
|
return super().create(vals_list)
|
|
|
|
def write(self, vals):
|
|
now = self._get_tz_now()
|
|
user_name = self.env.user.name
|
|
_TRACK_FIELDS = {'create_note', 'write_note', 'use_info'}
|
|
for rec in self:
|
|
vals_copy = dict(vals)
|
|
# 有信息字段变化时追加 write_note 并计数
|
|
if 'name' in vals or not (_TRACK_FIELDS & set(vals)):
|
|
note_name = vals.get('name', rec.name or '')
|
|
line = f"{user_name} {now} {note_name}"
|
|
old = rec.write_note or ''
|
|
vals_copy['write_note'] = (old + '\n' + line) if old else line
|
|
# 统计本次写入中有多少跟踪字段发生变化
|
|
changed = len(_TRACK_FIELDS & set(vals_copy))
|
|
if changed > 0:
|
|
vals_copy['use_count'] = (rec.use_count or 0) + changed
|
|
super(SoongNote, rec).write(vals_copy)
|
|
return True
|
|
|
|
def action_open_form(self):
|
|
"""详情按钮:以 target=new 方式打开 form"""
|
|
self.ensure_one()
|
|
return {
|
|
'type': 'ir.actions.act_window',
|
|
'name': '审批意见详情',
|
|
'res_model': 'soong.note',
|
|
'res_id': self.id,
|
|
'view_mode': 'form',
|
|
'target': 'new',
|
|
}
|
|
|
|
def action_reset(self):
|
|
"""重置按钮:清空使用次数、创建信息、修改信息、使用信息"""
|
|
for rec in self:
|
|
super(SoongNote, rec).write({
|
|
'use_count': 0,
|
|
'create_note': False,
|
|
'write_note': False,
|
|
'use_info': False,
|
|
})
|
|
return True
|
|
|
|
# type = fields.Selection([('agree', '同意'), ('return', '退回'), ('refuse', '拒绝'), ('super', '督办')],
|
|
# string="意见类型")
|
|
# return_type = fields.Char(string="退回类型")
|