diff options
| author | Étienne Loks <etienne.loks@peacefrogs.net> | 2010-12-24 17:16:51 +0100 | 
|---|---|---|
| committer | Étienne Loks <etienne.loks@peacefrogs.net> | 2010-12-24 17:39:03 +0100 | 
| commit | 14982e0514e1f0b4ea2a259d44be64816bf25e71 (patch) | |
| tree | 3d2debbd66367aeecbee4efb444eb7595a023f8c | |
| parent | e908fa52ae41b33ff59e78dd61b5e3df3d00dd2a (diff) | |
| download | Ishtar-14982e0514e1f0b4ea2a259d44be64816bf25e71.tar.bz2 Ishtar-14982e0514e1f0b4ea2a259d44be64816bf25e71.zip  | |
Better management of historization in admin (refs #25)
| -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"))  | 
