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 # ------------------------------------------------------