summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ishtar/furnitures/admin.py2
-rw-r--r--ishtar/furnitures/forms.py38
-rw-r--r--ishtar/furnitures/models.py46
-rw-r--r--ishtar/furnitures/urls.py6
-rw-r--r--ishtar/furnitures/views.py43
-rw-r--r--ishtar/urls.py1
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'),
)