summaryrefslogtreecommitdiff
path: root/archaeological_finds
diff options
context:
space:
mode:
Diffstat (limited to 'archaeological_finds')
-rw-r--r--archaeological_finds/admin.py99
-rw-r--r--archaeological_finds/models_finds.py38
-rw-r--r--archaeological_finds/models_treatments.py20
3 files changed, 141 insertions, 16 deletions
diff --git a/archaeological_finds/admin.py b/archaeological_finds/admin.py
index 9727e9d0e..733d5ba5f 100644
--- a/archaeological_finds/admin.py
+++ b/archaeological_finds/admin.py
@@ -17,7 +17,15 @@
# See the file COPYING for details.
+from ajax_select import make_ajax_form
+from ajax_select.fields import AutoCompleteSelectField, \
+ AutoCompleteSelectMultipleField
+
+from django import forms
from django.contrib import admin
+from django.contrib.gis.forms import PointField, PolygonField, \
+ LineStringField, OSMWidget
+from django.utils.translation import ugettext_lazy as _
from ishtar_common.apps import admin_site
from ishtar_common.admin import HistorizedObjectAdmin, GeneralTypeAdmin
@@ -25,19 +33,45 @@ from ishtar_common.admin import HistorizedObjectAdmin, GeneralTypeAdmin
import models
+class AdminBaseFindForm(forms.ModelForm):
+ class Meta:
+ model = models.BaseFind
+ exclude = []
+ point_2d = PointField(label=_(u"Point (2D)"), required=False,
+ widget=OSMWidget)
+ line = LineStringField(label=_(u"Line"), required=False,
+ widget=OSMWidget)
+ polygon = PolygonField(label=_(u"Polygon"), required=False,
+ widget=OSMWidget)
+ context_record = AutoCompleteSelectField('context_record')
+
+
class BaseFindAdmin(HistorizedObjectAdmin):
- list_display = ('label', 'context_record', 'batch')
+ list_display = ('label', 'context_record', 'index')
search_fields = ('label', 'context_record__parcel__operation__name',)
model = models.BaseFind
+ form = AdminBaseFindForm
+ readonly_fields = HistorizedObjectAdmin.readonly_fields + [
+ 'cache_short_id', 'cache_complete_id', 'imports'
+ ]
admin_site.register(models.BaseFind, BaseFindAdmin)
class FindAdmin(HistorizedObjectAdmin):
- list_display = ('label', 'dating', 'volume', 'weight',
- 'find_number',)
- search_fields = ('label', "datings__period__label")
+ list_display = ('label', 'operations_lbl', 'context_records_lbl', 'index',
+ 'dating', 'materials')
+ list_filter = ('datings__period', 'material_types')
+ search_fields = ('label', "base_finds__cache_complete_id",
+ "base_finds__context_record__operation__cached_label")
model = models.Find
+ form = make_ajax_form(model, {
+ 'base_finds': 'base_find',
+ 'container': 'container'
+ })
+ readonly_fields = HistorizedObjectAdmin.readonly_fields + [
+ 'imports', 'datings', 'cached_label'
+ ]
admin_site.register(models.Find, FindAdmin)
@@ -47,38 +81,83 @@ class FindSourceAdmin(admin.ModelAdmin):
list_filter = ('source_type',)
search_fields = ('title', )
model = models.FindSource
+ form = make_ajax_form(model, {
+ 'authors': 'author',
+ 'find': 'find'
+ })
admin_site.register(models.FindSource, FindSourceAdmin)
-class PropertyAdmin(admin.ModelAdmin):
+class PropertyAdmin(HistorizedObjectAdmin):
list_display = ['find', 'person', 'start_date', 'end_date']
search_fields = ('find__label', 'person__name')
model = models.Property
+ form = make_ajax_form(model, {
+ 'find': 'find',
+ 'person': 'person',
+ })
+ readonly_fields = HistorizedObjectAdmin.readonly_fields + [
+ 'administrative_act', 'imports', ]
+
+ def has_add_permission(self, request):
+ return False
admin_site.register(models.Property, PropertyAdmin)
class TreatmentAdmin(HistorizedObjectAdmin):
- list_display = ('location', 'treatment_types_lbl', 'container', 'person')
+ list_display = ('year', 'index', 'label','treatment_types_lbl', 'location',
+ 'downstream_lbl', 'upstream_lbl', 'container', 'person')
+ list_filter = ('treatment_types', 'treatment_state', 'year')
model = models.Treatment
+ form = make_ajax_form(model, {
+ 'person': 'person',
+ 'organization': 'organization',
+ 'file': 'treatment_file',
+ 'location': 'warehouse',
+ 'container': 'container',
+ })
+ readonly_fields = HistorizedObjectAdmin.readonly_fields + [
+ 'imports', 'cached_label', 'downstream_lbl', 'upstream_lbl'
+ ]
+
+ def has_add_permission(self, request):
+ return False
admin_site.register(models.Treatment, TreatmentAdmin)
class TreatmentFileAdmin(HistorizedObjectAdmin):
- list_display = ('year', 'index', 'name', 'internal_reference')
- search_fields = ('cached_label',)
+ list_display = ('type', 'year', 'index', 'name',
+ 'applicant', 'in_charge', 'internal_reference')
+ list_filter = ('type', 'year')
+ search_fields = ('name', 'applicant__name', 'applicant__surname',
+ 'applicant__raw_name', 'applicant_organisation__name',
+ 'cached_label')
model = models.TreatmentFile
+ form = make_ajax_form(model,{
+ 'in_charge': 'person',
+ 'applicant': 'person',
+ 'applicant_organisation': 'organization',
+ })
+ exclude = ['imports']
+ readonly_fields = HistorizedObjectAdmin.readonly_fields + [
+ 'cached_label',
+ ]
admin_site.register(models.TreatmentFile, TreatmentFileAdmin)
class TreatmentSourceAdmin(admin.ModelAdmin):
- list_display = ('treatment', 'title', 'source_type',)
+ list_display = ('title', 'treatment', 'source_type',)
list_filter = ('source_type',)
- search_fields = ('title',)
+ search_fields = ('title', 'treatment__cached_label')
model = models.TreatmentSource
+ form = make_ajax_form(model, {
+ 'treatment': 'treatment',
+ 'authors': 'author'
+ })
admin_site.register(models.TreatmentSource, TreatmentSourceAdmin)
diff --git a/archaeological_finds/models_finds.py b/archaeological_finds/models_finds.py
index 738da19a4..421274524 100644
--- a/archaeological_finds/models_finds.py
+++ b/archaeological_finds/models_finds.py
@@ -182,7 +182,7 @@ class BaseFind(BulkUpdatedItem, BaseHistorizedItem, OwnPerms):
SpatialReferenceSystem, verbose_name=_(u"Spatial Reference System"),
blank=True, null=True)
point_2d = models.PointField(_(u"Point (2D)"), blank=True, null=True)
- point = models.PointField(_(u"Point"), blank=True, null=True, dim=3)
+ point = models.PointField(_(u"Point (3D)"), blank=True, null=True, dim=3)
line = models.LineStringField(_(u"Line"), blank=True, null=True)
polygon = models.PolygonField(_(u"Polygon"), blank=True, null=True)
cache_short_id = models.TextField(
@@ -638,7 +638,9 @@ class Find(BulkUpdatedItem, ValueGetter, BaseHistorizedItem, ImageModel,
label = models.TextField(_(u"Free ID"))
description = models.TextField(_(u"Description"), blank=True, null=True)
material_types = models.ManyToManyField(
- MaterialType, verbose_name=_(u"Material types"), related_name='finds')
+ MaterialType, verbose_name=_(u"Material types"), related_name='finds',
+ blank=True
+ )
conservatory_state = models.ForeignKey(
ConservatoryState, verbose_name=_(u"Conservatory state"), blank=True,
null=True, on_delete=models.SET_NULL)
@@ -646,7 +648,7 @@ class Find(BulkUpdatedItem, ValueGetter, BaseHistorizedItem, ImageModel,
blank=True, null=True)
preservation_to_considers = models.ManyToManyField(
PreservationType, verbose_name=_(u"Type of preservation to consider"),
- related_name='finds')
+ related_name='finds', blank=True)
volume = models.FloatField(_(u"Volume (l)"), blank=True, null=True)
weight = models.FloatField(_(u"Weight (g)"), blank=True, null=True)
weight_unit = models.CharField(_(u"Weight unit"), max_length=4,
@@ -668,13 +670,15 @@ class Find(BulkUpdatedItem, ValueGetter, BaseHistorizedItem, ImageModel,
is_complete = models.NullBooleanField(_(u"Is complete?"), blank=True,
null=True)
object_types = models.ManyToManyField(
- ObjectType, verbose_name=_(u"Object types"), related_name='find')
+ ObjectType, verbose_name=_(u"Object types"), related_name='find',
+ blank=True
+ )
integrities = models.ManyToManyField(
IntegrityType, verbose_name=_(u"Integrity / interest"),
- related_name='find')
+ related_name='find', blank=True)
remarkabilities = models.ManyToManyField(
RemarkabilityType, verbose_name=_(u"Remarkability"),
- related_name='find')
+ related_name='find', blank=True)
min_number_of_individuals = models.IntegerField(
_(u"Minimum number of individuals (MNI)"), blank=True, null=True)
length = models.FloatField(_(u"Length (cm)"), blank=True, null=True)
@@ -735,6 +739,11 @@ class Find(BulkUpdatedItem, ValueGetter, BaseHistorizedItem, ImageModel,
return u" ; ".join([unicode(dating) for dating in self.datings.all()])
@property
+ def materials(self):
+ return u" ; ".join([unicode(material)
+ for material in self.material_types.all()])
+
+ @property
def show_url(self):
return reverse('show-find', args=[self.pk, ''])
@@ -776,6 +785,23 @@ class Find(BulkUpdatedItem, ValueGetter, BaseHistorizedItem, ImageModel,
bf.context_record.operation.get_reference(),
self.index)
+ def context_records_lbl(self):
+ return u" - ".join(
+ [bf.context_record.cached_label for bf in self.base_finds.all()]
+ )
+ context_records_lbl.short_description = _(u"Context record")
+ context_records_lbl.admin_order_field = \
+ "base_finds__context_record__cached_label"
+
+ def operations_lbl(self):
+ return u" - ".join(
+ [bf.context_record.operation.cached_label
+ for bf in self.base_finds.all()]
+ )
+ operations_lbl.short_description = _(u"Operation")
+ operations_lbl.admin_order_field = \
+ "base_finds__context_record__operation__cached_label"
+
def _get_treatments(self, model, rel='upstream', limit=None):
treatments, findtreats = [], []
q = model.objects.filter(
diff --git a/archaeological_finds/models_treatments.py b/archaeological_finds/models_treatments.py
index d1b1afd4b..048d3064d 100644
--- a/archaeological_finds/models_treatments.py
+++ b/archaeological_finds/models_treatments.py
@@ -208,6 +208,26 @@ class Treatment(DashboardFormItem, ValueGetter, BaseHistorizedItem,
:return: string
"""
return u" ; ".join([unicode(t) for t in self.treatment_types.all()])
+ treatment_types_lbl.short_description = _(u"Treatment types")
+ treatment_types_lbl.admin_order_field = 'treatment_types__label'
+
+ def downstream_lbl(self):
+ """
+ Downstream finds label
+ :return: string
+ """
+ return u" ; ".join([f.cached_label for f in self.downstream.all()])
+ downstream_lbl.short_description = _(u"Downstream finds")
+ downstream_lbl.admin_order_field = 'downstream__cached_label'
+
+ def upstream_lbl(self):
+ """
+ Upstream finds label
+ :return: string
+ """
+ return u" ; ".join([f.cached_label for f in self.upstream.all()])
+ upstream_lbl.short_description = _(u"Upstream finds")
+ upstream_lbl.admin_order_field = 'upstream__cached_label'
def get_values(self, prefix=''):
values = super(Treatment, self).get_values(prefix=prefix)