Newer
Older
# © 2019 Le Filament (<http://www.le-filament.com>)
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
from odoo import _, api, fields, models
from odoo.exceptions import ValidationError

Benjamin - Le Filament
a validé
return self.env["res.company"]._ur_default_get()

Benjamin - Le Filament
a validé
return self.env.ref("base.fr", False)
@api.model
def _get_domain_incubator_id(self):
try:
incubator_id = self.env.ref("cgscop_partner.incubator").id

Benjamin - Le Filament
a validé
return [
("is_company", "=", True),
("organization_subtype_id", "=", incubator_id),

Benjamin - Le Filament
a validé
]
return [("is_company", "=", True)]

Benjamin - Le Filament
a validé
@api.model
def _get_domain_revision_company_id(self):
try:
rev_id = self.env.ref("cgscop_partner.riga_14953").id
com_id = self.env.ref("cgscop_partner.riga_16433").id

Benjamin - Le Filament
a validé
return [
("is_company", "=", True),
("organization_subtype_id", "in", [com_id, rev_id]),

Benjamin - Le Filament
a validé
]
return [("is_company", "=", True)]
is_cooperative = fields.Boolean("Est une coopérative")

Benjamin - Le Filament
a validé
"union.regionale",

Benjamin - Le Filament
a validé
compute="_compute_current_user_ur_id",
search="_search_current_user_ur_id",
)
# Informations organisme - champs non affichés
id_ur = fields.Char("Identifiant UR")
id_riga = fields.Char("Identifiant RIGA")

Benjamin - Le Filament
a validé
[
("1_information", "Phase d'information"),
("2_pre-diagnostic", "Phase de pré-diagnostic"),
("3_accompagnement", "Phase d'accompagnement projet"),
("4_adhesion", "Phase d'adhésion"),
("5_cg", "Soumis CGScop"),
("6_suivi", "Phase de suivi"),
("7_abandonne", "Projet abandonné"),
],
tracking=True,
string="Statut projet",
index=True,
)
name = fields.Char(index=True, tracking=True)
cooperative_form_id = fields.Many2one(

Benjamin - Le Filament
a validé
"res.partner.cooperative.form",

Benjamin - Le Filament
a validé
ondelete="restrict",
tracking=True,
)
partner_company_type_id = fields.Many2one(

Benjamin - Le Filament
a validé
comodel_name="res.partner.company.type",
string="Statut Juridique",
ondelete="restrict",
tracking=True,
)
membership_status = fields.Selection(

Benjamin - Le Filament
a validé
[
("member", "Adhérent"),
("not_member", "Non Adhérent"),
("out", "Radié"),
],
string="Statut d'adhésion",

Benjamin - Le Filament
a validé
compute="_compute_membership",
store=True,
)
member_number = fields.Char(

Benjamin - Le Filament
a validé
"No adhérent (texte)", compute="_compute_membership", store=True
)
member_number_int = fields.Integer(
"No adhérent",

Benjamin - Le Filament
a validé
compute="_compute_membership_int",
store=True,
group_operator="",
)

Benjamin - Le Filament
a validé
compute="_compute_membership",
store=True,
)

Benjamin - Le Filament
a validé
"Date d'adhésion", compute="_compute_membership", store=True
)
cae = fields.Boolean("CAE", tracking=True)
dissolution_date = fields.Date("Date de Décès", tracking=True)

Benjamin - Le Filament
a validé
"res.partner.dissolution.reason",

Benjamin - Le Filament
a validé
ondelete="restrict",
tracking=True,
)

Benjamin - Le Filament
a validé
street = fields.Char("Rue", tracking=True)
street2 = fields.Char("Rue 2", tracking=True)
street3 = fields.Char("Rue 3", tracking=True)
zip = fields.Char("CP", change_default=True, tracking=True)

Benjamin - Le Filament
a validé
"Num Département", compute="_compute_num_departement", store=True
)

