优化工单模块,增加企微模块

This commit is contained in:
mgw
2024-07-10 15:58:47 +08:00
parent e8512b23e4
commit 6b140fe6dd
134 changed files with 12830 additions and 2 deletions

View File

@@ -0,0 +1,84 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<data>
<record model="ir.ui.view" id="view_wechat_enterprise_app_form">
<field name="name">we.app.form</field>
<field name="model">we.app</field>
<field name="arch" type="xml">
<form string="应用配置">
<!--<header>-->
<!--<button string="同步当前应用菜单至微信" name="update_app_menu" type="object" class="oe_highlight"/>-->
<!--</header>-->
<sheet>
<group col="4" string="基础信息">
<field name="name"/>
<field name="enterprise_id" required="1"/>
<field name="agentid"/>
<field name="type"/>
</group>
<group col="4" string="配置信息">
<field name="code"/>
<field name="Token"/>
<field name="EncodingAESKey"/>
<field name="secret" required="1"/>
</group>
<group col="4" string="上报信息设置">
<field name="report_location_flag"/>
<field name="isreportuser" attrs="{'invisible': [('type','in',('2'))]}"/>
<field name="close"/>
<field name="isreportenter" attrs="{'invisible': [('type','in',('2'))]}"/>
</group>
<group col="4" string="更多">
<field name="redirect_domain"/>
<field name="description"/>
<field name="home_url" attrs="{'invisible': [('type','in',('1'))]}"/>
</group>
</sheet>
</form>
</field>
</record>
<!-- tree -->
<record id="view_wechat_enterprise_app_tree" model="ir.ui.view">
<field name="name">we.app.tree</field>
<field name="model">we.app</field>
<field name="arch" type="xml">
<tree string="应用配置">
<field name="agentid"/>
<field name="name"/>
<field name='type'/>
<field name="redirect_domain"/>
<field name="description"/>
</tree>
</field>
</record>
<!-- search -->
<record id="view_wechat_enterprise_app_search" model="ir.ui.view">
<field name="name">we.app.search</field>
<field name="model">we.app</field>
<field name="mode">primary</field>
<field name="arch" type="xml">
<search string="应用配置">
<field name="name" filter_domain="[('name','ilike',self)]" string="应用配置"/>
</search>
</field>
</record>
<!-- action -->
<record id="view_wechat_enterprise_app_action" model="ir.actions.act_window">
<field name="name">应用配置</field>
<field name="type">ir.actions.act_window</field>
<field name="res_model">we.app</field>
<field name="view_mode">tree,form</field>
<field name="binding_view_types">form</field>
<field name="view_id" ref="view_wechat_enterprise_app_tree"/>
</record>
</data>
</odoo>

View File

@@ -0,0 +1,23 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<!-- View -->
<record id="view_mail_message_form_dingtalk" model="ir.ui.view">
<field name="name">mail.message.form.dingtalk</field>
<field name="model">mail.message</field>
<field name="inherit_id" ref="mail.view_message_form"/>
<field name="arch" type="xml">
<notebook position="inside">
<page string="企业微信">
<group>
<field name="we_is_send"/>
<field name="we_error_msg"/>
</group>
<footer class="modal-footer">
<button type="object" name="send_message_to_we" string="发送到企业微信"/>
</footer>
</page>
</notebook>
</field>
</record>
</odoo>

View File

