[IMP] Improve ospp_base and ospp_slide modules
							parent
							
								
									040a9d0617
								
							
						
					
					
						commit
						35d436b0ff
					
				|  | @ -11,6 +11,7 @@ | |||
| 
 | ||||
|     'author': "Zhiguo Yuan", | ||||
|     'website': "https://www.newbizpaas.cn", | ||||
|     'license': 'LGPL-3', | ||||
| 
 | ||||
|     # Categories can be used to filter modules in modules listing | ||||
|     # Check https://github.com/odoo/odoo/blob/16.0/odoo/addons/base/data/ir_module_category_data.xml | ||||
|  | @ -23,7 +24,9 @@ | |||
| 
 | ||||
|     # always loaded | ||||
|     'data': [ | ||||
|         # 'security/ir.model.access.csv', | ||||
|         'security/security_groups.xml', | ||||
|         'security/ir.model.access.csv', | ||||
|         'data/ir_sequence_data.xml', | ||||
|         'views/views.xml', | ||||
|         'views/templates.xml', | ||||
|     ], | ||||
|  |  | |||
|  | @ -0,0 +1,20 @@ | |||
| <?xml version="1.0" encoding="utf-8"?> | ||||
| <odoo noupdate="1"> | ||||
| 
 | ||||
|     <record id="seq_ospp_instance" model="ir.sequence"> | ||||
|         <field name="name">OSPP Instance</field> | ||||
|         <field name="code">ospp.instance</field> | ||||
|         <field name="prefix"></field> | ||||
|         <field name="padding">5</field> | ||||
|         <field name="company_id" eval="False"/> | ||||
|     </record> | ||||
| 
 | ||||
|     <record id="seq_res_partner" model="ir.sequence"> | ||||
|         <field name="name">Res Partner</field> | ||||
|         <field name="code">res.partner</field> | ||||
|         <field name="prefix"></field> | ||||
|         <field name="padding">8</field> | ||||
|         <field name="company_id" eval="False"/> | ||||
|     </record> | ||||
| 
 | ||||
| </odoo> | ||||
|  | @ -1,22 +1,70 @@ | |||
| # -*- coding: utf-8 -*- | ||||
| 
 | ||||
| from odoo import models, fields, api | ||||
| import uuid | ||||
| from odoo import models, fields, api, _ | ||||
| 
 | ||||
| 
 | ||||
| class ResPartner(models.Model): | ||||
|     _inherit = 'res.partner' | ||||
| 
 | ||||
|     uuid = fields.Char( | ||||
|         'UUID', required=True, copy=False, readonly=True, default=lambda self: uuid.uuid4(), tracking=True) | ||||
|     code = fields.Char('Code', required=True, copy=False, readonly=True, default=lambda self: _('New'), tracking=True) | ||||
| 
 | ||||
|     def name_get(self): | ||||
|         # Prefetch the fields used by the `name_get`, so `browse` doesn't fetch other fields | ||||
|         self.browse(self.ids).read(['name', 'code']) | ||||
|         return [(partner.id, '%s%s' % (partner.code and '[%s] ' % partner.code or '', partner.name)) | ||||
|                 for partner in self] | ||||
| 
 | ||||
|     @api.model_create_multi | ||||
|     def create(self, vals_list): | ||||
|         for vals in vals_list: | ||||
|             if vals.get('code', _("New")) == _("New"): | ||||
|                 seq_date = None | ||||
|                 vals['code'] = self.env['ir.sequence'].next_by_code('res.partner', sequence_date=seq_date) or _("New") | ||||
| 
 | ||||
|         return super().create(vals_list) | ||||
| 
 | ||||
| 
 | ||||
| class OSPPInstance(models.Model): | ||||
|     _name = 'ospp.instance' | ||||
|     _inherit = ['mail.thread', 'mail.activity.mixin'] | ||||
|     _description = 'OSPP Instance' | ||||
| 
 | ||||
