Merge branch 'dev' of gitee.com:jinan-pengyusen-data/gzth into dev

# Conflicts:
#	attendance_iot/views/attendance_iot_user_views.xml
This commit is contained in:
sunjie
2025-07-24 16:05:22 +08:00
9 changed files with 376 additions and 316 deletions
+1 -3
View File
@@ -55,16 +55,14 @@ class BusController(Controller):
user_id = data.get('logs')[0].get('user_id')
employee_id = request.env(user=SUPERUSER_ID)["hr.employee"].search([('mobile_phone', '=', user_id)])
recog_time_str = data.get('logs')[0].get("recog_time")
checkin_time = datetime.strptime(recog_time_str, "%Y-%m-%d %H:%M:%S")
attendance_iot_id = request.env(user=SUPERUSER_ID)["attendance.iot"].search([('name', '=', data.get('sn'))])
if employee_id:
request.env(user=SUPERUSER_ID)["hr.attendance.detail"].create({
'employee_id': employee_id.id, # 员工
'checkin_time': checkin_time, # 打卡时间
'checkin_time': fields.Datetime.now(), # 打卡时间
'source': 'iot', # 打卡来源
'attendance_iot_id': attendance_iot_id.id, # 打卡设备
})
request.env(user=SUPERUSER_ID)["hr.attendance.detail"].get_hr_attendance_time(employee_id.user_id.login)
return {"Result": 0, "Msg": "添加成功"}
@route('/api/v1/user/inf_photo', methods=['POST'], type='json', auth='none', csrf=False)
@@ -11,6 +11,7 @@
<field name="employee_id"/>
<field name="attendance_iot_id" string="设备号"/>
<field name="attendance_address"/>
<!-- <field name="image_1920"/>-->
<field name="company_id" column_invisible="1"/>
</tree>
</field>
@@ -108,13 +108,22 @@ class AppletAttendance(Controller):
_logger.info(f"\n应打卡地址 地址验证: {address_id.address_name} 详细: {address_id.address_name2}___")
_logger.info(f"\n人员: {employee_id.name} 当前所在地址: {self_address['formatted_address']}__________")
_logger.info(f"\n可打卡 当前经度: {kw['att_longitude']} 当前纬度: {kw['att_latitude']} 范围:{address_id.card_rice}米__________")
if self.is_within_radius_geopy(kw['att_latitude'], kw['att_longitude'], address_id.latitude, address_id.longitude, card_rice) and kw['wifi_name'] in wifi_name_list:
message = '可以打卡'
state = 'yes'
_logger.info(f"\n可打卡")
break
if wifi_name_list:
if self.is_within_radius_geopy(kw['att_latitude'], kw['att_longitude'], address_id.latitude, address_id.longitude, card_rice) and kw['wifi_name'] in wifi_name_list:
message = '可以打卡'
state = 'yes'
_logger.info(f"\n可打卡")
break
else:
_logger.info(f"\n不可打卡 ")
else:
_logger.info(f"\n不可打卡 ")
if self.is_within_radius_geopy(kw['att_latitude'], kw['att_longitude'], address_id.latitude, address_id.longitude, card_rice):
message = '可以打卡'
state = 'yes'
_logger.info(f"\n可打卡")
break
else:
_logger.info(f"\n不可打卡 ")
if self.is_workday(current_date):
attendance_id_class = f"{attendance_id.shift_name} {start_time_str}-{end_time_str}"
else:
@@ -198,7 +207,7 @@ class AppletAttendance(Controller):
"""
_logger.info("-------触发打卡接口/yuthon/att/record---------")
res_user_id = request.env(user=SUPERUSER_ID)["res.users"].search([('id', '=', kw.get('user_id'))])
_logger.info(f"传过来的user_id{kw.get('user_id')},名称{res_user_id.name}")
_logger.info(f"传过来的user_id:{kw.get('user_id')},名称{res_user_id.name}")
employee_id = request.env(user=SUPERUSER_ID)["hr.employee"].search([('name', '=', res_user_id.name)])
if res_user_id:
request.env(user=SUPERUSER_ID)["hr.attendance.detail"].create({
@@ -207,7 +216,6 @@ class AppletAttendance(Controller):
'source': 'mini_programs',
})
return_data = {'code': '200', 'message': '打卡成功'}
request.env(user=SUPERUSER_ID)["hr.attendance.detail"].get_hr_attendance_time(res_user_id.login)
_logger.info("打卡记录创建成功")
else:
return_data = {'code': '200', 'message': '未识别到员工'}
@@ -86,15 +86,15 @@ class HrAttendanceDetail(models.Model):
def create(self, vals_list):
res = super(HrAttendanceDetail, self).create(vals_list)
for attendance_obj in res:
self.sudo()._do_save_wx_attendance_data(attendance_obj.user_id, attendance_obj.current_data)
self.sudo()._do_plan_save_wx_attendance_data(attendance_obj.user_id, attendance_obj.current_data)
self.sudo()._do_save_wx_attendance_data(attendance_obj.employee_id.user_id, attendance_obj.create_date.date())
self.sudo()._do_plan_save_wx_attendance_data(attendance_obj.employee_id.user_id, attendance_obj.create_date.date())
return res
def write(self, vals):
res = super(HrAttendanceDetail, self).write(vals)
for attendance_obj in self:
self.sudo()._do_save_wx_attendance_data(attendance_obj.user_id, attendance_obj.current_data)
self.sudo()._do_plan_save_wx_attendance_data(attendance_obj.user_id, attendance_obj.current_data)
self.sudo()._do_save_wx_attendance_data(attendance_obj.employee_id.user_id, attendance_obj.create_date.date())
self.sudo()._do_plan_save_wx_attendance_data(attendance_obj.employee_id.user_id, attendance_obj.create_date.date())
return res
@@ -332,8 +332,8 @@ class HrAttendanceDetail(models.Model):
# 同步整理当天出勤数据
attendance_obj = self.env['hr.attendance'].search([("userid", "=", user.oauth_uid), ("current_data", "=", current_date)], limit=1)
hr_employee_obj = self.env['hr.employee'].sudo().search([("user_id", "=", user.id)], limit=1)
current_datetime_start = datetime.combine(datetime.strptime(current_date, '%Y-%m-%d'), datetime.min.time())
current_datetime_end = datetime.combine(datetime.strptime(current_date, '%Y-%m-%d'), datetime.max.time())
# current_datetime_start = datetime.combine(datetime.strptime(current_date, '%Y-%m-%d'), datetime.min.time())
# current_datetime_end = datetime.combine(datetime.strptime(current_date, '%Y-%m-%d'), datetime.max.time())
if not attendance_obj:
# 判断是否是 普通打卡
if not hr_employee_obj.default_planning_role_id:
@@ -367,6 +367,7 @@ class HrAttendanceDetail(models.Model):
:return:
"""
# 同步整理当天出勤数据
current_date = str(current_date)
hr_employee_obj = self.env['hr.employee'].sudo().search([("user_id", "=", user.id)], limit=1)
current_datetime_start = datetime.combine(datetime.strptime(current_date, '%Y-%m-%d'), datetime.min.time())
current_datetime_end = datetime.combine(datetime.strptime(current_date, '%Y-%m-%d'), datetime.max.time())
@@ -406,6 +407,7 @@ class HrAttendanceDetail(models.Model):
:param attendance_obj: 判断的时刻的考勤集合
:return:
"""
current_date = str(current_date)
current_datetime_start = datetime.combine(datetime.strptime(current_date, '%Y-%m-%d'), datetime.min.time())
current_datetime_end = datetime.combine(datetime.strptime(current_date, '%Y-%m-%d'), datetime.max.time())
hr_employee_obj = self.env['hr.employee'].sudo().search([("user_id", "=", user.id)], limit=1)
@@ -5,6 +5,7 @@ from odoo import models, api, fields, _
from odoo.tools.float_utils import float_round
from odoo.exceptions import ValidationError, UserError
from datetime import date
from datetime import timedelta
class HrAttendanceMonthWizard(models.TransientModel):
@@ -101,16 +102,16 @@ class HrAttendanceMonthWizard(models.TransientModel):
# 1 生成出勤生成记录
# 2 生成出勤月度明细
# 获取出勤月度汇总记录结果表
for record in self:
year = record.current_year
month = record.current_month
existing_records = self.env["hr.attendance.month"].search([
('current_year', '=', year),
('current_month', '=', month),
('company_id', '=', record.company_id.id)
])
if existing_records:
raise ValidationError(f"{year}年{month}月分的记录已经存在,不能重复操作.")
# for record in self:
# year = record.current_year
# month = record.current_month
# existing_records = self.env["hr.attendance.month"].search([
# ('current_year', '=', year),
# ('current_month', '=', month),
# ('company_id', '=', record.company_id.id)
# ])
# if existing_records:
# raise ValidationError(f"{year}年{month}月分的记录已经存在,不能重复操作.")
self.ensure_one()
attendance_month_obj = self._get_attendance_month_obj()
# 查询所有的当前员工? 是否需要判断当前员工是否关联企业微信??预留
@@ -127,7 +128,7 @@ class HrAttendanceMonthWizard(models.TransientModel):
for employee in hr_employee_obj:
if (
employee.id not in resource_user_ids and
employee.contract.state not in ['draft', 'cancel']
employee.contract_id.state not in ['draft', 'cancel']
):
if employee.id not in all_employee_ids:
# 判断当前是否已经创建了考勤明细
@@ -140,8 +141,8 @@ class HrAttendanceMonthWizard(models.TransientModel):
attendance_month_detail_obj.analysis_attendance_month_detail()
self.get_leave_and_overtime_info(employee.id)
# 返回action动作
action = self._hr_attendance_month_detail_action()
return action
action = self._hr_attendance_month_detail_action()
return action
# 考勤定时任务
def button_attendance_month(self):
@@ -218,10 +219,8 @@ class HrAttendanceMonthWizard(models.TransientModel):
start_date = start_in_month
end_date = end_in_month
leave = self._create_leave_record(holiday_status_id, start_date, end_date)
leave_days[leave_type] = leave.number_of_days
# leave_days[leave_type] = self._process_shift_days(leave, start_date, end_date)
leave.unlink()
days = self._create_leave_record(holiday_status_id, start_date, end_date)
leave_days[leave_type] = days
else:
for leave in leave_records:
total_days += leave.number_of_days_display
@@ -241,13 +240,44 @@ class HrAttendanceMonthWizard(models.TransientModel):
# 创建用户记录传入日期来获取天数
def _create_leave_record(self, holiday_status_id, start_date, end_date):
admin_id = self.env['hr.employee'].search([("name", "=", 'Administrator')])
if not admin_id:
return None
return self.env['hr.leave'].sudo().create({
'employee_id': admin_id.id,
'holiday_status_id': holiday_status_id.id,
'request_date_from': start_date,
'request_date_to': end_date,
'state': 'confirm',
})
if holiday_status_id.type_of_work == 0:
calendar_leaves = self.env['resource.calendar.leaves'].search([("calendar_id", "=", "行政考勤工作日")])
holidays_list = []
shift_days_list = []
# 提取节假日和调休日
for leave in calendar_leaves:
if leave.holidays:
holidays_list.extend(leave.holidays.split(','))
if leave.alternate_rest_day:
holidays_list.extend(leave.alternate_rest_day.split(','))
if leave.shift_replacement_day:
shift_days_list.extend(leave.shift_replacement_day.split(','))
holidays_list = [self.remove_leading_zero(date) for date in holidays_list]
shift_days_list = [self.remove_leading_zero(date) for date in shift_days_list]
days = 0 # 初始化工作日计数
current_date = start_date
while current_date <= end_date:
current_date_str = current_date.strftime('%m月%d日')
current_date_str = self.remove_leading_zero(current_date_str)
is_weekend = current_date.weekday() in [5, 6]
if current_date_str in holidays_list:
# 如果是法定节假日,不计为工作日
pass
elif current_date_str in shift_days_list:
# 如果是调休日,无论是否周末都算作工作日
days += 1
elif not is_weekend:
# 如果不是周末且不是节假日,算作工作日
days += 1
current_date += timedelta(days=1)
else:
delta = end_date - start_date
days = delta.days + 1
return days
@@ -28,14 +28,18 @@ class ChoosePropertyWizard(models.Model):
else:
rec.is_mange = False
manage_id = record.manage_information_ids[-1] if record.manage_information_ids else False
admin_id = False
company_id = False
precinct_id = False
if manage_id:
rec.admin_id = manage_id.admin_line_id.id
rec.company_id = manage_id.company_id.id
rec.precinct_id = manage_id.precinct_id.id
else:
rec.admin_id = False
rec.company_id = False
rec.precinct_id = False
admin_id = manage_id.admin_id.id if manage_id.admin_id else False
company_id = manage_id.company_id.id if manage_id.company_id else False
precinct_id = manage_id.precinct_id.id if manage_id.precinct_id else False
rec.admin_id = admin_id
rec.company_id = company_id
rec.precinct_id = precinct_id
self.lease_contract_id.lease_ids = lease_ids_to_add
self.lease_contract_id.write({'name': ','.join(lease_name),
'use_address': ','.join(lease_name),
+1 -1
View File
@@ -18,7 +18,7 @@ class InheritHrPayslip(models.Model):
date_of_entry = fields.Date(related='employee_id.entry_date', string="入职时间", store=True)
base_salary = fields.Float(string='基本工资', compute='_compute_salary', store=True)
bank_account_id = fields.Many2one(string='银行账号', related='employee_id.bank_account_id', store=True)
tax_payable = fields.Float(string='应补(退)税额', store=True)
tax_payable = fields.Float(string='应补(退)税额')
actual_salary = fields.Float(string='实发工资', store=True, compute='_compute_actual_salary')
three_one = fields.Float(string='三险一金', store=True, compute='_compute_salary')
identification_id = fields.Char(string='证件号码', related='employee_id.identification_id', store=True)
+279 -262
View File
@@ -188,63 +188,65 @@
</xpath>
</field>
</record>
<!-- 薪资审定 - jtbb 视图 -->
<record id="view_hr_payslip_tree_validation_jtbb" model="ir.ui.view">
<field name="name">hr.payslip.tree.validation.jtbb</field>
<field name="model">hr.payslip</field>
<field name="arch" type="xml">
<tree string="薪资审定">
<field name="employee_id" string="姓名" readonly="1" options="{'no_open': True}" decoration-danger="is_bold" decoration-bf="is_bold"/>
<field name="date_of_entry" optional="show"/>
<field name="employee_id" string="姓名" readonly="1" options="{'no_open': True}"/>
<field name="date_of_entry"/>
<field name="bank_account_id"/>
<field name="actual_salary" optional="show"/>
<field name="total_before_tax" decoration-danger="1" decoration-bf="1" optional="show"/>
<field name="three_one" optional="show"/>
<field name="b_year" decoration-danger="1" decoration-bf="1" optional="show"/>
<field name="union_dues" decoration-danger="1" decoration-bf="1" optional="show"/>
<field name="base_salary" required="1" optional="show"/>
<field name="basic_endowment_insurance" decoration-info="1" optional="show"/>
<field name="basic_medical_insurance" decoration-info="1" optional="show"/>
<field name="unemployment_insurance" decoration-info="1" optional="show"/>
<field name="housing_provident_fund" decoration-info="1" optional="show"/>
<field name="work_injury_insurance" decoration-info="1" optional="show"/>
<field name="maternity_allowance" decoration-danger="1" optional="show"/>
<field name="individual_income_tax" decoration-danger="1" optional="show"/>
<field name="add_income_tax" decoration-danger="1" optional="show"/>
<field name="minus_annuity_difference" decoration-danger="1" optional="show"/>
<field name="add_annuity_difference" decoration-danger="1" optional="show"/>
<field name="minus_att" decoration-danger="1" optional="show"/>
<field name="add_att" decoration-danger="1" optional="show"/>
<field name="last_year_jie" decoration-danger="1" optional="show"/>
<field name="rank_salary" required="1" optional="show"/>
<field name="performance_bonuses" required="1" optional="show"/>
<field name="based_pay" required="1" optional="show"/>
<field name="seniority_salary" required="1" decoration-success="1" optional="show"/>
<field name="commuting_allowance" required="1" decoration-success="1" optional="show"/>
<field name="full_attendance_award" decoration-success="1" optional="show"/>
<field name="overtime_pay" decoration-success="1" optional="show"/>
<field name="meal_misunderstanding_fee" decoration-success="1" optional="show"/>
<field name="condolence_fund" decoration-success="1" optional="show"/>
<field name="retroactive_allowance" decoration-success="1" optional="show"/>
<field name="specialized_deduction" decoration-warning="1" optional="show"/>
<field name="individual_tax_refund" decoration-danger="1" optional="show"/>
<field name="social_security" decoration-danger="1" optional="show"/>
<field name="liquidation_year" decoration-danger="1" optional="show"/>
<field name="year_compute" decoration-danger="1" optional="show"/>
<field name="year_jie" decoration-danger="1" optional="show"/>
<field name="performance_up" decoration-danger="1" optional="show"/>
<field name="jing_te" decoration-danger="1" optional="show"/>
<field name="year_gong" decoration-danger="1" optional="show"/>
<field name="study_on" decoration-danger="1" optional="show"/>
<field name="commuting_deduction" decoration-danger="1" optional="show"/>
<field name="performance_deduction" decoration-danger="1" optional="show"/>
<field name="retention_previous_year" decoration-danger="1" optional="show"/>
<field name="safety_incentives" decoration-danger="1" optional="show"/>
<field name="last_year_safety" decoration-danger="1" optional="show"/>
<field name="last_year_performance_evaluation" decoration-danger="1" optional="show"/>
<field name="salary_state" optional="show"/>
<field name="actual_salary"/>
<field name="total_before_tax"/>
<field name="three_one"/>
<field name="b_year"/>
<field name="union_dues"/>
<field name="base_salary" required="1"/>
<field name="basic_endowment_insurance"/>
<field name="basic_medical_insurance"/>
<field name="unemployment_insurance"/>
<field name="housing_provident_fund"/>
<field name="work_injury_insurance"/>
<field name="maternity_allowance"/>
<field name="individual_income_tax"/>
<field name="add_income_tax"/>
<field name="minus_annuity_difference"/>
<field name="add_annuity_difference"/>
<field name="minus_att"/>
<field name="add_att"/>
<field name="last_year_jie"/>
<field name="rank_salary" required="1"/>
<field name="performance_bonuses" required="1"/>
<field name="based_pay" required="1"/>
<field name="seniority_salary" required="1"/>
<field name="commuting_allowance" required="1"/>
<field name="full_attendance_award"/>
<field name="overtime_pay"/>
<field name="meal_misunderstanding_fee"/>
<field name="condolence_fund"/>
<field name="retroactive_allowance"/>
<field name="specialized_deduction"/>
<field name="individual_tax_refund"/>
<field name="social_security"/>
<field name="liquidation_year"/>
<field name="year_compute"/>
<field name="year_jie"/>
<field name="performance_up"/>
<field name="jing_te"/>
<field name="year_gong"/>
<field name="study_on"/>
<field name="commuting_deduction"/>
<field name="performance_deduction"/>
<field name="retention_previous_year"/>
<field name="safety_incentives"/>
<field name="last_year_safety"/>
<field name="last_year_performance_evaluation"/>
<field name="tax_payable"/>
<field name="salary_state"/>
<field name="is_salary_release" column_invisible="1"/>
<field name="is_salary_push" column_invisible="1"/>
<field name="is_bold" optional="hide"/>
<field name="is_bold"/>
<button name="put_release" type="object" string="推送" class="btn-primary" invisible="is_salary_release"/>
<button name="put_payslip" type="object" string="发送" class="btn-primary" invisible="not is_salary_release"/>
<button name="return_salary_button" string="退回" type="object" class="oe_highlight" invisible="not is_salary_release"/>
@@ -252,106 +254,114 @@
</tree>
</field>
</record>
<!-- 薪资审定 - wg 视图 -->
<record id="view_hr_payslip_tree_validation_wg" model="ir.ui.view">
<field name="name">hr.payslip.tree.validation.wg</field>
<field name="model">hr.payslip</field>
<field name="arch" type="xml">
<tree string="薪资审定">
<field name="employee_id" string="姓名" readonly="1" options="{'no_open': True}" decoration-danger="is_bold" decoration-bf="is_bold"/>
<field name="date_of_entry" optional="show"/>
<field name="bank_account_id"/>
<field name="actual_salary" optional="show"/>
<field name="total_before_tax" decoration-danger="1" decoration-bf="1" optional="show"/>
<field name="three_one" optional="show"/>
<field name="b_year" decoration-danger="1" decoration-bf="1" optional="show"/>
<field name="union_dues" decoration-danger="1" decoration-bf="1" optional="show"/>
<field name="base_salary" required="1" optional="show"/>
<field name="basic_endowment_insurance" decoration-info="1" optional="show"/>
<field name="basic_medical_insurance" decoration-info="1" optional="show"/>
<field name="unemployment_insurance" decoration-info="1" optional="show"/>
<field name="housing_provident_fund" decoration-info="1" optional="show"/>
<field name="work_injury_insurance" decoration-info="1" optional="show"/>
<field name="maternity_allowance" decoration-danger="1" optional="show"/>
<field name="position_salary" decoration-danger="1" optional="show"/>
<field name="individual_income_tax" decoration-danger="1" optional="show"/>
<field name="add_income_tax" decoration-danger="1" optional="show"/>
<field name="minus_annuity_difference" decoration-danger="1" optional="show"/>
<field name="add_annuity_difference" decoration-danger="1" optional="show"/>
<field name="minus_att" decoration-danger="1" optional="show"/>
<field name="add_att" decoration-danger="1" optional="show"/>
<field name="last_year_jie" decoration-danger="1" optional="show"/>
<field name="position_subsidy" optional="show" decoration-success="1"/>
<field name="seniority_allowance" decoration-success="1" optional="show"/>
<field name="safety_subsidy" decoration-success="1" optional="show"/>
<field name="comprehensive_subsidy" decoration-success="1" optional="show"/>
<field name="job_performance" decoration-success="1" optional="show"/>
<field name="duty" decoration-success="1" optional="show"/>
<field name="spring_festival" decoration-success="1" optional="show"/>
<field name="commuting_allowance" required="1" decoration-success="1" optional="show"/>
<field name="full_attendance_award" decoration-success="1" optional="show"/>
<field name="overtime_pay" decoration-success="1" optional="show"/>
<field name="condolence_fund" decoration-success="1" optional="show"/>
<field name="excellent_employees" decoration-danger="1" optional="show"/>
<field name="salary_state" optional="show"/>
<field name="is_salary_release" column_invisible="1"/>
<field name="is_salary_push" column_invisible="1"/>
<field name="is_bold" optional="hide"/>
<button name="put_release" type="object" string="推送" class="btn-primary" invisible="is_salary_release"/>
<button name="put_payslip" type="object" string="发送" class="btn-primary" invisible="not is_salary_release"/>
<button name="return_salary_button" string="退回" type="object" class="oe_highlight" invisible="not is_salary_release"/>
<button name="open_record" string="详情" type="object" class="oe_highlight"/>
</tree>
</field>
<field name="name">hr.payslip.tree.validation.wg</field>
<field name="model">hr.payslip</field>
<field name="arch" type="xml">
<tree string="薪资审定">
<field name="employee_id" string="姓名" readonly="1" options="{'no_open': True}"/>
<field name="date_of_entry"/>
<field name="bank_account_id"/>
<field name="actual_salary"/>
<field name="total_before_tax"/>
<field name="three_one"/>
<field name="b_year"/>
<field name="union_dues"/>
<field name="base_salary" required="1"/>
<field name="basic_endowment_insurance"/>
<field name="basic_medical_insurance"/>
<field name="unemployment_insurance"/>
<field name="housing_provident_fund"/>
<field name="work_injury_insurance"/>
<field name="maternity_allowance"/>
<field name="position_salary"/>
<field name="individual_income_tax"/>
<field name="add_income_tax"/>
<field name="minus_annuity_difference"/>
<field name="add_annuity_difference"/>
<field name="minus_att"/>
<field name="spring_festival"/>
<field name="add_att"/>
<field name="last_year_jie"/>
<field name="position_subsidy"/>
<field name="seniority_allowance"/>
<field name="safety_subsidy"/>
<field name="comprehensive_subsidy"/>
<field name="job_performance"/>
<field name="duty"/>
<field name="commuting_allowance" required="1"/>
<field name="full_attendance_award"/>
<field name="overtime_pay"/>
<field name="condolence_fund"/>
<field name="excellent_employees"/>
<field name="tax_payable"/>
<field name="salary_state"/>
<field name="is_salary_release" column_invisible="1"/>
<field name="is_salary_push" column_invisible="1"/>
<field name="is_bold"/>
<button name="put_release" type="object" string="推送" class="btn-primary" invisible="is_salary_release"/>
<button name="put_payslip" type="object" string="发送" class="btn-primary" invisible="not is_salary_release"/>
<button name="return_salary_button" string="退回" type="object" class="oe_highlight" invisible="not is_salary_release"/>
<button name="open_record" string="详情" type="object" class="oe_highlight"/>
</tree>
</field>
</record>
<!-- 薪资审定 - lc 视图 -->
<record id="view_hr_payslip_tree_validation_lc" model="ir.ui.view">
<field name="name">hr.payslip.tree.validation_lc</field>
<field name="model">hr.payslip</field>
<field name="arch" type="xml">
<tree string="薪资审定">
<field name="employee_id" string="姓名" readonly="1" options="{'no_open': True}" decoration-danger="is_bold" decoration-bf="is_bold"/>
<field name="date_of_entry" optional="show"/>
<field name="bank_account_id"/>
<field name="actual_salary" optional="show"/>
<field name="total_before_tax" decoration-danger="1" decoration-bf="1" optional="show"/>
<field name="three_one" optional="show"/>
<field name="b_year" decoration-danger="1" decoration-bf="1" optional="show"/>
<field name="union_dues" decoration-danger="1" decoration-bf="1" optional="show"/>
<field name="base_salary" required="1" optional="show"/>
<field name="basic_endowment_insurance" decoration-info="1" optional="show"/>
<field name="basic_medical_insurance" decoration-info="1" optional="show"/>
<field name="unemployment_insurance" decoration-info="1" optional="show"/>
<field name="housing_provident_fund" decoration-info="1" optional="show"/>
<field name="work_injury_insurance" decoration-info="1" optional="show"/>
<field name="maternity_allowance" decoration-danger="1" optional="show"/>
<field name="individual_income_tax" decoration-danger="1" optional="show"/>
<field name="add_income_tax" decoration-danger="1" optional="show"/>
<field name="minus_annuity_difference" decoration-danger="1" optional="show"/>
<field name="add_annuity_difference" decoration-danger="1" optional="show"/>
<field name="minus_att" decoration-danger="1" optional="show"/>
<field name="add_att" decoration-danger="1" optional="show"/>
<field name="last_year_jie" decoration-danger="1" optional="show"/>
<field name="position_subsidy" optional="show" decoration-success="1"/>
<field name="position_salary" decoration-danger="1" optional="show"/>
<field name="performance_bonuses" required="1" optional="show"/>
<field name="based_pay" required="1" optional="show"/>
<field name="environmental_allowance" decoration-success="1" optional="show"/>
<field name="quality_allowance" decoration-success="1" optional="show"/>
<field name="high_subsidy" decoration-success="1" optional="show"/>
<field name="last_duty" decoration-success="1" optional="show"/>
<field name="medical_fee" decoration-danger="1" optional="show"/>
<field name="retroactive_insurance" decoration-danger="1" optional="show"/>
<field name="distribution_part" decoration-danger="1" optional="show"/>
<field name="salary_state" optional="show"/>
<field name="is_salary_release" column_invisible="1"/>
<field name="is_salary_push" column_invisible="1"/>
<field name="is_bold" optional="hide"/>
<button name="put_release" type="object" string="推送" class="btn-primary" invisible="is_salary_release"/>
<button name="put_payslip" type="object" string="发送" class="btn-primary" invisible="not is_salary_release"/>
<button name="return_salary_button" string="退回" type="object" class="oe_highlight" invisible="not is_salary_release"/>
<button name="open_record" string="详情" type="object" class="oe_highlight"/>
</tree>
</field>
<field name="name">hr.payslip.tree.validation_lc</field>
<field name="model">hr.payslip</field>
<field name="arch" type="xml">
<tree string="薪资审定">
<field name="employee_id" string="姓名" readonly="1" options="{'no_open': True}"/>
<field name="date_of_entry"/>
<field name="bank_account_id"/>
<field name="actual_salary"/>
<field name="total_before_tax"/>
<field name="three_one"/>
<field name="b_year"/>
<field name="union_dues"/>
<field name="base_salary" required="1"/>
<field name="basic_endowment_insurance"/>
<field name="basic_medical_insurance"/>
<field name="unemployment_insurance"/>
<field name="housing_provident_fund"/>
<field name="work_injury_insurance"/>
<field name="maternity_allowance"/>
<field name="individual_income_tax"/>
<field name="add_income_tax"/>
<field name="minus_annuity_difference"/>
<field name="add_annuity_difference"/>
<field name="minus_att"/>
<field name="add_att"/>
<field name="last_year_jie"/>
<field name="position_subsidy"/>
<field name="position_salary"/>
<field name="performance_bonuses" required="1"/>
<field name="based_pay" required="1"/>
<field name="environmental_allowance"/>
<field name="quality_allowance"/>
<field name="high_subsidy"/>
<field name="last_duty"/>
<field name="medical_fee"/>
<field name="retroactive_insurance"/>
<field name="distribution_part"/>
<field name="tax_payable"/>
<field name="salary_state"/>
<field name="is_salary_release" column_invisible="1"/>
<field name="is_salary_push" column_invisible="1"/>
<field name="is_bold"/>
<button name="put_release" type="object" string="推送" class="btn-primary" invisible="is_salary_release"/>
<button name="put_payslip" type="object" string="发送" class="btn-primary" invisible="not is_salary_release"/>
<button name="return_salary_button" string="退回" type="object" class="oe_highlight" invisible="not is_salary_release"/>
<button name="open_record" string="详情" type="object" class="oe_highlight"/>
</tree>
</field>
</record>
<!-- 薪资计算 - jtbb 视图 -->
<record id="view_hr_payslip_tree_jtbb" model="ir.ui.view">
<field name="name">hr.payslip.tree.jtbb</field>
<field name="model">hr.payslip</field>
@@ -362,59 +372,63 @@
<button name="action_temporary_payslip_wizard" string="导入工资项" type="object" class="oe_highlight"/>
<button name="action_refresh_from_work_entries" string="重新计算" type="object" class="oe_highlight"/>
</header>
<field name="employee_id" string="姓名" readonly="1" options="{'no_open': True}" decoration-danger="is_bold" decoration-bf="is_bold"/>
<field name="date_of_entry" optional="show"/>
<field name="total_before_tax" decoration-danger="1" decoration-bf="1" optional="show"/>
<field name="three_one" optional="show"/>
<field name="b_year" decoration-danger="1" decoration-bf="1" optional="show"/>
<field name="union_dues" decoration-danger="1" decoration-bf="1" optional="show"/>
<field name="base_salary" required="1" optional="show"/>
<field name="basic_endowment_insurance" decoration-info="1" optional="show"/>
<field name="basic_medical_insurance" decoration-info="1" optional="show"/>
<field name="unemployment_insurance" decoration-info="1" optional="show"/>
<field name="housing_provident_fund" decoration-info="1" optional="show"/>
<field name="work_injury_insurance" decoration-info="1" optional="show"/>
<field name="maternity_allowance" decoration-danger="1" optional="show"/>
<field name="individual_income_tax" decoration-danger="1" optional="show"/>
<field name="add_income_tax" decoration-danger="1" optional="show"/>
<field name="minus_annuity_difference" decoration-danger="1" optional="show"/>
<field name="add_annuity_difference" decoration-danger="1" optional="show"/>
<field name="minus_att" decoration-danger="1" optional="show"/>
<field name="add_att" decoration-danger="1" optional="show"/>
<field name="last_year_jie" decoration-danger="1" optional="show"/>
<field name="rank_salary" required="1" optional="show"/>
<field name="performance_bonuses" required="1" optional="show"/>
<field name="based_pay" required="1" optional="show"/>
<field name="seniority_salary" required="1" decoration-success="1" optional="show"/>
<field name="commuting_allowance" required="1" decoration-success="1" optional="show"/>
<field name="full_attendance_award" decoration-success="1" optional="show"/>
<field name="overtime_pay" decoration-success="1" optional="show"/>
<field name="meal_misunderstanding_fee" decoration-success="1" optional="show"/>
<field name="condolence_fund" decoration-success="1" optional="show"/>
<field name="retroactive_allowance" decoration-success="1" optional="show"/>
<field name="specialized_deduction" decoration-warning="1" optional="show"/>
<field name="individual_tax_refund" decoration-danger="1" optional="show"/>
<field name="social_security" decoration-danger="1" optional="show"/>
<field name="liquidation_year" decoration-danger="1" optional="show"/>
<field name="year_compute" decoration-danger="1" optional="show"/>
<field name="year_jie" decoration-danger="1" optional="show"/>
<field name="performance_up" decoration-danger="1" optional="show"/>
<field name="jing_te" decoration-danger="1" optional="show"/>
<field name="year_gong" decoration-danger="1" optional="show"/>
<field name="study_on" decoration-danger="1" optional="show"/>
<field name="commuting_deduction" decoration-danger="1" optional="show"/>
<field name="performance_deduction" decoration-danger="1" optional="show"/>
<field name="retention_previous_year" decoration-danger="1" optional="show"/>
<field name="safety_incentives" decoration-danger="1" optional="show"/>
<field name="last_year_safety" decoration-danger="1" optional="show"/>
<field name="last_year_performance_evaluation" decoration-danger="1" optional="show"/>
<field name="salary_state" optional="show"/>
<field name="employee_id" string="姓名" readonly="1" options="{'no_open': True}"/>
<field name="date_of_entry"/>
<field name="total_before_tax"/>
<field name="three_one"/>
<field name="b_year"/>
<field name="union_dues"/>
<field name="base_salary" required="1"/>
<field name="basic_endowment_insurance"/>
<field name="basic_medical_insurance"/>
<field name="unemployment_insurance"/>
<field name="housing_provident_fund"/>
<field name="work_injury_insurance"/>
<field name="maternity_allowance"/>
<field name="individual_income_tax"/>
<field name="add_income_tax"/>
<field name="minus_annuity_difference"/>
<field name="add_annuity_difference"/>
<field name="minus_att"/>
<field name="add_att"/>
<field name="last_year_jie"/>
<field name="rank_salary" required="1"/>
<field name="performance_bonuses" required="1"/>
<field name="based_pay" required="1"/>
<field name="seniority_salary" required="1"/>
<field name="commuting_allowance" required="1"/>
<field name="full_attendance_award"/>
<field name="overtime_pay"/>
<field name="meal_misunderstanding_fee"/>
<field name="condolence_fund"/>
<field name="children_welfare_fee"/>
<field name="base_salary_deduction"/>
<field name="retroactive_allowance"/>
<field name="specialized_deduction"/>
<field name="individual_tax_refund"/>
<field name="social_security"/>
<field name="liquidation_year"/>
<field name="safety_incentives"/>
<field name="year_compute"/>
<field name="year_jie"/>
<field name="performance_up"/>
<field name="jing_te"/>
<field name="year_gong"/>
<field name="study_on"/>
<field name="commuting_deduction"/>
<field name="performance_deduction"/>
<field name="retention_previous_year"/>
<field name="last_year_safety"/>
<field name="last_year_performance_evaluation"/>
<field name="salary_state"/>
<field name="company_id" optional="hide"/>
<field name="is_bold" optional="hide"/>
<field name="is_bold"/>
<button name="open_record" string="详情" type="object" class="oe_highlight"/>
</tree>
</field>
</record>
<!-- 薪资计算 - wg 视图 -->
<record id="view_hr_payslip_tree_wg" model="ir.ui.view">
<field name="name">hr.payslip.tree.wg</field>
<field name="model">hr.payslip</field>
@@ -425,46 +439,48 @@
<button name="action_temporary_payslip_wizard" string="导入工资项" type="object" class="oe_highlight"/>
<button name="action_refresh_from_work_entries" string="重新计算" type="object" class="oe_highlight"/>
</header>
<field name="employee_id" string="姓名" readonly="1" options="{'no_open': True}" decoration-danger="is_bold" decoration-bf="is_bold"/>
<field name="date_of_entry" optional="show"/>
<field name="total_before_tax" decoration-danger="1" decoration-bf="1" optional="show"/>
<field name="three_one" optional="show"/>
<field name="b_year" decoration-danger="1" decoration-bf="1" optional="show"/>
<field name="union_dues" decoration-danger="1" decoration-bf="1" optional="show"/>
<field name="base_salary" required="1" optional="show"/>
<field name="basic_endowment_insurance" decoration-info="1" optional="show"/>
<field name="basic_medical_insurance" decoration-info="1" optional="show"/>
<field name="unemployment_insurance" decoration-info="1" optional="show"/>
<field name="housing_provident_fund" decoration-info="1" optional="show"/>
<field name="work_injury_insurance" decoration-info="1" optional="show"/>
<field name="maternity_allowance" decoration-danger="1" optional="show"/>
<field name="position_salary" decoration-danger="1" optional="show"/>
<field name="individual_income_tax" decoration-danger="1" optional="show"/>
<field name="add_income_tax" decoration-danger="1" optional="show"/>
<field name="minus_annuity_difference" decoration-danger="1" optional="show"/>
<field name="add_annuity_difference" decoration-danger="1" optional="show"/>
<field name="minus_att" decoration-danger="1" optional="show"/>
<field name="add_att" decoration-danger="1" optional="show"/>
<field name="last_year_jie" decoration-danger="1" optional="show"/>
<field name="position_subsidy" optional="show" decoration-success="1"/>
<field name="seniority_allowance" decoration-success="1" optional="show"/>
<field name="safety_subsidy" decoration-success="1" optional="show"/>
<field name="comprehensive_subsidy" decoration-success="1" optional="show"/>
<field name="job_performance" decoration-success="1" optional="show"/>
<field name="duty" decoration-success="1" optional="show"/>
<field name="spring_festival" decoration-success="1" optional="show"/>
<field name="commuting_allowance" required="1" decoration-success="1" optional="show"/>
<field name="full_attendance_award" decoration-success="1" optional="show"/>
<field name="overtime_pay" decoration-success="1" optional="show"/>
<field name="condolence_fund" decoration-success="1" optional="show"/>
<field name="excellent_employees" decoration-danger="1" optional="show"/>
<button name="open_record" string="详情" type="object" class="oe_highlight"/>
<field name="salary_state" optional="show"/>
<field name="employee_id" string="姓名" readonly="1" options="{'no_open': True}"/>
<field name="date_of_entry"/>
<field name="total_before_tax"/>
<field name="three_one"/>
<field name="b_year"/>
<field name="union_dues"/>
<field name="base_salary" required="1"/>
<field name="basic_endowment_insurance"/>
<field name="basic_medical_insurance"/>
<field name="unemployment_insurance"/>
<field name="housing_provident_fund"/>
<field name="work_injury_insurance"/>
<field name="maternity_allowance"/>
<field name="position_salary"/>
<field name="individual_income_tax"/>
<field name="add_income_tax"/>
<field name="minus_annuity_difference"/>
<field name="add_annuity_difference"/>
<field name="minus_att"/>
<field name="spring_festival"/>
<field name="add_att"/>
<field name="last_year_jie"/>
<field name="position_subsidy"/>
<field name="seniority_allowance"/>
<field name="safety_subsidy"/>
<field name="comprehensive_subsidy"/>
<field name="job_performance"/>
<field name="duty"/>
<field name="commuting_allowance" required="1"/>
<field name="full_attendance_award"/>
<field name="overtime_pay"/>
<field name="condolence_fund"/>
<field name="excellent_employees"/>
<field name="salary_state"/>
<field name="company_id" optional="hide"/>
<field name="is_bold" optional="hide"/>
<field name="is_bold"/>
<button name="open_record" string="详情" type="object" class="oe_highlight"/>
</tree>
</field>
</record>
<!-- 薪资计算 - lc 视图 -->
<record id="view_hr_payslip_tree_lc" model="ir.ui.view">
<field name="name">hr.payslip.tree.lc</field>
<field name="model">hr.payslip</field>
@@ -475,44 +491,45 @@
<button name="action_temporary_payslip_wizard" string="导入工资项" type="object" class="oe_highlight"/>
<button name="action_refresh_from_work_entries" string="重新计算" type="object" class="oe_highlight"/>
</header>
<field name="employee_id" string="姓名" readonly="1" options="{'no_open': True}" decoration-danger="is_bold" decoration-bf="is_bold"/>
<field name="date_of_entry" optional="show"/>
<field name="total_before_tax" decoration-danger="1" decoration-bf="1" optional="show"/>
<field name="three_one" optional="show"/>
<field name="b_year" decoration-danger="1" decoration-bf="1" optional="show"/>
<field name="union_dues" decoration-danger="1" decoration-bf="1" optional="show"/>
<field name="base_salary" required="1" optional="show"/>
<field name="basic_endowment_insurance" decoration-info="1" optional="show"/>
<field name="basic_medical_insurance" decoration-info="1" optional="show"/>
<field name="unemployment_insurance" decoration-info="1" optional="show"/>
<field name="housing_provident_fund" decoration-info="1" optional="show"/>
<field name="work_injury_insurance" decoration-info="1" optional="show"/>
<field name="maternity_allowance" decoration-danger="1" optional="show"/>
<field name="individual_income_tax" decoration-danger="1" optional="show"/>
<field name="add_income_tax" decoration-danger="1" optional="show"/>
<field name="minus_annuity_difference" decoration-danger="1" optional="show"/>
<field name="add_annuity_difference" decoration-danger="1" optional="show"/>
<field name="minus_att" decoration-danger="1" optional="show"/>
<field name="add_att" decoration-danger="1" optional="show"/>
<field name="last_year_jie" decoration-danger="1" optional="show"/>
<field name="position_subsidy" optional="show" decoration-success="1"/>
<field name="position_salary" decoration-danger="1" optional="show"/>
<field name="performance_bonuses" required="1" optional="show"/>
<field name="based_pay" required="1" optional="show"/>
<field name="environmental_allowance" decoration-success="1" optional="show"/>
<field name="quality_allowance" decoration-success="1" optional="show"/>
<field name="high_subsidy" decoration-success="1" optional="show"/>
<field name="last_duty" decoration-success="1" optional="show"/>
<field name="medical_fee" decoration-danger="1" optional="show"/>
<field name="retroactive_insurance" decoration-danger="1" optional="show"/>
<field name="distribution_part" decoration-danger="1" optional="show"/>
<field name="salary_state" optional="show"/>
<field name="employee_id" string="姓名" readonly="1" options="{'no_open': True}"/>
<field name="date_of_entry"/>
<field name="total_before_tax"/>
<field name="three_one"/>
<field name="b_year"/>
<field name="union_dues"/>
<field name="base_salary" required="1"/>
<field name="basic_endowment_insurance"/>
<field name="basic_medical_insurance"/>
<field name="unemployment_insurance"/>
<field name="housing_provident_fund"/>
<field name="work_injury_insurance"/>
<field name="maternity_allowance"/>
<field name="individual_income_tax"/>
<field name="add_income_tax"/>
<field name="minus_annuity_difference"/>
<field name="add_annuity_difference"/>
<field name="minus_att"/>
<field name="add_att"/>
<field name="last_year_jie"/>
<field name="position_subsidy"/>
<field name="position_salary"/>
<field name="performance_bonuses" required="1"/>
<field name="based_pay" required="1"/>
<field name="environmental_allowance"/>
<field name="quality_allowance"/>
<field name="high_subsidy"/>
<field name="last_duty"/>
<field name="medical_fee"/>
<field name="retroactive_insurance"/>
<field name="distribution_part"/>
<field name="salary_state"/>
<field name="company_id" optional="hide"/>
<field name="is_bold" optional="hide"/>
<field name="is_bold"/>
<button name="open_record" string="详情" type="object" class="oe_highlight"/>
</tree>
</field>
</record>
<record id="view_hr_payslip_tree2" model="ir.ui.view">
<field name="name">hr.payslip.tree</field>
<field name="model">hr.payslip</field>
+2 -2
View File
@@ -169,8 +169,8 @@
parent="hr_attendance_root_board_menu"
sequence="15"
action="yuthon_hr_attendance.hr_attendance_detail_action"/>
<menuitem id="menu_hr_attendance_wife_view_attendances"
name="wife名称管理"
<menuitem id="menu_hr_attendance_wifi_view_attendances"
name="wifi名称管理"
parent="hr_attendance_root_board_menu"
sequence="15"
action="yuthon_hr_attendance.view_wifi_message_action"/>