添加功能

This commit is contained in:
李鹏宇
2026-01-05 20:32:26 +08:00
parent fad439565f
commit 0c11940e58
14 changed files with 200 additions and 66 deletions
+56 -19
View File
@@ -11,16 +11,17 @@ class RoomBooking(models.Model):
number_of_meetings = fields.Integer(string='会议次数')
minutes_id = fields.Many2one('issue.meeting.minutes', string='会议纪要流程')
@api.constrains('start_datetime')
def _check_start_datetime(self):
def end_approval(self):
self.write({'work_end': True})
for meet in self.issue_meeting_line_ids:
if meet.issue_library_id:
if meet.issue_library_id.is_party == True:
meet.issue_library_id.party_date = self.start_datetime + timedelta(hours=8)
if meet.issue_library_id.is_class == True:
meet.issue_library_id.class_date = self.start_datetime + timedelta(hours=8)
if meet.issue_library_id.is_boss == True:
meet.issue_library_id.boss_date = self.start_datetime + timedelta(hours=8)
meeting_type_name = str(self.meeting_type_id.name).strip()
if '党' in meeting_type_name:
meet.issue_library_id.party_char = str(self.start_datetime.date()) + self.meeting_type_id.name
if '班子' in meeting_type_name:
meet.issue_library_id.class_char = str(self.start_datetime.date()) + f'第{self.number_of_meetings}' + self.meeting_type_id.name
if '董事' in meeting_type_name:
meet.issue_library_id.boss_char = str(self.start_datetime.date()) + self.meeting_type_id.name
def bottom_meeting_approval(self):
@@ -51,17 +52,27 @@ class RoomBooking(models.Model):
@api.model_create_multi
def create(self, vals_list):
# 步骤1:先调用父类create方法,批量创建主记录,获取有效记录集
res = super().create(vals_list)
for vals in vals_list:
if vals['issue_meeting_line_ids']:
for line in vals['issue_meeting_line_ids']:
self.env['issue.library.room.line'].create({
'issue_library_id': line[2]['issue_library_id'],
'room_booking_id': res.id,
'room_id': vals['room_id'],
'meeting_type_id': vals['meeting_type_id'],
'approval_date': vals['start_datetime'],
})
if not res:
return res
for idx, (main_record, vals) in enumerate(zip(res, vals_list)):
issue_meeting_lines = vals.get('issue_meeting_line_ids', [])
for line_triple in issue_meeting_lines:
line_state, line_id, line_vals = line_triple
issue_library_id = line_vals.get('issue_library_id')
room_id = vals.get('room_id')
meeting_type_id = vals.get('meeting_type_id')
approval_date = vals.get('start_datetime')
if not (issue_library_id and main_record.id and room_id and meeting_type_id):
continue
self.env['issue.library.room.line'].create({
'issue_library_id': issue_library_id,
'room_booking_id': main_record.id,
'room_id': room_id,
'meeting_type_id': meeting_type_id,
'approval_date': approval_date,
})
return res
@@ -77,5 +88,31 @@ class IssueMeetingLine(models.Model):
employee_id = fields.Many2one('hr.employee', string='传达人')
attendees = fields.Char(string='列席人员')
is_sanda = fields.Boolean(string="三重一大")
decision_results = fields.Selection([('agree', '通过'), ('disagree', '未通过')], string="决策结果")
decision_results = fields.Selection([('agree', '通过'), ('disagree', '重新上会'), ('rejected', '驳回')], string="决策结果")
decision_details = fields.Text(string="决策详情")
@api.onchange('decision_results', 'meeting_booking_id')
def _onchange_decision_results(self):
if not self.meeting_booking_id.meeting_type_id:
return
meeting_type_name = str(self.meeting_booking_id.meeting_type_id.name).strip()
if self.decision_results == 'agree':
is_agree = 'pass'
agree_name = '通过'
else:
is_agree = 'reject'
agree_name = '未通过'
if '党' in meeting_type_name:
self.issue_library_id.is_party_passed = is_agree
original_party_char = self.issue_library_id.party_char or ""
self.issue_library_id.party_char = original_party_char + (agree_name)
if '班子' in meeting_type_name:
self.issue_library_id.is_class_passed = is_agree
original_class_char = self.issue_library_id.class_char or ""
self.issue_library_id.class_char = original_class_char + (agree_name)
if '董事' in meeting_type_name:
self.issue_library_id.is_boss_passed = is_agree
original_boss_char = self.issue_library_id.boss_char or ""
self.issue_library_id.boss_char = original_boss_char + (agree_name)
+9
View File
@@ -59,6 +59,12 @@ class IssueApproval(models.Model):
else:
rec.issue_display = ""
def end_approval(self):
for rec in self:
if rec.issue_approval_ids:
for issue_library in rec.issue_approval_ids:
issue_library.issue_library_id.write({'issue_state': 'will'})
class IssueApprovalLine(models.Model):
_name = 'issue.approval.line'
_description = '关联议题明细'
@@ -81,3 +87,6 @@ class IssueApprovalLine(models.Model):
'view_mode': 'form',
'target': 'current',
}
class IssueRoomApproval(models.Model):
_name = 'issue.room.approval'
+14 -12
View File
@@ -1,6 +1,7 @@
# -*- coding: utf-8 -*-
from odoo import api, fields, models, tools
from odoo.exceptions import UserError, ValidationError
from datetime import datetime, timedelta, date
class IssueLibrary(models.Model):
@@ -23,11 +24,11 @@ class IssueLibrary(models.Model):
('will', '待上会'), ('on_meet', '已上会'), ('cancel', '已取消')],
default='draft', string="议题状态")
is_party = fields.Boolean(string="党总支", store=True)
party_date = fields.Datetime(string=' ')
party_char = fields.Char(string=' ')
is_class = fields.Boolean(string="班子会", store=True)
class_date = fields.Datetime(string=' ')
class_char = fields.Char(string=' ')
is_boss = fields.Boolean(string="董事会", store=True)
boss_date = fields.Datetime(string=' ')
boss_char = fields.Char(string=' ')
is_note = fields.Boolean(string="上级单位", compute='_compute_issue_library_line_ids', store=True)
is_district_state = fields.Boolean(string="区国资局", compute='_compute_issue_library_line_ids', store=True)
is_district_government = fields.Boolean(string="区政府", compute='_compute_issue_library_line_ids', store=True)
@@ -64,7 +65,9 @@ class IssueLibrary(models.Model):
member_of_department = fields.Boolean("是否是本部门数据", compute='_compute_part_of_department',
search='_search_part_of_department')
is_passed = fields.Selection([('',''), ('pass', '通过'), ('reject', '未通过')])
is_party_passed = fields.Selection([('',''), ('pass', '通过'), ('reject', '未通过')])
is_class_passed = fields.Selection([('',''), ('pass', '通过'), ('reject', '未通过')])
is_boss_passed = fields.Selection([('',''), ('pass', '通过'), ('reject', '未通过')])
is_push_party = fields.Boolean(string="党推送")
is_push_class = fields.Boolean(string="班子推送")
is_push_boss = fields.Boolean(string="董事推送")
@@ -95,21 +98,21 @@ class IssueLibrary(models.Model):
def library_push(self):
for rec in self:
if rec.is_passed != 'pass':
raise UserError("当前状态不允许推送")
push_update_vals = {}
if rec.is_party and rec.is_passed:
if rec.is_party and rec.is_party_passed == 'reject' or not rec.is_party_passed:
push_update_vals['is_push_party'] = True
if rec.is_class and rec.is_passed:
elif rec.is_class and rec.is_class_passed == 'reject' or not rec.is_class_passed:
push_update_vals['is_push_class'] = True
if rec.is_boss and rec.is_passed:
elif rec.is_boss and rec.is_boss_passed == 'reject' or not rec.is_boss_passed:
push_update_vals['is_push_boss'] = True
if push_update_vals:
rec.write(push_update_vals)
rec.write({
'issue_state': 'will'
})
@api.onchange('is_legal_trial')
def _onchange_is_legal_trial(self):
@@ -294,8 +297,6 @@ class IssueLibrary(models.Model):
# for record in issue_active_ids:
# if record.state != 'will':
# raise UserError("当前状态不允许上会")
for meet in self:
meet.write({"issue_state": "on_meet"})
issue_details = []
for issue in issue_active_ids:
issue_details.append((0, 0, {
@@ -309,6 +310,7 @@ class IssueLibrary(models.Model):
"views": [[form_id, "form"]],
"context": {
'default_is_issue': True,
'default_start_datetime': fields.Datetime.now() + timedelta(hours=8),
'default_issue_meeting_line_ids': issue_details,
}
}
+1 -1
View File
@@ -15,7 +15,7 @@
<field name="minutes_id" invisible="not minutes_id"/>
</xpath>
<xpath expr="//button[@name='sync_wechat_room']" position="after">
<button name="bottom_meeting_approval" string="会议纪要" type="object" class="oe_highlight"/>
<button name="bottom_meeting_approval" string="会议纪要" type="object" class="oe_highlight" invisible="not work_end"/>
</xpath>
<xpath expr="//page[@name='sign']" position="before">
+18 -13
View File
@@ -12,11 +12,11 @@
<field name="name_text" class="list_width"/>
<field name="is_party" groups="yuthon_salary.group_jtbb_user" string="党总支"/>
<field name="is_party" groups="yuthon_salary.group_lc_user,yuthon_salary.group_wg_user" string="党支委会"/>
<field name="party_date" />
<field name="party_char" />
<field name="is_class"/>
<field name="class_date"/>
<field name="class_char"/>
<field name="is_boss" groups="yuthon_salary.group_jtbb_user"/>
<field name="boss_date"/>
<field name="boss_char"/>
<field name="is_legal_trial"/>
<field name="is_district_state"/>
<field name="is_district_government"/>
@@ -45,18 +45,18 @@
decoration-info="issue_state == 'will'"
decoration-success="issue_state == 'done'"
decoration-muted="issue_state == 'cancel'">
<header>
<button name="all_issue_pull" string="批量提交审批" type="object"/>
</header>
<!-- <header>-->
<!-- <button name="all_issue_pull" string="批量提交上会审批" type="object"/>-->
<!-- </header>-->
<field name="name" column_invisible="1"/>
<field name="name_text" class="list_width"/>
<field name="is_party" groups="yuthon_salary.group_jtbb_user" string="党总支"/>
<field name="is_party" groups="yuthon_salary.group_lc_user,yuthon_salary.group_wg_user" string="党支委会"/>
<field name="party_date" />
<field name="party_char" />
<field name="is_class"/>
<field name="class_date"/>
<field name="class_char"/>
<field name="is_boss" groups="yuthon_salary.group_jtbb_user"/>
<field name="boss_date"/>
<field name="boss_char"/>
<field name="is_legal_trial"/>
<field name="is_district_state"/>
<field name="is_district_government"/>
@@ -67,7 +67,7 @@
<field name="creart_datetime" column_invisible="1"/>
<field name="member_of_department" column_invisible="1"/>
<field name="is_push_depart" column_invisible="1"/>
<button name="single_issue_pull" string="提交" type="object" class="oe_highlight"/>
<!-- <button name="single_issue_pull" string="提交" type="object" class="oe_highlight"/>-->
<button name="library_push" string="推送" type="object" class="oe_highlight"/>
<button name="revoke" string="撤销" type="object" class="oe_highlight" invisible="issue_state == 'draft'"/>
<button name="issue_cancel" string="取消" type="object" class="oe_highlight"/>
@@ -206,6 +206,7 @@
<field name="model">issue.library</field>
<field name="arch" type="xml">
<search string="议题">
<field name="name"/>
<filter string="待上会" name="issue_state" domain="[('issue_state', '=', 'draft')]"/>
<filter string="已上会" name="issue_state" domain="[('issue_state', '=', 'on_meet')]"/>
<group expand="0">
@@ -219,6 +220,10 @@
<filter string="已取消" name="state_cen" domain="[('issue_state', '=', 'cancel')]"/>
</quick_filter>
</header_search>
<header_search class="header-search-inline">
<field name="name"/>
<field name="department_id"/>
</header_search>
</search>
</field>
</record>
@@ -251,7 +256,7 @@
<field name="creart_datetime"/>
<field name="is_party" groups="yuthon_salary.group_jtbb_user" string="党总支"/>
<field name="is_party" groups="yuthon_salary.group_lc_user,yuthon_salary.group_wg_user" string="党支委会"/>
<field name="party_date" column_invisibl="not party_date"/>
<field name="party_char"/>
<field name="is_district_state"/>
<field name="is_district_government"/>
<field name="is_district_party"/>
@@ -407,7 +412,7 @@
<field name="code"/>
<field name="creart_datetime"/>
<field name="is_class"/>
<field name="class_date" column_invisibl="not class_date"/>
<field name="class_char"/>
<field name="is_district_state"/>
<field name="is_district_government"/>
<field name="is_district_party"/>
@@ -551,7 +556,7 @@
<field name="code"/>
<field name="creart_datetime"/>
<field name="is_boss" groups="yuthon_salary.group_jtbb_user"/>
<field name="boss_date" column_invisibl="not boss_date"/>
<field name="boss_char"/>
<field name="is_district_state"/>
<field name="is_district_government"/>
<field name="is_district_party"/>
+1 -1
View File
@@ -22,7 +22,7 @@
sequence="5"/>
<menuitem id="tianhe_issue_library_menu"
parent="tianhe_issue_library_menu_root"
name="议题库"
name="议题总库"
groups="yuthon_issue.group_issue_admin"
action="issue_library_action"
sequence="10"/>