|     name = fields.Char("Name") | ||||
|     code = fields.Char("Code") | ||||
|     type = fields.Selection([('saas', 'SAAS'), ('paas', 'PAAS')], required=True, string="Type") | ||||
|     stack = fields.Selection([('docker', 'Docker'), ('k8s', 'K8S'), ('odoo', 'ODOO')], required=True, string="Stack") | ||||
|     management_api = fields.Char('Management Api', required=True) | ||||
|     management_key = fields.Char('Management Key') | ||||
|     management_secret = fields.Char('Management Secret') | ||||
|     service_base_host = fields.Char('Service Base Host') | ||||
|     sequence = fields.Integer('Sequence', default=10) | ||||
|     name = fields.Char("Name", tracking=True) | ||||
|     uuid = fields.Char( | ||||
|         'UUID', required=True, copy=False, readonly=True, default=lambda self: uuid.uuid4(), tracking=True) | ||||
|     code = fields.Char('Code', required=True, copy=False, readonly=True, default=lambda self: _('New'), tracking=True) | ||||
|     type = fields.Selection([('saas', 'SAAS'), ('paas', 'PAAS')], required=True, string="Type", tracking=True) | ||||
|     stack = fields.Selection( | ||||
|         [('docker', 'Docker'), ('k8s', 'K8S'), ('odoo', 'ODOO'), ('other', 'Other')], required=True, string="Stack", | ||||
|         tracking=True) | ||||
|     management_api = fields.Char('Management Api', required=True, tracking=True) | ||||
|     management_key = fields.Char('Management Key', tracking=True) | ||||
|     management_secret = fields.Char('Management Secret', tracking=True) | ||||
|     service_base_host = fields.Char('Service Base Host', tracking=True) | ||||
|     service_scheme = fields.Selection( | ||||
|         [('http', 'HTTP'), ('https', 'HTTPS'), ('ws', 'WS'), ('wss', 'WSS')], | ||||
|         required=True, string="Service Scheme") | ||||
|     dockerfile = fields.Text("Dockerfile") | ||||
|     active = fields.Boolean('Active', default=True) | ||||
|         required=True, string="Service Scheme", tracking=True) | ||||
|     dockerfile = fields.Text("Dockerfile", tracking=True) | ||||
|     active = fields.Boolean('Active', default=True, tracking=True) | ||||
| 
 | ||||
|     def name_get(self): | ||||
|         # Prefetch the fields used by the `name_get`, so `browse` doesn't fetch other fields | ||||
|         self.browse(self.ids).read(['name', 'code']) | ||||
|         return [(instance.id, '%s%s' % (instance.code and '[%s] ' % instance.code or '', instance.name)) | ||||
|                 for instance in self] | ||||
| 
 | ||||
|     @api.model_create_multi | ||||
|     def create(self, vals_list): | ||||
|         for vals in vals_list: | ||||
|             if 'company_id' in vals: | ||||
|                 self = self.with_company(vals['company_id']) | ||||
|             if vals.get('code', _("New")) == _("New"): | ||||
|                 seq_date = None | ||||
|                 vals['code'] = self.env['ir.sequence'].next_by_code( | ||||
|                     'ospp.instance', sequence_date=seq_date) or _("New") | ||||
| 
 | ||||
|         return super().create(vals_list) | ||||
|  |  | |||
|  | @ -1,2 +1,5 @@ | |||
| id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink | ||||
| access_ospp_base_ospp_base,ospp_base.ospp_base,model_ospp_base_ospp_base,base.group_user,1,1,1,1 | ||||
| access_ospp_instance_group_model_ospp_instance_read,ospp_instance_group_model_ospp_instance_read,ospp_base.model_ospp_instance,group_model_ospp_instance_read,1,0,0,0 | ||||
| access_ospp_instance_group_model_ospp_instance_write,ospp_instance_group_model_ospp_instance_write,ospp_base.model_ospp_instance,group_model_ospp_instance_write,1,1,0,0 | ||||
| access_ospp_instance_group_model_ospp_instance_create,ospp_instance_group_model_ospp_instance_create,ospp_base.model_ospp_instance,group_model_ospp_instance_create,1,0,1,0 | ||||
| access_ospp_instance_group_model_ospp_instance_delete,ospp_instance_group_model_ospp_instance_delete,ospp_base.model_ospp_instance,group_model_ospp_instance_delete,1,1,1,1 | ||||
|  |  | |||
| 
 | 
