# 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', domain=[ '|', ('date_end_validity', '>=', fields.Date.today()), ('date_end_validity', '=', False)], 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( [ ('demandeur', "Demandeur d'emploi"), ('dirigeant', "Dirigeant"), ('salaries', "Salariés"), ('agriculteur', 'Agriculteur'), ('elu', 'Élu'), ('inactif', 'Inactif'), ('administrateur', 'Administrateur'), ('charge_dev', "Chargé de développement") ], 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'), ], 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'), ], string="Secteur d'activité") taille = fields.Selection( [ ('inf_10', "De 10 à 250"), ('sup_10', "< 10 salariés") ], 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'), ], 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'), ], string="Type formation") encadrement = fields.Selection( [ ('minimis', 'De minimis'), ('neant', 'Neant'), ('encadrement', 'Encadrement des aides à la formation') ], 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") date_end_validity = fields.Date("Date de fin de validité") 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( [ ('demandeur', "Demandeur d'emploi"), ('dirigeant', "Dirigeant"), ('salaries', "Salariés"), ('agriculteur', 'Agriculteur'), ('elu', 'Élu'), ('inactif', 'Inactif'), ('administrateur', 'Administrateur'), ('charge_dev', "Chargé de développement") ], string="Statut") eligible = fields.Boolean( string="Eligible")