diff --git a/addons/ospp_slide/models/models.py b/addons/ospp_slide/models/models.py
index 8f78687..987d3b6 100644
--- a/addons/ospp_slide/models/models.py
+++ b/addons/ospp_slide/models/models.py
@@ -19,31 +19,100 @@ class SlideChannel(models.Model):
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")
+ shared_instance_demo_data = fields.Boolean('Shared Instance Demo Data', default=True)
+ excluded_instance_demo_data = fields.Boolean('Excluded Instance Demo Data', default=False)
# @api.depends('slide_partner_ids')
def action_generate_instance(self):
instance_obj = self.env['channel.instance'].sudo()
+ partner_obj = self.env['slide.channel.partner'].sudo()
for rec in self:
if rec.instance_arrangement not in ['no_need'] and not (rec.instance_arrangement and rec.instance_base):
raise ValidationError(_("No Instance Arrangement or Base provided!"))
+ partner_ids = partner_obj.search([('channel_id', '=', rec.id)])
+
if not rec.instance_ids:
- if rec.instance_arrangement in ['share']:
+ if rec.instance_arrangement in ['share', 'both']:
vals = []
for i in range(rec.shared_instance_count):
val = {
- "name": rec.id,
+ "name": f"share-{i}",
"channel_id": rec.id,
"instance_id": rec.instance_base and rec.instance_base.id,
"service_name": f"{rec.code}",
- "service_url": f"{rec.service_scheme}://{rec.code}-{i}.{rec.instance_base.service_base_host}",
+ "service_url": f"{rec.instance_base.service_scheme}://{rec.code}-{i}.{rec.instance_base.service_base_host}",
"admin_account": f"{rec.user_id.email}",
"admin_password": f"{random.randint(10000000,99999999)}",
+ "user_scope": [(6, 0, partner_ids.ids)],
"type": "share",
+ "demo_data": rec.shared_instance_demo_data
}
vals.append(val)
instance_obj.create(vals)
+ if rec.instance_arrangement in ['exclude', 'both']:
+ vals = []
+ for partner_id in partner_ids:
+ val = {
+ "name": f"{partner_id.partner_id.code}",
+ "channel_id": rec.id,
+ "instance_id": rec.instance_base and rec.instance_base.id,
+ "service_name": f"{rec.code}-{partner_id.partner_id.code}",
+ "service_url": f"{rec.instance_base.service_scheme}://{rec.code}-{partner_id.partner_id.code}.{rec.instance_base.service_base_host}",
+ "admin_account": f"{partner_id.partner_email}",
+ "admin_password": f"{random.randint(10000000,99999999)}",
+ "user_scope": [(6, 0, partner_id.ids)],
+ "type": "exclude",
+ "demo_data": rec.excluded_instance_demo_data
+ }
+ vals.append(val)
+ instance_obj.create(vals)
+ else:
+ if rec.instance_arrangement in ['share', 'both']:
+ vals = []
+ for i in range(rec.shared_instance_count):
+ service_name = f"{rec.code}-{i}"
+ instance_id = instance_obj.search([('name', '=', service_name), ('channel_id', '=', rec.id)])
+ if not instance_id:
+ val = {
+ "name": service_name,
+ "channel_id": rec.id,
+ "instance_id": rec.instance_base and rec.instance_base.id,
+ "service_name": service_name,
+ "service_url": f"{rec.instance_base.service_scheme}://{service_name}.{rec.instance_base.service_base_host}",
+ "admin_account": f"{rec.user_id.email}",
+ "admin_password": f"{random.randint(10000000,99999999)}",
+ "user_scope": [(6, 0, partner_ids.ids)],
+ "type": "share",
+ "demo_data": rec.shared_instance_demo_data
+ }
+ vals.append(val)
+ if vals:
+ instance_obj.create(vals)
+
+ if rec.instance_arrangement in ['exclude', 'both']:
+ vals = []
+ for partner_id in partner_ids:
+ service_name = f"{rec.code}-{partner_id.partner_id.code}"
+ instance_id = instance_obj.search([('name', '=', service_name), ('channel_id', '=', rec.id)])
+ if not instance_id:
+ val = {
+ "name": service_name,
+ "channel_id": rec.id,
+ "instance_id": rec.instance_base and rec.instance_base.id,
+ "service_name": service_name,
+ "service_url": f"{rec.instance_base.service_scheme}://{service_name}.{rec.instance_base.service_base_host}",
+ "admin_account": f"{partner_id.partner_email}",
+ "admin_password": f"{random.randint(10000000,99999999)}",
+ "user_scope": [(6, 0, partner_id.ids)],
+ "type": "exclude",
+ "demo_data": rec.excluded_instance_demo_data
+ }
+ vals.append(val)
+ if vals:
+ instance_obj.create(vals)
+
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'])
@@ -81,6 +150,9 @@ class ChannelInstance(models.Model):
admin_password = fields.Char('Admin Password')
active = fields.Boolean('Active', default=True)
type = fields.Selection([('share', 'Share'), ('exclude', 'Exclude')], string="Type", required=True, default='share')
+ instance_created = fields.Boolean('Instance Created', default=False)
+ message = fields.Text('Message')
+ demo_data = fields.Boolean('Demo Data', default=True)
def name_get(self):
# Prefetch the fields used by the `name_get`, so `browse` doesn't fetch other fields
diff --git a/addons/ospp_slide/views/views.xml b/addons/ospp_slide/views/views.xml
index 1c4993b..2843386 100644
--- a/addons/ospp_slide/views/views.xml
+++ b/addons/ospp_slide/views/views.xml
@@ -11,22 +11,26 @@
-
+
+
-
-
+
+
+
-
+
-
+
+
+