|  | @ -0,0 +1,49 @@ | |||
| <?xml version="1.0" encoding="utf-8"?> | ||||
| <odoo> | ||||
| 
 | ||||
|     <record model="ir.module.category" id="module_category_menu_ospp_instance"> | ||||
|         <field name="name">实例菜单</field> | ||||
|         <field name="description">实例菜单</field> | ||||
|         <field name="sequence">14</field> | ||||
|     </record> | ||||
| 
 | ||||
|     <record model="ir.module.category" id="module_category_model_ospp_instance"> | ||||
|         <field name="name">实例模型</field> | ||||
|         <field name="description">实例菜单</field> | ||||
|         <field name="sequence">14</field> | ||||
|     </record> | ||||
| 
 | ||||
|     <record model="ir.module.category" id="module_category_button_ospp_instance"> | ||||
|         <field name="name">实例按钮</field> | ||||
|         <field name="description">实例按钮</field> | ||||
|         <field name="sequence">14</field> | ||||
|     </record> | ||||
| 
 | ||||
|     <record id="group_model_ospp_instance_read" model="res.groups"> | ||||
|         <field name="name">ospp.instance read</field> | ||||
|         <field name="category_id" ref="module_category_model_ospp_instance"/> | ||||
|         <field name="users" eval="[(4, ref('base.user_root')), (4, ref('base.user_admin'))]"/> | ||||
|     </record> | ||||
| 
 | ||||
|     <record id="group_model_ospp_instance_write" model="res.groups"> | ||||
|         <field name="name">ospp.instance write</field> | ||||
|         <field name="category_id" ref="module_category_model_ospp_instance"/> | ||||
|         <field name="implied_ids" eval="[(4, ref('group_model_ospp_instance_read'))]"/> | ||||
|         <field name="users" eval="[(4, ref('base.user_root')), (4, ref('base.user_admin'))]"/> | ||||
|     </record> | ||||
| 
 | ||||
|     <record id="group_model_ospp_instance_create" model="res.groups"> | ||||
|         <field name="name">ospp.instance create</field> | ||||
|         <field name="category_id" ref="module_category_model_ospp_instance"/> | ||||
|         <field name="implied_ids" eval="[(4, ref('group_model_ospp_instance_read'))]"/> | ||||
|         <field name="users" eval="[(4, ref('base.user_root')), (4, ref('base.user_admin'))]"/> | ||||
|     </record> | ||||
| 
 | ||||
|     <record id="group_model_ospp_instance_delete" model="res.groups"> | ||||
|         <field name="name">ospp.instance delete</field> | ||||
|         <field name="category_id" ref="module_category_model_ospp_instance"/> | ||||
|         <field name="implied_ids" eval="[(4, ref('group_model_ospp_instance_read'))]"/> | ||||
|         <field name="users" eval="[(4, ref('base.user_root')), (4, ref('base.user_admin'))]"/> | ||||
|     </record> | ||||
|      | ||||
| </odoo> | ||||
|  | @ -1,28 +1,74 @@ | |||
| <odoo> | ||||
|   <data> | ||||
|     <!-- explicit list view definition --> | ||||
| <!-- | ||||
|     <record model="ir.ui.view" id="ospp_base.list"> | ||||
|       <field name="name">ospp_base list</field> | ||||
|       <field name="model">ospp_base.ospp_base</field> | ||||
|     <!-- ospp.instance views --> | ||||
|     <record model="ir.ui.view" id="ospp_base.ospp_instance_list"> | ||||
|       <field name="name">OSPP Instance List View</field> | ||||
|       <field name="model">ospp.instance</field> | ||||
|       <field name="arch" type="xml"> | ||||
|         <tree> | ||||
|           <field name="sequence" widget="handle"/> | ||||
|           <field name="code"/> | ||||
|           <field name="name"/> | ||||
|           <field name="value"/> | ||||
|           <field name="value2"/> | ||||
|           <field name="type"/> | ||||
|           <field name="stack"/> | ||||
|           <field name="service_base_host"/> | ||||
|           <field name="activity_ids" widget="list_activity" optional="show"/> | ||||
|         </tree> | ||||
|       </field> | ||||
|     </record> | ||||
| --> | ||||
| 
 | ||||