Benjamin - Le Filament
a validé
region = fields.Many2one(

Benjamin - Le Filament
a validé
comodel_name="res.country.state",
string="Région",
compute="_compute_region",
store=True,
)
city = fields.Char("Ville", tracking=True)
cedex = fields.Char("Cedex", tracking=True)
country_id = fields.Many2one(
"res.country",
string="Pays",
ondelete="restrict",
default=_default_country,
tracking=True,
)
phone = fields.Char("Téléphone 1", tracking=True)
mobile = fields.Char("Téléphone 2", tracking=True)
email = fields.Char("eMail administratif", tracking=True)
facebook = fields.Char("Facebook")
linkedin = fields.Char("LinkedIn")
twitter = fields.Char("Twitter")

Benjamin - Le Filament
a validé
"union.regionale",
string="Union Régionale",

Benjamin - Le Filament
a validé
ondelete="restrict",

Benjamin - Le Filament
a validé
tracking=True,
)
creation_delegate_id = fields.Many2one(

Benjamin - Le Filament
a validé
"res.users",
string="Délégué de création",
ondelete="restrict",
tracking=True,
)
followup_delegate_id = fields.Many2one(

Benjamin - Le Filament
a validé
"res.users",
string="Délégué de suivi",
domain=[("active", "=", True)],
ondelete="restrict",
tracking=True,
)
support_delegate_id = fields.Many2one(

Benjamin - Le Filament
a validé
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
"res.users",
string="Délégué en support",
domain=[("active", "=", True)],
ondelete="restrict",
tracking=True,
)
segment_1_id = fields.Many2many(
"res.partner.segment1",
column1="partner_id",
column2="segment_id",
string="Segmentation 1",
)
segment_2_id = fields.Many2many(
"res.partner.segment2",
column1="partner_id",
column2="segment_id",
string="Segmentation 2",
)
segment_3_id = fields.Many2many(
"res.partner.segment3",
column1="partner_id",
column2="segment_id",
string="Segmentation 3",
)
segment_4_id = fields.Many2many(
"res.partner.segment4",
column1="partner_id",
column2="segment_id",
string="Segmentation 4",
)

Benjamin - Le Filament
a validé
string="Nb de segments 1", compute="_compute_segment_nb"
)

Benjamin - Le Filament
a validé
string="Nb de segments 2", compute="_compute_segment_nb"
)

Benjamin - Le Filament
a validé
string="Nb de segments 3", compute="_compute_segment_nb"
)

Benjamin - Le Filament
a validé
string="Nb de segments 4", compute="_compute_segment_nb"
)
filiere_ids = fields.Many2many(
"res.partner.filiere",
column1="partner_id",
column2="filiere_id",
string="Filière",
)
is_mucs = fields.Boolean(string="Est adhérent Mucs", tracking=True)
is_mucs_update_date = fields.Date(string="Date MAJ Mucs", tracking=True)
is_union_sociale = fields.Boolean(
string="Est adhérent Union Sociale", tracking=True
)
is_union_sociale_update_date = fields.Date(
string="Date MAJ Union Sociale", tracking=True

Benjamin - Le Filament
a validé
"res.partner.creation.origin",

Benjamin - Le Filament
a validé
domain=[("parent_id", "=", False)],
ondelete="restrict",
tracking=True,
)
creation_suborigin_id = fields.Many2one(

Benjamin - Le Filament
a validé
"res.partner.creation.origin",
string="Sous-Origine création en coop",

Benjamin - Le Filament
a validé
domain=[("child_ids", "=", False)],
ondelete="restrict",
tracking=True,
)
date_1st_sign = fields.Date("Date 1ère signature coop", tracking=True)
registration_date = fields.Date(string="Date d'immatriculation RCS", tracking=True)

Benjamin - Le Filament
a validé
social_object = fields.Text("Objet Social", tracking=True)

Benjamin - Le Filament
a validé
"res.partner.naf",
string="Code NAF",
ondelete="restrict",
tracking=True,
)

Benjamin - Le Filament
a validé
"res.partner.secteur.activite",

Benjamin - Le Filament
a validé
related="naf_id.secteur_id",
store=True,
)
activity_desc = fields.Text("Description de l'activité", tracking=True)
certification_ids = fields.Many2many(

Benjamin - Le Filament
a validé
comodel_name="res.partner.certification",
string="Agréments",
ondelete="restrict",
)
other_certification = fields.Char(string="Autre agrément", required=False)
siret = fields.Char(string="SIRET", size=14, index=True, tracking=True, copy=False)

