summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--CHANGES.txt13
-rw-r--r--Makefile.example3
-rw-r--r--archaeological_context_records/locale/django.pot84
-rw-r--r--archaeological_files/locale/django.pot4
-rw-r--r--archaeological_files/tests.py85
-rw-r--r--archaeological_files_pdl/tests.py16
-rw-r--r--archaeological_finds/forms.py6
-rw-r--r--archaeological_finds/locale/django.pot362
-rw-r--r--archaeological_finds/models.py91
-rw-r--r--archaeological_finds/templates/ishtar/sheet_find.html153
-rw-r--r--archaeological_finds/tests.py81
-rw-r--r--archaeological_operations/locale/django.pot168
-rw-r--r--archaeological_operations/models.py2
-rw-r--r--archaeological_operations/tests.py13
-rw-r--r--archaeological_warehouse/forms.py16
-rw-r--r--archaeological_warehouse/locale/django.pot62
-rw-r--r--archaeological_warehouse/views.py2
-rw-r--r--archaeological_warehouse/wizards.py25
-rw-r--r--ishtar_common/locale/django.pot629
-rw-r--r--ishtar_common/migrations/0005_auto__add_field_ishtarsiteprofile_homepage.py404
-rw-r--r--ishtar_common/models.py46
-rw-r--r--ishtar_common/static/js/grid.tbltogrid.js106
-rw-r--r--ishtar_common/static/media/style.css41
-rw-r--r--ishtar_common/static/media/style_basic.css4
-rw-r--r--ishtar_common/templates/base.html3
-rw-r--r--ishtar_common/templates/index.html1
-rw-r--r--ishtar_common/templates/ishtar/blocks/window_field.html6
-rw-r--r--ishtar_common/templates/ishtar/blocks/window_field_detail.html3
-rw-r--r--ishtar_common/templates/ishtar/blocks/window_field_multiple.html6
-rw-r--r--ishtar_common/templates/ishtar/blocks/window_field_url.html6
-rw-r--r--ishtar_common/templates/ishtar/sheet_toolbar.html2
-rw-r--r--ishtar_common/templates/welcome.html11
-rw-r--r--ishtar_common/templatetags/link_to_window.py8
-rw-r--r--ishtar_common/templatetags/window_field.py39
-rw-r--r--ishtar_common/views.py8
-rw-r--r--requirements.txt1
-rw-r--r--translations/fr/archaeological_context_records.po86
-rw-r--r--translations/fr/archaeological_files.po6
-rw-r--r--translations/fr/archaeological_files_pdl.po2
-rw-r--r--translations/fr/archaeological_finds.po370
-rw-r--r--translations/fr/archaeological_operations.po170
-rw-r--r--translations/fr/archaeological_warehouse.po64
-rw-r--r--translations/fr/ishtar_common.po639
-rw-r--r--version.py2
44 files changed, 2431 insertions, 1418 deletions
diff --git a/CHANGES.txt b/CHANGES.txt
index f52201f3e..3989c84c6 100644
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@ -1,3 +1,16 @@
+0.95 (2016-06-08)
+-----------------
+
+Features:
+- A welcome page (default and to be defined in site profile)
+- Displaying treatments in find sheet
+- Many improvements in the find sheet
+
+Bug fixes:
+- Basket update after a treatment
+- Fix operation code for operation with no year (or year 0)
+- Fix warehouse creation
+
0.94 (2016-06-03)
-----------------
diff --git a/Makefile.example b/Makefile.example
index 7ea3d8304..4d6258882 100644
--- a/Makefile.example
+++ b/Makefile.example
@@ -204,3 +204,6 @@ distribute_test: sdist
distribute_main: sdist
twine upload -r pypi dist/*
+
+deb: clean
+ debuild -i -us -uc -b
diff --git a/archaeological_context_records/locale/django.pot b/archaeological_context_records/locale/django.pot
index ed4479963..8f8f1cdb1 100644
--- a/archaeological_context_records/locale/django.pot
+++ b/archaeological_context_records/locale/django.pot
@@ -7,7 +7,7 @@
msgid ""
msgstr ""
-#: forms.py:45 forms.py:112 models.py:125
+#: forms.py:45 forms.py:112 models.py:124
#: templates/ishtar/sheet_contextrecord.html:72
msgid "ID"
msgstr ""
@@ -44,7 +44,7 @@ msgstr ""
msgid "Search within relations"
msgstr ""
-#: forms.py:87 forms.py:274 views.py:78
+#: forms.py:87 forms.py:274 views.py:111
msgid "Context record search"
msgstr ""
@@ -56,37 +56,37 @@ msgstr ""
msgid "General"
msgstr ""
-#: forms.py:111 models.py:118 models.py:121
+#: forms.py:111 models.py:117 models.py:120
#: templates/ishtar/sheet_contextrecord.html:76
msgid "Parcel"
msgstr ""
-#: forms.py:114 models.py:126 templates/ishtar/sheet_contextrecord.html:42
+#: forms.py:114 models.py:125 templates/ishtar/sheet_contextrecord.html:42
#: templates/ishtar/sheet_contextrecord.html:75
msgid "Description"
msgstr ""
-#: forms.py:116 models.py:131
+#: forms.py:116 models.py:130
msgid "Length (cm)"
msgstr ""
-#: forms.py:117 models.py:132
+#: forms.py:117 models.py:131
msgid "Width (cm)"
msgstr ""
-#: forms.py:118 models.py:133
+#: forms.py:118 models.py:132
msgid "Thickness (cm)"
msgstr ""
-#: forms.py:119 models.py:135
+#: forms.py:119 models.py:134
msgid "Depth (cm)"
msgstr ""
-#: forms.py:120 models.py:141
+#: forms.py:120 models.py:140
msgid "Unit"
msgstr ""
-#: forms.py:122 models.py:137
+#: forms.py:122 models.py:136
msgid "Location"
msgstr ""
@@ -102,7 +102,7 @@ msgstr ""
msgid "Start date"
msgstr ""
-#: forms.py:180 models.py:50 models.py:130
+#: forms.py:180 models.py:50 models.py:129
msgid "End date"
msgstr ""
@@ -122,40 +122,40 @@ msgstr ""
msgid "Relations"
msgstr ""
-#: forms.py:230 forms.py:237 models.py:146
+#: forms.py:230 forms.py:237 models.py:145
#: templates/ishtar/sheet_contextrecord.html:52
msgid "Interpretation"
msgstr ""
-#: forms.py:233 models.py:143
+#: forms.py:233 models.py:142
msgid "Has furniture?"
msgstr ""
-#: forms.py:235 models.py:145
+#: forms.py:235 models.py:144
msgid "Filling"
msgstr ""
-#: forms.py:239 models.py:166
+#: forms.py:239 models.py:165
msgid "Activity"
msgstr ""
-#: forms.py:241 models.py:164
+#: forms.py:241 models.py:163
msgid "Identification"
msgstr ""
-#: forms.py:243 models.py:149
+#: forms.py:243 models.py:148
msgid "TAQ"
msgstr ""
-#: forms.py:244 models.py:153
+#: forms.py:244 models.py:152
msgid "Estimated TAQ"
msgstr ""
-#: forms.py:246 models.py:156
+#: forms.py:246 models.py:155
msgid "TPQ"
msgstr ""
-#: forms.py:247 models.py:160
+#: forms.py:247 models.py:159
msgid "Estimated TPQ"
msgstr ""
@@ -275,71 +275,71 @@ msgstr ""
msgid "Identification Types"
msgstr ""
-#: models.py:119
+#: models.py:118
msgid "External ID"
msgstr ""
-#: models.py:123 wizards.py:68
+#: models.py:122 wizards.py:68
msgid "Operation"
msgstr ""
-#: models.py:127
+#: models.py:126
msgid "Comment"
msgstr ""
-#: models.py:128
+#: models.py:127
msgid "Date d'ouverture"
msgstr ""
-#: models.py:138
+#: models.py:137
msgid "A short description of the location of the context record"
msgstr ""
-#: models.py:150
+#: models.py:149
msgid ""
"\"Terminus Ante Quem\" the context record can't have been created after this "
"date"
msgstr ""
-#: models.py:154
+#: models.py:153
msgid "Estimation of a \"Terminus Ante Quem\""
msgstr ""
-#: models.py:157
+#: models.py:156
msgid ""
"\"Terminus Post Quem\" the context record can't have been created before "
"this date"
msgstr ""
-#: models.py:161
+#: models.py:160
msgid "Estimation of a \"Terminus Post Quem\""
msgstr ""
-#: models.py:172 models.py:173 templates/ishtar/sheet_contextrecord.html:6
+#: models.py:171 models.py:172 templates/ishtar/sheet_contextrecord.html:6
msgid "Context Record"
msgstr ""
-#: models.py:175
+#: models.py:174
msgid "Can view all Context Records"
msgstr ""
-#: models.py:177
+#: models.py:176
msgid "Can view own Context Record"
msgstr ""
-#: models.py:179
+#: models.py:178
msgid "Can add own Context Record"
msgstr ""
-#: models.py:181
+#: models.py:180
msgid "Can change own Context Record"
msgstr ""
-#: models.py:183
+#: models.py:182
msgid "Can delete own Context Record"
msgstr ""
-#: models.py:192
+#: models.py:191
msgctxt "short"
msgid "Context record"
msgstr ""
@@ -372,27 +372,27 @@ msgstr ""
msgid "Context record documentations"
msgstr ""
-#: views.py:88
+#: views.py:121
msgid "New context record"
msgstr ""
-#: views.py:98
+#: views.py:131
msgid "Context record modification"
msgstr ""
-#: views.py:112
+#: views.py:145
msgid "Context record deletion"
msgstr ""
-#: views.py:120
+#: views.py:153
msgid "Context record: new source"
msgstr ""
-#: views.py:128
+#: views.py:161
msgid "Context record: source modification"
msgstr ""
-#: views.py:134
+#: views.py:167
msgid "Context record: source deletion"
msgstr ""
diff --git a/archaeological_files/locale/django.pot b/archaeological_files/locale/django.pot
index ef6db9a16..2aa42c669 100644
--- a/archaeological_files/locale/django.pot
+++ b/archaeological_files/locale/django.pot
@@ -453,11 +453,11 @@ msgstr ""
msgid "File: administrative act deletion"
msgstr ""
-#: wizards.py:112 templates/ishtar/sheet_file.html:122
+#: wizards.py:124 templates/ishtar/sheet_file.html:122
msgid "Associated operations"
msgstr ""
-#: wizards.py:142 wizards.py:152
+#: wizards.py:154 wizards.py:164
msgid "Archaelogical file"
msgstr ""
diff --git a/archaeological_files/tests.py b/archaeological_files/tests.py
index f24a29582..84f8269c7 100644
--- a/archaeological_files/tests.py
+++ b/archaeological_files/tests.py
@@ -20,7 +20,8 @@
"""
Unit tests
"""
-import json, datetime
+import datetime
+import json
from django.conf import settings
from django.contrib.auth.models import User
@@ -31,6 +32,7 @@ from archaeological_files import models
from archaeological_operations.models import Parcel, ParcelOwner
from archaeological_operations.tests import OperationInitTest
+
class FileInit(object):
def login_as_superuser(self):
self.client.login(username='username', password='tralala')
@@ -60,16 +62,17 @@ class FileInit(object):
self.extra_models['file_type'] = file_type
self.model_list.append(file_type)
- dct = {'year':2010, 'numeric_reference':1000, 'file_type':file_type,
- 'internal_reference':u'UNIT_testÉ ?', 'in_charge':person,
- 'history_modifier':self.o_user, 'total_surface':10000}
+ dct = {'year': 2010, 'numeric_reference': 1000, 'file_type': file_type,
+ 'internal_reference': u'UNIT_testÉ ?', 'in_charge': person,
+ 'history_modifier': self.o_user, 'total_surface': 10000}
self.item = self.model(**dct)
self.item.save()
+
class FileTest(TestCase, FileInit):
- fixtures = [settings.ROOT_PATH + \
+ fixtures = [settings.ROOT_PATH +
'../fixtures/initial_data-auth-fr.json',
- settings.ROOT_PATH + \
+ settings.ROOT_PATH +
'../ishtar_common/fixtures/initial_data-fr.json']
model = models.File
@@ -86,7 +89,7 @@ class FileTest(TestCase, FileInit):
self.item.internal_reference = u"Unité_Test"
self.item.history_modifier = self.user
self.item.save()
- self.failUnlessEqual(self.item.history.count(), nb_hist+1)
+ self.failUnlessEqual(self.item.history.count(), nb_hist + 1)
self.failUnlessEqual(self.item.history.all()[1].internal_reference,
base_label)
self.item.internal_reference = u"Unité_Testée"
@@ -94,7 +97,7 @@ class FileTest(TestCase, FileInit):
self.item.skip_history_when_saving = True
self.item.save()
self.item.skip_history_when_saving = False
- self.failUnlessEqual(self.item.history.count(), nb_hist+1)
+ self.failUnlessEqual(self.item.history.count(), nb_hist + 1)
def testCreatorHistorized(self):
"""
@@ -116,7 +119,7 @@ class FileTest(TestCase, FileInit):
self.item.internal_reference = u"Unité_Test"
self.item.history_modifier = self.user
self.item.save()
- self.failUnlessEqual(self.item.history.count(), nb_hist+1)
+ self.failUnlessEqual(self.item.history.count(), nb_hist + 1)
nb_hist = self.item.history.count()
self.item.save()
self.failUnlessEqual(self.item.history.count(), nb_hist)
@@ -133,21 +136,22 @@ class FileTest(TestCase, FileInit):
new_values = self.item.values()
for k in initial_values.keys():
self.assertTrue(k in new_values)
- self.assertEqual(new_values[k], initial_values[k],
- msg=u"for %s: %s != %s" % (k, unicode(new_values[k]),
- unicode(initial_values[k])))
+ self.assertEqual(
+ new_values[k], initial_values[k],
+ msg=u"for %s: %s != %s" % (k, unicode(new_values[k]),
+ unicode(initial_values[k])))
def testRESTGetFile(self):
- response = self.client.post('/get-file/',
- {'numeric_reference':self.item.numeric_reference})
+ response = self.client.post(
+ '/get-file/', {'numeric_reference': self.item.numeric_reference})
self.assertEqual(response.status_code, 200)
data = json.loads(response.content)
# not allowed -> no data
self.assertTrue(not data)
self.login_as_superuser()
- response = self.client.post('/get-file/',
- {'numeric_reference':self.item.numeric_reference})
+ response = self.client.post(
+ '/get-file/', {'numeric_reference': self.item.numeric_reference})
self.assertEqual(response.status_code, 200)
data = json.loads(response.content)
self.assertTrue('records' in data)
@@ -160,33 +164,36 @@ class FileTest(TestCase, FileInit):
self.item.internal_reference = new_ref
self.item.history_modifier = self.user
self.item.save()
- response = self.client.post('/get-file/',
- {'numeric_reference':self.item.numeric_reference, 'old':1})
+ response = self.client.post(
+ '/get-file/',
+ {'numeric_reference': self.item.numeric_reference, 'old': 1})
self.assertEqual(response.status_code, 200)
data = json.loads(response.content)
# not allowed -> no data
self.assertTrue(not data)
self.login_as_superuser()
- response = self.client.post('/get-file/',
- {'numeric_reference':self.item.numeric_reference, 'old':1})
+ response = self.client.post(
+ '/get-file/',
+ {'numeric_reference': self.item.numeric_reference, 'old': 1})
self.assertEqual(response.status_code, 200)
data = json.loads(response.content)
self.assertTrue('records' in data)
self.assertTrue(data['records'] == 1)
self.assertEqual(data['rows'][0]['internal_reference'], initial_ref)
-#class ImporterTest(TestCase):
+# class ImporterTest(TestCase):
# def testFormaters(self):
# from archaeological_files import data_importer
# for formater in [data_importer.SurfaceFormater]:
# formater().test()
+
class FileOperationTest(TestCase, OperationInitTest, FileInit):
model = models.File
- fixtures = [settings.ROOT_PATH + \
+ fixtures = [settings.ROOT_PATH +
'../fixtures/initial_data-auth-fr.json',
- settings.ROOT_PATH + \
+ settings.ROOT_PATH +
'../ishtar_common/fixtures/initial_data-fr.json',
settings.ROOT_PATH +
'../ishtar_common/fixtures/test_towns.json',
@@ -207,34 +214,34 @@ class FileOperationTest(TestCase, OperationInitTest, FileInit):
# parcel association
default_town = Town.objects.all()[0]
for p in range(0, 10):
- parcel = Parcel.objects.create(parcel_number=unicode(p),
- section='YY',
- town=default_town,
- operation=self.operation)
+ parcel = Parcel.objects.create(
+ parcel_number=unicode(p),
+ section='YY',
+ town=default_town,
+ operation=self.operation)
if p == 1:
ParcelOwner.objects.create(
- owner=self.extra_models['person'],
- parcel=parcel, start_date=datetime.date.today(),
- end_date=datetime.date.today())
+ owner=self.extra_models['person'],
+ parcel=parcel, start_date=datetime.date.today(),
+ end_date=datetime.date.today())
initial_nb = self.item.parcels.count()
# no parcel on the file -> new parcels are copied from the
# operation
self.operation.associated_file = self.item
self.operation.save()
- self.assertEqual(self.item.parcels.count(), initial_nb+10)
+ self.assertEqual(self.item.parcels.count(), initial_nb + 10)
# parcel owner well attached
q = ParcelOwner.objects.filter(parcel__associated_file=self.item)
self.assertEqual(q.count(), 1)
# when attaching parcel from a file to an operation, copy is done
- parcel = Parcel.objects.create(parcel_number='42',
- section='ZZ',
- town=default_town,
- associated_file=self.item)
+ parcel = Parcel.objects.create(
+ parcel_number='42', section='ZZ',
+ town=default_town, associated_file=self.item)
ParcelOwner.objects.create(
- owner=self.extra_models['person'],
- parcel=parcel, start_date=datetime.date.today(),
- end_date=datetime.date.today())
+ owner=self.extra_models['person'],
+ parcel=parcel, start_date=datetime.date.today(),
+ end_date=datetime.date.today())
parcel.operation = self.operation
parcel.save()
# double reference to operation and associated_file is deleted
@@ -249,5 +256,3 @@ class FileOperationTest(TestCase, OperationInitTest, FileInit):
q = ParcelOwner.objects.filter(parcel__operation=self.operation,
parcel__parcel_number='42')
self.assertEqual(q.count(), 1)
-
-
diff --git a/archaeological_files_pdl/tests.py b/archaeological_files_pdl/tests.py
deleted file mode 100644
index 501deb776..000000000
--- a/archaeological_files_pdl/tests.py
+++ /dev/null
@@ -1,16 +0,0 @@
-"""
-This file demonstrates writing tests using the unittest module. These will pass
-when you run "manage.py test".
-
-Replace this with more appropriate tests for your application.
-"""
-
-from django.test import TestCase
-
-
-class SimpleTest(TestCase):
- def test_basic_addition(self):
- """
- Tests that 1 + 1 always equals 2.
- """
- self.assertEqual(1 + 1, 2)
diff --git a/archaeological_finds/forms.py b/archaeological_finds/forms.py
index 99907781b..f5387febe 100644
--- a/archaeological_finds/forms.py
+++ b/archaeological_finds/forms.py
@@ -432,8 +432,12 @@ class SelectFindBasketForm(forms.Form):
basket = forms.ChoiceField(label=_(u"Basket"), required=True, choices=[])
def __init__(self, *args, **kwargs):
- self.user = kwargs.pop('user')
+ self.user = None
+ if 'user' in kwargs:
+ self.user = kwargs.pop('user')
super(SelectFindBasketForm, self).__init__(*args, **kwargs)
+ if not self.user:
+ return
self.fields['basket'].choices = [('', '--')] + [
(b.pk, unicode(b))
for b in models.FindBasket.objects.filter(user=self.user)]
diff --git a/archaeological_finds/locale/django.pot b/archaeological_finds/locale/django.pot
index 5705ef914..27ee951e2 100644
--- a/archaeological_finds/locale/django.pot
+++ b/archaeological_finds/locale/django.pot
@@ -8,569 +8,600 @@
msgid ""
msgstr ""
-#: forms.py:45 ishtar_menu.py:31 models.py:341 models.py:537 models.py:605
-#: templates/ishtar/sheet_find.html:6
+#: forms.py:46 forms.py:50 wizards.py:62
+msgid "Context record"
+msgstr ""
+
+#: forms.py:79 ishtar_menu.py:31 models.py:348 models.py:597 models.py:694
+#: templates/ishtar/sheet_find.html:6 templates/ishtar/sheet_findbasket.html:6
msgid "Find"
msgstr ""
-#: forms.py:54 forms.py:153 forms.py:298 models.py:104 models.py:284
+#: forms.py:88 forms.py:187 forms.py:346 models.py:105 models.py:290
msgid "Free ID"
msgstr ""
-#: forms.py:56 models.py:325
+#: forms.py:90 models.py:331
msgid "Previous ID"
msgstr ""
-#: forms.py:57 forms.py:174 forms.py:238 models.py:107 models.py:285
-#: models.py:559 templates/ishtar/sheet_find.html:87
+#: forms.py:91 forms.py:208 forms.py:286 models.py:108 models.py:291
+#: models.py:619
msgid "Description"
msgstr ""
-#: forms.py:60 forms.py:176 models.py:118
+#: forms.py:94 forms.py:210 models.py:119
msgid "Batch/object"
msgstr ""
-#: forms.py:62 models.py:311
+#: forms.py:96 models.py:317
msgid "Is complete?"
msgstr ""
-#: forms.py:65 forms.py:167 forms.py:302 models.py:46
+#: forms.py:99 forms.py:201 forms.py:350 models.py:47
msgid "Material type"
msgstr ""
-#: forms.py:66 forms.py:171 models.py:56 models.py:289
+#: forms.py:100 forms.py:205 models.py:57 models.py:295
msgid "Conservatory state"
msgstr ""
-#: forms.py:69 models.py:81 models.py:314
+#: forms.py:103 models.py:82 models.py:320
msgid "Object types"
msgstr ""
-#: forms.py:71 forms.py:170 models.py:63
+#: forms.py:105 forms.py:204 models.py:64
msgid "Preservation type"
msgstr ""
-#: forms.py:74 forms.py:173 models.py:316
+#: forms.py:108 forms.py:207 models.py:322
msgid "Integrity"
msgstr ""
-#: forms.py:76 models.py:317
+#: forms.py:110 models.py:323
msgid "Length (cm)"
msgstr ""
-#: forms.py:77 models.py:318
+#: forms.py:111 models.py:324
msgid "Width (cm)"
msgstr ""
-#: forms.py:78 models.py:319
+#: forms.py:112 models.py:325
msgid "Height (cm)"
msgstr ""
-#: forms.py:79 models.py:320
+#: forms.py:113 models.py:326
msgid "Diameter (cm)"
msgstr ""
-#: forms.py:80 forms.py:303 models.py:294
+#: forms.py:114 forms.py:351 models.py:300
msgid "Volume (l)"
msgstr ""
-#: forms.py:81 forms.py:304 models.py:295
+#: forms.py:115 forms.py:352 models.py:301
msgid "Weight (g)"
msgstr ""
-#: forms.py:82 forms.py:305 models.py:298
+#: forms.py:116 forms.py:353 models.py:304
msgid "Find number"
msgstr ""
-#: forms.py:83 models.py:321
+#: forms.py:117 models.py:327
msgid "Mark"
msgstr ""
-#: forms.py:84 forms.py:178 models.py:327
+#: forms.py:118 forms.py:212 models.py:333
msgid "Check"
msgstr ""
-#: forms.py:86 models.py:329
+#: forms.py:120 models.py:335
msgid "Check date"
msgstr ""
-#: forms.py:87 models.py:108 models.py:322 models.py:560
+#: forms.py:121 models.py:109 models.py:328 models.py:620
msgid "Comment"
msgstr ""
-#: forms.py:90 models.py:323
+#: forms.py:124 models.py:329
msgid "Comment on dating"
msgstr ""
-#: forms.py:92
+#: forms.py:126
msgid "Image"
msgstr ""
-#: forms.py:93
+#: forms.py:127
#, python-format
msgid ""
"<p>Heavy images are resized to: %(width)dx%(height)d (ratio is preserved).</"
"p>"
msgstr ""
-#: forms.py:119 forms.py:147 models.py:306
+#: forms.py:153 forms.py:181 models.py:312
msgid "Dating"
msgstr ""
-#: forms.py:124 forms.py:165
+#: forms.py:158 forms.py:199
msgid "Period"
msgstr ""
-#: forms.py:125 forms.py:240 models.py:570 models.py:610
+#: forms.py:159 forms.py:288 models.py:630 models.py:699
+#: templates/ishtar/sheet_find.html:72 templates/ishtar/sheet_find.html:95
msgid "Start date"
msgstr ""
-#: forms.py:127 forms.py:242 models.py:571 models.py:611
+#: forms.py:161 forms.py:290 models.py:631 models.py:700
+#: templates/ishtar/sheet_find.html:73 templates/ishtar/sheet_find.html:96
msgid "End date"
msgstr ""
-#: forms.py:128
+#: forms.py:162
msgid "Quality"
msgstr ""
-#: forms.py:130
+#: forms.py:164
msgid "Dating type"
msgstr ""
-#: forms.py:132
+#: forms.py:166
msgid "Precise dating"
msgstr ""
-#: forms.py:151 models.py:123
+#: forms.py:185 models.py:124
msgid "Short ID"
msgstr ""
-#: forms.py:152 models.py:126 templates/ishtar/sheet_find.html:71
+#: forms.py:186 models.py:127
msgid "Complete ID"
msgstr ""
-#: forms.py:156
+#: forms.py:190
msgid "Year"
msgstr ""
-#: forms.py:158
+#: forms.py:192
msgid "Code PATRIARCHE"
msgstr ""
-#: forms.py:160
+#: forms.py:194
msgid "Archaelogical site"
msgstr ""
-#: forms.py:168 models.py:80
+#: forms.py:202 models.py:81
msgid "Object type"
msgstr ""
-#: forms.py:179
+#: forms.py:213
msgid "Has an image?"
msgstr ""
-#: forms.py:208 views.py:103
+#: forms.py:242 forms.py:255 views.py:112
msgid "Find search"
msgstr ""
-#: forms.py:221
+#: forms.py:269
msgid "Base treatment"
msgstr ""
-#: forms.py:225 models.py:549 models.py:562
+#: forms.py:273 models.py:609 models.py:622
msgid "Treatment type"
msgstr ""
-#: forms.py:227 models.py:568 models.py:608
+#: forms.py:275 models.py:628 models.py:697
+#: templates/ishtar/sheet_find.html:70 templates/ishtar/sheet_find.html:94
msgid "Person"
msgstr ""
-#: forms.py:233 models.py:563
+#: forms.py:281 models.py:623
msgid "Location"
msgstr ""
-#: forms.py:254
+#: forms.py:302
msgid "Upstream finds"
msgstr ""
-#: forms.py:256 models.py:342
+#: forms.py:304 models.py:349
msgid "Finds"
msgstr ""
-#: forms.py:266
+#: forms.py:314
msgid "You should at least select one archaeological find."
msgstr ""
-#: forms.py:295
+#: forms.py:343
msgid "Resulting find"
msgstr ""
-#: forms.py:300
+#: forms.py:348
msgid "Precise description"
msgstr ""
-#: forms.py:314
+#: forms.py:362
msgid "Resulting finds"
msgstr ""
-#: forms.py:319
+#: forms.py:367
msgid "Would you like to delete this find?"
msgstr ""
-#: forms.py:323
+#: forms.py:371
msgid "Upstream find"
msgstr ""
-#: forms.py:330
+#: forms.py:378
msgid "Archaeological find search"
msgstr ""
-#: forms.py:332
+#: forms.py:380
msgid "You should select an archaeological find."
msgstr ""
-#: forms.py:337
+#: forms.py:385
msgid "Year of the operation"
msgstr ""
-#: forms.py:339
+#: forms.py:387
msgid "Period of the archaelogical find"
msgstr ""
-#: forms.py:341
+#: forms.py:389
msgid "Material type of the archaelogical find"
msgstr ""
-#: forms.py:343
+#: forms.py:391
msgid "Description of the archaelogical find"
msgstr ""
-#: forms.py:355
+#: forms.py:403
msgid "Documentation search"
msgstr ""
-#: forms.py:357
+#: forms.py:405
msgid "You should select a document."
msgstr ""
+#: forms.py:422
+msgid "Another basket already exist with this name."
+msgstr ""
+
+#: forms.py:432 ishtar_menu.py:59
+msgid "Basket"
+msgstr ""
+
#: ishtar_menu.py:35
msgid "Search"
msgstr ""
-#: ishtar_menu.py:40 ishtar_menu.py:62
+#: ishtar_menu.py:40 ishtar_menu.py:62 ishtar_menu.py:82
msgid "Creation"
msgstr ""
-#: ishtar_menu.py:45 ishtar_menu.py:67
+#: ishtar_menu.py:45 ishtar_menu.py:87
msgid "Modification"
msgstr ""
-#: ishtar_menu.py:54 ishtar_menu.py:72
+#: ishtar_menu.py:54 ishtar_menu.py:73 ishtar_menu.py:92
msgid "Deletion"
msgstr ""
-#: ishtar_menu.py:59
+#: ishtar_menu.py:67
+msgid "Manage items"
+msgstr ""
+
+#: ishtar_menu.py:79
msgid "Documentation"
msgstr ""
-#: models.py:39
+#: models.py:40
msgid "Code"
msgstr ""
-#: models.py:40
+#: models.py:41
msgid "Recommendation"
msgstr ""
-#: models.py:43
+#: models.py:44
msgid "Parent material"
msgstr ""
-#: models.py:47 models.py:287
+#: models.py:48 models.py:293
msgid "Material types"
msgstr ""
-#: models.py:53
+#: models.py:54
msgid "Parent conservatory state"
msgstr ""
-#: models.py:57
+#: models.py:58
msgid "Conservatory states"
msgstr ""
-#: models.py:64
+#: models.py:65
msgid "Preservation types"
msgstr ""
-#: models.py:70 models.py:71
+#: models.py:71 models.py:72
msgid "Integrity type"
msgstr ""
-#: models.py:77
+#: models.py:78
msgid "Parent"
msgstr ""
-#: models.py:96
+#: models.py:97
msgid "Unknow"
msgstr ""
-#: models.py:97
+#: models.py:98
msgid "Object"
msgstr ""
-#: models.py:98
+#: models.py:99
msgid "Batch"
msgstr ""
-#: models.py:105 models.py:281 models.py:555
+#: models.py:106 models.py:287 models.py:615
msgid "External ID"
msgstr ""
-#: models.py:110
+#: models.py:111
msgid "Topographic localisation"
msgstr ""
-#: models.py:111 templates/ishtar/sheet_find.html:92
+#: models.py:112
msgid "Special interest"
msgstr ""
-#: models.py:115
+#: models.py:116
msgid "Context Record"
msgstr ""
-#: models.py:116 templates/ishtar/sheet_find.html:83
+#: models.py:117
msgid "Discovery date"
msgstr ""
-#: models.py:124 models.py:127
+#: models.py:125 models.py:128
msgid "Cached value - do not edit"
msgstr ""
-#: models.py:132 models.py:279
+#: models.py:133 models.py:285
msgid "Base find"
msgstr ""
-#: models.py:133
+#: models.py:134
msgid "Base finds"
msgstr ""
-#: models.py:135
+#: models.py:136
msgid "Can view all Base finds"
msgstr ""
-#: models.py:136
+#: models.py:137
msgid "Can view own Base find"
msgstr ""
-#: models.py:137
+#: models.py:138
msgid "Can add own Base find"
msgstr ""
-#: models.py:138
+#: models.py:139
msgid "Can change own Base find"
msgstr ""
-#: models.py:139
+#: models.py:140
msgid "Can delete own Base find"
msgstr ""
-#: models.py:234
+#: models.py:235
msgid "g"
msgstr ""
-#: models.py:235
+#: models.py:236
msgid "kg"
msgstr ""
-#: models.py:237
+#: models.py:238
msgid "Not checked"
msgstr ""
-#: models.py:238
+#: models.py:239
msgid "Checked but incorrect"
msgstr ""
-#: models.py:239
+#: models.py:240
msgid "Checked and correct"
msgstr ""
-#: models.py:269
+#: models.py:275
msgid "Base find - Short ID"
msgstr ""
-#: models.py:270
+#: models.py:276
msgid "Base find - Complete ID"
msgstr ""
-#: models.py:271
+#: models.py:277
msgid "Base find - Comment"
msgstr ""
-#: models.py:272
+#: models.py:278
msgid "Base find - Description"
msgstr ""
-#: models.py:273
+#: models.py:279
msgid "Base find - Topographic localisation"
msgstr ""
-#: models.py:275
+#: models.py:281
msgid "Base find - Special interest"
msgstr ""
-#: models.py:276
+#: models.py:282
msgid "Base find - Discovery date"
msgstr ""
-#: models.py:283
+#: models.py:289
msgid "Order"
msgstr ""
-#: models.py:292
+#: models.py:298
msgid "Type of preservation to consider"
msgstr ""
-#: models.py:296
+#: models.py:302
msgid "Weight unit"
msgstr ""
-#: models.py:302 templates/ishtar/sheet_find.html:61
+#: models.py:308 templates/ishtar/sheet_find.html:66
msgid "Upstream treatment"
msgstr ""
-#: models.py:305 templates/ishtar/sheet_find.html:63
+#: models.py:311 templates/ishtar/sheet_find.html:90
msgid "Downstream treatment"
msgstr ""
-#: models.py:309 models.py:557 templates/ishtar/sheet_find.html:65
+#: models.py:315 models.py:617 templates/ishtar/sheet_find.html:71
msgid "Container"
msgstr ""
-#: models.py:344
+#: models.py:351
msgid "Can view all Finds"
msgstr ""
-#: models.py:345
+#: models.py:352
msgid "Can view own Find"
msgstr ""
-#: models.py:346
+#: models.py:353
msgid "Can add own Find"
msgstr ""
-#: models.py:347
+#: models.py:354
msgid "Can change own Find"
msgstr ""
-#: models.py:348
+#: models.py:355
msgid "Can delete own Find"
msgstr ""
-#: models.py:353
+#: models.py:360
msgid "FIND"
msgstr ""
-#: models.py:535
+#: models.py:595
msgid "Find documentation"
msgstr ""
-#: models.py:536
+#: models.py:596
msgid "Find documentations"
msgstr ""
-#: models.py:546
+#: models.py:606
msgid "Virtual"
msgstr ""
-#: models.py:550
+#: models.py:610
msgid "Treatment types"
msgstr ""
-#: models.py:565
+#: models.py:625
msgid "Other location"
msgstr ""
-#: models.py:575 models.py:597
+#: models.py:635 models.py:686
msgid "Treatment"
msgstr ""
-#: models.py:576
+#: models.py:636
msgid "Treatments"
msgstr ""
-#: models.py:578
+#: models.py:638
msgid "Can view all Treatments"
msgstr ""
-#: models.py:579
+#: models.py:639
msgid "Can view own Treatment"
msgstr ""
-#: models.py:580
+#: models.py:640
msgid "Can add own Treatment"
msgstr ""
-#: models.py:581
+#: models.py:641
msgid "Can change own Treatment"
msgstr ""
-#: models.py:582
+#: models.py:642
msgid "Can delete own Treatment"
msgstr ""
-#: models.py:588
+#: models.py:648
msgid "by"
msgstr ""
-#: models.py:594
+#: models.py:683
msgid "Treatment documentation"
msgstr ""
-#: models.py:595
+#: models.py:684
msgid "Treament documentations"
msgstr ""
-#: models.py:607
+#: models.py:696
msgid "Administrative act"
msgstr ""
-#: models.py:614
+#: models.py:703
msgid "Property"
msgstr ""
-#: models.py:615
+#: models.py:704
msgid "Properties"
msgstr ""
-#: views.py:98
+#: views.py:107
msgid "New find"
msgstr ""
-#: views.py:111
+#: views.py:121
msgid "Find modification"
msgstr ""
-#: views.py:126
+#: views.py:136
msgid "Find deletion"
msgstr ""
-#: views.py:135
+#: views.py:145
msgid "Find: new source"
msgstr ""
-#: views.py:143
+#: views.py:153
msgid "Find: source modification"
msgstr ""
-#: views.py:149
+#: views.py:159
msgid "Find: source deletion"
msgstr ""
-#: wizards.py:61
-msgid "Operation"
+#: views.py:173
+msgid "New basket"
msgstr ""
-#: wizards.py:62
-msgid "Context record"
+#: views.py:192
+msgid "Manage items in basket"
+msgstr ""
+
+#: views.py:212
+msgid "Manage basket"
+msgstr ""
+
+#: views.py:300
+msgid "Delete basket"
+msgstr ""
+
+#: wizards.py:61
+msgid "Operation"
msgstr ""
#: templates/ishtar/sheet_find.html:14
@@ -586,69 +617,54 @@ msgid "Next version"
msgstr ""
#: templates/ishtar/sheet_find.html:24
+#: templates/ishtar/sheet_findbasket.html:11
msgid "Export as:"
msgstr ""
#: templates/ishtar/sheet_find.html:24
+#: templates/ishtar/sheet_findbasket.html:11
msgid "OpenOffice.org file"
msgstr ""
#: templates/ishtar/sheet_find.html:24
+#: templates/ishtar/sheet_findbasket.html:11
msgid "PDF file"
msgstr ""
#: templates/ishtar/sheet_find.html:25
+#: templates/ishtar/sheet_findbasket.html:12
msgid "Modify"
msgstr ""
-#: templates/ishtar/sheet_find.html:61 templates/ishtar/sheet_find.html:63
-#: templates/ishtar/sheet_find.html:65 templates/ishtar/sheet_find.html:71
-#: templates/ishtar/sheet_find.html:83 templates/ishtar/sheet_find.html:87
-#: templates/ishtar/sheet_find.html:92 templates/ishtar/sheet_find.html:96
-#: templates/ishtar/sheet_find.html:98 templates/ishtar/sheet_find.html:100
-msgid ":"
-msgstr ""
-
-#: templates/ishtar/sheet_find.html:68
-msgid "Associated base finds"
-msgstr ""
-
-#: templates/ishtar/sheet_find.html:96
-msgid "Related context record"
+#: templates/ishtar/sheet_find.html:68 templates/ishtar/sheet_find.html:92
+#: templates/ishtar/sheet_find.html:141
+msgid "Type"
msgstr ""
-#: templates/ishtar/sheet_find.html:98
-msgid "Related parcel"
+#: templates/ishtar/sheet_find.html:69 templates/ishtar/sheet_find.html:93
+msgid "Related find"
msgstr ""
-#: templates/ishtar/sheet_find.html:100
-msgid "Related operation"
+#: templates/ishtar/sheet_find.html:110
+msgid "Associated base finds"
msgstr ""
-#: templates/ishtar/sheet_find.html:106
+#: templates/ishtar/sheet_find.html:136 templates/ishtar/sheet_find.html:138
msgid "Documents"
msgstr ""
-#: templates/ishtar/sheet_find.html:108
+#: templates/ishtar/sheet_find.html:140
msgid "Title"
msgstr ""
-#: templates/ishtar/sheet_find.html:109
-msgid "Type"
-msgstr ""
-
-#: templates/ishtar/sheet_find.html:110
+#: templates/ishtar/sheet_find.html:142
msgid "Authors"
msgstr ""
-#: templates/ishtar/sheet_find.html:111 templates/ishtar/sheet_find.html:118
+#: templates/ishtar/sheet_find.html:143 templates/ishtar/sheet_find.html:150
msgid "Link"
msgstr ""
-#: templates/ishtar/sheet_find.html:121
-msgid "No document associated to this find"
-msgstr ""
-
#: templates/ishtar/sheet_findsource.html:6
msgid "Find source"
msgstr ""
diff --git a/archaeological_finds/models.py b/archaeological_finds/models.py
index 417dd3929..b84b7614f 100644
--- a/archaeological_finds/models.py
+++ b/archaeological_finds/models.py
@@ -32,6 +32,7 @@ from ishtar_common.models import GeneralType, ImageModel, BaseHistorizedItem, \
from archaeological_operations.models import AdministrativeAct
from archaeological_context_records.models import ContextRecord, Dating
+from ishtar_common.models import PRIVATE_FIELDS
from archaeological_warehouse.models import Warehouse, Container
@@ -303,10 +304,10 @@ class Find(BaseHistorizedItem, ImageModel, OwnPerms, ShortMenuItem):
find_number = models.IntegerField(_("Find number"), blank=True, null=True)
upstream_treatment = models.ForeignKey(
"Treatment", blank=True, null=True,
- related_name='downstream_treatment',
+ related_name='downstream',
verbose_name=_("Upstream treatment"))
downstream_treatment = models.ForeignKey(
- "Treatment", blank=True, null=True, related_name='upstream_treatment',
+ "Treatment", blank=True, null=True, related_name='upstream',
verbose_name=_("Downstream treatment"))
datings = models.ManyToManyField(Dating, verbose_name=_(u"Dating"),
related_name='find')
@@ -412,6 +413,42 @@ class Find(BaseHistorizedItem, ImageModel, OwnPerms, ShortMenuItem):
bf.context_record.operation.get_reference(),
self.index)
+ def upstream_treatments(self):
+ treatments = []
+ base_finds = [bf.pk for bf in self.base_finds.all()]
+ if self.upstream_treatment and \
+ self.upstream_treatment.pk not in treatments:
+ treatments.append((self.upstream_treatment.upstream.distinct(
+ ).order_by('label').all(), self.upstream_treatment))
+ for upstream in self.upstream_treatment.upstream.all():
+ if upstream.pk != self.pk and not [
+ bf.pk for bf in upstream.base_finds.all()
+ if bf.pk in base_finds]:
+ continue
+ for items, treatment in upstream.upstream_treatments():
+ if treatment.pk not in treatments:
+ treatments.append((treatment.upstream.order_by(
+ 'label').all(), treatment))
+ return treatments
+
+ def downstream_treatments(self):
+ treatments = []
+ base_finds = [bf.pk for bf in self.base_finds.all()]
+ if self.downstream_treatment and \
+ self.downstream_treatment.pk not in treatments:
+ treatments.append((self.downstream_treatment.downstream.distinct(
+ ).order_by('label').all(), self.downstream_treatment))
+ for downstream in self.downstream_treatment.downstream.all():
+ if downstream.pk != self.pk and not [
+ bf.pk for bf in downstream.base_finds.all()
+ if bf.pk in base_finds]:
+ continue
+ for items, treatment in downstream.downstream_treatments():
+ if treatment.pk not in treatments:
+ treatments.append((treatment.downstream.order_by(
+ 'label').all(), treatment))
+ return treatments
+
def get_department(self):
bf = self.get_first_base_find()
if not bf:
@@ -478,19 +515,24 @@ class Find(BaseHistorizedItem, ImageModel, OwnPerms, ShortMenuItem):
return q.filter(downstream_treatment__isnull=True).count()
def duplicate(self, user):
- # TODO
- raise
+ model = self.__class__
+ # base fields
+ table_cols = [field.name for field in model._meta.fields
+ if field.name not in PRIVATE_FIELDS or
+ field.name == 'order']
dct = dict([(attr, getattr(self, attr)) for attr in
- ('order', 'label', 'description',
- 'volume', 'weight', 'find_number', 'dating',
- 'conservatory_state', 'preservation_to_consider',
- 'weight_unit', )])
+ table_cols])
dct['order'] += 1
dct['history_modifier'] = user
new = self.__class__(**dct)
new.save()
- for base_find in self.base_finds.all():
- new.base_finds.add(base_find)
+
+ # m2m fields
+ m2m = [field.name for field in model._meta.many_to_many
+ if field.name not in PRIVATE_FIELDS]
+ for field in m2m:
+ for val in getattr(self, field).all():
+ getattr(new, field).add(val)
return new
@classmethod
@@ -606,6 +648,35 @@ class Treatment(BaseHistorizedItem, OwnPerms):
lbl += u" %s %s" % (_(u"by"), unicode(self.person))
return lbl
+ def save(self, *args, **kwargs):
+ items, user, extra_args_for_new = [], None, []
+ if "items" in kwargs:
+ items = kwargs.pop('items')
+ if "user" in kwargs:
+ user = kwargs.pop('user')
+ if "extra_args_for_new" in kwargs:
+ extra_args_for_new = kwargs.pop('extra_args_for_new')
+ is_new = self.pk is None
+ super(Treatment, self).save(*args, **kwargs)
+ if not is_new or not items:
+ return
+ basket = None
+ if hasattr(items, "items"):
+ basket = items
+ items = basket.items.all()
+ for item in items:
+ new = item.duplicate(user)
+ item.downstream_treatment = self
+ item.save()
+ new.upstream_treatment = self
+ for k in extra_args_for_new:
+ setattr(new, k, extra_args_for_new[k])
+ new.save()
+ # update baskets
+ for basket in FindBasket.objects.filter(items__pk=item.pk).all():
+ basket.items.remove(item)
+ basket.items.add(new)
+
class TreatmentSource(Source):
class Meta:
diff --git a/archaeological_finds/templates/ishtar/sheet_find.html b/archaeological_finds/templates/ishtar/sheet_find.html
index c5d3eb638..d21c85856 100644
--- a/archaeological_finds/templates/ishtar/sheet_find.html
+++ b/archaeological_finds/templates/ishtar/sheet_find.html
@@ -1,5 +1,5 @@
{% extends "ishtar/sheet.html" %}
-{% load i18n window_field from_dict %}
+{% load i18n window_field from_dict link_to_window %}
{% block head_sheet %}
{{block.super}}
@@ -10,7 +10,7 @@
{% if previous or next %}
<div class='tool'>
-{%if previous%}
+{% if previous %}
<a href="#" onclick='load_window("{% url show-historized-find item.pk previous|date:"c"%}");$("#{{window_id}}").hide();return false;'>{%trans "Previous version"%} ({{previous}})</a>
{% endif %}
{% if previous and next %} - {% endif %}
@@ -25,84 +25,116 @@
<div class='tool modify'><a href='{% url find_modify item.pk %}'>{% trans "Modify" %}</a></div>
{% if item.image %}
-<a href='{{item.image.url}}' rel="prettyPhoto" title="{{item.label}}"><img src='{{item.thumbnail.url}}'/></a>
+<a href='{{item.image.url}}' rel="prettyPhoto" title="{{item.label}}" class='photo'><img src='{{item.thumbnail.url}}'/></a>
{% endif%}
-{% field "Free-ID" item.label %}
-{% field "Previous ID" item.previous_id %}
-{% field "Description" item.description %}
-{% field "Created by" item.history_creator.ishtaruser.full_label %}
-{% field "Administrative index" item.administrative_index %}
-{% field_multiple "Material types" item.material_types %}
-{% field "Dating" item.dating %}
-{% field "Length (cm)" item.length %}
-{% field "Width (cm)" item.width %}
-{% field "Height (cm)" item.height %}
-{% field "Diameter (cm)" item.diameter %}
-{% field "Volume (l)" item.volume %}
+<ul class='form-flex'>
+{% field_li "Free-ID" item.label %}
+{% field_li "Previous ID" item.previous_id %}
+{% field_li "Description" item.description %}
+{% field_li "Created by" item.history_creator.ishtaruser.full_label %}
+{% field_li "Administrative index" item.administrative_index %}
+{% field_li_multiple "Material types" item.material_types %}
+{% field_li "Dating" item.dating %}
+{% field_li "Length (cm)" item.length %}
+{% field_li "Width (cm)" item.width %}
+{% field_li "Height (cm)" item.height %}
+{% field_li "Diameter (cm)" item.diameter %}
+{% field_li "Volume (l)" item.volume %}
{% if item.weight %}{% with item.weight|add:' '|add:item.weight_unit as weight %}
-{% field "Weight" weight %}
+{% field_li "Weight" weight %}
{% endwith %}{% endif %}
-{% field "Weight" item.weight %}
+{% field_li "Weight" item.weight %}
-{% field "Find number" item.find_number %}
-{% field "Conservatory state" item.conservatory_state %}
-{% field_multiple "Type of preservation to consider" item.preservation_to_considers %}
-{% field_multiple "Object types" item.object_types %}
-{% field_multiple "Integrity" item.integrities %}
+{% field_li "Find number" item.find_number %}
+{% field_li "Conservatory state" item.conservatory_state %}
+{% field_li_multiple "Type of preservation to consider" item.preservation_to_considers %}
+{% field_li_multiple "Object types" item.object_types %}
+{% field_li_multiple "Integrity" item.integrities %}
{% if item.CHECK_DICT %}
-{% field "Checked" item.checked|from_dict:item.CHECK_DICT %}
+{% field_li "Checked" item.checked|from_dict:item.CHECK_DICT %}
{% endif%}
{% if item.history_object and item.history_object.CHECK_DICT %}
-{% field "Checked" item.checked|from_dict:item.history_object.CHECK_DICT %}
+{% field_li "Checked" item.checked|from_dict:item.history_object.CHECK_DICT %}
{% endif%}
+{% field_li "Container" item.container %}
+</ul>
-{% if item.upstream_treatment %}<p><label>{%trans "Upstream treatment"%}{% trans ":"%}</label>
-<span class='value'>{{item.upstream_treatment}} ({% for up in item.upstream_treatment.upstream_treatment.all %}{% if forloop.counter0 %}, {%endif %}{{up}}{% endfor %})</span></p>{% endif%}
-{% if item.downstream_treatment %}<p><label>{%trans "Downstream treatment"%}{% trans ":"%}</label>
-<span class='value'>{{item.downstream_treatment}} ({% for dt in item.downstream_treatment.downstream_treatment.all %}{% if forloop.counter0 %}, {%endif %}{{dt}}{% endfor %})</span></p>{% endif%}
-{% if item.container %}<p><label>{%trans "Container"%}{% trans ":"%}</label>
-<span class='value'>{{item.container}}</span></p>{% endif%}
+{% if item.upstream_treatment %}
+<table class='simple' id='{{window_id}}-upstream'>
+ <caption>{% trans "Upstream treatment" %}</caption>
+ <tr>
+ <th>{% trans "Type" %}</th>
+ <th>{% trans "Related find" %}</th>
+ <th>{% trans "Person" %}</th>
+ <th>{% trans "Container" %}</th>
+ <th>{% trans "Start date" %}</th>
+ <th>{% trans "End date" %}</th>
+ </tr>
+ {% for items, treatment in item.upstream_treatments %}
+ <tr>
+ <td class='string'>{{ treatment.treatment_type }}</td>
+ <td class='item-list'>{% for item in items %}<span>{{item}} {{ item|link_to_window}}</span>{% endfor %}</td>
+ <td class='string'>{{ treatment.person|default_if_none:"-" }}</td>
+ <td class='string'>{{ treatment.container|default_if_none:"-" }}</td>
+ <td class='string'>{{ treatment.start_date|default_if_none:"-" }}</td>
+ <td class='string'>{{ treatment.end_date|default_if_none:"-" }}</td>
+ </tr>
+ {% endfor %}
+</table>
+{% endif %}
+
+{% if item.downstream_treatment %}
+<table class='simple' id='{{window_id}}-downstream'>
+ <caption>{% trans "Downstream treatment" %}</caption>
+ <tr>
+ <th>{% trans "Type" %}</th>
+ <th>{% trans "Related find" %}</th>
+ <th>{% trans "Person" %}</th>
+ <th>{% trans "Start date" %}</th>
+ <th>{% trans "End date" %}</th>
+ </tr>
+ {% for items, treatment in item.downstream_treatments %}
+ <tr>
+ <td class='string'>{{ treatment.treatment_type }}</td>
+ <td class='item-list'>{% for item in items %}<span>{{item}} {{ item|link_to_window}}</span>{% endfor %}</td>
+ <td class='string'>{{ treatment.person|default_if_none:"" }}</td>
+ <td class='string'>{{ treatment.start_date|default_if_none:"" }}</td>
+ <td class='string'>{{ treatment.end_date|default_if_none:"" }}</td>
+ </tr>
+ {% endfor %}
+</table>
+{% endif %}
<h3>{% trans "Associated base finds"%}</h3>
{% for base_find in item.base_finds.all %}
-<p><label>{%trans "Complete ID"%}{% trans ":"%}</label>
-<span class='value'>{{base_find.complete_id}}</span></p>
-
-{% field "Short ID" base_find.short_id %}
+<ul class='form-flex'>
+{% field_li "Complete ID" base_find.complete_id %}
+{% field_li "Short ID" base_find.short_id %}
{% if base_find.IS_ISOLATED_DICT %}
-{% field "Batch/object" base_find.batch|from_dict:base_find.IS_ISOLATED_DICT %}
+{% field_li "Batch/object" base_find.batch|from_dict:base_find.IS_ISOLATED_DICT %}
{% endif %}
{% if base_find.history_object and base_find.history_object.IS_ISOLATED_DICT %}
-{% field "Batch/object" base_find.batch|from_dict:base_find.history_object.IS_ISOLATED_DICT %}
+{% field_li "Batch/object" base_find.batch|from_dict:base_find.history_object.IS_ISOLATED_DICT %}
{% endif %}
-{% if base_find.discovery_date %}
-<p><label>{%trans "Discovery date"%}{% trans ":"%}</label>
-<span class='value'>{{base_find.discovery_date}}</span></p>
-{% endif%}
-{% if base_find.description %}
-<p><label>{%trans "Description"%}{% trans ":"%}</label>
-<span class='value'>{{base_find.description}}</span></p>
-{% endif%}
-{% field "Comment" base_find.comment "<pre>" "</pre>" %}
-{% if base_find.special_interest %}
-<p><label>{%trans "Special interest"%}{% trans ":"%}</label>
-<span class='value'>{{base_find.special_interest}}</span></p>
-{% endif%}
+{% field_li "Discovery date" base_find.discovery_date %}
+{% field_li "Special interest" base_find.special_interest %}
+{% field_li_detail "Context record" base_find.context_record %}
+{% if base_find.context_record %}{% field_li "Parcel" base_find.context_record.parcel %}
+{% field_li_detail "Operation" base_find.context_record.operation %}{% endif %}
+</ul>
-<p><label>{%trans "Related context record"%}{% trans ":"%}</label>
-<span class='value'><a href="#" onclick='load_window("{% url show-contextrecord base_find.context_record.pk ''%}");'>{{ base_find.context_record }}</a></span></p>
-<p><label>{%trans "Related parcel"%}{% trans ":"%}</label>
-<span class='value'>{{base_find.context_record.parcel}}</span></p>
-<p><label>{%trans "Related operation"%}{% trans ":"%}</label>
-<span class='value'><a href="#" onclick='load_window("{% url show-operation base_find.context_record.operation.pk ''%}");'>{{ base_find.context_record.operation }}</a></span></p>
+{% field "Description" base_find.description "<pre>" "</pre>" %}
+{% field "Comment" base_find.comment "<pre>" "</pre>" %}
{% if forloop.counter0 %}<hr/>{% endif %}
{% endfor %}
-<table class='simple'>
+{% if item.source.count %}
+<h3>{% trans "Documents"%}</h3>
+<table id='{{window_id}}-docs'>
<caption>{%trans "Documents"%}</caption>
<tr>
<th>{% trans "Title" %}</th>
@@ -115,11 +147,16 @@
<td class='string'>{{ doc.title }}</td>
<td class='string'>{{doc.source_type}}</td>
<td class='string'>{{ doc.authors.all|join:", " }}</td>
- <td class='string'>{% if doc.associated_url %}<a href='{{doc.associated_url}}'>{% trans "Link"%}</a>{% endif %}</td>
+ <td class='string'>{% if doc.associated_url %}<a href='{{doc.associated_url}}' target="_blank">{% trans "Link"%}</a>{% endif %}</td>
</tr>
{% empty %}
- <tr><td colspan="4" class='no_items'>{% trans "No document associated to this find" %}</td></tr>
{% endfor %}
</table>
+<script type='text/javascript'>
+tableToGrid('#{{window_id}}-docs', {
+ width: null, shrinkToFit: false});
+</script>
+{% endif %}
+
{% endblock %}
diff --git a/archaeological_finds/tests.py b/archaeological_finds/tests.py
index ccf821757..f75e9cfa3 100644
--- a/archaeological_finds/tests.py
+++ b/archaeological_finds/tests.py
@@ -19,11 +19,13 @@
from django.conf import settings
from django.core.files.uploadedfile import SimpleUploadedFile
-from ishtar_common.models import ImporterType
+from django.test import TestCase
+from ishtar_common.models import ImporterType, IshtarUser
from archaeological_finds import models
-from archaeological_context_records.tests import ImportContextRecordTest
+from archaeological_context_records.tests import ImportContextRecordTest, \
+ ContextRecordInit
from ishtar_common import forms_common
@@ -67,3 +69,78 @@ class ImportFindTest(ImportContextRecordTest):
self.assertTrue(current_nb == (old_nb + 4))
self.assertEqual(
models.Find.objects.filter(material_types__pk=ceram).count(), 4)
+
+
+class FindInit(ContextRecordInit):
+ test_context_records = False
+
+ def create_finds(self, user=None, data_base={}, data={}):
+ if not getattr(self, 'finds', None):
+ self.finds = []
+ if not getattr(self, 'base_finds', None):
+ self.base_finds = []
+
+ default = {'label': "Base find"}
+ if not data_base.get('history_modifier'):
+ data_base['history_modifier'] = self.get_default_user()
+ if not data_base.get('context_record'):
+ data_base['context_record'] = self.get_default_context_record()
+
+ default.update(data_base)
+ base_find = models.BaseFind.objects.create(**default)
+ self.base_finds.append(base_find)
+
+ data["history_modifier"] = data_base["history_modifier"]
+ find = models.Find.objects.create(**data)
+ find.base_finds.add(base_find)
+ self.finds.append(find)
+ return self.finds, self.base_finds
+
+ def get_default_find(self):
+ return self.create_finds()[0]
+
+
+class PackagingTest(TestCase, FindInit):
+ fixtures = [settings.ROOT_PATH +
+ '../fixtures/initial_data.json',
+ settings.ROOT_PATH +
+ '../ishtar_common/fixtures/initial_data.json',
+ settings.ROOT_PATH +
+ '../archaeological_files/fixtures/initial_data.json',
+ settings.ROOT_PATH +
+ '../archaeological_operations/fixtures/initial_data-fr.json',
+ settings.ROOT_PATH +
+ '../archaeological_finds/fixtures/initial_data-fr.json',
+ ]
+ model = models.Find
+
+ def setUp(self):
+ self.create_finds({"label": u"Find 1"})
+ self.create_finds({"label": u"Find 2"})
+ self.basket = models.FindBasket.objects.create(
+ label="My basket", user=IshtarUser.objects.get(
+ pk=self.get_default_user().pk))
+ self.other_basket = models.FindBasket.objects.create(
+ label="My other basket", user=IshtarUser.objects.get(
+ pk=self.get_default_user().pk))
+ for find in self.finds:
+ self.basket.items.add(find)
+ self.other_basket.items.add(find)
+
+ def testPackaging(self):
+ treatment_type = models.TreatmentType.objects.get(txt_idx='packaging')
+ treatment = models.Treatment(treatment_type=treatment_type)
+ items_nb = models.Find.objects.count()
+ treatment.save(user=self.get_default_user(), items=self.basket)
+ self.assertEqual(items_nb + self.basket.items.count(),
+ models.Find.objects.count(),
+ msg="Packaging doesn't generate enough new finds")
+ # new version of the find is in the basket
+ for item in self.basket.items.all():
+ self.assertNotIn(
+ item, self.finds,
+ msg="Original basket have not been upgraded after packaging")
+ for item in self.other_basket.items.all():
+ self.assertNotIn(
+ item, self.finds,
+ msg="Other basket have not been upgraded after packaging")
diff --git a/archaeological_operations/locale/django.pot b/archaeological_operations/locale/django.pot
index eafb651cf..f25ff50fc 100644
--- a/archaeological_operations/locale/django.pot
+++ b/archaeological_operations/locale/django.pot
@@ -9,11 +9,11 @@ msgid ""
msgstr ""
#: forms.py:66 forms.py:344 forms.py:914 forms.py:936 forms.py:940
-#: models.py:782 templates/ishtar/blocks/window_tables/parcels.html:8
+#: models.py:780 templates/ishtar/blocks/window_tables/parcels.html:8
msgid "Parcels"
msgstr ""
-#: forms.py:69 forms.py:185 forms.py:890 models.py:772
+#: forms.py:69 forms.py:185 forms.py:890 models.py:770
#: templates/ishtar/blocks/window_tables/parcels.html:5
#: templates/ishtar/dashboards/dashboard_operation.html:302
#: templates/ishtar/dashboards/dashboard_operation.html:315
@@ -22,18 +22,18 @@ msgstr ""
msgid "Town"
msgstr ""
-#: forms.py:71 forms.py:433 forms.py:704 forms.py:1147 models.py:158
-#: models.py:589 models.py:770
+#: forms.py:71 forms.py:433 forms.py:704 forms.py:1148 models.py:158
+#: models.py:587 models.py:768
#: templates/ishtar/blocks/window_tables/parcels.html:6
msgid "Year"
msgstr ""
-#: forms.py:74 models.py:773
+#: forms.py:74 models.py:771
#: templates/ishtar/blocks/window_tables/parcels.html:7
msgid "Section"
msgstr ""
-#: forms.py:77 models.py:774
+#: forms.py:77 models.py:772
msgid "Parcel number"
msgstr ""
@@ -65,8 +65,8 @@ msgstr ""
msgid "Relation type"
msgstr ""
-#: forms.py:356 ishtar_menu.py:30 models.py:237 models.py:490 models.py:515
-#: models.py:530 models.py:581 models.py:769 wizards.py:338 wizards.py:349
+#: forms.py:356 ishtar_menu.py:30 models.py:237 models.py:488 models.py:513
+#: models.py:528 models.py:579 models.py:767 wizards.py:338 wizards.py:349
#: templates/ishtar/sheet_operation.html:6
msgid "Operation"
msgstr ""
@@ -99,11 +99,11 @@ msgstr ""
msgid "Numeric reference"
msgstr ""
-#: forms.py:439 forms.py:1157
+#: forms.py:439 forms.py:1158
msgid "Parcel (section/number)"
msgstr ""
-#: forms.py:442 forms.py:1160 models.py:491
+#: forms.py:442 forms.py:1161 models.py:489
#: templates/ishtar/dashboards/dashboard_operation.html:273
#: templates/ishtar/dashboards/dashboard_operation.html:286
#: templates/ishtar/dashboards/dashboard_operation.html:453
@@ -128,7 +128,7 @@ msgstr ""
msgid "In charge"
msgstr ""
-#: forms.py:463 models.py:575
+#: forms.py:463 models.py:573
msgid "Scientist in charge"
msgstr ""
@@ -190,11 +190,11 @@ msgstr ""
msgid "Archaelogical site"
msgstr ""
-#: forms.py:498 forms.py:1164
+#: forms.py:498 forms.py:1165
msgid "Created by"
msgstr ""
-#: forms.py:504 forms.py:1170
+#: forms.py:504 forms.py:1171
msgid "Modified by"
msgstr ""
@@ -206,7 +206,7 @@ msgstr ""
msgid "Associated file"
msgstr ""
-#: forms.py:594 forms.py:838 models.py:586 wizards.py:76
+#: forms.py:594 forms.py:838 models.py:584 wizards.py:76
msgid "Archaelogical file"
msgstr ""
@@ -274,7 +274,7 @@ msgstr ""
msgid "With finds"
msgstr ""
-#: forms.py:687 forms.py:1217 templates/ishtar/sheet_administrativeact.html:11
+#: forms.py:687 forms.py:1218 templates/ishtar/sheet_administrativeact.html:11
#: templates/ishtar/sheet_operation.html:32
msgid "General"
msgstr ""
@@ -295,7 +295,7 @@ msgstr ""
msgid "Total surface (m2)"
msgstr ""
-#: forms.py:744 models.py:49 models.py:142 models.py:940
+#: forms.py:744 models.py:49 models.py:142 models.py:938
msgid "Start date"
msgstr ""
@@ -327,7 +327,7 @@ msgstr ""
msgid "Bad operation code"
msgstr ""
-#: forms.py:834 models.py:159 models.py:368
+#: forms.py:834 models.py:159 models.py:366
msgid "Operation code"
msgstr ""
@@ -368,11 +368,11 @@ msgstr ""
msgid "Prescription on geoarchaeological context"
msgstr ""
-#: forms.py:888 forms.py:910 models.py:170 models.py:599
+#: forms.py:888 forms.py:910 models.py:170 models.py:597
msgid "Towns"
msgstr ""
-#: forms.py:917 models.py:781 models.py:938
+#: forms.py:917 models.py:779 models.py:936
msgid "Parcel"
msgstr ""
@@ -421,7 +421,7 @@ msgstr ""
msgid "Would you like to delete this operation?"
msgstr ""
-#: forms.py:1085 forms.py:1148 models.py:517 models.py:566
+#: forms.py:1085 forms.py:1149 models.py:515 models.py:564
msgid "Index"
msgstr ""
@@ -448,52 +448,52 @@ msgstr ""
msgid "You should select a document."
msgstr ""
-#: forms.py:1154 forms.py:1220 models.py:541 models.py:560
+#: forms.py:1155 forms.py:1221 models.py:539 models.py:558
msgid "Act type"
msgstr ""
-#: forms.py:1155 forms.py:1308
+#: forms.py:1156 forms.py:1309
msgid "Indexed?"
msgstr ""
-#: forms.py:1161 forms.py:1225 models.py:590
+#: forms.py:1162 forms.py:1226 models.py:588
#: templates/ishtar/blocks/window_tables/administrativacts.html:8
msgid "Object"
msgstr ""
-#: forms.py:1197 views.py:373
+#: forms.py:1198 views.py:373
msgid "Administrative act search"
msgstr ""
-#: forms.py:1212 forms.py:1266 forms.py:1333
+#: forms.py:1213 forms.py:1267 forms.py:1334
msgid "You should select an administrative act."
msgstr ""
-#: forms.py:1228 models.py:587
+#: forms.py:1229 models.py:585
msgid "Signature date"
msgstr ""
-#: forms.py:1243
+#: forms.py:1244
msgid "Would you like to delete this administrative act?"
msgstr ""
-#: forms.py:1248
+#: forms.py:1249
msgid "Template"
msgstr ""
-#: forms.py:1272 forms.py:1276
+#: forms.py:1273 forms.py:1277
msgid "This document is not intended for this type of act."
msgstr ""
-#: forms.py:1294
+#: forms.py:1295
msgid "Doc generation"
msgstr ""
-#: forms.py:1296
+#: forms.py:1297
msgid "Generate the associated doc?"
msgstr ""
-#: forms.py:1317 ishtar_menu.py:121 views.py:407
+#: forms.py:1318 ishtar_menu.py:121 views.py:407
msgctxt "admin act register"
msgid "Register"
msgstr ""
@@ -514,7 +514,7 @@ msgstr ""
msgid "Deletion"
msgstr ""
-#: ishtar_menu.py:58 models.py:606
+#: ishtar_menu.py:58 models.py:604
#: templates/ishtar/sheet_administrativeact.html:6
msgid "Administrative act"
msgstr ""
@@ -548,11 +548,11 @@ msgstr ""
msgid "Operations"
msgstr ""
-#: models.py:48 models.py:64 models.py:1402
+#: models.py:48 models.py:64 models.py:1400
msgid "Order"
msgstr ""
-#: models.py:50 models.py:941
+#: models.py:50 models.py:939
msgid "End date"
msgstr ""
@@ -616,7 +616,7 @@ msgstr ""
msgid "In charge scientist"
msgstr ""
-#: models.py:163 models.py:765
+#: models.py:163 models.py:763
msgid "File"
msgstr ""
@@ -665,7 +665,7 @@ msgstr ""
msgid "Intercommunal"
msgstr ""
-#: models.py:351 models.py:529
+#: models.py:351 models.py:527
msgid "Archaeological file"
msgstr ""
@@ -673,193 +673,193 @@ msgstr ""
msgid "Code patriarche"
msgstr ""
-#: models.py:394
+#: models.py:392
msgid "This operation code already exists for this year"
msgstr ""
-#: models.py:461
+#: models.py:459
msgid "Inverse relation"
msgstr ""
-#: models.py:465
+#: models.py:463
msgid "Operation relation type"
msgstr ""
-#: models.py:466
+#: models.py:464
msgid "Operation relation types"
msgstr ""
-#: models.py:479
+#: models.py:477
msgid "Operation record relation"
msgstr ""
-#: models.py:480
+#: models.py:478
msgid "Operation record relations"
msgstr ""
-#: models.py:501
+#: models.py:499
msgid "Operation documentation"
msgstr ""
-#: models.py:502
+#: models.py:500
msgid "Operation documentations"
msgstr ""
-#: models.py:505
+#: models.py:503
msgid "Can view all Operation sources"
msgstr ""
-#: models.py:507
+#: models.py:505
msgid "Can view own Operation source"
msgstr ""
-#: models.py:509
+#: models.py:507
msgid "Can add own Operation source"
msgstr ""
-#: models.py:511
+#: models.py:509
msgid "Can change own Operation source"
msgstr ""
-#: models.py:513
+#: models.py:511
msgid "Can delete own Operation source"
msgstr ""
-#: models.py:532
+#: models.py:530
msgid "Intended to"
msgstr ""
-#: models.py:534
+#: models.py:532
msgid "Code"
msgstr ""
-#: models.py:537
+#: models.py:535
msgid "Associated template"
msgstr ""
-#: models.py:538
+#: models.py:536
msgid "Indexed"
msgstr ""
-#: models.py:542
+#: models.py:540
msgid "Act types"
msgstr ""
-#: models.py:564
+#: models.py:562
msgid "Person in charge of the operation"
msgstr ""
-#: models.py:570
+#: models.py:568
msgid "Archaeological preventive operator"
msgstr ""
-#: models.py:578
+#: models.py:576
msgid "Signatory"
msgstr ""
-#: models.py:596
+#: models.py:594
msgid "Departments"
msgstr ""
-#: models.py:597
+#: models.py:595
msgid "Cached values get from associated departments"
msgstr ""
-#: models.py:600
+#: models.py:598
msgid "Cached values get from associated towns"
msgstr ""
-#: models.py:607 templates/ishtar/sheet_operation.html:134
+#: models.py:605 templates/ishtar/sheet_operation.html:134
msgid "Administrative acts"
msgstr ""
-#: models.py:610
+#: models.py:608
msgid "Can view all Administrative acts"
msgstr ""
-#: models.py:612
+#: models.py:610
msgid "Can view own Administrative act"
msgstr ""
-#: models.py:614
+#: models.py:612
msgid "Can add own Administrative act"
msgstr ""
-#: models.py:616
+#: models.py:614
msgid "Can change own Administrative act"
msgstr ""
-#: models.py:618
+#: models.py:616
msgid "Can delete own Administrative act"
msgstr ""
-#: models.py:627
+#: models.py:625
#: templates/ishtar/blocks/window_tables/administrativacts.html:5
#: templates/ishtar/blocks/window_tables/archaeologicalsites.html:5
msgid "Ref."
msgstr ""
-#: models.py:710
+#: models.py:708
msgid "This index already exists for this year"
msgstr ""
-#: models.py:776
+#: models.py:774
msgid "External ID"
msgstr ""
-#: models.py:778
+#: models.py:776
msgid "Address - Locality"
msgstr ""
-#: models.py:936
+#: models.py:934
msgid "Owner"
msgstr ""
-#: models.py:944
+#: models.py:942
msgid "Parcel owner"
msgstr ""
-#: models.py:945
+#: models.py:943
msgid "Parcel owners"
msgstr ""
-#: models.py:971
+#: models.py:969
msgid "Recorded"
msgstr ""
-#: models.py:972
+#: models.py:970
msgid "Effective"
msgstr ""
-#: models.py:973
+#: models.py:971
msgid "Active"
msgstr ""
-#: models.py:974
+#: models.py:972
msgid "Field completed"
msgstr ""
-#: models.py:975
+#: models.py:973
msgid "Associated report"
msgstr ""
-#: models.py:976
+#: models.py:974
msgid "Closed"
msgstr ""
-#: models.py:977
+#: models.py:975
msgid "Documented and closed"
msgstr ""
-#: models.py:1403
+#: models.py:1401
msgid "Is preventive"
msgstr ""
-#: models.py:1406
+#: models.py:1404
msgid "Operation type old"
msgstr ""
-#: models.py:1407
+#: models.py:1405
msgid "Operation types old"
msgstr ""
diff --git a/archaeological_operations/models.py b/archaeological_operations/models.py
index e3453f0cf..6ae05ca30 100644
--- a/archaeological_operations/models.py
+++ b/archaeological_operations/models.py
@@ -359,8 +359,6 @@ class Operation(BaseHistorizedItem, OwnPerms, ValueGetter, ShortMenuItem,
@classmethod
def get_available_operation_code(cls, year=None):
- if not year:
- year = datetime.date.today().year
max_val = cls.objects.filter(year=year).aggregate(
Max('operation_code'))["operation_code__max"]
return (max_val + 1) if max_val else 1
diff --git a/archaeological_operations/tests.py b/archaeological_operations/tests.py
index 578382ccd..c22cf4b37 100644
--- a/archaeological_operations/tests.py
+++ b/archaeological_operations/tests.py
@@ -441,9 +441,10 @@ def create_orga(user):
return orga
-def create_operation(user, orga=None):
+def create_operation(user, orga=None, values={}):
dct = {'year': 2010, 'operation_type_id': 1,
'history_modifier': user}
+ dct.update(values)
if orga:
dct['operator'] = orga
operation = models.Operation.objects.create(**dct)
@@ -578,6 +579,16 @@ class OperationTest(TestCase, OperationInitTest):
{'operator': self.orgas[0].pk})
self.assertTrue(json.loads(response.content)['total'] == 1)
+ def testIndex(self):
+ ope = create_operation(self.user, values={'year': 2042})
+ self.assertEqual(ope.operation_code, 1)
+ ope2 = create_operation(self.user, values={'year': 2042})
+ self.assertEqual(ope2.operation_code, 2)
+ ope = create_operation(self.user, values={'year': 0})
+ self.assertEqual(ope.operation_code, 1)
+ ope2 = create_operation(self.user, values={'year': 0})
+ self.assertEqual(ope2.operation_code, 2)
+
def create_administrativact(user, operation):
act_type, created = models.ActType.objects.get_or_create(
diff --git a/archaeological_warehouse/forms.py b/archaeological_warehouse/forms.py
index f045fac1e..d56df8139 100644
--- a/archaeological_warehouse/forms.py
+++ b/archaeological_warehouse/forms.py
@@ -1,6 +1,6 @@
#!/usr/bin/env python
# -*- coding: utf-8 -*-
-# Copyright (C) 2010-2013 Étienne Loks <etienne.loks_AT_peacefrogsDOTnet>
+# Copyright (C) 2010-2016 Étienne Loks <etienne.loks_AT_peacefrogsDOTnet>
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as
@@ -22,12 +22,13 @@ from django.conf import settings
from django.utils.translation import ugettext_lazy as _
from ishtar_common.models import Person, valid_id
-from archaeological_finds.models import TreatmentType
+from archaeological_finds.models import TreatmentType, FindBasket
import models
from ishtar_common import widgets
from ishtar_common.forms import name_validator, reverse_lazy, \
get_form_selection, TableSelect
-from archaeological_finds.forms import FindMultipleFormSelection
+from archaeological_finds.forms import FindMultipleFormSelection, \
+ SelectFindBasketForm
def get_warehouse_field(label=_(u"Warehouse"), required=True):
@@ -66,6 +67,8 @@ class WarehouseForm(forms.Form):
required=False)
def __init__(self, *args, **kwargs):
+ if 'limits' in kwargs:
+ kwargs.pop('limits')
super(WarehouseForm, self).__init__(*args, **kwargs)
self.fields['warehouse_type'].choices = \
models.WarehouseType.get_types()
@@ -99,6 +102,8 @@ class ContainerForm(forms.Form):
widget=forms.Textarea, required=False)
def __init__(self, *args, **kwargs):
+ if 'limits' in kwargs:
+ kwargs.pop('limits')
super(ContainerForm, self).__init__(*args, **kwargs)
self.fields['container_type'].choices = \
models.ContainerType.get_types()
@@ -135,11 +140,12 @@ ContainerFormSelection = get_form_selection(
new_message=_(u"Add a new container"))
-class BasePackagingForm(forms.Form):
+class BasePackagingForm(SelectFindBasketForm):
form_label = _(u"Packaging")
associated_models = {'treatment_type': TreatmentType,
'person': Person,
- 'location': models.Warehouse}
+ 'location': models.Warehouse,
+ 'basket': FindBasket}
treatment_type = forms.IntegerField(label="", widget=forms.HiddenInput)
person = forms.IntegerField(
label=_(u"Packager"),
diff --git a/archaeological_warehouse/locale/django.pot b/archaeological_warehouse/locale/django.pot
index cb0992a12..264ef3791 100644
--- a/archaeological_warehouse/locale/django.pot
+++ b/archaeological_warehouse/locale/django.pot
@@ -6,91 +6,95 @@
msgid ""
msgstr ""
-#: forms.py:34 forms.py:89 models.py:44 models.py:71
+#: forms.py:34 forms.py:96 models.py:44 models.py:73
msgid "Warehouse"
msgstr ""
-#: forms.py:42 models.py:35
+#: forms.py:43 models.py:35
msgid "Name"
msgstr ""
-#: forms.py:44 models.py:30 models.py:37
+#: forms.py:45 models.py:29 models.py:37
msgid "Warehouse type"
msgstr ""
-#: forms.py:46 models.py:40
+#: forms.py:48 models.py:40
msgid "Person in charge"
msgstr ""
-#: forms.py:51 forms.py:94 models.py:41 models.py:75
+#: forms.py:54 forms.py:101 models.py:41 models.py:77
msgid "Comment"
msgstr ""
-#: forms.py:53
+#: forms.py:56
msgid "Address"
msgstr ""
-#: forms.py:55
+#: forms.py:58
msgid "Address complement"
msgstr ""
-#: forms.py:57
+#: forms.py:60
msgid "Postal code"
msgstr ""
-#: forms.py:59 forms.py:63
+#: forms.py:62 forms.py:66
msgid "Town"
msgstr ""
-#: forms.py:60
+#: forms.py:63
msgid "Country"
msgstr ""
-#: forms.py:62
+#: forms.py:65
msgid "Phone"
msgstr ""
-#: forms.py:86 models.py:78
+#: forms.py:92 models.py:80
msgid "Container"
msgstr ""
-#: forms.py:87 forms.py:116 models.py:62
+#: forms.py:93 forms.py:127 models.py:63
msgid "Ref."
msgstr ""
-#: forms.py:88 forms.py:115 models.py:65 models.py:73
+#: forms.py:94 forms.py:126 models.py:66 models.py:75
msgid "Container type"
msgstr ""
-#: forms.py:126
+#: forms.py:137
msgid "Container search"
msgstr ""
-#: forms.py:128
+#: forms.py:139
msgid "You should select a container."
msgstr ""
-#: forms.py:129
+#: forms.py:140
msgid "Add a new container"
msgstr ""
-#: forms.py:132 views.py:94
+#: forms.py:144 ishtar_menu.py:33 views.py:94
msgid "Packaging"
msgstr ""
-#: forms.py:137
+#: forms.py:151
msgid "Packager"
msgstr ""
-#: forms.py:141
+#: forms.py:157
msgid "Date"
msgstr ""
-#: forms.py:150
+#: forms.py:166
msgid "Packaged finds"
msgstr ""
-#: models.py:31
+#: ishtar_menu.py:30
+msgid "Find"
+msgstr ""
+
+#: models.py:30
msgid "Warehouse types"
msgstr ""
@@ -118,30 +122,30 @@ msgstr ""
msgid "Can delete own Warehouse"
msgstr ""
-#: models.py:58
+#: models.py:59
msgid "Length (mm)"
msgstr ""
-#: models.py:59
+#: models.py:60
msgid "Width (mm)"
msgstr ""
-#: models.py:60
+#: models.py:61
msgid "Height (mm)"
msgstr ""
-#: models.py:61
+#: models.py:62
msgid "Volume (l)"
msgstr ""
-#: models.py:66
+#: models.py:67
msgid "Container types"
msgstr ""
-#: models.py:74
+#: models.py:76
msgid "Container ref."
msgstr ""
-#: models.py:79
+#: models.py:81
msgid "Containers"
msgstr ""
diff --git a/archaeological_warehouse/views.py b/archaeological_warehouse/views.py
index aab18ed40..be5e6150c 100644
--- a/archaeological_warehouse/views.py
+++ b/archaeological_warehouse/views.py
@@ -89,7 +89,7 @@ def autocomplete_container(request):
warehouse_packaging_wizard = PackagingWizard.as_view([
('seleccontainer-packaging', ContainerFormSelection),
('base-packaging', BasePackagingForm),
- ('multiselecitems-packaging', FindPackagingFormSelection),
+ # ('multiselecitems-packaging', FindPackagingFormSelection),
('final-packaging', FinalForm)],
label=_(u"Packaging"),
url_name='warehouse_packaging',)
diff --git a/archaeological_warehouse/wizards.py b/archaeological_warehouse/wizards.py
index 833c1c697..409f7b28f 100644
--- a/archaeological_warehouse/wizards.py
+++ b/archaeological_warehouse/wizards.py
@@ -1,6 +1,6 @@
#!/usr/bin/env python
# -*- coding: utf-8 -*-
-# Copyright (C) 2012 Étienne Loks <etienne.loks_AT_peacefrogsDOTnet>
+# Copyright (C) 2012-2016 Étienne Loks <etienne.loks_AT_peacefrogsDOTnet>
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as
@@ -25,23 +25,24 @@ from archaeological_finds.models import Treatment
class PackagingWizard(TreatmentWizard):
+
+ def get_form_kwargs(self, step):
+ kwargs = super(PackagingWizard, self).get_form_kwargs(step)
+ if 'base-packaging' not in step:
+ return kwargs
+ kwargs['user'] = self.request.user
+ return kwargs
+
def save_model(self, dct, m2m, whole_associated_models, form_list,
return_object):
dct = self.get_extra_model(dct, form_list)
obj = self.get_current_saved_object()
dct['location'] = dct['container'].location
- items = dct.pop('finds')
+ items = dct.pop('basket')
treatment = Treatment(**dct)
- treatment.save()
- if not hasattr(items, '__iter__'):
- items = [items]
- for item in items:
- new = item.duplicate(self.request.user)
- item.downstream_treatment = treatment
- item.save()
- new.upstream_treatment = treatment
- new.container = dct['container']
- new.save()
+ extra_args_for_new = {"container": dct['container']}
+ treatment.save(items=items, user=self.request.user,
+ extra_args_for_new=extra_args_for_new)
res = render_to_response('ishtar/wizard/wizard_done.html', {},
context_instance=RequestContext(self.request))
return return_object and (obj, res) or res
diff --git a/ishtar_common/locale/django.pot b/ishtar_common/locale/django.pot
index 303c03ace..b3ceeddda 100644
--- a/ishtar_common/locale/django.pot
+++ b/ishtar_common/locale/django.pot
@@ -24,7 +24,7 @@ msgstr ""
msgid "Archaeological file"
msgstr ""
-#: context_processors.py:38 models.py:1281
+#: context_processors.py:38 models.py:1322
msgid "Operation"
msgstr ""
@@ -171,12 +171,12 @@ msgstr ""
msgid "Add a new item"
msgstr ""
-#: forms.py:171 models.py:1058
+#: forms.py:174 models.py:1099
msgid "Template"
msgstr ""
#: forms_common.py:39 forms_common.py:57 forms_common.py:169
-#: forms_common.py:289 models.py:1124 models.py:2377
+#: forms_common.py:289 models.py:1165 models.py:2420
#: templates/blocks/JQueryAdvancedTown.html:19
#: templates/ishtar/sheet_organization.html:17
msgid "Town"
@@ -192,110 +192,110 @@ msgid ""
"french town Saint-Denis in the Seine-Saint-Denis department.</p>"
msgstr ""
-#: forms_common.py:66 forms_common.py:669 ishtar_menu.py:42 models.py:1279
-#: models.py:2076 models.py:2205 models.py:2259
-#: templates/ishtar/sheet_person.html:6
+#: forms_common.py:66 forms_common.py:669 ishtar_menu.py:42 models.py:1320
+#: models.py:2119 models.py:2248 models.py:2302
+#: templates/ishtar/sheet_person.html:4
msgid "Person"
msgstr ""
-#: forms_common.py:157 forms_common.py:231 ishtar_menu.py:66 models.py:1280
-#: models.py:1995 templates/ishtar/sheet_organization.html:6
+#: forms_common.py:157 forms_common.py:231 ishtar_menu.py:66 models.py:1321
+#: models.py:2036 templates/ishtar/sheet_organization.html:6
msgid "Organization"
msgstr ""
#: forms_common.py:160 forms_common.py:196 forms_common.py:226
-#: forms_common.py:259 models.py:775 models.py:1057 models.py:1325
-#: models.py:1543 models.py:1989 models.py:2063 models.py:2363
+#: forms_common.py:259 models.py:812 models.py:1098 models.py:1366
+#: models.py:1584 models.py:2030 models.py:2106 models.py:2406
#: templates/ishtar/sheet_organization.html:12
#: templates/ishtar/sheet_organization.html:25
msgid "Name"
msgstr ""
-#: forms_common.py:161 models.py:1266 models.py:1674
+#: forms_common.py:161 models.py:1307 models.py:1715
msgid "Organization type"
msgstr ""
-#: forms_common.py:163 forms_common.py:283 models.py:1119
+#: forms_common.py:163 forms_common.py:283 models.py:1160
#: templates/ishtar/sheet_organization.html:14
msgid "Address"
msgstr ""
-#: forms_common.py:165 forms_common.py:286 models.py:1120
+#: forms_common.py:165 forms_common.py:286 models.py:1161
#: templates/ishtar/sheet_organization.html:15
msgid "Address complement"
msgstr ""
-#: forms_common.py:167 forms_common.py:287 models.py:1122
+#: forms_common.py:167 forms_common.py:287 models.py:1163
#: templates/ishtar/sheet_organization.html:16
msgid "Postal code"
msgstr ""
-#: forms_common.py:170 forms_common.py:290 models.py:1125
+#: forms_common.py:170 forms_common.py:290 models.py:1166
msgid "Country"
msgstr ""
#: forms_common.py:172 forms_common.py:228 forms_common.py:263
-#: forms_common.py:397 models.py:1152
+#: forms_common.py:397 models.py:1193
msgid "Email"
msgstr ""
-#: forms_common.py:173 forms_common.py:266 models.py:1137
+#: forms_common.py:173 forms_common.py:266 models.py:1178
#: templates/ishtar/sheet_organization.html:18
-#: templates/ishtar/sheet_person.html:23
+#: templates/ishtar/sheet_person.html:19
#: templates/ishtar/wizard/wizard_person.html:17
msgid "Phone"
msgstr ""
-#: forms_common.py:174 forms_common.py:275 models.py:1149
+#: forms_common.py:174 forms_common.py:275 models.py:1190
#: templates/ishtar/sheet_organization.html:19
-#: templates/ishtar/sheet_person.html:41
+#: templates/ishtar/sheet_person.html:37
#: templates/ishtar/wizard/wizard_person.html:35
msgid "Mobile phone"
msgstr ""
-#: forms_common.py:197 forms_common.py:229 models.py:1700 models.py:1991
-#: models.py:2300 templates/sheet_ope.html:85 templates/sheet_ope.html.py:105
+#: forms_common.py:197 forms_common.py:229 models.py:1741 models.py:2032
+#: models.py:2343 templates/sheet_ope.html:85 templates/sheet_ope.html.py:105
#: templates/sheet_ope.html:126 templates/ishtar/import_list.html:13
#: templates/ishtar/sheet_organization.html:27
-#: templates/ishtar/sheet_person.html:95
+#: templates/ishtar/sheet_person.html:91
#: templates/ishtar/blocks/window_tables/documents.html:6
msgid "Type"
msgstr ""
-#: forms_common.py:206 views.py:114
+#: forms_common.py:206 views.py:128
msgid "Organization search"
msgstr ""
-#: forms_common.py:227 forms_common.py:257 models.py:2061
+#: forms_common.py:227 forms_common.py:257 models.py:2104
#: templates/ishtar/sheet_organization.html:26
msgid "Surname"
msgstr ""
-#: forms_common.py:243 views.py:88
+#: forms_common.py:243 views.py:93
msgid "Person search"
msgstr ""
-#: forms_common.py:254 templates/ishtar/sheet_person.html:12
+#: forms_common.py:254 templates/ishtar/sheet_person.html:8
#: templates/ishtar/wizard/wizard_person.html:6
msgid "Identity"
msgstr ""
-#: forms_common.py:256 forms_common.py:595 forms_common.py:636 models.py:2059
-#: models.py:2297 templates/sheet_ope.html:104
-#: templates/ishtar/sheet_person.html:94
+#: forms_common.py:256 forms_common.py:595 forms_common.py:636 models.py:2102
+#: models.py:2340 templates/sheet_ope.html:104
+#: templates/ishtar/sheet_person.html:90
#: templates/ishtar/blocks/window_tables/documents.html:5
msgid "Title"
msgstr ""
-#: forms_common.py:261 models.py:2065
+#: forms_common.py:261 models.py:2108
msgid "Raw name"
msgstr ""
-#: forms_common.py:264 models.py:1138
+#: forms_common.py:264 models.py:1179
msgid "Phone description"
msgstr ""
-#: forms_common.py:267 models.py:1140 models.py:1142
+#: forms_common.py:267 models.py:1181 models.py:1183
msgid "Phone description 2"
msgstr ""
@@ -303,11 +303,11 @@ msgstr ""
msgid "Phone 2"
msgstr ""
-#: forms_common.py:271 models.py:1146
+#: forms_common.py:271 models.py:1187
msgid "Phone description 3"
msgstr ""
-#: forms_common.py:273 models.py:1144
+#: forms_common.py:273 models.py:1185
msgid "Phone 3"
msgstr ""
@@ -315,27 +315,27 @@ msgstr ""
msgid "Current organization"
msgstr ""
-#: forms_common.py:292 models.py:1127
+#: forms_common.py:292 models.py:1168
msgid "Other address: address"
msgstr ""
-#: forms_common.py:295 models.py:1130
+#: forms_common.py:295 models.py:1171
msgid "Other address: address complement"
msgstr ""
-#: forms_common.py:297 models.py:1131
+#: forms_common.py:297 models.py:1172
msgid "Other address: postal code"
msgstr ""
-#: forms_common.py:299 models.py:1133
+#: forms_common.py:299 models.py:1174
msgid "Other address: town"
msgstr ""
-#: forms_common.py:301 models.py:1135
+#: forms_common.py:301 models.py:1176
msgid "Other address: country"
msgstr ""
-#: forms_common.py:346 forms_common.py:376 forms_common.py:380 models.py:2043
+#: forms_common.py:346 forms_common.py:376 forms_common.py:380 models.py:2084
msgid "Person type"
msgstr ""
@@ -367,7 +367,7 @@ msgstr ""
msgid "Send the new password by email?"
msgstr ""
-#: forms_common.py:451 forms_common.py:464 models.py:2378
+#: forms_common.py:451 forms_common.py:464 models.py:2421
msgid "Towns"
msgstr ""
@@ -383,7 +383,7 @@ msgstr ""
msgid "Documentation informations"
msgstr ""
-#: forms_common.py:597 forms_common.py:637 models.py:1675 models.py:2280
+#: forms_common.py:597 forms_common.py:637 models.py:1716 models.py:2323
msgid "Source type"
msgstr ""
@@ -395,41 +395,41 @@ msgstr ""
msgid "Internal reference"
msgstr ""
-#: forms_common.py:605 models.py:2311
+#: forms_common.py:605 models.py:2354
msgid "Numerical ressource (web address)"
msgstr ""
-#: forms_common.py:606 models.py:2313
+#: forms_common.py:606 models.py:2356
msgid "Receipt date"
msgstr ""
-#: forms_common.py:608 models.py:1827 models.py:2315
+#: forms_common.py:608 models.py:1868 models.py:2358
msgid "Creation date"
msgstr ""
-#: forms_common.py:611 models.py:2318
+#: forms_common.py:611 models.py:2361
msgid "Receipt date in documentation"
msgstr ""
-#: forms_common.py:613 forms_common.py:641 models.py:277 models.py:1570
-#: models.py:2069 models.py:2325
+#: forms_common.py:613 forms_common.py:641 models.py:282 models.py:490
+#: models.py:1611 models.py:2112 models.py:2368
msgid "Comment"
msgstr ""
-#: forms_common.py:615 forms_common.py:640 models.py:777 models.py:1329
-#: models.py:1502 models.py:1544 models.py:2324 templates/sheet_ope.html:128
+#: forms_common.py:615 forms_common.py:640 models.py:814 models.py:1370
+#: models.py:1543 models.py:1585 models.py:2367 templates/sheet_ope.html:128
msgid "Description"
msgstr ""
-#: forms_common.py:618 models.py:2326
+#: forms_common.py:618 models.py:2369
msgid "Additional information"
msgstr ""
-#: forms_common.py:620 forms_common.py:644 models.py:2328
+#: forms_common.py:620 forms_common.py:644 models.py:2371
msgid "Has a duplicate"
msgstr ""
-#: forms_common.py:633 forms_common.py:662 forms_common.py:695 models.py:2264
+#: forms_common.py:633 forms_common.py:662 forms_common.py:695 models.py:2307
#: templates/ishtar/wizard/wizard_person_deletion.html:124
msgid "Author"
msgstr ""
@@ -442,7 +442,7 @@ msgstr ""
msgid "Would you like to delete this documentation?"
msgstr ""
-#: forms_common.py:670 models.py:1676 models.py:2254 models.py:2261
+#: forms_common.py:670 models.py:1717 models.py:2297 models.py:2304
msgid "Author type"
msgstr ""
@@ -454,7 +454,7 @@ msgstr ""
msgid "There are identical authors."
msgstr ""
-#: forms_common.py:706 models.py:2265 models.py:2307
+#: forms_common.py:706 models.py:2308 models.py:2350
#: templates/sheet_ope.html:106
#: templates/ishtar/blocks/window_tables/documents.html:7
msgid "Authors"
@@ -464,11 +464,11 @@ msgstr ""
msgid "Administration"
msgstr ""
-#: ishtar_menu.py:31 views.py:140
+#: ishtar_menu.py:31 views.py:154
msgid "Account management"
msgstr ""
-#: ishtar_menu.py:34 models.py:853 views.py:1120
+#: ishtar_menu.py:34 models.py:894 views.py:1140
msgid "Global variables"
msgstr ""
@@ -492,19 +492,20 @@ msgstr ""
msgid "Merge"
msgstr ""
-#: ishtar_menu.py:61 ishtar_menu.py:88 models.py:1864 widgets.py:110
+#: ishtar_menu.py:61 ishtar_menu.py:88 models.py:1905 widgets.py:110
+#: templates/ishtar/form_delete.html:11
msgid "Delete"
msgstr ""
-#: ishtar_menu.py:96 models.py:1838
+#: ishtar_menu.py:96 models.py:1879
msgid "Imports"
msgstr ""
-#: ishtar_menu.py:99 views.py:1128
+#: ishtar_menu.py:99 views.py:1148
msgid "New import"
msgstr ""
-#: ishtar_menu.py:103 views.py:1142
+#: ishtar_menu.py:103 views.py:1162
msgid "Current imports"
msgstr ""
@@ -524,682 +525,692 @@ msgstr ""
msgid "This item already exists."
msgstr ""
-#: models.py:273 models.py:1092 models.py:1104
+#: models.py:278 models.py:489 models.py:1133 models.py:1145
msgid "Label"
msgstr ""
-#: models.py:275
+#: models.py:280
msgid "Textual ID"
msgstr ""
-#: models.py:278 models.py:1061
+#: models.py:283 models.py:492 models.py:1102
msgid "Available"
msgstr ""
-#: models.py:479 models.py:1616
+#: models.py:511 models.py:1657
msgid "Key"
msgstr ""
-#: models.py:485
+#: models.py:517
msgid "Specific key to an import"
msgstr ""
-#: models.py:556
+#: models.py:593
msgid "Last editor"
msgstr ""
-#: models.py:559
+#: models.py:596
msgid "Creator"
msgstr ""
-#: models.py:692 models.py:2389
+#: models.py:729 models.py:2432
msgid "Order"
msgstr ""
-#: models.py:693
+#: models.py:730
msgid "Symmetrical"
msgstr ""
-#: models.py:706
+#: models.py:743
msgid "Cannot have symmetrical and an inverse_relation"
msgstr ""
-#: models.py:776 models.py:1327
+#: models.py:813 models.py:1368
msgid "Slug"
msgstr ""
-#: models.py:778
+#: models.py:815
msgid "Files module"
msgstr ""
-#: models.py:779
+#: models.py:816
msgid "Context records module"
msgstr ""
-#: models.py:781
+#: models.py:818
msgid "Finds module"
msgstr ""
-#: models.py:782
+#: models.py:819
msgid "Need context records module"
msgstr ""
-#: models.py:784
+#: models.py:821
msgid "Warehouses module"
msgstr ""
-#: models.py:785
+#: models.py:822
msgid "Need finds module"
msgstr ""
-#: models.py:786
+#: models.py:824
+msgid "Home page"
+msgstr ""
+
+#: models.py:825
+msgid ""
+"Homepage of Ishtar - if not defined a default homepage will appear. Use the "
+"markdown syntax."
+msgstr ""
+
+#: models.py:827
msgid "Current active"
msgstr ""
-#: models.py:789
+#: models.py:830
msgid "Ishtar site profile"
msgstr ""
-#: models.py:790
+#: models.py:831
msgid "Ishtar site profiles"
msgstr ""
-#: models.py:846
+#: models.py:887
msgid "Variable name"
msgstr ""
-#: models.py:847
+#: models.py:888
msgid "Description of the variable"
msgstr ""
-#: models.py:849 models.py:1617
+#: models.py:890 models.py:1658
msgid "Value"
msgstr ""
-#: models.py:852
+#: models.py:893
msgid "Global variable"
msgstr ""
-#: models.py:962 models.py:992
+#: models.py:1003 models.py:1033
msgid "Total"
msgstr ""
-#: models.py:969 models.py:1093 models.py:1105
-#: templates/ishtar/sheet_person.html:26
+#: models.py:1010 models.py:1134 models.py:1146
+#: templates/ishtar/sheet_person.html:22
#: templates/ishtar/dashboards/dashboard_main_detail.html:135
#: templates/ishtar/dashboards/dashboard_main_detail_users.html:26
#: templates/ishtar/wizard/wizard_person.html:20
msgid "Number"
msgstr ""
-#: models.py:1056
+#: models.py:1097
msgid "Administrative Act"
msgstr ""
-#: models.py:1060
+#: models.py:1101
msgid "Associated object"
msgstr ""
-#: models.py:1064
+#: models.py:1105
msgid "Document template"
msgstr ""
-#: models.py:1065
+#: models.py:1106
msgid "Document templates"
msgstr ""
-#: models.py:1096 models.py:1106 models.py:1822
+#: models.py:1137 models.py:1147 models.py:1863
msgid "State"
msgstr ""
-#: models.py:1110 templates/blocks/JQueryAdvancedTown.html:12
+#: models.py:1151 templates/blocks/JQueryAdvancedTown.html:12
msgid "Department"
msgstr ""
-#: models.py:1111
+#: models.py:1152
msgid "Departments"
msgstr ""
-#: models.py:1148
+#: models.py:1189
msgid "Raw phone"
msgstr ""
-#: models.py:1154
+#: models.py:1195
msgid "Alternative address is prefered"
msgstr ""
-#: models.py:1193
+#: models.py:1234
msgid "Tel: "
msgstr ""
-#: models.py:1197
+#: models.py:1238
msgid "Mobile: "
msgstr ""
-#: models.py:1201
+#: models.py:1242
msgid "Email: "
msgstr ""
-#: models.py:1206
+#: models.py:1247
msgid "Merge key"
msgstr ""
-#: models.py:1267
+#: models.py:1308
msgid "Organization types"
msgstr ""
-#: models.py:1283
+#: models.py:1324
msgid "Archaeological site"
msgstr ""
-#: models.py:1284
+#: models.py:1325
msgid "Parcels"
msgstr ""
-#: models.py:1286
+#: models.py:1327
msgid "Operation source"
msgstr ""
-#: models.py:1289 views.py:945 views.py:996
+#: models.py:1330 views.py:965 views.py:1016
msgid "Archaeological files"
msgstr ""
-#: models.py:1291 views.py:948 views.py:1004
+#: models.py:1332 views.py:968 views.py:1024
msgid "Context records"
msgstr ""
-#: models.py:1293
+#: models.py:1334
msgid "Context record relations"
msgstr ""
-#: models.py:1295 views.py:950 views.py:1007
+#: models.py:1336 views.py:970 views.py:1027
msgid "Finds"
msgstr ""
-#: models.py:1331 templates/ishtar/dashboards/dashboard_main.html:26
+#: models.py:1372 templates/ishtar/dashboards/dashboard_main.html:26
msgid "Users"
msgstr ""
-#: models.py:1333
+#: models.py:1374
msgid "Associated model"
msgstr ""
-#: models.py:1336
+#: models.py:1377
msgid "Is template"
msgstr ""
-#: models.py:1337
+#: models.py:1378
msgid "Unicity keys (separator \";\")"
msgstr ""
-#: models.py:1341
+#: models.py:1382
msgid "Importer - Type"
msgstr ""
-#: models.py:1342
+#: models.py:1383
msgid "Importer - Types"
msgstr ""
-#: models.py:1432
+#: models.py:1473
msgid "Importer - Default"
msgstr ""
-#: models.py:1433
+#: models.py:1474
msgid "Importer - Defaults"
msgstr ""
-#: models.py:1468
+#: models.py:1509
msgid "Importer - Default value"
msgstr ""
-#: models.py:1469
+#: models.py:1510
msgid "Importer - Default values"
msgstr ""
-#: models.py:1501
+#: models.py:1542
msgid "Column number"
msgstr ""
-#: models.py:1504
+#: models.py:1545
msgid "Required"
msgstr ""
-#: models.py:1507
+#: models.py:1548
msgid "Importer - Column"
msgstr ""
-#: models.py:1508
+#: models.py:1549
msgid "Importer - Columns"
msgstr ""
-#: models.py:1528
+#: models.py:1569
msgid "Field name"
msgstr ""
-#: models.py:1530 models.py:1564
+#: models.py:1571 models.py:1605
msgid "Force creation of new items"
msgstr ""
-#: models.py:1532 models.py:1566
+#: models.py:1573 models.py:1607
msgid "Concatenate with existing"
msgstr ""
-#: models.py:1534 models.py:1568
+#: models.py:1575 models.py:1609
msgid "Concatenate character"
msgstr ""
-#: models.py:1538
+#: models.py:1579
msgid "Importer - Duplicate field"
msgstr ""
-#: models.py:1539
+#: models.py:1580
msgid "Importer - Duplicate fields"
msgstr ""
-#: models.py:1546
+#: models.py:1587
msgid "Regular expression"
msgstr ""
-#: models.py:1549
+#: models.py:1590
msgid "Importer - Regular expression"
msgstr ""
-#: models.py:1550
+#: models.py:1591
msgid "Importer - Regular expressions"
msgstr ""
-#: models.py:1573
+#: models.py:1614
msgid "Importer - Target"
msgstr ""
-#: models.py:1574
+#: models.py:1615
msgid "Importer - Targets"
msgstr ""
-#: models.py:1598 views.py:311
+#: models.py:1639 views.py:325
msgid "True"
msgstr ""
-#: models.py:1599 views.py:313
+#: models.py:1640 views.py:327
msgid "False"
msgstr ""
-#: models.py:1618
+#: models.py:1659
msgid "Is set"
msgstr ""
-#: models.py:1625
+#: models.py:1666
msgid "Importer - Target key"
msgstr ""
-#: models.py:1626
+#: models.py:1667
msgid "Importer - Targets keys"
msgstr ""
-#: models.py:1677 models.py:2292 models.py:2303
+#: models.py:1718 models.py:2335 models.py:2346
msgid "Format"
msgstr ""
-#: models.py:1678 models.py:2393
+#: models.py:1719 models.py:2436
msgid "Operation type"
msgstr ""
-#: models.py:1679
+#: models.py:1720
msgid "Period"
msgstr ""
-#: models.py:1680
+#: models.py:1721
msgid "Unit"
msgstr ""
-#: models.py:1681
+#: models.py:1722
msgid "Material"
msgstr ""
-#: models.py:1683
+#: models.py:1724
msgid "Conservatory state"
msgstr ""
-#: models.py:1684
+#: models.py:1725
msgid "Preservation type"
msgstr ""
-#: models.py:1685
+#: models.py:1726
msgid "Object type"
msgstr ""
-#: models.py:1687
+#: models.py:1728
msgid "Identification type"
msgstr ""
-#: models.py:1689
+#: models.py:1730
msgid "Context record relation type"
msgstr ""
-#: models.py:1690 models.py:2286
+#: models.py:1731 models.py:2329
msgid "Support type"
msgstr ""
-#: models.py:1696
+#: models.py:1737
msgid "Integer"
msgstr ""
-#: models.py:1697
+#: models.py:1738
msgid "Float"
msgstr ""
-#: models.py:1698
+#: models.py:1739
msgid "String"
msgstr ""
-#: models.py:1699 templates/sheet_ope.html:86
+#: models.py:1740 templates/sheet_ope.html:86
msgid "Date"
msgstr ""
-#: models.py:1701 templates/sheet_ope.html:61 templates/sheet_ope.html.py:83
-#: templates/ishtar/sheet_person.html:93
+#: models.py:1742 templates/sheet_ope.html:61 templates/sheet_ope.html.py:83
+#: templates/ishtar/sheet_person.html:89
#: templates/ishtar/dashboards/dashboard_main_detail.html:120
msgid "Year"
msgstr ""
-#: models.py:1702
+#: models.py:1743
msgid "String to boolean"
msgstr ""
-#: models.py:1703
+#: models.py:1744
msgctxt "filesystem"
msgid "File"
msgstr ""
-#: models.py:1704
+#: models.py:1745
msgid "Unknow type"
msgstr ""
-#: models.py:1720
+#: models.py:1761
msgid "4 digit year. e.g.: \"2015\""
msgstr ""
-#: models.py:1721
+#: models.py:1762
msgid "4 digit year/month/day. e.g.: \"2015/02/04\""
msgstr ""
-#: models.py:1722
+#: models.py:1763
msgid "Day/month/4 digit year. e.g.: \"04/02/2015\""
msgstr ""
-#: models.py:1732
+#: models.py:1773
msgid "Options"
msgstr ""
-#: models.py:1734
+#: models.py:1775
msgid "Split character(s)"
msgstr ""
-#: models.py:1738
+#: models.py:1779
msgid "Importer - Formater type"
msgstr ""
-#: models.py:1739
+#: models.py:1780
msgid "Importer - Formater types"
msgstr ""
-#: models.py:1786 templates/ishtar/dashboards/dashboard_main_detail.html:61
+#: models.py:1827 templates/ishtar/dashboards/dashboard_main_detail.html:61
msgid "Created"
msgstr ""
-#: models.py:1787
+#: models.py:1828
msgid "Analyse in progress"
msgstr ""
-#: models.py:1788
+#: models.py:1829
msgid "Analysed"
msgstr ""
-#: models.py:1789
+#: models.py:1830
msgid "Import pending"
msgstr ""
-#: models.py:1790
+#: models.py:1831
msgid "Import in progress"
msgstr ""
-#: models.py:1791
+#: models.py:1832
msgid "Finished with errors"
msgstr ""
-#: models.py:1792
+#: models.py:1833
msgid "Finished"
msgstr ""
-#: models.py:1793
+#: models.py:1834
msgid "Archived"
msgstr ""
-#: models.py:1805
+#: models.py:1846
msgid "Imported file"
msgstr ""
-#: models.py:1808
+#: models.py:1849
msgid "Associated images (zip file)"
msgstr ""
-#: models.py:1810
+#: models.py:1851
msgid "Encoding"
msgstr ""
-#: models.py:1812
+#: models.py:1853
msgid "Skip lines"
msgstr ""
-#: models.py:1813 templates/ishtar/import_list.html:47
+#: models.py:1854 templates/ishtar/import_list.html:47
msgid "Error file"
msgstr ""
-#: models.py:1816
+#: models.py:1857
msgid "Result file"
msgstr ""
-#: models.py:1819 templates/ishtar/import_list.html:53
+#: models.py:1860 templates/ishtar/import_list.html:53
msgid "Match file"
msgstr ""
-#: models.py:1825
+#: models.py:1866
msgid "Conservative import"
msgstr ""
-#: models.py:1830
+#: models.py:1871
msgid "End date"
msgstr ""
-#: models.py:1832
+#: models.py:1873
msgid "Remaining seconds"
msgstr ""
-#: models.py:1837
+#: models.py:1878
msgid "Import"
msgstr ""
-#: models.py:1854
+#: models.py:1895
msgid "Analyse"
msgstr ""
-#: models.py:1856 models.py:1859
+#: models.py:1897 models.py:1900
msgid "Re-analyse"
msgstr ""
-#: models.py:1857
+#: models.py:1898
msgid "Launch import"
msgstr ""
-#: models.py:1860
+#: models.py:1901
msgid "Re-import"
msgstr ""
-#: models.py:1861
+#: models.py:1902
msgid "Archive"
msgstr ""
-#: models.py:1863
+#: models.py:1904
msgid "Unarchive"
msgstr ""
-#: models.py:1996
+#: models.py:2037
msgid "Organizations"
msgstr ""
-#: models.py:1998
+#: models.py:2039
msgid "Can view all Organizations"
msgstr ""
-#: models.py:1999
+#: models.py:2040
msgid "Can view own Organization"
msgstr ""
-#: models.py:2000
+#: models.py:2041
msgid "Can add own Organization"
msgstr ""
-#: models.py:2002
+#: models.py:2043
msgid "Can change own Organization"
msgstr ""
-#: models.py:2004
+#: models.py:2045
msgid "Can delete own Organization"
msgstr ""
-#: models.py:2039
+#: models.py:2080
msgid "Groups"
msgstr ""
-#: models.py:2044
+#: models.py:2085
msgid "Person types"
msgstr ""
-#: models.py:2051
+#: models.py:2092
msgid "Mr"
msgstr ""
-#: models.py:2052
+#: models.py:2093
msgid "Miss"
msgstr ""
-#: models.py:2053
+#: models.py:2094
msgid "Mr and Mrs"
msgstr ""
-#: models.py:2054
+#: models.py:2095
msgid "Mrs"
msgstr ""
-#: models.py:2055
+#: models.py:2096
msgid "Doctor"
msgstr ""
-#: models.py:2067
+#: models.py:2110
msgid "Contact type"
msgstr ""
-#: models.py:2070 models.py:2117
+#: models.py:2113 models.py:2160
msgid "Types"
msgstr ""
-#: models.py:2073
+#: models.py:2116
msgid "Is attached to"
msgstr ""
-#: models.py:2077
+#: models.py:2120
msgid "Persons"
msgstr ""
-#: models.py:2079
+#: models.py:2122
msgid "Can view all Persons"
msgstr ""
-#: models.py:2080
+#: models.py:2123
msgid "Can view own Person"
msgstr ""
-#: models.py:2081
+#: models.py:2124
msgid "Can add own Person"
msgstr ""
-#: models.py:2082
+#: models.py:2125
msgid "Can change own Person"
msgstr ""
-#: models.py:2083
+#: models.py:2126
msgid "Can delete own Person"
msgstr ""
-#: models.py:2209
+#: models.py:2252
msgid "Ishtar user"
msgstr ""
-#: models.py:2210
+#: models.py:2253
msgid "Ishtar users"
msgstr ""
-#: models.py:2255
+#: models.py:2298
msgid "Author types"
msgstr ""
-#: models.py:2281
+#: models.py:2324
msgid "Source types"
msgstr ""
-#: models.py:2287
+#: models.py:2330
msgid "Support types"
msgstr ""
-#: models.py:2293
+#: models.py:2336
msgid "Formats"
msgstr ""
-#: models.py:2298
+#: models.py:2341
msgid "External ID"
msgstr ""
-#: models.py:2301
+#: models.py:2344
msgid "Support"
msgstr ""
-#: models.py:2305
+#: models.py:2348
msgid "Scale"
msgstr ""
-#: models.py:2319
+#: models.py:2362
msgid "Item number"
msgstr ""
-#: models.py:2320
+#: models.py:2363
msgid "Ref."
msgstr ""
-#: models.py:2323
+#: models.py:2366
msgid "Internal ref."
msgstr ""
-#: models.py:2364
+#: models.py:2407
msgid "Surface (m2)"
msgstr ""
-#: models.py:2365 templates/sheet_ope.html:46 templates/sheet_ope.html.py:107
+#: models.py:2408 templates/sheet_ope.html:46 templates/sheet_ope.html.py:107
msgid "Localisation"
msgstr ""
-#: models.py:2390
+#: models.py:2433
msgid "Is preventive"
msgstr ""
-#: models.py:2394
+#: models.py:2437
msgid "Operation types"
msgstr ""
-#: models.py:2420
+#: models.py:2463
msgid "Preventive"
msgstr ""
-#: models.py:2421
+#: models.py:2464
msgid "Research"
msgstr ""
@@ -1207,58 +1218,58 @@ msgstr ""
msgid " (...)"
msgstr ""
-#: views.py:95
+#: views.py:100
msgid "New person"
msgstr ""
-#: views.py:103
+#: views.py:108
msgid "Person modification"
msgstr ""
-#: views.py:109
+#: views.py:123
msgid "Person deletion"
msgstr ""
-#: views.py:120
+#: views.py:134
msgid "New organization"
msgstr ""
-#: views.py:127
+#: views.py:141
msgid "Organization modification"
msgstr ""
-#: views.py:133
+#: views.py:147
msgid "Organization deletion"
msgstr ""
-#: views.py:642 templates/base.html:80
+#: views.py:662 templates/base.html:81 templates/ishtar/basket_list.html:4
#: templates/ishtar/sheet_organization.html:35
-#: templatetags/link_to_window.py:16
+#: templatetags/link_to_window.py:18
msgid "Details"
msgstr ""
-#: views.py:873 views.py:927
+#: views.py:893 views.py:947
msgid "Operation not permitted."
msgstr ""
-#: views.py:875
+#: views.py:895
#, python-format
msgid "New %s"
msgstr ""
-#: views.py:946 views.py:1000
+#: views.py:966 views.py:1020
msgid "Operations"
msgstr ""
-#: views.py:1189 templates/ishtar/import_list.html:43
+#: views.py:1209 templates/ishtar/import_list.html:43
msgid "Link unmatched items"
msgstr ""
-#: views.py:1204
+#: views.py:1224
msgid "Delete import"
msgstr ""
-#: views.py:1263 views.py:1279
+#: views.py:1283 views.py:1299
msgid "Corporation manager"
msgstr ""
@@ -1266,15 +1277,15 @@ msgstr ""
msgid "Search..."
msgstr ""
-#: widgets.py:602 templatetags/window_tables.py:68
+#: widgets.py:604 templatetags/window_tables.py:71
msgid "No results"
msgstr ""
-#: widgets.py:603 templatetags/window_tables.py:69
+#: widgets.py:605 templatetags/window_tables.py:72
msgid "Loading..."
msgstr ""
-#: widgets.py:604
+#: widgets.py:606
msgid "Remove"
msgstr ""
@@ -1325,55 +1336,58 @@ msgstr ""
msgid "The %(app_name)s team"
msgstr ""
-#: templates/base.html:34
+#: templates/base.html:35
msgid "Logged in"
msgstr ""
-#: templates/base.html:35
+#: templates/base.html:36
msgid "Log out"
msgstr ""
-#: templates/base.html:36
+#: templates/base.html:37
msgid "Change password"
msgstr ""
-#: templates/base.html:38 templates/registration/activate.html:10
+#: templates/base.html:39 templates/registration/activate.html:10
#: templates/registration/login.html:8 templates/registration/login.html:10
#: templates/registration/password_reset_complete.html:8
msgid "Log in"
msgstr ""
-#: templates/base.html:44
+#: templates/base.html:45
msgid "Lang"
msgstr ""
-#: templates/base.html:44 templates/base.html.py:91
-#: templates/ishtar/blocks/window_field.html:2
-#: templates/ishtar/blocks/window_field_multiple.html:2
-#: templates/ishtar/blocks/window_field_url.html:2
+#: templates/base.html:45 templates/base.html.py:92 templates/welcome.html:7
+#: templates/welcome.html.py:8 templates/welcome.html:9
+#: templates/welcome.html.py:10 templates/ishtar/manage_basket.html:4
+#: templates/ishtar/blocks/window_field.html:1
+#: templates/ishtar/blocks/window_field_detail.html:1
+#: templates/ishtar/blocks/window_field_multiple.html:1
+#: templates/ishtar/blocks/window_field_url.html:1
msgid ":"
msgstr ""
-#: templates/base.html:69
+#: templates/base.html:70
msgid "Default selected items"
msgstr ""
-#: templates/base.html:89
+#: templates/base.html:90
msgid "Current items"
msgstr ""
#: templates/sheet_ope.html:4 templates/ishtar/sheet_organization.html:10
-#: templates/ishtar/sheet_person.html:10 templates/ishtar/sheet_toolbar.html:1
+#: templates/ishtar/sheet_toolbar.html:1
msgid "Export as:"
msgstr ""
#: templates/sheet_ope.html:4 templates/ishtar/sheet_organization.html:10
-#: templates/ishtar/sheet_person.html:10 templates/ishtar/sheet_toolbar.html:1
+#: templates/ishtar/sheet_toolbar.html:1
msgid "OpenOffice.org file"
msgstr ""
#: templates/sheet_ope.html:4 templates/ishtar/sheet_organization.html:10
-#: templates/ishtar/sheet_person.html:10 templates/ishtar/sheet_toolbar.html:1
+#: templates/ishtar/sheet_toolbar.html:1
msgid "PDF file"
msgstr ""
@@ -1561,7 +1575,7 @@ msgstr ""
msgid "Documentation"
msgstr ""
-#: templates/sheet_ope.html:102 templates/ishtar/sheet_person.html:91
+#: templates/sheet_ope.html:102 templates/ishtar/sheet_person.html:87
msgid "Documents"
msgstr ""
@@ -1585,7 +1599,56 @@ msgstr ""
msgid "No context record associated to this operation"
msgstr ""
+#: templates/welcome.html:4
+msgid ""
+"Welcome in Ishtar, open source software for management and inventory of "
+"archaeological data"
+msgstr ""
+
+#: templates/welcome.html:5
+msgid "Some useful links:"
+msgstr ""
+
+#: templates/welcome.html:7
+msgid "Presentation site and blog"
+msgstr ""
+
+#: templates/welcome.html:7
+msgid "stay tuned with Ishtar news!"
+msgstr ""
+
+#: templates/welcome.html:8
+msgid "Admin interface"
+msgstr ""
+
+#: templates/welcome.html:8
+msgid "for admin only."
+msgstr ""
+
+#: templates/welcome.html:9
+msgid "Forum"
+msgstr ""
+
+#: templates/welcome.html:9
+msgid ""
+"need help? find a new bug? a fantastic feature to propose? Here is the place "
+"to go."
+msgstr ""
+
+#: templates/welcome.html:10
+msgid "Source code"
+msgstr ""
+
+#: templates/welcome.html:10
+msgid "tickets"
+msgstr ""
+
+#: templates/welcome.html:10
+msgid "where the magic happens."
+msgstr ""
+
#: templates/window.html:38 templates/blocks/JQueryJqGrid.html:25
+#: templates/ishtar/manage_basket.html:9
msgid "Add"
msgstr ""
@@ -1622,7 +1685,7 @@ msgstr ""
msgid "full"
msgstr ""
-#: templates/blocks/JQueryJqGrid.html:95
+#: templates/blocks/JQueryJqGrid.html:96
#: templates/ishtar/blocks/window_tables/dynamic_documents.html:42
msgid "An error as occured during search. Check your query fields."
msgstr ""
@@ -1648,8 +1711,13 @@ msgstr ""
msgid "Help"
msgstr ""
+#: templates/ishtar/basket_list.html:6
+msgid "remove"
+msgstr ""
+
#: templates/ishtar/form.html:10 templates/ishtar/formset.html:8
#: templates/ishtar/import_list.html:58 templates/ishtar/merge.html:31
+#: templates/ishtar/simple_form.html:7
#: templates/ishtar/wizard/confirm_wizard.html:42
#: templates/ishtar/wizard/default_wizard.html:30
#: templates/ishtar/wizard/search.html:13
@@ -1698,6 +1766,14 @@ msgstr ""
msgid "Control file"
msgstr ""
+#: templates/ishtar/manage_basket.html:7
+msgid "Checking \"Select all\" only select the current page."
+msgstr ""
+
+#: templates/ishtar/manage_basket.html:10
+msgid "Basket content"
+msgstr ""
+
#: templates/ishtar/merge.html:7
msgid "Every operation on this form is irreversible"
msgstr ""
@@ -1729,6 +1805,7 @@ msgstr ""
#: templates/ishtar/organization_form.html:37
#: templates/ishtar/organization_person_form.html:32
#: templates/ishtar/person_form.html:43
+#: templates/ishtar/blocks/modify_toolbar.html:1
msgid "Modify"
msgstr ""
@@ -1788,49 +1865,49 @@ msgstr ""
msgid "No person in this organization"
msgstr ""
-#: templates/ishtar/sheet_person.html:25
+#: templates/ishtar/sheet_person.html:21
#: templates/ishtar/wizard/wizard_person.html:19
msgid "Phone type"
msgstr ""
-#: templates/ishtar/sheet_person.html:48
+#: templates/ishtar/sheet_person.html:44
#: templates/ishtar/wizard/wizard_person.html:42
msgid "Business address"
msgstr ""
-#: templates/ishtar/sheet_person.html:56
+#: templates/ishtar/sheet_person.html:52
#: templates/ishtar/wizard/wizard_person.html:51
msgid "Other address"
msgstr ""
-#: templates/ishtar/sheet_person.html:64
+#: templates/ishtar/sheet_person.html:60
msgid "Associated organization"
msgstr ""
-#: templates/ishtar/sheet_person.html:75
+#: templates/ishtar/sheet_person.html:71
msgid "Associated operations as scientist"
msgstr ""
-#: templates/ishtar/sheet_person.html:79
+#: templates/ishtar/sheet_person.html:75
msgid "Associated operations as responsible"
msgstr ""
-#: templates/ishtar/sheet_person.html:85
+#: templates/ishtar/sheet_person.html:81
msgid "Associated archaelogical files"
msgstr ""
-#: templates/ishtar/sheet_person.html:96
-#: templates/ishtar/sheet_person.html:104
+#: templates/ishtar/sheet_person.html:92
+#: templates/ishtar/sheet_person.html:100
#: templates/ishtar/blocks/window_tables/documents.html:9
#: templates/ishtar/blocks/window_tables/documents.html:17
msgid "Link"
msgstr ""
-#: templates/ishtar/sheet_person.html:108
+#: templates/ishtar/sheet_person.html:104
msgid "No document associated to this person"
msgstr ""
-#: templates/ishtar/blocks/window_field_url.html:3
+#: templates/ishtar/blocks/window_field_url.html:2
msgid "link"
msgstr ""
diff --git a/ishtar_common/migrations/0005_auto__add_field_ishtarsiteprofile_homepage.py b/ishtar_common/migrations/0005_auto__add_field_ishtarsiteprofile_homepage.py
new file mode 100644
index 000000000..7f8c65857
--- /dev/null
+++ b/ishtar_common/migrations/0005_auto__add_field_ishtarsiteprofile_homepage.py
@@ -0,0 +1,404 @@
+# -*- coding: utf-8 -*-
+import datetime
+from south.db import db
+from south.v2 import SchemaMigration
+from django.db import models
+
+
+class Migration(SchemaMigration):
+
+ def forwards(self, orm):
+ # Adding field 'IshtarSiteProfile.homepage'
+ db.add_column('ishtar_common_ishtarsiteprofile', 'homepage',
+ self.gf('django.db.models.fields.TextField')(null=True, blank=True),
+ keep_default=False)
+
+
+ def backwards(self, orm):
+ # Deleting field 'IshtarSiteProfile.homepage'
+ db.delete_column('ishtar_common_ishtarsiteprofile', 'homepage')
+
+
+ models = {
+ 'auth.group': {
+ 'Meta': {'object_name': 'Group'},
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}),
+ 'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'})
+ },
+ 'auth.permission': {
+ 'Meta': {'ordering': "('content_type__app_label', 'content_type__model', 'codename')", 'unique_together': "(('content_type', 'codename'),)", 'object_name': 'Permission'},
+ 'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
+ 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'})
+ },
+ 'auth.user': {
+ 'Meta': {'object_name': 'User'},
+ 'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
+ 'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}),
+ 'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
+ 'groups': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Group']", 'symmetrical': 'False', 'blank': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
+ 'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
+ 'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
+ 'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
+ 'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}),
+ 'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'})
+ },
+ 'contenttypes.contenttype': {
+ 'Meta': {'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"},
+ 'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'})
+ },
+ 'ishtar_common.arrondissement': {
+ 'Meta': {'object_name': 'Arrondissement'},
+ 'department': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['ishtar_common.Department']"}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '30'})
+ },
+ 'ishtar_common.author': {
+ 'Meta': {'object_name': 'Author'},
+ 'author_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['ishtar_common.AuthorType']"}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'person': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'author'", 'to': "orm['ishtar_common.Person']"})
+ },
+ 'ishtar_common.authortype': {
+ 'Meta': {'object_name': 'AuthorType'},
+ 'available': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
+ 'comment': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'label': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
+ 'txt_idx': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '100'})
+ },
+ 'ishtar_common.canton': {
+ 'Meta': {'object_name': 'Canton'},
+ 'arrondissement': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['ishtar_common.Arrondissement']"}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '30'})
+ },
+ 'ishtar_common.department': {
+ 'Meta': {'ordering': "['number']", 'object_name': 'Department'},
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'label': ('django.db.models.fields.CharField', [], {'max_length': '30'}),
+ 'number': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '3'}),
+ 'state': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['ishtar_common.State']", 'null': 'True', 'blank': 'True'})
+ },
+ 'ishtar_common.documenttemplate': {
+ 'Meta': {'ordering': "['associated_object_name', 'name']", 'object_name': 'DocumentTemplate'},
+ 'associated_object_name': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
+ 'available': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
+ 'template': ('django.db.models.fields.files.FileField', [], {'max_length': '100'})
+ },
+ 'ishtar_common.format': {
+ 'Meta': {'object_name': 'Format'},
+ 'available': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
+ 'comment': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'label': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
+ 'txt_idx': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '100'})
+ },
+ 'ishtar_common.formatertype': {
+ 'Meta': {'ordering': "('formater_type', 'options')", 'unique_together': "(('formater_type', 'options', 'many_split'),)", 'object_name': 'FormaterType'},
+ 'formater_type': ('django.db.models.fields.CharField', [], {'max_length': '20'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'many_split': ('django.db.models.fields.CharField', [], {'max_length': '10', 'null': 'True', 'blank': 'True'}),
+ 'options': ('django.db.models.fields.CharField', [], {'max_length': '500', 'null': 'True', 'blank': 'True'})
+ },
+ 'ishtar_common.globalvar': {
+ 'Meta': {'ordering': "['slug']", 'object_name': 'GlobalVar'},
+ 'description': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'slug': ('django.db.models.fields.SlugField', [], {'unique': 'True', 'max_length': '50'}),
+ 'value': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'})
+ },
+ 'ishtar_common.historicalorganization': {
+ 'Meta': {'ordering': "('-history_date', '-history_id')", 'object_name': 'HistoricalOrganization'},
+ 'address': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'address_complement': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'alt_address': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'alt_address_complement': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'alt_address_is_prefered': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'alt_country': ('django.db.models.fields.CharField', [], {'max_length': '30', 'null': 'True', 'blank': 'True'}),
+ 'alt_postal_code': ('django.db.models.fields.CharField', [], {'max_length': '10', 'null': 'True', 'blank': 'True'}),
+ 'alt_town': ('django.db.models.fields.CharField', [], {'max_length': '70', 'null': 'True', 'blank': 'True'}),
+ 'country': ('django.db.models.fields.CharField', [], {'max_length': '30', 'null': 'True', 'blank': 'True'}),
+ 'email': ('django.db.models.fields.EmailField', [], {'max_length': '300', 'null': 'True', 'blank': 'True'}),
+ 'exclude_from_merge': ('django.db.models.fields.NullBooleanField', [], {'default': 'False', 'null': 'True', 'blank': 'True'}),
+ 'history_creator_id': ('django.db.models.fields.IntegerField', [], {'db_index': 'True', 'null': 'True', 'blank': 'True'}),
+ 'history_date': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
+ 'history_id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'history_modifier_id': ('django.db.models.fields.IntegerField', [], {'db_index': 'True', 'null': 'True', 'blank': 'True'}),
+ 'history_type': ('django.db.models.fields.CharField', [], {'max_length': '1'}),
+ 'history_user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']", 'null': 'True'}),
+ 'id': ('django.db.models.fields.IntegerField', [], {'db_index': 'True', 'blank': 'True'}),
+ 'merge_key': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'mobile_phone': ('django.db.models.fields.CharField', [], {'max_length': '18', 'null': 'True', 'blank': 'True'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '500'}),
+ 'organization_type_id': ('django.db.models.fields.IntegerField', [], {'db_index': 'True', 'null': 'True', 'blank': 'True'}),
+ 'phone': ('django.db.models.fields.CharField', [], {'max_length': '18', 'null': 'True', 'blank': 'True'}),
+ 'phone2': ('django.db.models.fields.CharField', [], {'max_length': '18', 'null': 'True', 'blank': 'True'}),
+ 'phone3': ('django.db.models.fields.CharField', [], {'max_length': '18', 'null': 'True', 'blank': 'True'}),
+ 'phone_desc': ('django.db.models.fields.CharField', [], {'max_length': '300', 'null': 'True', 'blank': 'True'}),
+ 'phone_desc2': ('django.db.models.fields.CharField', [], {'max_length': '300', 'null': 'True', 'blank': 'True'}),
+ 'phone_desc3': ('django.db.models.fields.CharField', [], {'max_length': '300', 'null': 'True', 'blank': 'True'}),
+ 'postal_code': ('django.db.models.fields.CharField', [], {'max_length': '10', 'null': 'True', 'blank': 'True'}),
+ 'raw_phone': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'town': ('django.db.models.fields.CharField', [], {'max_length': '70', 'null': 'True', 'blank': 'True'})
+ },
+ 'ishtar_common.import': {
+ 'Meta': {'object_name': 'Import'},
+ 'conservative_import': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'creation_date': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'null': 'True', 'blank': 'True'}),
+ 'encoding': ('django.db.models.fields.CharField', [], {'default': "'utf-8'", 'max_length': '15'}),
+ 'end_date': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
+ 'error_file': ('django.db.models.fields.files.FileField', [], {'max_length': '100', 'null': 'True', 'blank': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'imported_file': ('django.db.models.fields.files.FileField', [], {'max_length': '100'}),
+ 'imported_images': ('django.db.models.fields.files.FileField', [], {'max_length': '100', 'null': 'True', 'blank': 'True'}),
+ 'importer_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['ishtar_common.ImporterType']"}),
+ 'match_file': ('django.db.models.fields.files.FileField', [], {'max_length': '100', 'null': 'True', 'blank': 'True'}),
+ 'result_file': ('django.db.models.fields.files.FileField', [], {'max_length': '100', 'null': 'True', 'blank': 'True'}),
+ 'seconds_remaining': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
+ 'skip_lines': ('django.db.models.fields.IntegerField', [], {'default': '1'}),
+ 'state': ('django.db.models.fields.CharField', [], {'default': "'C'", 'max_length': '2'}),
+ 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['ishtar_common.IshtarUser']"})
+ },
+ 'ishtar_common.importercolumn': {
+ 'Meta': {'ordering': "('importer_type', 'col_number')", 'unique_together': "(('importer_type', 'col_number'),)", 'object_name': 'ImporterColumn'},
+ 'col_number': ('django.db.models.fields.IntegerField', [], {'default': '1'}),
+ 'description': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'importer_type': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'columns'", 'to': "orm['ishtar_common.ImporterType']"}),
+ 'regexp_pre_filter': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['ishtar_common.Regexp']", 'null': 'True', 'blank': 'True'}),
+ 'required': ('django.db.models.fields.BooleanField', [], {'default': 'False'})
+ },
+ 'ishtar_common.importerdefault': {
+ 'Meta': {'object_name': 'ImporterDefault'},
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'importer_type': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'defaults'", 'to': "orm['ishtar_common.ImporterType']"}),
+ 'target': ('django.db.models.fields.CharField', [], {'max_length': '500'})
+ },
+ 'ishtar_common.importerdefaultvalues': {
+ 'Meta': {'object_name': 'ImporterDefaultValues'},
+ 'default_target': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'default_values'", 'to': "orm['ishtar_common.ImporterDefault']"}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'target': ('django.db.models.fields.CharField', [], {'max_length': '500'}),
+ 'value': ('django.db.models.fields.CharField', [], {'max_length': '500'})
+ },
+ 'ishtar_common.importerduplicatefield': {
+ 'Meta': {'object_name': 'ImporterDuplicateField'},
+ 'column': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'duplicate_fields'", 'to': "orm['ishtar_common.ImporterColumn']"}),
+ 'concat': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'concat_str': ('django.db.models.fields.CharField', [], {'max_length': '5', 'null': 'True', 'blank': 'True'}),
+ 'field_name': ('django.db.models.fields.CharField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}),
+ 'force_new': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'})
+ },
+ 'ishtar_common.importertype': {
+ 'Meta': {'object_name': 'ImporterType'},
+ 'associated_models': ('django.db.models.fields.CharField', [], {'max_length': '200'}),
+ 'description': ('django.db.models.fields.CharField', [], {'max_length': '500', 'null': 'True', 'blank': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'is_template': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '100', 'null': 'True', 'blank': 'True'}),
+ 'slug': ('django.db.models.fields.SlugField', [], {'max_length': '100', 'unique': 'True', 'null': 'True', 'blank': 'True'}),
+ 'unicity_keys': ('django.db.models.fields.CharField', [], {'max_length': '500', 'null': 'True', 'blank': 'True'}),
+ 'users': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'to': "orm['ishtar_common.IshtarUser']", 'null': 'True', 'blank': 'True'})
+ },
+ 'ishtar_common.importtarget': {
+ 'Meta': {'object_name': 'ImportTarget'},
+ 'column': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'targets'", 'to': "orm['ishtar_common.ImporterColumn']"}),
+ 'comment': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'concat': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'concat_str': ('django.db.models.fields.CharField', [], {'max_length': '5', 'null': 'True', 'blank': 'True'}),
+ 'force_new': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'formater_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['ishtar_common.FormaterType']"}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'regexp_filter': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['ishtar_common.Regexp']", 'null': 'True', 'blank': 'True'}),
+ 'target': ('django.db.models.fields.CharField', [], {'max_length': '500'})
+ },
+ 'ishtar_common.ishtarsiteprofile': {
+ 'Meta': {'ordering': "['label']", 'object_name': 'IshtarSiteProfile'},
+ 'active': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'context_record': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'description': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'files': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'find': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'homepage': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'label': ('django.db.models.fields.TextField', [], {}),
+ 'slug': ('django.db.models.fields.SlugField', [], {'unique': 'True', 'max_length': '50'}),
+ 'warehouse': ('django.db.models.fields.BooleanField', [], {'default': 'False'})
+ },
+ 'ishtar_common.ishtaruser': {
+ 'Meta': {'object_name': 'IshtarUser', '_ormbases': ['auth.User']},
+ 'person': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'ishtaruser'", 'unique': 'True', 'to': "orm['ishtar_common.Person']"}),
+ 'user_ptr': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['auth.User']", 'unique': 'True', 'primary_key': 'True'})
+ },
+ 'ishtar_common.itemkey': {
+ 'Meta': {'object_name': 'ItemKey'},
+ 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'importer': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['ishtar_common.Import']", 'null': 'True', 'blank': 'True'}),
+ 'key': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
+ 'object_id': ('django.db.models.fields.PositiveIntegerField', [], {})
+ },
+ 'ishtar_common.operationtype': {
+ 'Meta': {'ordering': "['-preventive', 'order', 'label']", 'object_name': 'OperationType'},
+ 'available': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
+ 'comment': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'label': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
+ 'order': ('django.db.models.fields.IntegerField', [], {'default': '1'}),
+ 'preventive': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
+ 'txt_idx': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '100'})
+ },
+ 'ishtar_common.organization': {
+ 'Meta': {'object_name': 'Organization'},
+ 'address': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'address_complement': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'alt_address': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'alt_address_complement': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'alt_address_is_prefered': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'alt_country': ('django.db.models.fields.CharField', [], {'max_length': '30', 'null': 'True', 'blank': 'True'}),
+ 'alt_postal_code': ('django.db.models.fields.CharField', [], {'max_length': '10', 'null': 'True', 'blank': 'True'}),
+ 'alt_town': ('django.db.models.fields.CharField', [], {'max_length': '70', 'null': 'True', 'blank': 'True'}),
+ 'country': ('django.db.models.fields.CharField', [], {'max_length': '30', 'null': 'True', 'blank': 'True'}),
+ 'email': ('django.db.models.fields.EmailField', [], {'max_length': '300', 'null': 'True', 'blank': 'True'}),
+ 'exclude_from_merge': ('django.db.models.fields.NullBooleanField', [], {'default': 'False', 'null': 'True', 'blank': 'True'}),
+ 'history_creator': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'+'", 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': "orm['auth.User']"}),
+ 'history_modifier': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'+'", 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': "orm['auth.User']"}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'imports': ('django.db.models.fields.related.ManyToManyField', [], {'blank': 'True', 'related_name': "'imported_ishtar_common_organization'", 'null': 'True', 'symmetrical': 'False', 'to': "orm['ishtar_common.Import']"}),
+ 'merge_candidate': ('django.db.models.fields.related.ManyToManyField', [], {'blank': 'True', 'related_name': "'merge_candidate_rel_+'", 'null': 'True', 'to': "orm['ishtar_common.Organization']"}),
+ 'merge_exclusion': ('django.db.models.fields.related.ManyToManyField', [], {'blank': 'True', 'related_name': "'merge_exclusion_rel_+'", 'null': 'True', 'to': "orm['ishtar_common.Organization']"}),
+ 'merge_key': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'mobile_phone': ('django.db.models.fields.CharField', [], {'max_length': '18', 'null': 'True', 'blank': 'True'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '500'}),
+ 'organization_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['ishtar_common.OrganizationType']"}),
+ 'phone': ('django.db.models.fields.CharField', [], {'max_length': '18', 'null': 'True', 'blank': 'True'}),
+ 'phone2': ('django.db.models.fields.CharField', [], {'max_length': '18', 'null': 'True', 'blank': 'True'}),
+ 'phone3': ('django.db.models.fields.CharField', [], {'max_length': '18', 'null': 'True', 'blank': 'True'}),
+ 'phone_desc': ('django.db.models.fields.CharField', [], {'max_length': '300', 'null': 'True', 'blank': 'True'}),
+ 'phone_desc2': ('django.db.models.fields.CharField', [], {'max_length': '300', 'null': 'True', 'blank': 'True'}),
+ 'phone_desc3': ('django.db.models.fields.CharField', [], {'max_length': '300', 'null': 'True', 'blank': 'True'}),
+ 'postal_code': ('django.db.models.fields.CharField', [], {'max_length': '10', 'null': 'True', 'blank': 'True'}),
+ 'raw_phone': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'town': ('django.db.models.fields.CharField', [], {'max_length': '70', 'null': 'True', 'blank': 'True'})
+ },
+ 'ishtar_common.organizationtype': {
+ 'Meta': {'ordering': "('label',)", 'object_name': 'OrganizationType'},
+ 'available': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
+ 'comment': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'label': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
+ 'txt_idx': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '100'})
+ },
+ 'ishtar_common.person': {
+ 'Meta': {'object_name': 'Person'},
+ 'address': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'address_complement': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'alt_address': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'alt_address_complement': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'alt_address_is_prefered': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'alt_country': ('django.db.models.fields.CharField', [], {'max_length': '30', 'null': 'True', 'blank': 'True'}),
+ 'alt_postal_code': ('django.db.models.fields.CharField', [], {'max_length': '10', 'null': 'True', 'blank': 'True'}),
+ 'alt_town': ('django.db.models.fields.CharField', [], {'max_length': '70', 'null': 'True', 'blank': 'True'}),
+ 'attached_to': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'members'", 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': "orm['ishtar_common.Organization']"}),
+ 'comment': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'contact_type': ('django.db.models.fields.CharField', [], {'max_length': '300', 'null': 'True', 'blank': 'True'}),
+ 'country': ('django.db.models.fields.CharField', [], {'max_length': '30', 'null': 'True', 'blank': 'True'}),
+ 'email': ('django.db.models.fields.EmailField', [], {'max_length': '300', 'null': 'True', 'blank': 'True'}),
+ 'exclude_from_merge': ('django.db.models.fields.NullBooleanField', [], {'default': 'False', 'null': 'True', 'blank': 'True'}),
+ 'history_creator': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'+'", 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': "orm['auth.User']"}),
+ 'history_modifier': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'+'", 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': "orm['auth.User']"}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'imports': ('django.db.models.fields.related.ManyToManyField', [], {'blank': 'True', 'related_name': "'imported_ishtar_common_person'", 'null': 'True', 'symmetrical': 'False', 'to': "orm['ishtar_common.Import']"}),
+ 'merge_candidate': ('django.db.models.fields.related.ManyToManyField', [], {'blank': 'True', 'related_name': "'merge_candidate_rel_+'", 'null': 'True', 'to': "orm['ishtar_common.Person']"}),
+ 'merge_exclusion': ('django.db.models.fields.related.ManyToManyField', [], {'blank': 'True', 'related_name': "'merge_exclusion_rel_+'", 'null': 'True', 'to': "orm['ishtar_common.Person']"}),
+ 'merge_key': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'mobile_phone': ('django.db.models.fields.CharField', [], {'max_length': '18', 'null': 'True', 'blank': 'True'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}),
+ 'person_types': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['ishtar_common.PersonType']", 'symmetrical': 'False'}),
+ 'phone': ('django.db.models.fields.CharField', [], {'max_length': '18', 'null': 'True', 'blank': 'True'}),
+ 'phone2': ('django.db.models.fields.CharField', [], {'max_length': '18', 'null': 'True', 'blank': 'True'}),
+ 'phone3': ('django.db.models.fields.CharField', [], {'max_length': '18', 'null': 'True', 'blank': 'True'}),
+ 'phone_desc': ('django.db.models.fields.CharField', [], {'max_length': '300', 'null': 'True', 'blank': 'True'}),
+ 'phone_desc2': ('django.db.models.fields.CharField', [], {'max_length': '300', 'null': 'True', 'blank': 'True'}),
+ 'phone_desc3': ('django.db.models.fields.CharField', [], {'max_length': '300', 'null': 'True', 'blank': 'True'}),
+ 'postal_code': ('django.db.models.fields.CharField', [], {'max_length': '10', 'null': 'True', 'blank': 'True'}),
+ 'raw_name': ('django.db.models.fields.CharField', [], {'max_length': '300', 'null': 'True', 'blank': 'True'}),
+ 'raw_phone': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'surname': ('django.db.models.fields.CharField', [], {'max_length': '50', 'null': 'True', 'blank': 'True'}),
+ 'title': ('django.db.models.fields.CharField', [], {'max_length': '100', 'null': 'True', 'blank': 'True'}),
+ 'town': ('django.db.models.fields.CharField', [], {'max_length': '70', 'null': 'True', 'blank': 'True'})
+ },
+ 'ishtar_common.persontype': {
+ 'Meta': {'ordering': "('label',)", 'object_name': 'PersonType'},
+ 'available': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
+ 'comment': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'groups': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'to': "orm['auth.Group']", 'null': 'True', 'blank': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'label': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
+ 'txt_idx': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '100'})
+ },
+ 'ishtar_common.regexp': {
+ 'Meta': {'object_name': 'Regexp'},
+ 'description': ('django.db.models.fields.CharField', [], {'max_length': '500', 'null': 'True', 'blank': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
+ 'regexp': ('django.db.models.fields.CharField', [], {'max_length': '500'})
+ },
+ 'ishtar_common.sourcetype': {
+ 'Meta': {'object_name': 'SourceType'},
+ 'available': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
+ 'comment': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'label': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
+ 'txt_idx': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '100'})
+ },
+ 'ishtar_common.state': {
+ 'Meta': {'ordering': "['number']", 'object_name': 'State'},
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'label': ('django.db.models.fields.CharField', [], {'max_length': '30'}),
+ 'number': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '3'})
+ },
+ 'ishtar_common.supporttype': {
+ 'Meta': {'object_name': 'SupportType'},
+ 'available': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
+ 'comment': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'label': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
+ 'txt_idx': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '100'})
+ },
+ 'ishtar_common.targetkey': {
+ 'Meta': {'unique_together': "(('target', 'key', 'associated_user', 'associated_import'),)", 'object_name': 'TargetKey'},
+ 'associated_import': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['ishtar_common.Import']", 'null': 'True', 'blank': 'True'}),
+ 'associated_user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['ishtar_common.IshtarUser']", 'null': 'True', 'blank': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'is_set': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'key': ('django.db.models.fields.TextField', [], {}),
+ 'target': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'keys'", 'to': "orm['ishtar_common.ImportTarget']"}),
+ 'value': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'})
+ },
+ 'ishtar_common.town': {
+ 'Meta': {'ordering': "['numero_insee']", 'object_name': 'Town'},
+ 'canton': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['ishtar_common.Canton']", 'null': 'True', 'blank': 'True'}),
+ 'center': ('django.contrib.gis.db.models.fields.PointField', [], {'srid': '27572', 'null': 'True', 'blank': 'True'}),
+ 'departement': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['ishtar_common.Department']", 'null': 'True', 'blank': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
+ 'numero_insee': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '6'}),
+ 'surface': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'})
+ }
+ }
+
+ complete_apps = ['ishtar_common'] \ No newline at end of file
diff --git a/ishtar_common/models.py b/ishtar_common/models.py
index f3974d04d..d8948d3e3 100644
--- a/ishtar_common/models.py
+++ b/ishtar_common/models.py
@@ -552,25 +552,27 @@ class ImageModel(models.Model):
filename = os.path.splitext(os.path.split(self.image.name)[-1])[0]
old_path = self.image.path
filename = "%s.jpg" % filename
- image = Image.open(self.image.file)
-
- # convert to RGB
- if image.mode not in ('L', 'RGB'):
- image = image.convert('RGB')
-
- # resize if necessary
- self.image.save(filename,
- self.create_thumb(image, self.IMAGE_MAX_SIZE),
- save=False)
-
- if old_path != self.image.path:
- os.remove(old_path)
-
- # save the thumbnail
- self.thumbnail.save(
- '_%s' % filename,
- self.create_thumb(image, self.THUMB_MAX_SIZE),
- save=False)
+ try:
+ image = Image.open(self.image.file)
+ # convert to RGB
+ if image.mode not in ('L', 'RGB'):
+ image = image.convert('RGB')
+
+ # resize if necessary
+ self.image.save(filename,
+ self.create_thumb(image, self.IMAGE_MAX_SIZE),
+ save=False)
+
+ if old_path != self.image.path:
+ os.remove(old_path)
+
+ # save the thumbnail
+ self.thumbnail.save(
+ '_%s' % filename,
+ self.create_thumb(image, self.THUMB_MAX_SIZE),
+ save=False)
+ except IOError:
+ pass
super(ImageModel, self).save(*args, **kwargs)
@@ -581,6 +583,8 @@ class HistoryError(Exception):
def __str__(self):
return repr(self.value)
+PRIVATE_FIELDS = ('id', 'history_modifier', 'order')
+
class BaseHistorizedItem(Imported):
IS_BASKET = False
@@ -816,6 +820,10 @@ class IshtarSiteProfile(models.Model, Cached):
warehouse = models.BooleanField(
_(u"Warehouses module"), default=False,
help_text=_(u"Need finds module"))
+ homepage = models.TextField(
+ _(u"Home page"), null=True, blank=True,
+ help_text=_(u"Homepage of Ishtar - if not defined a default homepage "
+ u"will appear. Use the markdown syntax."))
active = models.BooleanField(_(u"Current active"), default=False)
class Meta:
diff --git a/ishtar_common/static/js/grid.tbltogrid.js b/ishtar_common/static/js/grid.tbltogrid.js
new file mode 100644
index 000000000..addab1e48
--- /dev/null
+++ b/ishtar_common/static/js/grid.tbltogrid.js
@@ -0,0 +1,106 @@
+/*
+ Transform a table to a jqGrid.
+ Peter Romianowski <peter.romianowski@optivo.de>
+ If the first column of the table contains checkboxes or
+ radiobuttons then the jqGrid is made selectable.
+*/
+// Addition - selector can be a class or id
+function tableToGrid(selector, options) {
+jQuery(selector).each(function() {
+ if(this.grid) {return;} //Adedd from Tony Tomov
+ // This is a small "hack" to make the width of the jqGrid 100%
+ jQuery(this).width("99%");
+ var w = jQuery(this).width();
+
+ // Text whether we have single or multi select
+ var inputCheckbox = jQuery('tr td:first-child input[type=checkbox]:first', jQuery(this));
+ var inputRadio = jQuery('tr td:first-child input[type=radio]:first', jQuery(this));
+ var selectMultiple = inputCheckbox.length > 0;
+ var selectSingle = !selectMultiple && inputRadio.length > 0;
+ var selectable = selectMultiple || selectSingle;
+ //var inputName = inputCheckbox.attr("name") || inputRadio.attr("name");
+
+ // Build up the columnModel and the data
+ var colModel = [];
+ var colNames = [];
+ jQuery('th', jQuery(this)).each(function() {
+ if (colModel.length === 0 && selectable) {
+ colModel.push({
+ name: '__selection__',
+ index: '__selection__',
+ width: 0,
+ hidden: true
+ });
+ colNames.push('__selection__');
+ } else {
+ colModel.push({
+ name: jQuery(this).attr("id") || jQuery.trim(jQuery.jgrid.stripHtml(jQuery(this).html())).split(' ').join('_'),
+ index: jQuery(this).attr("id") || jQuery.trim(jQuery.jgrid.stripHtml(jQuery(this).html())).split(' ').join('_'),
+ width: jQuery(this).width() || 150
+ });
+ colNames.push(jQuery(this).html());
+ }
+ });
+ var data = [];
+ var rowIds = [];
+ var rowChecked = [];
+ jQuery('tbody > tr', jQuery(this)).each(function() {
+ var row = {};
+ var rowPos = 0;
+ jQuery('td', jQuery(this)).each(function() {
+ if (rowPos === 0 && selectable) {
+ var input = jQuery('input', jQuery(this));
+ var rowId = input.attr("value");
+ rowIds.push(rowId || data.length);
+ if (input.is(":checked")) {
+ rowChecked.push(rowId);
+ }
+ row[colModel[rowPos].name] = input.attr("value");
+ } else {
+ row[colModel[rowPos].name] = jQuery(this).html();
+ }
+ rowPos++;
+ });
+ if(rowPos >0) { data.push(row); }
+ });
+
+ // Clear the original HTML table
+ jQuery(this).empty();
+
+ // Mark it as jqGrid
+ jQuery(this).addClass("scroll");
+
+ jQuery(this).jqGrid(jQuery.extend({
+ datatype: "local",
+ width: w,
+ colNames: colNames,
+ colModel: colModel,
+ multiselect: selectMultiple
+ //inputName: inputName,
+ //inputValueCol: imputName != null ? "__selection__" : null
+ }, options || {}));
+
+ // Add data
+ var a;
+ for (a = 0; a < data.length; a++) {
+ var id = null;
+ if (rowIds.length > 0) {
+ id = rowIds[a];
+ if (id && id.replace) {
+ // We have to do this since the value of a checkbox
+ // or radio button can be anything
+ id = encodeURIComponent(id).replace(/[.\-%]/g, "_");
+ }
+ }
+ if (id === null) {
+ id = a + 1;
+ }
+ jQuery(this).jqGrid("addRowData",id, data[a]);
+ }
+
+ // Set the selection
+ for (a = 0; a < rowChecked.length; a++) {
+ jQuery(this).jqGrid("setSelection",rowChecked[a]);
+ }
+});
+};
diff --git a/ishtar_common/static/media/style.css b/ishtar_common/static/media/style.css
index 1d47bcbd9..e74a6d205 100644
--- a/ishtar_common/static/media/style.css
+++ b/ishtar_common/static/media/style.css
@@ -45,7 +45,7 @@ a.add-button,
color:#000;
}
-#context_menu .basket{
+#context_menu option.basket{
color:#000;
font-weight: bold;
font-style: italic;
@@ -434,6 +434,11 @@ div#main_menu > ul > li{
}
*/
+div#welcome{
+ text-align:left;
+ font-size: 1.2em;
+}
+
div#content{
clear:both;
margin-top:190px ;
@@ -546,21 +551,20 @@ ul.form-flex {
margin: 0;
}
-
ul.form-flex li{
width: 395px;
}
@media screen and (min-width: 1051px) {
div.form,
- ul.form-flex {
+ ul.form-flex{
width: 800px;
}
}
@media screen and (min-width: 1400px) {
div.form,
- ul.form-flex {
+ ul.form-flex{
width: 1200px;
}
}
@@ -571,6 +575,10 @@ ul.form-flex label {
padding-left: 10px;
}
+#window ul.form-flex label {
+ width: 150px;
+}
+
.form table{
padding:0.2em;
margin-left:auto;
@@ -750,6 +758,10 @@ table.confirm tr.spacer td:last-child{
right:135px;
}
+a.photo{
+ padding: 0.5em;
+}
+
#global-vars textarea{
width:220px;
}
@@ -898,6 +910,22 @@ table.confirm tr.spacer td:last-child{
font-style:italic;
}
+#window table.simple td.item-list{
+ text-align:left;
+}
+
+table td.item-list span{
+ padding: 4px 4px;
+ background-color: #eee;
+ margin: 0.2em;
+ line-height: 26px;
+ border-radius: 4px;
+}
+
+#window table.simple td.item-list .display_details{
+ vertical-align: middle;
+}
+
#window .head{
text-align:center;
background-color:#f1f2f6;
@@ -946,6 +974,11 @@ table.confirm tr.spacer td:last-child{
width:465px;
}
+#window ul.form-flex span.value {
+ display: inline-table;
+ width: 230px;
+}
+
.strong{
font-weight:bold;
}
diff --git a/ishtar_common/static/media/style_basic.css b/ishtar_common/static/media/style_basic.css
index d624ae09c..1d92928dc 100644
--- a/ishtar_common/static/media/style_basic.css
+++ b/ishtar_common/static/media/style_basic.css
@@ -85,3 +85,7 @@ p{
width:100%;
border-bottom:1px solid #922;
}
+
+.display_details, .display_details_inline{
+ display: none;
+}
diff --git a/ishtar_common/templates/base.html b/ishtar_common/templates/base.html
index 1bab3d647..8cd3c7793 100644
--- a/ishtar_common/templates/base.html
+++ b/ishtar_common/templates/base.html
@@ -17,6 +17,7 @@
<script language="javascript" type="text/javascript" src="{{STATIC_URL}}/js/prettyPhoto/js/jquery.prettyPhoto.js"></script>
<script language="javascript" type="text/javascript" src="{{STATIC_URL}}js/i18n/grid.locale-{{COUNTRY}}.js"></script>
<script language="javascript" type="text/javascript" src="{{STATIC_URL}}js/jquery.jqGrid.min.js"></script>
+ <script language="javascript" type="text/javascript" src="{{STATIC_URL}}js/grid.tbltogrid.js"></script>
<script language="javascript" type="text/javascript" src="{{STATIC_URL}}/js/ishtar.js"></script>
<link type="text/css" href="{{JQUERY_UI_URL}}jquery-ui.css" rel="stylesheet" />
<link rel="stylesheet" href="{{STATIC_URL}}/js/prettyPhoto/css/prettyPhoto.css" />
@@ -74,7 +75,7 @@
<td>
<select class='{{main_cls}}' id='current_{{model_name}}'>
<option class='normal' value=''>--</option>
- {% for val, label, selected, cls in items %}<option class='{{cls}}' value='{{val}}'{% if selected %} selected="selected"{%endif%}>{{label}}</option>
+ {% for val, label, selected, cls in items %}<option{% if cls %} class='{{cls}}'{% endif %} value='{{val}}'{% if selected %} selected="selected"{%endif%}>{{label}}</option>
{% endfor %}</select>
</td>{% with 'show-'|add:model_name as model_url%}
<td><a href='#' onclick='load_current_window("{% url model_url 0 %}", "{{model_name}}");' class='display_details'>{% trans "Details" %}</a></td>
diff --git a/ishtar_common/templates/index.html b/ishtar_common/templates/index.html
index c4c0b0f2a..2b6d7004e 100644
--- a/ishtar_common/templates/index.html
+++ b/ishtar_common/templates/index.html
@@ -1,2 +1,3 @@
{% extends "base.html" %}
{% load i18n %}
+{% block content %}<div id='welcome'>{% if homepage %}{{homepage|safe}}{% else %}{% include "welcome.html" %}{% endif %}</div>{% endblock %}
diff --git a/ishtar_common/templates/ishtar/blocks/window_field.html b/ishtar_common/templates/ishtar/blocks/window_field.html
index 14cf1c21e..969f32dbb 100644
--- a/ishtar_common/templates/ishtar/blocks/window_field.html
+++ b/ishtar_common/templates/ishtar/blocks/window_field.html
@@ -1,3 +1,3 @@
-{% load i18n %}
-{% if data %}<p><label>{% trans caption %}{% trans ":"%}</label>
-<span class='value'>{{pre_data|safe}}{{data|linebreaksbr}}{{post_data|safe}}</span></p>{% endif%}
+{% load i18n %}{% if data %}{% if li %}<li>{% else %}<p>{% endif %}<label>{% trans caption %}{% trans ":"%}</label>
+<span class='value'>{{pre_data|safe}}{{data|linebreaksbr}}{{post_data|safe}}</span>{% if li %}</li>{% else %}</p>{% endif %}
+{% endif %}
diff --git a/ishtar_common/templates/ishtar/blocks/window_field_detail.html b/ishtar_common/templates/ishtar/blocks/window_field_detail.html
new file mode 100644
index 000000000..2be9c5ec4
--- /dev/null
+++ b/ishtar_common/templates/ishtar/blocks/window_field_detail.html
@@ -0,0 +1,3 @@
+{% load i18n %}{% if item %}{% if li %}<li>{% else %}<p>{% endif %}<label>{% trans caption %}{% trans ":"%}</label>
+<span class='value'>{{item}}{{link}}</span>{% if li %}</li>{% else %}</p>{% endif %}
+{% endif %}
diff --git a/ishtar_common/templates/ishtar/blocks/window_field_multiple.html b/ishtar_common/templates/ishtar/blocks/window_field_multiple.html
index 30903b0d5..d1ee25c7b 100644
--- a/ishtar_common/templates/ishtar/blocks/window_field_multiple.html
+++ b/ishtar_common/templates/ishtar/blocks/window_field_multiple.html
@@ -1,8 +1,6 @@
-{% load i18n %}
-{% if data.count %}<p><label>{% trans caption %}{% trans ":"%}</label>
+{% load i18n %}{% if data.count %}{% if li %}<li>{% else %}<p>{% endif %}<label>{% trans caption %}{% trans ":"%}</label>
<span class='value'>{% for d in data.all %}
{% if forloop.counter0 %}, {% endif %}{{ d }}
{% endfor %}</span>
-</p>
+{% if li %}</li>{% else %}</p>{% endif %}
{% endif %}
-
diff --git a/ishtar_common/templates/ishtar/blocks/window_field_url.html b/ishtar_common/templates/ishtar/blocks/window_field_url.html
index b91f318b6..637366d1d 100644
--- a/ishtar_common/templates/ishtar/blocks/window_field_url.html
+++ b/ishtar_common/templates/ishtar/blocks/window_field_url.html
@@ -1,3 +1,3 @@
-{% load i18n %}
-{% if link %}<p><label>{% trans caption %}{% trans ":"%}</label>
-<span class='value'><a target="_blank" href='{{link|safe}}'>{% if link_name %}{{link_name}}{% else %}{% trans "link" %}{% endif %}</a></span></p>{% endif%}
+{% load i18n %}{% if link %}{% if li %}<li>{% else %}<p>{% endif %}<p><label>{% trans caption %}{% trans ":"%}</label>
+<span class='value'><a target="_blank" href='{{link|safe}}'>{% if link_name %}{{link_name}}{% else %}{% trans "link" %}{% endif %}</a></span>{% if li %}</li>{% else %}</p>{% endif %}
+{% endif%}
diff --git a/ishtar_common/templates/ishtar/sheet_toolbar.html b/ishtar_common/templates/ishtar/sheet_toolbar.html
index 7e2c1659a..a6736b6cc 100644
--- a/ishtar_common/templates/ishtar/sheet_toolbar.html
+++ b/ishtar_common/templates/ishtar/sheet_toolbar.html
@@ -1,2 +1,2 @@
-{% load i18n link_to_window %}<div class='tool'>{%trans "Export as:"%} <a href='{{item|link_to_odt}}'>{%trans "OpenOffice.org file"%}</a>, <a href='{{item|link_to_pdf}}'>{%trans "PDF file"%}</a></div>
+{% load i18n link_to_window %}<div class='tool'>{% trans "Export as:" %} <a href='{{item|link_to_odt}}'>{%trans "OpenOffice.org file"%}</a>, <a href='{{item|link_to_pdf}}'>{%trans "PDF file"%}</a></div>
{% modify_toolbar item "person_modification" %}
diff --git a/ishtar_common/templates/welcome.html b/ishtar_common/templates/welcome.html
new file mode 100644
index 000000000..42935d8f9
--- /dev/null
+++ b/ishtar_common/templates/welcome.html
@@ -0,0 +1,11 @@
+{% load i18n %}
+{% load url from future %}
+
+<h2>{% trans "Welcome in Ishtar, open source software for management and inventory of archaeological data" %}</h2>
+<p>{% trans "Some useful links:" %}</p>
+<ul>
+ <li><a href='https://ishtar-archeo.net' target="_blank">{% trans "Presentation site and blog" %}</a>{% trans ":"%} {% trans "stay tuned with Ishtar news!" %}</li>
+ <li><a href='{% url 'admin:index' %}' target="_blank">{% trans "Admin interface" %}</a>{% trans ":"%} {% trans "for admin only." %}</li>
+ <li><a href="https://forum.ishtar-archeo.net/" target="_blank">{% trans "Forum" %}</a>{% trans ":"%} {% trans "need help? find a new bug? a fantastic feature to propose? Here is the place to go." %}</li>
+ <li><a href="https://gitlab.com/ishtar/ishtar" target="_blank">{% trans "Source code" %}</a> &ndash; <a href="https://tickets.iggdrasil.net/projects/ishtar" target="_blank">{% trans "tickets" %}</a>{% trans ":"%} {% trans "where the magic happens." %}</li>
+</ul>
diff --git a/ishtar_common/templatetags/link_to_window.py b/ishtar_common/templatetags/link_to_window.py
index 5ff928bb1..009a089d2 100644
--- a/ishtar_common/templatetags/link_to_window.py
+++ b/ishtar_common/templatetags/link_to_window.py
@@ -3,6 +3,7 @@
from django.core.urlresolvers import reverse
from django.template import Library
+from django.utils.safestring import mark_safe
from django.utils.translation import ugettext as _
register = Library()
@@ -10,10 +11,11 @@ register = Library()
@register.filter
def link_to_window(item):
- return u' <a class="display_details" href="#" '\
- 'onclick="load_window(\'{}\')">{}</a>'.format(
+ return mark_safe(
+ u' <a class="display_details" href="#" '
+ u'onclick="load_window(\'{}\')">{}</a>'.format(
reverse(item.SHOW_URL, args=[item.pk, '']),
- _("Details"))
+ _("Details")))
@register.filter
diff --git a/ishtar_common/templatetags/window_field.py b/ishtar_common/templatetags/window_field.py
index 34071f60f..9ce2cf6b6 100644
--- a/ishtar_common/templatetags/window_field.py
+++ b/ishtar_common/templatetags/window_field.py
@@ -1,26 +1,53 @@
from django import template
from django.utils.translation import ugettext_lazy as _
+from ishtar_common.templatetags.link_to_window import link_to_window
register = template.Library()
@register.inclusion_tag('ishtar/blocks/window_field.html')
-def field(caption, data, pre_data='', post_data=''):
+def field(caption, data, pre_data='', post_data='', li=False):
if data in (True, False):
data = _(unicode(data))
return {'caption': caption, 'data': data, "pre_data": pre_data,
- 'post_data': post_data}
+ 'post_data': post_data, 'li': li}
+
+
+@register.inclusion_tag('ishtar/blocks/window_field.html')
+def field_li(caption, data, pre_data='', post_data=''):
+ return field(caption, data, pre_data, post_data, li=True)
@register.inclusion_tag('ishtar/blocks/window_field_url.html')
-def field_url(caption, link, link_name=''):
+def field_url(caption, link, link_name='', li=False):
if not link:
return u''
if not link.startswith('http://'):
link = 'http://' + link
- return {'caption': caption, 'link': link, "link_name": link_name}
+ return {'caption': caption, 'link': link, "link_name": link_name, 'li': li}
+
+
+@register.inclusion_tag('ishtar/blocks/window_field_url.html')
+def field_li_url(caption, link, link_name=''):
+ return field_url(caption, link, link_name, li=True)
@register.inclusion_tag('ishtar/blocks/window_field_multiple.html')
-def field_multiple(caption, data):
- return {'caption': caption, 'data': data}
+def field_multiple(caption, data, li=False):
+ return {'caption': caption, 'data': data, 'li': li}
+
+
+@register.inclusion_tag('ishtar/blocks/window_field_multiple.html')
+def field_li_multiple(caption, data):
+ return field_multiple(caption, data, li=True)
+
+
+@register.inclusion_tag('ishtar/blocks/window_field_detail.html')
+def field_detail(caption, item, li=False):
+ return {'caption': caption, 'item': item, 'link': link_to_window(item),
+ 'li': li}
+
+
+@register.inclusion_tag('ishtar/blocks/window_field_detail.html')
+def field_li_detail(caption, item):
+ return field_detail(caption, item, li=True)
diff --git a/ishtar_common/views.py b/ishtar_common/views.py
index 59cfe6321..d508444a4 100644
--- a/ishtar_common/views.py
+++ b/ishtar_common/views.py
@@ -24,6 +24,7 @@ import cStringIO as StringIO
import datetime
import ho.pisa as pisa
import json
+from markdown import markdown
import optparse
import re
from tempfile import NamedTemporaryFile
@@ -61,7 +62,8 @@ from archaeological_files.forms import DashboardForm as DashboardFormFile
from ishtar_common.forms import FinalForm, FinalDeleteForm
from ishtar_common import forms_common as forms
from ishtar_common import wizards
-from ishtar_common.models import HistoryError
+from ishtar_common.models import HistoryError, PRIVATE_FIELDS, \
+ get_current_profile
import models
@@ -74,6 +76,9 @@ def index(request):
Main page
"""
dct = {}
+ profile = get_current_profile()
+ if hasattr(profile, 'homepage') and profile.homepage:
+ dct['homepage'] = markdown(profile.homepage)
try:
return render_to_response('index.html', dct,
context_instance=RequestContext(request))
@@ -325,7 +330,6 @@ def format_val(val):
HIERARCHIC_LEVELS = 5
HIERARCHIC_FIELDS = ['periods', 'period', 'unit', 'material_types',
'material_type', 'conservatory_state']
-PRIVATE_FIELDS = ('id', 'history_modifier', 'order')
def get_item(model, func_name, default_name, extra_request_keys=[],
diff --git a/requirements.txt b/requirements.txt
index c6ae18abd..c41427681 100644
--- a/requirements.txt
+++ b/requirements.txt
@@ -16,3 +16,4 @@ django-extra-views==0.2.4
# git+https://github.com/treyhunner/django-simple-history.git@0fd9b8e9c6f36b0141367b502420efe92d4e21ce
# oook_replace
beautifulsoup4==4.3.2
+markdown==2.1.1
diff --git a/translations/fr/archaeological_context_records.po b/translations/fr/archaeological_context_records.po
index c2aca222b..166360b56 100644
--- a/translations/fr/archaeological_context_records.po
+++ b/translations/fr/archaeological_context_records.po
@@ -14,9 +14,9 @@ msgstr ""
"Language-Team: \n"
"Language: fr\n"
"Plural-Forms: nplurals=2; plural=n>1;\n"
-"X-Generator: Zanata 3.8.2\n"
+"X-Generator: Zanata 3.8.4\n"
-#: forms.py:45 forms.py:112 models.py:125
+#: forms.py:45 forms.py:112 models.py:124
#: templates/ishtar/sheet_contextrecord.html:72
msgid "ID"
msgstr "Identifiant"
@@ -53,7 +53,7 @@ msgstr "Parcelle (section/numéro)"
msgid "Search within relations"
msgstr "Recherche parmi les relations"
-#: forms.py:87 forms.py:274 views.py:78
+#: forms.py:87 forms.py:274 views.py:111
msgid "Context record search"
msgstr "Recherche d'Unité d'Enregistrement"
@@ -65,37 +65,37 @@ msgstr "Vous devez sélectionner au moins une Unité d'Enregistrement."
msgid "General"
msgstr "Général"
-#: forms.py:111 models.py:118 models.py:121
+#: forms.py:111 models.py:117 models.py:120
#: templates/ishtar/sheet_contextrecord.html:76
msgid "Parcel"
msgstr "Parcelle"
-#: forms.py:114 models.py:126 templates/ishtar/sheet_contextrecord.html:42
+#: forms.py:114 models.py:125 templates/ishtar/sheet_contextrecord.html:42
#: templates/ishtar/sheet_contextrecord.html:75
msgid "Description"
msgstr "Description"
-#: forms.py:116 models.py:131
+#: forms.py:116 models.py:130
msgid "Length (cm)"
msgstr "Longueur (cm)"
-#: forms.py:117 models.py:132
+#: forms.py:117 models.py:131
msgid "Width (cm)"
msgstr "Largeur (cm)"
-#: forms.py:118 models.py:133
+#: forms.py:118 models.py:132
msgid "Thickness (cm)"
msgstr "Épaisseur (cm)"
-#: forms.py:119 models.py:135
+#: forms.py:119 models.py:134
msgid "Depth (cm)"
msgstr "Profondeur (cm)"
-#: forms.py:120 models.py:141
+#: forms.py:120 models.py:140
msgid "Unit"
msgstr "Unité"
-#: forms.py:122 models.py:137
+#: forms.py:122 models.py:136
msgid "Location"
msgstr "Lieu"
@@ -111,7 +111,7 @@ msgstr "Datation"
msgid "Start date"
msgstr "Date de début"
-#: forms.py:180 models.py:50 models.py:130
+#: forms.py:180 models.py:50 models.py:129
msgid "End date"
msgstr "Date de fin"
@@ -131,40 +131,40 @@ msgstr "Unité d'Enregistrement"
msgid "Relations"
msgstr "Relations"
-#: forms.py:230 forms.py:237 models.py:146
+#: forms.py:230 forms.py:237 models.py:145
#: templates/ishtar/sheet_contextrecord.html:52
msgid "Interpretation"
msgstr "Interprétation"
-#: forms.py:233 models.py:143
+#: forms.py:233 models.py:142
msgid "Has furniture?"
msgstr "Contient du mobilier ?"
-#: forms.py:235 models.py:145
+#: forms.py:235 models.py:144
msgid "Filling"
msgstr "Remplissage"
-#: forms.py:239 models.py:166
+#: forms.py:239 models.py:165
msgid "Activity"
msgstr "Activité"
-#: forms.py:241 models.py:164
+#: forms.py:241 models.py:163
msgid "Identification"
msgstr "Identification"
-#: forms.py:243 models.py:149
+#: forms.py:243 models.py:148
msgid "TAQ"
msgstr "TAQ"
-#: forms.py:244 models.py:153
+#: forms.py:244 models.py:152
msgid "Estimated TAQ"
msgstr "TAQ estimé"
-#: forms.py:246 models.py:156
+#: forms.py:246 models.py:155
msgid "TPQ"
msgstr "TPQ"
-#: forms.py:247 models.py:160
+#: forms.py:247 models.py:159
msgid "Estimated TPQ"
msgstr "TPQ estimé"
@@ -284,27 +284,27 @@ msgstr "Type d'identification"
msgid "Identification Types"
msgstr "Types d'identification"
-#: models.py:119
+#: models.py:118
msgid "External ID"
msgstr "ID externe"
-#: models.py:123 wizards.py:68
+#: models.py:122 wizards.py:68
msgid "Operation"
msgstr "Opération"
-#: models.py:127
+#: models.py:126
msgid "Comment"
msgstr "Commentaires"
-#: models.py:128
+#: models.py:127
msgid "Date d'ouverture"
msgstr "Date d'ouverture"
-#: models.py:138
+#: models.py:137
msgid "A short description of the location of the context record"
msgstr "Une courte description de la localisation de l'Unité d'Enregistrement"
-#: models.py:150
+#: models.py:149
msgid ""
"\"Terminus Ante Quem\" the context record can't have been created after this "
"date"
@@ -312,11 +312,11 @@ msgstr ""
"« Terminus Ante Quem » l'Unité d'Enregistrement ne peut avoir été créée "
"après cette date"
-#: models.py:154
+#: models.py:153
msgid "Estimation of a \"Terminus Ante Quem\""
msgstr "Estimation d'un « Terminus Ante Quem »"
-#: models.py:157
+#: models.py:156
msgid ""
"\"Terminus Post Quem\" the context record can't have been created before "
"this date"
@@ -324,35 +324,35 @@ msgstr ""
"« Terminus Post Quem » l'Unité d'Enregistrement ne peut avoir été créée "
"avant cette date"
-#: models.py:161
+#: models.py:160
msgid "Estimation of a \"Terminus Post Quem\""
msgstr "Estimation d'un « Terminus Post Quem »"
-#: models.py:172 models.py:173 templates/ishtar/sheet_contextrecord.html:6
+#: models.py:171 models.py:172 templates/ishtar/sheet_contextrecord.html:6
msgid "Context Record"
msgstr "Unité d'Enregistrement"
-#: models.py:175
+#: models.py:174
msgid "Can view all Context Records"
msgstr "Peut voir toutes les Unités d'Enregistrement"
-#: models.py:177
+#: models.py:176
msgid "Can view own Context Record"
msgstr "Peut voir sa propre Unité d'Enregistrement"
-#: models.py:179
+#: models.py:178
msgid "Can add own Context Record"
msgstr "Peut ajouter sa propre Unité d'Enregistrement"
-#: models.py:181
+#: models.py:180
msgid "Can change own Context Record"
msgstr "Peut modifier sa propre Unité d'Enregistrement"
-#: models.py:183
+#: models.py:182
msgid "Can delete own Context Record"
msgstr "Peut supprimer sa propre Unité d'Enregistrement"
-#: models.py:192
+#: models.py:191
msgctxt "short"
msgid "Context record"
msgstr "UE"
@@ -385,27 +385,27 @@ msgstr "Documentation d'une Unité d'Enregistrement"
msgid "Context record documentations"
msgstr "Documentations des Unités d'Enregistrement"
-#: views.py:88
+#: views.py:121
msgid "New context record"
msgstr "Nouvelle Unité d'Enregistrement"
-#: views.py:98
+#: views.py:131
msgid "Context record modification"
msgstr "Modification d'une Unité d'Enregistrement"
-#: views.py:112
+#: views.py:145
msgid "Context record deletion"
msgstr "Suppression d'une Unité d'Enregistrement"
-#: views.py:120
+#: views.py:153
msgid "Context record: new source"
msgstr "Unité d'Enregistrement : nouvelle documentation associée"
-#: views.py:128
+#: views.py:161
msgid "Context record: source modification"
msgstr "Unité d'Enregistrement : modification d'une documentation associée"
-#: views.py:134
+#: views.py:167
msgid "Context record: source deletion"
msgstr "Unité d'Enregistrement : suppression d'une documentation associée"
diff --git a/translations/fr/archaeological_files.po b/translations/fr/archaeological_files.po
index d66b22e69..b96e09e70 100644
--- a/translations/fr/archaeological_files.po
+++ b/translations/fr/archaeological_files.po
@@ -15,7 +15,7 @@ msgstr ""
"Language-Team: \n"
"Language: fr\n"
"Plural-Forms: nplurals=2; plural=n>1;\n"
-"X-Generator: Zanata 3.8.2\n"
+"X-Generator: Zanata 3.8.4\n"
#: forms.py:51 forms.py:209 forms.py:253 forms.py:394 forms.py:421
#: models.py:75 templates/ishtar/sheet_file.html:150
@@ -462,11 +462,11 @@ msgstr "Dossier : modification d'acte administratif"
msgid "File: administrative act deletion"
msgstr "Dossier : suppression d'acte administratif"
-#: wizards.py:112 templates/ishtar/sheet_file.html:122
+#: wizards.py:124 templates/ishtar/sheet_file.html:122
msgid "Associated operations"
msgstr "Opérations associées"
-#: wizards.py:142 wizards.py:152
+#: wizards.py:154 wizards.py:164
msgid "Archaelogical file"
msgstr "Dossier"
diff --git a/translations/fr/archaeological_files_pdl.po b/translations/fr/archaeological_files_pdl.po
index c6eaa540b..90f5ffce0 100644
--- a/translations/fr/archaeological_files_pdl.po
+++ b/translations/fr/archaeological_files_pdl.po
@@ -14,7 +14,7 @@ msgstr ""
"Language-Team: \n"
"Language: fr\n"
"Plural-Forms: nplurals=2; plural=(n > 1)\n"
-"X-Generator: Zanata 3.8.2\n"
+"X-Generator: Zanata 3.8.4\n"
#: forms.py:39
msgid "General"
diff --git a/translations/fr/archaeological_finds.po b/translations/fr/archaeological_finds.po
index 6a9ed4c3c..e4cea7f0f 100644
--- a/translations/fr/archaeological_finds.po
+++ b/translations/fr/archaeological_finds.po
@@ -10,112 +10,116 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Transfer-Encoding: 8bit\n"
"Content-Type: text/plain; charset=UTF-8\n"
-"PO-Revision-Date: 2016-03-07 12:02-0500\n"
+"PO-Revision-Date: 2016-06-08 12:20-0400\n"
"Last-Translator: Étienne Loks <etienne.loks@iggdrasil.net>\n"
"Language-Team: \n"
"Language: fr\n"
"Plural-Forms: nplurals=2; plural=n>1;\n"
-"X-Generator: Zanata 3.8.2\n"
+"X-Generator: Zanata 3.8.4\n"
-#: forms.py:45 ishtar_menu.py:31 models.py:341 models.py:537 models.py:605
-#: templates/ishtar/sheet_find.html:6
+#: forms.py:46 forms.py:50 wizards.py:62
+msgid "Context record"
+msgstr "Unité d'Enregistrement"
+
+#: forms.py:79 ishtar_menu.py:31 models.py:348 models.py:597 models.py:694
+#: templates/ishtar/sheet_find.html:6 templates/ishtar/sheet_findbasket.html:6
msgid "Find"
msgstr "Mobilier"
-#: forms.py:54 forms.py:153 forms.py:298 models.py:104 models.py:284
+#: forms.py:88 forms.py:187 forms.py:346 models.py:105 models.py:290
msgid "Free ID"
msgstr "ID libre"
-#: forms.py:56 models.py:325
+#: forms.py:90 models.py:331
msgid "Previous ID"
msgstr "Identifiant précédent"
-#: forms.py:57 forms.py:174 forms.py:238 models.py:107 models.py:285
-#: models.py:559 templates/ishtar/sheet_find.html:87
+#: forms.py:91 forms.py:208 forms.py:286 models.py:108 models.py:291
+#: models.py:619
msgid "Description"
msgstr "Description"
-#: forms.py:60 forms.py:176 models.py:118
+#: forms.py:94 forms.py:210 models.py:119
msgid "Batch/object"
msgstr "Lot/objet"
-#: forms.py:62 models.py:311
+#: forms.py:96 models.py:317
msgid "Is complete?"
msgstr "Est complet ?"
-#: forms.py:65 forms.py:167 forms.py:302 models.py:46
+#: forms.py:99 forms.py:201 forms.py:350 models.py:47
msgid "Material type"
msgstr "Type de matériau"
-#: forms.py:66 forms.py:171 models.py:56 models.py:289
+#: forms.py:100 forms.py:205 models.py:57 models.py:295
msgid "Conservatory state"
msgstr "État sanitaire"
-#: forms.py:69 models.py:81 models.py:314
+#: forms.py:103 models.py:82 models.py:320
msgid "Object types"
msgstr "Types d'objet"
-#: forms.py:71 forms.py:170 models.py:63
+#: forms.py:105 forms.py:204 models.py:64
msgid "Preservation type"
msgstr "Type de conservation"
-#: forms.py:74 forms.py:173 models.py:316
+#: forms.py:108 forms.py:207 models.py:322
msgid "Integrity"
msgstr "Intégrité"
-#: forms.py:76 models.py:317
+#: forms.py:110 models.py:323
msgid "Length (cm)"
msgstr "Longueur (cm)"
-#: forms.py:77 models.py:318
+#: forms.py:111 models.py:324
msgid "Width (cm)"
msgstr "Largeur (cm)"
-#: forms.py:78 models.py:319
+#: forms.py:112 models.py:325
msgid "Height (cm)"
msgstr "Hauteur (cm)"
-#: forms.py:79 models.py:320
+#: forms.py:113 models.py:326
msgid "Diameter (cm)"
msgstr "Diamètre (cm)"
-#: forms.py:80 forms.py:303 models.py:294
+#: forms.py:114 forms.py:351 models.py:300
msgid "Volume (l)"
msgstr "Volume (l)"
-#: forms.py:81 forms.py:304 models.py:295
+#: forms.py:115 forms.py:352 models.py:301
msgid "Weight (g)"
msgstr "Poids (g)"
-#: forms.py:82 forms.py:305 models.py:298
+#: forms.py:116 forms.py:353 models.py:304
msgid "Find number"
msgstr "Mobilier (en nombre)"
-#: forms.py:83 models.py:321
+#: forms.py:117 models.py:327
msgid "Mark"
msgstr "Marque"
-#: forms.py:84 forms.py:178 models.py:327
+#: forms.py:118 forms.py:212 models.py:333
msgid "Check"
msgstr "Vérification"
-#: forms.py:86 models.py:329
+#: forms.py:120 models.py:335
msgid "Check date"
msgstr "Date de vérification"
-#: forms.py:87 models.py:108 models.py:322 models.py:560
+#: forms.py:121 models.py:109 models.py:328 models.py:620
msgid "Comment"
msgstr "Commentaires"
-#: forms.py:90 models.py:323
+#: forms.py:124 models.py:329
msgid "Comment on dating"
msgstr "Commentaire général sur les datations"
-#: forms.py:92
+#: forms.py:126
msgid "Image"
msgstr "Image"
-#: forms.py:93
+#: forms.py:127
#, python-format
msgid ""
"<p>Heavy images are resized to: %(width)dx%(height)d (ratio is preserved).</"
@@ -124,466 +128,493 @@ msgstr ""
"<p>Les images trop grandes sont retaillées en : %(width)dx%(height)d (le "
"ratio est conservé).</p>"
-#: forms.py:119 forms.py:147 models.py:306
+#: forms.py:153 forms.py:181 models.py:312
msgid "Dating"
msgstr "Datation"
-#: forms.py:124 forms.py:165
+#: forms.py:158 forms.py:199
msgid "Period"
msgstr "Période"
-#: forms.py:125 forms.py:240 models.py:570 models.py:610
+#: forms.py:159 forms.py:288 models.py:630 models.py:699
+#: templates/ishtar/sheet_find.html:72 templates/ishtar/sheet_find.html:95
msgid "Start date"
msgstr "Date de début"
-#: forms.py:127 forms.py:242 models.py:571 models.py:611
+#: forms.py:161 forms.py:290 models.py:631 models.py:700
+#: templates/ishtar/sheet_find.html:73 templates/ishtar/sheet_find.html:96
msgid "End date"
msgstr "Date de fin"
-#: forms.py:128
+#: forms.py:162
msgid "Quality"
msgstr "Qualité"
-#: forms.py:130
+#: forms.py:164
msgid "Dating type"
msgstr "Type de datation"
-#: forms.py:132
+#: forms.py:166
msgid "Precise dating"
msgstr "Datation précise"
-#: forms.py:151 models.py:123
+#: forms.py:185 models.py:124
msgid "Short ID"
msgstr "ID court"
-#: forms.py:152 models.py:126 templates/ishtar/sheet_find.html:71
+#: forms.py:186 models.py:127
msgid "Complete ID"
msgstr "ID complet"
-#: forms.py:156
+#: forms.py:190
msgid "Year"
msgstr "Année"
-#: forms.py:158
+#: forms.py:192
msgid "Code PATRIARCHE"
msgstr "Code PATRIARCHE"
-#: forms.py:160
+#: forms.py:194
msgid "Archaelogical site"
msgstr "Entité Archéologique"
-#: forms.py:168 models.py:80
+#: forms.py:202 models.py:81
msgid "Object type"
msgstr "Type d'objet"
-#: forms.py:179
+#: forms.py:213
msgid "Has an image?"
msgstr "Dispose d'une image ?"
-#: forms.py:208 views.py:103
+#: forms.py:242 forms.py:255 views.py:112
msgid "Find search"
msgstr "Recherche de mobilier"
-#: forms.py:221
+#: forms.py:269
msgid "Base treatment"
msgstr "Traitement de base"
-#: forms.py:225 models.py:549 models.py:562
+#: forms.py:273 models.py:609 models.py:622
msgid "Treatment type"
msgstr "Type de traitement"
-#: forms.py:227 models.py:568 models.py:608
+#: forms.py:275 models.py:628 models.py:697
+#: templates/ishtar/sheet_find.html:70 templates/ishtar/sheet_find.html:94
msgid "Person"
msgstr "Individu"
-#: forms.py:233 models.py:563
+#: forms.py:281 models.py:623
msgid "Location"
msgstr "Lieu"
-#: forms.py:254
+#: forms.py:302
msgid "Upstream finds"
msgstr "Mobilier amont"
-#: forms.py:256 models.py:342
+#: forms.py:304 models.py:349
msgid "Finds"
msgstr "Mobilier"
-#: forms.py:266
+#: forms.py:314
msgid "You should at least select one archaeological find."
msgstr "Vous devez sélectionner au moins un mobilier archéologique."
-#: forms.py:295
+#: forms.py:343
msgid "Resulting find"
msgstr "Mobilier résultant"
-#: forms.py:300
+#: forms.py:348
msgid "Precise description"
msgstr "Description précise"
-#: forms.py:314
+#: forms.py:362
msgid "Resulting finds"
msgstr "Mobiliers résultants"
-#: forms.py:319
+#: forms.py:367
msgid "Would you like to delete this find?"
msgstr "Souhaitez vous supprimer ce mobilier ?"
-#: forms.py:323
+#: forms.py:371
msgid "Upstream find"
msgstr "Mobilier amont"
-#: forms.py:330
+#: forms.py:378
msgid "Archaeological find search"
msgstr "Recherche de mobilier"
-#: forms.py:332
+#: forms.py:380
msgid "You should select an archaeological find."
msgstr "Vous devez sélectionner du mobilier."
-#: forms.py:337
+#: forms.py:385
msgid "Year of the operation"
msgstr "Année de l'opération"
-#: forms.py:339
+#: forms.py:387
msgid "Period of the archaelogical find"
msgstr "Période du mobilier"
-#: forms.py:341
+#: forms.py:389
msgid "Material type of the archaelogical find"
msgstr "Type de matériau du mobilier"
-#: forms.py:343
+#: forms.py:391
msgid "Description of the archaelogical find"
msgstr "Description du mobilier"
-#: forms.py:355
+#: forms.py:403
msgid "Documentation search"
msgstr "Recherche de document"
-#: forms.py:357
+#: forms.py:405
msgid "You should select a document."
msgstr "Vous devez sélectionner un document."
+#: forms.py:422
+msgid "Another basket already exist with this name."
+msgstr "Un autre panier existe déjà avec ce nom."
+
+#: forms.py:432 ishtar_menu.py:59
+msgid "Basket"
+msgstr "Panier"
+
#: ishtar_menu.py:35
msgid "Search"
msgstr "Recherche"
-#: ishtar_menu.py:40 ishtar_menu.py:62
+#: ishtar_menu.py:40 ishtar_menu.py:62 ishtar_menu.py:82
msgid "Creation"
msgstr "Ajout"
-#: ishtar_menu.py:45 ishtar_menu.py:67
+#: ishtar_menu.py:45 ishtar_menu.py:87
msgid "Modification"
msgstr "Modification"
-#: ishtar_menu.py:54 ishtar_menu.py:72
+#: ishtar_menu.py:54 ishtar_menu.py:73 ishtar_menu.py:92
msgid "Deletion"
msgstr "Suppression"
-#: ishtar_menu.py:59
+#: ishtar_menu.py:67
+msgid "Manage items"
+msgstr "Gérer les éléments"
+
+#: ishtar_menu.py:79
msgid "Documentation"
msgstr "Documentation"
-#: models.py:39
+#: models.py:40
msgid "Code"
msgstr "Code"
-#: models.py:40
+#: models.py:41
msgid "Recommendation"
msgstr "Recommandation"
-#: models.py:43
+#: models.py:44
msgid "Parent material"
msgstr "Matériau parent"
-#: models.py:47 models.py:287
+#: models.py:48 models.py:293
msgid "Material types"
msgstr "Types de matériau"
-#: models.py:53
+#: models.py:54
msgid "Parent conservatory state"
msgstr "État sanitaire - parent"
-#: models.py:57
+#: models.py:58
msgid "Conservatory states"
msgstr "États sanitaires"
-#: models.py:64
+#: models.py:65
msgid "Preservation types"
msgstr "Types de conservation"
-#: models.py:70 models.py:71
+#: models.py:71 models.py:72
msgid "Integrity type"
msgstr "Type d'intégrité"
-#: models.py:77
+#: models.py:78
msgid "Parent"
msgstr "Parent"
-#: models.py:96
+#: models.py:97
msgid "Unknow"
msgstr "Inconnu"
-#: models.py:97
+#: models.py:98
msgid "Object"
msgstr "Objet"
-#: models.py:98
+#: models.py:99
msgid "Batch"
msgstr "Lot"
-#: models.py:105 models.py:281 models.py:555
+#: models.py:106 models.py:287 models.py:615
msgid "External ID"
msgstr "ID externe"
-#: models.py:110
+#: models.py:111
msgid "Topographic localisation"
msgstr "Localisation topogaphique"
-#: models.py:111 templates/ishtar/sheet_find.html:92
+#: models.py:112
msgid "Special interest"
msgstr "Intérêt spécifique"
-#: models.py:115
+#: models.py:116
msgid "Context Record"
msgstr "Unité d'Enregistrement"
-#: models.py:116 templates/ishtar/sheet_find.html:83
+#: models.py:117
msgid "Discovery date"
msgstr "Date de découverte"
-#: models.py:124 models.py:127
+#: models.py:125 models.py:128
msgid "Cached value - do not edit"
msgstr "Valeur en cache - ne pas éditer"
-#: models.py:132 models.py:279
+#: models.py:133 models.py:285
msgid "Base find"
msgstr "Mobilier de base"
-#: models.py:133
+#: models.py:134
msgid "Base finds"
msgstr "Mobilier de base"
-#: models.py:135
+#: models.py:136
msgid "Can view all Base finds"
msgstr "Peut voir tout le Mobilier de base"
-#: models.py:136
+#: models.py:137
msgid "Can view own Base find"
msgstr "Peut voir son propre Mobilier de base"
-#: models.py:137
+#: models.py:138
msgid "Can add own Base find"
msgstr "Peut ajouter son propre Mobilier de base"
-#: models.py:138
+#: models.py:139
msgid "Can change own Base find"
msgstr "Peut modifier son propre Mobilier de base"
-#: models.py:139
+#: models.py:140
msgid "Can delete own Base find"
msgstr "Peut supprimer son propre Mobilier de base"
-#: models.py:234
+#: models.py:235
msgid "g"
msgstr "g"
-#: models.py:235
+#: models.py:236
msgid "kg"
msgstr "kg"
-#: models.py:237
+#: models.py:238
msgid "Not checked"
msgstr "Non vérifié"
-#: models.py:238
+#: models.py:239
msgid "Checked but incorrect"
msgstr "Vérifié mais incorrect"
-#: models.py:239
+#: models.py:240
msgid "Checked and correct"
msgstr "Vérifié et correct"
-#: models.py:269
+#: models.py:275
msgid "Base find - Short ID"
msgstr "Mobilier de base - ID court"
-#: models.py:270
+#: models.py:276
msgid "Base find - Complete ID"
msgstr "Mobilier de base - ID complet"
-#: models.py:271
+#: models.py:277
msgid "Base find - Comment"
msgstr "Mobilier de base - Commentaires"
-#: models.py:272
+#: models.py:278
msgid "Base find - Description"
msgstr "Mobilier de base - Description"
-#: models.py:273
+#: models.py:279
msgid "Base find - Topographic localisation"
msgstr "Mobilier de base - Localisation topographique"
-#: models.py:275
+#: models.py:281
msgid "Base find - Special interest"
msgstr "Mobilier de base - Intérêt spécifique"
-#: models.py:276
+#: models.py:282
msgid "Base find - Discovery date"
msgstr "Mobilier de base - Date de découverte"
-#: models.py:283
+#: models.py:289
msgid "Order"
msgstr "Ordre"
-#: models.py:292
+#: models.py:298
msgid "Type of preservation to consider"
msgstr "Mesures de conservation à envisager"
-#: models.py:296
+#: models.py:302
msgid "Weight unit"
msgstr "Unité de poids"
-#: models.py:302 templates/ishtar/sheet_find.html:61
+#: models.py:308 templates/ishtar/sheet_find.html:66
msgid "Upstream treatment"
msgstr "Traitement amont"
-#: models.py:305 templates/ishtar/sheet_find.html:63
+#: models.py:311 templates/ishtar/sheet_find.html:90
msgid "Downstream treatment"
msgstr "Traitement aval"
-#: models.py:309 models.py:557 templates/ishtar/sheet_find.html:65
+#: models.py:315 models.py:617 templates/ishtar/sheet_find.html:71
msgid "Container"
msgstr "Contenant"
-#: models.py:344
+#: models.py:351
msgid "Can view all Finds"
msgstr "Peut voir tout le Mobilier"
-#: models.py:345
+#: models.py:352
msgid "Can view own Find"
msgstr "Peut voir son propre Mobilier"
-#: models.py:346
+#: models.py:353
msgid "Can add own Find"
msgstr "Peut ajouter son propre Mobilier"
-#: models.py:347
+#: models.py:354
msgid "Can change own Find"
msgstr "Peut modifier son propre Mobilier"
-#: models.py:348
+#: models.py:355
msgid "Can delete own Find"
msgstr "Peut supprimer son propre Mobilier"
-#: models.py:353
+#: models.py:360
msgid "FIND"
msgstr "MOBILIER"
-#: models.py:535
+#: models.py:595
msgid "Find documentation"
msgstr "Documentation de mobilier"
-#: models.py:536
+#: models.py:596
msgid "Find documentations"
msgstr "Documentations de mobilier"
-#: models.py:546
+#: models.py:606
msgid "Virtual"
msgstr "Virtuel"
-#: models.py:550
+#: models.py:610
msgid "Treatment types"
msgstr "Types de traitement"
-#: models.py:565
+#: models.py:625
msgid "Other location"
msgstr "Autre lieu"
-#: models.py:575 models.py:597
+#: models.py:635 models.py:686
msgid "Treatment"
msgstr "Traitement"
-#: models.py:576
+#: models.py:636
msgid "Treatments"
msgstr "Traitements"
-#: models.py:578
+#: models.py:638
msgid "Can view all Treatments"
msgstr "Peut voir tous les Traitements"
-#: models.py:579
+#: models.py:639
msgid "Can view own Treatment"
msgstr "Peut voir son propre Traitement"
-#: models.py:580
+#: models.py:640
msgid "Can add own Treatment"
msgstr "Peut ajouter son propre Traitement"
-#: models.py:581
+#: models.py:641
msgid "Can change own Treatment"
msgstr "Peut modifier son propre Traitement"
-#: models.py:582
+#: models.py:642
msgid "Can delete own Treatment"
msgstr "Peut supprimer son propre Traitement"
-#: models.py:588
+#: models.py:648
msgid "by"
msgstr "par"
-#: models.py:594
+#: models.py:683
msgid "Treatment documentation"
msgstr "Documentation d'un traitement"
-#: models.py:595
+#: models.py:684
msgid "Treament documentations"
msgstr "Documentations des traitements"
-#: models.py:607
+#: models.py:696
msgid "Administrative act"
msgstr "Acte administratif"
-#: models.py:614
+#: models.py:703
msgid "Property"
msgstr "Propriété"
-#: models.py:615
+#: models.py:704
msgid "Properties"
msgstr "Propriétés"
-#: views.py:98
+#: views.py:107
msgid "New find"
msgstr "Nouveau mobilier"
-#: views.py:111
+#: views.py:121
msgid "Find modification"
msgstr "Modification de mobilier"
-#: views.py:126
+#: views.py:136
msgid "Find deletion"
msgstr "Suppression de mobilier"
-#: views.py:135
+#: views.py:145
msgid "Find: new source"
msgstr "Mobilier : nouvelle documentation associée"
-#: views.py:143
+#: views.py:153
msgid "Find: source modification"
msgstr "Mobilier : modification de documentation associée"
-#: views.py:149
+#: views.py:159
msgid "Find: source deletion"
msgstr "Mobilier : suppression de mobilier associé"
+#: views.py:173
+msgid "New basket"
+msgstr "Nouveau panier"
+
+#: views.py:192
+msgid "Manage items in basket"
+msgstr "Gérer les éléments dans un panier"
+
+#: views.py:212
+msgid "Manage basket"
+msgstr "Gérer un panier"
+
+#: views.py:300
+msgid "Delete basket"
+msgstr "Supprimer un panier"
+
#: wizards.py:61
msgid "Operation"
msgstr "Opération"
-#: wizards.py:62
-msgid "Context record"
-msgstr "Unité d'Enregistrement"
-
#: templates/ishtar/sheet_find.html:14
msgid "Previous version"
msgstr "Version précédente"
@@ -597,69 +628,54 @@ msgid "Next version"
msgstr "Version suivante"
#: templates/ishtar/sheet_find.html:24
+#: templates/ishtar/sheet_findbasket.html:11
msgid "Export as:"
msgstr "Exporter en :"
#: templates/ishtar/sheet_find.html:24
+#: templates/ishtar/sheet_findbasket.html:11
msgid "OpenOffice.org file"
msgstr "Fichier OpenOffice.org"
#: templates/ishtar/sheet_find.html:24
+#: templates/ishtar/sheet_findbasket.html:11
msgid "PDF file"
msgstr "Fichier PDF"
#: templates/ishtar/sheet_find.html:25
+#: templates/ishtar/sheet_findbasket.html:12
msgid "Modify"
msgstr "Modifier"
-#: templates/ishtar/sheet_find.html:61 templates/ishtar/sheet_find.html:63
-#: templates/ishtar/sheet_find.html:65 templates/ishtar/sheet_find.html:71
-#: templates/ishtar/sheet_find.html:83 templates/ishtar/sheet_find.html:87
-#: templates/ishtar/sheet_find.html:92 templates/ishtar/sheet_find.html:96
-#: templates/ishtar/sheet_find.html:98 templates/ishtar/sheet_find.html:100
-msgid ":"
-msgstr " :"
+#: templates/ishtar/sheet_find.html:68 templates/ishtar/sheet_find.html:92
+#: templates/ishtar/sheet_find.html:141
+msgid "Type"
+msgstr "Type"
-#: templates/ishtar/sheet_find.html:68
+#: templates/ishtar/sheet_find.html:69 templates/ishtar/sheet_find.html:93
+msgid "Related find"
+msgstr "Mobilier associé"
+
+#: templates/ishtar/sheet_find.html:110
msgid "Associated base finds"
msgstr "Mobilier de base associé"
-#: templates/ishtar/sheet_find.html:96
-msgid "Related context record"
-msgstr "Unité d'Enregistrement associée"
-
-#: templates/ishtar/sheet_find.html:98
-msgid "Related parcel"
-msgstr "Parcelle associée"
-
-#: templates/ishtar/sheet_find.html:100
-msgid "Related operation"
-msgstr "Opération associée"
-
-#: templates/ishtar/sheet_find.html:106
+#: templates/ishtar/sheet_find.html:136 templates/ishtar/sheet_find.html:138
msgid "Documents"
msgstr "Documents"
-#: templates/ishtar/sheet_find.html:108
+#: templates/ishtar/sheet_find.html:140
msgid "Title"
msgstr "Titre"
-#: templates/ishtar/sheet_find.html:109
-msgid "Type"
-msgstr "Type"
-
-#: templates/ishtar/sheet_find.html:110
+#: templates/ishtar/sheet_find.html:142
msgid "Authors"
msgstr "Auteurs"
-#: templates/ishtar/sheet_find.html:111 templates/ishtar/sheet_find.html:118
+#: templates/ishtar/sheet_find.html:143 templates/ishtar/sheet_find.html:150
msgid "Link"
msgstr "Lien"
-#: templates/ishtar/sheet_find.html:121
-msgid "No document associated to this find"
-msgstr "Pas de document associé à ce mobilier"
-
#: templates/ishtar/sheet_findsource.html:6
msgid "Find source"
msgstr "Documentation associé au mobilier"
diff --git a/translations/fr/archaeological_operations.po b/translations/fr/archaeological_operations.po
index 660fbeba2..127197718 100644
--- a/translations/fr/archaeological_operations.po
+++ b/translations/fr/archaeological_operations.po
@@ -15,14 +15,14 @@ msgstr ""
"Language-Team: \n"
"Language: fr\n"
"Plural-Forms: nplurals=2; plural=n>1;\n"
-"X-Generator: Zanata 3.8.2\n"
+"X-Generator: Zanata 3.8.4\n"
#: forms.py:66 forms.py:344 forms.py:914 forms.py:936 forms.py:940
-#: models.py:782 templates/ishtar/blocks/window_tables/parcels.html:8
+#: models.py:780 templates/ishtar/blocks/window_tables/parcels.html:8
msgid "Parcels"
msgstr "Parcelles"
-#: forms.py:69 forms.py:185 forms.py:890 models.py:772
+#: forms.py:69 forms.py:185 forms.py:890 models.py:770
#: templates/ishtar/blocks/window_tables/parcels.html:5
#: templates/ishtar/dashboards/dashboard_operation.html:302
#: templates/ishtar/dashboards/dashboard_operation.html:315
@@ -31,18 +31,18 @@ msgstr "Parcelles"
msgid "Town"
msgstr "Commune"
-#: forms.py:71 forms.py:433 forms.py:704 forms.py:1147 models.py:158
-#: models.py:589 models.py:770
+#: forms.py:71 forms.py:433 forms.py:704 forms.py:1148 models.py:158
+#: models.py:587 models.py:768
#: templates/ishtar/blocks/window_tables/parcels.html:6
msgid "Year"
msgstr "Année"
-#: forms.py:74 models.py:773
+#: forms.py:74 models.py:771
#: templates/ishtar/blocks/window_tables/parcels.html:7
msgid "Section"
msgstr "Section"
-#: forms.py:77 models.py:774
+#: forms.py:77 models.py:772
msgid "Parcel number"
msgstr "Numéro de parcelle"
@@ -74,8 +74,8 @@ msgstr "Il y a des parcelles identiques."
msgid "Relation type"
msgstr "Type de relation"
-#: forms.py:356 ishtar_menu.py:30 models.py:237 models.py:490 models.py:515
-#: models.py:530 models.py:581 models.py:769 wizards.py:338 wizards.py:349
+#: forms.py:356 ishtar_menu.py:30 models.py:237 models.py:488 models.py:513
+#: models.py:528 models.py:579 models.py:767 wizards.py:338 wizards.py:349
#: templates/ishtar/sheet_operation.html:6
msgid "Operation"
msgstr "Opération"
@@ -108,11 +108,11 @@ msgstr "Relations"
msgid "Numeric reference"
msgstr "Identifiant numérique"
-#: forms.py:439 forms.py:1157
+#: forms.py:439 forms.py:1158
msgid "Parcel (section/number)"
msgstr "Parcelle (section/numéro)"
-#: forms.py:442 forms.py:1160 models.py:491
+#: forms.py:442 forms.py:1161 models.py:489
#: templates/ishtar/dashboards/dashboard_operation.html:273
#: templates/ishtar/dashboards/dashboard_operation.html:286
#: templates/ishtar/dashboards/dashboard_operation.html:453
@@ -137,7 +137,7 @@ msgstr "Est ouvert ?"
msgid "In charge"
msgstr "Responsable"
-#: forms.py:463 models.py:575
+#: forms.py:463 models.py:573
msgid "Scientist in charge"
msgstr "Responsable scientifique"
@@ -199,11 +199,11 @@ msgstr "Opération virtuelle"
msgid "Archaelogical site"
msgstr "Entité Archéologique"
-#: forms.py:498 forms.py:1164
+#: forms.py:498 forms.py:1165
msgid "Created by"
msgstr "Créé par"
-#: forms.py:504 forms.py:1170
+#: forms.py:504 forms.py:1171
msgid "Modified by"
msgstr "Modifié par"
@@ -215,7 +215,7 @@ msgstr "Recherche d'opérations"
msgid "Associated file"
msgstr "Dossier associé"
-#: forms.py:594 forms.py:838 models.py:586 wizards.py:76
+#: forms.py:594 forms.py:838 models.py:584 wizards.py:76
msgid "Archaelogical file"
msgstr "Dossier"
@@ -283,7 +283,7 @@ msgstr "Avec un rapport"
msgid "With finds"
msgstr "Avec du mobilier"
-#: forms.py:687 forms.py:1217 templates/ishtar/sheet_administrativeact.html:11
+#: forms.py:687 forms.py:1218 templates/ishtar/sheet_administrativeact.html:11
#: templates/ishtar/sheet_operation.html:32
msgid "General"
msgstr "Général"
@@ -304,7 +304,7 @@ msgstr "Référence de l'opérateur"
msgid "Total surface (m2)"
msgstr "Surface totale (m2)"
-#: forms.py:744 models.py:49 models.py:142 models.py:940
+#: forms.py:744 models.py:49 models.py:142 models.py:938
msgid "Start date"
msgstr "Date de début"
@@ -341,7 +341,7 @@ msgstr ""
msgid "Bad operation code"
msgstr "Mauvais code d'opération"
-#: forms.py:834 models.py:159 models.py:368
+#: forms.py:834 models.py:159 models.py:366
msgid "Operation code"
msgstr "Code de l'opération"
@@ -382,11 +382,11 @@ msgstr "Prescription sur une vaste surface"
msgid "Prescription on geoarchaeological context"
msgstr "Prescription sur un contexte géoarchéologique"
-#: forms.py:888 forms.py:910 models.py:170 models.py:599
+#: forms.py:888 forms.py:910 models.py:170 models.py:597
msgid "Towns"
msgstr "Communes"
-#: forms.py:917 models.py:781 models.py:938
+#: forms.py:917 models.py:779 models.py:936
msgid "Parcel"
msgstr "Parcelle"
@@ -435,7 +435,7 @@ msgstr "Voulez-vous clore cette opération ?"
msgid "Would you like to delete this operation?"
msgstr "Voulez-vous supprimer cette opération ?"
-#: forms.py:1085 forms.py:1148 models.py:517 models.py:566
+#: forms.py:1085 forms.py:1149 models.py:515 models.py:564
msgid "Index"
msgstr "Index"
@@ -464,52 +464,52 @@ msgstr "Recherche de document"
msgid "You should select a document."
msgstr "Vous devez sélectionner un document."
-#: forms.py:1154 forms.py:1220 models.py:541 models.py:560
+#: forms.py:1155 forms.py:1221 models.py:539 models.py:558
msgid "Act type"
msgstr "Type d'acte"
-#: forms.py:1155 forms.py:1308
+#: forms.py:1156 forms.py:1309
msgid "Indexed?"
msgstr "Indexé ?"
-#: forms.py:1161 forms.py:1225 models.py:590
+#: forms.py:1162 forms.py:1226 models.py:588
#: templates/ishtar/blocks/window_tables/administrativacts.html:8
msgid "Object"
msgstr "Objet"
-#: forms.py:1197 views.py:373
+#: forms.py:1198 views.py:373
msgid "Administrative act search"
msgstr "Recherche d'actes administratifs"
-#: forms.py:1212 forms.py:1266 forms.py:1333
+#: forms.py:1213 forms.py:1267 forms.py:1334
msgid "You should select an administrative act."
msgstr "Vous devez sélectionner un acte administratif."
-#: forms.py:1228 models.py:587
+#: forms.py:1229 models.py:585
msgid "Signature date"
msgstr "Date de signature"
-#: forms.py:1243
+#: forms.py:1244
msgid "Would you like to delete this administrative act?"
msgstr "Voulez-vous supprimer cet acte administratif ?"
-#: forms.py:1248
+#: forms.py:1249
msgid "Template"
msgstr "Patron"
-#: forms.py:1272 forms.py:1276
+#: forms.py:1273 forms.py:1277
msgid "This document is not intended for this type of act."
msgstr "Ce document n'est pas destiné à ce type d'acte."
-#: forms.py:1294
+#: forms.py:1295
msgid "Doc generation"
msgstr "Génération de document"
-#: forms.py:1296
+#: forms.py:1297
msgid "Generate the associated doc?"
msgstr "Générer le document associé ?"
-#: forms.py:1317 ishtar_menu.py:121 views.py:407
+#: forms.py:1318 ishtar_menu.py:121 views.py:407
msgctxt "admin act register"
msgid "Register"
msgstr "Registre"
@@ -530,7 +530,7 @@ msgstr "Clôture"
msgid "Deletion"
msgstr "Suppression"
-#: ishtar_menu.py:58 models.py:606
+#: ishtar_menu.py:58 models.py:604
#: templates/ishtar/sheet_administrativeact.html:6
msgid "Administrative act"
msgstr "Acte administratif"
@@ -564,11 +564,11 @@ msgstr "Informations générales"
msgid "Operations"
msgstr "Opérations"
-#: models.py:48 models.py:64 models.py:1402
+#: models.py:48 models.py:64 models.py:1400
msgid "Order"
msgstr "Ordre"
-#: models.py:50 models.py:941
+#: models.py:50 models.py:939
msgid "End date"
msgstr "Date de fin"
@@ -632,7 +632,7 @@ msgstr "Date de clôture"
msgid "In charge scientist"
msgstr "Responsable scientifique"
-#: models.py:163 models.py:765
+#: models.py:163 models.py:763
msgid "File"
msgstr "Dossier"
@@ -683,7 +683,7 @@ msgstr "OPE"
msgid "Intercommunal"
msgstr "Intercommunal"
-#: models.py:351 models.py:529
+#: models.py:351 models.py:527
msgid "Archaeological file"
msgstr "Dossier archéologique"
@@ -691,193 +691,193 @@ msgstr "Dossier archéologique"
msgid "Code patriarche"
msgstr "Code patriarche"
-#: models.py:394
+#: models.py:392
msgid "This operation code already exists for this year"
msgstr "Ce code d'opération existe déjà pour cette année."
-#: models.py:461
+#: models.py:459
msgid "Inverse relation"
msgstr "Relation inverse"
-#: models.py:465
+#: models.py:463
msgid "Operation relation type"
msgstr "Type de relation entre opérations"
-#: models.py:466
+#: models.py:464
msgid "Operation relation types"
msgstr "Types de relation entre opérations"
-#: models.py:479
+#: models.py:477
msgid "Operation record relation"
msgstr "Relation entre opérations"
-#: models.py:480
+#: models.py:478
msgid "Operation record relations"
msgstr "Relations entre opérations"
-#: models.py:501
+#: models.py:499
msgid "Operation documentation"
msgstr "Documentation d'une opération"
-#: models.py:502
+#: models.py:500
msgid "Operation documentations"
msgstr "Documentations des opérations"
-#: models.py:505
+#: models.py:503
msgid "Can view all Operation sources"
msgstr "Peut voir toutes les Documentations d'opération"
-#: models.py:507
+#: models.py:505
msgid "Can view own Operation source"
msgstr "Peut voir sa propre Documentation d'opération"
-#: models.py:509
+#: models.py:507
msgid "Can add own Operation source"
msgstr "Peut ajouter sa propre Documentation d'opération"
-#: models.py:511
+#: models.py:509
msgid "Can change own Operation source"
msgstr "Peut modifier sa propre Documentation d'opération"
-#: models.py:513
+#: models.py:511
msgid "Can delete own Operation source"
msgstr "Peut supprimer sa propre Documentation d'opération"
-#: models.py:532
+#: models.py:530
msgid "Intended to"
msgstr "Destiné à"
-#: models.py:534
+#: models.py:532
msgid "Code"
msgstr "Code"
-#: models.py:537
+#: models.py:535
msgid "Associated template"
msgstr "Patron associé"
-#: models.py:538
+#: models.py:536
msgid "Indexed"
msgstr "Indexé"
-#: models.py:542
+#: models.py:540
msgid "Act types"
msgstr "Types d'acte"
-#: models.py:564
+#: models.py:562
msgid "Person in charge of the operation"
msgstr "Responsable d'opération"
-#: models.py:570
+#: models.py:568
msgid "Archaeological preventive operator"
msgstr "Opérateur d'archéologie préventive"
-#: models.py:578
+#: models.py:576
msgid "Signatory"
msgstr "Signataire"
-#: models.py:596
+#: models.py:594
msgid "Departments"
msgstr "Départements"
-#: models.py:597
+#: models.py:595
msgid "Cached values get from associated departments"
msgstr "Valeur en cache des départements associés"
-#: models.py:600
+#: models.py:598
msgid "Cached values get from associated towns"
msgstr "Valeur en cache des communes associées"
-#: models.py:607 templates/ishtar/sheet_operation.html:134
+#: models.py:605 templates/ishtar/sheet_operation.html:134
msgid "Administrative acts"
msgstr "Actes administratifs"
-#: models.py:610
+#: models.py:608
msgid "Can view all Administrative acts"
msgstr "Peut voir tous les Actes administratifs"
-#: models.py:612
+#: models.py:610
msgid "Can view own Administrative act"
msgstr "Peut voir son propre Acte administratif"
-#: models.py:614
+#: models.py:612
msgid "Can add own Administrative act"
msgstr "Peut ajouter son propre Acte administratif"
-#: models.py:616
+#: models.py:614
msgid "Can change own Administrative act"
msgstr "Peut modifier son propre Acte administratif"
-#: models.py:618
+#: models.py:616
msgid "Can delete own Administrative act"
msgstr "Peut supprimer son propre Acte administratif"
-#: models.py:627
+#: models.py:625
#: templates/ishtar/blocks/window_tables/administrativacts.html:5
#: templates/ishtar/blocks/window_tables/archaeologicalsites.html:5
msgid "Ref."
msgstr "Réf."
-#: models.py:710
+#: models.py:708
msgid "This index already exists for this year"
msgstr "Cet index existe déjà pour cette année."
-#: models.py:776
+#: models.py:774
msgid "External ID"
msgstr "ID externe"
-#: models.py:778
+#: models.py:776
msgid "Address - Locality"
msgstr "Adresse - Lieu-dit"
-#: models.py:936
+#: models.py:934
msgid "Owner"
msgstr "Propriétaire"
-#: models.py:944
+#: models.py:942
msgid "Parcel owner"
msgstr "Propriétaire de parcelle"
-#: models.py:945
+#: models.py:943
msgid "Parcel owners"
msgstr "Propriétaires de parcelle"
-#: models.py:971
+#: models.py:969
msgid "Recorded"
msgstr "Enregistré"
-#: models.py:972
+#: models.py:970
msgid "Effective"
msgstr "Effectif"
-#: models.py:973
+#: models.py:971
msgid "Active"
msgstr "Actif"
-#: models.py:974
+#: models.py:972
msgid "Field completed"
msgstr "Terrain achevé"
-#: models.py:975
+#: models.py:973
msgid "Associated report"
msgstr "Rapport associé"
-#: models.py:976
+#: models.py:974
msgid "Closed"
msgstr "Clos"
-#: models.py:977
+#: models.py:975
msgid "Documented and closed"
msgstr "Documenté et clos"
-#: models.py:1403
+#: models.py:1401
msgid "Is preventive"
msgstr "Préventif"
-#: models.py:1406
+#: models.py:1404
msgid "Operation type old"
msgstr "Type d'opération - ancien"
-#: models.py:1407
+#: models.py:1405
msgid "Operation types old"
msgstr "Types d'opération - ancien"
diff --git a/translations/fr/archaeological_warehouse.po b/translations/fr/archaeological_warehouse.po
index 94ae37c05..fbe8251a2 100644
--- a/translations/fr/archaeological_warehouse.po
+++ b/translations/fr/archaeological_warehouse.po
@@ -13,93 +13,97 @@ msgstr ""
"Language-Team: \n"
"Language: fr\n"
"Plural-Forms: nplurals=2; plural=n>1;\n"
-"X-Generator: Zanata 3.8.2\n"
+"X-Generator: Zanata 3.8.4\n"
-#: forms.py:34 forms.py:89 models.py:44 models.py:71
+#: forms.py:34 forms.py:96 models.py:44 models.py:73
msgid "Warehouse"
msgstr "Dépôt"
-#: forms.py:42 models.py:35
+#: forms.py:43 models.py:35
msgid "Name"
msgstr "Nom"
-#: forms.py:44 models.py:30 models.py:37
+#: forms.py:45 models.py:29 models.py:37
msgid "Warehouse type"
msgstr "Type de dépôt"
-#: forms.py:46 models.py:40
+#: forms.py:48 models.py:40
msgid "Person in charge"
msgstr "Responsable"
-#: forms.py:51 forms.py:94 models.py:41 models.py:75
+#: forms.py:54 forms.py:101 models.py:41 models.py:77
msgid "Comment"
msgstr "Commentaires"
-#: forms.py:53
+#: forms.py:56
msgid "Address"
msgstr "Adresse"
-#: forms.py:55
+#: forms.py:58
msgid "Address complement"
msgstr "Complément d'adresse"
-#: forms.py:57
+#: forms.py:60
msgid "Postal code"
msgstr "Code postal"
-#: forms.py:59 forms.py:63
+#: forms.py:62 forms.py:66
msgid "Town"
msgstr "Commune"
-#: forms.py:60
+#: forms.py:63
msgid "Country"
msgstr "Pays"
-#: forms.py:62
+#: forms.py:65
msgid "Phone"
msgstr "Téléphone"
-#: forms.py:86 models.py:78
+#: forms.py:92 models.py:80
msgid "Container"
msgstr "Contenant"
-#: forms.py:87 forms.py:116 models.py:62
+#: forms.py:93 forms.py:127 models.py:63
msgid "Ref."
msgstr "Réf."
-#: forms.py:88 forms.py:115 models.py:65 models.py:73
+#: forms.py:94 forms.py:126 models.py:66 models.py:75
msgid "Container type"
msgstr "Type de contenant"
-#: forms.py:126
+#: forms.py:137
msgid "Container search"
msgstr "Recherche de contenant"
-#: forms.py:128
+#: forms.py:139
msgid "You should select a container."
msgstr "Vous devez sélectionner un contenant."
-#: forms.py:129
+#: forms.py:140
msgid "Add a new container"
msgstr "Ajouter un nouveau contenant."
-#: forms.py:132 views.py:94
+#: forms.py:144 ishtar_menu.py:33 views.py:94
msgid "Packaging"
msgstr "Conditionnement"
-#: forms.py:137
+#: forms.py:151
msgid "Packager"
msgstr "Personne assurant le conditionnement"
-#: forms.py:141
+#: forms.py:157
msgid "Date"
msgstr "Date"
-#: forms.py:150
+#: forms.py:166
msgid "Packaged finds"
msgstr "Mobilier conditionné"
-#: models.py:31
+#: ishtar_menu.py:30
+msgid "Find"
+msgstr "Mobilier"
+
+#: models.py:30
msgid "Warehouse types"
msgstr "Types de dépôts"
@@ -127,30 +131,30 @@ msgstr "Peut modifier son propre Dépôt"
msgid "Can delete own Warehouse"
msgstr "Peut supprimer son propre Dépôt"
-#: models.py:58
+#: models.py:59
msgid "Length (mm)"
msgstr "Longueur (mm)"
-#: models.py:59
+#: models.py:60
msgid "Width (mm)"
msgstr "Largeur (mm)"
-#: models.py:60
+#: models.py:61
msgid "Height (mm)"
msgstr "Hauteur (mm)"
-#: models.py:61
+#: models.py:62
msgid "Volume (l)"
msgstr "Volume (l)"
-#: models.py:66
+#: models.py:67
msgid "Container types"
msgstr "Types de contenant"
-#: models.py:74
+#: models.py:76
msgid "Container ref."
msgstr "Réf. du contenant"
-#: models.py:79
+#: models.py:81
msgid "Containers"
msgstr "Contenants"
diff --git a/translations/fr/ishtar_common.po b/translations/fr/ishtar_common.po
index 9473fecad..6c05e723b 100644
--- a/translations/fr/ishtar_common.po
+++ b/translations/fr/ishtar_common.po
@@ -10,12 +10,12 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Transfer-Encoding: 8bit\n"
"Content-Type: text/plain; charset=UTF-8\n"
-"PO-Revision-Date: 2016-04-07 09:17-0400\n"
+"PO-Revision-Date: 2016-06-08 12:25-0400\n"
"Last-Translator: Étienne Loks <etienne.loks@iggdrasil.net>\n"
"Language-Team: \n"
"Language: fr\n"
"Plural-Forms: nplurals=2; plural=n>1;\n"
-"X-Generator: Zanata 3.8.2\n"
+"X-Generator: Zanata 3.8.4\n"
#: __init__.py:8
msgid "username"
@@ -33,7 +33,7 @@ msgstr "Élément associé"
msgid "Archaeological file"
msgstr "Dossier"
-#: context_processors.py:38 models.py:1281
+#: context_processors.py:38 models.py:1322
msgid "Operation"
msgstr "Opération"
@@ -185,12 +185,12 @@ msgstr "Vous devez sélectionner un élément."
msgid "Add a new item"
msgstr "Ajouter un nouvel élément"
-#: forms.py:171 models.py:1058
+#: forms.py:174 models.py:1099
msgid "Template"
msgstr "Patron"
#: forms_common.py:39 forms_common.py:57 forms_common.py:169
-#: forms_common.py:289 models.py:1124 models.py:2377
+#: forms_common.py:289 models.py:1165 models.py:2420
#: templates/blocks/JQueryAdvancedTown.html:19
#: templates/ishtar/sheet_organization.html:17
msgid "Town"
@@ -214,110 +214,110 @@ msgstr ""
"<p class='example'>Par exemple tapez « saint denis 93 » pour obtenir la "
"commune Saint-Denis dans le département français de Seine-Saint-Denis.</p>"
-#: forms_common.py:66 forms_common.py:669 ishtar_menu.py:42 models.py:1279
-#: models.py:2076 models.py:2205 models.py:2259
-#: templates/ishtar/sheet_person.html:6
+#: forms_common.py:66 forms_common.py:669 ishtar_menu.py:42 models.py:1320
+#: models.py:2119 models.py:2248 models.py:2302
+#: templates/ishtar/sheet_person.html:4
msgid "Person"
msgstr "Personne"
-#: forms_common.py:157 forms_common.py:231 ishtar_menu.py:66 models.py:1280
-#: models.py:1995 templates/ishtar/sheet_organization.html:6
+#: forms_common.py:157 forms_common.py:231 ishtar_menu.py:66 models.py:1321
+#: models.py:2036 templates/ishtar/sheet_organization.html:6
msgid "Organization"
msgstr "Organisation"
#: forms_common.py:160 forms_common.py:196 forms_common.py:226
-#: forms_common.py:259 models.py:775 models.py:1057 models.py:1325
-#: models.py:1543 models.py:1989 models.py:2063 models.py:2363
+#: forms_common.py:259 models.py:812 models.py:1098 models.py:1366
+#: models.py:1584 models.py:2030 models.py:2106 models.py:2406
#: templates/ishtar/sheet_organization.html:12
#: templates/ishtar/sheet_organization.html:25
msgid "Name"
msgstr "Nom"
-#: forms_common.py:161 models.py:1266 models.py:1674
+#: forms_common.py:161 models.py:1307 models.py:1715
msgid "Organization type"
msgstr "Type d'organisation"
-#: forms_common.py:163 forms_common.py:283 models.py:1119
+#: forms_common.py:163 forms_common.py:283 models.py:1160
#: templates/ishtar/sheet_organization.html:14
msgid "Address"
msgstr "Adresse"
-#: forms_common.py:165 forms_common.py:286 models.py:1120
+#: forms_common.py:165 forms_common.py:286 models.py:1161
#: templates/ishtar/sheet_organization.html:15
msgid "Address complement"
msgstr "Complément d'adresse"
-#: forms_common.py:167 forms_common.py:287 models.py:1122
+#: forms_common.py:167 forms_common.py:287 models.py:1163
#: templates/ishtar/sheet_organization.html:16
msgid "Postal code"
msgstr "Code postal"
-#: forms_common.py:170 forms_common.py:290 models.py:1125
+#: forms_common.py:170 forms_common.py:290 models.py:1166
msgid "Country"
msgstr "Pays"
#: forms_common.py:172 forms_common.py:228 forms_common.py:263
-#: forms_common.py:397 models.py:1152
+#: forms_common.py:397 models.py:1193
msgid "Email"
msgstr "Courriel"
-#: forms_common.py:173 forms_common.py:266 models.py:1137
+#: forms_common.py:173 forms_common.py:266 models.py:1178
#: templates/ishtar/sheet_organization.html:18
-#: templates/ishtar/sheet_person.html:23
+#: templates/ishtar/sheet_person.html:19
#: templates/ishtar/wizard/wizard_person.html:17
msgid "Phone"
msgstr "Téléphone"
-#: forms_common.py:174 forms_common.py:275 models.py:1149
+#: forms_common.py:174 forms_common.py:275 models.py:1190
#: templates/ishtar/sheet_organization.html:19
-#: templates/ishtar/sheet_person.html:41
+#: templates/ishtar/sheet_person.html:37
#: templates/ishtar/wizard/wizard_person.html:35
msgid "Mobile phone"
msgstr "Téléphone portable"
-#: forms_common.py:197 forms_common.py:229 models.py:1700 models.py:1991
-#: models.py:2300 templates/sheet_ope.html:85 templates/sheet_ope.html.py:105
+#: forms_common.py:197 forms_common.py:229 models.py:1741 models.py:2032
+#: models.py:2343 templates/sheet_ope.html:85 templates/sheet_ope.html.py:105
#: templates/sheet_ope.html:126 templates/ishtar/import_list.html:13
#: templates/ishtar/sheet_organization.html:27
-#: templates/ishtar/sheet_person.html:95
+#: templates/ishtar/sheet_person.html:91
#: templates/ishtar/blocks/window_tables/documents.html:6
msgid "Type"
msgstr "Type"
-#: forms_common.py:206 views.py:114
+#: forms_common.py:206 views.py:128
msgid "Organization search"
msgstr "Recherche d'organisations"
-#: forms_common.py:227 forms_common.py:257 models.py:2061
+#: forms_common.py:227 forms_common.py:257 models.py:2104
#: templates/ishtar/sheet_organization.html:26
msgid "Surname"
msgstr "Prénom"
-#: forms_common.py:243 views.py:88
+#: forms_common.py:243 views.py:93
msgid "Person search"
msgstr "Recherche de personnes"
-#: forms_common.py:254 templates/ishtar/sheet_person.html:12
+#: forms_common.py:254 templates/ishtar/sheet_person.html:8
#: templates/ishtar/wizard/wizard_person.html:6
msgid "Identity"
msgstr "Identité"
-#: forms_common.py:256 forms_common.py:595 forms_common.py:636 models.py:2059
-#: models.py:2297 templates/sheet_ope.html:104
-#: templates/ishtar/sheet_person.html:94
+#: forms_common.py:256 forms_common.py:595 forms_common.py:636 models.py:2102
+#: models.py:2340 templates/sheet_ope.html:104
+#: templates/ishtar/sheet_person.html:90
#: templates/ishtar/blocks/window_tables/documents.html:5
msgid "Title"
msgstr "Titre"
-#: forms_common.py:261 models.py:2065
+#: forms_common.py:261 models.py:2108
msgid "Raw name"
msgstr "Nom brut"
-#: forms_common.py:264 models.py:1138
+#: forms_common.py:264 models.py:1179
msgid "Phone description"
msgstr "Type de téléphone"
-#: forms_common.py:267 models.py:1140 models.py:1142
+#: forms_common.py:267 models.py:1181 models.py:1183
msgid "Phone description 2"
msgstr "Type de téléphone 2"
@@ -325,11 +325,11 @@ msgstr "Type de téléphone 2"
msgid "Phone 2"
msgstr "Téléphone 2"
-#: forms_common.py:271 models.py:1146
+#: forms_common.py:271 models.py:1187
msgid "Phone description 3"
msgstr "Type de téléphone 3"
-#: forms_common.py:273 models.py:1144
+#: forms_common.py:273 models.py:1185
msgid "Phone 3"
msgstr "Téléphone 3"
@@ -337,27 +337,27 @@ msgstr "Téléphone 3"
msgid "Current organization"
msgstr "Organisation actuelle"
-#: forms_common.py:292 models.py:1127
+#: forms_common.py:292 models.py:1168
msgid "Other address: address"
msgstr "Autre adresse : adresse"
-#: forms_common.py:295 models.py:1130
+#: forms_common.py:295 models.py:1171
msgid "Other address: address complement"
msgstr "Autre adresse : complément d'adresse"
-#: forms_common.py:297 models.py:1131
+#: forms_common.py:297 models.py:1172
msgid "Other address: postal code"
msgstr "Autre adresse : code postal"
-#: forms_common.py:299 models.py:1133
+#: forms_common.py:299 models.py:1174
msgid "Other address: town"
msgstr "Autre adresse : ville"
-#: forms_common.py:301 models.py:1135
+#: forms_common.py:301 models.py:1176
msgid "Other address: country"
msgstr "Autre adresse : pays"
-#: forms_common.py:346 forms_common.py:376 forms_common.py:380 models.py:2043
+#: forms_common.py:346 forms_common.py:376 forms_common.py:380 models.py:2084
msgid "Person type"
msgstr "Type de personne"
@@ -389,7 +389,7 @@ msgstr "Ce nom d'utilisateur existe déjà."
msgid "Send the new password by email?"
msgstr "Envoyer le nouveau mot de passe par courriel ?"
-#: forms_common.py:451 forms_common.py:464 models.py:2378
+#: forms_common.py:451 forms_common.py:464 models.py:2421
msgid "Towns"
msgstr "Communes"
@@ -405,7 +405,7 @@ msgstr "Seul un choix peut être coché."
msgid "Documentation informations"
msgstr "Information sur le document"
-#: forms_common.py:597 forms_common.py:637 models.py:1675 models.py:2280
+#: forms_common.py:597 forms_common.py:637 models.py:1716 models.py:2323
msgid "Source type"
msgstr "Type de document"
@@ -417,41 +417,41 @@ msgstr "Référence"
msgid "Internal reference"
msgstr "Référence interne"
-#: forms_common.py:605 models.py:2311
+#: forms_common.py:605 models.py:2354
msgid "Numerical ressource (web address)"
msgstr "Ressource numérique (adresse web)"
-#: forms_common.py:606 models.py:2313
+#: forms_common.py:606 models.py:2356
msgid "Receipt date"
msgstr "Date de réception"
-#: forms_common.py:608 models.py:1827 models.py:2315
+#: forms_common.py:608 models.py:1868 models.py:2358
msgid "Creation date"
msgstr "Date de création"
-#: forms_common.py:611 models.py:2318
+#: forms_common.py:611 models.py:2361
msgid "Receipt date in documentation"
msgstr "Date de réception en documentation"
-#: forms_common.py:613 forms_common.py:641 models.py:277 models.py:1570
-#: models.py:2069 models.py:2325
+#: forms_common.py:613 forms_common.py:641 models.py:282 models.py:490
+#: models.py:1611 models.py:2112 models.py:2368
msgid "Comment"
msgstr "Commentaire"
-#: forms_common.py:615 forms_common.py:640 models.py:777 models.py:1329
-#: models.py:1502 models.py:1544 models.py:2324 templates/sheet_ope.html:128
+#: forms_common.py:615 forms_common.py:640 models.py:814 models.py:1370
+#: models.py:1543 models.py:1585 models.py:2367 templates/sheet_ope.html:128
msgid "Description"
msgstr "Description"
-#: forms_common.py:618 models.py:2326
+#: forms_common.py:618 models.py:2369
msgid "Additional information"
msgstr "Informations supplémentaires"
-#: forms_common.py:620 forms_common.py:644 models.py:2328
+#: forms_common.py:620 forms_common.py:644 models.py:2371
msgid "Has a duplicate"
msgstr "Existe en doublon"
-#: forms_common.py:633 forms_common.py:662 forms_common.py:695 models.py:2264
+#: forms_common.py:633 forms_common.py:662 forms_common.py:695 models.py:2307
#: templates/ishtar/wizard/wizard_person_deletion.html:124
msgid "Author"
msgstr "Auteur"
@@ -464,7 +464,7 @@ msgstr "Informations complémentaires"
msgid "Would you like to delete this documentation?"
msgstr "Voulez-vous supprimer ce document ?"
-#: forms_common.py:670 models.py:1676 models.py:2254 models.py:2261
+#: forms_common.py:670 models.py:1717 models.py:2297 models.py:2304
msgid "Author type"
msgstr "Type d'auteur"
@@ -476,7 +476,7 @@ msgstr "Sélection d'auteur"
msgid "There are identical authors."
msgstr "Il y a des auteurs identiques."
-#: forms_common.py:706 models.py:2265 models.py:2307
+#: forms_common.py:706 models.py:2308 models.py:2350
#: templates/sheet_ope.html:106
#: templates/ishtar/blocks/window_tables/documents.html:7
msgid "Authors"
@@ -486,11 +486,11 @@ msgstr "Auteurs"
msgid "Administration"
msgstr "Administration"
-#: ishtar_menu.py:31 views.py:140
+#: ishtar_menu.py:31 views.py:154
msgid "Account management"
msgstr "Gestion des comptes"
-#: ishtar_menu.py:34 models.py:853 views.py:1120
+#: ishtar_menu.py:34 models.py:894 views.py:1140
msgid "Global variables"
msgstr "Variables globales"
@@ -514,19 +514,20 @@ msgstr "Modification"
msgid "Merge"
msgstr "Fusion"
-#: ishtar_menu.py:61 ishtar_menu.py:88 models.py:1864 widgets.py:110
+#: ishtar_menu.py:61 ishtar_menu.py:88 models.py:1905 widgets.py:110
+#: templates/ishtar/form_delete.html:11
msgid "Delete"
msgstr "Suppression"
-#: ishtar_menu.py:96 models.py:1838
+#: ishtar_menu.py:96 models.py:1879
msgid "Imports"
msgstr "Imports"
-#: ishtar_menu.py:99 views.py:1128
+#: ishtar_menu.py:99 views.py:1148
msgid "New import"
msgstr "Nouvel import"
-#: ishtar_menu.py:103 views.py:1142
+#: ishtar_menu.py:103 views.py:1162
msgid "Current imports"
msgstr "Imports en cours"
@@ -546,682 +547,694 @@ msgstr "Un élément sélectionné n'est pas valide."
msgid "This item already exists."
msgstr "Cet élément existe déjà."
-#: models.py:273 models.py:1092 models.py:1104
+#: models.py:278 models.py:489 models.py:1133 models.py:1145
msgid "Label"
msgstr "Libellé"
-#: models.py:275
+#: models.py:280
msgid "Textual ID"
msgstr "Identifiant textuel"
-#: models.py:278 models.py:1061
+#: models.py:283 models.py:492 models.py:1102
msgid "Available"
msgstr "Disponible"
-#: models.py:479 models.py:1616
+#: models.py:511 models.py:1657
msgid "Key"
msgstr "Clé"
-#: models.py:485
+#: models.py:517
msgid "Specific key to an import"
msgstr "Clé spécifique à un import"
-#: models.py:556
+#: models.py:593
msgid "Last editor"
msgstr "Dernier éditeur"
-#: models.py:559
+#: models.py:596
msgid "Creator"
msgstr "Créateur"
-#: models.py:692 models.py:2389
+#: models.py:729 models.py:2432
msgid "Order"
msgstr "Ordre"
-#: models.py:693
+#: models.py:730
msgid "Symmetrical"
msgstr "Symétrique"
-#: models.py:706
+#: models.py:743
msgid "Cannot have symmetrical and an inverse_relation"
msgstr "Ne peut pas être symétrique et avoir une relation inverse"
-#: models.py:776 models.py:1327
+#: models.py:813 models.py:1368
msgid "Slug"
msgstr "Identifiant texte"
-#: models.py:778
+#: models.py:815
msgid "Files module"
msgstr "Module Dossiers"
-#: models.py:779
+#: models.py:816
msgid "Context records module"
msgstr "Module Unités d'Enregistrement"
-#: models.py:781
+#: models.py:818
msgid "Finds module"
msgstr "Module Mobilier"
-#: models.py:782
+#: models.py:819
msgid "Need context records module"
msgstr "Nécessite le module Unités d'Enregistrement"
-#: models.py:784
+#: models.py:821
msgid "Warehouses module"
msgstr "Module Dépôts"
-#: models.py:785
+#: models.py:822
msgid "Need finds module"
msgstr "Nécessite le module mobilier"
-#: models.py:786
+#: models.py:824
+msgid "Home page"
+msgstr "Page d'accueil"
+
+#: models.py:825
+msgid ""
+"Homepage of Ishtar - if not defined a default homepage will appear. Use the "
+"markdown syntax."
+msgstr ""
+"Page d'accueil d'Ishtar. Si elle n'est pas définie une page d'accueil par "
+"défaut va apparaître. Utiliser la syntaxe Markdown."
+
+#: models.py:827
msgid "Current active"
msgstr "Actuellement utilisé"
-#: models.py:789
+#: models.py:830
msgid "Ishtar site profile"
msgstr "Profil d'instance Ishtar"
-#: models.py:790
+#: models.py:831
msgid "Ishtar site profiles"
msgstr "Profils d'instance Ishtar"
-#: models.py:846
+#: models.py:887
msgid "Variable name"
msgstr "Nom de la variable"
-#: models.py:847
+#: models.py:888
msgid "Description of the variable"
msgstr "Description de la variable"
-#: models.py:849 models.py:1617
+#: models.py:890 models.py:1658
msgid "Value"
msgstr "Valeur"
-#: models.py:852
+#: models.py:893
msgid "Global variable"
msgstr "Variable globale"
-#: models.py:962 models.py:992
+#: models.py:1003 models.py:1033
msgid "Total"
msgstr "Total"
-#: models.py:969 models.py:1093 models.py:1105
-#: templates/ishtar/sheet_person.html:26
+#: models.py:1010 models.py:1134 models.py:1146
+#: templates/ishtar/sheet_person.html:22
#: templates/ishtar/dashboards/dashboard_main_detail.html:135
#: templates/ishtar/dashboards/dashboard_main_detail_users.html:26
#: templates/ishtar/wizard/wizard_person.html:20
msgid "Number"
msgstr "Nombre"
-#: models.py:1056
+#: models.py:1097
msgid "Administrative Act"
msgstr "Acte administratif"
-#: models.py:1060
+#: models.py:1101
msgid "Associated object"
msgstr "Objet associé"
-#: models.py:1064
+#: models.py:1105
msgid "Document template"
msgstr "Patron de document"
-#: models.py:1065
+#: models.py:1106
msgid "Document templates"
msgstr "Patrons de documents"
-#: models.py:1096 models.py:1106 models.py:1822
+#: models.py:1137 models.py:1147 models.py:1863
msgid "State"
msgstr "État"
-#: models.py:1110 templates/blocks/JQueryAdvancedTown.html:12
+#: models.py:1151 templates/blocks/JQueryAdvancedTown.html:12
msgid "Department"
msgstr "Département"
-#: models.py:1111
+#: models.py:1152
msgid "Departments"
msgstr "Départements"
-#: models.py:1148
+#: models.py:1189
msgid "Raw phone"
msgstr "Téléphone brut"
-#: models.py:1154
+#: models.py:1195
msgid "Alternative address is prefered"
msgstr "L'adresse alternative est préférée"
-#: models.py:1193
+#: models.py:1234
msgid "Tel: "
msgstr "Tél :"
-#: models.py:1197
+#: models.py:1238
msgid "Mobile: "
msgstr "Mobile :"
-#: models.py:1201
+#: models.py:1242
msgid "Email: "
msgstr "Courriel :"
-#: models.py:1206
+#: models.py:1247
msgid "Merge key"
msgstr "Clé de fusion"
-#: models.py:1267
+#: models.py:1308
msgid "Organization types"
msgstr "Types d'organisation"
-#: models.py:1283
+#: models.py:1324
msgid "Archaeological site"
msgstr "Entité Archéologique"
-#: models.py:1284
+#: models.py:1325
msgid "Parcels"
msgstr "Parcelles"
-#: models.py:1286
+#: models.py:1327
msgid "Operation source"
msgstr "Documentation de l'opération"
-#: models.py:1289 views.py:945 views.py:996
+#: models.py:1330 views.py:965 views.py:1016
msgid "Archaeological files"
msgstr "Dossiers archéologiques"
-#: models.py:1291 views.py:948 views.py:1004
+#: models.py:1332 views.py:968 views.py:1024
msgid "Context records"
msgstr "Unités d'Enregistrement"
-#: models.py:1293
+#: models.py:1334
msgid "Context record relations"
msgstr "Relations entre Unités d'Enregistrement"
-#: models.py:1295 views.py:950 views.py:1007
+#: models.py:1336 views.py:970 views.py:1027
msgid "Finds"
msgstr "Mobilier"
-#: models.py:1331 templates/ishtar/dashboards/dashboard_main.html:26
+#: models.py:1372 templates/ishtar/dashboards/dashboard_main.html:26
msgid "Users"
msgstr "Utilisateurs"
-#: models.py:1333
+#: models.py:1374
msgid "Associated model"
msgstr "Modèle associé"
-#: models.py:1336
+#: models.py:1377
msgid "Is template"
msgstr "Est un patron"
-#: models.py:1337
+#: models.py:1378
msgid "Unicity keys (separator \";\")"
msgstr "Clés d'unicité (séparateur « ; »)"
-#: models.py:1341
+#: models.py:1382
msgid "Importer - Type"
msgstr "Importeur - Type"
-#: models.py:1342
+#: models.py:1383
msgid "Importer - Types"
msgstr "Importeur - Types"
-#: models.py:1432
+#: models.py:1473
msgid "Importer - Default"
msgstr "Importeur - Par défaut"
-#: models.py:1433
+#: models.py:1474
msgid "Importer - Defaults"
msgstr "Importeur - Par défaut"
-#: models.py:1468
+#: models.py:1509
msgid "Importer - Default value"
msgstr "Importeur - Valeur par défaut"
-#: models.py:1469
+#: models.py:1510
msgid "Importer - Default values"
msgstr "Importeur - Valeurs par défaut"
-#: models.py:1501
+#: models.py:1542
msgid "Column number"
msgstr "Numéro de colonne"
-#: models.py:1504
+#: models.py:1545
msgid "Required"
msgstr "Requis"
-#: models.py:1507
+#: models.py:1548
msgid "Importer - Column"
msgstr "Importeur - Colonne"
-#: models.py:1508
+#: models.py:1549
msgid "Importer - Columns"
msgstr "Importeur - Colonnes"
-#: models.py:1528
+#: models.py:1569
msgid "Field name"
msgstr "Nom du champ"
-#: models.py:1530 models.py:1564
+#: models.py:1571 models.py:1605
msgid "Force creation of new items"
msgstr "Forcer la création de nouveaux éléments"
-#: models.py:1532 models.py:1566
+#: models.py:1573 models.py:1607
msgid "Concatenate with existing"
msgstr "Concaténer avec l'existant"
-#: models.py:1534 models.py:1568
+#: models.py:1575 models.py:1609
msgid "Concatenate character"
msgstr "Caractère de concaténation"
-#: models.py:1538
+#: models.py:1579
msgid "Importer - Duplicate field"
msgstr "Importeur - Champ dupliqué"
-#: models.py:1539
+#: models.py:1580
msgid "Importer - Duplicate fields"
msgstr "Importeur - Champs dupliqués"
-#: models.py:1546
+#: models.py:1587
msgid "Regular expression"
msgstr "Expression régulière"
-#: models.py:1549
+#: models.py:1590
msgid "Importer - Regular expression"
msgstr "Importeur - Expression régulière"
-#: models.py:1550
+#: models.py:1591
msgid "Importer - Regular expressions"
msgstr "Importeur - Expressions régulières"
-#: models.py:1573
+#: models.py:1614
msgid "Importer - Target"
msgstr "Importeur - Cible"
-#: models.py:1574
+#: models.py:1615
msgid "Importer - Targets"
msgstr "Importeur - Cibles"
-#: models.py:1598 views.py:311
+#: models.py:1639 views.py:325
msgid "True"
msgstr "Oui"
-#: models.py:1599 views.py:313
+#: models.py:1640 views.py:327
msgid "False"
msgstr "Non"
-#: models.py:1618
+#: models.py:1659
msgid "Is set"
msgstr "Est défini"
-#: models.py:1625
+#: models.py:1666
msgid "Importer - Target key"
msgstr "Importeur - Rapprochement"
-#: models.py:1626
+#: models.py:1667
msgid "Importer - Targets keys"
msgstr "Importeur - Rapprochements"
-#: models.py:1677 models.py:2292 models.py:2303
+#: models.py:1718 models.py:2335 models.py:2346
msgid "Format"
msgstr "Format"
-#: models.py:1678 models.py:2393
+#: models.py:1719 models.py:2436
msgid "Operation type"
msgstr "Type d'opération"
-#: models.py:1679
+#: models.py:1720
msgid "Period"
msgstr "Périodes"
-#: models.py:1680
+#: models.py:1721
msgid "Unit"
msgstr "Unité"
-#: models.py:1681
+#: models.py:1722
msgid "Material"
msgstr "Matériau"
-#: models.py:1683
+#: models.py:1724
msgid "Conservatory state"
msgstr "État de conservation"
-#: models.py:1684
+#: models.py:1725
msgid "Preservation type"
msgstr "Type de conservation"
-#: models.py:1685
+#: models.py:1726
msgid "Object type"
msgstr "Type d'objet"
-#: models.py:1687
+#: models.py:1728
msgid "Identification type"
msgstr "Type d'identification"
-#: models.py:1689
+#: models.py:1730
msgid "Context record relation type"
msgstr "Type de relations entre Unités d'Enregistrement"
-#: models.py:1690 models.py:2286
+#: models.py:1731 models.py:2329
msgid "Support type"
msgstr "Type de support"
-#: models.py:1696
+#: models.py:1737
msgid "Integer"
msgstr "Entier"
-#: models.py:1697
+#: models.py:1738
msgid "Float"
msgstr "Nombre à virgule"
-#: models.py:1698
+#: models.py:1739
msgid "String"
msgstr "Chaîne de caractères"
-#: models.py:1699 templates/sheet_ope.html:86
+#: models.py:1740 templates/sheet_ope.html:86
msgid "Date"
msgstr "Date"
-#: models.py:1701 templates/sheet_ope.html:61 templates/sheet_ope.html.py:83
-#: templates/ishtar/sheet_person.html:93
+#: models.py:1742 templates/sheet_ope.html:61 templates/sheet_ope.html.py:83
+#: templates/ishtar/sheet_person.html:89
#: templates/ishtar/dashboards/dashboard_main_detail.html:120
msgid "Year"
msgstr "Année"
-#: models.py:1702
+#: models.py:1743
msgid "String to boolean"
msgstr "Chaîne de caractères vers booléen"
-#: models.py:1703
+#: models.py:1744
msgctxt "filesystem"
msgid "File"
msgstr "Fichier"
-#: models.py:1704
+#: models.py:1745
msgid "Unknow type"
msgstr "Type inconnu"
-#: models.py:1720
+#: models.py:1761
msgid "4 digit year. e.g.: \"2015\""
msgstr "Année sur 4 chiffres. Exemple : « 2015 »"
-#: models.py:1721
+#: models.py:1762
msgid "4 digit year/month/day. e.g.: \"2015/02/04\""
msgstr "Année sur 4 chiffres/mois/jour. Exemple : « 2015/02/04 »"
-#: models.py:1722
+#: models.py:1763
msgid "Day/month/4 digit year. e.g.: \"04/02/2015\""
msgstr "Jour/mois/année sur 4 chiffres. Exemple : « 04/02/2015 »"
-#: models.py:1732
+#: models.py:1773
msgid "Options"
msgstr "Options"
-#: models.py:1734
+#: models.py:1775
msgid "Split character(s)"
msgstr "Caractère(s) de séparation"
-#: models.py:1738
+#: models.py:1779
msgid "Importer - Formater type"
msgstr "Importeur - Type de mise en forme"
-#: models.py:1739
+#: models.py:1780
msgid "Importer - Formater types"
msgstr "Importeur - Types de mise en forme"
-#: models.py:1786 templates/ishtar/dashboards/dashboard_main_detail.html:61
+#: models.py:1827 templates/ishtar/dashboards/dashboard_main_detail.html:61
msgid "Created"
msgstr "Créé"
-#: models.py:1787
+#: models.py:1828
msgid "Analyse in progress"
msgstr "Analyse en cours"
-#: models.py:1788
+#: models.py:1829
msgid "Analysed"
msgstr "Analysé"
-#: models.py:1789
+#: models.py:1830
msgid "Import pending"
msgstr "Import en attente"
-#: models.py:1790
+#: models.py:1831
msgid "Import in progress"
msgstr "Import en cours"
-#: models.py:1791
+#: models.py:1832
msgid "Finished with errors"
msgstr "Terminé avec des erreurs"
-#: models.py:1792
+#: models.py:1833
msgid "Finished"
msgstr "Terminé"
-#: models.py:1793
+#: models.py:1834
msgid "Archived"
msgstr "Archivé"
-#: models.py:1805
+#: models.py:1846
msgid "Imported file"
msgstr "Fichier importé"
-#: models.py:1808
+#: models.py:1849
msgid "Associated images (zip file)"
msgstr "Images associées (fichier zip)"
-#: models.py:1810
+#: models.py:1851
msgid "Encoding"
msgstr "Codage"
-#: models.py:1812
+#: models.py:1853
msgid "Skip lines"
msgstr "Nombre de lignes d'entête"
-#: models.py:1813 templates/ishtar/import_list.html:47
+#: models.py:1854 templates/ishtar/import_list.html:47
msgid "Error file"
msgstr "Fichier erreur"
-#: models.py:1816
+#: models.py:1857
msgid "Result file"
msgstr "Fichier résultant"
-#: models.py:1819 templates/ishtar/import_list.html:53
+#: models.py:1860 templates/ishtar/import_list.html:53
msgid "Match file"
msgstr "Fichier de correspondance"
-#: models.py:1825
+#: models.py:1866
msgid "Conservative import"
msgstr "Import conservateur"
-#: models.py:1830
+#: models.py:1871
msgid "End date"
msgstr "Date de fin"
-#: models.py:1832
+#: models.py:1873
msgid "Remaining seconds"
msgstr "Secondes restantes"
-#: models.py:1837
+#: models.py:1878
msgid "Import"
msgstr "Import"
-#: models.py:1854
+#: models.py:1895
msgid "Analyse"
msgstr "Analyser"
-#: models.py:1856 models.py:1859
+#: models.py:1897 models.py:1900
msgid "Re-analyse"
msgstr "Analyser de nouveau "
-#: models.py:1857
+#: models.py:1898
msgid "Launch import"
msgstr "Lancer l'import"
-#: models.py:1860
+#: models.py:1901
msgid "Re-import"
msgstr "Ré-importer"
-#: models.py:1861
+#: models.py:1902
msgid "Archive"
msgstr "Archiver"
-#: models.py:1863
+#: models.py:1904
msgid "Unarchive"
msgstr "Désarchiver"
-#: models.py:1996
+#: models.py:2037
msgid "Organizations"
msgstr "Organisations"
-#: models.py:1998
+#: models.py:2039
msgid "Can view all Organizations"
msgstr "Peut voir toutes les Organisations"
-#: models.py:1999
+#: models.py:2040
msgid "Can view own Organization"
msgstr "Peut voir sa propre Organisation"
-#: models.py:2000
+#: models.py:2041
msgid "Can add own Organization"
msgstr "Peut ajouter sa propre Organisation"
-#: models.py:2002
+#: models.py:2043
msgid "Can change own Organization"
msgstr "Peut modifier sa propre Organisation"
-#: models.py:2004
+#: models.py:2045
msgid "Can delete own Organization"
msgstr "Peut supprimer sa propre Organisation"
-#: models.py:2039
+#: models.py:2080
msgid "Groups"
msgstr "Groupes"
-#: models.py:2044
+#: models.py:2085
msgid "Person types"
msgstr "Types d'individu"
-#: models.py:2051
+#: models.py:2092
msgid "Mr"
msgstr "M."
-#: models.py:2052
+#: models.py:2093
msgid "Miss"
msgstr "Mlle"
-#: models.py:2053
+#: models.py:2094
msgid "Mr and Mrs"
msgstr "M. et Mme"
-#: models.py:2054
+#: models.py:2095
msgid "Mrs"
msgstr "Mme"
-#: models.py:2055
+#: models.py:2096
msgid "Doctor"
msgstr "Dr."
-#: models.py:2067
+#: models.py:2110
msgid "Contact type"
msgstr "Type de contact"
-#: models.py:2070 models.py:2117
+#: models.py:2113 models.py:2160
msgid "Types"
msgstr "Types"
-#: models.py:2073
+#: models.py:2116
msgid "Is attached to"
msgstr "Est rattaché à"
-#: models.py:2077
+#: models.py:2120
msgid "Persons"
msgstr "Personnes"
-#: models.py:2079
+#: models.py:2122
msgid "Can view all Persons"
msgstr "Peut voir toutes les Personnes"
-#: models.py:2080
+#: models.py:2123
msgid "Can view own Person"
msgstr "Peut voir sa propre Personne"
-#: models.py:2081
+#: models.py:2124
msgid "Can add own Person"
msgstr "Peut ajouter sa propre Personne"
-#: models.py:2082
+#: models.py:2125
msgid "Can change own Person"
msgstr "Peut modifier sa propre Personne"
-#: models.py:2083
+#: models.py:2126
msgid "Can delete own Person"
msgstr "Peut supprimer sa propre Personne"
-#: models.py:2209
+#: models.py:2252
msgid "Ishtar user"
msgstr "Utilisateur d'Ishtar"
-#: models.py:2210
+#: models.py:2253
msgid "Ishtar users"
msgstr "Utilisateurs d'Ishtar"
-#: models.py:2255
+#: models.py:2298
msgid "Author types"
msgstr "Types d'auteur"
-#: models.py:2281
+#: models.py:2324
msgid "Source types"
msgstr "Types de document"
-#: models.py:2287
+#: models.py:2330
msgid "Support types"
msgstr "Types de support"
-#: models.py:2293
+#: models.py:2336
msgid "Formats"
msgstr "Formats"
-#: models.py:2298
+#: models.py:2341
msgid "External ID"
msgstr "Identifiant externe"
-#: models.py:2301
+#: models.py:2344
msgid "Support"
msgstr "Support"
-#: models.py:2305
+#: models.py:2348
msgid "Scale"
msgstr "Échelle"
-#: models.py:2319
+#: models.py:2362
msgid "Item number"
msgstr "Numéro d'élément"
-#: models.py:2320
+#: models.py:2363
msgid "Ref."
msgstr "Réf."
-#: models.py:2323
+#: models.py:2366
msgid "Internal ref."
msgstr "Réf. interne"
-#: models.py:2364
+#: models.py:2407
msgid "Surface (m2)"
msgstr "Surface (m2)"
-#: models.py:2365 templates/sheet_ope.html:46 templates/sheet_ope.html.py:107
+#: models.py:2408 templates/sheet_ope.html:46 templates/sheet_ope.html.py:107
msgid "Localisation"
msgstr "Localisation"
-#: models.py:2390
+#: models.py:2433
msgid "Is preventive"
msgstr "Est du préventif"
-#: models.py:2394
+#: models.py:2437
msgid "Operation types"
msgstr "Types d'opération"
-#: models.py:2420
+#: models.py:2463
msgid "Preventive"
msgstr "Préventif"
-#: models.py:2421
+#: models.py:2464
msgid "Research"
msgstr "Programmé"
@@ -1229,58 +1242,58 @@ msgstr "Programmé"
msgid " (...)"
msgstr " (...)"
-#: views.py:95
+#: views.py:100
msgid "New person"
msgstr "Nouvelle personne"
-#: views.py:103
+#: views.py:108
msgid "Person modification"
msgstr "Modification d'une personne"
-#: views.py:109
+#: views.py:123
msgid "Person deletion"
msgstr "Suppression de personne"
-#: views.py:120
+#: views.py:134
msgid "New organization"
msgstr "Nouvelle organisation"
-#: views.py:127
+#: views.py:141
msgid "Organization modification"
msgstr "Modification d'une organisation"
-#: views.py:133
+#: views.py:147
msgid "Organization deletion"
msgstr "Suppression d'une organisation"
-#: views.py:642 templates/base.html:80
+#: views.py:662 templates/base.html:81 templates/ishtar/basket_list.html:4
#: templates/ishtar/sheet_organization.html:35
-#: templatetags/link_to_window.py:16
+#: templatetags/link_to_window.py:18
msgid "Details"
msgstr "Détails"
-#: views.py:873 views.py:927
+#: views.py:893 views.py:947
msgid "Operation not permitted."
msgstr "Opération non permise."
-#: views.py:875
+#: views.py:895
#, python-format
msgid "New %s"
msgstr "Nouveau %s"
-#: views.py:946 views.py:1000
+#: views.py:966 views.py:1020
msgid "Operations"
msgstr "Opérations"
-#: views.py:1189 templates/ishtar/import_list.html:43
+#: views.py:1209 templates/ishtar/import_list.html:43
msgid "Link unmatched items"
msgstr "Associer les éléments non rapprochés"
-#: views.py:1204
+#: views.py:1224
msgid "Delete import"
msgstr "Suppression de l'import"
-#: views.py:1263 views.py:1279
+#: views.py:1283 views.py:1299
msgid "Corporation manager"
msgstr "Représentant de la personne morale"
@@ -1288,15 +1301,15 @@ msgstr "Représentant de la personne morale"
msgid "Search..."
msgstr "Recherche..."
-#: widgets.py:602 templatetags/window_tables.py:68
+#: widgets.py:604 templatetags/window_tables.py:71
msgid "No results"
msgstr "Pas de résultats"
-#: widgets.py:603 templatetags/window_tables.py:69
+#: widgets.py:605 templatetags/window_tables.py:72
msgid "Loading..."
msgstr "Chargement..."
-#: widgets.py:604
+#: widgets.py:606
msgid "Remove"
msgstr "Enlever"
@@ -1347,55 +1360,58 @@ msgstr "Merci pour l'intérêt que vous portez au projet."
msgid "The %(app_name)s team"
msgstr "L'équipe %(app_name)s"
-#: templates/base.html:34
+#: templates/base.html:35
msgid "Logged in"
msgstr "Connecté"
-#: templates/base.html:35
+#: templates/base.html:36
msgid "Log out"
msgstr "Déconnexion"
-#: templates/base.html:36
+#: templates/base.html:37
msgid "Change password"
msgstr "Changement de mot de passe"
-#: templates/base.html:38 templates/registration/activate.html:10
+#: templates/base.html:39 templates/registration/activate.html:10
#: templates/registration/login.html:8 templates/registration/login.html:10
#: templates/registration/password_reset_complete.html:8
msgid "Log in"
msgstr "Connexion"
-#: templates/base.html:44
+#: templates/base.html:45
msgid "Lang"
msgstr "Langue"
-#: templates/base.html:44 templates/base.html.py:91
-#: templates/ishtar/blocks/window_field.html:2
-#: templates/ishtar/blocks/window_field_multiple.html:2
-#: templates/ishtar/blocks/window_field_url.html:2
+#: templates/base.html:45 templates/base.html.py:92 templates/welcome.html:7
+#: templates/welcome.html.py:8 templates/welcome.html:9
+#: templates/welcome.html.py:10 templates/ishtar/manage_basket.html:4
+#: templates/ishtar/blocks/window_field.html:1
+#: templates/ishtar/blocks/window_field_detail.html:1
+#: templates/ishtar/blocks/window_field_multiple.html:1
+#: templates/ishtar/blocks/window_field_url.html:1
msgid ":"
msgstr " :"
-#: templates/base.html:69
+#: templates/base.html:70
msgid "Default selected items"
msgstr "Éléments sélectionnés par défaut"
-#: templates/base.html:89
+#: templates/base.html:90
msgid "Current items"
msgstr "Éléments courants"
#: templates/sheet_ope.html:4 templates/ishtar/sheet_organization.html:10
-#: templates/ishtar/sheet_person.html:10 templates/ishtar/sheet_toolbar.html:1
+#: templates/ishtar/sheet_toolbar.html:1
msgid "Export as:"
msgstr "Export en :"
#: templates/sheet_ope.html:4 templates/ishtar/sheet_organization.html:10
-#: templates/ishtar/sheet_person.html:10 templates/ishtar/sheet_toolbar.html:1
+#: templates/ishtar/sheet_toolbar.html:1
msgid "OpenOffice.org file"
msgstr "fichier OpenOffice.org"
#: templates/sheet_ope.html:4 templates/ishtar/sheet_organization.html:10
-#: templates/ishtar/sheet_person.html:10 templates/ishtar/sheet_toolbar.html:1
+#: templates/ishtar/sheet_toolbar.html:1
msgid "PDF file"
msgstr "fichier PDF"
@@ -1583,7 +1599,7 @@ msgstr "Pas d'acte administratif associé à cette opération"
msgid "Documentation"
msgstr "Documentation"
-#: templates/sheet_ope.html:102 templates/ishtar/sheet_person.html:91
+#: templates/sheet_ope.html:102 templates/ishtar/sheet_person.html:87
msgid "Documents"
msgstr "Documents"
@@ -1607,7 +1623,60 @@ msgstr "Chronologie"
msgid "No context record associated to this operation"
msgstr "Pas d'Unité d'Enregistrement associée à cette opération"
+#: templates/welcome.html:4
+msgid ""
+"Welcome in Ishtar, open source software for management and inventory of "
+"archaeological data"
+msgstr ""
+"Bienvenue dans Ishtar, logiciel libre de gestion et d'inventaire en "
+"archéologie"
+
+#: templates/welcome.html:5
+msgid "Some useful links:"
+msgstr "Quelques liens utiles :"
+
+#: templates/welcome.html:7
+msgid "Presentation site and blog"
+msgstr "Site de présentation et blog"
+
+#: templates/welcome.html:7
+msgid "stay tuned with Ishtar news!"
+msgstr "restez à l'écoute des nouvelles concernant Ishtar !"
+
+#: templates/welcome.html:8
+msgid "Admin interface"
+msgstr "Interface d'administration"
+
+#: templates/welcome.html:8
+msgid "for admin only."
+msgstr "Seulement pour les administrateurs."
+
+#: templates/welcome.html:9
+msgid "Forum"
+msgstr "Forum"
+
+#: templates/welcome.html:9
+msgid ""
+"need help? find a new bug? a fantastic feature to propose? Here is the place "
+"to go."
+msgstr ""
+"besoin d'aide ? un nouveau bug à signaler ? une nouvelle fonctionnalité "
+"révolutionnaire à proposer ? C'est là qu'il faut aller."
+
+#: templates/welcome.html:10
+msgid "Source code"
+msgstr "Dépôt de code source"
+
+#: templates/welcome.html:10
+msgid "tickets"
+msgstr "tickets"
+
+#: templates/welcome.html:10
+msgid "where the magic happens."
+msgstr "c'est là que la magie opère."
+
#: templates/window.html:38 templates/blocks/JQueryJqGrid.html:25
+#: templates/ishtar/manage_basket.html:9
msgid "Add"
msgstr "Ajout"
@@ -1644,7 +1713,7 @@ msgstr "simple"
msgid "full"
msgstr "complet"
-#: templates/blocks/JQueryJqGrid.html:95
+#: templates/blocks/JQueryJqGrid.html:96
#: templates/ishtar/blocks/window_tables/dynamic_documents.html:42
msgid "An error as occured during search. Check your query fields."
msgstr ""
@@ -1672,8 +1741,13 @@ msgstr "Afficher/cacher la recherche avancée"
msgid "Help"
msgstr "Aide"
+#: templates/ishtar/basket_list.html:6
+msgid "remove"
+msgstr "supprimer"
+
#: templates/ishtar/form.html:10 templates/ishtar/formset.html:8
#: templates/ishtar/import_list.html:58 templates/ishtar/merge.html:31
+#: templates/ishtar/simple_form.html:7
#: templates/ishtar/wizard/confirm_wizard.html:42
#: templates/ishtar/wizard/default_wizard.html:30
#: templates/ishtar/wizard/search.html:13
@@ -1722,6 +1796,14 @@ msgstr "Fichier source"
msgid "Control file"
msgstr "Fichier de contrôle"
+#: templates/ishtar/manage_basket.html:7
+msgid "Checking \"Select all\" only select the current page."
+msgstr "Cocher « Tout sélectionner », sélectionne seulement la page courante."
+
+#: templates/ishtar/manage_basket.html:10
+msgid "Basket content"
+msgstr "Contenu du panier"
+
#: templates/ishtar/merge.html:7
msgid "Every operation on this form is irreversible"
msgstr "Chaque opération sur ce formulaire est irréversible"
@@ -1753,6 +1835,7 @@ msgstr "N'est pas un doublon"
#: templates/ishtar/organization_form.html:37
#: templates/ishtar/organization_person_form.html:32
#: templates/ishtar/person_form.html:43
+#: templates/ishtar/blocks/modify_toolbar.html:1
msgid "Modify"
msgstr "Modifier"
@@ -1812,49 +1895,49 @@ msgstr "Personnes au sein de l'organisation"
msgid "No person in this organization"
msgstr "Pas de personne au sein de cette organisation"
-#: templates/ishtar/sheet_person.html:25
+#: templates/ishtar/sheet_person.html:21
#: templates/ishtar/wizard/wizard_person.html:19
msgid "Phone type"
msgstr "Type de téléphone"
-#: templates/ishtar/sheet_person.html:48
+#: templates/ishtar/sheet_person.html:44
#: templates/ishtar/wizard/wizard_person.html:42
msgid "Business address"
msgstr "Adresse professionnelle"
-#: templates/ishtar/sheet_person.html:56
+#: templates/ishtar/sheet_person.html:52
#: templates/ishtar/wizard/wizard_person.html:51
msgid "Other address"
msgstr "Autre adresse"
-#: templates/ishtar/sheet_person.html:64
+#: templates/ishtar/sheet_person.html:60
msgid "Associated organization"
msgstr "Organisations associées"
-#: templates/ishtar/sheet_person.html:75
+#: templates/ishtar/sheet_person.html:71
msgid "Associated operations as scientist"
msgstr "Opérations associées en tant que responsable scientifique"
-#: templates/ishtar/sheet_person.html:79
+#: templates/ishtar/sheet_person.html:75
msgid "Associated operations as responsible"
msgstr "Opérations associées en tant que responsable"
-#: templates/ishtar/sheet_person.html:85
+#: templates/ishtar/sheet_person.html:81
msgid "Associated archaelogical files"
msgstr "Dossiers archéologiques associés"
-#: templates/ishtar/sheet_person.html:96
-#: templates/ishtar/sheet_person.html:104
+#: templates/ishtar/sheet_person.html:92
+#: templates/ishtar/sheet_person.html:100
#: templates/ishtar/blocks/window_tables/documents.html:9
#: templates/ishtar/blocks/window_tables/documents.html:17
msgid "Link"
msgstr "Lien"
-#: templates/ishtar/sheet_person.html:108
+#: templates/ishtar/sheet_person.html:104
msgid "No document associated to this person"
msgstr "Pas de document associé à cette personne"
-#: templates/ishtar/blocks/window_field_url.html:3
+#: templates/ishtar/blocks/window_field_url.html:2
msgid "link"
msgstr "lien"
diff --git a/version.py b/version.py
index 347018f69..4e4579b55 100644
--- a/version.py
+++ b/version.py
@@ -1,4 +1,4 @@
-VERSION = (0, 94, 1)
+VERSION = (0, 95)
def get_version():