|     <record model="ir.ui.view" id="ospp_base.ospp_instance_form"> | ||||
|       <field name="name">OSPP Instance Form View</field> | ||||
|       <field name="model">ospp.instance</field> | ||||
|       <field name="arch" type="xml"> | ||||
|         <form> | ||||
|           <sheet> | ||||
|             <group> | ||||
|               <group> | ||||
|                 <field name="code"/> | ||||
|                 <field name="name"/> | ||||
|               </group> | ||||
|               <group> | ||||
|                 <field name="type"/> | ||||
|                 <field name="stack"/> | ||||
|               </group> | ||||
|             </group> | ||||
|             <group> | ||||
|               <group> | ||||
|                 <field name="management_api"/> | ||||
|                 <field name="management_key"/> | ||||
|                 <field name="management_secret"/> | ||||
|               </group> | ||||
|               <group> | ||||
|                 <field name="service_base_host"/> | ||||
|                 <field name="service_scheme"/> | ||||
|               </group> | ||||
|             </group> | ||||
|             <group> | ||||
|               <group> | ||||
|                 <field name="dockerfile"/> | ||||
|               </group> | ||||
|               <group> | ||||
|                 <field name="active"/> | ||||
|               </group> | ||||
|             </group> | ||||
|           </sheet> | ||||
|           <div class="oe_chatter"> | ||||
|                 <field name="message_follower_ids"/> | ||||
|                 <field name="activity_ids"/> | ||||
|                 <field name="message_ids"/> | ||||
|             </div> | ||||
|         </form> | ||||
|       </field> | ||||
|     </record> | ||||
| 
 | ||||
|     <!-- actions opening views on models --> | ||||
| <!-- | ||||
|     <record model="ir.actions.act_window" id="ospp_base.action_window"> | ||||
|       <field name="name">ospp_base window</field> | ||||
|       <field name="res_model">ospp_base.ospp_base</field> | ||||
|     <record model="ir.actions.act_window" id="ospp_base.ospp_instance_action_window"> | ||||
|       <field name="name">OSPP Instance Action Window</field> | ||||
|       <field name="res_model">ospp.instance</field> | ||||
|       <field name="view_mode">tree,form</field> | ||||
|     </record> | ||||
| --> | ||||
| 
 | ||||
| 
 | ||||
|     <!-- server action to the one above --> | ||||
| <!-- | ||||
|  | @ -41,20 +87,10 @@ | |||
| --> | ||||
| 
 | ||||
|     <!-- Top menu item --> | ||||
| <!-- | ||||
|     <menuitem name="ospp_base" id="ospp_base.menu_root"/> | ||||
| --> | ||||
|     <menuitem name="Instance" id="ospp_base.menu_ospp_instance_root"/> | ||||
|     <!-- menu categories --> | ||||
| <!-- | ||||
|     <menuitem name="Menu 1" id="ospp_base.menu_1" parent="ospp_base.menu_root"/> | ||||
|     <menuitem name="Menu 2" id="ospp_base.menu_2" parent="ospp_base.menu_root"/> | ||||
| --> | ||||
|     <!-- actions --> | ||||
| <!-- | ||||
|     <menuitem name="List" id="ospp_base.menu_1_list" parent="ospp_base.menu_1" | ||||
|               action="ospp_base.action_window"/> | ||||
|     <menuitem name="Server to list" id="ospp_base" parent="ospp_base.menu_2" | ||||
|               action="ospp_base.action_server"/> | ||||
| --> | ||||
|     <menuitem name="Instance" id="ospp_base.menu_instance" parent="ospp_base.menu_ospp_instance_root" | ||||
|               action="ospp_base.ospp_instance_action_window"/> | ||||
|   </data> | ||||
| </odoo> | ||||
|  | @ -11,6 +11,7 @@ | |||
| 
 | ||||
