diff --git a/addons/ospp_slide/models/models.py b/addons/ospp_slide/models/models.py index c45f01c..8f78687 100644 --- a/addons/ospp_slide/models/models.py +++ b/addons/ospp_slide/models/models.py @@ -1,7 +1,9 @@ # -*- coding: utf-8 -*- +import random import uuid from odoo import models, fields, api, _ +from odoo.exceptions import UserError, ValidationError class SlideChannel(models.Model): @@ -18,6 +20,30 @@ class SlideChannel(models.Model): instance_base = fields.Many2one('ospp.instance', string="Instance Base") instance_ids = fields.One2many('channel.instance', 'channel_id', string="Instances") + # @api.depends('slide_partner_ids') + def action_generate_instance(self): + instance_obj = self.env['channel.instance'].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!")) + + if not rec.instance_ids: + if rec.instance_arrangement in ['share']: + vals = [] + for i in range(rec.shared_instance_count): + val = { + "name": rec.id, + "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}", + "admin_account": f"{rec.user_id.email}", + "admin_password": f"{random.randint(10000000,99999999)}", + "type": "share", + } + vals.append(val) + 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']) @@ -51,7 +77,10 @@ class ChannelInstance(models.Model): 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") + admin_account = fields.Char('Admin Account') + 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') 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 28ae173..1c4993b 100644 --- a/addons/ospp_slide/views/views.xml +++ b/addons/ospp_slide/views/views.xml @@ -15,9 +15,12 @@ +