99 lines
4.8 KiB
Python
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="概述") |