diff --git a/room/models/room_booking.py b/room/models/room_booking.py index 765a2280c..e0185e2c3 100644 --- a/room/models/room_booking.py +++ b/room/models/room_booking.py @@ -97,22 +97,22 @@ class RoomBooking(models.Model): self.room_users_ids = [(5, 0, 0)] self.host = False - @api.model_create_multi - def create(self, vals_list): - bookings = super(RoomBooking, self).create(vals_list) - for room, bookings in bookings.grouped("room_id").items(): - room._notify_booking_view("create", bookings) - data = vals_list[0] - if data.get('partner_ids'): - self.env['calendar.event'].create({ - 'name': data['name'], - 'start': data['start_datetime'], - 'stop': data['stop_datetime'], - 'partner_ids': data['partner_ids'], - 'sth_type': 'meet', - 'room_booking_id': bookings.id, - }) - return bookings + # @api.model_create_multi + # def create(self, vals_list): + # bookings = super(RoomBooking, self).create(vals_list) + # for room, bookings in bookings.grouped("room_id").items(): + # room._notify_booking_view("create", bookings) + # data = vals_list[0] + # if data.get('partner_ids'): + # self.env['calendar.event'].create({ + # 'name': data['name'], + # 'start': data['start_datetime'], + # 'stop': data['stop_datetime'], + # 'partner_ids': data['partner_ids'], + # 'sth_type': 'meet', + # 'room_booking_id': bookings.id, + # }) + # return bookings @api.onchange('room_id') def onchange_meeting_data(self): diff --git a/soong_workflow/models/soong_workflow_mixin.py b/soong_workflow/models/soong_workflow_mixin.py index 755a4ec4e..362393236 100644 --- a/soong_workflow/models/soong_workflow_mixin.py +++ b/soong_workflow/models/soong_workflow_mixin.py @@ -110,15 +110,15 @@ class SoongWorkflowMixin(models.AbstractModel): next_log = all_sorted_logs[current_log_index + 1] if next_log.approval_state == "0": record.is_back = True - if record._name in ['yuthon.official.incoming.normal', 'yuthon.sub.enterprises']: - current_user_in_logs2 = any(log.done_by.id == self.env.uid for log in record.log_ids2) - organizer_user_in_logs = any(log.done_by.id == self.env.user.id for log in record.log_ids.filtered(lambda l: l.name == '承办')) - all_handling_logs_approval_0 = all(log.approval_state == '0' for log in record.log_ids.filtered(lambda l: l.name == '承办')) - all_logs2_approval_0 = all(log.approval_state == '0' for log in record.log_ids2) - if all_logs2_approval_0 and all_handling_logs_approval_0 and not current_user_in_logs2 and not organizer_user_in_logs: - record.is_back = True - else: - record.is_back = False + if record._name in ['yuthon.official.incoming.normal', 'yuthon.sub.enterprises']: + current_user_in_logs2 = any(log.done_by.id == self.env.uid for log in record.log_ids2) + organizer_user_in_logs = any(log.done_by.id == self.env.user.id for log in record.log_ids.filtered(lambda l: l.name == '承办')) + all_handling_logs_approval_0 = all(log.approval_state == '0' for log in record.log_ids.filtered(lambda l: l.name == '承办')) + all_logs2_approval_0 = all(log.approval_state == '0' for log in record.log_ids2) + if all_logs2_approval_0 and all_handling_logs_approval_0 and not current_user_in_logs2 and not organizer_user_in_logs: + record.is_back = True + else: + record.is_back = False def _compute_is_active(self): current_user_id = self.env.user.id diff --git a/soong_workflow/views/soong_workflow_record.xml b/soong_workflow/views/soong_workflow_record.xml index d05c9d68f..6f11673be 100644 --- a/soong_workflow/views/soong_workflow_record.xml +++ b/soong_workflow/views/soong_workflow_record.xml @@ -17,21 +17,26 @@ - - + + - + - - - - - - - + + + + + + + @@ -57,16 +62,17 @@ - + - - + + - + @@ -81,13 +87,16 @@ decoration-danger="approve_state == 'end'" delete="false" create="false" default_order="write_date2 desc, id desc" expand="1" limit="10"> - - + + - + - + @@ -104,10 +113,13 @@ - - + + + groups="soong_workflow.group_soong_workflow_manager" + invisible="approve_state in ['start', 'end']"/> - - + + - + - - + + @@ -198,13 +215,15 @@ - + - + @@ -216,13 +235,16 @@ decoration-danger="approve_state == 'end'" delete="false" create="false" default_order="write_date2 desc, id desc" expand="1" limit="10"> - - + + - + @@ -276,7 +298,7 @@ + create="false" default_order="write_date2 desc" limit="10"> @@ -293,24 +315,27 @@ - - - - - - - - - - - + + + + + + + + + + + 抄送流程 ir.actions.act_window soong.workflow.record tree,kanban,search - {'header_search_default_approve_state': 1, 'header_search_default_to_do':1, 'check_employee': 1} - [('users_ids', 'in', uid), ('reclaim_state', '=', False), ('is_log2', '=', True)] + {'header_search_default_approve_state': 1, 'header_search_default_to_do':1, + 'check_employee': 1} + + [('users_ids', 'in', uid), ('reclaim_state', '=', False), ('is_log2', '=', True)] + @@ -319,7 +344,9 @@ ir.actions.act_window soong.workflow.record tree,kanban,search - {'header_search_default_approve_state': 1, 'header_search_default_to_do':1, 'check_employee': 1} + {'header_search_default_approve_state': 1, 'header_search_default_to_do':1, + 'check_employee': 1} + [('is_to_do', '=', True)] @@ -329,8 +356,12 @@ ir.actions.act_window soong.workflow.record tree,kanban,search - {'header_search_default_approve_state': 1, 'header_search_default_to_do':1, 'check_employee': 1} - [('users_ids', 'in', uid), ('reclaim_state', '=', False), ('soong_state', 'in', ['done', 'active'])] + {'header_search_default_approve_state': 1, 'header_search_default_to_do':1, + 'check_employee': 1} + + [('users_ids', 'in', uid), ('reclaim_state', '=', False), ('soong_state', 'in', + ['done', 'active'])] + @@ -349,7 +380,9 @@ ir.actions.act_window soong.workflow.record tree,kanban,search - [('reclaim_state', '=', False), '|', ('approvals_group_id.name', '=', '人力资源'), ('approvals_group_id.name', '=', '考勤'), ('approve_state', '!=', 'start')] + [('reclaim_state', '=', False), '|', ('approvals_group_id.name', '=', '人力资源'), + ('approvals_group_id.name', '=', '考勤'), ('approve_state', '!=', 'start')] + @@ -357,7 +390,9 @@ ir.actions.act_window soong.workflow.record tree,kanban,search - [('reclaim_state', '=', False), ('approvals_group_id.name', '!=', '人力资源'), ('approvals_group_id.name', '!=', '考勤')] + [('reclaim_state', '=', False), ('approvals_group_id.name', '!=', '人力资源'), + ('approvals_group_id.name', '!=', '考勤')] + {'search_default_my_department_shifts': True,} @@ -366,7 +401,7 @@ ir.actions.act_window soong.workflow.record tree,form,search - + [('reclaim_state', '=', False)] @@ -413,11 +448,11 @@ code action = model.append_date() - - - - - - - + + + + + + + diff --git a/soong_workflow/wizard/soong_workflow_comment_wizard.py b/soong_workflow/wizard/soong_workflow_comment_wizard.py index a49e01257..391adfa06 100644 --- a/soong_workflow/wizard/soong_workflow_comment_wizard.py +++ b/soong_workflow/wizard/soong_workflow_comment_wizard.py @@ -574,13 +574,13 @@ class SoongWorkflowCommentWizard(models.TransientModel): user_log2.write({ 'commit': self.comment, 'approval_state': "2", - 'lase_click_date': current_datetime + timedelta(hours=8), + 'lase_click_date': current_datetime, }) if user_log1: user_log1.write({ 'comment': self.comment, 'approval_state': "2", - 'lase_click_date': current_datetime + timedelta(hours=8), + 'lase_click_date': current_datetime, }) for employee in self.circulated_employee_ids: action_id = self.env['ir.actions.act_window'].search([('res_model', '=', self.res_model)])[0] diff --git a/yuthon_issue/models/issue_approval_decision.py b/yuthon_issue/models/issue_approval_decision.py index fe423ce41..8e964d0a0 100644 --- a/yuthon_issue/models/issue_approval_decision.py +++ b/yuthon_issue/models/issue_approval_decision.py @@ -13,7 +13,7 @@ class IssueApprovalDecision(models.Model): specifics = fields.Text(string='具体事项') by_law = fields.Selection([('yes', '是'), ('no', '否')], string='是否经过法律审核') is_filing = fields.Selection([('yes', '备'), ('no', '否')], string='是否备案') - council_id = fields.Many2one('issue.library.type', string='党总委员会') + council_id = fields.Many2one('issue.library.type', string='党总支') team_meet_id = fields.Many2one('issue.library.type', string='经营班子会') board_meet_id = fields.Many2one('issue.library.type', string='董事会') district_state_id = fields.Many2one('issue.library.type', string="区国资局",) diff --git a/yuthon_issue/models/issue_boss_approval.py b/yuthon_issue/models/issue_boss_approval.py index 64c997d57..3a9bcf7fc 100644 --- a/yuthon_issue/models/issue_boss_approval.py +++ b/yuthon_issue/models/issue_boss_approval.py @@ -29,8 +29,9 @@ class IssueBossApproval(models.Model): for record in self: if record.line_ids: for line in record.line_ids: - line.issue_state = 'will' - + if line.issue_id.is_state_updated == False: + line.issue_id.is_state_updated = True + line.issue_id.issue_state = 'will' class IssueBossApprovalLine(models.Model): _name = 'issue.boss.approval.line' diff --git a/yuthon_issue/models/issue_class_approval.py b/yuthon_issue/models/issue_class_approval.py index 02c159b0b..bc702c3e9 100644 --- a/yuthon_issue/models/issue_class_approval.py +++ b/yuthon_issue/models/issue_class_approval.py @@ -29,7 +29,9 @@ class IssueClassApproval(models.Model): for record in self: if record.line_ids: for line in record.line_ids: - line.issue_state = 'will' + if line.issue_id.is_state_updated == False: + line.issue_id.is_state_updated = True + line.issue_id.issue_state = 'will' class IssueClassApprovalLine(models.Model): _name = 'issue.class.approval.line' diff --git a/yuthon_issue/models/issue_library.py b/yuthon_issue/models/issue_library.py index 4c50530ee..0f50552fe 100644 --- a/yuthon_issue/models/issue_library.py +++ b/yuthon_issue/models/issue_library.py @@ -75,6 +75,8 @@ class IssueLibrary(models.Model): is_push_boss = fields.Boolean(string="董事推送") is_push_depart = fields.Boolean(string="部门推送") + is_state_updated = fields.Boolean(string='状态是否已更新', default=False) + def issue_party_approval(self): issue_active_ids = self.env["issue.library"].browse( self._context.get('active_ids', self._context.get('active_id')) @@ -98,6 +100,35 @@ class IssueLibrary(models.Model): 'view_mode': 'form', 'context': { 'default_state':'申请人', + 'default_name_title': '党总支议题审批', + 'default_line_ids': line_list, + } + } + + def issue_party1_approval(self): + issue_active_ids = self.env["issue.library"].browse( + self._context.get('active_ids', self._context.get('active_id')) + ) + line_list = [] + for record in issue_active_ids: + if record.issue_state != 'to_approval': + raise UserError("该议题状态不能审批") + record.issue_state = 'approval' + line_list.append((0, 0, { + 'issue_id': record.id, + 'name': record.name, + 'will_based': record.will_based, + 'department_id': record.department_id.id, + })) + return { + 'type': 'ir.actions.act_window', + 'name': '党议题审批', + "target": "current", + 'res_model': 'issue.party.approval', + 'view_mode': 'form', + 'context': { + 'default_state':'申请人', + 'default_name_title': '党支部议题审批', 'default_line_ids': line_list, } } @@ -195,7 +226,7 @@ class IssueLibrary(models.Model): continue if record.issue_state in ['will', 'on_meet']: - if record.push_invisible: + if record.push_invisible : record.issue_state = 'on_meet' else: record.issue_state = 'will' @@ -266,9 +297,15 @@ class IssueLibrary(models.Model): if push_update_vals: rec.write(push_update_vals) - rec.write({ - 'issue_state': 'will' - }) + if not rec.is_state_updated: + rec.write({ + 'issue_state': 'to_approval', + }) + else: + rec.write({ + 'issue_state': 'will'} + ) + @api.onchange('is_legal_trial') def _onchange_is_legal_trial(self): @@ -576,7 +613,7 @@ class IssueLibraryLine(models.Model): issue_library_id = fields.Many2one('issue.library') issue_approval_decision_id = fields.Many2one('issue.approval.decision', string="上会依据") - council_id = fields.Many2one(related='issue_approval_decision_id.council_id', string='党总委员会') + council_id = fields.Many2one(related='issue_approval_decision_id.council_id', string='党总支') team_meet_id = fields.Many2one(related='issue_approval_decision_id.team_meet_id', string='经营班子会') board_meet_id = fields.Many2one(related='issue_approval_decision_id.board_meet_id', string='董事会') district_state_id = fields.Many2one(related='issue_approval_decision_id.district_state_id', string="区国资局") diff --git a/yuthon_issue/models/issue_party_approval.py b/yuthon_issue/models/issue_party_approval.py index 85eb0ded8..7dbbbc582 100644 --- a/yuthon_issue/models/issue_party_approval.py +++ b/yuthon_issue/models/issue_party_approval.py @@ -8,7 +8,7 @@ class IssuePartyApproval(models.Model): _description = '党议题审批' _inherit = ['soong.workflow.mixin', 'mail.thread.main.attachment', 'mail.activity.mixin'] - name = fields.Char(string='标题', required=True) + name = fields.Char(string='标题', compute='_compute_name') code = fields.Char(string='编号', required=True, copy=False, default=lambda self: self.env['ir.sequence'].next_by_code('issue_party_approval_code')) urgency_level = fields.Selection([('normal', '普件'), ('urgent', '急件'), ('emergency', '特急件')], string='紧急度', @@ -25,11 +25,19 @@ class IssuePartyApproval(models.Model): name_title = fields.Char(default=_get_default_name_title) self_users_ids = fields.Many2many('res.users', string="当前经办人", default=lambda self: [(6, 0, [self.env.user.id])]) + @api.depends("name_title", "code") + def _compute_name(self): + for record in self: + record.name = record.name_title + " " + record.code + + def end_approval(self): for record in self: if record.line_ids: for line in record.line_ids: - line.issue_state = 'will' + if line.issue_id.is_state_updated == False: + line.issue_id.is_state_updated = True + line.issue_id.issue_state = 'will' class IssuePartyApprovalLine(models.Model): _name = 'issue.party.approval.line' diff --git a/yuthon_issue/views/issue_library_views.xml b/yuthon_issue/views/issue_library_views.xml index 910144c57..69294dac0 100644 --- a/yuthon_issue/views/issue_library_views.xml +++ b/yuthon_issue/views/issue_library_views.xml @@ -36,7 +36,6 @@ - issue.library.tree issue.library @@ -45,9 +44,9 @@ decoration-info="issue_state == 'will'" decoration-success="issue_state == 'done'" decoration-muted="issue_state == 'cancel'"> - - - + + + @@ -70,7 +69,7 @@ - + @@ -200,8 +199,8 @@ - - + + @@ -294,7 +293,37 @@ issue.library.tree issue.library - + + + + + + + + + + + + + + + + + + + + + + + + + + issue.library.tree + issue.library + [('is_push_party', '=', True), ('is_push_depart', '=', True)] diff --git a/yuthon_issue/views/issue_party_approval_views.xml b/yuthon_issue/views/issue_party_approval_views.xml index 7f3146887..02f8c0d40 100644 --- a/yuthon_issue/views/issue_party_approval_views.xml +++ b/yuthon_issue/views/issue_party_approval_views.xml @@ -27,7 +27,7 @@ - + diff --git a/yuthon_notice/controllers/main.py b/yuthon_notice/controllers/main.py index e44836b81..84e24703b 100644 --- a/yuthon_notice/controllers/main.py +++ b/yuthon_notice/controllers/main.py @@ -40,7 +40,7 @@ class YuthonNotice(http.Controller): 'title': data.name, 'code': data.code, 'create_date1': fields.Date.to_string(data.create_date1), - 'notice_text': data.notice_text1, + 'notice_text': data.notice_text1 if data.notice_text1 else ' ', 'documents': documents, 'user_name': data.users_id.name, 'read_number': data.read_number, @@ -55,7 +55,6 @@ class YuthonNotice(http.Controller): @http.route('/yuthon/notice/list', methods=['POST'], type='http', auth='none', csrf=False) def yuthon_notice_list(self, **kwargs): notice_ids = request.env['yuthon.notice'].sudo().search([]) - data_list = [] for notice in notice_ids: result = { @@ -63,6 +62,7 @@ class YuthonNotice(http.Controller): 'create_date1': fields.Date.to_string(notice.create_date1) if notice.create_date1 else None, 'users_id': notice.users_id.name, 'name': notice.name, + 'state': 'no' } data_list.append(result) return json.dumps({'data': data_list, 'code': 200, 'message': 'success'}) diff --git a/yuthon_will_task/controllers/main.py b/yuthon_will_task/controllers/main.py index 70a002f65..7a3983343 100644 --- a/yuthon_will_task/controllers/main.py +++ b/yuthon_will_task/controllers/main.py @@ -73,12 +73,12 @@ class YuthonWillTask(http.Controller): @http.route('/will/task/list', methods=['POST'], type='http', auth='public', csrf=False) def will_task_list(self, **kwargs): - employee_id = kwargs.get('employee_id') + employee_id = request.env['hr.employee'].search([('user_id', '=', int(kwargs.get('users_id')))]) start = kwargs.get('start') request_hour_selection = request.env['yuthon.will.task'].sudo().fields_get(allfields=['request_hour_from'])['request_hour_from']['selection'] result_list = [] - # for task in request.env['yuthon.will.task'].sudo().search(['|', ('employee_ids', 'in', [employee_id]), ('employee_id.id', '=', employee_id)]): - task_ids = request.env['yuthon.will.task'].sudo().search([], offset=start, limit=7) + # task_ids = request.env['yuthon.will.task'].sudo().search([], offset=start, limit=20) + task_ids = request.env['yuthon.will.task'].sudo().search(['|', ('employee_ids', 'in', employee_id.id), ('employee_id.id', '=', employee_id.id)], offset=start, limit=20) for task in task_ids: weekday_str = ["周一", "周二", "周三", "周四", "周五", "周六", "周日"][task.start_date.weekday()] result = { @@ -106,9 +106,7 @@ class YuthonWillTask(http.Controller): def will_task_record(self, **kwargs): task_id = kwargs.get('id') task = request.env['yuthon.will.task'].sudo().search([('id', '=', task_id)]) - request_hour_selection = request.env['yuthon.will.task'].sudo().fields_get(allfields=['request_hour_from'])['request_hour_from'][ - 'selection'] - + request_hour_selection = request.env['yuthon.will.task'].sudo().fields_get(allfields=['request_hour_from'])['request_hour_from']['selection'] file_list = [] pdf = ['application/pdf'] for file in task.document_ids: diff --git a/yuthon_will_task/models/yuthon_will_task.py b/yuthon_will_task/models/yuthon_will_task.py index dfd4db07f..17ff93d1d 100644 --- a/yuthon_will_task/models/yuthon_will_task.py +++ b/yuthon_will_task/models/yuthon_will_task.py @@ -39,7 +39,7 @@ class YuthonWillTask(models.Model): ('23', '23:00'), ('23.25', '23:15'), ('23.5', '23:30'), ('23.75', '23:45')] request_hour_from = fields.Selection(time_list, string='开始时间', default='9') request_hour_to = fields.Selection(time_list, string='结束时间', default='18') - priority = fields.Selection([('important', '重要不紧急'),('urgent', '紧急不重要'), ('very_urgent', '重要且紧急')], string='优先级') + priority = fields.Selection([('important', '重要不紧急'), ('urgent', '紧急不重要'), ('very_urgent', '重要且紧急')], string='优先级') code = fields.Char(string="任务编号", default=lambda self: self.env['ir.sequence'].next_by_code('task_code')) user_id = fields.Many2one('res.users', string="创建人", default=lambda self: self.env.user) company_id = fields.Many2one('res.company', string="公司", default=lambda self: self.env.company) @@ -183,12 +183,12 @@ class YuthonWillTask(models.Model): url=url, btntxt="详细信息") def button_add_comment(self): - for employee_id in self.employee_ids: + for employee_id in self.employee_ids + self.employee_ids2: data_date = '时间:' + str(self.start_date) + '\n' data_name = "事项名称: " + self.name + '\n' data_user_ids = '参与人: ' + ', '.join(self.employee_ids.mapped('name')) + '\n' data_employee_id = ('司机:' + ', '.join(self.employee_ids2.mapped('name')) + '\n') if self.employee_ids2 else '' - data_nota = ('备注:' + self.remarks) if self.remarks else ('') + '\n' + data_nota = ('备注:' + self.remarks + '\n') if self.remarks else ('') + '\n' data = data_date + data_name + data_user_ids + data_nota + data_employee_id url = f'https://phone.thtzjt.com/phone/Schedule/{self.id}/{employee_id.id}' self.sudo().env["wecom.apps"].sync_send_message_textcard(category='task', user_id=employee_id.wecom_userid, diff --git a/yuthon_will_task/views/yuthon_will_task_views.xml b/yuthon_will_task/views/yuthon_will_task_views.xml index ba66cb633..19376888b 100644 --- a/yuthon_will_task/views/yuthon_will_task_views.xml +++ b/yuthon_will_task/views/yuthon_will_task_views.xml @@ -5,29 +5,32 @@ yuthon.will.task - + - - - + + + - - - - - - - - + + + + + + + + @@ -45,96 +48,108 @@ - yuthon.will.task.form - yuthon.will.task - - - - - - - - - + yuthon.will.task.form + yuthon.will.task + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + → + + + + + + - + + + + + + + + + + + + + - + + + - - - - - - - - - - - - - - - → - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + yuthon.will.task.tree2 yuthon.will.task + decoration-success="priority == 'important'" create="false" edit="false" + js_class="custom_task_tree_button" limit="15"> - + - - - + + + - - - - - - + + + + + + @@ -167,10 +182,10 @@ - - - - + + + + @@ -178,12 +193,12 @@ style="max-width: 5rem !important;"/>→ - - - - - + + + + + @@ -196,19 +211,21 @@ - + + - - - - - + + + + + @@ -234,7 +251,7 @@ tree,calendar,form [('users_ids', 'in', [uid])] {'search_default_next_seven_days': 1} - @@ -254,7 +271,9 @@ 领导日程 yuthon.will.task tree,calendar,form - [('user_role_ids.name', 'in', ['董事长', '分管领导', '总经理', '部门副经理', '副总经理', '司机'])] + [('user_role_ids.name', 'in', ['董事长', '分管领导', '总经理', '部门副经理', '副总经理', + '司机'])] + {'search_default_next_seven_days': 1}