diff --git a/yuthon_hr_attendance/views/go_approval.xml b/yuthon_hr_attendance/views/go_approval.xml index 40673ff83..82ba1f253 100644 --- a/yuthon_hr_attendance/views/go_approval.xml +++ b/yuthon_hr_attendance/views/go_approval.xml @@ -92,7 +92,6 @@ - diff --git a/yuthon_issue/models/issue_library.py b/yuthon_issue/models/issue_library.py index e0beeff8a..e6df05dd2 100644 --- a/yuthon_issue/models/issue_library.py +++ b/yuthon_issue/models/issue_library.py @@ -6,7 +6,7 @@ from datetime import datetime, timedelta, date class IssueLibrary(models.Model): _name = "issue.library" - _description = '议题库' + _description = '议题总库' _inherit = ['mail.thread.main.attachment', 'mail.activity.mixin'] _rec_name = 'name' @@ -14,7 +14,7 @@ class IssueLibrary(models.Model): name_text = fields.Text(string='议题名称', compute='_compute_name', readonly=False) depart_opinions = fields.Text(string='部门意见') topic_content = fields.Text(string='事项背景') - will_based = fields.Text(string='上会依据') + will_based = fields.Text(string='上会依据', compute='_compute_will_based', readonly=False) deliberation_content = fields.Text(string='请示事项', default='建议同意') handling_situation = fields.Text(string='办理情况', help="(存在问题)") is_invisible_workflow = fields.Boolean(string="流程隐藏的判断") @@ -73,6 +73,34 @@ class IssueLibrary(models.Model): is_push_boss = fields.Boolean(string="董事推送") is_push_depart = fields.Boolean(string="部门推送") + @api.depends('issue_library_line_ids', + 'issue_library_line_ids.issue_approval_decision_id', + 'issue_library_line_ids.district_state_id', + 'issue_library_line_ids.district_government_id', + 'issue_library_line_ids.district_party_id') + def _compute_will_based(self): + for record in self: + will_based_lines = [] + for idx, line in enumerate(record.issue_library_line_ids, start=1): + decision_name = line.issue_approval_decision_id.specifics or "" + district_state_name = line.district_state_id.name or "" + district_government_name = line.district_government_id.name or "" + district_party_name = line.district_party_id.name or "" + field_parts = [] + if decision_name: + field_parts.append(decision_name) + if district_state_name: + field_parts.append(f"区国资局({district_state_name})") + if district_government_name: + field_parts.append(f"区政府({district_government_name})") + if district_party_name: + field_parts.append(f"区委组织部({district_party_name})") + if field_parts: + line_content = f"{idx}.{','.join(field_parts)}" + will_based_lines.append(line_content) + + record.will_based = "\n".join(will_based_lines) + def correction(self): for rec in self: menu_id = self.env['ir.ui.menu'].search([('name', '=', '我的议题')]) @@ -99,13 +127,13 @@ class IssueLibrary(models.Model): def library_push(self): for rec in self: push_update_vals = {} - if rec.is_party and rec.is_party_passed == 'reject' or not rec.is_party_passed: + if rec.is_party and (rec.is_party_passed == 'reject' or not rec.is_party_passed): push_update_vals['is_push_party'] = True - elif rec.is_class and rec.is_class_passed == 'reject' or not rec.is_class_passed: + elif rec.is_class and (rec.is_class_passed == 'reject' or not rec.is_class_passed): push_update_vals['is_push_class'] = True - elif rec.is_boss and rec.is_boss_passed == 'reject' or not rec.is_boss_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: @@ -209,39 +237,45 @@ class IssueLibrary(models.Model): workflow_id.sudo().unlink() self.issue_approval_id.unlink() - def all_issue_pull(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')) + ) for i in issue_active_ids: - if i.issue_state != 'draft': + if i.issue_state not in ['draft', 'approval']: raise UserError("当前状态不允许提交") - form_id = self.env.ref("yuthon_issue.issue_library_approval_form").id - issue_decision_lines = [] - specifics_list = [] - if not issue_active_ids: - issue_active_ids = self - for issue_record in issue_active_ids: - specifics_list.append(issue_record.name) - issue_record.write({"issue_state": "approval"}) - issue_decision_lines.append((0, 0, { - 'issue_library_id': issue_record.id, - 'approval_decision_sequence': issue_record.approval_decision_sequence, - 'is_party': issue_record.is_party, - 'is_class': issue_record.is_class, - 'is_boss': issue_record.is_boss, - 'is_note': issue_record.is_note, - 'employee_id': issue_record.employee_id.id - })) - if len(specifics_list) > 1: - name = ','.join(specifics_list) - else: - name = self.name - issue_approval_id = self.env['issue.approval'].create({ - 'issue_approval_ids': issue_decision_lines, - 'name': name, - }) - self.issue_approval_id = issue_approval_id + existing_approval = self.env['issue.approval'].search([ + ('issue_approval_ids.issue_library_id', 'in', issue_active_ids.ids), + ], limit=1) + + specifics_list = [rec.name for rec in issue_active_ids] + name = ','.join(specifics_list) if len(specifics_list) > 1 else ( + self.name or specifics_list[0] if specifics_list else "") + + if existing_approval: + issue_approval_id = existing_approval + else: + issue_decision_lines = [] + for issue_record in issue_active_ids: + issue_record.write({"issue_state": "approval"}) + issue_decision_lines.append((0, 0, { + 'issue_library_id': issue_record.id, + 'approval_decision_sequence': issue_record.approval_decision_sequence, + 'is_party': issue_record.is_party, + 'is_class': issue_record.is_class, + 'is_boss': issue_record.is_boss, + 'is_note': issue_record.is_note, + 'employee_id': issue_record.employee_id.id + })) + + issue_approval_id = self.env['issue.approval'].create({ + 'issue_approval_ids': issue_decision_lines, + 'name': name, + }) + self.issue_approval_id = issue_approval_id + + form_id = self.env.ref("yuthon_issue.issue_library_approval_form").id return { "type": "ir.actions.act_window", "name": "提交议题审批", @@ -255,7 +289,6 @@ class IssueLibrary(models.Model): } def single_issue_pull(self): - # 检查当前记录状态是否允许提交 if self.issue_state != 'draft': raise UserError("当前状态不允许提交") @@ -434,6 +467,7 @@ class IssueLibraryApprovalLine(models.Model): approval_date = fields.Datetime(string="创建日期") res_model = fields.Char(string="模型", compute='compute_issue_soong') res_id = fields.Char(string="id", compute='compute_issue_soong') + department_id = fields.Many2one('hr.department', string='部门', compute='compute_issue_soong') @api.depends('code') def compute_issue_soong(self): @@ -444,10 +478,17 @@ class IssueLibraryApprovalLine(models.Model): rec.res_model = workflow_record_id.res_model rec.res_id = workflow_record_id.res_id rec.workflow_name = workflow_record_id.name + record_id = self.env[workflow_record_id.res_model].search([('id', '=', workflow_record_id.res_id)]) + if hasattr(record_id, 'user_id') and record_id.user_id: + query_user_id = record_id.user_id + elif hasattr(record_id, 'users_id') and record_id.users_id: + query_user_id = record_id.users_id + rec.department_id = query_user_id.employee_ids.department_id.id else: rec.approval_type = '' rec.res_model = '' rec.res_id = '' + rec.department_id = '' rec.workflow_name = '' def open_record(self): diff --git a/yuthon_issue/models/issue_meeting_minutes.py b/yuthon_issue/models/issue_meeting_minutes.py index 7be500a38..80d5093cd 100644 --- a/yuthon_issue/models/issue_meeting_minutes.py +++ b/yuthon_issue/models/issue_meeting_minutes.py @@ -8,12 +8,15 @@ class IssueMeetingMinutes(models.Model): _description = '会议纪要' _inherit = ['soong.workflow.mixin', 'mail.thread.main.attachment', 'mail.activity.mixin'] - - name = fields.Char(string='名称') + name = fields.Char(string='名称', compute='_compute_name') number_of_meetings = fields.Integer(string='会议次数') meeting_id = fields.Many2one('room.booking', string='会议名称', required=True) 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="主持人") code = fields.Char(string='编号', required=True, copy=False, @@ -31,17 +34,12 @@ class IssueMeetingMinutes(models.Model): name_title = fields.Char(default=_get_default_name_title) - - computed_meeting_name = fields.Char(string='会议名称', compute='_compute_meeting_name') - @api.depends('meeting_date', 'number_of_meetings', 'meeting_id.name') - def _compute_meeting_name(self): - for record in self: - if record.meeting_date and record.meeting_id: - year = record.meeting_date.year - meeting_name = record.meeting_id.name - record.computed_meeting_name = f"{meeting_name}【{year}】{record.number_of_meetings}号" - else: - record.computed_meeting_name = False + @api.depends('number_of_meetings', 'meeting_id', 'meeting_type_id', 'meeting_date') + def _compute_name(self): + if self.number_of_meetings and self.meeting_id and self.meeting_type_id and self.meeting_date: + self.name = self.number_of_meetings + ' ' + self.meeting_id.name + ' ' + self.meeting_type_id.name + ' ' + self.meeting_date + else: + self.name = '' @api.constrains('meeting_id') def _check_meeting_id(self): @@ -49,6 +47,15 @@ class IssueMeetingMinutes(models.Model): if record.meeting_id: record.meeting_id.minutes_id = self.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' diff --git a/yuthon_issue/views/issue_library_views.xml b/yuthon_issue/views/issue_library_views.xml index 20d6836a3..4871558ca 100644 --- a/yuthon_issue/views/issue_library_views.xml +++ b/yuthon_issue/views/issue_library_views.xml @@ -41,7 +41,7 @@ issue.library.tree issue.library - @@ -77,11 +77,53 @@ + + issue.library.tree + issue.library + + +
+
+ + + + + + + + + + + + + + + + + + + + + +