diff --git a/room/models/room_booking.py b/room/models/room_booking.py
index 201fd36ea..8fea2e88b 100644
--- a/room/models/room_booking.py
+++ b/room/models/room_booking.py
@@ -35,8 +35,10 @@ class RoomBooking(models.Model):
meeting_type = fields.Selection([('up', '线上'), ('down', '线下'), ('exterior', '外部')], default='down', string="会议形式",
required=True)
meeting_type_id = fields.Many2one('room.meeting.type', string="会议类型")
- room_users_ids = fields.Many2many('res.users', string="参会人员", store=True)
+ room_users_ids = fields.Many2many(related='meeting_type_id.users_ids', string="出席人员")
other_company_id = fields.Many2one('res.partner', string="外部公司")
+ host = fields.Many2one(related='meeting_type_id.host_user_id', string="主持人")
+ stationed_group = fields.Boolean(string="驻组参会")
other_company_user_ids = fields.One2many(related="other_company_id.child_ids", string="其他人员")
fleet_id = fields.Many2one('fleet.vehicle', string="车辆")
diff --git a/room/models/room_meeting_type.py b/room/models/room_meeting_type.py
index 7d8074eea..fbfab8e20 100644
--- a/room/models/room_meeting_type.py
+++ b/room/models/room_meeting_type.py
@@ -9,4 +9,27 @@ class RoomMeetingType(models.Model):
sequence = fields.Char(string='序号', store=True)
name = fields.Char(string='名字', required=True)
- company_id = fields.Many2one('res.company', string="所属公司", index=True, default=lambda self: self.env.company)
\ No newline at end of file
+ host_id = fields.Many2one('soong.user.role', string="主持人")
+ room_users_ids = fields.Many2many('soong.user.role', string="出席人员", store=True)
+ host_user_id = fields.Many2one('res.users', string="主持人", compute='_compute_host_user_id', store=True)
+ users_ids = fields.Many2many('res.users', string="出席人员", compute='_compute_users_ids', store=True)
+ company_id = fields.Many2one('res.company', string="所属公司", index=True, default=lambda self: self.env.company)
+
+ @api.depends('host_id')
+ def _compute_host_user_id(self):
+ for record in self:
+ if record.host_id.personnel_ids:
+ record.host_user_id = record.host_id.personnel_ids[0].user_id.id
+
+ @api.depends('room_users_ids', 'host_user_id')
+ def _compute_users_ids(self):
+ for record in self:
+ user_ids = set()
+ if record.host_user_id:
+ user_ids.add(record.host_user_id.id)
+ for role in record.room_users_ids:
+ for personnel in role.personnel_ids:
+ if personnel.user_id:
+ user_ids.add(personnel.user_id.id)
+
+ record.users_ids = [(6, 0, list(user_ids))]
diff --git a/room/views/room_booking_views.xml b/room/views/room_booking_views.xml
index 9abccebc9..ad8100920 100644
--- a/room/views/room_booking_views.xml
+++ b/room/views/room_booking_views.xml
@@ -150,27 +150,40 @@
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
+
+
+
+
+
+
+
diff --git a/room/views/room_meeting_type.xml b/room/views/room_meeting_type.xml
index 893c3e86a..c8c5ea17a 100644
--- a/room/views/room_meeting_type.xml
+++ b/room/views/room_meeting_type.xml
@@ -7,6 +7,10 @@
+
+
+
+
diff --git a/soong_workflow/models/soong_note_setting.py b/soong_workflow/models/soong_note_setting.py
index dda5b1d75..69c736fe7 100644
--- a/soong_workflow/models/soong_note_setting.py
+++ b/soong_workflow/models/soong_note_setting.py
@@ -6,4 +6,14 @@ class SoongNoteSetting(models.Model):
_name = 'soong.note.setting'
name = fields.Char(string="名称")
- users_role_ids = fields.Many2many('soong.user.role', string='角色范围')
\ No newline at end of file
+ user_group_ids = fields.Many2many('soong.user.role.group', string='用户组')
+ users_role_ids = fields.Many2many('soong.user.role', string='角色范围', compute='_compute_users_role_ids', store=True)
+
+ @api.depends('user_group_ids.user_role_ids')
+ def _compute_users_role_ids(self):
+ for record in self:
+ all_role_ids = []
+ for group in record.user_group_ids:
+ all_role_ids.extend(group.user_role_ids.ids)
+ unique_role_ids = list(set(all_role_ids))
+ record.users_role_ids = [(6, 0, unique_role_ids)]
\ No newline at end of file
diff --git a/soong_workflow/views/soong_note_setting_views.xml b/soong_workflow/views/soong_note_setting_views.xml
index f93bb54db..4d384bd31 100644
--- a/soong_workflow/views/soong_note_setting_views.xml
+++ b/soong_workflow/views/soong_note_setting_views.xml
@@ -6,7 +6,8 @@
-
+
+
diff --git a/yuthon_hr_attendance/models/hr_attendance_detail_wechat.py b/yuthon_hr_attendance/models/hr_attendance_detail_wechat.py
index d27ae6c40..9202daf57 100644
--- a/yuthon_hr_attendance/models/hr_attendance_detail_wechat.py
+++ b/yuthon_hr_attendance/models/hr_attendance_detail_wechat.py
@@ -287,7 +287,7 @@ class HrAttendanceDetail(models.Model):
for user in user_obj:
# 判断是否是微信用户
if user.oauth_uid and user.employee_ids.contract_id:
- _logger.info("正在梳理考勤人员:{} id:{},全部人数:{},剩余人数:{},所属公司".format(user.name, user.id, total_users,remaining_users, user.employee_id.company_id.name))
+ _logger.info("正在梳理考勤人员:{} id:{},全部人数:{},剩余人数:{},所属公司:{}".format(user.name, user.id, total_users,remaining_users, user.employee_ids.company_id.name))
remaining_users -= 1
# 查询当前用户区间内的所有打卡数据没有的创建
for current_date in self.divide_time_range_fixed(start_time, now_time):
diff --git a/yuthon_issue/models/inherit_room_booking.py b/yuthon_issue/models/inherit_room_booking.py
index 9f358c987..873e10fea 100644
--- a/yuthon_issue/models/inherit_room_booking.py
+++ b/yuthon_issue/models/inherit_room_booking.py
@@ -57,8 +57,9 @@ class IssueMeetingLine(models.Model):
meeting_booking_id = fields.Many2one('room.booking', string='关联会议室')
sequence = fields.Char(string='序号', store=True)
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='列席人员')
- is_sanda = fields.Boolean(string='是否属于"三重一大"')
+ is_sanda = fields.Boolean(string="三重一大")
decision_results = fields.Selection([('agree', '通过'), ('disagree', '未通过')], string="决策结果")
decision_details = fields.Text(string="决策详情")
diff --git a/yuthon_issue/models/issue_approval_decision.py b/yuthon_issue/models/issue_approval_decision.py
index 7151a0258..1498efff6 100644
--- a/yuthon_issue/models/issue_approval_decision.py
+++ b/yuthon_issue/models/issue_approval_decision.py
@@ -17,18 +17,19 @@ class IssueApprovalDecision(models.Model):
district_state = fields.Selection([('approval', '审'), ('decide', '决')], string="区国资局",)
district_government = fields.Selection([('approval', '审'), ('decide', '决')], string="区政府",)
district_party= fields.Selection([('approval', '审'), ('decide', '决')], string="区委组织部")
- district_bureau = fields.Selection([('record', '备案'), ('approved', '核准'), ('record_approved', '备案、核准')], string='上级单位')
department_id = fields.Many2one('hr.department', string="部门")
management_matters = fields.Char(string='管理事项')
- company_id = fields.Many2one('res.company', string="公司", default=lambda self: self.env.company)
- scope = fields.Selection([('one', '一级区属国有企业'), ('two', '二级区属国有企业'), ('one_two', '一级、二级区属国有企业')], string='适用范围')
+ company_id = fields.Many2one('res.company', string="公司", default=lambda self: self._get_default_company())
+ scope = fields.Selection([('one', '一级区属国有企业'), ('two', '二级区属国有企业'), ('one_two', '一级、二级区属国有企业')], string='适用范围', default='one')
start_date = fields.Date(string="生效日期")
end_date = fields.Date(string="失效日期")
remarks = fields.Text(string='备注')
-
-
issue_approval_id = fields.Many2one('issue.approval', string="关联议题审批")
+ def _get_default_company(self):
+ company = self.env['res.company'].search([('name', '=', '集团本部')], limit=1)
+ return company.id if company else False
+
@api.onchange('decision_type_id')
def onchange_sequence(self):
for seq in self:
@@ -47,3 +48,11 @@ class IssueApprovalDecision(models.Model):
if record.team_meet:
record.board_meet = 'approval'
+
+ def update_issue(self):
+ company = self.env['res.company'].search([('name', '=', '集团本部')], limit=1)
+ issue_active_ids = self.env["issue.approval.decision"].browse(
+ self._context.get('active_ids', self._context.get('active_id')))
+ for record in issue_active_ids:
+ record.scope = 'one'
+ record.company_id = company.id
diff --git a/yuthon_issue/models/issue_library.py b/yuthon_issue/models/issue_library.py
index 192b0c3a1..677bdf1c4 100644
--- a/yuthon_issue/models/issue_library.py
+++ b/yuthon_issue/models/issue_library.py
@@ -7,7 +7,7 @@ class IssueLibrary(models.Model):
_name = "issue.library"
_description = '议题库'
_inherit = ['mail.thread.main.attachment', 'mail.activity.mixin']
- _rec_name = 'code'
+ _rec_name = 'name'
name = fields.Char(string='议题事项')
name_text = fields.Text(string='议题事项', compute='_compute_name', readonly=False)
@@ -16,10 +16,13 @@ class IssueLibrary(models.Model):
issue_state = fields.Selection([('draft', '待提交'), ('approval', '审批中'), ('on_approval', '已审批'),
('will', '待上会'), ('on_meet', '已上会'), ('cancel', '已取消')],
default='draft', string="议题状态")
- is_party = fields.Boolean(string="党支委会", default=False, compute='_compute_issue_library_line_ids', store=True)
- is_class = fields.Boolean(string="班子会", default=False, compute='_compute_issue_library_line_ids', store=True)
- is_boss = fields.Boolean(string="董事会", default=False, compute='_compute_issue_library_line_ids', store=True)
- is_note = fields.Boolean(string="上级单位", default=False, compute='_compute_issue_library_line_ids', store=True)
+ is_party = fields.Boolean(string="党支委会", compute='_compute_issue_library_line_ids', store=True)
+ is_class = fields.Boolean(string="班子会", compute='_compute_issue_library_line_ids', store=True)
+ is_boss = fields.Boolean(string="董事会", compute='_compute_issue_library_line_ids', store=True)
+ 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)
+ is_district_party = fields.Boolean(string="区委组织部", compute='_compute_issue_library_line_ids', store=True)
creart_datetime = fields.Date(string="创建日期", default=fields.Datetime.now)
notice_documents_ids = fields.Many2many('ir.attachment', string='议题附件')
issue_type_id = fields.Many2one('issue.type', string="议题类型")
@@ -108,6 +111,41 @@ class IssueLibrary(models.Model):
}
}
+ def single_issue_pull(self):
+ # 检查当前记录状态是否允许提交
+ if self.issue_state != 'draft':
+ raise UserError("当前状态不允许提交")
+
+ form_id = self.env.ref("yuthon_issue.issue_library_approval_form").id
+ issue_decision_lines = [(0, 0, {
+ 'issue_library_id': self.id,
+ 'approval_decision_sequence': self.approval_decision_sequence,
+ 'is_party': self.is_party,
+ 'is_class': self.is_class,
+ 'is_boss': self.is_boss,
+ 'is_note': self.is_note,
+ 'employee_id': self.employee_id.id
+ })]
+
+ issue_approval_id = self.env['issue.approval'].create({
+ 'issue_approval_ids': issue_decision_lines,
+ 'name': self.name,
+ 'employee_id': self.employee_id.id,
+ })
+ self.write({"issue_state": "approval"})
+ self.issue_approval_id = issue_approval_id
+ return {
+ "type": "ir.actions.act_window",
+ "name": "提交审批",
+ "res_model": "issue.approval",
+ "views": [[form_id, "form"]],
+ "res_id": issue_approval_id.id,
+ "context": {
+ "id": issue_approval_id.id,
+ "is_issue": True,
+ }
+ }
+
def issue_cancel(self):
self.write({"issue_state": "cancel"})
@@ -135,6 +173,26 @@ class IssueLibrary(models.Model):
}
}
+ def single_meeting_issue(self):
+ issue = self.env["issue.library"].browse(self.id)
+ if issue.state != 'will':
+ raise UserError("当前状态不允许上会")
+ self.write({"issue_state": "on_meet"})
+ issue_details = [(0, 0, {
+ 'issue_library_id': issue.id,
+ })]
+ form_id = self.env.ref("room.room_booking_view_form").id
+ return {
+ "type": "ir.actions.act_window",
+ "name": "单个上会",
+ "res_model": "room.booking",
+ "views": [[form_id, "form"]],
+ "context": {
+ 'default_is_issue': True,
+ 'default_issue_meeting_line_ids': issue_details,
+ }
+ }
+
def approval_details(self):
self.ensure_one()
for record in self:
@@ -155,7 +213,14 @@ class IssueLibrary(models.Model):
line.is_party = bool(line.issue_library_line_ids.filtered('council'))
line.is_class = bool(line.issue_library_line_ids.filtered('team_meet'))
line.is_boss = bool(line.issue_library_line_ids.filtered('board_meet'))
- line.is_note = bool(line.issue_library_line_ids.filtered('district_bureau'))
+ line.is_district_state = bool(line.issue_library_line_ids.filtered('district_state'))
+ line.is_district_government = bool(line.issue_library_line_ids.filtered('district_government'))
+ line.is_district_party = bool(line.issue_library_line_ids.filtered('district_party'))
+ line.is_note = any([
+ bool(line.issue_library_line_ids.filtered(lambda rec: rec.issue_approval_decision_id.district_state)),
+ bool(line.issue_library_line_ids.filtered(lambda rec: rec.issue_approval_decision_id.district_government)),
+ bool(line.issue_library_line_ids.filtered(lambda rec: rec.issue_approval_decision_id.district_party))
+ ])
def unlink(self):
for i in self:
@@ -197,14 +262,16 @@ class IssueLibrary(models.Model):
class IssueLibraryLine(models.Model):
_name = "issue.library.line"
- _description = '决策清单'
+ _description = '决策清单明细'
issue_library_id = fields.Many2one('issue.library')
issue_approval_decision_id = fields.Many2one('issue.approval.decision', string="决策清单")
council = fields.Selection(related='issue_approval_decision_id.council', string='党总委员会')
team_meet = fields.Selection(related='issue_approval_decision_id.team_meet', string='经营班子会')
board_meet = fields.Selection(related='issue_approval_decision_id.board_meet', string='董事会')
- district_bureau = fields.Selection(related='issue_approval_decision_id.district_bureau', string='上级单位')
+ district_state = fields.Selection(related='issue_approval_decision_id.district_state', string="区国资局")
+ district_government = fields.Selection(related='issue_approval_decision_id.district_government', string="区政府")
+ district_party = fields.Selection(related='issue_approval_decision_id.district_party', string="区委组织部")
ordinal = fields.Char(related='issue_approval_decision_id.sequence', string='序号')
diff --git a/yuthon_issue/views/inherit_room_booking.xml b/yuthon_issue/views/inherit_room_booking.xml
index 13545d3a0..f91db9f20 100644
--- a/yuthon_issue/views/inherit_room_booking.xml
+++ b/yuthon_issue/views/inherit_room_booking.xml
@@ -6,7 +6,7 @@
-
+
@@ -16,7 +16,7 @@
-
+
diff --git a/yuthon_issue/views/issue_approval_decision_views.xml b/yuthon_issue/views/issue_approval_decision_views.xml
index aa13d19ec..fdc64eefe 100644
--- a/yuthon_issue/views/issue_approval_decision_views.xml
+++ b/yuthon_issue/views/issue_approval_decision_views.xml
@@ -16,7 +16,6 @@
-
@@ -54,7 +53,11 @@
-
+
+
+
+
+
@@ -102,4 +105,11 @@
'search_default_group_decision_type_id': True}
+
+ 更新公司和适用范围
+
+
+ code
+ action = model.update_issue()
+
diff --git a/yuthon_issue/views/issue_approval_views.xml b/yuthon_issue/views/issue_approval_views.xml
index 9b9640ea7..835fd6661 100644
--- a/yuthon_issue/views/issue_approval_views.xml
+++ b/yuthon_issue/views/issue_approval_views.xml
@@ -47,17 +47,11 @@
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
diff --git a/yuthon_issue/views/issue_library_views.xml b/yuthon_issue/views/issue_library_views.xml
index 6c1f45747..64d25c0d4 100644
--- a/yuthon_issue/views/issue_library_views.xml
+++ b/yuthon_issue/views/issue_library_views.xml
@@ -9,19 +9,20 @@
decoration-success="issue_state == 'done'"
decoration-muted="issue_state == 'cancel'">
-
+
+
+
-
+
@@ -97,7 +98,9 @@
-
+
+
+
@@ -137,137 +140,6 @@
-
-
- issue.library.on.meeting.tree
- issue.library
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- issue.library.on.meeting.form
- issue.library
-
-
-
-
issue.library.search
@@ -300,56 +172,28 @@
(0, 0, {'view_mode': 'form', 'view_id': ref('yuthon_issue.view_issue_library_form')})]"/>
-
- 已审批
- issue.library
- tree,form
- [('issue_state','=','approval')]
-
-
-
- 待上会
- issue.library
- tree,form
- [('issue_state','=','will')]
-
-
-
- 已上会
- issue.library
- tree,form
- [('state','=','on_meet')]
-
-
-
-
- 已取消
- issue.library
- tree,form
- [('issue_state','=','cancel')]
-
-
-
-
-
issue.library.tree
issue.library
+
+
-
+
+
+
-
+
@@ -410,7 +254,9 @@
-
+
+
+
@@ -450,136 +296,9 @@
-
-
- issue.library.on.meeting.tree
- issue.library
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- issue.library.tree
- issue.library
-
-
-
-
- 议题库
+ 党总支议题库
issue.library
tree,form
[('is_party', '=', True)]
@@ -600,35 +319,6 @@
(0, 0, {'view_mode': 'form', 'view_id': ref('yuthon_issue.view_issue_library_form3')})]"/>
-
- 待上会
- issue.library
- tree,form
- [('issue_state','=','will')]
-
-
-
-
- 已上会
- issue.library
- tree,form
- [('issue_state','=','on_meet')]
-
-
-
-
- 已取消
- issue.library
- tree,form
- [('issue_state','=','cancel')]
-
-
issue.library.tree
@@ -638,13 +328,18 @@
decoration-info="issue_state == 'will'"
decoration-success="issue_state == 'done'"
decoration-muted="issue_state == 'cancel'">
+
-
+
+
+
-
+
@@ -703,9 +398,10 @@
-
-
+
+
+
@@ -745,138 +441,9 @@
-
-
- issue.library.on.meeting.tree
- issue.library
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- issue.library.tree
- issue.library
-
-
-
-
- 议题库
+ 班子会议题库
issue.library
tree,form
[('is_class', '=', True)]
@@ -886,52 +453,27 @@
(0, 0, {'view_mode': 'form', 'view_id': ref('yuthon_issue.view_issue_library_form4')})]"/>
-
- 待上会
- issue.library
- tree,form
- [('issue_state','=','will')]
-
-
-
-
- 已上会
- issue.library
- tree,form
- [('issue_state','=','on_meet')]
-
-
-
-
- 已取消
- issue.library
- tree,form
- [('issue_state','=','cancel')]
-
-
-
issue.library.tree
issue.library
-
+
-
+
+
+
-
+
@@ -942,7 +484,7 @@
issue.library.tree
issue.library
-
@@ -1033,7 +576,7 @@
- 议题库
+ 董事会议题库
issue.library
tree,form
[('is_boss', '=', True)]
@@ -1042,164 +585,6 @@
(0, 0, {'view_mode': 'tree', 'view_id': ref('yuthon_issue.view_issue_library_tree5')}),
(0, 0, {'view_mode': 'form', 'view_id': ref('yuthon_issue.view_issue_library_form5')})]"/>
-
-
- issue.library.on.meeting.tree
- issue.library
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- issue.library.tree
- issue.library
-
-
-
-
-
-
- 待上会
- issue.library
- tree,form
- [('issue_state','=','will')]
-
-
-
-
- 已上会
- issue.library
- tree,form
- [('issue_state','=','on_meet')]
-
-
-
-
- 已取消
- issue.library
- tree,form
- [('issue_state','=','cancel')]
-
-
我的议题库
@@ -1207,26 +592,4 @@
tree,form
[('employee_id.user_id', '=', uid)]
-
- 议题库
- issue.library
- tree,form
-
-
-
- 批量上会
-
-
- code
- action = model.all_meeting_issue()
-
-
- 批量提交
-
-
- code
- action = model.all_issue_pull()
-
\ No newline at end of file
diff --git a/yuthon_official/models/yuthon_official_incoming_normal.py b/yuthon_official/models/yuthon_official_incoming_normal.py
index bd1520c41..7600824c9 100644
--- a/yuthon_official/models/yuthon_official_incoming_normal.py
+++ b/yuthon_official/models/yuthon_official_incoming_normal.py
@@ -39,7 +39,7 @@ class YuthonOfficialIncomingNormal(models.Model):
deadline = fields.Date(string="办理期限")
done_date = fields.Date(string="完成时间")
is_official_incoming = fields.Boolean(string="是否收文")
- official_documents_ids = fields.Many2many('ir.attachment', string="附件")
+ official_documents_ids = fields.Many2many('ir.attachment', string="收文附件")
workflow_inspector_ids = fields.One2many('soong.workflow.inspector', 'incoming_normal_id', string="督办事项")
room_booking_ids = fields.One2many('room.booking', 'incoming_normal_id', string="会议关联")
diff --git a/yuthon_official/views/yuthon_official_incoming_normal_views.xml b/yuthon_official/views/yuthon_official_incoming_normal_views.xml
index 743838b80..e9f3eb08d 100644
--- a/yuthon_official/views/yuthon_official_incoming_normal_views.xml
+++ b/yuthon_official/views/yuthon_official_incoming_normal_views.xml
@@ -47,7 +47,7 @@
-
+
diff --git a/yuthon_property/views/yuthon_property_views.xml b/yuthon_property/views/yuthon_property_views.xml
index e8c10977c..b6e7fc44e 100644
--- a/yuthon_property/views/yuthon_property_views.xml
+++ b/yuthon_property/views/yuthon_property_views.xml
@@ -12,7 +12,7 @@
-
+