diff options
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> – <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(): |
