Skip to content

Commit b704fbe

Browse files
committed
Merge branch 'develop'
2 parents 9f8a1a2 + 80e85c8 commit b704fbe

File tree

5 files changed

+173
-6
lines changed

5 files changed

+173
-6
lines changed

CHANGELOG.md

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

88
## [Unreleased]
99

10+
## [1.6.2] - 2025-03-06
11+
12+
### Fixed
13+
14+
- Fix permit getting wrong price ([859dd36](https://github.com/City-of-Helsinki/parking-permits/commit/859dd36b171d41eca38cc46d091f283a46ae2551))
15+
- Add hard limit for amount of returted products ([518cf4d](https://github.com/City-of-Helsinki/parking-permits/commit/518cf4db675329f9b148c79bef0c0e56bc134f5f))
16+
1017
## [1.6.1] - 2024-12-20
1118

1219
### Fixed

parking_permits/models/parking_permit.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -820,6 +820,7 @@ def end_permit(self, end_type, force_end=False):
820820
or end_type == ParkingPermitEndType.PREVIOUS_DAY_END
821821
):
822822
self.status = ParkingPermitStatus.CLOSED
823+
self.temp_vehicles.update(is_active=False, end_time=end_time)
823824

824825
self.cancel_extension_requests()
825826
self.save()

parking_permits/resolver_utils.py

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -173,9 +173,10 @@ def end_permit(
173173
174174
Ends Subscription for open ended permit and issues refund if applicable.
175175
176-
Any active temporary vehicles are deactivated.
177-
178176
Parkkihubi is updated with new status.
177+
178+
Any active temporary vehicles are deactivated in permit.end_permit()
179+
if end_type in [IMMEDIATELY, PREVIOUS_DAY_END]
179180
"""
180181
if permit.is_open_ended:
181182
if subscription := (
@@ -199,8 +200,6 @@ def end_permit(
199200
):
200201
order.cancel(cancel_from_talpa=cancel_from_talpa)
201202

202-
permit.temp_vehicles.update(is_active=False)
203-
204203
if permit.consent_low_emission_accepted and permit.vehicle.is_low_emission:
205204
send_vehicle_low_emission_discount_email(
206205
PermitEmailType.VEHICLE_LOW_EMISSION_DISCOUNT_DEACTIVATED,

parking_permits/tests/models/test_parking_permit.py

Lines changed: 154 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -472,6 +472,160 @@ def test_active_temporary_vehicles_not_in_time_range(self):
472472
permit.temp_vehicles.add(vehicle)
473473
self.assertEqual(permit.active_temporary_vehicle, None)
474474

475+
@freeze_time(timezone.make_aware(datetime(2024, 1, 1)))
476+
def test_temporary_vehicle_changed_inactive_when_ending_immediately(self):
477+
start_time = timezone.make_aware(datetime(2024, 2, 1))
478+
end_time = get_end_time(start_time, 6)
479+
480+
permit = ParkingPermitFactory(
481+
contract_type=ContractType.FIXED_PERIOD,
482+
start_time=start_time,
483+
end_time=end_time,
484+
month_count=6,
485+
)
486+
487+
vehicle = TemporaryVehicleFactory(
488+
start_time=start_time,
489+
end_time=start_time + timedelta(weeks=2),
490+
is_active=True,
491+
)
492+
permit.temp_vehicles.add(vehicle)
493+
494+
permit.end_permit(ParkingPermitEndType.IMMEDIATELY)
495+
496+
self.assertFalse(permit.temp_vehicles.first().is_active)
497+
498+
@freeze_time(timezone.make_aware(datetime(2024, 1, 1)))
499+
def test_temporary_vehicle_changed_inactive_when_ending_previous_day_end(self):
500+
start_time = timezone.make_aware(datetime(2024, 2, 1))
501+
end_time = get_end_time(start_time, 6)
502+
503+
permit = ParkingPermitFactory(
504+
contract_type=ContractType.FIXED_PERIOD,
505+
start_time=start_time,
506+
end_time=end_time,
507+
month_count=6,
508+
)
509+
510+
vehicle = TemporaryVehicleFactory(
511+
start_time=start_time,
512+
end_time=start_time + timedelta(weeks=2),
513+
is_active=True,
514+
)
515+
permit.temp_vehicles.add(vehicle)
516+
517+
permit.end_permit(ParkingPermitEndType.PREVIOUS_DAY_END)
518+
519+
self.assertFalse(permit.temp_vehicles.first().is_active)
520+
521+
@freeze_time(timezone.make_aware(datetime(2024, 1, 1)))
522+
def test_temporary_vehicle_not_inactivated_immediately_when_ending_after_current_period(
523+
self,
524+
):
525+
start_time = timezone.make_aware(datetime(2024, 2, 1))
526+
end_time = get_end_time(start_time, 6)
527+
528+
permit = ParkingPermitFactory(
529+
contract_type=ContractType.FIXED_PERIOD,
530+
start_time=start_time,
531+
end_time=end_time,
532+
month_count=6,
533+
)
534+
535+
vehicle = TemporaryVehicleFactory(
536+
start_time=start_time,
537+
end_time=start_time + timedelta(weeks=2),
538+
is_active=True,
539+
)
540+
permit.temp_vehicles.add(vehicle)
541+
542+
permit.end_permit(ParkingPermitEndType.AFTER_CURRENT_PERIOD)
543+
544+
self.assertTrue(permit.temp_vehicles.first().is_active)
545+
546+
@freeze_time(timezone.make_aware(datetime(2024, 2, 2)))
547+
def test_temporary_vehicle_end_time_stays_original(self):
548+
start_time = timezone.make_aware(datetime(2024, 2, 1))
549+
end_time = get_end_time(start_time, 6)
550+
551+
permit = ParkingPermitFactory(
552+
contract_type=ContractType.FIXED_PERIOD,
553+
start_time=start_time,
554+
end_time=end_time,
555+
month_count=6,
556+
)
557+
558+
vehicle = TemporaryVehicleFactory(
559+
start_time=start_time,
560+
end_time=start_time + timedelta(weeks=2),
561+
is_active=True,
562+
)
563+
permit.temp_vehicles.add(vehicle)
564+
565+
permit.end_permit(ParkingPermitEndType.AFTER_CURRENT_PERIOD)
566+
567+
self.assertEqual(
568+
permit.temp_vehicles.first().end_time, start_time + timedelta(weeks=2)
569+
)
570+
571+
@freeze_time(timezone.make_aware(datetime(2024, 2, 2)))
572+
def test_temporary_vehicle_end_time_changed_to_permit_end_time_if_ended_previous_day_end(
573+
self,
574+
):
575+
start_time = timezone.make_aware(datetime(2024, 2, 1))
576+
end_time = get_end_time(start_time, 6)
577+
578+
permit = ParkingPermitFactory(
579+
contract_type=ContractType.FIXED_PERIOD,
580+
start_time=start_time,
581+
end_time=end_time,
582+
month_count=6,
583+
)
584+
585+
vehicle = TemporaryVehicleFactory(
586+
start_time=start_time,
587+
end_time=start_time + timedelta(weeks=2),
588+
is_active=True,
589+
)
590+
permit.temp_vehicles.add(vehicle)
591+
592+
permit.end_permit(ParkingPermitEndType.PREVIOUS_DAY_END)
593+
594+
previous_day = timezone.localtime() - timezone.timedelta(days=1)
595+
previous_day_end = previous_day.replace(
596+
hour=23,
597+
minute=59,
598+
second=59,
599+
microsecond=999999,
600+
)
601+
602+
self.assertEqual(permit.temp_vehicles.first().end_time, previous_day_end)
603+
604+
@freeze_time(timezone.make_aware(datetime(2024, 2, 2)))
605+
def test_temporary_vehicle_end_time_changed_to_permit_end_time_if_ended_immediately(
606+
self,
607+
):
608+
start_time = timezone.make_aware(datetime(2024, 2, 1))
609+
end_time = get_end_time(start_time, 6)
610+
611+
permit = ParkingPermitFactory(
612+
contract_type=ContractType.FIXED_PERIOD,
613+
start_time=start_time,
614+
end_time=end_time,
615+
month_count=6,
616+
)
617+
618+
vehicle = TemporaryVehicleFactory(
619+
start_time=start_time,
620+
end_time=start_time + timedelta(weeks=2),
621+
is_active=True,
622+
)
623+
permit.temp_vehicles.add(vehicle)
624+
625+
permit.end_permit(ParkingPermitEndType.IMMEDIATELY)
626+
627+
self.assertEqual(permit.temp_vehicles.first().end_time, permit.end_time)
628+
475629
def test_get_products_with_quantities_should_return_products_with_quantities_for_fix_period_with_mid_month_start(
476630
self,
477631
):

parking_permits/tests/test_customer_permit.py

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -433,15 +433,21 @@ class UpdateCustomerPermitTestCase(TestCase):
433433
def setUp(self):
434434
self.cus_a = CustomerFactory(first_name="Firstname A", last_name="")
435435
self.cus_b = CustomerFactory(first_name="Firstname B", last_name="")
436+
zone_a = ParkingZoneFactory(name="A")
437+
zone_b = ParkingZoneFactory(name="B")
436438

437439
self.c_a_draft = ParkingPermitFactory(
438440
customer=self.cus_a,
439441
status=DRAFT,
440442
address=self.cus_a.primary_address,
441443
parking_zone=self.cus_a.primary_address.zone,
442444
)
443-
self.c_a_closed = ParkingPermitFactory(customer=self.cus_a, status=CLOSED)
444-
self.c_b_valid = ParkingPermitFactory(customer=self.cus_b, status=VALID)
445+
self.c_a_closed = ParkingPermitFactory(
446+
customer=self.cus_a, status=CLOSED, parking_zone=zone_a
447+
)
448+
self.c_b_valid = ParkingPermitFactory(
449+
customer=self.cus_b, status=VALID, parking_zone=zone_b
450+
)
445451
self.c_b_preliminary = ParkingPermitFactory(
446452
customer=self.cus_b, status=PRELIMINARY
447453
)

0 commit comments

Comments
 (0)