From 5712c93b65761db01d1e8d95b9152fe38681bd6a Mon Sep 17 00:00:00 2001 From: Oliver Yuan Date: Mon, 17 Apr 2023 09:24:10 +0800 Subject: [PATCH] [IMP] Improve ospp_base and ospp_slide modules --- addons/ospp_slide/models/models.py | 78 ++++++++++++++++++++++++++++-- addons/ospp_slide/views/views.xml | 21 +++++--- 2 files changed, 89 insertions(+), 10 deletions(-) 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 @@ - + + - -