diff --git a/soong_workflow/wizard/soong_workflow_comment_wizard.py b/soong_workflow/wizard/soong_workflow_comment_wizard.py index 5153737d7..fa5ca635d 100644 --- a/soong_workflow/wizard/soong_workflow_comment_wizard.py +++ b/soong_workflow/wizard/soong_workflow_comment_wizard.py @@ -398,19 +398,47 @@ class SoongWorkflowCommentWizard(models.TransientModel): return record_id.users_id.employee_id return self.env['hr.employee'] # 默认返回空记录集 - def _send_workflow_notifications(self, partners=None): + def _send_workflow_notifications(self, partners=None, user_partner_id=None): """ 通知前端刷新红点、播放音频 - :param partners: 需要通知的用户(res.partner) + :param partners: 需要通知的用户(res.partner),未传则通知所有 + :param user_partner_id: 需要额外通知的 res.partner 记录集(传阅/加签/转交人员) """ if not partners: partners = self.env['res.partner'].search([]) + # 如果传入了额外的通知对象,将其合并进 partners 中(去重) + if user_partner_id: + partners = (partners | user_partner_id) bus_message = {'type': 'wkf_notify'} notifications = [[partner, 'sun_badge_menu.reload_menu_data', [bus_message]] for partner in partners] # self.env["bus.bus"]._sendmany(notifications) # 浏览器叮咚 def add_comment(self): self.ensure_one() - self._send_workflow_notifications() + + # ------------------------------------------------------- + # 收集传阅人员、加签人员、转交人员对应的 res.partner 记录集 + # 用于通知这些人员刷新红点 + # ------------------------------------------------------- + + # 传阅人员(circulated_employee_ids)-> 用户 -> partner + circulated_partners = self.circulated_employee_ids.filtered( + lambda e: e.user_id and e.user_id.partner_id + ).mapped('user_id.partner_id') + + # 加签人员(add_employee_ids)-> 用户 -> partner + add_partners = self.add_employee_ids.filtered( + lambda e: e.user_id and e.user_id.partner_id + ).mapped('user_id.partner_id') + + # 转交人员(employee_ids)-> 用户 -> partner + trans_partners = self.employee_ids.filtered( + lambda e: e.user_id and e.user_id.partner_id + ).mapped('user_id.partner_id') + + # 合并三类人员的 partner,作为 user_partner_id 传入通知方法 + user_partner_id = circulated_partners | add_partners | trans_partners + + self._send_workflow_notifications(user_partner_id=user_partner_id) # 如果选择了常用意见,将使用信息追加到 soong.note 记录 if self.comment_note_id: import pytz diff --git a/yuthon_report/models/receivable_flow_report.py b/yuthon_report/models/receivable_flow_report.py index 08cc703d2..431e9ccb9 100644 --- a/yuthon_report/models/receivable_flow_report.py +++ b/yuthon_report/models/receivable_flow_report.py @@ -72,18 +72,6 @@ class ReceivableFlowReport(models.Model): all_wizards = self.env['penalty.line.wizard'].sudo().search([ ('receivable_id', 'in', rec_ids), ]) - - # 3. 批量查违约金类型的应收账单记录(sudo跳过多公司权限) - penalty_type = self.env['yuthon.management.type'].sudo().search([('name', 'ilike', '违约金')], limit=1) - all_penalty_receivables = self.env['property.accounts.receivable'].sudo().search([ - ('management_type_id', '=', penalty_type.id), - ('rent_id', 'in', [r.rent_id for r in receivables if r.rent_id]), - ]) - # 按 rent_id 分组 - penalty_receivable_map = {} # {rent_id: [receivables]} - for pr in all_penalty_receivables: - if pr.rent_id: - penalty_receivable_map.setdefault(pr.rent_id, []).append(pr) # 按 receivable_id 分组,并预取 pay_line_ids wizard_map = {} # {receivable_id: [wizards]} for wz in all_wizards: @@ -158,7 +146,6 @@ class ReceivableFlowReport(models.Model): "收款日期": "", "收款金额": "", "收款备注": "", - "违约金计算时间": "", "违约金明细": "", "违约金收款时间": "", "违约金收款金额": "", @@ -187,15 +174,6 @@ class ReceivableFlowReport(models.Model): ) penalty_payment_date = latest_penalty_payment[0].date if latest_penalty_payment else None - # 获取违约金计算时间 - penalty_dates = [] - if rec.rent_id: - penalty_recs = penalty_receivable_map.get(rec.rent_id, []) - for penalty_rec in penalty_recs: - if hasattr(penalty_rec, 'charging_range') and penalty_rec.charging_range: - penalty_dates.append(penalty_rec.charging_range) - penalty_date_str = "\n".join(penalty_dates) if penalty_dates else "" - # ==== 应收租金行 ==== rows.append({ "row_type": "主", @@ -222,7 +200,6 @@ class ReceivableFlowReport(models.Model): "收款日期": "", "收款金额": "", "收款备注": "", - "违约金计算时间": penalty_date_str, "违约金明细": { 'model': 'property.accounts.receivable', 'display_name': '违约金明细', @@ -250,7 +227,6 @@ class ReceivableFlowReport(models.Model): "收款日期": ml.reconciliation_date.strftime("%Y-%m-%d") if ml.reconciliation_date else "", "收款金额": round(ml.amount, 2), "收款备注": ml.bank_id.remake if ml.bank_id else "", - "违约金计算时间": "", "违约金明细": "", "违约金收款时间": "", "违约金收款金额": "", diff --git a/yuthon_report/views/receivable_flow_report.xml b/yuthon_report/views/receivable_flow_report.xml index f320bce03..4753f7037 100644 --- a/yuthon_report/views/receivable_flow_report.xml +++ b/yuthon_report/views/receivable_flow_report.xml @@ -24,7 +24,6 @@ {"headerName": "收款日期", "field": "收款日期", "flex": 1}, {"headerName": "收款金额", "field": "收款金额", "flex": 1, "type": "number"}, {"headerName": "收款备注", "field": "收款备注", "flex": 2, "wrapText": true}, - {"headerName": "违约金计算时间", "field": "违约金计算时间", "flex": 2, "wrapText": true}, {"headerName": "违约金明细", "field": "违约金明细", "flex": 1, "cellRenderer": "linkRender"}, {"headerName": "违约金收款时间", "field": "违约金收款时间", "flex": 1}, {"headerName": "违约金收款金额", "field": "违约金收款金额", "flex": 1, "type": "number"}