Benjamin - Le Filament
a validé
formatted_siret = fields.Char(
string="SIRET formaté", compute="_compute_formatted_siret"
)
siren = fields.Char(string="SIREN", size=11, compute="_compute_siren")
capital = fields.Integer("Capital (en €)")

Benjamin - Le Filament
a validé
first_closeout = fields.Date("1er bilan en coop")

Benjamin - Le Filament
a validé
[
("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"),

Benjamin - Le Filament
a validé
],
string="Mois clôture exercices",
)
is_seed_scop = fields.Boolean("Est une SCOP d'amorçage")
seed_end = fields.Date("Date de fin du dispositif d'amorçage")
is_incubated = fields.Boolean("Est incubé")
incubator_id = fields.Many2one(

Benjamin - Le Filament
a validé
"res.partner",
string="Incubateur",
domain=_get_domain_incubator_id,
ondelete="restrict",
)
is_ag_constitution = fields.Boolean("AG constitutive réalisée")
is_federation_com = fields.Boolean(

Benjamin - Le Filament
a validé
string="Fédération de la Communication",
compute="_compute_federation",
store=True,

Benjamin - Le Filament
a validé
default=False,
)
is_federation_btp = fields.Boolean(

Benjamin - Le Filament
a validé
string="Fédération du BTP",
compute="_compute_federation",
store=True,

Benjamin - Le Filament
a validé
default=False,
)
is_federation_indus = fields.Boolean(
string="Fédération de l'Industrie",

Benjamin - Le Filament
a validé
compute="_compute_federation",
store=True,

Benjamin - Le Filament
a validé
default=False,
)
is_federation_cae = fields.Boolean(

Benjamin - Le Filament
a validé
string="Fédération des CAE",
compute="_compute_federation",
store=True,

Benjamin - Le Filament
a validé
default=False,
)
activity_federation_com_ids = fields.Many2many(

Benjamin - Le Filament
a validé
comodel_name="scop.federation.com.activity",
relation="res_partner_federation_com_activity_rel",
column1="partner_id",
column2="com_activity_id",
string="Domaine d'activité Com",

Benjamin - Le Filament
a validé
help="Fédération de la Com - Domaine d'activité",
)
activity_federation_indus_ids = fields.Many2many(

Benjamin - Le Filament
a validé
comodel_name="scop.federation.indus.activity",
relation="res_partner_federation_indus_activity_rel",
column1="partner_id",
column2="indus_activity_id",
string="Domaine d'activité Industrie",

Benjamin - Le Filament
a validé
help="Fédération de l'Industrie - Domaine d'activité",
)
copadev_member = fields.Boolean(string="Adhérent copadev", tracking=True)
# Contacts
director_ids = fields.One2many(

Benjamin - Le Filament
a validé
"res.partner",
"parent_id",
string="Contacts Dirigeants",

Benjamin - Le Filament
a validé
)

Benjamin - Le Filament
a validé
"res.partner",
"parent_id",
string="Autres Contacts",

Benjamin - Le Filament
a validé
)
revision_contract = fields.Date("Date du contrat de révision", tracking=True)
revision_company_id = fields.Many2one(

Benjamin - Le Filament
a validé
"res.partner",
string="Organisme de révision",
domain=_get_domain_revision_company_id,
ondelete="restrict",
tracking=True,
)
revision_backup_company_id = fields.Many2one(

Benjamin - Le Filament
a validé
"res.partner",
string="Organisme de révision suppléant",
domain=_get_domain_revision_company_id,
ondelete="restrict",
)
revision_person_id = fields.Many2one(

Benjamin - Le Filament
a validé
comodel_name="res.users",
string="Réviseur",
ondelete="restrict",
tracking=True,
)
revision_certified_person_id = fields.Many2one(

Benjamin - Le Filament
a validé
comodel_name="res.users", string="Réviseur agréé", ondelete="restrict"
)
revision_person_assign_date = fields.Date(

Benjamin - Le Filament
a validé
string="Date de nomination du réviseur", tracking=True
)

