Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion child_compassion/__manifest__.py
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@
# pylint: disable=C8101
{
"name": "Compassion Children",
"version": "14.0.1.5.0",
"version": "14.0.1.6.0",
"category": "Compassion",
"author": "Compassion CH",
"license": "AGPL-3",
Expand Down
24 changes: 24 additions & 0 deletions child_compassion/migrations/14.0.1.6.0/post-migration.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
import logging

from odoo import SUPERUSER_ID, api

_logger = logging.getLogger(__name__)


def migrate(cr, version):
"""
Recompute the lifecycle state & date of an FCP project
"""

env = api.Environment(cr, SUPERUSER_ID, {})

# Fetch all projects:
projects = env["compassion.project"].search([])

# Invalidate cache
projects.invalidate_cache(["last_lifecycle_id", "status", "suspension"])

projects._compute_last_lifecycle()
projects._compute_suspension()

_logger.info("Successfully recomputed lifecycle states for %s FCPs.", len(projects))
21 changes: 17 additions & 4 deletions child_compassion/models/project_compassion.py
Original file line number Diff line number Diff line change
Expand Up @@ -477,13 +477,26 @@ def _get_months(self):
@api.depends("lifecycle_ids", "lifecycle_ids.date")
def _compute_last_lifecycle(self):
for project in self:
last_info = project.lifecycle_ids[:1]
reactivation_lifecycle = project.lifecycle_ids.filtered(
if not project.lifecycle_ids:
project.last_lifecycle_id = False
continue

# Sort lifecycle events by date descending
sorted_events = project.lifecycle_ids.sorted(
key=lambda r: (str(r.date or ""), r.id), reverse=True
)
# Take first (newest) event
last_info = sorted_events[0]

reactivation_lifecycle = sorted_events.filtered(
lambda r, _last=last_info: r.date == _last.date
and r.type == "Reactivation"
)[:1]
)

# If it exists, lifecycle with type 'Reactivation' is determinant
project.last_lifecycle_id = reactivation_lifecycle or last_info
project.last_lifecycle_id = (
reactivation_lifecycle[0] if reactivation_lifecycle else last_info
)

@api.depends("lifecycle_ids", "lifecycle_ids.write_date")
def _compute_suspension(self):
Expand Down
4 changes: 3 additions & 1 deletion child_compassion/views/project_compassion_view.xml
Original file line number Diff line number Diff line change
Expand Up @@ -87,7 +87,9 @@
</group>
<group string="Lifecycle">
<field name="lifecycle_ids">
<tree>
<tree
default_order="date desc, id desc"
>
<field name="create_date" />
<field name="date" />
<field name="type" />
Expand Down
Loading