添加功能
This commit is contained in:
@@ -13,5 +13,10 @@
|
||||
<field name="category_id" ref="module_yuthon_holiday"/>
|
||||
<field name="implied_ids" eval="[(4, ref('group_yuthon_holiday_user'))]"/>
|
||||
</record>
|
||||
<record model="ir.rule" id="yuthon_vacation_reports_rule">
|
||||
<field name="name">假期报表多公司</field>
|
||||
<field name="model_id" ref="model_yuthon_vacation_reports"/>
|
||||
<field name="domain_force">[('company_id', 'in', company_ids)]</field>
|
||||
</record>
|
||||
</data>
|
||||
</odoo>
|
||||
@@ -76,10 +76,11 @@ class HrAttendanceMonth(models.Model):
|
||||
class HrAttendanceMonthDetail(models.Model):
|
||||
_name = "hr.attendance.month.detail"
|
||||
_inherit = ['portal.mixin', 'mail.thread', 'mail.activity.mixin']
|
||||
_description = "出勤月度汇总明细"
|
||||
_description = "考勤确认单"
|
||||
|
||||
name = fields.Char(related='employee_id.name')
|
||||
employee_id = fields.Many2one('hr.employee', string="员工", readonly=True)
|
||||
company_id = fields.Many2one(related="employee_id.company_id", string="公司", store=True)
|
||||
department_id = fields.Many2one('hr.department', string="部门", related="employee_id.department_id", readonly=True)
|
||||
# userid = fields.Char(string='userid')
|
||||
attendance_year_id = fields.Many2one('hr.attendance.year', string="统计年份")
|
||||
|
||||
@@ -1,107 +1,11 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<odoo>
|
||||
<data>
|
||||
<!-- <record id="module_he_attendance_duty" model="ir.module.category">-->
|
||||
<!-- <field name="name">值班组</field>-->
|
||||
<!-- </record>-->
|
||||
<!-- <record id="group_he_attendance_security_user" model="res.groups">-->
|
||||
<!-- <field name="name">保安部:用户</field>-->
|
||||
<!-- <field name="category_id" ref="module_he_attendance_duty"/>-->
|
||||
<!-- </record>-->
|
||||
<!-- <record id="group_he_attendance_class_a_duty" model="res.groups">-->
|
||||
<!-- <field name="name">班组a:用户</field>-->
|
||||
<!-- <field name="category_id" ref="module_he_attendance_duty"/>-->
|
||||
<!-- <field name="implied_ids" eval="[(4, ref('group_he_attendance_security_user'))]"/>-->
|
||||
<!-- </record>-->
|
||||
<!-- <record id="group_he_attendance_class_b_duty" model="res.groups">-->
|
||||
<!-- <field name="name">班组b:用户</field>-->
|
||||
<!-- <field name="category_id" ref="module_he_attendance_duty"/>-->
|
||||
<!-- <field name="implied_ids" eval="[(4, ref('group_he_attendance_security_user'))]"/>-->
|
||||
<!-- </record>-->
|
||||
<!-- <record id="group_he_attendance_class_c_duty" model="res.groups">-->
|
||||
<!-- <field name="name">班组c:用户</field>-->
|
||||
<!-- <field name="category_id" ref="module_he_attendance_duty"/>-->
|
||||
<!-- <field name="implied_ids" eval="[(4, ref('group_he_attendance_security_user'))]"/>-->
|
||||
<!-- </record>-->
|
||||
<!-- <record id="group_he_attendance_security_manager" model="res.groups">-->
|
||||
<!-- <field name="name">保安部管理员</field>-->
|
||||
<!-- <field name="category_id" ref="module_he_attendance_duty"/>-->
|
||||
<!-- <field name="implied_ids" eval="[(4, ref('group_he_attendance_class_a_duty')), (4, ref('group_he_attendance_class_b_duty')),-->
|
||||
<!-- (4, ref('group_he_attendance_class_c_duty'))]"/>-->
|
||||
<!-- <field name="users" eval="[(4, ref('base.user_admin'))]"/>-->
|
||||
<!-- </record>-->
|
||||
|
||||
<!-- <record id="group_he_attendance_engineering_user" model="res.groups">-->
|
||||
<!-- <field name="name">工程部:用户</field>-->
|
||||
<!-- <field name="category_id" ref="module_he_attendance_duty"/>-->
|
||||
<!-- </record>-->
|
||||
<!-- <record id="group_he_attendance_run_user" model="res.groups">-->
|
||||
<!-- <field name="name">运行班:用户</field>-->
|
||||
<!-- <field name="category_id" ref="module_he_attendance_duty"/>-->
|
||||
<!-- <field name="implied_ids" eval="[(4, ref('group_he_attendance_engineering_user'))]"/>-->
|
||||
<!-- </record>-->
|
||||
<!-- <record id="group_he_attendance_run_manager" model="res.groups">-->
|
||||
<!-- <field name="name">运行班管理员</field>-->
|
||||
<!-- <field name="category_id" ref="module_he_attendance_duty"/>-->
|
||||
<!-- <field name="implied_ids" eval="[(4, ref('group_he_attendance_run_user'))]"/>-->
|
||||
<!-- <field name="users" eval="[(4, ref('base.user_admin'))]"/>-->
|
||||
<!-- </record>-->
|
||||
<!-- <record id="group_he_attendance_hv_user" model="res.groups">-->
|
||||
<!-- <field name="name">高压班:用户</field>-->
|
||||
<!-- <field name="category_id" ref="module_he_attendance_duty"/>-->
|
||||
<!-- <field name="implied_ids" eval="[(4, ref('group_he_attendance_engineering_user'))]"/>-->
|
||||
<!-- </record>-->
|
||||
<!-- <record id="group_he_attendance_hv_manager" model="res.groups">-->
|
||||
<!-- <field name="name">高压班管理员</field>-->
|
||||
<!-- <field name="category_id" ref="module_he_attendance_duty"/>-->
|
||||
<!-- <field name="implied_ids" eval="[(4, ref('group_he_attendance_hv_user'))]"/>-->
|
||||
<!-- <field name="users" eval="[(4, ref('base.user_admin'))]"/>-->
|
||||
<!-- </record>-->
|
||||
<!-- <record id="group_he_attendance_integrated_user" model="res.groups">-->
|
||||
<!-- <field name="name">综合班:用户</field>-->
|
||||
<!-- <field name="category_id" ref="module_he_attendance_duty"/>-->
|
||||
<!-- <field name="implied_ids" eval="[(4, ref('group_he_attendance_engineering_user'))]"/>-->
|
||||
<!-- </record>-->
|
||||
<!-- <record id="group_he_attendance_integrated_manager" model="res.groups">-->
|
||||
<!-- <field name="name">综合班管理员</field>-->
|
||||
<!-- <field name="category_id" ref="module_he_attendance_duty"/>-->
|
||||
<!-- <field name="implied_ids" eval="[(4, ref('group_he_attendance_integrated_user'))]"/>-->
|
||||
<!-- <field name="users" eval="[(4, ref('base.user_admin'))]"/>-->
|
||||
<!-- </record>-->
|
||||
<!-- <record id="group_he_attendance_engineering_manager" model="res.groups">-->
|
||||
<!-- <field name="name">工程班管理员</field>-->
|
||||
<!-- <field name="category_id" ref="module_he_attendance_duty"/>-->
|
||||
<!-- <field name="implied_ids" eval="[(4, ref('group_he_attendance_hv_manager')), (4, ref('group_he_attendance_integrated_manager')),-->
|
||||
<!-- (4, ref('group_he_attendance_run_manager'))]"/>-->
|
||||
<!-- <field name="users" eval="[(4, ref('base.user_admin'))]"/>-->
|
||||
<!-- </record>-->
|
||||
<!-- <record id="group_he_attendance_lc_user" model="res.groups">-->
|
||||
<!-- <field name="name">粮储:用户</field>-->
|
||||
<!-- <field name="category_id" ref="module_he_attendance_duty"/>-->
|
||||
<!-- </record>-->
|
||||
<!-- <record id="group_he_attendance_lc_manager" model="res.groups">-->
|
||||
<!-- <field name="name">粮储管理员</field>-->
|
||||
<!-- <field name="category_id" ref="module_he_attendance_duty"/>-->
|
||||
<!-- <field name="implied_ids" eval="[(4, ref('group_he_attendance_lc_user'))]"/>-->
|
||||
<!-- <field name="users" eval="[(4, ref('base.user_admin'))]"/>-->
|
||||
<!-- </record>-->
|
||||
<!-- <record id="group_he_attendance_customer_user" model="res.groups">-->
|
||||
<!-- <field name="name">客服:用户</field>-->
|
||||
<!-- <field name="category_id" ref="module_he_attendance_duty"/>-->
|
||||
<!-- </record>-->
|
||||
<!-- <record id="group_he_attendance_customer_manager" model="res.groups">-->
|
||||
<!-- <field name="name">客服管理员</field>-->
|
||||
<!-- <field name="category_id" ref="module_he_attendance_duty"/>-->
|
||||
<!-- <field name="implied_ids" eval="[(4, ref('group_he_attendance_customer_user'))]"/>-->
|
||||
<!-- <field name="users" eval="[(4, ref('base.user_admin'))]"/>-->
|
||||
<!-- </record>-->
|
||||
<!-- <record id="group_he_attendance_planning_manager" model="res.groups">-->
|
||||
<!-- <field name="name">计划考勤管理员</field>-->
|
||||
<!-- <field name="category_id" ref="module_he_attendance_duty"/>-->
|
||||
<!-- <field name="implied_ids" eval="[(4, ref('group_he_attendance_customer_manager')), (4, ref('group_he_attendance_engineering_manager')),-->
|
||||
<!-- (4, ref('group_he_attendance_security_manager'))]"/>-->
|
||||
<!-- <field name="users" eval="[(4, ref('base.user_admin'))]"/>-->
|
||||
<!-- </record>-->
|
||||
<record model="ir.rule" id="hr_attendance_month_detail">
|
||||
<field name="name">考勤确认单多公司</field>
|
||||
<field name="model_id" ref="model_hr_attendance_month_detail"/>
|
||||
<field name="domain_force">[('company_id', 'in', company_ids)]</field>
|
||||
</record>
|
||||
<record model="ir.rule" id="hr_attendance_month_rule">
|
||||
<field name="name">出勤统计多公司</field>
|
||||
<field name="model_id" ref="model_hr_attendance_month"/>
|
||||
|
||||
@@ -102,6 +102,7 @@
|
||||
<field name="note"/>
|
||||
<field name="state" widget="badge" decoration-info="state == 'unconfirmed'"
|
||||
decoration-success="state == 'confirmed'"/>
|
||||
<field name="company_id" optional="hide"/>
|
||||
<button name="button_put" string="发送" type="object" class="oe_highlight"/>
|
||||
</tree>
|
||||
</field>
|
||||
|
||||
@@ -100,6 +100,7 @@ class InheritHrPayslip(models.Model):
|
||||
tariff = fields.Float(string='税率')
|
||||
cumulative_deductions = fields.Float(string='累计减免税额')
|
||||
amount_tax_withheld = fields.Float(string='累计应扣缴税额')
|
||||
is_bold = fields.Boolean()
|
||||
remake = fields.Text(string='备注')
|
||||
|
||||
# 物管常用项
|
||||
|
||||
@@ -285,7 +285,7 @@
|
||||
<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="姓名" options="{'no_open': True}"/>
|
||||
<field name="employee_id" string="姓名" 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="company_id" optional="hide" required="1"/>
|
||||
@@ -296,7 +296,6 @@
|
||||
<field name="commuting_allowance" groups="yuthon_salary.group_jtbb_user" optional="show"/>
|
||||
<field name="seniority_salary" groups="yuthon_salary.group_jtbb_user" optional="show"/>
|
||||
<field name="full_attendance_award" groups="yuthon_salary.group_jtbb_user" optional="show"/>
|
||||
<field name="january_performance" optional="show"/>
|
||||
<field name="overtime_pay" decoration-danger="1" groups="yuthon_salary.group_jtbb_user" optional="show"/>
|
||||
<field name="high_temperature_allowance" decoration-danger="1" groups="yuthon_salary.group_jtbb_user" optional="show"/>
|
||||
<field name="based_pay" decoration-danger="1" optional="show"/>
|
||||
@@ -312,6 +311,7 @@
|
||||
<field name="basic_medical_insurance" optional="show"/>
|
||||
<field name="unemployment_insurance" optional="show"/>
|
||||
<field name="housing_provident_fund" optional="show"/>
|
||||
<field name="january_performance" optional="show"/>
|
||||
<field name="b_year" optional="show"/>
|
||||
<field name="three_one" optional="show"/>
|
||||
<field name="union_dues" optional="show"/>
|
||||
@@ -324,6 +324,7 @@
|
||||
<field name="assessment_reserved_amount" optional="show"/>
|
||||
<field name="meal_misunderstanding_fee" groups="yuthon_salary.group_jtbb_user" optional="show"/>
|
||||
<field name="is_push" column_invisible="1"/>
|
||||
<field name="is_bold" optional="hide"/>
|
||||
<button name="put_button" string="推送" type="object" class="oe_highlight"/>
|
||||
<button name="open_record" string="详情" type="object" class="oe_highlight"/>
|
||||
</tree>
|
||||
|
||||
@@ -58,6 +58,8 @@ class SalaryComputeWizard(models.Model):
|
||||
('current_month', '=', self.select_time)])
|
||||
if detail_id.state == 'unconfirmed':
|
||||
raise UserError(f'{employee.name}的{self.select_time}考勤还未确认,请先确认考勤再进行工资计算!')
|
||||
|
||||
is_bold = self.check_employee_dates(employee)
|
||||
contract_id = self.env['hr.contract'].search([('employee_id', '=', employee.id)], limit=1)
|
||||
year = int(self.select_year)
|
||||
month = int(self.select_time)
|
||||
@@ -89,6 +91,7 @@ class SalaryComputeWizard(models.Model):
|
||||
# if existing_payslip:
|
||||
# raise UserError( f"员工 {employee.name} 在 {start_date} 到 {end_date} 日期范围内已有工资单记录,无法创建新的工资单。")
|
||||
payslip = self.env['hr.payslip'].create({
|
||||
'is_bold':is_bold,
|
||||
'name': employee.name,
|
||||
'employee_id': employee.id,
|
||||
'contract_id': contract_id.id,
|
||||
@@ -202,4 +205,27 @@ class SalaryComputeWizard(models.Model):
|
||||
month = month.lstrip('0')
|
||||
day = day.rstrip('日')
|
||||
day = day.lstrip('0')
|
||||
return f'{month}月{day}日'
|
||||
return f'{month}月{day}日'
|
||||
|
||||
def check_employee_dates(self, employee):
|
||||
"""检查员工入职日期和转正日期的月份是否等于 select_time 的月份"""
|
||||
if not self.select_time:
|
||||
return False # 未选择月份时返回 False
|
||||
|
||||
# 将 select_time 转换为整数(如 '1' → 1)
|
||||
selected_month = int(self.select_time)
|
||||
|
||||
# 检查入职日期月份
|
||||
entry_month_matches = False
|
||||
if employee.entry_date:
|
||||
entry_month = employee.entry_date.month # 获取日期的月份(1-12)
|
||||
entry_month_matches = entry_month == selected_month
|
||||
|
||||
# 检查转正日期月份
|
||||
confirmation_month_matches = False
|
||||
if employee.confirmation_date: # 假设直接使用 employee.confirmation_date 字段
|
||||
conf_month = employee.confirmation_date.month
|
||||
confirmation_month_matches = conf_month == selected_month
|
||||
|
||||
# 满足任一条件即返回 True
|
||||
return entry_month_matches or confirmation_month_matches
|
||||
@@ -9,9 +9,9 @@
|
||||
<group>
|
||||
<field name="select_year"/>
|
||||
<field name="select_time"/>
|
||||
<field name="company_id" domain="[('id', '=', company_id)]" column_invisible="1"/>
|
||||
<field name="company_id" domain="[('id', '=', company_id)]" invisible="1"/>
|
||||
<field name="employee_ids" widget="many2many_tags" force_save="1" options="{'no_create': True}"/>
|
||||
<field name="employee_number" column_invisible="1"/>
|
||||
<field name="employee_number"/>
|
||||
</group>
|
||||
<footer>
|
||||
<button type="object" name="confirm" string="确认" class="oe_highlight"/>
|
||||
|
||||
Reference in New Issue
Block a user