[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) |     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 | ||||||
|  |  | ||||||
|  | @ -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> | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue
	
	 Oliver Yuan
						Oliver Yuan