summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ishtar/furnitures/admin.py60
-rw-r--r--ishtar/furnitures/models.py56
2 files changed, 83 insertions, 33 deletions
diff --git a/ishtar/furnitures/admin.py b/ishtar/furnitures/admin.py
index b32a35ce1..d4a4d5742 100644
--- a/ishtar/furnitures/admin.py
+++ b/ishtar/furnitures/admin.py
@@ -21,18 +21,43 @@
Admin description
"""
+from django import forms
from django.contrib import admin
+from django.core.exceptions import ObjectDoesNotExist
+from django.utils.translation import ugettext_lazy as _
+from django.contrib import messages
from ishtar import settings
import models
+class HistorizedObjectAdmin(admin.ModelAdmin):
+ def save_model(self, request, obj, form, change):
+ try:
+ ishtar_user = models.IshtarUser.objects.get(user=request.user)
+ obj.history_modifier = ishtar_user
+ except ObjectDoesNotExist:
+ msg = _(u'Account \
+information not created. Create an Ishtar User associated to your account \
+before editing.')
+ messages.error(request, msg, fail_silently=True)
+ form.cleaned_data = {}
+ obj.save()
+
class DepartementAdmin(admin.ModelAdmin):
list_display = ('number', 'label',)
model = models.Departement
admin.site.register(models.Departement, DepartementAdmin)
-class PersonAdmin(admin.ModelAdmin):
+class OrganizationAdmin(HistorizedObjectAdmin):
+ list_display = ('name', 'organization_type')
+ list_filter = ("organization_type",)
+ search_fields = ('name',)
+ model = models.Organization
+
+admin.site.register(models.Organization, OrganizationAdmin)
+
+class PersonAdmin(HistorizedObjectAdmin):
list_display = ('name', 'surname', 'email', 'person_type')
list_filter = ("person_type", "in_charge_storage", "is_author",)
search_fields = ('name', 'surname', 'email',)
@@ -40,15 +65,19 @@ class PersonAdmin(admin.ModelAdmin):
admin.site.register(models.Person, PersonAdmin)
-class FileAdmin(admin.ModelAdmin):
- list_display = ('year', 'number', 'is_active', 'file_type')
+class FileAdmin(HistorizedObjectAdmin):
+ list_display = ['year', 'internal_reference', 'is_active', 'file_type',
+ 'general_contractor',]
+ if settings.COUNTRY == 'fr':
+ list_display += ['saisine_type', 'reference_number']
list_filter = ("file_type", "year", 'is_active',)
search_fields = ('towns__name',)
+ readonly_fields = ('history_modifier',)
model = models.File
admin.site.register(models.File, FileAdmin)
-class OperationAdmin(admin.ModelAdmin):
+class OperationAdmin(HistorizedObjectAdmin):
list_display = ['name', 'operation_code', 'start_date', 'end_date',
'operation_type']
list_filter = ("operation_type",)
@@ -81,7 +110,7 @@ class DatingAdmin(admin.ModelAdmin):
admin.site.register(models.Dating, DatingAdmin)
-class RegistrationUnitAdmin(admin.ModelAdmin):
+class RegistrationUnitAdmin(HistorizedObjectAdmin):
list_display = ('label', 'lenght', 'width',
'thickness', 'depth')
list_filter = ('has_furniture',)
@@ -98,14 +127,14 @@ class SourceAdmin(admin.ModelAdmin):
admin.site.register(models.Source, SourceAdmin)
-class BaseItemAdmin(admin.ModelAdmin):
+class BaseItemAdmin(HistorizedObjectAdmin):
list_display = ('label', 'registration_unit', 'is_isolated')
search_fields = ('label', 'registration_unit__parcel__operation__name',)
model = models.BaseItem
admin.site.register(models.BaseItem, BaseItemAdmin)
-class ItemAdmin(admin.ModelAdmin):
+class ItemAdmin(HistorizedObjectAdmin):
list_display = ('label', 'material_type', 'dating', 'volume', 'weight',
'item_number',)
list_filter = ('material_type',)
@@ -114,7 +143,7 @@ class ItemAdmin(admin.ModelAdmin):
admin.site.register(models.Item, ItemAdmin)
-class WarehouseAdmin(admin.ModelAdmin):
+class WarehouseAdmin(HistorizedObjectAdmin):
list_display = ('name', 'warehouse_type', 'town')
list_filter = ('warehouse_type',)
search_fields = ('name', 'town')
@@ -122,7 +151,7 @@ class WarehouseAdmin(admin.ModelAdmin):
admin.site.register(models.Warehouse, WarehouseAdmin)
-class AdministrativeActAdmin(admin.ModelAdmin):
+class AdministrativeActAdmin(HistorizedObjectAdmin):
list_display = ('operation', 'act_type', 'signature_date')
list_filter = ('act_type',)
search_fields = ('operation__name',)
@@ -166,13 +195,20 @@ class PropertyAdmin(admin.ModelAdmin):
admin.site.register(models.Property, PropertyAdmin)
+class TreatmentAdmin(HistorizedObjectAdmin):
+ list_display = ('location', 'treatment_type', 'container', 'person')
+ list_filter = ('treatment_type',)
+ model = models.Treatment
+
+admin.site.register(models.Treatment, TreatmentAdmin)
+
basic_models = [models.PersonType, models.IshtarUser, models.FileType,
models.OperationType, models.DatingType, models.DatingQuality,
models.SourceType, models.MaterialType, models.ParcelOwner,
- models.WarehouseType, models.ActType, models.Treatment,
- models.AuthorType]
+ models.WarehouseType, models.ActType, models.AuthorType,
+ models.TreatmentType]
if settings.COUNTRY == 'fr':
- basic_models += [models.Arrondissement, models.Canton]
+ basic_models += [models.Arrondissement, models.Canton, models.SaisineType]
for model in basic_models:
admin.site.register(model)
diff --git a/ishtar/furnitures/models.py b/ishtar/furnitures/models.py
index 9b808f2c7..1dcb920c3 100644
--- a/ishtar/furnitures/models.py
+++ b/ishtar/furnitures/models.py
@@ -22,6 +22,7 @@ Models description
"""
import datetime
+from django.core.exceptions import ObjectDoesNotExist
from django.utils.translation import ugettext_lazy as _
from django.contrib.auth.models import User, UserManager
@@ -37,7 +38,7 @@ class GeneralType(models.Model):
Abstract class for "types"
"""
label = models.CharField(_(u"Label"), max_length=100)
- comment = models.TextField(_(u"Comment"))
+ comment = models.TextField(_(u"Comment"), blank=True, null=True)
available = models.BooleanField(_(u"Available"))
class Meta:
@@ -46,18 +47,22 @@ class GeneralType(models.Model):
def __unicode__(self):
return self.label
-class HistorizedItem(models.Model):
+class BaseHistorizedItem(models.Model):
history_modifier = models.ForeignKey("IshtarUser", related_name='+',
verbose_name=_(u"Last modifier"))
+ def save(self, *args, **kwargs):
+ try:
+ self.history_modifier
+ except ObjectDoesNotExist:
+ return
+ super(BaseHistorizedItem, self).save(*args, **kwargs)
+ return True
class Meta:
abstract = True
-class LightHistorizedItem(models.Model):
- history_modifier = models.ForeignKey("IshtarUser", related_name='+',
- verbose_name=_(u"Last modifier"))
+class LightHistorizedItem(BaseHistorizedItem):
history_date = models.DateTimeField(default=datetime.datetime.now)
-
class Meta:
abstract = True
@@ -72,7 +77,7 @@ class Departement(models.Model):
def __unicode__(self):
return unicode(self.number) + u" - " + self.label
-class Address(HistorizedItem):
+class Address(BaseHistorizedItem):
address = models.TextField(_(u"Address"))
address_complement = models.TextField(_(u"Address complement"))
postal_code = models.CharField(_(u"Postal code"), max_length=10)
@@ -117,8 +122,10 @@ class Person(Address) :
person_type = models.ForeignKey(PersonType, verbose_name=_(u"Type"))
attached_to = models.ForeignKey('Organization',
verbose_name=_(u"Is attached to"))
- is_author = models.BooleanField(_(u"Is an author?"))
- in_charge_storage = models.BooleanField(_(u"In charge of a storage?"))
+ is_author = models.NullBooleanField(_(u"Is an author?"), blank=True,
+ null=True)
+ in_charge_storage = models.NullBooleanField(_(u"In charge of a storage?"),
+ blank=True, null=True)
class Meta:
verbose_name = _(u"Person")
@@ -149,7 +156,7 @@ if settings.COUNTRY == 'fr':
verbose_name = u"Saisine"
verbose_name_plural = u"Saisines"
-class File(HistorizedItem):
+class File(BaseHistorizedItem):
year = models.IntegerField(_(u"Year"),
default=lambda:datetime.datetime.now().year)
internal_reference = models.CharField(_(u"Internal reference"),
@@ -173,7 +180,7 @@ class File(HistorizedItem):
verbose_name_plural = _(u"Archaeological files")
def __unicode__(self):
- return u"%d - %d" % (self.year, self.number)
+ return u"%d - %s" % (self.year, self.internal_reference)
class OperationType(GeneralType):
@@ -186,7 +193,7 @@ class VestigeType(GeneralType):
verbose_name = _(u"Vestige type")
verbose_name_plural = _(u"Vestige types")
-class Operation(HistorizedItem):
+class Operation(BaseHistorizedItem):
name = models.CharField(_(u"Name"), max_length=120)
start_date = models.DateField(_(u"Start date"))
end_date = models.DateField(_(u"End date"))
@@ -262,7 +269,7 @@ class Dating(models.Model):
verbose_name = _(u"Dating")
verbose_name_plural = _(u"Datings")
-class RegistrationUnit(HistorizedItem):
+class RegistrationUnit(BaseHistorizedItem):
parcel = models.ForeignKey(Parcel, verbose_name=_(u"Parcel"))
label = models.CharField(_(u"Label"), max_length=200)
description = models.TextField(_("Description"))
@@ -306,7 +313,7 @@ class MaterialType(GeneralType):
verbose_name = _(u"Material type")
verbose_name_plural = _(u"Material types")
-class BaseItem(HistorizedItem):
+class BaseItem(BaseHistorizedItem):
label = models.CharField(_(u"Label"), max_length=60)
description = models.TextField(_(u"Description"))
registration_unit = models.ForeignKey(RegistrationUnit,
@@ -322,7 +329,7 @@ class BaseItem(HistorizedItem):
def __unicode__(self):
return self.label
-class Item(HistorizedItem):
+class Item(BaseHistorizedItem):
base_items = models.ManyToManyField(BaseItem, verbose_name=_(u"Base item"))
order = models.IntegerField(_(u"Order"))
label = models.CharField(_(u"Label"), max_length=60)
@@ -384,13 +391,20 @@ class ActType(GeneralType):
verbose_name = _(u"Act type")
verbose_name_plural = _(u"Act types")
-class AdministrativeAct(HistorizedItem):
- operation = models.ForeignKey(Operation, related_name='+',
- verbose_name=_(u"Operation"))
+class AdministrativeAct(BaseHistorizedItem):
+ act_type = models.ForeignKey(ActType, verbose_name=_(u"Act type"))
+ in_charge = models.ForeignKey(Person, blank=True, null=True,
+ related_name='+', verbose_name=_(u"Person in charge of the operation"))
+ operator = models.ForeignKey(Organization, blank=True, null=True,
+ verbose_name=_(u"Archaeological preventive operator"))
+ scientific = models.ForeignKey(Person, blank=True, null=True,
+related_name='+', verbose_name=_(u"Person in charge of the scientific part"))
+ signataire = models.ForeignKey(Person, blank=True, null=True,
+ related_name='+', verbose_name=_(u"Signataire"))
+ operation = models.ForeignKey(Operation, blank=True, null=True,
+ related_name='+', verbose_name=_(u"Operation"))
signature_date = models.DateField(_(u"Signature date"))
act_object = models.CharField(_(u"Object"), max_length=200)
- act_type = models.ForeignKey(ActType, verbose_name=_(u"Act type"))
- person = models.ForeignKey(Person, verbose_name=_(u"Person"))
if settings.COUNTRY == 'fr':
ref_sra = models.CharField(u"Référence SRA", max_length=15)
history = HistoricalRecords()
@@ -461,7 +475,7 @@ class TreatmentType(GeneralType):
verbose_name = _(u"Treatment type")
verbose_name_plural = _(u"Treatment types")
-class Treatment(HistorizedItem):
+class Treatment(BaseHistorizedItem):
container = models.ForeignKey(Container, verbose_name=_(u"Container"))
treatment_type = models.ForeignKey(TreatmentType,
verbose_name=_(u"Treatment type"))