@@ -0,0 +1,34 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<menuitem
id="menu_wechat_enterprise"
name="企业微信" parent="base.menu_administration"
sequence="6"/>
<menuitem id="menu_wechat_enterprise_setup" name="设置" sequence="120" parent="menu_wechat_enterprise"/>
<menuitem action="view_wechat_enterprise_config_action" id="menu_wechat_enterprise_config_form" name="企业微信"
parent="menu_wechat_enterprise_setup" sequence="20"/>
<!-- menu -->
<menuitem action="view_wechat_enterprise_app_action" id="menu_wechat_enterprise_app_form" name="应用列表"
parent="menu_wechat_enterprise_setup" sequence="20"/>
<!-- menu -->
<menuitem action="view_wechat_enterprise_app_menu_action"
id="menu_wechat_enterprise_app_menu_form" name="应用菜单"
parent="menu_wechat_enterprise_setup" sequence="30"/>
<menuitem id="menu_wechat_enterprise_process" name="业务处理" sequence="100" parent="menu_wechat_enterprise"/>
<!-- menu -->
<menuitem action="view_wechat_enterprise_receive_message_process_action"
id="menu_wechat_enterprise_receive_message_process_form" name="接收消息处理"
parent="menu_wechat_enterprise_process" sequence="30"/>
<!-- menu -->
<menuitem action="view_wechat_enterprise_receive_message_action"
id="menu_wechat_enterprise_receive_message_form" name="接收消息"
parent="menu_wechat_enterprise_process" sequence="30"/>
<!-- menu -->
<menuitem action="view_wechat_enterprise_send_message_action"
id="menu_wechat_enterprise_send_message_form" name="发送消息"
parent="menu_wechat_enterprise_process" sequence="30"/>
</odoo>

View File

@@ -0,0 +1,20 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<data>
<record id="view_users_account_form" model="ir.ui.view">
<field name="name">res.users.account.form</field>
<field name="model">res.users</field>
<field name="inherit_id" ref="base.view_users_form"/>
<field name="arch" type="xml">
<page name="preferences" position="after">
<page name="account" string="企业微信">
<group>
<field name="we_employee_id"/>
</group>
</page>
</page>
</field>
</record>
</data>
</odoo>

View File

@@ -0,0 +1,149 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<data>
<record model="ir.ui.view" id="view_wechat_enterprise_app_form">
<field name="name">we.app.form</field>
<field name="model">we.app</field>
<field name="arch" type="xml">
<form string="应用配置">
<!--<header>-->
<!--<button string="同步当前应用菜单至微信" name="update_app_menu" type="object" class="oe_highlight"/>-->
<!--</header>-->
<sheet>
<group col="4" string="基础信息">
<field name="name"/>
<field name="enterprise_id" required="1"/>
<field name="agentid"/>
<field name="type"/>
</group>
<group col="4" string="配置信息">
<field name="code"/>
<field name="Token"/>
<field name="EncodingAESKey"/>
<field name="secret" required="1"/>
</group>
<group col="4" string="上报信息设置">
<field name="report_location_flag"/>
<field name="isreportuser" attrs="{'invisible': [('type','in',('2'))]}"/>
<field name="close"/>
<field name="isreportenter" attrs="{'invisible': [('type','in',('2'))]}"/>
</group>
<group col="4" string="更多">
<field name="redirect_domain"/>
<field name="description"/>
<field name="home_url" attrs="{'invisible': [('type','in',('1'))]}"/>
</group>
</sheet>
</form>
</field>
</record>
<!-- tree -->
<record id="view_wechat_enterprise_app_tree" model="ir.ui.view">
<field name="name">we.app.tree</field>
<field name="model">we.app</field>
<field name="arch" type="xml">
<tree string="应用配置">
<field name="agentid"/>
<field name="name"/>
<field name='type'/>
<field name="redirect_domain"/>
<field name="description"/>
</tree>
</field>
</record>
<!-- search -->
<record id="view_wechat_enterprise_app_search" model="ir.ui.view">
<field name="name">we.app.search</field>
<field name="model">we.app</field>
<field name="mode">primary</field>
<field name="arch" type="xml">
<search string="应用配置">
<field name="name" filter_domain="[('name','ilike',self)]" string="应用配置"/>
</search>
</field>
</record>
<!-- action -->
<record id="view_wechat_enterprise_app_action" model="ir.actions.act_window">
<field name="name">应用配置</field>
<field name="type">ir.actions.act_window</field>
<field name="res_model">we.app</field>
<field name="view_mode">tree,form</field>
<field name="binding_view_types">form</field>
<field name="view_id" ref="view_wechat_enterprise_app_tree"/>
</record>
<record model="ir.ui.view" id="view_wechat_enterprise_app_menu_form">
<field name="name">we.app.menu.form</field>
<field name="model">we.app.menu</field>
<field name="arch" type="xml">
<form string="应用菜单">
<sheet>
<group>
<group>
<field name="agentid"/>
<field name="type"/>
</group>
<group>
<field name="name"/>
<field name="partner_menu_id"
attrs="{'invisible': [('type','in',('sub_button'))]}"/>
</group>
</group>
<group>
<field name="key" attrs="{'invisible': [('type','in',('view','sub_button'))]}"/>
<field name="url"
attrs="{'invisible': [('type','in',('sub_button','click','scancode_push','scancode_waitmsg','pic_sysphoto','pic_photo_or_album','video'))]}"/>
</group>
</sheet>
</form>
</field>
</record>
<!-- tree -->
<record id="view_wechat_enterprise_app_menu_tree" model="ir.ui.view">
<field name="name">we.app.menu.tree</field>
<field name="model">we.app.menu</field>
<field name="arch" type="xml">
<tree string="应用菜单">
<field name="agentid"/>
<field name="name"/>
<field name="partner_menu_id"/>
<field name="type"/>
<field name="key"/>
<field name="url"/>
</tree>
</field>
</record>
<!-- search -->
<record id="view_wechat_enterprise_app_menu_search" model="ir.ui.view">
<field name="name">we.app.menu.search</field>
<field name="model">we.app.menu</field>
<field name="mode">primary</field>
<field name="arch" type="xml">
<search string="应用菜单">
<field name="name" filter_domain="[('name','ilike',self)]" string="菜单名称"/>
</search>
</field>
</record>
<!-- action -->
<record id="view_wechat_enterprise_app_menu_action" model="ir.actions.act_window">
<field name="name">应用菜单</field>
<field name="type">ir.actions.act_window</field>
<field name="res_model">we.app.menu</field>
<field name="view_mode">tree,form</field>
<field name="binding_view_types">form</field>
<field name="view_id" ref="view_wechat_enterprise_app_menu_tree"/>
</record>
</data>
</odoo>

