[IMP] Improve ospp_base and ospp_slide modules

enterprise-opentkr-16.0
Oliver Yuan 2023-04-17 09:24:10 +08:00
parent ca94474a2f
commit 5712c93b65
2 changed files with 89 additions and 10 deletions

View File

@ -19,31 +19,100 @@ class SlideChannel(models.Model):
shared_instance_count = fields.Integer('Shared Instance Count', default=1) 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")
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') # @api.depends('slide_partner_ids')
def action_generate_instance(self): def action_generate_instance(self):
instance_obj = self.env['channel.instance'].sudo() instance_obj = self.env['channel.instance'].sudo()
partner_obj = self.env['slide.channel.partner'].sudo()
for rec in self: for rec in self:
if rec.instance_arrangement not in ['no_need'] and not (rec.instance_arrangement and rec.instance_base): 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!")) raise ValidationError(_("No Instance Arrangement or Base provided!"))
partner_ids = partner_obj.search([('channel_id', '=', rec.id)])
if not rec.instance_ids: if not rec.instance_ids:
if rec.instance_arrangement in ['share']: if rec.instance_arrangement in ['share', 'both']:
vals = [] vals = []
for i in range(rec.shared_instance_count): for i in range(rec.shared_instance_count):
val = { val = {
"name": rec.id, "name": f"share-{i}",
"channel_id": rec.id, "channel_id": rec.id,
"instance_id": rec.instance_base and rec.instance_base.id, "instance_id": rec.instance_base and rec.instance_base.id,
"service_name": f"{rec.code}", "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_account": f"{rec.user_id.email}",
"admin_password": f"{random.randint(10000000,99999999)}", "admin_password": f"{random.randint(10000000,99999999)}",
"user_scope": [(6, 0, partner_ids.ids)],
"type": "share", "type": "share",
"demo_data": rec.shared_instance_demo_data
} }
vals.append(val) vals.append(val)
instance_obj.create(vals) 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): def name_get(self):
# Prefetch the fields used by the `name_get`, so `browse` doesn't fetch other fields # Prefetch the fields used by the `name_get`, so `browse` doesn't fetch other fields
self.browse(self.ids).read(['name', 'code']) self.browse(self.ids).read(['name', 'code'])
@ -81,6 +150,9 @@ class ChannelInstance(models.Model):
admin_password = fields.Char('Admin Password') admin_password = fields.Char('Admin Password')
active = fields.Boolean('Active', default=True) active = fields.Boolean('Active', default=True)
type = fields.Selection([('share', 'Share'), ('exclude', 'Exclude')], string="Type", required=True, default='share') 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): def name_get(self):
# Prefetch the fields used by the `name_get`, so `browse` doesn't fetch other fields # Prefetch the fields used by the `name_get`, so `browse` doesn't fetch other fields

View File

@ -11,22 +11,26 @@
<group> <group>
<group> <group>
<field name="instance_arrangement"/> <field name="instance_arrangement"/>
<field name="shared_instance_count"/> <field name="shared_instance_count" attrs="{'invisible': [('instance_arrangement', 'in', ['no_need'])]}"/>
<field name="shared_instance_demo_data" attrs="{'invisible': [('instance_arrangement', 'in', ['no_need'])]}"/>
</group> </group>
<group> <group>
<field name="instance_base"/> <field name="instance_base" attrs="{'invisible': [('instance_arrangement', 'in', ['no_need'])]}"/>
<field name="excluded_instance_demo_data" attrs="{'invisible': [('instance_arrangement', 'in', ['no_need'])]}"/>
<button name="action_generate_instance" data-hotkey="v" <button name="action_generate_instance" data-hotkey="v"
string="Generate Instance" type="object" string="Generate Instance" type="object"
attrs="{'invisible': [('instance_arrangement', 'in', ['no_need'])]}"/> attrs="{'invisible': [('instance_arrangement', 'in', ['no_need'])]}"/>
</group> </group>
</group> </group>
<field name="instance_ids" mode="tree,form" readonly="1"> <field name="instance_ids" mode="tree,form" readonly="0" attrs="{'invisible': [('instance_arrangement', 'in', ['no_need'])]}">
<tree> <tree>
<field name="sequence" widget="handle"/> <field name="sequence" widget="handle"/>
<field name="code"/> <field name="code"/>
<field name="name"/> <field name="name"/>
<field name="service_url"/> <field name="service_url"/>
<field name="user_scope" widget="many2many_tags"/> <field name="demo_data"/>
<field name="instance_created"/>
<field name="user_scope" widget="many2many_tags" invisible="1"/>
</tree> </tree>
<form> <form>
<group> <group>
@ -36,11 +40,14 @@
<field name="type"/> <field name="type"/>
<field name="admin_account"/> <field name="admin_account"/>
<field name="admin_password"/> <field name="admin_password"/>
<field name="message"/>
</group> </group>
<group> <group>
<field name="instance_id"/> <field name="instance_id"/>
<field name="service_name"/> <field name="service_name"/>
<field name="service_url"/> <field name="service_url"/>
<field name="demo_data"/>
<field name="instance_created"/>
<field name="active"/> <field name="active"/>
<field name="uuid" invisible="0"/> <field name="uuid" invisible="0"/>
</group> </group>