Benjamin - Le Filament
a validé
[
("1y", "Annuelle"),
("5y", "Quinquennale"),
("5ys", "Quinquennale séquencée (annuel)"),
("5ys23", "Quinquennale séquencée (2 ans et 3 ans)"),
],
string="Périodicité de la révision",
)
revision_next_date = fields.Date("Prochain exercice révisable (old)")

Benjamin - Le Filament
a validé
"scop.revision.format",
string="Format de révision",
ondelete="restrict",
)
revision_tarif = fields.Integer(
"Tarif de vente", related="revision_format_id.tarif", store=False
)
revision_next_exercice = fields.Integer(
"Prochain exercice révisable",
compute="_compute_revision_next_exercice",
store=True,
)
revision_next_year = fields.Integer(
"Année prochaine révision",
compute="_compute_revision_next_year",
store=True,
)

Benjamin - Le Filament
a validé
comodel_name="scop.revision",
inverse_name="partner_id",
string="Liste des Révisions",
)
# Historique
scop_period_ids = fields.One2many(

Benjamin - Le Filament
a validé
comodel_name="scop.period",
inverse_name="partner_id",
string="Historique",
)
# Période d'adhésion
membership_period_ids = fields.One2many(

Benjamin - Le Filament
a validé
comodel_name="scop.membership.period",
inverse_name="partner_id",
string="Périodes d'adhésion",
)

Benjamin - Le Filament
a validé
# Effectifs
staff_ids = fields.One2many(

Benjamin - Le Filament
a validé
comodel_name="scop.partner.staff",
inverse_name="partner_id",
string="Effectifs",
)

Benjamin - Le Filament
a validé
# Liste Ministère

Benjamin - Le Filament
a validé
staff_last = fields.Integer(
string="Dernier effectif connu",
compute="_compute_last_effective",

Benjamin - Le Filament
a validé
store=True,
)
staff_shareholder_last = fields.Integer(
string="Dernier effectif associés connu",
compute="_compute_last_effective",

Benjamin - Le Filament
a validé
store=True,
)

Benjamin - Le Filament
a validé
staff_last_date = fields.Date(
string="Date dernier effectif connu",
compute="_compute_last_effective",

Benjamin - Le Filament
a validé
store=True,
)
birthyear = fields.Integer("Année de naissance")

