130 lines
6.1 KiB
Python
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(),
|
|
})
|