@@ -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>
|
||||
|
||||
@@ -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="业务线上级")
|
||||
|
||||
@@ -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"/>
|
||||
|
||||
@@ -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>
|
||||
|
||||
Reference in New Issue
Block a user