添加功能
This commit is contained in:
@@ -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)
|
||||
|
||||
@@ -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'
|
||||
|
||||
@@ -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,
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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">
|
||||
|
||||
@@ -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"/>
|
||||
|
||||
@@ -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"/>
|
||||
|
||||
Reference in New Issue
Block a user