92 lines
3.9 KiB
Python
92 lines
3.9 KiB
Python
# -*- coding: utf-8 -*-
|
|
from odoo import models, fields, api, _, SUPERUSER_ID
|
|
from odoo.exceptions import ValidationError, UserError
|
|
import xlrd
|
|
import base64
|
|
import datetime
|
|
from datetime import datetime
|
|
import pandas as pd
|
|
|
|
|
|
class YuthonContractWizard(models.Model):
|
|
_name = 'yuthon.contract.wizard'
|
|
|
|
excel_file = fields.Binary(string="上传Excel表")
|
|
excel_name = fields.Char(string="文件名")
|
|
|
|
def confirm(self):
|
|
"""
|
|
导入excel文件,按行读取数据并处理
|
|
:return: 导入员工信息表并更新
|
|
"""
|
|
if not self.excel_file:
|
|
raise ValidationError('请上传文件。')
|
|
book = xlrd.open_workbook(file_contents=base64.decodebytes(self.excel_file))
|
|
sh = book.sheet_by_index(0)
|
|
for rx in range(4, sh.nrows):
|
|
row = sh.row(rx)
|
|
self.employee_contract_data(row)
|
|
|
|
def employee_contract_data(self,row):
|
|
employee_id = self.env['hr.employee'].search([('name', '=', row[10].value)])
|
|
contract_id = self.env['hr.contract'].search([('employee_id', '=', employee_id.id)])
|
|
structure_type_id = self.env['hr.payroll.structure.type'].search([('name', '=', row[14].value), ('company_id', '=', employee_id.company_id.id)])
|
|
contract_type_id = self.env['hr.contract.type'].search([('name', '=', row[12].value)])
|
|
salary_group_id = self.env['yuthon.salary.group'].search([('name', '=', row[15].value)])
|
|
wage_id = self.env['hr.salary.rule'].search([('struct_id.name', '=', structure_type_id.name),
|
|
('struct_id.company_id', '=', employee_id.company_id.id),
|
|
('name', '=', '基本工资')], limit=1)
|
|
job_id = self.env['hr.job'].search([('name', '=', row[13].value), ('company_id', '=', employee_id.company_id.id)],limit=1)
|
|
department_id = self.env['hr.department'].search([('name', '=', row[11].value), ('company_id', '=', employee_id.company_id.id)],limit=1)
|
|
wage = wage_id.amount_fix
|
|
if not salary_group_id:
|
|
salary_group_id = self.env['yuthon.salary.group'].create({
|
|
'name': row[15].value,
|
|
})
|
|
resource_calendar_id = self.env['resource.calendar'].search([('name', '=', '行政考勤')])
|
|
party_id = self.env['yuthon.party.setting'].search([('party', '=', row[2].value)])
|
|
effective_date = datetime.now().date()
|
|
if row[8].value:
|
|
if type(row[8].value)== float:
|
|
effective_date = pd.to_datetime(row[8].value, unit='d', origin='1899-12-30')
|
|
effective_date = effective_date.date()
|
|
else:
|
|
effective_date = datetime.strptime(row[8].value, '%Y-%m-%d')
|
|
if row[9].value:
|
|
if type(row[9].value)== float:
|
|
expiration_date = pd.to_datetime(row[9].value, unit='d', origin='1899-12-30')
|
|
expiration_date = expiration_date.date()
|
|
else:
|
|
expiration_date = datetime.strptime(row[9].value, '%Y-%m-%d')
|
|
else:
|
|
expiration_date = None
|
|
if party_id:
|
|
party_id.write({
|
|
'representatives': row[3].value,
|
|
'address': row[4].value,
|
|
'economy_type': row[5].value,
|
|
'contact': row[6].value,
|
|
'phone': row[7].value,
|
|
})
|
|
if contract_id and employee_id.name != '肖琼':
|
|
contract_id.sudo().write({
|
|
'party_id': party_id.id,
|
|
'job_id':job_id.id,
|
|
'department_id':department_id.id,
|
|
# 'resource_calendar_id':resource_calendar_id.id,
|
|
'salary_group_id': salary_group_id.id,
|
|
'structure_type_id':structure_type_id.id,
|
|
'contract_type_id':contract_type_id.id,
|
|
'wage':wage,
|
|
'date_start':effective_date,
|
|
'date_end':expiration_date
|
|
})
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|