summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorÉtienne Loks <etienne.loks@iggdrasil.net>2017-03-06 17:02:09 +0100
committerÉtienne Loks <etienne.loks@iggdrasil.net>2017-03-06 17:02:09 +0100
commitfa105b35025742223d4238c8314287ad9e9f78a5 (patch)
treea23858d5894be17cb2d0caa08060c66e48994837
parentda42af85b96513e69db706555fa6ac02b38bcaa7 (diff)
parent4c5e12584c253b3d84abcf946cb6ce1bae8fcbcb (diff)
downloadIshtar-fa105b35025742223d4238c8314287ad9e9f78a5.tar.bz2
Ishtar-fa105b35025742223d4238c8314287ad9e9f78a5.zip
Merge branch 'v0.9' into wheezy
-rw-r--r--archaeological_context_records/locale/django.pot166
-rw-r--r--archaeological_context_records/migrations/0012_create_bulk_update_view.py655
-rw-r--r--archaeological_context_records/models.py85
-rw-r--r--archaeological_context_records/tests.py64
-rw-r--r--archaeological_files/tests.py3
-rw-r--r--archaeological_finds/locale/django.pot278
-rw-r--r--archaeological_finds/migrations/0023_create_bulk_update_view.py1215
-rw-r--r--archaeological_finds/models.py4
-rw-r--r--archaeological_finds/models_finds.py268
-rw-r--r--archaeological_finds/tests.py4
-rw-r--r--archaeological_operations/locale/django.pot346
-rw-r--r--archaeological_operations/models.py47
-rw-r--r--archaeological_operations/tests.py272
-rw-r--r--archaeological_operations/views.py16
-rw-r--r--archaeological_warehouse/locale/django.pot2
-rw-r--r--archaeological_warehouse/tests.py4
-rw-r--r--example_project/settings.py11
-rw-r--r--ishtar_common/data_importer.py9
-rw-r--r--ishtar_common/locale/django.pot742
-rw-r--r--ishtar_common/models.py30
-rw-r--r--ishtar_common/templates/blocks/JQueryJqGrid.html19
-rw-r--r--ishtar_common/templates/ishtar/blocks/advanced_shortcut_menu.html2
-rw-r--r--ishtar_common/templates/ishtar/blocks/shortcut_menu.html2
-rw-r--r--ishtar_common/templates/ishtar/wizard/validation_bar.html8
-rw-r--r--ishtar_common/tests.py66
-rw-r--r--ishtar_common/utils.py20
-rw-r--r--ishtar_common/views.py51
-rw-r--r--ishtar_common/wizards.py92
-rw-r--r--translations/de/ishtar_common.po769
-rw-r--r--translations/fr/archaeological_context_records.po166
-rw-r--r--translations/fr/archaeological_finds.po278
-rw-r--r--translations/fr/archaeological_operations.po346
-rw-r--r--translations/fr/archaeological_warehouse.po2
-rw-r--r--translations/fr/ishtar_common.po746
-rw-r--r--version.py2
35 files changed, 4735 insertions, 2055 deletions
diff --git a/archaeological_context_records/locale/django.pot b/archaeological_context_records/locale/django.pot
index 11f313b1f..5683270f5 100644
--- a/archaeological_context_records/locale/django.pot
+++ b/archaeological_context_records/locale/django.pot
@@ -7,11 +7,11 @@
msgid ""
msgstr ""
-#: forms.py:47 forms.py:51 models.py:176 models.py:488 wizards.py:77
+#: forms.py:47 forms.py:51 models.py:198 models.py:565 wizards.py:77
msgid "Operation"
msgstr ""
-#: forms.py:59 forms.py:137 models.py:178 models.py:456
+#: forms.py:59 forms.py:137 models.py:200 models.py:533
msgid "ID"
msgstr ""
@@ -35,7 +35,7 @@ msgstr ""
msgid "Search within related operations"
msgstr ""
-#: forms.py:77 forms.py:233 models.py:55
+#: forms.py:77 forms.py:233 models.py:56
msgid "Period"
msgstr ""
@@ -63,44 +63,44 @@ msgstr ""
msgid "General"
msgstr ""
-#: forms.py:136 models.py:132 models.py:174 models.py:458
+#: forms.py:136 models.py:154 models.py:196 models.py:535
msgid "Parcel"
msgstr ""
-#: forms.py:139 models.py:179 models.py:459
+#: forms.py:139 models.py:201 models.py:536
#: templates/ishtar/sheet_contextrecord.html:27
msgid "Description"
msgstr ""
-#: forms.py:141 models.py:180
+#: forms.py:141 models.py:202
msgid "General comment"
msgstr ""
-#: forms.py:143 models.py:184
+#: forms.py:143 models.py:206
msgid "Length (m)"
msgstr ""
-#: forms.py:144 models.py:185
+#: forms.py:144 models.py:207
msgid "Width (m)"
msgstr ""
-#: forms.py:145 models.py:186
+#: forms.py:145 models.py:208
msgid "Thickness (m)"
msgstr ""
-#: forms.py:146 models.py:188
+#: forms.py:146 models.py:210
msgid "Depth (m)"
msgstr ""
-#: forms.py:147 forms.py:355 models.py:196 models.py:457
+#: forms.py:147 forms.py:355 models.py:218 models.py:534
msgid "Context record type"
msgstr ""
-#: forms.py:148 models.py:198
+#: forms.py:148 models.py:220
msgid "Has furniture?"
msgstr ""
-#: forms.py:151 models.py:190
+#: forms.py:151 models.py:212
msgid "Location"
msgstr ""
@@ -119,27 +119,27 @@ msgstr ""
msgid "This ID already exists for this operation."
msgstr ""
-#: forms.py:228 forms.py:255 models.py:66
+#: forms.py:228 forms.py:255 models.py:67
msgid "Dating"
msgstr ""
-#: forms.py:234 models.py:56
+#: forms.py:234 models.py:57
msgid "Start date"
msgstr ""
-#: forms.py:235 models.py:57 models.py:183
+#: forms.py:235 models.py:58 models.py:205
msgid "End date"
msgstr ""
-#: forms.py:236 models.py:60
+#: forms.py:236 models.py:61
msgid "Quality"
msgstr ""
-#: forms.py:237 models.py:38 models.py:58
+#: forms.py:237 models.py:39 models.py:59
msgid "Dating type"
msgstr ""
-#: forms.py:264 ishtar_menu.py:29 models.py:518
+#: forms.py:264 ishtar_menu.py:29 models.py:595
msgid "Context record"
msgstr ""
@@ -147,7 +147,7 @@ msgstr ""
msgid "Relations"
msgstr ""
-#: forms.py:289 forms.py:297 models.py:201
+#: forms.py:289 forms.py:297 models.py:223
#: templates/ishtar/sheet_contextrecord.html:39
msgid "Interpretation"
msgstr ""
@@ -156,31 +156,31 @@ msgstr ""
msgid "Comments on dating"
msgstr ""
-#: forms.py:295 models.py:200
+#: forms.py:295 models.py:222
msgid "Filling"
msgstr ""
-#: forms.py:299 models.py:221
+#: forms.py:299 models.py:243
msgid "Activity"
msgstr ""
-#: forms.py:301 models.py:219
+#: forms.py:301 models.py:241
msgid "Identification"
msgstr ""
-#: forms.py:303 models.py:204
+#: forms.py:303 models.py:226
msgid "TAQ"
msgstr ""
-#: forms.py:304 models.py:208
+#: forms.py:304 models.py:230
msgid "Estimated TAQ"
msgstr ""
-#: forms.py:306 models.py:211
+#: forms.py:306 models.py:233
msgid "TPQ"
msgstr ""
-#: forms.py:307 models.py:215
+#: forms.py:307 models.py:237
msgid "Estimated TPQ"
msgstr ""
@@ -244,232 +244,232 @@ msgstr ""
msgid "Documentation"
msgstr ""
-#: models.py:39
+#: models.py:40
msgid "Dating types"
msgstr ""
-#: models.py:47
+#: models.py:48
msgid "Dating quality type"
msgstr ""
-#: models.py:48
+#: models.py:49
msgid "Dating quality types"
msgstr ""
-#: models.py:62
+#: models.py:63
msgid "Precise dating"
msgstr ""
-#: models.py:67
+#: models.py:68
msgid "Datings"
msgstr ""
-#: models.py:78 models.py:94 models.py:108
+#: models.py:79 models.py:96 models.py:110
msgid "Order"
msgstr ""
-#: models.py:79
+#: models.py:81
msgid "Parent context record type"
msgstr ""
-#: models.py:83
+#: models.py:85
msgid "Context record Type"
msgstr ""
-#: models.py:84
+#: models.py:86
msgid "Context record Types"
msgstr ""
-#: models.py:97
+#: models.py:99
msgid "Activity Type"
msgstr ""
-#: models.py:98
+#: models.py:100
msgid "Activity Types"
msgstr ""
-#: models.py:111
+#: models.py:113
msgid "Identification Type"
msgstr ""
-#: models.py:112
+#: models.py:114
msgid "Identification Types"
msgstr ""
-#: models.py:133 models.py:460
+#: models.py:155 models.py:537
msgid "Periods"
msgstr ""
-#: models.py:134
+#: models.py:156
msgid "Town"
msgstr ""
-#: models.py:162
+#: models.py:184
msgid "Parcel (town)"
msgstr ""
-#: models.py:163
+#: models.py:185
msgid "Related context records"
msgstr ""
-#: models.py:165
+#: models.py:187
msgid "Parcel (external ID)"
msgstr ""
-#: models.py:166
+#: models.py:188
msgid "Datings (period)"
msgstr ""
-#: models.py:167
+#: models.py:189
msgid "Parcel (year)"
msgstr ""
-#: models.py:171
+#: models.py:193
msgid "External ID"
msgstr ""
-#: models.py:173
+#: models.py:195
msgid "External ID is set automatically"
msgstr ""
-#: models.py:181
+#: models.py:203
msgid "Date d'ouverture"
msgstr ""
-#: models.py:191
+#: models.py:213
msgid "A short description of the location of the context record"
msgstr ""
-#: models.py:194
+#: models.py:216
msgid "Comment on datings"
msgstr ""
-#: models.py:205
+#: models.py:227
msgid ""
"\"Terminus Ante Quem\" the context record can't have been created after this "
"date"
msgstr ""
-#: models.py:209
+#: models.py:231
msgid "Estimation of a \"Terminus Ante Quem\""
msgstr ""
-#: models.py:212
+#: models.py:234
msgid ""
"\"Terminus Post Quem\" the context record can't have been created before "
"this date"
msgstr ""
-#: models.py:216
+#: models.py:238
msgid "Estimation of a \"Terminus Post Quem\""
msgstr ""
-#: models.py:224
+#: models.py:246
msgid "Point"
msgstr ""
-#: models.py:225
+#: models.py:247
msgid "Polygon"
msgstr ""
-#: models.py:226
+#: models.py:248
msgid "Cached name"
msgstr ""
-#: models.py:230 models.py:231 templates/ishtar/sheet_contextrecord.html:4
+#: models.py:252 models.py:253 templates/ishtar/sheet_contextrecord.html:4
msgid "Context Record"
msgstr ""
-#: models.py:233
+#: models.py:255
msgid "Can view all Context Records"
msgstr ""
-#: models.py:235
+#: models.py:257
msgid "Can view own Context Record"
msgstr ""
-#: models.py:237
+#: models.py:259
msgid "Can add own Context Record"
msgstr ""
-#: models.py:239
+#: models.py:261
msgid "Can change own Context Record"
msgstr ""
-#: models.py:241
+#: models.py:263
msgid "Can delete own Context Record"
msgstr ""
-#: models.py:251
+#: models.py:273
msgctxt "short"
msgid "Context record"
msgstr ""
-#: models.py:390
+#: models.py:467
msgid "Inverse relation"
msgstr ""
-#: models.py:394 models.py:417 models.py:455
+#: models.py:471 models.py:494 models.py:532
msgid "Relation type"
msgstr ""
-#: models.py:395
+#: models.py:472
msgid "Relation types"
msgstr ""
-#: models.py:412
+#: models.py:489
msgid "ID (left)"
msgstr ""
-#: models.py:413
+#: models.py:490
msgid "Context record type (left)"
msgstr ""
-#: models.py:414
+#: models.py:491
msgid "Parcel (left)"
msgstr ""
-#: models.py:415
+#: models.py:492
msgid "Description (left)"
msgstr ""
-#: models.py:416
+#: models.py:493
msgid "Periods (left)"
msgstr ""
-#: models.py:418
+#: models.py:495
msgid "ID (right)"
msgstr ""
-#: models.py:419
+#: models.py:496
msgid "Context record type (right)"
msgstr ""
-#: models.py:420
+#: models.py:497
msgid "Parcel (right)"
msgstr ""
-#: models.py:421
+#: models.py:498
msgid "Description (right)"
msgstr ""
-#: models.py:422
+#: models.py:499
msgid "Periods (right)"
msgstr ""
-#: models.py:431
+#: models.py:508
msgid "Record relation"
msgstr ""
-#: models.py:432
+#: models.py:509
msgid "Record relations"
msgstr ""
-#: models.py:515
+#: models.py:592
msgid "Context record documentation"
msgstr ""
-#: models.py:516
+#: models.py:593
msgid "Context record documentations"
msgstr ""
diff --git a/archaeological_context_records/migrations/0012_create_bulk_update_view.py b/archaeological_context_records/migrations/0012_create_bulk_update_view.py
new file mode 100644
index 000000000..1dc20a752
--- /dev/null
+++ b/archaeological_context_records/migrations/0012_create_bulk_update_view.py
@@ -0,0 +1,655 @@
+# -*- coding: utf-8 -*-
+import datetime
+from south.db import db
+from south.v2 import SchemaMigration
+from django.db import models
+from archaeological_context_records.models import CRBulkView
+
+
+class Migration(SchemaMigration):
+
+ def forwards(self, orm):
+ sql = CRBulkView.CREATE_SQL
+ db.execute(sql)
+
+ def backwards(self, orm):
+ sql = CRBulkView.DELETE_SQL
+ db.execute(sql)
+
+ models = {
+ 'archaeological_context_records.activitytype': {
+ 'Meta': {'ordering': "('order',)", 'object_name': 'ActivityType'},
+ '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', [], {}),
+ 'txt_idx': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '100'})
+ },
+ 'archaeological_context_records.contextrecord': {
+ 'Meta': {'ordering': "('cached_label',)", 'object_name': 'ContextRecord'},
+ 'activity': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['archaeological_context_records.ActivityType']", 'null': 'True', 'blank': 'True'}),
+ 'auto_external_id': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'cached_label': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'closing_date': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}),
+ 'comment': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'datings': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['archaeological_context_records.Dating']", 'symmetrical': 'False'}),
+ 'datings_comment': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'depth': ('django.db.models.fields.FloatField', [], {'null': 'True', 'blank': 'True'}),
+ 'description': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'external_id': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'filling': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'has_furniture': ('django.db.models.fields.NullBooleanField', [], {'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'}),
+ 'identification': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['archaeological_context_records.IdentificationType']", 'null': 'True', 'blank': 'True'}),
+ 'image': ('django.db.models.fields.files.ImageField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}),
+ 'imports': ('django.db.models.fields.related.ManyToManyField', [], {'blank': 'True', 'related_name': "'imported_archaeological_context_records_contextrecord'", 'null': 'True', 'symmetrical': 'False', 'to': "orm['ishtar_common.Import']"}),
+ 'interpretation': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'label': ('django.db.models.fields.CharField', [], {'max_length': '200'}),
+ 'length': ('django.db.models.fields.FloatField', [], {'null': 'True', 'blank': 'True'}),
+ 'location': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'opening_date': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}),
+ 'operation': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'context_record'", 'to': "orm['archaeological_operations.Operation']"}),
+ 'parcel': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'context_record'", 'to': "orm['archaeological_operations.Parcel']"}),
+ 'point': ('django.contrib.gis.db.models.fields.PointField', [], {'dim': '3', 'null': 'True', 'blank': 'True'}),
+ 'polygon': ('django.contrib.gis.db.models.fields.PolygonField', [], {'null': 'True', 'blank': 'True'}),
+ 'related_context_records': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'to': "orm['archaeological_context_records.ContextRecord']", 'null': 'True', 'through': "orm['archaeological_context_records.RecordRelations']", 'blank': 'True'}),
+ 'taq': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
+ 'taq_estimated': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
+ 'thickness': ('django.db.models.fields.FloatField', [], {'null': 'True', 'blank': 'True'}),
+ 'thumbnail': ('django.db.models.fields.files.ImageField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}),
+ 'tpq': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
+ 'tpq_estimated': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
+ 'unit': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'+'", 'null': 'True', 'to': "orm['archaeological_context_records.Unit']"}),
+ 'width': ('django.db.models.fields.FloatField', [], {'null': 'True', 'blank': 'True'})
+ },
+ 'archaeological_context_records.contextrecordsource': {
+ 'Meta': {'object_name': 'ContextRecordSource'},
+ 'additional_information': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'associated_url': ('django.db.models.fields.URLField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}),
+ 'authors': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'contextrecordsource_related'", 'symmetrical': 'False', 'to': "orm['ishtar_common.Author']"}),
+ 'comment': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'context_record': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'source'", 'to': "orm['archaeological_context_records.ContextRecord']"}),
+ 'creation_date': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}),
+ 'description': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'duplicate': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'external_id': ('django.db.models.fields.CharField', [], {'max_length': '12', 'null': 'True', 'blank': 'True'}),
+ 'format_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['ishtar_common.Format']", 'null': 'True', 'blank': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'image': ('django.db.models.fields.files.ImageField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}),
+ 'internal_reference': ('django.db.models.fields.CharField', [], {'max_length': '100', 'null': 'True', 'blank': 'True'}),
+ 'item_number': ('django.db.models.fields.IntegerField', [], {'default': '1'}),
+ 'receipt_date': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}),
+ 'receipt_date_in_documentation': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}),
+ 'reference': ('django.db.models.fields.CharField', [], {'max_length': '100', 'null': 'True', 'blank': 'True'}),
+ 'scale': ('django.db.models.fields.CharField', [], {'max_length': '30', 'null': 'True', 'blank': 'True'}),
+ 'source_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['ishtar_common.SourceType']"}),
+ 'support_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['ishtar_common.SupportType']", 'null': 'True', 'blank': 'True'}),
+ 'thumbnail': ('django.db.models.fields.files.ImageField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}),
+ 'title': ('django.db.models.fields.CharField', [], {'max_length': '300'})
+ },
+ 'archaeological_context_records.dating': {
+ 'Meta': {'object_name': 'Dating'},
+ 'dating_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['archaeological_context_records.DatingType']", 'null': 'True', 'blank': 'True'}),
+ 'end_date': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'period': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['archaeological_operations.Period']"}),
+ 'precise_dating': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'quality': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['archaeological_context_records.DatingQuality']", 'null': 'True', 'blank': 'True'}),
+ 'start_date': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'})
+ },
+ 'archaeological_context_records.datingquality': {
+ 'Meta': {'ordering': "('label',)", 'object_name': 'DatingQuality'},
+ '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'})
+ },
+ 'archaeological_context_records.datingtype': {
+ 'Meta': {'ordering': "('label',)", 'object_name': 'DatingType'},
+ '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'})
+ },
+ 'archaeological_context_records.historicalcontextrecord': {
+ 'Meta': {'ordering': "('-history_date', '-history_id')", 'object_name': 'HistoricalContextRecord'},
+ 'activity_id': ('django.db.models.fields.IntegerField', [], {'db_index': 'True', 'null': 'True', 'blank': 'True'}),
+ 'auto_external_id': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'cached_label': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'closing_date': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}),
+ 'comment': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'datings_comment': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'depth': ('django.db.models.fields.FloatField', [], {'null': 'True', 'blank': 'True'}),
+ 'description': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'external_id': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'filling': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'has_furniture': ('django.db.models.fields.NullBooleanField', [], {'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'}),
+ 'identification_id': ('django.db.models.fields.IntegerField', [], {'db_index': 'True', 'null': 'True', 'blank': 'True'}),
+ 'image': ('django.db.models.fields.files.ImageField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}),
+ 'interpretation': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'label': ('django.db.models.fields.CharField', [], {'max_length': '200'}),
+ 'length': ('django.db.models.fields.FloatField', [], {'null': 'True', 'blank': 'True'}),
+ 'location': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'opening_date': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}),
+ 'operation_id': ('django.db.models.fields.IntegerField', [], {'db_index': 'True', 'null': 'True', 'blank': 'True'}),
+ 'parcel_id': ('django.db.models.fields.IntegerField', [], {'db_index': 'True', 'null': 'True', 'blank': 'True'}),
+ 'point': ('django.contrib.gis.db.models.fields.PointField', [], {'dim': '3', 'null': 'True', 'blank': 'True'}),
+ 'polygon': ('django.contrib.gis.db.models.fields.PolygonField', [], {'null': 'True', 'blank': 'True'}),
+ 'taq': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
+ 'taq_estimated': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
+ 'thickness': ('django.db.models.fields.FloatField', [], {'null': 'True', 'blank': 'True'}),
+ 'thumbnail': ('django.db.models.fields.files.ImageField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}),
+ 'tpq': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
+ 'tpq_estimated': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
+ 'unit_id': ('django.db.models.fields.IntegerField', [], {'db_index': 'True', 'null': 'True', 'blank': 'True'}),
+ 'width': ('django.db.models.fields.FloatField', [], {'null': 'True', 'blank': 'True'})
+ },
+ 'archaeological_context_records.identificationtype': {
+ 'Meta': {'ordering': "('order', 'label')", 'object_name': 'IdentificationType'},
+ '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', [], {}),
+ 'txt_idx': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '100'})
+ },
+ 'archaeological_context_records.recordrelations': {
+ 'Meta': {'object_name': 'RecordRelations'},
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'left_record': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'right_relations'", 'to': "orm['archaeological_context_records.ContextRecord']"}),
+ 'relation_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['archaeological_context_records.RelationType']"}),
+ 'right_record': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'left_relations'", 'to': "orm['archaeological_context_records.ContextRecord']"})
+ },
+ 'archaeological_context_records.recordrelationview': {
+ 'Meta': {'unique_together': "(('id', 'right_record'),)", 'object_name': 'RecordRelationView', 'db_table': "'record_relations'", 'managed': 'False'},
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'left_record': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'+'", 'on_delete': 'models.DO_NOTHING', 'to': "orm['archaeological_context_records.ContextRecord']"}),
+ 'relation_type': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'+'", 'on_delete': 'models.DO_NOTHING', 'to': "orm['archaeological_context_records.RelationType']"}),
+ 'right_record': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'+'", 'on_delete': 'models.DO_NOTHING', 'to': "orm['archaeological_context_records.ContextRecord']"})
+ },
+ 'archaeological_context_records.relationtype': {
+ 'Meta': {'ordering': "('order', 'label')", 'object_name': 'RelationType'},
+ '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'}),
+ 'inverse_relation': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['archaeological_context_records.RelationType']", 'null': 'True', 'blank': 'True'}),
+ 'label': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
+ 'order': ('django.db.models.fields.IntegerField', [], {'default': '1'}),
+ 'symmetrical': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'tiny_label': ('django.db.models.fields.CharField', [], {'max_length': '50', 'null': 'True', 'blank': 'True'}),
+ 'txt_idx': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '100'})
+ },
+ 'archaeological_context_records.unit': {
+ 'Meta': {'ordering': "('order', 'label')", 'object_name': 'Unit'},
+ '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', [], {}),
+ 'parent': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['archaeological_context_records.Unit']", 'null': 'True', 'blank': 'True'}),
+ 'txt_idx': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '100'})
+ },
+ 'archaeological_files.file': {
+ 'Meta': {'ordering': "('cached_label',)", 'object_name': 'File'},
+ 'address': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'auto_external_id': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'cached_label': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'cira_advised': ('django.db.models.fields.NullBooleanField', [], {'null': 'True', 'blank': 'True'}),
+ 'classified_area': ('django.db.models.fields.NullBooleanField', [], {'null': 'True', 'blank': 'True'}),
+ 'comment': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'corporation_general_contractor': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'general_contractor_files'", 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': "orm['ishtar_common.Organization']"}),
+ 'creation_date': ('django.db.models.fields.DateField', [], {'default': 'datetime.date.today', 'null': 'True', 'blank': 'True'}),
+ 'departments': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'to': "orm['ishtar_common.Department']", 'null': 'True', 'blank': 'True'}),
+ 'end_date': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}),
+ 'external_id': ('django.db.models.fields.CharField', [], {'max_length': '120', 'null': 'True', 'blank': 'True'}),
+ 'file_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['archaeological_files.FileType']"}),
+ 'general_contractor': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'general_contractor_files'", 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': "orm['ishtar_common.Person']"}),
+ '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'}),
+ 'imported_line': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'imports': ('django.db.models.fields.related.ManyToManyField', [], {'blank': 'True', 'related_name': "'imported_archaeological_files_file'", 'null': 'True', 'symmetrical': 'False', 'to': "orm['ishtar_common.Import']"}),
+ 'in_charge': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'file_responsability'", 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': "orm['ishtar_common.Person']"}),
+ 'instruction_deadline': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}),
+ 'internal_reference': ('django.db.models.fields.CharField', [], {'max_length': '60', 'null': 'True', 'blank': 'True'}),
+ 'locality': ('django.db.models.fields.CharField', [], {'max_length': '100', 'null': 'True', 'blank': 'True'}),
+ 'main_town': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'file_main'", 'null': 'True', 'to': "orm['ishtar_common.Town']"}),
+ 'mh_listing': ('django.db.models.fields.NullBooleanField', [], {'null': 'True', 'blank': 'True'}),
+ 'mh_register': ('django.db.models.fields.NullBooleanField', [], {'null': 'True', 'blank': 'True'}),
+ 'name': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'numeric_reference': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
+ 'organization': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'files'", 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': "orm['ishtar_common.Organization']"}),
+ 'permit_reference': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'permit_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['archaeological_files.PermitType']", 'null': 'True', 'blank': 'True'}),
+ 'planning_service': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'planning_service_files'", 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': "orm['ishtar_common.Organization']"}),
+ 'postal_code': ('django.db.models.fields.CharField', [], {'max_length': '10', 'null': 'True', 'blank': 'True'}),
+ 'protected_area': ('django.db.models.fields.NullBooleanField', [], {'null': 'True', 'blank': 'True'}),
+ 'raw_general_contractor': ('django.db.models.fields.CharField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}),
+ 'raw_town_planning_service': ('django.db.models.fields.CharField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}),
+ 'reception_date': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}),
+ 'related_file': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['archaeological_files.File']", 'null': 'True', 'blank': 'True'}),
+ 'requested_operation_type': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'+'", 'null': 'True', 'to': "orm['ishtar_common.OperationType']"}),
+ 'research_comment': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'responsible_town_planning_service': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'responsible_town_planning_service_files'", 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': "orm['ishtar_common.Person']"}),
+ 'saisine_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['archaeological_files.SaisineType']", 'null': 'True', 'blank': 'True'}),
+ 'scientist': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'scientist'", 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': "orm['ishtar_common.Person']"}),
+ 'total_developed_surface': ('django.db.models.fields.FloatField', [], {'null': 'True', 'blank': 'True'}),
+ 'total_surface': ('django.db.models.fields.FloatField', [], {'null': 'True', 'blank': 'True'}),
+ 'towns': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'file'", 'symmetrical': 'False', 'to': "orm['ishtar_common.Town']"}),
+ 'year': ('django.db.models.fields.IntegerField', [], {'default': '2017'})
+ },
+ 'archaeological_files.filetype': {
+ 'Meta': {'ordering': "('label',)", 'object_name': 'FileType'},
+ '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'})
+ },
+ 'archaeological_files.permittype': {
+ 'Meta': {'ordering': "('label',)", 'object_name': 'PermitType'},
+ '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'})
+ },
+ 'archaeological_files.saisinetype': {
+ 'Meta': {'ordering': "('label',)", 'object_name': 'SaisineType'},
+ 'available': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
+ 'comment': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'delay': ('django.db.models.fields.IntegerField', [], {'default': '30'}),
+ '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'})
+ },
+ 'archaeological_operations.archaeologicalsite': {
+ 'Meta': {'object_name': 'ArchaeologicalSite'},
+ '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_archaeological_operations_archaeologicalsite'", 'null': 'True', 'symmetrical': 'False', 'to': "orm['ishtar_common.Import']"}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}),
+ 'periods': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'to': "orm['archaeological_operations.Period']", 'null': 'True', 'blank': 'True'}),
+ 'reference': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '20'}),
+ 'remains': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'to': "orm['archaeological_operations.RemainType']", 'null': 'True', 'blank': 'True'})
+ },
+ 'archaeological_operations.operation': {
+ 'Meta': {'ordering': "('cached_label',)", 'object_name': 'Operation'},
+ 'abstract': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'archaeological_sites': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'to': "orm['archaeological_operations.ArchaeologicalSite']", 'null': 'True', 'blank': 'True'}),
+ 'associated_file': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'operations'", 'null': 'True', 'to': "orm['archaeological_files.File']"}),
+ 'cached_label': ('django.db.models.fields.CharField', [], {'max_length': '500', 'null': 'True', 'blank': 'True'}),
+ 'cira_date': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}),
+ 'cira_rapporteur': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'cira_rapporteur'", 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': "orm['ishtar_common.Person']"}),
+ 'code_patriarche': ('django.db.models.fields.IntegerField', [], {'unique': 'True', 'null': 'True', 'blank': 'True'}),
+ 'comment': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'common_name': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'cost': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
+ 'creation_date': ('django.db.models.fields.DateField', [], {'default': 'datetime.date.today'}),
+ 'documentation_deadline': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}),
+ 'documentation_received': ('django.db.models.fields.NullBooleanField', [], {'null': 'True', 'blank': 'True'}),
+ 'eas_number': ('django.db.models.fields.CharField', [], {'max_length': '20', 'null': 'True', 'blank': 'True'}),
+ 'effective_man_days': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
+ 'end_date': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}),
+ 'excavation_end_date': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}),
+ 'finds_deadline': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}),
+ 'finds_received': ('django.db.models.fields.NullBooleanField', [], {'null': 'True', 'blank': 'True'}),
+ 'fnap_cost': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
+ 'fnap_financing': ('django.db.models.fields.FloatField', [], {'null': 'True', 'blank': 'True'}),
+ 'geoarchaeological_context_prescription': ('django.db.models.fields.NullBooleanField', [], {'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'}),
+ 'image': ('django.db.models.fields.files.ImageField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}),
+ 'imports': ('django.db.models.fields.related.ManyToManyField', [], {'blank': 'True', 'related_name': "'imported_archaeological_operations_operation'", 'null': 'True', 'symmetrical': 'False', 'to': "orm['ishtar_common.Import']"}),
+ 'in_charge': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'operation_responsability'", 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': "orm['ishtar_common.Person']"}),
+ 'large_area_prescription': ('django.db.models.fields.NullBooleanField', [], {'null': 'True', 'blank': 'True'}),
+ 'multi_polygon': ('django.contrib.gis.db.models.fields.MultiPolygonField', [], {'null': 'True', 'blank': 'True'}),
+ 'negative_result': ('django.db.models.fields.NullBooleanField', [], {'null': 'True', 'blank': 'True'}),
+ 'old_code': ('django.db.models.fields.CharField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}),
+ 'operation_code': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
+ 'operation_type': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'+'", 'to': "orm['ishtar_common.OperationType']"}),
+ 'operator': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'operator'", 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': "orm['ishtar_common.Organization']"}),
+ 'operator_reference': ('django.db.models.fields.CharField', [], {'max_length': '20', 'null': 'True', 'blank': 'True'}),
+ 'optional_man_days': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
+ 'periods': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'to': "orm['archaeological_operations.Period']", 'null': 'True', 'blank': 'True'}),
+ 'point': ('django.contrib.gis.db.models.fields.PointField', [], {'null': 'True', 'blank': 'True'}),
+ 'record_quality': ('django.db.models.fields.CharField', [], {'max_length': '2', 'null': 'True', 'blank': 'True'}),
+ 'remains': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'to': "orm['archaeological_operations.RemainType']", 'null': 'True', 'blank': 'True'}),
+ 'report_delivery_date': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}),
+ 'report_processing': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['archaeological_operations.ReportState']", 'null': 'True', 'blank': 'True'}),
+ 'scheduled_man_days': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
+ 'scientific_documentation_comment': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'scientist': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'operation_scientist_responsability'", 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': "orm['ishtar_common.Person']"}),
+ 'start_date': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}),
+ 'surface': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
+ 'thumbnail': ('django.db.models.fields.files.ImageField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}),
+ 'towns': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'operations'", 'symmetrical': 'False', 'to': "orm['ishtar_common.Town']"}),
+ 'virtual_operation': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'year': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
+ 'zoning_prescription': ('django.db.models.fields.NullBooleanField', [], {'null': 'True', 'blank': 'True'})
+ },
+ 'archaeological_operations.parcel': {
+ 'Meta': {'ordering': "('year', 'section', 'parcel_number')", 'object_name': 'Parcel'},
+ 'address': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'associated_file': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'parcels'", 'null': 'True', 'to': "orm['archaeological_files.File']"}),
+ 'auto_external_id': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'external_id': ('django.db.models.fields.CharField', [], {'max_length': '100', '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_date': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
+ '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_archaeological_operations_parcel'", 'null': 'True', 'symmetrical': 'False', 'to': "orm['ishtar_common.Import']"}),
+ 'operation': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'parcels'", 'null': 'True', 'to': "orm['archaeological_operations.Operation']"}),
+ 'parcel_number': ('django.db.models.fields.CharField', [], {'max_length': '6', 'null': 'True', 'blank': 'True'}),
+ 'public_domain': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'section': ('django.db.models.fields.CharField', [], {'max_length': '4', 'null': 'True', 'blank': 'True'}),
+ 'town': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'parcels'", 'to': "orm['ishtar_common.Town']"}),
+ 'year': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'})
+ },
+ 'archaeological_operations.period': {
+ 'Meta': {'ordering': "('order',)", 'object_name': 'Period'},
+ 'available': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
+ 'comment': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'end_date': ('django.db.models.fields.IntegerField', [], {}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'label': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
+ 'order': ('django.db.models.fields.IntegerField', [], {}),
+ 'parent': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['archaeological_operations.Period']", 'null': 'True', 'blank': 'True'}),
+ 'start_date': ('django.db.models.fields.IntegerField', [], {}),
+ 'txt_idx': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '100'})
+ },
+ 'archaeological_operations.remaintype': {
+ 'Meta': {'ordering': "('label',)", 'object_name': 'RemainType'},
+ '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'})
+ },
+ 'archaeological_operations.reportstate': {
+ 'Meta': {'ordering': "('order',)", 'object_name': 'ReportState'},
+ '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', [], {}),
+ 'txt_idx': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '100'})
+ },
+ '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': {'ordering': "['label']", '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.format': {
+ 'Meta': {'ordering': "['label']", '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.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': '255', 'null': 'True', 'blank': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'imported_file': ('django.db.models.fields.files.FileField', [], {'max_length': '220'}),
+ 'imported_images': ('django.db.models.fields.files.FileField', [], {'max_length': '220', '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': '255', 'null': 'True', 'blank': 'True'}),
+ 'result_file': ('django.db.models.fields.files.FileField', [], {'max_length': '255', '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.importermodel': {
+ 'Meta': {'ordering': "('name',)", 'object_name': 'ImporterModel'},
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'klass': ('django.db.models.fields.CharField', [], {'max_length': '200'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '200'})
+ },
+ 'ishtar_common.importertype': {
+ 'Meta': {'ordering': "('name',)", 'object_name': 'ImporterType'},
+ 'associated_models': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'+'", 'null': 'True', 'to': "orm['ishtar_common.ImporterModel']"}),
+ 'created_models': ('django.db.models.fields.related.ManyToManyField', [], {'blank': 'True', 'related_name': "'+'", 'null': 'True', 'symmetrical': 'False', 'to': "orm['ishtar_common.ImporterModel']"}),
+ '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.ishtaruser': {
+ 'Meta': {'object_name': 'IshtarUser', '_ormbases': ['auth.User']},
+ 'advanced_shortcut_menu': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ '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.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'}),
+ 'archived': ('django.db.models.fields.NullBooleanField', [], {'default': 'False', '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'}),
+ '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'}),
+ 'archived': ('django.db.models.fields.NullBooleanField', [], {'default': 'False', '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'}),
+ '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'}),
+ 'old_title': ('django.db.models.fields.CharField', [], {'max_length': '100', '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'}),
+ 'salutation': ('django.db.models.fields.CharField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}),
+ 'surname': ('django.db.models.fields.CharField', [], {'max_length': '50', 'null': 'True', 'blank': 'True'}),
+ 'title': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['ishtar_common.TitleType']", '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.sourcetype': {
+ 'Meta': {'ordering': "['label']", '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.titletype': {
+ 'Meta': {'ordering': "('label',)", 'object_name': 'TitleType'},
+ '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.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'}),
+ 'imports': ('django.db.models.fields.related.ManyToManyField', [], {'blank': 'True', 'related_name': "'imported_ishtar_common_town'", 'null': 'True', 'symmetrical': 'False', 'to': "orm['ishtar_common.Import']"}),
+ '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 = ['archaeological_context_records'] \ No newline at end of file
diff --git a/archaeological_context_records/models.py b/archaeological_context_records/models.py
index 377cea087..1ec32ea83 100644
--- a/archaeological_context_records/models.py
+++ b/archaeological_context_records/models.py
@@ -20,6 +20,7 @@
from django.conf import settings
from django.contrib.gis.db import models
from django.core.urlresolvers import reverse
+from django.db import connection, transaction
from django.db.models import Q
from django.db.models.signals import post_delete, post_save
from django.utils.translation import ugettext_lazy as _, ugettext, pgettext
@@ -76,8 +77,9 @@ class Dating(models.Model):
class Unit(GeneralType):
order = models.IntegerField(_(u"Order"))
- parent = models.ForeignKey("Unit", verbose_name=_(u"Parent context record type"),
- blank=True, null=True)
+ parent = models.ForeignKey(
+ "Unit", verbose_name=_(u"Parent context record type"),
+ blank=True, null=True)
class Meta:
verbose_name = _(u"Context record Type")
@@ -118,6 +120,26 @@ post_save.connect(post_save_cache, sender=IdentificationType)
post_delete.connect(post_save_cache, sender=IdentificationType)
+class CRBulkView(object):
+ CREATE_SQL = """
+ CREATE VIEW context_records_cached_label_bulk_update
+ AS (
+ SELECT cr.id AS id, ope.code_patriarche AS main_code,
+ ope.year AS year,
+ ope.operation_code AS ope_code,
+ parcel.section AS section,
+ parcel.parcel_number AS number, cr.label AS label
+ FROM archaeological_context_records_contextrecord AS cr
+ INNER JOIN archaeological_operations_operation ope
+ ON ope.id = cr.operation_id
+ INNER JOIN archaeological_operations_parcel parcel
+ ON cr.parcel_id = parcel.id
+ );"""
+ DELETE_SQL = """
+ DROP VIEW context_records_cached_label_bulk_update;
+ """
+
+
class ContextRecord(BaseHistorizedItem, ImageModel, OwnPerms,
ValueGetter, ShortMenuItem):
SHOW_URL = 'show-contextrecord'
@@ -193,8 +215,8 @@ class ContextRecord(BaseHistorizedItem, ImageModel, OwnPerms,
datings = models.ManyToManyField(Dating)
datings_comment = models.TextField(_(u"Comment on datings"), blank=True,
null=True)
- unit = models.ForeignKey(Unit, verbose_name=_(u"Context record type"), related_name='+',
- blank=True, null=True)
+ unit = models.ForeignKey(Unit, verbose_name=_(u"Context record type"),
+ related_name='+', blank=True, null=True)
has_furniture = models.NullBooleanField(_(u"Has furniture?"), blank=True,
null=True)
filling = models.TextField(_(u"Filling"), blank=True, null=True)
@@ -253,6 +275,61 @@ class ContextRecord(BaseHistorizedItem, ImageModel, OwnPerms,
def __unicode__(self):
return self.short_label
+ @classmethod
+ def cached_label_bulk_update(cls, operation_id=None, parcel_id=None):
+ if operation_id:
+ where = "operation_id = %s"
+ args = [int(operation_id)]
+ kwargs = {'operation_id': operation_id}
+ elif parcel_id:
+ where = "parcel_id = %s"
+ args = [int(parcel_id)]
+ kwargs = {'parcel_id': parcel_id}
+ else:
+ return
+ sql = """
+ UPDATE "archaeological_context_records_contextrecord" AS cr
+ SET cached_label =
+ CASE
+ WHEN context_records_cached_label_bulk_update.main_code
+ IS NULL
+ THEN
+ CASE
+ WHEN context_records_cached_label_bulk_update.year
+ IS NOT NULL
+ AND context_records_cached_label_bulk_update.ope_code
+ IS NOT NULL
+ THEN
+ '{ope_prefix}' ||
+ context_records_cached_label_bulk_update.year ||
+ '-' ||
+ context_records_cached_label_bulk_update.ope_code
+ ELSE ''
+ END
+ ELSE
+ '{main_ope_prefix}' ||
+ context_records_cached_label_bulk_update.main_code
+ END
+ || '{join}' ||
+ context_records_cached_label_bulk_update.section || '{join}' ||
+ context_records_cached_label_bulk_update.number || '{join}' ||
+ context_records_cached_label_bulk_update.label
+ FROM context_records_cached_label_bulk_update
+ WHERE cr.id = context_records_cached_label_bulk_update.id
+ AND cr.id IN (
+ SELECT id FROM archaeological_context_records_contextrecord
+ WHERE {where}
+ );
+ """.format(main_ope_prefix=settings.ISHTAR_OPE_PREFIX,
+ ope_prefix=settings.ISHTAR_DEF_OPE_PREFIX,
+ join=settings.JOINT, where=where)
+ # with connection.cursor() as c: # django 1.8
+ c = connection.cursor()
+ c.execute(sql, args)
+ transaction.commit_unless_managed()
+ cls._meta.get_field_by_name(
+ 'base_finds')[0].model.cached_label_bulk_update(**kwargs)
+
@property
def short_label(self):
return settings.JOINT.join([unicode(item) for item in [
diff --git a/archaeological_context_records/tests.py b/archaeological_context_records/tests.py
index 1c900184c..2e1355572 100644
--- a/archaeological_context_records/tests.py
+++ b/archaeological_context_records/tests.py
@@ -22,11 +22,10 @@ import json
from django.conf import settings
from django.core.exceptions import ValidationError, ImproperlyConfigured
from django.core.urlresolvers import reverse
-from django.test import TestCase
from django.test.client import Client
from ishtar_common.models import IshtarSiteProfile, ImporterModel
-from ishtar_common.tests import create_superuser
+from ishtar_common.tests import create_superuser, TestCase
from archaeological_operations.tests import OperationInitTest, \
ImportTest, ImportOperationTest
from archaeological_operations import models as models_ope
@@ -147,16 +146,23 @@ class ContextRecordInit(OperationInitTest):
def create_context_record(self, user=None, data={}, force=False):
if not getattr(self, 'context_records', None):
self.context_records = []
-
default = {'label': "Context record"}
- if force or not data.get('operation'):
+ if force or not data.get('operation') \
+ or not models.Operation.objects.filter(
+ pk=data['operation'].pk).count():
data['operation'] = self.get_default_operation(force=force)
- if not data.get('parcel') or not data['parcel'].pk:
+ if not data.get('parcel') or not data['parcel'].pk \
+ or not models.Parcel.objects.filter(
+ pk=data['parcel'].pk).count():
data['parcel'] = self.get_default_parcel(force=force)
if not data.get('history_modifier'):
data['history_modifier'] = self.get_default_user()
default.update(data)
+ data['operation'] = models.Operation.objects.get(
+ pk=data['operation'].pk)
+ data['parcel'] = models.Parcel.objects.get(
+ pk=data['parcel'].pk)
self.context_records.append(models.ContextRecord.objects.create(
**default))
return self.context_records
@@ -200,6 +206,54 @@ class ContextRecordTest(ContextRecordInit, TestCase):
cr.external_id,
u"{}-{}".format(cr.parcel.external_id, cr.label))
+ def test_lost_parcel_dont_delete_context_record(self):
+ cr = self.create_context_record(force=True)[0]
+ parcel = models.Parcel.objects.get(pk=cr.parcel.pk)
+ parcel.operation = None
+ parcel.save()
+ # associated context record is not removed
+ self.assertEqual(
+ models.ContextRecord.objects.filter(pk=cr.pk).count(), 1)
+ # associated operation is restored
+ self.assertEqual(
+ models.Parcel.objects.get(pk=parcel.pk).operation,
+ cr.operation
+ )
+
+ def test_cache_update(self):
+ cr = self.create_context_record()[0]
+ cr_pk = cr.pk
+ # OP2010 - 1 | A | 1 | CR 1
+ ope_id, parcel_sec, parcel_nb, cr_label = cr.cached_label.split(' | ')
+ self.assertEqual(ope_id, 'OP2010-1')
+ self.assertEqual(parcel_sec, cr.parcel.section)
+ self.assertEqual(parcel_nb, cr.parcel.parcel_number)
+ self.assertEqual(cr_label, cr.label)
+
+ new_lbl = "UE 2"
+ cr.label = new_lbl
+ cr.save()
+ cr = models.ContextRecord.objects.get(pk=cr_pk)
+ ope_id, parcel_sec, parcel_nb, cr_label = cr.cached_label.split(' | ')
+ self.assertEqual(cr_label, new_lbl)
+
+ new_sec, new_nb = "B", "42"
+ parcel = cr.parcel
+ parcel.section = new_sec
+ parcel.parcel_number = new_nb
+ parcel.save()
+ cr = models.ContextRecord.objects.get(pk=cr_pk)
+ ope_id, parcel_sec, parcel_nb, cr_label = cr.cached_label.split(' | ')
+ self.assertEqual(parcel_sec, new_sec)
+ self.assertEqual(parcel_nb, new_nb)
+
+ cr.operation.year = 2017
+ cr.operation.save()
+ cr = models.ContextRecord.objects.get(pk=cr_pk)
+ ope_id, parcel_sec, parcel_nb, cr_label = cr.cached_label.split(' | ')
+ self.assertEqual(ope_id, 'OP2017-1')
+
+
class ContextRecordSearchTest(ContextRecordInit, TestCase):
fixtures = ImportContextRecordTest.fixtures
diff --git a/archaeological_files/tests.py b/archaeological_files/tests.py
index 8a4c105c6..2b0a63af8 100644
--- a/archaeological_files/tests.py
+++ b/archaeological_files/tests.py
@@ -25,7 +25,8 @@ import json
from django.conf import settings
from django.contrib.auth.models import User
-from django.test import TestCase
+
+from ishtar_common.tests import TestCase
from ishtar_common.models import PersonType, Town, IshtarSiteProfile
from archaeological_files import models
diff --git a/archaeological_finds/locale/django.pot b/archaeological_finds/locale/django.pot
index 9fe1cb651..e8b1fee1f 100644
--- a/archaeological_finds/locale/django.pot
+++ b/archaeological_finds/locale/django.pot
@@ -11,157 +11,157 @@ msgstr ""
msgid "Context record"
msgstr ""
-#: forms.py:123 ishtar_menu.py:32 models_finds.py:484 models_finds.py:819
-#: models_finds.py:828 models_treatments.py:279
+#: forms.py:123 ishtar_menu.py:32 models_finds.py:655 models_finds.py:1058
+#: models_finds.py:1067 models_treatments.py:279
#: templates/ishtar/sheet_find.html:5
msgid "Find"
msgstr ""
-#: forms.py:137 forms.py:330 forms.py:559 models_finds.py:130
-#: models_finds.py:415
+#: forms.py:137 forms.py:330 forms.py:559 models_finds.py:151
+#: models_finds.py:586
msgid "Free ID"
msgstr ""
-#: forms.py:139 models_finds.py:467
+#: forms.py:139 models_finds.py:638
msgid "Previous ID"
msgstr ""
-#: forms.py:140 forms.py:362 forms_treatments.py:134 models_finds.py:134
-#: models_finds.py:416 models_treatments.py:125
+#: forms.py:140 forms.py:362 forms_treatments.py:134 models_finds.py:155
+#: models_finds.py:587 models_treatments.py:125
msgid "Description"
msgstr ""
-#: forms.py:143 forms.py:364 models_finds.py:143
+#: forms.py:143 forms.py:364 models_finds.py:164
msgid "Batch/object"
msgstr ""
-#: forms.py:145 models_finds.py:444
+#: forms.py:145 models_finds.py:615
msgid "Is complete?"
msgstr ""
-#: forms.py:148 forms.py:352 forms.py:563 models_finds.py:50
+#: forms.py:148 forms.py:352 forms.py:563 models_finds.py:51
msgid "Material type"
msgstr ""
-#: forms.py:149 forms.py:356 models_finds.py:62 models_finds.py:420
+#: forms.py:149 forms.py:356 models_finds.py:63 models_finds.py:591
msgid "Conservatory state"
msgstr ""
-#: forms.py:152 models_finds.py:422
+#: forms.py:152 models_finds.py:593
msgid "Conservatory comment"
msgstr ""
-#: forms.py:155 models_finds.py:112 models_finds.py:447
+#: forms.py:155 models_finds.py:113 models_finds.py:618
msgid "Object types"
msgstr ""
-#: forms.py:157 forms.py:355 models_finds.py:71
+#: forms.py:157 forms.py:355 models_finds.py:72
msgid "Preservation type"
msgstr ""
-#: forms.py:160 forms.py:358 models_finds.py:449
+#: forms.py:160 forms.py:358 models_finds.py:620
msgid "Integrity / interest"
msgstr ""
-#: forms.py:163 forms.py:360 models_finds.py:452
+#: forms.py:163 forms.py:360 models_finds.py:623
msgid "Remarkability"
msgstr ""
-#: forms.py:166 models_finds.py:148
+#: forms.py:166 models_finds.py:169
msgid "Point of topographic reference"
msgstr ""
-#: forms.py:169 models_finds.py:150
+#: forms.py:169 models_finds.py:171
msgid "X"
msgstr ""
-#: forms.py:170 models_finds.py:151
+#: forms.py:170 models_finds.py:172
msgid "Y"
msgstr ""
-#: forms.py:171 models_finds.py:152
+#: forms.py:171 models_finds.py:173
msgid "Z"
msgstr ""
-#: forms.py:173 models_finds.py:160
+#: forms.py:173 models_finds.py:181
msgid "Spatial Reference System"
msgstr ""
-#: forms.py:176 models_finds.py:153
+#: forms.py:176 models_finds.py:174
msgid "Estimated error for X"
msgstr ""
-#: forms.py:178 models_finds.py:155
+#: forms.py:178 models_finds.py:176
msgid "Estimated error for Y"
msgstr ""
-#: forms.py:180 models_finds.py:157
+#: forms.py:180 models_finds.py:178
msgid "Estimated error for Z"
msgstr ""
-#: forms.py:181 models_finds.py:456
+#: forms.py:181 models_finds.py:627
msgid "Length (cm)"
msgstr ""
-#: forms.py:182 models_finds.py:457
+#: forms.py:182 models_finds.py:628
msgid "Width (cm)"
msgstr ""
-#: forms.py:183 models_finds.py:458
+#: forms.py:183 models_finds.py:629
msgid "Height (cm)"
msgstr ""
-#: forms.py:184 models_finds.py:459
+#: forms.py:184 models_finds.py:630
msgid "Diameter (cm)"
msgstr ""
-#: forms.py:185 models_finds.py:460
+#: forms.py:185 models_finds.py:631
msgid "Thickness (cm)"
msgstr ""
-#: forms.py:186 forms.py:564 models_finds.py:427
+#: forms.py:186 forms.py:564 models_finds.py:598
msgid "Volume (l)"
msgstr ""
-#: forms.py:187 forms.py:565 models_finds.py:428
+#: forms.py:187 forms.py:565 models_finds.py:599
msgid "Weight (g)"
msgstr ""
-#: forms.py:189 models_finds.py:461
+#: forms.py:189 models_finds.py:632
msgid "Dimensions comment"
msgstr ""
-#: forms.py:190 forms.py:566 models_finds.py:431
+#: forms.py:190 forms.py:566 models_finds.py:602
msgid "Find number"
msgstr ""
-#: forms.py:192 models_finds.py:455
+#: forms.py:192 models_finds.py:626
msgid "Minimum number of individuals (MNI)"
msgstr ""
-#: forms.py:193 models_finds.py:463
+#: forms.py:193 models_finds.py:634
msgid "Mark"
msgstr ""
-#: forms.py:194 forms.py:365 models_finds.py:469
+#: forms.py:194 forms.py:365 models_finds.py:640
msgid "Check"
msgstr ""
-#: forms.py:196 models_finds.py:471
+#: forms.py:196 models_finds.py:642
msgid "Check date"
msgstr ""
#: forms.py:197 forms_treatments.py:132 forms_treatments.py:434
-#: models_finds.py:135 models_finds.py:464 models_treatments.py:124
+#: models_finds.py:156 models_finds.py:635 models_treatments.py:124
#: models_treatments.py:492
msgid "Comment"
msgstr ""
-#: forms.py:200 models_finds.py:465
+#: forms.py:200 models_finds.py:636
msgid "Comment on dating"
msgstr ""
-#: forms.py:201 models_finds.py:473
+#: forms.py:201 models_finds.py:644
msgid "Estimated value"
msgstr ""
@@ -184,7 +184,7 @@ msgstr ""
msgid "Coordinates are not relevant for the spatial reference system used: {}."
msgstr ""
-#: forms.py:293 forms.py:324 models_finds.py:439
+#: forms.py:293 forms.py:324 models_finds.py:610
msgid "Dating"
msgstr ""
@@ -193,13 +193,13 @@ msgid "Period"
msgstr ""
#: forms.py:299 forms_treatments.py:138 forms_treatments.py:436
-#: models_finds.py:833 models_treatments.py:127 models_treatments.py:290
-#: templates/ishtar/sheet_find.html:102 templates/ishtar/sheet_find.html:144
+#: models_finds.py:1072 models_treatments.py:127 models_treatments.py:290
+#: templates/ishtar/sheet_find.html:100 templates/ishtar/sheet_find.html:142
msgid "Start date"
msgstr ""
-#: forms.py:301 models_finds.py:834 models_treatments.py:291
-#: templates/ishtar/sheet_find.html:103 templates/ishtar/sheet_find.html:145
+#: forms.py:301 models_finds.py:1073 models_treatments.py:291
+#: templates/ishtar/sheet_find.html:101 templates/ishtar/sheet_find.html:143
msgid "End date"
msgstr ""
@@ -215,11 +215,11 @@ msgstr ""
msgid "Precise dating"
msgstr ""
-#: forms.py:328 models_finds.py:167
+#: forms.py:328 models_finds.py:188
msgid "Short ID"
msgstr ""
-#: forms.py:329 models_finds.py:170
+#: forms.py:329 models_finds.py:191
msgid "Complete ID"
msgstr ""
@@ -245,7 +245,7 @@ msgstr ""
msgid "Search within related operations"
msgstr ""
-#: forms.py:353 models_finds.py:111
+#: forms.py:353 models_finds.py:112
msgid "Object type"
msgstr ""
@@ -261,7 +261,7 @@ msgstr ""
msgid "Upstream finds"
msgstr ""
-#: forms.py:443 models_finds.py:485
+#: forms.py:443 models_finds.py:656
msgid "Finds"
msgstr ""
@@ -334,7 +334,7 @@ msgid "Basket"
msgstr ""
#: forms_treatments.py:52 forms_treatments.py:92 models_treatments.py:96
-#: templates/ishtar/sheet_find.html:96 templates/ishtar/sheet_find.html:138
+#: templates/ishtar/sheet_find.html:94 templates/ishtar/sheet_find.html:136
msgid "Label"
msgstr ""
@@ -364,7 +364,7 @@ msgid "Base treatment"
msgstr ""
#: forms_treatments.py:103 models_treatments.py:109
-#: templates/ishtar/sheet_find.html:98 templates/ishtar/sheet_find.html:140
+#: templates/ishtar/sheet_find.html:96 templates/ishtar/sheet_find.html:138
msgid "State"
msgstr ""
@@ -513,8 +513,8 @@ msgid "Internal ref."
msgstr ""
#: forms_treatments.py:358 forms_treatments.py:415
-#: templates/ishtar/sheet_find.html:97 templates/ishtar/sheet_find.html:139
-#: templates/ishtar/sheet_find.html:231
+#: templates/ishtar/sheet_find.html:95 templates/ishtar/sheet_find.html:137
+#: templates/ishtar/sheet_find.html:229
msgid "Type"
msgstr ""
@@ -611,12 +611,12 @@ msgstr ""
msgid "Documentation"
msgstr ""
-#: ishtar_menu.py:133 ishtar_menu.py:214 models_finds.py:830
+#: ishtar_menu.py:133 ishtar_menu.py:214 models_finds.py:1069
msgid "Administrative act"
msgstr ""
-#: ishtar_menu.py:151 ishtar_menu.py:233 templates/ishtar/sheet_find.html:226
-#: templates/ishtar/sheet_find.html:228
+#: ishtar_menu.py:151 ishtar_menu.py:233 templates/ishtar/sheet_find.html:224
+#: templates/ishtar/sheet_find.html:226
msgid "Documents"
msgstr ""
@@ -633,263 +633,263 @@ msgstr ""
msgid "Simple treatments"
msgstr ""
-#: models_finds.py:43
+#: models_finds.py:44
msgid "Code"
msgstr ""
-#: models_finds.py:44
+#: models_finds.py:45
msgid "Recommendation"
msgstr ""
-#: models_finds.py:47
+#: models_finds.py:48
msgid "Parent material"
msgstr ""
-#: models_finds.py:51 models_finds.py:418
+#: models_finds.py:52 models_finds.py:507 models_finds.py:589
msgid "Material types"
msgstr ""
-#: models_finds.py:59
+#: models_finds.py:60
msgid "Parent conservatory state"
msgstr ""
-#: models_finds.py:63
+#: models_finds.py:64
msgid "Conservatory states"
msgstr ""
-#: models_finds.py:72
+#: models_finds.py:73
msgid "Preservation types"
msgstr ""
-#: models_finds.py:80
+#: models_finds.py:81
msgid "Integrity / interest type"
msgstr ""
-#: models_finds.py:81
+#: models_finds.py:82
msgid "Integrity / interest types"
msgstr ""
-#: models_finds.py:89
+#: models_finds.py:90
msgid "Remarkability type"
msgstr ""
-#: models_finds.py:90
+#: models_finds.py:91
msgid "Remarkability types"
msgstr ""
-#: models_finds.py:97 models_finds.py:414 models_treatments.py:40
+#: models_finds.py:98 models_finds.py:585 models_treatments.py:40
#: models_treatments.py:285
msgid "Order"
msgstr ""
-#: models_finds.py:99
+#: models_finds.py:100
msgid "Batch type"
msgstr ""
-#: models_finds.py:100
+#: models_finds.py:101
msgid "Batch types"
msgstr ""
-#: models_finds.py:108
+#: models_finds.py:109
msgid "Parent"
msgstr ""
-#: models_finds.py:131 models_finds.py:411 models_treatments.py:122
+#: models_finds.py:152 models_finds.py:582 models_treatments.py:122
#: models_treatments.py:469
msgid "External ID"
msgstr ""
-#: models_finds.py:133 models_finds.py:413
+#: models_finds.py:154 models_finds.py:584
msgid "External ID is set automatically"
msgstr ""
-#: models_finds.py:136
+#: models_finds.py:157
msgid "Special interest"
msgstr ""
-#: models_finds.py:140
+#: models_finds.py:161
msgid "Context Record"
msgstr ""
-#: models_finds.py:141
+#: models_finds.py:162
msgid "Discovery date"
msgstr ""
-#: models_finds.py:146
+#: models_finds.py:167
msgid "Material index"
msgstr ""
-#: models_finds.py:162
+#: models_finds.py:183
msgid "Point (2D)"
msgstr ""
-#: models_finds.py:163
+#: models_finds.py:184
msgid "Point"
msgstr ""
-#: models_finds.py:164
+#: models_finds.py:185
msgid "Line"
msgstr ""
-#: models_finds.py:165
+#: models_finds.py:186
msgid "Polygon"
msgstr ""
-#: models_finds.py:168 models_finds.py:171
+#: models_finds.py:189 models_finds.py:192
msgid "Cached value - do not edit"
msgstr ""
-#: models_finds.py:176 models_finds.py:409
+#: models_finds.py:197 models_finds.py:580
msgid "Base find"
msgstr ""
-#: models_finds.py:177
+#: models_finds.py:198
msgid "Base finds"
msgstr ""
-#: models_finds.py:179
+#: models_finds.py:200
msgid "Can view all Base finds"
msgstr ""
-#: models_finds.py:180
+#: models_finds.py:201
msgid "Can view own Base find"
msgstr ""
-#: models_finds.py:181
+#: models_finds.py:202
msgid "Can add own Base find"
msgstr ""
-#: models_finds.py:182
+#: models_finds.py:203
msgid "Can change own Base find"
msgstr ""
-#: models_finds.py:183
+#: models_finds.py:204
msgid "Can delete own Base find"
msgstr ""
-#: models_finds.py:296
+#: models_finds.py:430
msgid "g"
msgstr ""
-#: models_finds.py:297
+#: models_finds.py:431
msgid "kg"
msgstr ""
-#: models_finds.py:299
+#: models_finds.py:433
msgid "Not checked"
msgstr ""
-#: models_finds.py:300
+#: models_finds.py:434
msgid "Checked but incorrect"
msgstr ""
-#: models_finds.py:301
+#: models_finds.py:435
msgid "Checked and correct"
msgstr ""
-#: models_finds.py:335
+#: models_finds.py:505
msgid "Periods"
msgstr ""
-#: models_finds.py:336 models_finds.py:442 models_treatments.py:129
-#: models_treatments.py:293 templates/ishtar/sheet_find.html:101
-#: templates/ishtar/sheet_find.html:143
+#: models_finds.py:506 models_finds.py:613 models_treatments.py:129
+#: models_treatments.py:293 templates/ishtar/sheet_find.html:99
+#: templates/ishtar/sheet_find.html:141
msgid "Container"
msgstr ""
-#: models_finds.py:346
+#: models_finds.py:517
msgid "Base find - Short ID"
msgstr ""
-#: models_finds.py:347
+#: models_finds.py:518
msgid "Base find - Complete ID"
msgstr ""
-#: models_finds.py:348
+#: models_finds.py:519
msgid "Base find - Comment"
msgstr ""
-#: models_finds.py:349
+#: models_finds.py:520
msgid "Base find - Description"
msgstr ""
-#: models_finds.py:350
+#: models_finds.py:521
msgid "Base find - Topographic localisation"
msgstr ""
-#: models_finds.py:352
+#: models_finds.py:523
msgid "Base find - Special interest"
msgstr ""
-#: models_finds.py:353
+#: models_finds.py:524
msgid "Base find - Discovery date"
msgstr ""
-#: models_finds.py:425
+#: models_finds.py:596
msgid "Type of preservation to consider"
msgstr ""
-#: models_finds.py:429
+#: models_finds.py:600
msgid "Weight unit"
msgstr ""
-#: models_finds.py:435 templates/ishtar/sheet_find.html:89
+#: models_finds.py:606 templates/ishtar/sheet_find.html:87
msgid "Upstream treatment"
msgstr ""
-#: models_finds.py:438 templates/ishtar/sheet_find.html:131
+#: models_finds.py:609 templates/ishtar/sheet_find.html:129
msgid "Downstream treatment"
msgstr ""
-#: models_finds.py:476
+#: models_finds.py:647
msgid "Collection"
msgstr ""
-#: models_finds.py:478 models_treatments.py:141 models_treatments.py:493
+#: models_finds.py:649 models_treatments.py:141 models_treatments.py:493
msgid "Cached name"
msgstr ""
-#: models_finds.py:487
+#: models_finds.py:658
msgid "Can view all Finds"
msgstr ""
-#: models_finds.py:488
+#: models_finds.py:659
msgid "Can view own Find"
msgstr ""
-#: models_finds.py:489
+#: models_finds.py:660
msgid "Can add own Find"
msgstr ""
-#: models_finds.py:490
+#: models_finds.py:661
msgid "Can change own Find"
msgstr ""
-#: models_finds.py:491
+#: models_finds.py:662
msgid "Can delete own Find"
msgstr ""
-#: models_finds.py:497
+#: models_finds.py:668
msgid "FIND"
msgstr ""
-#: models_finds.py:817
+#: models_finds.py:1056
msgid "Find documentation"
msgstr ""
-#: models_finds.py:818
+#: models_finds.py:1057
msgid "Find documentations"
msgstr ""
-#: models_finds.py:831
+#: models_finds.py:1070
msgid "Person"
msgstr ""
-#: models_finds.py:837
+#: models_finds.py:1076
msgid "Property"
msgstr ""
-#: models_finds.py:838
+#: models_finds.py:1077
msgid "Properties"
msgstr ""
@@ -957,7 +957,7 @@ msgstr ""
msgid "Target a basket"
msgstr ""
-#: models_treatments.py:146 templates/ishtar/sheet_find.html:86
+#: models_treatments.py:146 templates/ishtar/sheet_find.html:84
#: templates/ishtar/sheet_treatmentfile.html:45
msgid "Treatments"
msgstr ""
@@ -986,8 +986,8 @@ msgstr ""
msgid "TREATMENT"
msgstr ""
-#: models_treatments.py:294 templates/ishtar/sheet_find.html:100
-#: templates/ishtar/sheet_find.html:142
+#: models_treatments.py:294 templates/ishtar/sheet_find.html:98
+#: templates/ishtar/sheet_find.html:140
msgid "Doer"
msgstr ""
@@ -1179,59 +1179,59 @@ msgstr ""
msgid "Operation"
msgstr ""
-#: templates/ishtar/sheet_find.html:78
+#: templates/ishtar/sheet_find.html:76
msgid "Warehouse"
msgstr ""
-#: templates/ishtar/sheet_find.html:95 templates/ishtar/sheet_find.html:137
+#: templates/ishtar/sheet_find.html:93 templates/ishtar/sheet_find.html:135
msgid "Year - index"
msgstr ""
-#: templates/ishtar/sheet_find.html:99 templates/ishtar/sheet_find.html:141
+#: templates/ishtar/sheet_find.html:97 templates/ishtar/sheet_find.html:139
msgid "Related finds (max. 15 displayed)"
msgstr ""
-#: templates/ishtar/sheet_find.html:127
+#: templates/ishtar/sheet_find.html:125
msgid "Export as CSV"
msgstr ""
-#: templates/ishtar/sheet_find.html:127 templates/ishtar/sheet_find.html:170
+#: templates/ishtar/sheet_find.html:125 templates/ishtar/sheet_find.html:168
msgid "CSV"
msgstr ""
-#: templates/ishtar/sheet_find.html:175
+#: templates/ishtar/sheet_find.html:173
msgid "Associated base finds"
msgstr ""
-#: templates/ishtar/sheet_find.html:207
+#: templates/ishtar/sheet_find.html:205
msgid "Coordinates:"
msgstr ""
-#: templates/ishtar/sheet_find.html:209
+#: templates/ishtar/sheet_find.html:207
msgid "X:"
msgstr ""
-#: templates/ishtar/sheet_find.html:210
+#: templates/ishtar/sheet_find.html:208
msgid "Y:"
msgstr ""
-#: templates/ishtar/sheet_find.html:211
+#: templates/ishtar/sheet_find.html:209
msgid "Z:"
msgstr ""
-#: templates/ishtar/sheet_find.html:214
+#: templates/ishtar/sheet_find.html:212
msgid "SRID:"
msgstr ""
-#: templates/ishtar/sheet_find.html:230
+#: templates/ishtar/sheet_find.html:228
msgid "Title"
msgstr ""
-#: templates/ishtar/sheet_find.html:232
+#: templates/ishtar/sheet_find.html:230
msgid "Authors"
msgstr ""
-#: templates/ishtar/sheet_find.html:233
+#: templates/ishtar/sheet_find.html:231
msgid "Link"
msgstr ""
diff --git a/archaeological_finds/migrations/0023_create_bulk_update_view.py b/archaeological_finds/migrations/0023_create_bulk_update_view.py
new file mode 100644
index 000000000..c59420fe2
--- /dev/null
+++ b/archaeological_finds/migrations/0023_create_bulk_update_view.py
@@ -0,0 +1,1215 @@
+# -*- coding: utf-8 -*-
+import datetime
+from south.db import db
+from south.v2 import SchemaMigration
+from django.db import models
+from archaeological_finds.models import BFBulkView, FBulkView, FirstBaseFindView
+
+
+class Migration(SchemaMigration):
+
+ def forwards(self, orm):
+ for view in [FirstBaseFindView, BFBulkView, FBulkView]:
+ sql = view.CREATE_SQL
+ db.execute(sql)
+
+ def backwards(self, orm):
+ for view in [FBulkView, BFBulkView, FirstBaseFindView]:
+ sql = view.DELETE_SQL
+ db.execute(sql)
+
+ models = {
+ 'archaeological_context_records.activitytype': {
+ 'Meta': {'ordering': "('order',)", 'object_name': 'ActivityType'},
+ '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', [], {}),
+ 'txt_idx': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '100'})
+ },
+ 'archaeological_context_records.contextrecord': {
+ 'Meta': {'ordering': "('cached_label',)", 'object_name': 'ContextRecord'},
+ 'activity': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['archaeological_context_records.ActivityType']", 'null': 'True', 'blank': 'True'}),
+ 'auto_external_id': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'cached_label': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'closing_date': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}),
+ 'comment': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'datings': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['archaeological_context_records.Dating']", 'symmetrical': 'False'}),
+ 'datings_comment': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'depth': ('django.db.models.fields.FloatField', [], {'null': 'True', 'blank': 'True'}),
+ 'description': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'external_id': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'filling': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'has_furniture': ('django.db.models.fields.NullBooleanField', [], {'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'}),
+ 'identification': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['archaeological_context_records.IdentificationType']", 'null': 'True', 'blank': 'True'}),
+ 'image': ('django.db.models.fields.files.ImageField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}),
+ 'imports': ('django.db.models.fields.related.ManyToManyField', [], {'blank': 'True', 'related_name': "'imported_archaeological_context_records_contextrecord'", 'null': 'True', 'symmetrical': 'False', 'to': "orm['ishtar_common.Import']"}),
+ 'interpretation': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'label': ('django.db.models.fields.CharField', [], {'max_length': '200'}),
+ 'length': ('django.db.models.fields.FloatField', [], {'null': 'True', 'blank': 'True'}),
+ 'location': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'opening_date': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}),
+ 'operation': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'context_record'", 'to': "orm['archaeological_operations.Operation']"}),
+ 'parcel': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'context_record'", 'to': "orm['archaeological_operations.Parcel']"}),
+ 'point': ('django.contrib.gis.db.models.fields.PointField', [], {'dim': '3', 'null': 'True', 'blank': 'True'}),
+ 'polygon': ('django.contrib.gis.db.models.fields.PolygonField', [], {'null': 'True', 'blank': 'True'}),
+ 'related_context_records': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'to': "orm['archaeological_context_records.ContextRecord']", 'null': 'True', 'through': "orm['archaeological_context_records.RecordRelations']", 'blank': 'True'}),
+ 'taq': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
+ 'taq_estimated': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
+ 'thickness': ('django.db.models.fields.FloatField', [], {'null': 'True', 'blank': 'True'}),
+ 'thumbnail': ('django.db.models.fields.files.ImageField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}),
+ 'tpq': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
+ 'tpq_estimated': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
+ 'unit': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'+'", 'null': 'True', 'to': "orm['archaeological_context_records.Unit']"}),
+ 'width': ('django.db.models.fields.FloatField', [], {'null': 'True', 'blank': 'True'})
+ },
+ 'archaeological_context_records.dating': {
+ 'Meta': {'object_name': 'Dating'},
+ 'dating_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['archaeological_context_records.DatingType']", 'null': 'True', 'blank': 'True'}),
+ 'end_date': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'period': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['archaeological_operations.Period']"}),
+ 'precise_dating': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'quality': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['archaeological_context_records.DatingQuality']", 'null': 'True', 'blank': 'True'}),
+ 'start_date': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'})
+ },
+ 'archaeological_context_records.datingquality': {
+ 'Meta': {'ordering': "('label',)", 'object_name': 'DatingQuality'},
+ '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'})
+ },
+ 'archaeological_context_records.datingtype': {
+ 'Meta': {'ordering': "('label',)", 'object_name': 'DatingType'},
+ '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'})
+ },
+ 'archaeological_context_records.identificationtype': {
+ 'Meta': {'ordering': "('order', 'label')", 'object_name': 'IdentificationType'},
+ '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', [], {}),
+ 'txt_idx': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '100'})
+ },
+ 'archaeological_context_records.recordrelations': {
+ 'Meta': {'object_name': 'RecordRelations'},
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'left_record': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'right_relations'", 'to': "orm['archaeological_context_records.ContextRecord']"}),
+ 'relation_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['archaeological_context_records.RelationType']"}),
+ 'right_record': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'left_relations'", 'to': "orm['archaeological_context_records.ContextRecord']"})
+ },
+ 'archaeological_context_records.relationtype': {
+ 'Meta': {'ordering': "('order', 'label')", 'object_name': 'RelationType'},
+ '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'}),
+ 'inverse_relation': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['archaeological_context_records.RelationType']", 'null': 'True', 'blank': 'True'}),
+ 'label': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
+ 'order': ('django.db.models.fields.IntegerField', [], {'default': '1'}),
+ 'symmetrical': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'tiny_label': ('django.db.models.fields.CharField', [], {'max_length': '50', 'null': 'True', 'blank': 'True'}),
+ 'txt_idx': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '100'})
+ },
+ 'archaeological_context_records.unit': {
+ 'Meta': {'ordering': "('order', 'label')", 'object_name': 'Unit'},
+ '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', [], {}),
+ 'parent': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['archaeological_context_records.Unit']", 'null': 'True', 'blank': 'True'}),
+ 'txt_idx': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '100'})
+ },
+ 'archaeological_files.file': {
+ 'Meta': {'ordering': "('cached_label',)", 'object_name': 'File'},
+ 'address': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'auto_external_id': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'cached_label': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'cira_advised': ('django.db.models.fields.NullBooleanField', [], {'null': 'True', 'blank': 'True'}),
+ 'classified_area': ('django.db.models.fields.NullBooleanField', [], {'null': 'True', 'blank': 'True'}),
+ 'comment': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'corporation_general_contractor': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'general_contractor_files'", 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': "orm['ishtar_common.Organization']"}),
+ 'creation_date': ('django.db.models.fields.DateField', [], {'default': 'datetime.date.today', 'null': 'True', 'blank': 'True'}),
+ 'departments': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'to': "orm['ishtar_common.Department']", 'null': 'True', 'blank': 'True'}),
+ 'end_date': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}),
+ 'external_id': ('django.db.models.fields.CharField', [], {'max_length': '120', 'null': 'True', 'blank': 'True'}),
+ 'file_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['archaeological_files.FileType']"}),
+ 'general_contractor': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'general_contractor_files'", 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': "orm['ishtar_common.Person']"}),
+ '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'}),
+ 'imported_line': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'imports': ('django.db.models.fields.related.ManyToManyField', [], {'blank': 'True', 'related_name': "'imported_archaeological_files_file'", 'null': 'True', 'symmetrical': 'False', 'to': "orm['ishtar_common.Import']"}),
+ 'in_charge': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'file_responsability'", 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': "orm['ishtar_common.Person']"}),
+ 'instruction_deadline': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}),
+ 'internal_reference': ('django.db.models.fields.CharField', [], {'max_length': '60', 'null': 'True', 'blank': 'True'}),
+ 'locality': ('django.db.models.fields.CharField', [], {'max_length': '100', 'null': 'True', 'blank': 'True'}),
+ 'main_town': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'file_main'", 'null': 'True', 'to': "orm['ishtar_common.Town']"}),
+ 'mh_listing': ('django.db.models.fields.NullBooleanField', [], {'null': 'True', 'blank': 'True'}),
+ 'mh_register': ('django.db.models.fields.NullBooleanField', [], {'null': 'True', 'blank': 'True'}),
+ 'name': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'numeric_reference': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
+ 'organization': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'files'", 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': "orm['ishtar_common.Organization']"}),
+ 'permit_reference': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'permit_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['archaeological_files.PermitType']", 'null': 'True', 'blank': 'True'}),
+ 'planning_service': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'planning_service_files'", 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': "orm['ishtar_common.Organization']"}),
+ 'postal_code': ('django.db.models.fields.CharField', [], {'max_length': '10', 'null': 'True', 'blank': 'True'}),
+ 'protected_area': ('django.db.models.fields.NullBooleanField', [], {'null': 'True', 'blank': 'True'}),
+ 'raw_general_contractor': ('django.db.models.fields.CharField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}),
+ 'raw_town_planning_service': ('django.db.models.fields.CharField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}),
+ 'reception_date': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}),
+ 'related_file': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['archaeological_files.File']", 'null': 'True', 'blank': 'True'}),
+ 'requested_operation_type': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'+'", 'null': 'True', 'to': "orm['ishtar_common.OperationType']"}),
+ 'research_comment': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'responsible_town_planning_service': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'responsible_town_planning_service_files'", 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': "orm['ishtar_common.Person']"}),
+ 'saisine_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['archaeological_files.SaisineType']", 'null': 'True', 'blank': 'True'}),
+ 'scientist': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'scientist'", 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': "orm['ishtar_common.Person']"}),
+ 'total_developed_surface': ('django.db.models.fields.FloatField', [], {'null': 'True', 'blank': 'True'}),
+ 'total_surface': ('django.db.models.fields.FloatField', [], {'null': 'True', 'blank': 'True'}),
+ 'towns': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'file'", 'symmetrical': 'False', 'to': "orm['ishtar_common.Town']"}),
+ 'year': ('django.db.models.fields.IntegerField', [], {'default': '2017'})
+ },
+ 'archaeological_files.filetype': {
+ 'Meta': {'ordering': "('label',)", 'object_name': 'FileType'},
+ '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'})
+ },
+ 'archaeological_files.permittype': {
+ 'Meta': {'ordering': "('label',)", 'object_name': 'PermitType'},
+ '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'})
+ },
+ 'archaeological_files.saisinetype': {
+ 'Meta': {'ordering': "('label',)", 'object_name': 'SaisineType'},
+ 'available': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
+ 'comment': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'delay': ('django.db.models.fields.IntegerField', [], {'default': '30'}),
+ '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'})
+ },
+ 'archaeological_finds.basefind': {
+ 'Meta': {'object_name': 'BaseFind'},
+ 'auto_external_id': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'batch': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['archaeological_finds.BatchType']", 'null': 'True', 'blank': 'True'}),
+ 'cache_complete_id': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'cache_short_id': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'comment': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'context_record': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'base_finds'", 'to': "orm['archaeological_context_records.ContextRecord']"}),
+ 'description': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'discovery_date': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}),
+ 'estimated_error_x': ('django.db.models.fields.FloatField', [], {'null': 'True', 'blank': 'True'}),
+ 'estimated_error_y': ('django.db.models.fields.FloatField', [], {'null': 'True', 'blank': 'True'}),
+ 'estimated_error_z': ('django.db.models.fields.FloatField', [], {'null': 'True', 'blank': 'True'}),
+ 'external_id': ('django.db.models.fields.TextField', [], {'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_archaeological_finds_basefind'", 'null': 'True', 'symmetrical': 'False', 'to': "orm['ishtar_common.Import']"}),
+ 'index': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
+ 'label': ('django.db.models.fields.TextField', [], {}),
+ 'line': ('django.contrib.gis.db.models.fields.LineStringField', [], {'null': 'True', 'blank': 'True'}),
+ 'material_index': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
+ 'point': ('django.contrib.gis.db.models.fields.PointField', [], {'dim': '3', 'null': 'True', 'blank': 'True'}),
+ 'point_2d': ('django.contrib.gis.db.models.fields.PointField', [], {'null': 'True', 'blank': 'True'}),
+ 'polygon': ('django.contrib.gis.db.models.fields.PolygonField', [], {'null': 'True', 'blank': 'True'}),
+ 'spatial_reference_system': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['ishtar_common.SpatialReferenceSystem']", 'null': 'True', 'blank': 'True'}),
+ 'special_interest': ('django.db.models.fields.CharField', [], {'max_length': '120', 'null': 'True', 'blank': 'True'}),
+ 'topographic_localisation': ('django.db.models.fields.CharField', [], {'max_length': '120', 'null': 'True', 'blank': 'True'}),
+ 'x': ('django.db.models.fields.FloatField', [], {'null': 'True', 'blank': 'True'}),
+ 'y': ('django.db.models.fields.FloatField', [], {'null': 'True', 'blank': 'True'}),
+ 'z': ('django.db.models.fields.FloatField', [], {'null': 'True', 'blank': 'True'})
+ },
+ 'archaeological_finds.batchtype': {
+ 'Meta': {'ordering': "('order',)", 'object_name': 'BatchType'},
+ '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': '10'}),
+ 'txt_idx': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '100'})
+ },
+ 'archaeological_finds.conservatorystate': {
+ 'Meta': {'ordering': "('label',)", 'object_name': 'ConservatoryState'},
+ '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'}),
+ 'parent': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['archaeological_finds.ConservatoryState']", 'null': 'True', 'blank': 'True'}),
+ 'txt_idx': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '100'})
+ },
+ 'archaeological_finds.find': {
+ 'Meta': {'ordering': "('cached_label',)", 'object_name': 'Find'},
+ 'auto_external_id': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'base_finds': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'find'", 'symmetrical': 'False', 'to': "orm['archaeological_finds.BaseFind']"}),
+ 'cached_label': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'check_date': ('django.db.models.fields.DateField', [], {'default': 'datetime.date.today'}),
+ 'checked': ('django.db.models.fields.CharField', [], {'default': "'NC'", 'max_length': '2'}),
+ 'collection': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'finds'", 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': "orm['archaeological_warehouse.Collection']"}),
+ 'comment': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'conservatory_comment': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'conservatory_state': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['archaeological_finds.ConservatoryState']", 'null': 'True', 'on_delete': 'models.SET_NULL', 'blank': 'True'}),
+ 'container': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'finds'", 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': "orm['archaeological_warehouse.Container']"}),
+ 'dating_comment': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'datings': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'find'", 'symmetrical': 'False', 'to': "orm['archaeological_context_records.Dating']"}),
+ 'description': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'diameter': ('django.db.models.fields.FloatField', [], {'null': 'True', 'blank': 'True'}),
+ 'dimensions_comment': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'downstream_treatment': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'upstream'", 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': "orm['archaeological_finds.Treatment']"}),
+ 'estimated_value': ('django.db.models.fields.FloatField', [], {'null': 'True', 'blank': 'True'}),
+ 'external_id': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'find_number': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
+ 'height': ('django.db.models.fields.FloatField', [], {'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'}),
+ 'image': ('django.db.models.fields.files.ImageField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}),
+ 'imports': ('django.db.models.fields.related.ManyToManyField', [], {'blank': 'True', 'related_name': "'imported_archaeological_finds_find'", 'null': 'True', 'symmetrical': 'False', 'to': "orm['ishtar_common.Import']"}),
+ 'index': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
+ 'integrities': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'find'", 'symmetrical': 'False', 'to': "orm['archaeological_finds.IntegrityType']"}),
+ 'is_complete': ('django.db.models.fields.NullBooleanField', [], {'null': 'True', 'blank': 'True'}),
+ 'label': ('django.db.models.fields.TextField', [], {}),
+ 'length': ('django.db.models.fields.FloatField', [], {'null': 'True', 'blank': 'True'}),
+ 'mark': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'material_types': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'finds'", 'symmetrical': 'False', 'to': "orm['archaeological_finds.MaterialType']"}),
+ 'min_number_of_individuals': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
+ 'object_types': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'find'", 'symmetrical': 'False', 'to': "orm['archaeological_finds.ObjectType']"}),
+ 'order': ('django.db.models.fields.IntegerField', [], {'default': '1'}),
+ 'preservation_to_considers': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'finds'", 'symmetrical': 'False', 'to': "orm['archaeological_finds.PreservationType']"}),
+ 'previous_id': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'remarkabilities': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'find'", 'symmetrical': 'False', 'to': "orm['archaeological_finds.RemarkabilityType']"}),
+ 'thickness': ('django.db.models.fields.FloatField', [], {'null': 'True', 'blank': 'True'}),
+ 'thumbnail': ('django.db.models.fields.files.ImageField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}),
+ 'upstream_treatment': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'downstream'", 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': "orm['archaeological_finds.Treatment']"}),
+ 'volume': ('django.db.models.fields.FloatField', [], {'null': 'True', 'blank': 'True'}),
+ 'weight': ('django.db.models.fields.FloatField', [], {'null': 'True', 'blank': 'True'}),
+ 'weight_unit': ('django.db.models.fields.CharField', [], {'max_length': '4', 'null': 'True', 'blank': 'True'}),
+ 'width': ('django.db.models.fields.FloatField', [], {'null': 'True', 'blank': 'True'})
+ },
+ 'archaeological_finds.findbasket': {
+ 'Meta': {'unique_together': "(('label', 'user'),)", 'object_name': 'FindBasket'},
+ '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'}),
+ 'items': ('django.db.models.fields.related.ManyToManyField', [], {'blank': 'True', 'related_name': "'basket'", 'null': 'True', 'symmetrical': 'False', 'to': "orm['archaeological_finds.Find']"}),
+ 'label': ('django.db.models.fields.CharField', [], {'max_length': '1000'}),
+ 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['ishtar_common.IshtarUser']", 'null': 'True', 'blank': 'True'})
+ },
+ 'archaeological_finds.finddownstreamtreatments': {
+ 'Meta': {'ordering': "('find', '-treatment_nb')", 'unique_together': "(('find', 'treatment'),)", 'object_name': 'FindDownstreamTreatments', 'db_table': "'find_downtreatments'", 'managed': 'False'},
+ 'find': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'finddownstreamtreatments_related'", 'to': "orm['archaeological_finds.Find']"}),
+ 'treatment': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['archaeological_finds.Treatment']", 'primary_key': 'True'}),
+ 'treatment_nb': ('django.db.models.fields.IntegerField', [], {})
+ },
+ 'archaeological_finds.findsource': {
+ 'Meta': {'object_name': 'FindSource'},
+ 'additional_information': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'associated_url': ('django.db.models.fields.URLField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}),
+ 'authors': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'findsource_related'", 'symmetrical': 'False', 'to': "orm['ishtar_common.Author']"}),
+ 'comment': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'creation_date': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}),
+ 'description': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'duplicate': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'external_id': ('django.db.models.fields.CharField', [], {'max_length': '12', 'null': 'True', 'blank': 'True'}),
+ 'find': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'source'", 'to': "orm['archaeological_finds.Find']"}),
+ 'format_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['ishtar_common.Format']", 'null': 'True', 'blank': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'image': ('django.db.models.fields.files.ImageField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}),
+ 'internal_reference': ('django.db.models.fields.CharField', [], {'max_length': '100', 'null': 'True', 'blank': 'True'}),
+ 'item_number': ('django.db.models.fields.IntegerField', [], {'default': '1'}),
+ 'receipt_date': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}),
+ 'receipt_date_in_documentation': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}),
+ 'reference': ('django.db.models.fields.CharField', [], {'max_length': '100', 'null': 'True', 'blank': 'True'}),
+ 'scale': ('django.db.models.fields.CharField', [], {'max_length': '30', 'null': 'True', 'blank': 'True'}),
+ 'source_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['ishtar_common.SourceType']"}),
+ 'support_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['ishtar_common.SupportType']", 'null': 'True', 'blank': 'True'}),
+ 'thumbnail': ('django.db.models.fields.files.ImageField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}),
+ 'title': ('django.db.models.fields.CharField', [], {'max_length': '300'})
+ },
+ 'archaeological_finds.findtreatments': {
+ 'Meta': {'ordering': "('find', 'upstream', '-treatment_nb')", 'unique_together': "(('find', 'treatment'),)", 'object_name': 'FindTreatments', 'db_table': "'find_treatments'", 'managed': 'False'},
+ 'find': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'findtreatments_related'", 'to': "orm['archaeological_finds.Find']"}),
+ 'treatment': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['archaeological_finds.Treatment']", 'primary_key': 'True'}),
+ 'treatment_nb': ('django.db.models.fields.IntegerField', [], {}),
+ 'upstream': ('django.db.models.fields.BooleanField', [], {'default': 'False'})
+ },
+ 'archaeological_finds.findupstreamtreatments': {
+ 'Meta': {'ordering': "('find', '-treatment_nb')", 'unique_together': "(('find', 'treatment'),)", 'object_name': 'FindUpstreamTreatments', 'db_table': "'find_uptreatments'", 'managed': 'False'},
+ 'find': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'findupstreamtreatments_related'", 'to': "orm['archaeological_finds.Find']"}),
+ 'treatment': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['archaeological_finds.Treatment']", 'primary_key': 'True'}),
+ 'treatment_nb': ('django.db.models.fields.IntegerField', [], {})
+ },
+ 'archaeological_finds.historicalbasefind': {
+ 'Meta': {'ordering': "('-history_date', '-history_id')", 'object_name': 'HistoricalBaseFind'},
+ 'auto_external_id': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'batch_id': ('django.db.models.fields.IntegerField', [], {'db_index': 'True', 'null': 'True', 'blank': 'True'}),
+ 'cache_complete_id': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'cache_short_id': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'comment': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'context_record_id': ('django.db.models.fields.IntegerField', [], {'db_index': 'True', 'null': 'True', 'blank': 'True'}),
+ 'description': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'discovery_date': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}),
+ 'estimated_error_x': ('django.db.models.fields.FloatField', [], {'null': 'True', 'blank': 'True'}),
+ 'estimated_error_y': ('django.db.models.fields.FloatField', [], {'null': 'True', 'blank': 'True'}),
+ 'estimated_error_z': ('django.db.models.fields.FloatField', [], {'null': 'True', 'blank': 'True'}),
+ 'external_id': ('django.db.models.fields.TextField', [], {'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'}),
+ 'index': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
+ 'label': ('django.db.models.fields.TextField', [], {}),
+ 'line': ('django.contrib.gis.db.models.fields.LineStringField', [], {'null': 'True', 'blank': 'True'}),
+ 'material_index': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
+ 'point': ('django.contrib.gis.db.models.fields.PointField', [], {'dim': '3', 'null': 'True', 'blank': 'True'}),
+ 'point_2d': ('django.contrib.gis.db.models.fields.PointField', [], {'null': 'True', 'blank': 'True'}),
+ 'polygon': ('django.contrib.gis.db.models.fields.PolygonField', [], {'null': 'True', 'blank': 'True'}),
+ 'spatial_reference_system_id': ('django.db.models.fields.IntegerField', [], {'db_index': 'True', 'null': 'True', 'blank': 'True'}),
+ 'special_interest': ('django.db.models.fields.CharField', [], {'max_length': '120', 'null': 'True', 'blank': 'True'}),
+ 'topographic_localisation': ('django.db.models.fields.CharField', [], {'max_length': '120', 'null': 'True', 'blank': 'True'}),
+ 'x': ('django.db.models.fields.FloatField', [], {'null': 'True', 'blank': 'True'}),
+ 'y': ('django.db.models.fields.FloatField', [], {'null': 'True', 'blank': 'True'}),
+ 'z': ('django.db.models.fields.FloatField', [], {'null': 'True', 'blank': 'True'})
+ },
+ 'archaeological_finds.historicalfind': {
+ 'Meta': {'ordering': "('-history_date', '-history_id')", 'object_name': 'HistoricalFind'},
+ 'auto_external_id': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'cached_label': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'check_date': ('django.db.models.fields.DateField', [], {'default': 'datetime.date.today'}),
+ 'checked': ('django.db.models.fields.CharField', [], {'default': "'NC'", 'max_length': '2'}),
+ 'collection_id': ('django.db.models.fields.IntegerField', [], {'db_index': 'True', 'null': 'True', 'blank': 'True'}),
+ 'comment': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'conservatory_comment': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'conservatory_state_id': ('django.db.models.fields.IntegerField', [], {'db_index': 'True', 'null': 'True', 'blank': 'True'}),
+ 'container_id': ('django.db.models.fields.IntegerField', [], {'db_index': 'True', 'null': 'True', 'blank': 'True'}),
+ 'dating_comment': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'description': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'diameter': ('django.db.models.fields.FloatField', [], {'null': 'True', 'blank': 'True'}),
+ 'dimensions_comment': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'downstream_treatment_id': ('django.db.models.fields.IntegerField', [], {'db_index': 'True', 'null': 'True', 'blank': 'True'}),
+ 'estimated_value': ('django.db.models.fields.FloatField', [], {'null': 'True', 'blank': 'True'}),
+ 'external_id': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'find_number': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
+ 'height': ('django.db.models.fields.FloatField', [], {'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'}),
+ 'image': ('django.db.models.fields.files.ImageField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}),
+ 'index': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
+ 'is_complete': ('django.db.models.fields.NullBooleanField', [], {'null': 'True', 'blank': 'True'}),
+ 'label': ('django.db.models.fields.TextField', [], {}),
+ 'length': ('django.db.models.fields.FloatField', [], {'null': 'True', 'blank': 'True'}),
+ 'mark': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'min_number_of_individuals': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
+ 'order': ('django.db.models.fields.IntegerField', [], {'default': '1'}),
+ 'previous_id': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'thickness': ('django.db.models.fields.FloatField', [], {'null': 'True', 'blank': 'True'}),
+ 'thumbnail': ('django.db.models.fields.files.ImageField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}),
+ 'upstream_treatment_id': ('django.db.models.fields.IntegerField', [], {'db_index': 'True', 'null': 'True', 'blank': 'True'}),
+ 'volume': ('django.db.models.fields.FloatField', [], {'null': 'True', 'blank': 'True'}),
+ 'weight': ('django.db.models.fields.FloatField', [], {'null': 'True', 'blank': 'True'}),
+ 'weight_unit': ('django.db.models.fields.CharField', [], {'max_length': '4', 'null': 'True', 'blank': 'True'}),
+ 'width': ('django.db.models.fields.FloatField', [], {'null': 'True', 'blank': 'True'})
+ },
+ 'archaeological_finds.historicaltreatment': {
+ 'Meta': {'ordering': "('-history_date', '-history_id')", 'object_name': 'HistoricalTreatment'},
+ 'cached_label': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'comment': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'container_id': ('django.db.models.fields.IntegerField', [], {'db_index': 'True', 'null': 'True', 'blank': 'True'}),
+ 'description': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'end_date': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}),
+ 'estimated_cost': ('django.db.models.fields.FloatField', [], {'null': 'True', 'blank': 'True'}),
+ 'external_id': ('django.db.models.fields.CharField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}),
+ 'file_id': ('django.db.models.fields.IntegerField', [], {'db_index': 'True', 'null': 'True', 'blank': 'True'}),
+ 'goal': ('django.db.models.fields.TextField', [], {'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'}),
+ 'image': ('django.db.models.fields.files.ImageField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}),
+ 'index': ('django.db.models.fields.IntegerField', [], {'default': '1'}),
+ 'insurance_cost': ('django.db.models.fields.FloatField', [], {'null': 'True', 'blank': 'True'}),
+ 'label': ('django.db.models.fields.CharField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}),
+ 'location_id': ('django.db.models.fields.IntegerField', [], {'db_index': 'True', 'null': 'True', 'blank': 'True'}),
+ 'organization_id': ('django.db.models.fields.IntegerField', [], {'db_index': 'True', 'null': 'True', 'blank': 'True'}),
+ 'other_reference': ('django.db.models.fields.CharField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}),
+ 'person_id': ('django.db.models.fields.IntegerField', [], {'db_index': 'True', 'null': 'True', 'blank': 'True'}),
+ 'quoted_cost': ('django.db.models.fields.FloatField', [], {'null': 'True', 'blank': 'True'}),
+ 'realized_cost': ('django.db.models.fields.FloatField', [], {'null': 'True', 'blank': 'True'}),
+ 'start_date': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}),
+ 'target_is_basket': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'thumbnail': ('django.db.models.fields.files.ImageField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}),
+ 'treatment_state_id': ('django.db.models.fields.IntegerField', [], {'db_index': 'True', 'null': 'True', 'blank': 'True'}),
+ 'year': ('django.db.models.fields.IntegerField', [], {'default': '2017'})
+ },
+ 'archaeological_finds.historicaltreatmentfile': {
+ 'Meta': {'ordering': "('-history_date', '-history_id')", 'object_name': 'HistoricalTreatmentFile'},
+ 'applicant_id': ('django.db.models.fields.IntegerField', [], {'db_index': 'True', 'null': 'True', 'blank': 'True'}),
+ 'applicant_organisation_id': ('django.db.models.fields.IntegerField', [], {'db_index': 'True', 'null': 'True', 'blank': 'True'}),
+ 'cached_label': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'comment': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'creation_date': ('django.db.models.fields.DateField', [], {'default': 'datetime.date.today', 'null': 'True', 'blank': 'True'}),
+ 'end_date': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}),
+ 'external_id': ('django.db.models.fields.CharField', [], {'max_length': '200', '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'}),
+ 'in_charge_id': ('django.db.models.fields.IntegerField', [], {'db_index': 'True', 'null': 'True', 'blank': 'True'}),
+ 'index': ('django.db.models.fields.IntegerField', [], {'default': '1'}),
+ 'internal_reference': ('django.db.models.fields.CharField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}),
+ 'name': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'reception_date': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}),
+ 'type_id': ('django.db.models.fields.IntegerField', [], {'db_index': 'True', 'null': 'True', 'blank': 'True'}),
+ 'year': ('django.db.models.fields.IntegerField', [], {'default': '2017'})
+ },
+ 'archaeological_finds.integritytype': {
+ 'Meta': {'ordering': "('label',)", 'object_name': 'IntegrityType'},
+ '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'})
+ },
+ 'archaeological_finds.materialtype': {
+ 'Meta': {'ordering': "('label',)", 'object_name': 'MaterialType'},
+ 'available': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
+ 'code': ('django.db.models.fields.CharField', [], {'max_length': '10', 'null': 'True', 'blank': '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'}),
+ 'parent': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['archaeological_finds.MaterialType']", 'null': 'True', 'blank': 'True'}),
+ 'recommendation': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'txt_idx': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '100'})
+ },
+ 'archaeological_finds.objecttype': {
+ 'Meta': {'ordering': "('parent__label', 'label')", 'object_name': 'ObjectType'},
+ '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'}),
+ 'parent': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['archaeological_finds.ObjectType']", 'null': 'True', 'blank': 'True'}),
+ 'txt_idx': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '100'})
+ },
+ 'archaeological_finds.preservationtype': {
+ 'Meta': {'ordering': "('label',)", 'object_name': 'PreservationType'},
+ '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'})
+ },
+ 'archaeological_finds.property': {
+ 'Meta': {'object_name': 'Property'},
+ 'administrative_act': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['archaeological_operations.AdministrativeAct']"}),
+ 'end_date': ('django.db.models.fields.DateField', [], {}),
+ 'find': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['archaeological_finds.Find']"}),
+ 'history_creator': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'+'", 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': "orm['auth.User']"}),
+ 'history_date': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
+ '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_archaeological_finds_property'", 'null': 'True', 'symmetrical': 'False', 'to': "orm['ishtar_common.Import']"}),
+ 'person': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'properties'", 'to': "orm['ishtar_common.Person']"}),
+ 'start_date': ('django.db.models.fields.DateField', [], {})
+ },
+ 'archaeological_finds.remarkabilitytype': {
+ 'Meta': {'ordering': "('label',)", 'object_name': 'RemarkabilityType'},
+ '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'})
+ },
+ 'archaeological_finds.treatment': {
+ 'Meta': {'unique_together': "(('year', 'index'),)", 'object_name': 'Treatment'},
+ 'cached_label': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'comment': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'container': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['archaeological_warehouse.Container']", 'null': 'True', 'blank': 'True'}),
+ 'description': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'end_date': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}),
+ 'estimated_cost': ('django.db.models.fields.FloatField', [], {'null': 'True', 'blank': 'True'}),
+ 'external_id': ('django.db.models.fields.CharField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}),
+ 'file': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'treatments'", 'null': 'True', 'to': "orm['archaeological_finds.TreatmentFile']"}),
+ 'goal': ('django.db.models.fields.TextField', [], {'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'}),
+ 'image': ('django.db.models.fields.files.ImageField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}),
+ 'imports': ('django.db.models.fields.related.ManyToManyField', [], {'blank': 'True', 'related_name': "'imported_archaeological_finds_treatment'", 'null': 'True', 'symmetrical': 'False', 'to': "orm['ishtar_common.Import']"}),
+ 'index': ('django.db.models.fields.IntegerField', [], {'default': '1'}),
+ 'insurance_cost': ('django.db.models.fields.FloatField', [], {'null': 'True', 'blank': 'True'}),
+ 'label': ('django.db.models.fields.CharField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}),
+ 'location': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['archaeological_warehouse.Warehouse']", 'null': 'True', 'blank': 'True'}),
+ 'organization': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'treatments'", 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': "orm['ishtar_common.Organization']"}),
+ 'other_reference': ('django.db.models.fields.CharField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}),
+ 'person': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'treatments'", 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': "orm['ishtar_common.Person']"}),
+ 'quoted_cost': ('django.db.models.fields.FloatField', [], {'null': 'True', 'blank': 'True'}),
+ 'realized_cost': ('django.db.models.fields.FloatField', [], {'null': 'True', 'blank': 'True'}),
+ 'start_date': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}),
+ 'target_is_basket': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'thumbnail': ('django.db.models.fields.files.ImageField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}),
+ 'treatment_state': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['archaeological_finds.TreatmentState']", 'null': 'True', 'blank': 'True'}),
+ 'treatment_types': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['archaeological_finds.TreatmentType']", 'symmetrical': 'False'}),
+ 'year': ('django.db.models.fields.IntegerField', [], {'default': '2017'})
+ },
+ 'archaeological_finds.treatmentfile': {
+ 'Meta': {'ordering': "('cached_label',)", 'unique_together': "(('year', 'index'),)", 'object_name': 'TreatmentFile'},
+ 'applicant': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'treatmentfile_applicant'", 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': "orm['ishtar_common.Person']"}),
+ 'applicant_organisation': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'treatmentfile_applicant'", 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': "orm['ishtar_common.Organization']"}),
+ 'cached_label': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'comment': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'creation_date': ('django.db.models.fields.DateField', [], {'default': 'datetime.date.today', 'null': 'True', 'blank': 'True'}),
+ 'end_date': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}),
+ 'external_id': ('django.db.models.fields.CharField', [], {'max_length': '200', '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_archaeological_finds_treatmentfile'", 'null': 'True', 'symmetrical': 'False', 'to': "orm['ishtar_common.Import']"}),
+ 'in_charge': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'treatmentfile_responsability'", 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': "orm['ishtar_common.Person']"}),
+ 'index': ('django.db.models.fields.IntegerField', [], {'default': '1'}),
+ 'internal_reference': ('django.db.models.fields.CharField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}),
+ 'name': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'reception_date': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}),
+ 'type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['archaeological_finds.TreatmentFileType']"}),
+ 'year': ('django.db.models.fields.IntegerField', [], {'default': '2017'})
+ },
+ 'archaeological_finds.treatmentfilesource': {
+ 'Meta': {'object_name': 'TreatmentFileSource'},
+ 'additional_information': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'associated_url': ('django.db.models.fields.URLField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}),
+ 'authors': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'treatmentfilesource_related'", 'symmetrical': 'False', 'to': "orm['ishtar_common.Author']"}),
+ 'comment': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'creation_date': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}),
+ 'description': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'duplicate': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'external_id': ('django.db.models.fields.CharField', [], {'max_length': '12', 'null': 'True', 'blank': 'True'}),
+ 'format_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['ishtar_common.Format']", 'null': 'True', 'blank': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'image': ('django.db.models.fields.files.ImageField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}),
+ 'internal_reference': ('django.db.models.fields.CharField', [], {'max_length': '100', 'null': 'True', 'blank': 'True'}),
+ 'item_number': ('django.db.models.fields.IntegerField', [], {'default': '1'}),
+ 'receipt_date': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}),
+ 'receipt_date_in_documentation': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}),
+ 'reference': ('django.db.models.fields.CharField', [], {'max_length': '100', 'null': 'True', 'blank': 'True'}),
+ 'scale': ('django.db.models.fields.CharField', [], {'max_length': '30', 'null': 'True', 'blank': 'True'}),
+ 'source_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['ishtar_common.SourceType']"}),
+ 'support_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['ishtar_common.SupportType']", 'null': 'True', 'blank': 'True'}),
+ 'thumbnail': ('django.db.models.fields.files.ImageField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}),
+ 'title': ('django.db.models.fields.CharField', [], {'max_length': '300'}),
+ 'treatment_file': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'source'", 'to': "orm['archaeological_finds.TreatmentFile']"})
+ },
+ 'archaeological_finds.treatmentfiletype': {
+ 'Meta': {'ordering': "('label',)", 'object_name': 'TreatmentFileType'},
+ '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'})
+ },
+ 'archaeological_finds.treatmentsource': {
+ 'Meta': {'object_name': 'TreatmentSource'},
+ 'additional_information': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'associated_url': ('django.db.models.fields.URLField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}),
+ 'authors': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'treatmentsource_related'", 'symmetrical': 'False', 'to': "orm['ishtar_common.Author']"}),
+ 'comment': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'creation_date': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}),
+ 'description': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'duplicate': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'external_id': ('django.db.models.fields.CharField', [], {'max_length': '12', 'null': 'True', 'blank': 'True'}),
+ 'format_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['ishtar_common.Format']", 'null': 'True', 'blank': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'image': ('django.db.models.fields.files.ImageField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}),
+ 'internal_reference': ('django.db.models.fields.CharField', [], {'max_length': '100', 'null': 'True', 'blank': 'True'}),
+ 'item_number': ('django.db.models.fields.IntegerField', [], {'default': '1'}),
+ 'receipt_date': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}),
+ 'receipt_date_in_documentation': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}),
+ 'reference': ('django.db.models.fields.CharField', [], {'max_length': '100', 'null': 'True', 'blank': 'True'}),
+ 'scale': ('django.db.models.fields.CharField', [], {'max_length': '30', 'null': 'True', 'blank': 'True'}),
+ 'source_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['ishtar_common.SourceType']"}),
+ 'support_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['ishtar_common.SupportType']", 'null': 'True', 'blank': 'True'}),
+ 'thumbnail': ('django.db.models.fields.files.ImageField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}),
+ 'title': ('django.db.models.fields.CharField', [], {'max_length': '300'}),
+ 'treatment': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'source'", 'to': "orm['archaeological_finds.Treatment']"})
+ },
+ 'archaeological_finds.treatmentstate': {
+ 'Meta': {'ordering': "('label',)", 'object_name': 'TreatmentState'},
+ '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'})
+ },
+ 'archaeological_finds.treatmenttype': {
+ 'Meta': {'ordering': "('label',)", 'object_name': 'TreatmentType'},
+ 'available': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
+ 'comment': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'downstream_is_many': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ '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': '10'}),
+ 'parent': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['archaeological_finds.TreatmentType']", 'null': 'True', 'blank': 'True'}),
+ 'txt_idx': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '100'}),
+ 'upstream_is_many': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'virtual': ('django.db.models.fields.BooleanField', [], {'default': 'False'})
+ },
+ 'archaeological_operations.acttype': {
+ 'Meta': {'ordering': "('label',)", 'object_name': 'ActType'},
+ 'associated_template': ('django.db.models.fields.related.ManyToManyField', [], {'blank': 'True', 'related_name': "'acttypes'", 'null': 'True', 'symmetrical': 'False', 'to': "orm['ishtar_common.DocumentTemplate']"}),
+ 'available': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
+ 'code': ('django.db.models.fields.CharField', [], {'max_length': '10', 'null': 'True', 'blank': 'True'}),
+ 'comment': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'indexed': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'intented_to': ('django.db.models.fields.CharField', [], {'max_length': '2'}),
+ 'label': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
+ 'txt_idx': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '100'})
+ },
+ 'archaeological_operations.administrativeact': {
+ 'Meta': {'ordering': "('year', 'signature_date', 'index', 'act_type')", 'object_name': 'AdministrativeAct'},
+ 'act_object': ('django.db.models.fields.TextField', [], {'max_length': '300', 'null': 'True', 'blank': 'True'}),
+ 'act_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['archaeological_operations.ActType']"}),
+ 'associated_file': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'administrative_act'", 'null': 'True', 'to': "orm['archaeological_files.File']"}),
+ 'departments_label': ('django.db.models.fields.TextField', [], {'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_archaeological_operations_administrativeact'", 'null': 'True', 'symmetrical': 'False', 'to': "orm['ishtar_common.Import']"}),
+ 'in_charge': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'adminact_operation_in_charge'", 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': "orm['ishtar_common.Person']"}),
+ 'index': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
+ 'operation': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'administrative_act'", 'null': 'True', 'to': "orm['archaeological_operations.Operation']"}),
+ 'operator': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'adminact_operator'", 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': "orm['ishtar_common.Organization']"}),
+ 'ref_sra': ('django.db.models.fields.CharField', [], {'max_length': '15', 'null': 'True', 'blank': 'True'}),
+ 'scientist': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'adminact_scientist'", 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': "orm['ishtar_common.Person']"}),
+ 'signatory': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'signatory'", 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': "orm['ishtar_common.Person']"}),
+ 'signature_date': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}),
+ 'towns_label': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'treatment': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'administrative_act'", 'null': 'True', 'to': "orm['archaeological_finds.Treatment']"}),
+ 'treatment_file': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'administrative_act'", 'null': 'True', 'to': "orm['archaeological_finds.TreatmentFile']"}),
+ 'year': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'})
+ },
+ 'archaeological_operations.archaeologicalsite': {
+ 'Meta': {'object_name': 'ArchaeologicalSite'},
+ '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_archaeological_operations_archaeologicalsite'", 'null': 'True', 'symmetrical': 'False', 'to': "orm['ishtar_common.Import']"}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}),
+ 'periods': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'to': "orm['archaeological_operations.Period']", 'null': 'True', 'blank': 'True'}),
+ 'reference': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '20'}),
+ 'remains': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'to': "orm['archaeological_operations.RemainType']", 'null': 'True', 'blank': 'True'})
+ },
+ 'archaeological_operations.operation': {
+ 'Meta': {'ordering': "('cached_label',)", 'object_name': 'Operation'},
+ 'abstract': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'archaeological_sites': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'to': "orm['archaeological_operations.ArchaeologicalSite']", 'null': 'True', 'blank': 'True'}),
+ 'associated_file': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'operations'", 'null': 'True', 'to': "orm['archaeological_files.File']"}),
+ 'cached_label': ('django.db.models.fields.CharField', [], {'max_length': '500', 'null': 'True', 'blank': 'True'}),
+ 'cira_date': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}),
+ 'cira_rapporteur': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'cira_rapporteur'", 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': "orm['ishtar_common.Person']"}),
+ 'code_patriarche': ('django.db.models.fields.IntegerField', [], {'unique': 'True', 'null': 'True', 'blank': 'True'}),
+ 'comment': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'common_name': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'cost': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
+ 'creation_date': ('django.db.models.fields.DateField', [], {'default': 'datetime.date.today'}),
+ 'documentation_deadline': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}),
+ 'documentation_received': ('django.db.models.fields.NullBooleanField', [], {'null': 'True', 'blank': 'True'}),
+ 'eas_number': ('django.db.models.fields.CharField', [], {'max_length': '20', 'null': 'True', 'blank': 'True'}),
+ 'effective_man_days': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
+ 'end_date': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}),
+ 'excavation_end_date': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}),
+ 'finds_deadline': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}),
+ 'finds_received': ('django.db.models.fields.NullBooleanField', [], {'null': 'True', 'blank': 'True'}),
+ 'fnap_cost': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
+ 'fnap_financing': ('django.db.models.fields.FloatField', [], {'null': 'True', 'blank': 'True'}),
+ 'geoarchaeological_context_prescription': ('django.db.models.fields.NullBooleanField', [], {'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'}),
+ 'image': ('django.db.models.fields.files.ImageField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}),
+ 'imports': ('django.db.models.fields.related.ManyToManyField', [], {'blank': 'True', 'related_name': "'imported_archaeological_operations_operation'", 'null': 'True', 'symmetrical': 'False', 'to': "orm['ishtar_common.Import']"}),
+ 'in_charge': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'operation_responsability'", 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': "orm['ishtar_common.Person']"}),
+ 'large_area_prescription': ('django.db.models.fields.NullBooleanField', [], {'null': 'True', 'blank': 'True'}),
+ 'multi_polygon': ('django.contrib.gis.db.models.fields.MultiPolygonField', [], {'null': 'True', 'blank': 'True'}),
+ 'negative_result': ('django.db.models.fields.NullBooleanField', [], {'null': 'True', 'blank': 'True'}),
+ 'old_code': ('django.db.models.fields.CharField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}),
+ 'operation_code': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
+ 'operation_type': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'+'", 'to': "orm['ishtar_common.OperationType']"}),
+ 'operator': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'operator'", 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': "orm['ishtar_common.Organization']"}),
+ 'operator_reference': ('django.db.models.fields.CharField', [], {'max_length': '20', 'null': 'True', 'blank': 'True'}),
+ 'optional_man_days': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
+ 'periods': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'to': "orm['archaeological_operations.Period']", 'null': 'True', 'blank': 'True'}),
+ 'point': ('django.contrib.gis.db.models.fields.PointField', [], {'null': 'True', 'blank': 'True'}),
+ 'record_quality': ('django.db.models.fields.CharField', [], {'max_length': '2', 'null': 'True', 'blank': 'True'}),
+ 'remains': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'to': "orm['archaeological_operations.RemainType']", 'null': 'True', 'blank': 'True'}),
+ 'report_delivery_date': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}),
+ 'report_processing': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['archaeological_operations.ReportState']", 'null': 'True', 'blank': 'True'}),
+ 'scheduled_man_days': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
+ 'scientific_documentation_comment': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'scientist': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'operation_scientist_responsability'", 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': "orm['ishtar_common.Person']"}),
+ 'start_date': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}),
+ 'surface': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
+ 'thumbnail': ('django.db.models.fields.files.ImageField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}),
+ 'towns': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'operations'", 'symmetrical': 'False', 'to': "orm['ishtar_common.Town']"}),
+ 'virtual_operation': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'year': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
+ 'zoning_prescription': ('django.db.models.fields.NullBooleanField', [], {'null': 'True', 'blank': 'True'})
+ },
+ 'archaeological_operations.parcel': {
+ 'Meta': {'ordering': "('year', 'section', 'parcel_number')", 'object_name': 'Parcel'},
+ 'address': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'associated_file': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'parcels'", 'null': 'True', 'to': "orm['archaeological_files.File']"}),
+ 'auto_external_id': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'external_id': ('django.db.models.fields.CharField', [], {'max_length': '100', '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_date': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
+ '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_archaeological_operations_parcel'", 'null': 'True', 'symmetrical': 'False', 'to': "orm['ishtar_common.Import']"}),
+ 'operation': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'parcels'", 'null': 'True', 'to': "orm['archaeological_operations.Operation']"}),
+ 'parcel_number': ('django.db.models.fields.CharField', [], {'max_length': '6', 'null': 'True', 'blank': 'True'}),
+ 'public_domain': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'section': ('django.db.models.fields.CharField', [], {'max_length': '4', 'null': 'True', 'blank': 'True'}),
+ 'town': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'parcels'", 'to': "orm['ishtar_common.Town']"}),
+ 'year': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'})
+ },
+ 'archaeological_operations.period': {
+ 'Meta': {'ordering': "('order',)", 'object_name': 'Period'},
+ 'available': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
+ 'comment': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'end_date': ('django.db.models.fields.IntegerField', [], {}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'label': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
+ 'order': ('django.db.models.fields.IntegerField', [], {}),
+ 'parent': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['archaeological_operations.Period']", 'null': 'True', 'blank': 'True'}),
+ 'start_date': ('django.db.models.fields.IntegerField', [], {}),
+ 'txt_idx': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '100'})
+ },
+ 'archaeological_operations.remaintype': {
+ 'Meta': {'ordering': "('label',)", 'object_name': 'RemainType'},
+ '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'})
+ },
+ 'archaeological_operations.reportstate': {
+ 'Meta': {'ordering': "('order',)", 'object_name': 'ReportState'},
+ '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', [], {}),
+ 'txt_idx': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '100'})
+ },
+ 'archaeological_warehouse.collection': {
+ 'Meta': {'ordering': "('name',)", 'object_name': 'Collection'},
+ 'description': ('django.db.models.fields.TextField', [], {'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_date': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
+ '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_archaeological_warehouse_collection'", 'null': 'True', 'symmetrical': 'False', 'to': "orm['ishtar_common.Import']"}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}),
+ 'warehouse': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'collections'", 'to': "orm['archaeological_warehouse.Warehouse']"})
+ },
+ 'archaeological_warehouse.container': {
+ 'Meta': {'ordering': "('cached_label',)", 'unique_together': "(('index', 'location'),)", 'object_name': 'Container'},
+ 'auto_external_id': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'cached_label': ('django.db.models.fields.CharField', [], {'max_length': '500', 'null': 'True', 'blank': 'True'}),
+ 'cached_location': ('django.db.models.fields.CharField', [], {'max_length': '500', 'null': 'True', 'blank': 'True'}),
+ 'comment': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'container_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['archaeological_warehouse.ContainerType']"}),
+ 'external_id': ('django.db.models.fields.TextField', [], {'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_date': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
+ '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_archaeological_warehouse_container'", 'null': 'True', 'symmetrical': 'False', 'to': "orm['ishtar_common.Import']"}),
+ 'index': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
+ 'location': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'containers'", 'to': "orm['archaeological_warehouse.Warehouse']"}),
+ 'reference': ('django.db.models.fields.CharField', [], {'max_length': '40'}),
+ 'responsible': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'owned_containers'", 'to': "orm['archaeological_warehouse.Warehouse']"})
+ },
+ 'archaeological_warehouse.containertype': {
+ 'Meta': {'ordering': "('label',)", 'object_name': 'ContainerType'},
+ 'available': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
+ 'comment': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'height': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'label': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
+ 'length': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
+ 'reference': ('django.db.models.fields.CharField', [], {'max_length': '30'}),
+ 'txt_idx': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '100'}),
+ 'volume': ('django.db.models.fields.FloatField', [], {'null': 'True', 'blank': 'True'}),
+ 'width': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'})
+ },
+ 'archaeological_warehouse.warehouse': {
+ 'Meta': {'object_name': 'Warehouse'},
+ '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'}),
+ 'associated_divisions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['archaeological_warehouse.WarehouseDivision']", 'symmetrical': 'False', 'through': "orm['archaeological_warehouse.WarehouseDivisionLink']", 'blank': 'True'}),
+ 'auto_external_id': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'comment': ('django.db.models.fields.TextField', [], {'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'}),
+ 'external_id': ('django.db.models.fields.TextField', [], {'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_archaeological_warehouse_warehouse'", 'null': 'True', 'symmetrical': 'False', 'to': "orm['ishtar_common.Import']"}),
+ 'mobile_phone': ('django.db.models.fields.CharField', [], {'max_length': '18', 'null': 'True', 'blank': 'True'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '200'}),
+ 'person_in_charge': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'warehouse_in_charge'", 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': "orm['ishtar_common.Person']"}),
+ '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'}),
+ 'warehouse_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['archaeological_warehouse.WarehouseType']"})
+ },
+ 'archaeological_warehouse.warehousedivision': {
+ 'Meta': {'object_name': 'WarehouseDivision'},
+ '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'})
+ },
+ 'archaeological_warehouse.warehousedivisionlink': {
+ 'Meta': {'ordering': "('warehouse', 'order')", 'unique_together': "(('warehouse', 'division'),)", 'object_name': 'WarehouseDivisionLink'},
+ 'division': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['archaeological_warehouse.WarehouseDivision']"}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'order': ('django.db.models.fields.IntegerField', [], {'default': '10'}),
+ 'warehouse': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['archaeological_warehouse.Warehouse']"})
+ },
+ 'archaeological_warehouse.warehousetype': {
+ 'Meta': {'ordering': "('label',)", 'object_name': 'WarehouseType'},
+ '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'})
+ },
+ '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': {'ordering': "['label']", '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': {'ordering': "['label']", '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.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': '255', 'null': 'True', 'blank': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'imported_file': ('django.db.models.fields.files.FileField', [], {'max_length': '220'}),
+ 'imported_images': ('django.db.models.fields.files.FileField', [], {'max_length': '220', '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': '255', 'null': 'True', 'blank': 'True'}),
+ 'result_file': ('django.db.models.fields.files.FileField', [], {'max_length': '255', '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.importermodel': {
+ 'Meta': {'ordering': "('name',)", 'object_name': 'ImporterModel'},
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'klass': ('django.db.models.fields.CharField', [], {'max_length': '200'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '200'})
+ },
+ 'ishtar_common.importertype': {
+ 'Meta': {'ordering': "('name',)", 'object_name': 'ImporterType'},
+ 'associated_models': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'+'", 'null': 'True', 'to': "orm['ishtar_common.ImporterModel']"}),
+ 'created_models': ('django.db.models.fields.related.ManyToManyField', [], {'blank': 'True', 'related_name': "'+'", 'null': 'True', 'symmetrical': 'False', 'to': "orm['ishtar_common.ImporterModel']"}),
+ '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.ishtaruser': {
+ 'Meta': {'object_name': 'IshtarUser', '_ormbases': ['auth.User']},
+ 'advanced_shortcut_menu': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ '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.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'}),
+ 'archived': ('django.db.models.fields.NullBooleanField', [], {'default': 'False', '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'}),
+ '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'}),
+ 'archived': ('django.db.models.fields.NullBooleanField', [], {'default': 'False', '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'}),
+ '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'}),
+ 'old_title': ('django.db.models.fields.CharField', [], {'max_length': '100', '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'}),
+ 'salutation': ('django.db.models.fields.CharField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}),
+ 'surname': ('django.db.models.fields.CharField', [], {'max_length': '50', 'null': 'True', 'blank': 'True'}),
+ 'title': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['ishtar_common.TitleType']", '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.sourcetype': {
+ 'Meta': {'ordering': "['label']", '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.spatialreferencesystem': {
+ 'Meta': {'ordering': "('label',)", 'object_name': 'SpatialReferenceSystem'},
+ 'auth_name': ('django.db.models.fields.CharField', [], {'default': "'EPSG'", 'max_length': '256'}),
+ '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': '10'}),
+ 'srid': ('django.db.models.fields.IntegerField', [], {}),
+ '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.titletype': {
+ 'Meta': {'ordering': "('label',)", 'object_name': 'TitleType'},
+ '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.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'}),
+ 'imports': ('django.db.models.fields.related.ManyToManyField', [], {'blank': 'True', 'related_name': "'imported_ishtar_common_town'", 'null': 'True', 'symmetrical': 'False', 'to': "orm['ishtar_common.Import']"}),
+ '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 = ['archaeological_finds'] \ No newline at end of file
diff --git a/archaeological_finds/models.py b/archaeological_finds/models.py
index 1a1ef063d..eb209461f 100644
--- a/archaeological_finds/models.py
+++ b/archaeological_finds/models.py
@@ -1,6 +1,7 @@
from archaeological_finds.models_finds import MaterialType, ConservatoryState,\
PreservationType, IntegrityType, RemarkabilityType, ObjectType, BaseFind, \
- FindBasket, Find, FindSource, Property, CHECK_CHOICES, BatchType
+ FindBasket, Find, FindSource, Property, CHECK_CHOICES, BatchType, \
+ BFBulkView, FBulkView, FirstBaseFindView
from archaeological_finds.models_treatments import TreatmentType, Treatment, \
AbsFindTreatments, FindUpstreamTreatments, FindDownstreamTreatments, \
FindTreatments, TreatmentSource, TreatmentFile, TreatmentFileType, \
@@ -9,6 +10,7 @@ from archaeological_finds.models_treatments import TreatmentType, Treatment, \
__all__ = ['MaterialType', 'ConservatoryState', 'PreservationType',
'IntegrityType', 'RemarkabilityType', 'ObjectType',
'BaseFind', 'FindBasket', 'Find', 'FindSource', 'Property',
+ 'BFBulkView', 'FBulkView', 'FirstBaseFindView',
'CHECK_CHOICES', 'BatchType', 'TreatmentType', 'TreatmentState',
'Treatment', 'AbsFindTreatments', 'FindUpstreamTreatments',
'FindDownstreamTreatments', 'FindTreatments', 'TreatmentSource',
diff --git a/archaeological_finds/models_finds.py b/archaeological_finds/models_finds.py
index 8f0270236..bf5ba6380 100644
--- a/archaeological_finds/models_finds.py
+++ b/archaeological_finds/models_finds.py
@@ -22,6 +22,7 @@ import datetime
from django.conf import settings
from django.contrib.gis.db import models
from django.core.urlresolvers import reverse
+from django.db import connection, transaction
from django.db.models import Max, Q
from django.db.models.signals import m2m_changed, post_save, post_delete
from django.utils.translation import ugettext_lazy as _, ugettext
@@ -126,6 +127,26 @@ post_save.connect(post_save_cache, sender=ObjectType)
post_delete.connect(post_save_cache, sender=ObjectType)
+class BFBulkView(object):
+ CREATE_SQL = """
+ CREATE VIEW basefind_cached_bulk_update
+ AS (
+ SELECT bf.id AS id, ope.code_patriarche AS main_ope_code,
+ ope.year AS year,
+ ope.operation_code AS ope_code,
+ cr.label AS cr_label,
+ bf.index AS index
+ FROM archaeological_finds_basefind bf
+ INNER JOIN archaeological_context_records_contextrecord cr
+ ON cr.id = bf.context_record_id
+ INNER JOIN archaeological_operations_operation ope
+ ON ope.id = cr.operation_id
+ );"""
+ DELETE_SQL = """
+ DROP VIEW basefind_cached_bulk_update;
+ """
+
+
class BaseFind(BaseHistorizedItem, OwnPerms):
label = models.TextField(_(u"Free ID"))
external_id = models.TextField(_(u"External ID"), blank=True, null=True)
@@ -199,34 +220,45 @@ class BaseFind(BaseHistorizedItem, OwnPerms):
return q.aggregate(Max('index'))['index__max']
return 0
- def complete_id(self):
- # OPE|MAT.CODE|UE|FIND_index
+ def _ope_code(self):
if not self.context_record.operation:
- return
- # find = self.get_last_find()
+ return ''
ope = self.context_record.operation
- c_id = [unicode(ope.code_patriarche) if ope.code_patriarche else
- (unicode(ope.year) + "-" + unicode(ope.operation_code))]
+ c_id = []
+ if ope.code_patriarche:
+ c_id.append(settings.ISHTAR_OPE_PREFIX +
+ unicode(ope.code_patriarche))
+ elif ope.year and ope.operation_code:
+ c_id.append(
+ settings.ISHTAR_DEF_OPE_PREFIX +
+ unicode(ope.year or '') + u"-" +
+ unicode(ope.operation_code or ''))
+ else:
+ c_id.append('')
+ return settings.JOINT.join(c_id)
+
+ def complete_id(self):
+ # OPE|MAT.CODE|UE|FIND_index
+ c_id = [self._ope_code()]
+
materials = set()
for find in self.find.filter(downstream_treatment__isnull=True):
for mat in find.material_types.all():
if mat.code:
materials.add(mat.code)
c_id.append(u'-'.join(sorted(list(materials))))
+
c_id.append(self.context_record.label)
- max_index = str(self.get_max_index(ope))
- c_id.append((u'{:0' + str(len(max_index)) + 'd}').format(self.index))
+
+ c_id.append((u'{:0' + str(settings.ISHTAR_FINDS_INDEX_ZERO_LEN) + 'd}'
+ ).format(self.index))
return settings.JOINT.join(c_id)
def short_id(self):
# OPE|FIND_index
- if not self.context_record.operation:
- return
- ope = self.context_record.operation
- c_id = [(ope.code_patriarche and unicode(ope.code_patriarche)) or
- (unicode(ope.year) + "-" + unicode(ope.operation_code))]
- max_index = str(self.get_max_index(ope))
- c_id.append((u'{:0' + str(len(max_index)) + 'd}').format(self.index))
+ c_id = [self._ope_code()]
+ c_id.append((u'{:0' + str(settings.ISHTAR_FINDS_INDEX_ZERO_LEN) + 'd}'
+ ).format(self.index))
return settings.JOINT.join(c_id)
def full_label(self):
@@ -290,6 +322,108 @@ class BaseFind(BaseHistorizedItem, OwnPerms):
self.save()
return returned
+ @classmethod
+ def cached_label_bulk_update(cls, operation_id=None, parcel_id=None):
+ if operation_id:
+ filters = """
+ INNER JOIN archaeological_context_records_contextrecord acr
+ ON acr.operation_id = %s AND acr.id = mybf.context_record_id
+ """
+ args = [int(operation_id)]
+ kwargs = {'operation_id': operation_id}
+ elif parcel_id:
+ filters = """
+ INNER JOIN archaeological_context_records_contextrecord acr
+ ON acr.parcel_id = %s AND acr.id = mybf.context_record_id
+ """
+ args = [int(parcel_id)]
+ kwargs = {'parcel_id': parcel_id}
+ else:
+ return
+
+ sql = """
+ UPDATE "archaeological_finds_basefind" AS bf
+ SET cache_short_id =
+ CASE
+ WHEN basefind_cached_bulk_update.main_ope_code is NULL
+ THEN
+ CASE
+ WHEN basefind_cached_bulk_update.year
+ IS NOT NULL
+ AND basefind_cached_bulk_update.ope_code
+ IS NOT NULL
+ THEN
+ '{ope_prefix}' ||
+ basefind_cached_bulk_update.year ||
+ '-' ||
+ basefind_cached_bulk_update.ope_code
+ ELSE ''
+ END
+ ELSE
+ '{main_ope_prefix}' ||
+ basefind_cached_bulk_update.main_ope_code
+ END
+ || '{join}' ||
+ to_char(basefind_cached_bulk_update.index, 'fm{zeros}'),
+
+ cache_complete_id =
+ CASE
+ WHEN basefind_cached_bulk_update.main_ope_code IS NULL
+ THEN
+ CASE
+ WHEN basefind_cached_bulk_update.year
+ IS NOT NULL
+ AND basefind_cached_bulk_update.ope_code
+ IS NOT NULL
+ THEN
+ '{ope_prefix}' ||
+ basefind_cached_bulk_update.year ||
+ '-' ||
+ basefind_cached_bulk_update.ope_code
+ ELSE ''
+ END
+ ELSE
+ '{main_ope_prefix}' ||
+ basefind_cached_bulk_update.main_ope_code
+ END
+ || '{join}' ||
+
+ COALESCE(
+ (SELECT string_agg(code, '-') FROM
+ (SELECT DISTINCT mt.code AS code FROM
+ archaeological_finds_find_material_types fmt
+ INNER JOIN archaeological_finds_find f
+ ON f.id=fmt.find_id AND f.downstream_treatment_id IS NULL
+ INNER JOIN find_first_base_find fbf
+ ON fbf.find_id = f.id AND
+ basefind_cached_bulk_update.id = fbf.basefind_id
+ INNER JOIN archaeological_finds_materialtype mt
+ ON mt.id = fmt.materialtype_id ORDER BY mt.code)
+ as ag),
+ '-')
+
+ || '{join}' ||
+ basefind_cached_bulk_update.cr_label
+ || '{join}' ||
+ to_char(basefind_cached_bulk_update.index, 'fm{zeros}')
+
+ FROM basefind_cached_bulk_update
+ WHERE bf.id = basefind_cached_bulk_update.id
+ AND bf.id IN (
+ SELECT mybf.id FROM archaeological_finds_basefind mybf
+ {filters}
+ );
+ """.format(main_ope_prefix=settings.ISHTAR_OPE_PREFIX,
+ ope_prefix=settings.ISHTAR_DEF_OPE_PREFIX,
+ join=settings.JOINT, filters=filters,
+ zeros=settings.ISHTAR_FINDS_INDEX_ZERO_LEN * "0")
+ # with connection.cursor() as c: # django 1.8
+ c = connection.cursor()
+ c.execute(sql, args)
+ transaction.commit_unless_managed()
+ cls._meta.get_field_by_name(
+ 'find')[0].model.cached_label_bulk_update(**kwargs)
+
post_save.connect(post_save_point, sender=BaseFind)
@@ -307,6 +441,42 @@ class FindBasket(Basket):
related_name='basket')
+class FirstBaseFindView(object):
+ CREATE_SQL = """
+ CREATE VIEW find_first_base_find
+ AS (
+ SELECT find_id, min(basefind_id) as basefind_id
+ FROM archaeological_finds_find_base_finds GROUP BY find_id
+ );"""
+ DELETE_SQL = """
+ DROP VIEW find_first_base_find;
+ """
+
+
+class FBulkView(object):
+ CREATE_SQL = """
+ CREATE VIEW find_cached_bulk_update
+ AS (
+ SELECT f.id AS id, ope.code_patriarche AS main_ope_code,
+ ope.year AS year,
+ ope.operation_code AS ope_code,
+ f.label AS label,
+ f.index AS index
+ FROM archaeological_finds_find f
+ INNER JOIN find_first_base_find fbf
+ ON fbf.find_id = f.id
+ INNER JOIN archaeological_finds_basefind bf
+ ON fbf.basefind_id = bf.id
+ INNER JOIN archaeological_context_records_contextrecord cr
+ ON cr.id = bf.context_record_id
+ INNER JOIN archaeological_operations_operation ope
+ ON ope.id = cr.operation_id
+ );"""
+ DELETE_SQL = """
+ DROP VIEW find_cached_bulk_update;
+ """
+
+
class Find(BaseHistorizedItem, ImageModel, OwnPerms, ShortMenuItem):
CHECK_DICT = dict(CHECK_CHOICES)
SHOW_URL = 'show-find'
@@ -707,6 +877,74 @@ class Find(BaseHistorizedItem, ImageModel, OwnPerms, ShortMenuItem):
def _generate_cached_label(self):
return unicode(self)
+ @classmethod
+ def cached_label_bulk_update(cls, operation_id=None, parcel_id=None):
+ if operation_id:
+ filters = """
+ INNER JOIN find_first_base_find myfbf
+ ON myfbf.find_id = myf.id
+ INNER JOIN archaeological_finds_basefind mybf
+ ON myfbf.basefind_id = mybf.id
+ INNER JOIN archaeological_context_records_contextrecord acr
+ ON acr.operation_id = %s AND acr.id = mybf.context_record_id
+ """
+ args = [int(operation_id)]
+ elif parcel_id:
+ filters = """
+ INNER JOIN find_first_base_find myfbf
+ ON myfbf.find_id = myf.id
+ INNER JOIN archaeological_finds_basefind mybf
+ ON myfbf.basefind_id = mybf.id
+ INNER JOIN archaeological_context_records_contextrecord acr
+ ON acr.parcel_id = %s AND acr.id = mybf.context_record_id
+ """
+ args = [int(parcel_id)]
+ else:
+ return
+
+ sql = """
+ UPDATE "archaeological_finds_find" AS f
+ SET cached_label =
+ CASE
+ WHEN find_cached_bulk_update.main_ope_code is NULL
+ THEN
+ CASE
+ WHEN find_cached_bulk_update.year
+ IS NOT NULL
+ AND find_cached_bulk_update.ope_code
+ IS NOT NULL
+ THEN
+ '{ope_prefix}' ||
+ find_cached_bulk_update.year ||
+ '-' ||
+ find_cached_bulk_update.ope_code
+ ELSE ''
+ END
+ ELSE
+ '{main_ope_prefix}' ||
+ find_cached_bulk_update.main_ope_code
+ END
+ || '-' ||
+ to_char(find_cached_bulk_update.index, 'fm{zeros}')
+ || '{join}' ||
+ find_cached_bulk_update.label
+
+
+ FROM find_cached_bulk_update
+ WHERE f.id = find_cached_bulk_update.id
+ AND f.id IN (
+ SELECT myf.id FROM archaeological_finds_find myf
+ {filters}
+ );
+ """.format(main_ope_prefix=settings.ISHTAR_OPE_PREFIX,
+ ope_prefix=settings.ISHTAR_DEF_OPE_PREFIX,
+ join=settings.JOINT, filters=filters,
+ zeros=settings.ISHTAR_FINDS_INDEX_ZERO_LEN * "0")
+ # with connection.cursor() as c: # django 1.8
+ c = connection.cursor()
+ c.execute(sql, args)
+ transaction.commit_unless_managed()
+
def save(self, *args, **kwargs):
super(Find, self).save(*args, **kwargs)
diff --git a/archaeological_finds/tests.py b/archaeological_finds/tests.py
index a1dc33dd8..cec73de8a 100644
--- a/archaeological_finds/tests.py
+++ b/archaeological_finds/tests.py
@@ -23,7 +23,6 @@ from django.conf import settings
from django.contrib.auth.models import User
from django.core.files.uploadedfile import SimpleUploadedFile
from django.core.urlresolvers import reverse
-from django.test import TestCase
from django.test.client import Client
from ishtar_common.models import ImporterType, IshtarUser, ImporterColumn,\
FormaterType, ImportTarget
@@ -35,7 +34,8 @@ from archaeological_warehouse.models import Warehouse, WarehouseType
from ishtar_common import forms_common
-from ishtar_common.tests import WizardTest, WizardTestFormData as FormData
+from ishtar_common.tests import WizardTest, WizardTestFormData as FormData, \
+ TestCase
from archaeological_operations.tests import ImportTest
from archaeological_context_records.tests import ImportContextRecordTest, \
ContextRecordInit
diff --git a/archaeological_operations/locale/django.pot b/archaeological_operations/locale/django.pot
index f43875269..6cd5acef2 100644
--- a/archaeological_operations/locale/django.pot
+++ b/archaeological_operations/locale/django.pot
@@ -10,12 +10,12 @@ msgid ""
msgstr ""
#: forms.py:69 forms.py:371 forms.py:1009 forms.py:1031 forms.py:1035
-#: models.py:1217 templates/ishtar/sheet_operation.html:144
+#: models.py:1224 templates/ishtar/sheet_operation.html:144
#: templates/ishtar/blocks/window_tables/parcels.html:10
msgid "Parcels"
msgstr ""
-#: forms.py:72 forms.py:205 forms.py:985 models.py:1203
+#: forms.py:72 forms.py:205 forms.py:985 models.py:1210
#: templates/ishtar/blocks/window_tables/parcels.html:7
#: templates/ishtar/dashboards/dashboard_operation.html:432
#: templates/ishtar/dashboards/dashboard_operation.html:446
@@ -24,22 +24,22 @@ msgstr ""
msgid "Town"
msgstr ""
-#: forms.py:74 forms.py:455 forms.py:752 forms.py:1255 models.py:274
-#: models.py:1009 models.py:1201
+#: forms.py:74 forms.py:455 forms.py:752 forms.py:1255 models.py:275
+#: models.py:1016 models.py:1208
#: templates/ishtar/blocks/window_tables/parcels.html:8
msgid "Year"
msgstr ""
-#: forms.py:77 models.py:1204
+#: forms.py:77 models.py:1211
#: templates/ishtar/blocks/window_tables/parcels.html:9
msgid "Section"
msgstr ""
-#: forms.py:80 models.py:1206
+#: forms.py:80 models.py:1213
msgid "Parcel number"
msgstr ""
-#: forms.py:82 models.py:1208 models.py:1225 models.py:1274
+#: forms.py:82 models.py:1215 models.py:1232 models.py:1281
msgid "Public domain"
msgstr ""
@@ -75,8 +75,8 @@ msgstr ""
msgid "Relation type"
msgstr ""
-#: forms.py:383 ishtar_menu.py:30 models.py:369 models.py:830 models.py:860
-#: models.py:888 models.py:991 models.py:1200 wizards.py:344 wizards.py:355
+#: forms.py:383 ishtar_menu.py:30 models.py:370 models.py:837 models.py:867
+#: models.py:895 models.py:998 models.py:1207 wizards.py:344 wizards.py:355
#: templates/ishtar/sheet_operation.html:4
msgid "Operation"
msgstr ""
@@ -105,7 +105,7 @@ msgstr ""
msgid "Relations"
msgstr ""
-#: forms.py:456 forms.py:1226 models.py:275
+#: forms.py:456 forms.py:1226 models.py:276
msgid "Numeric reference"
msgstr ""
@@ -113,7 +113,7 @@ msgstr ""
msgid "Parcel (section/number/public domain)"
msgstr ""
-#: forms.py:465 forms.py:1269 models.py:831
+#: forms.py:465 forms.py:1269 models.py:838
#: templates/ishtar/dashboards/dashboard_operation.html:390
#: templates/ishtar/dashboards/dashboard_operation.html:411
#: templates/ishtar/dashboards/dashboard_operation.html:643
@@ -122,12 +122,12 @@ msgstr ""
msgid "Department"
msgstr ""
-#: forms.py:466 forms.py:1097 models.py:85
+#: forms.py:466 forms.py:1097 models.py:86
#: templates/ishtar/blocks/window_tables/archaeologicalsites.html:8
msgid "Name"
msgstr ""
-#: forms.py:468 forms.py:672 forms.py:750 forms.py:1232 models.py:282
+#: forms.py:468 forms.py:672 forms.py:750 forms.py:1232 models.py:283
msgid "Operation type"
msgstr ""
@@ -135,24 +135,24 @@ msgstr ""
msgid "Is open?"
msgstr ""
-#: forms.py:478 forms.py:782 models.py:271
+#: forms.py:478 forms.py:782 models.py:272
msgid "In charge"
msgstr ""
-#: forms.py:485 models.py:985
+#: forms.py:485 models.py:992
msgid "Scientist in charge"
msgstr ""
-#: forms.py:487 forms.py:674 forms.py:772 models.py:269
+#: forms.py:487 forms.py:674 forms.py:772 models.py:270
msgid "Operator"
msgstr ""
-#: forms.py:496 forms.py:1102 models.py:89 models.py:284
+#: forms.py:496 forms.py:1102 models.py:90 models.py:285
#: templates/ishtar/blocks/window_tables/archaeologicalsites.html:10
msgid "Remains"
msgstr ""
-#: forms.py:497 forms.py:1080 forms.py:1099 models.py:87 models.py:290
+#: forms.py:497 forms.py:1080 forms.py:1099 models.py:88 models.py:291
#: templates/ishtar/blocks/window_tables/archaeologicalsites.html:9
msgid "Periods"
msgstr ""
@@ -185,23 +185,23 @@ msgstr ""
msgid "Abstract (full text search)"
msgstr ""
-#: forms.py:512 forms.py:840 models.py:338
+#: forms.py:512 forms.py:840 models.py:339
msgid "Comment about scientific documentation"
msgstr ""
-#: forms.py:513 forms.py:842 models.py:350
+#: forms.py:513 forms.py:842 models.py:351
msgid "Record quality"
msgstr ""
-#: forms.py:514 forms.py:807 models.py:302
+#: forms.py:514 forms.py:807 models.py:303
msgid "Report processing"
msgstr ""
-#: forms.py:516 forms.py:845 models.py:345
+#: forms.py:516 forms.py:845 models.py:346
msgid "Virtual operation"
msgstr ""
-#: forms.py:518 forms.py:1142 forms.py:1146 models.py:93
+#: forms.py:518 forms.py:1142 forms.py:1146 models.py:94
msgid "Archaeological site"
msgstr ""
@@ -221,7 +221,7 @@ msgstr ""
msgid "Documentation deadline after"
msgstr ""
-#: forms.py:541 forms.py:830 models.py:357
+#: forms.py:541 forms.py:830 models.py:358
msgid "Documentation received"
msgstr ""
@@ -233,7 +233,7 @@ msgstr ""
msgid "Finds deadline after"
msgstr ""
-#: forms.py:547 forms.py:835 models.py:361
+#: forms.py:547 forms.py:835 models.py:362
msgid "Finds received"
msgstr ""
@@ -245,12 +245,12 @@ msgstr ""
msgid "Associated file"
msgstr ""
-#: forms.py:640 forms.py:933 models.py:497 models.py:887 models.py:996
+#: forms.py:640 forms.py:933 models.py:504 models.py:894 models.py:1003
#: wizards.py:80
msgid "Archaeological file"
msgstr ""
-#: forms.py:647 forms.py:649 models.py:352
+#: forms.py:647 forms.py:649 models.py:353
msgid "Abstract"
msgstr ""
@@ -262,7 +262,7 @@ msgstr ""
msgid "years"
msgstr ""
-#: forms.py:654 models.py:255
+#: forms.py:654 models.py:256
msgid "Creation date"
msgstr ""
@@ -319,11 +319,11 @@ msgstr ""
msgid "General"
msgstr ""
-#: forms.py:748 models.py:335
+#: forms.py:748 models.py:336
msgid "Generic name"
msgstr ""
-#: forms.py:757 models.py:304
+#: forms.py:757 models.py:305
msgid "Old code"
msgstr ""
@@ -331,7 +331,7 @@ msgstr ""
msgid "Head scientist"
msgstr ""
-#: forms.py:779 models.py:334
+#: forms.py:779 models.py:335
msgid "Operator reference"
msgstr ""
@@ -339,23 +339,23 @@ msgstr ""
msgid "Total surface (m2)"
msgstr ""
-#: forms.py:800 models.py:53 models.py:258 models.py:1399
+#: forms.py:800 models.py:54 models.py:259 models.py:1420
msgid "Start date"
msgstr ""
-#: forms.py:802 models.py:260
+#: forms.py:802 models.py:261
msgid "Excavation end date"
msgstr ""
-#: forms.py:805 models.py:261
+#: forms.py:805 models.py:262
msgid "Report delivery date"
msgstr ""
-#: forms.py:827 models.py:354
+#: forms.py:827 models.py:355
msgid "Deadline for submission of the documentation"
msgstr ""
-#: forms.py:832 models.py:359
+#: forms.py:832 models.py:360
msgid "Deadline for submission of the finds"
msgstr ""
@@ -390,7 +390,7 @@ msgstr ""
msgid "Bad operation code"
msgstr ""
-#: forms.py:929 models.py:512
+#: forms.py:929 models.py:519
msgid "Operation code"
msgstr ""
@@ -398,20 +398,20 @@ msgstr ""
msgid "Preventive informations - excavation"
msgstr ""
-#: forms.py:956 models.py:288
+#: forms.py:956 models.py:289
#: templates/ishtar/dashboards/dashboard_operation.html:701
msgid "Cost (euros)"
msgstr ""
-#: forms.py:957 models.py:293
+#: forms.py:957 models.py:294
msgid "Scheduled man-days"
msgstr ""
-#: forms.py:959 models.py:296
+#: forms.py:959 models.py:297
msgid "Optional man-days"
msgstr ""
-#: forms.py:961 models.py:299
+#: forms.py:961 models.py:300
msgid "Effective man-days"
msgstr ""
@@ -419,31 +419,31 @@ msgstr ""
msgid "Preventive informations - diagnostic"
msgstr ""
-#: forms.py:974 models.py:318
+#: forms.py:974 models.py:319
msgid "Prescription on zoning"
msgstr ""
-#: forms.py:976 models.py:321
+#: forms.py:976 models.py:322
msgid "Prescription on large area"
msgstr ""
-#: forms.py:979 models.py:323
+#: forms.py:979 models.py:324
msgid "Prescription on geoarchaeological context"
msgstr ""
-#: forms.py:983 forms.py:1005 models.py:286 models.py:1019
+#: forms.py:983 forms.py:1005 models.py:287 models.py:1026
msgid "Towns"
msgstr ""
-#: forms.py:1012 models.py:1216 models.py:1397
+#: forms.py:1012 models.py:1223 models.py:1418
msgid "Parcel"
msgstr ""
-#: forms.py:1064 models.py:45
+#: forms.py:1064 models.py:46
msgid "Remain types"
msgstr ""
-#: forms.py:1068 models.py:44
+#: forms.py:1068 models.py:45
msgid "Remain type"
msgstr ""
@@ -452,7 +452,7 @@ msgstr ""
msgid "Period"
msgstr ""
-#: forms.py:1096 models.py:84
+#: forms.py:1096 models.py:85
msgid "Reference"
msgstr ""
@@ -460,7 +460,7 @@ msgstr ""
msgid "This reference already exists."
msgstr ""
-#: forms.py:1157 models.py:94 models.py:342
+#: forms.py:1157 models.py:95 models.py:343
#: templates/ishtar/sheet_operation.html:94
msgid "Archaeological sites"
msgstr ""
@@ -481,7 +481,7 @@ msgstr ""
msgid "Would you like to delete this operation?"
msgstr ""
-#: forms.py:1186 forms.py:1256 forms.py:1392 models.py:862 models.py:976
+#: forms.py:1186 forms.py:1256 forms.py:1392 models.py:869 models.py:983
msgid "Index"
msgstr ""
@@ -508,7 +508,7 @@ msgstr ""
msgid "You should select a document."
msgstr ""
-#: forms.py:1263 forms.py:1330 models.py:901 models.py:970
+#: forms.py:1263 forms.py:1330 models.py:908 models.py:977
msgid "Act type"
msgstr ""
@@ -516,12 +516,12 @@ msgstr ""
msgid "Indexed?"
msgstr ""
-#: forms.py:1270 forms.py:1335 models.py:1010
+#: forms.py:1270 forms.py:1335 models.py:1017
#: templates/ishtar/blocks/window_tables/administrativacts.html:10
msgid "Object"
msgstr ""
-#: forms.py:1307 views.py:329
+#: forms.py:1307 views.py:333
msgid "Administrative act search"
msgstr ""
@@ -529,7 +529,7 @@ msgstr ""
msgid "You should select an administrative act."
msgstr ""
-#: forms.py:1338 models.py:1007
+#: forms.py:1338 models.py:1014
msgid "Signature date"
msgstr ""
@@ -564,7 +564,7 @@ msgstr ""
msgid "Generate the associated doc?"
msgstr ""
-#: forms.py:1471 ishtar_menu.py:123 views.py:382
+#: forms.py:1471 ishtar_menu.py:123 views.py:386
msgctxt "admin act register"
msgid "Register"
msgstr ""
@@ -585,7 +585,7 @@ msgstr ""
msgid "Deletion"
msgstr ""
-#: ishtar_menu.py:59 models.py:1026
+#: ishtar_menu.py:59 models.py:1033
#: templates/ishtar/sheet_administrativeact.html:4
msgid "Administrative act"
msgstr ""
@@ -610,434 +610,434 @@ msgstr ""
msgid "General informations"
msgstr ""
-#: ishtar_menu.py:139 models.py:370
+#: ishtar_menu.py:139 models.py:371
#: templates/ishtar/dashboards/dashboard_operation.html:8
msgid "Operations"
msgstr ""
-#: models.py:52 models.py:70 models.py:1861
+#: models.py:53 models.py:71 models.py:1882
msgid "Order"
msgstr ""
-#: models.py:54 models.py:1400
+#: models.py:55 models.py:1421
msgid "End date"
msgstr ""
-#: models.py:55
+#: models.py:56
msgid "Parent period"
msgstr ""
-#: models.py:59
+#: models.py:60
msgid "Type Period"
msgstr ""
-#: models.py:60
+#: models.py:61
msgid "Types Period"
msgstr ""
-#: models.py:73
+#: models.py:74
msgid "Type of report state"
msgstr ""
-#: models.py:74
+#: models.py:75
msgid "Types of report state"
msgstr ""
-#: models.py:97
+#: models.py:98
msgid "Can view all Archaeological sites"
msgstr ""
-#: models.py:99
+#: models.py:100
msgid "Can view own Archaeological site"
msgstr ""
-#: models.py:101
+#: models.py:102
msgid "Can add own Archaeological site"
msgstr ""
-#: models.py:103
+#: models.py:104
msgid "Can change own Archaeological site"
msgstr ""
-#: models.py:105
+#: models.py:106
msgid "Can delete own Archaeological site"
msgstr ""
-#: models.py:142
+#: models.py:143
msgid "Not documented"
msgstr ""
-#: models.py:143
+#: models.py:144
msgid "Arbitrary"
msgstr ""
-#: models.py:144
+#: models.py:145
msgid "Reliable"
msgstr ""
-#: models.py:233
+#: models.py:234
msgid "Year - Index"
msgstr ""
-#: models.py:234
+#: models.py:235
msgid "Associated file (label)"
msgstr ""
-#: models.py:235
+#: models.py:236
msgid "Operator name"
msgstr ""
-#: models.py:236
+#: models.py:237
msgid "Scientist (full name)"
msgstr ""
-#: models.py:237
+#: models.py:238
msgid "Associated file (external ID)"
msgstr ""
-#: models.py:238
+#: models.py:239
msgid "Scientist (title)"
msgstr ""
-#: models.py:239
+#: models.py:240
msgid "Scientist (surname)"
msgstr ""
-#: models.py:240
+#: models.py:241
msgid "Scientist (name)"
msgstr ""
-#: models.py:241
+#: models.py:242
msgid "Scientist - Organization (name)"
msgstr ""
-#: models.py:242
+#: models.py:243
msgid "In charge (title)"
msgstr ""
-#: models.py:243
+#: models.py:244
msgid "In charge (surname)"
msgstr ""
-#: models.py:244
+#: models.py:245
msgid "In charge (name)"
msgstr ""
-#: models.py:245
+#: models.py:246
msgid "In charge - Organization (name)"
msgstr ""
-#: models.py:250
+#: models.py:251
msgid "Archaeological sites (reference)"
msgstr ""
-#: models.py:257
+#: models.py:258
msgid "Closing date"
msgstr ""
-#: models.py:264
+#: models.py:265
msgid "In charge scientist"
msgstr ""
-#: models.py:279 models.py:1196
+#: models.py:280 models.py:1203
msgid "File"
msgstr ""
-#: models.py:283
+#: models.py:284
msgid "Surface (m2)"
msgstr ""
-#: models.py:336
+#: models.py:337
msgid "General comment"
msgstr ""
-#: models.py:339
+#: models.py:340
msgid "Cached name"
msgstr ""
-#: models.py:347
+#: models.py:348
msgid ""
"If checked, it means that this operation have not been officialy registered."
msgstr ""
-#: models.py:363
+#: models.py:364
msgid "Point"
msgstr ""
-#: models.py:364
+#: models.py:365
msgid "Multi polygon"
msgstr ""
-#: models.py:372
+#: models.py:373
msgid "Can view all Operations"
msgstr ""
-#: models.py:373
+#: models.py:374
msgid "Can view own Operation"
msgstr ""
-#: models.py:374
+#: models.py:375
msgid "Can add own Operation"
msgstr ""
-#: models.py:375
+#: models.py:376
msgid "Can change own Operation"
msgstr ""
-#: models.py:376
+#: models.py:377
msgid "Can delete own Operation"
msgstr ""
-#: models.py:377
+#: models.py:378
msgid "Can close Operation"
msgstr ""
-#: models.py:406
+#: models.py:407
msgid "OPE"
msgstr ""
-#: models.py:466
+#: models.py:473
msgid "Intercommunal"
msgstr ""
-#: models.py:498
+#: models.py:505
msgid "Code patriarche"
msgstr ""
-#: models.py:538
+#: models.py:545
msgid "This operation code already exists for this year"
msgstr ""
-#: models.py:563
+#: models.py:570
msgid "Number of parcels"
msgstr ""
-#: models.py:581
+#: models.py:588
msgid "Number of administrative acts"
msgstr ""
-#: models.py:589
+#: models.py:596
msgid "Number of indexed administrative acts"
msgstr ""
-#: models.py:597
+#: models.py:604
msgid "Number of context records"
msgstr ""
-#: models.py:633
+#: models.py:640
msgid "Number of finds"
msgstr ""
-#: models.py:678
+#: models.py:685
msgid "No type"
msgstr ""
-#: models.py:709
+#: models.py:716
msgid "Number of sources"
msgstr ""
-#: models.py:751 templates/ishtar/dashboards/dashboard_operation.html:309
+#: models.py:758 templates/ishtar/dashboards/dashboard_operation.html:309
#: templates/ishtar/dashboards/dashboard_operation.html:575
#: templates/ishtar/dashboards/dashboard_operation.html:611
msgid "Mean"
msgstr ""
-#: models.py:801
+#: models.py:808
msgid "Inverse relation"
msgstr ""
-#: models.py:805
+#: models.py:812
msgid "Operation relation type"
msgstr ""
-#: models.py:806
+#: models.py:813
msgid "Operation relation types"
msgstr ""
-#: models.py:819
+#: models.py:826
msgid "Operation record relation"
msgstr ""
-#: models.py:820
+#: models.py:827
msgid "Operation record relations"
msgstr ""
-#: models.py:866
+#: models.py:873
msgid "Operation documentation"
msgstr ""
-#: models.py:867
+#: models.py:874
msgid "Operation documentations"
msgstr ""
-#: models.py:870
+#: models.py:877
msgid "Can view all Operation sources"
msgstr ""
-#: models.py:872
+#: models.py:879
msgid "Can view own Operation source"
msgstr ""
-#: models.py:874
+#: models.py:881
msgid "Can add own Operation source"
msgstr ""
-#: models.py:876
+#: models.py:883
msgid "Can change own Operation source"
msgstr ""
-#: models.py:878
+#: models.py:885
msgid "Can delete own Operation source"
msgstr ""
-#: models.py:889 models.py:1001
+#: models.py:896 models.py:1008
msgid "Treatment request"
msgstr ""
-#: models.py:890 models.py:1006
+#: models.py:897 models.py:1013
msgid "Treatment"
msgstr ""
-#: models.py:892
+#: models.py:899
msgid "Intended to"
msgstr ""
-#: models.py:894
+#: models.py:901
msgid "Code"
msgstr ""
-#: models.py:897
+#: models.py:904
msgid "Associated template"
msgstr ""
-#: models.py:898
+#: models.py:905
msgid "Indexed"
msgstr ""
-#: models.py:902
+#: models.py:909
msgid "Act types"
msgstr ""
-#: models.py:974
+#: models.py:981
msgid "Person in charge of the operation"
msgstr ""
-#: models.py:980
+#: models.py:987
msgid "Archaeological preventive operator"
msgstr ""
-#: models.py:988
+#: models.py:995
msgid "Signatory"
msgstr ""
-#: models.py:1016
+#: models.py:1023
msgid "Departments"
msgstr ""
-#: models.py:1017
+#: models.py:1024
msgid "Cached values get from associated departments"
msgstr ""
-#: models.py:1020
+#: models.py:1027
msgid "Cached values get from associated towns"
msgstr ""
-#: models.py:1027 templates/ishtar/sheet_operation.html:102
+#: models.py:1034 templates/ishtar/sheet_operation.html:102
#: templates/ishtar/sheet_operation.html:138
msgid "Administrative acts"
msgstr ""
-#: models.py:1030
+#: models.py:1037
msgid "Can view all Administrative acts"
msgstr ""
-#: models.py:1032
+#: models.py:1039
msgid "Can view own Administrative act"
msgstr ""
-#: models.py:1034
+#: models.py:1041
msgid "Can add own Administrative act"
msgstr ""
-#: models.py:1036
+#: models.py:1043
msgid "Can change own Administrative act"
msgstr ""
-#: models.py:1038
+#: models.py:1045
msgid "Can delete own Administrative act"
msgstr ""
-#: models.py:1047
+#: models.py:1054
#: templates/ishtar/blocks/window_tables/administrativacts.html:7
#: templates/ishtar/blocks/window_tables/archaeologicalsites.html:7
msgid "Ref."
msgstr ""
-#: models.py:1141
+#: models.py:1148
msgid "This index already exists for this year"
msgstr ""
-#: models.py:1209
+#: models.py:1216
msgid "External ID"
msgstr ""
-#: models.py:1212
+#: models.py:1219
msgid "External ID is set automatically"
msgstr ""
-#: models.py:1213
+#: models.py:1220
msgid "Address - Locality"
msgstr ""
-#: models.py:1395
+#: models.py:1416
msgid "Owner"
msgstr ""
-#: models.py:1403
+#: models.py:1424
msgid "Parcel owner"
msgstr ""
-#: models.py:1404
+#: models.py:1425
msgid "Parcel owners"
msgstr ""
-#: models.py:1430
+#: models.py:1451
msgid "Recorded"
msgstr ""
-#: models.py:1431
+#: models.py:1452
msgid "Effective"
msgstr ""
-#: models.py:1432
+#: models.py:1453
msgid "Active"
msgstr ""
-#: models.py:1433
+#: models.py:1454
msgid "Field completed"
msgstr ""
-#: models.py:1434
+#: models.py:1455
msgid "Associated report"
msgstr ""
-#: models.py:1435
+#: models.py:1456
msgid "Closed"
msgstr ""
-#: models.py:1436
+#: models.py:1457
msgid "Documented and closed"
msgstr ""
-#: models.py:1862
+#: models.py:1883
msgid "Is preventive"
msgstr ""
-#: models.py:1865
+#: models.py:1886
msgid "Operation type old"
msgstr ""
-#: models.py:1866
+#: models.py:1887
msgid "Operation types old"
msgstr ""
@@ -1045,43 +1045,43 @@ msgstr ""
msgid "New operation"
msgstr ""
-#: views.py:233
+#: views.py:237
msgid "Operation modification"
msgstr ""
-#: views.py:276
+#: views.py:280
msgid "Operation closing"
msgstr ""
-#: views.py:287
+#: views.py:291
msgid "Operation deletion"
msgstr ""
-#: views.py:292
+#: views.py:296
msgid "Operation: source search"
msgstr ""
-#: views.py:300
+#: views.py:304
msgid "Operation: source creation"
msgstr ""
-#: views.py:308
+#: views.py:312
msgid "Operation: source modification"
msgstr ""
-#: views.py:323
+#: views.py:327
msgid "Operation: source deletion"
msgstr ""
-#: views.py:342
+#: views.py:346
msgid "Operation: new administrative act"
msgstr ""
-#: views.py:352
+#: views.py:356
msgid "Operation: administrative act modification"
msgstr ""
-#: views.py:376
+#: views.py:380
msgid "Operation: administrative act deletion"
msgstr ""
diff --git a/archaeological_operations/models.py b/archaeological_operations/models.py
index 7c9efaef7..e74d02647 100644
--- a/archaeological_operations/models.py
+++ b/archaeological_operations/models.py
@@ -29,7 +29,8 @@ from django.db.models.signals import post_save, m2m_changed, post_delete
from django.forms import ValidationError
from django.utils.translation import ugettext_lazy as _, ugettext
-from ishtar_common.utils import cached_label_changed, get_cache, mode
+from ishtar_common.utils import cached_label_changed, \
+ force_cached_label_changed, get_cache, mode
from ishtar_common.models import GeneralType, BaseHistorizedItem, \
HistoricalRecords, LightHistorizedItem, OwnPerms, Department, Source,\
@@ -430,13 +431,13 @@ class Operation(ClosedItem, BaseHistorizedItem, ImageModel, OwnPerms,
def get_reference(self, full=False):
ref = ""
if settings.COUNTRY == 'fr' and self.code_patriarche:
- ref = "OA" + unicode(self.code_patriarche)
+ ref = settings.ISHTAR_OPE_PREFIX + unicode(self.code_patriarche)
if not full:
return ref
if self.year and self.operation_code:
if ref:
ref += u" - "
- ref += settings.OP_PREFIX
+ ref += settings.ISHTAR_DEF_OPE_PREFIX
ref += u"-".join((unicode(self.year),
unicode(self.operation_code)))
return ref or "00"
@@ -462,6 +463,12 @@ class Operation(ClosedItem, BaseHistorizedItem, ImageModel, OwnPerms,
def _get_associated_cached_labels(self):
return list(self.context_record.all())
+ def _cached_labels_bulk_update(self):
+ if settings.TESTING and settings.USE_SPATIALITE_FOR_TESTS:
+ return
+ self.context_record.model.cached_label_bulk_update(operation_id=self.pk)
+ return True
+
def get_town_label(self):
lbl = unicode(_('Intercommunal'))
if self.towns.count() == 1:
@@ -517,15 +524,15 @@ class Operation(ClosedItem, BaseHistorizedItem, ImageModel, OwnPerms,
return ""
lbl = unicode(self.operation_code)
year = self.year or 0
- lbl = settings.OP_PREFIX + u"%d-%s%s" % (year, (3 - len(lbl)) * "0",
- lbl)
+ lbl = settings.ISHTAR_DEF_OPE_PREFIX \
+ + u"%d-%s%s" % (year, (3 - len(lbl)) * "0", lbl)
return lbl
@property
def full_code_patriarche(self):
if not self.code_patriarche:
return ''
- return u"OA" + unicode(self.code_patriarche)
+ return settings.ISHTAR_OPE_PREFIX + unicode(self.code_patriarche)
def clean(self):
if not self.operation_code:
@@ -769,7 +776,7 @@ class Operation(ClosedItem, BaseHistorizedItem, ImageModel, OwnPerms,
return super(Operation, self).save(*args, **kwargs)
-m2m_changed.connect(cached_label_changed, sender=Operation.towns.through)
+m2m_changed.connect(force_cached_label_changed, sender=Operation.towns.through)
def operation_post_save(sender, **kwargs):
@@ -1359,24 +1366,38 @@ def parcel_post_save(sender, **kwargs):
parcel = kwargs['instance']
created = kwargs.get('created', None)
+ updated = False
# remove when the parcel is linked to nothing
- if not getattr(parcel, '_updated_id', None) and not created and not \
- parcel.operation and not parcel.associated_file:
- parcel.delete()
- return
+ if not getattr(parcel, '_updated_id', None) and not created \
+ and not parcel.operation and not parcel.associated_file:
+ if parcel.context_record.count():
+ # trying to restore a lost parcel
+ parcel.operation = parcel.context_record.all()[0].operation
+ updated = True
+ else:
+ parcel.delete()
+ return
- updated = False
if not parcel.external_id or parcel.auto_external_id:
external_id = get_external_id('parcel_external_id', parcel)
if external_id != parcel.external_id:
updated = True
+ parcel._updated_id = True
parcel.auto_external_id = True
parcel.external_id = external_id
if updated:
- parcel._updated_id = True
parcel.save()
return
+ if parcel.context_record.count():
+ if settings.TESTING and settings.USE_SPATIALITE_FOR_TESTS:
+ for cr in parcel.context_record.all():
+ cr.skip_history_when_saving = True
+ cr.save()
+ else:
+ parcel.context_record.model.cached_label_bulk_update(
+ parcel_id=parcel.id)
+
if parcel.operation and parcel.operation.pk and \
parcel.town not in list(parcel.operation.towns.all()):
parcel.operation.towns.add(parcel.town)
diff --git a/archaeological_operations/tests.py b/archaeological_operations/tests.py
index 364cc4c8e..23c32434b 100644
--- a/archaeological_operations/tests.py
+++ b/archaeological_operations/tests.py
@@ -26,7 +26,6 @@ import datetime
from django.conf import settings
from django.core.files.uploadedfile import SimpleUploadedFile
from django.core.urlresolvers import reverse
-from django.test import TestCase
from django.test.client import Client
from django.contrib.auth.models import Permission
@@ -41,7 +40,7 @@ from archaeological_context_records.models import Unit
from ishtar_common import forms_common
from ishtar_common.tests import WizardTest, WizardTestFormData as FormData, \
- create_superuser, create_user
+ create_superuser, create_user, TestCase
class ImportTest(object):
@@ -607,6 +606,9 @@ class OperationInitTest(object):
def create_parcel(self, data={}):
default = {'town': self.get_default_town(),
'section': 'A', 'parcel_number': '1'}
+ if not hasattr(self, 'operations'):
+ self.create_operation()
+ default['operation'] = self.operations[0]
default.update(data)
if not getattr(self, 'parcels', None):
self.parcels = []
@@ -616,7 +618,11 @@ class OperationInitTest(object):
def get_default_parcel(self, force=False):
if force:
return self.create_parcel()[-1]
- return self.create_parcel()[0]
+ parcel = self.create_parcel()[0]
+ if models.Parcel.objects.filter(pk=parcel.pk).count():
+ return parcel
+ self.parcels.pop(0)
+ return self.create_operation()[-1]
def create_operation(self, user=None, orga=None):
if not orga:
@@ -631,7 +637,12 @@ class OperationInitTest(object):
def get_default_operation(self, force=False):
if force:
return self.create_operation()[-1]
- return self.create_operation()[0]
+ ope = self.create_operation()[0]
+ if models.Operation.objects.filter(pk=ope.pk).count():
+ return ope
+ self.operations.pop(0)
+ return self.create_operation()[-1]
+
def tearDown(self):
# cleanup for further test
@@ -741,6 +752,107 @@ class OperationTest(TestCase, OperationInitTest):
ope2 = create_operation(self.user, values={'year': 0})
self.assertEqual(ope2.operation_code, 2)
+ def test_cache_update(self):
+ self.create_towns()
+ operation = self.operations[0]
+ town, ope_id = operation.cached_label.split(' | ')
+ self.assertIn(town, (u'Intercommunal', u"Multi-town"))
+ self.assertEqual(ope_id, 'OP2010-1')
+ operation = models.Operation.objects.get(pk=operation.pk)
+ operation.year = 2011
+ operation.save()
+ operation.towns.add(self.towns[0])
+ operation = models.Operation.objects.get(pk=operation.pk)
+ town, ope_id = operation.cached_label.split(' | ')
+ self.assertEqual(ope_id, 'OP2011-1')
+ self.assertEqual(town, self.towns[0].name)
+
+ def test_cache_bulk_update(self):
+ if settings.USE_SPATIALITE_FOR_TESTS:
+ # using views - can only be tested with postgresql
+ return
+
+ operation = self.operations[0]
+ init_parcel = self.create_parcel()[0]
+ operation.parcels.add(init_parcel)
+
+ from archaeological_context_records.models import ContextRecord
+ cr_data = {'label': "Context record", "operation": operation,
+ 'parcel': init_parcel,
+ 'history_modifier': self.get_default_user()}
+ cr = ContextRecord.objects.create(**cr_data)
+
+ from archaeological_finds.models import BaseFind, Find, MaterialType
+ bf_data = {
+ 'label': "Base find", 'history_modifier': self.get_default_user(),
+ 'context_record': cr
+ }
+ base_find = BaseFind.objects.create(**bf_data)
+ find = Find.objects.create(
+ history_modifier=self.get_default_user(),
+ label='Find me'
+ )
+ find.base_finds.add(base_find)
+ mat = MaterialType.objects.create(
+ label='Adamentium', txt_idx='admentium', code='ADA')
+ find.material_types.add(mat)
+
+ class TestObj(object):
+ def __init__(self):
+ self.context_record_reached = []
+
+ def reached(self, sender, **kwargs):
+ instance = kwargs.get('instance')
+ if sender == ContextRecord:
+ self.context_record_reached.append(instance)
+
+ test_obj = TestObj()
+ operation = models.Operation.objects.get(pk=operation.pk)
+ operation.test_obj = test_obj
+ operation.year = 2011
+ operation.save()
+ # bulk update of context records cached label gen don't have to be
+ # reached
+ self.assertEqual(len(test_obj.context_record_reached), 0)
+
+ # verify the relevance of the update
+ cr = ContextRecord.objects.get(pk=cr.pk)
+ ope_id, parcel_sec, parcel_nb, cr_label = cr.cached_label.split(' | ')
+ self.assertEqual(ope_id, '{}2011-1'.format(
+ settings.ISHTAR_DEF_OPE_PREFIX))
+
+ base_find = BaseFind.objects.get(pk=base_find.pk)
+ op_code, idx = base_find.cache_short_id.split(' | ')
+ self.assertEqual(op_code, 'OP2011-1')
+ self.assertEqual(idx, '00001')
+ op_code, mat_code, lbl, idx = base_find.cache_complete_id.split(' | ')
+ self.assertEqual(op_code, 'OP2011-1')
+ self.assertEqual(mat_code, 'ADA')
+ self.assertEqual(lbl, 'Context record')
+ self.assertEqual(idx, '00001')
+
+ find = Find.objects.get(pk=find.pk)
+ op_code_idx, lbl = find.cached_label.split(' | ')
+ self.assertEqual(op_code_idx, 'OP2011-1-00001')
+ self.assertEqual(lbl, 'Find me')
+
+ operation = models.Operation.objects.get(pk=operation.pk)
+ operation.code_patriarche = '666'
+ operation.save()
+ cr = ContextRecord.objects.get(pk=cr.pk)
+ ope_id, parcel_sec, parcel_nb, cr_label = cr.cached_label.split(' | ')
+ self.assertEqual(ope_id, '{}666'.format(settings.ISHTAR_OPE_PREFIX))
+
+ base_find = BaseFind.objects.get(pk=base_find.pk)
+ op_code, idx = base_find.cache_short_id.split(' | ')
+ self.assertEqual(op_code, 'OA666')
+ op_code, mat_code, lbl, idx = base_find.cache_complete_id.split(' | ')
+ self.assertEqual(op_code, 'OA666')
+
+ find = Find.objects.get(pk=find.pk)
+ op_code_idx, lbl = find.cached_label.split(' | ')
+ self.assertEqual(op_code_idx, 'OA666-00001')
+
class OperationSearchTest(TestCase, OperationInitTest):
fixtures = [settings.ROOT_PATH +
@@ -958,6 +1070,158 @@ class OperationWizardCreationTest(WizardTest, OperationInitTest, TestCase):
self.parcel_number + 2)
+class OperationWizardModifTest(WizardTest, OperationInitTest, TestCase):
+ fixtures = OperationWizardCreationTest.fixtures
+ url_name = 'operation_modification'
+ wizard_name = url_name + '_wizard'
+ steps = views.operation_modif_wizard_steps
+ base_ignored_steps = (
+ 'archaeologicalsite-operation_modification',
+ 'preventive-operation_modification',
+ 'preventivediag-operation_modification',
+ 'towns-operation_modification',
+ 'parcels-operation_modification',
+ 'remains-operation_modification',
+ 'periods-operation_modification',
+ 'relations-operation_modification',
+ 'abstract-operation_modification',)
+ form_datas = [
+ FormData(
+ "Update an operation",
+ form_datas={
+ 'selec-operation_modification': {},
+ 'general-operation_modification': {
+ 'operation_type': 2,
+ 'year': 2017},
+ 'townsgeneral-operation_modification': [],
+ 'parcelsgeneral-operation_modification': [],
+ },
+ ignored=base_ignored_steps
+ ),
+ FormData(
+ "Operation: try to remove a parcel with attached context record",
+ form_datas={
+ 'selec-operation_modification': {},
+ 'general-operation_modification': {
+ 'operation_type': 2,
+ 'year': 2017},
+ 'townsgeneral-operation_modification': [],
+ 'parcelsgeneral-operation_modification': [],
+ },
+ ignored=base_ignored_steps
+ ),
+ FormData(
+ "Operation: remove a parcel with no attached context record",
+ form_datas={
+ 'selec-operation_modification': {},
+ 'general-operation_modification': {
+ 'operation_type': 2,
+ 'year': 2017},
+ 'townsgeneral-operation_modification': [],
+ 'parcelsgeneral-operation_modification': [],
+ },
+ ignored=base_ignored_steps
+ ),
+ ]
+
+ def pre_wizard(self):
+ self.create_operation()
+ operation = self.operations[0]
+ init_town = self.create_towns()[0]
+ operation.towns.add(init_town)
+ init_parcel = self.create_parcel()[0]
+ operation.parcels.add(init_parcel)
+
+ from archaeological_context_records.models import ContextRecord
+ cr_data = {'label': "Context record", "operation": operation,
+ 'parcel': init_parcel,
+ 'history_modifier': self.get_default_user()}
+ self.cr = ContextRecord.objects.create(**cr_data)
+
+ data = self.form_datas[0].form_datas
+ data2 = self.form_datas[1].form_datas
+ data3 = self.form_datas[2].form_datas
+
+ data['selec-operation_modification']['pk'] = operation.pk
+ data2['selec-operation_modification']['pk'] = operation.pk
+ data3['selec-operation_modification']['pk'] = operation.pk
+
+ town = self.create_towns(
+ datas={'numero_insee': '67890', 'name': 'Twin Peaks'})[-1]
+ towns = [{'town': town.pk}, {'town': init_town.pk}]
+ data['townsgeneral-operation_modification'] = towns
+ data2['townsgeneral-operation_modification'] = towns
+ data3['townsgeneral-operation_modification'] = towns
+
+ parcel_data = {
+ 'town': town.pk, 'year': 2017, 'section': 'S',
+ 'parcel_number': '42'}
+ data['parcelsgeneral-operation_modification'].append(parcel_data)
+ data2['parcelsgeneral-operation_modification'].append(parcel_data)
+ data3['parcelsgeneral-operation_modification'].append(parcel_data)
+
+ parcel_data_2 = {
+ 'town': init_parcel.town.pk, 'year': init_parcel.year or '',
+ 'section': init_parcel.section,
+ 'parcel_number': init_parcel.parcel_number}
+ data['parcelsgeneral-operation_modification'].append(parcel_data_2)
+ # no init parcel for data2 and data3
+
+ self.operation_number = models.Operation.objects.count()
+ self.parcel_number = models.Parcel.objects.count()
+
+ def post_first_wizard(test_object, final_step_response):
+ test_object.assertEqual(models.Operation.objects.count(),
+ test_object.operation_number)
+ operation = models.Operation.objects.get(
+ pk=test_object.operations[0].pk)
+ test_object.assertEqual(operation.operation_type.pk, 2)
+ test_object.assertEqual(operation.year, 2017)
+ test_object.assertEqual(models.Parcel.objects.count(),
+ test_object.parcel_number + 1)
+ test_object.assertEqual(operation.parcels.count(),
+ test_object.parcel_number + 1)
+
+ def post_second_wizard(test_object, final_step_response):
+ test_object.assertEqual(models.Operation.objects.count(),
+ test_object.operation_number)
+ operation = models.Operation.objects.get(
+ pk=test_object.operations[0].pk)
+ test_object.assertEqual(operation.operation_type.pk, 2)
+ test_object.assertEqual(operation.year, 2017)
+ test_object.assertEqual(models.Parcel.objects.count(),
+ test_object.parcel_number + 1)
+ # the init parcel is not submited but have a context record
+ # the init parcel is not detached from the operation
+ test_object.assertEqual(operation.parcels.count(),
+ test_object.parcel_number + 1)
+
+ def pre_third_wizard(test_object):
+ parcel_nb = models.Parcel.objects.count()
+ test_object.cr.delete()
+ test_object.assertEqual(
+ parcel_nb, models.Parcel.objects.count())
+
+ def post_third_wizard(test_object, final_step_response):
+ test_object.assertEqual(models.Operation.objects.count(),
+ test_object.operation_number)
+ operation = models.Operation.objects.get(
+ pk=test_object.operations[0].pk)
+ test_object.assertEqual(operation.operation_type.pk, 2)
+ test_object.assertEqual(operation.year, 2017)
+ # with no attach the parcel is deleted
+ test_object.assertEqual(operation.parcels.count(),
+ test_object.parcel_number)
+ test_object.assertEqual(models.Parcel.objects.count(),
+ test_object.parcel_number)
+
+ self.form_datas[0].extra_tests = [post_first_wizard]
+ self.form_datas[1].extra_tests = [post_second_wizard]
+ self.form_datas[2].pre_tests = [pre_third_wizard]
+ self.form_datas[2].extra_tests = [post_third_wizard]
+ super(OperationWizardModifTest, self).pre_wizard()
+
+
class OperationWizardDeleteTest(OperationWizardCreationTest):
fixtures = OperationWizardCreationTest.fixtures
url_name = 'operation_deletion'
diff --git a/archaeological_operations/views.py b/archaeological_operations/views.py
index 005fae0db..c4e4acb5e 100644
--- a/archaeological_operations/views.py
+++ b/archaeological_operations/views.py
@@ -49,9 +49,9 @@ def autocomplete_patriarche(request, non_closed=True):
q = request.GET.get('term')
query = Q()
for q in q.split(' '):
- query = query & Q(code_patriarche__startswith=q)
+ query &= Q(code_patriarche__startswith=q)
if non_closed:
- query = query & Q(end_date__isnull=True)
+ query &= Q(end_date__isnull=True)
limit = 15
operations = models.Operation.objects\
.filter(query).order_by('code_patriarche')[:limit]
@@ -113,12 +113,12 @@ def autocomplete_operation(request, non_closed=True):
q = q[2:]
try:
int(q)
- extra = extra | Q(code_patriarche__contains=q)
+ extra |= Q(code_patriarche__contains=q)
except ValueError:
pass
query = query & extra
if non_closed:
- query = query & Q(end_date__isnull=True)
+ query &= Q(end_date__isnull=True)
limit = 15
operations = models.Operation.objects.filter(query)[:limit]
data = json.dumps([{'id': operation.pk, 'value': unicode(operation)}
@@ -215,7 +215,7 @@ operation_creation_wizard = OperationWizard.as_view(
condition_dict=ope_crea_condition_dict,
url_name='operation_creation',)
-operation_modification_wizard = OperationModificationWizard.as_view([
+operation_modif_wizard_steps = [
('selec-operation_modification', OperationFormSelection),
('general-operation_modification', OperationFormModifGeneral),
('archaeologicalsite-operation_modification', ArchaeologicalSiteFormSet),
@@ -229,7 +229,11 @@ operation_modification_wizard = OperationModificationWizard.as_view([
('periods-operation_modification', PeriodForm),
('relations-operation_modification', RecordRelationsFormSet),
('abstract-operation_modification', OperationFormAbstract),
- ('final-operation_modification', FinalForm)],
+ ('final-operation_modification', FinalForm)
+]
+
+operation_modification_wizard = OperationModificationWizard.as_view(
+ operation_modif_wizard_steps,
label=_(u"Operation modification"),
condition_dict={
'preventive-operation_modification': is_preventive(
diff --git a/archaeological_warehouse/locale/django.pot b/archaeological_warehouse/locale/django.pot
index 1de8d8f51..5f7ac6fd1 100644
--- a/archaeological_warehouse/locale/django.pot
+++ b/archaeological_warehouse/locale/django.pot
@@ -137,7 +137,7 @@ msgstr ""
msgid "Localisation"
msgstr ""
-#: forms.py:288 forms.py:289
+#: forms.py:289 forms.py:290
msgid "Would you like to delete this container?"
msgstr ""
diff --git a/archaeological_warehouse/tests.py b/archaeological_warehouse/tests.py
index 7eb3017bc..10b2318b2 100644
--- a/archaeological_warehouse/tests.py
+++ b/archaeological_warehouse/tests.py
@@ -18,11 +18,11 @@
# See the file COPYING for details.
from django.conf import settings
-from django.test import TestCase
from archaeological_finds.tests import FindInit
-from ishtar_common.tests import WizardTest, WizardTestFormData as FormData
+from ishtar_common.tests import WizardTest, WizardTestFormData as FormData, \
+ TestCase
from archaeological_warehouse import models, views, forms
diff --git a/example_project/settings.py b/example_project/settings.py
index 607eb12e9..e0b51505f 100644
--- a/example_project/settings.py
+++ b/example_project/settings.py
@@ -214,6 +214,10 @@ APP_NAME = "SRA - Pays de la Loire"
SURFACE_UNIT = 'square-metre'
SURFACE_UNIT_LABEL = u'm²'
JOINT = u" | "
+ISHTAR_OPE_PREFIX = u"OA"
+ISHTAR_DEF_OPE_PREFIX = u"OP"
+# string len of find indexes - i.e: find with index 42 will be 00042
+ISHTAR_FINDS_INDEX_ZERO_LEN = 5
ISHTAR_OPE_COL_FORMAT = None
# DB key: (txt_idx, label)
ISHTAR_OPE_TYPES = {}
@@ -222,9 +226,8 @@ ISHTAR_PERIODS = {}
ISHTAR_PERMIT_TYPES = {}
ISHTAR_DOC_TYPES = {u"undefined": u"Undefined"}
-ISHTAR_DPTS = []
-OP_PREFIX = 'OP'
+ISHTAR_DPTS = []
PRE_APPS = []
EXTRA_APPS = []
@@ -236,7 +239,9 @@ try:
except ImportError, e:
print('Unable to load local_settings.py:', e)
-if 'test' in sys.argv:
+TESTING = sys.argv[1:2] == ['test']
+
+if TESTING:
SOUTH_TESTS_MIGRATE = False
if USE_SPATIALITE_FOR_TESTS:
diff --git a/ishtar_common/data_importer.py b/ishtar_common/data_importer.py
index 426d32a7a..34394341c 100644
--- a/ishtar_common/data_importer.py
+++ b/ishtar_common/data_importer.py
@@ -450,10 +450,11 @@ class TypeFormater(StrChoiceFormater):
self.match_table = {}
self.new_keys = {}
self.import_instance = import_instance
- for item in model.objects.all():
- self.choices.append((item.pk, unicode(item)))
- for key in item.get_keys(importer_id=import_instance.pk):
- self.equiv_dict[key] = item
+ if self.import_instance:
+ for item in model.objects.all():
+ self.choices.append((item.pk, unicode(item)))
+ for key in item.get_keys(importer_id=import_instance.pk):
+ self.equiv_dict[key] = item
def prepare(self, value):
return slugify(unicode(value).strip())
diff --git a/ishtar_common/locale/django.pot b/ishtar_common/locale/django.pot
index 7efeabbef..207642972 100644
--- a/ishtar_common/locale/django.pot
+++ b/ishtar_common/locale/django.pot
@@ -25,121 +25,125 @@ msgstr ""
msgid "Export selected as CSV file"
msgstr ""
-#: data_importer.py:183
+#: data_importer.py:186
#, python-format
msgid "\"%(value)s\" is too long. The max length is %(length)d characters."
msgstr ""
-#: data_importer.py:200
+#: data_importer.py:203
#, python-format
msgid "\"%(value)s\" not equal to yes or no"
msgstr ""
-#: data_importer.py:212
+#: data_importer.py:215
#, python-format
msgid "\"%(value)s\" is not a float"
msgstr ""
-#: data_importer.py:225 data_importer.py:239 data_importer.py:483
+#: data_importer.py:228 data_importer.py:242 data_importer.py:495
#, python-format
msgid "\"%(value)s\" is not a valid date"
msgstr ""
-#: data_importer.py:252
+#: data_importer.py:255
#, python-format
msgid "\"%(value)s\" is not an integer"
msgstr ""
-#: data_importer.py:303 data_importer.py:546
+#: data_importer.py:312 data_importer.py:560
#, python-format
msgid "Choice for \"%s\" is not available. Which one is relevant?\n"
msgstr ""
-#: data_importer.py:310
+#: data_importer.py:319
#, python-format
msgid "%d. None of the above - create new"
msgstr ""
-#: data_importer.py:313
+#: data_importer.py:322
#, python-format
msgid "%d. None of the above - skip"
msgstr ""
-#: data_importer.py:509
+#: data_importer.py:521
#, python-format
msgid "\"%(value)s\" is not a valid path for the given archive"
msgstr ""
-#: data_importer.py:623
+#: data_importer.py:637
msgid ""
"The given file is not correct. Check the file format. If you use a CSV file: "
"check that column separator and encoding are similar to the ones used by the "
"reference file."
msgstr ""
-#: data_importer.py:627
+#: data_importer.py:641
#, python-format
msgid "Too many cols (%(user_col)d) when maximum is %(ref_col)d"
msgstr ""
-#: data_importer.py:629
+#: data_importer.py:643
msgid "No data provided"
msgstr ""
-#: data_importer.py:630
+#: data_importer.py:644
msgid "Value is required"
msgstr ""
-#: data_importer.py:631
+#: data_importer.py:645
#, python-format
msgid "At least %d columns must be filled"
msgstr ""
-#: data_importer.py:632
+#: data_importer.py:646
msgid "The regexp doesn't match."
msgstr ""
-#: data_importer.py:634
+#: data_importer.py:648
msgid ""
"Forced creation is set for model {} but this model is not in the list of "
"models allowed to be created."
msgstr ""
-#: data_importer.py:636
+#: data_importer.py:650
msgid ""
"{} with values {} doesn't exist in the database. Create it first or fix your "
"source file."
msgstr ""
-#: data_importer.py:1089
+#: data_importer.py:1103
msgid "Not imported"
msgstr ""
-#: data_importer.py:1522
+#: data_importer.py:1240
+msgid "Importer configuration error: field \"{}\" does not exist for {}."
+msgstr ""
+
+#: data_importer.py:1548
msgid "line"
msgstr ""
-#: data_importer.py:1522
+#: data_importer.py:1548
msgid "col"
msgstr ""
-#: data_importer.py:1522
+#: data_importer.py:1548
msgid "error"
msgstr ""
-#: data_importer.py:1528
+#: data_importer.py:1554
msgid "field"
msgstr ""
-#: data_importer.py:1528
+#: data_importer.py:1554
msgid "source"
msgstr ""
-#: data_importer.py:1528
+#: data_importer.py:1554
msgid "result"
msgstr ""
-#: data_importer.py:1544
+#: data_importer.py:1570
#, python-format
msgid "\"%(value)s\" not in %(values)s"
msgstr ""
@@ -148,7 +152,7 @@ msgstr ""
msgid "Enter a valid name consisting of letters, spaces and hyphens."
msgstr ""
-#: forms.py:89 forms_common.py:618
+#: forms.py:89 forms_common.py:626
msgid "Confirm"
msgstr ""
@@ -172,12 +176,12 @@ msgstr ""
msgid "Add a new item"
msgstr ""
-#: forms.py:262 models.py:1475
+#: forms.py:262 models.py:1482
msgid "Template"
msgstr ""
-#: forms_common.py:41 forms_common.py:59 forms_common.py:182
-#: forms_common.py:406 models.py:1541 models.py:2953
+#: forms_common.py:41 forms_common.py:59 forms_common.py:184
+#: forms_common.py:408 models.py:1548 models.py:2977
#: templates/blocks/JQueryAdvancedTown.html:19
#: templates/ishtar/sheet_organization.html:13
msgid "Town"
@@ -193,8 +197,8 @@ msgid ""
"french town Saint-Denis in the Seine-Saint-Denis department.</p>"
msgstr ""
-#: forms_common.py:68 forms_common.py:855 ishtar_menu.py:47 models.py:2577
-#: models.py:2759 models.py:2821 templates/ishtar/sheet_person.html:4
+#: forms_common.py:68 forms_common.py:863 ishtar_menu.py:47 models.py:2599
+#: models.py:2781 models.py:2845 templates/ishtar/sheet_person.html:4
msgid "Person"
msgstr ""
@@ -204,64 +208,64 @@ msgid ""
"possible."
msgstr ""
-#: forms_common.py:170 forms_common.py:327 forms_common.py:451
-#: ishtar_menu.py:75 models.py:2460 models.py:2551
+#: forms_common.py:172 forms_common.py:329 forms_common.py:453
+#: ishtar_menu.py:75 models.py:2482 models.py:2573
#: templates/ishtar/sheet_organization.html:4
msgid "Organization"
msgstr ""
-#: forms_common.py:173 forms_common.py:210 forms_common.py:322
-#: forms_common.py:376 forms_common.py:446 models.py:1096 models.py:1474
-#: models.py:1742 models.py:1758 models.py:1984 models.py:2454 models.py:2563
-#: models.py:2939 templates/ishtar/sheet_organization.html:8
+#: forms_common.py:175 forms_common.py:212 forms_common.py:324
+#: forms_common.py:378 forms_common.py:448 models.py:1103 models.py:1481
+#: models.py:1749 models.py:1765 models.py:1993 models.py:2476 models.py:2585
+#: models.py:2963 templates/ishtar/sheet_organization.html:8
#: templates/ishtar/sheet_organization.html:21
msgid "Name"
msgstr ""
-#: forms_common.py:174 models.py:1696 models.py:2115
+#: forms_common.py:176 models.py:1703 models.py:2124
msgid "Organization type"
msgstr ""
-#: forms_common.py:176 forms_common.py:400 models.py:1536
+#: forms_common.py:178 forms_common.py:402 models.py:1543
#: templates/ishtar/sheet_organization.html:10
msgid "Address"
msgstr ""
-#: forms_common.py:178 forms_common.py:403 models.py:1537
+#: forms_common.py:180 forms_common.py:405 models.py:1544
#: templates/ishtar/sheet_organization.html:11
msgid "Address complement"
msgstr ""
-#: forms_common.py:180 forms_common.py:404 models.py:1539
+#: forms_common.py:182 forms_common.py:406 models.py:1546
#: templates/ishtar/sheet_organization.html:12
msgid "Postal code"
msgstr ""
-#: forms_common.py:183 forms_common.py:407 models.py:1542
+#: forms_common.py:185 forms_common.py:409 models.py:1549
msgid "Country"
msgstr ""
-#: forms_common.py:185 forms_common.py:324 forms_common.py:380
-#: forms_common.py:448 forms_common.py:572 models.py:1569
+#: forms_common.py:187 forms_common.py:326 forms_common.py:382
+#: forms_common.py:450 forms_common.py:574 models.py:1576
msgid "Email"
msgstr ""
-#: forms_common.py:186 forms_common.py:383 models.py:1554
+#: forms_common.py:188 forms_common.py:385 models.py:1561
#: templates/ishtar/sheet_organization.html:14
#: templates/ishtar/sheet_person.html:19
#: templates/ishtar/wizard/wizard_person.html:17
msgid "Phone"
msgstr ""
-#: forms_common.py:187 forms_common.py:392 models.py:1566
+#: forms_common.py:189 forms_common.py:394 models.py:1573
#: templates/ishtar/sheet_organization.html:15
#: templates/ishtar/sheet_person.html:37
#: templates/ishtar/wizard/wizard_person.html:35
msgid "Mobile phone"
msgstr ""
-#: forms_common.py:211 forms_common.py:325 forms_common.py:449 models.py:2151
-#: models.py:2456 models.py:2874 templates/sheet_ope.html:85
+#: forms_common.py:213 forms_common.py:327 forms_common.py:451 models.py:2160
+#: models.py:2478 models.py:2898 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:23
@@ -269,241 +273,241 @@ msgstr ""
msgid "Type"
msgstr ""
-#: forms_common.py:220 views.py:146
+#: forms_common.py:222 views.py:147
msgid "Organization search"
msgstr ""
-#: forms_common.py:244
+#: forms_common.py:246
msgid "At least two items have to be selected."
msgstr ""
-#: forms_common.py:262
+#: forms_common.py:264
msgid "Merge all items into"
msgstr ""
-#: forms_common.py:296
+#: forms_common.py:298
msgid "Organization to merge"
msgstr ""
-#: forms_common.py:323 forms_common.py:374 forms_common.py:447 models.py:2561
+#: forms_common.py:325 forms_common.py:376 forms_common.py:449 models.py:2583
#: templates/ishtar/sheet_organization.html:22
msgid "Surname"
msgstr ""
-#: forms_common.py:339 forms_common.py:434 views.py:111
+#: forms_common.py:341 forms_common.py:436 views.py:112
msgid "Person search"
msgstr ""
-#: forms_common.py:351
+#: forms_common.py:353
msgid "Person to merge"
msgstr ""
-#: forms_common.py:368 templates/ishtar/sheet_person.html:7
+#: forms_common.py:370 templates/ishtar/sheet_person.html:7
#: templates/ishtar/wizard/wizard_person.html:6
msgid "Identity"
msgstr ""
-#: forms_common.py:371 forms_common.py:773 forms_common.py:822 models.py:2116
-#: models.py:2555 models.py:2557 models.py:2871 templates/sheet_ope.html:104
+#: forms_common.py:373 forms_common.py:781 forms_common.py:830 models.py:2125
+#: models.py:2577 models.py:2579 models.py:2895 templates/sheet_ope.html:104
#: templates/ishtar/blocks/window_tables/documents.html:7
msgid "Title"
msgstr ""
-#: forms_common.py:372 models.py:2559
+#: forms_common.py:374 models.py:2581
msgid "Salutation"
msgstr ""
-#: forms_common.py:378 models.py:2565
+#: forms_common.py:380 models.py:2587
msgid "Raw name"
msgstr ""
-#: forms_common.py:381 models.py:1555
+#: forms_common.py:383 models.py:1562
msgid "Phone description"
msgstr ""
-#: forms_common.py:384 models.py:1557 models.py:1559
+#: forms_common.py:386 models.py:1564 models.py:1566
msgid "Phone description 2"
msgstr ""
-#: forms_common.py:386
+#: forms_common.py:388
msgid "Phone 2"
msgstr ""
-#: forms_common.py:388 models.py:1563
+#: forms_common.py:390 models.py:1570
msgid "Phone description 3"
msgstr ""
-#: forms_common.py:390 models.py:1561
+#: forms_common.py:392 models.py:1568
msgid "Phone 3"
msgstr ""
-#: forms_common.py:395
+#: forms_common.py:397
msgid "Current organization"
msgstr ""
-#: forms_common.py:409 models.py:1544
+#: forms_common.py:411 models.py:1551
msgid "Other address: address"
msgstr ""
-#: forms_common.py:412 models.py:1547
+#: forms_common.py:414 models.py:1554
msgid "Other address: address complement"
msgstr ""
-#: forms_common.py:414 models.py:1548
+#: forms_common.py:416 models.py:1555
msgid "Other address: postal code"
msgstr ""
-#: forms_common.py:416 models.py:1550
+#: forms_common.py:418 models.py:1557
msgid "Other address: town"
msgstr ""
-#: forms_common.py:418 models.py:1552
+#: forms_common.py:420 models.py:1559
msgid "Other address: country"
msgstr ""
-#: forms_common.py:430
+#: forms_common.py:432
msgid "Already has an account"
msgstr ""
-#: forms_common.py:445
+#: forms_common.py:447
msgid "Username"
msgstr ""
-#: forms_common.py:463
+#: forms_common.py:465
msgid "Account search"
msgstr ""
-#: forms_common.py:510 forms_common.py:550 forms_common.py:554 models.py:2508
+#: forms_common.py:512 forms_common.py:552 forms_common.py:556 models.py:2530
msgid "Person type"
msgstr ""
-#: forms_common.py:566 forms_common.py:571 ishtar_menu.py:32
+#: forms_common.py:568 forms_common.py:573 ishtar_menu.py:32
msgid "Account"
msgstr ""
-#: forms_common.py:575 wizards.py:1281
+#: forms_common.py:577 wizards.py:1305
msgid "New password"
msgstr ""
-#: forms_common.py:578
+#: forms_common.py:580
msgid "New password (confirmation)"
msgstr ""
-#: forms_common.py:599
+#: forms_common.py:607
msgid "Your password and confirmation password do not match."
msgstr ""
-#: forms_common.py:604
+#: forms_common.py:612
msgid "You must provide a correct password."
msgstr ""
-#: forms_common.py:612
+#: forms_common.py:620
msgid "This username already exists."
msgstr ""
-#: forms_common.py:619
+#: forms_common.py:627
msgid "Send the new password by email?"
msgstr ""
-#: forms_common.py:628 forms_common.py:641 models.py:2954
+#: forms_common.py:636 forms_common.py:649 models.py:2978
msgid "Towns"
msgstr ""
-#: forms_common.py:638
+#: forms_common.py:646
msgid "There are identical towns."
msgstr ""
-#: forms_common.py:722
+#: forms_common.py:730
msgid "Only one choice can be checked."
msgstr ""
-#: forms_common.py:770
+#: forms_common.py:778
msgid "Documentation informations"
msgstr ""
-#: forms_common.py:775 forms_common.py:823 models.py:2117 models.py:2846
+#: forms_common.py:783 forms_common.py:831 models.py:2126 models.py:2870
msgid "Source type"
msgstr ""
-#: forms_common.py:777 forms_common.py:824 templates/sheet_ope.html:84
+#: forms_common.py:785 forms_common.py:832 templates/sheet_ope.html:84
msgid "Reference"
msgstr ""
-#: forms_common.py:780 forms_common.py:825
+#: forms_common.py:788 forms_common.py:833
msgid "Internal reference"
msgstr ""
-#: forms_common.py:783 models.py:2885
+#: forms_common.py:791 models.py:2909
msgid "Numerical ressource (web address)"
msgstr ""
-#: forms_common.py:784 models.py:2887
+#: forms_common.py:792 models.py:2911
msgid "Receipt date"
msgstr ""
-#: forms_common.py:786 models.py:2283 models.py:2889
+#: forms_common.py:794 models.py:2292 models.py:2913
msgid "Creation date"
msgstr ""
-#: forms_common.py:789 models.py:2892
+#: forms_common.py:797 models.py:2916
msgid "Receipt date in documentation"
msgstr ""
-#: forms_common.py:791 forms_common.py:827 models.py:377 models.py:689
-#: models.py:2011 models.py:2569 models.py:2899
+#: forms_common.py:799 forms_common.py:835 models.py:379 models.py:696
+#: models.py:2020 models.py:2591 models.py:2923
msgid "Comment"
msgstr ""
-#: forms_common.py:793 forms_common.py:826 models.py:1098 models.py:1762
-#: models.py:1943 models.py:1985 models.py:2898 templates/sheet_ope.html:128
+#: forms_common.py:801 forms_common.py:834 models.py:1105 models.py:1769
+#: models.py:1952 models.py:1994 models.py:2922 templates/sheet_ope.html:128
msgid "Description"
msgstr ""
-#: forms_common.py:796 models.py:2900
+#: forms_common.py:804 models.py:2924
msgid "Additional information"
msgstr ""
-#: forms_common.py:798 forms_common.py:830 models.py:2902
+#: forms_common.py:806 forms_common.py:838 models.py:2926
msgid "Has a duplicate"
msgstr ""
-#: forms_common.py:801
+#: forms_common.py:809
msgid "Image"
msgstr ""
-#: forms_common.py:802
+#: forms_common.py:810
#, python-format
msgid ""
"<p>Heavy images are resized to: %(width)dx%(height)d (ratio is preserved).</"
"p>"
msgstr ""
-#: forms_common.py:819 forms_common.py:848 forms_common.py:882 models.py:2826
+#: forms_common.py:827 forms_common.py:856 forms_common.py:890 models.py:2850
#: templates/ishtar/wizard/wizard_person_deletion.html:124
msgid "Author"
msgstr ""
-#: forms_common.py:829
+#: forms_common.py:837
msgid "Additional informations"
msgstr ""
-#: forms_common.py:840
+#: forms_common.py:848
msgid "Would you like to delete this documentation?"
msgstr ""
-#: forms_common.py:856 models.py:2118 models.py:2813 models.py:2823
+#: forms_common.py:864 models.py:2127 models.py:2837 models.py:2847
msgid "Author type"
msgstr ""
-#: forms_common.py:875
+#: forms_common.py:883
msgid "Author selection"
msgstr ""
-#: forms_common.py:889
+#: forms_common.py:897
msgid "There are identical authors."
msgstr ""
-#: forms_common.py:893 models.py:2827 models.py:2881
+#: forms_common.py:901 models.py:2851 models.py:2905
#: templates/sheet_ope.html:106
#: templates/ishtar/blocks/window_tables/documents.html:9
msgid "Authors"
@@ -521,7 +525,7 @@ msgstr ""
msgid "Deletion"
msgstr ""
-#: ishtar_menu.py:39 models.py:1270 views.py:1549
+#: ishtar_menu.py:39 models.py:1277 views.py:1574
msgid "Global variables"
msgstr ""
@@ -549,278 +553,278 @@ msgstr ""
msgid "Manual merge"
msgstr ""
-#: ishtar_menu.py:109 models.py:2294
+#: ishtar_menu.py:109 models.py:2303
msgid "Imports"
msgstr ""
-#: ishtar_menu.py:112 views.py:1557
+#: ishtar_menu.py:112 views.py:1582
msgid "New import"
msgstr ""
-#: ishtar_menu.py:116 views.py:1571
+#: ishtar_menu.py:116 views.py:1596
msgid "Current imports"
msgstr ""
-#: ishtar_menu.py:120 views.py:1607
+#: ishtar_menu.py:120 views.py:1632
msgid "Old imports"
msgstr ""
-#: models.py:184
+#: models.py:186
msgid "Not a valid item."
msgstr ""
-#: models.py:197
+#: models.py:199
msgid "A selected item is not a valid item."
msgstr ""
-#: models.py:208
+#: models.py:210
msgid "This item already exists."
msgstr ""
-#: models.py:373 models.py:688 models.py:1509 models.py:1521 models.py:1940
+#: models.py:375 models.py:695 models.py:1516 models.py:1528 models.py:1949
msgid "Label"
msgstr ""
-#: models.py:375
+#: models.py:377
msgid "Textual ID"
msgstr ""
-#: models.py:378 models.py:691 models.py:1478
+#: models.py:380 models.py:698 models.py:1485
msgid "Available"
msgstr ""
-#: models.py:715 models.py:2057
+#: models.py:722 models.py:2066
msgid "Key"
msgstr ""
-#: models.py:721
+#: models.py:728
msgid "Specific key to an import"
msgstr ""
-#: models.py:813
+#: models.py:820
msgid "Last editor"
msgstr ""
-#: models.py:816
+#: models.py:823
msgid "Creator"
msgstr ""
-#: models.py:958 models.py:2965 models.py:3021
+#: models.py:965 models.py:2989 models.py:3045
msgid "Order"
msgstr ""
-#: models.py:959
+#: models.py:966
msgid "Symmetrical"
msgstr ""
-#: models.py:960
+#: models.py:967
msgid "Tiny label"
msgstr ""
-#: models.py:974
+#: models.py:981
msgid "Cannot have symmetrical and an inverse_relation"
msgstr ""
-#: models.py:1090
+#: models.py:1097
msgid "Euro"
msgstr ""
-#: models.py:1091
+#: models.py:1098
msgid "US dollar"
msgstr ""
-#: models.py:1097 models.py:1760
+#: models.py:1104 models.py:1767
msgid "Slug"
msgstr ""
-#: models.py:1100
+#: models.py:1107
msgid "CSS color code for base module"
msgstr ""
-#: models.py:1102
+#: models.py:1109
msgid "Files module"
msgstr ""
-#: models.py:1104
+#: models.py:1111
msgid "CSS color code for files module"
msgstr ""
-#: models.py:1106
+#: models.py:1113
msgid "Context records module"
msgstr ""
-#: models.py:1109
+#: models.py:1116
msgid "CSS color code for context record module"
msgstr ""
-#: models.py:1111
+#: models.py:1118
msgid "Finds module"
msgstr ""
-#: models.py:1112
+#: models.py:1119
msgid "Need context records module"
msgstr ""
-#: models.py:1114
+#: models.py:1121
msgid "CSS color code for find module"
msgstr ""
-#: models.py:1117
+#: models.py:1124
msgid "Warehouses module"
msgstr ""
-#: models.py:1118
+#: models.py:1125
msgid "Need finds module"
msgstr ""
-#: models.py:1120
+#: models.py:1127
msgid "CSS code for warehouse module"
msgstr ""
-#: models.py:1122
+#: models.py:1129
msgid "Mapping module"
msgstr ""
-#: models.py:1124
+#: models.py:1131
msgid "CSS code for mapping module"
msgstr ""
-#: models.py:1127
+#: models.py:1134
msgid "Home page"
msgstr ""
-#: models.py:1128
+#: models.py:1135
#, python-brace-format
msgid ""
"Homepage of Ishtar - if not defined a default homepage will appear. Use the "
"markdown syntax. {random_image} can be used to display a random image."
msgstr ""
-#: models.py:1132
+#: models.py:1139
msgid "File external id"
msgstr ""
-#: models.py:1134
+#: models.py:1141
msgid ""
"Formula to manage file external ID. Change this with care. With incorrect "
"formula, the application might be unusable and import of external data can "
"be destructive."
msgstr ""
-#: models.py:1139
+#: models.py:1146
msgid "Parcel external id"
msgstr ""
-#: models.py:1142
+#: models.py:1149
msgid ""
"Formula to manage parcel external ID. Change this with care. With incorrect "
"formula, the application might be unusable and import of external data can "
"be destructive."
msgstr ""
-#: models.py:1147
+#: models.py:1154
msgid "Context record external id"
msgstr ""
-#: models.py:1149
+#: models.py:1156
msgid ""
"Formula to manage context record external ID. Change this with care. With "
"incorrect formula, the application might be unusable and import of external "
"data can be destructive."
msgstr ""
-#: models.py:1154
+#: models.py:1161
msgid "Base find external id"
msgstr ""
-#: models.py:1156
+#: models.py:1163
msgid ""
"Formula to manage base find external ID. Change this with care. With "
"incorrect formula, the application might be unusable and import of external "
"data can be destructive."
msgstr ""
-#: models.py:1161
+#: models.py:1168
msgid "Find external id"
msgstr ""
-#: models.py:1163
+#: models.py:1170
msgid ""
"Formula to manage find external ID. Change this with care. With incorrect "
"formula, the application might be unusable and import of external data can "
"be destructive."
msgstr ""
-#: models.py:1168
+#: models.py:1175
msgid "Container external id"
msgstr ""
-#: models.py:1170
+#: models.py:1177
msgid ""
"Formula to manage container external ID. Change this with care. With "
"incorrect formula, the application might be unusable and import of external "
"data can be destructive."
msgstr ""
-#: models.py:1175
+#: models.py:1182
msgid "Warehouse external id"
msgstr ""
-#: models.py:1177
+#: models.py:1184
msgid ""
"Formula to manage warehouse external ID. Change this with care. With "
"incorrect formula, the application might be unusable and import of external "
"data can be destructive."
msgstr ""
-#: models.py:1182
+#: models.py:1189
msgid "Raw name for person"
msgstr ""
-#: models.py:1184
+#: models.py:1191
msgid ""
"Formula to manage person raw_name. Change this with care. With incorrect "
"formula, the application might be unusable and import of external data can "
"be destructive."
msgstr ""
-#: models.py:1188
+#: models.py:1195
msgid "Current active"
msgstr ""
-#: models.py:1189
+#: models.py:1196
msgid "Currency"
msgstr ""
-#: models.py:1193
+#: models.py:1200
msgid "Ishtar site profile"
msgstr ""
-#: models.py:1194
+#: models.py:1201
msgid "Ishtar site profiles"
msgstr ""
-#: models.py:1263
+#: models.py:1270
msgid "Variable name"
msgstr ""
-#: models.py:1264
+#: models.py:1271
msgid "Description of the variable"
msgstr ""
-#: models.py:1266 models.py:2058
+#: models.py:1273 models.py:2067
msgid "Value"
msgstr ""
-#: models.py:1269
+#: models.py:1276
msgid "Global variable"
msgstr ""
-#: models.py:1379 models.py:1409
+#: models.py:1386 models.py:1416
msgid "Total"
msgstr ""
-#: models.py:1386 models.py:1510 models.py:1522
+#: models.py:1393 models.py:1517 models.py:1529
#: templates/ishtar/sheet_person.html:22
#: templates/ishtar/dashboards/dashboard_main_detail.html:141
#: templates/ishtar/dashboards/dashboard_main_detail_users.html:26
@@ -828,750 +832,750 @@ msgstr ""
msgid "Number"
msgstr ""
-#: models.py:1473
+#: models.py:1480
msgid "Administrative Act"
msgstr ""
-#: models.py:1477
+#: models.py:1484
msgid "Associated object"
msgstr ""
-#: models.py:1481
+#: models.py:1488
msgid "Document template"
msgstr ""
-#: models.py:1482
+#: models.py:1489
msgid "Document templates"
msgstr ""
-#: models.py:1513 models.py:1523 models.py:2278
+#: models.py:1520 models.py:1530 models.py:2287
msgid "State"
msgstr ""
-#: models.py:1527 templates/blocks/JQueryAdvancedTown.html:12
+#: models.py:1534 templates/blocks/JQueryAdvancedTown.html:12
msgid "Department"
msgstr ""
-#: models.py:1528
+#: models.py:1535
msgid "Departments"
msgstr ""
-#: models.py:1565
+#: models.py:1572
msgid "Raw phone"
msgstr ""
-#: models.py:1571
+#: models.py:1578
msgid "Alternative address is prefered"
msgstr ""
-#: models.py:1610
+#: models.py:1617
msgid "Tel: "
msgstr ""
-#: models.py:1614
+#: models.py:1621
msgid "Mobile: "
msgstr ""
-#: models.py:1618
+#: models.py:1625
msgid "Email: "
msgstr ""
-#: models.py:1623
+#: models.py:1630
msgid "Merge key"
msgstr ""
-#: models.py:1697
+#: models.py:1704
msgid "Organization types"
msgstr ""
-#: models.py:1743
+#: models.py:1750
msgid "Class name"
msgstr ""
-#: models.py:1746
+#: models.py:1753
msgid "Importer - Model"
msgstr ""
-#: models.py:1747
+#: models.py:1754
msgid "Importer - Models"
msgstr ""
-#: models.py:1764 templates/ishtar/dashboards/dashboard_main.html:25
+#: models.py:1771 templates/ishtar/dashboards/dashboard_main.html:25
msgid "Users"
msgstr ""
-#: models.py:1767
+#: models.py:1774
msgid "Associated model"
msgstr ""
-#: models.py:1770
+#: models.py:1777
msgid "Models that can accept new items"
msgstr ""
-#: models.py:1771
+#: models.py:1778
msgid "Leave blank for no restrictions"
msgstr ""
-#: models.py:1773
+#: models.py:1780
msgid "Is template"
msgstr ""
-#: models.py:1774
+#: models.py:1781
msgid "Unicity keys (separator \";\")"
msgstr ""
-#: models.py:1778
+#: models.py:1785
msgid "Importer - Type"
msgstr ""
-#: models.py:1779
+#: models.py:1786
msgid "Importer - Types"
msgstr ""
-#: models.py:1872
+#: models.py:1881
msgid "Importer - Default"
msgstr ""
-#: models.py:1873
+#: models.py:1882
msgid "Importer - Defaults"
msgstr ""
-#: models.py:1908
+#: models.py:1917
msgid "Importer - Default value"
msgstr ""
-#: models.py:1909
+#: models.py:1918
msgid "Importer - Default values"
msgstr ""
-#: models.py:1942
+#: models.py:1951
msgid "Column number"
msgstr ""
-#: models.py:1945
+#: models.py:1954
msgid "Required"
msgstr ""
-#: models.py:1948
+#: models.py:1957
msgid "Importer - Column"
msgstr ""
-#: models.py:1949
+#: models.py:1958
msgid "Importer - Columns"
msgstr ""
-#: models.py:1969
+#: models.py:1978
msgid "Field name"
msgstr ""
-#: models.py:1971 models.py:2005
+#: models.py:1980 models.py:2014
msgid "Force creation of new items"
msgstr ""
-#: models.py:1973 models.py:2007
+#: models.py:1982 models.py:2016
msgid "Concatenate with existing"
msgstr ""
-#: models.py:1975 models.py:2009
+#: models.py:1984 models.py:2018
msgid "Concatenate character"
msgstr ""
-#: models.py:1979
+#: models.py:1988
msgid "Importer - Duplicate field"
msgstr ""
-#: models.py:1980
+#: models.py:1989
msgid "Importer - Duplicate fields"
msgstr ""
-#: models.py:1987
+#: models.py:1996
msgid "Regular expression"
msgstr ""
-#: models.py:1990
+#: models.py:1999
msgid "Importer - Regular expression"
msgstr ""
-#: models.py:1991
+#: models.py:2000
msgid "Importer - Regular expressions"
msgstr ""
-#: models.py:2014
+#: models.py:2023
msgid "Importer - Target"
msgstr ""
-#: models.py:2015
+#: models.py:2024
msgid "Importer - Targets"
msgstr ""
-#: models.py:2039 views.py:545
+#: models.py:2048 views.py:549
msgid "True"
msgstr ""
-#: models.py:2040 views.py:547
+#: models.py:2049 views.py:551
msgid "False"
msgstr ""
-#: models.py:2059
+#: models.py:2068
msgid "Is set"
msgstr ""
-#: models.py:2066
+#: models.py:2075
msgid "Importer - Target key"
msgstr ""
-#: models.py:2067
+#: models.py:2076
msgid "Importer - Targets keys"
msgstr ""
-#: models.py:2119 models.py:2877
+#: models.py:2128 models.py:2901
msgid "Format"
msgstr ""
-#: models.py:2120 models.py:2969
+#: models.py:2129 models.py:2993
msgid "Operation type"
msgstr ""
-#: models.py:2121
+#: models.py:2130
msgid "Period"
msgstr ""
-#: models.py:2122
+#: models.py:2131
msgid "Report state"
msgstr ""
-#: models.py:2123
+#: models.py:2132
msgid "Remain type"
msgstr ""
-#: models.py:2124
+#: models.py:2133
msgid "Unit"
msgstr ""
-#: models.py:2125
+#: models.py:2134
msgid "Activity type"
msgstr ""
-#: models.py:2126
+#: models.py:2135
msgid "Material"
msgstr ""
-#: models.py:2128
+#: models.py:2137
msgid "Conservatory state"
msgstr ""
-#: models.py:2129
+#: models.py:2138
msgid "Container type"
msgstr ""
-#: models.py:2130
+#: models.py:2139
msgid "Preservation type"
msgstr ""
-#: models.py:2131
+#: models.py:2140
msgid "Object type"
msgstr ""
-#: models.py:2132
+#: models.py:2141
msgid "Integrity type"
msgstr ""
-#: models.py:2133
+#: models.py:2142
msgid "Remarkability type"
msgstr ""
-#: models.py:2134
+#: models.py:2143
msgid "Batch type"
msgstr ""
-#: models.py:2136
+#: models.py:2145
msgid "Identification type"
msgstr ""
-#: models.py:2138
+#: models.py:2147
msgid "Context record relation type"
msgstr ""
-#: models.py:2139 models.py:3027
+#: models.py:2148 models.py:3051
msgid "Spatial reference system"
msgstr ""
-#: models.py:2140 models.py:2855
+#: models.py:2149 models.py:2879
msgid "Support type"
msgstr ""
-#: models.py:2141 models.py:2520
+#: models.py:2150 models.py:2542
msgid "Title type"
msgstr ""
-#: models.py:2147
+#: models.py:2156
msgid "Integer"
msgstr ""
-#: models.py:2148
+#: models.py:2157
msgid "Float"
msgstr ""
-#: models.py:2149
+#: models.py:2158
msgid "String"
msgstr ""
-#: models.py:2150 templates/sheet_ope.html:86
+#: models.py:2159 templates/sheet_ope.html:86
msgid "Date"
msgstr ""
-#: models.py:2152 templates/sheet_ope.html:61 templates/sheet_ope.html.py:83
+#: models.py:2161 templates/sheet_ope.html:61 templates/sheet_ope.html.py:83
#: templates/ishtar/dashboards/dashboard_main_detail.html:126
msgid "Year"
msgstr ""
-#: models.py:2153
+#: models.py:2162
msgid "String to boolean"
msgstr ""
-#: models.py:2154
+#: models.py:2163
msgctxt "filesystem"
msgid "File"
msgstr ""
-#: models.py:2155
+#: models.py:2164
msgid "Unknow type"
msgstr ""
-#: models.py:2171
+#: models.py:2180
msgid "4 digit year. e.g.: \"2015\""
msgstr ""
-#: models.py:2172
+#: models.py:2181
msgid "4 digit year/month/day. e.g.: \"2015/02/04\""
msgstr ""
-#: models.py:2173
+#: models.py:2182
msgid "Day/month/4 digit year. e.g.: \"04/02/2015\""
msgstr ""
-#: models.py:2183
+#: models.py:2192
msgid "Options"
msgstr ""
-#: models.py:2185
+#: models.py:2194
msgid "Split character(s)"
msgstr ""
-#: models.py:2189
+#: models.py:2198
msgid "Importer - Formater type"
msgstr ""
-#: models.py:2190
+#: models.py:2199
msgid "Importer - Formater types"
msgstr ""
-#: models.py:2242 templates/ishtar/dashboards/dashboard_main_detail.html:63
+#: models.py:2251 templates/ishtar/dashboards/dashboard_main_detail.html:63
msgid "Created"
msgstr ""
-#: models.py:2243
+#: models.py:2252
msgid "Analyse in progress"
msgstr ""
-#: models.py:2244
+#: models.py:2253
msgid "Analysed"
msgstr ""
-#: models.py:2245
+#: models.py:2254
msgid "Import pending"
msgstr ""
-#: models.py:2246
+#: models.py:2255
msgid "Import in progress"
msgstr ""
-#: models.py:2247
+#: models.py:2256
msgid "Finished with errors"
msgstr ""
-#: models.py:2248
+#: models.py:2257
msgid "Finished"
msgstr ""
-#: models.py:2249
+#: models.py:2258
msgid "Archived"
msgstr ""
-#: models.py:2262
+#: models.py:2271
msgid "Imported file"
msgstr ""
-#: models.py:2264
+#: models.py:2273
msgid "Associated images (zip file)"
msgstr ""
-#: models.py:2266
+#: models.py:2275
msgid "Encoding"
msgstr ""
-#: models.py:2268
+#: models.py:2277
msgid "Skip lines"
msgstr ""
-#: models.py:2269 templates/ishtar/import_list.html:47
+#: models.py:2278 templates/ishtar/import_list.html:47
msgid "Error file"
msgstr ""
-#: models.py:2272
+#: models.py:2281
msgid "Result file"
msgstr ""
-#: models.py:2275 templates/ishtar/import_list.html:53
+#: models.py:2284 templates/ishtar/import_list.html:53
msgid "Match file"
msgstr ""
-#: models.py:2281
+#: models.py:2290
msgid "Conservative import"
msgstr ""
-#: models.py:2286
+#: models.py:2295
msgid "End date"
msgstr ""
-#: models.py:2288
+#: models.py:2297
msgid "Remaining seconds"
msgstr ""
-#: models.py:2293
+#: models.py:2302
msgid "Import"
msgstr ""
-#: models.py:2310
+#: models.py:2332
msgid "Analyse"
msgstr ""
-#: models.py:2312 models.py:2315
+#: models.py:2334 models.py:2337
msgid "Re-analyse"
msgstr ""
-#: models.py:2313
+#: models.py:2335
msgid "Launch import"
msgstr ""
-#: models.py:2316
+#: models.py:2338
msgid "Re-import"
msgstr ""
-#: models.py:2317
+#: models.py:2339
msgid "Archive"
msgstr ""
-#: models.py:2319
+#: models.py:2341
msgid "Unarchive"
msgstr ""
-#: models.py:2320 widgets.py:130 templates/ishtar/form_delete.html:11
+#: models.py:2342 widgets.py:130 templates/ishtar/form_delete.html:11
msgid "Delete"
msgstr ""
-#: models.py:2461
+#: models.py:2483
msgid "Organizations"
msgstr ""
-#: models.py:2463
+#: models.py:2485
msgid "Can view all Organizations"
msgstr ""
-#: models.py:2464
+#: models.py:2486
msgid "Can view own Organization"
msgstr ""
-#: models.py:2465
+#: models.py:2487
msgid "Can add own Organization"
msgstr ""
-#: models.py:2467
+#: models.py:2489
msgid "Can change own Organization"
msgstr ""
-#: models.py:2469
+#: models.py:2491
msgid "Can delete own Organization"
msgstr ""
-#: models.py:2504
+#: models.py:2526
msgid "Groups"
msgstr ""
-#: models.py:2509
+#: models.py:2531
msgid "Person types"
msgstr ""
-#: models.py:2521
+#: models.py:2543
msgid "Title types"
msgstr ""
-#: models.py:2530
+#: models.py:2552
msgid "Mr"
msgstr ""
-#: models.py:2531
+#: models.py:2553
msgid "Miss"
msgstr ""
-#: models.py:2532
+#: models.py:2554
msgid "Mr and Mrs"
msgstr ""
-#: models.py:2533
+#: models.py:2555
msgid "Mrs"
msgstr ""
-#: models.py:2534
+#: models.py:2556
msgid "Doctor"
msgstr ""
-#: models.py:2567
+#: models.py:2589
msgid "Contact type"
msgstr ""
-#: models.py:2570 models.py:2634
+#: models.py:2592 models.py:2656
msgid "Types"
msgstr ""
-#: models.py:2573
+#: models.py:2595
msgid "Is attached to"
msgstr ""
-#: models.py:2578
+#: models.py:2600
msgid "Persons"
msgstr ""
-#: models.py:2580
+#: models.py:2602
msgid "Can view all Persons"
msgstr ""
-#: models.py:2581
+#: models.py:2603
msgid "Can view own Person"
msgstr ""
-#: models.py:2582
+#: models.py:2604
msgid "Can add own Person"
msgstr ""
-#: models.py:2583
+#: models.py:2605
msgid "Can change own Person"
msgstr ""
-#: models.py:2584
+#: models.py:2606
msgid "Can delete own Person"
msgstr ""
-#: models.py:2762
+#: models.py:2784
msgid "Advanced shortcut menu"
msgstr ""
-#: models.py:2765
+#: models.py:2787
msgid "Ishtar user"
msgstr ""
-#: models.py:2766
+#: models.py:2788
msgid "Ishtar users"
msgstr ""
-#: models.py:2808
+#: models.py:2832
msgid "To modify the password use the form in Auth > User"
msgstr ""
-#: models.py:2814
+#: models.py:2838
msgid "Author types"
msgstr ""
-#: models.py:2847
+#: models.py:2871
msgid "Source types"
msgstr ""
-#: models.py:2856
+#: models.py:2880
msgid "Support types"
msgstr ""
-#: models.py:2863
+#: models.py:2887
msgid "Format type"
msgstr ""
-#: models.py:2864
+#: models.py:2888
msgid "Format types"
msgstr ""
-#: models.py:2872
+#: models.py:2896
msgid "External ID"
msgstr ""
-#: models.py:2875
+#: models.py:2899
msgid "Support"
msgstr ""
-#: models.py:2879
+#: models.py:2903
msgid "Scale"
msgstr ""
-#: models.py:2893
+#: models.py:2917
msgid "Item number"
msgstr ""
-#: models.py:2894
+#: models.py:2918
msgid "Ref."
msgstr ""
-#: models.py:2897
+#: models.py:2921
msgid "Internal ref."
msgstr ""
-#: models.py:2940
+#: models.py:2964
msgid "Surface (m2)"
msgstr ""
-#: models.py:2941 templates/sheet_ope.html:46 templates/sheet_ope.html.py:107
+#: models.py:2965 templates/sheet_ope.html:46 templates/sheet_ope.html.py:107
msgid "Localisation"
msgstr ""
-#: models.py:2966
+#: models.py:2990
msgid "Is preventive"
msgstr ""
-#: models.py:2970
+#: models.py:2994
msgid "Operation types"
msgstr ""
-#: models.py:2999
+#: models.py:3023
msgid "Preventive"
msgstr ""
-#: models.py:3000
+#: models.py:3024
msgid "Research"
msgstr ""
-#: models.py:3023
+#: models.py:3047
msgid "Authority name"
msgstr ""
-#: models.py:3024
+#: models.py:3048
msgid "Authority SRID"
msgstr ""
-#: models.py:3028
+#: models.py:3052
msgid "Spatial reference systems"
msgstr ""
-#: utils.py:84
+#: utils.py:100
msgid " (...)"
msgstr ""
-#: utils.py:130
+#: utils.py:146
msgid "Load another random image?"
msgstr ""
-#: views.py:118
+#: views.py:119
msgid "New person"
msgstr ""
-#: views.py:126
+#: views.py:127
msgid "Person modification"
msgstr ""
-#: views.py:141
+#: views.py:142
msgid "Person deletion"
msgstr ""
-#: views.py:152
+#: views.py:153
msgid "New organization"
msgstr ""
-#: views.py:159
+#: views.py:160
msgid "Organization modification"
msgstr ""
-#: views.py:175
+#: views.py:176
msgid "Organization deletion"
msgstr ""
-#: views.py:182
+#: views.py:183
msgid "Account management"
msgstr ""
-#: views.py:188
+#: views.py:189
msgid "Account deletion"
msgstr ""
-#: views.py:240
+#: views.py:241
msgid "Archaeological file"
msgstr ""
-#: views.py:241
+#: views.py:242
msgid "Operation"
msgstr ""
-#: views.py:243
+#: views.py:244
msgid "Context record"
msgstr ""
-#: views.py:245
+#: views.py:246
msgid "Find"
msgstr ""
-#: views.py:247
+#: views.py:248
msgid "Treatment request"
msgstr ""
-#: views.py:248
+#: views.py:249
msgid "Treatment"
msgstr ""
-#: views.py:1304 views.py:1347
+#: views.py:1329 views.py:1372
msgid "Operation not permitted."
msgstr ""
-#: views.py:1306
+#: views.py:1331
#, python-format
msgid "New %s"
msgstr ""
-#: views.py:1365 views.py:1415
+#: views.py:1390 views.py:1440
msgid "Archaeological files"
msgstr ""
-#: views.py:1366 views.py:1419
+#: views.py:1391 views.py:1444
msgid "Operations"
msgstr ""
-#: views.py:1368 views.py:1423
+#: views.py:1393 views.py:1448
msgid "Context records"
msgstr ""
-#: views.py:1370 views.py:1426
+#: views.py:1395 views.py:1451
msgid "Finds"
msgstr ""
-#: views.py:1619 templates/ishtar/import_list.html:43
+#: views.py:1644 templates/ishtar/import_list.html:43
msgid "Link unmatched items"
msgstr ""
-#: views.py:1634
+#: views.py:1659
msgid "Delete import"
msgstr ""
-#: views.py:1673
+#: views.py:1698
msgid "Merge persons"
msgstr ""
-#: views.py:1697
+#: views.py:1722
msgid "Select the main person"
msgstr ""
-#: views.py:1706
+#: views.py:1731
msgid "Merge organization"
msgstr ""
-#: views.py:1716
+#: views.py:1741
msgid "Select the main organization"
msgstr ""
-#: views.py:1756 views.py:1772
+#: views.py:1781 views.py:1797
msgid "Corporation manager"
msgstr ""
@@ -1591,15 +1595,15 @@ msgstr ""
msgid "Remove"
msgstr ""
-#: wizards.py:343 templates/ishtar/import_delete.html:20
+#: wizards.py:344 templates/ishtar/import_delete.html:20
msgid "Yes"
msgstr ""
-#: wizards.py:345
+#: wizards.py:346
msgid "No"
msgstr ""
-#: wizards.py:1338
+#: wizards.py:1362
#, python-format
msgid "[%(app_name)s] Account creation/modification"
msgstr ""
@@ -1962,7 +1966,7 @@ msgstr ""
msgid "where the magic happens."
msgstr ""
-#: templates/window.html:40 templates/blocks/JQueryJqGrid.html:28
+#: templates/window.html:40 templates/blocks/JQueryJqGrid.html:34
#: templates/ishtar/manage_basket.html:12
msgid "Add"
msgstr ""
@@ -1984,32 +1988,36 @@ msgstr ""
msgid "Search and select an item"
msgstr ""
-#: templates/blocks/JQueryJqGrid.html:17 templates/blocks/JQueryJqGrid.html:23
+#: templates/blocks/JQueryJqGrid.html:13
+msgid "Pinned search:"
+msgstr ""
+
+#: templates/blocks/JQueryJqGrid.html:23 templates/blocks/JQueryJqGrid.html:29
#: templates/ishtar/blocks/window_tables/dynamic_documents.html:9
#: templates/ishtar/blocks/window_tables/dynamic_documents.html:12
msgid "Export as CSV"
msgstr ""
-#: templates/blocks/JQueryJqGrid.html:17 templates/blocks/JQueryJqGrid.html:23
+#: templates/blocks/JQueryJqGrid.html:23 templates/blocks/JQueryJqGrid.html:29
#: templates/ishtar/blocks/window_tables/dynamic_documents.html:9
msgid "CSV"
msgstr ""
-#: templates/blocks/JQueryJqGrid.html:18
+#: templates/blocks/JQueryJqGrid.html:24
#: templates/ishtar/blocks/window_tables/dynamic_documents.html:10
msgid "Export as CSV - full"
msgstr ""
-#: templates/blocks/JQueryJqGrid.html:18
+#: templates/blocks/JQueryJqGrid.html:24
#: templates/ishtar/blocks/window_tables/dynamic_documents.html:10
msgid "CSV full"
msgstr ""
-#: templates/blocks/JQueryJqGrid.html:20
+#: templates/blocks/JQueryJqGrid.html:26
msgid "Export as CSV - "
msgstr ""
-#: templates/blocks/JQueryJqGrid.html:99
+#: templates/blocks/JQueryJqGrid.html:105
#: templates/ishtar/blocks/window_tables/dynamic_documents.html:41
msgid "An error as occured during search. Check your query fields."
msgstr ""
diff --git a/ishtar_common/models.py b/ishtar_common/models.py
index 2496e4372..24704dd21 100644
--- a/ishtar_common/models.py
+++ b/ishtar_common/models.py
@@ -489,8 +489,11 @@ class GeneralType(Cached, models.Model):
@classmethod
def get_types(cls, dct={}, instances=False, exclude=[], empty_first=True,
default=None, initial=None, force=False):
- types = cls._pre_get_types(dct, instances, exclude, empty_first,
- default, force)
+ types = []
+ if not instances and empty_first and not default:
+ types = [('', '--')]
+ types += cls._pre_get_types(dct, instances, exclude,
+ default, force)
if not initial:
return types
new_vals = cls._get_initial_types(initial, [idx for idx, lbl in types])
@@ -499,13 +502,13 @@ class GeneralType(Cached, models.Model):
@classmethod
def _pre_get_types(cls, dct={}, instances=False, exclude=[],
- empty_first=True, default=None, force=False):
+ default=None, force=False):
# cache
cache_key = None
if not instances:
keys = ['__get_types']
- keys += [u"{}".format(ex) for ex in exclude] + [
- empty_first and 'empty_first' or ''] + [u"{}".format(default)]
+ keys += [u"{}".format(ex) for ex in exclude] + \
+ [u"{}".format(default)]
keys += [u'{}-{}'.format(unicode(k), dct[k]) for k in dct]
cache_key, value = get_cache(cls, keys)
if value and not force:
@@ -515,28 +518,25 @@ class GeneralType(Cached, models.Model):
if not cache_key:
return cls._get_parent_types(
base_dct, instances, exclude=exclude,
- empty_first=empty_first, default=default)
+ default=default)
vals = [v for v in cls._get_parent_types(
base_dct, instances, exclude=exclude,
- empty_first=empty_first, default=default)]
+ default=default)]
cache.set(cache_key, vals, settings.CACHE_TIMEOUT)
return vals
if not cache_key:
return cls._get_types(base_dct, instances, exclude=exclude,
- empty_first=empty_first, default=default)
+ default=default)
vals = [v for v in cls._get_types(
- base_dct, instances, exclude=exclude, empty_first=empty_first,
+ base_dct, instances, exclude=exclude,
default=default)]
cache.set(cache_key, vals, settings.CACHE_TIMEOUT)
return vals
@classmethod
- def _get_types(cls, dct={}, instances=False, exclude=[], empty_first=True,
- default=None):
+ def _get_types(cls, dct={}, instances=False, exclude=[], default=None):
dct['available'] = True
- if not instances and empty_first and not default:
- yield ('', '--')
if default:
try:
default = cls.objects.get(txt_idx=default)
@@ -606,10 +606,8 @@ class GeneralType(Cached, models.Model):
@classmethod
def _get_parent_types(cls, dct={}, instances=False, exclude=[],
- empty_first=True, default=None):
+ default=None):
dct['available'] = True
- if not instances and empty_first:
- yield ('', '--')
dct['parent'] = None
items = cls.objects.filter(**dct)
if exclude:
diff --git a/ishtar_common/templates/blocks/JQueryJqGrid.html b/ishtar_common/templates/blocks/JQueryJqGrid.html
index 607f81f7d..258082877 100644
--- a/ishtar_common/templates/blocks/JQueryJqGrid.html
+++ b/ishtar_common/templates/blocks/JQueryJqGrid.html
@@ -8,6 +8,12 @@
<h4>{% trans "Search and select an item" %}</h4>
+<h5 id="pinned_search_{{name}}">
+ <i class="fa fa-thumb-tack"></i> &nbsp;
+ <strong>{% trans "Pinned search:" %}</strong>
+ <em><span id="pinned_search_content_{{name}}"></span></em>
+</h5>
+
<table id='grid_{{name}}' class='jqgrid'></table>
<div id='pager_{{name}}'></div>
@@ -97,6 +103,19 @@ jQuery(document).ready(function(){
jsonReader : {repeatitems: false},
loadError: function (jqXHR, textStatus, errorThrown) {
alert("{% trans "An error as occured during search. Check your query fields." %}");
+ },
+ beforeProcessing: function(data, status, xhr){
+ $('#pinned_search_content_{{name}}').html('');
+ for (idx in data){
+ if (idx == 'pinned-search' && data[idx] != ''){
+ $('#pinned_search_content_{{name}}').html(data[idx]);
+ }
+ }
+ if ($('#pinned_search_content_{{name}}').html()){
+ $('#pinned_search_{{name}}').show();
+ } else {
+ $('#pinned_search_{{name}}').hide();
+ }
}
});
{% if multiple %}
diff --git a/ishtar_common/templates/ishtar/blocks/advanced_shortcut_menu.html b/ishtar_common/templates/ishtar/blocks/advanced_shortcut_menu.html
index 2cf80da06..1758bcf54 100644
--- a/ishtar_common/templates/ishtar/blocks/advanced_shortcut_menu.html
+++ b/ishtar_common/templates/ishtar/blocks/advanced_shortcut_menu.html
@@ -13,7 +13,7 @@
</span>
<div class="short-menu-buttons btn-group" role="group">
<button type="button" class="btn" id='short-menu-simple' title="{% trans 'Simple menu limited to your own items. Be careful only the last 100 items are displayed.' %}">{% trans "simple" %}</button>
- <button type="button" class="btn btn-selected" id='short-menu-advanced' title="{% trans 'Advanced menu.' %}">{% trans "advanced" %}</button>
+ <button type="button" class="btn btn-selected" id='short-menu-advanced' title="{% trans 'Advanced menu' %}">{% trans "advanced" %}</button>
</div>
<div id='action_current_items'>
<p><i class="icon fa fa-thumb-tack fa-2x" aria-hidden="true" title="{% trans 'Pin an item in order to constrain default searches with this item. By default only your items are displayed. New created and modified items are auto-pin.' %}"></i></p>
diff --git a/ishtar_common/templates/ishtar/blocks/shortcut_menu.html b/ishtar_common/templates/ishtar/blocks/shortcut_menu.html
index 05aaed6d8..5973eba3f 100644
--- a/ishtar_common/templates/ishtar/blocks/shortcut_menu.html
+++ b/ishtar_common/templates/ishtar/blocks/shortcut_menu.html
@@ -13,7 +13,7 @@
</span>
<div class="short-menu-buttons btn-group" role="group">
<button type="button" class="btn btn-selected" id='short-menu-simple' title="{% trans 'Simple menu limited to your own items. Be careful only the last 100 items are displayed.' %}">{% trans "simple" %}</button>
- <button type="button" class="btn" id='short-menu-advanced' title="{% trans 'Advanced menu.' %}">{% trans "advanced" %}</button>
+ <button type="button" class="btn" id='short-menu-advanced' title="{% trans 'Advanced menu' %}">{% trans "advanced" %}</button>
</div>
<div>
<i class="icon fa fa-thumb-tack fa-2x" aria-hidden="true" title="{% trans 'Pin an item in order to constrain default searches with this item. By default only your items are displayed. New created and modified items are auto-pin.' %}"></i>
diff --git a/ishtar_common/templates/ishtar/wizard/validation_bar.html b/ishtar_common/templates/ishtar/wizard/validation_bar.html
index 09907af67..a1590858f 100644
--- a/ishtar_common/templates/ishtar/wizard/validation_bar.html
+++ b/ishtar_common/templates/ishtar/wizard/validation_bar.html
@@ -1,7 +1,9 @@
{% load i18n %}
{% load url from future %}
<div id='validation-bar'>
- <input type="submit" id="submit_form" name='validate' value="{% trans "Validate" %}"/>
- {% if next_steps %}<input type="submit" id="submit_end_form" name='validate_and_end' value="{% trans "Validate and end" %}"/>{% endif %}
- <a href='{% url 'reset_wizards' %}' id="reset_wizards" class='button'>{% trans "Cancel" %}</a>
+ <input type="submit" id="submit_form" name='validate' value="{% trans 'Validate' %}"/>
+ {% if last_step_is_available and next_steps %}
+ <input type="submit" id="submit_end_form" name='validate_and_end' value="{% trans 'Validate and end' %}"/>
+ {% endif %}
+ <a href="{% url 'reset_wizards' %}" id="reset_wizards" class='button'>{% trans "Cancel" %}</a>
</div>
diff --git a/ishtar_common/tests.py b/ishtar_common/tests.py
index 42bb1860e..a9e92e1f2 100644
--- a/ishtar_common/tests.py
+++ b/ishtar_common/tests.py
@@ -30,8 +30,9 @@ from django.core.files.base import File as DjangoFile
from django.core.files.uploadedfile import SimpleUploadedFile
from django.core.management import call_command
from django.core.urlresolvers import reverse
+from django.db import connection, transaction
from django.template.defaultfilters import slugify
-from django.test import TestCase
+from django.test import TestCase as BaseTestCase
from django.test.client import Client
from django.test.simple import DjangoTestSuiteRunner
@@ -39,6 +40,9 @@ from ishtar_common import models
from ishtar_common import forms_common
from ishtar_common.utils import post_save_point
+from archaeological_context_records.models import CRBulkView
+from archaeological_finds.models import BFBulkView, FBulkView, FirstBaseFindView
+
"""
from django.conf import settings
import tempfile, datetime
@@ -82,6 +86,17 @@ def create_user():
return username, password, user
+class TestCase(BaseTestCase):
+ def _pre_setup(self):
+ super(TestCase, self)._pre_setup()
+ if settings.USE_SPATIALITE_FOR_TESTS:
+ return
+ c = connection.cursor()
+ for view in [CRBulkView, FirstBaseFindView, BFBulkView, FBulkView]:
+ c.execute(view.CREATE_SQL)
+ transaction.commit_unless_managed()
+
+
class CommandsTestCase(TestCase):
def test_clean_ishtar(self):
"""
@@ -102,20 +117,30 @@ class WizardTestFormData(object):
"""
Test set to simulate wizard steps
"""
- def __init__(self, name, form_datas, ignored=[], extra_tests=[]):
+ def __init__(self, name, form_datas, ignored=[], pre_tests=[],
+ extra_tests=[]):
"""
:param name: explicit name of the test
:param form_datas: dict with data for each step - dict key are wizard
step name
:param ignored: steps to be ignored in wizard processing
+ :param pre_tests: list of function to be executed before the wizard
:param extra_tests: list of extra tests. Theses tests must be functions
accepting two parameters: the current test object and the final step
response
"""
self.form_datas = form_datas
self.ignored = ignored[:]
+ self.pre_tests = pre_tests
self.extra_tests = extra_tests
+ def inits(self, test_object):
+ """
+ Initialisations before the wizard.
+ """
+ for pre in self.pre_tests:
+ pre(test_object)
+
def tests(self, test_object, final_step_response):
"""
Specific tests for theses datas. Raise Exception if not OK.
@@ -185,6 +210,7 @@ class WizardTest(object):
url = reverse(self.url_name)
self.pre_wizard()
for test_form_data in self.form_datas:
+ test_form_data.inits(self)
form_data = test_form_data.form_datas
ignored = test_form_data.ignored
for idx, step in enumerate(self.steps):
@@ -207,27 +233,27 @@ class WizardTest(object):
for k in d:
data['{}-{}'.format(current_step, k)] = d[k]
- next_idx, next_form = idx + 1, None
- while len(self.steps) > next_idx:
- if self.steps[idx + 1][0] not in ignored:
- next_form = self.steps[idx + 1][0]
- break
- next_idx += 1
- if next_form:
- try:
- response = self.client.post(url, data)
- except ValidationError as e:
- # on ManagementForm data is missing or has been tampered
- # error verify the wizard_name or step name
- raise ValidationError(u"Errors: {} on {}.".format(
- u" - ".join(e.messages), current_step))
- self.check_response(response, current_step)
+ next_form_is_checked = len(self.steps) > idx + 1 and \
+ self.steps[idx + 1][0] not in ignored
+ try:
+ response = self.client.post(url, data,
+ follow=not next_form_is_checked)
+ except ValidationError as e:
+ # on ManagementForm data is missing or has been tampered
+ # error verify the wizard_name or step name
+ raise ValidationError(u"Errors: {} on {}.".format(
+ u" - ".join(e.messages), current_step))
+ self.check_response(response, current_step)
+ if next_form_is_checked:
+ next_form = self.steps[idx + 1][0]
self.assertRedirects(
response,
'/{}/{}'.format(self.url_name, next_form))
- else:
- response = self.client.post(url, data, follow=True)
- self.check_response(response, current_step)
+ if idx == len(self.steps) - 1:
+ # last form
+ self.assertRedirects(
+ response,
+ '/{}/done'.format(self.url_name))
test_form_data.tests(self, response)
self.post_wizard()
diff --git a/ishtar_common/utils.py b/ishtar_common/utils.py
index 83534d93a..f1e2e4b96 100644
--- a/ishtar_common/utils.py
+++ b/ishtar_common/utils.py
@@ -55,10 +55,21 @@ def get_cache(cls, extra_args=[]):
return cache_key, cache.get(cache_key)
+def force_cached_label_changed(sender, **kwargs):
+ if not kwargs.get('instance'):
+ return
+ kwargs['instance']._cached_label_checked = False
+ cached_label_changed(sender, **kwargs)
+
+
def cached_label_changed(sender, **kwargs):
if not kwargs.get('instance'):
return
instance = kwargs.get('instance')
+
+ if hasattr(instance, 'test_obj'):
+ instance.test_obj.reached(sender, **kwargs)
+
if hasattr(instance, '_cached_label_checked') \
and instance._cached_label_checked:
return
@@ -76,15 +87,22 @@ def cached_label_changed(sender, **kwargs):
if hasattr(instance, '_cascade_change') and instance._cascade_change:
instance.skip_history_when_saving = True
instance.save()
- if hasattr(instance, '_get_associated_cached_labels'):
+ updated = False
+ if hasattr(instance, '_cached_labels_bulk_update'):
+ updated = instance._cached_labels_bulk_update()
+ if not updated and hasattr(instance, '_get_associated_cached_labels'):
for item in instance._get_associated_cached_labels():
item._cascade_change = True
+ if hasattr(instance, 'test_obj'):
+ item.test_obj = instance.test_obj
cached_label_changed(item.__class__, instance=item)
SHORTIFY_STR = ugettext(" (...)")
def shortify(lbl, number=20):
+ if not lbl:
+ lbl = ''
if len(lbl) <= number:
return lbl
return lbl[:number - len(SHORTIFY_STR)] + SHORTIFY_STR
diff --git a/ishtar_common/views.py b/ishtar_common/views.py
index c9eb9fec8..a4ad130be 100644
--- a/ishtar_common/views.py
+++ b/ishtar_common/views.py
@@ -58,7 +58,8 @@ from menus import menu
from archaeological_files.models import File
from archaeological_operations.models import Operation
from archaeological_context_records.models import ContextRecord
-from archaeological_finds.models import Find, Treatment, TreatmentFile
+from archaeological_finds.models import Find, Treatment, TreatmentFile, \
+ FindBasket
from archaeological_operations.forms import DashboardForm as DashboardFormOpe
from archaeological_files.forms import DashboardForm as DashboardFormFile
@@ -307,15 +308,18 @@ def shortcut_menu(request):
return render_to_response('ishtar/blocks/shortcut_menu.html', dct,
context_instance=RequestContext(request))
+CURRENT_ITEM_KEYS = (('file', File),
+ ('operation', Operation),
+ ('contextrecord', ContextRecord),
+ ('find', Find),
+ ('treatmentfile', TreatmentFile),
+ ('treatment', Treatment))
+CURRENT_ITEM_KEYS_DICT = dict(CURRENT_ITEM_KEYS)
+
def get_current_items(request):
currents = {}
- for key, model in (('file', File),
- ('operation', Operation),
- ('contextrecord', ContextRecord),
- ('find', Find),
- ('treatmentfile', TreatmentFile),
- ('treatment', Treatment)):
+ for key, model in CURRENT_ITEM_KEYS:
currents[key] = None
if key in request.session and request.session[key]:
try:
@@ -693,6 +697,7 @@ def get_item(model, func_name, default_name, extra_request_keys=[],
q = Q(**{req_key: val})
reqs |= q
and_reqs.append(reqs)
+ pinned_search = ""
if 'submited' not in request_items and full != 'shortcut':
# default search
# an item is selected in the default menu
@@ -700,17 +705,36 @@ def get_item(model, func_name, default_name, extra_request_keys=[],
request.session[default_name]:
value = request.session[default_name]
if 'basket-' in value:
- dct = {"basket__pk":
- request.session[default_name].split('-')[-1]}
+ try:
+ dct = {"basket__pk":
+ request.session[default_name].split('-')[-1]}
+ pinned_search = unicode(FindBasket.objects.get(
+ pk=dct["basket__pk"]))
+ except FindBasket.DoesNotExist:
+ pass
else:
- dct = {"pk": request.session[default_name]}
+ try:
+ dct = {"pk": request.session[default_name]}
+ pinned_search = unicode(model._meta.verbose_name)\
+ + u" - " + unicode(
+ model.objects.get(pk=dct["pk"]))
+ except model.DoesNotExist:
+ pass
elif dct == (base_request or {}):
# a parent item may be selected in the default menu
for name, key in my_relative_session_names:
if name in request.session and request.session[name] \
- and 'basket-' not in request.session[name]:
- dct.update({key: request.session[name]})
- break
+ and 'basket-' not in request.session[name] \
+ and name in CURRENT_ITEM_KEYS_DICT:
+ up_model = CURRENT_ITEM_KEYS_DICT[name]
+ try:
+ dct.update({key: request.session[name]})
+ pinned_search = unicode(up_model._meta.verbose_name)\
+ + u" - " + unicode(
+ up_model.objects.get(pk=dct[key]))
+ break
+ except up_model.DoesNotExist:
+ pass
if (not dct or data_type == 'csv') \
and func_name in request.session:
dct = request.session[func_name]
@@ -1053,6 +1077,7 @@ def get_item(model, func_name, default_name, extra_request_keys=[],
data = json.dumps({
"records": items_nb,
"rows": rows,
+ "pinned-search": pinned_search,
"page": page_nb,
"total": (items_nb / row_nb + 1) if row_nb else items_nb,
})
diff --git a/ishtar_common/wizards.py b/ishtar_common/wizards.py
index 5c4e1d3f9..874b68eae 100644
--- a/ishtar_common/wizards.py
+++ b/ishtar_common/wizards.py
@@ -238,42 +238,70 @@ class Wizard(NamedUrlWizardView):
'previous_step_counter': previous_step_counter})
storage = self.storage
# if modification: show the next steps
- if self.modification:
- next_step = self.steps.first
- current_step_passed = False
- # force rechecking of conditions
- self.get_form_list()
- while next_step:
- # check if the form is initialized otherwise initialize it
- if not storage.get_step_data(next_step):
- values = self.get_form_initial(next_step)
- prefixed_values = MultiValueDict()
- if not isinstance(values, list):
- for key in values:
- form_key = next_step + '-' + key
- if isinstance(values, MultiValueDict):
- prefixed_values.setlist(form_key,
- values.getlist(key))
- else:
- prefixed_values[form_key] = values[key]
+ # if self.modification or True:
+ next_step = self.steps.first
+ current_step_passed, no_next = False, False
+ # force rechecking of conditions
+ self.get_form_list()
+ last_step_is_available = True
+ while next_step:
+ # check if the form is initialized otherwise initialize it
+ if self.modification and not storage.get_step_data(next_step):
+ values = self.get_form_initial(next_step)
+ prefixed_values = MultiValueDict()
+ if not isinstance(values, list):
+ for key in values:
+ form_key = next_step + '-' + key
+ if isinstance(values, MultiValueDict):
+ prefixed_values.setlist(form_key,
+ values.getlist(key))
+ else:
+ prefixed_values[form_key] = values[key]
+ else:
+ for formset_idx, v in enumerate(values):
+ prefix = u"-%d-" % formset_idx
+ for key in v:
+ form_key = next_step + prefix + key
+ prefixed_values[form_key] = v[key]
+ if not prefixed_values and \
+ next_step not in self.get_ignore_init_steps():
+ # simulate a non empty data for form that might be
+ # valid when empty
+ prefixed_values['__non_empty_data'] = ''
+ storage.set_step_data(next_step, prefixed_values)
+ if step == next_step:
+ current_step_passed = True
+ elif current_step_passed:
+ next_steps.append(self.form_list[next_step].form_label)
+
+ # creation
+ if not self.modification:
+ form_obj = self.get_form(step=next_step)
+ if current_step_passed:
+ initialise_data = False
+ # formsets are considered not required
+ if hasattr(form_obj, 'fields'):
+ # display next step until a required field is met
+ if [field_key for field_key in form_obj.fields
+ if form_obj.fields[field_key].required]:
+ no_next = True
+ elif next_step not in self.get_ignore_init_steps():
+ initialise_data = True
else:
- for formset_idx, v in enumerate(values):
- prefix = u"-%d-" % formset_idx
- for key in v:
- form_key = next_step + prefix + key
- prefixed_values[form_key] = v[key]
- if not prefixed_values and \
- next_step not in self.get_ignore_init_steps():
+ initialise_data = True
+ if initialise_data:
# simulate a non empty data for form that might be
# valid when empty
+ prefixed_values = MultiValueDict()
prefixed_values['__non_empty_data'] = ''
- storage.set_step_data(next_step, prefixed_values)
- if step == next_step:
- current_step_passed = True
- elif current_step_passed:
- next_steps.append(self.form_list[next_step].form_label)
- next_step = self.get_next_step(next_step)
- context.update({'next_steps': next_steps})
+ storage.set_step_data(next_step, prefixed_values)
+
+ next_step = self.get_next_step(next_step)
+ if no_next:
+ last_step_is_available = False
+ break
+ context.update({'next_steps': next_steps,
+ 'last_step_is_available': last_step_is_available})
# not last step: validation
if current_step != self.steps.last:
return context
diff --git a/translations/de/ishtar_common.po b/translations/de/ishtar_common.po
index 9c44fa41c..d224a7ec6 100644
--- a/translations/de/ishtar_common.po
+++ b/translations/de/ishtar_common.po
@@ -1,10 +1,11 @@
# Valérie-Emma Leroux <emma@iggdrasil.net>, 2016. #zanata
+# Valérie-Emma Leroux <emma@iggdrasil.net>, 2017. #zanata
msgid ""
msgstr ""
"MIME-Version: 1.0\n"
"Content-Transfer-Encoding: 8bit\n"
"Content-Type: text/plain; charset=UTF-8\n"
-"PO-Revision-Date: 2016-06-21 01:16-0400\n"
+"PO-Revision-Date: 2017-02-20 11:45-0500\n"
"Last-Translator: Valérie-Emma Leroux <emma@iggdrasil.net>\n"
"Language-Team: German (Germany)\n"
"Language: de-DE\n"
@@ -17,7 +18,7 @@ msgstr "Benutzername"
#: __init__.py:9
msgid "email address"
-msgstr ""
+msgstr "E-Mail-Adresse"
#: __init__.py:10
msgid "Related item"
@@ -27,121 +28,125 @@ msgstr ""
msgid "Export selected as CSV file"
msgstr ""
-#: data_importer.py:183
+#: data_importer.py:186
#, python-format
msgid "\"%(value)s\" is too long. The max length is %(length)d characters."
msgstr ""
-#: data_importer.py:200
+#: data_importer.py:203
#, python-format
msgid "\"%(value)s\" not equal to yes or no"
msgstr ""
-#: data_importer.py:212
+#: data_importer.py:215
#, python-format
msgid "\"%(value)s\" is not a float"
msgstr ""
-#: data_importer.py:225 data_importer.py:239 data_importer.py:483
+#: data_importer.py:228 data_importer.py:242 data_importer.py:495
#, python-format
msgid "\"%(value)s\" is not a valid date"
msgstr ""
-#: data_importer.py:252
+#: data_importer.py:255
#, python-format
msgid "\"%(value)s\" is not an integer"
msgstr ""
-#: data_importer.py:303 data_importer.py:546
+#: data_importer.py:312 data_importer.py:560
#, python-format
msgid "Choice for \"%s\" is not available. Which one is relevant?\n"
msgstr ""
-#: data_importer.py:310
+#: data_importer.py:319
#, python-format
msgid "%d. None of the above - create new"
msgstr ""
-#: data_importer.py:313
+#: data_importer.py:322
#, python-format
msgid "%d. None of the above - skip"
msgstr ""
-#: data_importer.py:509
+#: data_importer.py:521
#, python-format
msgid "\"%(value)s\" is not a valid path for the given archive"
msgstr ""
-#: data_importer.py:623
+#: data_importer.py:637
msgid ""
"The given file is not correct. Check the file format. If you use a CSV file: "
"check that column separator and encoding are similar to the ones used by the "
"reference file."
msgstr ""
-#: data_importer.py:627
+#: data_importer.py:641
#, python-format
msgid "Too many cols (%(user_col)d) when maximum is %(ref_col)d"
msgstr ""
-#: data_importer.py:629
+#: data_importer.py:643
msgid "No data provided"
msgstr ""
-#: data_importer.py:630
+#: data_importer.py:644
msgid "Value is required"
msgstr ""
-#: data_importer.py:631
+#: data_importer.py:645
#, python-format
msgid "At least %d columns must be filled"
msgstr ""
-#: data_importer.py:632
+#: data_importer.py:646
msgid "The regexp doesn't match."
msgstr ""
-#: data_importer.py:634
+#: data_importer.py:648
msgid ""
"Forced creation is set for model {} but this model is not in the list of "
"models allowed to be created."
msgstr ""
-#: data_importer.py:636
+#: data_importer.py:650
msgid ""
"{} with values {} doesn't exist in the database. Create it first or fix your "
"source file."
msgstr ""
-#: data_importer.py:1089
+#: data_importer.py:1103
msgid "Not imported"
msgstr ""
-#: data_importer.py:1522
+#: data_importer.py:1240
+msgid "Importer configuration error: field \"{}\" does not exist for {}."
+msgstr ""
+
+#: data_importer.py:1548
msgid "line"
msgstr ""
-#: data_importer.py:1522
+#: data_importer.py:1548
msgid "col"
msgstr ""
-#: data_importer.py:1522
+#: data_importer.py:1548
msgid "error"
msgstr ""
-#: data_importer.py:1528
+#: data_importer.py:1554
msgid "field"
msgstr ""
-#: data_importer.py:1528
+#: data_importer.py:1554
msgid "source"
msgstr ""
-#: data_importer.py:1528
+#: data_importer.py:1554
msgid "result"
msgstr ""
-#: data_importer.py:1544
+#: data_importer.py:1570
#, python-format
msgid "\"%(value)s\" not in %(values)s"
msgstr ""
@@ -150,7 +155,7 @@ msgstr ""
msgid "Enter a valid name consisting of letters, spaces and hyphens."
msgstr ""
-#: forms.py:89 forms_common.py:618
+#: forms.py:89 forms_common.py:626
msgid "Confirm"
msgstr ""
@@ -174,12 +179,12 @@ msgstr ""
msgid "Add a new item"
msgstr ""
-#: forms.py:262 models.py:1475
+#: forms.py:262 models.py:1482
msgid "Template"
msgstr ""
-#: forms_common.py:41 forms_common.py:59 forms_common.py:182
-#: forms_common.py:406 models.py:1541 models.py:2953
+#: forms_common.py:41 forms_common.py:59 forms_common.py:184
+#: forms_common.py:408 models.py:1548 models.py:2977
#: templates/blocks/JQueryAdvancedTown.html:19
#: templates/ishtar/sheet_organization.html:13
msgid "Town"
@@ -195,8 +200,8 @@ msgid ""
"french town Saint-Denis in the Seine-Saint-Denis department.</p>"
msgstr ""
-#: forms_common.py:68 forms_common.py:855 ishtar_menu.py:47 models.py:2577
-#: models.py:2759 models.py:2821 templates/ishtar/sheet_person.html:4
+#: forms_common.py:68 forms_common.py:863 ishtar_menu.py:47 models.py:2599
+#: models.py:2781 models.py:2845 templates/ishtar/sheet_person.html:4
msgid "Person"
msgstr ""
@@ -206,64 +211,64 @@ msgid ""
"possible."
msgstr ""
-#: forms_common.py:170 forms_common.py:327 forms_common.py:451
-#: ishtar_menu.py:75 models.py:2460 models.py:2551
+#: forms_common.py:172 forms_common.py:329 forms_common.py:453
+#: ishtar_menu.py:75 models.py:2482 models.py:2573
#: templates/ishtar/sheet_organization.html:4
msgid "Organization"
msgstr ""
-#: forms_common.py:173 forms_common.py:210 forms_common.py:322
-#: forms_common.py:376 forms_common.py:446 models.py:1096 models.py:1474
-#: models.py:1742 models.py:1758 models.py:1984 models.py:2454 models.py:2563
-#: models.py:2939 templates/ishtar/sheet_organization.html:8
+#: forms_common.py:175 forms_common.py:212 forms_common.py:324
+#: forms_common.py:378 forms_common.py:448 models.py:1103 models.py:1481
+#: models.py:1749 models.py:1765 models.py:1993 models.py:2476 models.py:2585
+#: models.py:2963 templates/ishtar/sheet_organization.html:8
#: templates/ishtar/sheet_organization.html:21
msgid "Name"
-msgstr ""
+msgstr "Name"
-#: forms_common.py:174 models.py:1696 models.py:2115
+#: forms_common.py:176 models.py:1703 models.py:2124
msgid "Organization type"
msgstr ""
-#: forms_common.py:176 forms_common.py:400 models.py:1536
+#: forms_common.py:178 forms_common.py:402 models.py:1543
#: templates/ishtar/sheet_organization.html:10
msgid "Address"
msgstr ""
-#: forms_common.py:178 forms_common.py:403 models.py:1537
+#: forms_common.py:180 forms_common.py:405 models.py:1544
#: templates/ishtar/sheet_organization.html:11
msgid "Address complement"
msgstr ""
-#: forms_common.py:180 forms_common.py:404 models.py:1539
+#: forms_common.py:182 forms_common.py:406 models.py:1546
#: templates/ishtar/sheet_organization.html:12
msgid "Postal code"
-msgstr ""
+msgstr "Postleitzahl"
-#: forms_common.py:183 forms_common.py:407 models.py:1542
+#: forms_common.py:185 forms_common.py:409 models.py:1549
msgid "Country"
msgstr ""
-#: forms_common.py:185 forms_common.py:324 forms_common.py:380
-#: forms_common.py:448 forms_common.py:572 models.py:1569
+#: forms_common.py:187 forms_common.py:326 forms_common.py:382
+#: forms_common.py:450 forms_common.py:574 models.py:1576
msgid "Email"
-msgstr ""
+msgstr "E-Mail-Adresse"
-#: forms_common.py:186 forms_common.py:383 models.py:1554
+#: forms_common.py:188 forms_common.py:385 models.py:1561
#: templates/ishtar/sheet_organization.html:14
#: templates/ishtar/sheet_person.html:19
#: templates/ishtar/wizard/wizard_person.html:17
msgid "Phone"
msgstr ""
-#: forms_common.py:187 forms_common.py:392 models.py:1566
+#: forms_common.py:189 forms_common.py:394 models.py:1573
#: templates/ishtar/sheet_organization.html:15
#: templates/ishtar/sheet_person.html:37
#: templates/ishtar/wizard/wizard_person.html:35
msgid "Mobile phone"
msgstr ""
-#: forms_common.py:211 forms_common.py:325 forms_common.py:449 models.py:2151
-#: models.py:2456 models.py:2874 templates/sheet_ope.html:85
+#: forms_common.py:213 forms_common.py:327 forms_common.py:451 models.py:2160
+#: models.py:2478 models.py:2898 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:23
@@ -271,241 +276,241 @@ msgstr ""
msgid "Type"
msgstr ""
-#: forms_common.py:220 views.py:146
+#: forms_common.py:222 views.py:147
msgid "Organization search"
msgstr ""
-#: forms_common.py:244
+#: forms_common.py:246
msgid "At least two items have to be selected."
msgstr ""
-#: forms_common.py:262
+#: forms_common.py:264
msgid "Merge all items into"
msgstr ""
-#: forms_common.py:296
+#: forms_common.py:298
msgid "Organization to merge"
msgstr ""
-#: forms_common.py:323 forms_common.py:374 forms_common.py:447 models.py:2561
+#: forms_common.py:325 forms_common.py:376 forms_common.py:449 models.py:2583
#: templates/ishtar/sheet_organization.html:22
msgid "Surname"
msgstr ""
-#: forms_common.py:339 forms_common.py:434 views.py:111
+#: forms_common.py:341 forms_common.py:436 views.py:112
msgid "Person search"
msgstr ""
-#: forms_common.py:351
+#: forms_common.py:353
msgid "Person to merge"
msgstr ""
-#: forms_common.py:368 templates/ishtar/sheet_person.html:7
+#: forms_common.py:370 templates/ishtar/sheet_person.html:7
#: templates/ishtar/wizard/wizard_person.html:6
msgid "Identity"
msgstr ""
-#: forms_common.py:371 forms_common.py:773 forms_common.py:822 models.py:2116
-#: models.py:2555 models.py:2557 models.py:2871 templates/sheet_ope.html:104
+#: forms_common.py:373 forms_common.py:781 forms_common.py:830 models.py:2125
+#: models.py:2577 models.py:2579 models.py:2895 templates/sheet_ope.html:104
#: templates/ishtar/blocks/window_tables/documents.html:7
msgid "Title"
msgstr ""
-#: forms_common.py:372 models.py:2559
+#: forms_common.py:374 models.py:2581
msgid "Salutation"
msgstr ""
-#: forms_common.py:378 models.py:2565
+#: forms_common.py:380 models.py:2587
msgid "Raw name"
msgstr ""
-#: forms_common.py:381 models.py:1555
+#: forms_common.py:383 models.py:1562
msgid "Phone description"
msgstr ""
-#: forms_common.py:384 models.py:1557 models.py:1559
+#: forms_common.py:386 models.py:1564 models.py:1566
msgid "Phone description 2"
msgstr ""
-#: forms_common.py:386
+#: forms_common.py:388
msgid "Phone 2"
msgstr ""
-#: forms_common.py:388 models.py:1563
+#: forms_common.py:390 models.py:1570
msgid "Phone description 3"
msgstr ""
-#: forms_common.py:390 models.py:1561
+#: forms_common.py:392 models.py:1568
msgid "Phone 3"
msgstr ""
-#: forms_common.py:395
+#: forms_common.py:397
msgid "Current organization"
msgstr ""
-#: forms_common.py:409 models.py:1544
+#: forms_common.py:411 models.py:1551
msgid "Other address: address"
msgstr ""
-#: forms_common.py:412 models.py:1547
+#: forms_common.py:414 models.py:1554
msgid "Other address: address complement"
msgstr ""
-#: forms_common.py:414 models.py:1548
+#: forms_common.py:416 models.py:1555
msgid "Other address: postal code"
msgstr ""
-#: forms_common.py:416 models.py:1550
+#: forms_common.py:418 models.py:1557
msgid "Other address: town"
msgstr ""
-#: forms_common.py:418 models.py:1552
+#: forms_common.py:420 models.py:1559
msgid "Other address: country"
msgstr ""
-#: forms_common.py:430
+#: forms_common.py:432
msgid "Already has an account"
msgstr ""
-#: forms_common.py:445
+#: forms_common.py:447
msgid "Username"
-msgstr ""
+msgstr "Benutzername"
-#: forms_common.py:463
+#: forms_common.py:465
msgid "Account search"
msgstr ""
-#: forms_common.py:510 forms_common.py:550 forms_common.py:554 models.py:2508
+#: forms_common.py:512 forms_common.py:552 forms_common.py:556 models.py:2530
msgid "Person type"
msgstr ""
-#: forms_common.py:566 forms_common.py:571 ishtar_menu.py:32
+#: forms_common.py:568 forms_common.py:573 ishtar_menu.py:32
msgid "Account"
msgstr ""
-#: forms_common.py:575 wizards.py:1281
+#: forms_common.py:577 wizards.py:1305
msgid "New password"
msgstr ""
-#: forms_common.py:578
+#: forms_common.py:580
msgid "New password (confirmation)"
msgstr ""
-#: forms_common.py:599
+#: forms_common.py:607
msgid "Your password and confirmation password do not match."
msgstr ""
-#: forms_common.py:604
+#: forms_common.py:612
msgid "You must provide a correct password."
msgstr ""
-#: forms_common.py:612
+#: forms_common.py:620
msgid "This username already exists."
msgstr ""
-#: forms_common.py:619
+#: forms_common.py:627
msgid "Send the new password by email?"
msgstr ""
-#: forms_common.py:628 forms_common.py:641 models.py:2954
+#: forms_common.py:636 forms_common.py:649 models.py:2978
msgid "Towns"
msgstr ""
-#: forms_common.py:638
+#: forms_common.py:646
msgid "There are identical towns."
msgstr ""
-#: forms_common.py:722
+#: forms_common.py:730
msgid "Only one choice can be checked."
msgstr ""
-#: forms_common.py:770
+#: forms_common.py:778
msgid "Documentation informations"
msgstr ""
-#: forms_common.py:775 forms_common.py:823 models.py:2117 models.py:2846
+#: forms_common.py:783 forms_common.py:831 models.py:2126 models.py:2870
msgid "Source type"
msgstr ""
-#: forms_common.py:777 forms_common.py:824 templates/sheet_ope.html:84
+#: forms_common.py:785 forms_common.py:832 templates/sheet_ope.html:84
msgid "Reference"
msgstr ""
-#: forms_common.py:780 forms_common.py:825
+#: forms_common.py:788 forms_common.py:833
msgid "Internal reference"
msgstr ""
-#: forms_common.py:783 models.py:2885
+#: forms_common.py:791 models.py:2909
msgid "Numerical ressource (web address)"
msgstr ""
-#: forms_common.py:784 models.py:2887
+#: forms_common.py:792 models.py:2911
msgid "Receipt date"
msgstr ""
-#: forms_common.py:786 models.py:2283 models.py:2889
+#: forms_common.py:794 models.py:2292 models.py:2913
msgid "Creation date"
-msgstr ""
+msgstr "Gründungsdatum"
-#: forms_common.py:789 models.py:2892
+#: forms_common.py:797 models.py:2916
msgid "Receipt date in documentation"
msgstr ""
-#: forms_common.py:791 forms_common.py:827 models.py:377 models.py:689
-#: models.py:2011 models.py:2569 models.py:2899
+#: forms_common.py:799 forms_common.py:835 models.py:379 models.py:696
+#: models.py:2020 models.py:2591 models.py:2923
msgid "Comment"
msgstr ""
-#: forms_common.py:793 forms_common.py:826 models.py:1098 models.py:1762
-#: models.py:1943 models.py:1985 models.py:2898 templates/sheet_ope.html:128
+#: forms_common.py:801 forms_common.py:834 models.py:1105 models.py:1769
+#: models.py:1952 models.py:1994 models.py:2922 templates/sheet_ope.html:128
msgid "Description"
-msgstr ""
+msgstr "Beschreibung"
-#: forms_common.py:796 models.py:2900
+#: forms_common.py:804 models.py:2924
msgid "Additional information"
msgstr ""
-#: forms_common.py:798 forms_common.py:830 models.py:2902
+#: forms_common.py:806 forms_common.py:838 models.py:2926
msgid "Has a duplicate"
msgstr ""
-#: forms_common.py:801
+#: forms_common.py:809
msgid "Image"
-msgstr ""
+msgstr "Bild"
-#: forms_common.py:802
+#: forms_common.py:810
#, python-format
msgid ""
"<p>Heavy images are resized to: %(width)dx%(height)d (ratio is preserved).</"
"p>"
msgstr ""
-#: forms_common.py:819 forms_common.py:848 forms_common.py:882 models.py:2826
+#: forms_common.py:827 forms_common.py:856 forms_common.py:890 models.py:2850
#: templates/ishtar/wizard/wizard_person_deletion.html:124
msgid "Author"
msgstr ""
-#: forms_common.py:829
+#: forms_common.py:837
msgid "Additional informations"
msgstr ""
-#: forms_common.py:840
+#: forms_common.py:848
msgid "Would you like to delete this documentation?"
msgstr ""
-#: forms_common.py:856 models.py:2118 models.py:2813 models.py:2823
+#: forms_common.py:864 models.py:2127 models.py:2837 models.py:2847
msgid "Author type"
msgstr ""
-#: forms_common.py:875
+#: forms_common.py:883
msgid "Author selection"
msgstr ""
-#: forms_common.py:889
+#: forms_common.py:897
msgid "There are identical authors."
msgstr ""
-#: forms_common.py:893 models.py:2827 models.py:2881
+#: forms_common.py:901 models.py:2851 models.py:2905
#: templates/sheet_ope.html:106
#: templates/ishtar/blocks/window_tables/documents.html:9
msgid "Authors"
@@ -523,7 +528,7 @@ msgstr ""
msgid "Deletion"
msgstr ""
-#: ishtar_menu.py:39 models.py:1270 views.py:1549
+#: ishtar_menu.py:39 models.py:1277 views.py:1574
msgid "Global variables"
msgstr ""
@@ -537,7 +542,7 @@ msgstr ""
#: ishtar_menu.py:54 ishtar_menu.py:83 templates/ishtar/import_list.html:15
msgid "Creation"
-msgstr ""
+msgstr "Gründung"
#: ishtar_menu.py:58 ishtar_menu.py:88
msgid "Modification"
@@ -551,278 +556,278 @@ msgstr ""
msgid "Manual merge"
msgstr ""
-#: ishtar_menu.py:109 models.py:2294
+#: ishtar_menu.py:109 models.py:2303
msgid "Imports"
msgstr ""
-#: ishtar_menu.py:112 views.py:1557
+#: ishtar_menu.py:112 views.py:1582
msgid "New import"
msgstr ""
-#: ishtar_menu.py:116 views.py:1571
+#: ishtar_menu.py:116 views.py:1596
msgid "Current imports"
msgstr ""
-#: ishtar_menu.py:120 views.py:1607
+#: ishtar_menu.py:120 views.py:1632
msgid "Old imports"
msgstr ""
-#: models.py:184
+#: models.py:186
msgid "Not a valid item."
msgstr ""
-#: models.py:197
+#: models.py:199
msgid "A selected item is not a valid item."
msgstr ""
-#: models.py:208
+#: models.py:210
msgid "This item already exists."
msgstr ""
-#: models.py:373 models.py:688 models.py:1509 models.py:1521 models.py:1940
+#: models.py:375 models.py:695 models.py:1516 models.py:1528 models.py:1949
msgid "Label"
msgstr ""
-#: models.py:375
+#: models.py:377
msgid "Textual ID"
msgstr ""
-#: models.py:378 models.py:691 models.py:1478
+#: models.py:380 models.py:698 models.py:1485
msgid "Available"
msgstr ""
-#: models.py:715 models.py:2057
+#: models.py:722 models.py:2066
msgid "Key"
msgstr ""
-#: models.py:721
+#: models.py:728
msgid "Specific key to an import"
msgstr ""
-#: models.py:813
+#: models.py:820
msgid "Last editor"
msgstr ""
-#: models.py:816
+#: models.py:823
msgid "Creator"
msgstr ""
-#: models.py:958 models.py:2965 models.py:3021
+#: models.py:965 models.py:2989 models.py:3045
msgid "Order"
msgstr ""
-#: models.py:959
+#: models.py:966
msgid "Symmetrical"
msgstr ""
-#: models.py:960
+#: models.py:967
msgid "Tiny label"
msgstr ""
-#: models.py:974
+#: models.py:981
msgid "Cannot have symmetrical and an inverse_relation"
msgstr ""
-#: models.py:1090
+#: models.py:1097
msgid "Euro"
msgstr ""
-#: models.py:1091
+#: models.py:1098
msgid "US dollar"
msgstr ""
-#: models.py:1097 models.py:1760
+#: models.py:1104 models.py:1767
msgid "Slug"
msgstr ""
-#: models.py:1100
+#: models.py:1107
msgid "CSS color code for base module"
msgstr ""
-#: models.py:1102
+#: models.py:1109
msgid "Files module"
msgstr ""
-#: models.py:1104
+#: models.py:1111
msgid "CSS color code for files module"
msgstr ""
-#: models.py:1106
+#: models.py:1113
msgid "Context records module"
msgstr ""
-#: models.py:1109
+#: models.py:1116
msgid "CSS color code for context record module"
msgstr ""
-#: models.py:1111
+#: models.py:1118
msgid "Finds module"
msgstr ""
-#: models.py:1112
+#: models.py:1119
msgid "Need context records module"
msgstr ""
-#: models.py:1114
+#: models.py:1121
msgid "CSS color code for find module"
msgstr ""
-#: models.py:1117
+#: models.py:1124
msgid "Warehouses module"
msgstr ""
-#: models.py:1118
+#: models.py:1125
msgid "Need finds module"
msgstr ""
-#: models.py:1120
+#: models.py:1127
msgid "CSS code for warehouse module"
msgstr ""
-#: models.py:1122
+#: models.py:1129
msgid "Mapping module"
msgstr ""
-#: models.py:1124
+#: models.py:1131
msgid "CSS code for mapping module"
msgstr ""
-#: models.py:1127
+#: models.py:1134
msgid "Home page"
msgstr ""
-#: models.py:1128
+#: models.py:1135
#, python-brace-format
msgid ""
"Homepage of Ishtar - if not defined a default homepage will appear. Use the "
"markdown syntax. {random_image} can be used to display a random image."
msgstr ""
-#: models.py:1132
+#: models.py:1139
msgid "File external id"
msgstr ""
-#: models.py:1134
+#: models.py:1141
msgid ""
"Formula to manage file external ID. Change this with care. With incorrect "
"formula, the application might be unusable and import of external data can "
"be destructive."
msgstr ""
-#: models.py:1139
+#: models.py:1146
msgid "Parcel external id"
msgstr ""
-#: models.py:1142
+#: models.py:1149
msgid ""
"Formula to manage parcel external ID. Change this with care. With incorrect "
"formula, the application might be unusable and import of external data can "
"be destructive."
msgstr ""
-#: models.py:1147
+#: models.py:1154
msgid "Context record external id"
msgstr ""
-#: models.py:1149
+#: models.py:1156
msgid ""
"Formula to manage context record external ID. Change this with care. With "
"incorrect formula, the application might be unusable and import of external "
"data can be destructive."
msgstr ""
-#: models.py:1154
+#: models.py:1161
msgid "Base find external id"
msgstr ""
-#: models.py:1156
+#: models.py:1163
msgid ""
"Formula to manage base find external ID. Change this with care. With "
"incorrect formula, the application might be unusable and import of external "
"data can be destructive."
msgstr ""
-#: models.py:1161
+#: models.py:1168
msgid "Find external id"
msgstr ""
-#: models.py:1163
+#: models.py:1170
msgid ""
"Formula to manage find external ID. Change this with care. With incorrect "
"formula, the application might be unusable and import of external data can "
"be destructive."
msgstr ""
-#: models.py:1168
+#: models.py:1175
msgid "Container external id"
msgstr ""
-#: models.py:1170
+#: models.py:1177
msgid ""
"Formula to manage container external ID. Change this with care. With "
"incorrect formula, the application might be unusable and import of external "
"data can be destructive."
msgstr ""
-#: models.py:1175
+#: models.py:1182
msgid "Warehouse external id"
msgstr ""
-#: models.py:1177
+#: models.py:1184
msgid ""
"Formula to manage warehouse external ID. Change this with care. With "
"incorrect formula, the application might be unusable and import of external "
"data can be destructive."
msgstr ""
-#: models.py:1182
+#: models.py:1189
msgid "Raw name for person"
msgstr ""
-#: models.py:1184
+#: models.py:1191
msgid ""
"Formula to manage person raw_name. Change this with care. With incorrect "
"formula, the application might be unusable and import of external data can "
"be destructive."
msgstr ""
-#: models.py:1188
+#: models.py:1195
msgid "Current active"
msgstr ""
-#: models.py:1189
+#: models.py:1196
msgid "Currency"
msgstr ""
-#: models.py:1193
+#: models.py:1200
msgid "Ishtar site profile"
msgstr ""
-#: models.py:1194
+#: models.py:1201
msgid "Ishtar site profiles"
msgstr ""
-#: models.py:1263
+#: models.py:1270
msgid "Variable name"
msgstr ""
-#: models.py:1264
+#: models.py:1271
msgid "Description of the variable"
msgstr ""
-#: models.py:1266 models.py:2058
+#: models.py:1273 models.py:2067
msgid "Value"
msgstr ""
-#: models.py:1269
+#: models.py:1276
msgid "Global variable"
msgstr ""
-#: models.py:1379 models.py:1409
+#: models.py:1386 models.py:1416
msgid "Total"
msgstr ""
-#: models.py:1386 models.py:1510 models.py:1522
+#: models.py:1393 models.py:1517 models.py:1529
#: templates/ishtar/sheet_person.html:22
#: templates/ishtar/dashboards/dashboard_main_detail.html:141
#: templates/ishtar/dashboards/dashboard_main_detail_users.html:26
@@ -830,750 +835,750 @@ msgstr ""
msgid "Number"
msgstr ""
-#: models.py:1473
+#: models.py:1480
msgid "Administrative Act"
msgstr ""
-#: models.py:1477
+#: models.py:1484
msgid "Associated object"
msgstr ""
-#: models.py:1481
+#: models.py:1488
msgid "Document template"
msgstr ""
-#: models.py:1482
+#: models.py:1489
msgid "Document templates"
msgstr ""
-#: models.py:1513 models.py:1523 models.py:2278
+#: models.py:1520 models.py:1530 models.py:2287
msgid "State"
msgstr ""
-#: models.py:1527 templates/blocks/JQueryAdvancedTown.html:12
+#: models.py:1534 templates/blocks/JQueryAdvancedTown.html:12
msgid "Department"
msgstr ""
-#: models.py:1528
+#: models.py:1535
msgid "Departments"
msgstr ""
-#: models.py:1565
+#: models.py:1572
msgid "Raw phone"
msgstr ""
-#: models.py:1571
+#: models.py:1578
msgid "Alternative address is prefered"
msgstr ""
-#: models.py:1610
+#: models.py:1617
msgid "Tel: "
msgstr ""
-#: models.py:1614
+#: models.py:1621
msgid "Mobile: "
msgstr ""
-#: models.py:1618
+#: models.py:1625
msgid "Email: "
-msgstr ""
+msgstr "E-Mail-Adresse:"
-#: models.py:1623
+#: models.py:1630
msgid "Merge key"
msgstr ""
-#: models.py:1697
+#: models.py:1704
msgid "Organization types"
msgstr ""
-#: models.py:1743
+#: models.py:1750
msgid "Class name"
msgstr ""
-#: models.py:1746
+#: models.py:1753
msgid "Importer - Model"
msgstr ""
-#: models.py:1747
+#: models.py:1754
msgid "Importer - Models"
msgstr ""
-#: models.py:1764 templates/ishtar/dashboards/dashboard_main.html:25
+#: models.py:1771 templates/ishtar/dashboards/dashboard_main.html:25
msgid "Users"
msgstr ""
-#: models.py:1767
+#: models.py:1774
msgid "Associated model"
msgstr ""
-#: models.py:1770
+#: models.py:1777
msgid "Models that can accept new items"
msgstr ""
-#: models.py:1771
+#: models.py:1778
msgid "Leave blank for no restrictions"
msgstr ""
-#: models.py:1773
+#: models.py:1780
msgid "Is template"
msgstr ""
-#: models.py:1774
+#: models.py:1781
msgid "Unicity keys (separator \";\")"
msgstr ""
-#: models.py:1778
+#: models.py:1785
msgid "Importer - Type"
msgstr ""
-#: models.py:1779
+#: models.py:1786
msgid "Importer - Types"
msgstr ""
-#: models.py:1872
+#: models.py:1881
msgid "Importer - Default"
msgstr ""
-#: models.py:1873
+#: models.py:1882
msgid "Importer - Defaults"
msgstr ""
-#: models.py:1908
+#: models.py:1917
msgid "Importer - Default value"
msgstr ""
-#: models.py:1909
+#: models.py:1918
msgid "Importer - Default values"
msgstr ""
-#: models.py:1942
+#: models.py:1951
msgid "Column number"
msgstr ""
-#: models.py:1945
+#: models.py:1954
msgid "Required"
msgstr ""
-#: models.py:1948
+#: models.py:1957
msgid "Importer - Column"
msgstr ""
-#: models.py:1949
+#: models.py:1958
msgid "Importer - Columns"
msgstr ""
-#: models.py:1969
+#: models.py:1978
msgid "Field name"
msgstr ""
-#: models.py:1971 models.py:2005
+#: models.py:1980 models.py:2014
msgid "Force creation of new items"
msgstr ""
-#: models.py:1973 models.py:2007
+#: models.py:1982 models.py:2016
msgid "Concatenate with existing"
msgstr ""
-#: models.py:1975 models.py:2009
+#: models.py:1984 models.py:2018
msgid "Concatenate character"
msgstr ""
-#: models.py:1979
+#: models.py:1988
msgid "Importer - Duplicate field"
msgstr ""
-#: models.py:1980
+#: models.py:1989
msgid "Importer - Duplicate fields"
msgstr ""
-#: models.py:1987
+#: models.py:1996
msgid "Regular expression"
msgstr ""
-#: models.py:1990
+#: models.py:1999
msgid "Importer - Regular expression"
msgstr ""
-#: models.py:1991
+#: models.py:2000
msgid "Importer - Regular expressions"
msgstr ""
-#: models.py:2014
+#: models.py:2023
msgid "Importer - Target"
msgstr ""
-#: models.py:2015
+#: models.py:2024
msgid "Importer - Targets"
msgstr ""
-#: models.py:2039 views.py:545
+#: models.py:2048 views.py:549
msgid "True"
msgstr ""
-#: models.py:2040 views.py:547
+#: models.py:2049 views.py:551
msgid "False"
msgstr ""
-#: models.py:2059
+#: models.py:2068
msgid "Is set"
msgstr ""
-#: models.py:2066
+#: models.py:2075
msgid "Importer - Target key"
msgstr ""
-#: models.py:2067
+#: models.py:2076
msgid "Importer - Targets keys"
msgstr ""
-#: models.py:2119 models.py:2877
+#: models.py:2128 models.py:2901
msgid "Format"
msgstr ""
-#: models.py:2120 models.py:2969
+#: models.py:2129 models.py:2993
msgid "Operation type"
msgstr ""
-#: models.py:2121
+#: models.py:2130
msgid "Period"
msgstr ""
-#: models.py:2122
+#: models.py:2131
msgid "Report state"
msgstr ""
-#: models.py:2123
+#: models.py:2132
msgid "Remain type"
msgstr ""
-#: models.py:2124
+#: models.py:2133
msgid "Unit"
msgstr ""
-#: models.py:2125
+#: models.py:2134
msgid "Activity type"
msgstr ""
-#: models.py:2126
+#: models.py:2135
msgid "Material"
msgstr ""
-#: models.py:2128
+#: models.py:2137
msgid "Conservatory state"
msgstr ""
-#: models.py:2129
+#: models.py:2138
msgid "Container type"
msgstr ""
-#: models.py:2130
+#: models.py:2139
msgid "Preservation type"
msgstr ""
-#: models.py:2131
+#: models.py:2140
msgid "Object type"
msgstr ""
-#: models.py:2132
+#: models.py:2141
msgid "Integrity type"
msgstr ""
-#: models.py:2133
+#: models.py:2142
msgid "Remarkability type"
msgstr ""
-#: models.py:2134
+#: models.py:2143
msgid "Batch type"
msgstr ""
-#: models.py:2136
+#: models.py:2145
msgid "Identification type"
msgstr ""
-#: models.py:2138
+#: models.py:2147
msgid "Context record relation type"
msgstr ""
-#: models.py:2139 models.py:3027
+#: models.py:2148 models.py:3051
msgid "Spatial reference system"
msgstr ""
-#: models.py:2140 models.py:2855
+#: models.py:2149 models.py:2879
msgid "Support type"
msgstr ""
-#: models.py:2141 models.py:2520
+#: models.py:2150 models.py:2542
msgid "Title type"
msgstr ""
-#: models.py:2147
+#: models.py:2156
msgid "Integer"
msgstr ""
-#: models.py:2148
+#: models.py:2157
msgid "Float"
msgstr ""
-#: models.py:2149
+#: models.py:2158
msgid "String"
msgstr ""
-#: models.py:2150 templates/sheet_ope.html:86
+#: models.py:2159 templates/sheet_ope.html:86
msgid "Date"
msgstr ""
-#: models.py:2152 templates/sheet_ope.html:61 templates/sheet_ope.html.py:83
+#: models.py:2161 templates/sheet_ope.html:61 templates/sheet_ope.html.py:83
#: templates/ishtar/dashboards/dashboard_main_detail.html:126
msgid "Year"
msgstr ""
-#: models.py:2153
+#: models.py:2162
msgid "String to boolean"
msgstr ""
-#: models.py:2154
+#: models.py:2163
msgctxt "filesystem"
msgid "File"
msgstr ""
-#: models.py:2155
+#: models.py:2164
msgid "Unknow type"
msgstr ""
-#: models.py:2171
+#: models.py:2180
msgid "4 digit year. e.g.: \"2015\""
msgstr ""
-#: models.py:2172
+#: models.py:2181
msgid "4 digit year/month/day. e.g.: \"2015/02/04\""
msgstr ""
-#: models.py:2173
+#: models.py:2182
msgid "Day/month/4 digit year. e.g.: \"04/02/2015\""
msgstr ""
-#: models.py:2183
+#: models.py:2192
msgid "Options"
msgstr ""
-#: models.py:2185
+#: models.py:2194
msgid "Split character(s)"
msgstr ""
-#: models.py:2189
+#: models.py:2198
msgid "Importer - Formater type"
msgstr ""
-#: models.py:2190
+#: models.py:2199
msgid "Importer - Formater types"
msgstr ""
-#: models.py:2242 templates/ishtar/dashboards/dashboard_main_detail.html:63
+#: models.py:2251 templates/ishtar/dashboards/dashboard_main_detail.html:63
msgid "Created"
msgstr ""
-#: models.py:2243
+#: models.py:2252
msgid "Analyse in progress"
msgstr ""
-#: models.py:2244
+#: models.py:2253
msgid "Analysed"
msgstr ""
-#: models.py:2245
+#: models.py:2254
msgid "Import pending"
msgstr ""
-#: models.py:2246
+#: models.py:2255
msgid "Import in progress"
msgstr ""
-#: models.py:2247
+#: models.py:2256
msgid "Finished with errors"
msgstr ""
-#: models.py:2248
+#: models.py:2257
msgid "Finished"
msgstr ""
-#: models.py:2249
+#: models.py:2258
msgid "Archived"
msgstr ""
-#: models.py:2262
+#: models.py:2271
msgid "Imported file"
msgstr ""
-#: models.py:2264
+#: models.py:2273
msgid "Associated images (zip file)"
msgstr ""
-#: models.py:2266
+#: models.py:2275
msgid "Encoding"
msgstr ""
-#: models.py:2268
+#: models.py:2277
msgid "Skip lines"
msgstr ""
-#: models.py:2269 templates/ishtar/import_list.html:47
+#: models.py:2278 templates/ishtar/import_list.html:47
msgid "Error file"
msgstr ""
-#: models.py:2272
+#: models.py:2281
msgid "Result file"
msgstr ""
-#: models.py:2275 templates/ishtar/import_list.html:53
+#: models.py:2284 templates/ishtar/import_list.html:53
msgid "Match file"
msgstr ""
-#: models.py:2281
+#: models.py:2290
msgid "Conservative import"
msgstr ""
-#: models.py:2286
+#: models.py:2295
msgid "End date"
msgstr ""
-#: models.py:2288
+#: models.py:2297
msgid "Remaining seconds"
msgstr ""
-#: models.py:2293
+#: models.py:2302
msgid "Import"
msgstr ""
-#: models.py:2310
+#: models.py:2332
msgid "Analyse"
msgstr ""
-#: models.py:2312 models.py:2315
+#: models.py:2334 models.py:2337
msgid "Re-analyse"
msgstr ""
-#: models.py:2313
+#: models.py:2335
msgid "Launch import"
msgstr ""
-#: models.py:2316
+#: models.py:2338
msgid "Re-import"
msgstr ""
-#: models.py:2317
+#: models.py:2339
msgid "Archive"
msgstr ""
-#: models.py:2319
+#: models.py:2341
msgid "Unarchive"
msgstr ""
-#: models.py:2320 widgets.py:130 templates/ishtar/form_delete.html:11
+#: models.py:2342 widgets.py:130 templates/ishtar/form_delete.html:11
msgid "Delete"
msgstr ""
-#: models.py:2461
+#: models.py:2483
msgid "Organizations"
msgstr ""
-#: models.py:2463
+#: models.py:2485
msgid "Can view all Organizations"
msgstr ""
-#: models.py:2464
+#: models.py:2486
msgid "Can view own Organization"
msgstr ""
-#: models.py:2465
+#: models.py:2487
msgid "Can add own Organization"
msgstr ""
-#: models.py:2467
+#: models.py:2489
msgid "Can change own Organization"
msgstr ""
-#: models.py:2469
+#: models.py:2491
msgid "Can delete own Organization"
msgstr ""
-#: models.py:2504
+#: models.py:2526
msgid "Groups"
msgstr ""
-#: models.py:2509
+#: models.py:2531
msgid "Person types"
msgstr ""
-#: models.py:2521
+#: models.py:2543
msgid "Title types"
msgstr ""
-#: models.py:2530
+#: models.py:2552
msgid "Mr"
msgstr ""
-#: models.py:2531
+#: models.py:2553
msgid "Miss"
msgstr ""
-#: models.py:2532
+#: models.py:2554
msgid "Mr and Mrs"
msgstr ""
-#: models.py:2533
+#: models.py:2555
msgid "Mrs"
msgstr ""
-#: models.py:2534
+#: models.py:2556
msgid "Doctor"
msgstr ""
-#: models.py:2567
+#: models.py:2589
msgid "Contact type"
msgstr ""
-#: models.py:2570 models.py:2634
+#: models.py:2592 models.py:2656
msgid "Types"
msgstr ""
-#: models.py:2573
+#: models.py:2595
msgid "Is attached to"
msgstr ""
-#: models.py:2578
+#: models.py:2600
msgid "Persons"
msgstr ""
-#: models.py:2580
+#: models.py:2602
msgid "Can view all Persons"
msgstr ""
-#: models.py:2581
+#: models.py:2603
msgid "Can view own Person"
msgstr ""
-#: models.py:2582
+#: models.py:2604
msgid "Can add own Person"
msgstr ""
-#: models.py:2583
+#: models.py:2605
msgid "Can change own Person"
msgstr ""
-#: models.py:2584
+#: models.py:2606
msgid "Can delete own Person"
msgstr ""
-#: models.py:2762
+#: models.py:2784
msgid "Advanced shortcut menu"
msgstr ""
-#: models.py:2765
+#: models.py:2787
msgid "Ishtar user"
msgstr ""
-#: models.py:2766
+#: models.py:2788
msgid "Ishtar users"
msgstr ""
-#: models.py:2808
+#: models.py:2832
msgid "To modify the password use the form in Auth > User"
msgstr ""
-#: models.py:2814
+#: models.py:2838
msgid "Author types"
msgstr ""
-#: models.py:2847
+#: models.py:2871
msgid "Source types"
msgstr ""
-#: models.py:2856
+#: models.py:2880
msgid "Support types"
msgstr ""
-#: models.py:2863
+#: models.py:2887
msgid "Format type"
msgstr ""
-#: models.py:2864
+#: models.py:2888
msgid "Format types"
msgstr ""
-#: models.py:2872
+#: models.py:2896
msgid "External ID"
msgstr ""
-#: models.py:2875
+#: models.py:2899
msgid "Support"
msgstr ""
-#: models.py:2879
+#: models.py:2903
msgid "Scale"
msgstr ""
-#: models.py:2893
+#: models.py:2917
msgid "Item number"
msgstr ""
-#: models.py:2894
+#: models.py:2918
msgid "Ref."
msgstr ""
-#: models.py:2897
+#: models.py:2921
msgid "Internal ref."
msgstr ""
-#: models.py:2940
+#: models.py:2964
msgid "Surface (m2)"
msgstr ""
-#: models.py:2941 templates/sheet_ope.html:46 templates/sheet_ope.html.py:107
+#: models.py:2965 templates/sheet_ope.html:46 templates/sheet_ope.html.py:107
msgid "Localisation"
-msgstr ""
+msgstr "Lokalisierung"
-#: models.py:2966
+#: models.py:2990
msgid "Is preventive"
msgstr ""
-#: models.py:2970
+#: models.py:2994
msgid "Operation types"
msgstr ""
-#: models.py:2999
+#: models.py:3023
msgid "Preventive"
msgstr ""
-#: models.py:3000
+#: models.py:3024
msgid "Research"
msgstr ""
-#: models.py:3023
+#: models.py:3047
msgid "Authority name"
msgstr ""
-#: models.py:3024
+#: models.py:3048
msgid "Authority SRID"
msgstr ""
-#: models.py:3028
+#: models.py:3052
msgid "Spatial reference systems"
msgstr ""
-#: utils.py:84
+#: utils.py:100
msgid " (...)"
msgstr ""
-#: utils.py:130
+#: utils.py:146
msgid "Load another random image?"
msgstr ""
-#: views.py:118
+#: views.py:119
msgid "New person"
msgstr ""
-#: views.py:126
+#: views.py:127
msgid "Person modification"
msgstr ""
-#: views.py:141
+#: views.py:142
msgid "Person deletion"
msgstr ""
-#: views.py:152
+#: views.py:153
msgid "New organization"
msgstr ""
-#: views.py:159
+#: views.py:160
msgid "Organization modification"
msgstr ""
-#: views.py:175
+#: views.py:176
msgid "Organization deletion"
msgstr ""
-#: views.py:182
+#: views.py:183
msgid "Account management"
msgstr ""
-#: views.py:188
+#: views.py:189
msgid "Account deletion"
msgstr ""
-#: views.py:240
+#: views.py:241
msgid "Archaeological file"
msgstr ""
-#: views.py:241
+#: views.py:242
msgid "Operation"
msgstr ""
-#: views.py:243
+#: views.py:244
msgid "Context record"
msgstr ""
-#: views.py:245
+#: views.py:246
msgid "Find"
msgstr ""
-#: views.py:247
+#: views.py:248
msgid "Treatment request"
msgstr ""
-#: views.py:248
+#: views.py:249
msgid "Treatment"
msgstr ""
-#: views.py:1304 views.py:1347
+#: views.py:1329 views.py:1372
msgid "Operation not permitted."
msgstr ""
-#: views.py:1306
+#: views.py:1331
#, python-format
msgid "New %s"
msgstr ""
-#: views.py:1365 views.py:1415
+#: views.py:1390 views.py:1440
msgid "Archaeological files"
msgstr ""
-#: views.py:1366 views.py:1419
+#: views.py:1391 views.py:1444
msgid "Operations"
msgstr ""
-#: views.py:1368 views.py:1423
+#: views.py:1393 views.py:1448
msgid "Context records"
msgstr ""
-#: views.py:1370 views.py:1426
+#: views.py:1395 views.py:1451
msgid "Finds"
msgstr ""
-#: views.py:1619 templates/ishtar/import_list.html:43
+#: views.py:1644 templates/ishtar/import_list.html:43
msgid "Link unmatched items"
msgstr ""
-#: views.py:1634
+#: views.py:1659
msgid "Delete import"
msgstr ""
-#: views.py:1673
+#: views.py:1698
msgid "Merge persons"
msgstr ""
-#: views.py:1697
+#: views.py:1722
msgid "Select the main person"
msgstr ""
-#: views.py:1706
+#: views.py:1731
msgid "Merge organization"
msgstr ""
-#: views.py:1716
+#: views.py:1741
msgid "Select the main organization"
msgstr ""
-#: views.py:1756 views.py:1772
+#: views.py:1781 views.py:1797
msgid "Corporation manager"
msgstr ""
@@ -1593,15 +1598,15 @@ msgstr ""
msgid "Remove"
msgstr ""
-#: wizards.py:343 templates/ishtar/import_delete.html:20
+#: wizards.py:344 templates/ishtar/import_delete.html:20
msgid "Yes"
msgstr ""
-#: wizards.py:345
+#: wizards.py:346
msgid "No"
msgstr ""
-#: wizards.py:1338
+#: wizards.py:1362
#, python-format
msgid "[%(app_name)s] Account creation/modification"
msgstr ""
@@ -1842,7 +1847,7 @@ msgstr ""
#: templates/sheet_ope.html:51
msgid "Postal code:"
-msgstr ""
+msgstr "Postleitzahl:"
#: templates/sheet_ope.html:53
msgid "Lambert X:"
@@ -1964,7 +1969,7 @@ msgstr ""
msgid "where the magic happens."
msgstr ""
-#: templates/window.html:40 templates/blocks/JQueryJqGrid.html:28
+#: templates/window.html:40 templates/blocks/JQueryJqGrid.html:34
#: templates/ishtar/manage_basket.html:12
msgid "Add"
msgstr ""
@@ -1986,32 +1991,36 @@ msgstr ""
msgid "Search and select an item"
msgstr ""
-#: templates/blocks/JQueryJqGrid.html:17 templates/blocks/JQueryJqGrid.html:23
+#: templates/blocks/JQueryJqGrid.html:13
+msgid "Pinned search:"
+msgstr ""
+
+#: templates/blocks/JQueryJqGrid.html:23 templates/blocks/JQueryJqGrid.html:29
#: templates/ishtar/blocks/window_tables/dynamic_documents.html:9
#: templates/ishtar/blocks/window_tables/dynamic_documents.html:12
msgid "Export as CSV"
msgstr ""
-#: templates/blocks/JQueryJqGrid.html:17 templates/blocks/JQueryJqGrid.html:23
+#: templates/blocks/JQueryJqGrid.html:23 templates/blocks/JQueryJqGrid.html:29
#: templates/ishtar/blocks/window_tables/dynamic_documents.html:9
msgid "CSV"
msgstr ""
-#: templates/blocks/JQueryJqGrid.html:18
+#: templates/blocks/JQueryJqGrid.html:24
#: templates/ishtar/blocks/window_tables/dynamic_documents.html:10
msgid "Export as CSV - full"
msgstr ""
-#: templates/blocks/JQueryJqGrid.html:18
+#: templates/blocks/JQueryJqGrid.html:24
#: templates/ishtar/blocks/window_tables/dynamic_documents.html:10
msgid "CSV full"
msgstr ""
-#: templates/blocks/JQueryJqGrid.html:20
+#: templates/blocks/JQueryJqGrid.html:26
msgid "Export as CSV - "
msgstr ""
-#: templates/blocks/JQueryJqGrid.html:99
+#: templates/blocks/JQueryJqGrid.html:105
#: templates/ishtar/blocks/window_tables/dynamic_documents.html:41
msgid "An error as occured during search. Check your query fields."
msgstr ""
diff --git a/translations/fr/archaeological_context_records.po b/translations/fr/archaeological_context_records.po
index 6066b15a5..0b2ece68c 100644
--- a/translations/fr/archaeological_context_records.po
+++ b/translations/fr/archaeological_context_records.po
@@ -16,11 +16,11 @@ msgstr ""
"Plural-Forms: nplurals=2; plural=n>1;\n"
"X-Generator: Zanata 3.9.6\n"
-#: forms.py:47 forms.py:51 models.py:176 models.py:488 wizards.py:77
+#: forms.py:47 forms.py:51 models.py:198 models.py:565 wizards.py:77
msgid "Operation"
msgstr "Opération"
-#: forms.py:59 forms.py:137 models.py:178 models.py:456
+#: forms.py:59 forms.py:137 models.py:200 models.py:533
msgid "ID"
msgstr "Identifiant"
@@ -44,7 +44,7 @@ msgstr "Entité archéologique"
msgid "Search within related operations"
msgstr "Rechercher parmi les opérations liées"
-#: forms.py:77 forms.py:233 models.py:55
+#: forms.py:77 forms.py:233 models.py:56
msgid "Period"
msgstr "Période"
@@ -72,44 +72,44 @@ msgstr "Vous devez sélectionner au moins une Unité d'Enregistrement."
msgid "General"
msgstr "Général"
-#: forms.py:136 models.py:132 models.py:174 models.py:458
+#: forms.py:136 models.py:154 models.py:196 models.py:535
msgid "Parcel"
msgstr "Parcelle"
-#: forms.py:139 models.py:179 models.py:459
+#: forms.py:139 models.py:201 models.py:536
#: templates/ishtar/sheet_contextrecord.html:27
msgid "Description"
msgstr "Description"
-#: forms.py:141 models.py:180
+#: forms.py:141 models.py:202
msgid "General comment"
msgstr "Commentaire général"
-#: forms.py:143 models.py:184
+#: forms.py:143 models.py:206
msgid "Length (m)"
msgstr "Taille (m)"
-#: forms.py:144 models.py:185
+#: forms.py:144 models.py:207
msgid "Width (m)"
msgstr "Largeur (m)"
-#: forms.py:145 models.py:186
+#: forms.py:145 models.py:208
msgid "Thickness (m)"
msgstr "Épaisseur (m)"
-#: forms.py:146 models.py:188
+#: forms.py:146 models.py:210
msgid "Depth (m)"
msgstr "Profondeur (m)"
-#: forms.py:147 forms.py:355 models.py:196 models.py:457
+#: forms.py:147 forms.py:355 models.py:218 models.py:534
msgid "Context record type"
msgstr "Type d'Unité d'Enregistrement"
-#: forms.py:148 models.py:198
+#: forms.py:148 models.py:220
msgid "Has furniture?"
msgstr "Contient du mobilier ?"
-#: forms.py:151 models.py:190
+#: forms.py:151 models.py:212
msgid "Location"
msgstr "Lieu"
@@ -130,27 +130,27 @@ msgstr ""
msgid "This ID already exists for this operation."
msgstr "Cet identifiant existe déjà pour cette opération."
-#: forms.py:228 forms.py:255 models.py:66
+#: forms.py:228 forms.py:255 models.py:67
msgid "Dating"
msgstr "Datation"
-#: forms.py:234 models.py:56
+#: forms.py:234 models.py:57
msgid "Start date"
msgstr "Date de début"
-#: forms.py:235 models.py:57 models.py:183
+#: forms.py:235 models.py:58 models.py:205
msgid "End date"
msgstr "Date de fin"
-#: forms.py:236 models.py:60
+#: forms.py:236 models.py:61
msgid "Quality"
msgstr "Qualité"
-#: forms.py:237 models.py:38 models.py:58
+#: forms.py:237 models.py:39 models.py:59
msgid "Dating type"
msgstr "Type de datation"
-#: forms.py:264 ishtar_menu.py:29 models.py:518
+#: forms.py:264 ishtar_menu.py:29 models.py:595
msgid "Context record"
msgstr "Unité d'Enregistrement"
@@ -158,7 +158,7 @@ msgstr "Unité d'Enregistrement"
msgid "Relations"
msgstr "Relations"
-#: forms.py:289 forms.py:297 models.py:201
+#: forms.py:289 forms.py:297 models.py:223
#: templates/ishtar/sheet_contextrecord.html:39
msgid "Interpretation"
msgstr "Interprétation"
@@ -167,31 +167,31 @@ msgstr "Interprétation"
msgid "Comments on dating"
msgstr "Commentaires sur la datation"
-#: forms.py:295 models.py:200
+#: forms.py:295 models.py:222
msgid "Filling"
msgstr "Remplissage"
-#: forms.py:299 models.py:221
+#: forms.py:299 models.py:243
msgid "Activity"
msgstr "Activité"
-#: forms.py:301 models.py:219
+#: forms.py:301 models.py:241
msgid "Identification"
msgstr "Identification"
-#: forms.py:303 models.py:204
+#: forms.py:303 models.py:226
msgid "TAQ"
msgstr "TAQ"
-#: forms.py:304 models.py:208
+#: forms.py:304 models.py:230
msgid "Estimated TAQ"
msgstr "TAQ estimé"
-#: forms.py:306 models.py:211
+#: forms.py:306 models.py:233
msgid "TPQ"
msgstr "TPQ"
-#: forms.py:307 models.py:215
+#: forms.py:307 models.py:237
msgid "Estimated TPQ"
msgstr "TPQ estimé"
@@ -255,107 +255,107 @@ msgstr "Suppression"
msgid "Documentation"
msgstr "Documentation"
-#: models.py:39
+#: models.py:40
msgid "Dating types"
msgstr "Types de datation"
-#: models.py:47
+#: models.py:48
msgid "Dating quality type"
msgstr "Type de qualité de datation"
-#: models.py:48
+#: models.py:49
msgid "Dating quality types"
msgstr "Types de qualité de datation"
-#: models.py:62
+#: models.py:63
msgid "Precise dating"
msgstr "Datation précise"
-#: models.py:67
+#: models.py:68
msgid "Datings"
msgstr "Datations"
-#: models.py:78 models.py:94 models.py:108
+#: models.py:79 models.py:96 models.py:110
msgid "Order"
msgstr "Ordre"
-#: models.py:79
+#: models.py:81
msgid "Parent context record type"
msgstr "Type d'UE parent"
-#: models.py:83
+#: models.py:85
msgid "Context record Type"
msgstr "Type d'Unité d'Enregistrement"
-#: models.py:84
+#: models.py:86
msgid "Context record Types"
msgstr "Types d'Unité d'Enregistrement"
-#: models.py:97
+#: models.py:99
msgid "Activity Type"
msgstr "Type d'activité"
-#: models.py:98
+#: models.py:100
msgid "Activity Types"
msgstr "Types d'activité"
-#: models.py:111
+#: models.py:113
msgid "Identification Type"
msgstr "Type d'identification"
-#: models.py:112
+#: models.py:114
msgid "Identification Types"
msgstr "Types d'identification"
-#: models.py:133 models.py:460
+#: models.py:155 models.py:537
msgid "Periods"
msgstr "Périodes"
-#: models.py:134
+#: models.py:156
msgid "Town"
msgstr "Ville"
-#: models.py:162
+#: models.py:184
msgid "Parcel (town)"
msgstr "Parcelle (commune)"
-#: models.py:163
+#: models.py:185
msgid "Related context records"
msgstr "Unités d'Enregistrement liées"
-#: models.py:165
+#: models.py:187
msgid "Parcel (external ID)"
msgstr "Parcelle (identifiant externe)"
-#: models.py:166
+#: models.py:188
msgid "Datings (period)"
msgstr "Datations (période)"
-#: models.py:167
+#: models.py:189
msgid "Parcel (year)"
msgstr "Parcelle (année)"
-#: models.py:171
+#: models.py:193
msgid "External ID"
msgstr "ID externe"
-#: models.py:173
+#: models.py:195
msgid "External ID is set automatically"
msgstr "L'identifiant externe est configuré automatiquement"
-#: models.py:181
+#: models.py:203
msgid "Date d'ouverture"
msgstr "Date d'ouverture"
-#: models.py:191
+#: models.py:213
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:194
+#: models.py:216
msgid "Comment on datings"
msgstr "Commentaire sur les datations"
-#: models.py:205
+#: models.py:227
msgid ""
"\"Terminus Ante Quem\" the context record can't have been created after this "
"date"
@@ -363,11 +363,11 @@ msgstr ""
"« Terminus Ante Quem ». L'Unité d'Enregistrement ne peut avoir été créée "
"après cette date."
-#: models.py:209
+#: models.py:231
msgid "Estimation of a \"Terminus Ante Quem\""
msgstr "Estimation d'un « Terminus Ante Quem »."
-#: models.py:212
+#: models.py:234
msgid ""
"\"Terminus Post Quem\" the context record can't have been created before "
"this date"
@@ -375,116 +375,116 @@ msgstr ""
"« Terminus Post Quem ». L'Unité d'Enregistrement ne peut avoir été créée "
"avant cette date."
-#: models.py:216
+#: models.py:238
msgid "Estimation of a \"Terminus Post Quem\""
msgstr "Estimation d'un « Terminus Post Quem »."
-#: models.py:224
+#: models.py:246
msgid "Point"
msgstr "Point"
-#: models.py:225
+#: models.py:247
msgid "Polygon"
msgstr "Polygone"
-#: models.py:226
+#: models.py:248
msgid "Cached name"
msgstr "Nom en cache"
-#: models.py:230 models.py:231 templates/ishtar/sheet_contextrecord.html:4
+#: models.py:252 models.py:253 templates/ishtar/sheet_contextrecord.html:4
msgid "Context Record"
msgstr "Unité d'Enregistrement"
-#: models.py:233
+#: models.py:255
msgid "Can view all Context Records"
msgstr "Peut voir toutes les Unités d'Enregistrement"
-#: models.py:235
+#: models.py:257
msgid "Can view own Context Record"
msgstr "Peut voir sa propre Unité d'Enregistrement"
-#: models.py:237
+#: models.py:259
msgid "Can add own Context Record"
msgstr "Peut ajouter sa propre Unité d'Enregistrement"
-#: models.py:239
+#: models.py:261
msgid "Can change own Context Record"
msgstr "Peut modifier sa propre Unité d'Enregistrement"
-#: models.py:241
+#: models.py:263
msgid "Can delete own Context Record"
msgstr "Peut supprimer sa propre Unité d'Enregistrement"
-#: models.py:251
+#: models.py:273
msgctxt "short"
msgid "Context record"
msgstr "UE"
-#: models.py:390
+#: models.py:467
msgid "Inverse relation"
msgstr "Relation inverse"
-#: models.py:394 models.py:417 models.py:455
+#: models.py:471 models.py:494 models.py:532
msgid "Relation type"
msgstr "Type de relation"
-#: models.py:395
+#: models.py:472
msgid "Relation types"
msgstr "Types de relation"
-#: models.py:412
+#: models.py:489
msgid "ID (left)"
msgstr "ID (gauche)"
-#: models.py:413
+#: models.py:490
msgid "Context record type (left)"
msgstr "Type d'UE (gauche)"
-#: models.py:414
+#: models.py:491
msgid "Parcel (left)"
msgstr "Parcelle (gauche)"
-#: models.py:415
+#: models.py:492
msgid "Description (left)"
msgstr "Description (gauche)"
-#: models.py:416
+#: models.py:493
msgid "Periods (left)"
msgstr "Périodes (gauche)"
-#: models.py:418
+#: models.py:495
msgid "ID (right)"
msgstr "ID (droit)"
-#: models.py:419
+#: models.py:496
msgid "Context record type (right)"
msgstr "Type d'UE (droite)"
-#: models.py:420
+#: models.py:497
msgid "Parcel (right)"
msgstr "Parcelle (droite)"
-#: models.py:421
+#: models.py:498
msgid "Description (right)"
msgstr "Description (droite)"
-#: models.py:422
+#: models.py:499
msgid "Periods (right)"
msgstr "Périodes (droite)"
-#: models.py:431
+#: models.py:508
msgid "Record relation"
msgstr "Relation entre Unités d'Enregistrement"
-#: models.py:432
+#: models.py:509
msgid "Record relations"
msgstr "Relations entre Unités d'Enregistrement"
-#: models.py:515
+#: models.py:592
msgid "Context record documentation"
msgstr "Documentation d'une Unité d'Enregistrement"
-#: models.py:516
+#: models.py:593
msgid "Context record documentations"
msgstr "Documentations des Unités d'Enregistrement"
diff --git a/translations/fr/archaeological_finds.po b/translations/fr/archaeological_finds.po
index ae27bb014..9b1aa8843 100644
--- a/translations/fr/archaeological_finds.po
+++ b/translations/fr/archaeological_finds.po
@@ -20,157 +20,157 @@ msgstr ""
msgid "Context record"
msgstr "Unité d'Enregistrement"
-#: forms.py:123 ishtar_menu.py:32 models_finds.py:484 models_finds.py:819
-#: models_finds.py:828 models_treatments.py:279
+#: forms.py:123 ishtar_menu.py:32 models_finds.py:655 models_finds.py:1058
+#: models_finds.py:1067 models_treatments.py:279
#: templates/ishtar/sheet_find.html:5
msgid "Find"
msgstr "Mobilier"
-#: forms.py:137 forms.py:330 forms.py:559 models_finds.py:130
-#: models_finds.py:415
+#: forms.py:137 forms.py:330 forms.py:559 models_finds.py:151
+#: models_finds.py:586
msgid "Free ID"
msgstr "ID libre"
-#: forms.py:139 models_finds.py:467
+#: forms.py:139 models_finds.py:638
msgid "Previous ID"
msgstr "Identifiant précédent"
-#: forms.py:140 forms.py:362 forms_treatments.py:134 models_finds.py:134
-#: models_finds.py:416 models_treatments.py:125
+#: forms.py:140 forms.py:362 forms_treatments.py:134 models_finds.py:155
+#: models_finds.py:587 models_treatments.py:125
msgid "Description"
msgstr "Description"
-#: forms.py:143 forms.py:364 models_finds.py:143
+#: forms.py:143 forms.py:364 models_finds.py:164
msgid "Batch/object"
msgstr "Lot/objet"
-#: forms.py:145 models_finds.py:444
+#: forms.py:145 models_finds.py:615
msgid "Is complete?"
msgstr "Est complet ?"
-#: forms.py:148 forms.py:352 forms.py:563 models_finds.py:50
+#: forms.py:148 forms.py:352 forms.py:563 models_finds.py:51
msgid "Material type"
msgstr "Type de matériau"
-#: forms.py:149 forms.py:356 models_finds.py:62 models_finds.py:420
+#: forms.py:149 forms.py:356 models_finds.py:63 models_finds.py:591
msgid "Conservatory state"
msgstr "État sanitaire"
-#: forms.py:152 models_finds.py:422
+#: forms.py:152 models_finds.py:593
msgid "Conservatory comment"
msgstr "Commentaire relatif à la conservation"
-#: forms.py:155 models_finds.py:112 models_finds.py:447
+#: forms.py:155 models_finds.py:113 models_finds.py:618
msgid "Object types"
msgstr "Types d'objet"
-#: forms.py:157 forms.py:355 models_finds.py:71
+#: forms.py:157 forms.py:355 models_finds.py:72
msgid "Preservation type"
msgstr "Type de conservation"
-#: forms.py:160 forms.py:358 models_finds.py:449
+#: forms.py:160 forms.py:358 models_finds.py:620
msgid "Integrity / interest"
msgstr "Intégrité / intérêt"
-#: forms.py:163 forms.py:360 models_finds.py:452
+#: forms.py:163 forms.py:360 models_finds.py:623
msgid "Remarkability"
msgstr "Remarquabilité"
-#: forms.py:166 models_finds.py:148
+#: forms.py:166 models_finds.py:169
msgid "Point of topographic reference"
msgstr "Point de référence topographique"
-#: forms.py:169 models_finds.py:150
+#: forms.py:169 models_finds.py:171
msgid "X"
msgstr "X"
-#: forms.py:170 models_finds.py:151
+#: forms.py:170 models_finds.py:172
msgid "Y"
msgstr "Y"
-#: forms.py:171 models_finds.py:152
+#: forms.py:171 models_finds.py:173
msgid "Z"
msgstr "Z"
-#: forms.py:173 models_finds.py:160
+#: forms.py:173 models_finds.py:181
msgid "Spatial Reference System"
msgstr "Système de référence spatiale"
-#: forms.py:176 models_finds.py:153
+#: forms.py:176 models_finds.py:174
msgid "Estimated error for X"
msgstr "Erreur estimée pour X"
-#: forms.py:178 models_finds.py:155
+#: forms.py:178 models_finds.py:176
msgid "Estimated error for Y"
msgstr "Erreur estimée pour Y"
-#: forms.py:180 models_finds.py:157
+#: forms.py:180 models_finds.py:178
msgid "Estimated error for Z"
msgstr "Erreur estimée pour Z"
-#: forms.py:181 models_finds.py:456
+#: forms.py:181 models_finds.py:627
msgid "Length (cm)"
msgstr "Longueur (cm)"
-#: forms.py:182 models_finds.py:457
+#: forms.py:182 models_finds.py:628
msgid "Width (cm)"
msgstr "Largeur (cm)"
-#: forms.py:183 models_finds.py:458
+#: forms.py:183 models_finds.py:629
msgid "Height (cm)"
msgstr "Hauteur (cm)"
-#: forms.py:184 models_finds.py:459
+#: forms.py:184 models_finds.py:630
msgid "Diameter (cm)"
msgstr "Diamètre (cm)"
-#: forms.py:185 models_finds.py:460
+#: forms.py:185 models_finds.py:631
msgid "Thickness (cm)"
msgstr "Épaisseur (cm)"
-#: forms.py:186 forms.py:564 models_finds.py:427
+#: forms.py:186 forms.py:564 models_finds.py:598
msgid "Volume (l)"
msgstr "Volume (l)"
-#: forms.py:187 forms.py:565 models_finds.py:428
+#: forms.py:187 forms.py:565 models_finds.py:599
msgid "Weight (g)"
msgstr "Poids (g)"
-#: forms.py:189 models_finds.py:461
+#: forms.py:189 models_finds.py:632
msgid "Dimensions comment"
msgstr "Commentaire concernant les dimensions"
-#: forms.py:190 forms.py:566 models_finds.py:431
+#: forms.py:190 forms.py:566 models_finds.py:602
msgid "Find number"
msgstr "Mobilier (en nombre)"
-#: forms.py:192 models_finds.py:455
+#: forms.py:192 models_finds.py:626
msgid "Minimum number of individuals (MNI)"
msgstr "Nombre minimum d'individus (NMI)"
-#: forms.py:193 models_finds.py:463
+#: forms.py:193 models_finds.py:634
msgid "Mark"
msgstr "Marque"
-#: forms.py:194 forms.py:365 models_finds.py:469
+#: forms.py:194 forms.py:365 models_finds.py:640
msgid "Check"
msgstr "Vérification"
-#: forms.py:196 models_finds.py:471
+#: forms.py:196 models_finds.py:642
msgid "Check date"
msgstr "Date de vérification"
#: forms.py:197 forms_treatments.py:132 forms_treatments.py:434
-#: models_finds.py:135 models_finds.py:464 models_treatments.py:124
+#: models_finds.py:156 models_finds.py:635 models_treatments.py:124
#: models_treatments.py:492
msgid "Comment"
msgstr "Commentaires"
-#: forms.py:200 models_finds.py:465
+#: forms.py:200 models_finds.py:636
msgid "Comment on dating"
msgstr "Commentaire général sur les datations"
-#: forms.py:201 models_finds.py:473
+#: forms.py:201 models_finds.py:644
msgid "Estimated value"
msgstr "Valeur estimée"
@@ -201,7 +201,7 @@ msgstr ""
"Les coordonnées ne sont pas pertinentes pour le système de référence "
"spatiale utilisé : {}."
-#: forms.py:293 forms.py:324 models_finds.py:439
+#: forms.py:293 forms.py:324 models_finds.py:610
msgid "Dating"
msgstr "Datation"
@@ -210,13 +210,13 @@ msgid "Period"
msgstr "Période"
#: forms.py:299 forms_treatments.py:138 forms_treatments.py:436
-#: models_finds.py:833 models_treatments.py:127 models_treatments.py:290
-#: templates/ishtar/sheet_find.html:102 templates/ishtar/sheet_find.html:144
+#: models_finds.py:1072 models_treatments.py:127 models_treatments.py:290
+#: templates/ishtar/sheet_find.html:100 templates/ishtar/sheet_find.html:142
msgid "Start date"
msgstr "Date de début"
-#: forms.py:301 models_finds.py:834 models_treatments.py:291
-#: templates/ishtar/sheet_find.html:103 templates/ishtar/sheet_find.html:145
+#: forms.py:301 models_finds.py:1073 models_treatments.py:291
+#: templates/ishtar/sheet_find.html:101 templates/ishtar/sheet_find.html:143
msgid "End date"
msgstr "Date de fin"
@@ -232,11 +232,11 @@ msgstr "Type de datation"
msgid "Precise dating"
msgstr "Datation précise"
-#: forms.py:328 models_finds.py:167
+#: forms.py:328 models_finds.py:188
msgid "Short ID"
msgstr "ID court"
-#: forms.py:329 models_finds.py:170
+#: forms.py:329 models_finds.py:191
msgid "Complete ID"
msgstr "ID complet"
@@ -262,7 +262,7 @@ msgstr "Entité archéologique"
msgid "Search within related operations"
msgstr "Rechercher parmi les opérations liées"
-#: forms.py:353 models_finds.py:111
+#: forms.py:353 models_finds.py:112
msgid "Object type"
msgstr "Type d'objet"
@@ -278,7 +278,7 @@ msgstr "Rechercher un mobilier"
msgid "Upstream finds"
msgstr "Mobilier amont"
-#: forms.py:443 models_finds.py:485
+#: forms.py:443 models_finds.py:656
msgid "Finds"
msgstr "Mobilier"
@@ -351,7 +351,7 @@ msgid "Basket"
msgstr "Panier"
#: forms_treatments.py:52 forms_treatments.py:92 models_treatments.py:96
-#: templates/ishtar/sheet_find.html:96 templates/ishtar/sheet_find.html:138
+#: templates/ishtar/sheet_find.html:94 templates/ishtar/sheet_find.html:136
msgid "Label"
msgstr "Intitulé"
@@ -381,7 +381,7 @@ msgid "Base treatment"
msgstr "Traitement de base"
#: forms_treatments.py:103 models_treatments.py:109
-#: templates/ishtar/sheet_find.html:98 templates/ishtar/sheet_find.html:140
+#: templates/ishtar/sheet_find.html:96 templates/ishtar/sheet_find.html:138
msgid "State"
msgstr "État"
@@ -536,8 +536,8 @@ msgid "Internal ref."
msgstr "Réf. interne"
#: forms_treatments.py:358 forms_treatments.py:415
-#: templates/ishtar/sheet_find.html:97 templates/ishtar/sheet_find.html:139
-#: templates/ishtar/sheet_find.html:231
+#: templates/ishtar/sheet_find.html:95 templates/ishtar/sheet_find.html:137
+#: templates/ishtar/sheet_find.html:229
msgid "Type"
msgstr "Type"
@@ -634,12 +634,12 @@ msgstr "Gestion des éléments"
msgid "Documentation"
msgstr "Documentation"
-#: ishtar_menu.py:133 ishtar_menu.py:214 models_finds.py:830
+#: ishtar_menu.py:133 ishtar_menu.py:214 models_finds.py:1069
msgid "Administrative act"
msgstr "Acte administratif"
-#: ishtar_menu.py:151 ishtar_menu.py:233 templates/ishtar/sheet_find.html:226
-#: templates/ishtar/sheet_find.html:228
+#: ishtar_menu.py:151 ishtar_menu.py:233 templates/ishtar/sheet_find.html:224
+#: templates/ishtar/sheet_find.html:226
msgid "Documents"
msgstr "Documents"
@@ -656,263 +656,263 @@ msgstr "Traitement"
msgid "Simple treatments"
msgstr "Traitements simples"
-#: models_finds.py:43
+#: models_finds.py:44
msgid "Code"
msgstr "Code"
-#: models_finds.py:44
+#: models_finds.py:45
msgid "Recommendation"
msgstr "Recommandation"
-#: models_finds.py:47
+#: models_finds.py:48
msgid "Parent material"
msgstr "Matériau parent"
-#: models_finds.py:51 models_finds.py:418
+#: models_finds.py:52 models_finds.py:507 models_finds.py:589
msgid "Material types"
msgstr "Types de matériau"
-#: models_finds.py:59
+#: models_finds.py:60
msgid "Parent conservatory state"
msgstr "État sanitaire - parent"
-#: models_finds.py:63
+#: models_finds.py:64
msgid "Conservatory states"
msgstr "États sanitaires"
-#: models_finds.py:72
+#: models_finds.py:73
msgid "Preservation types"
msgstr "Types de conservation"
-#: models_finds.py:80
+#: models_finds.py:81
msgid "Integrity / interest type"
msgstr "Type d'intégrité / intérêt"
-#: models_finds.py:81
+#: models_finds.py:82
msgid "Integrity / interest types"
msgstr "Types d'intégrité / intérêt"
-#: models_finds.py:89
+#: models_finds.py:90
msgid "Remarkability type"
msgstr "Type de remarquabilité"
-#: models_finds.py:90
+#: models_finds.py:91
msgid "Remarkability types"
msgstr "Types de remarquabilité"
-#: models_finds.py:97 models_finds.py:414 models_treatments.py:40
+#: models_finds.py:98 models_finds.py:585 models_treatments.py:40
#: models_treatments.py:285
msgid "Order"
msgstr "Ordre"
-#: models_finds.py:99
+#: models_finds.py:100
msgid "Batch type"
msgstr "Type de lot"
-#: models_finds.py:100
+#: models_finds.py:101
msgid "Batch types"
msgstr "Types de lot"
-#: models_finds.py:108
+#: models_finds.py:109
msgid "Parent"
msgstr "Parent"
-#: models_finds.py:131 models_finds.py:411 models_treatments.py:122
+#: models_finds.py:152 models_finds.py:582 models_treatments.py:122
#: models_treatments.py:469
msgid "External ID"
msgstr "ID externe"
-#: models_finds.py:133 models_finds.py:413
+#: models_finds.py:154 models_finds.py:584
msgid "External ID is set automatically"
msgstr "L'identifiant externe est configuré automatiquement"
-#: models_finds.py:136
+#: models_finds.py:157
msgid "Special interest"
msgstr "Intérêt spécifique"
-#: models_finds.py:140
+#: models_finds.py:161
msgid "Context Record"
msgstr "Unité d'Enregistrement"
-#: models_finds.py:141
+#: models_finds.py:162
msgid "Discovery date"
msgstr "Date de découverte"
-#: models_finds.py:146
+#: models_finds.py:167
msgid "Material index"
msgstr "Index matériel"
-#: models_finds.py:162
+#: models_finds.py:183
msgid "Point (2D)"
msgstr "Point (2D)"
-#: models_finds.py:163
+#: models_finds.py:184
msgid "Point"
msgstr "Point"
-#: models_finds.py:164
+#: models_finds.py:185
msgid "Line"
msgstr "Ligne"
-#: models_finds.py:165
+#: models_finds.py:186
msgid "Polygon"
msgstr "Polygon"
-#: models_finds.py:168 models_finds.py:171
+#: models_finds.py:189 models_finds.py:192
msgid "Cached value - do not edit"
msgstr "Valeur en cache - ne pas éditer"
-#: models_finds.py:176 models_finds.py:409
+#: models_finds.py:197 models_finds.py:580
msgid "Base find"
msgstr "Mobilier de base"
-#: models_finds.py:177
+#: models_finds.py:198
msgid "Base finds"
msgstr "Mobilier de base"
-#: models_finds.py:179
+#: models_finds.py:200
msgid "Can view all Base finds"
msgstr "Peut voir tout le Mobilier de base"
-#: models_finds.py:180
+#: models_finds.py:201
msgid "Can view own Base find"
msgstr "Peut voir son propre Mobilier de base"
-#: models_finds.py:181
+#: models_finds.py:202
msgid "Can add own Base find"
msgstr "Peut ajouter son propre Mobilier de base"
-#: models_finds.py:182
+#: models_finds.py:203
msgid "Can change own Base find"
msgstr "Peut modifier son propre Mobilier de base"
-#: models_finds.py:183
+#: models_finds.py:204
msgid "Can delete own Base find"
msgstr "Peut supprimer son propre Mobilier de base"
-#: models_finds.py:296
+#: models_finds.py:430
msgid "g"
msgstr "g"
-#: models_finds.py:297
+#: models_finds.py:431
msgid "kg"
msgstr "kg"
-#: models_finds.py:299
+#: models_finds.py:433
msgid "Not checked"
msgstr "Non vérifié"
-#: models_finds.py:300
+#: models_finds.py:434
msgid "Checked but incorrect"
msgstr "Vérifié mais incorrect"
-#: models_finds.py:301
+#: models_finds.py:435
msgid "Checked and correct"
msgstr "Vérifié et correct"
-#: models_finds.py:335
+#: models_finds.py:505
msgid "Periods"
msgstr "Périodes"
-#: models_finds.py:336 models_finds.py:442 models_treatments.py:129
-#: models_treatments.py:293 templates/ishtar/sheet_find.html:101
-#: templates/ishtar/sheet_find.html:143
+#: models_finds.py:506 models_finds.py:613 models_treatments.py:129
+#: models_treatments.py:293 templates/ishtar/sheet_find.html:99
+#: templates/ishtar/sheet_find.html:141
msgid "Container"
msgstr "Contenant"
-#: models_finds.py:346
+#: models_finds.py:517
msgid "Base find - Short ID"
msgstr "Mobilier de base - ID court"
-#: models_finds.py:347
+#: models_finds.py:518
msgid "Base find - Complete ID"
msgstr "Mobilier de base - ID complet"
-#: models_finds.py:348
+#: models_finds.py:519
msgid "Base find - Comment"
msgstr "Mobilier de base - Commentaires"
-#: models_finds.py:349
+#: models_finds.py:520
msgid "Base find - Description"
msgstr "Mobilier de base - Description"
-#: models_finds.py:350
+#: models_finds.py:521
msgid "Base find - Topographic localisation"
msgstr "Mobilier de base - Localisation topographique"
-#: models_finds.py:352
+#: models_finds.py:523
msgid "Base find - Special interest"
msgstr "Mobilier de base - Intérêt spécifique"
-#: models_finds.py:353
+#: models_finds.py:524
msgid "Base find - Discovery date"
msgstr "Mobilier de base - Date de découverte"
-#: models_finds.py:425
+#: models_finds.py:596
msgid "Type of preservation to consider"
msgstr "Mesures de conservation à envisager"
-#: models_finds.py:429
+#: models_finds.py:600
msgid "Weight unit"
msgstr "Unité de poids"
-#: models_finds.py:435 templates/ishtar/sheet_find.html:89
+#: models_finds.py:606 templates/ishtar/sheet_find.html:87
msgid "Upstream treatment"
msgstr "Traitement amont"
-#: models_finds.py:438 templates/ishtar/sheet_find.html:131
+#: models_finds.py:609 templates/ishtar/sheet_find.html:129
msgid "Downstream treatment"
msgstr "Traitement aval"
-#: models_finds.py:476
+#: models_finds.py:647
msgid "Collection"
msgstr "Collection"
-#: models_finds.py:478 models_treatments.py:141 models_treatments.py:493
+#: models_finds.py:649 models_treatments.py:141 models_treatments.py:493
msgid "Cached name"
msgstr "Nom en cache"
-#: models_finds.py:487
+#: models_finds.py:658
msgid "Can view all Finds"
msgstr "Peut voir tout le Mobilier"
-#: models_finds.py:488
+#: models_finds.py:659
msgid "Can view own Find"
msgstr "Peut voir son propre Mobilier"
-#: models_finds.py:489
+#: models_finds.py:660
msgid "Can add own Find"
msgstr "Peut ajouter son propre Mobilier"
-#: models_finds.py:490
+#: models_finds.py:661
msgid "Can change own Find"
msgstr "Peut modifier son propre Mobilier"
-#: models_finds.py:491
+#: models_finds.py:662
msgid "Can delete own Find"
msgstr "Peut supprimer son propre Mobilier"
-#: models_finds.py:497
+#: models_finds.py:668
msgid "FIND"
msgstr "MOBILIER"
-#: models_finds.py:817
+#: models_finds.py:1056
msgid "Find documentation"
msgstr "Documentation de mobilier"
-#: models_finds.py:818
+#: models_finds.py:1057
msgid "Find documentations"
msgstr "Documentations de mobilier"
-#: models_finds.py:831
+#: models_finds.py:1070
msgid "Person"
msgstr "Individu"
-#: models_finds.py:837
+#: models_finds.py:1076
msgid "Property"
msgstr "Propriété"
-#: models_finds.py:838
+#: models_finds.py:1077
msgid "Properties"
msgstr "Propriétés"
@@ -986,7 +986,7 @@ msgstr "Coût d'assurance"
msgid "Target a basket"
msgstr "Appliquer à un panier"
-#: models_treatments.py:146 templates/ishtar/sheet_find.html:86
+#: models_treatments.py:146 templates/ishtar/sheet_find.html:84
#: templates/ishtar/sheet_treatmentfile.html:45
msgid "Treatments"
msgstr "Traitements"
@@ -1015,8 +1015,8 @@ msgstr "Peut supprimer son propre Traitement"
msgid "TREATMENT"
msgstr "TRAITEMENT"
-#: models_treatments.py:294 templates/ishtar/sheet_find.html:100
-#: templates/ishtar/sheet_find.html:142
+#: models_treatments.py:294 templates/ishtar/sheet_find.html:98
+#: templates/ishtar/sheet_find.html:140
msgid "Doer"
msgstr "Opérateur"
@@ -1208,59 +1208,59 @@ msgstr "Demande de traitement : supprimer une documentation associée"
msgid "Operation"
msgstr "Opération"
-#: templates/ishtar/sheet_find.html:78
+#: templates/ishtar/sheet_find.html:76
msgid "Warehouse"
msgstr "Dépôt"
-#: templates/ishtar/sheet_find.html:95 templates/ishtar/sheet_find.html:137
+#: templates/ishtar/sheet_find.html:93 templates/ishtar/sheet_find.html:135
msgid "Year - index"
msgstr "Année - index"
-#: templates/ishtar/sheet_find.html:99 templates/ishtar/sheet_find.html:141
+#: templates/ishtar/sheet_find.html:97 templates/ishtar/sheet_find.html:139
msgid "Related finds (max. 15 displayed)"
msgstr "Mobilier associé (max. 15 affichés)"
-#: templates/ishtar/sheet_find.html:127
+#: templates/ishtar/sheet_find.html:125
msgid "Export as CSV"
msgstr "Export en CSV"
-#: templates/ishtar/sheet_find.html:127 templates/ishtar/sheet_find.html:170
+#: templates/ishtar/sheet_find.html:125 templates/ishtar/sheet_find.html:168
msgid "CSV"
msgstr "CSV"
-#: templates/ishtar/sheet_find.html:175
+#: templates/ishtar/sheet_find.html:173
msgid "Associated base finds"
msgstr "Mobilier de base associé"
-#: templates/ishtar/sheet_find.html:207
+#: templates/ishtar/sheet_find.html:205
msgid "Coordinates:"
msgstr "Cordonnées :"
-#: templates/ishtar/sheet_find.html:209
+#: templates/ishtar/sheet_find.html:207
msgid "X:"
msgstr "X :"
-#: templates/ishtar/sheet_find.html:210
+#: templates/ishtar/sheet_find.html:208
msgid "Y:"
msgstr "Y :"
-#: templates/ishtar/sheet_find.html:211
+#: templates/ishtar/sheet_find.html:209
msgid "Z:"
msgstr "Z :"
-#: templates/ishtar/sheet_find.html:214
+#: templates/ishtar/sheet_find.html:212
msgid "SRID:"
msgstr "SRID :"
-#: templates/ishtar/sheet_find.html:230
+#: templates/ishtar/sheet_find.html:228
msgid "Title"
msgstr "Titre"
-#: templates/ishtar/sheet_find.html:232
+#: templates/ishtar/sheet_find.html:230
msgid "Authors"
msgstr "Auteurs"
-#: templates/ishtar/sheet_find.html:233
+#: templates/ishtar/sheet_find.html:231
msgid "Link"
msgstr "Lien"
diff --git a/translations/fr/archaeological_operations.po b/translations/fr/archaeological_operations.po
index e65aa1011..2ccc09e06 100644
--- a/translations/fr/archaeological_operations.po
+++ b/translations/fr/archaeological_operations.po
@@ -19,12 +19,12 @@ msgstr ""
"X-Generator: Zanata 3.9.6\n"
#: forms.py:69 forms.py:371 forms.py:1009 forms.py:1031 forms.py:1035
-#: models.py:1217 templates/ishtar/sheet_operation.html:144
+#: models.py:1224 templates/ishtar/sheet_operation.html:144
#: templates/ishtar/blocks/window_tables/parcels.html:10
msgid "Parcels"
msgstr "Parcelles"
-#: forms.py:72 forms.py:205 forms.py:985 models.py:1203
+#: forms.py:72 forms.py:205 forms.py:985 models.py:1210
#: templates/ishtar/blocks/window_tables/parcels.html:7
#: templates/ishtar/dashboards/dashboard_operation.html:432
#: templates/ishtar/dashboards/dashboard_operation.html:446
@@ -33,22 +33,22 @@ msgstr "Parcelles"
msgid "Town"
msgstr "Commune"
-#: forms.py:74 forms.py:455 forms.py:752 forms.py:1255 models.py:274
-#: models.py:1009 models.py:1201
+#: forms.py:74 forms.py:455 forms.py:752 forms.py:1255 models.py:275
+#: models.py:1016 models.py:1208
#: templates/ishtar/blocks/window_tables/parcels.html:8
msgid "Year"
msgstr "Année"
-#: forms.py:77 models.py:1204
+#: forms.py:77 models.py:1211
#: templates/ishtar/blocks/window_tables/parcels.html:9
msgid "Section"
msgstr "Section"
-#: forms.py:80 models.py:1206
+#: forms.py:80 models.py:1213
msgid "Parcel number"
msgstr "Numéro de parcelle"
-#: forms.py:82 models.py:1208 models.py:1225 models.py:1274
+#: forms.py:82 models.py:1215 models.py:1232 models.py:1281
msgid "Public domain"
msgstr "Domaine public"
@@ -84,8 +84,8 @@ msgstr "Il y a des parcelles identiques."
msgid "Relation type"
msgstr "Type de relation"
-#: forms.py:383 ishtar_menu.py:30 models.py:369 models.py:830 models.py:860
-#: models.py:888 models.py:991 models.py:1200 wizards.py:344 wizards.py:355
+#: forms.py:383 ishtar_menu.py:30 models.py:370 models.py:837 models.py:867
+#: models.py:895 models.py:998 models.py:1207 wizards.py:344 wizards.py:355
#: templates/ishtar/sheet_operation.html:4
msgid "Operation"
msgstr "Opération"
@@ -114,7 +114,7 @@ msgstr "Relations supprimées"
msgid "Relations"
msgstr "Relations"
-#: forms.py:456 forms.py:1226 models.py:275
+#: forms.py:456 forms.py:1226 models.py:276
msgid "Numeric reference"
msgstr "Identifiant numérique"
@@ -122,7 +122,7 @@ msgstr "Identifiant numérique"
msgid "Parcel (section/number/public domain)"
msgstr "Parcelle (section/numéro/domaine public)"
-#: forms.py:465 forms.py:1269 models.py:831
+#: forms.py:465 forms.py:1269 models.py:838
#: templates/ishtar/dashboards/dashboard_operation.html:390
#: templates/ishtar/dashboards/dashboard_operation.html:411
#: templates/ishtar/dashboards/dashboard_operation.html:643
@@ -131,12 +131,12 @@ msgstr "Parcelle (section/numéro/domaine public)"
msgid "Department"
msgstr "Département"
-#: forms.py:466 forms.py:1097 models.py:85
+#: forms.py:466 forms.py:1097 models.py:86
#: templates/ishtar/blocks/window_tables/archaeologicalsites.html:8
msgid "Name"
msgstr "Nom"
-#: forms.py:468 forms.py:672 forms.py:750 forms.py:1232 models.py:282
+#: forms.py:468 forms.py:672 forms.py:750 forms.py:1232 models.py:283
msgid "Operation type"
msgstr "Type d'opération"
@@ -144,24 +144,24 @@ msgstr "Type d'opération"
msgid "Is open?"
msgstr "Est ouvert ?"
-#: forms.py:478 forms.py:782 models.py:271
+#: forms.py:478 forms.py:782 models.py:272
msgid "In charge"
msgstr "Responsable du suivi scientifique"
-#: forms.py:485 models.py:985
+#: forms.py:485 models.py:992
msgid "Scientist in charge"
msgstr "Responsable scientifique"
-#: forms.py:487 forms.py:674 forms.py:772 models.py:269
+#: forms.py:487 forms.py:674 forms.py:772 models.py:270
msgid "Operator"
msgstr "Opérateur"
-#: forms.py:496 forms.py:1102 models.py:89 models.py:284
+#: forms.py:496 forms.py:1102 models.py:90 models.py:285
#: templates/ishtar/blocks/window_tables/archaeologicalsites.html:10
msgid "Remains"
msgstr "Vestiges"
-#: forms.py:497 forms.py:1080 forms.py:1099 models.py:87 models.py:290
+#: forms.py:497 forms.py:1080 forms.py:1099 models.py:88 models.py:291
#: templates/ishtar/blocks/window_tables/archaeologicalsites.html:9
msgid "Periods"
msgstr "Périodes"
@@ -194,23 +194,23 @@ msgstr "Commentaire"
msgid "Abstract (full text search)"
msgstr "Résumé (recherche texte intégral)"
-#: forms.py:512 forms.py:840 models.py:338
+#: forms.py:512 forms.py:840 models.py:339
msgid "Comment about scientific documentation"
msgstr "Commentaire concernant la documentation scientifique"
-#: forms.py:513 forms.py:842 models.py:350
+#: forms.py:513 forms.py:842 models.py:351
msgid "Record quality"
msgstr "Qualité d'enregistrement"
-#: forms.py:514 forms.py:807 models.py:302
+#: forms.py:514 forms.py:807 models.py:303
msgid "Report processing"
msgstr "Traitement du rapport"
-#: forms.py:516 forms.py:845 models.py:345
+#: forms.py:516 forms.py:845 models.py:346
msgid "Virtual operation"
msgstr "Opération virtuelle"
-#: forms.py:518 forms.py:1142 forms.py:1146 models.py:93
+#: forms.py:518 forms.py:1142 forms.py:1146 models.py:94
msgid "Archaeological site"
msgstr "Entité archéologique"
@@ -230,7 +230,7 @@ msgstr "Date limite de rendu de la documentation avant"
msgid "Documentation deadline after"
msgstr "Date limite de rendu de la documentation après"
-#: forms.py:541 forms.py:830 models.py:357
+#: forms.py:541 forms.py:830 models.py:358
msgid "Documentation received"
msgstr "Documentation reçue"
@@ -242,7 +242,7 @@ msgstr "Date limite de rendu du mobilier avant"
msgid "Finds deadline after"
msgstr "Date limite de rendu du mobilier après"
-#: forms.py:547 forms.py:835 models.py:361
+#: forms.py:547 forms.py:835 models.py:362
msgid "Finds received"
msgstr "Mobilier reçu"
@@ -254,12 +254,12 @@ msgstr "Rechercher une opération"
msgid "Associated file"
msgstr "Dossier associé"
-#: forms.py:640 forms.py:933 models.py:497 models.py:887 models.py:996
+#: forms.py:640 forms.py:933 models.py:504 models.py:894 models.py:1003
#: wizards.py:80
msgid "Archaeological file"
msgstr "Dossier archéologique"
-#: forms.py:647 forms.py:649 models.py:352
+#: forms.py:647 forms.py:649 models.py:353
msgid "Abstract"
msgstr "Résumé"
@@ -271,7 +271,7 @@ msgstr "mois"
msgid "years"
msgstr "années"
-#: forms.py:654 models.py:255
+#: forms.py:654 models.py:256
msgid "Creation date"
msgstr "Date de création"
@@ -328,11 +328,11 @@ msgstr "Avec du mobilier"
msgid "General"
msgstr "Général"
-#: forms.py:748 models.py:335
+#: forms.py:748 models.py:336
msgid "Generic name"
msgstr "Nom générique"
-#: forms.py:757 models.py:304
+#: forms.py:757 models.py:305
msgid "Old code"
msgstr "Ancien code"
@@ -340,7 +340,7 @@ msgstr "Ancien code"
msgid "Head scientist"
msgstr "Responsable scientifique"
-#: forms.py:779 models.py:334
+#: forms.py:779 models.py:335
msgid "Operator reference"
msgstr "Référence de l'opérateur"
@@ -348,23 +348,23 @@ msgstr "Référence de l'opérateur"
msgid "Total surface (m2)"
msgstr "Surface totale (m2)"
-#: forms.py:800 models.py:53 models.py:258 models.py:1399
+#: forms.py:800 models.py:54 models.py:259 models.py:1420
msgid "Start date"
msgstr "Date de début"
-#: forms.py:802 models.py:260
+#: forms.py:802 models.py:261
msgid "Excavation end date"
msgstr "Date de fin de chantier"
-#: forms.py:805 models.py:261
+#: forms.py:805 models.py:262
msgid "Report delivery date"
msgstr "Date de livraison du rapport"
-#: forms.py:827 models.py:354
+#: forms.py:827 models.py:355
msgid "Deadline for submission of the documentation"
msgstr "Date limite de rendu de la documentation"
-#: forms.py:832 models.py:359
+#: forms.py:832 models.py:360
msgid "Deadline for submission of the finds"
msgstr "Date limite de rendu du mobilier"
@@ -406,7 +406,7 @@ msgstr ""
msgid "Bad operation code"
msgstr "Mauvais code d'opération"
-#: forms.py:929 models.py:512
+#: forms.py:929 models.py:519
msgid "Operation code"
msgstr "Code de l'opération"
@@ -414,20 +414,20 @@ msgstr "Code de l'opération"
msgid "Preventive informations - excavation"
msgstr "Information archéologie préventive - fouille"
-#: forms.py:956 models.py:288
+#: forms.py:956 models.py:289
#: templates/ishtar/dashboards/dashboard_operation.html:701
msgid "Cost (euros)"
msgstr "Coût (euros)"
-#: forms.py:957 models.py:293
+#: forms.py:957 models.py:294
msgid "Scheduled man-days"
msgstr "Jours-hommes prévus"
-#: forms.py:959 models.py:296
+#: forms.py:959 models.py:297
msgid "Optional man-days"
msgstr "Jours-hommes optionnels"
-#: forms.py:961 models.py:299
+#: forms.py:961 models.py:300
msgid "Effective man-days"
msgstr "Jours-hommes effectifs"
@@ -435,31 +435,31 @@ msgstr "Jours-hommes effectifs"
msgid "Preventive informations - diagnostic"
msgstr "Information archéologie préventive - diagnostic"
-#: forms.py:974 models.py:318
+#: forms.py:974 models.py:319
msgid "Prescription on zoning"
msgstr "Prescription sur zonage"
-#: forms.py:976 models.py:321
+#: forms.py:976 models.py:322
msgid "Prescription on large area"
msgstr "Prescription sur une vaste surface"
-#: forms.py:979 models.py:323
+#: forms.py:979 models.py:324
msgid "Prescription on geoarchaeological context"
msgstr "Prescription sur un contexte géoarchéologique"
-#: forms.py:983 forms.py:1005 models.py:286 models.py:1019
+#: forms.py:983 forms.py:1005 models.py:287 models.py:1026
msgid "Towns"
msgstr "Communes"
-#: forms.py:1012 models.py:1216 models.py:1397
+#: forms.py:1012 models.py:1223 models.py:1418
msgid "Parcel"
msgstr "Parcelle"
-#: forms.py:1064 models.py:45
+#: forms.py:1064 models.py:46
msgid "Remain types"
msgstr "Types de vestige"
-#: forms.py:1068 models.py:44
+#: forms.py:1068 models.py:45
msgid "Remain type"
msgstr "Type de vestige"
@@ -468,7 +468,7 @@ msgstr "Type de vestige"
msgid "Period"
msgstr "Période"
-#: forms.py:1096 models.py:84
+#: forms.py:1096 models.py:85
msgid "Reference"
msgstr "Référence"
@@ -476,7 +476,7 @@ msgstr "Référence"
msgid "This reference already exists."
msgstr "Cette référence existe déjà."
-#: forms.py:1157 models.py:94 models.py:342
+#: forms.py:1157 models.py:95 models.py:343
#: templates/ishtar/sheet_operation.html:94
msgid "Archaeological sites"
msgstr "Entités archéologiques"
@@ -497,7 +497,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:1186 forms.py:1256 forms.py:1392 models.py:862 models.py:976
+#: forms.py:1186 forms.py:1256 forms.py:1392 models.py:869 models.py:983
msgid "Index"
msgstr "Index"
@@ -526,7 +526,7 @@ msgstr "Rechercher une documentation"
msgid "You should select a document."
msgstr "Vous devez sélectionner un document."
-#: forms.py:1263 forms.py:1330 models.py:901 models.py:970
+#: forms.py:1263 forms.py:1330 models.py:908 models.py:977
msgid "Act type"
msgstr "Type d'acte"
@@ -534,12 +534,12 @@ msgstr "Type d'acte"
msgid "Indexed?"
msgstr "Indexé ?"
-#: forms.py:1270 forms.py:1335 models.py:1010
+#: forms.py:1270 forms.py:1335 models.py:1017
#: templates/ishtar/blocks/window_tables/administrativacts.html:10
msgid "Object"
msgstr "Objet"
-#: forms.py:1307 views.py:329
+#: forms.py:1307 views.py:333
msgid "Administrative act search"
msgstr "Rechercher un acte administratif"
@@ -547,7 +547,7 @@ msgstr "Rechercher un acte administratif"
msgid "You should select an administrative act."
msgstr "Vous devez sélectionner un acte administratif."
-#: forms.py:1338 models.py:1007
+#: forms.py:1338 models.py:1014
msgid "Signature date"
msgstr "Date de signature"
@@ -584,7 +584,7 @@ msgstr "Génération de document"
msgid "Generate the associated doc?"
msgstr "Générer le document associé ?"
-#: forms.py:1471 ishtar_menu.py:123 views.py:382
+#: forms.py:1471 ishtar_menu.py:123 views.py:386
msgctxt "admin act register"
msgid "Register"
msgstr "Registre"
@@ -605,7 +605,7 @@ msgstr "Clôture"
msgid "Deletion"
msgstr "Suppression"
-#: ishtar_menu.py:59 models.py:1026
+#: ishtar_menu.py:59 models.py:1033
#: templates/ishtar/sheet_administrativeact.html:4
msgid "Administrative act"
msgstr "Acte administratif"
@@ -630,436 +630,436 @@ msgstr "Tableau de bord"
msgid "General informations"
msgstr "Informations générales"
-#: ishtar_menu.py:139 models.py:370
+#: ishtar_menu.py:139 models.py:371
#: templates/ishtar/dashboards/dashboard_operation.html:8
msgid "Operations"
msgstr "Opérations"
-#: models.py:52 models.py:70 models.py:1861
+#: models.py:53 models.py:71 models.py:1882
msgid "Order"
msgstr "Ordre"
-#: models.py:54 models.py:1400
+#: models.py:55 models.py:1421
msgid "End date"
msgstr "Date de fin"
-#: models.py:55
+#: models.py:56
msgid "Parent period"
msgstr "Période parente"
-#: models.py:59
+#: models.py:60
msgid "Type Period"
msgstr "Type de période"
-#: models.py:60
+#: models.py:61
msgid "Types Period"
msgstr "Types de période"
-#: models.py:73
+#: models.py:74
msgid "Type of report state"
msgstr "Type d'état de rapport"
-#: models.py:74
+#: models.py:75
msgid "Types of report state"
msgstr "Types d'état de rapport"
-#: models.py:97
+#: models.py:98
msgid "Can view all Archaeological sites"
msgstr "Peut voir toutes les Entités archéologiques"
-#: models.py:99
+#: models.py:100
msgid "Can view own Archaeological site"
msgstr "Peut voir ses propres Entités archéologiques"
-#: models.py:101
+#: models.py:102
msgid "Can add own Archaeological site"
msgstr "Peut ajouter ses propres Entités archéologique"
-#: models.py:103
+#: models.py:104
msgid "Can change own Archaeological site"
msgstr "Peut modifier sa propre Entité archéologique"
-#: models.py:105
+#: models.py:106
msgid "Can delete own Archaeological site"
msgstr "Peut supprimer ses propres Entités archéologiques"
-#: models.py:142
+#: models.py:143
msgid "Not documented"
msgstr "Non documenté"
-#: models.py:143
+#: models.py:144
msgid "Arbitrary"
msgstr "Arbitraire"
-#: models.py:144
+#: models.py:145
msgid "Reliable"
msgstr "Fiable"
-#: models.py:233
+#: models.py:234
msgid "Year - Index"
msgstr "Année - Index"
-#: models.py:234
+#: models.py:235
msgid "Associated file (label)"
msgstr "Dossier associé (nom)"
-#: models.py:235
+#: models.py:236
msgid "Operator name"
msgstr "Nom de l'opérateur"
-#: models.py:236
+#: models.py:237
msgid "Scientist (full name)"
msgstr "Responsable scientifique (nom complet)"
-#: models.py:237
+#: models.py:238
msgid "Associated file (external ID)"
msgstr "Dossier associé (identifiant externe)"
-#: models.py:238
+#: models.py:239
msgid "Scientist (title)"
msgstr "Responsable scientifique (titre)"
-#: models.py:239
+#: models.py:240
msgid "Scientist (surname)"
msgstr "Responsable scientifique (nom)"
-#: models.py:240
+#: models.py:241
msgid "Scientist (name)"
msgstr "Scientifique (nom)"
-#: models.py:241
+#: models.py:242
msgid "Scientist - Organization (name)"
msgstr "Scientifique - Organisation (nom)"
-#: models.py:242
+#: models.py:243
msgid "In charge (title)"
msgstr "Responsable du suivi scientifique (titre)"
-#: models.py:243
+#: models.py:244
msgid "In charge (surname)"
msgstr "Responsable du suivi scientifique (prénom)"
-#: models.py:244
+#: models.py:245
msgid "In charge (name)"
msgstr "Responsable du suivi scientifique (nom)"
-#: models.py:245
+#: models.py:246
msgid "In charge - Organization (name)"
msgstr "Responsable du suivi scientifique - Organisation (nom)"
-#: models.py:250
+#: models.py:251
msgid "Archaeological sites (reference)"
msgstr "Entités archéologiques (référence)"
-#: models.py:257
+#: models.py:258
msgid "Closing date"
msgstr "Date de clôture"
-#: models.py:264
+#: models.py:265
msgid "In charge scientist"
msgstr "Responsable du suivi scientifique"
-#: models.py:279 models.py:1196
+#: models.py:280 models.py:1203
msgid "File"
msgstr "Dossier"
-#: models.py:283
+#: models.py:284
msgid "Surface (m2)"
msgstr "Surface (m2)"
-#: models.py:336
+#: models.py:337
msgid "General comment"
msgstr "Commentaire général"
-#: models.py:339
+#: models.py:340
msgid "Cached name"
msgstr "Nom en cache"
-#: models.py:347
+#: models.py:348
msgid ""
"If checked, it means that this operation have not been officialy registered."
msgstr ""
"Si coché, cela signifie que cette opération n'a pas été officiellement "
"enregistrée."
-#: models.py:363
+#: models.py:364
msgid "Point"
msgstr "Point"
-#: models.py:364
+#: models.py:365
msgid "Multi polygon"
msgstr "Polygones multi-parties"
-#: models.py:372
+#: models.py:373
msgid "Can view all Operations"
msgstr "Peut voir toutes les Opérations"
-#: models.py:373
+#: models.py:374
msgid "Can view own Operation"
msgstr "Peut voir sa propre Opération"
-#: models.py:374
+#: models.py:375
msgid "Can add own Operation"
msgstr "Peut ajouter sa propre Opération"
-#: models.py:375
+#: models.py:376
msgid "Can change own Operation"
msgstr "Peut modifier sa propre Opération"
-#: models.py:376
+#: models.py:377
msgid "Can delete own Operation"
msgstr "Peut supprimer sa propre Opération"
-#: models.py:377
+#: models.py:378
msgid "Can close Operation"
msgstr "Peut clore une Opération"
-#: models.py:406
+#: models.py:407
msgid "OPE"
msgstr "OPE"
-#: models.py:466
+#: models.py:473
msgid "Intercommunal"
msgstr "Intercommunal"
-#: models.py:498
+#: models.py:505
msgid "Code patriarche"
msgstr "Code patriarche"
-#: models.py:538
+#: models.py:545
msgid "This operation code already exists for this year"
msgstr "Ce code d'opération existe déjà pour cette année."
-#: models.py:563
+#: models.py:570
msgid "Number of parcels"
msgstr "Nombre de parcelles"
-#: models.py:581
+#: models.py:588
msgid "Number of administrative acts"
msgstr "Nombre d'actes administratifs"
-#: models.py:589
+#: models.py:596
msgid "Number of indexed administrative acts"
msgstr "Nombre d'actes administratifs indexés"
-#: models.py:597
+#: models.py:604
msgid "Number of context records"
msgstr "Nombre d'Unités d'Enregistrement"
-#: models.py:633
+#: models.py:640
msgid "Number of finds"
msgstr "Nombre d'éléments de mobilier"
-#: models.py:678
+#: models.py:685
msgid "No type"
msgstr "Pas de type"
-#: models.py:709
+#: models.py:716
msgid "Number of sources"
msgstr "Nombre de documents"
-#: models.py:751 templates/ishtar/dashboards/dashboard_operation.html:309
+#: models.py:758 templates/ishtar/dashboards/dashboard_operation.html:309
#: templates/ishtar/dashboards/dashboard_operation.html:575
#: templates/ishtar/dashboards/dashboard_operation.html:611
msgid "Mean"
msgstr "Moyenne"
-#: models.py:801
+#: models.py:808
msgid "Inverse relation"
msgstr "Relation inverse"
-#: models.py:805
+#: models.py:812
msgid "Operation relation type"
msgstr "Type de relation entre opérations"
-#: models.py:806
+#: models.py:813
msgid "Operation relation types"
msgstr "Types de relation entre opérations"
-#: models.py:819
+#: models.py:826
msgid "Operation record relation"
msgstr "Relation entre opérations"
-#: models.py:820
+#: models.py:827
msgid "Operation record relations"
msgstr "Relations entre opérations"
-#: models.py:866
+#: models.py:873
msgid "Operation documentation"
msgstr "Documentation d'une opération"
-#: models.py:867
+#: models.py:874
msgid "Operation documentations"
msgstr "Documentations des opérations"
-#: models.py:870
+#: models.py:877
msgid "Can view all Operation sources"
msgstr "Peut voir toutes les Documentations d'opération"
-#: models.py:872
+#: models.py:879
msgid "Can view own Operation source"
msgstr "Peut voir sa propre Documentation d'opération"
-#: models.py:874
+#: models.py:881
msgid "Can add own Operation source"
msgstr "Peut ajouter sa propre Documentation d'opération"
-#: models.py:876
+#: models.py:883
msgid "Can change own Operation source"
msgstr "Peut modifier sa propre Documentation d'opération"
-#: models.py:878
+#: models.py:885
msgid "Can delete own Operation source"
msgstr "Peut supprimer sa propre Documentation d'opération"
-#: models.py:889 models.py:1001
+#: models.py:896 models.py:1008
msgid "Treatment request"
msgstr "Demande de traitement"
-#: models.py:890 models.py:1006
+#: models.py:897 models.py:1013
msgid "Treatment"
msgstr "Traitement"
-#: models.py:892
+#: models.py:899
msgid "Intended to"
msgstr "Destiné à"
-#: models.py:894
+#: models.py:901
msgid "Code"
msgstr "Code"
-#: models.py:897
+#: models.py:904
msgid "Associated template"
msgstr "Patron associé"
-#: models.py:898
+#: models.py:905
msgid "Indexed"
msgstr "Indexé"
-#: models.py:902
+#: models.py:909
msgid "Act types"
msgstr "Types d'acte"
-#: models.py:974
+#: models.py:981
msgid "Person in charge of the operation"
msgstr "Responsable d'opération"
-#: models.py:980
+#: models.py:987
msgid "Archaeological preventive operator"
msgstr "Opérateur d'archéologie préventive"
-#: models.py:988
+#: models.py:995
msgid "Signatory"
msgstr "Signataire"
-#: models.py:1016
+#: models.py:1023
msgid "Departments"
msgstr "Départements"
-#: models.py:1017
+#: models.py:1024
msgid "Cached values get from associated departments"
msgstr "Valeur en cache des départements associés"
-#: models.py:1020
+#: models.py:1027
msgid "Cached values get from associated towns"
msgstr "Valeur en cache des communes associées"
-#: models.py:1027 templates/ishtar/sheet_operation.html:102
+#: models.py:1034 templates/ishtar/sheet_operation.html:102
#: templates/ishtar/sheet_operation.html:138
msgid "Administrative acts"
msgstr "Actes administratifs"
-#: models.py:1030
+#: models.py:1037
msgid "Can view all Administrative acts"
msgstr "Peut voir tous les Actes administratifs"
-#: models.py:1032
+#: models.py:1039
msgid "Can view own Administrative act"
msgstr "Peut voir son propre Acte administratif"
-#: models.py:1034
+#: models.py:1041
msgid "Can add own Administrative act"
msgstr "Peut ajouter son propre Acte administratif"
-#: models.py:1036
+#: models.py:1043
msgid "Can change own Administrative act"
msgstr "Peut modifier son propre Acte administratif"
-#: models.py:1038
+#: models.py:1045
msgid "Can delete own Administrative act"
msgstr "Peut supprimer son propre Acte administratif"
-#: models.py:1047
+#: models.py:1054
#: templates/ishtar/blocks/window_tables/administrativacts.html:7
#: templates/ishtar/blocks/window_tables/archaeologicalsites.html:7
msgid "Ref."
msgstr "Réf."
-#: models.py:1141
+#: models.py:1148
msgid "This index already exists for this year"
msgstr "Cet index existe déjà pour cette année."
-#: models.py:1209
+#: models.py:1216
msgid "External ID"
msgstr "ID externe"
-#: models.py:1212
+#: models.py:1219
msgid "External ID is set automatically"
msgstr "L'identifiant externe est configuré automatiquement"
-#: models.py:1213
+#: models.py:1220
msgid "Address - Locality"
msgstr "Adresse - Lieu-dit"
-#: models.py:1395
+#: models.py:1416
msgid "Owner"
msgstr "Propriétaire"
-#: models.py:1403
+#: models.py:1424
msgid "Parcel owner"
msgstr "Propriétaire de parcelle"
-#: models.py:1404
+#: models.py:1425
msgid "Parcel owners"
msgstr "Propriétaires de parcelle"
-#: models.py:1430
+#: models.py:1451
msgid "Recorded"
msgstr "Enregistré"
-#: models.py:1431
+#: models.py:1452
msgid "Effective"
msgstr "Effectif"
-#: models.py:1432
+#: models.py:1453
msgid "Active"
msgstr "Actif"
-#: models.py:1433
+#: models.py:1454
msgid "Field completed"
msgstr "Terrain achevé"
-#: models.py:1434
+#: models.py:1455
msgid "Associated report"
msgstr "Rapport associé"
-#: models.py:1435
+#: models.py:1456
msgid "Closed"
msgstr "Clos"
-#: models.py:1436
+#: models.py:1457
msgid "Documented and closed"
msgstr "Documenté et clos"
-#: models.py:1862
+#: models.py:1883
msgid "Is preventive"
msgstr "Préventif"
-#: models.py:1865
+#: models.py:1886
msgid "Operation type old"
msgstr "Type d'opération - ancien"
-#: models.py:1866
+#: models.py:1887
msgid "Operation types old"
msgstr "Types d'opération - ancien"
@@ -1067,43 +1067,43 @@ msgstr "Types d'opération - ancien"
msgid "New operation"
msgstr "Ajouter une opération"
-#: views.py:233
+#: views.py:237
msgid "Operation modification"
msgstr "Modifier une opération"
-#: views.py:276
+#: views.py:280
msgid "Operation closing"
msgstr "Clôturer une opération"
-#: views.py:287
+#: views.py:291
msgid "Operation deletion"
msgstr "Supprimer une opération"
-#: views.py:292
+#: views.py:296
msgid "Operation: source search"
msgstr "Opération : rechercher une documentation associée"
-#: views.py:300
+#: views.py:304
msgid "Operation: source creation"
msgstr "Opération : ajouter une documentation associée"
-#: views.py:308
+#: views.py:312
msgid "Operation: source modification"
msgstr "Opération : modifier une documentation associée"
-#: views.py:323
+#: views.py:327
msgid "Operation: source deletion"
msgstr "Opération : supprimer une documentation associée"
-#: views.py:342
+#: views.py:346
msgid "Operation: new administrative act"
msgstr "Opération : ajouter un acte administratif"
-#: views.py:352
+#: views.py:356
msgid "Operation: administrative act modification"
msgstr "Opération : modification d'un acte administratif"
-#: views.py:376
+#: views.py:380
msgid "Operation: administrative act deletion"
msgstr "Opération : supprimer un acte administratif"
diff --git a/translations/fr/archaeological_warehouse.po b/translations/fr/archaeological_warehouse.po
index e7bdbe6f6..6780d7b3a 100644
--- a/translations/fr/archaeological_warehouse.po
+++ b/translations/fr/archaeological_warehouse.po
@@ -146,7 +146,7 @@ msgstr "Mobilier conditionné"
msgid "Localisation"
msgstr "Localisation"
-#: forms.py:288 forms.py:289
+#: forms.py:289 forms.py:290
msgid "Would you like to delete this container?"
msgstr "Voulez-vous supprimer ce contenant ?"
diff --git a/translations/fr/ishtar_common.po b/translations/fr/ishtar_common.po
index 26167187f..79daa1faf 100644
--- a/translations/fr/ishtar_common.po
+++ b/translations/fr/ishtar_common.po
@@ -11,7 +11,7 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Transfer-Encoding: 8bit\n"
"Content-Type: text/plain; charset=UTF-8\n"
-"PO-Revision-Date: 2017-02-06 09:49-0500\n"
+"PO-Revision-Date: 2017-02-28 04:15-0500\n"
"Last-Translator: Valérie-Emma Leroux <emma@iggdrasil.net>\n"
"Language-Team: \n"
"Language: fr\n"
@@ -34,54 +34,54 @@ msgstr "Élément associé"
msgid "Export selected as CSV file"
msgstr "Exporter la sélection en fichier CSV"
-#: data_importer.py:183
+#: data_importer.py:186
#, python-format
msgid "\"%(value)s\" is too long. The max length is %(length)d characters."
msgstr ""
"\"%(value)s\" est trop long. La longueur maximum est de %(length)d "
"caractères."
-#: data_importer.py:200
+#: data_importer.py:203
#, python-format
msgid "\"%(value)s\" not equal to yes or no"
msgstr "\"%(value)s\" diffère de oui ou non"
-#: data_importer.py:212
+#: data_importer.py:215
#, python-format
msgid "\"%(value)s\" is not a float"
msgstr "\"%(value)s\" n'est pas un nombre à virgule"
-#: data_importer.py:225 data_importer.py:239 data_importer.py:483
+#: data_importer.py:228 data_importer.py:242 data_importer.py:495
#, python-format
msgid "\"%(value)s\" is not a valid date"
msgstr "\"%(value)s\" n'est pas une date valide"
-#: data_importer.py:252
+#: data_importer.py:255
#, python-format
msgid "\"%(value)s\" is not an integer"
msgstr "\"%(value)s\" n'est pas un entier"
-#: data_importer.py:303 data_importer.py:546
+#: data_importer.py:312 data_importer.py:560
#, python-format
msgid "Choice for \"%s\" is not available. Which one is relevant?\n"
msgstr "Le choix pour \"%s\" n'est pas disponible. Lequel est pertinent ?\n"
-#: data_importer.py:310
+#: data_importer.py:319
#, python-format
msgid "%d. None of the above - create new"
msgstr "%d. Aucun de ceux-là - créer un nouveau"
-#: data_importer.py:313
+#: data_importer.py:322
#, python-format
msgid "%d. None of the above - skip"
msgstr "%d. Aucun de ceux-là - passer"
-#: data_importer.py:509
+#: data_importer.py:521
#, python-format
msgid "\"%(value)s\" is not a valid path for the given archive"
msgstr "\"%(value)s\" n'est pas un chemin valide pour cette archive"
-#: data_importer.py:623
+#: data_importer.py:637
msgid ""
"The given file is not correct. Check the file format. If you use a CSV file: "
"check that column separator and encoding are similar to the ones used by the "
@@ -91,29 +91,29 @@ msgstr ""
"utilisez un fichier CSV : vérifiez que le séparateur de colonnes et "
"l'encodage sont similaires à ceux du fichier de référence."
-#: data_importer.py:627
+#: data_importer.py:641
#, python-format
msgid "Too many cols (%(user_col)d) when maximum is %(ref_col)d"
msgstr "Trop de colonnes (%(user_col)d). Le maximum est %(ref_col)d"
-#: data_importer.py:629
+#: data_importer.py:643
msgid "No data provided"
msgstr "Aucune donnée fournie"
-#: data_importer.py:630
+#: data_importer.py:644
msgid "Value is required"
msgstr "Valeur requise"
-#: data_importer.py:631
+#: data_importer.py:645
#, python-format
msgid "At least %d columns must be filled"
msgstr "Au moins %d colonnes doivent être remplies"
-#: data_importer.py:632
+#: data_importer.py:646
msgid "The regexp doesn't match."
msgstr "L'expression régulière ne fonctionne pas."
-#: data_importer.py:634
+#: data_importer.py:648
msgid ""
"Forced creation is set for model {} but this model is not in the list of "
"models allowed to be created."
@@ -121,7 +121,7 @@ msgstr ""
"La création forcée est possible pour le modèle {} mais ce modèle ne fait pas "
"partie de la liste des créations de modèle autorisées."
-#: data_importer.py:636
+#: data_importer.py:650
msgid ""
"{} with values {} doesn't exist in the database. Create it first or fix your "
"source file."
@@ -129,35 +129,41 @@ msgstr ""
"L'élément {} avec les valeurs {} n'existe pas dans la base de données. Créez-"
"le d'abord ou corrigez votre fichier source."
-#: data_importer.py:1089
+#: data_importer.py:1103
msgid "Not imported"
msgstr "Non importé"
-#: data_importer.py:1522
+#: data_importer.py:1240
+msgid "Importer configuration error: field \"{}\" does not exist for {}."
+msgstr ""
+"Erreur de configuration de l'importeur : le champ \"{}\" n'existe pas pour "
+"{}."
+
+#: data_importer.py:1548
msgid "line"
msgstr "ligne"
-#: data_importer.py:1522
+#: data_importer.py:1548
msgid "col"
msgstr "colonne"
-#: data_importer.py:1522
+#: data_importer.py:1548
msgid "error"
msgstr "erreur"
-#: data_importer.py:1528
+#: data_importer.py:1554
msgid "field"
msgstr "champ"
-#: data_importer.py:1528
+#: data_importer.py:1554
msgid "source"
msgstr "source"
-#: data_importer.py:1528
+#: data_importer.py:1554
msgid "result"
msgstr "résultat"
-#: data_importer.py:1544
+#: data_importer.py:1570
#, python-format
msgid "\"%(value)s\" not in %(values)s"
msgstr "\"%(value)s\" n'est pas dans %(values)s"
@@ -166,7 +172,7 @@ msgstr "\"%(value)s\" n'est pas dans %(values)s"
msgid "Enter a valid name consisting of letters, spaces and hyphens."
msgstr "Entrez un nom correct composé de lettres, espaces et tirets."
-#: forms.py:89 forms_common.py:618
+#: forms.py:89 forms_common.py:626
msgid "Confirm"
msgstr "Confirmer"
@@ -190,12 +196,12 @@ msgstr "Vous devez sélectionner un élément."
msgid "Add a new item"
msgstr "Ajouter un nouvel élément"
-#: forms.py:262 models.py:1475
+#: forms.py:262 models.py:1482
msgid "Template"
msgstr "Patron"
-#: forms_common.py:41 forms_common.py:59 forms_common.py:182
-#: forms_common.py:406 models.py:1541 models.py:2953
+#: forms_common.py:41 forms_common.py:59 forms_common.py:184
+#: forms_common.py:408 models.py:1548 models.py:2977
#: templates/blocks/JQueryAdvancedTown.html:19
#: templates/ishtar/sheet_organization.html:13
msgid "Town"
@@ -218,8 +224,8 @@ 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:68 forms_common.py:855 ishtar_menu.py:47 models.py:2577
-#: models.py:2759 models.py:2821 templates/ishtar/sheet_person.html:4
+#: forms_common.py:68 forms_common.py:863 ishtar_menu.py:47 models.py:2599
+#: models.py:2781 models.py:2845 templates/ishtar/sheet_person.html:4
msgid "Person"
msgstr "Personne"
@@ -231,64 +237,64 @@ msgstr ""
"Cet import n'a pas de clé d'unicité paramétrée. L'import conservateur n'est "
"pas possible."
-#: forms_common.py:170 forms_common.py:327 forms_common.py:451
-#: ishtar_menu.py:75 models.py:2460 models.py:2551
+#: forms_common.py:172 forms_common.py:329 forms_common.py:453
+#: ishtar_menu.py:75 models.py:2482 models.py:2573
#: templates/ishtar/sheet_organization.html:4
msgid "Organization"
msgstr "Organisation"
-#: forms_common.py:173 forms_common.py:210 forms_common.py:322
-#: forms_common.py:376 forms_common.py:446 models.py:1096 models.py:1474
-#: models.py:1742 models.py:1758 models.py:1984 models.py:2454 models.py:2563
-#: models.py:2939 templates/ishtar/sheet_organization.html:8
+#: forms_common.py:175 forms_common.py:212 forms_common.py:324
+#: forms_common.py:378 forms_common.py:448 models.py:1103 models.py:1481
+#: models.py:1749 models.py:1765 models.py:1993 models.py:2476 models.py:2585
+#: models.py:2963 templates/ishtar/sheet_organization.html:8
#: templates/ishtar/sheet_organization.html:21
msgid "Name"
msgstr "Nom"
-#: forms_common.py:174 models.py:1696 models.py:2115
+#: forms_common.py:176 models.py:1703 models.py:2124
msgid "Organization type"
msgstr "Type d'organisation"
-#: forms_common.py:176 forms_common.py:400 models.py:1536
+#: forms_common.py:178 forms_common.py:402 models.py:1543
#: templates/ishtar/sheet_organization.html:10
msgid "Address"
msgstr "Adresse"
-#: forms_common.py:178 forms_common.py:403 models.py:1537
+#: forms_common.py:180 forms_common.py:405 models.py:1544
#: templates/ishtar/sheet_organization.html:11
msgid "Address complement"
msgstr "Complément d'adresse"
-#: forms_common.py:180 forms_common.py:404 models.py:1539
+#: forms_common.py:182 forms_common.py:406 models.py:1546
#: templates/ishtar/sheet_organization.html:12
msgid "Postal code"
msgstr "Code postal"
-#: forms_common.py:183 forms_common.py:407 models.py:1542
+#: forms_common.py:185 forms_common.py:409 models.py:1549
msgid "Country"
msgstr "Pays"
-#: forms_common.py:185 forms_common.py:324 forms_common.py:380
-#: forms_common.py:448 forms_common.py:572 models.py:1569
+#: forms_common.py:187 forms_common.py:326 forms_common.py:382
+#: forms_common.py:450 forms_common.py:574 models.py:1576
msgid "Email"
msgstr "Courriel"
-#: forms_common.py:186 forms_common.py:383 models.py:1554
+#: forms_common.py:188 forms_common.py:385 models.py:1561
#: templates/ishtar/sheet_organization.html:14
#: templates/ishtar/sheet_person.html:19
#: templates/ishtar/wizard/wizard_person.html:17
msgid "Phone"
msgstr "Téléphone"
-#: forms_common.py:187 forms_common.py:392 models.py:1566
+#: forms_common.py:189 forms_common.py:394 models.py:1573
#: templates/ishtar/sheet_organization.html:15
#: templates/ishtar/sheet_person.html:37
#: templates/ishtar/wizard/wizard_person.html:35
msgid "Mobile phone"
msgstr "Téléphone portable"
-#: forms_common.py:211 forms_common.py:325 forms_common.py:449 models.py:2151
-#: models.py:2456 models.py:2874 templates/sheet_ope.html:85
+#: forms_common.py:213 forms_common.py:327 forms_common.py:451 models.py:2160
+#: models.py:2478 models.py:2898 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:23
@@ -296,209 +302,209 @@ msgstr "Téléphone portable"
msgid "Type"
msgstr "Type"
-#: forms_common.py:220 views.py:146
+#: forms_common.py:222 views.py:147
msgid "Organization search"
msgstr "Rechercher une organisation"
-#: forms_common.py:244
+#: forms_common.py:246
msgid "At least two items have to be selected."
msgstr "Au moins deux éléments doivent être sélectionnés."
-#: forms_common.py:262
+#: forms_common.py:264
msgid "Merge all items into"
msgstr "Fusionner tous les éléments dans"
-#: forms_common.py:296
+#: forms_common.py:298
msgid "Organization to merge"
msgstr "Organisation à fusionner"
-#: forms_common.py:323 forms_common.py:374 forms_common.py:447 models.py:2561
+#: forms_common.py:325 forms_common.py:376 forms_common.py:449 models.py:2583
#: templates/ishtar/sheet_organization.html:22
msgid "Surname"
msgstr "Prénom"
-#: forms_common.py:339 forms_common.py:434 views.py:111
+#: forms_common.py:341 forms_common.py:436 views.py:112
msgid "Person search"
msgstr "Rechercher une personne"
-#: forms_common.py:351
+#: forms_common.py:353
msgid "Person to merge"
msgstr "Personne à fusionner"
-#: forms_common.py:368 templates/ishtar/sheet_person.html:7
+#: forms_common.py:370 templates/ishtar/sheet_person.html:7
#: templates/ishtar/wizard/wizard_person.html:6
msgid "Identity"
msgstr "Identité"
-#: forms_common.py:371 forms_common.py:773 forms_common.py:822 models.py:2116
-#: models.py:2555 models.py:2557 models.py:2871 templates/sheet_ope.html:104
+#: forms_common.py:373 forms_common.py:781 forms_common.py:830 models.py:2125
+#: models.py:2577 models.py:2579 models.py:2895 templates/sheet_ope.html:104
#: templates/ishtar/blocks/window_tables/documents.html:7
msgid "Title"
msgstr "Titre"
-#: forms_common.py:372 models.py:2559
+#: forms_common.py:374 models.py:2581
msgid "Salutation"
msgstr "Formule d'appel"
-#: forms_common.py:378 models.py:2565
+#: forms_common.py:380 models.py:2587
msgid "Raw name"
msgstr "Nom brut"
-#: forms_common.py:381 models.py:1555
+#: forms_common.py:383 models.py:1562
msgid "Phone description"
msgstr "Type de téléphone"
-#: forms_common.py:384 models.py:1557 models.py:1559
+#: forms_common.py:386 models.py:1564 models.py:1566
msgid "Phone description 2"
msgstr "Type de téléphone 2"
-#: forms_common.py:386
+#: forms_common.py:388
msgid "Phone 2"
msgstr "Téléphone 2"
-#: forms_common.py:388 models.py:1563
+#: forms_common.py:390 models.py:1570
msgid "Phone description 3"
msgstr "Type de téléphone 3"
-#: forms_common.py:390 models.py:1561
+#: forms_common.py:392 models.py:1568
msgid "Phone 3"
msgstr "Téléphone 3"
-#: forms_common.py:395
+#: forms_common.py:397
msgid "Current organization"
msgstr "Organisation actuelle"
-#: forms_common.py:409 models.py:1544
+#: forms_common.py:411 models.py:1551
msgid "Other address: address"
msgstr "Autre adresse : adresse"
-#: forms_common.py:412 models.py:1547
+#: forms_common.py:414 models.py:1554
msgid "Other address: address complement"
msgstr "Autre adresse : complément d'adresse"
-#: forms_common.py:414 models.py:1548
+#: forms_common.py:416 models.py:1555
msgid "Other address: postal code"
msgstr "Autre adresse : code postal"
-#: forms_common.py:416 models.py:1550
+#: forms_common.py:418 models.py:1557
msgid "Other address: town"
msgstr "Autre adresse : ville"
-#: forms_common.py:418 models.py:1552
+#: forms_common.py:420 models.py:1559
msgid "Other address: country"
msgstr "Autre adresse : pays"
-#: forms_common.py:430
+#: forms_common.py:432
msgid "Already has an account"
msgstr "A déjà un compte"
-#: forms_common.py:445
+#: forms_common.py:447
msgid "Username"
msgstr "Nom d'utilisateur"
-#: forms_common.py:463
+#: forms_common.py:465
msgid "Account search"
msgstr "Rechercher un compte"
-#: forms_common.py:510 forms_common.py:550 forms_common.py:554 models.py:2508
+#: forms_common.py:512 forms_common.py:552 forms_common.py:556 models.py:2530
msgid "Person type"
msgstr "Type de personne"
-#: forms_common.py:566 forms_common.py:571 ishtar_menu.py:32
+#: forms_common.py:568 forms_common.py:573 ishtar_menu.py:32
msgid "Account"
msgstr "Compte"
-#: forms_common.py:575 wizards.py:1281
+#: forms_common.py:577 wizards.py:1305
msgid "New password"
msgstr "Nouveau mot de passe"
-#: forms_common.py:578
+#: forms_common.py:580
msgid "New password (confirmation)"
msgstr "Nouveau mot de passe (confirmation)"
-#: forms_common.py:599
+#: forms_common.py:607
msgid "Your password and confirmation password do not match."
msgstr "La vérification du mot de passe a échoué."
-#: forms_common.py:604
+#: forms_common.py:612
msgid "You must provide a correct password."
msgstr "Vous devez fournir un mot de passe correct."
-#: forms_common.py:612
+#: forms_common.py:620
msgid "This username already exists."
msgstr "Ce nom d'utilisateur existe déjà."
-#: forms_common.py:619
+#: forms_common.py:627
msgid "Send the new password by email?"
msgstr "Envoyer le nouveau mot de passe par courriel ?"
-#: forms_common.py:628 forms_common.py:641 models.py:2954
+#: forms_common.py:636 forms_common.py:649 models.py:2978
msgid "Towns"
msgstr "Communes"
-#: forms_common.py:638
+#: forms_common.py:646
msgid "There are identical towns."
msgstr "Il y a des communes identiques."
-#: forms_common.py:722
+#: forms_common.py:730
msgid "Only one choice can be checked."
msgstr "Seul un choix peut être coché."
-#: forms_common.py:770
+#: forms_common.py:778
msgid "Documentation informations"
msgstr "Information sur le document"
-#: forms_common.py:775 forms_common.py:823 models.py:2117 models.py:2846
+#: forms_common.py:783 forms_common.py:831 models.py:2126 models.py:2870
msgid "Source type"
msgstr "Type de document"
-#: forms_common.py:777 forms_common.py:824 templates/sheet_ope.html:84
+#: forms_common.py:785 forms_common.py:832 templates/sheet_ope.html:84
msgid "Reference"
msgstr "Référence"
-#: forms_common.py:780 forms_common.py:825
+#: forms_common.py:788 forms_common.py:833
msgid "Internal reference"
msgstr "Référence interne"
-#: forms_common.py:783 models.py:2885
+#: forms_common.py:791 models.py:2909
msgid "Numerical ressource (web address)"
msgstr "Ressource numérique (adresse web)"
-#: forms_common.py:784 models.py:2887
+#: forms_common.py:792 models.py:2911
msgid "Receipt date"
msgstr "Date de réception"
-#: forms_common.py:786 models.py:2283 models.py:2889
+#: forms_common.py:794 models.py:2292 models.py:2913
msgid "Creation date"
msgstr "Date de création"
-#: forms_common.py:789 models.py:2892
+#: forms_common.py:797 models.py:2916
msgid "Receipt date in documentation"
msgstr "Date de réception en documentation"
-#: forms_common.py:791 forms_common.py:827 models.py:377 models.py:689
-#: models.py:2011 models.py:2569 models.py:2899
+#: forms_common.py:799 forms_common.py:835 models.py:379 models.py:696
+#: models.py:2020 models.py:2591 models.py:2923
msgid "Comment"
msgstr "Commentaire"
-#: forms_common.py:793 forms_common.py:826 models.py:1098 models.py:1762
-#: models.py:1943 models.py:1985 models.py:2898 templates/sheet_ope.html:128
+#: forms_common.py:801 forms_common.py:834 models.py:1105 models.py:1769
+#: models.py:1952 models.py:1994 models.py:2922 templates/sheet_ope.html:128
msgid "Description"
msgstr "Description"
-#: forms_common.py:796 models.py:2900
+#: forms_common.py:804 models.py:2924
msgid "Additional information"
msgstr "Information supplémentaire"
-#: forms_common.py:798 forms_common.py:830 models.py:2902
+#: forms_common.py:806 forms_common.py:838 models.py:2926
msgid "Has a duplicate"
msgstr "Existe en doublon"
-#: forms_common.py:801
+#: forms_common.py:809
msgid "Image"
msgstr "Image"
-#: forms_common.py:802
+#: forms_common.py:810
#, python-format
msgid ""
"<p>Heavy images are resized to: %(width)dx%(height)d (ratio is preserved).</"
@@ -507,32 +513,32 @@ msgstr ""
"<p>Les images trop grandes sont retaillées en : %(width)dx%(height)d (le "
"ratio est conservé).</p>"
-#: forms_common.py:819 forms_common.py:848 forms_common.py:882 models.py:2826
+#: forms_common.py:827 forms_common.py:856 forms_common.py:890 models.py:2850
#: templates/ishtar/wizard/wizard_person_deletion.html:124
msgid "Author"
msgstr "Auteur"
-#: forms_common.py:829
+#: forms_common.py:837
msgid "Additional informations"
msgstr "Informations supplémentaires"
-#: forms_common.py:840
+#: forms_common.py:848
msgid "Would you like to delete this documentation?"
msgstr "Voulez-vous supprimer ce document ?"
-#: forms_common.py:856 models.py:2118 models.py:2813 models.py:2823
+#: forms_common.py:864 models.py:2127 models.py:2837 models.py:2847
msgid "Author type"
msgstr "Type d'auteur"
-#: forms_common.py:875
+#: forms_common.py:883
msgid "Author selection"
msgstr "Sélection d'auteur"
-#: forms_common.py:889
+#: forms_common.py:897
msgid "There are identical authors."
msgstr "Il y a des auteurs identiques."
-#: forms_common.py:893 models.py:2827 models.py:2881
+#: forms_common.py:901 models.py:2851 models.py:2905
#: templates/sheet_ope.html:106
#: templates/ishtar/blocks/window_tables/documents.html:9
msgid "Authors"
@@ -550,7 +556,7 @@ msgstr "Ajout/modification"
msgid "Deletion"
msgstr "Suppression"
-#: ishtar_menu.py:39 models.py:1270 views.py:1549
+#: ishtar_menu.py:39 models.py:1277 views.py:1574
msgid "Global variables"
msgstr "Variables globales"
@@ -578,147 +584,147 @@ msgstr "Fusion automatique"
msgid "Manual merge"
msgstr "Fusion manuelle"
-#: ishtar_menu.py:109 models.py:2294
+#: ishtar_menu.py:109 models.py:2303
msgid "Imports"
msgstr "Imports"
-#: ishtar_menu.py:112 views.py:1557
+#: ishtar_menu.py:112 views.py:1582
msgid "New import"
msgstr "Nouvel import"
-#: ishtar_menu.py:116 views.py:1571
+#: ishtar_menu.py:116 views.py:1596
msgid "Current imports"
msgstr "Imports en cours"
-#: ishtar_menu.py:120 views.py:1607
+#: ishtar_menu.py:120 views.py:1632
msgid "Old imports"
msgstr "Anciens imports"
-#: models.py:184
+#: models.py:186
msgid "Not a valid item."
msgstr "Élément invalide."
-#: models.py:197
+#: models.py:199
msgid "A selected item is not a valid item."
msgstr "Un élément sélectionné n'est pas valide."
-#: models.py:208
+#: models.py:210
msgid "This item already exists."
msgstr "Cet élément existe déjà."
-#: models.py:373 models.py:688 models.py:1509 models.py:1521 models.py:1940
+#: models.py:375 models.py:695 models.py:1516 models.py:1528 models.py:1949
msgid "Label"
msgstr "Libellé"
-#: models.py:375
+#: models.py:377
msgid "Textual ID"
msgstr "Identifiant textuel"
-#: models.py:378 models.py:691 models.py:1478
+#: models.py:380 models.py:698 models.py:1485
msgid "Available"
msgstr "Disponible"
-#: models.py:715 models.py:2057
+#: models.py:722 models.py:2066
msgid "Key"
msgstr "Clé"
-#: models.py:721
+#: models.py:728
msgid "Specific key to an import"
msgstr "Clé spécifique à un import"
-#: models.py:813
+#: models.py:820
msgid "Last editor"
msgstr "Dernier éditeur"
-#: models.py:816
+#: models.py:823
msgid "Creator"
msgstr "Créateur"
-#: models.py:958 models.py:2965 models.py:3021
+#: models.py:965 models.py:2989 models.py:3045
msgid "Order"
msgstr "Ordre"
-#: models.py:959
+#: models.py:966
msgid "Symmetrical"
msgstr "Symétrique"
-#: models.py:960
+#: models.py:967
msgid "Tiny label"
msgstr "Libellé court"
-#: models.py:974
+#: models.py:981
msgid "Cannot have symmetrical and an inverse_relation"
msgstr "Ne peut pas être symétrique et avoir une relation inverse"
-#: models.py:1090
+#: models.py:1097
msgid "Euro"
msgstr "Euro"
-#: models.py:1091
+#: models.py:1098
msgid "US dollar"
msgstr "Dollar US"
-#: models.py:1097 models.py:1760
+#: models.py:1104 models.py:1767
msgid "Slug"
msgstr "Identifiant texte"
-#: models.py:1100
+#: models.py:1107
msgid "CSS color code for base module"
msgstr "Code couleur CSS pour le tronc commun"
-#: models.py:1102
+#: models.py:1109
msgid "Files module"
msgstr "Module Dossiers"
-#: models.py:1104
+#: models.py:1111
msgid "CSS color code for files module"
msgstr "Code couleur CSS pour le module Dossier"
-#: models.py:1106
+#: models.py:1113
msgid "Context records module"
msgstr "Module Unités d'Enregistrement"
-#: models.py:1109
+#: models.py:1116
msgid "CSS color code for context record module"
msgstr "Code couleur CSS pour le module Unité d'Enregistrement"
-#: models.py:1111
+#: models.py:1118
msgid "Finds module"
msgstr "Module Mobilier"
-#: models.py:1112
+#: models.py:1119
msgid "Need context records module"
msgstr "Nécessite le module Unités d'Enregistrement"
-#: models.py:1114
+#: models.py:1121
msgid "CSS color code for find module"
msgstr "Code couleur CSS pour le module Mobilier"
-#: models.py:1117
+#: models.py:1124
msgid "Warehouses module"
msgstr "Module Dépôts"
-#: models.py:1118
+#: models.py:1125
msgid "Need finds module"
msgstr "Nécessite le module mobilier"
-#: models.py:1120
+#: models.py:1127
msgid "CSS code for warehouse module"
msgstr "Code couleur CSS pour le module Dépôt"
-#: models.py:1122
+#: models.py:1129
msgid "Mapping module"
msgstr "Module cartographique"
-#: models.py:1124
+#: models.py:1131
msgid "CSS code for mapping module"
msgstr "Code couleur CSS pour le module cartographique"
-#: models.py:1127
+#: models.py:1134
msgid "Home page"
msgstr "Page d'accueil"
-#: models.py:1128
+#: models.py:1135
#, python-brace-format
msgid ""
"Homepage of Ishtar - if not defined a default homepage will appear. Use the "
@@ -728,11 +734,11 @@ msgstr ""
"défaut apparaît. Utiliser la syntaxe Markdown. {random_image} peut être "
"utilisé pour afficher une image au hasard."
-#: models.py:1132
+#: models.py:1139
msgid "File external id"
msgstr "Identifiant externe de fichier"
-#: models.py:1134
+#: models.py:1141
msgid ""
"Formula to manage file external ID. Change this with care. With incorrect "
"formula, the application might be unusable and import of external data can "
@@ -742,11 +748,11 @@ msgstr ""
"précaution. Une formule incorrecte peut rendre l'application inutilisable et "
"l'import de données externes peut alors être destructif."
-#: models.py:1139
+#: models.py:1146
msgid "Parcel external id"
msgstr "Identifiant externe de parcelle"
-#: models.py:1142
+#: models.py:1149
msgid ""
"Formula to manage parcel external ID. Change this with care. With incorrect "
"formula, the application might be unusable and import of external data can "
@@ -756,11 +762,11 @@ msgstr ""
"précaution. Une formule incorrecte peut rendre l'application inutilisable et "
"l'import de données externes peut alors être destructif."
-#: models.py:1147
+#: models.py:1154
msgid "Context record external id"
msgstr "Identifiant externe d'unité d'enregistrement"
-#: models.py:1149
+#: models.py:1156
msgid ""
"Formula to manage context record external ID. Change this with care. With "
"incorrect formula, the application might be unusable and import of external "
@@ -770,11 +776,11 @@ msgstr ""
"manipuler avec précaution. Une formule incorrecte peut rendre l'application "
"inutilisable et l'import de données externes peut alors être destructif."
-#: models.py:1154
+#: models.py:1161
msgid "Base find external id"
msgstr "Identifiant externe de mobilier de base"
-#: models.py:1156
+#: models.py:1163
msgid ""
"Formula to manage base find external ID. Change this with care. With "
"incorrect formula, the application might be unusable and import of external "
@@ -784,11 +790,11 @@ msgstr ""
"manipuler avec précaution. Une formule incorrecte peut rendre l'application "
"inutilisable et l'import de données externes peut alors être destructif."
-#: models.py:1161
+#: models.py:1168
msgid "Find external id"
msgstr "Identifiant externe de mobilier"
-#: models.py:1163
+#: models.py:1170
msgid ""
"Formula to manage find external ID. Change this with care. With incorrect "
"formula, the application might be unusable and import of external data can "
@@ -798,11 +804,11 @@ msgstr ""
"précaution. Une formule incorrecte peut rendre l'application inutilisable et "
"l'import de données externes peut alors être destructif."
-#: models.py:1168
+#: models.py:1175
msgid "Container external id"
msgstr "ID externe du contenant"
-#: models.py:1170
+#: models.py:1177
msgid ""
"Formula to manage container external ID. Change this with care. With "
"incorrect formula, the application might be unusable and import of external "
@@ -812,11 +818,11 @@ msgstr ""
"précaution. Une formule incorrecte peut rendre l'application inutilisable et "
"l'import de données externes peut alors être destructif."
-#: models.py:1175
+#: models.py:1182
msgid "Warehouse external id"
msgstr "ID externe du dépôt"
-#: models.py:1177
+#: models.py:1184
msgid ""
"Formula to manage warehouse external ID. Change this with care. With "
"incorrect formula, the application might be unusable and import of external "
@@ -826,11 +832,11 @@ msgstr ""
"précaution. Une formule incorrecte peut rendre l'application inutilisable et "
"l'import de données externes peut alors être destructif."
-#: models.py:1182
+#: models.py:1189
msgid "Raw name for person"
msgstr "Nom brut pour une personne"
-#: models.py:1184
+#: models.py:1191
msgid ""
"Formula to manage person raw_name. Change this with care. With incorrect "
"formula, the application might be unusable and import of external data can "
@@ -840,43 +846,43 @@ msgstr ""
"Une formule incorrecte peut rendre l'application inutilisable et l'import de "
"données externes peut alors être destructif."
-#: models.py:1188
+#: models.py:1195
msgid "Current active"
msgstr "Actuellement utilisé"
-#: models.py:1189
+#: models.py:1196
msgid "Currency"
msgstr "Devise"
-#: models.py:1193
+#: models.py:1200
msgid "Ishtar site profile"
msgstr "Profil d'instance Ishtar"
-#: models.py:1194
+#: models.py:1201
msgid "Ishtar site profiles"
msgstr "Profils d'instance Ishtar"
-#: models.py:1263
+#: models.py:1270
msgid "Variable name"
msgstr "Nom de la variable"
-#: models.py:1264
+#: models.py:1271
msgid "Description of the variable"
msgstr "Description de la variable"
-#: models.py:1266 models.py:2058
+#: models.py:1273 models.py:2067
msgid "Value"
msgstr "Valeur"
-#: models.py:1269
+#: models.py:1276
msgid "Global variable"
msgstr "Variable globale"
-#: models.py:1379 models.py:1409
+#: models.py:1386 models.py:1416
msgid "Total"
msgstr "Total"
-#: models.py:1386 models.py:1510 models.py:1522
+#: models.py:1393 models.py:1517 models.py:1529
#: templates/ishtar/sheet_person.html:22
#: templates/ishtar/dashboards/dashboard_main_detail.html:141
#: templates/ishtar/dashboards/dashboard_main_detail_users.html:26
@@ -884,752 +890,752 @@ msgstr "Total"
msgid "Number"
msgstr "Nombre"
-#: models.py:1473
+#: models.py:1480
msgid "Administrative Act"
msgstr "Acte administratif"
-#: models.py:1477
+#: models.py:1484
msgid "Associated object"
msgstr "Objet associé"
-#: models.py:1481
+#: models.py:1488
msgid "Document template"
msgstr "Patron de document"
-#: models.py:1482
+#: models.py:1489
msgid "Document templates"
msgstr "Patrons de document"
-#: models.py:1513 models.py:1523 models.py:2278
+#: models.py:1520 models.py:1530 models.py:2287
msgid "State"
msgstr "État"
-#: models.py:1527 templates/blocks/JQueryAdvancedTown.html:12
+#: models.py:1534 templates/blocks/JQueryAdvancedTown.html:12
msgid "Department"
msgstr "Département"
-#: models.py:1528
+#: models.py:1535
msgid "Departments"
msgstr "Départements"
-#: models.py:1565
+#: models.py:1572
msgid "Raw phone"
msgstr "Téléphone brut"
-#: models.py:1571
+#: models.py:1578
msgid "Alternative address is prefered"
msgstr "L'adresse alternative est préférée"
-#: models.py:1610
+#: models.py:1617
msgid "Tel: "
msgstr "Tél :"
-#: models.py:1614
+#: models.py:1621
msgid "Mobile: "
msgstr "Mobile :"
-#: models.py:1618
+#: models.py:1625
msgid "Email: "
msgstr "Courriel :"
-#: models.py:1623
+#: models.py:1630
msgid "Merge key"
msgstr "Clé de fusion"
-#: models.py:1697
+#: models.py:1704
msgid "Organization types"
msgstr "Types d'organisation"
-#: models.py:1743
+#: models.py:1750
msgid "Class name"
msgstr "Nom de la classe"
-#: models.py:1746
+#: models.py:1753
msgid "Importer - Model"
msgstr "Importeur - Modèle"
-#: models.py:1747
+#: models.py:1754
msgid "Importer - Models"
msgstr "Importeur - Modèles"
-#: models.py:1764 templates/ishtar/dashboards/dashboard_main.html:25
+#: models.py:1771 templates/ishtar/dashboards/dashboard_main.html:25
msgid "Users"
msgstr "Utilisateurs"
-#: models.py:1767
+#: models.py:1774
msgid "Associated model"
msgstr "Modèle associé"
-#: models.py:1770
+#: models.py:1777
msgid "Models that can accept new items"
msgstr "Modèles qui peuvent accepter de nouveaux éléments"
-#: models.py:1771
+#: models.py:1778
msgid "Leave blank for no restrictions"
msgstr "Laissez vide pour aucune restriction"
-#: models.py:1773
+#: models.py:1780
msgid "Is template"
msgstr "Est un patron"
-#: models.py:1774
+#: models.py:1781
msgid "Unicity keys (separator \";\")"
msgstr "Clés d'unicité (séparateur « ; »)"
-#: models.py:1778
+#: models.py:1785
msgid "Importer - Type"
msgstr "Importeur - Type"
-#: models.py:1779
+#: models.py:1786
msgid "Importer - Types"
msgstr "Importeur - Types"
-#: models.py:1872
+#: models.py:1881
msgid "Importer - Default"
msgstr "Importeur - Par défaut"
-#: models.py:1873
+#: models.py:1882
msgid "Importer - Defaults"
msgstr "Importeur - Par défaut"
-#: models.py:1908
+#: models.py:1917
msgid "Importer - Default value"
msgstr "Importeur - Valeur par défaut"
-#: models.py:1909
+#: models.py:1918
msgid "Importer - Default values"
msgstr "Importeur - Valeurs par défaut"
-#: models.py:1942
+#: models.py:1951
msgid "Column number"
msgstr "Numéro de colonne"
-#: models.py:1945
+#: models.py:1954
msgid "Required"
msgstr "Requis"
-#: models.py:1948
+#: models.py:1957
msgid "Importer - Column"
msgstr "Importeur - Colonne"
-#: models.py:1949
+#: models.py:1958
msgid "Importer - Columns"
msgstr "Importeur - Colonnes"
-#: models.py:1969
+#: models.py:1978
msgid "Field name"
msgstr "Nom du champ"
-#: models.py:1971 models.py:2005
+#: models.py:1980 models.py:2014
msgid "Force creation of new items"
msgstr "Forcer la création de nouveaux éléments"
-#: models.py:1973 models.py:2007
+#: models.py:1982 models.py:2016
msgid "Concatenate with existing"
msgstr "Concaténer avec l'existant"
-#: models.py:1975 models.py:2009
+#: models.py:1984 models.py:2018
msgid "Concatenate character"
msgstr "Caractère de concaténation"
-#: models.py:1979
+#: models.py:1988
msgid "Importer - Duplicate field"
msgstr "Importeur - Champ dupliqué"
-#: models.py:1980
+#: models.py:1989
msgid "Importer - Duplicate fields"
msgstr "Importeur - Champs dupliqués"
-#: models.py:1987
+#: models.py:1996
msgid "Regular expression"
msgstr "Expression régulière"
-#: models.py:1990
+#: models.py:1999
msgid "Importer - Regular expression"
msgstr "Importeur - Expression régulière"
-#: models.py:1991
+#: models.py:2000
msgid "Importer - Regular expressions"
msgstr "Importeur - Expressions régulières"
-#: models.py:2014
+#: models.py:2023
msgid "Importer - Target"
msgstr "Importeur - Cible"
-#: models.py:2015
+#: models.py:2024
msgid "Importer - Targets"
msgstr "Importeur - Cibles"
-#: models.py:2039 views.py:545
+#: models.py:2048 views.py:549
msgid "True"
msgstr "Oui"
-#: models.py:2040 views.py:547
+#: models.py:2049 views.py:551
msgid "False"
msgstr "Non"
-#: models.py:2059
+#: models.py:2068
msgid "Is set"
msgstr "Est défini"
-#: models.py:2066
+#: models.py:2075
msgid "Importer - Target key"
msgstr "Importeur - Clé de rapprochement"
-#: models.py:2067
+#: models.py:2076
msgid "Importer - Targets keys"
msgstr "Importeur - Clés de rapprochement"
-#: models.py:2119 models.py:2877
+#: models.py:2128 models.py:2901
msgid "Format"
msgstr "Format"
-#: models.py:2120 models.py:2969
+#: models.py:2129 models.py:2993
msgid "Operation type"
msgstr "Type d'opération"
-#: models.py:2121
+#: models.py:2130
msgid "Period"
msgstr "Périodes"
-#: models.py:2122
+#: models.py:2131
msgid "Report state"
msgstr "État de rapport"
-#: models.py:2123
+#: models.py:2132
msgid "Remain type"
msgstr "Type de vestige"
-#: models.py:2124
+#: models.py:2133
msgid "Unit"
msgstr "Unité"
-#: models.py:2125
+#: models.py:2134
msgid "Activity type"
msgstr "Type d'activité"
-#: models.py:2126
+#: models.py:2135
msgid "Material"
msgstr "Matériau"
-#: models.py:2128
+#: models.py:2137
msgid "Conservatory state"
msgstr "État de conservation"
-#: models.py:2129
+#: models.py:2138
msgid "Container type"
msgstr "Type de contenant"
-#: models.py:2130
+#: models.py:2139
msgid "Preservation type"
msgstr "Type de conservation"
-#: models.py:2131
+#: models.py:2140
msgid "Object type"
msgstr "Type d'objet"
-#: models.py:2132
+#: models.py:2141
msgid "Integrity type"
msgstr "Type d'intégrité"
-#: models.py:2133
+#: models.py:2142
msgid "Remarkability type"
msgstr "Type de remarquabilité"
-#: models.py:2134
+#: models.py:2143
msgid "Batch type"
msgstr "Type de lot"
-#: models.py:2136
+#: models.py:2145
msgid "Identification type"
msgstr "Type d'identification"
-#: models.py:2138
+#: models.py:2147
msgid "Context record relation type"
msgstr "Type de relations entre Unités d'Enregistrement"
-#: models.py:2139 models.py:3027
+#: models.py:2148 models.py:3051
msgid "Spatial reference system"
msgstr "Système de référence spatiale"
-#: models.py:2140 models.py:2855
+#: models.py:2149 models.py:2879
msgid "Support type"
msgstr "Type de support"
-#: models.py:2141 models.py:2520
+#: models.py:2150 models.py:2542
msgid "Title type"
msgstr "Type de titre"
-#: models.py:2147
+#: models.py:2156
msgid "Integer"
msgstr "Entier"
-#: models.py:2148
+#: models.py:2157
msgid "Float"
msgstr "Nombre à virgule"
-#: models.py:2149
+#: models.py:2158
msgid "String"
msgstr "Chaîne de caractères"
-#: models.py:2150 templates/sheet_ope.html:86
+#: models.py:2159 templates/sheet_ope.html:86
msgid "Date"
msgstr "Date"
-#: models.py:2152 templates/sheet_ope.html:61 templates/sheet_ope.html.py:83
+#: models.py:2161 templates/sheet_ope.html:61 templates/sheet_ope.html.py:83
#: templates/ishtar/dashboards/dashboard_main_detail.html:126
msgid "Year"
msgstr "Année"
-#: models.py:2153
+#: models.py:2162
msgid "String to boolean"
msgstr "Chaîne de caractères vers booléen"
-#: models.py:2154
+#: models.py:2163
msgctxt "filesystem"
msgid "File"
msgstr "Fichier"
-#: models.py:2155
+#: models.py:2164
msgid "Unknow type"
msgstr "Type inconnu"
-#: models.py:2171
+#: models.py:2180
msgid "4 digit year. e.g.: \"2015\""
msgstr "Année sur 4 chiffres. Exemple : « 2015 »"
-#: models.py:2172
+#: models.py:2181
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:2173
+#: models.py:2182
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:2183
+#: models.py:2192
msgid "Options"
msgstr "Options"
-#: models.py:2185
+#: models.py:2194
msgid "Split character(s)"
msgstr "Caractère(s) de séparation"
-#: models.py:2189
+#: models.py:2198
msgid "Importer - Formater type"
msgstr "Importeur - Type de mise en forme"
-#: models.py:2190
+#: models.py:2199
msgid "Importer - Formater types"
msgstr "Importeur - Types de mise en forme"
-#: models.py:2242 templates/ishtar/dashboards/dashboard_main_detail.html:63
+#: models.py:2251 templates/ishtar/dashboards/dashboard_main_detail.html:63
msgid "Created"
msgstr "Créé"
-#: models.py:2243
+#: models.py:2252
msgid "Analyse in progress"
msgstr "Analyse en cours"
-#: models.py:2244
+#: models.py:2253
msgid "Analysed"
msgstr "Analysé"
-#: models.py:2245
+#: models.py:2254
msgid "Import pending"
msgstr "Import en attente"
-#: models.py:2246
+#: models.py:2255
msgid "Import in progress"
msgstr "Import en cours"
-#: models.py:2247
+#: models.py:2256
msgid "Finished with errors"
msgstr "Terminé avec des erreurs"
-#: models.py:2248
+#: models.py:2257
msgid "Finished"
msgstr "Terminé"
-#: models.py:2249
+#: models.py:2258
msgid "Archived"
msgstr "Archivé"
-#: models.py:2262
+#: models.py:2271
msgid "Imported file"
msgstr "Fichier importé"
-#: models.py:2264
+#: models.py:2273
msgid "Associated images (zip file)"
msgstr "Images associées (fichier zip)"
-#: models.py:2266
+#: models.py:2275
msgid "Encoding"
msgstr "Codage"
-#: models.py:2268
+#: models.py:2277
msgid "Skip lines"
msgstr "Nombre de lignes d'entête"
-#: models.py:2269 templates/ishtar/import_list.html:47
+#: models.py:2278 templates/ishtar/import_list.html:47
msgid "Error file"
msgstr "Fichier erreur"
-#: models.py:2272
+#: models.py:2281
msgid "Result file"
msgstr "Fichier résultant"
-#: models.py:2275 templates/ishtar/import_list.html:53
+#: models.py:2284 templates/ishtar/import_list.html:53
msgid "Match file"
msgstr "Fichier de correspondance"
-#: models.py:2281
+#: models.py:2290
msgid "Conservative import"
msgstr "Import conservateur"
-#: models.py:2286
+#: models.py:2295
msgid "End date"
msgstr "Date de fin"
-#: models.py:2288
+#: models.py:2297
msgid "Remaining seconds"
msgstr "Secondes restantes"
-#: models.py:2293
+#: models.py:2302
msgid "Import"
msgstr "Import"
-#: models.py:2310
+#: models.py:2332
msgid "Analyse"
msgstr "Analyser"
-#: models.py:2312 models.py:2315
+#: models.py:2334 models.py:2337
msgid "Re-analyse"
msgstr "Analyser de nouveau "
-#: models.py:2313
+#: models.py:2335
msgid "Launch import"
msgstr "Lancer l'import"
-#: models.py:2316
+#: models.py:2338
msgid "Re-import"
msgstr "Ré-importer"
-#: models.py:2317
+#: models.py:2339
msgid "Archive"
msgstr "Archiver"
-#: models.py:2319
+#: models.py:2341
msgid "Unarchive"
msgstr "Désarchiver"
-#: models.py:2320 widgets.py:130 templates/ishtar/form_delete.html:11
+#: models.py:2342 widgets.py:130 templates/ishtar/form_delete.html:11
msgid "Delete"
msgstr "Supprimer"
-#: models.py:2461
+#: models.py:2483
msgid "Organizations"
msgstr "Organisations"
-#: models.py:2463
+#: models.py:2485
msgid "Can view all Organizations"
msgstr "Peut voir toutes les Organisations"
-#: models.py:2464
+#: models.py:2486
msgid "Can view own Organization"
msgstr "Peut voir sa propre Organisation"
-#: models.py:2465
+#: models.py:2487
msgid "Can add own Organization"
msgstr "Peut ajouter sa propre Organisation"
-#: models.py:2467
+#: models.py:2489
msgid "Can change own Organization"
msgstr "Peut modifier sa propre Organisation"
-#: models.py:2469
+#: models.py:2491
msgid "Can delete own Organization"
msgstr "Peut supprimer sa propre Organisation"
-#: models.py:2504
+#: models.py:2526
msgid "Groups"
msgstr "Groupes"
-#: models.py:2509
+#: models.py:2531
msgid "Person types"
msgstr "Types de personne"
-#: models.py:2521
+#: models.py:2543
msgid "Title types"
msgstr "Types de titre"
-#: models.py:2530
+#: models.py:2552
msgid "Mr"
msgstr "M."
-#: models.py:2531
+#: models.py:2553
msgid "Miss"
msgstr "Mlle"
-#: models.py:2532
+#: models.py:2554
msgid "Mr and Mrs"
msgstr "M. et Mme"
-#: models.py:2533
+#: models.py:2555
msgid "Mrs"
msgstr "Mme"
-#: models.py:2534
+#: models.py:2556
msgid "Doctor"
msgstr "Dr."
-#: models.py:2567
+#: models.py:2589
msgid "Contact type"
msgstr "Type de contact"
-#: models.py:2570 models.py:2634
+#: models.py:2592 models.py:2656
msgid "Types"
msgstr "Types"
-#: models.py:2573
+#: models.py:2595
msgid "Is attached to"
msgstr "Est rattaché à"
-#: models.py:2578
+#: models.py:2600
msgid "Persons"
msgstr "Personnes"
-#: models.py:2580
+#: models.py:2602
msgid "Can view all Persons"
msgstr "Peut voir toutes les Personnes"
-#: models.py:2581
+#: models.py:2603
msgid "Can view own Person"
msgstr "Peut voir sa propre Personne"
-#: models.py:2582
+#: models.py:2604
msgid "Can add own Person"
msgstr "Peut ajouter sa propre Personne"
-#: models.py:2583
+#: models.py:2605
msgid "Can change own Person"
msgstr "Peut modifier sa propre Personne"
-#: models.py:2584
+#: models.py:2606
msgid "Can delete own Person"
msgstr "Peut supprimer sa propre Personne"
-#: models.py:2762
+#: models.py:2784
msgid "Advanced shortcut menu"
msgstr "Menu de raccourci (avancé)"
-#: models.py:2765
+#: models.py:2787
msgid "Ishtar user"
msgstr "Utilisateur d'Ishtar"
-#: models.py:2766
+#: models.py:2788
msgid "Ishtar users"
msgstr "Utilisateurs d'Ishtar"
-#: models.py:2808
+#: models.py:2832
msgid "To modify the password use the form in Auth > User"
msgstr ""
"Pour modifier le mot de passe, utilisez le formulaire dans Authentification "
"> Utilisateurs"
-#: models.py:2814
+#: models.py:2838
msgid "Author types"
msgstr "Types d'auteur"
-#: models.py:2847
+#: models.py:2871
msgid "Source types"
msgstr "Types de document"
-#: models.py:2856
+#: models.py:2880
msgid "Support types"
msgstr "Types de support"
-#: models.py:2863
+#: models.py:2887
msgid "Format type"
msgstr "Type de format"
-#: models.py:2864
+#: models.py:2888
msgid "Format types"
msgstr "Types de format"
-#: models.py:2872
+#: models.py:2896
msgid "External ID"
msgstr "Identifiant externe"
-#: models.py:2875
+#: models.py:2899
msgid "Support"
msgstr "Support"
-#: models.py:2879
+#: models.py:2903
msgid "Scale"
msgstr "Échelle"
-#: models.py:2893
+#: models.py:2917
msgid "Item number"
msgstr "Numéro d'élément"
-#: models.py:2894
+#: models.py:2918
msgid "Ref."
msgstr "Réf."
-#: models.py:2897
+#: models.py:2921
msgid "Internal ref."
msgstr "Réf. interne"
-#: models.py:2940
+#: models.py:2964
msgid "Surface (m2)"
msgstr "Surface (m2)"
-#: models.py:2941 templates/sheet_ope.html:46 templates/sheet_ope.html.py:107
+#: models.py:2965 templates/sheet_ope.html:46 templates/sheet_ope.html.py:107
msgid "Localisation"
msgstr "Localisation"
-#: models.py:2966
+#: models.py:2990
msgid "Is preventive"
msgstr "Est du préventif"
-#: models.py:2970
+#: models.py:2994
msgid "Operation types"
msgstr "Types d'opération"
-#: models.py:2999
+#: models.py:3023
msgid "Preventive"
msgstr "Préventif"
-#: models.py:3000
+#: models.py:3024
msgid "Research"
msgstr "Programmé"
-#: models.py:3023
+#: models.py:3047
msgid "Authority name"
msgstr "Registre"
-#: models.py:3024
+#: models.py:3048
msgid "Authority SRID"
msgstr "SRID"
-#: models.py:3028
+#: models.py:3052
msgid "Spatial reference systems"
msgstr "Systèmes de référence spatiale"
-#: utils.py:84
+#: utils.py:100
msgid " (...)"
msgstr " (...)"
-#: utils.py:130
+#: utils.py:146
msgid "Load another random image?"
msgstr "Charger une autre image au hasard ?"
-#: views.py:118
+#: views.py:119
msgid "New person"
msgstr "Ajouter une personne"
-#: views.py:126
+#: views.py:127
msgid "Person modification"
msgstr "Modifier une personne"
-#: views.py:141
+#: views.py:142
msgid "Person deletion"
msgstr "Supprimer une personne"
-#: views.py:152
+#: views.py:153
msgid "New organization"
msgstr "Ajouter une organisation"
-#: views.py:159
+#: views.py:160
msgid "Organization modification"
msgstr "Modifier une organisation"
-#: views.py:175
+#: views.py:176
msgid "Organization deletion"
msgstr "Supprimer une organisation"
-#: views.py:182
+#: views.py:183
msgid "Account management"
msgstr "Gérer les comptes"
-#: views.py:188
+#: views.py:189
msgid "Account deletion"
msgstr "Supprimer un compte"
-#: views.py:240
+#: views.py:241
msgid "Archaeological file"
msgstr "Dossier"
-#: views.py:241
+#: views.py:242
msgid "Operation"
msgstr "Opération"
-#: views.py:243
+#: views.py:244
msgid "Context record"
msgstr "Unité d'Enregistrement"
-#: views.py:245
+#: views.py:246
msgid "Find"
msgstr "Mobilier"
-#: views.py:247
+#: views.py:248
msgid "Treatment request"
msgstr "Demande de traitement"
-#: views.py:248
+#: views.py:249
msgid "Treatment"
msgstr "Traitement"
-#: views.py:1304 views.py:1347
+#: views.py:1329 views.py:1372
msgid "Operation not permitted."
msgstr "Opération non permise."
-#: views.py:1306
+#: views.py:1331
#, python-format
msgid "New %s"
msgstr "Nouveau %s"
-#: views.py:1365 views.py:1415
+#: views.py:1390 views.py:1440
msgid "Archaeological files"
msgstr "Dossiers"
-#: views.py:1366 views.py:1419
+#: views.py:1391 views.py:1444
msgid "Operations"
msgstr "Opérations"
-#: views.py:1368 views.py:1423
+#: views.py:1393 views.py:1448
msgid "Context records"
msgstr "Unités d'Enregistrement"
-#: views.py:1370 views.py:1426
+#: views.py:1395 views.py:1451
msgid "Finds"
msgstr "Mobilier"
-#: views.py:1619 templates/ishtar/import_list.html:43
+#: views.py:1644 templates/ishtar/import_list.html:43
msgid "Link unmatched items"
msgstr "Associer les éléments non rapprochés"
-#: views.py:1634
+#: views.py:1659
msgid "Delete import"
msgstr "Supprimer un import"
-#: views.py:1673
+#: views.py:1698
msgid "Merge persons"
msgstr "Fusionner des personnes"
-#: views.py:1697
+#: views.py:1722
msgid "Select the main person"
msgstr "Choisir la personne principale"
-#: views.py:1706
+#: views.py:1731
msgid "Merge organization"
msgstr "Fusionner des organisations"
-#: views.py:1716
+#: views.py:1741
msgid "Select the main organization"
msgstr "Sélectionner l'organisation principale"
-#: views.py:1756 views.py:1772
+#: views.py:1781 views.py:1797
msgid "Corporation manager"
msgstr "Représentant de la personne morale"
@@ -1649,15 +1655,15 @@ msgstr "Chargement..."
msgid "Remove"
msgstr "Enlever"
-#: wizards.py:343 templates/ishtar/import_delete.html:20
+#: wizards.py:344 templates/ishtar/import_delete.html:20
msgid "Yes"
msgstr "Oui"
-#: wizards.py:345
+#: wizards.py:346
msgid "No"
msgstr "Non"
-#: wizards.py:1338
+#: wizards.py:1362
#, python-format
msgid "[%(app_name)s] Account creation/modification"
msgstr "[%(app_name)s] Création/modification du compte"
@@ -2026,7 +2032,7 @@ msgstr "tickets"
msgid "where the magic happens."
msgstr "c'est là que la magie opère."
-#: templates/window.html:40 templates/blocks/JQueryJqGrid.html:28
+#: templates/window.html:40 templates/blocks/JQueryJqGrid.html:34
#: templates/ishtar/manage_basket.html:12
msgid "Add"
msgstr "Ajouter"
@@ -2048,32 +2054,36 @@ msgstr "Choisissez une région"
msgid "Search and select an item"
msgstr "Rechercher puis sélectionner un élément"
-#: templates/blocks/JQueryJqGrid.html:17 templates/blocks/JQueryJqGrid.html:23
+#: templates/blocks/JQueryJqGrid.html:13
+msgid "Pinned search:"
+msgstr "Recherche épinglée :"
+
+#: templates/blocks/JQueryJqGrid.html:23 templates/blocks/JQueryJqGrid.html:29
#: templates/ishtar/blocks/window_tables/dynamic_documents.html:9
#: templates/ishtar/blocks/window_tables/dynamic_documents.html:12
msgid "Export as CSV"
msgstr "Export en CSV"
-#: templates/blocks/JQueryJqGrid.html:17 templates/blocks/JQueryJqGrid.html:23
+#: templates/blocks/JQueryJqGrid.html:23 templates/blocks/JQueryJqGrid.html:29
#: templates/ishtar/blocks/window_tables/dynamic_documents.html:9
msgid "CSV"
msgstr "CSV"
-#: templates/blocks/JQueryJqGrid.html:18
+#: templates/blocks/JQueryJqGrid.html:24
#: templates/ishtar/blocks/window_tables/dynamic_documents.html:10
msgid "Export as CSV - full"
msgstr "Export en CSV - complet"
-#: templates/blocks/JQueryJqGrid.html:18
+#: templates/blocks/JQueryJqGrid.html:24
#: templates/ishtar/blocks/window_tables/dynamic_documents.html:10
msgid "CSV full"
msgstr "CSV complet"
-#: templates/blocks/JQueryJqGrid.html:20
+#: templates/blocks/JQueryJqGrid.html:26
msgid "Export as CSV - "
msgstr "Export en CSV - "
-#: templates/blocks/JQueryJqGrid.html:99
+#: templates/blocks/JQueryJqGrid.html:105
#: templates/ishtar/blocks/window_tables/dynamic_documents.html:41
msgid "An error as occured during search. Check your query fields."
msgstr ""
diff --git a/version.py b/version.py
index d56165a04..973f4d13f 100644
--- a/version.py
+++ b/version.py
@@ -1,4 +1,4 @@
-VERSION = (0, 99, 13, 1)
+VERSION = (0, 99, 14)
def get_version():