|     'author': "Zhiguo Yuan", | ||||
|     'website': "https://www.newbizpaas.cn", | ||||
|     'license': 'LGPL-3', | ||||
| 
 | ||||
|     # Categories can be used to filter modules in modules listing | ||||
|     # Check https://github.com/odoo/odoo/blob/16.0/odoo/addons/base/data/ir_module_category_data.xml | ||||
|  | @ -23,7 +24,9 @@ | |||
| 
 | ||||
|     # always loaded | ||||
|     'data': [ | ||||
|         # 'security/ir.model.access.csv', | ||||
|         'security/security_groups.xml', | ||||
|         'security/ir.model.access.csv', | ||||
|         'data/ir_sequence_data.xml', | ||||
|         'views/views.xml', | ||||
|         'views/templates.xml', | ||||
|     ], | ||||
|  |  | |||
|  | @ -0,0 +1,20 @@ | |||
| <?xml version="1.0" encoding="utf-8"?> | ||||
| <odoo noupdate="1"> | ||||
| 
 | ||||
|     <record id="seq_slide_channel" model="ir.sequence"> | ||||
|         <field name="name">Slide Channel</field> | ||||
|         <field name="code">slide.channel</field> | ||||
|         <field name="prefix"></field> | ||||
|         <field name="padding">5</field> | ||||
|         <field name="company_id" eval="False"/> | ||||
|     </record> | ||||
| 
 | ||||
|     <record id="seq_channel_instance" model="ir.sequence"> | ||||
|         <field name="name">Channel Instance</field> | ||||
|         <field name="code">channel.instance</field> | ||||
|         <field name="prefix"></field> | ||||
|         <field name="padding">5</field> | ||||
|         <field name="company_id" eval="False"/> | ||||
|     </record> | ||||
| 
 | ||||
| </odoo> | ||||
|  | @ -1,16 +1,20 @@ | |||
| # -*- coding: utf-8 -*- | ||||
| 
 | ||||
| import uuid | ||||
| from odoo import models, fields, api, _ | ||||
| 
 | ||||
| 
 | ||||
| class SlideChannel(models.Model): | ||||
|     _inherit = 'slide.channel' | ||||
| 
 | ||||
|     code = fields.Char('Code', required=True, copy=False, readonly=True, default=lambda self: _('New')) | ||||
|     uuid = fields.Char('UUID', required=True, copy=False, readonly=True, default=lambda self: uuid.uuid4(), | ||||
|                        tracking=True) | ||||
|     code = fields.Char('Code', required=True, copy=False, readonly=True, default=lambda self: _('New'), tracking=True) | ||||
|     instance_arrangement = fields.Selection( | ||||
|         [('share', 'Share'), ('exclude', 'Exclude'), ('both', 'Both'), ('no_need', 'No Need')], | ||||
|         string="Instance Arrangement") | ||||
|     share_instance_count = fields.Integer('Shared Instance Count') | ||||
|         [('share', 'Share'), ('exclude', 'Exclude'), ('both', 'Both'), ('no_need', 'No Need')], required=True, | ||||
|         default="no_need", string="Instance Arrangement") | ||||
| 
 | ||||
|     shared_instance_count = fields.Integer('Shared Instance Count', default=1) | ||||
|     instance_base = fields.Many2one('ospp.instance', string="Instance Base") | ||||
|     instance_ids = fields.One2many('channel.instance', 'channel_id', string="Instances") | ||||
| 
 | ||||
