Files
gzth/yuthon_issue/models/issue_meeting_minutes.py
T
2026-01-13 19:48:58 +08:00

99 lines
4.8 KiB
Python

# -*- coding: utf-8 -*-
from odoo import api, fields, models, tools
from odoo.exceptions import UserError, ValidationError
from datetime import datetime, timedelta, date
class IssueMeetingMinutes(models.Model):
_name = 'issue.meeting.minutes'
_description = '会议纪要'
_inherit = ['soong.workflow.mixin', 'mail.thread.main.attachment', 'mail.activity.mixin']
number_of_meetings = fields.Integer(string='会议次数')
name = fields.Char(related='meeting_id.name',string='会议名称')
meeting_id = fields.Many2one('room.booking', string='会议名称')
meeting_type_id = fields.Many2one('room.meeting.type', string="会议类型")
users_id = fields.Many2one('res.users', string="申请人", default=lambda self: self.env.user.id)
department_id = fields.Many2one(related='users_id.employee_ids.department_id', string="部门")
company_id = fields.Many2one(related='users_id.employee_ids.company_id', string="公司")
meeting_date = fields.Datetime(string="会议时间")
user_id = fields.Many2one('res.users', string="记录人")
room_users_ids = fields.Many2many('res.users', string="出席人员")
host = fields.Many2one('hr.employee', string="主持人")
room_id = fields.Many2one('room.room', string="会议地点")
code = fields.Char(string='编号', required=True, copy=False,
default=lambda self: self.env['ir.sequence'].next_by_code('issue_meeting_minutes_code'))
meeting_minutes_ids = fields.One2many('issue.meeting.minutes.line', 'meeting_minutes_id', string="会议纪要明细")
documents_ids = fields.Many2many('ir.attachment', string="纪要签名附件")
work_end = fields.Boolean(string="结束")
meeting_resolution = fields.Text(string="会议决议")
active = fields.Boolean('Active', default=True, tracking=True)
urgency_level = fields.Selection([('normal', '普件'), ('urgent', '急件'), ('emergency', '特急件')], string='紧急度',
default='normal')
def _get_default_name_title(self):
return self._description if self._description else self._name
name_title = fields.Char(default=_get_default_name_title)
@api.depends('number_of_meetings', 'meeting_type_id', 'meeting_date')
def _compute_name(self):
if self.number_of_meetings and self.meeting_type_id and self.meeting_date:
self.name = self.number_of_meetings + ' ' + ' ' + self.meeting_type_id.name + ' ' + self.meeting_date
else:
self.name = ''
@api.depends('meeting_id.name')
def _compute_meeting_display_name(self):
for record in self:
if record.meeting_id:
record.meeting_display_name = record.meeting_id.name
else:
record.meeting_display_name = False
@api.constrains('meeting_id')
def _check_meeting_id(self):
for record in self:
if record.meeting_id:
record.meeting_id.minutes_id = self.id
@api.constrains('number_of_meetings', 'meeting_type_id', 'meeting_date')
def _constrains_create_room_booking(self):
for record in self:
if not (record.number_of_meetings and record.meeting_type_id and record.meeting_date):
continue
if record.meeting_id:
continue
booking_vals = {
'name': f"{record.meeting_date}第{record.number_of_meetings}次会议{record.meeting_type_id.name}",
'meeting_type_id': record.meeting_type_id.id,
'start_datetime': record.meeting_date + timedelta(hours=8),
'stop_datetime': record.meeting_date + timedelta(hours=9),
'organizer_id': record.users_id.id,
'number_of_meetings': record.number_of_meetings,
'room_id': record.room_id.id,
'host': record.host.id if record.host else False,
'room_users_ids': [(6, 0, record.room_users_ids.ids)] if record.room_users_ids else False,
}
booking_record = self.env['room.booking'].create(booking_vals)
record.meeting_id = booking_record.id
booking_record.minutes_id = record.id
def open_record(self):
return {
"type": "ir.actions.act_window",
"res_model": 'room.booking',
"res_id": self.meeting_id.id,
"name": '会议详情',
"view_mode": "form",
}
class IssueMeetingMinutesLine(models.Model):
_name = 'issue.meeting.minutes.line'
_description = '会议纪要明细行'
meeting_minutes_id = fields.Many2one('issue.meeting.minutes', string="关联会议纪要")
minutes_id = fields.Many2one('issue.library',string='事项名称', required=True)
decision_results = fields.Selection([('agree', '通过'), ('disagree', '未通过')], string="审议情况")
overview = fields.Text(string="概述")