Skip to content

Commit

Permalink
Configurable blade code (allow letters)
Browse files Browse the repository at this point in the history
  • Loading branch information
Gaël UTARD committed Mar 6, 2019
1 parent c0109a6 commit a4ff903
Show file tree
Hide file tree
Showing 6 changed files with 79 additions and 10 deletions.
2 changes: 2 additions & 0 deletions docs/changelog.rst
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,8 @@ CHANGELOG

- When updating interventions, stake field is no more required
- Fix duplicates in year filters in intervention module
- Configurable blade code
- Allow letters in blade number


2.24.5 (2019-03-06)
Expand Down
4 changes: 3 additions & 1 deletion geotrek/settings/base.py
Original file line number Diff line number Diff line change
Expand Up @@ -621,5 +621,7 @@ def gettext_noop(s):
'django.contrib.auth.hashers.UnsaltedMD5PasswordHasher', # Used for extern authent
]

FORMAT_LINE_CODE = "{signagecode}-{bladenumber}-{linenumber}"
BLADE_CODE_TYPE = int
BLADE_CODE_FORMAT = "{signagecode}-{bladenumber}"
LINE_CODE_FORMAT = "{signagecode}-{bladenumber}-{linenumber}"
SHOW_EXTREMITIES = False
17 changes: 13 additions & 4 deletions geotrek/signage/forms.py
Original file line number Diff line number Diff line change
Expand Up @@ -54,10 +54,19 @@ def __init__(self, *args, **kwargs):
unicode(_("On %s") % _(self.signage.kind.lower())),
u'<a href="%s">%s</a>' % (self.signage.get_detail_url(), unicode(self.signage))
)
max_blade = self.signage.blade_set.existing().aggregate(max=Max('number'))
value_max = max_blade['max'] or 0

self.fields['number'].initial = value_max + 1
value_max = self.signage.blade_set.existing().aggregate(max=Max('number'))['max']
if settings.BLADE_CODE_TYPE == int:
if not value_max:
self.fields['number'].initial = "1"
elif value_max.isdigit():
self.fields['number'].initial = str(int(value_max) + 1)
elif settings.BLADE_CODE_TYPE in (str, unicode):
print('ici', value_max)
if not value_max:
self.fields['number'].initial = "A"
elif len(value_max) == 1 and "A" <= value_max[0] < "Z":
print('la')
self.fields['number'].initial = chr(ord(value_max[0]) + 1)

def save(self, *args, **kwargs):
self.instance.set_topology(self.signage)
Expand Down
20 changes: 20 additions & 0 deletions geotrek/signage/migrations/0006_auto_20190306_1555.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.11.14 on 2019-03-06 14:55
from __future__ import unicode_literals

from django.db import migrations, models


class Migration(migrations.Migration):

dependencies = [
('signage', '0005_logentry_signage'),
]

operations = [
migrations.AlterField(
model_name='blade',
name='number',
field=models.CharField(db_column=b'numero', max_length=250, verbose_name='Blade Number'),
),
]
9 changes: 4 additions & 5 deletions geotrek/signage/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -173,7 +173,7 @@ def __unicode__(self):
class Blade(NoDeleteMixin, MapEntityMixin, StructureRelated):
signage = models.ForeignKey(Signage, db_column='signaletique', verbose_name=_("Signage"),
on_delete=models.PROTECT)
number = models.IntegerField(verbose_name=_(u"Blade Number"), db_column='numero')
number = models.CharField(verbose_name=_(u"Blade Number"), max_length=250, db_column='numero')
direction = models.ForeignKey(Direction, verbose_name=_(u"Direction"), db_column='direction',
on_delete=models.PROTECT)
type = models.ForeignKey(BladeType, db_column='type', verbose_name=_("Type"))
Expand All @@ -190,7 +190,7 @@ class Meta:
verbose_name_plural = _(u"Blades")

def __unicode__(self):
return "%s %s" % (self.signage, self.number)
return settings.BLADE_CODE_FORMAT.format(signagecode=self.signage.code, bladenumber=self.number)

def set_topology(self, topology):
self.topology = topology
Expand Down Expand Up @@ -221,8 +221,7 @@ def order_lines(self):

@property
def number_display(self):
s = '<a data-pk="%s" href="%s" title="%s" >%s #%s</a>' % (self.pk, self.get_detail_url(), self,
self.signage, self.number)
s = '<a data-pk="%s" href="%s" title="%s" >%s</a>' % (self.pk, self.get_detail_url(), self, self)
return s


Expand Down Expand Up @@ -250,7 +249,7 @@ def geomfield(cls):

@property
def linecode_csv_display(self):
return settings.FORMAT_LINE_CODE.format(signagecode=self.blade.signage.code,
return settings.LINE_CODE_FORMAT.format(signagecode=self.blade.signage.code,
bladenumber=self.blade.number,
linenumber=self.number)

Expand Down
37 changes: 37 additions & 0 deletions geotrek/signage/tests/test_forms.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
from django.test import TestCase, override_settings

from geotrek.authent.factories import UserFactory
from geotrek.signage.factories import SignageFactory, BladeFactory
from geotrek.signage.forms import BladeForm


class BladeFormTest(TestCase):
def setUp(self):
self.user = UserFactory()
self.signage = SignageFactory()

def test_first_int(self):
form = BladeForm(user=self.user, initial={'signage': self.signage})
self.assertEqual(form.fields['number'].initial, "1")

def test_second_int(self):
BladeFactory(signage=self.signage, number="1")
form = BladeForm(user=self.user, initial={'signage': self.signage})
self.assertEqual(form.fields['number'].initial, "2")

@override_settings(BLADE_CODE_TYPE=str)
def test_first_str(self):
form = BladeForm(user=self.user, initial={'signage': self.signage})
self.assertEqual(form.fields['number'].initial, "A")

@override_settings(BLADE_CODE_TYPE=str)
def test_second_str(self):
BladeFactory(signage=self.signage, number="A")
form = BladeForm(user=self.user, initial={'signage': self.signage})
self.assertEqual(form.fields['number'].initial, "B")

@override_settings(BLADE_CODE_TYPE=str)
def test_last_str(self):
BladeFactory(signage=self.signage, number="Z")
form = BladeForm(user=self.user, initial={'signage': self.signage})
self.assertEqual(form.fields['number'].initial, None)

0 comments on commit a4ff903

Please sign in to comment.