添加功能

This commit is contained in:
zhou
2025-04-15 19:13:04 +08:00
parent 18a2e095f6
commit 253c22dbe9
14 changed files with 59 additions and 38 deletions
@@ -88,7 +88,7 @@ class SoongWorkflowRecord(models.Model):
record_id = self.env[self.res_model].search([('id', '=', self.res_id)])
for rec in record_id.log_ids:
if rec.approval_state in ['0', '1']:
url = f'https://oa.thtzjt.com/web?oauth_access_token={rec.done_by.employee_id.user_id.oauth_access_token}&oauth_uid={rec.done_by.employee_id.user_id.oauth_uid}#id={self.id}&cids=2&action={record_id.action.id}&model={self.res_model}&view_type=from&menu_id={record_id.id}'
url = f'https://oa.thtzjt.com/web#id={self.id}&cids=2&action={record_id.action.id}&model={self.res_model}&view_type=from&menu_id={record_id.id}'
description = "标题: {}\n".format(record_id.name) + self.env.user.name + ' ' + str(fields.Datetime.now() + timedelta(hours=8))
self.sudo().env["wecom.apps"].sync_send_message_textcard(category='oa', user_id=rec.done_by.employee_id.wecom_userid,
title=record_id._description + '催办传阅/抄送,请尽快处理',
@@ -96,7 +96,7 @@ class SoongWorkflowRecord(models.Model):
btntxt="查看详情")
for rec in record_id.log_ids2:
if rec.approval_state == '0':
url = f'https://oa.thtzjt.com/web?oauth_access_token={rec.done_by.employee_id.user_id.oauth_access_token}&oauth_uid={rec.done_by.employee_id.user_id.oauth_uid}#id={self.id}&cids=2&action={record_id.action.id}&model={self.res_model}&view_type=from&menu_id={record_id.id}'
url = f'https://oa.thtzjt.com/web#id={self.id}&cids=2&action={record_id.action.id}&model={self.res_model}&view_type=from&menu_id={record_id.id}'
description = "标题: {}\n".format(record_id.name) + self.env.user.name + ' ' + str(fields.Datetime.now() + timedelta(hours=8))
self.sudo().env["wecom.apps"].sync_send_message_textcard(category='oa', user_id=rec.done_by.employee_id.wecom_userid,
title=record_id._description + '催办传阅/抄送,请尽快查看',
@@ -19,7 +19,7 @@ class SoongWorkflowCommentWizard(models.TransientModel):
node_btn_id = fields.Many2one(comodel_name="soong.workflow.node.button")
node_btn_name = fields.Char(string="动作名称", related='node_btn_id.name')
user_id = fields.Many2one('res.users',string='用户',default=lambda self: self.env.user)
user_role_id = fields.Many2one('soong.user.role', string="角色", compute='_compute_user_role_id')
user_role_id = fields.Many2one('soong.user.role', string="角色", compute='_compute_user_role_id', store=True)
node_link_len = fields.Char(string="转交2")
is_supervising = fields.Boolean(string="是否督办")
comment_note_id = fields.Many2one('soong.note', string="意见", default='妥否,呈领导审批')
@@ -171,7 +171,7 @@ class SoongWorkflowCommentWizard(models.TransientModel):
"node_btn_id": self.node_btn_id.id,
"approval_state": "0",
})
url = f'https://oa.thtzjt.com/web?oauth_access_token={employee.user_id.oauth_access_token}&oauth_uid={employee.user_id.oauth_uid}#id={self.id}&cids=2&action={record_id.action.id}&model={self.res_model}&view_type=from&menu_id={record_id.id}'
url = f'https://oa.thtzjt.com/web#id={self.id}&cids=2&action={record_id.action.id}&model={self.res_model}&view_type=from&menu_id={record_id.id}'
description = "标题: {}\n".format(record_id.name) + self.env.user.name + ' ' + str(
fields.Datetime.now() + timedelta(hours=8))
self.sudo().env["wecom.apps"].sync_send_message_textcard(category='oa',
@@ -248,7 +248,7 @@ class SoongWorkflowCommentWizard(models.TransientModel):
"node_btn_id": self.node_btn_id.id,
"approval_state": "0",
})
url = f'https://oa.thtzjt.com/web?oauth_access_token={employee.user_id.oauth_access_token}&oauth_uid={employee.user_id.oauth_uid}#id={self.id}&cids=2&action={record_id.action.id}&model={self.res_model}&view_type=from&menu_id={record_id.id}'
url = f'https://oa.thtzjt.com/web#id={self.id}&cids=2&action={record_id.action.id}&model={self.res_model}&view_type=from&menu_id={record_id.id}'
description = "标题: {}\n".format(record_id.name) + self.env.user.name + ' ' + str(
fields.Datetime.now() + timedelta(hours=8))
self.sudo().env["wecom.apps"].sync_send_message_textcard(category='oa',
@@ -265,7 +265,7 @@ class SoongWorkflowCommentWizard(models.TransientModel):
log_ids[-2].write({'approval_state': '1'})
record_id.write({'state': log_ids[-2].name})
for employee in self.employee_ids:
url = f'https://oa.thtzjt.com/web?oauth_access_token={employee.user_id.oauth_access_token}&oauth_uid={employee.user_id.oauth_uid}#id={self.id}&cids=2&action={record_id.action.id}&model={self._name}&view_type=from&menu_id={record_id.id}'
url = f'https://oa.thtzjt.com/web#id={self.id}&cids=2&action={record_id.action.id}&model={self._name}&view_type=from&menu_id={record_id.id}'
self.sudo().env["wecom.apps"].sync_send_message_textcard(category='oa',
user_id=employee.wecom_userid,
title=self._description,
+2 -2
View File
@@ -96,7 +96,7 @@ class HrAttendance(models.Model):
is_early_card += 1
if i.is_no_card:
is_late_card += 1
url = f'https://oa.thtzjt.com/web?oauth_access_token={rec.employee_id.user_id.oauth_access_token}&oauth_uid={rec.employee_id.user_id.oauth_uid}#id={self.id}&cids=2&action={menu_id.action.id}&model=hr.attendance&view_type=from&menu_id={menu_id.id}'
url = f'https://oa.thtzjt.com/web#id={self.id}&cids=2&action={menu_id.action.id}&model=hr.attendance&view_type=from&menu_id={menu_id.id}'
self.sudo().env["wecom.apps"].sync_send_message_textcard(category='att', user_id=rec.employee_id.wecom_userid,
title="打卡异常提醒", description="本月迟到: {}\n本月缺卡: {}\n本月早退: {}\n".format(is_late_card, is_no_card, is_early_card),
url=url, btntxt="详细信息")
@@ -275,7 +275,7 @@ class HrAttendance(models.Model):
employee_ids = self.env['hr.employee'].search([('department_id.name', '=', '办公室')])
menu_id = self.env['ir.ui.menu'].search([('name', '=', '我的异常')])
for employee_id in employee_ids:
url = f'https://oa.thtzjt.com/web?oauth_access_token={employee_id.user_id.oauth_access_token}&oauth_uid={employee_id.user_id.oauth_uid}#id={self.id}&cids=2&action={menu_id.action.id}&model=hr.attendance&view_type=from&menu_id={menu_id.id}'
url = f'https://oa.thtzjt.com/web#id={self.id}&cids=2&action={menu_id.action.id}&model=hr.attendance&view_type=from&menu_id={menu_id.id}'
self.sudo().env["wecom.apps"].sync_send_message_textcard(category='att',
user_id=employee_id.wecom_userid,
title="打卡异常提醒", description="异常提醒",
@@ -381,7 +381,7 @@ class HrAttendanceMonthDetail(models.Model):
def button_put(self):
menu_id = self.env['ir.ui.menu'].search([('name', '=', '考勤确认'), ('parent_id', '!=', False)])
url = f'https://oa.thtzjt.com/web?oauth_access_token={self.employee_id.user_id.oauth_access_token}&oauth_uid={self.employee_id.user_id.oauth_uid}#action={menu_id.action.id}&model=hr.attendance.month.detail&view_type=list&menu_id={menu_id.id}'
url = f'https://oa.thtzjt.com/web#id={self.id}&cids=2&action={menu_id.action.id}&model=hr.attendance.month.detail&view_type=list&menu_id={menu_id.id}'
we_id = self.env['hr.employee'].search([('id', '=', self.employee_id.id)]).wecom_userid
self.sudo().env["wecom.apps"].sync_send_message_textcard(category='default', user_id=we_id, title="考勤确认",
description=self.employee_id.name + '请确认你的考勤:',
@@ -400,7 +400,7 @@ class HrAttendanceMonthDetail(models.Model):
detail_ids = self.env["hr.attendance.month.detail"].browse(self._context.get('active_ids', self._context.get('active_id')))
for detail in detail_ids:
menu_id = self.env['ir.ui.menu'].search([('name', '=', '考勤确认'), ('parent_id', '!=', False)])
url = f'https://oa.thtzjt.com/web?oauth_access_token={detail.employee_id.user_id.oauth_access_token}&oauth_uid={detail.employee_id.user_id.oauth_uid}#action={menu_id.action.id}&model=hr.attendance.month.detail&view_type=list&menu_id={menu_id.id}'
url = f'https://oa.thtzjt.com/web#id={self.id}&cids=2&action={menu_id.action.id}&model=hr.attendance.month.detail&view_type=list&menu_id={menu_id.id}'
we_id = self.env['hr.employee'].search([('id', '=', detail.employee_id)]).wecom_userid
self.sudo().env["wecom.apps"].sync_send_message_textcard(category='attendance', user_id=we_id, title="考勤确认",
description=detail.employee_id.name + '请确认你的考勤:',
@@ -676,7 +676,7 @@ class HrAttendanceMonthDetail(models.Model):
attendance_details = self.env['hr.attendance.month.detail'].search([])
for detail in attendance_details:
menu_id = self.env['ir.ui.menu'].search([('name', '=', '我的确认'), ('parent_id', '!=', False)])
url = f'https://oa.thtzjt.com/web?oauth_access_token={detail.employee_id.user_id.oauth_access_token}&oauth_uid={detail.employee_id.user_id.oauth_uid}#action={menu_id.action.id}&model=hr.attendance.month.detail&view_type=list&menu_id={menu_id.id}'
url = f'https://oa.thtzjt.com/web#id={self.id}&cids=2&#action={menu_id.action.id}&model=hr.attendance.month.detail&view_type=list&menu_id={menu_id.id}'
we_id = self.env['hr.employee'].search([('id', '=', detail.employee_id)]).wecom_userid
self.sudo().env["wecom.apps"].sync_send_message_textcard(category='attendance', user_id=we_id, title="考勤确认",
description=detail .employee_id.name + '请确认你的考勤:',
@@ -17,9 +17,9 @@
<field name="arch" type="xml">
<form>
<sheet>
<header>
<button name="put_time_failure" type="object" string="Approve" class="btn btn-primary"/>
</header>
<!-- <header>-->
<!-- <button name="put_time_failure" type="object" string="Approve" class="btn btn-primary"/>-->
<!-- </header>-->
<widget name="web_ribbon" title="普件" bg_color="text-bg-success"
invisible="urgency_level != 'normal'"/>
<widget name="web_ribbon" title="急件" bg_color="text-bg-warning"
+2 -2
View File
@@ -18,7 +18,7 @@ class YuthonConfirmUsers(models.Model):
for record in self.search([('state', '=', 'no')]):
partner_ids = record.employee_id.user_id.partner_id.id
record.with_context(lang=record.env.lang)._message_auto_subscribe_notify(partner_ids, 'yuthon_notice.message_yuthon_confirm_users_data')
url = f'https://oa.thtzjt.com/web?oauth_access_token={record.employee_id.user_id.oauth_access_token}&oauth_uid={record.employee_id.user_id.oauth_uid}#action={menu_id.action.id}&model=yuthon.notice&view_type=list&menu_id={menu_id.id}'
url = f'https://oa.thtzjt.com/web#id={self.id}&cids=2&action={menu_id.action.id}&model=yuthon.notice&view_type=list&menu_id={menu_id.id}'
self.sudo().env["wecom.apps"].sync_send_message_textcard(category='notice', user_id=record.employee_id.wecom_userid, title="通知公告",
description="您有待确认的通知公告请尽快确认", url=url, btntxt="详细信息")
@@ -29,7 +29,7 @@ class YuthonConfirmUsers(models.Model):
confirm_noice_ids = self.env["yuthon.confirm.users"].browse(self._context.get('active_ids', self._context.get('active_id')))
for rec in confirm_noice_ids:
menu_id = self.env['ir.ui.menu'].search([('name', '=', '我的通知公告')])
url = f'https://oa.thtzjt.com/web?oauth_access_token={rec.employee_id.user_id.oauth_access_token}&oauth_uid={rec.employee_id.user_id.oauth_uid}#action={menu_id.action.id}&model=yuthon.notice&view_type=list&menu_id={menu_id.id}'
url = f'https://oa.thtzjt.com/web#id={self.id}&cids=2&action={menu_id.action.id}&model=yuthon.notice&view_type=list&menu_id={menu_id.id}'
self.sudo().env["wecom.apps"].sync_send_message_textcard(category='notice', user_id=rec.employee_id.wecom_userid,
title="通知公告(催办)", description="您有待确认的通知公告请尽快确认",
url=url, btntxt="详细信息")
+1 -1
View File
@@ -107,7 +107,7 @@ class YuthonNotice(models.Model):
menu_id = self.env['ir.ui.menu'].search([('name', '=', '通知公告'), ('parent_id', '!=', False)])
conf_old = self.env['yuthon.confirm.users'].search([('notice_id', '=', self.id), ('employee_id', 'in', self.users_ids.ids)])
for user_id in self.users_ids:
url = f'https://oa.thtzjt.com/web?oauth_access_token={user_id.oauth_access_token}&oauth_uid={user_id.oauth_uid}#id={self.id}&cids=2&action={menu_id.action.id}&model=yuthon.notice&view_type=from&menu_id={menu_id.id}'
url = f'https://oa.thtzjt.com/web#id={self.id}&cids=2&action={menu_id.action.id}&model=yuthon.notice&view_type=from&menu_id={menu_id.id}'
if conf_old:
for co in conf_old:
co.write({'state': 'no'})
@@ -38,7 +38,7 @@ class PropertyElectricReading(models.Model):
reading_ids = self.env["property.electric.reading"].browse(self._context.get('active_ids', self._context.get('active_id')))
for record in reading_ids:
for employee_id in record.employee_ids:
url = f'https://oa.thtzjt.com/web?oauth_access_token={employee_id.user_id.oauth_access_token}&oauth_uid={employee_id.user_id.oauth_uid}#action={menu_id.action.id}&model=property.electric.reading&view_type=list&menu_id={menu_id.id}'
url = f'https://oa.thtzjt.com/web#id={self.id}&cids=2&action={menu_id.action.id}&model=property.electric.reading&view_type=list&menu_id={menu_id.id}'
we_id = self.env['hr.employee'].search([('id', '=', employee_id)]).wecom_userid
self.sudo().env["wecom.apps"].sync_send_message_textcard(category='notice', user_id=we_id,
title="通知公告",
@@ -39,7 +39,7 @@ class PropertyWaterReading(models.Model):
reading_ids = self.env["property.water.reading"].browse(self._context.get('active_ids', self._context.get('active_id')))
for record in reading_ids:
for employee_id in record.employee_ids:
url = f'https://oa.thtzjt.com/web?oauth_access_token={employee_id.user_id.oauth_access_token}&oauth_uid={employee_id.user_id.oauth_uid}#action={menu_id.action.id}&model=property.water.reading&view_type=list&menu_id={menu_id.id}'
url = f'https://oa.thtzjt.com/web#id={self.id}&cids=2&action={menu_id.action.id}&model=property.water.reading&view_type=list&menu_id={menu_id.id}'
we_id = self.env['hr.employee'].search([('id', '=', employee_id)]).wecom_userid
self.sudo().env["wecom.apps"].sync_send_message_textcard(category='notice', user_id=we_id,
title="通知公告",
@@ -36,7 +36,7 @@ class PropertyTenantLine(models.Model):
class PropertyLeaseContract(models.Model):
_name = 'property.lease.contract'
_description = '租赁合同审批'
# _inherit = ['mail.thread.main.attachment', 'mail.activity.mixin', 'soong.workflow.mixin']
_inherit = ['mail.thread.main.attachment', 'mail.activity.mixin', 'soong.workflow.mixin']
_rec_name = 'contract_code'
name = fields.Char(string='物业信息')
@@ -53,6 +53,7 @@ class PropertyLeaseContract(models.Model):
department_id = fields.Many2one(related='users_id.employee_id.department_id', string="部门")
# 承租方的个人信息
lessee_id = fields.Many2one('property.tenant.information', string='承租方')
lessee_name = fields.Char(related='lessee_id.name', string="承租方姓名")
contact = fields.Char(related='lessee_id.contact', string="联系人")
phone = fields.Char(related='lessee_id.phone', string="联系电话")
email = fields.Char(related='lessee_id.email', string="电子邮箱")
@@ -416,6 +416,7 @@
<field name="rent_company" string="出租方"/>
<field name="company_id" invisible="1"/>
<field name="lessee_id"/>
<field name="lessee_name" invisible="1"/>
<field name="users_id" readonly="1" invisible="1"/>
<field name="department_id" invisible="1"/>
<field name="name"/>
+1 -1
View File
@@ -163,7 +163,7 @@ class InheritHrPayslip(models.Model):
def put_payslip(self):
menu_id = self.env['ir.ui.menu'].search([('name', '=', '工资条'), ('parent_id', '!=', False)])
url = f'https://oa.thtzjt.com/web?oauth_access_token={self.employee_id.user_id.oauth_access_token}&oauth_uid={self.employee_id.user_id.oauth_uid}#action={menu_id.action.id}&model=hr.payslip&view_type=list&menu_id={menu_id.id}'
url = f'https://oa.thtzjt.com/web#id={self.id}&cids=2&action={menu_id.action.id}&model=hr.payslip&view_type=list&menu_id={menu_id.id}'
we_id = self.env['hr.employee'].search([('id', '=', self.employee_id)]).wecom_userid
self.sudo().env["wecom.apps"].sync_send_message_textcard(category='payslip', user_id=we_id, title="薪资确认",
description=self.employee_id.name + '请确认你的薪资:',
+3 -3
View File
@@ -17,6 +17,7 @@ class YuthonWillTask(models.Model):
priority = fields.Selection([('general', '不紧急不重要'), ('important', '重要不紧急'),
('urgent', '紧急不重要'), ('very_urgent', '重要且紧急')], string='优先级')
task_type = fields.Many2one('task.type.setting', string='任务类型')
user_id = fields.Many2one('res.users', string="创建人", default=lambda self: self.env.user)
task_content = fields.Text(string='任务内容')
remarks = fields.Text(string='备注')
creation_time = fields.Date(string='创建时间', default=fields.Date.today())
@@ -95,8 +96,7 @@ class YuthonWillTask(models.Model):
if not employee_id.wecom_userid:
raise UserError("请同步{}的企业微信".format(employee_id.name))
menu_id = self.env['ir.ui.menu'].search([('name', '=', '我的日程')])
url = f'https://oa.thtzjt.com/web?oauth_access_token={employee_id.user_id.oauth_access_token}&oauth_uid={employee_id.user_id.oauth_uid}#action={menu_id.action.id}&model=yuthon.will.task&view_type=list&menu_id={menu_id.id}'
# url = f'http://82.156.218.102:8057/web?oauth_access_token={employee_id.user_id.oauth_access_token}&oauth_uid={employee_id.user_id.oauth_uid}#action={menu_id.action.id}&model=yuthon.will.task&view_type=list&menu_id={menu_id.id}'
url = f'https://oa.thtzjt.com/web#id={self.id}&cids=2&action={menu_id.action.id}&model=yuthon.will.task&view_type=form&menu_id={menu_id.id}'
data_name = "事项名称: " + self.task_content + '\n'
data_start_time = '开始时间:' + str(self.start_time + timedelta(hours=8)) + '\n'
data_user_ids = '参与人: ' + ', '.join(self.employee_ids.mapped('name')) + '\n'
@@ -129,7 +129,7 @@ class YuthonWillTask(models.Model):
if not employee_id.wecom_userid:
raise UserError("请同步{}的企业微信".format(employee_id.name))
menu_id = self.env['ir.ui.menu'].search([('name', '=', '我的日程')])
url = f'https://oa.thtzjt.com/web?oauth_access_token={employee_id.user_id.oauth_access_token}&oauth_uid={employee_id.user_id.oauth_uid}#action={menu_id.action.id}&model=yuthon.will.task&view_type=list&menu_id={menu_id.id}'
url = f'https://oa.thtzjt.com/web#id={self.id}&cids=2&action={menu_id.action.id}&model=yuthon.will.task&view_type=list&menu_id={menu_id.id}'
self.sudo().env["wecom.apps"].sync_send_message_textcard(category='task', user_id=employee_id.wecom_userid,
title="日程事项提醒", description="事项名称: " + self.task_content + '\t' + '该事项已取消',
url=url, btntxt="详细信息")
@@ -47,23 +47,42 @@
<field name="arch" type="xml">
<form string="日程" create="0">
<sheet>
<group>
<group>
<field name="employee_ids" widget="many2many_tags" options="{'no_create': True}"/>
<field name='employee_ids2' widget="many2many_tags" domain="[('user_role_ids.name', 'in', ['司机'])]"/>
<div class="oe_title">
<label for="task_content"/>
<h1>
<field name="task_content" required="1"/>
<field name='users_ids' widget="many2many_tags" invisible="1"/>
<field name="task_type"/>
<field name="remarks"/>
<field name="creation_time" invisible="1"/>
</group>
<group>
<field name="priority"/>
<field name="start_time"/>
<field name="end_time"/>
<field name="task_time_ids" widget="many2many_tags" required="1"/>
</h1>
</div>
<group col="2">
<group>
<field name="start_time"/>
</group>
<group>
<field name="end_time"/>
</group>
</group>
<group>
<field name="user_id" invisible="1"/>
<field name="employee_ids" widget="many2many_tags" options="{'no_create': True}"/>
<field name='employee_ids2' widget="many2many_tags" domain="[('user_role_ids.name', 'in', ['司机'])]"/>
<field name="task_content" required="1"/>
<field name="remarks"/>
<field name='users_ids' widget="many2many_tags" invisible="1"/>
<field name="task_type"/>
<field name="remarks"/>
<field name="creation_time" invisible="1"/>
</group>
<group col="3">
<group>
<field name="task_type"/>
</group>
<group>
<field name="priority"/>
</group>
<group>
<field name="task_time_ids" widget="many2many_tags" required="1"/>
</group>
</group>
</sheet>
</form>
</field>