@@ -1,3 +1,5 @@
|
||||
from datetime import timedelta
|
||||
|
||||
from odoo import api, fields, models, tools
|
||||
from odoo.exceptions import ValidationError
|
||||
|
||||
@@ -34,3 +36,12 @@ class InheritPlanningSlot(models.Model):
|
||||
_inherit = 'planning.slot'
|
||||
|
||||
department_id = fields.Many2one('hr.department', string="部门")
|
||||
|
||||
@api.depends('start_datetime', 'end_datetime', 'template_id')
|
||||
def _compute_display_name(self):
|
||||
for slot in self:
|
||||
start_str = (slot.start_datetime + timedelta(hours=8)).strftime("%Y/%m/%d %H:%M") if slot.start_datetime else ""
|
||||
end_str = (slot.end_datetime + timedelta(hours=8)).strftime("%Y/%m/%d %H:%M") if slot.end_datetime else ""
|
||||
planning_name = slot.template_id.planning_name if slot.template_id and slot.template_id.planning_name else ""
|
||||
slot.display_name = f"{start_str}-{end_str}-{planning_name}"
|
||||
|
||||
|
||||
@@ -5,14 +5,18 @@ from odoo.exceptions import UserError
|
||||
|
||||
class YuthonShiftApproval(models.Model):
|
||||
_name = 'yuthon.shift.approval'
|
||||
_inherit = ['soong.workflow.mixin', 'mail.thread.main.attachment', 'mail.activity.mixin']
|
||||
# _inherit = ['soong.workflow.mixin', 'mail.thread.main.attachment', 'mail.activity.mixin']
|
||||
_description = '值班换班审批'
|
||||
|
||||
yuthon_company = fields.Selection(related='users_id.employee_id.yuthon_company', string="公司")
|
||||
users_id = fields.Many2one('res.users', string="申请人", default=lambda self: self.env.user.id)
|
||||
name = fields.Char(string="标题")
|
||||
code = fields.Char(string="编号", default=lambda self: self.env['ir.sequence'].next_by_code('adjustments_approval'))
|
||||
users_id = fields.Many2one('res.users', string="申请人", default=lambda self: self.env.user.id)
|
||||
department_id = fields.Many2one(related='users_id.employee_id.department_id', string="部门")
|
||||
resource_id = fields.Many2one('resource.resource', string="申请人", default=lambda self: self.env.user.employee_id.resource_id.id)
|
||||
transferees_id = fields.Many2one('resource.resource', string="调班对象")
|
||||
shift_id = fields.Many2one('planning.slot', string="班次")
|
||||
return_id = fields.Many2one('planning.slot', string="班次")
|
||||
department_id = fields.Many2one(string="部门", related='users_id.department_id')
|
||||
is_issues = fields.Boolean(string='是否上会')
|
||||
related_issues_id = fields.Many2one('issue.library', string="关联议题")
|
||||
reason_application = fields.Html(string="申请事由")
|
||||
@@ -34,4 +38,15 @@ class YuthonShiftApproval(models.Model):
|
||||
'approval_date': fields.Datetime.now(),
|
||||
})
|
||||
elif self.related_issues_id:
|
||||
raise UserError("已经创建了相关的上会记录,不能取消勾选")
|
||||
raise UserError("已经创建了相关的上会记录,不能取消勾选")
|
||||
|
||||
def button_shift_approval(self):
|
||||
shift_id = self.shift_id
|
||||
return_id = self.return_id
|
||||
original_shift_template_id = shift_id.template_id.id
|
||||
shift_id.write({
|
||||
'template_id': return_id.template_id.id,
|
||||
})
|
||||
return_id.write({
|
||||
'template_id':original_shift_template_id,
|
||||
})
|
||||
|
||||
@@ -1,13 +1,12 @@
|
||||
<odoo>
|
||||
|
||||
<record id="duty_approval_tree" model="ir.ui.view">
|
||||
<field name="name">duty.approval.tree</field>
|
||||
<field name="model">duty.approval</field>
|
||||
<field name="arch" type="xml">
|
||||
<tree>
|
||||
<field name="name"/>
|
||||
<field name="yuthon_company"/>
|
||||
<field name="department_id"/>
|
||||
<field name="yuthon_company" optional="hide"/>
|
||||
<field name="department_id" optional="hide"/>
|
||||
<field name="users_id"/>
|
||||
</tree>
|
||||
</field>
|
||||
@@ -27,14 +26,14 @@
|
||||
<group>
|
||||
<group>
|
||||
<field name="users_id"/>
|
||||
<field name="yuthon_company"/>
|
||||
<field name="yuthon_company" invisible="1"/>
|
||||
</group>
|
||||
<group>
|
||||
<field name="code"/>
|
||||
<field name="department_id"/>
|
||||
<field name="department_id" invisible="1"/>
|
||||
</group>
|
||||
<group>
|
||||
<field name="reason_application"/>
|
||||
<field name="reason_application" />
|
||||
<field name="is_issues"/>
|
||||
<field name="related_issues_id" invisible="not is_issues"/>
|
||||
</group>
|
||||
|
||||
@@ -7,8 +7,6 @@
|
||||
<field name="arch" type="xml">
|
||||
<tree>
|
||||
<field name="name"/>
|
||||
<field name="yuthon_company"/>
|
||||
<field name="department_id"/>
|
||||
<field name="users_id"/>
|
||||
</tree>
|
||||
</field>
|
||||
@@ -30,6 +28,7 @@
|
||||
<group>
|
||||
<field name="users_id"/>
|
||||
<field name="yuthon_company" invisible="1"/>
|
||||
<field name="yuthon_company" invisible="1"/>
|
||||
<field name="date_start" required="1"/>
|
||||
<field name="date_end" required="1"/>
|
||||
<field name="days"/>
|
||||
@@ -38,7 +37,7 @@
|
||||
<group>
|
||||
<field name="employee_ids" widget="many2many_tags"/>
|
||||
<field name="code"/>
|
||||
<field name="department_id"/>
|
||||
<field name="department_id" invisible="1"/>
|
||||
</group>
|
||||
</group>
|
||||
<group string="审批事项">
|
||||
|
||||
@@ -7,8 +7,8 @@
|
||||
<tree>
|
||||
<field name="name"/>
|
||||
<field name="users_id"/>
|
||||
<field name="yuthon_company"/>
|
||||
<field name="department_id"/>
|
||||
<field name="yuthon_company" optional="hide"/>
|
||||
<field name="department_id" optional="hide"/>
|
||||
</tree>
|
||||
</field>
|
||||
</record>
|
||||
@@ -30,7 +30,7 @@
|
||||
<group>
|
||||
<group>
|
||||
<field name="users_id"/>
|
||||
<field name="yuthon_company"/>
|
||||
<field name="yuthon_company" invisible="1"/>
|
||||
<field name="code"/>
|
||||
<field name="duration"/>
|
||||
<field name="type_overtime"/>
|
||||
@@ -39,7 +39,7 @@
|
||||
</group>
|
||||
<group>
|
||||
<field name="employee_ids" widget="many2many_tags"/>
|
||||
<field name="department_id"/>
|
||||
<field name="department_id" invisible="1"/>
|
||||
<field name="start_time"/>
|
||||
<field name="end_time"/>
|
||||
<field name="hours"/>
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
<field name="name">yuthon.duty.plan.tree</field>
|
||||
<field name="model">yuthon.duty.plan</field>
|
||||
<field name="arch" type="xml">
|
||||
<tree string="排班安排">
|
||||
<tree string="排版规则">
|
||||
<field name="name"/>
|
||||
<field name="start_index_time"/>
|
||||
<field name="end_index_time"/>
|
||||
@@ -16,7 +16,7 @@
|
||||
<field name="name">yuthon.duty.plan.form</field>
|
||||
<field name="model">yuthon.duty.plan</field>
|
||||
<field name="arch" type="xml">
|
||||
<form string="排班安排">
|
||||
<form string="排版规则">
|
||||
<header>
|
||||
<button name="auto_duty_plan" type="object" string="安排值班" class="oe_highlight"/>
|
||||
</header>
|
||||
@@ -57,7 +57,7 @@
|
||||
</field>
|
||||
</record>
|
||||
<record id="view_yuthon_duty_plan_action" model="ir.actions.act_window">
|
||||
<field name="name">排班安排</field>
|
||||
<field name="name">排版规则</field>
|
||||
<field name="res_model">yuthon.duty.plan</field>
|
||||
<field name="view_mode">tree,form</field>
|
||||
</record>
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
<field name="name">yuthon.run.planning.tree</field>
|
||||
<field name="model">yuthon.run.planning</field>
|
||||
<field name="arch" type="xml">
|
||||
<tree string="排班安排">
|
||||
<tree string="排版规则">
|
||||
<field name="name"/>
|
||||
<field name="illustrate"/>
|
||||
</tree>
|
||||
@@ -15,7 +15,7 @@
|
||||
<field name="name">yuthon.run.planning.form</field>
|
||||
<field name="model">yuthon.run.planning</field>
|
||||
<field name="arch" type="xml">
|
||||
<form string="排班安排">
|
||||
<form string="排版规则">
|
||||
<sheet>
|
||||
<header>
|
||||
<button name="run_confirm" type="object" string="排班" class="oe_highlight"/>
|
||||
@@ -53,7 +53,7 @@
|
||||
<field name="name">yuthon.integrated.planning.tree</field>
|
||||
<field name="model">yuthon.run.planning</field>
|
||||
<field name="arch" type="xml">
|
||||
<tree string="排班安排">
|
||||
<tree string="排版规则">
|
||||
<field name="name"/>
|
||||
<field name="illustrate"/>
|
||||
</tree>
|
||||
@@ -63,7 +63,7 @@
|
||||
<field name="name">yuthon.integrated.planning.form</field>
|
||||
<field name="model">yuthon.run.planning</field>
|
||||
<field name="arch" type="xml">
|
||||
<form string="排班安排">
|
||||
<form string="排版规则">
|
||||
<sheet>
|
||||
<header>
|
||||
<button name="integrated_confirm" type="object" string='排班' class="oe_highlight"/>
|
||||
@@ -91,7 +91,7 @@
|
||||
<field name="name">yuthon.high.planning.tree</field>
|
||||
<field name="model">yuthon.run.planning</field>
|
||||
<field name="arch" type="xml">
|
||||
<tree string="排班安排">
|
||||
<tree string="排版规则">
|
||||
<field name="name"/>
|
||||
<field name="illustrate"/>
|
||||
</tree>
|
||||
@@ -101,7 +101,7 @@
|
||||
<field name="name">yuthon.high.planning.form</field>
|
||||
<field name="model">yuthon.run.planning</field>
|
||||
<field name="arch" type="xml">
|
||||
<form string="排班安排">
|
||||
<form string="排版规则">
|
||||
<sheet>
|
||||
<header>
|
||||
<button name="high_confirm" type="object" string="排班" class="oe_highlight"/>
|
||||
|
||||
@@ -7,8 +7,8 @@
|
||||
<tree string="值班换班审批">
|
||||
<field name="name"/>
|
||||
<field name="users_id"/>
|
||||
<field name="yuthon_company"/>
|
||||
<field name="department_id"/>
|
||||
<field name="yuthon_company" optional="hide"/>
|
||||
<field name="department_id" optional="hide"/>
|
||||
</tree>
|
||||
</field>
|
||||
</record>
|
||||
@@ -18,15 +18,22 @@
|
||||
<field name="arch" type="xml">
|
||||
<form string="值班调休审批">
|
||||
<sheet>
|
||||
<header>
|
||||
<button name="button_shift_approval" type="object" string="批准" class="oe_highlight"/>
|
||||
</header>
|
||||
<group string="个人信息" col="2">
|
||||
<group>
|
||||
<field name="users_id"/>
|
||||
<field name="is_issues"/>
|
||||
<field name="related_issues_id" invisible="not is_issues"/>
|
||||
<field name="resource_id"/>
|
||||
<field name="transferees_id"/>
|
||||
<field name="users_id" invisible="1"/>
|
||||
<field name="is_issues" invisible="1"/>
|
||||
<field name="related_issues_id" invisible="not is_issues" />
|
||||
<field name="yuthon_company" invisible="1"/>
|
||||
<field name="department_id" invisible="1"/>
|
||||
</group>
|
||||
<group>
|
||||
<field name="yuthon_company"/>
|
||||
<field name="department_id"/>
|
||||
<field name="shift_id" domain="[('resource_id', '=', resource_id)]"/>
|
||||
<field name="return_id" domain="[('resource_id', '=', transferees_id)]"/>
|
||||
</group>
|
||||
</group>
|
||||
<group string="审批事项">
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
<field name="name">yuthon.shift.planning.tree</field>
|
||||
<field name="model">yuthon.shift.planning</field>
|
||||
<field name="arch" type="xml">
|
||||
<tree string="排班安排">
|
||||
<tree string="排版规则">
|
||||
<field name="name"/>
|
||||
<field name="illustrate"/>
|
||||
<field name="number_of_shifts"/>
|
||||
@@ -15,7 +15,7 @@
|
||||
<field name="name">yuthon.shift.planning.form</field>
|
||||
<field name="model">yuthon.shift.planning</field>
|
||||
<field name="arch" type="xml">
|
||||
<form string="排班安排">
|
||||
<form string="排版规则">
|
||||
<sheet>
|
||||
<header>
|
||||
<button name="confirm" type="object" string="排班" class="oe_highlight"/>
|
||||
@@ -75,7 +75,7 @@
|
||||
</field>
|
||||
</record>
|
||||
<record id="yuthon_shift_planning_view_action" model="ir.actions.act_window">
|
||||
<field name="name">排班安排</field>
|
||||
<field name="name">排版规则</field>
|
||||
<field name="res_model">yuthon.shift.planning</field>
|
||||
<field name="view_mode">tree,form</field>
|
||||
</record>
|
||||
|
||||
@@ -20,7 +20,7 @@
|
||||
parent="hr_attendance_root_board"
|
||||
sequence="5"/>
|
||||
<menuitem id="menu_hr_plan_sources_arrange_board1"
|
||||
name="排班安排"
|
||||
name="排版规则"
|
||||
parent="menu_hr_attendance_security_record_board"
|
||||
action="yuthon_hr_attendance.yuthon_shift_planning_view_action"
|
||||
sequence="1"/>
|
||||
@@ -76,7 +76,7 @@
|
||||
parent="hr_attendance_root_board"
|
||||
sequence="7"/>
|
||||
<menuitem id="menu_hr_attendance_all_board"
|
||||
name="排班安排"
|
||||
name="排版规则"
|
||||
parent="menu_hr_attendance_engineering_record_board"
|
||||
sequence="1"/>
|
||||
<menuitem id="menu_hr_attendance_planning_all_record_board"
|
||||
@@ -176,7 +176,7 @@
|
||||
parent="hr_attendance_root_board"
|
||||
sequence="9"/>
|
||||
<menuitem id="menu_hr_attendance_duty_plan_board"
|
||||
name="排班安排"
|
||||
name="排版规则"
|
||||
parent="menu_hr_attendance_duty_summary_menu_board"
|
||||
action="yuthon_hr_attendance.view_yuthon_duty_plan_action"
|
||||
sequence="1"/>
|
||||
|
||||
Reference in New Issue
Block a user