Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 3 additions & 4 deletions traffic_control/admin/additional_sign.py
Original file line number Diff line number Diff line change
Expand Up @@ -160,7 +160,7 @@ class AdditionalSignPlanAdmin(
{
"fields": (
("validity_period_start", "validity_period_end"),
("seasonal_validity_period_start", "seasonal_validity_period_end"),
"seasonal_validity_period_information",
"lifecycle",
)
},
Expand Down Expand Up @@ -299,7 +299,7 @@ class AdditionalSignRealAdmin(
{
"fields": (
("validity_period_start", "validity_period_end"),
("seasonal_validity_period_start", "seasonal_validity_period_end"),
"seasonal_validity_period_information",
"lifecycle",
)
},
Expand Down Expand Up @@ -327,8 +327,7 @@ class AdditionalSignRealAdmin(
"condition",
"reflection_class",
"surface_class",
"seasonal_validity_period_start",
"seasonal_validity_period_end",
"seasonal_validity_period_information",
"owner",
"lifecycle",
"road_name",
Expand Down
4 changes: 2 additions & 2 deletions traffic_control/admin/road_marking.py
Original file line number Diff line number Diff line change
Expand Up @@ -160,7 +160,7 @@ class RoadMarkingPlanAdmin(
{
"fields": (
("validity_period_start", "validity_period_end"),
("seasonal_validity_period_start", "seasonal_validity_period_end"),
"seasonal_validity_period_information",
"lifecycle",
)
},
Expand Down Expand Up @@ -296,7 +296,7 @@ class RoadMarkingRealAdmin(
{
"fields": (
("validity_period_start", "validity_period_end"),
("seasonal_validity_period_start", "seasonal_validity_period_end"),
"seasonal_validity_period_information",
"lifecycle",
)
},
Expand Down
4 changes: 2 additions & 2 deletions traffic_control/admin/signpost.py
Original file line number Diff line number Diff line change
Expand Up @@ -139,7 +139,7 @@ class SignpostPlanAdmin(
{
"fields": (
("validity_period_start", "validity_period_end"),
("seasonal_validity_period_start", "seasonal_validity_period_end"),
"seasonal_validity_period_information",
"lifecycle",
)
},
Expand Down Expand Up @@ -272,7 +272,7 @@ class SignpostRealAdmin(
{
"fields": (
("validity_period_start", "validity_period_end"),
("seasonal_validity_period_start", "seasonal_validity_period_end"),
"seasonal_validity_period_information",
"lifecycle",
)
},
Expand Down
7 changes: 3 additions & 4 deletions traffic_control/admin/traffic_sign.py
Original file line number Diff line number Diff line change
Expand Up @@ -212,7 +212,7 @@ class TrafficSignPlanAdmin(
{
"fields": (
("validity_period_start", "validity_period_end"),
("seasonal_validity_period_start", "seasonal_validity_period_end"),
"seasonal_validity_period_information",
"lifecycle",
)
},
Expand Down Expand Up @@ -363,7 +363,7 @@ class TrafficSignRealAdmin(
{
"fields": (
("validity_period_start", "validity_period_end"),
("seasonal_validity_period_start", "seasonal_validity_period_end"),
"seasonal_validity_period_information",
"lifecycle",
)
},
Expand Down Expand Up @@ -392,8 +392,7 @@ class TrafficSignRealAdmin(
"condition",
"reflection_class",
"surface_class",
"seasonal_validity_period_start",
"seasonal_validity_period_end",
"seasonal_validity_period_information",
"owner",
"lifecycle",
"road_name",
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,137 @@
# Generated by Django 4.2.20 on 2025-06-09 12:26

from django.db import migrations, models


class Migration(migrations.Migration):

dependencies = [
('traffic_control', '0090_alter_additionalsignplan_parent'),
]

operations = [
migrations.RemoveField(
model_name='additionalsignplan',
name='seasonal_validity_period_end',
),
migrations.RemoveField(
model_name='additionalsignplan',
name='seasonal_validity_period_start',
),
migrations.RemoveField(
model_name='additionalsignreal',
name='seasonal_validity_period_end',
),
migrations.RemoveField(
model_name='additionalsignreal',
name='seasonal_validity_period_start',
),
migrations.RemoveField(
model_name='roadmarkingplan',
name='seasonal_validity_period_end',
),
migrations.RemoveField(
model_name='roadmarkingplan',
name='seasonal_validity_period_start',
),
migrations.RemoveField(
model_name='roadmarkingreal',
name='seasonal_validity_period_end',
),
migrations.RemoveField(
model_name='roadmarkingreal',
name='seasonal_validity_period_start',
),
migrations.RemoveField(
model_name='signpostplan',
name='seasonal_validity_period_end',
),
migrations.RemoveField(
model_name='signpostplan',
name='seasonal_validity_period_start',
),
migrations.RemoveField(
model_name='signpostreal',
name='seasonal_validity_period_end',
),
migrations.RemoveField(
model_name='signpostreal',
name='seasonal_validity_period_start',
),
migrations.RemoveField(
model_name='trafficsignplan',
name='seasonal_validity_period_end',
),
migrations.RemoveField(
model_name='trafficsignplan',
name='seasonal_validity_period_start',
),
migrations.RemoveField(
model_name='trafficsignreal',
name='seasonal_validity_period_end',
),
migrations.RemoveField(
model_name='trafficsignreal',
name='seasonal_validity_period_start',
),
migrations.AddField(
model_name='additionalsignplan',
name='seasonal_validity_period_information',
field=models.TextField(blank=True, default='', help_text='Seasonal validity period information related to this device.', verbose_name='Seasonal validity period information'),
),
migrations.AddField(
model_name='additionalsignreal',
name='seasonal_validity_period_information',
field=models.TextField(blank=True, default='', help_text='Seasonal validity period information related to this device.', verbose_name='Seasonal validity period information'),
),
migrations.AddField(
model_name='roadmarkingplan',
name='seasonal_validity_period_information',
field=models.TextField(blank=True, default='', help_text='Seasonal validity period information related to this device.', verbose_name='Seasonal validity period information'),
),
migrations.AddField(
model_name='roadmarkingreal',
name='seasonal_validity_period_information',
field=models.TextField(blank=True, default='', help_text='Seasonal validity period information related to this device.', verbose_name='Seasonal validity period information'),
),
migrations.AddField(
model_name='signpostplan',
name='seasonal_validity_period_information',
field=models.TextField(blank=True, default='', help_text='Seasonal validity period information related to this device.', verbose_name='Seasonal validity period information'),
),
migrations.AddField(
model_name='signpostreal',
name='seasonal_validity_period_information',
field=models.TextField(blank=True, default='', help_text='Seasonal validity period information related to this device.', verbose_name='Seasonal validity period information'),
),
migrations.AddField(
model_name='trafficsignplan',
name='seasonal_validity_period_information',
field=models.TextField(blank=True, default='', help_text='Seasonal validity period information related to this device.', verbose_name='Seasonal validity period information'),
),
migrations.AddField(
model_name='trafficsignreal',
name='seasonal_validity_period_information',
field=models.TextField(blank=True, default='', help_text='Seasonal validity period information related to this device.', verbose_name='Seasonal validity period information'),
),
migrations.AlterField(
model_name='roadmarkingplan',
name='validity_period_end',
field=models.DateField(blank=True, help_text='Date after which this sign becomes inactive.', null=True, verbose_name='Validity period end'),
),
migrations.AlterField(
model_name='roadmarkingplan',
name='validity_period_start',
field=models.DateField(blank=True, help_text='Date on which this sign becomes active.', null=True, verbose_name='Validity period start'),
),
migrations.AlterField(
model_name='roadmarkingreal',
name='validity_period_end',
field=models.DateField(blank=True, help_text='Date after which this sign becomes inactive.', null=True, verbose_name='Validity period end'),
),
migrations.AlterField(
model_name='roadmarkingreal',
name='validity_period_start',
field=models.DateField(blank=True, help_text='Date on which this sign becomes active.', null=True, verbose_name='Validity period start'),
),
]
25 changes: 25 additions & 0 deletions traffic_control/mixins/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -242,3 +242,28 @@ def save(self, *args, **kwargs):
raise ValidationError(f"Geometry for {self._meta.model_name} {self.location.ewkt} is not legal")

super().save(*args, **kwargs)


class ValidityPeriodModel(models.Model):
validity_period_start = models.DateField(
_("Validity period start"),
blank=True,
null=True,
help_text=_("Date on which this sign becomes active."),
)
validity_period_end = models.DateField(
_("Validity period end"),
blank=True,
null=True,
help_text=_("Date after which this sign becomes inactive."),
)
seasonal_validity_period_information = models.TextField(
_("Seasonal validity period information"),
blank=True,
null=False,
default="",
help_text=_("Seasonal validity period information related to this device."),
)

class Meta:
abstract = True
32 changes: 7 additions & 25 deletions traffic_control/models/additional_sign.py
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@
SourceControlModel,
UpdatePlanLocationMixin,
UserControlModel,
ValidityPeriodModel,
)
from traffic_control.models.affect_area import CoverageArea
from traffic_control.models.common import (
Expand All @@ -40,7 +41,12 @@ class Color(models.IntegerChoices):


class AbstractAdditionalSign(
BoundaryCheckedLocationMixin, SourceControlModel, SoftDeleteModel, UserControlModel, OwnedDeviceModel
BoundaryCheckedLocationMixin,
SourceControlModel,
SoftDeleteModel,
UserControlModel,
OwnedDeviceModel,
ValidityPeriodModel,
):
device_type = models.ForeignKey(
TrafficControlDeviceType,
Expand Down Expand Up @@ -157,30 +163,6 @@ class AbstractAdditionalSign(
null=True,
help_text=_("Specifies where the sign is in relation to the road."),
)
validity_period_start = models.DateField(
_("Validity period start"),
blank=True,
null=True,
help_text=_("Date on which this sign becomes active."),
)
validity_period_end = models.DateField(
_("Validity period end"),
blank=True,
null=True,
help_text=_("Date after which this sign becomes inactive."),
)
seasonal_validity_period_start = models.DateField(
_("Seasonal validity period start"),
blank=True,
null=True,
help_text=_("Date on which this sign becomes seasonally active."),
)
seasonal_validity_period_end = models.DateField(
_("Seasonal validity period end"),
blank=True,
null=True,
help_text=_("Date after which this sign becomes seasonally inactive."),
)

class Meta:
abstract = True
Expand Down
32 changes: 7 additions & 25 deletions traffic_control/models/road_marking.py
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@
SourceControlModel,
UpdatePlanLocationMixin,
UserControlModel,
ValidityPeriodModel,
)
from traffic_control.models.common import (
OperationBase,
Expand Down Expand Up @@ -62,7 +63,12 @@ class LocationSpecifier(models.IntegerChoices):


class AbstractRoadMarking(
BoundaryCheckedLocationMixin, SourceControlModel, SoftDeleteModel, UserControlModel, OwnedDeviceModel
BoundaryCheckedLocationMixin,
SourceControlModel,
SoftDeleteModel,
UserControlModel,
OwnedDeviceModel,
ValidityPeriodModel,
):
location = models.GeometryField(_("Location (3D)"), dim=3, srid=settings.SRID)
road_name = models.CharField(
Expand Down Expand Up @@ -143,30 +149,6 @@ class AbstractRoadMarking(
null=True,
help_text=_("Additional device type codes specific to the local public authorities."),
)
validity_period_start = models.DateField(
_("Validity period start"),
blank=True,
null=True,
help_text=_("Date on which this road marking becomes active."),
)
validity_period_end = models.DateField(
_("Validity period end"),
blank=True,
null=True,
help_text=_("Date after which this road marking becomes inactive."),
)
seasonal_validity_period_start = models.DateField(
_("Seasonal validity period start"),
blank=True,
null=True,
help_text=_("Date on which this road marking becomes seasonally active."),
)
seasonal_validity_period_end = models.DateField(
_("Seasonal validity period end"),
blank=True,
null=True,
help_text=_("Date after which this road marking becomes seasonally inactive."),
)
symbol = models.CharField(
_("Symbol"),
max_length=254,
Expand Down
Loading
Loading