Files
gzth/yuthon_lessee_service/models/yuthon_lessee_notice.py
T
2024-11-30 19:43:00 +08:00

130 lines
6.1 KiB
Python

from odoo import api, fields, models, tools
from odoo.exceptions import ValidationError, UserError
class YuthonLesseeNotice(models.Model):
_name = "yuthon.lessee.notice"
_description = '物业通知公告'
_inherit = ['mail.thread.main.attachment', 'mail.activity.mixin', 'soong.workflow.mixin']
_rec_name = 'name'
_order = "sequence desc"
name = fields.Char(string='标题')
code = fields.Char(string="编号", default=lambda self: self.env['ir.sequence'].next_by_code('notice_code'))
user_id = fields.Many2one('res.users', string="发布人", default=lambda self: self.env.user)
department_id = fields.Many2one(related='user_id.employee_id.department_id', string="部门")
department_ids = fields.Many2many('hr.department', string='部门范围')
employee_ids = fields.Many2many('hr.employee', string='人员范围')
users_role_ids = fields.Many2many('soong.user.role', string='角色范围', domain=[('user_type', '!=', 'lv_role')])
company_page = fields.Selection([('tz', '天河投资'), ('wg', '天河物管'), ('lc', '天河粮储')], string="公司", compute="_compute_company", store=True)
notice_type_id = fields.Many2one('yuthon.notice.type', string="类型")
create_date = fields.Date(string="发布日期")
start_date = fields.Date(string="生效日期", default=fields.Date.today())
end_date = fields.Date(string="终止日期")
sequence = fields.Integer(string="顺序", default=1, compute='_compute_sequence')
notice_state = fields.Selection([('no', '未发布'), ('yes', '已发布'), ('stop', '已终止')], default='no', string="公告状态")
notice_documents_ids = fields.Many2many('documents.document', string="附件")
is_notice_roger = fields.Selection([('yes', '已读'), ('no', '未读')], default='no', string="确认状态")
is_change_notice = fields.Boolean(string="是否发送通知", default=True)
attn_notice = fields.Html(string="经办人意见")
notice_text = fields.Html(string="正文")
read_number = fields.Integer(string='阅读量', compute="_compute_read_number", store=True)
approval_user_id = fields.Many2one('res.users', string="审核人")
approval_date = fields.Datetime(string="审核日期")
is_sticky = fields.Boolean(string="是否置顶")
@api.depends('user_id')
def _compute_company(self):
for rec in self:
rec.company_page = ''
if rec.department_id:
company = rec.department_id.display_name.split('/')[0][0:4]
if company == '天河投资':
rec.company_page = 'tz'
if company == '天河物管':
rec.company_page = 'wg'
if company == '天河粮储':
rec.company_page = 'lc'
@api.depends('read_number')
def _compute_read_number(self):
notice_confirm_ids = self.env['yuthon.confirm.users'].search([('notice_id.id', '=', self.id), ('state', '=', 'yes')])
for read in self:
if notice_confirm_ids:
read.read_number = len(notice_confirm_ids)
else:
read.read_number = 0
@api.onchange('is_notice_roger')
def onchange_is_notice_roger(self):
roger_id = self.env['yuthon.confirm.users'].search([('notice_id', '=', self.id), ('employee_id', '=', self.env.user.employee_id.id)])
if not roger_id:
self.is_notice_roger = 'yes'
def on_sequence(self):
self.sequence = 1
@api.onchange('is_sticky')
def _compute_sequence(self):
for i in self:
if i.is_sticky:
i.sequence = 1
else:
i.sequence = 0
def no_sequence(self):
self.sequence = 0
def notice_publish(self):
if self.is_change_notice:
users_role_list = department_users_list = []
# 部门人员
for depart in self.department_ids:
department_users_data = self.env['hr.employee'].search([('department_id', '=', depart.id)])
department_users_list = [de.id for de in department_users_data]
# 人员
employee_users_list = self.employee_ids.ids
# 角色人员
for user_id in self.users_role_ids:
department_users_data = self.env['hr.employee'].search([('user_role_id', '=', user_id.id)])
users_role_list = [ro.id for ro in department_users_data]
publish_user_list = department_users_list + employee_users_list + users_role_list
if publish_user_list:
for user in list(set(publish_user_list)):
# 已读
self.env['yuthon.confirm.users'].create({
'notice_id': self.id,
'employee_id': user,
'notice_code': self.code,
'notice_name': self.name,
'state': 'no',
})
# wechat
menu_id = self.env['ir.ui.menu'].search([('name', '=', '我的通知公告')])
str = 'https://www.thtzjt.com/web#id={}&cids=1&menu_id={}&action={}&model=yuthon.notice&view_type=form'.format(
self.id, menu_id.id, menu_id.action.id)
data = "您有新的通知公告请及时确认\n" + "<a href=\"{}\">{}</a>".format(str, self.name)
we_id = self.env['hr.employee'].search([('id', '=', user)]).wecom_userid
self.sudo().env["wecom.apps"].sync_send_message(we_id, data)
self.write({"notice_state": 'yes'})
def look_up_notice_users(self):
return {
"type": "ir.actions.act_window",
"name": "通知公告确认信息",
"domain": [("notice_id", "=", self.id)],
"res_model": "yuthon.confirm.users",
"view_mode": "tree",
"context": {
"search_default_group_state": True,
},
}
def stop_notice(self):
self.write({
'notice_state': 'stop',
'end_date': fields.Date.today(),
})