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

from datetime import datetime, timedelta
from odoo import models, fields, api


class Project(models.Model):
    _inherit = "project.project"

    privacy_visibility = fields.Selection([
            ('followers', 'On invitation only'),
            ('employees', 'Visible by all employees'),
            ('portal', 'Visible by following customers'),
        ],
        string='Confidentialité', required=True,
        default='employees')
    # Champs étape "Demande" => Vue générale
    name_subtitle = fields.Char("Sous-titre")
    first_contact_id = fields.Many2one(
        'res.partner',
        string='1er contact',
        domain=[
            ('active', '=', True), 
            ('is_company', '=', False)],
        on_delete='restrict')
    type_contact = fields.Selection([
        ('pdp', 'Porteur de projet'),
        ('adherent', 'Adhérent'),
        ('no_adherent', 'Non adhérent')],
        string="Type contact")
    date_first_contact = fields.Date(
        "Date de 1er contact",
        default=fields.Date.today)
    prescripteur_id = fields.Many2one(
        'res.partner',
        string='Prescripteur',
        domain=[
            ('active', '=', True), 
            ('is_company', '=', False)],
        on_delete='restrict')
    prescripteur_company_id = fields.Many2one(
        'res.partner',
        string='Structure prescripteur',
        domain=[
            ('active', '=', True), 
            ('is_company', '=', True)],
        on_delete='restrict')
    porteurs_projets_ids = fields.Many2many(
        comodel_name='res.partner.porteur.project',
        relation='res_partner_porteur_project_rel',
        column1='porteur_id',
        column2='project_id', 
        string="Porteurs de projet")
    description = fields.Text("Description")
    territoire_id = fields.Many2one(
        'res.partner',
        string='Territoire',
        domain=[
            ('active', '=', True), 
            ('is_company', '=', True),
            ('type_structure_id', '!=', False)],
        on_delete='restrict')
    user_id = fields.Many2one(
        'res.users', 
        string='CFD', 
        default=lambda self: self.env.user, 
        track_visibility="onchange")

    # Champs étape "Instruction" => Vue générale
    od_id = fields.Many2one(
        'res.partner',
        string='OD',
        domain=[
            ('active', '=', True), 
            ('is_company', '=', True)],
        on_delete='restrict')
    animateur_id = fields.Many2one(
        'res.partner',
        string='Animateur',
        domain=[
            ('active', '=', True), 
            ('is_company', '=', False)],
        on_delete='restrict')
    type_convention_id = fields.Many2one(
        'adefpat.type.convention', 
        string="Type de convention de financement")
    date_ca = fields.Date("Date de CA pressenti")
    date_start = fields.Date("Date de démarrage prévisionnel")
    # list_photos_ids = fields.One2many('images')
    # documents_ids = fields.One2many('ir.attachment', "Documents")

    # Champs étape "Instruction" => Onglet Dossier
    contexte = fields.Text("Contexte projet")
    caract_beneficiaire = fields.Text("Caractéristiques du bénéficiaire")
    historique = fields.Text("Historique & Aujourd’hui")
    besoins_beneficiaires = fields.Text("Besoins des bénéficiaires")
    objectifs_accompagnement = fields.Text("Objectifs d’accompagnement / compétences à acquérir (pour le bénéficiaire)")
    competences_requises = fields.Text("Compétences requises pour le consultant formateur")
    secteurs_requis = fields.Text("Secteurs d’activités dont la connaissance est requise pour le consultant formateur")
    modalites_intervention = fields.Text("Modalités d'intervention")
    modalites_facturation = fields.Text("Modalités de facturation")
    modalites_reponse = fields.Text("Modalités de réponse")

    # Infos dossier CA
    type_beneficiaire = fields.Selection(
        [],
        string="Type de bénéficiaires")
    objectif_projet = fields.Selection(
        [],
        string="Objectif projet")
    secteur_crit = fields.Selection(
        [],
        string="Secteur d'activité")
    taille = fields.Selection(
        [],
        string="Taille entreprise")
    objectif_formation = fields.Selection(
        [],
        string="Objectif formation")
    type_formation = fields.Selection(
        [],
        string="Type formation")
    encadrement = fields.Selection(
        [],
        string="Encadrement Aides")
    lieu = fields.Text("Lieu")
    periode_realisation = fields.Text("Période de réalisation")
    # duree_totale
    # info_budget

    # Champs étape "Instruction" => Onglet Consultation
    consulant_ids = fields.Many2many(
        comodel_name='res.partner.consultants.project',
        relation='res_partner_consultants_project_rel',
        column1='consultant_id',
        column2='project_id', 
        string="Consultants")

    # Champs étape "Instruction" => Onglet GAP
    elu_referent_id = fields.Many2one(
        'res.partner',
        string='Élu référent',
        domain=[
            ('active', '=', True), 
            ('is_company', '=', False)],
        on_delete='restrict')
    membre_ids = fields.Many2many(
        comodel_name='res.partner.membres.project',
        relation='res_partner_membres_project_rel',
        column1='membre_id',
        column2='project_id', 
        string="Membres")
    # documents_gap_ids = fields.One2many('ir.attachment', string="Documents GAP")
    modalite_gap = fields.Text("Modalités GAP")
    reunion_ids = fields.One2many(
        'adefpat.reunion.gap', 
        'project_id', 
        string="Réunions")

    # Champs étape "Prêt pour CA" => Onglet Général
    num_dossier = fields.Char("Numéro de dossier")

    @api.multi
    def validate_ca(self):
        for project in self:
            project.num_dossier = datetime.strftime(datetime.today(), '%y') + self.env['ir.sequence'].next_by_code(
                'increment_num_dossier')

    @api.onchange('prescripteur_id')
    def onchange_prescripteur_id(self):
        if self.prescripteur_id:
            self.prescripteur_company_id = False
            relation_model = self.env['res.partner.relation.all']
            relation_ids = relation_model.search([('this_partner_id', '=', self.prescripteur_id.id)])
            partner_list = relation_ids.mapped('other_partner_id.id')
            b = {'domain': {'prescripteur_company_id': [('id', 'in', partner_list)]}}
        else:
            b = {'domain': {'prescripteur_company_id': []}}
        return b