Benjamin - Le Filament
a validé
comodel_name="res.partner.newsletter.subscription",
inverse_name="partner_id",
string="Abonnements",
)
contact_origin_id = fields.Many2one(

Benjamin - Le Filament
a validé
"res.partner.rgpd.origin",
string="Origine du contact",

Benjamin - Le Filament
a validé
ondelete="restrict",
)
mandate_id = fields.Many2one(

Benjamin - Le Filament
a validé
"res.partner.mandate", string="Mandat", ondelete="restrict"
)
function_lst_id = fields.Many2one(

Benjamin - Le Filament
a validé
"res.partner.function_lst", string="Fonction", ondelete="restrict"
)
contact_legality = fields.Selection(

Benjamin - Le Filament
a validé
[
("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",
compute="_compute_contact_legality",

Benjamin - Le Filament
a validé
store=True,
)

Hervé Silvant - CGScop
a validé
associate = fields.Selection(

Benjamin - Le Filament
a validé
selection=[
("asso", "Associé extérieur"),
("coop", "Associé coopérateur"),
("none", "Non associé"),
],
string="Associé",
)
employee = fields.Boolean(string="Salarié", default=True)
# Champs pour partenaires
organization_type_id = fields.Many2one(

Benjamin - Le Filament
a validé
"res.partner.organization.type",

Benjamin - Le Filament
a validé
string="Famille",

Benjamin - Le Filament
a validé
ondelete="restrict",
compute="_compute_org_type_id",
tracking=True,
)

Benjamin - Le Filament
a validé
"res.partner.organization.type",

Benjamin - Le Filament
a validé
domain=[("child_ids", "=", False)],
ondelete="restrict",
tracking=True,
)

Benjamin - Le Filament
a validé
# Droits utilisateurs

Benjamin - Le Filament
a validé
is_administrative = fields.Boolean(compute="_compute_is_administrative")

Benjamin - Le Filament
a validé

Benjamin - Le Filament
a validé
# Hack pour la création de contacts depuis la fiche organisme

Benjamin - Le Filament
a validé
parent_id_onchange = fields.Many2one("res.partner")

Benjamin - Le Filament
a validé
# ------------------------------------------------------
# Constrains
# ------------------------------------------------------

Benjamin - Le Filament
a validé
@api.constrains("zip_id", "country_id", "city_id", "state_id")

Benjamin - Le Filament
a validé
@api.constrains("siret")

Benjamin - Le Filament
a validé
def _check_siret(self):

Benjamin - Le Filament
a validé
if self.siret and not self.env.context.get("import_file"):
siren = self.siret[:3] + " " + self.siret[3:6] + " " + self.siret[6:9]

Benjamin - Le Filament
a validé
if not self.siret.isdigit():
raise ValidationError(_("Ce SIRET n'est pas valide"))

Benjamin - Le Filament
a validé
if len(self.siret) != 14:
raise ValidationError(_("La longueur du SIRET doit être égale à 14"))

Benjamin - Le Filament
a validé
if (
self.search_count(
[
("siret", "=like", siren + "%"),
("is_cooperative", "=", True),
]
)
> 1
):
raise ValidationError(_("Ce SIREN existe déjà parmi les coopératives"))

Benjamin - Le Filament
a validé
elif self.search_count([("siret", "=", self.siret)]) > 1:
raise ValidationError(_("Ce SIRET existe déjà"))

Benjamin - Le Filament
a validé
# ------------------------------------------------------
# Actions
# ------------------------------------------------------
def open_facebook(self):
self.ensure_one()
return {
"type": "ir.actions.act_url",
"url": self.facebook,
}
def open_linkedin(self):
self.ensure_one()
return {
"type": "ir.actions.act_url",
"url": self.linkedin,
}
def open_twitter(self):
self.ensure_one()
return {
"type": "ir.actions.act_url",
"url": self.twitter,
}
def open_instagram(self):
self.ensure_one()
return {
"type": "ir.actions.act_url",
"url": self.instagram,
}

Benjamin - Le Filament
a validé
# ------------------------------------------------------
# Onchange
# ------------------------------------------------------

Benjamin - Le Filament
a validé
# TODO: à vérifier

Benjamin - Le Filament
a validé
# Hack pour la création de contacts depuis la fiche organisme

Benjamin - Le Filament
a validé
@api.onchange("parent_id_onchange")

Benjamin - Le Filament
a validé
def _onchange_parent_id_onchange(self):
self.parent_id = self.parent_id_onchange

Benjamin - Le Filament
a validé
# TODO: à vérifier
@api.onchange("parent_id")
def _onchange_parent_id(self):
if self.parent_id.ur_id:
self.ur_id = self.parent_id.ur_id

Benjamin - Le Filament
a validé
@api.onchange("ur_id")
def _onchange_ur_id(self):
if self.child_ids:
for child in self.child_ids:
child.ur_id = self.ur_id

Benjamin - Le Filament
a validé
@api.onchange("creation_origin_id")
def onchange_creation_origin_id(self):
for coop in self:
coop.creation_suborigin_id = False

Benjamin - Le Filament
a validé
# TODO: à vérifier
@api.onchange("is_seed_scop")
def onchange_is_seed_scop(self):
for coop in self:
if coop.date_1st_sign:
coop.seed_end = coop.date_1st_sign + timedelta(2556)
else:
coop.seed_end = datetime.today().date() + timedelta(2556)
else:
coop.seed_end = False

Benjamin - Le Filament
a validé
@api.onchange("name")
def onchange_name(self):

Benjamin - Le Filament
a validé
if self.search_count([("name", "=ilike", self.name)]) > 0:

Benjamin - Le Filament
a validé
"warning": {
"title": "Attention",
"message": "Ce nom / cette raison sociale existe déjà, "
+ "merci de vérifier que vous n'êtes pas en "
+ "train de créer un doublon",
}
}
@api.onchange("mobile")
if self.mobile and len(self.mobile) > 0 and len(self.mobile) < 10:
_("Le numéro de téléphone doit contenir au moins 10 caractères")

