diff options
-rw-r--r-- | ishtar/furnitures/admin.py | 60 | ||||
-rw-r--r-- | ishtar/furnitures/models.py | 56 |
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")) |