View File

@@ -0,0 +1,48 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<data>
<record model="ir.ui.view" id="view_wechat_enterprise_config_form">
<field name="name">we.config.form</field>
<field name="model">we.config</field>
<field name="arch" type="xml">
<form string="企业微信">
<sheet>
<group>
<group>
<field name="name"/>
<field name="company_id" required="1" options="{'no_create_edit': True, 'no_create': True}"/>
<field name="corp_id"/>
<field name="corp_secret"/>
<field name="odoo_app_id"/>
</group>
</group>
</sheet>
</form>
</field>
</record>
<!-- tree -->
<record id="view_wechat_enterprise_config_tree" model="ir.ui.view">
<field name="name">we.config.tree</field>
<field name="model">we.config</field>
<field name="arch" type="xml">
<tree string="企业微信">
<field name="name"/>
<field name='corp_secret'/>
<field name="corp_id"/>
</tree>
</field>
</record>
<!-- action -->
<record id="view_wechat_enterprise_config_action" model="ir.actions.act_window">
<field name="name">企业微信</field>
<field name="type">ir.actions.act_window</field>
<field name="res_model">we.config</field>
<field name="view_mode">tree,form</field>
<field name="binding_view_types">form</field>
</record>
</data>
</odoo>

View File

@@ -0,0 +1,38 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<menuitem id="menu_wechat_enterprise" name="企业微信" sequence="20" parent="base.menu_administration"
web_icon="sg_wechat_enterprise,static/description/qyh.png">
<menuitem id="menu_wechat_enterprise_setup" name="设置" sequence="120">
<menuitem action="view_wechat_enterprise_config_action" id="menu_wechat_enterprise_config_form" name="企业微信"
parent="menu_wechat_enterprise_setup" sequence="20"/>
<menuitem action="view_wechat_enterprise_app_action" id="menu_wechat_enterprise_app_form" name="应用列表"
sequence="20"/>
<!-- menu -->
<menuitem action="view_wechat_enterprise_app_action" id="menu_wechat_enterprise_app_form" name="应用列表"
parent="menu_wechat_enterprise_setup" sequence="20"/>
<!-- menu -->
<menuitem action="view_wechat_enterprise_app_menu_action"
id="menu_wechat_enterprise_app_menu_form" name="应用菜单"
parent="menu_wechat_enterprise_setup" sequence="30"/>
</menuitem>
<menuitem id="menu_wechat_enterprise_contact" name="通讯录" sequence="110"/>
<menuitem id="menu_wechat_enterprise_process" name="业务处理" sequence="100">
<!-- menu -->
<menuitem action="view_wechat_enterprise_receive_message_process_action"
id="menu_wechat_enterprise_receive_message_process_form" name="接收消息处理"
parent="menu_wechat_enterprise_process" sequence="30"/>
<!-- menu -->
<menuitem action="view_wechat_enterprise_receive_message_action"
id="menu_wechat_enterprise_receive_message_form" name="接收消息"
parent="menu_wechat_enterprise_process" sequence="30"/>
<!-- menu -->
<menuitem action="view_wechat_enterprise_send_message_action"
id="menu_wechat_enterprise_send_message_form" name="发送消息"
parent="menu_wechat_enterprise_process" sequence="30"/>
</menuitem>
</menuitem>
</odoo>