|  | @ -25,37 +29,46 @@ class SlideChannel(models.Model): | |||
|         for vals in vals_list: | ||||
|             if 'company_id' in vals: | ||||
|                 self = self.with_company(vals['company_id']) | ||||
|             if vals.get('name', _("New")) == _("New"): | ||||
|             if vals.get('code', _("New")) == _("New"): | ||||
|                 seq_date = None | ||||
|                 vals['name'] = self.env['ir.sequence'].next_by_code('slide.channel', sequence_date=seq_date) or _("New") | ||||
|                 vals['code'] = self.env['ir.sequence'].next_by_code('slide.channel', sequence_date=seq_date) or _("New") | ||||
| 
 | ||||
|         return super().create(vals_list) | ||||
| 
 | ||||
| 
 | ||||
| class ChannelInstance(models.Model): | ||||
|     _name = "channel.instance" | ||||
|     _inherit = ['mail.thread', 'mail.activity.mixin', 'image.mixin'] | ||||
|     _inherit = ['mail.thread', 'mail.activity.mixin'] | ||||
|     _description = "Channel Instance" | ||||
| 
 | ||||
|     sequence = fields.Integer('Sequence', default=10) | ||||
|     uuid = fields.Char( | ||||
|         'UUID', required=True, copy=False, readonly=True, default=lambda self: uuid.uuid4(), tracking=True) | ||||
|     code = fields.Char('Code', required=True, copy=False, readonly=True, default=lambda self: _('New'), tracking=True) | ||||
|     channel_id = fields.Many2one('slide.channel', required=True, string="Channel") | ||||
|     instance_id = fields.Many2one('ospp.instance', required=True, string="Instance") | ||||
|     name = fields.Char('Name', required=True) | ||||
|     code = fields.Char('Code', required=True, copy=False, readonly=True, default=lambda self: _('New')) | ||||
|     service_name = fields.Char('Service Name', required=True) | ||||
|     service_url = fields.Char('Service URL', required=True) | ||||
|     user_scope = fields.Many2many('slide.channel.partner', string="User Scope") | ||||
|     active = fields.Boolean('Active', default=True) | ||||
| 
 | ||||
| # class ospp_slide(models.Model): | ||||
| #     _name = 'ospp_slide.ospp_slide' | ||||
| #     _description = 'ospp_slide.ospp_slide' | ||||
|     def name_get(self): | ||||
|         # Prefetch the fields used by the `name_get`, so `browse` doesn't fetch other fields | ||||
|         self.browse(self.ids).read(['name', 'code']) | ||||
|         return [(channel.id, '%s%s' % (channel.code and '[%s] ' % channel.code or '', channel.name)) | ||||
|                 for channel in self] | ||||
| 
 | ||||
|     @api.model_create_multi | ||||
|     def create(self, vals_list): | ||||
|         for vals in vals_list: | ||||
|             if 'company_id' in vals: | ||||
|                 self = self.with_company(vals['company_id']) | ||||
|             if vals.get('code', _("New")) == _("New"): | ||||
|                 seq_date = None | ||||
|                 vals['code'] = self.env['ir.sequence'].next_by_code( | ||||
|                     'channel.instance', sequence_date=seq_date) or _("New") | ||||
| 
 | ||||
|         return super().create(vals_list) | ||||
| 
 | ||||
| 
 | ||||
| #     name = fields.Char() | ||||
| #     value = fields.Integer() | ||||
| #     value2 = fields.Float(compute="_value_pc", store=True) | ||||
| #     description = fields.Text() | ||||
| # | ||||
| #     @api.depends('value') | ||||
| #     def _value_pc(self): | ||||
| #         for record in self: | ||||
| #             record.value2 = float(record.value) / 100 | ||||
|  |  | |||
|  | @ -1,2 +1,5 @@ | |||
| id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink | ||||
| access_ospp_slide_ospp_slide,ospp_slide.ospp_slide,model_ospp_slide_ospp_slide,base.group_user,1,1,1,1 | ||||
| access_channel_instance_group_model_channel_instance_read,channel_instance_group_model_channel_instance_read,ospp_slide.model_channel_instance,group_model_channel_instance_read,1,0,0,0 | ||||
| access_channel_instance_group_model_channel_instance_write,channel_instance_group_model_channel_instance_write,ospp_slide.model_channel_instance,group_model_channel_instance_write,1,1,0,0 | ||||
| access_channel_instance_group_model_channel_instance_create,channel_instance_group_model_channel_instance_create,ospp_slide.model_channel_instance,group_model_channel_instance_create,1,0,1,0 | ||||
| access_channel_instance_group_model_channel_instance_delete,channel_instance_group_model_channel_instance_delete,ospp_slide.model_channel_instance,group_model_channel_instance_delete,1,1,1,1 | ||||
|  |  | |||
| 
 | 
