# © 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 class ScopPartner(models.Model): _inherit = "res.partner" def _default_company(self): return self.env['res.company']._company_default_get('res.partner') # Infos générales is_cooperative = fields.Boolean("Est une coopérative") # Informations organisme # A garder ? 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( 'res.partner', string='Délégué de création', domain=[('user_ids', '>', 0)], on_delete='restrict') followup_delegate_id = fields.Many2one( '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') date_1st_sign = fields.Date( 'Date 1er signature coop') registration_date = fields.Date( string="Date d'immatriculation RCS") social_object = fields.Char('Objet Social') 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", default=str(datetime.today() + timedelta(2556))) 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") # Périodes juridiques scop_period_ids = fields.One2many( comodel_name='scop.period', inverse_name='partner_id', string="Périodes Juridiques") # Période d'adhésion membership_period_ids = fields.One2many( comodel_name='scop.membership.period', inverse_name='partner_id', string="Périodes d'adhésion") # Cotisation contribution_ids = fields.One2many( comodel_name='scop.contribution', 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') ministry_list_ids = fields.One2many( comodel_name='scop.ministry.list', inverse_name='partner_id', string='Liste Ministère') # Questionnaire questionnaire_ids = fields.One2many( comodel_name='scop.questionnaire', inverse_name='partner_id', string='Questionnaire') # Liasse fiscale liasse_fiscale_ids = fields.One2many( comodel_name='scop.liasse.fiscale', inverse_name='partner_id', string='Liasses Fiscales') # 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_id = fields.Integer(string='Effectif révision') revision_ids = fields.One2many( comodel_name='scop.revision', inverse_name='partner_id', string='Liste des Révisions') # Evènements juridiques legal_event_ids = fields.One2many( comodel_name='scop.legal.event', inverse_name='partner_id', string='Evènements Juridiques') # Outils financiers financial_tools_ids = fields.One2many( comodel_name='scop.financial.tools', inverse_name='partner_id', string='Outils financiers') # Champs pour contacts birthyear = fields.Integer("Année de naissance") education_level = fields.Selection([ ('licence', 'Licence'), ('master', 'Master')], "Niveau d'étude") education_domain = fields.Selection([ ('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: company.siren = company.siret[:9] 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') class ResPartnerPrescriberCanal(models.Model): _name = "res.partner.prescriber.canal" _description = "Prescriber Canal" name = fields.Char('Prescriber Canal') class ResPartnerRgpdOrigin(models.Model): _name = "res.partner.rgpd.origin" _description = "Origin" name = fields.Char('Origin') class ResPartnerTypeOrganization(models.Model): _name = "res.partner.organization.type" _description = "Organization Type" name = fields.Char('Organization Type')