class AdefpatTypeConvention(models.Model):
    _name = 'adefpat.type.convention'
    _description = 'Liste type de convetion'

    name = fields.Char("Convention")


class AdefpatReunionGAP(models.Model):
    _name = 'adefpat.reunion.gap'
    _description = 'Réunions GAP'

    # document_ids = fields.One2many('ir.attachment', string="Documents")
    date = fields.Date("Date du GAP")
    project_id = fields.Many2one(
        'project.project',
        string='Projet',
        default=lambda self: self.env.context.get('default_project_id'))


class AdefpatMembresProjets(models.Model):
    _name = 'res.partner.membres.project'
    _description = 'Membres'

    partner_id = fields.Many2one(
        'res.partner',
        string='Membre',
        domain=[
            ('active', '=', True), 
            ('is_company', '=', False)],
        on_delete='restrict')
    structure_liee_id = fields.Many2one(
        'res.partner',
        string='Structure liée',
        domain=[
            ('active', '=', True), 
            ('is_company', '=', True)],
        on_delete='restrict')
    lastname = fields.Char(
        related='partner_id.lastname', 
        string="Nom",
        store=False)
    firstname = fields.Char(
        related='partner_id.firstname', 
        string="Prénom",
        store=False)
    commune = fields.Char(
        related='partner_id.city', 
        string="Commune",
        store=False)
    mobile = fields.Char(
        related='partner_id.mobile', 
        string="Mobile",
        store=False)
    fixe = fields.Char(
        related='partner_id.phone', 
        string="Fixe",
        store=False)
    email = fields.Char(
        related='partner_id.email', 
        string="Email",
        store=False)

    @api.onchange('partner_id')
    def onchange_prescripteur_id(self):
        if self.partner_id:
            self.structure_liee_id = False
            relation_model = self.env['res.partner.relation.all']
            relation_ids = relation_model.search([('this_partner_id', '=', self.partner_id.id)])
            partner_list = relation_ids.mapped('other_partner_id.id')
            b = {'domain': {'structure_liee_id': [('id', 'in', partner_list)]}}
        else:
            b = {'domain': {'structure_liee_id': []}}
        return b


class AdefpatConsultantsProjets(models.Model):
    _name = 'res.partner.consultants.project'
    _description = 'Consultants'

    partner_id = fields.Many2one(
        'res.partner',
        string='Consultant',
        domain=[
            ('active', '=', True), 
            ('is_company', '=', False),
            ('is_consultant_form', '=', True),
            '|', ('reference', '=', 'reference'),
            ('reference', '=', 'prereference')],
        on_delete='restrict')
    lastname = fields.Char(
        related='partner_id.lastname', 
        string="Nom",
        store=False)
    firstname = fields.Char(
        related='partner_id.firstname', 
        string="Prénom",
        store=False)
    mobile = fields.Char(
        related='partner_id.mobile', 
        string="Mobile",
        store=False)
    email = fields.Char(
        related='partner_id.email', 
        string="Email",
        store=False)
    reference = fields.Selection([
        ('reference', 'Référencé'),
        ('prereference', 'Pré-Référencé'),
        ('dereference', 'Dé-Référencé')],
        related='partner_id.reference',
        string="Référencement",
        store=False)
    date_cdc = fields.Date("Date d'envoi du CDC")
    cout_journée = fields.Float("Coût journée")
    # document_ids = fields.One2many('ir.attachment', string="Documents Consultants")
    date_selection = fields.Date("Date de sélection")
    date_notification = fields.Date("Date de notification")


class AdefpatPorteursProjets(models.Model):
    _name = 'res.partner.porteur.project'
    _description = 'Porteurs de projets'

    partner_id = fields.Many2one(
        'res.partner',
        string='Porteur de projet',
        domain=[
            ('active', '=', True), 
            ('is_company', '=', False)],
        on_delete='restrict')
    lastname = fields.Char(
        related='partner_id.lastname', 
        string="Nom",
        store=False)
    firstname = fields.Char(
        related='partner_id.firstname', 
        string="Prénom",
        store=False)
    commune = fields.Char(
        related='partner_id.city', 
        string="Commune",
        store=False)
    mobile = fields.Char(
        related='partner_id.mobile', 
        string="Mobile",
        store=False)
    fixe = fields.Char(
        related='partner_id.phone', 
        string="Fixe",
        store=False)
    email = fields.Char(
        related='partner_id.email', 
        string="Email",
        store=False)
    statut = fields.Selection(
        [],
        string="Statut")
    eligible = fields.Boolean(
        string="Eligible")