diff options
author | Étienne Loks <etienne.loks@peacefrogs.net> | 2011-01-02 22:49:30 +0100 |
---|---|---|
committer | Étienne Loks <etienne.loks@peacefrogs.net> | 2011-01-02 22:49:30 +0100 |
commit | 6c5de269a1b4ffa1d374c68525870978ea872543 (patch) | |
tree | d6f7a63daa6293ad0f477d8434a6c0b4d0244442 | |
parent | cb791561a7668f1f21b0f28f46e6d85bda52ad37 (diff) | |
download | Ishtar-6c5de269a1b4ffa1d374c68525870978ea872543.tar.bz2 Ishtar-6c5de269a1b4ffa1d374c68525870978ea872543.zip |
Work on file form (refs #14)
-rw-r--r-- | ishtar/furnitures/admin.py | 2 | ||||
-rw-r--r-- | ishtar/furnitures/forms.py | 38 | ||||
-rw-r--r-- | ishtar/furnitures/models.py | 46 | ||||
-rw-r--r-- | ishtar/furnitures/urls.py | 6 | ||||
-rw-r--r-- | ishtar/furnitures/views.py | 43 | ||||
-rw-r--r-- | ishtar/urls.py | 1 |
6 files changed, 117 insertions, 19 deletions
diff --git a/ishtar/furnitures/admin.py b/ishtar/furnitures/admin.py index 1a0b7d867..6e9f1f63a 100644 --- a/ishtar/furnitures/admin.py +++ b/ishtar/furnitures/admin.py @@ -197,7 +197,7 @@ 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.AuthorType, - models.TreatmentType] + models.OrganizationType, models.TreatmentType] if settings.COUNTRY == 'fr': basic_models += [models.Arrondissement, models.Canton, models.SaisineType] diff --git a/ishtar/furnitures/forms.py b/ishtar/furnitures/forms.py index 7f9347197..b78a06644 100644 --- a/ishtar/furnitures/forms.py +++ b/ishtar/furnitures/forms.py @@ -33,6 +33,7 @@ from merlin.wizards.session import SessionWizard import models import widgets +from ishtar import settings from django.utils.functional import lazy @@ -58,7 +59,7 @@ class Wizard(SessionWizard): class FileWizard(Wizard): def get_template(self, request, step, form): - return ['templates/file_wizard_%s.html' % step, + return ['file_wizard_%s.html' % step, 'file_wizard.html'] def done(self, request, form_list): @@ -66,6 +67,20 @@ class FileWizard(Wizard): 'form_data': [form.cleaned_data for form in form_list], }) + def process_step(self, request, step, form): + if models.PREVENTIVE and 'file_type' in form.cleaned_data: + file_type = int(form.cleaned_data['file_type']) + if file_type == models.PREVENTIVE: + preventive_step = Step('preventive', + _(u"Preventive informations"), FileForm3) + localisation_step = self.get_step(request, 'localisation') + self.insert_after(request, localisation_step, + preventive_step) + else: + preventive_step = self.get_step(request, 'preventive') + self.remove_step(request, preventive_step) + + class FileForm1(forms.Form): in_charge = forms.IntegerField(label=_("Person in charge"), widget=widgets.JQueryAutoComplete(reverse_lazy('autocomplete-person'), @@ -84,5 +99,22 @@ class FileForm1(forms.Form): class FileForm2(forms.Form): - town = forms.IntegerField(label=_(u"Town")) - + town = forms.IntegerField(label=_(u"Town"), + widget=widgets.JQueryAutoComplete(reverse_lazy('autocomplete-town'), + associated_model=models.Town), + validators=[models.Town.valid_id]) + total_surface = forms.IntegerField(label=_("Total surface")) + address = forms.CharField(label=_(u"Address"), widget=forms.Textarea) + +class FileForm3(forms.Form): + general_contractor = forms.IntegerField(label=_(u"General contractor"), + widget=widgets.JQueryAutoComplete( + reverse_lazy('autocomplete-organization'), + associated_model=models.Organization), + validators=[models.Organization.valid_id]) + total_developed_surface = forms.IntegerField( + label=_("Total developed surface")) + if settings.COUNTRY == 'fr': + saisine_type = forms.ChoiceField(label=_("Saisine type"), + choices=models.SaisineType.get_types()) + reception_date = forms.DateField(label=_(u"Reception date")) diff --git a/ishtar/furnitures/models.py b/ishtar/furnitures/models.py index 28420118b..008ad1dc3 100644 --- a/ishtar/furnitures/models.py +++ b/ishtar/furnitures/models.py @@ -34,6 +34,13 @@ from simple_history.models import HistoricalRecords from ishtar import settings +# valid ID validator for models +def valid_id(cls, value): + try: + cls.objects.get(pk=value) + except ObjectDoesNotExist: + raise ValidationError(_(u"Not a valid person.")) + class OwnPerms: """ Manage special permissions for object's owner @@ -129,6 +136,13 @@ class Organization(Address, OwnPerms): ("delete_own_organization", ugettext(u"Can delete own Organization")), ) + @classmethod + def valid_id(cls, value): + valid_id(cls, value) + + def __unicode__(self): + return self.name + class PersonType(GeneralType): class Meta: verbose_name = _(u"Person type") @@ -168,10 +182,7 @@ class Person(Address, OwnPerms) : @classmethod def valid_id(cls, value): - try: - cls.objects.get(pk=value) - except ObjectDoesNotExist: - raise ValidationError(_(u"Not a valid person.")) + valid_id(cls, value) class IshtarUser(models.Model): user = models.ForeignKey(User, unique=True, related_name='profile', @@ -188,6 +199,11 @@ class FileType(GeneralType): verbose_name = _(u"Archaeological file type") verbose_name_plural = _(u"Archaeological file types") +try: + PREVENTIVE = FileType.objects.filter(txt_idx="preventive").all()[0].pk +except: + PREVENTIVE = 0 + if settings.COUNTRY == 'fr': class SaisineType(GeneralType): delay = models.IntegerField(_(u"Delay (in days)")) @@ -209,11 +225,17 @@ class File(BaseHistorizedItem, OwnPerms): towns = models.ManyToManyField("Town") creation_date = models.DateField(_(u"Creation date"), default=datetime.datetime.now) - reception_date = models.DateField(_(u'Reception date')) + reception_date = models.DateField(_(u'Reception date'), blank=True, + null=True) if settings.COUNTRY == 'fr': - saisine_type = models.ForeignKey(SaisineType, + saisine_type = models.ForeignKey(SaisineType, blank=True, null=True, verbose_name= u"Type de saisine") - reference_number = models.IntegerField(_(u"Reference number")) + reference_number = models.IntegerField(_(u"Reference number"), + blank=True, null=True) + total_surface = models.IntegerField(_(u"Total surface")) + total_developed_surface = models.IntegerField(_(u"Total developed surface"), + blank=True, null=True) + address = models.TextField(_(u"Address")) history = HistoricalRecords() class Meta: @@ -527,14 +549,14 @@ if settings.COUNTRY == 'fr': department = models.ForeignKey(Departement, verbose_name=u"Département") def __unicode__(self): - return self.name + return u"%s - %s" % (self.name, unicode(self.department)) class Canton(models.Model): name = models.CharField(u"Nom", max_length=30) arrondissement = models.ForeignKey(Arrondissement, verbose_name=u"Arrondissement") def __unicode__(self): - return self.name + return u"%s - %s" % (self.name, unicode(self.arrondissement)) class Town(models.Model): name = models.CharField(_(u"Name"), max_length=100) @@ -550,8 +572,14 @@ class Town(models.Model): verbose_name_plural = _(u"Towns") def __unicode__(self): + if settings.COUNTRY == 'fr': + return u"%s (%s)" % (self.name, unicode(self.canton)) return self.name + @classmethod + def valid_id(cls, value): + valid_id(cls, value) + class TreatmentType(GeneralType): class Meta: verbose_name = _(u"Treatment type") diff --git a/ishtar/furnitures/urls.py b/ishtar/furnitures/urls.py index ab347e548..5d1e0c710 100644 --- a/ishtar/furnitures/urls.py +++ b/ishtar/furnitures/urls.py @@ -35,6 +35,10 @@ urlpatterns += patterns('ishtar.furnitures.views', url(BASE_URL + r'(?P<action_slug>' + actions + r')/(?P<slug>[A-Za-z0-9_-]+)/$', 'action', name='action-form'), url(BASE_URL + r'(?P<action_slug>' + actions + r')/$', 'action', name='action'), - url(BASE_URL + r'autocomplete/$', 'autocomplete_person', + url(BASE_URL + r'autocomplete-persone/$', 'autocomplete_person', name='autocomplete-person'), + url(BASE_URL + r'autocomplete-town/$', 'autocomplete_town', + name='autocomplete-town'), + url(BASE_URL + r'autocomplete-organization/$', 'autocomplete_organization', + name='autocomplete-organization'), ) diff --git a/ishtar/furnitures/views.py b/ishtar/furnitures/views.py index 995eafea9..bee8a305e 100644 --- a/ishtar/furnitures/views.py +++ b/ishtar/furnitures/views.py @@ -31,7 +31,7 @@ from django.core import serializers from ishtar import settings from menus import menu -from forms import Step, FileForm1, FileForm2, FileWizard +from forms import Step, FileForm1, FileForm2, FileForm3, FileWizard import models def index(request): @@ -60,13 +60,46 @@ def autocomplete_person(request): return HttpResponseBadRequest() query = Q() for q in q.split(' '): - query = query | Q(name__istartswith=q) | Q(surname__istartswith=q) | \ - Q(email__icontains=q) + query = query & (Q(name__istartswith=q) | Q(surname__istartswith=q) | \ + Q(email__icontains=q)) + limit = 15 persons = models.Person.objects.filter(query)[:limit] data = json.dumps([{'id':person.pk, 'value':unicode(person)} for person in persons]) return HttpResponse(data, mimetype='text/plain') +def autocomplete_town(request): + if not request.GET.get('term'): + return HttpResponse(mimetype='text/plain') + q = request.GET.get('term') + query = Q() + for q in q.split(' '): + extra = Q(name__icontains=q) + if settings.COUNTRY == 'fr': + extra = extra | (Q(canton__name__istartswith=q) | \ + Q(canton__arrondissement__name__istartswith=q) | \ + Q(canton__arrondissement__department__label__istartswith=q)) + query = query & extra + limit = 15 + towns = models.Town.objects.filter(query)[:limit] + data = json.dumps([{'id':town.pk, 'value':unicode(town)} + for town in towns]) + return HttpResponse(data, mimetype='text/plain') + +def autocomplete_organization(request): + if not request.GET.get('term'): + return HttpResponse(mimetype='text/plain') + q = request.GET.get('term') + query = Q() + for q in q.split(' '): + extra = Q(name__icontains=q) + query = query & extra + limit = 15 + organizations = models.Organization.objects.filter(query)[:limit] + data = json.dumps([{'id':org.pk, 'value':unicode(org)} + for org in organizations]) + return HttpResponse(data, mimetype='text/plain') + def action(request, action_slug, obj_id=None, *args, **kwargs): """ Action management @@ -100,7 +133,9 @@ def action(request, action_slug, obj_id=None, *args, **kwargs): file_creation_wizard = FileWizard([ Step('general', _(u"General"), FileForm1), - Step('localisation', _(u"Localisation"), FileForm2)]) + Step('localisation', _(u"Localisation"), FileForm2), + Step('preventive', _(u"Preventive informations"), FileForm3)]) + def file_creation(request, dct, obj_id, *args, **kwargs): return file_creation_wizard(request, *args, **kwargs) diff --git a/ishtar/urls.py b/ishtar/urls.py index af0c13dc5..d4abb83f8 100644 --- a/ishtar/urls.py +++ b/ishtar/urls.py @@ -14,5 +14,4 @@ urlpatterns = patterns('', ) urlpatterns += patterns('ishtar.furnitures.views', url(BASE_URL + '$', 'index', name='start'), - #url(BASE_URL + '(?P<action>\w+)/$', 'action', name='action'), ) |