[IMP] Improve ospp_base and ospp_slide modules
							parent
							
								
									ca94474a2f
								
							
						
					
					
						commit
						5712c93b65
					
				|  | @ -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 | ||||
|  |  | |||
|  | @ -11,22 +11,26 @@ | |||
|                     <group> | ||||
|                         <group> | ||||
|                             <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> | ||||
|                             <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" | ||||
|                                      string="Generate Instance" type="object" | ||||
|                                      attrs="{'invisible': [('instance_arrangement', 'in', ['no_need'])]}"/> | ||||
|                         </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> | ||||
|                             <field name="sequence" widget="handle"/> | ||||
|                             <field name="code"/> | ||||
|                             <field name="name"/> | ||||
|                             <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> | ||||
|                         <form> | ||||
|                             <group> | ||||
|  | @ -36,11 +40,14 @@ | |||
|                                     <field name="type"/> | ||||
|                                     <field name="admin_account"/> | ||||
|                                     <field name="admin_password"/> | ||||
|                                     <field name="message"/> | ||||
|                                 </group> | ||||
|                                 <group> | ||||
|                                     <field name="instance_id"/> | ||||
|                                     <field name="service_name"/> | ||||
|                                     <field name="service_url"/> | ||||
|                                     <field name="demo_data"/> | ||||
|                                     <field name="instance_created"/> | ||||
|                                     <field name="active"/> | ||||
|                                     <field name="uuid" invisible="0"/> | ||||
|                                 </group> | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue
	
	 Oliver Yuan
						Oliver Yuan