Files
gzth/yuthon_contract/wizard/yuthon_contract_wizard.py
T
2025-04-09 16:57:31 +08:00

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
})