diff --git a/addons/ospp_base/__manifest__.py b/addons/ospp_base/__manifest__.py
index b98f768..4641a9a 100644
--- a/addons/ospp_base/__manifest__.py
+++ b/addons/ospp_base/__manifest__.py
@@ -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',
],
diff --git a/addons/ospp_base/data/ir_sequence_data.xml b/addons/ospp_base/data/ir_sequence_data.xml
new file mode 100644
index 0000000..045626e
--- /dev/null
+++ b/addons/ospp_base/data/ir_sequence_data.xml
@@ -0,0 +1,20 @@
+
+
+
+
+ OSPP Instance
+ ospp.instance
+
+ 5
+
+
+
+
+ Res Partner
+ res.partner
+
+ 8
+
+
+
+
diff --git a/addons/ospp_base/models/models.py b/addons/ospp_base/models/models.py
index 83fe09a..cbfeca2 100644
--- a/addons/ospp_base/models/models.py
+++ b/addons/ospp_base/models/models.py
@@ -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)
diff --git a/addons/ospp_base/security/ir.model.access.csv b/addons/ospp_base/security/ir.model.access.csv
index a598b32..acda2b4 100644
--- a/addons/ospp_base/security/ir.model.access.csv
+++ b/addons/ospp_base/security/ir.model.access.csv
@@ -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
\ No newline at end of file
+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
diff --git a/addons/ospp_base/security/security_groups.xml b/addons/ospp_base/security/security_groups.xml
new file mode 100755
index 0000000..c38bd10
--- /dev/null
+++ b/addons/ospp_base/security/security_groups.xml
@@ -0,0 +1,49 @@
+
+
+
+
+
+
+ 实例模型
+ 实例菜单
+ 14
+
+
+
+ 实例按钮
+ 实例按钮
+ 14
+
+
+
+ ospp.instance read
+
+
+
+
+
+ ospp.instance write
+
+
+
+
+
+
+ ospp.instance create
+
+
+
+
+
+
+ ospp.instance delete
+
+
+
+
+
+
diff --git a/addons/ospp_base/views/views.xml b/addons/ospp_base/views/views.xml
index 601d12c..0585955 100644
--- a/addons/ospp_base/views/views.xml
+++ b/addons/ospp_base/views/views.xml
@@ -1,28 +1,74 @@
-
-
+
+ OSPP Instance List View
+ ospp.instance
+
+
-
-
+
+
+
+
--->
+
+
+ OSPP Instance Form View
+ ospp.instance
+
+
+
+
-
+
-
+
-
-
+
\ No newline at end of file
diff --git a/addons/ospp_slide/__manifest__.py b/addons/ospp_slide/__manifest__.py
index e283853..11f9767 100644
--- a/addons/ospp_slide/__manifest__.py
+++ b/addons/ospp_slide/__manifest__.py
@@ -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',
],
diff --git a/addons/ospp_slide/data/ir_sequence_data.xml b/addons/ospp_slide/data/ir_sequence_data.xml
new file mode 100644
index 0000000..0b12991
--- /dev/null
+++ b/addons/ospp_slide/data/ir_sequence_data.xml
@@ -0,0 +1,20 @@
+
+
+
+
+ Slide Channel
+ slide.channel
+
+ 5
+
+
+
+
+ Channel Instance
+ channel.instance
+
+ 5
+
+
+
+
diff --git a/addons/ospp_slide/models/models.py b/addons/ospp_slide/models/models.py
index 01a1f55..c45f01c 100644
--- a/addons/ospp_slide/models/models.py
+++ b/addons/ospp_slide/models/models.py
@@ -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
diff --git a/addons/ospp_slide/security/ir.model.access.csv b/addons/ospp_slide/security/ir.model.access.csv
index bb1a882..cf9d4a3 100644
--- a/addons/ospp_slide/security/ir.model.access.csv
+++ b/addons/ospp_slide/security/ir.model.access.csv
@@ -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
\ No newline at end of file
+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
diff --git a/addons/ospp_slide/security/security_groups.xml b/addons/ospp_slide/security/security_groups.xml
new file mode 100755
index 0000000..fe8ad9a
--- /dev/null
+++ b/addons/ospp_slide/security/security_groups.xml
@@ -0,0 +1,49 @@
+
+
+
+
+
+
+ 课训模型
+ 课训菜单
+ 14
+
+
+
+ 课训按钮
+ 课训按钮
+ 14
+
+
+
+ channel.instance read
+
+
+
+
+
+ channel.instance write
+
+
+
+
+
+
+ channel.instance create
+
+
+
+
+
+
+ channel.instance delete
+
+
+
+
+
+
diff --git a/addons/ospp_slide/views/views.xml b/addons/ospp_slide/views/views.xml
index 499f5ad..28ae173 100644
--- a/addons/ospp_slide/views/views.xml
+++ b/addons/ospp_slide/views/views.xml
@@ -1,60 +1,50 @@
-
-
+
+ slide.channel.form.inherit
+ slide.channel
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
--->
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file