View File

@@ -0,0 +1,70 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<data>
<record model="ir.ui.view" id="view_wechat_enterprise_receive_message_process_form">
<field name="name">we.receive.message.process.form</field>
<field name="model">we.receive.message.process</field>
<field name="arch" type="xml">
<form string="接收消息处理">
<sheet>
<group>
<group>
<field name="name"/>
<field name="message_key"/>
<field name="class_name"/>
</group>
<group>
<field name="message_type"/>
<field name="agentID"/>
<field name="method_name"/>
</group>
</group>
<group>
<field name="note"/>
</group>
</sheet>
</form>
</field>
</record>
<!-- tree -->
<record id="view_wechat_enterprise_receive_message_process_tree" model="ir.ui.view">
<field name="name">we.receive.message.process.tree</field>
<field name="model">we.receive.message.process</field>
<field name="arch" type="xml">
<tree string="接收消息处理">
<field name="name"/>
<field name="message_key"/>
<field name="class_name"/>
<field name="method_name"/>
<field name="message_type"/>
<field name="agentID"/>
</tree>
</field>
</record>
<!-- search -->
<record id="view_wechat_enterprise_receive_message_process_search" model="ir.ui.view">
<field name="name">we.receive.message.process.search</field>
<field name="model">we.receive.message.process</field>
<field name="mode">primary</field>
<field name="arch" type="xml">
<search string="接收消息处理">
<field name="message_key" filter_domain="[('message_key','ilike',self)]" string="关键字"/>
</search>
</field>
</record>
<!-- action -->
<record id="view_wechat_enterprise_receive_message_process_action" model="ir.actions.act_window">
<field name="name">接收消息处理</field>
<field name="type">ir.actions.act_window</field>
<field name="res_model">we.receive.message.process</field>
<field name="view_mode">tree,form</field>
<field name="binding_view_types">form</field>
<field name="view_id" ref="view_wechat_enterprise_receive_message_process_tree"/>
</record>
</data>
</odoo>

View File

