Skip to content

Commit 8401c2e

Browse files
committed
Merge branch 'develop'
2 parents ce5a820 + 8c2f72c commit 8401c2e

File tree

19 files changed

+351
-166
lines changed

19 files changed

+351
-166
lines changed

.env.template

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -129,6 +129,7 @@ EMAIL_HOST_PASSWORD=
129129
EMAIL_PORT=25
130130
EMAIL_TIMEOUT=15
131131
DEFAULT_FROM_EMAIL=
132+
DEBUG_MAILPIT=
132133

133134
# Sentry configuration
134135
SENTRY_DSN=

CHANGELOG.md

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,24 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
77

88
## [Unreleased]
99

10+
## [1.6.0] - 2024-12-19
11+
12+
### Added
13+
14+
- Add emails_handled-flag to AnnouncementAdmin ([39e0b0c](https://github.com/City-of-Helsinki/parking-permits/commit/39e0b0cdfe55fae55ec2aef7707ba01ad0f3bf83))
15+
- Add more logging to Talpa PaymentView ([7e7b612](https://github.com/City-of-Helsinki/parking-permits/commit/7e7b6123cc7ff4d149b5c03bf55c8ad57fd218b0))
16+
- Improve permit automatic expiration tests ([e4f3334](https://github.com/City-of-Helsinki/parking-permits/commit/e4f3334e43a93b349ef0429ab50e25f5864da886))
17+
18+
### Changed
19+
20+
- Handle announcement emails from management command ([337b3a4](https://github.com/City-of-Helsinki/parking-permits/commit/337b3a4ddc15516c751dd72a512f70322d73d6ab))
21+
22+
### Fixed
23+
24+
- Fix issue with low emission consent command ([6a1e816](https://github.com/City-of-Helsinki/parking-permits/commit/6a1e81645c83d62c1786e1c8da000e3b786b17bf))
25+
- Mark open-ended order items as refunded first time ([97e17bb](https://github.com/City-of-Helsinki/parking-permits/commit/97e17bbeaab16cf200d385f3e3f4a3160486a63c))
26+
- Update to use next vehicle in new order ([b3ed47a](https://github.com/City-of-Helsinki/parking-permits/commit/b3ed47ae6526c2004acf175c42d1dd88c6c792fb))
27+
1028
## [1.5.0] - 2024-12-09
1129

1230
### Added

README.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -73,3 +73,8 @@ pip-sync requirements.txt requirements-dev.txt
7373
```bash
7474
fd --extension py | entr -c docker-compose exec graphql-api pytest
7575
```
76+
77+
## Testing emails locally with [Mailpit](https://github.com/axllent/mailpit)
78+
- Start Mailpit with `docker compose up mailpit`
79+
- In your `.env` file, set `EMAIL_HOST=0.0.0.0`, `EMAIL_PORT=1025` and `DEBUG_MAILPIT=True`
80+
- Emails sent by the application will be visible in Mailpit's web interface at [localhost:8025](http://localhost:8025)

docker-compose.yml

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,23 @@ services:
2626
- "127.0.0.1:8888:8888"
2727
container_name: parking-permits-api
2828

29+
30+
mailpit:
31+
image: axllent/mailpit
32+
container_name: mailpit
33+
restart: unless-stopped
34+
volumes:
35+
- ./data:/data
36+
ports:
37+
- 8025:8025
38+
- 1025:1025
39+
environment:
40+
MP_MAX_MESSAGES: 5000
41+
MP_DATABASE: /data/mailpit.db
42+
MP_SMTP_AUTH_ACCEPT_ANY: 1
43+
MP_SMTP_AUTH_ALLOW_INSECURE: 1
44+
45+
2946
volumes:
3047
database-volume: {}
3148

locale/fi/LC_MESSAGES/django.po

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ msgid ""
88
msgstr ""
99
"Project-Id-Version: PACKAGE VERSION\n"
1010
"Report-Msgid-Bugs-To: \n"
11-
"POT-Creation-Date: 2024-11-22 08:50+0200\n"
11+
"POT-Creation-Date: 2024-12-13 08:15+0200\n"
1212
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
1313
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
1414
"Language-Team: LANGUAGE <LL@li.org>\n"
@@ -407,6 +407,9 @@ msgstr "Otsikko (SV)"
407407
msgid "Content (SV)"
408408
msgstr "Sisältö (SV)"
409409

410+
msgid "Emails handled"
411+
msgstr "Sähköpostit käsitelty"
412+
410413
msgid "Company name"
411414
msgstr "Yrityksen nimi"
412415

@@ -591,11 +594,14 @@ msgid "Unit price"
591594
msgstr "Tuotteen hinta"
592595

593596
msgid "Payment unit price"
594-
msgstr "Maksun tuotteen hinta"
597+
msgstr "Maksun hinta"
595598

596599
msgid "Quantity"
597600
msgstr "Määrä"
598601

602+
msgid "Is refunded"
603+
msgstr "Palautettu"
604+
599605
msgid "Order item"
600606
msgstr "Tilausrivi"
601607

locale/sv/LC_MESSAGES/django.po

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ msgid ""
88
msgstr ""
99
"Project-Id-Version: PACKAGE VERSION\n"
1010
"Report-Msgid-Bugs-To: \n"
11-
"POT-Creation-Date: 2024-11-22 08:50+0200\n"
11+
"POT-Creation-Date: 2024-12-13 08:15+0200\n"
1212
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
1313
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
1414
"Language-Team: LANGUAGE <LL@li.org>\n"
@@ -403,6 +403,9 @@ msgstr "Ämne (SV)"
403403
msgid "Content (SV)"
404404
msgstr "Innehåll (SV)"
405405

406+
msgid "Emails handled"
407+
msgstr "E-post hanterad"
408+
406409
msgid "Company name"
407410
msgstr "Företagets namn"
408411

@@ -592,6 +595,9 @@ msgstr "Pris"
592595
msgid "Quantity"
593596
msgstr "Antal"
594597

598+
msgid "Is refunded"
599+
msgstr "Återbetalad"
600+
595601
msgid "Order item"
596602
msgstr "Beställningsrad"
597603

parking_permits/admin.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,7 @@ class AnnouncementAdmin(admin.ModelAdmin):
6464
"subject_sv",
6565
"created_at",
6666
"created_by",
67+
"emails_handled",
6768
)
6869
ordering = ("-created_at",)
6970

parking_permits/admin_resolvers.py

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -88,7 +88,7 @@
8888
from .services.mail import (
8989
PermitEmailType,
9090
RefundEmailType,
91-
send_announcement_email,
91+
send_announcement_emails,
9292
send_permit_email,
9393
send_refund_email,
9494
send_vehicle_low_emission_discount_email,
@@ -1428,7 +1428,7 @@ def post_create_announcement(announcement: Announcement):
14281428
.distinct()
14291429
)
14301430
customers = Customer.objects.filter(id__in=customer_ids)
1431-
send_announcement_email(customers, announcement)
1431+
send_announcement_emails(customers, announcement)
14321432

14331433

14341434
@mutation.field("createAnnouncement")
@@ -1451,8 +1451,6 @@ def resolve_create_announcement(obj, info, announcement):
14511451
ParkingZone.objects.filter(name__in=announcement["parking_zones"])
14521452
)
14531453

1454-
post_create_announcement(new_announcement)
1455-
14561454
return {"success": True}
14571455

14581456

parking_permits/cron.py

Lines changed: 23 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,20 +5,41 @@
55
from django.utils import timezone as tz
66

77
from parking_permits.customer_permit import CustomerPermit
8-
from parking_permits.models import Customer, ParkingPermit
8+
from parking_permits.models import Announcement, Customer, ParkingPermit
99
from parking_permits.models.order import SubscriptionCancelReason
1010
from parking_permits.models.parking_permit import (
1111
ContractType,
1212
ParkingPermitEndType,
1313
ParkingPermitStatus,
1414
)
15-
from parking_permits.services.mail import PermitEmailType, send_permit_email
15+
from parking_permits.services.mail import (
16+
PermitEmailType,
17+
send_announcement_emails,
18+
send_permit_email,
19+
)
1620
from parking_permits.services.parkkihubi import sync_with_parkkihubi
1721

1822
logger = logging.getLogger("django")
1923
db_logger = logging.getLogger("db")
2024

2125

26+
def handle_announcement_emails():
27+
announcements = Announcement.objects.filter(emails_handled=False)
28+
logger.info(f"Found unhandled announcements: {announcements.count()}")
29+
for announcement in announcements:
30+
customers = Customer.objects.filter(
31+
permits__parking_zone__in=announcement.parking_zones.all(),
32+
permits__status=ParkingPermitStatus.VALID,
33+
).distinct()
34+
logger.info(
35+
f"Found {customers.count()} customers for announcement {announcement.pk}"
36+
)
37+
send_announcement_emails(customers, announcement)
38+
announcement.emails_handled = True
39+
announcement.save()
40+
logger.info(f"Announcement {announcement.pk} emails handled")
41+
42+
2243
def automatic_expiration_of_permits():
2344
logger.info("Automatically ending permits started...")
2445
now = tz.localtime(tz.now())

parking_permits/management/commands/disable_consent_low_emission.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ def handle(self, *args, **options):
1818
).select_related("power_type")
1919
i = 0
2020
for vehicle in vehicles:
21-
if not vehicle.power_type.is_electric():
21+
if not vehicle.power_type.is_electric:
2222
vehicle.consent_low_emission_accepted = False
2323
if not dry_run:
2424
vehicle.save()

0 commit comments

Comments
 (0)