Newer
Older
# 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([
('adherent', 'Adhérent'),
('no_adherent', 'Non adhérent'),
('pdp', 'Porteur de projet'),
],

Juliana
committed
"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')
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),
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
('type_structure_id', '=', 'ComCom')],
on_delete='restrict')
departement_ids = fields.Many2many(
comodel_name='res.partner',
relation='res_partner_departement_rel',
column1='partner_id',
column2='departement_id',
domain=[
('active', '=', True),
('is_company', '=', True),
('type_structure_id.name', '=', 'Département')],
string="Départements",
related='territoire_id.departement_ids')
region_ids = fields.Many2many(
comodel_name='res.partner',
relation='res_partner_region_rel',
column1='partner_id',
column2='region_id',
domain=[
('active', '=', True),
('is_company', '=', True),
('type_structure_id.name', '=', 'Région')],
string="Régions",
related='territoire_id.region_ids')
petr_ids = fields.Many2many(
comodel_name='res.partner',
relation='res_partner_petr_rel',
column1='partner_id',
column2='petr_id',
domain=[
('active', '=', True),
('is_company', '=', True),
('type_structure_id.name', '=', 'PETR/PNR')],
string="PETR/PNR",
related='territoire_id.petr_ids')
departement_id = fields.Many2one(
'res.partner',
string='Département du Projet',
domain=[
('active', '=', True),
('is_company', '=', True),
('type_structure_id', '=', 'Département')],

Juliana
committed
'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')
string='Elu qui présente le dossier',
domain=[
('active', '=', True),
('is_company', '=', False)],
on_delete='restrict')
animateur_ids = fields.Many2many(
comodel_name = 'res.partner',
column1='project_id',
column2='anim_id',
relation='res_partner_anim_rel',
string='Animateurs',
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)],
date_demarrage = 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(
# [
# ('administrateur', 'Administrateur'),
# ('agriculteur', 'Agriculteur'),
# ('charge_dev', "Chargé de développement"),
# ('demandeur', "Demandeur d'emploi"),
# ('dirigeant', "Dirigeant"),
# ('elu', 'Élu'),
# ('inactif', 'Inactif'),
# ('salaries', "Salariés")
# ],
# string="Type de bénéficiaires")
type_beneficiaire = fields.Char("Type de bénéficiares", compute='_compute_type_beneficiaire')
[
('creation', "Création d'entreprise"),
('creation_activite', 'Création nouvelle activité'),
('consolidation', 'Consolidation'),
('emergence', 'Émergence'),
('operation', "Opération territoriale pour les entreprises"),
('post_creation', 'Post-création'),
('post_reprise', 'Post-reprise'),
('projet_inter', 'Projet inter-entreprise'),
('projet_structurant', 'Projet structurant territoire'),
('reprise', 'Reprise'),
('transmission', 'Transmission'),
('agro_alimentaire', 'Agro-alimentaire'),
('artisanat', 'Artisanat - Commerce - Industrie'),
('culture', 'Culture'),
('environnement', 'Environnement'),
('intersectoriel', 'Intersectoriel'),
('service', 'Service'),
('service', 'Services à la population'),
('tourisme', 'Tourisme - Hôtellerie - Restauration'),
[
('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'),
('gestion_prod', 'Gestion de production'),
('gestion_financ', 'Gestion financière'),
('marketing', "Marketing - Commercialisation - Promotion - Communication"),
('management', 'Management - Organisation - RH'),
('orga_collective', 'Organisation collective'),
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'),
],
[
('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")
# Info Budget
nb_jours_adefpat = fields.Float("Nombre de jours Adefpat")
cout_jour_adefpat = fields.Float("Coût jour Adefpat")
total_cout_adefpat = fields.Float("Total coûts Adefpat", compute='_compute_total_cout_adefpat')
autofinancement = fields.Float("Autofinancement")
financement_ids = fields.One2many(
'adefpat.project.financement',
'project_id',
string="Financements")
cout_ids = fields.One2many(
'adefpat.project.cout',
'project_id',
string="Coûts")
honoraire_intervenant = fields.Float(
"Honoraires d'intervenants")
# 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")
date_selection = fields.Date("Date de sélection")
date_notification = fields.Date("Date de notification")
date_cdc = fields.Date("Date d'envoi du CDC")
# 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 _compute_total_cout_adefpat(self):
for project in self:
if project.nb_jours_adefpat and project.cout_jour_adefpat:
project.total_cout_adefpat = project.nb_jours_adefpat * project.cout_jour_adefpat
@api.depends('porteurs_projets_ids',
'porteurs_projets_ids.statut', )
@api.multi
def _compute_type_beneficiaire(self):
for project in self:
list_benef = []
for porteur in project.porteurs_projets_ids:
if porteur.statut:
list_benef.append(porteur.statut.name)
project.type_beneficiaire = list(dict.fromkeys(list_benef))
@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')
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é")
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
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')
lastname = fields.Char(
related='partner_id.lastname',

Juliana
committed
string="Nom",
store=False)
firstname = fields.Char(
related='partner_id.firstname',
string="Prénom",

Juliana
committed
store=False)
commune = fields.Char(
related='partner_id.city',
string="Commune",

Juliana
committed
store=False)
mobile = fields.Char(
related='partner_id.mobile',
string="Mobile",

Juliana
committed
store=False)
fixe = fields.Char(
related='partner_id.phone',
string="Fixe",

Juliana
committed
store=False)
email = fields.Char(
related='partner_id.email',
string="Email",

Juliana
committed
store=False)
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',

Juliana
committed
string="Nom",
store=False)

Juliana
committed
string="Prénom",
store=False)

Juliana
committed
string="Mobile",
store=False)

Juliana
committed
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',

Juliana
committed
string="Référencement",
store=False)
cout_journée = fields.Float("Coût journée")
# document_ids = fields.One2many('ir.attachment', string="Documents Consultants")
is_selected = fields.Boolean("Est sélectionné")
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
committed
string="Nom",
store=False)

Juliana
committed
string="Prénom",
store=False)

Juliana
committed
string="Commune",
store=False)

Juliana
committed
string="Mobile",
store=False)

Juliana
committed
string="Fixe",
store=False)

Juliana
committed
string="Email",
store=False)
statut = fields.Many2one(
'adefpat.project.statut',
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
string="Eligible")
class AdefpatStatut(models.Model):
_name = 'adefpat.project.statut'
_description = 'Statut'
name = fields.Char("Statut")
class AdefpatFinancement(models.Model):
_name = 'adefpat.project.financement'
_description = 'Financements'
partner_id = fields.Many2one(
'res.partner',
string='Personne ou structure',
domain=[
('active', '=', True)],
on_delete='restrict')
montant = fields.Float("Montant")
project_id = fields.Many2one(
'project.project',
string='Projet',
default=lambda self: self.env.context.get('default_project_id'))
class AdefpatCout(models.Model):
_name = 'adefpat.project.cout'
_description = 'Coûts'
module = fields.Char("Nom du module")
partner_id = fields.Many2one(
'res.partner',
string='Personne ou structure',
domain=[
('active', '=', True)],
on_delete='restrict')
nb_jour_theorique = fields.Float("Nombre de jours théoriques")
nb_jour_pratiques = fields.Float("Nombre de jours pratiques")
cout_jour = fields.Float("Coût jour")
project_id = fields.Many2one(
'project.project',
string='Projet',
default=lambda self: self.env.context.get('default_project_id'))