@@ -145,6 +145,8 @@ patch(PlanningGanttRenderer.prototype, {
|
||||
display_name: {},
|
||||
start_time: {},
|
||||
end_time: {},
|
||||
end_time2: {},
|
||||
day2: {},
|
||||
},
|
||||
},
|
||||
}
|
||||
@@ -181,8 +183,10 @@ patch(PlanningGanttRenderer.prototype, {
|
||||
const groupSlotTemplate = slotTemplateData[group.id];
|
||||
group.start_time = groupSlotTemplate?.start_time || 0;
|
||||
group.end_time = groupSlotTemplate?.end_time || 0;
|
||||
group.end_time2 = groupSlotTemplate?.end_time2 || 0;
|
||||
group.day2 = groupSlotTemplate?.day2 || '';
|
||||
// 拼接显示信息
|
||||
group.ganttLegend = `${groupSlotTemplate.display_name} : ${floatToTime(group.start_time)} - ${floatToTime(group.end_time)}`;
|
||||
group.ganttLegend = `${groupSlotTemplate.display_name} : ${floatToTime(group.start_time)} - ${floatToTime(group.day2)} ${floatToTime(group.end_time2)}`;
|
||||
});
|
||||
},
|
||||
|
||||
|
||||
@@ -16,7 +16,6 @@
|
||||
'soong_workflow', 'yuthon_issue', 'planning', 'calendar', 'web_gantt', 'yuthon_wechat'],
|
||||
'data': [
|
||||
'security/ir.model.access.csv',
|
||||
'security/attendance_security_group.xml',
|
||||
'data/hr_attendance_time.xml',
|
||||
'data/attendance_code_data.xml',
|
||||
'data/attendance_role_groups_data.xml',
|
||||
|
||||
@@ -30,6 +30,8 @@ class PlanningSlotTemplate(models.Model):
|
||||
_inherit = 'planning.slot.template'
|
||||
|
||||
department_id = fields.Many2one('hr.department', string="部门")
|
||||
day2 = fields.Char(string="次日")
|
||||
end_time2 = fields.Float(string="显示时间")
|
||||
|
||||
|
||||
class InheritPlanningSlot(models.Model):
|
||||
|
||||
@@ -34,7 +34,6 @@ class PlanningTemplate(models.Model):
|
||||
end_time = time(hour=int(rec.end_time), minute=round(math.modf(rec.end_time)[0] / (1 / 60.0)))
|
||||
# 计算结束日期
|
||||
end_datetime = start_datetime + timedelta(hours=rec.duration)
|
||||
|
||||
# 检查是否跨日
|
||||
is_next_day = end_datetime.date() > start_datetime.date()
|
||||
if is_next_day:
|
||||
@@ -51,11 +50,18 @@ class PlanningTemplate(models.Model):
|
||||
duration_days = math.ceil((end_datetime - start_datetime).total_seconds() / (3600 * 24))
|
||||
return duration_days, timedelta(hours=end_datetime.hour, minutes=end_datetime.minute).total_seconds() / 3600
|
||||
|
||||
@api.depends("planning_name")
|
||||
def _compute_display_name(self):
|
||||
super()._compute_display_name()
|
||||
for record in self:
|
||||
record.display_name = f"{record.role_id.name}-{record.planning_name}"
|
||||
# @api.depends("planning_name")
|
||||
# def _compute_display_name(self):
|
||||
# super()._compute_display_name()
|
||||
# for record in self:
|
||||
# if record.planning_name and record.role_id:
|
||||
# record.display_name = f"{record.role_id.name}-{record.planning_name}"
|
||||
# elif record.planning_name:
|
||||
# record.display_name = record.planning_name
|
||||
# elif record.role_id:
|
||||
# record.display_name = record.role_id.name
|
||||
# else:
|
||||
# record.display_name = "Unknown"
|
||||
|
||||
|
||||
class Planning(models.Model):
|
||||
|
||||
@@ -29,6 +29,13 @@ class YuthonDutyPlan(models.Model):
|
||||
next_month = (selected_month % 12) + 1
|
||||
next_year = year + (1 if next_month == 1 else 0) # 如果是12月,年份加1
|
||||
last_day_of_month = datetime(next_year, next_month, 1)- timedelta(days=1)
|
||||
existing_slots = self.env['planning.slot'].search([
|
||||
('department_id.name', '=', '综合班'),
|
||||
('start_datetime', '>=', first_day_of_month),
|
||||
('start_datetime', '<=', last_day_of_month),
|
||||
])
|
||||
if len(existing_slots) > 0:
|
||||
raise UserError(f"该月已经有排程,请选择其他时间。")
|
||||
else:
|
||||
next_month = (selected_month % 12) + 1
|
||||
next_year = year + (1 if next_month == 1 else 0)
|
||||
@@ -36,6 +43,13 @@ class YuthonDutyPlan(models.Model):
|
||||
next_next_month = (next_month % 12) + 1
|
||||
next_next_year = next_year + (1 if next_next_month == 1 else 0)
|
||||
last_day_of_month = datetime(next_next_year, next_next_month, 1)- timedelta(days=1)
|
||||
existing_slots = self.env['planning.slot'].search([
|
||||
('role_id.name', '=', '联安粮库'),
|
||||
('start_datetime', '>=', first_day_of_month),
|
||||
('start_datetime', '<=', last_day_of_month),
|
||||
])
|
||||
if len(existing_slots) > 0:
|
||||
raise UserError(f"该月已经有排程,请选择其他时间。")
|
||||
|
||||
role_a = self.env['planning.role'].search([('name', '=', '联安粮库')], limit=1)
|
||||
role_template_a = self.env['planning.slot.template'].search([('planning_name', '=', '白班'), ('role_id', '=', role_a.id)])
|
||||
|
||||
@@ -29,6 +29,13 @@ class YuthonRunPlanning(models.Model):
|
||||
next_month = (selected_month % 12) + 1
|
||||
next_year = year + (1 if next_month == 1 else 0)
|
||||
last_day_of_month = datetime(next_year, next_month, 1) - timedelta(days=1)
|
||||
existing_slots = self.env['planning.slot'].search([
|
||||
('department_id.name', '=', '运行班'),
|
||||
('start_datetime', '>=', first_day_of_month),
|
||||
('start_datetime', '<=', last_day_of_month),
|
||||
])
|
||||
if len(existing_slots) > 0:
|
||||
raise UserError(f"该月已经有排程,请选择其他时间。")
|
||||
else:
|
||||
next_month = (selected_month % 12) + 1
|
||||
next_year = year + (1 if next_month == 1 else 0)
|
||||
@@ -36,6 +43,13 @@ class YuthonRunPlanning(models.Model):
|
||||
next_next_month = (next_month % 12) + 1
|
||||
next_next_year = next_year + (1 if next_next_month == 1 else 0)
|
||||
last_day_of_month = datetime(next_next_year, next_next_month, 1) - timedelta(days=1)
|
||||
existing_slots = self.env['planning.slot'].search([
|
||||
('department_id.name', '=', '运行班'),
|
||||
('start_datetime', '>=', first_day_of_month),
|
||||
('start_datetime', '<=', last_day_of_month),
|
||||
])
|
||||
if len(existing_slots) > 0:
|
||||
raise UserError(f"该月已经有排程,请选择其他时间。")
|
||||
|
||||
role_a = self.env['planning.role'].search([('name', '=', '工程部')], limit=1)
|
||||
start_time = int(self.env['planning.slot.template'].search([('role_id', '=', role_a.id), ('planning_name', '=', '白班')]).start_time)
|
||||
@@ -68,7 +82,7 @@ class YuthonRunPlanning(models.Model):
|
||||
slot_id[i].write({
|
||||
'template_id': self.env['planning.slot.template'].search([('role_id', '=', role_a.id), ('planning_name', '=', '中夜')]).id,
|
||||
'start_datetime': datetime(current_date.year, current_date.month, current_date.day,start_time2) + timedelta(hours=16) - timedelta(days=1),
|
||||
'end_datetime': datetime(current_date.year, current_date.month, current_date.day,end_time2) + timedelta(days=1, hours=16) - timedelta(days=1),
|
||||
'end_datetime': datetime(current_date.year, current_date.month, current_date.day,end_time2) + timedelta(hours=16) - timedelta(days=1),
|
||||
'role_id': role_a.id,
|
||||
'allocated_hours': 8,
|
||||
})
|
||||
@@ -130,6 +144,13 @@ class YuthonRunPlanning(models.Model):
|
||||
next_month = (selected_month % 12) + 1
|
||||
next_year = year + (1 if next_month == 1 else 0) # 如果是12月,年份加1
|
||||
last_day_of_month = datetime(next_year, next_month, 1) - timedelta(days=1)
|
||||
existing_slots = self.env['planning.slot'].search([
|
||||
('department_id.name', '=', '高压班'),
|
||||
('start_datetime', '>=', first_day_of_month),
|
||||
('start_datetime', '<=', last_day_of_month),
|
||||
])
|
||||
if len(existing_slots) > 0:
|
||||
raise UserError(f"该月已经有排程,请选择其他时间。")
|
||||
else:
|
||||
next_month = (selected_month % 12) + 1
|
||||
next_year = year + (1 if next_month == 1 else 0)
|
||||
@@ -137,7 +158,13 @@ class YuthonRunPlanning(models.Model):
|
||||
next_next_month = (next_month % 12) + 1
|
||||
next_next_year = next_year + (1 if next_next_month == 1 else 0)
|
||||
last_day_of_month = datetime(next_next_year, next_next_month, 1) - timedelta(days=1)
|
||||
|
||||
existing_slots = self.env['planning.slot'].search([
|
||||
('department_id.name', '=', '高压班'),
|
||||
('start_datetime', '>=', first_day_of_month),
|
||||
('start_datetime', '<=', last_day_of_month),
|
||||
])
|
||||
if len(existing_slots) > 0:
|
||||
raise UserError(f"该月已经有排程,请选择其他时间。")
|
||||
role_a = self.env['planning.role'].search([('name', '=', '工程部')], limit=1)
|
||||
start_time = int(self.env['planning.slot.template'].search([('role_id', '=', role_a.id), ('planning_name', '=', '白班')]).start_time)
|
||||
end_time = int(self.env['planning.slot.template'].search([('role_id', '=', role_a.id), ('planning_name', '=', '白班')]).end_time)
|
||||
@@ -164,13 +191,13 @@ class YuthonRunPlanning(models.Model):
|
||||
while current_date <= last_day_of_month:
|
||||
for employee in range(0, len(self.high_run_ids)):
|
||||
i = i + 1
|
||||
slot_id = all_slot.search([('resource_id', '=', self.engineering_run_ids[employee].employee_id.resource_id.id), ('start_datetime', '>=', first_day_of_month), ('start_datetime', '<=', last_day_of_month)]).sorted('start_datetime')
|
||||
slot_id = all_slot.search([('resource_id', '=', self.high_run_ids[employee].employee_id.resource_id.id), ('start_datetime', '>=', first_day_of_month), ('start_datetime', '<=', last_day_of_month)]).sorted('start_datetime')
|
||||
if i < 31:
|
||||
slot_id[i].write({
|
||||
'template_id': self.env['planning.slot.template'].search(
|
||||
[('role_id', '=', role_a.id), ('planning_name', '=', '中夜')]).id,
|
||||
'start_datetime': datetime(current_date.year, current_date.month, current_date.day,start_time2) + timedelta(hours=16) - timedelta(days=1),
|
||||
'end_datetime': datetime(current_date.year, current_date.month, current_date.day,end_time2) + timedelta(days=1, hours=16) - timedelta(days=1),
|
||||
'end_datetime': datetime(current_date.year, current_date.month, current_date.day,end_time2) + timedelta(hours=16) - timedelta(days=1),
|
||||
'role_id': role_a.id,
|
||||
'allocated_hours': 8,
|
||||
})
|
||||
@@ -205,6 +232,13 @@ class YuthonRunPlanning(models.Model):
|
||||
next_month = (selected_month % 12) + 1
|
||||
next_year = year + (1 if next_month == 1 else 0) # 如果是12月,年份加1
|
||||
last_day_of_month = datetime(next_year, next_month, 1)- timedelta(days=1)
|
||||
existing_slots = self.env['planning.slot'].search([
|
||||
('department_id.name', '=', '综合班'),
|
||||
('start_datetime', '>=', first_day_of_month),
|
||||
('start_datetime', '<=', last_day_of_month),
|
||||
])
|
||||
if len(existing_slots) > 0:
|
||||
raise UserError(f"该月已经有排程,请选择其他时间。")
|
||||
else:
|
||||
next_month = (selected_month % 12) + 1
|
||||
next_year = year + (1 if next_month == 1 else 0)
|
||||
@@ -212,6 +246,13 @@ class YuthonRunPlanning(models.Model):
|
||||
next_next_month = (next_month % 12) + 1
|
||||
next_next_year = next_year + (1 if next_next_month == 1 else 0)
|
||||
last_day_of_month = datetime(next_next_year, next_next_month, 1)- timedelta(days=1)
|
||||
existing_slots = self.env['planning.slot'].search([
|
||||
('department_id.name', '=', '综合班'),
|
||||
('start_datetime', '>=', first_day_of_month),
|
||||
('start_datetime', '<=', last_day_of_month),
|
||||
])
|
||||
if len(existing_slots) > 0:
|
||||
raise UserError(f"该月已经有排程,请选择其他时间。")
|
||||
|
||||
role_a = self.env['planning.role'].search([('name', '=', '工程部')], limit=1)
|
||||
start_time = int(self.env['planning.slot.template'].search(
|
||||
@@ -247,13 +288,13 @@ class YuthonRunPlanning(models.Model):
|
||||
while current_date <= last_day_of_month:
|
||||
for employee in range(0, len(self.all_run_ids)):
|
||||
i = i + 1
|
||||
slot_id = all_slot.search([('resource_id', '=', self.engineering_run_ids[employee].employee_id.resource_id.id), ('start_datetime', '>=', first_day_of_month), ('start_datetime', '<=', last_day_of_month)]).sorted('start_datetime')
|
||||
slot_id = all_slot.search([('resource_id', '=', self.all_run_ids[employee].employee_id.resource_id.id), ('start_datetime', '>=', first_day_of_month), ('start_datetime', '<=', last_day_of_month)]).sorted('start_datetime')
|
||||
if i < 31:
|
||||
slot_id[i].write({
|
||||
'template_id': self.env['planning.slot.template'].search(
|
||||
[('role_id', '=', role_a.id), ('planning_name', '=', '中夜')]).id,
|
||||
'start_datetime': datetime(current_date.year, current_date.month, current_date.day,start_time2) + timedelta(hours=16) - timedelta(days=1),
|
||||
'end_datetime': datetime(current_date.year, current_date.month, current_date.day,end_time2) + timedelta(days=1, hours=16) - timedelta(days=1),
|
||||
'end_datetime': datetime(current_date.year, current_date.month, current_date.day,end_time2) + timedelta(hours=16) - timedelta(days=1),
|
||||
'role_id': role_a.id,
|
||||
'allocated_hours': 8,
|
||||
})
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
from odoo import api, fields, models, tools, _
|
||||
from datetime import datetime, time, timedelta
|
||||
|
||||
from odoo.exceptions import UserError, ValidationError
|
||||
|
||||
class YuthonShiftPlanning(models.Model):
|
||||
_name = 'yuthon.shift.planning'
|
||||
@@ -28,6 +28,13 @@ class YuthonShiftPlanning(models.Model):
|
||||
next_month = (selected_month % 12) + 1
|
||||
next_year = year + (1 if next_month == 1 else 0) # 如果是12月,年份加1
|
||||
end_date = datetime(next_year, next_month, 1)
|
||||
existing_slots = self.env['planning.slot'].search([
|
||||
('role_id.name', '=', '保安部'),
|
||||
('start_datetime', '>=', start_date),
|
||||
('start_datetime', '<=', end_date),
|
||||
])
|
||||
if len(existing_slots) > 0:
|
||||
raise UserError(f"该月已经有排程,请选择其他时间。")
|
||||
else:
|
||||
next_month = (selected_month % 12) + 1
|
||||
next_year = year + (1 if next_month == 1 else 0)
|
||||
@@ -35,9 +42,15 @@ class YuthonShiftPlanning(models.Model):
|
||||
next_next_month = (next_month % 12) + 1
|
||||
next_next_year = next_year + (1 if next_next_month == 1 else 0)
|
||||
end_date = datetime(next_next_year, next_next_month, 1)
|
||||
|
||||
existing_slots = self.env['planning.slot'].search([
|
||||
('role_id.name', '=', '保安部'),
|
||||
('start_datetime', '>=', start_date),
|
||||
('start_datetime', '<=', end_date),
|
||||
])
|
||||
if len(existing_slots) > 0:
|
||||
raise UserError(f"该月已经有排程,请选择其他时间。")
|
||||
role_a = self.env['planning.role'].search([('name', '=', '保安部')], limit=1)
|
||||
role_template_a = self.env['planning.slot.template'].search([('planning_name', '=', '白班'), ('role_id', '=', role_a.id)])
|
||||
role_template_a = self.env['planning.slot.template'].search([('planning_name', '=', '早班'), ('role_id', '=', role_a.id)])
|
||||
role_template_b = self.env['planning.slot.template'].search([('planning_name', '=', '中班'), ('role_id', '=', role_a.id)])
|
||||
role_template_c = self.env['planning.slot.template'].search([('planning_name', '=', '夜班'), ('role_id', '=', role_a.id)])
|
||||
role = [role_template_a, role_template_b, role_template_c]
|
||||
@@ -116,8 +129,12 @@ class YuthonShiftPlanning(models.Model):
|
||||
if resource_id in ever_holidays and current_weekday in ever_holidays[resource_id]:
|
||||
pass
|
||||
else:
|
||||
self.create_planning_slot(record, role_a, role_item, current_date) # 确保这个方法存在
|
||||
self.create_planning_slot(record, role_a, role_item, current_date)
|
||||
current_date += timedelta(days=1)
|
||||
if current_date >= end_date:
|
||||
break
|
||||
if current_date >= end_date:
|
||||
break
|
||||
# 为白班员工创建排班
|
||||
create_shifts_for_group(self.planning_ever_white_ids, role[0])
|
||||
# 为中班员工创建排班
|
||||
|
||||
@@ -1,34 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<odoo>
|
||||
<data>
|
||||
<record id="module_category_attendance" model="ir.module.category">
|
||||
<field name="name">行政考勤组</field>
|
||||
</record>
|
||||
<record id="group_hr_attendance_user" model="res.groups">
|
||||
<field name="name">行政考勤用户</field>
|
||||
<field name="category_id" ref="module_hr_attendance"/>
|
||||
</record>
|
||||
<record id="group_hr_attendance_leader_leader1" model="res.groups">
|
||||
<field name="name">行政考勤天河投资领导</field>
|
||||
<field name="category_id" ref="module_hr_attendance"/>
|
||||
<field name="implied_ids" eval="[(4, ref('group_hr_attendance_user'))]"/>
|
||||
</record>
|
||||
<record id="group_hr_attendance_leader_leader2" model="res.groups">
|
||||
<field name="name">行政考勤天河物管领导</field>
|
||||
<field name="category_id" ref="module_hr_attendance"/>
|
||||
<field name="implied_ids" eval="[(4, ref('group_hr_attendance_user'))]"/>
|
||||
</record>
|
||||
<record id="group_hr_attendance_leader_leader3" model="res.groups">
|
||||
<field name="name">行政考勤天河粮储领导</field>
|
||||
<field name="category_id" ref="module_hr_attendance"/>
|
||||
<field name="implied_ids" eval="[(4, ref('group_hr_attendance_user'))]"/>
|
||||
</record>
|
||||
<record id="group_hr_attendance_leader_manager" model="res.groups">
|
||||
<field name="name">行政考勤管理员</field>
|
||||
<field name="category_id" ref="module_hr_attendance"/>
|
||||
<field name="implied_ids" eval="[(4, ref('group_hr_attendance_user')), (4, ref('group_hr_attendance_leader_leader1')),
|
||||
(4, ref('group_hr_attendance_leader_leader2')), (4, ref('group_hr_attendance_leader_leader3'))]"/>
|
||||
<field name="users" eval="[(4, ref('base.user_admin'))]"/>
|
||||
</record>
|
||||
</data>
|
||||
</odoo>
|
||||
@@ -8,11 +8,10 @@
|
||||
<select id="selectTemplate" class="form-select" t-on-change="onTemplateChange">
|
||||
<t t-foreach="props.slotTemplate.templateList" t-as="template" t-key="template.id">
|
||||
<option t-att-value="template.id">
|
||||
<t t-esc="template.name"/>
|
||||
<t t-esc="template.planing_name"/>
|
||||
</option>
|
||||
</t>
|
||||
</select>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
<t t-if="props.button or props.delButton">
|
||||
|
||||
@@ -8,7 +8,9 @@
|
||||
<field name="planning_name" string="名称"/>
|
||||
</xpath>
|
||||
<xpath expr="//field[@name='role_id']" position="after">
|
||||
<field name="department_id" string="部门"/>
|
||||
<field name="department_id"/>
|
||||
<field name="end_time2"/>
|
||||
<field name="day2"/>
|
||||
<field name="color" widget="color_picker" optional="show"/>
|
||||
</xpath>
|
||||
</field>
|
||||
@@ -19,7 +21,9 @@
|
||||
<field name="inherit_id" ref="planning.planning_slot_template_view_form"/>
|
||||
<field name="arch" type="xml">
|
||||
<xpath expr="//field[@name='role_id']" position="after">
|
||||
<field name="department_id" string="部门"/>
|
||||
<field name="department_id"/>
|
||||
<field name="end_time2"/>
|
||||
<field name="day2"/>
|
||||
<field name="color" widget="color_picker" optional="show"/>
|
||||
</xpath>
|
||||
<xpath expr="//label[@for='start_time']" position="before">
|
||||
|
||||
@@ -109,6 +109,6 @@
|
||||
<field name="res_model">planning.slot</field>
|
||||
<field name="view_mode">gantt,calendar,tree,form,kanban,pivot,graph</field>
|
||||
<field name="context">{'planning_expand_resource': 1, 'planning_expand_role': 1}</field>
|
||||
<field name="domain">[('department_id.name','=', '客服中心')]</field>
|
||||
<field name="domain">[('department_id.name','=', '客户部')]</field>
|
||||
</record>
|
||||
</odoo>
|
||||
@@ -47,17 +47,14 @@ class YuthonProperty(models.Model):
|
||||
live_room = fields.Many2one('yuthon.live.room', string="居住用房")
|
||||
is_electricity_meter = fields.Boolean(string="电表")
|
||||
electricity_id = fields.Many2one('yuthon.electricity.setting', string="电费标准配置")
|
||||
admin_id = fields.Many2one('hr.employee', string="管理员")
|
||||
yuthon_company = fields.Selection([('thtz', '天河投资'), ('thwg', '天河物管'),
|
||||
('thlc', '天河粮储'), ('ttcj', '天投城建'), ('fz', '房总')], string="所属公司")
|
||||
tenure_type = fields.Selection([('dai', '代管'), ('zi', '自营')], string="权属类型")
|
||||
admin_id = fields.Many2one('res.users', string="管理员")
|
||||
purpose_id = fields.Many2one('yuthon.resource.purpose', string="管理类型")
|
||||
is_confirm_authorization = fields.Boolean(string="确权")
|
||||
owner_id = fields.Many2one('yuthon.owner.message', string="权属人")
|
||||
property_card = fields.Html(string="产权证")
|
||||
life_timer = fields.Datetime(string="使用时间")
|
||||
property_use_time = fields.Selection([('a', '70年'), ('b', '40年')], string="使用年限")
|
||||
property_precinct = fields.Many2one('yuthon.precinct.message', string="所属片区")
|
||||
precinct_id = fields.Many2one('yuthon.precinct.message',string="所属片区")
|
||||
asset_type_id = fields.Many2one('yuthon.resource.type', string="出租类型")
|
||||
is_hvac = fields.Boolean(string="使用中央空调")
|
||||
is_handle_land = fields.Boolean(string="办理土地有偿使用手续")
|
||||
@@ -90,6 +87,29 @@ class YuthonProperty(models.Model):
|
||||
property_merge_approval_id = fields.Many2one('yuthon.property', string='关联物业信息')
|
||||
manage_fee_line_ids = fields.One2many('manage.information.fee.line', 'yuthon_property_id', string='关联管理费明细行')
|
||||
|
||||
@api.onchange('title_information_ids')
|
||||
def _onchange_title_information_ids(self):
|
||||
for rec in self:
|
||||
title_info_records = rec.title_information_ids
|
||||
if title_info_records:
|
||||
latest_record_id = sorted(title_info_records, key=lambda x: x.start_time, reverse=True)[0]
|
||||
rec.write({
|
||||
'equity_area':latest_record_id.equity_area,
|
||||
'management_area': latest_record_id.management_area,
|
||||
'building_area':latest_record_id.building_area
|
||||
})
|
||||
|
||||
@api.onchange('manage_information_ids')
|
||||
def _onchange_manage_information_ids(self):
|
||||
for rec in self:
|
||||
manage_information_ids = rec.manage_information_ids
|
||||
if manage_information_ids:
|
||||
latest_record_id = sorted(manage_information_ids, key=lambda x: x.start_time, reverse=True)[0]
|
||||
rec.write({
|
||||
'precinct_id': latest_record_id.precinct_id.id,
|
||||
'admin_id': latest_record_id.admin_id.id
|
||||
})
|
||||
|
||||
@api.onchange('building_area')
|
||||
def _onchange_building_area(self):
|
||||
for rec in self:
|
||||
@@ -301,7 +321,7 @@ class TitleInformationLine(models.Model):
|
||||
rent_area = fields.Float(string="可租面积")
|
||||
owner = fields.Many2one('yuthon.owner.message',string="权属人")
|
||||
title_certificate = fields.Char(string="产权证号")
|
||||
start_time = fields.Date(string="生效日期")
|
||||
start_time = fields.Date(string="生效日期", default=fields.Date.today)
|
||||
end_date = fields.Date(string="失效日期")
|
||||
|
||||
|
||||
@@ -311,10 +331,10 @@ class ManageInformationLine(models.Model):
|
||||
|
||||
yuthon_property_id = fields.Many2one('yuthon.property', string="关联物业信息")
|
||||
purpose_id = fields.Many2one('yuthon.resource.purpose', string="管理类型")
|
||||
precinct = fields.Char(string="片区")
|
||||
admin_id = fields.Many2one('hr.employee', string="管理员")
|
||||
precinct_id = fields.Many2one('yuthon.precinct.message',string="所属片区")
|
||||
admin_id = fields.Many2one('res.users', string="管理员")
|
||||
yuthon_company = fields.Selection([('thtz', '天河投资集团'), ('thwg', '天河物管'), ('thlc', '天河粮储'), ('thtj', '天城投建')], string="所属公司")
|
||||
start_time = fields.Date(string="生效日期")
|
||||
start_time = fields.Date(string="生效日期", default=fields.Date.today)
|
||||
end_date = fields.Date(string="失效日期")
|
||||
|
||||
|
||||
|
||||
@@ -86,8 +86,6 @@
|
||||
<field name="building_area"/>
|
||||
</group>
|
||||
<group string="管理信息">
|
||||
<field name="yuthon_company"/>
|
||||
<field name="tenure_type"/>
|
||||
<field name="property_precinct"/>
|
||||
<field name="admin_id"/>
|
||||
</group>
|
||||
@@ -113,8 +111,10 @@
|
||||
<tree editable="bottom">
|
||||
<field name="yuthon_property_id" column_invisible="1"/>
|
||||
<field name="purpose_id"/>
|
||||
<field name="precinct"/>
|
||||
<field name="precinct_id"/>
|
||||
<field name="admin_id"/>
|
||||
<field name="start_time"/>
|
||||
<field name="end_date"/>
|
||||
</tree>
|
||||
</field>
|
||||
</page>
|
||||
@@ -209,15 +209,14 @@
|
||||
<search>
|
||||
<field name="name" string="资产名称"/>
|
||||
<field name="owner_id" string="负责人"/>
|
||||
<field name="property_precinct" string="片区"/>
|
||||
<field name="precinct_id" string="片区"/>
|
||||
<group expand="0">
|
||||
<filter name="group_statu" string="物业状态" context="{'group_by': 'state'}"/>
|
||||
<filter name="group_purpose" string="资产用途" context="{'group_by': 'purpose_id'}"/>
|
||||
</group>
|
||||
<searchpanel>
|
||||
<field name="yuthon_company" string="所属公司" enable_counters="1"/>
|
||||
<field name="tenure_type" string="权属类型" enable_counters="1"/>
|
||||
<field name="property_precinct" string="所属片区" enable_counters="1"/>
|
||||
<field name="precinct_id" string="所属片区" enable_counters="1"/>
|
||||
<field name="title_address" string="产权地址" enable_counters="1"/>
|
||||
</searchpanel>
|
||||
</search>
|
||||
</field>
|
||||
|
||||
@@ -64,7 +64,7 @@ msgstr "会议管理"
|
||||
#: model:ir.ui.menu,name:purchase.menu_purchase_root
|
||||
#, python-format
|
||||
msgid "Purchase"
|
||||
msgstr "办公用品管理"
|
||||
msgstr "采购"
|
||||
|
||||
#. module: fleet
|
||||
#. odoo-javascript
|
||||
|
||||
@@ -4,37 +4,31 @@
|
||||
<menuitem id="hr_attendance_root_board"
|
||||
name="考勤管理"
|
||||
web_icon="yuthon_work_brand,static/description/attendance.png"
|
||||
groups="yuthon_hr_attendance. group_hr_attendance_user"
|
||||
sequence="7"/>
|
||||
<menuitem id="menu_hr_attendance_my_record_board"
|
||||
name="我的考勤"
|
||||
parent="hr_attendance_root_board"
|
||||
action="yuthon_hr_attendance.hr_attendance_action1"
|
||||
groups="yuthon_hr_attendance. group_hr_attendance_user"
|
||||
sequence="1"/>
|
||||
<menuitem id="menu_hr_attendance_is_abnormal_board"
|
||||
name="我的异常"
|
||||
parent="hr_attendance_root_board"
|
||||
action="yuthon_hr_attendance.hr_attendance_action_is_abnormal"
|
||||
groups=" group_hr_attendance_user"
|
||||
sequence="2"/>
|
||||
<menuitem id="menu_hr_attendance_tt_record_board"
|
||||
name="天河投资"
|
||||
parent="hr_attendance_root_board"
|
||||
action="yuthon_hr_attendance.action_attendance_yuthon_company_form1"
|
||||
groups="yuthon_hr_attendance.group_hr_attendance_leader_leader1"
|
||||
sequence="3"/>
|
||||
<menuitem id="menu_hr_attendance_lc_record_board"
|
||||
name="天河粮储"
|
||||
parent="hr_attendance_root_board"
|
||||
action="yuthon_hr_attendance.action_attendance_yuthon_company_form2"
|
||||
groups="yuthon_hr_attendance.group_hr_attendance_leader_leader2"
|
||||
sequence="5"/>
|
||||
<menuitem id="menu_hr_attendance_wg_record_board"
|
||||
name="天河物管"
|
||||
parent="hr_attendance_root_board"
|
||||
action="yuthon_hr_attendance.action_attendance_yuthon_company_form3"
|
||||
groups="yuthon_hr_attendance.group_hr_attendance_leader_leader3"
|
||||
sequence="7"/>
|
||||
|
||||
<!-- 计划相关 -->
|
||||
@@ -90,7 +84,6 @@
|
||||
<menuitem id="attendance_resources_setting_root_board"
|
||||
name="配置"
|
||||
parent="hr_attendance_root_board"
|
||||
groups="yuthon_hr_attendance.group_hr_attendance_leader_manager"
|
||||
sequence="99"/>
|
||||
<menuitem id="menu_hr_attendance_work_board"
|
||||
name="考勤时间表"
|
||||
|
||||
Reference in New Issue
Block a user