|  | @ -0,0 +1,49 @@ | |||
| <?xml version="1.0" encoding="utf-8"?> | ||||
| <odoo> | ||||
| 
 | ||||
|     <record model="ir.module.category" id="module_category_menu_channel_instance"> | ||||
|         <field name="name">课训菜单</field> | ||||
|         <field name="description">课训菜单</field> | ||||
|         <field name="sequence">14</field> | ||||
|     </record> | ||||
| 
 | ||||
|     <record model="ir.module.category" id="module_category_model_channel_instance"> | ||||
|         <field name="name">课训模型</field> | ||||
|         <field name="description">课训菜单</field> | ||||
|         <field name="sequence">14</field> | ||||
|     </record> | ||||
| 
 | ||||
|     <record model="ir.module.category" id="module_category_button_channel_instance"> | ||||
|         <field name="name">课训按钮</field> | ||||
|         <field name="description">课训按钮</field> | ||||
|         <field name="sequence">14</field> | ||||
|     </record> | ||||
| 
 | ||||
|     <record id="group_model_channel_instance_read" model="res.groups"> | ||||
|         <field name="name">channel.instance read</field> | ||||
|         <field name="category_id" ref="module_category_model_channel_instance"/> | ||||
|         <field name="users" eval="[(4, ref('base.user_root')), (4, ref('base.user_admin'))]"/> | ||||
|     </record> | ||||
| 
 | ||||
|     <record id="group_model_channel_instance_write" model="res.groups"> | ||||
|         <field name="name">channel.instance write</field> | ||||
|         <field name="category_id" ref="module_category_model_channel_instance"/> | ||||
|         <field name="implied_ids" eval="[(4, ref('group_model_channel_instance_read'))]"/> | ||||
|         <field name="users" eval="[(4, ref('base.user_root')), (4, ref('base.user_admin'))]"/> | ||||
|     </record> | ||||
| 
 | ||||
|     <record id="group_model_channel_instance_create" model="res.groups"> | ||||
|         <field name="name">channel.instance create</field> | ||||
|         <field name="category_id" ref="module_category_model_channel_instance"/> | ||||
|         <field name="implied_ids" eval="[(4, ref('group_model_channel_instance_read'))]"/> | ||||
|         <field name="users" eval="[(4, ref('base.user_root')), (4, ref('base.user_admin'))]"/> | ||||
|     </record> | ||||
| 
 | ||||