Benjamin - Le Filament
a validé
)

Benjamin - Le Filament
a validé
@api.onchange("phone")
if self.phone and len(self.phone) > 0 and len(self.phone) < 10:
_("Le numéro de téléphone doit contenir au moins 10 caractères")

Benjamin - Le Filament
a validé
)

Benjamin - Le Filament
a validé
@api.onchange("siret")
def onchange_siret(self):
if self.siret:
siren = self.siret[:3] + " " + self.siret[3:6] + " " + self.siret[6:9]

Benjamin - Le Filament
a validé
if self.search_count([("siret", "=like", self.siret)]) > 0:

Benjamin - Le Filament
a validé
"warning": {
"title": "Attention",
"message": "Ce SIRET existe déjà, merci de vérifier "
+ "que vous n'êtes pas en train de créer un"
+ " doublon",
}
}
elif self.search_count([("siret", "=like", siren + "%")]) > 0:

Benjamin - Le Filament
a validé
"warning": {
"title": "Attention",
"message": "Ce SIREN existe déjà, merci de vérifier "
+ "que vous n'êtes pas en train de créer un"
+ " doublon",
}
}
@api.onchange("cooperative_form_id")
def onchange_cooperative_form_id(self):
if self.cooperative_form_id == self.env.ref(
"cgscop_partner.form_noncooperative"
):
self.creation_origin_id = None
self.creation_suborigin_id = None
self.is_ag_constitution = None
self.date_1st_sign = None
self.first_closeout = None

Benjamin - Le Filament
a validé
# ------------------------------------------------------
# Common functions
# ------------------------------------------------------
def _create_period(self, partner):

Benjamin - Le Filament
a validé
new_period = self.env["scop.period"].create(
{
"partner_id": partner.id,
"start": partner.registration_date or fields.Date.today(),
"name": partner.name,
"cooperative_form_id": partner.cooperative_form_id.id,
"partner_company_type_id": partner.partner_company_type_id.id,
"siret": partner.siret,
"street": partner.street,
"street2": partner.street2,
"street3": partner.street3,
"zip": partner.zip,
"zip_id": partner.zip_id.id,
"city": partner.city,
"cedex": partner.cedex,
"state_id": partner.state_id.id,
"country_id": partner.country_id.id,
"naf_id": partner.naf_id.id,
"ur_id": partner.ur_id.id,
"cae": partner.cae,
}
)
partner.scop_period_ids = new_period

Benjamin - Le Filament
a validé
# TODO: déplacer dans cgscop_cotisation
def get_partner_contribution_type(self):
"""
Returns list of contribution type for partner
"""
contribution_type = [self.env.ref("cgscop_partner.riga_14397")]

Benjamin - Le Filament
a validé
if self.ur_id in [
self.env.ref("cgscop_partner.riga_14232"),
self.env.ref("cgscop_partner.riga_14243"),
]:
contribution_type.append(self.env.ref("cgscop_partner.riga_14399"))
if self.is_federation_com:
contribution_type.append(self.env.ref("cgscop_partner.riga_14398"))
if self.is_federation_cae:
contribution_type.append(self.env.ref("cgscop_partner.cotiz_fede_cae"))
return contribution_type

Benjamin - Le Filament
a validé
# ------------------------------------------------------
# Override ORM
# ------------------------------------------------------
def _name_search(
self, name, args=None, operator="ilike", limit=100, name_get_uid=None
):

Benjamin - Le Filament
a validé
domain = [
"|",
("name", operator, name),
("member_number", "ilike", name),
]
return self._search(domain + args, limit=limit, access_rights_uid=name_get_uid)
# Creation d'une periode lorsque le statut passe en Phase de Suivi

Benjamin - Le Filament
a validé
# TODO: à revoir et demander si mise en majuscule du nom de la structure
# Gestion casse des informations

