1919 ICON_NEXT_ORDER_TILL , ICON_INFO , ICON_DELIVERY_TIME , ICON_MONTHLY_SPENT
2020from .entity import BaseEntity
2121from .hub import RohlikAccount
22- from .utils import extract_delivery_datetime , calculate_current_month_orders_total
22+ from .utils import extract_delivery_datetime , calculate_current_month_orders_total , get_earliest_order
2323
2424SCAN_INTERVAL = timedelta (seconds = 600 )
2525
@@ -598,13 +598,22 @@ class NextOrderSince(BaseEntity, SensorEntity):
598598
599599 @property
600600 def native_value (self ) -> datetime | None :
601- """Returns remaining orders without limit."""
602- if len (self ._rohlik_account .data ['next_order' ]) > 0 :
603- slot_start = datetime .strptime (self ._rohlik_account .data ["next_order" ][0 ].get ("deliverySlot" , {}).get ("since" , None ),
604- "%Y-%m-%dT%H:%M:%S.%f%z" )
605- return slot_start
606- else :
607- return None
601+ """Returns start of delivery window for the earliest order."""
602+ earliest_order = get_earliest_order (self ._rohlik_account .data .get ('next_order' , []))
603+ if earliest_order :
604+ try :
605+ slot_start = datetime .strptime (earliest_order .get ("deliverySlot" , {}).get ("since" , None ),
606+ "%Y-%m-%dT%H:%M:%S.%f%z" )
607+ return slot_start
608+ except (ValueError , TypeError ):
609+ # Try without microseconds if the format doesn't match
610+ try :
611+ slot_start = datetime .strptime (earliest_order .get ("deliverySlot" , {}).get ("since" , None ),
612+ "%Y-%m-%dT%H:%M:%S%z" )
613+ return slot_start
614+ except (ValueError , TypeError ):
615+ return None
616+ return None
608617
609618 @property
610619 def icon (self ) -> str :
@@ -625,13 +634,22 @@ class NextOrderTill(BaseEntity, SensorEntity):
625634
626635 @property
627636 def native_value (self ) -> datetime | None :
628- """Returns remaining orders without limit."""
629- if len (self ._rohlik_account .data ['next_order' ]) > 0 :
630- slot_start = datetime .strptime (self ._rohlik_account .data ["next_order" ][0 ].get ("deliverySlot" , {}).get ("till" , None ),
637+ """Returns end of delivery window for the earliest order."""
638+ earliest_order = get_earliest_order (self ._rohlik_account .data .get ('next_order' , []))
639+ if earliest_order :
640+ try :
641+ slot_end = datetime .strptime (earliest_order .get ("deliverySlot" , {}).get ("till" , None ),
631642 "%Y-%m-%dT%H:%M:%S.%f%z" )
632- return slot_start
633- else :
634- return None
643+ return slot_end
644+ except (ValueError , TypeError ):
645+ # Try without microseconds if the format doesn't match
646+ try :
647+ slot_end = datetime .strptime (earliest_order .get ("deliverySlot" , {}).get ("till" , None ),
648+ "%Y-%m-%dT%H:%M:%S%z" )
649+ return slot_end
650+ except (ValueError , TypeError ):
651+ return None
652+ return None
635653
636654 @property
637655 def icon (self ) -> str :
0 commit comments