Skip to content
Snippets Groups Projects
project.py 14.3 KiB
Newer Older
  • Learn to ignore specific revisions
  • Juliana's avatar
    Juliana committed
    # 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')
    
    Juliana's avatar
    Juliana committed
        # 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)
    
    Juliana's avatar
    Juliana committed
        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(
    
            string='CFD', 
            default=lambda self: self.env.user, 
            track_visibility="onchange")
    
    Juliana's avatar
    Juliana committed
    
        # 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', 
    
            domain=[
                '|', ('date_end_validity', '>=', fields.Date.today()),
                ('date_end_validity', '=', False)],
    
    Juliana's avatar
    Juliana committed
            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")
    
    Juliana's avatar
    Juliana committed
        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(
    
            [
                ('demandeur', "Demandeur d'emploi"),
                ('dirigeant', "Dirigeant"),
                ('salaries', "Salariés"),
                ('agriculteur', 'Agriculteur'),
                ('elu', 'Élu'),
                ('inactif', 'Inactif'),
                ('administrateur', 'Administrateur'),
                ('charge_dev', "Chargé de développement")
            ],
    
    Juliana's avatar
    Juliana committed
            string="Type de bénéficiaires")
        objectif_projet = fields.Selection(
    
            [
                ('creation', "Création d'entreprise"),
                ('post_creation', 'Post-création'),
                ('reprise', 'Reprise'),
                ('operation', "Opération territoriale pour les entreprises"),
                ('emergence', 'Émergence'),
                ('consolidation', 'Consolidation'),
                ('creation_activite', 'Création nouvelle activité'),
                ('transmission', 'Transmission'),
                ('post_reprise', 'Post-reprise'),
                ('projet_inter', 'Projet inter-entreprise'),
                ('projet_structurant', 'Projet structurant territoire'),
            ],
    
    Juliana's avatar
    Juliana committed
            string="Objectif projet")
        secteur_crit = fields.Selection(
    
            [
                ('agro_alimentaire', 'Agro-alimentaire'),
                ('service', 'Service'),
                ('tourisme', 'Tourisme - Hôtellerie - Restauration'),
                ('artisanat', 'Artisanat - Commerce - Industrie'),
                ('intersectoriel', 'Intersectoriel'),
                ('environnement', 'Environnement'),
                ('culture', 'Culture'),
                ('agriculture', 'Agriculture'),
                ('service', 'Services à la population'),
            ],
    
    Juliana's avatar
    Juliana committed
            string="Secteur d'activité")
        taille = fields.Selection(
    
            [
                ('inf_10', "De 10 à 250"),
                ('sup_10', "< 10 salariés")
            ],
    
    Juliana's avatar
    Juliana committed
            string="Taille entreprise")
        objectif_formation = fields.Selection(
    
            [
                ('def_projet', "Définition de projet"),
                ('def_modele_eco', "Définition d'un modèle économique"),
                ('def_strat_com', "Définition d'une stratégie de développement"),
                ('diagnostic', 'Diagnostic stratégique'),
                ('marketing', "Marketing  - Commercialisation - Promotion - Communication"),
                ('orga_collective', 'Organisation collective'),
                ('gestion_prod', 'Gestion de production'),
                ('gestion_financ', 'Gestion financière'),
                ('management', 'Management - Organisation - RH'),
            ],
    
    Juliana's avatar
    Juliana committed
            string="Objectif formation")
        type_formation = fields.Selection(
    
            [
                ('individuelle', 'Générale individuelle'),
                ('collective', 'Générale collective'),
                ('indiv_collect', 'Générale collective individualisée'),
            ],
    
    Juliana's avatar
    Juliana committed
            string="Type formation")
        encadrement = fields.Selection(
    
            [
                ('minimis', 'De minimis'),
                ('neant', 'Neant'),
                ('encadrement', 'Encadrement des aides à la formation')
            ],
    
    Juliana's avatar
    Juliana committed
            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")
    
    Juliana's avatar
    Juliana committed
    
        # 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
    
    
    Juliana's avatar
    Juliana committed
    
    class AdefpatTypeConvention(models.Model):
        _name = 'adefpat.type.convention'
        _description = 'Liste type de convetion'
    
        name = fields.Char("Convention")
    
        date_end_validity = fields.Date("Date de fin de validité")
    
    Juliana's avatar
    Juliana committed
    
    
    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')
    
    Juliana's avatar
    Juliana committed
        lastname = fields.Char(
            related='partner_id.lastname', 
    
    Juliana's avatar
    Juliana committed
        firstname = fields.Char(
            related='partner_id.firstname', 
            string="Prénom",
    
    Juliana's avatar
    Juliana committed
        commune = fields.Char(
            related='partner_id.city', 
            string="Commune",
    
    Juliana's avatar
    Juliana committed
        mobile = fields.Char(
            related='partner_id.mobile', 
            string="Mobile",
    
    Juliana's avatar
    Juliana committed
        fixe = fields.Char(
            related='partner_id.phone', 
            string="Fixe",
    
    Juliana's avatar
    Juliana committed
        email = fields.Char(
            related='partner_id.email', 
            string="Email",
    
    Juliana's avatar
    Juliana committed
    
    
        @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
    
    
    Juliana's avatar
    Juliana committed
    
    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')],
    
    Juliana's avatar
    Juliana committed
            on_delete='restrict')
        lastname = fields.Char(
            related='partner_id.lastname', 
    
    Juliana's avatar
    Juliana committed
        firstname = fields.Char(
            related='partner_id.firstname', 
    
    Juliana's avatar
    Juliana committed
        mobile = fields.Char(
            related='partner_id.mobile', 
    
    Juliana's avatar
    Juliana committed
        email = fields.Char(
            related='partner_id.email', 
    
    Juliana's avatar
    Juliana committed
        reference = fields.Selection([
            ('reference', 'Référencé'),
            ('prereference', 'Pré-Référencé'),
            ('dereference', 'Dé-Référencé')],
            related='partner_id.reference',
    
    Juliana's avatar
    Juliana committed
        date_cdc = fields.Date("Date d'envoi du CDC")
    
        cout_journée = fields.Float("Coût journée")
    
    Juliana's avatar
    Juliana committed
        # 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', 
    
    Juliana's avatar
    Juliana committed
        firstname = fields.Char(
            related='partner_id.firstname', 
    
    Juliana's avatar
    Juliana committed
        commune = fields.Char(
            related='partner_id.city', 
    
    Juliana's avatar
    Juliana committed
        mobile = fields.Char(
            related='partner_id.mobile', 
    
    Juliana's avatar
    Juliana committed
        fixe = fields.Char(
            related='partner_id.phone', 
    
    Juliana's avatar
    Juliana committed
        email = fields.Char(
            related='partner_id.email', 
    
    Juliana's avatar
    Juliana committed
        statut = fields.Selection(
    
            [
                ('demandeur', "Demandeur d'emploi"),
                ('dirigeant', "Dirigeant"),
                ('salaries', "Salariés"),
                ('agriculteur', 'Agriculteur'),
                ('elu', 'Élu'),
                ('inactif', 'Inactif'),
                ('administrateur', 'Administrateur'),
                ('charge_dev', "Chargé de développement")
            ],
    
    Juliana's avatar
    Juliana committed
            string="Statut")
        eligible = fields.Boolean(
            string="Eligible")