Benjamin - Le Filament
a validé
if vals.get("name"):
vals["name"] = vals.get("name").title()
if vals.get("lastname"):
vals["lastname"] = vals.get("lastname").title()
if vals.get("firstname"):
vals["firstname"] = vals.get("firstname").title()
if vals.get("city"):
vals["city"] = vals.get("city").upper()

Benjamin - Le Filament
a validé
if self.type in ("contact", "invoice", "private"):
parent_ur_id = self.parent_id.ur_id.id

Benjamin - Le Filament
a validé
vals["ur_id"] = parent_ur_id

Benjamin - Le Filament
a validé
result = super(ScopPartner, self).write(vals)
# Hack pour notification lors de la modification du logo

Benjamin - Le Filament
a validé
subtype="cgscop_base.cg_values_change",
# Contrainte de tel ou mail lors de la modification d'un contact

Benjamin - Le Filament
a validé
if (
not partner.is_company
and partner.type == "contact"
and not partner.user_ids
):
if not partner.email and not partner.phone and not partner.mobile:
_(
"Vous devez saisir au moins un e-mail ou un téléphone\

Benjamin - Le Filament
a validé
pour "

Benjamin - Le Filament
a validé
)
# Création d'une période lors du changement de statut en Suivi
if vals.get("project_status") == "6_suivi" and not self.env.context.get(
"import_file"
):
if not partner.scop_period_ids:
partner._create_period(partner)
# Ajout des followers de la fiche
partners_to_subscribe = [
partner.followup_delegate_id.partner_id.id,

Benjamin - Le Filament
a validé
partner.creation_delegate_id.partner_id.id,
]
partner.message_subscribe(partner_ids=partners_to_subscribe)

Benjamin - Le Filament
a validé
# TODO: à revoir
# Création d'une période lors de la création d'une coopérative
@api.model_create_multi
def create(self, vals_list):
# Gestion casse des informations
for vals in vals_list:

Benjamin - Le Filament
a validé
if vals.get("name"):
vals["name"] = vals.get("name").title()
if vals.get("lastname"):
vals["lastname"] = vals.get("lastname").title()
if vals.get("firstname"):
vals["firstname"] = vals.get("firstname").title()
if vals.get("city"):
vals["city"] = vals.get("city").upper()
partners = super(ScopPartner, self).create(vals_list)
# Création d'une période si la coop est en statut en Suivi
if vals.get("is_cooperative") and vals.get("project_status") == "6_suivi":
for partner in partners:
if not partner.scop_period_ids:
partner._create_period(partner)
# Ajout des followers de la fiche
for partner in partners:
partners_to_subscribe = [
partner.followup_delegate_id.partner_id.id,

Benjamin - Le Filament
a validé
partner.creation_delegate_id.partner_id.id,
]
partner.message_subscribe(partner_ids=partners_to_subscribe)
# ------------------------------------------------------
# Override parent
# ------------------------------------------------------
def _get_contact_name(self, partner, name):
super(ScopPartner, self)._get_contact_name(partner, name)
return "%s, %s" % (

Benjamin - Le Filament
a validé
name,
partner.commercial_company_name or partner.sudo().parent_id.name,

Benjamin - Le Filament
a validé
)

Benjamin - Le Filament
a validé
# ------------------------------------------------------
# Computed Fields
# ------------------------------------------------------

Benjamin - Le Filament
a validé
@api.depends("siret")
def _compute_siren(self):
for partner in self:
if partner.siret:
partner.siren = (
partner.siret[:3]
+ " "
+ partner.siret[3:6]
+ " "
+ partner.siret[6:9]
)
else:
partner.siren = None
def _compute_formatted_siret(self):
for partner in self:
if partner.siret:
partner.formatted_siret = (
partner.siret[:3]
+ " "
+ partner.siret[3:6]
+ " "
+ partner.siret[6:9]
+ " "
+ partner.siret[9:]

Benjamin - Le Filament
a validé
)
else:
partner.formatted_siret = None
@api.depends("zip", "state_id")
def _compute_num_departement(self):
for company in self:
if company.zip:

Benjamin - Le Filament
a validé
if company.state_id:
try:
domtom = self.env.ref("cgscop_partner.domtom")
if company.state_id == domtom:
company.zip_departement = company.zip[:3]

