Skip to content

Commit 459e14b

Browse files
authored
Select last month (#96)
It should be possible to select last payout month if every 2, 3, 6 or 12 month is selected as payout frequency.
2 parents 6565385 + ea19edc commit 459e14b

File tree

3 files changed

+26
-29
lines changed

3 files changed

+26
-29
lines changed

README.md

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -36,14 +36,14 @@
3636

3737
- **Custom Payday Calculation:**
3838
- Supports various pay frequencies:
39+
- **Weekly**
40+
- **Every 14 days**
41+
- **Every 28 days**
3942
- **Monthly**
4043
- **Every 2 months**
4144
- **Quarterly (every 3 months)**
4245
- **Semi-annually (every 6 months)**
4346
- **Annually**
44-
- **Every 28 days**
45-
- **Every 14 days**
46-
- **Weekly**
4747

4848
- **Automatic Adjustment for Holidays and Weekends:**
4949
- Fetches public holidays from the [Nager.Date API](https://date.nager.at).
@@ -87,25 +87,25 @@
8787

8888
- **Label:** Select the payout frequency
8989
- **Options:**
90+
- `weekly`: Weekly
91+
- `14_days`: Every 14th day
92+
- `28_days`: Every 28th day
9093
- `monthly`: Monthly
9194
- `bimonthly`: Every 2 months
9295
- `quarterly`: Every 3 months
9396
- `semiannual`: Every 6 months
9497
- `annual`: Every year
95-
- `28_days`: Every 28th day
96-
- `14_days`: Every 14th day
97-
- `weekly`: Weekly
9898

9999
### Step 3: Depending on the Selected Frequency
100100

101-
- **Monthly / Bimonthly / Quarterly / Semiannual / Annual:**
101+
- **Monthly:**
102102
- **Label:** Select day of month
103103
- **Options:**
104104
- `last_bank_day`: Last bank day
105105
- `first_bank_day`: First bank day
106106
- `specific_day`: Specific day
107107

108-
- **Every 28th or 14th day:**
108+
- **Every 14th or 28th day / Bimonthly / Quarterly / Semiannual / Annual:**
109109
- **Label:** Select last payday
110110
- **Description:** Choose the date of your last payday. The integration will calculate future paydays based on this date.
111111

custom_components/isitpayday/config_flow.py

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -102,15 +102,16 @@ async def async_step_frequency(self, user_input=None):
102102

103103
self.pay_frequency = user_input[CONF_PAY_FREQ]
104104

105-
if self.pay_frequency in [
106-
PAY_FREQ_MONTHLY,
105+
if self.pay_frequency == PAY_FREQ_MONTHLY:
106+
return await self.async_step_monthly_day()
107+
elif self.pay_frequency in [
107108
PAY_FREQ_BIMONTHLY,
108109
PAY_FREQ_QUARTERLY,
109110
PAY_FREQ_SEMIANNUAL,
110-
PAY_FREQ_ANNUAL
111+
PAY_FREQ_ANNUAL,
112+
PAY_FREQ_28_DAYS,
113+
PAY_FREQ_14_DAYS
111114
]:
112-
return await self.async_step_monthly_day()
113-
elif self.pay_frequency in [PAY_FREQ_28_DAYS, PAY_FREQ_14_DAYS]:
114115
return await self.async_step_cycle_last_paydate()
115116
elif self.pay_frequency == PAY_FREQ_WEEKLY:
116117
return await self.async_step_weekly()

custom_components/isitpayday/payday_calculator.py

Lines changed: 12 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -32,23 +32,19 @@ async def async_calculate_next_payday(country: str, pay_frequency: str, pay_day=
3232
year = today.year
3333
bank_holidays = await async_get_bank_holidays(country, year)
3434

35-
if pay_frequency in (
36-
PAY_FREQ_MONTHLY, PAY_FREQ_BIMONTHLY,
37-
PAY_FREQ_QUARTERLY, PAY_FREQ_SEMIANNUAL,
38-
PAY_FREQ_ANNUAL
39-
):
40-
months = {
41-
PAY_FREQ_MONTHLY: 1,
42-
PAY_FREQ_BIMONTHLY: 2,
43-
PAY_FREQ_QUARTERLY: 3,
44-
PAY_FREQ_SEMIANNUAL: 6,
45-
PAY_FREQ_ANNUAL: 12,
35+
if pay_frequency == PAY_FREQ_MONTHLY:
36+
payday = await async_calculate_month_based(today, 1, pay_day, bank_offset, bank_holidays)
37+
38+
elif pay_frequency in (PAY_FREQ_28_DAYS, PAY_FREQ_14_DAYS, PAY_FREQ_BIMONTHLY, PAY_FREQ_QUARTERLY, PAY_FREQ_SEMIANNUAL, PAY_FREQ_ANNUAL):
39+
interval_days = {
40+
PAY_FREQ_14_DAYS: 14,
41+
PAY_FREQ_28_DAYS: 28,
42+
PAY_FREQ_BIMONTHLY: 60,
43+
PAY_FREQ_QUARTERLY: 90,
44+
PAY_FREQ_SEMIANNUAL: 182,
45+
PAY_FREQ_ANNUAL: 365,
4646
}[pay_frequency]
47-
payday = await async_calculate_month_based(today, months, pay_day, bank_offset, bank_holidays)
48-
49-
elif pay_frequency in (PAY_FREQ_28_DAYS, PAY_FREQ_14_DAYS):
50-
interval = 28 if pay_frequency == PAY_FREQ_28_DAYS else 14
51-
payday = await async_calculate_recurring(last_pay_date, interval, bank_holidays)
47+
payday = await async_calculate_recurring(last_pay_date, interval_days, bank_holidays)
5248

5349
elif pay_frequency == PAY_FREQ_WEEKLY:
5450
if weekday is None:

0 commit comments

Comments
 (0)