diff --git a/data/cron_datas.xml b/data/cron_datas.xml
index 08cd8fff239553fd5b8dc756f748b233b0fff3e3..221c1e73df0459e2adbe4857b21a2e320de32f79 100644
--- a/data/cron_datas.xml
+++ b/data/cron_datas.xml
@@ -76,5 +76,21 @@
<field name="state">code</field>
<field name="code">model.cron_user_notification()</field>
</record>
+
+ <!-- Suppression des projets sortis depuis 15 jours -->
+ <record id="alterincub_end_incub_cron" forcecreate="True" model="ir.cron">
+ <field
+ name="name"
+ >AlterIncub - Partner : Ménage projets en fin d'accompagement</field>
+ <field eval="True" name="active" />
+ <field name="user_id" ref="base.user_root" />
+ <field name="interval_number">1</field>
+ <field name="interval_type">days</field>
+ <field name="numbercall">-1</field>
+ <field name="nextcall">2024-12-07 00:01:00</field>
+ <field name="model_id" ref="model_res_partner" />
+ <field name="state">code</field>
+ <field name="code">model.cron_end_incub(15)</field>
+ </record>
</data>
</odoo>
diff --git a/models/res_partner.py b/models/res_partner.py
index b718018a5c38455f35e152af885e354668c0ea02..75f917336e79717696bc712f84cda2aac3cb6dc3 100644
--- a/models/res_partner.py
+++ b/models/res_partner.py
@@ -1,6 +1,8 @@
# © 2022 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 api, fields, models
@@ -64,6 +66,44 @@ class ResPartner(models.Model):
action["domain"] = [("provider_id", "=", self.id)]
return action
+ # ------------------------------------------------------
+ # CRON methods
+ # ------------------------------------------------------
+ def cron_end_incub(self, delay=15):
+ """
+ CRON permettant de supprimer les utilisateurs de projets en fin d'accompagnement
+ depuis x jours (variable delay)
+ Les projets en fin d'accompagnement sont retirés des évènements à venir
+ et les inscriptions associées
+ """
+ delay_in_days = datetime.now() - timedelta(days=delay)
+ projects = self.search(
+ [
+ ("project_state", "=", "9_done"),
+ ("stop_date", "=", delay_in_days),
+ ]
+ )
+ projects.child_ids.mapped("user_ids").unlink()
+
+ event_ids = self.env["event.event"].search(
+ [
+ ("date_begin", ">", delay_in_days),
+ ("stage_id", "!=", self.env.ref("event.event_stage_done").id),
+ ]
+ )
+ registration_ids = self.env["event.registration"].search(
+ [
+ ("event_id", "in", event_ids.ids),
+ ]
+ )
+ for project in projects:
+ event_ids_to_unlink = event_ids.filtered(lambda e: project in e.project_ids) # noqa: B023
+ event_ids_to_unlink.update({"project_ids": [(3, project.id, 0)]})
+
+ registration_ids.filtered(
+ lambda r: r.partner_id.parent_id.id in projects.ids
+ ).unlink()
+
# ------------------------------------------------------
# Inherit parent
# ------------------------------------------------------