Benjamin - Le Filament
a validé
company.zip_departement = company.zip[:2]
else:
company.zip_departement = company.zip[:2]

Benjamin - Le Filament
a validé
@api.depends("zip")

Benjamin - Le Filament
a validé
def _compute_region(self):
for partner in self:
if partner.zip:
zip_id = self.env["res.city.zip"].search([("name", "=", partner.zip)])

Benjamin - Le Filament
a validé
if zip_id:
partner.region = zip_id[0].city_id[0].state_id
@api.model
def _compute_current_user_ur_id(self):
for partner in self:
partner.current_user_ur_id = self.env.user.company_id.ur_id.id
def _search_current_user_ur_id(self, operator, value):

Benjamin - Le Filament
a validé
return [("ur_id", "=", self.env.user.company_id.ur_id.id)]

Benjamin - Le Filament
a validé
@api.depends(
"contact_origin_id",
"parent_id.cooperative_form_id",
"parent_id.membership_status",
)
def _compute_contact_legality(self):
for partner in self:

Benjamin - Le Filament
a validé
partner.contact_legality = "none"
if partner.contact_origin_id.name == "Fiche contact, site internet":

Benjamin - Le Filament
a validé
partner.contact_legality = "consent"
if partner.contact_origin_id.name in (
"Prospect journée d'info coll",
"Prospect (salon, rdv, internet…)",
"Elus",
):
partner.contact_legality = "legitimate"
if partner.contact_origin_id.name in (
"Salariés CG",
"Salariés UR",
"Salariés Fédération",
):
partner.contact_legality = "employee"

Benjamin - Le Filament
a validé
"Elus",
"VIP, Officiels",
"Fournisseurs",
):
partner.contact_legality = "legitimate"
if not partner.is_company and partner.parent_id:
parent = partner.parent_id

Benjamin - Le Filament
a validé
if (
partner.contact_origin_id.name
in (

Benjamin - Le Filament
a validé
"Dossiers annuels non LM (scic, scop47)",
)
and parent.cooperative_form_id
and parent.membership_status == "member"
):
partner.contact_legality = "customer"
if (
partner.contact_origin_id.name
== ("Dossiers annuels non LM (scic, scop47)")
and parent.membership_status != "member"
):
partner.contact_legality = "legitimate"
if (
partner.contact_origin_id.name == ("Dossiers Liste ministère")

Benjamin - Le Filament
a validé
and parent.cooperative_form_id.name == "SCIC"
):
partner.contact_legality = "customer"
# TODO: déplacer dans adhésions ? cotisations?
@api.depends(
"membership_period_ids",
"membership_period_ids.end_reason_id",
"membership_period_ids.number",
"membership_period_ids.end",
)
def _compute_membership(self):
for partner in self:

Benjamin - Le Filament
a validé
if partner.membership_period_ids:
type_cg = self.env.ref("cgscop_partner.membership_type_1").id
last_membership_period = self.env["scop.membership.period"].search(
[("partner_id", "=", partner.id), ("type_id", "=", type_cg)],
limit=1,
order="start desc",
)
if last_membership_period and not last_membership_period.end:
partner.membership_status = "member"
partner.member_number = last_membership_period.number
partner.member_start_stat = last_membership_period.start_stat
partner.member_start = last_membership_period.start
elif last_membership_period and last_membership_period.end_reason_id:

Benjamin - Le Filament
a validé
partner.membership_status = "out"
partner.member_number = last_membership_period.number
else:
partner.membership_status = "not_member"

Benjamin - Le Filament
a validé
@api.depends("member_number")
def _compute_membership_int(self):
for partner in self:
if partner.member_number:
partner.member_number_int = int(partner.member_number)

Benjamin - Le Filament
a validé
@api.depends("membership_period_ids", "membership_period_ids.end")
def _compute_federation(self):
for partner in self:
if partner.is_cooperative:
partner.is_federation_com = partner._get_federation(

Benjamin - Le Filament
a validé
"cgscop_partner.membership_type_2"
)
partner.is_federation_btp = partner._get_federation(

Benjamin - Le Filament
a validé
"cgscop_partner.membership_type_4"
)