Merge pull request !333 from 李鹏宇/dev
This commit is contained in:
李鹏宇
2024-10-24 12:57:43 +00:00
committed by Gitee
54 changed files with 1732 additions and 777 deletions
@@ -37,6 +37,7 @@
'depends': ['account', 'purchase', 'hr_expense', 'web'],
'assets': {
'web.assets_backend': [
'list_view_sticky_header_and_column/static/src/scss/form.scss',
'list_view_sticky_header_and_column/static/src/js'
'/list_view_sticky_header_and_column.js',
'list_view_sticky_header_and_column/static/src/xml'
@@ -0,0 +1,146 @@
.o_form_view.o_xxl_form_view, {
.o_form_sheet_bg {
> .o_form_sheet {
width: 100%;
max-width: calc(100% - 100px) !important;
}
}
}
button.btn {
margin-left: 3px;
}
/*
选择o_wrap_field下具有o_required_modifier元素的标签, 在标签子元素o_wrap_label的label标签前面添加一个红色*号
*/
.o_wrap_field:has(.o_required_modifier) > .o_wrap_label {
position: relative; /* 为了使绝对定位的星号相对于标签定位 */
}
.o_wrap_field:has(.o_required_modifier) > .o_wrap_label label::before {
content: "*";
color: red;
font-weight: bold;
position: absolute;
left: 0.3rem; /* 根据需要调整位置 */
top: 50%;
transform: translateY(-50%);
font-size: 1.2rem; /* 根据需要调整字体大小 */
}
//.o_wrap_field:has(.o_required_modifier) > .o_wrap_label label::before {
// content: "*";
// color: red;
// font-weight: bold;
// display: inline-block;
// //margin-left: -0.5rem;
//}
// 修改表单内label的样式
.o_form_sheet, .o_form_nosheet {
.grid {
gap: 0 !important;
}
//.o_group {
// border-bottom: 1px solid black;
//}
> .o_inner_group:first-child {
border: 1px solid #{$gray-200};
border-bottom: none;
}
> .o_inner_group:not(:first-child) {
border-right: 1px solid #{$gray-200};
border-left: 2px solid #{$gray-200};
}
> .o_group:first-child {
border: 1px solid #{$gray-200};
border-bottom: none;
}
.o_group {
border-right: 1px solid #{$gray-200};
border-left: 1px solid #{$gray-200};
//box-shadow: inset 1px 0 0 #{$gray-200}, inset -1px 0 0 #{$gray-200};
margin-right: calc(var(--gutter-x) * .0) !important;
margin-left: calc(var(--gutter-x) * .0) !important;
.o_inner_group {
padding-right: calc(var(--gutter-x) * .0) !important;
padding-left: calc(var(--gutter-x) * .0) !important;
}
//* {
// padding-right: calc(var(--gutter-x) * .0) !important;
// padding-left: calc(var(--gutter-x) * .0) !important;
//}
}
.o_horizontal_separator:not(:empty) {
text-align: center;
border-bottom: 1px solid #FFFFFF;
box-shadow: none;
//box-shadow: inset 0 1px 0 0 #FFFFFF !important;
padding: 0.5rem 1rem;
background: #{$gray-200};
margin-bottom: 0 !important;
margin-top: 0 !important;
font-size: var(--body-font-size);
}
.o_inner_group {
--columns: 1;
gap: 0 !important;;
margin-bottom: 0 !important;
border-left: 1px solid #{$gray-200};
margin-right: 0;
//box-shadow: inset 1px 0 0 #{$gray-200}, inset -1px 0 0 #{$gray-200}, inset 0 1px 0 #{$gray-200};
//grid-template-columns: minmax(150px, auto) minmax(0, 1fr) !important;
}
.o_wrap_field {
.o_form_label {
margin-bottom: 0 !important;
}
.o_field_widget {
margin-bottom: 0 !important;
}
.o_wrap_label {
display: flex;
align-items: center;
}
.o_wrap_label:not(:last-child) {
padding: 0.8rem 1rem;
}
// 其实也是选择的label,不过防止有些样式覆盖
.o_cell.o_wrap_label {
background: #{$gray-200} !important;
border-bottom: 1px solid #FFFFFF !important;
//margin-right: -1px !important;
}
.o_wrap_input {
padding: 0 0 0 1rem;
display: flex;
align-items: center;
.o_field_x2many_list {
margin-left: -1rem !important;
width: calc(100% + 1rem) !important;
}
}
// 选择的也是o_wrap_input,不过有些字段设置nolabel后上面的选择不会被识别
.o_cell:not(.o_wrap_label) {
border: 1px solid #{$gray-200} !important;
margin-top: -1px !important;
//box-shadow: inset 0 -1px 0 #{$gray-200};
border-right: none;
display: flex;
align-items: center;
}
}
.o_form_statusbar {
border: 1px solid #{$gray-200};
border-bottom: none;
.o_form_statusbar {
button {}
}
}
}
//.o_form_editable {
// .o_wrap_input {
// box-shadow: inset 0px -15px 30px -30px #{$gray-200};
// }
//}
@@ -33,10 +33,10 @@
}
.o_form_view:not(.o_field_highlight) .o_field_widget:not(.o_field_invalid):not(.o_field_highlight) .o_input:not(:hover):not(:focus) {
--o-input-border-color: transparent;
border-style: solid;
border-color: #000;
border-width: 0px;
border-bottom-width: 1px;
//border-style: solid;
//border-color: #000;
//border-width: 0px;
//border-bottom-width: 1px;
}
body.white .table {
width: -webkit-fill-available !important;
@@ -63,3 +63,5 @@ th:hover .fa-thumb-tack,
th.clicked-header .fa-thumb-tack {
display: block;
}
//.o_input:hover{background: #b3c8df!important;}
+4 -35
View File
@@ -24,18 +24,17 @@ class RoomBooking(models.Model):
default=lambda self: self.env.user.id if not self.env.user._is_public() else False,
tracking=5)
# Fields used to group bookings in gantt view
office_id = fields.Many2one(related="room_id.office_id", string="Office", readonly=True, store=True)
company_id = fields.Many2one(related="room_id.company_id", string="Company", readonly=True, store=True)
# pengyuthon
department_id = fields.Many2one('hr.department', related='organizer_id.employee_id.department_id', string="申请人部门")
is_notice = fields.Boolean(string="是否发布通知", default=True)
is_hour = fields.Boolean(string="提前一小时", default=True)
is_day = fields.Boolean(string="提前一天", default=True)
meeting_type = fields.Selection([('up', '线上'), ('down', '线下'), ('exterior', '外部')], default='down', string="会议形式",
required=True)
meeting_type_id = fields.Many2one('room.meeting.type', string="会议类型",)
room_users_ids = fields.Many2many('res.users', string="会议参加人员",store=True)
meeting_type_id = fields.Many2one('room.meeting.type', string="会议类型")
room_users_ids = fields.Many2many('res.users', string="会议参加人员", store=True)
other_company_id = fields.Many2one('res.partner', string="外部公司")
other_company_user_ids = fields.One2many(related="other_company_id.child_ids", string="其他人员")
@@ -53,7 +52,6 @@ class RoomBooking(models.Model):
# 关联流程
relevancy_type = fields.Selection([('none', '无')], string="关联流程类型")
#打开选择范围弹窗
def open_select_range_wizard(self):
return {
'name': '选择范围',
@@ -67,7 +65,6 @@ class RoomBooking(models.Model):
@api.model_create_multi
def create(self, vals_list):
bookings = super(RoomBooking, self).create(vals_list)
# Notify frontend views of new bookings
for room, bookings in bookings.grouped("room_id").items():
room._notify_booking_view("create", bookings)
data = vals_list[0]
@@ -112,29 +109,6 @@ class RoomBooking(models.Model):
html_content = file.read().replace('姓名', html_select)
self.write({'meeting_data': html_content})
# @api.depends('department_ids', 'employee_ids', 'users_role_ids')
# def compute_room_users_ids(self):
# department_users_list = users_role_list = []
# for users in self:
# if users.department_ids:
# # 查看是否下级部门
# for depart in users.department_ids:
# department_users_data = users.env['hr.employee'].search([('department_id', '=', depart.id)])
# department_users_list = [de.user_id.id for de in department_users_data]
# if depart.child_ids:
# for child in depart.child_ids:
# department_child_users_data = users.env['hr.employee'].search(
# [('department_id', '=', child.id)])
# department_users_list += [de.user_id.id for de in department_child_users_data]
# employee_users_list = users.employee_ids.user_id.ids
# if users.users_role_ids:
# for user_id in users.users_role_ids:
# user_role_data = users.env['hr.employee'].search(['|', ('user_role_id', '=', user_id.id), ('user_role_ids', '=', user_id.id)])
# users_role_list = [ro.user_id.id for ro in user_role_data]
# publish_user_list = department_users_list + employee_users_list + users_role_list
# false_none_list = [x for x in publish_user_list if x != False]
# users.room_users_ids = [(6, 0, list(set(false_none_list)))]
@api.onchange('department_ids', 'employee_ids', 'users_role_ids', 'room_users_ids')
def onchange_partner_ids(self):
for par in self:
@@ -161,9 +135,6 @@ class RoomBooking(models.Model):
self.env['room.meeting.sign'].create({
'room_booking_id': self.id,
'partner_name': external.name,
# 'sign_user_name': external.name, # 单位名称里面的联系人
# 'job': external.function,
# 'mobile': external.mobile,
'user_type': 'outsiders',
'sign_type': 'no',
})
@@ -181,9 +152,7 @@ class RoomBooking(models.Model):
# 企业用户发送通知
partner_ids = self.sudo().env['res.users'].search([('id', 'in', self.room_users_ids.ids)]).mapped(
'partner_id').ids
self.sudo().with_context(lang=self.env.lang)._message_auto_subscribe_notify(partner_ids,
'room.message_yuthon_room_users_data')
# odoo发通知
self.sudo().with_context(lang=self.env.lang)._message_auto_subscribe_notify(partner_ids, 'room.message_yuthon_room_users_data')
def meeting_sign_in(self):
# 页面填写信息之后返回给地址
+2 -2
View File
@@ -1,3 +1,3 @@
.wizard_width {
width: 50% !important;
.horizontal-button {
white-space: nowrap !important; /* 确保文本不换行 */
}
+53 -50
View File
@@ -128,8 +128,7 @@
<button name="meeting_sign_in" string="签到" invisible="meeting_type != 'down'" type="object"
class="oe_highlight"/>
<button name="meeting_partner_create" string="录入" invisible="meeting_type != 'down'"
type="object"
class="oe_highlight"/>
type="object" class="oe_highlight"/>
<button name="sync_wechat_room" string="同步企业微信" type="object" class="oe_highlight"/>
</header>
<group>
@@ -152,61 +151,65 @@
<field name="meeting_type_id" required="1"/>
</group>
</group>
<div>
<button name="open_select_range_wizard" type="object">参与范围</button>
</div>
<group>
<group>
<group>
<field name="room_users_ids" widget="many2many_tags"/>
<field name="partner_ids" widget="many2many_tags" force_save="1" invisible="1"/>
<field name="other_company_user_ids" widget="many2many_tags" readonly="1"/>
<field name="is_notice"/>
</group>
<group>
<button name="open_select_range_wizard" string="选择范围" type="object" class="btn btn-primary horizontal-button"/>
</group>
</group>
<group>
<group>
<field name="is_hour" invisible="not is_notice"/>
<field name="is_day" invisible="not is_notice"/>
</group>
<group>
<field name="room_users_ids" widget="many2many_tags"/>
<field name="partner_ids" widget="many2many_tags" force_save="1" invisible="1"/>
<field name="other_company_user_ids" widget="many2many_tags" readonly="1"/>
</group>
</group>
<notebook>
<page name="sign" string="签到详情">
<group>
</group>
<notebook>
<page name="sign" string="签到详情">
<group>
<field name="should_user"/>
<group>
<field name="should_user"/>
</group>
<group>
<field name="right_user"/>
</group>
<field name="meeting_sing_ids">
<tree delete="0" create="0">
<field name="room_booking_id" column_invisible="1"/>
<field name="sign_user_name"/>
<field name="partner_name"/>
<field name="job"/>
<field name="mobile"/>
<field name="user_type"/>
<field name="sign_type"/>
<field name="sign_time"/>
</tree>
</field>
</group>
<group>
<field name="right_user"/>
</group>
<field name="meeting_sing_ids">
<tree delete="0" create="0">
<field name="room_booking_id" column_invisible="1"/>
<field name="sign_user_name"/>
<field name="partner_name"/>
<field name="job"/>
<field name="mobile"/>
<field name="user_type"/>
<field name="sign_type"/>
<field name="sign_time"/>
</tree>
</field>
</group>
</page>
<page name="meeting_html" string="会议说明">
<button name="button_meeting_data" string="座位排列" type="object" class="oe_highlight"/>
<field name="meeting_data" widget="tinymce"/>
</page>
</notebook>
</sheet>
<div class="oe_chatter">
<field name="message_follower_ids"/>
<field name="message_ids"/>
</div>
</form>
</field>
</record>
</page>
<page name="meeting_html" string="会议说明">
<button name="button_meeting_data" string="座位排列" type="object" class="oe_highlight"/>
<field name="meeting_data" widget="tinymce"/>
</page>
</notebook>
</sheet>
<div class="oe_chatter">
<field name="message_follower_ids"/>
<field name="message_ids"/>
</div>
</form>
</field>
</record>
<record id="room_booking_action" model="ir.actions.act_window">
<field name="name">Bookings</field>
<field name="res_model">room.booking</field>
<field name="view_mode">gantt,calendar,list,kanban,form,search</field>
</record>
</odoo>
<record id="room_booking_action" model="ir.actions.act_window">
<field name="name">Bookings</field>
<field name="res_model">room.booking</field>
<field name="view_mode">gantt,calendar,list,kanban,form,search</field>
</record>
</odoo>
@@ -4,7 +4,7 @@
<field name="name">room.select.range.wizard.form</field>
<field name="model">room.select.range.wizard</field>
<field name="arch" type="xml">
<form js_class="wizard_width">
<form>
<group col="2">
<group>
<field name="department_ids" widget="many2many_tags"/>
@@ -7,7 +7,7 @@
<field name="arch" type="xml">
<xpath expr="//field[@name='work_email']" position="after">
<field name="user_role_id"/>
<field name="user_role_ids" widget="many2many_tags" force_save="1"/>
<field name="user_role_ids" widget="many2many_tags"/>
</xpath>
</field>
</record>
+1 -3
View File
@@ -12,8 +12,7 @@
'category': 'Human Resources/Attendances',
'sequence': 240,
'website': 'https://www.pengyuthon.com',
# 'depends': ['hr_attendance', 'resource', 'base', 'hr', 'mail', 'soong_workflow'],
'depends': ['hr_attendance', 'resource', 'base', 'hr', 'mail','soong_workflow','yuthon_holiday'],
'depends': ['hr_attendance', 'resource', 'base', 'hr', 'mail', 'soong_workflow'],
'data': [
'security/ir.model.access.csv',
# 'security/approval_attendance.xml',
@@ -29,7 +28,6 @@
'views/go_approval.xml',
'views/duty_approval.xml',
'views/leave_approval.xml',
# 'views/holidays_approval.xml',
'views/remove_holiday_approval.xml',
'views/card_approval.xml',
'views/holiday_manage.xml',
-1
View File
@@ -8,7 +8,6 @@ from . import overtime_approval
from . import go_approval
from . import duty_approval
from . import leave_approval
from . import holidays_approval
from . import remove_holiday_approval
from . import card_approval
from . import holiday_manage
@@ -1,85 +0,0 @@
# -*- coding: utf-8 -*-
from email.policy import default
from odoo import api, fields, models, tools, _
from datetime import datetime, time, timedelta
from odoo.exceptions import ValidationError, UserError
class HolidaysApprovals(models.Model):
_name = 'holidays.approval'
_description = "请假审批"
# _inherit = ['mail.thread.main.attachment', 'mail.activity.mixin', 'soong.workflow.mixin']
_inherit = ['mail.thread.main.attachment', 'mail.activity.mixin', 'soong.workflow.mixin']
name = fields.Char(string="名称")
company_page = fields.Selection([('tz', '天河投资'), ('wg', '天河物管'), ('lc', '天河粮储')], string="公司")
applicant_id = fields.Many2one('hr.employee', string="申请人", default=lambda self: self.env.user.id)
leave_absence_id = fields.Many2one('hr.employee', string="请假人")
code = fields.Char(string="编号", default=lambda self: self.env['ir.sequence'].next_by_code('holidays_approval'))
department_id = fields.Many2one('hr.department', string="部门")
approvals_ids = fields.One2many('holidays.approvals.line', 'approvals_id', string="请假审批行")
def holiday_approval(self):
pass
@api.onchange('applicant_id')
def _onchange_applicant_id(self):
self.leave_absence_id = self.applicant_id
class HolidaysApprovalsLine(models.Model):
_name = 'holidays.approvals.line'
_description = '请假审批行'
name = fields.Char(string="请假事由")
approvals_id = fields.Many2one('holidays.approval', string="管理请假审批")
vacation_category = fields.Many2one('holiday.type.setting', string="休假类别")
leave_type_id = fields.Many2one('hr.leave.type', string="请假类型",)
days_available = fields.Float(string="可用天数", store=True)
applicants = fields.Selection([('hour', '按小时'), ('day', '天'), ('half_day', '半天')], string="申请单位",
store=True)
date_start = fields.Datetime(string="开始时间", default=fields.Datetime.now)
date_end = fields.Datetime(string="结束时间")
leave_days = fields.Float(string='请假天数', store=True,compute='_compute_leave_days')
surplus_days = fields.Float(string="剩余天数",compute='_compute_surplus_days')
@api.onchange('leave_type_id')
def onchange_approvals_ids(self):
for rec in self:
rec.days_available = rec.leave_type_id.holiday_days
rec.applicants = rec.leave_type_id.request_unit
@api.depends('date_start', 'date_end')
def _compute_leave_days(self):
for rec in self:
if rec.date_start and rec.date_end:
delta = rec.date_end - rec.date_start
rec.leave_days = delta.days + (delta.seconds / 86400)
if rec.applicants == 'hour':
rec.leave_days = rec.leave_days / 24
else:
rec.leave_days = 0
@api.depends('leave_days', 'days_available')
def _compute_surplus_days(self):
for rec in self:
rec.surplus_days = rec.days_available - rec.leave_days
def button_holiday_detail(self):
return {
'name': '请假详情',
'view_mode': 'form',
'res_model': 'holiday.details.wizard',
'type': 'ir.actions.act_window',
'target': 'new',
"context": {
'default_holiday_days': self.leave_type_id.holiday_days,
'default_vacation_days_description': self.leave_type_id.vacation_days_description,
'default_vacation_type_id': self.vacation_category.id,
'default_annual': self.leave_type_id.annual,
'default_treated': self.leave_type_id.treated,
'default_remarks': self.leave_type_id.remarks,
'default_leave_type_id': self.leave_type_id.id,
}
}
@@ -20,4 +20,3 @@ access_holidays_approvals_line,holidays.approvals.line,model_holidays_approvals_
access_go_approvals_line,go.approvals.line,model_go_approvals_line,base.group_user,1,1,1,1
access_overtime_user_line,overtime.user.line,model_overtime_user_line,base.group_user,1,1,1,1
access_duty_approval_line,duty.approval.line,model_duty_approval_line,base.group_user,1,1,1,1
access_holiday_details_wizard,holiday.details.wizard,model_holiday_details_wizard,base.group_user,1,1,1,1
1 id name model_id:id group_id:id perm_read perm_write perm_create perm_unlink
20 access_go_approvals_line go.approvals.line model_go_approvals_line base.group_user 1 1 1 1
21 access_overtime_user_line overtime.user.line model_overtime_user_line base.group_user 1 1 1 1
22 access_duty_approval_line duty.approval.line model_duty_approval_line base.group_user 1 1 1 1
access_holiday_details_wizard holiday.details.wizard model_holiday_details_wizard base.group_user 1 1 1 1
@@ -1,67 +0,0 @@
<?xml version="1.0" encoding="UTF-8" ?>
<odoo>
<record id="holiday_approval_tree" model="ir.ui.view">
<field name="name">holiday.approval.tree</field>
<field name="model">holidays.approval</field>
<field name="arch" type="xml">
<tree>
<field name="company_page"/>
<field name="applicant_id"/>
<field name="department_id"/>
</tree>
</field>
</record>
<record id="holiday_approval_form" model="ir.ui.view">
<field name="name">holiday.approval.actions</field>
<field name="model">holidays.approval</field>
<field name="arch" type="xml">
<form>
<!-- <header>-->
<!-- <button name="holiday_approval" string="发起申请" type="object" class="oe_highlight"/>-->
<!-- </header>-->
<sheet>
<group col="3">
<group>
<field name="code"/>
<field name="leave_absence_id"/>
</group>
<group>
<field name="department_id"/>
<field name="applicant_id"/>
</group>
<group>
<field name="company_page"/>
</group>
</group>
<notebook>
<page string="请假详情">
<field name="approvals_ids" string=" ">
<tree editable="bottom">
<field name="approvals_id" column_invisible="1"/>
<field name="vacation_category" string="假期类别"/>
<field name="leave_type_id" string="假期类型"/>
<field name="days_available" readonly="1" sum="Total" force_save="1"/>
<field name="applicants" readonly="1" force_save="1"/>
<field name="leave_days" sum="Total"/>
<field name="surplus_days" sum="Total"/>
<field name="date_start"/>
<field name="date_end"/>
<field name="name"/>
<button name="button_holiday_detail" string="假期详情" class="oe_highlight" type="object"/>
</tree>
</field>
</page>
</notebook>
</sheet>
</form>
</field>
</record>
<record id="approval_request_holiday" model="ir.actions.act_window">
<field name="name">请假</field>
<field name="res_model">holidays.approval</field>
<field name="view_mode">tree,form</field>
</record>
</odoo>
-1
View File
@@ -1,4 +1,3 @@
from . import attendance_iot_manager_wizard
from . import holiday_details_wizard
@@ -1,21 +0,0 @@
from odoo import api, fields, models, tools
from odoo.exceptions import ValidationError
class HolidayDetailsWizard(models.Model):
_name = 'holiday.details.wizard'
_description = '假期详情弹窗'
holiday_days = fields.Float(string='假期天数')
vacation_days_description = fields.Text(string='假期天数说明')
vacation_type_id = fields.Many2one('holiday.type.setting', string='假期类别')
leave_type_id = fields.Many2one('hr.leave.type', string='假期类型',domain="[('vacation_type_id', '=', vacation_category)]")
annual = fields.Char(string='年次')
travel_leave = fields.Char(string='路程假')
treated = fields.Text(string='待遇')
remarks = fields.Text(string="备注")
details_id = fields.Many2one('holiday.details.wizard', string='假期详情')
@@ -1,21 +0,0 @@
<?xml version="1.0" encoding="UTF-8" ?>
<odoo>
<record id="view_holiday_details_wizard_form" model="ir.ui.view">
<field name="name">holiday.details.wizard.form</field>
<field name="model">holiday.details.wizard</field>
<field name="arch" type="xml">
<form string="假期需求及待遇">
<group string="假期需求及待遇">
<field name="vacation_type_id" string="假期类别"/>
<field name="leave_type_id" string="假期类型"/>
<field name="holiday_days"/>
<field name="vacation_days_description"/>
<field name="annual"/>
<field name="travel_leave"/>
<field name="treated"/>
<field name="remarks"/>
</group>
</form>
</field>
</record>
</odoo>
@@ -23,4 +23,5 @@
<field name="padding">3</field>
<field name="company_id" eval="False"/>
</record>
</odoo>
+34 -3
View File
@@ -1,16 +1,21 @@
from odoo import api, fields, models, _
from odoo.exceptions import UserError
class RoomBooking(models.Model):
_inherit = 'room.booking'
room_booking_library_ids = fields.One2many('issue.library', 'room_booking_id')
is_issue = fields.Boolean(string="是否关联议题")
issue_meeting_line_ids = fields.One2many('issue.meeting.line', 'meeting_booking_id', string="关联议题明细行")
def bottom_meeting_approval(self):
library_data = []
for library in self.room_booking_library_ids:
for library in self.issue_meeting_line_ids:
if library.state == 'done':
raise UserError('当前纪要不允许重复提交')
library.state = 'done'
library_data.append((0, 0, {
'name': library.name,
'minutes_id': library.issue_library_id.id,
'decision_results': library.decision_results,
'overview': library.decision_details,
}))
@@ -25,3 +30,29 @@ class RoomBooking(models.Model):
'default_meeting_date': self.start_datetime,
'default_meeting_minutes_ids': library_data
}}
@api.model_create_multi
def create(self, vals_list):
res = super().create(vals_list)
for vals in vals_list:
if vals['issue_meeting_line_ids']:
for line in vals['issue_meeting_line_ids']:
self.env['issue.library.room.line'].create({
'issue_library_id': line[2]['issue_library_id'],
'room_booking_id': res.id,
'room_id': vals['room_id'],
'meeting_type_id': vals['meeting_type_id'],
'approval_date': vals['start_datetime'],
})
return res
class IssueMeetingLine(models.Model):
_name = 'issue.meeting.line'
_description = '关联议题明细行'
meeting_booking_id = fields.Many2one('room.booking', string='关联会议室')
issue_library_id = fields.Many2one('issue.library', string='关联议题')
decision_results = fields.Selection([('agree', '通过'), ('disagree', '未通过')], string="决策结果")
decision_details = fields.Text(string="决策详情")
state = fields.Selection([('no', '未提交'), ('done', '已提交')], default='no', string="状态")
-3
View File
@@ -30,9 +30,6 @@ class IssueApproval(models.Model):
decision_display = fields.Char(string="决策清单", default='{"template": "yuthon_issue.html_decision_demo"}')
is_parent_unit = fields.Boolean(string="上级单位")
def pub_meeting_minutes(self):
pass
class IssueApprovalLine(models.Model):
_name = 'issue.approval.line'
+24 -7
View File
@@ -25,12 +25,11 @@ class IssueLibrary(models.Model):
relevancy_type = fields.Selection([('none', '无')], string="关联流程类型")
issue_approval_id = fields.Many2one('issue.approval', string="关联议题审批")
issue_library_line_ids = fields.One2many('issue.library.line', 'issue_library_id', string="决策明细")
issue_library_approval_line_ids = fields.One2many('issue.library.approval.line', 'issue_approval_id', string='流程记录')
room_booking_id = fields.Many2one('room.booking', string="会议室")
issue_library_approval_line_ids = fields.One2many('issue.library.approval.line', 'issue_library_id', string='流程记录')
approval_decision_sequence = fields.Char(string="决策清单事项")
decision_results = fields.Selection([('agree', '通过'), ('disagree', '未通过')], string="决策结果")
decision_details = fields.Text(string="决策详情")
is_booking = fields.Boolean(string="是否上会")
issue_library_room_line_ids = fields.One2many('issue.library.room.line', 'issue_library_id', string="关联会议明细行")
# 权限相关隐藏字段
employee_id = fields.Many2one('hr.employee', string='创建人', default=lambda self: self.env.user.employee_id)
department_id = fields.Many2one('hr.department', string='部门', related='employee_id.department_id')
@@ -87,6 +86,7 @@ class IssueLibrary(models.Model):
"views": [[form_id, "form"]],
"context": {
"id": issue_approval_id.id,
"is_issue": True,
}
}
@@ -100,6 +100,11 @@ class IssueLibrary(models.Model):
raise UserError("当前状态不允许上会")
for meet in self:
meet.write({"state": "on_meet"})
issue_details = []
for issue in issue_active_ids:
issue_details.append((0, 0, {
'issue_library_id': issue.id,
}))
form_id = self.env.ref("room.room_booking_view_form").id
return {
"type": "ir.actions.act_window",
@@ -107,7 +112,8 @@ class IssueLibrary(models.Model):
"res_model": "room.booking",
"views": [[form_id, "form"]],
"context": {
'default_room_booking_library_ids': [(6, 0, issue_active_ids.ids)],
'default_is_issue': True,
'default_issue_meeting_line_ids': issue_details,
}
}
@@ -151,14 +157,14 @@ class IssueLibraryLine(models.Model):
team_meet = fields.Selection(related='issue_approval_decision_id.team_meet', string='经营班子会')
board_meet = fields.Selection(related='issue_approval_decision_id.board_meet', string='董事会')
district_bureau = fields.Selection(related='issue_approval_decision_id.district_bureau', string='上级单位')
ordinal = fields.Char(related='issue_approval_decision_id.sequence',string='序号')
ordinal = fields.Char(related='issue_approval_decision_id.sequence', string='序号')
class IssueLibraryApprovalLine(models.Model):
_name = "issue.library.approval.line"
_description = '关联流程明细'
issue_approval_id = fields.Many2one('issue.library')
issue_library_id = fields.Many2one('issue.library', string="关联议题")
workflow_record_id = fields.Many2one('soong.workflow.record', string="标题")
code = fields.Char(string="流程编号")
approval_type = fields.Many2one(related="workflow_record_id.workflow_id", string="类型")
@@ -172,3 +178,14 @@ class IssueLibraryApprovalLine(models.Model):
"name": self.workflow_record_id.name,
"view_mode": "form",
}
class IssueLibraryRoomLine(models.Model):
_name = "issue.library.room.line"
_description = '关联会议明细'
issue_library_id = fields.Many2one('issue.library', string="关联议题")
room_booking_id = fields.Many2one('room.booking', string="会议名称")
room_id = fields.Many2one('room.room', string="会议地点")
meeting_type_id = fields.Many2one('room.meeting.type', string="会议类型")
approval_date = fields.Datetime(related="room_booking_id.write_date", string="创建日期")
+4 -2
View File
@@ -12,15 +12,17 @@ class IssueMeetingMinutes(models.Model):
meeting_type_id = fields.Many2one('room.meeting.type', string="会议类型")
meeting_date = fields.Datetime(string="会议时间")
code = fields.Char(string='编号', required=True, copy=False,
default=lambda self: self.env['ir.sequence'].next_by_code('issue_meeting_code_num_sequence'))
default=lambda self: self.env['ir.sequence'].next_by_code('issue_meeting_minutes_code'))
meeting_minutes_ids = fields.One2many('issue.meeting.minutes.line', 'meeting_minutes_id', string="会议纪要明细")
notice_documents_ids = fields.Many2many('documents.document', string="纪要签名附件")
class IssueMeetingMinutesLine(models.Model):
_name = 'issue.meeting.minutes.line'
_description = '会议纪要明细行'
meeting_minutes_id = fields.Many2one('issue.meeting.minutes', string="关联会议纪要")
name = fields.Char(string='事项名称', required=True)
minutes_id = fields.Many2one('issue.library',string='事项名称', required=True)
decision_results = fields.Selection([('agree', '通过'), ('disagree', '未通过')], string="审议情况")
overview = fields.Text(string="概述")
+3 -12
View File
@@ -1,5 +1,5 @@
id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink
access_issue_library_line,issue_library_line,model_issue_library_line,base.group_user,1,1,1,1
access_issue_library_line,issue_library_line,model_issue_library_line,,1,1,1,1
access_issue_approval_decision,issue_approval_decision,model_issue_approval_decision,base.group_user,1,1,1,1
access_issue_approval_decision_type,issue_approval_decision_type,model_issue_approval_decision_type,base.group_user,1,1,1,1
access_issue_library_approval_line,issue_library_approval_line,model_issue_library_approval_line,base.group_user,1,1,1,1
@@ -8,15 +8,6 @@ access_issue_approval_line,issue_approval_line,model_issue_approval_line,base.gr
access_issue_library,issue_library,model_issue_library,base.group_user,1,1,1,1
access_issue_meeting_minutes_line,issue_meeting_minutes_line,model_issue_meeting_minutes_line,base.group_user,1,1,1,1
access_issue_meeting_minutes,issue_meeting_minutes,model_issue_meeting_minutes,base.group_user,1,1,1,1
access_issue_meeting_line,issue_meeting_line,model_issue_meeting_line,base.group_user,1,1,1,1
access_issue_library_room_line,issue_library_room_line,model_issue_library_room_line,base.group_user,1,1,1,1
access_issue_library,issue_library,model_issue_library,group_topic_admin,1,1,1,1
access_issue_library,issue_library,model_issue_library,group_party_topic,1,1,1,1
access_issue_library,issue_library,model_issue_library,group_team_topic,1,1,1,1
access_issue_library,issue_library,model_issue_library,group_board_topic,1,1,1,1
access_issue_library,issue_library,model_issue_library,group_property_admin,1,1,1,1
access_issue_library,issue_library,model_issue_library,property_group_party_topic,1,1,1,1
access_issue_library,issue_library,model_issue_library,property_group_team_topic,1,1,1,1
access_issue_library,issue_library,model_issue_library,group_grain_admin,1,1,1,1
access_issue_library,issue_library,model_issue_library,group_grain_party_topic,1,1,1,1
access_issue_library,issue_library,model_issue_library,group_grain_team_topic,1,1,1,1
1 id name model_id:id group_id:id perm_read perm_write perm_create perm_unlink
2 access_issue_library_line issue_library_line model_issue_library_line base.group_user 1 1 1 1
3 access_issue_approval_decision issue_approval_decision model_issue_approval_decision base.group_user 1 1 1 1
4 access_issue_approval_decision_type issue_approval_decision_type model_issue_approval_decision_type base.group_user 1 1 1 1
5 access_issue_library_approval_line issue_library_approval_line model_issue_library_approval_line base.group_user 1 1 1 1
8 access_issue_library issue_library model_issue_library base.group_user 1 1 1 1
9 access_issue_meeting_minutes_line issue_meeting_minutes_line model_issue_meeting_minutes_line base.group_user 1 1 1 1
10 access_issue_meeting_minutes issue_meeting_minutes model_issue_meeting_minutes base.group_user 1 1 1 1
11 access_issue_meeting_line issue_meeting_line model_issue_meeting_line base.group_user 1 1 1 1
12 access_issue_library_room_line issue_library_room_line model_issue_library_room_line base.group_user 1 1 1 1
13
access_issue_library issue_library model_issue_library group_party_topic 1 1 1 1
access_issue_library issue_library model_issue_library group_team_topic 1 1 1 1
access_issue_library issue_library model_issue_library group_board_topic 1 1 1 1
access_issue_library issue_library model_issue_library group_property_admin 1 1 1 1
access_issue_library issue_library model_issue_library property_group_party_topic 1 1 1 1
access_issue_library issue_library model_issue_library property_group_team_topic 1 1 1 1
access_issue_library issue_library model_issue_library group_grain_admin 1 1 1 1
access_issue_library issue_library model_issue_library group_grain_party_topic 1 1 1 1
access_issue_library issue_library model_issue_library group_grain_team_topic 1 1 1 1
+17 -5
View File
@@ -5,19 +5,31 @@
<field name="model">room.booking</field>
<field name="inherit_id" ref="room.room_booking_view_form"/>
<field name="arch" type="xml">
<xpath expr="//field[@name='room_id']" position="after">
<field name="is_issue"/>
</xpath>
<xpath expr="//page[@name='sign']" position="after">
<page string="关联议题">
<field name="room_booking_library_ids">
<page string="关联议题" invisible="is_issue == False">
<field name="issue_meeting_line_ids">
<tree editable="bottom">
<field name="room_booking_id" column_invisible="1"/>
<field name="name"/>
<field name="meeting_booking_id" column_invisible="1"/>
<field name="issue_library_id" readonly="1"/>
<field name="decision_results"/>
<field name="decision_details"/>
<field name="state"/>
</tree>
</field>
<button name="bottom_meeting_approval" string="提交会议审批单" type="object" class="oe_highlight"/>
<button name="bottom_meeting_approval" string="提交会议纪要审批单" type="object" class="oe_highlight"/>
</page>
</xpath>
</field>
</record>
<record id="issue_meeting_action" model="ir.actions.act_window">
<field name="name">议题相关会议</field>
<field name="res_model">room.booking</field>
<field name="view_mode">tree,form</field>
<field name="domain">[('is_issue','=',True)]</field>
</record>
</odoo>
@@ -80,11 +80,23 @@
</field>
</record>
<record id="issue_approval_decision_search" model="ir.ui.view">
<field name="name">issue.approval.decision.search</field>
<field name="model">issue.approval.decision</field>
<field name="priority">20</field>
<field name="arch" type="xml">
<search>
<field name="specifics"/>
</search>
</field>
</record>
<record id="issue_approval_decision_action" model="ir.actions.act_window">
<field name="name">决策清单</field>
<field name="res_model">issue.approval.decision</field>
<field name="view_mode">tree,form</field>
<field name="context">{'search_default_group_decision_type_on_id': True, 'search_default_group_decision_type_id': True}
<field name="context">{'search_default_group_decision_type_on_id': True,
'search_default_group_decision_type_id': True}
</field>
</record>
</odoo>
@@ -12,7 +12,6 @@
<field name="department_id"/>
<field name="issue_display" widget="json_template"/>
<field name="decision_display" widget="json_template"/>
<button name="pub_meeting_minutes" string="会议纪要" type="object" class="oe_highlight"/>
</tree>
</field>
</record>
+143 -103
View File
@@ -34,17 +34,9 @@
<field name="state" widget="statusbar"/>
</header>
<sheet>
<group>
<div class="oe_title">
<label for="name"/>
<h1>
<field name="name" required="1"/>
</h1>
</div>
<group/>
</group>
<group>
<group>
<field name="name" required="1"/>
<field name="code"/>
<field name="approval_decision_sequence" invisible="1"/>
<field name="notice_documents_ids" widget="preview_many2many"/>
@@ -55,6 +47,7 @@
<field name="department_id" invisible="1"/>
<field name="yuthon_company" invisible="1"/>
<field name="users_role_ids" invisible="1" widget="many2many_tags"/>
<field name="is_booking"/>
</group>
</group>
<group col="4">
@@ -88,7 +81,7 @@
<page string="关联流程">
<field name="issue_library_approval_line_ids" readonly="1">
<tree>
<field name="issue_approval_id" column_invisible="1"/>
<field name="issue_library_id" column_invisible="1"/>
<field name="workflow_record_id" string="标题"/>
<field name="code"/>
<field name="approval_type"/>
@@ -105,6 +98,17 @@
<group/>
</group>
</page>
<page string="关联会议" invisible="is_booking == False">
<field name="issue_library_room_line_ids" readonly="1">
<tree>
<field name="issue_library_id" column_invisible="1"/>
<field name="room_booking_id"/>
<field name="room_id"/>
<field name="meeting_type_id"/>
<field name="approval_date"/>
</tree>
</field>
</page>
</notebook>
</sheet>
</form>
@@ -211,18 +215,10 @@
<field name="state" widget="statusbar"/>
</header>
<sheet>
<group>
<div class="oe_title">
<label for="name"/>
<h1>
<field name="name" required="1"/>
</h1>
</div>
<group/>
</group>
<group>
<group>
<field name="code"/>
<field name="name" required="1"/>
<field name="approval_decision_sequence" invisible="1"/>
<field name="notice_documents_ids" widget="preview_many2many"/>
<field name="creart_datetime"/>
@@ -232,6 +228,7 @@
<field name="department_id" invisible="1"/>
<field name="yuthon_company" invisible="1"/>
<field name="users_role_ids" invisible="1" widget="many2many_tags"/>
<field name="is_booking"/>
</group>
</group>
<group col="2">
@@ -257,7 +254,7 @@
<page string="关联流程">
<field name="issue_library_approval_line_ids" readonly="1">
<tree>
<field name="issue_approval_id" column_invisible="1"/>
<field name="issue_library_id" column_invisible="1"/>
<field name="workflow_record_id" string="标题"/>
<field name="code"/>
<field name="approval_type"/>
@@ -274,6 +271,17 @@
<group/>
</group>
</page>
<page string="关联会议" invisible="is_booking == False">
<field name="issue_library_room_line_ids" readonly="1">
<tree>
<field name="issue_library_id" column_invisible="1"/>
<field name="room_booking_id"/>
<field name="room_id"/>
<field name="meeting_type_id"/>
<field name="approval_date"/>
</tree>
</field>
</page>
</notebook>
</sheet>
</form>
@@ -353,17 +361,9 @@
<field name="state" widget="statusbar"/>
</header>
<sheet>
<group>
<div class="oe_title">
<label for="name"/>
<h1>
<field name="name" required="1"/>
</h1>
</div>
<group/>
</group>
<group>
<group>
<field name="name" required="1"/>
<field name="code"/>
<field name="approval_decision_sequence" invisible="1"/>
<field name="notice_documents_ids" widget="preview_many2many"/>
@@ -374,6 +374,7 @@
<field name="department_id" invisible="1"/>
<field name="yuthon_company" invisible="1"/>
<field name="users_role_ids" invisible="1" widget="many2many_tags"/>
<field name="is_booking"/>
</group>
</group>
<group col="2">
@@ -399,7 +400,7 @@
<page string="关联流程">
<field name="issue_library_approval_line_ids" readonly="1">
<tree>
<field name="issue_approval_id" column_invisible="1"/>
<field name="issue_library_id" column_invisible="1"/>
<field name="workflow_record_id" string="标题"/>
<field name="code"/>
<field name="approval_type"/>
@@ -416,6 +417,17 @@
<group/>
</group>
</page>
<page string="关联会议" invisible="is_booking == False">
<field name="issue_library_room_line_ids" readonly="1">
<tree>
<field name="issue_library_id" column_invisible="1"/>
<field name="room_booking_id"/>
<field name="room_id"/>
<field name="meeting_type_id"/>
<field name="approval_date"/>
</tree>
</field>
</page>
</notebook>
</sheet>
</form>
@@ -494,18 +506,10 @@
<field name="state" widget="statusbar"/>
</header>
<sheet>
<group>
<div class="oe_title">
<label for="name"/>
<h1>
<field name="name" required="1"/>
</h1>
</div>
<group/>
</group>
<group>
<group>
<field name="code"/>
<field name="name" required="1"/>
<field name="approval_decision_sequence" invisible="1"/>
<field name="notice_documents_ids" widget="preview_many2many"/>
<field name="creart_datetime"/>
@@ -515,6 +519,7 @@
<field name="department_id" invisible="1"/>
<field name="yuthon_company" invisible="1"/>
<field name="users_role_ids" invisible="1" widget="many2many_tags"/>
<field name="is_booking"/>
</group>
</group>
<group col="2">
@@ -540,7 +545,7 @@
<page string="关联流程">
<field name="issue_library_approval_line_ids" readonly="1">
<tree>
<field name="issue_approval_id" column_invisible="1"/>
<field name="issue_library_id" column_invisible="1"/>
<field name="workflow_record_id" string="标题"/>
<field name="code"/>
<field name="approval_type"/>
@@ -557,6 +562,17 @@
<group/>
</group>
</page>
<page string="关联会议" invisible="is_booking == False">
<field name="issue_library_room_line_ids" readonly="1">
<tree>
<field name="issue_library_id" column_invisible="1"/>
<field name="room_booking_id"/>
<field name="room_id"/>
<field name="meeting_type_id"/>
<field name="approval_date"/>
</tree>
</field>
</page>
</notebook>
</sheet>
</form>
@@ -636,18 +652,10 @@
<field name="state" widget="statusbar"/>
</header>
<sheet>
<group>
<div class="oe_title">
<label for="name"/>
<h1>
<field name="name" required="1"/>
</h1>
</div>
<group/>
</group>
<group>
<group>
<field name="code"/>
<field name="name" required="1"/>
<field name="approval_decision_sequence" invisible="1"/>
<field name="notice_documents_ids" widget="preview_many2many"/>
<field name="creart_datetime"/>
@@ -657,6 +665,7 @@
<field name="department_id" invisible="1"/>
<field name="yuthon_company" invisible="1"/>
<field name="users_role_ids" invisible="1" widget="many2many_tags"/>
<field name="is_booking"/>
</group>
</group>
<group col="2">
@@ -682,7 +691,7 @@
<page string="关联流程">
<field name="issue_library_approval_line_ids" readonly="1">
<tree>
<field name="issue_approval_id" column_invisible="1"/>
<field name="issue_library_id" column_invisible="1"/>
<field name="workflow_record_id" string="标题"/>
<field name="code"/>
<field name="approval_type"/>
@@ -699,6 +708,17 @@
<group/>
</group>
</page>
<page string="关联会议" invisible="is_booking == False">
<field name="issue_library_room_line_ids" readonly="1">
<tree>
<field name="issue_library_id" column_invisible="1"/>
<field name="room_booking_id"/>
<field name="room_id"/>
<field name="meeting_type_id"/>
<field name="approval_date"/>
</tree>
</field>
</page>
</notebook>
</sheet>
</form>
@@ -778,18 +798,10 @@
<field name="state" widget="statusbar"/>
</header>
<sheet>
<group>
<div class="oe_title">
<label for="name"/>
<h1>
<field name="name" required="1"/>
</h1>
</div>
<group/>
</group>
<group>
<group>
<field name="code"/>
<field name="name" required="1"/>
<field name="approval_decision_sequence" invisible="1"/>
<field name="notice_documents_ids" widget="preview_many2many"/>
<field name="creart_datetime"/>
@@ -799,6 +811,7 @@
<field name="department_id" invisible="1"/>
<field name="yuthon_company" invisible="1"/>
<field name="users_role_ids" invisible="1" widget="many2many_tags"/>
<field name="is_booking"/>
</group>
</group>
<group col="2">
@@ -824,7 +837,7 @@
<page string="关联流程">
<field name="issue_library_approval_line_ids" readonly="1">
<tree>
<field name="issue_approval_id" column_invisible="1"/>
<field name="issue_library_id" column_invisible="1"/>
<field name="workflow_record_id" string="标题"/>
<field name="code"/>
<field name="approval_type"/>
@@ -841,6 +854,17 @@
<group/>
</group>
</page>
<page string="关联会议" invisible="is_booking == False">
<field name="issue_library_room_line_ids" readonly="1">
<tree>
<field name="issue_library_id" column_invisible="1"/>
<field name="room_booking_id"/>
<field name="room_id"/>
<field name="meeting_type_id"/>
<field name="approval_date"/>
</tree>
</field>
</page>
</notebook>
</sheet>
</form>
@@ -920,18 +944,10 @@
<field name="state" widget="statusbar"/>
</header>
<sheet>
<group>
<div class="oe_title">
<label for="name"/>
<h1>
<field name="name" required="1"/>
</h1>
</div>
<group/>
</group>
<group>
<group>
<field name="code"/>
<field name="name" required="1"/>
<field name="approval_decision_sequence" invisible="1"/>
<field name="notice_documents_ids" widget="preview_many2many"/>
<field name="creart_datetime"/>
@@ -941,6 +957,7 @@
<field name="department_id" invisible="1"/>
<field name="yuthon_company" invisible="1"/>
<field name="users_role_ids" invisible="1" widget="many2many_tags"/>
<field name="is_booking"/>
</group>
</group>
<group col="2">
@@ -966,7 +983,7 @@
<page string="关联流程">
<field name="issue_library_approval_line_ids" readonly="1">
<tree>
<field name="issue_approval_id" column_invisible="1"/>
<field name="issue_library_id" column_invisible="1"/>
<field name="workflow_record_id" string="标题"/>
<field name="code"/>
<field name="approval_type"/>
@@ -983,6 +1000,17 @@
<group/>
</group>
</page>
<page string="关联会议" invisible="is_booking == False">
<field name="issue_library_room_line_ids" readonly="1">
<tree>
<field name="issue_library_id" column_invisible="1"/>
<field name="room_booking_id"/>
<field name="room_id"/>
<field name="meeting_type_id"/>
<field name="approval_date"/>
</tree>
</field>
</page>
</notebook>
</sheet>
</form>
@@ -1062,18 +1090,10 @@
<field name="state" widget="statusbar"/>
</header>
<sheet>
<group>
<div class="oe_title">
<label for="name"/>
<h1>
<field name="name" required="1"/>
</h1>
</div>
<group/>
</group>
<group>
<group>
<field name="code"/>
<field name="name" required="1"/>
<field name="approval_decision_sequence" invisible="1"/>
<field name="notice_documents_ids" widget="preview_many2many"/>
<field name="creart_datetime"/>
@@ -1083,6 +1103,7 @@
<field name="department_id" invisible="1"/>
<field name="yuthon_company" invisible="1"/>
<field name="users_role_ids" invisible="1" widget="many2many_tags"/>
<field name="is_booking"/>
</group>
</group>
<group col="2">
@@ -1108,7 +1129,7 @@
<page string="关联流程">
<field name="issue_library_approval_line_ids" readonly="1">
<tree>
<field name="issue_approval_id" column_invisible="1"/>
<field name="issue_library_id" column_invisible="1"/>
<field name="workflow_record_id" string="标题"/>
<field name="code"/>
<field name="approval_type"/>
@@ -1125,6 +1146,17 @@
<group/>
</group>
</page>
<page string="关联会议" invisible="is_booking == False">
<field name="issue_library_room_line_ids" readonly="1">
<tree>
<field name="issue_library_id" column_invisible="1"/>
<field name="room_booking_id"/>
<field name="room_id"/>
<field name="meeting_type_id"/>
<field name="approval_date"/>
</tree>
</field>
</page>
</notebook>
</sheet>
</form>
@@ -1172,8 +1204,8 @@
(0, 0, {'view_mode': 'form', 'view_id': ref('yuthon_issue.view_issue_library_form10')})]"/>
</record>
<!--物管委议题库-->
<record id="view_issue_library_tree11" model="ir.ui.view">
<!--物管委议题库-->
<record id="view_issue_library_tree11" model="ir.ui.view">
<field name="name">issue.library.tree</field>
<field name="model">issue.library</field>
<field name="arch" type="xml">
@@ -1207,18 +1239,10 @@
<field name="state" widget="statusbar"/>
</header>
<sheet>
<group>
<div class="oe_title">
<label for="name"/>
<h1>
<field name="name" required="1"/>
</h1>
</div>
<group/>
</group>
<group>
<group>
<field name="code"/>
<field name="name" required="1"/>
<field name="approval_decision_sequence" invisible="1"/>
<field name="notice_documents_ids" widget="preview_many2many"/>
<field name="creart_datetime"/>
@@ -1228,6 +1252,7 @@
<field name="department_id" invisible="1"/>
<field name="yuthon_company" invisible="1"/>
<field name="users_role_ids" invisible="1" widget="many2many_tags"/>
<field name="is_booking"/>
</group>
</group>
<group col="4">
@@ -1261,7 +1286,7 @@
<page string="关联流程">
<field name="issue_library_approval_line_ids" readonly="1">
<tree>
<field name="issue_approval_id" column_invisible="1"/>
<field name="issue_library_id" column_invisible="1"/>
<field name="workflow_record_id" string="标题"/>
<field name="code"/>
<field name="approval_type"/>
@@ -1278,6 +1303,17 @@
<group/>
</group>
</page>
<page string="关联会议" invisible="is_booking == False">
<field name="issue_library_room_line_ids" readonly="1">
<tree>
<field name="issue_library_id" column_invisible="1"/>
<field name="room_booking_id"/>
<field name="room_id"/>
<field name="meeting_type_id"/>
<field name="approval_date"/>
</tree>
</field>
</page>
</notebook>
</sheet>
</form>
@@ -1334,7 +1370,7 @@
(0, 0, {'view_mode': 'tree', 'view_id': ref('yuthon_issue.view_issue_library_tree11')}),
(0, 0, {'view_mode': 'form', 'view_id': ref('yuthon_issue.view_issue_library_form11')})]"/>
</record>
<!--粮储议题库-->
<!--粮储议题库-->
<record id="view_issue_library_tree12" model="ir.ui.view">
<field name="name">issue.library.tree</field>
<field name="model">issue.library</field>
@@ -1369,18 +1405,10 @@
<field name="state" widget="statusbar"/>
</header>
<sheet>
<group>
<div class="oe_title">
<label for="name"/>
<h1>
<field name="name" required="1"/>
</h1>
</div>
<group/>
</group>
<group>
<group>
<field name="code"/>
<field name="name" required="1"/>
<field name="approval_decision_sequence" invisible="1"/>
<field name="notice_documents_ids" widget="preview_many2many"/>
<field name="creart_datetime"/>
@@ -1390,6 +1418,7 @@
<field name="department_id" invisible="1"/>
<field name="yuthon_company" invisible="1"/>
<field name="users_role_ids" invisible="1" widget="many2many_tags"/>
<field name="is_booking"/>
</group>
</group>
<group col="4">
@@ -1423,7 +1452,7 @@
<page string="关联流程">
<field name="issue_library_approval_line_ids" readonly="1">
<tree>
<field name="issue_approval_id" column_invisible="1"/>
<field name="issue_library_id" column_invisible="1"/>
<field name="workflow_record_id" string="标题"/>
<field name="code"/>
<field name="approval_type"/>
@@ -1440,6 +1469,17 @@
<group/>
</group>
</page>
<page string="关联会议" invisible="is_booking == False">
<field name="issue_library_room_line_ids" readonly="1">
<tree>
<field name="issue_library_id" column_invisible="1"/>
<field name="room_booking_id"/>
<field name="room_id"/>
<field name="meeting_type_id"/>
<field name="approval_date"/>
</tree>
</field>
</page>
</notebook>
</sheet>
</form>
@@ -31,7 +31,7 @@
<field name="meeting_minutes_ids">
<tree editable="bottom">
<field name="meeting_minutes_id" column_invisible="1"/>
<field name="name"/>
<field name="minutes_id"/>
<field name="decision_results"/>
<field name="overview"/>
</tree>
+6
View File
@@ -42,6 +42,12 @@
action="issue_library_approval_action"
sequence="28"/>
<menuitem id="issue_meeting_menu"
parent="tianhe_issue_library_menu_root"
name="议题相关会议"
action="issue_meeting_action"
sequence="29"/>
<menuitem id="issue_meeting_minutes_menu"
parent="tianhe_issue_library_menu_root"
name="会议纪要"
+10
View File
@@ -9,8 +9,18 @@
'license': 'LGPL-3',
'data': [
'security/ir.model.access.csv',
'data/data_yuthon_resource_mgmt_config.xml',
'views/yuthon_property_views.xml',
'views/property_type_views.xml',
'views/property_patrol_duty.xml',
'views/property_patrol_plan.xml',
'views/property_route_management.xml',
'views/property_patrol_position.xml',
'views/property_patrol_standard.xml',
'views/yuthon_draw_result_views.xml',
'views/yuthon_expert_database_views.xml',
'views/yuthon_resource_mgmt_config_views.xml',
'views/yuthon_property_evaluation_views.xml',
'views/menuitem.xml',
],
'demo': [],
@@ -0,0 +1,111 @@
<?xml version="1.0" encoding="UTF-8" ?>
<odoo>
<record model="yuthon.resource.type" id="yuthon_resource_type_data0">
<field name="name">厂房</field>
</record>
<record model="yuthon.resource.type" id="yuthon_resource_type_data1">
<field name="name">商铺</field>
</record>
<record model="yuthon.resource.type" id="yuthon_resource_type_data2">
<field name="name">办公</field>
</record>
<record model="yuthon.resource.type" id="yuthon_resource_type_data3">
<field name="name">仓库</field>
</record>
<record model="yuthon.resource.type" id="yuthon_resource_type_data4">
<field name="name">宿舍</field>
</record>
<record model="yuthon.resource.type" id="yuthon_resource_type_data5">
<field name="name">专业市场</field>
</record>
<record model="yuthon.resource.type" id="yuthon_resource_type_data6">
<field name="name">公租房</field>
</record>
<record model="yuthon.resource.type" id="yuthon_resource_type_data7">
<field name="name">车位</field>
</record>
<record model="yuthon.resource.type" id="yuthon_resource_type_data8">
<field name="name">土地</field>
</record>
<record model="yuthon.resource.type" id="yuthon_resource_type_data9">
<field name="name">广告位</field>
</record>
<record model="yuthon.resource.type" id="yuthon_resource_type_data10">
<field name="name">管子间</field>
</record>
<record model="yuthon.resource.house.type" id="yuthon_resource_house_type_data0">
<field name="name">一房一厅</field>
</record>
<record model="yuthon.resource.house.type" id="yuthon_resource_house_type_data1">
<field name="name">一房一厅一卫</field>
</record>
<record model="yuthon.resource.house.type" id="yuthon_resource_house_type_data2">
<field name="name">两房一厅</field>
</record>
<record model="yuthon.resource.house.type" id="yuthon_resource_house_type_data3">
<field name="name">两房一厅一卫</field>
</record>
<record model="yuthon.resource.house.type" id="yuthon_resource_house_type_data4">
<field name="name">两房两厅</field>
</record>
<record model="yuthon.resource.house.type" id="yuthon_resource_house_type_data5">
<field name="name">两房两厅一卫</field>
</record>
<record model="yuthon.resource.purpose" id="yuthon_resource_purpose_data0">
<field name="name">可租</field>
</record>
<record model="yuthon.resource.purpose" id="yuthon_resource_purpose_data1">
<field name="name">自用</field>
</record>
<record model="yuthon.resource.purpose" id="yuthon_resource_purpose_data2">
<field name="name">不可租</field>
</record>
<record model="yuthon.resource.management.type" id="yuthon_resource_management_type_data0">
<field name="name">代管</field>
</record>
<record model="yuthon.resource.management.type" id="yuthon_resource_management_type_data1">
<field name="name">自营</field>
</record>
<record model="yuthon.resource.billing.type" id="yuthon_resource_billing_type_data0">
<field name="name">收据</field>
</record>
<record model="yuthon.resource.billing.type" id="yuthon_resource_billing_type_data1">
<field name="name">普票</field>
</record>
<record model="yuthon.resource.billing.type" id="yuthon_resource_billing_type_data2">
<field name="name">专票</field>
</record>
<record model="yuthon.resource.billing.type" id="yuthon_resource_billing_type_data3">
<field name="name">全电票</field>
</record>
<record model="property.type" id="yuthon_property_type_data0">
<field name="name">待评估</field>
</record>
<record model="property.type" id="yuthon_property_type_data1">
<field name="name">评估中</field>
</record>
<record model="property.type" id="yuthon_property_type_data2">
<field name="name">评估备案</field>
</record>
<record model="property.type" id="yuthon_property_type_data3">
<field name="name">挂网</field>
</record>
<record model="property.type" id="yuthon_property_type_data4">
<field name="name">签约中</field>
</record>
<record model="property.type" id="yuthon_property_type_data5">
<field name="name">已出租</field>
</record>
<record model="property.type" id="yuthon_property_type_data6">
<field name="name">闲置</field>
</record>
</odoo>
+9
View File
@@ -1,2 +1,11 @@
from . import yuthon_property
from . import property_type
from . import property_patrol_duty
from . import property_patrol_plan
from . import property_patrol_position
from . import property_patrol_standard
from . import property_route_management
from . import yuthon_resource_mgmt_config
from . import yuthon_draw_result
from . import yuthon_expert_database
from . import yuthon_property_evaluation
@@ -0,0 +1,25 @@
from odoo import models, fields, api
class PropertyPatrolDuty(models.Model):
_name = 'property.patrol.duty'
_description = '巡更任务'
number = fields.Integer(string='序号')
task_number = fields.Char(string='任务编号')
task_category = fields.Char(string='任务类别')
route_name = fields.Char(string='路线名称')
people = fields.Char(string='责任人')
scheduled_time = fields.Datetime(string='计划巡检时间')
task_status = fields.Selection([('all_tasks', '全部任务'), ('not_started', '未开始'),
('ing', '进行中'), ('ed', '已完成'),
('overtime', '超时关闭'), ('void', '已作废')], string='任务状态')
timeout_cause = fields.Char(string='超时原因')
create_date = fields.Date(string="开工时间")
end_date = fields.Date(string="完工时间")
point_random = fields.Char(string='点位随机')
inspection_completion = fields.Char(string='巡检完成率')
inspection_schedule = fields.Char(string='巡检进度')
controls = fields.Char(string='操作')
@@ -0,0 +1,18 @@
from odoo import models, fields, api
class PropertyPatrolPlan(models.Model):
_name = 'property.patrol.plan'
_description = '巡更计划'
plan_name = fields.Char(string='计划名称')
plan_category = fields.Char(string='计划类型')
people = fields.Char(string='巡检责任人')
time = fields.Integer(string='巡检周期')
start_date = fields.Date(string="生效日")
end_date = fields.Date(string="失效日")
generation_number = fields.Integer(string='任务生成数')
completed_number = fields.Integer(string='任务完成数')
founder = fields.Char(string='创建人/时间')
controls = fields.Char(string='操作')
@@ -0,0 +1,19 @@
from odoo import models, fields, api
class PropertyPatrolPosition(models.Model):
_name = 'property.patrol.position'
_description = '巡更点位'
number = fields.Integer(string='序号')
point_number = fields.Char(string='点位编号')
point_name = fields.Char(string='点位名称')
external_coding = fields.Char(string='外部编码')
position = fields.Char(string='具体位置')
adapt_work = fields.Char(string='适应岗位')
founder = fields.Char(string='创建人/时间')
clock_in = fields.Boolean(string='扫码签到')
picture = fields.Boolean(string='强制拍照')
outside = fields.Char(string='外部二维码')
code_management = fields.Char(string='二维码管理')
controls = fields.Char(string='操作')
@@ -0,0 +1,18 @@
from odoo import models, fields, api
class PropertyPatrolStandard(models.Model):
_name = 'property.patrol.standard'
_description = '巡更标准'
number = fields.Integer(string='序号')
task_number = fields.Char(string='任务编号')
question_type = fields.Char(string='题类型')
check_item = fields.Selection([('sweep_floor', '扫地拖地'), ('gate', '看大门'), ('Back door', '看后门')], string='检查顶')
title = fields.Selection([('cleaning', '保洁卫生'), ('gate', '看大门'), ('back_door', '看后门')], string='标题')
check_details = fields.Selection([('gate', '看大门'), ('back_door', '看后门')], string='检查明细')
result_option = fields.Selection([('ood', '好'), ('normal', '一般'), ('bad', '差')], string='检查明细')
people = fields.Char(string='创建人')
time = fields.Datetime(string='时间')
ed_time = fields.Datetime(string='最后修改')
controls = fields.Char(string='操作')
@@ -0,0 +1,13 @@
from odoo import models, fields, api
class PropertyRouteManagement(models.Model):
_name = 'property.route.management'
_description = '路线管理'
number = fields.Integer(string='序号')
patrol_types = fields.Char(string='安防巡更类型')
route_sequence = fields.Char(string='路线顺序')
patrol_number = fields.Integer(string='巡更点数量')
founder = fields.Char(string='创建人/时间')
controls = fields.Char(string='操作')
@@ -0,0 +1,18 @@
# -*- coding: utf-8 -*-
from odoo import models, fields, api
class YuthonDrawResult(models.Model):
_name = 'yuthon.draw.result'
_description = '抽签结果'
_rec_name = 'project'
date = fields.Date(string='日期')
project = fields.Char(string='项目')
company = fields.Char(string='单位')
expert = fields.Char(string='专家')
phone = fields.Char(string='联系电话')
email = fields.Char(string='邮箱')
attachment = fields.Binary(string='抽签结果附件')
@@ -0,0 +1,30 @@
# -*- coding: utf-8 -*-
from odoo import models, fields, api
GENDER_SELECTION = [
('0', '男'),
('1', '女'),
('99', '其他'),
]
class YuthonExpertDatabase(models.Model):
_name = 'yuthon.expert.database'
_description = '专家库'
name = fields.Char(string='姓名')
gender = fields.Selection(selection=GENDER_SELECTION, string='性别')
company = fields.Char(string='单位名称')
id_number = fields.Char(string='身份证号')
certificate_number = fields.Char(string='评估师证书号')
phone = fields.Char(string='联系电话')
email = fields.Char(string='邮箱')
effective_date = fields.Date(string='生效日期')
expiration_date = fields.Date(string='失效日期')
+83 -38
View File
@@ -7,62 +7,107 @@ class YuthonProperty(models.Model):
_inherit = ['mail.thread.main.attachment', 'mail.activity.mixin']
_rec_name = 'name'
name = fields.Char(string="名称")
property_precinct = fields.Char(string="楼盘片区")
property_floor = fields.Integer(string="楼层")
name = fields.Char(string="资产名称")
premises = fields.Char(string="楼盘")
units = fields.Char(string="单元")
house_type_id = fields.Many2one('yuthon.resource.house.type', string="户型")
property_room = fields.Char(string="区")
property_house = fields.Char(string="户型")
property_orientation = fields.Char(string="朝向")
property_use_id = fields.Integer(string="物业用途ID")
property_asset_type = fields.Selection([('plant', '厂房'), ('goods', '商品'),
('office', '写字楼'), ('dormitory', '宿舍'),
('rig', '设备等管理用房')], string='管理类型')
property_asset_use = fields.Selection([('hire', '出租'), ('personal', '自用')], string='资产用途')
property_use_type = fields.Selection([('work', '办公'), ('dorm', '宿舍'), ('cater', '餐饮'),('shops', '商铺'),
('plant', '厂房')], string='出租用途')
property_use_time = fields.Datetime(string="使用年限")
property_rent_type = fields.Selection([('could', '可租'), ('no', '不可租'),
('done', '已租'), ('none', '空置'),('assessment','评估'),
('none_assessment', '待评估'),('filing', '备案'),('hang', '挂网'),
('agency', '签约中')], string="出租状态")
state_id = fields.Many2one('property.type', string='状态')
building_area = fields.Float(string="建筑面积")
actual_area = fields.Float(string="实际面积")
management_area = fields.Float(string="管理面积")
effective_date = fields.Date(string="生效日期")
property_source = fields.Selection([('cut', '划入'), ('self', '自建'),
('replace', '置换'), ('buy', '购入'),
('entrust', '委托'), ('Rent', '租入')], string='来源')
('entrust', '委托'), ('Rent', '租入')], string='资产来源')
remark = fields.Char(string="备注")
vr_link = fields.Char(string="VR链接")
other_materials = fields.Binary(string="其他材料", readonly=False)
abbreviation = fields.Char(string="简称")
property_floor = fields.Integer(string="楼层")
property_orientation = fields.Selection([('north', '东'), ('south', '南'), ('east', '西'), ('west', '北')],
string="朝向")
street = fields.Char(string="街道")
property_area = fields.Float(string="产权面积")
pooled_area = fields.Float(string="公摊面积")
rentable_area = fields.Float(string="可租面积")
end_date = fields.Date(string="结束日期")
state_id = fields.Many2one('property.type', string='状态')
is_meter = fields.Boolean(string="是否有水表")
is_electricity_meter = fields.Boolean(string="是否有电表")
company_page = fields.Selection([('tz', '天河投资'), ('wg', '天河物管'), ('lc', '天河粮储')], string="所属公司")
admin_id = fields.Many2one('res.users', string="管理员")
purpose_id = fields.Many2one('yuthon.resource.purpose', string="资产用途")
mgmt_type_id = fields.Many2one('yuthon.resource.management.type', string="管理类型")
is_confirm_authorization = fields.Boolean(string="是否确权")
owner_id = fields.Many2one('res.users', string="权属人")
property_card = fields.Html(string="产权证")
life_timer = fields.Datetime(string="使用时间")
property_use_time = fields.Selection([('a', '70年'), ('b', '40年')], string="使用年限")
property_precinct = fields.Char(string="片区")
asset_type_id = fields.Many2one('yuthon.resource.type', string="资产类型")
is_hvac = fields.Boolean(string="是否使用中央空调")
is_handle_land = fields.Boolean(string="是否办理土地有偿使用手续")
ame = fields.Char(string='标题')
decoration_type = fields.Selection([('blank', '毛坯'), ('hardcover', '精装'), ('brands', '简装'), ('rsz', '豪装')],
string="装修类型")
water_meter_ids = fields.One2many('yuthon.property.water', 'yuthon_property_id', string='水表列表')
energy_meter_ids = fields.One2many('yuthon.property.energy', 'yuthon_property_id', string='电表列表')
@api.onchange('building_area')
def _onchange_building_area(self):
for rec in self:
rec.management_area = rec.building_area
rec.rentable_area = rec.building_area
property_use_id = fields.Integer(string="物业用途ID")
image_1920 = fields.Image(string="图片")
description = fields.Html(string="描述")
ame = fields.Char(string='标题')
code = fields.Char(string="编号",
default=lambda self: self.env['ir.sequence'].next_by_code('property_message_code'))
rental_unit_price = fields.Float(string="评估单价")
address = fields.Char(string="物业地址")
is_confirm_authorization = fields.Boolean(string="是否确权")
is_handle_land = fields.Boolean(string="是否办理土地有偿使用手续")
owner = fields.Char(string="权属人")
title_number = fields.Char(string="产权编号")
property_area = fields.Float(string="产权面积")
suite_area = fields.Float(string="套内面积")
pooled_area = fields.Float(string="公摊面积")
start_time = fields.Date(string="开始时间")
end_time = fields.Date(string="结束时间")
management_area = fields.Float(string="管理面积")
rentable_area = fields.Float(string="可租面积")
is_meter = fields.Boolean(string="是否支持多个水表")
is_electricity_meter = fields.Boolean(string="是否支持多个电表")
is_hvac = fields.Boolean(string="是否中央空调")
manage_standard = fields.Char(string="物业管理费标准")
remarks = fields.Char(string="备注")
company_page = fields.Selection([('tz', '天河投资'), ('wg', '天河物管'), ('lc', '天河粮储')], string="所属公司")
property = fields.Selection([('escrow','代管'), ('self','私有')], string="属性")
street = fields.Char(string="街道")
admin = fields.Many2one('res.users', string="管理员")
title_address = fields.Char(string="产权地址")
rental_address = fields.Char(string="出租地址")
def put_change_title(self):
pass
def put_change_manage(self):
pass
pass
class YuthonPropertyWater(models.Model):
_name = 'yuthon.property.water'
_description = '水表'
_rec_name = 'code'
code = fields.Char(string='编码')
rate = fields.Integer(string="倍率")
standard = fields.Integer(string="标准")
installation_date = fields.Datetime(string="安装日期")
demolition_date = fields.Datetime(string="拆除日期")
location = fields.Datetime(string="位置")
yuthon_property_id = fields.Many2one('yuthon.property', string="物业管理")
class YuthonPropertyEnergy(models.Model):
_name = 'yuthon.property.energy'
_description = '电表'
_rec_name = 'code'
code = fields.Char(string='编码')
rate = fields.Integer(string="倍率")
standard = fields.Integer(string="标准")
installation_date = fields.Datetime(string="安装日期")
demolition_date = fields.Datetime(string="拆除日期")
location = fields.Datetime(string="位置")
yuthon_property_id = fields.Many2one('yuthon.property', string="物业管理")
@@ -0,0 +1,36 @@
# -*- coding: utf-8 -*-
from odoo import models, fields, api
class YuthonPropertyEvaluation(models.Model):
_name = 'yuthon.property.evaluation'
_inherit = ['mail.thread', 'mail.activity.mixin']
_description = '物业评估'
owner = fields.Char(string='权属人')
property_address = fields.Char(string='物业地址')
property_area = fields.Float(string='产权面积')
rentable_area = fields.Float(string='可租面积')
unit_price = fields.Float(string='单价')
current_status = fields.Date(string='现状(合同到期日)')
registered_use = fields.Char(string='证载用途')
rental_use = fields.Char(string='出租用途')
rental_conditions = fields.Text(string='出租条件')
district_manager = fields.Char(string='片区负责人')
company = fields.Char(string='所属公司')
remarks = fields.Text(string='备注')
sequence = fields.Integer(string='序号', default=10)
evaluation_asset = fields.Char(string='评估资产')
evaluation_area = fields.Float(string='评估面积(m²)')
evaluation_category = fields.Char(string='评估类别')
set_purpose = fields.Char(string='设定用途')
last_hand_rent_price = fields.Float(string='上一手历史租金单价(元/m²•月)')
gov_rent_price = fields.Float(string='政府租金参考价')
evaluation_rent_price = fields.Float(string='评估散租单价(元/m²•月)')
evaluation_rent_total = fields.Float(string='评估总价(元•月,散租)')
evaluation_whole_rent_price = fields.Float(string='评估整租单价(元/m² •月)')
evaluation_whole_rent_total = fields.Float(string='评估总价(元•月,整租)')
@@ -0,0 +1,50 @@
from pkg_resources import require
from odoo import models, fields, api
class YuthonResourceMgmtConfig(models.Model):
_name = 'yuthon.resource.mgmt.config'
_description = '资源管理配置'
_inherit = ['mail.thread.main.attachment', 'mail.activity.mixin']
asset_type_id = fields.Many2one('yuthon.resource.type', string="资产类型", required=True)
house_type_id = fields.Many2one('yuthon.resource.house.type', string="户型")
purpose_id = fields.Many2one('yuthon.resource.purpose', string="用途")
mgmt_type_id = fields.Many2one('yuthon.resource.management.type', string="管理类型")
billing_type_id = fields.Many2one('yuthon.resource.billing.type', string="开票类型")
class YuthonResourceType(models.Model):
_name = 'yuthon.resource.type'
_description = '资产类型'
name = fields.Char(string="资产类型")
class YuthonResourceHouseType(models.Model):
_name = 'yuthon.resource.house.type'
_description = '户型'
name = fields.Char(string="户型")
class YuthonResourcePurpose(models.Model):
_name = 'yuthon.resource.purpose'
_description = '用途'
name = fields.Char(string="用途")
class YuthonResourceManagementType(models.Model):
_name = 'yuthon.resource.management.type'
_description = '管理类型'
name = fields.Char(string="管理类型")
class YuthonResourceBillingType(models.Model):
_name = 'yuthon.resource.billing.type'
_description = '开票类型'
name = fields.Char(string="开票类型")
@@ -1,4 +1,21 @@
id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink
access_yuthon_property,yuthon_property,model_yuthon_property,base.group_user,1,1,1,1
access_property_type,property_type,model_property_type,base.group_user,1,1,1,1
access_property_patrol_duty,property_patrol_duty,model_property_patrol_duty,base.group_user,1,1,1,1
access_property_patrol_plan,property_patrol_plan,model_property_patrol_plan,base.group_user,1,1,1,1
access_property_route_management,property_route_management,model_property_route_management,base.group_user,1,1,1,1
access_property_patrol_position,property_patrol_position,model_property_patrol_position,base.group_user,1,1,1,1
access_property_patrol_standard,property_patrol_standard,model_property_patrol_standard,base.group_user,1,1,1,1
access_yuthon_draw_result,yuthon.draw.result,model_yuthon_draw_result,base.group_user,1,1,1,1
access_yuthon_expert_database,yuthon.expert.database,model_yuthon_expert_database,base.group_user,1,1,1,1
access_yuthon_property_water,yuthon.property.water,model_yuthon_property_water,base.group_user,1,1,1,1
access_yuthon_property_energy,yuthon.property.energy,model_yuthon_property_energy,base.group_user,1,1,1,1
access_yuthon_resource_mgmt_config,yuthon.resource.mgmt.config,model_yuthon_resource_mgmt_config,base.group_user,1,1,1,1
access_yuthon_resource_type,yuthon.resource.type,model_yuthon_resource_type,base.group_user,1,1,1,1
access_yuthon_resource_house_type,yuthon.resource.house.type,model_yuthon_resource_house_type,base.group_user,1,1,1,1
access_yuthon_resource_purpose,yuthon.resource.purpose,model_yuthon_resource_purpose,base.group_user,1,1,1,1
access_yuthon_resource_management_type,yuthon.resource.management.type,model_yuthon_resource_management_type,base.group_user,1,1,1,1
access_yuthon_resource_billing_type,yuthon.resource.billing.type,model_yuthon_resource_billing_type,base.group_user,1,1,1,1
access_yuthon_property_evaluation,yuthon.property.evaluation,model_yuthon_property_evaluation,base.group_user,1,1,1,1
1 id name model_id:id group_id:id perm_read perm_write perm_create perm_unlink
2 access_yuthon_property yuthon_property model_yuthon_property base.group_user 1 1 1 1
3 access_property_type property_type model_property_type base.group_user 1 1 1 1
4 access_property_patrol_duty property_patrol_duty model_property_patrol_duty base.group_user 1 1 1 1
5 access_property_patrol_plan property_patrol_plan model_property_patrol_plan base.group_user 1 1 1 1
6 access_property_route_management property_route_management model_property_route_management base.group_user 1 1 1 1
7 access_property_patrol_position property_patrol_position model_property_patrol_position base.group_user 1 1 1 1
8 access_property_patrol_standard property_patrol_standard model_property_patrol_standard base.group_user 1 1 1 1
9 access_yuthon_draw_result yuthon.draw.result model_yuthon_draw_result base.group_user 1 1 1 1
10 access_yuthon_expert_database yuthon.expert.database model_yuthon_expert_database base.group_user 1 1 1 1
11 access_yuthon_property_water yuthon.property.water model_yuthon_property_water base.group_user 1 1 1 1
12 access_yuthon_property_energy yuthon.property.energy model_yuthon_property_energy base.group_user 1 1 1 1
13 access_yuthon_resource_mgmt_config yuthon.resource.mgmt.config model_yuthon_resource_mgmt_config base.group_user 1 1 1 1
14 access_yuthon_resource_type yuthon.resource.type model_yuthon_resource_type base.group_user 1 1 1 1
15 access_yuthon_resource_house_type yuthon.resource.house.type model_yuthon_resource_house_type base.group_user 1 1 1 1
16 access_yuthon_resource_purpose yuthon.resource.purpose model_yuthon_resource_purpose base.group_user 1 1 1 1
17 access_yuthon_resource_management_type yuthon.resource.management.type model_yuthon_resource_management_type base.group_user 1 1 1 1
18 access_yuthon_resource_billing_type yuthon.resource.billing.type model_yuthon_resource_billing_type base.group_user 1 1 1 1
19 access_yuthon_property_evaluation yuthon.property.evaluation model_yuthon_property_evaluation base.group_user 1 1 1 1
20
21
+64 -221
View File
@@ -31,21 +31,27 @@
sequence="5"
name="已评估"
parent="yuthon_property_menu"
action="yuthon_property_action"/>
action="yuthon_property_evaluation_action2"/>
<menuitem id="yuthon_property_evaluation_experts_menu"
sequence="7"
name="评估专家库"
name="评估专家库(二期)"
parent="yuthon_property_menu"/>
<menuitem id="yuthon_property_evaluation_list_menu"
sequence="1"
name="专家列表"
parent="yuthon_property_evaluation_experts_menu"
action="yuthon_property_action"/>
action="yuthon_expert_database_action"/>
<menuitem id="yuthon_property_evaluation_lottery_menu"
sequence="3"
name="专家抽签"
parent="yuthon_property_evaluation_experts_menu"
action="yuthon_property_action"/>
action="base.open_module_tree"/>
<menuitem id="yuthon_property_draw_result_menu"
sequence="4"
name="抽签结果"
parent="yuthon_property_evaluation_experts_menu"
action="yuthon_draw_result_action"/>
<menuitem id="yuthon_property_menu_data"
sequence="7"
name="招租"
@@ -168,7 +174,7 @@
<menuitem id="yuthon_security_inspection_menu"
sequence="15"
name="安全巡检"
name="安全巡检(二期)"
parent="yuthon_property_menu_root"
action="property_assess_action"/>
<menuitem id="yuthon_property_schedule_tasks"
@@ -190,41 +196,31 @@
name="配置"
parent="yuthon_property_schedule_tasks"
action="property_assess_action"/>
<!-- <menuitem id="yuthon_property_inspection_items"-->
<!-- sequence="1"-->
<!-- name="巡检项目"-->
<!-- parent="yuthon_property_schedule_setting"-->
<!-- action="property_assess_action"/>-->
<!-- <menuitem id="yuthon_property_inspection_meters"-->
<!-- sequence="3"-->
<!-- name="巡检水电表"-->
<!-- parent="yuthon_property_schedule_setting"-->
<!-- action="property_assess_action"/>-->
<!-- <menuitem id="yuthon_property_inspection_stairwells"-->
<!-- sequence="5"-->
<!-- name="巡检楼梯间"-->
<!-- parent="yuthon_property_schedule_setting"-->
<!-- action="property_assess_action"/>-->
<!-- <menuitem id="yuthon_property_inspection_lobby"-->
<!-- sequence="7"-->
<!-- name="巡检大堂"-->
<!-- parent="yuthon_property_schedule_setting"-->
<!-- action="property_assess_action"/>-->
<!-- <menuitem id="yuthon_property_inspection_device"-->
<!-- sequence="9"-->
<!-- name="巡检设备"-->
<!-- parent="yuthon_property_schedule_setting"-->
<!-- action="property_assess_action"/>-->
<!-- <menuitem id="yuthon_property_inspection_vacant"-->
<!-- sequence="11"-->
<!-- name="巡检空置房"-->
<!-- parent="yuthon_property_schedule_setting"-->
<!-- action="property_assess_action"/>-->
<!-- <menuitem id="yuthon_property_inspection_other"-->
<!-- sequence="13"-->
<!-- name="巡检违章装修"-->
<!-- parent="yuthon_property_schedule_setting"-->
<!-- action="property_assess_action"/>-->
<menuitem id="yuthon_property_patrol_duty"
sequence="7"
name="巡更任务"
parent="yuthon_security_inspection_menu"
action="property_patrol_duty"/>
<menuitem id="yuthon_property_patrol_plan"
sequence="9"
name="巡更计划"
parent="yuthon_security_inspection_menu"
action="property_patrol_plan"/>
<menuitem id="yuthon_property_route_management"
sequence="11"
name="路线管理"
parent="yuthon_security_inspection_menu"
action="property_route_management"/>
<menuitem id="yuthon_property_patrol_position"
sequence="13"
name="巡更点位"
parent="yuthon_security_inspection_menu"
action="property_patrol_position"/>
<menuitem id="yuthon_property_patrol_standard"
sequence="15"
name="巡更标准"
parent="yuthon_security_inspection_menu"
action="property_patrol_standard"/>
<menuitem id="yuthon_customer_service_menu"
sequence="17"
@@ -253,194 +249,41 @@
<menuitem
id="property_approval_menu"
id="resource_management_menu"
parent="yuthon_property_menu_root"
name="资源管理"
sequence="2"/>
<menuitem
id="resource_mgmt_config_menu"
parent="resource_management_menu"
name="配置"
action="yuthon_resource_mgmt_config_action"
sequence="-1"/>
<menuitem id="yuthon_resource_type_menu" parent="resource_mgmt_config_menu" name="资产类型"
action="yuthon_resource_type_action" sequence="10"/>
<menuitem id="yuthon_resource_house_type_menu" parent="resource_mgmt_config_menu" name="户型"
action="yuthon_resource_house_type_action" sequence="20"/>
<menuitem id="yuthon_resource_purpose_menu" parent="resource_mgmt_config_menu" name="用途"
action="yuthon_resource_purpose_action" sequence="30"/>
<menuitem id="yuthon_resource_management_type_menu" parent="resource_mgmt_config_menu" name="管理类型"
action="yuthon_resource_management_type_action" sequence="10"/>
<menuitem id="yuthon_resource_mgmt_config_menu" parent="resource_mgmt_config_menu" name="开票类型"
action="yuthon_resource_mgmt_config_action" sequence="10"/>
<menuitem
id="property_approval_management_menu"
parent="property_approval_menu"
parent="resource_management_menu"
name="物业信息"
sequence="1"
action="yuthon_property_action"/>
<!-- &lt;!&ndash; 二级标题 &ndash;&gt;-->
<!-- <menuitem id="yuthon_property_evaluated_menu"-->
<!-- sequence="9"-->
<!-- name="评估"-->
<!-- parent="yuthon_property_menu_root"/>-->
<!-- &lt;!&ndash; 三级标题 &ndash;&gt;-->
<!-- <menuitem id="yuthon_property_tobe_menu"-->
<!-- sequence="1"-->
<!-- name="待评估"-->
<!-- parent="yuthon_property_evaluated_menu"-->
<!-- action="property_assess_action"/>-->
<!-- &lt;!&ndash; 二级标题 &ndash;&gt;-->
<!-- <menuitem id="yuthon_property_contract_menu"-->
<!-- sequence="12"-->
<!-- name="合同"-->
<!-- parent="yuthon_property_menu_root"/>-->
<!-- &lt;!&ndash; 三级标题 &ndash;&gt;-->
<!-- <menuitem id="yuthon_property_contract_assessment_menu"-->
<!-- sequence="1"-->
<!-- name="评估合同"-->
<!-- parent="yuthon_property_contract_menu"-->
<!-- action="property_assess_action"/>-->
<!-- <menuitem id="yuthon_property_contract_lease_menu"-->
<!-- sequence="5"-->
<!-- name="租凭合同"-->
<!-- parent="yuthon_property_contract_menu"-->
<!-- action="property_assess_action"/>-->
<!-- <menuitem id="yuthon_property_contract_build_menu"-->
<!-- sequence="10"-->
<!-- name="建设工程合同"-->
<!-- parent="yuthon_property_contract_menu"/>-->
<!-- &lt;!&ndash;四级标题&ndash;&gt;-->
<!-- <menuitem id="yuthon_property_contract_design_menu"-->
<!-- sequence="1"-->
<!-- name="设计"-->
<!-- parent="yuthon_property_contract_build_menu"-->
<!-- action="property_assess_action"/>-->
<!-- <menuitem id="yuthon_property_contract_cost_menu"-->
<!-- sequence="5"-->
<!-- name="造价"-->
<!-- parent="yuthon_property_contract_build_menu"-->
<!-- action="property_assess_action"/>-->
<!-- <menuitem id="yuthon_property_contract_supervisor_menu"-->
<!-- sequence="10"-->
<!-- name="监理"-->
<!-- parent="yuthon_property_contract_build_menu"-->
<!-- action="property_assess_action"/>-->
<!-- <menuitem id="yuthon_property_contract_construction_menu"-->
<!-- sequence="15"-->
<!-- name="施工"-->
<!-- parent="yuthon_property_contract_build_menu"-->
<!-- action="property_assess_action"/>-->
<!-- <menuitem id="yuthon_property_contract_supplement_menu"-->
<!-- sequence="20"-->
<!-- name="补充"-->
<!-- parent="yuthon_property_contract_build_menu"-->
<!-- action="property_assess_action"/>-->
<!-- &lt;!&ndash;三级标题&ndash;&gt;-->
<!-- <menuitem id="yuthon_property_contract_upkeep_menu"-->
<!-- sequence="1"-->
<!-- name="维保合同"-->
<!-- parent="yuthon_property_contract_menu"-->
<!-- action="property_assess_action"/>-->
<!-- <menuitem id="yuthon_property_contract_review_menu"-->
<!-- sequence="5"-->
<!-- name="年审合同"-->
<!-- parent="yuthon_property_contract_menu"-->
<!-- action="property_assess_action"/>-->
<!-- <menuitem id="yuthon_property_contract_purchase_menu"-->
<!-- sequence="10"-->
<!-- name="采购合同"-->
<!-- parent="yuthon_property_contract_menu"-->
<!-- action="property_assess_action"/>-->
<!-- &lt;!&ndash; 二级标题 &ndash;&gt;-->
<!-- <menuitem id="yuthon_property_inspection_menu"-->
<!-- sequence="15"-->
<!-- name="安全巡检"-->
<!-- parent="yuthon_property_menu_root"/>-->
<!-- &lt;!&ndash; 三级标题 &ndash;&gt;-->
<!-- <menuitem id="yuthon_property_inspection_plan_menu"-->
<!-- sequence="1"-->
<!-- name="计划"-->
<!-- parent="yuthon_property_inspection_menu"-->
<!-- action="property_assess_action"/>-->
<!-- <menuitem id="yuthon_property_inspection_ledger_menu"-->
<!-- sequence="5"-->
<!-- name="巡检台账"-->
<!-- parent="yuthon_property_inspection_menu"-->
<!-- action="property_assess_action"/>-->
<!-- <menuitem id="yuthon_property_inspection_rec_menu"-->
<!-- sequence="15"-->
<!-- name="整改"-->
<!-- parent="yuthon_property_inspection_menu"-->
<!-- action="property_assess_action"/>-->
<!-- <menuitem id="yuthon_property_inspection_configure_menu"-->
<!-- sequence="20"-->
<!-- name="配置"-->
<!-- parent="yuthon_property_inspection_menu"-->
<!-- action="property_assess_action"/>-->
<!-- &lt;!&ndash; 二级标题 &ndash;&gt;-->
<!-- <menuitem id="yuthon_property_cost_menu"-->
<!-- sequence="17"-->
<!-- name="费用"-->
<!-- parent="yuthon_property_menu_root"/>-->
<!-- &lt;!&ndash; 三级标题 &ndash;&gt;-->
<!-- <menuitem id="yuthon_property_cost_rent_menu"-->
<!-- sequence="1"-->
<!-- name="租金"-->
<!-- parent="yuthon_property_cost_menu"-->
<!-- action="property_assess_action"/>-->
<!-- <menuitem id="yuthon_property_cost_deposit_menu"-->
<!-- sequence="5"-->
<!-- name="押金"-->
<!-- parent="yuthon_property_cost_menu"-->
<!-- action="property_assess_action"/>-->
<!-- <menuitem id="yuthon_property_cost_hyd_menu"-->
<!-- sequence="10"-->
<!-- name="水电费"-->
<!-- parent="yuthon_property_cost_menu"-->
<!-- action="property_assess_action"/>-->
<!-- <menuitem id="yuthon_property_cost_default_menu"-->
<!-- sequence="15"-->
<!-- name="违约金"-->
<!-- parent="yuthon_property_cost_menu"-->
<!-- action="property_assess_action"/>-->
<!-- <menuitem id="yuthon_property_cost_main_menu"-->
<!-- sequence="20"-->
<!-- name="维修费"-->
<!-- parent="yuthon_property_cost_menu"-->
<!-- action="property_assess_action"/>-->
<!-- <menuitem id="yuthon_property_cost_other_menu"-->
<!-- sequence="25"-->
<!-- name="其他"-->
<!-- parent="yuthon_property_cost_menu"-->
<!-- action="property_assess_action"/>-->
<!-- &lt;!&ndash; 二级标题 &ndash;&gt;-->
<!-- <menuitem id="yuthon_property_form_menu"-->
<!-- sequence="19"-->
<!-- name="报表"-->
<!-- parent="yuthon_property_menu_root"/>-->
<!-- &lt;!&ndash; 三级标题 &ndash;&gt;-->
<!-- <menuitem id="yuthon_property_form_report_menu"-->
<!-- sequence="1"-->
<!-- name="经营报表"-->
<!-- parent="yuthon_property_form_menu"-->
<!-- action="property_assess_action"/>-->
<!-- <menuitem id="yuthon_property_form_ledger_menu"-->
<!-- sequence="5"-->
<!-- name="台账"-->
<!-- parent="yuthon_property_form_menu"-->
<!-- action="property_assess_action"/>-->
<!-- <menuitem id="yuthon_property_setting_menu"-->
<!-- sequence="99"-->
<!-- name="配置"-->
<!-- parent="yuthon_property_menu_root"/>-->
<!-- <menuitem id="yuthon_property_type_setting_menu"-->
<!-- sequence="1"-->
<!-- name="物业状态配置"-->
<!-- parent="yuthon_property_setting_menu"-->
<!-- action="property_type_action"/>-->
<menuitem
id="property_approval_menu"
parent="resource_management_menu"
name="物业审批"
action="yuthon_property_action"
sequence="2"/>
</odoo>
@@ -0,0 +1,56 @@
<?xml version="1.0" encoding="UTF-8" ?>
<odoo>
<record id="view_property_patrol_duty_tree" model="ir.ui.view">
<field name="name">property.patrol.duty.tree</field>
<field name="model">property.patrol.duty</field>
<field name="arch" type="xml">
<tree string="巡更任务" editable="bottom">
<field name="number"/>
<field name="task_number"/>
<field name="task_category"/>
<field name="route_name"/>
<field name="people"/>
<field name="scheduled_time"/>
<field name="task_status"/>
<field name="timeout_cause"/>
<field name="create_date"/>
<field name="end_date"/>
<field name="point_random"/>
<field name="inspection_completion"/>
<field name="inspection_schedule"/>
<field name="controls"/>
</tree>
</field>
</record>
<record id="property_patrol_duty_form" model="ir.ui.view">
<field name="name">property.patrol.duty.form</field>
<field name="model">property.patrol.duty</field>
<field name="arch" type="xml">
<form string="巡更任务">
<sheet>
<group>
<field name="number"/>
<field name="task_number"/>
<field name="task_category"/>
<field name="route_name"/>
<field name="people"/>
<field name="scheduled_time"/>
<field name="task_status"/>
<field name="timeout_cause"/>
<field name="create_date"/>
<field name="end_date"/>
<field name="point_random"/>
<field name="inspection_completion"/>
<field name="inspection_schedule"/>
<field name="controls"/>
</group>
</sheet>
</form>
</field>
</record>
<record id="property_patrol_duty" model="ir.actions.act_window">
<field name="name">巡更任务</field>
<field name="res_model">property.patrol.duty</field>
<field name="view_mode">tree,form</field>
</record>
</odoo>
@@ -0,0 +1,48 @@
<?xml version="1.0" encoding="UTF-8" ?>
<odoo>
<record id="view_property_patrol_plan_tree" model="ir.ui.view">
<field name="name">property.patrol.plan.tree</field>
<field name="model">property.patrol.plan</field>
<field name="arch" type="xml">
<tree string="巡更计划" editable="bottom">
<field name="plan_name"/>
<field name="plan_category"/>
<field name="people"/>
<field name="time"/>
<field name="start_date"/>
<field name="end_date"/>
<field name="generation_number"/>
<field name="completed_number"/>
<field name="founder"/>
<field name="controls"/>
</tree>
</field>
</record>
<record id="property_patrol_plan_form" model="ir.ui.view">
<field name="name">property.patrol.plan.form</field>
<field name="model">property.patrol.plan</field>
<field name="arch" type="xml">
<form string="巡更计划">
<sheet>
<group>
<field name="plan_name"/>
<field name="plan_category"/>
<field name="people"/>
<field name="time"/>
<field name="start_date"/>
<field name="end_date"/>
<field name="generation_number"/>
<field name="completed_number"/>
<field name="founder"/>
<field name="controls"/>
</group>
</sheet>
</form>
</field>
</record>
<record id="property_patrol_plan" model="ir.actions.act_window">
<field name="name">巡更计划</field>
<field name="res_model">property.patrol.plan</field>
<field name="view_mode">tree,form</field>
</record>
</odoo>
@@ -0,0 +1,52 @@
<?xml version="1.0" encoding="UTF-8" ?>
<odoo>
<record id="view_property_patrol_position_tree" model="ir.ui.view">
<field name="name">property.patrol.position.tree</field>
<field name="model">property.patrol.position</field>
<field name="arch" type="xml">
<tree string="巡更点位" editable="bottom">
<field name="number"/>
<field name="point_number"/>
<field name="point_name"/>
<field name="external_coding"/>
<field name="position"/>
<field name="adapt_work"/>
<field name="founder"/>
<field name="clock_in"/>
<field name="picture"/>
<field name="outside"/>
<field name="code_management"/>
<field name="controls"/>
</tree>
</field>
</record>
<record id="property_patrol_position_form" model="ir.ui.view">
<field name="name">property.patrol.position.form</field>
<field name="model">property.patrol.position</field>
<field name="arch" type="xml">
<form string="巡更点位">
<sheet>
<group>
<field name="number"/>
<field name="point_number"/>
<field name="point_name"/>
<field name="external_coding"/>
<field name="position"/>
<field name="adapt_work"/>
<field name="founder"/>
<field name="clock_in"/>
<field name="picture"/>
<field name="outside"/>
<field name="code_management"/>
<field name="controls"/>
</group>
</sheet>
</form>
</field>
</record>
<record id="property_patrol_position" model="ir.actions.act_window">
<field name="name">巡更点位</field>
<field name="res_model">property.patrol.position</field>
<field name="view_mode">tree,form</field>
</record>
</odoo>
@@ -0,0 +1,50 @@
<?xml version="1.0" encoding="UTF-8" ?>
<odoo>
<record id="view_property_patrol_standard_tree" model="ir.ui.view">
<field name="name">property.patrol.standard.tree</field>
<field name="model">property.patrol.standard</field>
<field name="arch" type="xml">
<tree string="巡更标准" editable="bottom">
<field name="number"/>
<field name="task_number"/>
<field name="question_type"/>
<field name="check_item"/>
<field name="title"/>
<field name="check_details"/>
<field name="result_option"/>
<field name="people"/>
<field name="time"/>
<field name="ed_time"/>
<field name="controls"/>
</tree>
</field>
</record>
<record id="property_patrol_standard_form" model="ir.ui.view">
<field name="name">property.patrol.standard.form</field>
<field name="model">property.patrol.standard</field>
<field name="arch" type="xml">
<form string="巡更标准">
<sheet>
<group>
<field name="number"/>
<field name="task_number"/>
<field name="question_type"/>
<field name="check_item"/>
<field name="title"/>
<field name="check_details"/>
<field name="result_option"/>
<field name="people"/>
<field name="time"/>
<field name="ed_time"/>
<field name="controls"/>
</group>
</sheet>
</form>
</field>
</record>
<record id="property_patrol_standard" model="ir.actions.act_window">
<field name="name">巡更标准</field>
<field name="res_model">property.patrol.standard</field>
<field name="view_mode">tree,form</field>
</record>
</odoo>
@@ -0,0 +1,40 @@
<?xml version="1.0" encoding="UTF-8" ?>
<odoo>
<record id="view_property_route_management_tree" model="ir.ui.view">
<field name="name">property.route.management.tree</field>
<field name="model">property.route.management</field>
<field name="arch" type="xml">
<tree string="路线管理" editable="bottom">
<field name="number"/>
<field name="patrol_types"/>
<field name="route_sequence"/>
<field name="patrol_number"/>
<field name="founder"/>
<field name="controls"/>
</tree>
</field>
</record>
<record id="property_route_management_form" model="ir.ui.view">
<field name="name">property.route.management.form</field>
<field name="model">property.route.management</field>
<field name="arch" type="xml">
<form string="路线管理">
<sheet>
<group>
<field name="number"/>
<field name="patrol_types"/>
<field name="route_sequence"/>
<field name="patrol_number"/>
<field name="founder"/>
<field name="controls"/>
</group>
</sheet>
</form>
</field>
</record>
<record id="property_route_management" model="ir.actions.act_window">
<field name="name">路线管理</field>
<field name="res_model">property.route.management</field>
<field name="view_mode">tree,form</field>
</record>
</odoo>
@@ -0,0 +1,46 @@
<?xml version="1.0" encoding="UTF-8" ?>
<odoo>
<record id="yuthon_draw_result_view_tree" model="ir.ui.view">
<field name="name">yuthon_draw_result_view_tree</field>
<field name="model">yuthon.draw.result</field>
<field name="arch" type="xml">
<tree editable="bottom">
<field name="date"/>
<field name="project"/>
<field name="company"/>
<field name="expert"/>
<field name="phone"/>
<field name="email"/>
<field name="attachment" widget="image" options='{"zoom": true, "size": [40, 40]}'/>
</tree>
</field>
</record>
<record id="yuthon_draw_result_view_search" model="ir.ui.view">
<field name="name">yuthon_draw_result_view_search</field>
<field name="model">yuthon.draw.result</field>
<field name="arch" type="xml">
<search>
<field name="date"/>
<field name="project"/>
<field name="company"/>
<field name="expert"/>
<field name="phone"/>
<field name="email"/>
<separator/>
<group expand="0" >
<filter name="date" context="{'group_by':'date'}"/>
<filter name="expert" context="{'group_by':'expert'}"/>
</group>
</search>
</field>
</record>
<record id="yuthon_draw_result_action" model="ir.actions.act_window">
<field name="name">抽签结果</field>
<field name="type">ir.actions.act_window</field>
<field name="res_model">yuthon.draw.result</field>
<field name="view_mode">tree</field>
</record>
</odoo>
@@ -0,0 +1,50 @@
<?xml version="1.0" encoding="UTF-8" ?>
<odoo>
<record id="yuthon_expert_database_view_tree" model="ir.ui.view">
<field name="name">yuthon_expert_database_view_tree</field>
<field name="model">yuthon.expert.database</field>
<field name="arch" type="xml">
<tree editable="bottom">
<field name="name" required="1"/>
<field name="gender" required="1"/>
<field name="company"/>
<field name="id_number"/>
<field name="certificate_number"/>
<field name="phone"/>
<field name="email"/>
<field name="effective_date" />
<field name="expiration_date"/>
</tree>
</field>
</record>
<record id="yuthon_expert_database_view_search" model="ir.ui.view">
<field name="name">yuthon_expert_database_view_search</field>
<field name="model">yuthon.expert.database</field>
<field name="arch" type="xml">
<search>
<field name="name" />
<field name="gender" />
<field name="company"/>
<field name="id_number"/>
<field name="certificate_number"/>
<field name="phone"/>
<field name="email"/>
<field name="effective_date" />
<field name="expiration_date"/>
<separator/>
<group expand="0" >
<filter name="gender" context="{'group_by':'gender'}"/>
</group>
</search>
</field>
</record>
<record id="yuthon_expert_database_action" model="ir.actions.act_window">
<field name="name">专家库</field>
<field name="type">ir.actions.act_window</field>
<field name="res_model">yuthon.expert.database</field>
<field name="view_mode">tree</field>
</record>
</odoo>
@@ -0,0 +1,175 @@
<?xml version="1.0" encoding="UTF-8" ?>
<odoo>
<!--待评估物业-->
<record id="yuthon_property_evaluation_view_tree1" model="ir.ui.view">
<field name="name">yuthon_property_evaluation_view_tree</field>
<field name="model">yuthon.property.evaluation</field>
<field name="arch" type="xml">
<tree>
<field name="owner"/>
<field name="property_address"/>
<field name="property_area"/>
<field name="rentable_area"/>
<field name="unit_price"/>
<field name="current_status"/>
<field name="registered_use"/>
<field name="rental_use"/>
<field name="rental_conditions"/>
<field name="district_manager"/>
<field name="company"/>
<field name="remarks"/>
</tree>
</field>
</record>
<record id="yuthon_property_evaluation_view_form1" model="ir.ui.view">
<field name="name">yuthon_property_evaluation_view_form1</field>
<field name="model">yuthon.property.evaluation</field>
<field name="arch" type="xml">
<form>
<sheet>
<group>
<group>
<field name="owner"/>
<field name="property_address"/>
<field name="property_area"/>
<field name="rentable_area"/>
<field name="unit_price"/>
</group>
<group>
<field name="current_status"/>
<field name="registered_use"/>
<field name="rental_use"/>
<field name="district_manager"/>
<field name="company"/>
</group>
</group>
<group>
<field name="rental_conditions"/>
<field name="remarks"/>
</group>
</sheet>
<div class="oe_chatter">
<field name="message_follower_ids"/>
<field name="activity_ids"/>
<field name="message_ids"/>
</div>
</form>
</field>
</record>
<!-- 已评估物业-->
<record id="yuthon_property_evaluation_view_tree2" model="ir.ui.view">
<field name="name">yuthon_property_evaluation_view_tree</field>
<field name="model">yuthon.property.evaluation</field>
<field name="arch" type="xml">
<tree>
<field name="sequence" widget="handle"/>
<field name="evaluation_asset"/>
<field name="evaluation_area"/>
<field name="evaluation_category"/>
<field name="owner"/>
<field name="registered_use"/>
<field name="set_purpose"/>
<field name="current_status"/>
<field name="rental_conditions"/>
<field name="remarks"/>
<field name="last_hand_rent_price"/>
<field name="gov_rent_price" optional="hide"/>
<field name="evaluation_rent_price" optional="hide"/>
<field name="evaluation_rent_total" optional="hide"/>
<field name="evaluation_whole_rent_price" optional="hide"/>
<field name="evaluation_whole_rent_total" optional="hide"/>
</tree>
</field>
</record>
<record id="yuthon_property_evaluation_view_form2" model="ir.ui.view">
<field name="name">yuthon_property_evaluation_view_form1</field>
<field name="model">yuthon.property.evaluation</field>
<field name="arch" type="xml">
<form>
<sheet>
<group>
<group>
<field name="evaluation_asset"/>
<field name="evaluation_area"/>
<field name="evaluation_category"/>
<field name="owner"/>
<field name="rental_conditions"/>
<field name="last_hand_rent_price"/>
<field name="gov_rent_price"/>
<field name="evaluation_rent_price"/>
</group>
<group>
<field name="registered_use"/>
<field name="set_purpose"/>
<field name="current_status"/>
<field name="remarks"/>
<field name="evaluation_rent_total" />
<field name="evaluation_whole_rent_price" />
<field name="evaluation_whole_rent_total"/>
</group>
</group>
</sheet>
<div class="oe_chatter">
<field name="message_follower_ids"/>
<field name="activity_ids"/>
<field name="message_ids"/>
</div>
</form>
</field>
</record>
<record id="yuthon_property_evaluation_view_search" model="ir.ui.view">
<field name="name">yuthon_property_evaluation_view_search</field>
<field name="model">yuthon.property.evaluation</field>
<field name="arch" type="xml">
<search>
<field name="property_address"/>
<field name="property_area"/>
<field name="rentable_area"/>
<field name="unit_price"/>
<field name="current_status"/>
<field name="registered_use"/>
<field name="rental_use"/>
<field name="rental_conditions"/>
<field name="district_manager"/>
<field name="company"/>
<separator/>
<group expand="0">
<filter name="owner" context="{'group_by':'owner'}"/>
</group>
</search>
</field>
</record>
<record id="yuthon_property_evaluation_action1" model="ir.actions.act_window">
<field name="name">待评估物业</field>
<field name="type">ir.actions.act_window</field>
<field name="res_model">yuthon.property.evaluation</field>
<field name="view_mode">tree,form</field>
<field name="domain">[]</field>
<field name="context">{}</field>
<field name="view_ids" eval="[(5, 0, 0),
(0, 0, {'view_mode': 'tree', 'view_id': ref('yuthon_property_evaluation_view_tree1')}),
(0, 0, {'view_mode': 'form', 'view_id': ref('yuthon_property_evaluation_view_form1')})]"/>
<field name="search_view_id" ref="yuthon_property_evaluation_view_search"/>
</record>
<record id="yuthon_property_evaluation_action2" model="ir.actions.act_window">
<field name="name">已评估物业</field>
<field name="type">ir.actions.act_window</field>
<field name="res_model">yuthon.property.evaluation</field>
<field name="view_mode">tree,form</field>
<field name="domain">[]</field>
<field name="context">{}</field>
<field name="view_ids" eval="[(5, 0, 0),
(0, 0, {'view_mode': 'tree', 'view_id': ref('yuthon_property_evaluation_view_tree2')}),
(0, 0, {'view_mode': 'form', 'view_id': ref('yuthon_property_evaluation_view_form2')})]"/>
<field name="search_view_id" ref="yuthon_property_evaluation_view_search"/>
</record>
</odoo>
+133 -85
View File
@@ -5,101 +5,117 @@
<field name="model">yuthon.property</field>
<field name="arch" type="xml">
<tree string="物业管理">
<header>
<button name="put_change_title" string="提交产权变更审批" type="object"/>
<button name="put_change_manage" string="提交管理变更审批" type="object"/>
</header>
<field name="name"/>
<field name="property_precinct" optional="show"/>
<field name="address" optional="hide"/>
<field name="is_confirm_authorization" optional="hide"/>
<field name="is_handle_land" optional="hide"/>
<field name="owner" optional="show"/>
<field name="title_number" optional="show"/>
<field name="property_area" optional="show"/>
<field name="pooled_area" optional="show"/>
<field name="start_time" optional="show"/>
<field name="end_time" optional="show"/>
<field name="management_area" optional="hide"/>
<field name="rentable_area" optional="hide"/>
<field name="property_floor" optional="hide"/>
<header>
<button name="put_change_title" string="提交产权变更审批" type="object"/>
<button name="put_change_manage" string="提交管理变更审批" type="object"/>
</header>
<field name="name" required="1"/>
<field name="premises"/>
<field name="units"/>
<field name="house_type_id" optional="hide"/>
<field name="property_room" optional="hide"/>
<field name="street" optional="hide"/>
<field name="property_house" optional="hide"/>
<field name="building_area" optional="hide"/>
<field name="actual_area" optional="hide"/>
<field name="management_area" optional="hide"/>
<field name="effective_date" optional="hide"/>
<field name="property_source" optional="hide"/>
<field name="property_floor" optional="hide"/>
<field name="property_orientation" optional="hide"/>
<field name="property_use_id" optional="hide"/>
<field name="property_asset_type" optional="hide"/>
<field name="property_use_type" optional="hide"/>
<field name="property_rent_type" optional="hide"/>
<field name="is_meter" optional="show"/>
<field name="is_electricity_meter" optional="show"/>
<field name="is_hvac" optional="hide"/>
<field name="manage_standard" optional="show"/>
<field name="remarks" optional="hide"/>
<field name="company_page" optional="hide"/>
<field name="property" optional="hide"/>
<field name="rental_unit_price" optional="show"/>
<field name="admin" optional="show"/>
<field name="street" optional="hide"/>
<field name="property_area"/>
<field name="pooled_area"/>
<field name="rentable_area"/>
<field name="end_date"/>
<field name="state_id"/>
<field name="is_meter"/>
<field name="is_electricity_meter"/>
</tree>
</field>
</record>
<record id="yuthon_property_form" model="ir.ui.view">
<field name="name">yuthon.property.form</field>
<field name="model">yuthon.property</field>
<field name="arch" type="xml">
<form string="产品管理">
<form string="资产信息">
<sheet>
<field name="image_1920" widget="image" class="oe_avatar" optional="{'preview_image': 'image_128'}"/>
<div class="oe_title">
<label for="name" string="名称"/>
<h1>
<field name="name" required="1"/>
</h1>
</div>
<group>
<field name="image_1920" widget="image" class="oe_avatar"
optional="{'preview_image': 'image_128'}"/>
<group string="基本信息">
<group>
<field name="owner"/>
<field name="title_number"/>
<field name="property_asset_type"/>
<field name="property_area"/>
<field name="suite_area"/>
<field name="pooled_area"/>
<field name="start_time"/>
<field name="end_time"/>
<field name="name" required="1"/>
<field name="premises"/>
<field name="units"/>
<field name="house_type_id"/>
<field name="property_room"/>
<field name="building_area"/>
<field name="actual_area"/>
<field name="management_area"/>
<field name="effective_date"/>
<field name="property_source"/>
<field name="remark"/>
<field name="vr_link"/>
<field name="other_materials"/>
</group>
<group>
<field name="abbreviation"/>
<field name="property_floor"/>
<field name="property_orientation"/>
<field name="street"/>
<field name="property_area"/>
<field name="pooled_area"/>
<field name="rentable_area"/>
<field name="end_date"/>
<field name="state_id"/>
<field name="is_meter"/>
<field name="is_electricity_meter"/>
<field name="manage_standard"/>
<field name="company_page"/>
<field name="admin"/>
<field name="rental_unit_price"/>
</group>
</group>
<notebook>
<page string="更多详情">
<group string="属性价值" col="1">
<group col="2">
<group>
<group>
<field name="property_precinct"/>
<field name="address"/>
<field name="is_confirm_authorization"/>
<field name="property_use_id"/>
<field name="property_use_type"/>
<field name="property_rent_type"/>
<field name="property"/>
<field name="rental_address"/>
</group>
<group>
<field name="management_area"/>
<field name="rentable_area"/>
<field name="property_floor"/>
<field name="property_room"/>
<field name="property_asset_type"/>
<field name="street"/>
<field name="title_address"/>
<field name="remarks"/>
</group>
<field name="company_page"/>
<field name="admin_id"/>
<field name="purpose_id"/>
<field name="mgmt_type_id"/>
<field name="is_confirm_authorization"/>
<field name="owner_id"/>
<field name="property_card"/>
</group>
<group>
<field name="property_precinct"/>
<field name="asset_type_id"/>
<field name="is_hvac"/>
<field name="is_handle_land"/>
</group>
</group>
<group col="2">
<group>
<field name="life_timer"/>
</group>
<group>
<div>
<field name="property_use_time"/>
</div>
</group>
</group>
</group>
<group string="招商信息">
<group>
<field name="ame"/>
<field name="decoration_type"/>
</group>
</group>
<notebook>
<page string="水表列表" invisible="is_meter == False">
<field name="water_meter_ids"/>
</page>
<page string="电表列表" invisible="is_electricity_meter == False">
<field name="energy_meter_ids"/>
</page>
</notebook>
</sheet>
@@ -118,16 +134,12 @@
<field name="arch" type="xml">
<search>
<field name="company_page" string="公司"/>
<field name="owner" string="负责人"/>
<field name="owner_id" string="负责人"/>
<field name="property_precinct" string="片区"/>
<filter string="可租" name="could" domain="[('property_rent_type', '=', 'could')]"/>
<filter string="不可租" name="could" domain="[('property_rent_type', '=', 'no')]"/>
<filter string="已租" name="done" domain="[('property_rent_type', '=', 'done')]"/>
<filter string="空置" name="none" domain="[('property_rent_type', '=', 'none')]"/>
<separator/>
<filter string="可租" name="could" domain="[('state_id', '=', 'could')]"/>
<group expand="0">
<filter name="group_statu" string="物业状态" context="{'group_by': 'state_id'}"/>
<filter name="group_purpose" string="资产用途" context="{'group_by': 'purpose_id'}"/>
</group>
</search>
</field>
@@ -145,7 +157,7 @@
<t t-name="kanban-box">
<div class="oe_kanban_card oe_kanban_global_click">
<div class="o_kanban_image me-1">
<img t-att-src="kanban_image('product.product', 'image_128', record.id.raw_value)"
<img t-att-src="kanban_image('yuthon.property', 'image_1920', record.id.raw_value)"
alt="Product" class="o_image_64_contain"/>
</div>
<div class="oe_kanban_details">
@@ -154,14 +166,18 @@
<strong class="o_kanban_record_title">
<field name="name"/>
</strong>
<div>
<span>面积:</span>
<div>
<span>面积:</span>
<field name="property_area"/>
</div>
<div>
<span>评估单价:</span>
<field name="rental_unit_price"/>
</div>
<div>
<span>管理员:</span>
<field name="admin_id"/>
</div>
</div>
<!-- <field name="priority" widget="priority"/>-->
</div>
@@ -192,4 +208,36 @@
<field name="search_view_id" ref="yuthon_property_search"/>
</record>
<record id="view_yuthon_property_water_tree" model="ir.ui.view">
<field name="name">yuthon.property.water.tree</field>
<field name="model">yuthon.property.water</field>
<field name="arch" type="xml">
<tree editable="bottom">
<field name="code"/>
<field name="rate"/>
<field name="standard"/>
<field name="installation_date"/>
<field name="demolition_date"/>
<field name="location"/>
</tree>
</field>
</record>
<record id="view_yuthon_property_energy_tree" model="ir.ui.view">
<field name="name">yuthon.property.energy.tree</field>
<field name="model">yuthon.property.energy</field>
<field name="arch" type="xml">
<tree editable="bottom">
<field name="code"/>
<field name="rate"/>
<field name="standard"/>
<field name="installation_date"/>
<field name="demolition_date"/>
<field name="location"/>
</tree>
</field>
</record>
</odoo>
@@ -0,0 +1,98 @@
<?xml version="1.0" encoding="UTF-8" ?>
<odoo>
<record id="view_yuthon_resource_mgmt_config_tree" model="ir.ui.view">
<field name="name">yuthon.resource.mgmt.config.tree</field>
<field name="model">yuthon.resource.mgmt.config</field>
<field name="arch" type="xml">
<tree editable="bottom">
<field name="asset_type_id"/>
<field name="house_type_id"/>
<field name="purpose_id"/>
<field name="mgmt_type_id"/>
<field name="billing_type_id"/>
</tree>
</field>
</record>
<record id="yuthon_resource_mgmt_config_action" model="ir.actions.act_window">
<field name="name">资源管理配置</field>
<field name="res_model">yuthon.resource.mgmt.config</field>
<field name="view_mode">tree</field>
</record>
<record id="view_yuthon_resource_type_tree" model="ir.ui.view">
<field name="name">yuthon.resource.type.tree</field>
<field name="model">yuthon.resource.type</field>
<field name="arch" type="xml">
<tree editable="bottom">
<field name="name"/>
</tree>
</field>
</record>
<record id="yuthon_resource_type_action" model="ir.actions.act_window">
<field name="name">资产类型</field>
<field name="res_model">yuthon.resource.type</field>
<field name="view_mode">tree</field>
</record>
<record id="view_yuthon_resource_house_type_tree" model="ir.ui.view">
<field name="name">yuthon.resource.house.type.tree</field>
<field name="model">yuthon.resource.house.type</field>
<field name="arch" type="xml">
<tree editable="bottom">
<field name="name"/>
</tree>
</field>
</record>
<record id="yuthon_resource_house_type_action" model="ir.actions.act_window">
<field name="name">户型</field>
<field name="res_model">yuthon.resource.house.type</field>
<field name="view_mode">tree</field>
</record>
<record id="view_yuthon_resource_purpose_tree" model="ir.ui.view">
<field name="name">yuthon.resource.purpose.tree</field>
<field name="model">yuthon.resource.purpose</field>
<field name="arch" type="xml">
<tree editable="bottom">
<field name="name"/>
</tree>
</field>
</record>
<record id="yuthon_resource_purpose_action" model="ir.actions.act_window">
<field name="name">用途</field>
<field name="res_model">yuthon.resource.purpose</field>
<field name="view_mode">tree</field>
</record>
<record id="view_yuthon_resource_management_type_tree" model="ir.ui.view">
<field name="name">yuthon.resource.management.type.tree</field>
<field name="model">yuthon.resource.management.type</field>
<field name="arch" type="xml">
<tree editable="bottom">
<field name="name"/>
</tree>
</field>
</record>
<record id="yuthon_resource_management_type_action" model="ir.actions.act_window">
<field name="name">管理类型</field>
<field name="res_model">yuthon.resource.management.type</field>
<field name="view_mode">tree</field>
</record>
<record id="view_yuthon_resource_billing_type_tree" model="ir.ui.view">
<field name="name">yuthon.resource.billing.type.tree</field>
<field name="model">yuthon.resource.billing.type</field>
<field name="arch" type="xml">
<tree editable="bottom">
<field name="name"/>
</tree>
</field>
</record>
<record id="yuthon_resource_mgmt_config_action" model="ir.actions.act_window">
<field name="name">开票类型</field>
<field name="res_model">yuthon.resource.billing.type</field>
<field name="view_mode">tree</field>
</record>
</odoo>
+2 -2
View File
@@ -453,11 +453,11 @@
parent="holiday_set_menu_board"
action="hr_holidays.open_view_accrual_plans"
sequence="3"/>
<menuitem id="holiday_management_allocation_board"
<menuitem id="holiday_management_allocation_board"
name="假期分配"
parent="holiday_set_menu_board"
action="hr_holidays.hr_leave_allocation_action_approve_department"
sequence="3"/>
sequence="5"/>
<menuitem id="holiday_set_vacation_board"
name="公共假期"
parent="holiday_set_menu_board"