@@ -0,0 +1,98 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<data>
<record model="ir.ui.view" id="view_wechat_enterprise_receive_message_form">
<field name="name">we.receive.message.form</field>
<field name="model">we.receive.message</field>
<field name="arch" type="xml">
<form string="接收消息">
<sheet>
<group string="消息基本信息">
<group>
<field name="ToUserName"/>
<field name="AgentID"/>
<field name="MsgId"/>
</group>
<group>
<field name="FromUserName"/>
<field name="state"/>
<field name="CreateTime"/>
</group>
</group>
<group>
<field name="MsgType"/>
</group>
<group string="消息内容">
<field name="MediaId" attrs="{'invisible': [('MsgType','in',('text','location','link'))]}"/>
<field name="Format" attrs="{'invisible': [('MsgType','in',('text','image','video','shortvideo','location','link'))]}"/>
<field name="ThumbMediaId" attrs="{'invisible': [('MsgType','in',('text','image','voice','location','link'))]}"/>
<field name="PicUrl" attrs="{'invisible': [('MsgType','in',('text','voice','video','shortvideo','location','link'))]}"/>
<field name="Content" attrs="{'invisible': [('MsgType','in',('image','voice','video','location','link','shortvideo'))]}"/>
</group>
<group>
<group>
<field name="Location_X" attrs="{'invisible': [('MsgType','in',('text','image','voice','video','shortvideo','link'))]}"/>
<field name="Scale" attrs="{'invisible': [('MsgType','in',('text','image','voice','video','shortvideo','link'))]}"/>
</group>
<group>
<field name="Location_Y" attrs="{'invisible': [('MsgType','in',('text','image','voice','video','shortvideo','link'))]}"/>
<field name="Label" attrs="{'invisible': [('MsgType','in',('text','image','voice','video','shortvideo','link'))]}"/>
</group>
</group>
<group>
<group>
<field name="Title" attrs="{'invisible': [('MsgType','in',('text','image','voice','video','shortvideo','location'))]}"/>
<field name="Description" attrs="{'invisible': [('MsgType','in',('text','image','voice','video','shortvideo','location'))]}"/>
</group>
<group>
<field name="Cover_PicUrl" attrs="{'invisible': [('MsgType','in',('text','image','voice','video','shortvideo','location'))]}"/>
</group>
</group>
</sheet>
</form>
</field>
</record>
<!-- tree -->
<record id="view_wechat_enterprise_receive_message_tree" model="ir.ui.view">
<field name="name">we.receive.message.tree</field>
<field name="model">we.receive.message</field>
<field name="arch" type="xml">
<tree string="接收消息">
<field name="ToUserName"/>
<field name="CreateTime"/>
<field name="FromUserName"/>
<field name="MsgId"/>
<field name="AgentID"/>
<field name="MsgType"/>
<field name="Content"/>
<field name="state"/>
</tree>
</field>
</record>
<!-- search -->
<record id="view_wechat_enterprise_receive_message_search" model="ir.ui.view">
<field name="name">we.receive.message.search</field>
<field name="model">we.receive.message</field>
<field name="mode">primary</field>
<field name="arch" type="xml">
<search string="接收消息">
<field name="Content" filter_domain="[('Content','ilike',self)]" string="消息内容"/>
</search>
</field>
</record>
<!-- action -->
<record id="view_wechat_enterprise_receive_message_action" model="ir.actions.act_window">
<field name="name">接收消息</field>
<field name="type">ir.actions.act_window</field>
<field name="res_model">we.receive.message</field>
<field name="view_mode">tree,form</field>
<field name="binding_view_types">form</field>
<field name="view_id" ref="view_wechat_enterprise_receive_message_tree"/>
</record>
</data>
</odoo>

View File

