# -*- coding: utf-8 -*-
from openerp import tools
import time
import datetime
import math
from dateutil import relativedelta
from openerp import SUPERUSER_ID
from openerp.osv import osv, fields
from openerp.tools.translate import _
from openerp import api, tools
import openerp.addons.decimal_precision as dp
from openerp.tools.safe_eval import safe_eval as eval
from datetime import timedelta
class hr_salary_rule_category(osv.osv):
_inherit='hr.salary.rule.category'
_rec_name="code"
# 主键约束
_sql_constraints=[
('name_uniq','unique(code)',u'编码已存在,请重新录入!'),
]
class hr_salary_rule(osv.osv):
_inherit='hr.salary.rule'
_rec_name="code"
# 主键约束
_sql_constraints=[
('name_uniq','unique(code)',u'编码已存在,请重新录入!'),
]
class hr_payroll_structure(osv.osv):
_inherit='hr.payroll.structure'
# 主键约束
_sql_constraints=[
('name_uniq','unique(code)',u'编码已存在,请重新录入!'),
]
class hr_payroll_structure(osv.osv):
_inherit='hr.payroll.structure'
_columns={
'rule_ids':fields.many2many('hr.salary.rule', 'hr_structure_salary_rule_rel', 'struct_id', 'rule_id', 'Salary Rules'),
}
class xwage_change(osv.osv):
_name='xwage.change'
_description=u'工资变动'# 对象名
_columns={
'xwage_num':fields.char(u'工资变动单',readonly=True),
'xwage_company':fields.many2one('res.company',u'公司',),
'xcompany_name':fields.char(u'公司名称',),
'xwage_employee':fields.many2one('hr.employee',u'员工'),
'xemployee_name':fields.char(u'员工名称'),
'xreg_date':fields.date(u'登记日期',readonly=True),
'xeffective_date':fields.date(u'生效日期',readonly=True),
'xwage_sta':fields.selection([('1',u'草稿'),('2',u'待确认'),('3',u'待生效'),('4',u'已生效')],u'是否生效',readonly=True),
'xwage_change0':fields.one2many('xwage.change.old','change_old',u'对应子表'),
'rule_ids':fields.many2many('hr.salary.rule', 'xwage_change_rule_rel', 'struct_id', 'rule_id', 'Salary Rules'),
'struct_id': fields.many2one('hr.payroll.structure', u'结构'),
'date_from': fields.date(u'开始日期', required=True),
'date_to': fields.date(u'结束日期',required=True),
'contract_id': fields.many2one('hr.contract', u'合同', required=True),
}
_defaults={
'xreg_date':datetime.datetime.now(),
'xwage_sta':'1',
'date_from': lambda *a: time.strftime('%Y-%m-01'),
'date_to': lambda *a: str(datetime.datetime.now() + relativedelta.relativedelta(months=+1, day=1, days=-1))[:10],
}
_rec_name="xwage_num"
def onchange_xwage_company(self, cr, uid, ids, xwage_employee, context=None):
res = {}
if xwage_employee:
pdocbg = self.pool.get('res.company').browse(cr, uid, xwage_employee ,context=context)
res['xcompany_name'] = pdocbg.name
return{'value':res}
# 重写新建函数,生成流水号
def create_sequence(self, cr, uid, vals, context=None):
""" 创建序列号
"""
seq = {
'name': vals['prefix'],
'implementation': 'no_gap',
'prefix': vals['prefix'],
'padding': 3,
'number_increment': 1
}
if 'company_id' in vals:
seq['company_id'] = vals['company_id']
yseq_id = self.pool.get('ir.sequence').search(cr, uid, [('name', '=', seq['name'])])
yflg = 0
for rec in self.pool.get('ir.sequence').browse(cr, uid, yseq_id):
yflg = 1
break
if yflg:
return self.pool.get('ir.sequence').browse(cr, uid, yseq_id[0]).id
else:
return self.pool.get('ir.sequence').create(cr, uid, seq)
#重置创建函数添加一条新数据
def create(self, cr, uid, vals, context=None):
if not 'sequence_id' in vals or not vals['sequence_id']:
# 如果没有序列号,则新建
prefix ="GZBD"+str(datetime.datetime.now().strftime('%y'))+str(datetime.datetime.now().strftime('%m'))
vals.update({'prefix':prefix})
vals.update({'sequence_id': self.create_sequence(cr, SUPERUSER_ID, vals, context)})
# 获取流水号
vals['xwage_num'] = self.pool.get('ir.sequence').get_id(cr, SUPERUSER_ID, vals['sequence_id'])
return super(xwage_change, self).create(cr, uid, vals, context)
def but_check(self, cr, uid, ids, context=None):
lan= self.browse(cr, uid, ids, context)
x=0
for ll in lan.rule_ids:
for lp in ll:
x=1
if x==1:
self.write(cr, uid, ids, {"xwage_sta": '3'}, context=context)
#获取工资变动后的信息
lcn=lan.struct_id #结构ID
cr.execute("""DELETE FROM hr_structure_salary_rule_rel where struct_id= %s """,(lcn.id,))
for xa in lan.rule_ids:
for xb in xa:
code=xb.id #工资规则编码
#获取当前工资结构的明细ID
cr.execute("""INSERT INTO hr_structure_salary_rule_rel(struct_id, rule_id) VALUES (%s, %s)""",(lcn.id,code))
else:
raise osv.except_osv(u"警告:" ,u"工资结构无任何变动信息!")
return True
def but_queren(self, cr, uid, ids, context=None):
self.write(cr, uid, ids, {"xeffective_date": datetime.datetime.now()}, context=context)
self.write(cr, uid, ids, {"xwage_sta": '4'}, context=context)
def onchange_employee_id(self, cr, uid, ids, date_from, date_to,xwage_employee=False, contract_id=False, context=None):
empolyee_obj = self.pool.get('hr.employee')
contract_obj = self.pool.get('hr.contract')
input_obj = self.pool.get('hr.payslip.input')
#defaults
res = {'value':{ 'contract_id': False,'struct_id': False}}
if (not xwage_employee) or (not date_from) or (not date_to):
return res
xemployee_name = empolyee_obj.browse(cr, uid,xwage_employee, context=context)
res['value'].update({'xemployee_name': xemployee_name.name})
if contract_id:
#set the list of contract for which the input have to be filled
contract_ids = [contract_id]
else:
#if we don't give the contract, then the input to fill should be for all current contracts of the employee
contract_ids = self.get_contract(cr, uid,xwage_employee, date_from, date_to, context=context)
if not contract_ids:
return res
contract_record = contract_obj.browse(cr, uid, contract_ids[0], context=context)
res['value'].update({
'contract_id': contract_record and contract_record.id or False
})
struct_record = contract_record and contract_record.struct_id or False
if not struct_record:
return res
res['value'].update({
'struct_id': struct_record.id,
})
return res
def get_contract(self, cr, uid, employee, date_from, date_to, context=None):
"""
@param employee: browse record of employee
@param date_from: date field
@param date_to: date field
@return: returns the ids of all the contracts for the given employee that need to be considered for the given dates
"""
contract_obj = self.pool.get('hr.contract')
clause = []
#a contract is valid if it ends between the given dates
clause_1 = ['&',('date_end', '<=', date_to),('date_end','>=', date_from)]
#OR if it starts between the given dates
clause_2 = ['&',('date_start', '<=', date_to),('date_start','>=', date_from)]
#OR if it starts before the date_from and finish after the date_end (or never finish)
clause_3 = ['&',('date_start','<=', date_from),'|',('date_end', '=', False),('date_end','>=', date_to)]
clause_final = [('employee_id', '=', employee),'|','|'] + clause_1 + clause_2 + clause_3
contract_ids = contract_obj.search(cr, uid, clause_final, context=context)
return contract_ids
def onchange_contract_id(self, cr, uid, ids, date_from, date_to,xwage_employee=False, contract_id=False, context=None):
#TODO it seems to be the mess in the onchanges, we should have onchange_employee => onchange_contract => doing all the things
res = {'value':{
}
}
context = dict(context or {}, contract=True)
if not contract_id:
res['value'].update({'struct_id': False})
return self.onchange_employee_id(cr, uid, ids, date_from=date_fr
没有合适的资源?快使用搜索试试~ 我知道了~
人事管理系统
共171个文件
bak:64个
pyc:36个
xml:35个
需积分: 50 49 下载量 100 浏览量
2016-12-26
11:32:55
上传
评论 2
收藏 223KB ZIP 举报
温馨提示
员工信息、合同、工资
资源推荐
资源详情
资源评论
收起资源包目录
人事管理系统 (171个子文件)
xhr_compensation.py.bak 17KB
xhr_resources.py.bak 17KB
xhr_personnel_view.xml.bak 14KB
xhr_personnel.py.bak 8KB
xhr_compensation_view.xml.bak 8KB
xhr_salary.py.bak 7KB
xhr_overtimeentry.py.bak 7KB
hr_holidays_workflow.xml.bak 6KB
xhr_station.py.bak 6KB
xhr_department_view.xml.bak 6KB
xhr_reception.py.bak 5KB
xhr_jobs_view.xml.bak 5KB
xhr_registration.py.bak 5KB
xhr_outcome.py.bak 5KB
xhr_award.py.bak 5KB
xhr_resign.py.bak 5KB
xhr_return.py.bak 5KB
xhr_training.py.bak 4KB
xhr_probation.py.bak 4KB
xhr_registration_view.xml.bak 4KB
xhr_path_view.xml.bak 4KB
xhr_reception_view.xml.bak 4KB
xhr_salary_view.xml.bak 3KB
xhr_resources.xml.bak 3KB
xhr_return_view.xml.bak 3KB
xrestore.py.bak 3KB
xrestore.py.bak 3KB
xregister.py.bak 3KB
xregister.py.bak 3KB
xhr_leaveapproveundefined_view.xml.bak 3KB
xhr_overtimeentry_view.xml.bak 3KB
xhr_undefined_view.xml.bak 3KB
xhr_outcome_view.xml.bak 3KB
xhr_training_view.xml.bak 3KB
xhr_contract.py.bak 3KB
__openerp__.py.bak 3KB
xhr_award_view.xml.bak 2KB
xhr_station_view.xml.bak 2KB
xhr_undefined.py.bak 2KB
xhr_application.py.bak 2KB
xhr_resources_view.xml.bak 2KB
xhr_resign_view.xml.bak 2KB
xhr_probation_view.xml.bak 2KB
xhr_xregister_view.xml.bak 2KB
xhr_xrestorer_view.xml.bak 2KB
resources_security.xml.bak 2KB
xhr_xrestorer_view .xml.bak 2KB
xhr_employee_view.xml.bak 1KB
xhr_overtime_view.xml.bak 1KB
xhr_application_view.xml.bak 1KB
xhr_leave_view.xml.bak 1KB
__init__.py.bak 999B
xhr_basi_view.xml.bak 994B
xhr_leaveapprove_view.xml.bak 953B
xhr_reward.py.bak 939B
xhr_overtime.py.bak 762B
xhr_xuploading_view.xml.bak 717B
xuploading.py.bak 648B
xuploading.py.bak 648B
xhr_dimission.py.bak 574B
__init__.py.bak 573B
xhr_leave.py.bak 568B
xhr_evaluate.py.bak 567B
__init__.py.bak 115B
ir.model.access.csv 244B
xhr_compensation.py 17KB
xhr_resources.py 17KB
xhr_personnel.py 9KB
xhr_salary.py 7KB
xhr_overtimeentry.py 7KB
xhr_station.py 6KB
xhr_reception.py 5KB
xhr_registration.py 5KB
xhr_outcome.py 5KB
xhr_resign.py 5KB
xhr_award.py 5KB
xhr_return.py 5KB
xhr_training.py 4KB
xhr_probation.py 4KB
xrestore.py 3KB
xrestore.py 3KB
xregister.py 3KB
xregister.py 3KB
__openerp__.py 3KB
xhr_contract.py 3KB
xhr_undefined.py 2KB
xhr_application.py 2KB
xuploading.py 1KB
__init__.py 1KB
xhr_reward.py 813B
xhr_overtime.py 769B
xuploading.py 648B
xhr_performance.py 610B
xhr_evaluate.py 589B
xhr_dimission.py 575B
xhr_leave.py 545B
__init__.py 518B
__init__.py 141B
__init__.py 141B
__init__.py 132B
共 171 条
- 1
- 2
资源评论
成都-Gavin
- 粉丝: 1
- 资源: 4
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 基于 Java的扫雷程序毕业设计
- axure9 里面有码 axure9 里面有码
- 551-2404242311-1.amr
- 自己搭建的关于springboot整合mybatis的框架.zip
- 这是一个保存Springboot+MyBaits项目的仓库.zip
- tensorflow-gpu-2.7.2-cp39-cp39-manylinux2010-x86-64.whl
- tensorflow-2.7.4-cp38-cp38-manylinux2010-x86-64.whl
- tensorflow-gpu-2.7.4-cp38-cp38-manylinux2010-x86-64.whl
- 詹佳 陈敏 口语2.mp3
- 图书管理系统毕业设计Java语言实现
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功