diff options
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 |
commit | fa105b35025742223d4238c8314287ad9e9f78a5 (patch) | |
tree | a23858d5894be17cb2d0caa08060c66e48994837 | |
parent | da42af85b96513e69db706555fa6ac02b38bcaa7 (diff) | |
parent | 4c5e12584c253b3d84abcf946cb6ce1bae8fcbcb (diff) | |
download | Ishtar-fa105b35025742223d4238c8314287ad9e9f78a5.tar.bz2 Ishtar-fa105b35025742223d4238c8314287ad9e9f78a5.zip |
Merge branch 'v0.9' into wheezy
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> + <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(): |