@@ -0,0 +1,105 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<data>
<record model="ir.ui.view" id="view_wechat_enterprise_send_message_form">
<field name="name">we.send.message.form</field>
<field name="model">we.send.message</field>
<field name="arch" type="xml">
<form string="发送消息">
<header>
<button string="发送本条消息" name="send_message" type="object" class="oe_highlight"/>
</header>
<sheet>
<group string="消息内容">
<group>
<field name="msgtype"/>
</group>
<group>
<field name="agentid"/>
</group>
</group>
<group>
<group>
<field name="content"
attrs="{'invisible': [('msgtype','in',('image','voice','video','file','news','mpnews'))]}"/>
</group>
<group>
<field name="media_id"
attrs="{'invisible': [('msgtype','in',('text','news','mpnews'))]}"/>
</group>
</group>
<group>
<field name="title"
attrs="{'invisible': [('msgtype','in',('image','voice','text','file'))]}"/>
<field name="description"
attrs="{'invisible': [('msgtype','in',('text','image','voice','file','mpnews'))]}"/>
</group>
<group>
<field name="url"
attrs="{'invisible': [('msgtype','in',('text','image','voice','file','mpnews','video'))]}"/>
<field name="picurl"
attrs="{'invisible': [('msgtype','in',('text','image','voice','file','mpnews','video'))]}"/>
</group>
<group>
<field name="thumb_media_id"
attrs="{'invisible': [('msgtype','in',('text','image','voice','file','news','video'))]}"/>
<field name="author"
attrs="{'invisible': [('msgtype','in',('text','image','voice','file','news','video'))]}"/>
<field name="content_source_url"
attrs="{'invisible': [('msgtype','in',('text','image','voice','file','news','video'))]}"/>
<field name="news_content"
attrs="{'invisible': [('msgtype','in',('text','image','voice','file','news','video'))]}"/>
<field name="digest"
attrs="{'invisible': [('msgtype','in',('text','image','voice','file','news','video'))]}"/>
<field name="show_cover_pic"
attrs="{'invisible': [('msgtype','in',('text','image','voice','file','news','video'))]}"/>
</group>
<group string="消息发送的范围(若不填,则默认发送全体员工)">
<field name="touser"/>
</group>
</sheet>
</form>
</field>
</record>
<!-- tree -->
<record id="view_wechat_enterprise_send_message_tree" model="ir.ui.view">
<field name="name">we.send.message.tree</field>
<field name="model">we.send.message</field>
<field name="arch" type="xml">
<tree string="发送消息">
<field name="touser"/>
<field name="msgtype"/>
<field name="agentid"/>
<field name="content"/>
</tree>
</field>
</record>
<!-- search -->
<record id="view_wechat_enterprise_send_message_search" model="ir.ui.view">
<field name="name">we.send.message.search</field>
<field name="model">we.send.message</field>
<field name="mode">primary</field>
<field name="arch" type="xml">
<search string="发送消息">
<field name="content" filter_domain="[('content','ilike',self)]" string="文字消息内容"/>
<field name="title" filter_domain="[('title','ilike',self)]" string="图文消息标题"/>
<field name="description" filter_domain="[('description','ilike',self)]" string="图文消息描述"/>
</search>
</field>
</record>
<!-- action -->
<record id="view_wechat_enterprise_send_message_action" model="ir.actions.act_window">
<field name="name">发送消息</field>
<field name="type">ir.actions.act_window</field>
<field name="res_model">we.send.message</field>
<field name="view_mode">tree,form</field>
<field name="binding_view_types">form</field>
<field name="view_id" ref="view_wechat_enterprise_send_message_tree"/>
</record>
</data>
</odoo>

View File

@@ -0,0 +1,45 @@
<?xml version="1.0" encoding="utf-8" ?>
<odoo>
<data>
<template id="sg_wechat_enterprise.layout" name="Wechat_Enterprise_Layout">
&lt;!DOCTYPE html&gt;
<html style="height:100%">
<head>
<meta name="viewport"
content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no"/>
<t t-raw="head or ''"/>
</head>
<body>
<t t-raw="0"/>
</body>
</html>
</template>
<template id="sg_wechat_enterprise.Transfer" name="Wechat_Enterprise_Transfer">
<t t-call="sg_wechat_enterprise.layout">
<t t-set="head">
</t>
<p id="url" style="display:none">
<t t-raw="url" />
</p>
<div class="load-box">
<svg class="load-icon" viewBox="0 0 1024 1024" data-icon="loading" width="1em" height="1em" fill="currentColor" aria-hidden="true" focusable="false"><path d="M988 548c-19.9 0-36-16.1-36-36 0-59.4-11.6-117-34.6-171.3a440.45 440.45 0 0 0-94.3-139.9 437.71 437.71 0 0 0-139.9-94.3C629 83.6 571.4 72 512 72c-19.9 0-36-16.1-36-36s16.1-36 36-36c69.1 0 136.2 13.5 199.3 40.3C772.3 66 827 103 874 150c47 47 83.9 101.8 109.7 162.7 26.7 63.1 40.2 130.2 40.2 199.3.1 19.9-16 36-35.9 36z"></path></svg>
<span class="load-txt">页面正在加载中,请耐心等候。</span>
</div>
<link rel="stylesheet" href="/sg_wechat_enterprise/static/css/loading.css"/>
<script src="/sg_wechat_enterprise/static/js/url_transfers.js"></script>
</t>
</template>
<template id="sg_wechat_enterprise.wechat_warning" name="Wechat_Enterprise_arning">
<t t-call="sg_wechat_enterprise.layout">
<t t-set="head">
</t>
<div class="mr_center">
<p><h3><t t-esc="title"/></h3></p>
<p><t t-esc="content" /></p>
</div>
</t>
</template>
</data>
</odoo>