Merge pull request !4102 from 李鹏宇/dev
This commit is contained in:
李鹏宇
2025-07-27 08:04:40 +00:00
committed by Gitee
5 changed files with 26 additions and 22 deletions
@@ -108,9 +108,9 @@ patch(FormController.prototype, {
const currentUserId = this.env.services.user.userId;
if (resModel && resId) {
// 1. 判断是否存在 self_users_ids(经办人)字段
if (fields.users_ids) {
const result = await this.orm.read(resModel, [resId], ["users_ids"]);
const selfUsers = result[0]?.users_ids || [];
if (fields.self_users_ids) {
const result = await this.orm.read(resModel, [resId], ["self_users_ids"]);
const selfUsers = result[0]?.self_users_ids || [];
if (!selfUsers.includes(currentUserId)) {
this.buttonState.showEditButton = false;
return; // 如果不是经办人,直接返回
+1 -1
View File
@@ -597,7 +597,7 @@ class HolidaysRequestBatch(models.Model):
@api.depends('users_id')
def _compute_holiday_allowance(self):
for record in self:
reports_id = self.env['yuthon.vacation.reports'].search([('employee_id', '=', record.users_id.employee_id.id)])
reports_id = self.env['yuthon.vacation.reports'].search([('employee_id', '=', record.users_id.employee_id.id)], limit=1)
if reports_id:
leave_hours_str = reports_id.leave.split('小时')[0].strip()
leave_hours = float(leave_hours_str)
@@ -81,7 +81,7 @@ class HrAttendanceMonthDetail(models.Model):
name = fields.Char(related='employee_id.name')
employee_id = fields.Many2one('hr.employee', string="员工", readonly=True)
company_id = fields.Many2one(related="employee_id.company_id", string="公司", store=True)
department_id = fields.Many2one('hr.department', string="部门", related="employee_id.department_id", readonly=True)
department_id = fields.Many2one('hr.department', string="部门", related="employee_id.department_id", readonly=True, store=True)
# userid = fields.Char(string='userid')
attendance_year_id = fields.Many2one('hr.attendance.year', string="统计年份")
current_year = fields.Char(string='统计年份', related="attendance_year_id.year")
@@ -160,7 +160,8 @@ class HrAttendanceMonthDetail(models.Model):
record.with_context(lang=lang)._message_auto_subscribe_notify(partner_ids, 'yuthon_hr_attendance.mail_action_hr_attendance_message')
# 给企业微信发送消息
user_id = record.employee_id.user_id.oauth_uid
url = self.env['ir.config_parameter'].sudo().get_param('web.base.url')
menu_id = self.env['ir.ui.menu'].search([('name', '=', '考勤确认单')])
url = f'https://oa.thtzjt.com/web?login={record.employee_id.user_id.login}&oauth_uid={record.employee_id.wecom_userid}#id={self.id}&cids=2&action={menu_id.action.id}&model={self._name}&view_type=form'
attendance_url = "{0}/my/attendance/month/detail/{1}".format(str(url), str(record.id))
message = '您的{0}年{1}月的考勤已生成 \n <a href=\"{2}\"> 点击查看 </a>'.format(str(record.current_year), str(record.current_month), str(attendance_url))
# self.env['wx.work.api'].sudo().send_text_message(user_id, message)
@@ -248,6 +248,8 @@
<field name="model">hr.attendance.month.detail</field>
<field name="arch" type="xml">
<search>
<field name="employee_id"/>
<field name="department_id"/>
<field name="attendance_year_id"/>
<field name="current_month"/>
<group expand="0" string="Group By">
@@ -57,7 +57,7 @@ class HrPayrollStructure(models.Model):
name_pinyin = pinyin(field_name, style=Style.FIRST_LETTER)
code = "".join([p[0][0] for p in name_pinyin]).upper()
salary_id = self.env['hr.salary.rule'].search(
[('name', '=', field_name), ('struct_id', '=', self.id.origin)], limit=1)
[('name', '=', field_name), ('struct_id', '=', self.id)], limit=1)
if not salary_id:
self.env['hr.salary.rule'].create({
'name': field_name,
@@ -110,15 +110,18 @@ class HrPayrollStructure(models.Model):
def write(self, vals):
result = super(HrPayrollStructure, self).write(vals)
field_mapping = {
'base_salary': '基本工资',
'rank_salary': '职级工资',
'communication_subsidy': '通讯补贴',
'position_salary': '岗位工资'
}
for field, name in field_mapping.items():
if field in vals:
self._handle_salary_rule(name, self[field])
if result:
field_mapping = {
'base_salary': '基本工资',
'rank_salary': '职级工资',
'communication_subsidy': '通讯补贴',
'position_salary': '岗位工资',
'advance_performance_bonuses': '预发绩效奖金' # 补充新增字段
}
for record in self:
for field, name in field_mapping.items():
if field in vals:
record._handle_salary_rule(name, record[field])
return result
def action_yuthon_payroll_wizard(self):
@@ -235,18 +238,16 @@ class HrPayrollStructure(models.Model):
def rank_log_time(self):
"""定时任务:根据日志记录的生效时间更新主模型字段值"""
# 出发一下
today = date.today()
for structure in self.search([]):
for structure in self.env['hr.payroll.structure'].search([('company_id.name', '=', '集团本部')]):
# 获取该职级下所有有效的日志记录
valid_logs = structure.renk_log_ids.filtered(
lambda log: log.is_enable and
log.effective_date and
log.effective_date <= today and
(not log.lapse_date or log.lapse_date >= today)
lambda log: log.is_enable and log.effective_date and log.effective_date <= today and (not log.lapse_date or log.lapse_date >= today)
).sorted(key=lambda l: l.effective_date, reverse=True)
if valid_logs:
latest_log = valid_logs[0]
structure.write({
structure.sudo().write({
'base_salary': latest_log.base_salary,
'rank_salary': latest_log.rank_salary,
'communication_subsidy': latest_log.communication_subsidy,