|     <record id="group_model_channel_instance_delete" model="res.groups"> | ||||
|         <field name="name">channel.instance delete</field> | ||||
|         <field name="category_id" ref="module_category_model_channel_instance"/> | ||||
|         <field name="implied_ids" eval="[(4, ref('group_model_channel_instance_read'))]"/> | ||||
|         <field name="users" eval="[(4, ref('base.user_root')), (4, ref('base.user_admin'))]"/> | ||||
|     </record> | ||||
|      | ||||
| </odoo> | ||||
|  | @ -1,60 +1,50 @@ | |||
| <odoo> | ||||
|   <data> | ||||
|     <!-- explicit list view definition --> | ||||
| <!-- | ||||
|     <record model="ir.ui.view" id="ospp_slide.list"> | ||||
|       <field name="name">ospp_slide list</field> | ||||
|       <field name="model">ospp_slide.ospp_slide</field> | ||||
|     <!-- slide.channel view definition --> | ||||
|     <record model="ir.ui.view" id="view_slide_channel_form"> | ||||
|         <field name="name">slide.channel.form.inherit</field> | ||||
|         <field name="model">slide.channel</field> | ||||
|         <field name="inherit_id" ref="website_slides.view_slide_channel_form"></field> | ||||
|         <field name="arch" type="xml"> | ||||
|             <xpath expr="//page[@name='karma_rules']" position="after"> | ||||
|                 <page string="Instance" name="instance"> | ||||
|                     <group> | ||||
|                         <group> | ||||
|                             <field name="instance_arrangement"/> | ||||
|                             <field name="shared_instance_count"/> | ||||
|                         </group> | ||||
|                         <group> | ||||
|                             <field name="instance_base"/> | ||||
|                         </group> | ||||
|                     </group> | ||||
|                     <field name="instance_ids" mode="tree,form"> | ||||
|                         <tree> | ||||
|                             <field name="sequence" widget="handle"/> | ||||
|                             <field name="code"/> | ||||
|                             <field name="name"/> | ||||
|           <field name="value"/> | ||||
|           <field name="value2"/> | ||||
|                             <field name="service_url"/> | ||||
|                             <field name="user_scope" widget="many2many_tags"/> | ||||
|                         </tree> | ||||
|                         <form> | ||||
|                             <group> | ||||
|                                 <group> | ||||
|                                     <field name="code"/> | ||||
|                                     <field name="name"/> | ||||
|                                     <field name="instance_id"/> | ||||
|                                 </group> | ||||
|                                 <group> | ||||
|                                     <field name="service_name"/> | ||||
|                                     <field name="service_url"/> | ||||
|                                     <field name="active"/> | ||||
|                                     <field name="uuid" invisible="1"/> | ||||
|                                 </group> | ||||
|                             </group> | ||||
|                             <field name="user_scope"/> | ||||
|                         </form> | ||||
|                     </field> | ||||
|                 </page> | ||||
|             </xpath> | ||||
|         </field> | ||||
|     </record> | ||||
| --> | ||||
| 
 | ||||
|     <!-- actions opening views on models --> | ||||
| <!-- | ||||
|     <record model="ir.actions.act_window" id="ospp_slide.action_window"> | ||||
|       <field name="name">ospp_slide window</field> | ||||
|       <field name="res_model">ospp_slide.ospp_slide</field> | ||||
|       <field name="view_mode">tree,form</field> | ||||
|     </record> | ||||
| --> | ||||
| 
 | ||||
|     <!-- server action to the one above --> | ||||
| <!-- | ||||
|     <record model="ir.actions.server" id="ospp_slide.action_server"> | ||||
|       <field name="name">ospp_slide server</field> | ||||
|       <field name="model_id" ref="model_ospp_slide_ospp_slide"/> | ||||
|       <field name="state">code</field> | ||||
|       <field name="code"> | ||||
|         action = { | ||||
|           "type": "ir.actions.act_window", | ||||
|           "view_mode": "tree,form", | ||||
|           "res_model": model._name, | ||||
|         } | ||||
|       </field> | ||||
|     </record> | ||||
| --> | ||||
| 
 | ||||
|     <!-- Top menu item --> | ||||
| <!-- | ||||
|     <menuitem name="ospp_slide" id="ospp_slide.menu_root"/> | ||||
| --> | ||||
|     <!-- menu categories --> | ||||
| <!-- | ||||
|     <menuitem name="Menu 1" id="ospp_slide.menu_1" parent="ospp_slide.menu_root"/> | ||||
|     <menuitem name="Menu 2" id="ospp_slide.menu_2" parent="ospp_slide.menu_root"/> | ||||
| --> | ||||
|     <!-- actions --> | ||||
| <!-- | ||||
|     <menuitem name="List" id="ospp_slide.menu_1_list" parent="ospp_slide.menu_1" | ||||
|               action="ospp_slide.action_window"/> | ||||
|     <menuitem name="Server to list" id="ospp_slide" parent="ospp_slide.menu_2" | ||||
|               action="ospp_slide.action_server"/> | ||||
| --> | ||||
|   </data> | ||||
| </odoo> | ||||
		Loading…
	
		Reference in New Issue
	
	 Oliver Yuan
						Oliver Yuan