diff options
author | Étienne Loks <etienne.loks@peacefrogs.net> | 2011-04-22 20:31:51 +0200 |
---|---|---|
committer | Étienne Loks <etienne.loks@peacefrogs.net> | 2011-04-22 20:31:51 +0200 |
commit | 403b2ee897a028f98c01b539a8e6ac90fd6d5aa9 (patch) | |
tree | 023b6ef4e220311cfba20d9501dbbe60788b54f2 | |
parent | 172f589d96fc70c89714d357e73b2415cfde13b9 (diff) | |
download | Ishtar-403b2ee897a028f98c01b539a8e6ac90fd6d5aa9.tar.bz2 Ishtar-403b2ee897a028f98c01b539a8e6ac90fd6d5aa9.zip |
Manage specific index for finds (closes #372) - Complete sheet for context unit (closes #376)
-rw-r--r-- | ishtar/furnitures/forms.py | 5 | ||||
-rw-r--r-- | ishtar/furnitures/models.py | 56 | ||||
-rw-r--r-- | ishtar/templates/sheet_contextrecord.html | 4 | ||||
-rw-r--r-- | ishtar/templates/sheet_operation.html | 4 |
4 files changed, 55 insertions, 14 deletions
diff --git a/ishtar/furnitures/forms.py b/ishtar/furnitures/forms.py index 0f93a94bc..2449ede98 100644 --- a/ishtar/furnitures/forms.py +++ b/ishtar/furnitures/forms.py @@ -365,6 +365,9 @@ class Wizard(NamedUrlSessionFormWizard): obj.save() for k in adds: getattr(obj, k).add(adds[k]) + # necessary to manage interaction between models like + # material_index management for baseitems + obj.save() m2m_items = {} for key, value in m2m: if key not in m2m_items: @@ -387,6 +390,8 @@ class Wizard(NamedUrlSessionFormWizard): value = model.objects.create(**value) value.save() getattr(obj, key+'s').add(value) + # necessary to manage interaction between models like + # material_index management for baseitems obj.save() res = render_to_response('wizard_done.html', {}, context_instance=RequestContext(request)) diff --git a/ishtar/furnitures/models.py b/ishtar/furnitures/models.py index 44e0e9391..1e0072c45 100644 --- a/ishtar/furnitures/models.py +++ b/ishtar/furnitures/models.py @@ -27,7 +27,7 @@ from django.core.validators import validate_slug from django.utils.translation import ugettext_lazy as _, ugettext from django.db.utils import DatabaseError from django.utils.safestring import SafeUnicode -from django.db.models import Q +from django.db.models import Q, Max from django.contrib.auth.models import User from django.contrib.gis.db import models @@ -804,6 +804,8 @@ class BaseItem(BaseHistorizedItem, OwnPerms): related_name='base_items', verbose_name=_(u"Context Record")) is_isolated = models.NullBooleanField(_(u"Is isolated?"), blank=True, null=True) + index = models.IntegerField(u"Index", default=0) + material_index = models.IntegerField(u"Material index", default=0) documentations = models.ManyToManyField(Source) history = HistoricalRecords() @@ -822,25 +824,45 @@ class BaseItem(BaseHistorizedItem, OwnPerms): def get_last_item(self): #TODO: manage virtuals - property(last_item) ? - return self.item.filter().order_by("-order").all()[0] + items = self.item.filter().order_by("-order").all() + return items and items[0] def full_label(self): return self._real_label() or self._temp_label() + def material_type_label(self): + item = self.get_last_item() + lbl = item and (unicode(item.material_type) + unicode(_(": "))) or '' + if self.context_record.parcel.operation.code_patriarche: + return lbl + JOINT.join([unicode(it) for it in ( + self.context_record.parcel.operation.code_patriarche, + self.context_record.label, + self.material_index, + self.label)]) + return lbl + JOINT.join([unicode(it) for it in ( + self.context_record.parcel.year, + self.index, + self.context_record.label, + self.material_index, + self.label)]) + + def _real_label(self): if not self.context_record.parcel.operation.code_patriarche: return - return JOINT.join((self.context_record.parcel.operation.code_patriarche, + return JOINT.join([unicode(it) for it in ( + self.context_record.parcel.operation.code_patriarche, self.context_record.label, - self.label)) + self.label)]) def _temp_label(self): if self.context_record.parcel.operation.code_patriarche: return - return JOINT.join((self.context_record.parcel.year, - #TODO:self.index + return JOINT.join([unicode(it) for it in ( + self.context_record.parcel.year, + self.index, self.context_record.label, - self.label)) + self.label)]) class Item(BaseHistorizedItem, OwnPerms): TABLE_COLS = ['base_items.context_record.parcel.town', @@ -881,9 +903,23 @@ class Item(BaseHistorizedItem, OwnPerms): def __unicode__(self): return self.label - def material_type_label(self): - #TODO to complete cf. #372 and sheet_contextrecord template - return unicode(self.material_type) + def save(self, *args, **kwargs): + if not self.pk: + super(Item, self).save(*args, **kwargs) + for base_item in self.base_items.all(): + if not base_item.index: + idx = BaseItem.objects.filter(context_record=\ + base_item.context_record).aggregate(Max('index')) + base_item.index = idx and idx['index__max'] + 1 or 1 + if not base_item.material_index: + idx = BaseItem.objects.filter(context_record=\ + base_item.context_record, + item__material_type=self.material_type).aggregate( + Max('material_index')) + base_item.material_index = idx and \ + idx['material_index__max'] + 1 or 1 + base_item.save() + super(Item, self).save(*args, **kwargs) class ParcelOwner(LightHistorizedItem): diff --git a/ishtar/templates/sheet_contextrecord.html b/ishtar/templates/sheet_contextrecord.html index 0f7259f3a..76b76183f 100644 --- a/ishtar/templates/sheet_contextrecord.html +++ b/ishtar/templates/sheet_contextrecord.html @@ -115,11 +115,11 @@ <td>{{ find.full_label }}</td> {# Displayed as (Patriarche operation code)-(Record unit label)-(Finds label). #} {# or displayed as (Year)-(index)-(Record unit label)-(Finds label). #} - <td>{{ find.get_last_item.material_type_label }}</td> + <td>{{ find.material_type_label }}</td> {# Displayed as (Patriarche operation code)-(Record unit label)-(material code)-(Finds label indexed by material type). #} {# or displayed as (Year)-(index)-(Record unit label)-(material code)-(Finds label indexed by material type) #} - <td class='string'>{{find.context_record.short_label}}</td> + <td class='string'>{{find.context_record}}</td> <td>{{ find.get_last_item.dating}}</td>{# TODO .all|join:", " ? #} <td>{{ find.get_last_item.description }}</td> <td>{{ find.get_last_item.weight }}</td> diff --git a/ishtar/templates/sheet_operation.html b/ishtar/templates/sheet_operation.html index 7cf6554b4..3a76ccf4e 100644 --- a/ishtar/templates/sheet_operation.html +++ b/ishtar/templates/sheet_operation.html @@ -166,11 +166,11 @@ <td>{{ find.full_label }}</td> {# Displayed as (Patriarche operation code)-(Record unit label)-(Finds label). #} {# or displayed as (Year)-(index)-(Record unit label)-(Finds label). #} - <td>{{ find.get_last_item.material_type_label }}</td> + <td>{{ find.material_type_label }}</td> {# Displayed as (Patriarche operation code)-(Record unit label)-(material code)-(Finds label indexed by material type). #} {# or displayed as (Year)-(index)-(Record unit label)-(material code)-(Finds label indexed by material type) #} - <td class='string'>{{find.context_record.short_label}}</td> + <td class='string'>{{find.context_record}}</td> <td>{{ find.get_last_item.dating}}</td>{# TODO .all|join:", " ? #} <td>{{ find.get_last_item.description }}</td> <td>{{ find.get_last_item.weight }}</td> |