Skip to content

Commit 2e96040

Browse files
Merge pull request #11 from bmcclure/due-date-offset
Add due date offset config option to monthly chores
2 parents a7b2a9b + bc8cc3d commit 2e96040

File tree

4 files changed

+22
-0
lines changed

4 files changed

+22
-0
lines changed

custom_components/chore_helper/config_flow.py

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -191,10 +191,22 @@ async def detail_config_schema(
191191
mode=selector.SelectSelectorMode.DROPDOWN,
192192
)
193193
)
194+
194195
options_schema[
195196
optional(const.CONF_FORCE_WEEK_NUMBERS, handler.options)
196197
] = selector.BooleanSelector()
197198

199+
options_schema[
200+
optional(const.CONF_DUE_DATE_OFFSET, handler.options)
201+
] = selector.NumberSelector(
202+
selector.NumberSelectorConfig(
203+
min=-7,
204+
max=7,
205+
mode=selector.NumberSelectorMode.SLIDER,
206+
unit_of_measurement="day(s)",
207+
)
208+
)
209+
198210
if frequency in (const.WEEKLY_FREQUENCY + const.MONTHLY_FREQUENCY):
199211
options_schema[
200212
optional(const.CONF_CHORE_DAY, handler.options)

custom_components/chore_helper/const.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@
3636
CONF_ICON_OVERDUE = "icon_overdue"
3737
CONF_OFFSET = "offset"
3838
CONF_DAY_OF_MONTH = "day_of_month"
39+
CONF_DUE_DATE_OFFSET = "due_date_offset"
3940
CONF_FIRST_MONTH = "first_month"
4041
CONF_LAST_MONTH = "last_month"
4142
CONF_CHORE_DAY = "chore_day"

custom_components/chore_helper/sensor.py

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -695,6 +695,7 @@ class MonthlyChore(Chore):
695695
"_period",
696696
"_weekday_order_number",
697697
"_week_order_number",
698+
"_due_date_offset",
698699
)
699700

700701
def __init__(self, config_entry: ConfigEntry) -> None:
@@ -709,6 +710,7 @@ def __init__(self, config_entry: ConfigEntry) -> None:
709710
self._monthly_force_week_numbers = config.get(
710711
const.CONF_FORCE_WEEK_NUMBERS, False
711712
)
713+
self._due_date_offset = int(config.get(const.CONF_DUE_DATE_OFFSET, 0))
712714
self._weekday_order_number: int | None
713715
self._week_order_number: int | None
714716
order_number: int = 1
@@ -862,6 +864,7 @@ def _find_candidate_date(self, day1: date) -> date | None:
862864
if self._period is None or self._period == 1:
863865
return self._monthly_candidate(day1, schedule_start_date)[0]
864866
result = self._monthly_candidate(day1, schedule_start_date)
867+
865868
candidate_date = result[0]
866869
candidate_month = result[1]
867870
while (candidate_month - schedule_start_date.month) % self._period != 0:
@@ -874,6 +877,10 @@ def _find_candidate_date(self, day1: date) -> date | None:
874877
)
875878
candidate_date = result[0]
876879
candidate_month = result[1]
880+
881+
if self._due_date_offset is not None:
882+
candidate_date += timedelta(days=self._due_date_offset)
883+
877884
return candidate_date
878885

879886

custom_components/chore_helper/translations/en.json

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@
2929
"first_week": "First due week (1-52)",
3030
"start_date": "Start date",
3131
"day_of_month": "Day of month",
32+
"due_date_offset": "Offset each due date",
3233
"weekday_order_number": "Order of the weekday in the month (e.g. first Wednesday of the month)",
3334
"force_week_order_numbers": "Order of week in a month instead of order of weekday (e.g. on Wednesday of the first week)",
3435
"date_format": "Date format (see http://strftime.org/)"
@@ -81,6 +82,7 @@
8182
"first_week": "First due week (1-52)",
8283
"start_date": "Start date",
8384
"day_of_month": "Day of month",
85+
"due_date_offset": "Offset each due date",
8486
"weekday_order_number": "Order of the weekday in the month (e.g. first Wednesday of the month)",
8587
"force_week_order_numbers": "Order of week in a month instead of order of weekday (e.g. on Wednesday of the first week)",
8688
"date_format": "Date format (see http://strftime.org/)"

0 commit comments

Comments
 (0)