@@ -191,14 +191,6 @@
|
||||
</field>
|
||||
</group>
|
||||
</page>
|
||||
<page string="关联流程">
|
||||
<group>
|
||||
<group>
|
||||
<field name="relevancy_type"/>
|
||||
</group>
|
||||
<group/>
|
||||
</group>
|
||||
</page>
|
||||
<page name="meeting_html" string="会议说明">
|
||||
<button name="button_meeting_data" string="座位排列" type="object" class="oe_highlight"/>
|
||||
<field name="meeting_data" widget="tinymce"/>
|
||||
|
||||
@@ -1,5 +1,24 @@
|
||||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<odoo>
|
||||
<record id="view_yuthon_holiday_allocation_tree" model="ir.ui.view">
|
||||
<field name="name">yuthon.holiday.allocation.tree</field>
|
||||
<field name="model">hr.leave.allocation</field>
|
||||
<field name="inherit_id" ref="hr_holidays.hr_leave_allocation_view_tree"/>
|
||||
<field name="arch" type="xml">
|
||||
<xpath expr="//tree/field[@name='duration_display']" position="attributes">
|
||||
<attribute name="string">假期余额</attribute>
|
||||
</xpath>
|
||||
<xpath expr="//tree/field[@name='holiday_status_id']" position="attributes">
|
||||
<attribute name="optional">hide</attribute>
|
||||
</xpath>
|
||||
<xpath expr="//tree/field[@name='date_from']" position="attributes">
|
||||
<attribute name="string">开始时间</attribute>
|
||||
</xpath>
|
||||
<xpath expr="//tree/field[@name='date_to']" position="attributes">
|
||||
<attribute name="string">结束时间</attribute>
|
||||
</xpath>
|
||||
</field>
|
||||
</record>
|
||||
<record id="view_yuthon_holiday_allocation_form" model="ir.ui.view">
|
||||
<field name="name">yuthon.holiday.allocation.form</field>
|
||||
<field name="model">hr.leave.allocation</field>
|
||||
|
||||
@@ -24,7 +24,7 @@ class CardApprovalsLine(models.Model):
|
||||
_description = "补卡人明细"
|
||||
|
||||
card_id = fields.Many2one('card.approval', string="补卡审批")
|
||||
overtime_people = fields.Char( string="补卡人")
|
||||
overtime_people = fields.Many2one('hr.employee',string="补卡人")
|
||||
replacement_time = fields.Datetime(string="补卡时间")
|
||||
actual_punch = fields.Datetime(string="实际打卡")
|
||||
reason = fields.Char(string="补卡原因")
|
||||
|
||||
@@ -17,6 +17,7 @@
|
||||
'views/issue_library_views.xml',
|
||||
'views/issue_type_views.xml',
|
||||
'views/issue_approval_views.xml',
|
||||
'views/inherit_room_booking.xml',
|
||||
# 'views/issue_approval_party_views.xml',
|
||||
# 'views/issue_approval_class_views.xml',
|
||||
# 'views/issue_approval_boss_views.xml',
|
||||
|
||||
@@ -5,7 +5,7 @@ from . import issue_type
|
||||
# from . import inherit_room_booking
|
||||
from . import issue_approval_decision
|
||||
from . import issue_approval_decision_type
|
||||
|
||||
from . import inherit_room_booking
|
||||
from . import issue_approval
|
||||
|
||||
# from . import issue_approval_party
|
||||
|
||||
@@ -0,0 +1,13 @@
|
||||
import qrcode
|
||||
import base64
|
||||
from io import BytesIO
|
||||
from odoo import api, fields, models, _
|
||||
from odoo.exceptions import ValidationError, UserError
|
||||
import os
|
||||
from datetime import timedelta
|
||||
|
||||
|
||||
class InheritRoomBooking(models.Model):
|
||||
_inherit = 'room.booking'
|
||||
|
||||
room_booking_library_ids = fields.One2many('issue.library','room_booking_id')
|
||||
@@ -10,20 +10,24 @@ class IssueLibrary(models.Model):
|
||||
_rec_name = 'name'
|
||||
|
||||
name = fields.Char(string='议题事项')
|
||||
code = fields.Char(string='编号', required=True, copy=False, default=lambda self: self.env['ir.sequence'].next_by_code('issue_library_code'))
|
||||
statu = fields.Selection([('draft', '待提交'), ('approval', '审批中'), ('on_meet', '已上会'), ('cancel', '已取消')], default='draft', string="议题状态")
|
||||
code = fields.Char(string='编号', required=True, copy=False,
|
||||
default=lambda self: self.env['ir.sequence'].next_by_code('issue_library_code'))
|
||||
state = fields.Selection([('draft', '待提交'), ('approval', '审批中'), ('on_meet', '已上会'), ('cancel', '已取消')],
|
||||
default='draft', string="议题状态")
|
||||
is_party = fields.Boolean(string="党之委会", default=False, compute='_compute_issue_library_line_ids')
|
||||
is_class = fields.Boolean(string="班子会", default=False, compute='_compute_issue_library_line_ids')
|
||||
is_boss = fields.Boolean(string="董事会", default=False, compute='_compute_issue_library_line_ids')
|
||||
is_note = fields.Boolean(string="上级单位", default=False, compute='_compute_issue_library_line_ids')
|
||||
creart_datetime = fields.Datetime(string="创建时间", default=fields.Datetime.now)
|
||||
creart_datetime = fields.Date(string="创建日期", default=fields.Datetime.now)
|
||||
notice_documents_ids = fields.Many2many('ir.attachment', string='议题附件')
|
||||
issue_type_id = fields.Many2one('issue.type', string="议题类型")
|
||||
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='流程记录')
|
||||
issue_library_approval_line_ids = fields.One2many('issue.library.approval.line', 'issue_approval_id',
|
||||
string='流程记录')
|
||||
room_booking_id = fields.Many2one('room.booking', string="会议室")
|
||||
|
||||
# 审批中
|
||||
# ☑
|
||||
@@ -41,46 +45,60 @@ class IssueLibrary(models.Model):
|
||||
# self.json_display = False
|
||||
|
||||
def issue_pull(self):
|
||||
for record in self:
|
||||
if record.state == 'approval':
|
||||
raise UserError("当前议题已提交审批,不可重复提交")
|
||||
form_id = self.env.ref("yuthon_issue.issue_library_approval_form").id
|
||||
self.write({"state": "approval"})
|
||||
return {
|
||||
"type": "ir.actions.act_window",
|
||||
"name": "提交",
|
||||
"res_model": "issue.approval",
|
||||
"target": 'new',
|
||||
"views": [[form_id, "form"]],
|
||||
}
|
||||
"context": {
|
||||
'default_issue_library_ids': [(6, 0, self.ids)],
|
||||
'default_approval_decision_ids': [(6, 0, self.issue_library_line_ids.ids)],
|
||||
}}
|
||||
|
||||
# @api.Onchange('state'):
|
||||
# def _onchange_state(self):
|
||||
# if self.state == 'approval':
|
||||
|
||||
def issue_cancel(self):
|
||||
self.write({"statu": "cancel"})
|
||||
self.write({"state": "cancel"})
|
||||
|
||||
def all_issue_pull(self):
|
||||
issue_active_ids = self.env["issue.library"].browse(self._context.get('active_ids', self._context.get('active_id')))
|
||||
issue_library_data = [(0, 0, {'name': issue.name}) for issue in issue_active_ids]
|
||||
form_id = self.env.ref("yuthon_issue.issue_library_approval_form").id
|
||||
self.write({"statu": "approval"})
|
||||
self.write({"state": "approval"})
|
||||
return {
|
||||
"type": "ir.actions.act_window",
|
||||
"name": "提交",
|
||||
"name": "批量提交",
|
||||
"res_model": "issue.approval",
|
||||
"target": 'new',
|
||||
"views": [[form_id, "form"]],
|
||||
"context": {
|
||||
'default_issue_library_ids': [(6, 0, issue_active_ids.ids)],
|
||||
'default_issue_approval_decision_ids': [(6, 0, issue_active_ids.issue_library_line_ids.ids)],
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
def all_meeting_issue(self):
|
||||
for meet in self:
|
||||
if meet.statu == 'done':
|
||||
if meet.state == 'on_meet':
|
||||
raise UserError('不可重复上会')
|
||||
meet.write({"statu": "done"})
|
||||
issue_active_ids = self.env["issue.library"].browse(self._context.get('active_ids', self._context.get('active_id')))
|
||||
issue_library_data = [(0, 0, {'name': issue.name}) for issue in issue_active_ids]
|
||||
meet.write({"state": "on_meet"})
|
||||
issue_active_ids = self.env["issue.library"].browse(
|
||||
self._context.get('active_ids', self._context.get('active_id')))
|
||||
form_id = self.env.ref("room.room_booking_view_form").id
|
||||
return {
|
||||
"type": "ir.actions.act_window",
|
||||
"name": "会议安排",
|
||||
"res_model": "room.booking",
|
||||
"target": 'new',
|
||||
"views": [[form_id, "form"]],
|
||||
"context": {
|
||||
'default_name': '',
|
||||
'default_room_booking_library_ids': [(6, 0, issue_active_ids.ids)],
|
||||
}
|
||||
}
|
||||
|
||||
@api.depends('issue_library_line_ids')
|
||||
@@ -91,6 +109,12 @@ class IssueLibrary(models.Model):
|
||||
line.is_boss = bool(line.issue_library_line_ids.filtered('board_meet'))
|
||||
line.is_note = bool(line.issue_library_line_ids.filtered('district_bureau'))
|
||||
|
||||
def unlink(self):
|
||||
for i in self:
|
||||
if i.state == 'on_meet':
|
||||
raise UserError('议题已上会,不能删除')
|
||||
return super().unlink()
|
||||
|
||||
|
||||
class IssueLibraryLine(models.Model):
|
||||
_name = "issue.library.line"
|
||||
@@ -101,7 +125,7 @@ class IssueLibraryLine(models.Model):
|
||||
council = fields.Selection(related='issue_approval_decision_id.council', string='党总委员会')
|
||||
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='区政府、区财政局')
|
||||
district_bureau = fields.Selection(related='issue_approval_decision_id.district_bureau', string='上级单位')
|
||||
|
||||
|
||||
class IssueLibraryApprovalLine(models.Model):
|
||||
@@ -122,8 +146,3 @@ class IssueLibraryApprovalLine(models.Model):
|
||||
"name": self.workflow_record_id.name,
|
||||
"view_mode": "form",
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -0,0 +1,24 @@
|
||||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<odoo>
|
||||
<record id="view_room_booking_form" model="ir.ui.view">
|
||||
<field name="name">room.booking.form</field>
|
||||
<field name="model">room.booking</field>
|
||||
<field name="inherit_id" ref="room.room_booking_view_form"/>
|
||||
<field name="arch" type="xml">
|
||||
<xpath expr="//page[@name='sign']" position="after">
|
||||
<page string="关联议题">
|
||||
<field name="room_booking_library_ids">
|
||||
<tree>
|
||||
<field name="room_booking_id" column_invisible="1"/>
|
||||
<field name="name"/>
|
||||
<field name="is_party"/>
|
||||
<field name="is_class"/>
|
||||
<field name="is_boss"/>
|
||||
<field name="is_note"/>
|
||||
</tree>
|
||||
</field>
|
||||
</page>
|
||||
</xpath>
|
||||
</field>
|
||||
</record>
|
||||
</odoo>
|
||||
@@ -8,7 +8,7 @@
|
||||
<field name="sequence"/>
|
||||
<field name="decision_type_id"/>
|
||||
<!-- <field name="decision_id"/>-->
|
||||
<field name="specifics"/>
|
||||
<field name="specifics" required="1"/>
|
||||
<field name="council"/>
|
||||
<field name="team_meet"/>
|
||||
<field name="board_meet"/>
|
||||
@@ -42,7 +42,7 @@
|
||||
<field name="council"/>
|
||||
</group>
|
||||
<group>
|
||||
<field name="specifics"/>
|
||||
<field name="specifics" required="1"/>
|
||||
<field name="team_meet"/>
|
||||
</group>
|
||||
<group>
|
||||
|
||||
@@ -5,9 +5,9 @@
|
||||
<field name="model">issue.library</field>
|
||||
<field name="arch" type="xml">
|
||||
<tree string="议题库">
|
||||
<!-- decoration-info="statu == 'will'"-->
|
||||
<!-- decoration-success="statu == 'done'"-->
|
||||
<!-- decoration-muted="statu == 'cancel'">-->
|
||||
<!-- decoration-info="state == 'will'"-->
|
||||
<!-- decoration-success="state == 'done'"-->
|
||||
<!-- decoration-muted="state == 'cancel'">-->
|
||||
<field name="name"/>
|
||||
<field name="code"/>
|
||||
<field name="creart_datetime"/>
|
||||
@@ -15,9 +15,10 @@
|
||||
<field name="is_class"/>
|
||||
<field name="is_boss"/>
|
||||
<field name="is_note"/>
|
||||
<field name="statu"/>
|
||||
<field name="state"/>
|
||||
<button name="issue_pull" string="提交" type="object" class="oe_highlight"/>
|
||||
<button name="issue_cancel" string="取消" type="object" class="oe_highlight"/>
|
||||
<button name="unlink" string="删除" type="object" class="oe_highlight"/>
|
||||
<!-- <field name="json_display" widget="json_template"/>-->
|
||||
</tree>
|
||||
</field>
|
||||
@@ -29,7 +30,7 @@
|
||||
<field name="arch" type="xml">
|
||||
<form string="议题库">
|
||||
<header>
|
||||
<field name="statu" widget="statusbar"/>
|
||||
<field name="state" widget="statesbar"/>
|
||||
</header>
|
||||
<sheet>
|
||||
<div class="oe_title">
|
||||
@@ -100,10 +101,10 @@
|
||||
<field name="model">issue.library</field>
|
||||
<field name="arch" type="xml">
|
||||
<search string="议题">
|
||||
<filter string="待上会" name="statu" domain="[('statu', '=', 'will')]"/>
|
||||
<filter string="已上会" name="statu" domain="[('statu', '=', 'on_meet')]"/>
|
||||
<filter string="待上会" name="state" domain="[('state', '=', 'will')]"/>
|
||||
<filter string="已上会" name="state" domain="[('state', '=', 'on_meet')]"/>
|
||||
<group expand="0">
|
||||
<filter name="group_manager" string="会议状态" domain="[]" context="{'group_by': 'statu'}"/>
|
||||
<filter name="group_manager" string="会议状态" domain="[]" context="{'group_by': 'state'}"/>
|
||||
</group>
|
||||
</search>
|
||||
</field>
|
||||
@@ -122,15 +123,16 @@
|
||||
<field name="name">issue.library.tree</field>
|
||||
<field name="model">issue.library</field>
|
||||
<field name="arch" type="xml">
|
||||
<tree string="议题库"
|
||||
create="false" edit="false" delete="false">
|
||||
<tree string="议题库">
|
||||
<field name="name"/>
|
||||
<field name="code"/>
|
||||
<field name="creart_datetime"/>
|
||||
<field name="is_party"/>
|
||||
<field name="is_class"/>
|
||||
<field name="is_note"/>
|
||||
<field name="creart_datetime"/>
|
||||
<field name="statu"/>
|
||||
<field name="is_boss"/>
|
||||
<field name="state"/>
|
||||
<button name="issue_pull" string="提交" type="object" class="oe_highlight"/>
|
||||
<button name="issue_cancel" string="取消" type="object" class="oe_highlight"/>
|
||||
</tree>
|
||||
</field>
|
||||
</record>
|
||||
@@ -142,7 +144,7 @@
|
||||
<form string="议题库">
|
||||
<header>
|
||||
<button name="issue_cancel" string="取消" type="object" class="oe_highlight"/>
|
||||
<field name="statu" widget="statusbar"/>
|
||||
<field name="state" widget="statesbar"/>
|
||||
</header>
|
||||
<sheet>
|
||||
<div class="oe_title">
|
||||
@@ -160,7 +162,6 @@
|
||||
</group>
|
||||
<group>
|
||||
<field name="is_boss"/>
|
||||
<field name="is_note"/>
|
||||
<field name="notice_documents_ids">
|
||||
<tree>
|
||||
<field name="name"/>
|
||||
@@ -193,7 +194,7 @@
|
||||
<field name="name">待上会</field>
|
||||
<field name="res_model">issue.library</field>
|
||||
<field name="view_mode">tree,form</field>
|
||||
<field name="domain">[('statu','=','will')]</field>
|
||||
<field name="domain">[('state','=','will')]</field>
|
||||
<field name="view_ids" eval="[(5, 0, 0),
|
||||
(0, 0, {'view_mode': 'tree', 'view_id': ref('yuthon_issue.view_issue_library_tree2')}),
|
||||
(0, 0, {'view_mode': 'form', 'view_id': ref('yuthon_issue.view_issue_library_form2')})]"/>
|
||||
@@ -204,21 +205,21 @@
|
||||
<field name="name">审批中</field>
|
||||
<field name="res_model">issue.library</field>
|
||||
<field name="view_mode">tree,form</field>
|
||||
<field name="domain">[('statu','=','approval')]</field>
|
||||
<field name="domain">[('state','=','approval')]</field>
|
||||
</record>
|
||||
|
||||
<record id="issue_library_action_done" model="ir.actions.act_window">
|
||||
<field name="name">已上会</field>
|
||||
<field name="res_model">issue.library</field>
|
||||
<field name="view_mode">tree,form</field>
|
||||
<field name="domain">[('statu','=','on_meet')]</field>
|
||||
<field name="domain">[('state','=','on_meet')]</field>
|
||||
</record>
|
||||
|
||||
<record id="issue_library_action_cancel" model="ir.actions.act_window">
|
||||
<field name="name">已取消</field>
|
||||
<field name="res_model">issue.library</field>
|
||||
<field name="view_mode">tree,form</field>
|
||||
<field name="domain">[('statu','=','cancel')]</field>
|
||||
<field name="domain">[('state','=','cancel')]</field>
|
||||
<!-- <field name="view_ids" eval="[(5, 0, 0),-->
|
||||
<!-- (0, 0, {'view_mode': 'tree', 'view_id': ref('yuthon_issue.view_issue_library_tree2')}),-->
|
||||
<!-- (0, 0, {'view_mode': 'form', 'view_id': ref('yuthon_issue.view_issue_library_form2')})]"/>-->
|
||||
@@ -231,4 +232,42 @@
|
||||
<field name="state">code</field>
|
||||
<field name="code">action = model.all_meeting_issue()</field>
|
||||
</record>
|
||||
|
||||
<record id="all_issue_pull" model="ir.actions.server">
|
||||
<field name="name">批量提交</field>
|
||||
<field name="model_id" ref="yuthon_issue.model_issue_library"/>
|
||||
<field name="binding_model_id" ref="yuthon_issue.model_issue_library"/>
|
||||
<field name="state">code</field>
|
||||
<field name="code">action = model.all_issue_pull()</field>
|
||||
</record>
|
||||
|
||||
<record id="issue_library_action_will2" model="ir.actions.act_window">
|
||||
<field name="name">审批中</field>
|
||||
<field name="res_model">issue.library</field>
|
||||
<field name="view_mode">tree,form</field>
|
||||
<field name="domain">[('state','=','approval')]</field>
|
||||
<field name="view_ids" eval="[(5, 0, 0),
|
||||
(0, 0, {'view_mode': 'tree', 'view_id': ref('yuthon_issue.view_issue_library_tree2')}),
|
||||
(0, 0, {'view_mode': 'form', 'view_id': ref('yuthon_issue.view_issue_library_form2')})]"/>
|
||||
</record>
|
||||
|
||||
<record id="issue_library_action_done2" model="ir.actions.act_window">
|
||||
<field name="name">已上会</field>
|
||||
<field name="res_model">issue.library</field>
|
||||
<field name="view_mode">tree,form</field>
|
||||
<field name="domain">[('state','=','on_meet')]</field>
|
||||
<field name="view_ids" eval="[(5, 0, 0),
|
||||
(0, 0, {'view_mode': 'tree', 'view_id': ref('yuthon_issue.view_issue_library_tree2')}),
|
||||
(0, 0, {'view_mode': 'form', 'view_id': ref('yuthon_issue.view_issue_library_form2')})]"/>
|
||||
</record>
|
||||
|
||||
<record id="issue_library_action_cancel2" model="ir.actions.act_window">
|
||||
<field name="name">已取消</field>
|
||||
<field name="res_model">issue.library</field>
|
||||
<field name="view_mode">tree,form</field>
|
||||
<field name="domain">[('state','=','cancel')]</field>
|
||||
<field name="view_ids" eval="[(5, 0, 0),
|
||||
(0, 0, {'view_mode': 'tree', 'view_id': ref('yuthon_issue.view_issue_library_tree2')}),
|
||||
(0, 0, {'view_mode': 'form', 'view_id': ref('yuthon_issue.view_issue_library_form2')})]"/>
|
||||
</record>
|
||||
</odoo>
|
||||
@@ -41,6 +41,24 @@
|
||||
name="子公司议题库"
|
||||
sequence="8"/>
|
||||
|
||||
<menuitem id="tianhe_other_issue_library_will"
|
||||
parent="tianhe_other_issue_library_menu"
|
||||
name="审批中"
|
||||
action="issue_library_action_will2"
|
||||
sequence="2"/>
|
||||
|
||||
<menuitem id="tianhe_other_issue_library_done"
|
||||
parent="tianhe_other_issue_library_menu"
|
||||
name="已上会"
|
||||
action="issue_library_action_done2"
|
||||
sequence="3"/>
|
||||
|
||||
<menuitem id="tianhe_other_issue_library_cancel"
|
||||
parent="tianhe_other_issue_library_menu"
|
||||
name="已取消"
|
||||
action="issue_library_action_cancel2"
|
||||
sequence="5"/>
|
||||
|
||||
<menuitem id="tianhe_issue_library_all2"
|
||||
parent="tianhe_other_issue_library_menu"
|
||||
name="全部"
|
||||
|
||||
@@ -1,14 +1,14 @@
|
||||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<odoo>
|
||||
<record id="room_booking_form_inherit" model="ir.ui.view">
|
||||
<field name="name">room.booking.form.inherit</field>
|
||||
<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='relevancy_type']" position="after">
|
||||
<field name="yuthon_official_id" invisible="relevancy_type != 'yuthon_official'"/>
|
||||
<field name="incoming_normal_id" invisible="relevancy_type != 'yuthon_official_incoming_normal'"/>
|
||||
</xpath>
|
||||
</field>
|
||||
</record>
|
||||
<!-- <record id="room_booking_form_inherit" model="ir.ui.view">-->
|
||||
<!-- <field name="name">room.booking.form.inherit</field>-->
|
||||
<!-- <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='relevancy_type']" position="after">-->
|
||||
<!-- <field name="yuthon_official_id" invisible="relevancy_type != 'yuthon_official'"/>-->
|
||||
<!-- <field name="incoming_normal_id" invisible="relevancy_type != 'yuthon_official_incoming_normal'"/>-->
|
||||
<!-- </xpath>-->
|
||||
<!-- </field>-->
|
||||
<!-- </record>-->
|
||||
</odoo>
|
||||
Reference in New Issue
Block a user