Skip to content
Draft
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
8 changes: 6 additions & 2 deletions geos-trame/src/geos/trame/app/deck/tree.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
import os
from collections import defaultdict
from typing import Any
from datetime import timedelta, datetime

import dpath
import funcy
Expand Down Expand Up @@ -33,6 +34,7 @@ def __init__( self, sm_id: str | None = None, **kwargs: Any ) -> None:
self.root = None
self.input_has_errors = False
self._sm_id = sm_id
self.world_origin_time = datetime(1924,3,28). strftime("%Y-%m-%d")# Total start date !!

def set_input_file( self, input_filename: str ) -> None:
"""Set a new input file.
Expand Down Expand Up @@ -130,11 +132,13 @@ def timeline( self ) -> list[ dict ] | None:
timeline = []
# list root events
global_id = 0
for e in self.input_file.problem.events[ 0 ].periodic_event:
solver_events = filter(lambda ev : 'Solver' in ev.target, self.input_file.problem.events[0].periodic_event)
for e in solver_events:
item: dict[ str, str | int ] = {
"id": global_id,
"summary": e.name,
"start_date": e.begin_time,
"start_date": str( datetime.strptime(self.world_origin_time,"%Y-%m-%d") + timedelta(seconds=float(e.begin_time)) ), #.strftime("%Y-%m-%d"),
"duration" : str( timedelta(seconds=float(e.end_time) - float(e.begin_time)) )
}
timeline.append( item )
global_id = global_id + 1
Expand Down
59 changes: 37 additions & 22 deletions geos-trame/src/geos/trame/app/ui/timeline.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
# SPDX-FileCopyrightText: Copyright 2023-2024 TotalEnergies.
# SPDX-FileContributor: Lionel Untereiner
from typing import Any
from datetime import datetime, timedelta

from trame.widgets import gantt
from trame.widgets import vuetify3 as vuetify
Expand All @@ -10,6 +11,8 @@
from geos.trame.app.deck.tree import DeckTree


date_fmt = "%Y-%m-%d"

class TimelineEditor( vuetify.VCard ):

def __init__( self, source: DeckTree, **kwargs: Any ) -> None:
Expand All @@ -19,6 +22,9 @@ def __init__( self, source: DeckTree, **kwargs: Any ) -> None:
self.tree = source
self.simput_manager = get_simput_manager( id=self.state.sm_id )

self.state.sdate = self.tree.world_origin_time
self.state.change("sdate")(self._set_start_date)

items = self.tree.timeline()

fields = [ {
Expand All @@ -29,23 +35,23 @@ def __init__( self, source: DeckTree, **kwargs: Any ) -> None:
"placeholder": "Add a new task...",
},
"start_date": {
"label": "Start",
"label": "",# "Start",
"component": "gantt-date",
"width": 75,
"width": -1,
"placeholder": "Start",
"sort": "date",
},
"end_date": {
"label": "End",
"label": "",# "End",
"component": "gantt-date",
"width": 75,
"width": -1,
"placeholder": "End",
"sort": "date",
},
"duration": {
"label": "Days",
"component": "gantt-number",
"width": 50,
"width": 150,
"placeholder": "0",
},
} ]
Expand All @@ -56,35 +62,44 @@ def __init__( self, source: DeckTree, **kwargs: Any ) -> None:
label="Select starting simulation date",
prepend_icon="",
prepend_inner_icon="$calendar",
placeholder="09/18/2024",
# placeholder="09/18/2024",
v_model="sdate"
)
vuetify.VDivider()
with (
vuetify.VContainer( "Events timeline" ),
vuetify.VTimeline(
direction="horizontal",
truncate_line="both",
align="center",
side="end",
),
vuetify.VTimelineItem( v_for=( f"item in {items}", ), key="i", value="item", size="small" ),
):
vuetify.VAlert( "{{ item.summary }}" )
vuetify.Template( "{{ item.start_date }}", raw_attrs=[ "v-slot:opposite" ] )
# with (
# vuetify.VContainer( "Events timeline" ),
# vuetify.VTimeline(
# direction="horizontal",
# truncate_line="both",
# align="center",
# side="end",
# ),
# vuetify.VTimelineItem( v_for=( f"item in {items}", ), key="i", value="item", size="small" ),
# ):
# vuetify.VAlert( "{{ item.summary }}" )
# vuetify.Template( "{{ item.start_date }}", raw_attrs=[ "v-slot:opposite" ] )

with vuetify.VContainer( "Events chart" ):
gantt.Gantt(
canEdit=True,
dateLimit=30,
startDate="2024-11-01 00:00",
endDate="2024-12-01 00:00",
canEdit=False,
dateLimit=40,
startDate= self.state.sdate,
endDate=(datetime.strptime( self.state.sdate,date_fmt) + timedelta(days=40)).strftime(date_fmt) if self.state.sdate else '2012-12-12',
# title='Gantt-pre-test',
fields=fields,
update=( self.update_from_js, "items" ),
items=( "items", items ),
classes="fill_height",
)

def _set_start_date(self, sdate : str | None, **_: Any) -> None:
if sdate is None:
self.state.sdate = self.tree.world_origin_time.strftime(date_fmt)
return

self.state.sdate = sdate
print(f"new date :{self.state.sdate}")

def update_from_js( self, *items: tuple ) -> None:
"""Update method called from javascript."""
self.state.items = list( items )
1 change: 1 addition & 0 deletions geos-trame/tests/data/geosDeck/geosDeck.xml
Original file line number Diff line number Diff line change
Expand Up @@ -149,6 +149,7 @@

<PeriodicEvent
name="statistics"
endTime="0"
timeFrequency="31536000"
target="/Tasks/compflowStatistics"/>

Expand Down
Loading