text: # -*- coding: utf-8 -*-
  # Part of Odoo. See LICENSE file for full copyright and licensing details.
  
  from odoo import api, fields, models, _
  from odoo.modules.module import get_resource_path
  
  
  class Sponsor(models.Model):
      _name = "event.sponsor"
      _description = 'Event Sponsor'
      _order = "sequence, sponsor_type_id"
      _rec_name = 'name'
      _inherit = ['mail.thread', 'mail.activity.mixin']
  
      event_id = fields.Many2one('event.event', 'Event', required=True)
      sponsor_type_id = fields.Many2one('event.sponsor.type', 'Sponsoring Type', required=True)
      url = fields.Char('Sponsor Website', compute='_compute_url', readonly=False, store=True)
      sequence = fields.Integer('Sequence')
      active = fields.Boolean(default=True)
      # contact information
      partner_id = fields.Many2one('res.partner', 'Sponsor/Customer', required=True)
      partner_name = fields.Char('Name', related='partner_id.name')
      partner_email = fields.Char('Email', related='partner_id.email')
      partner_phone = fields.Char('Phone', related='partner_id.phone')
      partner_mobile = fields.Char('Mobile', related='partner_id.mobile')
      name = fields.Char('Sponsor Name', compute='_compute_name', readonly=False, store=True)
      email = fields.Char('Sponsor Email', compute='_compute_email', readonly=False, store=True)
      phone = fields.Char('Sponsor Phone', compute='_compute_phone', readonly=False, store=True)
      mobile = fields.Char('Sponsor Mobile', compute='_compute_mobile', readonly=False, store=True)
      # image
      image_512 = fields.Image(
          string="Logo", max_width=512, max_height=512,
          compute='_compute_image_512', readonly=False, store=True)
      image_256 = fields.Image("Image 256", related="image_512", max_width=256, max_height=256, store=False)
      image_128 = fields.Image("Image 128", related="image_512", max_width=128, max_height=128, store=False)
      website_image_url = fields.Char(
          string='Image URL',
          compute='_compute_website_image_url', compute_sudo=True, store=False)
  
      @api.depends('partner_id')
      def _compute_url(self):
          for sponsor in self:
              if sponsor.partner_id.website or not sponsor.url:
                  sponsor.url = sponsor.partner_id.website
  
      @api.depends('partner_id')
      def _compute_name(self):
          self._synchronize_with_partner('name')
  
      @api.depends('partner_id')
      def _compute_email(self):
          self._synchronize_with_partner('email')
  
      @api.depends('partner_id')
      def _compute_phone(self):
          self._synchronize_with_partner('phone')
  
      @api.depends('partner_id')
      def _compute_mobile(self):
          self._synchronize_with_partner('mobile')
  
      @api.depends('partner_id')
      def _compute_image_512(self):
          self._synchronize_with_partner('image_512')
  
      @api.depends('image_256', 'partner_id.image_256')
      def _compute_website_image_url(self):
          for sponsor in self:
              if sponsor.image_256:
                  sponsor.website_image_url = self.env['website'].image_url(sponsor, 'image_256', size=256)
              elif sponsor.partner_id.image_256:
                  sponsor.website_image_url = self.env['website'].image_url(sponsor.partner_id, 'image_256', size=256)
              else:
                  sponsor.website_image_url = get_resource_path('website_event_track', 'static/src/img', 'event_sponsor_default_%d.png' % (sponsor.id % 1))
  
      def _synchronize_with_partner(self, fname):
          """ Synchronize with partner if not set. Setting a value does not write
          on partner as this may be event-specific information. """
          for sponsor in self:
              if not sponsor[fname]:
                  sponsor[fname] = sponsor.partner_id[fname]
  
      # ------------------------------------------------------------
      # MESSAGING
      # ------------------------------------------------------------
  
      def _message_get_suggested_recipients(self):
          recipients = super(Sponsor, self)._message_get_suggested_recipients()
          for sponsor in self:
              if sponsor.partner_id:
                  sponsor._message_add_suggested_recipient(
                      recipients,
                      partner=sponsor.partner_id,
                      reason=_('Sponsor')
                  )
          return recipients
  