[IMP] Improve ospp_base and ospp_slide modules
							parent
							
								
									040a9d0617
								
							
						
					
					
						commit
						35d436b0ff
					
				|  | @ -11,6 +11,7 @@ | ||||||
| 
 | 
 | ||||||
|     'author': "Zhiguo Yuan", |     'author': "Zhiguo Yuan", | ||||||
|     'website': "https://www.newbizpaas.cn", |     'website': "https://www.newbizpaas.cn", | ||||||
|  |     'license': 'LGPL-3', | ||||||
| 
 | 
 | ||||||
|     # Categories can be used to filter modules in modules listing |     # 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 |     # Check https://github.com/odoo/odoo/blob/16.0/odoo/addons/base/data/ir_module_category_data.xml | ||||||
|  | @ -23,7 +24,9 @@ | ||||||
| 
 | 
 | ||||||
|     # always loaded |     # always loaded | ||||||
|     'data': [ |     'data': [ | ||||||
|         # 'security/ir.model.access.csv', |         'security/security_groups.xml', | ||||||
|  |         'security/ir.model.access.csv', | ||||||
|  |         'data/ir_sequence_data.xml', | ||||||
|         'views/views.xml', |         'views/views.xml', | ||||||
|         'views/templates.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 -*- | # -*- 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): | class OSPPInstance(models.Model): | ||||||
|     _name = 'ospp.instance' |     _name = 'ospp.instance' | ||||||
|  |     _inherit = ['mail.thread', 'mail.activity.mixin'] | ||||||
|     _description = 'OSPP Instance' |     _description = 'OSPP Instance' | ||||||
| 
 | 
 | ||||||
|     name = fields.Char("Name") |     sequence = fields.Integer('Sequence', default=10) | ||||||
|     code = fields.Char("Code") |     name = fields.Char("Name", tracking=True) | ||||||
|     type = fields.Selection([('saas', 'SAAS'), ('paas', 'PAAS')], required=True, string="Type") |     uuid = fields.Char( | ||||||
|     stack = fields.Selection([('docker', 'Docker'), ('k8s', 'K8S'), ('odoo', 'ODOO')], required=True, string="Stack") |         'UUID', required=True, copy=False, readonly=True, default=lambda self: uuid.uuid4(), tracking=True) | ||||||
|     management_api = fields.Char('Management Api', required=True) |     code = fields.Char('Code', required=True, copy=False, readonly=True, default=lambda self: _('New'), tracking=True) | ||||||
|     management_key = fields.Char('Management Key') |     type = fields.Selection([('saas', 'SAAS'), ('paas', 'PAAS')], required=True, string="Type", tracking=True) | ||||||
|     management_secret = fields.Char('Management Secret') |     stack = fields.Selection( | ||||||
|     service_base_host = fields.Char('Service Base Host') |         [('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( |     service_scheme = fields.Selection( | ||||||
|         [('http', 'HTTP'), ('https', 'HTTPS'), ('ws', 'WS'), ('wss', 'WSS')], |         [('http', 'HTTP'), ('https', 'HTTPS'), ('ws', 'WS'), ('wss', 'WSS')], | ||||||
|         required=True, string="Service Scheme") |         required=True, string="Service Scheme", tracking=True) | ||||||
|     dockerfile = fields.Text("Dockerfile") |     dockerfile = fields.Text("Dockerfile", tracking=True) | ||||||
|     active = fields.Boolean('Active', default=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 | 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> | <odoo> | ||||||
|   <data> |   <data> | ||||||
|     <!-- explicit list view definition --> |     <!-- ospp.instance views --> | ||||||
| <!-- |     <record model="ir.ui.view" id="ospp_base.ospp_instance_list"> | ||||||
|     <record model="ir.ui.view" id="ospp_base.list"> |       <field name="name">OSPP Instance List View</field> | ||||||
|       <field name="name">ospp_base list</field> |       <field name="model">ospp.instance</field> | ||||||
|       <field name="model">ospp_base.ospp_base</field> |  | ||||||
|       <field name="arch" type="xml"> |       <field name="arch" type="xml"> | ||||||
|         <tree> |         <tree> | ||||||
|  |           <field name="sequence" widget="handle"/> | ||||||
|  |           <field name="code"/> | ||||||
|           <field name="name"/> |           <field name="name"/> | ||||||
|           <field name="value"/> |           <field name="type"/> | ||||||
|           <field name="value2"/> |           <field name="stack"/> | ||||||
|  |           <field name="service_base_host"/> | ||||||
|  |           <field name="activity_ids" widget="list_activity" optional="show"/> | ||||||
|         </tree> |         </tree> | ||||||
|       </field> |       </field> | ||||||
|     </record> |     </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 --> |     <!-- actions opening views on models --> | ||||||
| <!-- |     <record model="ir.actions.act_window" id="ospp_base.ospp_instance_action_window"> | ||||||
|     <record model="ir.actions.act_window" id="ospp_base.action_window"> |       <field name="name">OSPP Instance Action Window</field> | ||||||
|       <field name="name">ospp_base window</field> |       <field name="res_model">ospp.instance</field> | ||||||
|       <field name="res_model">ospp_base.ospp_base</field> |  | ||||||
|       <field name="view_mode">tree,form</field> |       <field name="view_mode">tree,form</field> | ||||||
|     </record> |     </record> | ||||||
| --> | 
 | ||||||
| 
 | 
 | ||||||
|     <!-- server action to the one above --> |     <!-- server action to the one above --> | ||||||
| <!-- | <!-- | ||||||
|  | @ -41,20 +87,10 @@ | ||||||
| --> | --> | ||||||
| 
 | 
 | ||||||
|     <!-- Top menu item --> |     <!-- Top menu item --> | ||||||
| <!-- |     <menuitem name="Instance" id="ospp_base.menu_ospp_instance_root"/> | ||||||
|     <menuitem name="ospp_base" id="ospp_base.menu_root"/> |  | ||||||
| --> |  | ||||||
|     <!-- menu categories --> |     <!-- 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 --> |     <!-- actions --> | ||||||
| <!-- |     <menuitem name="Instance" id="ospp_base.menu_instance" parent="ospp_base.menu_ospp_instance_root" | ||||||
|     <menuitem name="List" id="ospp_base.menu_1_list" parent="ospp_base.menu_1" |               action="ospp_base.ospp_instance_action_window"/> | ||||||
|               action="ospp_base.action_window"/> |  | ||||||
|     <menuitem name="Server to list" id="ospp_base" parent="ospp_base.menu_2" |  | ||||||
|               action="ospp_base.action_server"/> |  | ||||||
| --> |  | ||||||
|   </data> |   </data> | ||||||
| </odoo> | </odoo> | ||||||
|  | @ -11,6 +11,7 @@ | ||||||
| 
 | 
 | ||||||
|     'author': "Zhiguo Yuan", |     'author': "Zhiguo Yuan", | ||||||
|     'website': "https://www.newbizpaas.cn", |     'website': "https://www.newbizpaas.cn", | ||||||
|  |     'license': 'LGPL-3', | ||||||
| 
 | 
 | ||||||
|     # Categories can be used to filter modules in modules listing |     # 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 |     # Check https://github.com/odoo/odoo/blob/16.0/odoo/addons/base/data/ir_module_category_data.xml | ||||||
|  | @ -23,7 +24,9 @@ | ||||||
| 
 | 
 | ||||||
|     # always loaded |     # always loaded | ||||||
|     'data': [ |     'data': [ | ||||||
|         # 'security/ir.model.access.csv', |         'security/security_groups.xml', | ||||||
|  |         'security/ir.model.access.csv', | ||||||
|  |         'data/ir_sequence_data.xml', | ||||||
|         'views/views.xml', |         'views/views.xml', | ||||||
|         'views/templates.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 -*- | # -*- coding: utf-8 -*- | ||||||
| 
 | 
 | ||||||
|  | import uuid | ||||||
| from odoo import models, fields, api, _ | from odoo import models, fields, api, _ | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| class SlideChannel(models.Model): | class SlideChannel(models.Model): | ||||||
|     _inherit = 'slide.channel' |     _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( |     instance_arrangement = fields.Selection( | ||||||
|         [('share', 'Share'), ('exclude', 'Exclude'), ('both', 'Both'), ('no_need', 'No Need')], |         [('share', 'Share'), ('exclude', 'Exclude'), ('both', 'Both'), ('no_need', 'No Need')], required=True, | ||||||
|         string="Instance Arrangement") |         default="no_need", string="Instance Arrangement") | ||||||
|     share_instance_count = fields.Integer('Shared Instance Count') | 
 | ||||||
|  |     shared_instance_count = fields.Integer('Shared Instance Count', default=1) | ||||||
|     instance_base = fields.Many2one('ospp.instance', string="Instance Base") |     instance_base = fields.Many2one('ospp.instance', string="Instance Base") | ||||||
|     instance_ids = fields.One2many('channel.instance', 'channel_id', string="Instances") |     instance_ids = fields.One2many('channel.instance', 'channel_id', string="Instances") | ||||||
| 
 | 
 | ||||||
|  | @ -25,37 +29,46 @@ class SlideChannel(models.Model): | ||||||
|         for vals in vals_list: |         for vals in vals_list: | ||||||
|             if 'company_id' in vals: |             if 'company_id' in vals: | ||||||
|                 self = self.with_company(vals['company_id']) |                 self = self.with_company(vals['company_id']) | ||||||
|             if vals.get('name', _("New")) == _("New"): |             if vals.get('code', _("New")) == _("New"): | ||||||
|                 seq_date = None |                 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) |         return super().create(vals_list) | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| class ChannelInstance(models.Model): | class ChannelInstance(models.Model): | ||||||
|     _name = "channel.instance" |     _name = "channel.instance" | ||||||
|     _inherit = ['mail.thread', 'mail.activity.mixin', 'image.mixin'] |     _inherit = ['mail.thread', 'mail.activity.mixin'] | ||||||
|     _description = "Channel Instance" |     _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") |     channel_id = fields.Many2one('slide.channel', required=True, string="Channel") | ||||||
|     instance_id = fields.Many2one('ospp.instance', required=True, string="Instance") |     instance_id = fields.Many2one('ospp.instance', required=True, string="Instance") | ||||||
|     name = fields.Char('Name', required=True) |     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_name = fields.Char('Service Name', required=True) | ||||||
|     service_url = fields.Char('Service URL', required=True) |     service_url = fields.Char('Service URL', required=True) | ||||||
|     user_scope = fields.Many2many('slide.channel.partner', string="User Scope") |     user_scope = fields.Many2many('slide.channel.partner', string="User Scope") | ||||||
|     active = fields.Boolean('Active', default=True) |     active = fields.Boolean('Active', default=True) | ||||||
| 
 | 
 | ||||||
| # class ospp_slide(models.Model): |     def name_get(self): | ||||||
| #     _name = 'ospp_slide.ospp_slide' |         # Prefetch the fields used by the `name_get`, so `browse` doesn't fetch other fields | ||||||
| #     _description = 'ospp_slide.ospp_slide' |         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 | 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> | <odoo> | ||||||
|   <data> |   <data> | ||||||
|     <!-- explicit list view definition --> |     <!-- slide.channel view definition --> | ||||||
| <!-- |     <record model="ir.ui.view" id="view_slide_channel_form"> | ||||||
|     <record model="ir.ui.view" id="ospp_slide.list"> |         <field name="name">slide.channel.form.inherit</field> | ||||||
|       <field name="name">ospp_slide list</field> |         <field name="model">slide.channel</field> | ||||||
|       <field name="model">ospp_slide.ospp_slide</field> |         <field name="inherit_id" ref="website_slides.view_slide_channel_form"></field> | ||||||
|         <field name="arch" type="xml"> |         <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> |                         <tree> | ||||||
|  |                             <field name="sequence" widget="handle"/> | ||||||
|  |                             <field name="code"/> | ||||||
|                             <field name="name"/> |                             <field name="name"/> | ||||||
|           <field name="value"/> |                             <field name="service_url"/> | ||||||
|           <field name="value2"/> |                             <field name="user_scope" widget="many2many_tags"/> | ||||||
|                         </tree> |                         </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> |         </field> | ||||||
|     </record> |     </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> |   </data> | ||||||
| </odoo> | </odoo> | ||||||
		Loading…
	
		Reference in New Issue
	
	 Oliver Yuan
						Oliver Yuan