Skip to content
Extraits de code Groupes Projets
res_partner.py 13,3 ko
Newer Older
  • Learn to ignore specific revisions
  • Juliana's avatar
    Juliana a validé
    # © 2019 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
    
    from odoo.exceptions import ValidationError
    
    Juliana's avatar
    Juliana a validé
    
    
    class ScopPartner(models.Model):
        _inherit = "res.partner"
    
    
        def _default_company(self):
            return self.env['res.company']._company_default_get('res.partner')
    
    
    Juliana's avatar
    Juliana a validé
        # Infos générales
    
        is_cooperative = fields.Boolean("Est une coopérative")
    
    Juliana's avatar
    Juliana a validé
    
        # Informations organisme
    
        unique_id_si_ur = fields.Char("Identifiant unique SI UR")
        unique_id_si_cg = fields.Char("Identifiant unique SI CG")
    
    
        # Informations Bandeau
    
        project_status = fields.Selection(
    
            [('1_information', "Phase d'information"),
             ('2_pre-diagnostic', 'Phase de pré-diagnostic'),
             ('3_accompagnement', "Phase d'accompagnement"),
             ('4_adhesion', "Phase d'adhésion"),
             ('5_suivi', 'Phase de suivi'),
             ('6_abandonne', 'Projet abandonné')],
    
            track_visibility='onchange',
    
            string='Statut projet')
    
        cooperative_form_id = fields.Many2one(
            'res.partner.cooperative.form',
            string="Cooperative form",
            on_delete='restrict')
        partner_company_type_id = fields.Many2one(
            comodel_name='res.partner.company.type',
            string='Legal Form',
            on_delete='restrict')
        membership_status = fields.Selection(
            [('member', 'Adhérent'),
             ('not_member', 'Non Adhérent'),
             ('out', 'Radié')],
    
            string="Statut d'adhésion", default="not_member")
    
        member_number = fields.Char("No adhérent")
        cae = fields.Boolean("CAE")
    
        # Infos générales / Contact
        admin_email = fields.Char('E-mail administratif')
        facebook = fields.Char("Facebook")
        linkedin = fields.Char("LinkedIn")
        twitter = fields.Char("Twitter")
        director_ids = fields.One2many(
            'res.partner', 'parent_id',
            string='Contacts Dirigeants')
    
        # Infos générales / Suivi UR
        company_id = fields.Many2one(
            'res.company',
            string='Union Régionale',
            index=True,
            on_delete='restrict',
            default=_default_company)
    
        creation_delegate_id = fields.Many2one(
    
    Juliana's avatar
    Juliana a validé
            'res.partner',
            string='Délégué de création',
    
            domain=[('user_ids', '>', 0)],
            on_delete='restrict')
        followup_delegate_id = fields.Many2one(
    
    Juliana's avatar
    Juliana a validé
            'res.partner',
            string='Délégué de suivi',
    
            domain=[('user_ids', '>', 0)],
            on_delete='restrict')
    
        parent_group_name = fields.Char('Coopérative mère')
    
        # Infos générales / Infos activité
    
        creation_origin_id = fields.Many2one(
            'res.partner.creation.origin',
            string="Origine création en coop",
            domain=[('parent_id', '=', False)],
            on_delete='restrict')
    
        creation_suborigin_id = fields.Many2one(
    
            'res.partner.creation.origin',
    
            string="Sous-Origine création en coop",
    
            domain=[('child_ids', '=', False)],
    
            on_delete='restrict')
    
    Juliana's avatar
    Juliana a validé
        date_1st_sign = fields.Date(
    
            'Date 1er signature coop')
    
        registration_date = fields.Date(
            string="Date d'immatriculation RCS")
    
    Juliana's avatar
    Juliana a validé
        social_object = fields.Text('Objet Social')
    
    Rémi - Le Filament's avatar
    Rémi - Le Filament a validé
        naf_id = fields.Many2one(
            'res.partner.naf',
            string='Code NAF',
    
            on_delete='restrict')
    
        industry_id = fields.Many2one('res.partner.industry', 'Industry',
                                      on_delete='restrict')
        certification_ids = fields.Many2many(
            comodel_name='res.partner.certification',
            string='Agrément', on_delete='restrict')
        siret = fields.Char(string='SIRET', size=14)
        first_closeout = fields.Date(
            'Date clôture 1er bilan en coopérative')
        closeout_month = fields.Selection(
            [(1, 'Janvier'),
             (2, 'Février'),
             (3, 'Mars'),
             (4, 'Avril'),
             (5, 'Mai'),
             (6, 'Juin'),
             (7, 'Juillet'),
             (8, 'Août'),
             (9, 'Septembre'),
             (10, 'Octobre'),
             (11, 'Novembre'),
             (12, 'Décembre')],
            string='Mois clôture exercices', default=12)
    
        is_seed_scop = fields.Boolean("Est une SCOP d'amorçage")
    
        seed_end = fields.Date("Date de fin du dispositif d'amorçage",
    
    Juliana's avatar
    Juliana a validé
                               default=str(datetime.today() + timedelta(2556)),
                               compute='_compute_seen_end')
    
        is_incubated = fields.Boolean("Est incubé")
        incubator_id = fields.Many2one(
            'res.partner',
            string='Incubateur',
            domain=[('is_company', '=', True)],
            on_delete='restrict')
    
        prescriber_canal_id = fields.Many2one(
            'res.partner.prescriber.canal',
            string='Canal de Prescription',
    
            on_delete='restrict')
    
    
        # Infos juridiques
    
        siren = fields.Char(string='SIREN', size=9, compute='_compute_siren')
    
        dissolution_date = fields.Date('Date de Décès')
        dissolution_reason_id = fields.Many2one(
            'res.partner.dissolution.reason',
            string="Motif Décés",
            on_delete='restrict')
    
        # Partenaires
        bank_id = fields.Many2one(
    
            'res.partner',
    
            string='Banque principale',
    
            domain=[('is_company', '=', True)],
            on_delete='restrict')
    
        bank2_id = fields.Many2one(
    
            'res.partner',
    
            string='Banque secondaire',
    
            domain=[('is_company', '=', True)],
            on_delete='restrict')
    
        accountant_id = fields.Many2one(
    
            'res.partner',
    
            string='Expert-Comptable',
            domain=[('is_company', '=', True)],
    
            on_delete='restrict')
    
        accountant_person_id = fields.Many2one(
    
            'res.partner',
    
            string='Expert-Comptable (personne)',
    
            domain=[('is_company', '=', False)],
            on_delete='restrict')
    
        auditor_id = fields.Many2one(
            'res.partner',
            string='Commissaire aux Comptes',
            domain=[('is_company', '=', True)],
            on_delete='restrict')
        auditor_person_id = fields.Many2one(
            'res.partner',
            string='Commissaire aux Comptes (personne)',
            domain=[('is_company', '=', False)],
    
            on_delete='restrict')
    
        # Contacts / Adresses
        is_main_location = fields.Boolean("Est l'établissement principal")
    
    Juliana's avatar
    Juliana a validé
    
    
        # Périodes juridiques
        scop_period_ids = fields.One2many(
            comodel_name='scop.period',
            inverse_name='partner_id',
            string="Périodes Juridiques")
    
    Juliana's avatar
    Juliana a validé
    
        # Période d'adhésion
        membership_period_ids = fields.One2many(
    
            comodel_name='scop.membership.period',
    
    Juliana's avatar
    Juliana a validé
            inverse_name='partner_id',
    
            string="Périodes d'adhésion")
    
    Juliana's avatar
    Juliana a validé
    
        # Cotisation
        contribution_ids = fields.One2many(
    
            comodel_name='scop.contribution',
    
    Juliana's avatar
    Juliana a validé
            inverse_name='partner_id',
            string='Cotisations')
    
        # Liste Ministère
    
        direccte_id = fields.Many2one(
            'res.partner',
            string='DIRECCTE rattachée',
            domain=[('is_company', '=', True)],
            on_delete='restrict')
        last_update_status = fields.Date('Dernière mise à jour des statuts')
    
    Juliana's avatar
    Juliana a validé
        ministry_list_ids = fields.One2many(
    
            comodel_name='scop.ministry.list',
    
    Juliana's avatar
    Juliana a validé
            inverse_name='partner_id',
            string='Liste Ministère')
    
        # Questionnaire
        questionnaire_ids = fields.One2many(
    
            comodel_name='scop.questionnaire',
    
    Juliana's avatar
    Juliana a validé
            inverse_name='partner_id',
    
            string='Questionnaire')
    
    Juliana's avatar
    Juliana a validé
    
        # Liasse fiscale
        liasse_fiscale_ids = fields.One2many(
    
            comodel_name='scop.liasse.fiscale',
    
    Juliana's avatar
    Juliana a validé
            inverse_name='partner_id',
    
            string='Liasses Fiscales')
    
    Juliana's avatar
    Juliana a validé
    
        # Révisions
    
        revision_contract = fields.Date("Date du contrat de révision")
        revision_company_id = fields.Many2one(
            'res.partner',
            string='Organisme de révision',
            domain=[('is_company', '=', True)],
            on_delete='restrict')
        revision_backup_company_id = fields.Many2one(
            'res.partner',
            string='Organisme de révision suppléant',
            domain=[('is_company', '=', True)],
            on_delete='restrict')
        revision_person_id = fields.Many2one(
            'res.partner',
            string='Réviseur',
            domain=[('is_company', '=', False)],
            on_delete='restrict')
        revision_certified_person_id = fields.Many2one(
            'res.partner',
            string='Réviseur agréé',
            domain=[('is_company', '=', False)],
            on_delete='restrict')
        revision_person_assign_date = fields.Date("Date de nomination du réviseur")
        revision_type = fields.Selection(
            [('1y', "Annuelle"),
             ('5y', 'Quinquennale'),
             ('5ys', "Quinquennale séquencée")],
            string='Périodicité de la révision')
        revision_format_id = fields.Many2one(
            'scop.revision.format',
            string='Format de révision',
            on_delete='restrict')
        revision_last_date = fields.Date("Dernier exercice révisé")
        revision_next_date = fields.Date("Prochain exercice révisable")
    
        revision_staff = fields.Integer(string='Effectif révision')
    
    Juliana's avatar
    Juliana a validé
        revision_ids = fields.One2many(
    
            comodel_name='scop.revision',
    
    Juliana's avatar
    Juliana a validé
            inverse_name='partner_id',
    
            string='Liste des Révisions')
    
    Juliana's avatar
    Juliana a validé
    
        # Evènements juridiques
        legal_event_ids = fields.One2many(
    
            comodel_name='scop.legal.event',
    
    Juliana's avatar
    Juliana a validé
            inverse_name='partner_id',
    
            string='Evènements Juridiques')
    
    Juliana's avatar
    Juliana a validé
    
        # Outils financiers
        financial_tools_ids = fields.One2many(
    
            comodel_name='scop.financial.tools',
    
    Juliana's avatar
    Juliana a validé
            inverse_name='partner_id',
            string='Outils financiers')
    
        # Champs pour contacts
    
        birthyear = fields.Integer("Année de naissance")
        education_level = fields.Selection([
    
    Juliana's avatar
    Juliana a validé
            ('licence', 'Licence'),
            ('master', 'Master')],
            "Niveau d'étude")
    
        education_domain = fields.Selection([
    
    Juliana's avatar
    Juliana a validé
            ('science', 'Science')],
            "Domaine d'étude")
    
        subscription_ids = fields.One2many(
    
            comodel_name='res.partner.newsletter.subscription',
            inverse_name='partner_id',
            string='Abonnements')
        contact_origin_id = fields.Many2one(
            'res.partner.rgpd.origin',
            string="Origine du contact",
            on_delete='restrict')
        contact_legality = fields.Selection(
            [("employee", "Salarié"),
             ("customer", "Client en contrat"),
             ("supplier", "Fournisseur en contrat"),
             ("consent", "Consentement"),
             ("legitimate", "Intérêt légitime"),
             ("none", "Aucune")],
            string="Licéité du contact", default="none")
    
    
        @api.multi
        def open_facebook(self):
            self.ensure_one()
            return {
                "type": "ir.actions.act_url",
                "url": self.facebook,
            }
    
        @api.multi
        def open_linkedin(self):
            self.ensure_one()
            return {
                "type": "ir.actions.act_url",
                "url": self.linkedin,
            }
    
        @api.multi
        def open_twitter(self):
            self.ensure_one()
            return {
                "type": "ir.actions.act_url",
                "url": self.twitter,
            }
    
    
        @api.onchange('creation_origin_id')
        def onchange_creation_origin_id(self):
            for coop in self:
                coop.creation_suborigin_id = False
    
    
        @api.model
        def _compute_siren(self):
            for company in self:
    
                if company.siret:
                    company.siren = company.siret[:9]
    
    Juliana's avatar
    Juliana a validé
        @api.model
        def _compute_seen_end(self):
            for company in self:
                if company.date_1st_sign:
                    company.seed_end = company.date_1st_sign + timedelta(2556)
                else:
                    company.seed_end = str(datetime.today() + timedelta(2556))
    
    
    class ResPartneCertification(models.Model):
        _name = "res.partner.certification"
        _description = "Certification"
    
        name = fields.Char('Certification')
    
        color = fields.Integer('Couleur Index')
    
    class ResPartnerCooperativeForm(models.Model):
        _name = "res.partner.cooperative.form"
        _description = "Cooperative form"
    
        name = fields.Char('Cooperative form')
    
    class ResPartnerCreationOrigin(models.Model):
        _name = "res.partner.creation.origin"
        _description = "Creation Origin"
        _parent_name = "parent_id"
        _parent_store = True
        _rec_name = 'name'
        _order = 'id'
    
        name = fields.Char('Origine / Sous-Origine', index=True, required=True)
        parent_id = fields.Many2one(
            comodel_name='res.partner.creation.origin',
            string='Origine (parent)',
            index=True,
            ondelete='restrict')
        parent_path = fields.Char(index=True)
        child_ids = fields.One2many(
            comodel_name='res.partner.creation.origin',
            inverse_name='parent_id',
            string='Sous origines')
        id_riga = fields.Integer("ID RIGA")
    
        @api.constrains('parent_id')
        def _check_origin_recursion(self):
            if not self._check_recursion():
                raise ValidationError(
                    'Vous ne pouvez pas créer des origines récusrives.')
            return True
    
    class ResPartnerDissolutionReason(models.Model):
        _name = "res.partner.dissolution.reason"
        _description = "Dissolution Reason"
    
        name = fields.Char('Dissolution Reason')
    
    Juliana's avatar
    Juliana a validé
    
    
    class ResPartnerPrescriberCanal(models.Model):
        _name = "res.partner.prescriber.canal"
        _description = "Prescriber Canal"
    
    Juliana's avatar
    Juliana a validé
    
    
        name = fields.Char('Prescriber Canal')
    
    Juliana's avatar
    Juliana a validé
    
    
    
    class ResPartnerRgpdOrigin(models.Model):
        _name = "res.partner.rgpd.origin"
    
    Juliana's avatar
    Juliana a validé
        _description = "Origin"
    
        name = fields.Char('Origin')
    
    
    
    class ResPartnerTypeOrganization(models.Model):
        _name = "res.partner.organization.type"
        _description = "Organization Type"
    
        name = fields.Char('Organization Type')