添加功能
This commit is contained in:
@@ -1,7 +1,7 @@
|
||||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<odoo>
|
||||
<record id="room_meeting_setting_sequence0" model="room.meeting.type">
|
||||
<field name="name">党委会</field>
|
||||
<field name="name">党总支</field>
|
||||
</record>
|
||||
<record id="room_meeting_setting_sequence1" model="room.meeting.type">
|
||||
<field name="name">班子会</field>
|
||||
|
||||
@@ -56,6 +56,7 @@ class RoomBooking(models.Model):
|
||||
other_company_id = fields.Many2one('res.partner', string="外部公司")
|
||||
host = fields.Many2one('hr.employee', string="主持人")
|
||||
stationed_group = fields.Boolean(string="派驻组")
|
||||
recorder_ids = fields.Many2many('hr.employee', string='记录员')
|
||||
other_company_user_ids = fields.Many2many('other.meet.employee', string="其他人员")
|
||||
fleet_id = fields.Many2one('fleet.vehicle', string="车辆")
|
||||
meeting_place = fields.Char(string="会议地点")
|
||||
|
||||
@@ -202,7 +202,8 @@
|
||||
</group>
|
||||
<group>
|
||||
<field name="room_users_ids" widget="many2many_tags" domain = "[('company_id', '=', company_id), ('name', '!=', 'Administrator')] if is_this_company else []" options="{'no_create': True}"/>
|
||||
<field name="other_company_user_ids" widget="many2many_tags" readonly="0" options="{'no_create': True}"/>
|
||||
<filed name="recorder_ids" widget="many2many_tags" domain="[('user_role_ids.name', 'ilike', '会议记录员')]"/>
|
||||
<filed name="other_company_user_ids" widget="many2many_tags" readonly="0" options="{'no_create': True}"/>
|
||||
<field name="partner_ids" widget="many2many_tags" force_save="1" invisible="1"/>
|
||||
<field name="is_meeting" invisible="1"/>
|
||||
<field name="is_notice"/>
|
||||
|
||||
@@ -108,7 +108,20 @@ class IssueMeetingLine(models.Model):
|
||||
issue_library_id = fields.Many2one('issue.library', string='议题')
|
||||
issue_library_name = fields.Char(related='issue_library_id.name', string='议题')
|
||||
employee_id = fields.Many2one('hr.employee', string='传达人')
|
||||
attendees = fields.Char(string='列席人员')
|
||||
designated_person_ids = fields.Many2many(
|
||||
'hr.employee',
|
||||
'issue_meeting_line_designated_person_rel'
|
||||
'line_id',
|
||||
'employee_id',
|
||||
string='指定人员'
|
||||
)
|
||||
attendees_ids = fields.Many2many(
|
||||
'hr.employee',
|
||||
'issue_meeting_line_attendees_rel',
|
||||
'line_id',
|
||||
'employee_id',
|
||||
string='列席人员'
|
||||
)
|
||||
is_sanda = fields.Boolean(string="三重一大")
|
||||
decision_results = fields.Selection([('agree', '通过'), ('disagree', '重新上会'), ('rejected', '驳回')], string="决策结果")
|
||||
decision_details = fields.Text(string="决策详情")
|
||||
|
||||
@@ -491,24 +491,94 @@ class IssueLibrary(models.Model):
|
||||
self.write({"issue_state": "cancel"})
|
||||
|
||||
def all_meeting_issue(self):
|
||||
issue_active_ids = self.env["issue.library"].browse(self._context.get('active_ids', self._context.get('active_id')))
|
||||
issue_active_ids = self.env["issue.library"].browse(
|
||||
self._context.get('active_ids', self._context.get('active_id', []))
|
||||
)
|
||||
current_user = self.env.user
|
||||
user_company_name = current_user.company_id.name if current_user.company_id else ""
|
||||
for record in issue_active_ids:
|
||||
if record.issue_state != 'will':
|
||||
raise UserError("当前状态不允许上会")
|
||||
raise UserError(
|
||||
f"事项【{record.name or record.id}】状态为{record.issue_state},非待上会状态,不允许上会!")
|
||||
|
||||
issue_details = []
|
||||
target_meeting_type_id = False
|
||||
meeting_priority = [
|
||||
('is_party', 'is_party_passed', None), # 党总支:动态匹配名称(集团本部=党总支/其他=党支委)
|
||||
('is_class', 'is_class_passed', '班子'), # 班子会:匹配含「班子」的名称
|
||||
('is_boss', 'is_boss_passed', '董事'), # 董事会:匹配含「董事」的名称
|
||||
]
|
||||
def get_all_sub_departments(department):
|
||||
dept_ids = [department.id]
|
||||
sub_depts = self.env['hr.department'].search([('parent_id', '=', department.id)])
|
||||
for sub_dept in sub_depts:
|
||||
dept_ids += get_all_sub_departments(sub_dept)
|
||||
return dept_ids
|
||||
|
||||
all_dept_ids = get_all_sub_departments(self.department_id)
|
||||
target_employees = self.env['hr.employee'].search([
|
||||
('department_id', 'in', all_dept_ids),
|
||||
('active', '=', True)
|
||||
])
|
||||
manager_employee = self.env['hr.employee'].search([
|
||||
('id', 'in', target_employees.ids),
|
||||
('user_role_id.name', '=', '部门经理')
|
||||
], limit=1)
|
||||
for issue in issue_active_ids:
|
||||
issue_details.append((0, 0, {
|
||||
'issue_library_id': issue.id,
|
||||
'employee_id': manager_employee.id,
|
||||
'designated_person_ids': [(6, 0, target_employees.ids)],
|
||||
}))
|
||||
form_id = self.env.ref("room.room_booking_view_form").id
|
||||
if target_meeting_type_id:
|
||||
continue
|
||||
|
||||
# 按「党→班子→董事」优先级匹配
|
||||
for idx, (field_flag, field_passed, keyword) in enumerate(meeting_priority):
|
||||
# 跳过未勾选的会议类型
|
||||
if not getattr(issue, field_flag, False):
|
||||
continue
|
||||
passed_result = getattr(issue, field_passed, '')
|
||||
# 逻辑:空/未通过 → 匹配对应会议类型;已通过 → 继续匹配下一级
|
||||
if passed_result in (False, 'reject'):
|
||||
if idx == 0:
|
||||
if user_company_name == "集团本部":
|
||||
party_meeting_name = "党总支"
|
||||
else:
|
||||
party_meeting_name = "党支委"
|
||||
meeting_type = self.env['room.meeting.type'].search([
|
||||
('name', 'ilike', party_meeting_name)
|
||||
], limit=1)
|
||||
else:
|
||||
meeting_type = self.env['room.meeting.type'].search([
|
||||
('name', 'ilike', keyword)
|
||||
], limit=1)
|
||||
if meeting_type:
|
||||
target_meeting_type_id = meeting_type.id
|
||||
break
|
||||
elif passed_result == 'pass':
|
||||
continue
|
||||
host_role_id = meeting_type.host_id.id
|
||||
host_employee = self.env['hr.employee'].search([
|
||||
('user_role_ids', 'in', host_role_id),
|
||||
], limit=1)
|
||||
room_user_role_ids = meeting_type.room_users_ids.ids
|
||||
room_employees = self.env['hr.employee'].search([
|
||||
('user_role_ids', 'in', room_user_role_ids),
|
||||
])
|
||||
room_user_ids = room_employees.mapped('user_id.id')
|
||||
form_id = self.env.ref("room.room_booking_view_form", raise_if_not_found=False)
|
||||
return {
|
||||
"type": "ir.actions.act_window",
|
||||
"name": "批量上会",
|
||||
"res_model": "room.booking",
|
||||
"views": [[form_id, "form"]],
|
||||
"views": [[form_id.id, "form"]],
|
||||
"context": {
|
||||
'default_is_issue': True,
|
||||
'default_state': '申请人',
|
||||
'default_host': host_employee.id,
|
||||
'default_room_users_ids': [(6, 0, room_user_ids)],
|
||||
'default_meeting_type_id': target_meeting_type_id,
|
||||
'default_start_datetime': fields.Datetime.now() + timedelta(hours=8),
|
||||
'default_issue_meeting_line_ids': issue_details,
|
||||
}
|
||||
|
||||
@@ -24,8 +24,9 @@
|
||||
<tree editable="bottom">
|
||||
<field name="meeting_booking_id" column_invisible="1"/>
|
||||
<field name="issue_library_id"/>
|
||||
<field name="employee_id" options="{'no_create': True}"/>
|
||||
<field name="attendees"/>
|
||||
<field name="employee_id" options="{'no_create': True}" domain="[('id', 'in', designated_person_ids)]"/>
|
||||
<field name="attendees_ids" widget="many2many_tags" domain="[('id', 'in', designated_person_ids)]"/>
|
||||
<field name="designated_person_ids" widget="many2many_tags" column_invisible="1"/>
|
||||
<field name="is_sanda"/>
|
||||
<field name="decision_results"/>
|
||||
<field name="decision_details"/>
|
||||
|
||||
Reference in New Issue
Block a user