Skip to content

Commit 068bd44

Browse files
authored
addEvent action logic + event list sorting (#1364)
1 parent 161aeda commit 068bd44

File tree

12 files changed

+217
-93
lines changed

12 files changed

+217
-93
lines changed

epictrack-api/src/api/actions/add_event.py

Lines changed: 23 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,17 @@
11
"""Disable work start date action handler"""
22

3-
from datetime import timedelta
4-
53
from api.actions.base import ActionFactory
64
from api.models import Event, db
75
from api.models.event_configuration import EventConfiguration
86
from api.models.event_template import EventTemplateVisibilityEnum
97
from api.models.phase_code import PhaseCode
108
from api.models.work_phase import WorkPhase
11-
from api.schemas.response.event_configuration_response import EventConfigurationResponseSchema
9+
from api.schemas.response.event_configuration_response import (
10+
EventConfigurationResponseSchema,
11+
)
1212
from api.schemas.response.event_template_response import EventTemplateResponseSchema
13+
from .set_event_date import SetEventDate
14+
from .common import find_event_date
1315

1416

1517
# pylint: disable=import-outside-toplevel
@@ -21,18 +23,23 @@ class AddEvent(ActionFactory):
2123
def run(self, source_event: Event, params) -> None:
2224
"""Adds a new event based on params"""
2325
from api.services.event import EventService
24-
25-
event_data, work_phase_id = self.get_additional_params(source_event, params)
26-
event_data.update(
27-
{
28-
"is_active": True,
29-
"work_id": source_event.work_id,
30-
"anticipated_date": source_event.actual_date + timedelta(days=params["start_at"]),
31-
}
32-
)
33-
EventService.create_event(
34-
event_data, work_phase_id=work_phase_id, push_events=True
35-
)
26+
for param in params:
27+
event_data, work_phase_id = self.get_additional_params(source_event, param)
28+
event_data.update(
29+
{
30+
"is_active": True,
31+
"work_id": source_event.work_id,
32+
"anticipated_date": find_event_date(source_event)
33+
}
34+
)
35+
new_event = EventService.create_event(
36+
event_data, work_phase_id=work_phase_id, push_events=True, commit=False
37+
)
38+
set_event_date: SetEventDate = SetEventDate()
39+
# param["event_name"] = new_event.event_configuration.name
40+
# Setting the event date from here cz, otherwise the event won't get pushed
41+
set_event_date.run(source_event, param)
42+
source_event = new_event
3643

3744
def get_additional_params(self, source_event: Event, params):
3845
"""Returns additional parameter"""
@@ -56,7 +63,7 @@ def get_additional_params(self, source_event: Event, params):
5663
db.session.query(EventConfiguration)
5764
.filter(
5865
EventConfiguration.work_phase_id == work_phase.id,
59-
EventConfiguration.name == params.pop("event_name"),
66+
EventConfiguration.name == params.get("event_name"),
6067
EventConfiguration.is_active.is_(True),
6168
)
6269
.order_by(EventConfiguration.repeat_count.desc())

epictrack-api/src/api/actions/common.py

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
"""Common methods for the actions"""
2-
2+
from datetime import datetime
33
from api.models import Event, EventConfiguration, WorkPhase, db
44
from api.models.phase_code import PhaseCode, PhaseVisibilityEnum
55

@@ -33,3 +33,12 @@ def find_configuration(source_event: Event, params) -> int:
3333
.first()
3434
)
3535
return event_configuration
36+
37+
38+
def find_event_date(source_event: Event) -> datetime:
39+
"""Returns actual date if the event has one else anticipated"""
40+
return (
41+
source_event.actual_date
42+
if source_event.actual_date
43+
else source_event.anticipated_date
44+
)

epictrack-api/src/api/actions/set_event_date.py

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
from api.models import db
77
from api.models.event import Event
88

9-
from .common import find_configuration
9+
from .common import find_configuration, find_event_date
1010

1111

1212
class SetEventDate(ActionFactory): # pylint: disable=too-few-public-methods
@@ -27,9 +27,8 @@ def run(self, source_event: Event, params: dict) -> None:
2727
)
2828
.first()
2929
)
30-
event.anticipated_date = source_event.actual_date + timedelta(
30+
event_dict = event.as_dict(recursive=False)
31+
event_dict["anticipated_date"] = find_event_date(source_event) + timedelta(
3132
days=number_of_days_to_be_added
3233
)
33-
EventService.update_event(
34-
event.as_dict(recursive=False), event.id, True, commit=False
35-
)
34+
EventService.update_event(event_dict, event.id, True, commit=False)

0 commit comments

Comments
 (0)