# © 2019 Le Filament (<http://www.le-filament.com>)
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).

from odoo import models, fields, api
from odoo.exceptions import UserError


class CGScopCalendar(models.Model):
    _inherit = 'calendar.event'

    @api.model
    def _default_coop_id(self):
        if self.env.context.get('default_res_model') == 'res.partner':
            if self.env.context.get('default_res_id'):
                return self.env['res.partner'].browse(self.env.context.get('default_res_id'))
        return False

    def _default_ur(self):
        return self.env['res.company']._ur_default_get()

    type = fields.Selection([
        ('outside', 'Extérieur'),
        ('ur', 'UR'),
        ('absent', 'Absence, Congés, Divers')],
        string="Type de Réunion")
    location = fields.Text()
    coop_id = fields.Many2one(
        comodel_name='res.partner',
        string='Contact',
        domain=[('is_company', '=', 'True')],
        default=_default_coop_id)
    project_id = fields.Many2one(
        comodel_name="project.project",
        string="Code Activité UR",
        domain=[('allow_timesheets', '=', True)])
    cgscop_timesheet_code_id = fields.Many2one(
        related='project_id.cgscop_timesheet_code_id',
        string='Code Activité National',
        store=True)
    ur_financial_system_id = fields.Many2one(
        comodel_name='ur.financial.system',
        string='Dispositif Financier')
    ur_id = fields.Many2one(
        'union.regionale',
        string='Union Régionale',
        index=True,
        on_delete='restrict',
        default=_default_ur)
    ur_financial_system_nb = fields.Integer(
        string="Nb Dispositifs Financiers",
        compute="_compute_ur_financial_system_nb")

    # ------------------------------------------------------
    # Compute
    # ------------------------------------------------------
    @api.depends('ur_id')
    def _compute_ur_financial_system_nb(self):
        for event in self:
            financial_system = event.env['ur.financial.system'].search([
                ('ur_id', '=', event.ur_id.id)])
            event.ur_financial_system_nb = len(
                financial_system)

    # ------------------------------------------------------
    # Onchange
    # ------------------------------------------------------
    @api.onchange('project_id')
    def _onchange_project_id(self):
        if self.project_id.partner_id:
            self.coop_id = self.project_id.partner_id

    @api.onchange('coop_id')
    def _onchange_coop_id(self):
        address = ''
        if self.coop_id.street:
            address += self.coop_id.street + '\n'
        if self.coop_id.street2:
            address += self.coop_id.street2 + '\n'
        if self.coop_id.street3:
            address += self.coop_id.street3 + '\n'
        if self.coop_id.zip:
            address += self.coop_id.zip + ' '
        if self.coop_id.city:
            address += self.coop_id.city
        self.location = address

    # ------------------------------------------------------
    # Fonction boutons
    # ------------------------------------------------------
    @api.multi
    def create_timesheet(self):
        """ Crée une ligne de temps à partir de l'entrée d'agenda
        """
        for event in self:
            if not event.project_id.analytic_account_id:
                raise UserError("Le code activité UR doit être \
                                renseigné sur chaque entrée d'agenda")
            else:
                self.env['account.analytic.line'].create({
                    'user_id': self.env.user.id,
                    'project_id': event.project_id.id,
                    'account_id': event.project_id.analytic_account_id.id,
                    'ur_financial_system_id': event.ur_financial_system_id.id,
                    'date': event.start,
                    'name': event.name,
                    'company_id': self.env.user.company_id.id,
                    'unit_amount': event.duration if not event.allday else 8.0,
                    'partner_id': event.coop_id.id,
                })
                # event.is_transfered = True