Merge pull request !1030 from 李鹏宇/dev
This commit is contained in:
李鹏宇
2025-01-01 09:09:17 +00:00
committed by Gitee
10 changed files with 93 additions and 61 deletions
@@ -13,7 +13,9 @@ class ResGroups(models.Model):
def users_unlink(self):
users_to_unlink = self.users.filtered(lambda user: user.name != 'Administrator')
users_to_unlink2 = self.users.filtered(lambda user: user.name != '叶华峰')
self.write({'users': [(3, user.id) for user in users_to_unlink]})
self.write({'users': [(3, user.id) for user in users_to_unlink2]})
self.write({'users_ids': [(5, 0, 0)]})
self.write({'employee_ids': [(5, 0, 0)]})
@@ -43,9 +43,8 @@ class YuthonHrEmployee(models.Model):
# 个人信息
user_salary = fields.Float(string="基本工资")
job_lv_salary = fields.Float(string="职级工资")
entry_date = fields.Date(string="入职时间")
confirmation_date = fields.Date(string="转正时间")
company_old = fields.Char(string="司龄", compute='_compute_company_old')
# entry_date = fields.Date(string="入职时间")
user_sex = fields.Selection([('girl', '女'), ('boy', '男')], string="性别")
user_state = fields.Selection([('in', '在职'), ('leave', '离职'), ('withdraw', '退休'), ('borrow', '借调'),
('expatriate', '外派'), ('adjunct', '在职(兼职)')],
@@ -68,8 +67,8 @@ class YuthonHrEmployee(models.Model):
('part_time', '外地农业'), ('practice', '外地非农业')], string="户籍类型")
duty_replacement_card = fields.Integer(string="值班补卡次数(月)")
# 工作信息
# new_start_contract_data = fields.Date(string="合同开始日期")
# new_end_contract_data = fields.Date(string="合同终止日期")
confirmation_date = fields.Date(string="转正时间")
company_old = fields.Char(string="司龄", compute='_compute_company_old')
open_start_time = fields.Date(string="参加工作时间")
social_insurance_date = fields.Date(string="缴纳社保日期")
social_insurance_time = fields.Char(string="社保时长", compute='_compute_social_insurance_info', store=True)
@@ -228,15 +227,15 @@ class YuthonHrEmployee(models.Model):
"target": "new",
}
@api.depends('entry_date')
@api.depends('open_start_time')
def _compute_company_old(self):
"""司龄计算"""
for record in self:
if record.entry_date:
if record.open_start_time:
today = datetime.now().date()
years_diff = today.year - record.entry_date.year
months_diff = today.month - record.entry_date.month
if today.month < record.entry_date.month:
years_diff = today.year - record.open_start_time.year
months_diff = today.month - record.open_start_time.month
if today.month < record.open_start_time.month:
years_diff -= 1
months_diff += 12
record.company_old = str(years_diff) + '年' + str(months_diff) + '月'
@@ -57,9 +57,7 @@
<field name="job_lv_salary"/>
<field name="bank_account_id" context="{'default_partner_id': work_contact_id}"
options="{'no_quick_create': True}" readonly="not id"/>
<field name="entry_date"/>
<field name="confirmation_date"/>
<field name="company_old"/>
</group>
<group string="基本信息">
<field name="identification_id"/>
@@ -114,8 +112,8 @@
</xpath>
<xpath expr="//group[@name='active_group']" position="after">
<group string="工作信息">
<!-- <field name="new_start_contract_data"/>-->
<!-- <field name="new_end_contract_data"/>-->
<field name="confirmation_date"/>
<field name="company_old"/>
<field name="open_start_time"/>
<field name="social_insurance_date"/>
<field name="compute_month" invisible="1"/>
@@ -213,7 +211,7 @@
<attribute name="optional">hide</attribute>
</xpath>
<xpath expr="//field[@name='name']" position="after">
<field name="company_old"/>
<field name="company_old"/>
</xpath>
<xpath expr="//field[@name='parent_id']" position="attributes">
<attribute name="string">上级单位</attribute>
@@ -223,7 +221,6 @@
<field name="yuthon_company" optional="hide"/>
<field name="use_user_type"/>
<field name="user_number" optional="hide"/>
<field name="entry_date"/>
<field name="mobile_phone"/>
<field name="confirmation_date" optional="hide"/>
<field name="user_number_start_time" optional="hide"/>
@@ -235,7 +232,7 @@
<field name="retire_years" optional="hide"/>
<field name="political_aspects" optional="hide"/>
<field name="dang_data" optional="hide"/>
<!-- <field name="new_start_contract_data" optional="hide"/>-->
<!-- <field name="new_start_contract_data" optional="hide"/>-->
<field name="open_start_time" optional="hide"/>
<field name="interrupt_work_month" optional="hide"/>
<field name="cumulative_work_month" optional="hide"/>
@@ -255,15 +252,15 @@
</field>
</record>
<record id="view_employee_inherit_filter" model="ir.ui.view">
<field name="name">hr.employee.inherit.search</field>
<field name="model">hr.employee</field>
<field name="inherit_id" ref="hr.view_employee_filter"/>
<field name="arch" type="xml">
<xpath expr="//field[@name='job_id']" position="after">
<field name="pinyin_name"/>
<field name="pinyin_min"/>
</xpath>
</field>
<field name="name">hr.employee.inherit.search</field>
<field name="model">hr.employee</field>
<field name="inherit_id" ref="hr.view_employee_filter"/>
<field name="arch" type="xml">
<xpath expr="//field[@name='job_id']" position="after">
<field name="pinyin_name"/>
<field name="pinyin_min"/>
</xpath>
</field>
</record>
<record id="all_data_write_user" model="ir.actions.server">
<field name="name">批量更新员工</field>
+32 -25
View File
@@ -5,6 +5,7 @@ import xlrd
import base64
import datetime
from datetime import datetime
import pandas as pd
class YuthonHrEmployeeWizard(models.Model):
@@ -22,8 +23,6 @@ class YuthonHrEmployeeWizard(models.Model):
raise ValidationError('请上传文件。')
book = xlrd.open_workbook(file_contents=base64.decodebytes(self.excel_file))
sh = book.sheet_by_index(0)
# sh2 = book.sheet_by_index(1)
# sh3 = book.sheet_by_index(2)
for rx in range(2, sh.nrows):
row = sh.row(rx)
self.employee_user_data(row)
@@ -34,8 +33,16 @@ class YuthonHrEmployeeWizard(models.Model):
'res_model': 'hr.employee',
}
def employee_user_data(self,row):
employee_name = self.env['hr.employee'].search([('name', '=', row[2].value)])
def employee_user_data(self, row):
employee_name = self.env['hr.employee'].search([('name', '=', row[0].value)])
date1 = pd.to_datetime(row[1].value, unit='d', origin='1899-12-30')
month2 = row[2].value
employee_date = {
'open_start_time': date1,
'interrupt_work_month': month2,
}
if employee_name:
employee_name.write(employee_date)
# text = row[1].value
# text = text.replace('\\', '')
# if department_ids:
@@ -58,25 +65,25 @@ class YuthonHrEmployeeWizard(models.Model):
# if not role_id:
# role_id = user_role_id.create({'name': i})
# role_list.append(role_id.id)
use_user_type_dict = {'正式合同': 'formal_one', '劳务协议': 'labor', '正式合同(二签)': 'formal_two', '正式合同(无固定)': 'formal_none',
'兼职协议':'part_time','用工协议': 'employment','实习协议': 'internship'}
user_role_id = self.env['soong.user.role'].search([('name', '=', row[3].value)], limit=1)
job_id = self.env['hr.job'].search([('name', '=', row[4].value)])
parent_id = self.env['hr.employee'].search([('name', '=', row[6].value)])
entry_date = row[17].value
if entry_date:
if type(entry_date) == float:
entry_date = datetime.fromtimestamp(entry_date)
else:
entry_date = datetime.strptime(entry_date, '%Y-%m-%d')
card = row[20].value if row[20].value else None
phone = row[21].value if row[21].value else None
employee_date = {
'identification_id':card,
'entry_date':entry_date,
'mobile_phone':phone,
}
# use_user_type_dict = {'正式合同': 'formal_one', '劳务协议': 'labor', '正式合同(二签)': 'formal_two', '正式合同(无固定)': 'formal_none',
# '兼职协议': 'part_time', '用工协议': 'employment', '实习协议': 'internship'}
#
# user_role_id = self.env['soong.user.role'].search([('name', '=', row[3].value)], limit=1)
# job_id = self.env['hr.job'].search([('name', '=', row[4].value)])
# parent_id = self.env['hr.employee'].search([('name', '=', row[6].value)])
# open_start_time = row[17].value
# if open_start_time:
# if type(open_start_time) == float:
# entry_date = datetime.fromtimestamp(open_start_time)
# else:
# entry_date = datetime.strptime(open_start_time, '%Y-%m-%d')
# card = row[20].value if row[20].value else None
# phone = row[21].value if row[21].value else None
# employee_date = {
# 'identification_id':card,
# 'open_start_time':entry_date,
# 'mobile_phone':phone,
# }
# employee_data = {
# 'use_user_type': use_user_type if use_user_type else None, # 用工形式
@@ -103,8 +110,8 @@ class YuthonHrEmployeeWizard(models.Model):
# 'work_phone': int(row[7].value) if row[7].value else None, # 办公电话
# 'user_number': row[3].value if row[3].value else None, # 员工编号
# }
if employee_name:
employee_name.write(employee_date)
# if employee_name:
# employee_name.write(employee_date)
#
# # 处理
# for rx in range(1, sh2.nrows):
@@ -17,7 +17,7 @@ class YuthonLeavingApproval(models.Model):
job_id = fields.Many2one(related='users_id.employee_id.job_id', string="主岗")
duties = fields.Char(string="职务")
job_type_id = fields.Many2one('hr.job.type', string="岗位类别")
onboarding_date = fields.Date(related='users_id.employee_id.entry_date',string="入职日期")
onboarding_date = fields.Date(related='users_id.employee_id.open_start_time',string="入职日期")
end_of_contract = fields.Date(string="合同结束日期")
expected_departure_date = fields.Date(string="预计离职日期")
parent_id = fields.Many2one(related='users_id.employee_id.parent_id', string="直线上级")
@@ -18,7 +18,7 @@ class YuthonReassignmentApproval(models.Model):
duties = fields.Char(string="职务")
job_type_id = fields.Many2one('hr.job.type', string="岗位类别")
onboarding_date = fields.Date(string="任职日期")
end_of_contract = fields.Date(related='users_id.employee_id.entry_date',string="入职日期")
end_of_contract = fields.Date(related='users_id.employee_id.open_start_time',string="入职日期")
parent_id = fields.Many2one(related='users_id.employee_id.parent_id', string="直线上级")
business_superior_id = fields.Many2one("hr.employee", string="业务上级")
place_of_work = fields.Char(string="工作地点")
@@ -17,7 +17,7 @@ class YuthonRegularizationPrepareApproval(models.Model):
yuthon_company = fields.Selection([('thtz', '天河投资集团'), ('thwg', '天河物管'),
('thlc', '天河粮储')], string="任职单位")
job_type_id = fields.Many2one('hr.job.type', string="岗位类别")
onboarding_time = fields.Date(related='users_id.employee_id.entry_date',string="入职日期")
onboarding_time = fields.Date(related='users_id.employee_id.open_start_time',string="入职日期")
trial_end_date = fields.Date(string="试用期结束日期")
parent_id = fields.Many2one(related='users_id.employee_id.parent_id',string="直线上级")
business_leader = fields.Char(string="业务线上级")
+3 -3
View File
@@ -200,21 +200,21 @@
<menuitem
id="yuthon_notice_menu2"
parent="yuthon_notice_menu_config_root"
name="领导日程(集团本部)"
name="领导公告(集团本部)"
action="approval_notice_action3"
groups="yuthon_notice.group_tz_notice_topic"
sequence="3"/>
<menuitem
id="yuthon_notice_menu3"
parent="yuthon_notice_menu_config_root"
name="领导日程(粮储公司)"
name="领导公告(粮储公司)"
action="approval_notice_action4"
groups="yuthon_notice.group_lc_notice_topic"
sequence="5"/>
<menuitem
id="yuthon_notice_menu4"
parent="yuthon_notice_menu_config_root"
name="领导日程(物管公司)"
name="领导公告(物管公司)"
action="approval_notice_action5"
groups="yuthon_notice.group_wg_notice_topic"
sequence="7"/>
+28 -3
View File
@@ -27,6 +27,7 @@ class YuthonWillTask(models.Model):
yuthon_company = fields.Selection([('thtz', '天河投资集团'), ('thwg', '天河物管'), ('thlc', '天河粮储')], string='所属公司')
start_time = fields.Datetime(string='开始时间', default=fields.Date.today())
end_time = fields.Datetime(string='结束时间', default=lambda self: datetime.combine(datetime.now().date(), time(11, 0, 0)))
state = fields.Selection([('will', '待办'), ('done', '已办'), ('cancel', '取消')], string='状态')
@api.onchange('employee_ids')
def onchange_employee_ids(self):
@@ -38,8 +39,10 @@ class YuthonWillTask(models.Model):
task.user_role_ids = roles
def will_task_time(self):
tasks = self.env['yuthon.will.task'].search([])
for task in tasks:
for i in self.search([('state', '!=', 'cancel')]):
if datetime.now() + timedelta(hours=8) > self.start_time:
i.write({'state', 'done'})
for task in self.search([('state', '=', 'will')]):
now = datetime.now() + timedelta(hours=8)
start_time = task.start_time + timedelta(hours=8)
_logger.info("定时任务执行中")
@@ -82,7 +85,6 @@ class YuthonWillTask(models.Model):
record.with_context(lang=record.env.lang)._message_auto_subscribe_notify(partner_ids,'yuthon_will_task.mail_action_yuthon_will_task_add_comment')
def button_add_comment(self):
self.ensure_one()
self.add_comment()
return {
'type': 'ir.actions.client',
@@ -92,4 +94,27 @@ class YuthonWillTask(models.Model):
'message': '已发送提醒消息',
'sticky': False,
}
}
def button_add_comment_cancel(self):
self.add_comment()
for employee_id in self.employee_ids:
if not employee_id.wecom_userid:
raise UserError("请同步{}的企业微信".format(employee_id.name))
url = "https://oa.thtzjt.com/mail/view?model={}&res_id={}".format(self._name, self.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="详细信息")
for record in self:
partner_ids = record.employee_ids.user_id.partner_id.ids
record.with_context(lang=record.env.lang)._message_auto_subscribe_notify(partner_ids, 'yuthon_will_task.mail_action_yuthon_will_task_add_comment')
self.write({'state': 'cancel'})
return {
'type': 'ir.actions.client',
'tag': 'display_notification',
'params': {
'type': 'success',
'message': '已发送取消提醒消息',
'sticky': False,
}
}
@@ -20,7 +20,9 @@
<field name='users_ids' widget="many2many_tags" optional="hide"/>
<field name='user_role_ids' widget="many2many_tags" optional="hide"/>
<field name='yuthon_company' optional="hide"/>
<field name='state'/>
<button name="button_add_comment" string="提醒" type="object" class="oe_highlight"/>
<button name="button_add_comment_cancel" string="取消" type="object" class="oe_highlight"/>
</tree>
</field>
</record>